[emos] 01/02: emoslib-000392+dfsg.1

Alastair McKinstry mckinstry at moszumanska.debian.org
Mon Jun 15 08:56:19 UTC 2015


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to tag debian__000392+dfsg.1-3
in repository emos.

commit f5cdf1cd135bc9df1f3df06cd9a41cf42ab15322
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Thu May 7 11:24:36 2015 +0100

    emoslib-000392+dfsg.1
---
 AUTHORS                                            |    6 +
 LICENSE                                            |  201 +
 Makefile                                           |   21 +
 Makefile.in                                        |   21 +
 NOTICE                                             |   38 +
 README                                             |  313 +
 bufrdc/Makefile                                    |   29 +
 bufrdc/Makefile.in                                 |   35 +
 bufrdc/Makefile.shared                             |   30 +
 bufrdc/README                                      |  156 +
 bufrdc/bbuprs0.F                                   |   83 +
 bufrdc/bbuprs1.F                                   |  180 +
 bufrdc/bbuprs2.F                                   |  253 +
 bufrdc/bbuprs3.F                                   |  115 +
 bufrdc/bbuprt.F                                    |  420 ++
 bufrdc/bbuprtbox.F                                 |  141 +
 bufrdc/bcmatb.F                                    |   20 +
 bufrdc/bcmatbc.F                                   |   17 +
 bufrdc/bcmbef.F                                    |   19 +
 bufrdc/bcmct.F                                     |   23 +
 bufrdc/bcmctc.F                                    |   17 +
 bufrdc/bcmdefc.F                                   |   15 +
 bufrdc/bcmel.F                                     |   19 +
 bufrdc/bcmoff.F                                    |   13 +
 bufrdc/bcmroot.F                                   |   16 +
 bufrdc/bcmrq.F                                     |   19 +
 bufrdc/bcmtab.F                                    |   25 +
 bufrdc/bcmtabc.F                                   |   17 +
 bufrdc/bcmtabload.F                                |   30 +
 bufrdc/bcmtabloadc.F                               |   18 +
 bufrdc/bcmwork.F                                   |   29 +
 bufrdc/bcmwt.F                                     |   36 +
 bufrdc/bcmwtc.F                                    |   17 +
 bufrdc/bcomatb.F                                   |   21 +
 bufrdc/bcomatbc.F                                  |   16 +
 bufrdc/bcombef.F                                   |   19 +
 bufrdc/bcomcom.F                                   |   13 +
 bufrdc/bcomct.F                                    |   23 +
 bufrdc/bcomctc.F                                   |   17 +
 bufrdc/bcomdefc.F                                  |   17 +
 bufrdc/bcomel.F                                    |   18 +
 bufrdc/bcomoff.F                                   |   14 +
 bufrdc/bcomp.F                                     |   20 +
 bufrdc/bcomreq.F                                   |   34 +
 bufrdc/bcomroot.F                                  |   17 +
 bufrdc/bcomrq.F                                    |   19 +
 bufrdc/bcomtab.F                                   |   26 +
 bufrdc/bcomtabc.F                                  |   17 +
 bufrdc/bcomtabload.F                               |   37 +
 bufrdc/bcomtabloadc.F                              |   19 +
 bufrdc/bcomunit.F                                  |   11 +
 bufrdc/bcomwork.F                                  |   29 +
 bufrdc/bcomwt.F                                    |   37 +
 bufrdc/bcomwtc.F                                   |   17 +
 bufrdc/bcprq.F                                     |   14 +
 bufrdc/big_endian.F                                |   35 +
 bufrdc/btable.F                                    |  222 +
 bufrdc/btable1.F                                   |  221 +
 bufrdc/bu_check_s4s.F                              |  155 +
 bufrdc/buaug.F                                     |  225 +
 bufrdc/bubox.F                                     |  533 ++
 bufrdc/bucrekey.F                                  |  220 +
 bufrdc/bucrkey.F                                   |  279 +
 bufrdc/buedd.F                                     |  362 ++
 bufrdc/buens0.F                                    |  144 +
 bufrdc/buens1.F                                    |  424 ++
 bufrdc/buens2.F                                    |  202 +
 bufrdc/buens3.F                                    |  199 +
 bufrdc/buens4.F                                    | 1014 ++++
 bufrdc/buens5.F                                    |  207 +
 bufrdc/buepmrk.F                                   |  661 +++
 bufrdc/buepmrkc.F                                  |  664 +++
 bufrdc/buepwt.F                                    |  294 +
 bufrdc/buepwtc.F                                   |  291 +
 bufrdc/buerr.F                                     |  132 +
 bufrdc/buetab.F                                    |  291 +
 bufrdc/buetd.F                                     |  342 ++
 bufrdc/buetdr.F                                    |  157 +
 bufrdc/buevar.F                                    |  237 +
 bufrdc/buexs0.F                                    |  184 +
 bufrdc/buexs1.F                                    |  593 ++
 bufrdc/buexs2.F                                    |  257 +
 bufrdc/buexs3.F                                    |  516 ++
 bufrdc/buexs33.F                                   |  135 +
 bufrdc/buexs3p.F                                   |  165 +
 bufrdc/buexs4.F                                    |  869 +++
 bufrdc/buexs5.F                                    |  108 +
 bufrdc/bufren.F                                    |  314 +
 bufrdc/bufrex.F                                    |  347 ++
 bufrdc/bugbts.F                                    |  299 +
 bufrdc/bugbytesR4.F                                |   63 +
 bufrdc/bugbytesR8.F                                |   63 +
 bufrdc/buget_opera_image.F                         |  314 +
 bufrdc/bugetbm.F                                   |  217 +
 bufrdc/bugtll.F                                    |  267 +
 bufrdc/buivar.F                                    |  209 +
 bufrdc/bunexs.F                                    |   83 +
 bufrdc/bunpck.F                                    |  101 +
 bufrdc/bunpks.F                                    |  104 +
 bufrdc/buoctn.F                                    |  133 +
 bufrdc/buoper.F                                    |  854 +++
 bufrdc/buoperc.F                                   |  852 +++
 bufrdc/bupck.F                                     |  127 +
 bufrdc/bupkey.F                                    |  437 ++
 bufrdc/bupks.F                                     |  107 +
 bufrdc/bupmrk.F                                    |  738 +++
 bufrdc/buprco.F                                    |  861 +++
 bufrdc/buprq.F                                     |   89 +
 bufrdc/buprs0.F                                    |   83 +
 bufrdc/buprs1.F                                    |  182 +
 bufrdc/buprs2.F                                    |  256 +
 bufrdc/buprs3.F                                    |  114 +
 bufrdc/buprt.F                                     |  375 ++
 bufrdc/buprtbox.F                                  |  146 +
 bufrdc/burep.F                                     |  323 ++
 bufrdc/burepc.F                                    |  312 +
 bufrdc/burqc.F                                     | 1106 ++++
 bufrdc/burquc.F                                    | 1234 ++++
 bufrdc/bus012.F                                    |  205 +
 bufrdc/bus0123.F                                   |  212 +
 bufrdc/busbytesR4.F                                |   63 +
 bufrdc/busbytesR8.F                                |   63 +
 bufrdc/busel.F                                     |   96 +
 bufrdc/busel2.F                                    |  115 +
 bufrdc/buset.F                                     |   93 +
 bufrdc/busrp.F                                     |  465 ++
 bufrdc/busrq.F                                     |  115 +
 bufrdc/bustdr.F                                    |  158 +
 bufrdc/bustop.F                                    |   79 +
 bufrdc/buuatb.F                                    |  394 ++
 bufrdc/buukey.F                                    |  395 ++
 bufrdc/buunp.F                                     |   89 +
 bufrdc/buunps.F                                    |   90 +
 bufrdc/buupwt.F                                    |  341 ++
 bufrdc/buxdes.F                                    |  171 +
 bufrdc/ctable.F                                    |  261 +
 bufrdc/ctable1.F                                   |  216 +
 bufrdc/dtable.F                                    |  213 +
 bufrdc/dtable1.F                                   |  212 +
 bufrdc/fmmh.F                                      |  259 +
 bufrdc/get_free_unit.F                             |   67 +
 bufrdc/get_name_unit.F                             |  122 +
 bufrdc/get_tables.F                                |  105 +
 bufrdc/get_tables1.F                               |  107 +
 bufrdc/getcode.F                                   |  116 +
 bufrdc/getflag.F                                   |  135 +
 bufrdc/mbufr_mars_filter.F                         |  246 +
 bufrdc/parameter.F                                 |   18 +
 bufrdc/setlalo.F                                   |  254 +
 bufrdc/sources                                     |  106 +
 bufrdc/swap_bytes4.F                               |   36 +
 bufrdc/swap_bytes8.F                               |   42 +
 bufrtables/B0000000000098000000.TXT                |  458 ++
 bufrtables/B0000000000098002001.TXT                |  649 +++
 bufrtables/B0000000000098006000.TXT                | 1283 +++++
 bufrtables/B0000000000098006001.TXT                |  985 ++++
 bufrtables/B0000000000098013001.TXT                | 1589 +++++
 bufrtables/B0000000000098014001.TXT                | 1616 ++++++
 bufrtables/B0000000000254011001.TXT                | 1349 +++++
 bufrtables/C0000000000000014000.TXT                | 6040 +++++++++++++++++++
 bufrtables/C0000000000098000000.TXT                | 6065 ++++++++++++++++++++
 bufrtables/C0000000000098002001.TXT                | 6065 ++++++++++++++++++++
 bufrtables/C0000000000098006000.TXT                | 6065 ++++++++++++++++++++
 bufrtables/C0000000000098006001.TXT                | 6020 +++++++++++++++++++
 bufrtables/C0000000000098013001.TXT                | 6062 +++++++++++++++++++
 bufrtables/C0000000000098014001.TXT                | 6040 +++++++++++++++++++
 bufrtables/D0000000000000014000.TXT                | 4859 ++++++++++++++++
 bufrtables/D0000000000098000000.TXT                |  787 +++
 bufrtables/D0000000000098002001.TXT                |  914 +++
 bufrtables/D0000000000098006000.TXT                | 2077 +++++++
 bufrtables/D0000000000098006001.TXT                | 2102 +++++++
 bufrtables/D0000000000098013001.TXT                | 4820 ++++++++++++++++
 bufrtables/D0000000000098014001.TXT                | 5115 +++++++++++++++++
 bufrtables/Makefile                                |   76 +
 bufrtables/Makefile.in                             |   81 +
 bufrtables/bufr2txt_tables.f                       |  592 ++
 bufrtables/bufr_split_tables.f                     |  147 +
 bufrtables/links.sh                                |   77 +
 bufrtables/txt2bufr_tables.f                       | 1205 ++++
 build_library                                      |  266 +
 config/config.CRAY                                 |   18 +
 config/config.FUJITSU                              |   25 +
 config/config.FUJITSU.in                           |   25 +
 config/config.FUJITSUR64                           |   24 +
 config/config.FUJITSUR64.in                        |   24 +
 config/config.VPP5000                              |   24 +
 config/config.VPP5000R64                           |   24 +
 config/config.darwin                               |   26 +
 config/config.darwin.in                            |   26 +
 config/config.darwinA64                            |   26 +
 config/config.darwinA64.in                         |   26 +
 config/config.darwinR64                            |   26 +
 config/config.darwinR64.in                         |   26 +
 config/config.darwinR64A64                         |   26 +
 config/config.darwinR64A64.in                      |   26 +
 config/config.darwin_g95A64.in                     |   25 +
 config/config.darwin_g95R64A64.in                  |   25 +
 config/config.darwin_g95R64_i486.in                |   25 +
 config/config.darwin_g95_i486.in                   |   25 +
 config/config.darwin_gfortranR64_i486.in           |   27 +
 config/config.darwin_gfortran_i486.in              |   28 +
 config/config.decalpha                             |   14 +
 config/config.decalpha.in                          |   14 +
 config/config.decalphaR64                          |   14 +
 config/config.decalphaR64.in                       |   14 +
 config/config.decmips                              |   13 +
 config/config.hp                                   |   16 +
 config/config.hpia64                               |   24 +
 config/config.hpia64.in                            |   24 +
 config/config.hpia64R64                            |   22 +
 config/config.hpia64R64.in                         |   22 +
 config/config.hppa                                 |   28 +
 config/config.hppa.in                              |   28 +
 config/config.hppaR64                              |   25 +
 config/config.hppaR64.in                           |   25 +
 config/config.i686R64                              |   21 +
 config/config.i86pc                                |   16 +
 config/config.i86pc.in                             |   16 +
 config/config.i86pcR64                             |   16 +
 config/config.i86pcR64.in                          |   16 +
 config/config.ibm_power4                           |   25 +
 config/config.ibm_power4.in                        |   24 +
 config/config.ibm_power4R64                        |   24 +
 config/config.ibm_power4R64.in                     |   23 +
 config/config.ibm_power6                           |   25 +
 config/config.ibm_power6.in                        |   24 +
 config/config.ibm_power6R64                        |   27 +
 config/config.ibm_power6R64.in                     |   24 +
 config/config.ibm_power7                           |   25 +
 config/config.ibm_power7.in                        |   24 +
 config/config.ibm_power7R64                        |   27 +
 config/config.ibm_power7R64.in                     |   24 +
 config/config.itanium                              |   22 +
 config/config.itanium.in                           |   21 +
 config/config.itaniumR64                           |   24 +
 config/config.itaniumR64.in                        |   23 +
 config/config.linux                                |   22 +
 config/config.linux.in                             |   24 +
 config/config.linuxA64                             |   21 +
 config/config.linuxA64.in                          |   24 +
 config/config.linuxR64                             |   21 +
 config/config.linuxR64.in                          |   23 +
 config/config.linuxR64A64                          |   21 +
 config/config.linuxR64A64.in                       |   24 +
 config/config.linuxR64_shared                      |   28 +
 config/config.linux_amd                            |   28 +
 config/config.linux_amd.in                         |   24 +
 config/config.linux_amdA64                         |   25 +
 config/config.linux_amdA64.in                      |   24 +
 config/config.linux_amdR64                         |   31 +
 config/config.linux_amdR64.in                      |   23 +
 config/config.linux_amdR64A64                      |   28 +
 config/config.linux_amdR64A64.in                   |   24 +
 config/config.linux_core2                          |   28 +
 config/config.linux_core2.in                       |   24 +
 config/config.linux_core2A64                       |   25 +
 config/config.linux_core2A64.in                    |   24 +
 config/config.linux_core2R64                       |   31 +
 config/config.linux_core2R64.in                    |   23 +
 config/config.linux_core2R64A64                    |   28 +
 config/config.linux_core2R64A64.in                 |   24 +
 config/config.linux_g95.in                         |   23 +
 config/config.linux_g95A64.in                      |   24 +
 config/config.linux_g95R64.in                      |   24 +
 config/config.linux_g95R64A64.in                   |   24 +
 config/config.linux_gfortran                       |   28 +
 config/config.linux_gfortran.in                    |   27 +
 config/config.linux_gfortranA64                    |   27 +
 config/config.linux_gfortranA64.in                 |   27 +
 config/config.linux_gfortranR64                    |   27 +
 config/config.linux_gfortranR64.in                 |   26 +
 config/config.linux_gfortranR64A64                 |   30 +
 config/config.linux_gfortranR64A64.in              |   27 +
 config/config.linux_gnu                            |   24 +
 config/config.linux_gnu.in                         |   23 +
 config/config.linux_gnuA64                         |   24 +
 config/config.linux_gnuA64.in                      |   24 +
 config/config.linux_gnuR64                         |   24 +
 config/config.linux_gnuR64.in                      |   24 +
 config/config.linux_gnuR64A64                      |   24 +
 config/config.linux_gnuR64A64.in                   |   24 +
 config/config.linux_intel                          |   22 +
 config/config.linux_intel.in                       |   22 +
 config/config.linux_intelA64.in                    |   22 +
 config/config.linux_intelR64                       |   24 +
 config/config.linux_intelR64.in                    |   23 +
 config/config.linux_intelR64A64.in                 |   23 +
 config/config.linux_pgf90                          |   28 +
 config/config.linux_pgf90R64                       |   34 +
 config/config.linux_x86_64                         |   28 +
 config/config.linux_x86_64.in                      |   25 +
 config/config.linux_x86_64A64                      |   28 +
 config/config.linux_x86_64A64.in                   |   25 +
 config/config.linux_x86_64R64                      |   31 +
 config/config.linux_x86_64R64.in                   |   25 +
 config/config.linux_x86_64R64A64                   |   31 +
 config/config.linux_x86_64R64A64.in                |   25 +
 config/config.mac_intel                            |   23 +
 config/config.mac_intel.in                         |   23 +
 config/config.mac_intelR64                         |   23 +
 config/config.mac_intelR64.in                      |   23 +
 config/config.ppc                                  |   28 +
 config/config.ppc.in                               |   28 +
 config/config.ppcR64                               |   27 +
 config/config.ppcR64.in                            |   27 +
 config/config.ppcR64_G5                            |   26 +
 config/config.ppcR64_G5.in                         |   26 +
 config/config.ppc_G5                               |   26 +
 config/config.ppc_G5.in                            |   26 +
 config/config.ppc_g95.in                           |   25 +
 config/config.ppc_g95R64.in                        |   25 +
 config/config.ppc_g95R64_G5.in                     |   25 +
 config/config.ppc_g95_G5.in                        |   25 +
 config/config.ppc_gfortran.in                      |   28 +
 config/config.ppc_gfortranR64.in                   |   27 +
 config/config.ppc_gfortranR64_G5.in                |   26 +
 config/config.ppc_gfortran_G5.in                   |   26 +
 config/config.rs6000                               |   24 +
 config/config.rs6000.in                            |   22 +
 config/config.rs6000A64                            |   27 +
 config/config.rs6000A64.in                         |   24 +
 config/config.rs6000R64                            |   25 +
 config/config.rs6000R64.in                         |   20 +
 config/config.rs6000R64A64                         |   28 +
 config/config.rs6000R64A64.in                      |   24 +
 config/config.sgimips                              |   28 +
 config/config.sgimips.in                           |   28 +
 config/config.sgimipsR64                           |   29 +
 config/config.sgimipsR64.in                        |   29 +
 config/config.sun4                                 |   16 +
 config/config.sun4.in                              |   16 +
 config/config.sun4R64                              |   16 +
 config/config.sun4R64.in                           |   16 +
 config/config.sun4_gnu                             |   24 +
 config/config.sun4_gnu.in                          |   23 +
 config/config.sun4_gnuR64                          |   24 +
 config/config.sun4_gnuR64.in                       |   24 +
 config/config.super-uxR64.in                       |   23 +
 config/fortran2c                                   |    7 +
 config/fortran2c_g95                               |    3 +
 config/fortran2c_gfortran                          |    3 +
 config/fortran2c_gnu                               |    3 +
 config/fortran_underscore                          |    2 +
 config/fortran_underscorewith                      |    2 +
 crexdc/Makefile                                    |   30 +
 crexdc/Makefile.in                                 |   35 +
 crexdc/Makefile.shared                             |   30 +
 crexdc/crex_get_name_unit.F                        |  103 +
 crexdc/crexdes.F                                   |  265 +
 crexdc/crexedd.F                                   |  309 +
 crexdc/crexen.F                                    |  521 ++
 crexdc/crexepwt.F                                  |  294 +
 crexdc/crexerr.F                                   |  115 +
 crexdc/crexetab.F                                  |  515 ++
 crexdc/crexetd.F                                   |  305 +
 crexdc/crexetdr.F                                  |  195 +
 crexdc/crexex.F                                    |  261 +
 crexdc/crexinit.F                                  |  200 +
 crexdc/crexivar.F                                  |  117 +
 crexdc/crexoper.F                                  |  222 +
 crexdc/crexprco.F                                  |  219 +
 crexdc/crexprs0.F                                  |   77 +
 crexdc/crexprs1.F                                  |  195 +
 crexdc/crexprt.F                                   |  422 ++
 crexdc/crexrep.F                                   |  339 ++
 crexdc/crexs0.F                                    |  145 +
 crexdc/crexs1.F                                    |  445 ++
 crexdc/crexs2.F                                    |  324 ++
 crexdc/crexs2data.F                                |  442 ++
 crexdc/crexs5.F                                    |   65 +
 crexdc/crexsel.F                                   |  108 +
 crexdc/crexsel2.F                                  |  124 +
 crexdc/crexsrp.F                                   |  381 ++
 crexdc/crexstdr.F                                  |  179 +
 crexdc/crextables.F                                |  243 +
 crexdc/crextb.F                                    |  525 ++
 crexdc/crexupwt.F                                  |  323 ++
 crexdc/dec2octal.F                                 |   77 +
 crexdc/extgrp.F                                    |  114 +
 crexdc/extgrpc.F                                   |   80 +
 crexdc/get_units.F                                 |   89 +
 crexdc/nextgrp.F                                   |  105 +
 crexdc/nextprt.F                                   |  101 +
 crexdc/nextsec.F                                   |   84 +
 crexdc/nextsep.F                                   |  103 +
 crexdc/nextsubset.F                                |   90 +
 crexdc/octal2dec.F                                 |   75 +
 crexdc/sources                                     |   45 +
 crextables/B000101                                 | 1197 ++++
 crextables/B000103                                 | 1197 ++++
 crextables/B000203                                 | 1197 ++++
 crextables/B000207                                 | 1210 ++++
 crextables/D000101                                 | 2128 +++++++
 crextables/D000103                                 | 2128 +++++++
 crextables/D000203                                 | 2128 +++++++
 crextables/D000207                                 | 2326 ++++++++
 crextables/units.config.dat                        |   59 +
 data/850ght.grib                                   |  Bin 0 -> 12480 bytes
 data/ISMD01_OKPR.bufr                              |  Bin 0 -> 2956 bytes
 data/ISMD01_OKPR.crex                              |  296 +
 data/IUSD40_OKLI.bufr                              |  Bin 0 -> 6398 bytes
 data/IUSD40_OKLI.crex                              |  303 +
 data/acar.crex                                     |    8 +
 data/airep.bufr                                    |  Bin 0 -> 229118 bytes
 data/amdar.crex                                    |    5 +
 data/buoy.crex                                     |    6 +
 data/gaussian.grib                                 |  Bin 0 -> 2040 bytes
 data/latlon.grib                                   |  Bin 0 -> 960 bytes
 data/reduced_gg.grib                               |  Bin 0 -> 1688760 bytes
 data/satob.crex                                    |   15 +
 data/spectral.grib                                 |  Bin 0 -> 9240 bytes
 data/synop.crex                                    |    7 +
 data/synop_ship.crex                               |    6 +
 data/temp.crex                                     |   41 +
 data/tigge.grib2                                   |  Bin 0 -> 428963 bytes
 data/wmo_aws.bufr                                  |  Bin 0 -> 296 bytes
 data/wmo_aws_3.bufr                                |  Bin 0 -> 321 bytes
 data/wmo_buoy.bufr                                 |  Bin 0 -> 419 bytes
 data/wmo_climat_synop.bufr                         |  Bin 0 -> 524 bytes
 data/wmo_climat_synop_2.bufr                       |  Bin 0 -> 524 bytes
 data/wmo_sarep.bufr                                |  Bin 0 -> 146 bytes
 data/wmo_synop.bufr                                |  Bin 0 -> 332 bytes
 data/wmo_synop_1.bufr                              |  Bin 0 -> 250 bytes
 data/wmo_temp.bufr                                 |  Bin 0 -> 1522 bytes
 data/wmo_temp_2.bufr                               |  Bin 0 -> 1822 bytes
 examples/bufr/Makefile                             |   46 +
 examples/bufr/Makefile.in                          |   50 +
 examples/bufr/README                               |   74 +
 examples/bufr/bufr2crex.F                          |  605 ++
 examples/bufr/bufr_decode.c                        |  182 +
 examples/bufr/create_bufr.F                        |  417 ++
 examples/bufr/crex2bufr.F                          |  499 ++
 examples/bufr/decode_bufr.F                        |  623 ++
 examples/bufr/decode_bufr_image.F                  |  262 +
 examples/bufr/tdexp.F                              |  187 +
 examples/bufr/test.sh                              |   12 +
 examples/crex/Makefile                             |   40 +
 examples/crex/Makefile.in                          |   46 +
 examples/crex/bufr2crex.F                          |  605 ++
 examples/crex/create_crex.F                        |  296 +
 examples/crex/crex2bufr.F                          |  499 ++
 examples/crex/crextdexp.F                          |  167 +
 examples/crex/decode_crex.F                        |  280 +
 examples/crex/test.sh                              |   12 +
 examples/fft/Makefile                              |   26 +
 examples/fft/Makefile.in                           |   29 +
 examples/fft/fft.f                                 |   30 +
 examples/gribex/Makefile                           |   26 +
 examples/gribex/Makefile.in                        |   30 +
 examples/gribex/README                             |   36 +
 examples/gribex/agrdemo.F                          |  265 +
 examples/gribex/find_t.F                           |  101 +
 examples/gribex/test.sh                            |   14 +
 examples/interpolation/Makefile                    |   24 +
 examples/interpolation/Makefile.in                 |   28 +
 examples/interpolation/interpolation_example.F     |  142 +
 examples/interpolation/test.sh                     |   18 +
 examples/interpolation_grib_api/Makefile           |   27 +
 examples/interpolation_grib_api/Makefile.in        |   34 +
 .../interpolation_grib_api/interpolation_example.F |  151 +
 examples/interpolation_grib_api/test.sh            |   18 +
 fft/Makefile                                       |   30 +
 fft/Makefile.in                                    |   34 +
 fft/Makefile.shared                                |   30 +
 fft/fax.f                                          |   78 +
 fft/fft99.f                                        |  218 +
 fft/fft991.f                                       |  218 +
 fft/fftrig.f                                       |   57 +
 fft/gpfa.f                                         |   98 +
 fft/gpfa2.F                                        |  834 +++
 fft/gpfa2.f                                        |  835 +++
 fft/gpfa3.F                                        |  375 ++
 fft/gpfa3.f                                        |  376 ++
 fft/gpfa5.F                                        |  719 +++
 fft/gpfa5.f                                        |  708 +++
 fft/qpassf.f                                       |  920 +++
 fft/qpassm.f                                       |  779 +++
 fft/rpassf.f                                       |  910 +++
 fft/rpassm.f                                       |  790 +++
 fft/set99.f                                        |   65 +
 fft/setgpfa.f                                      |   72 +
 fft/sources                                        |   20 +
 fft/syminv.f                                       |  111 +
 grib_api_merging/Makefile                          |   32 +
 grib_api_merging/Makefile.in                       |   40 +
 grib_api_merging/copy_spec_from_ksec.c             |  249 +
 grib_api_merging/describe_input_field.c            |  726 +++
 grib_api_merging/emos.c                            |  139 +
 grib_api_merging/emos.h                            |   21 +
 grib_api_merging/example.c                         |  184 +
 grib_api_merging/fortint.h                         |   30 +
 grib_api_merging/intf2.c                           |  301 +
 grib_api_merging/intuvp2.c                         |  435 ++
 grib_api_merging/intuvs2.c                         |  489 ++
 grib_api_merging/intvect2.c                        |  415 ++
 grib_api_merging/sources                           |   12 +
 gribex/0-INDEX-0                                   |  265 +
 gribex/ECMWFdefinitions.c                          | 3721 ++++++++++++
 gribex/ECMWFdefinitions.h                          |  353 ++
 gribex/Makefile                                    |   31 +
 gribex/Makefile.in                                 |   37 +
 gribex/Makefile.shared                             |   32 +
 gribex/README                                      |    5 +
 gribex/abortx.F                                    |  153 +
 gribex/analsw.F                                    |  397 ++
 gribex/blckcr.F                                    |  165 +
 gribex/bt_cray.F                                   | 1153 ++++
 gribex/bt_cyber.F                                  |  837 +++
 gribex/bt_ibm.F                                    |  602 ++
 gribex/bt_ibm_bal.bal                              |  279 +
 gribex/bt_sun.F                                    |  602 ++
 gribex/bt_sun_c.c                                  |  119 +
 gribex/bt_vax.F                                    |  992 ++++
 gribex/bt_vax_mar.mar                              |   29 +
 gribex/btcray.special                              | 1141 ++++
 gribex/btcyber.special                             |  825 +++
 gribex/btibm.special                               |  869 +++
 gribex/btsun.special                               |  698 +++
 gribex/btvax.special                               | 1009 ++++
 gribex/bufrin.F                                    |   40 +
 gribex/c2bitw.F                                    |  126 +
 gribex/c2cwid.F                                    |  629 ++
 gribex/c2dosd.F                                    |  666 +++
 gribex/c2gene.F                                    |  931 +++
 gribex/c2ordr.F                                    | 1527 +++++
 gribex/c2pack.F                                    |  761 +++
 gribex/c2pkvw.F                                    |  613 ++
 gribex/c2rnge.F                                    |  161 +
 gribex/c2rows.F                                    |  464 ++
 gribex/calcop.F                                    |  292 +
 gribex/ccf1cr.F                                    |  537 ++
 gribex/cgsloop.c                                   |  124 +
 gribex/cheknum.F                                   |   65 +
 gribex/chktab2.F                                   |  257 +
 gribex/cmpck.F                                     |  140 +
 gribex/cnbits.F                                    |  127 +
 gribex/codegb.F                                    | 1430 +++++
 gribex/codegc.F                                    | 1446 +++++
 gribex/codegr.F                                    | 1240 ++++
 gribex/codeps.F                                    |  848 +++
 gribex/comars.h                                    |  165 +
 gribex/comcomm.h                                   |   86 +
 gribex/comgrb.h                                    |   13 +
 gribex/confp.F                                     |   96 +
 gribex/confp2.F                                    |  186 +
 gribex/confp3.F                                    |  308 +
 gribex/confpa.F                                    |   91 +
 gribex/csect4.F                                    |  533 ++
 gribex/csgnbt.F                                    |   63 +
 gribex/csgnbt.c                                    |   40 +
 gribex/d2ordr.F                                    | 1760 ++++++
 gribex/d2rosd.F                                    |  330 ++
 gribex/decext.F                                    |  464 ++
 gribex/decfp.F                                     |   59 +
 gribex/decfp2.F                                    |  177 +
 gribex/decogb.F                                    |  390 ++
 gribex/decogc.F                                    |  912 +++
 gribex/decogd.F                                    |  971 ++++
 gribex/decogr.F                                    |  720 +++
 gribex/decops.F                                    |  897 +++
 gribex/decops2.F                                   |  891 +++
 gribex/delsp.F                                     |  306 +
 gribex/dggsec2.F                                   |  272 +
 gribex/dlasec2.F                                   |  284 +
 gribex/dllsec2.F                                   |  275 +
 gribex/dmesec2.F                                   |  311 +
 gribex/docsec2.F                                   |  157 +
 gribex/dpssec2.F                                   |  261 +
 gribex/dsect4.F                                    |  394 ++
 gribex/dsect4a.F                                   |  533 ++
 gribex/dsgnbt.F                                    |   65 +
 gribex/dsgnbt.c                                    |   41 +
 gribex/dshsec2.F                                   |  154 +
 gribex/dsvsec2.F                                   |  263 +
 gribex/dswmrs.F                                    |  246 +
 gribex/ecdef1.F                                    |  246 +
 gribex/ecdef1.h                                    |  102 +
 gribex/ecdef10.F                                   |  307 +
 gribex/ecdef10.h                                   |  102 +
 gribex/ecdef11.F                                   |  250 +
 gribex/ecdef11.h                                   |   63 +
 gribex/ecdef12.F                                   |  297 +
 gribex/ecdef12.h                                   |  123 +
 gribex/ecdef13.F                                   |  344 ++
 gribex/ecdef13.h                                   |   88 +
 gribex/ecdef14.F                                   |  277 +
 gribex/ecdef14.h                                   |   63 +
 gribex/ecdef15.F                                   |  207 +
 gribex/ecdef15.h                                   |   70 +
 gribex/ecdef16.F                                   |  225 +
 gribex/ecdef16.h                                   |   66 +
 gribex/ecdef17.F                                   |  288 +
 gribex/ecdef17.h                                   |   86 +
 gribex/ecdef18.F                                   |  255 +
 gribex/ecdef18.h                                   |   69 +
 gribex/ecdef19.F                                   |  264 +
 gribex/ecdef19.h                                   |   57 +
 gribex/ecdef2.F                                    |  299 +
 gribex/ecdef2.h                                    |   53 +
 gribex/ecdef21.h                                   |  114 +
 gribex/ecdef3.F                                    |  195 +
 gribex/ecdef3.h                                    |   32 +
 gribex/ecdef4.F                                    |  492 ++
 gribex/ecdef4.h                                    |  271 +
 gribex/ecdef5.F                                    |  320 ++
 gribex/ecdef5.h                                    |   41 +
 gribex/ecdef50.F                                   |  230 +
 gribex/ecdef50.h                                   |   76 +
 gribex/ecdef6.F                                    |  263 +
 gribex/ecdef6.h                                    |   83 +
 gribex/ecdef7.F                                    |  238 +
 gribex/ecdef7.h                                    |   55 +
 gribex/ecdef8.F                                    |  178 +
 gribex/ecdef8.h                                    |   32 +
 gribex/ecdef9.F                                    |  345 ++
 gribex/ecdef9.h                                    |   80 +
 gribex/ecdf190.h                                   |   65 +
 gribex/ecdf191.F                                   |  362 ++
 gribex/ecdf191.h                                   |   65 +
 gribex/ecloc1.F                                    |  224 +
 gribex/eggsec2.F                                   |  254 +
 gribex/elasec2.F                                   |  264 +
 gribex/ellsec2.F                                   |  271 +
 gribex/emesec2.F                                   |  314 +
 gribex/emoscyc.F                                   |  154 +
 gribex/emoslibVersion.c                            |   15 +
 gribex/eocsec2.F                                   |  176 +
 gribex/eocsec2.h                                   |   42 +
 gribex/epssec2.F                                   |  246 +
 gribex/eshsec2.F                                   |  164 +
 gribex/esvsec2.F                                   |  251 +
 gribex/exscal.F                                    |  140 +
 gribex/extmap.F                                    |  464 ++
 gribex/findLocalDefinitionFile.c                   |  111 +
 gribex/fortint.h                                   |   35 +
 gribex/fortranInterface.c                          |  524 ++
 gribex/fortvalues.h                                |   21 +
 gribex/ftn1cr.F                                    |  192 +
 gribex/gbitmap.F                                   |  258 +
 gribex/gbyte.F                                     |   67 +
 gribex/gbytes.F                                    |   76 +
 gribex/gdecode.c                                   | 1512 +++++
 gribex/gdecode.h                                   |  424 ++
 gribex/gdecode1.c                                  |   36 +
 gribex/gdecode1.h                                  |   31 +
 gribex/gdecode2.c                                  |  197 +
 gribex/gdecode2.h                                  |   93 +
 gribex/gdecodeStruct.h                             |  366 ++
 gribex/genbin.F                                    |   63 +
 gribex/gendir.F                                    |  215 +
 gribex/gengrib.F                                   |  246 +
 gribex/getValues.c                                 |  391 ++
 gribex/getValues.h                                 |  184 +
 gribex/getchd.F                                    |  202 +
 gribex/getfb2.F                                    |  203 +
 gribex/getfpd.F                                    |  205 +
 gribex/getib1.F                                    |  194 +
 gribex/getib2.F                                    |  197 +
 gribex/getib3.F                                    |  199 +
 gribex/getind.F                                    |  201 +
 gribex/getlgd.F                                    |  205 +
 gribex/getsetValues.c                              |  449 ++
 gribex/getsetValues.h                              |  389 ++
 gribex/getsys.F                                    |  170 +
 gribex/getusr.F                                    |  170 +
 gribex/grbcom.h                                    |   38 +
 gribex/grchk1.F                                    |  950 +++
 gribex/grchk2.F                                    |  658 +++
 gribex/grchk3.F                                    |  201 +
 gribex/grchk4.F                                    |  246 +
 gribex/grib_int_t.h                                |   27 +
 gribex/gribex.F                                    | 5086 ++++++++++++++++
 gribex/gribex.h                                    | 1527 +++++
 gribex/gribin.F                                    |   49 +
 gribex/gribnum.F                                   |  124 +
 gribex/groutpt.F                                   |  112 +
 gribex/grpr190.c                                   |   76 +
 gribex/grprs.h                                     |   16 +
 gribex/grprs0.F                                    |  114 +
 gribex/grprs1.F                                    | 1466 +++++
 gribex/grprs1b.F                                   | 1268 ++++
 gribex/grprs2.F                                    |  546 ++
 gribex/grprs3.F                                    |  130 +
 gribex/grprs4.F                                    |  247 +
 gribex/grprs4w.F                                   |  121 +
 gribex/grsdbg.F                                    |  132 +
 gribex/grsdef.F                                    |  309 +
 gribex/grsmax.F                                    |  140 +
 gribex/grsmkp.F                                    |  138 +
 gribex/grsmok.F                                    |  136 +
 gribex/grsn2o.F                                    |  135 +
 gribex/grsref.F                                    |  144 +
 gribex/grsrnd.F                                    |  143 +
 gribex/grsubc.F                                    |  133 +
 gribex/grsvck.F                                    |  142 +
 gribex/grsx2o.F                                    |  136 +
 gribex/gsbite.F                                    |  292 +
 gribex/gscale.F                                    |  255 +
 gribex/handleLocalDefinitions.c                    | 1601 ++++++
 gribex/handleLocalDefinitions.h                    |  103 +
 gribex/inscal.F                                    |  153 +
 gribex/insmp1.F                                    |  406 ++
 gribex/insmp2.F                                    |  311 +
 gribex/inxbit.F                                    |  241 +
 gribex/inxmap.F                                    |  460 ++
 gribex/jabort.c                                    |   21 +
 gribex/jfree.c                                     |   22 +
 gribex/jmalloc.c                                   |   84 +
 gribex/kwchk1.F                                    |  192 +
 gribex/kwloc1.F                                    |  271 +
 gribex/kwprs1.F                                    |  375 ++
 gribex/l2u1cr.F                                    |  141 +
 gribex/ldc1cr.F                                    |  755 +++
 gribex/lnbfcr.F                                    |  220 +
 gribex/lngbcr.F                                    |  309 +
 gribex/local2.F                                    |  236 +
 gribex/local2c.c                                   |  131 +
 gribex/local2k.F                                   |  105 +
 gribex/make.dep                                    |   36 +
 gribex/maxmin.F                                    |  139 +
 gribex/maxmn2.F                                    |  156 +
 gribex/maxmni.F                                    |  110 +
 gribex/modval.F                                    |   54 +
 gribex/mxmncr.F                                    |   91 +
 gribex/offset.F                                    |  109 +
 gribex/offset2.F                                   |  119 +
 gribex/orefdat.c                                   |   74 +
 gribex/packcf.F                                    |  276 +
 gribex/parval.F                                    |  331 ++
 gribex/prtbin.F                                    |  196 +
 gribex/prtbk1.F                                    |   86 +
 gribex/prtbk2.F                                    |  121 +
 gribex/prtbl1.F                                    |   72 +
 gribex/prtbl2.F                                    |   97 +
 gribex/ptquasi.F                                   |  167 +
 gribex/qu2reg.F                                    |  331 ++
 gribex/qu2reg2.F                                   |  305 +
 gribex/qu2reg3.F                                   |  321 ++
 gribex/reclen.F                                    |  205 +
 gribex/ref2grb.F                                   |  175 +
 gribex/remsp.F                                     |   46 +
 gribex/repchr.F                                    |  162 +
 gribex/revero.F                                    |  263 +
 gribex/rorint.F                                    |  139 +
 gribex/rowina.F                                    |  142 +
 gribex/rowina2.F                                   |  228 +
 gribex/rowina3.F                                   |  318 +
 gribex/rtb.F                                       |   59 +
 gribex/sbyte.F                                     |   77 +
 gribex/sbytes.F                                    |   63 +
 gribex/scm0.F                                      |   61 +
 gribex/search.F                                    |  208 +
 gribex/sencode.c                                   | 2586 +++++++++
 gribex/sencode.h                                   |   63 +
 gribex/sencode1.c                                  |   45 +
 gribex/sencode1.h                                  |   31 +
 gribex/sencode2.c                                  |  223 +
 gribex/sencode2.h                                  |   94 +
 gribex/setpar.F                                    |  118 +
 gribex/sfbits.h                                    |   52 +
 gribex/sort.F                                      |  141 +
 gribex/sortf.F                                     |  218 +
 gribex/sources.CRAY                                |  239 +
 gribex/sources.FUJITSU                             |  233 +
 gribex/sources.VPP5000                             |  233 +
 gribex/sources.decalpha                            |  229 +
 gribex/sources.decmips                             |  228 +
 gribex/sources.hpia64                              |  218 +
 gribex/sources.hppa                                |  218 +
 gribex/sources.ibm_power4                          |  229 +
 gribex/sources.ibm_power6                          |  229 +
 gribex/sources.ibm_power7                          |  229 +
 gribex/sources.itanium                             |  222 +
 gribex/sources.linux                               |  222 +
 gribex/sources.linux_g77                           |  222 +
 gribex/sources.rs6000                              |  229 +
 gribex/sources.sgimips                             |  228 +
 gribex/sources.sun4                                |  228 +
 gribex/swap4.c                                     |   36 +
 gribex/tab2fil.F                                   |  166 +
 gribex/u2l1cr.F                                    |  141 +
 gribex/unbkin.F                                    |  627 ++
 gribex/unbkout.F                                   |  521 ++
 gribex/unblock.F                                   |  110 +
 gribex/uncmpck.F                                   |  141 +
 gribex/unpkcf.F                                    |  268 +
 gribex/valpina.c                                   |  243 +
 gribex/vod2uv.F                                    |  129 +
 gribex/xgrdemo.F                                   |  209 +
 gribex/yyyy2cy.F                                   |   93 +
 gribtables/cen074/local_table_2_version_174        |  180 +
 gribtables/cen074/local_table_2_version_175        |  180 +
 gribtables/cen080/local_table_2_version_201        |  796 +++
 gribtables/cen085/local_table_2_version_001        |  225 +
 gribtables/cen085/local_table_2_version_002        |  225 +
 gribtables/cen085/local_table_2_version_003        |  225 +
 gribtables/cen085/local_table_2_version_128        |  225 +
 gribtables/cen085/local_table_2_version_128.ecmwf  |  225 +
 gribtables/cen085/local_table_2_version_128.mf     |  225 +
 gribtables/local_table_2_version_128               | 1266 ++++
 gribtables/local_table_2_version_129               | 1164 ++++
 gribtables/local_table_2_version_130               |  162 +
 gribtables/local_table_2_version_131               |  384 ++
 gribtables/local_table_2_version_132               |   60 +
 gribtables/local_table_2_version_133               |  558 ++
 gribtables/local_table_2_version_140               |  246 +
 gribtables/local_table_2_version_150               |  198 +
 gribtables/local_table_2_version_151               |  480 ++
 gribtables/local_table_2_version_160               |  654 +++
 gribtables/local_table_2_version_162               |  468 ++
 gribtables/local_table_2_version_170               |  108 +
 gribtables/local_table_2_version_171               | 1110 ++++
 gribtables/local_table_2_version_172               |  222 +
 gribtables/local_table_2_version_173               |  222 +
 gribtables/local_table_2_version_174               |  222 +
 gribtables/local_table_2_version_175               |  186 +
 gribtables/local_table_2_version_180               |  198 +
 gribtables/local_table_2_version_190               |  198 +
 gribtables/local_table_2_version_200               | 1164 ++++
 gribtables/local_table_2_version_201               |  468 ++
 gribtables/local_table_2_version_210               |  672 +++
 gribtables/local_table_2_version_211               |   90 +
 gribtables/local_table_2_version_220               |   12 +
 gribtables/local_table_2_version_228               |   84 +
 gribtables/local_table_2_version_230               |  192 +
 gribtables/local_table_2_version_234               |   30 +
 gribtables/mars2netcdf.cfg                         | 1906 ++++++
 gribtables/wmostd/table_2_version_001              |  771 +++
 gribtables/wmostd/table_2_version_002              |  771 +++
 gribtables/wmostd/table_2_version_003              |  771 +++
 gribtables/wmostd/table_2_version_003.ecmwf        |  771 +++
 gribtables/wmostd/table_2_version_003.mf           |  771 +++
 gribtemplates/localDefinitionTemplate_001_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_007_000_001  |   42 +
 gribtemplates/localDefinitionTemplate_007_002_000  |   42 +
 gribtemplates/localDefinitionTemplate_007_002_001  |   42 +
 gribtemplates/localDefinitionTemplate_007_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_007_098_011  |    1 +
 gribtemplates/localDefinitionTemplate_007_098_018  |    1 +
 gribtemplates/localDefinitionTemplate_0255_098_001 |    1 +
 gribtemplates/localDefinitionTemplate_0255_098_018 |    1 +
 gribtemplates/localDefinitionTemplate_034_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_054_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_058_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_058_098_011  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_004  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_011  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_015  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_016  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_018  |    1 +
 gribtemplates/localDefinitionTemplate_074_098_021  |    1 +
 gribtemplates/localDefinitionTemplate_078_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_078_098_018  |    1 +
 gribtemplates/localDefinitionTemplate_078_098_191  |    1 +
 gribtemplates/localDefinitionTemplate_080_098_028  |    1 +
 gribtemplates/localDefinitionTemplate_080_098_029  |    1 +
 gribtemplates/localDefinitionTemplate_080_098_191  |    1 +
 gribtemplates/localDefinitionTemplate_084_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_085_098_001  |    1 +
 gribtemplates/localDefinitionTemplate_085_098_004  |    1 +
 gribtemplates/localDefinitionTemplate_085_098_015  |    1 +
 gribtemplates/localDefinitionTemplate_085_098_016  |    1 +
 gribtemplates/localDefinitionTemplate_085_098_018  |    1 +
 gribtemplates/localDefinitionTemplate_085_098_021  |    1 +
 gribtemplates/localDefinitionTemplate_098_000_001  |   15 +
 gribtemplates/localDefinitionTemplate_098_000_002  |   27 +
 gribtemplates/localDefinitionTemplate_098_000_003  |   15 +
 gribtemplates/localDefinitionTemplate_098_000_004  |   89 +
 gribtemplates/localDefinitionTemplate_098_000_005  |   19 +
 gribtemplates/localDefinitionTemplate_098_000_006  |   20 +
 gribtemplates/localDefinitionTemplate_098_000_007  |   17 +
 gribtemplates/localDefinitionTemplate_098_000_008  |   14 +
 gribtemplates/localDefinitionTemplate_098_000_009  |   40 +
 gribtemplates/localDefinitionTemplate_098_000_010  |   31 +
 gribtemplates/localDefinitionTemplate_098_000_011  |   25 +
 gribtemplates/localDefinitionTemplate_098_000_013  |   64 +
 .../localDefinitionTemplate_098_000_013.old        |   50 +
 gribtemplates/localDefinitionTemplate_098_000_014  |   20 +
 gribtemplates/localDefinitionTemplate_098_000_015  |   17 +
 gribtemplates/localDefinitionTemplate_098_000_016  |   20 +
 gribtemplates/localDefinitionTemplate_098_000_017  |   22 +
 gribtemplates/localDefinitionTemplate_098_000_018  |   22 +
 gribtemplates/localDefinitionTemplate_098_000_019  |   23 +
 gribtemplates/localDefinitionTemplate_098_000_020  |   15 +
 gribtemplates/localDefinitionTemplate_098_000_021  |   34 +
 gribtemplates/localDefinitionTemplate_098_000_023  |   27 +
 .../localDefinitionTemplate_098_000_023.old        |   27 +
 gribtemplates/localDefinitionTemplate_098_000_024  |   16 +
 gribtemplates/localDefinitionTemplate_098_000_025  |   15 +
 gribtemplates/localDefinitionTemplate_098_000_026  |   17 +
 .../localDefinitionTemplate_098_000_026.old        |   15 +
 gribtemplates/localDefinitionTemplate_098_000_027  |   27 +
 .../localDefinitionTemplate_098_000_027.old        |   26 +
 gribtemplates/localDefinitionTemplate_098_000_028  |   24 +
 gribtemplates/localDefinitionTemplate_098_000_029  |   52 +
 .../localDefinitionTemplate_098_000_029.old        |   27 +
 gribtemplates/localDefinitionTemplate_098_000_030  |   27 +
 gribtemplates/localDefinitionTemplate_098_000_031  |   23 +
 gribtemplates/localDefinitionTemplate_098_000_032  |   30 +
 gribtemplates/localDefinitionTemplate_098_000_035  |   31 +
 gribtemplates/localDefinitionTemplate_098_000_050  |   25 +
 gribtemplates/localDefinitionTemplate_098_000_190  |   19 +
 gribtemplates/localDefinitionTemplate_098_000_191  |   20 +
 gribtemplates/localDefinitionTemplate_098_000_192  |   18 +
 gribtemplates/localDefinitionTemplate_098_231_001  |    1 +
 gribtemplates/localDefinitionTemplate_098_231_004  |    1 +
 gribtemplates/localDefinitionTemplate_098_231_015  |    1 +
 gribtemplates/localDefinitionTemplate_098_231_016  |    1 +
 gribtemplates/localDefinitionTemplate_098_232_001  |    1 +
 gribtemplates/localDefinitionTemplate_098_232_004  |    1 +
 gribtemplates/localDefinitionTemplate_098_232_015  |    1 +
 gribtemplates/localDefinitionTemplate_098_232_016  |    1 +
 gribtemplates/localDefinitionTemplate_098_233_001  |    1 +
 gribtemplates/localDefinitionTemplate_098_233_004  |    1 +
 gribtemplates/localDefinitionTemplate_098_233_015  |    1 +
 gribtemplates/localDefinitionTemplate_098_233_016  |    1 +
 gribtemplates/localDefinitionTemplate_098_234_004  |    1 +
 gribtemplates/localDefinitionTemplate_098_234_015  |    1 +
 gribtemplates/localDefinitionTemplate_098_234_016  |    1 +
 gribtemplates/localDefinitionTemplate_098_235_004  |    1 +
 gribtemplates/localDefinitionTemplate_098_235_015  |    1 +
 gribtemplates/localDefinitionTemplate_098_235_016  |    1 +
 gribtemplates/localDefinitionTemplate_098_240_001  |    1 +
 gribtemplates/localDefinitionTemplate_098_241_001  |    1 +
 gribtemplates/localDefinitionTemplate_098_242_001  |    1 +
 gribtemplates/localDefinitionTemplate_098_243_001  |    1 +
 gribtemplates/localDefinitionTemplate_200_098_191  |    1 +
 gribtemplates/localDefinitionTemplate_214_098_244  |  142 +
 gribtemplates/localDefinitionTemplate_214_098_245  |   28 +
 gribtemplates/localDefinitionTemplate_244_098_001  |    1 +
 install                                            |   61 +
 interpolation/0-INDEX-0                            |  275 +
 interpolation/Imakefile                            |   17 +
 interpolation/Makefile                             |  241 +
 interpolation/Makefile.in                          |   46 +
 interpolation/Makefile.shared                      |   40 +
 interpolation/areachk.F                            |  466 ++
 interpolation/auresol.F                            |  167 +
 interpolation/bitmap.h                             |   39 +
 interpolation/chequal.F                            |   86 +
 interpolation/chkout.F                             |   35 +
 interpolation/chkprec.F                            |  102 +
 interpolation/clear_c.F                            |  187 +
 interpolation/consint.F90                          |  424 ++
 interpolation/createSharedMemoryCoefficients.c     |  195 +
 interpolation/csum.F                               |   84 +
 interpolation/current.h                            |   55 +
 interpolation/ddstyle.F                            |  185 +
 interpolation/debug.h                              |   97 +
 interpolation/defaults_for_table_001               |   11 +
 interpolation/defaults_for_table_128               |   14 +
 interpolation/dssarea.F                            |  509 ++
 interpolation/dummy.F                              |   18 +
 interpolation/dummy2.F                             |   18 +
 interpolation/emosPrecision.c                      |   24 +
 interpolation/estima.F                             |  150 +
 interpolation/eulavgg.F                            |  145 +
 interpolation/fft99.F                              |  330 ++
 interpolation/fftchk.c                             |   63 +
 interpolation/fixarea.F                            |  513 ++
 interpolation/fortdefs.h                           |   22 +
 interpolation/fortint.h                            |   22 +
 interpolation/freecf.F                             |  102 +
 interpolation/funcs.F                              |  145 +
 interpolation/gasetup.F                            |  617 ++
 interpolation/gb2gb.F                              |  367 ++
 interpolation/getconf.F                            |  166 +
 interpolation/gettru.F                             |   30 +
 interpolation/ggintrp.F                            |  305 +
 interpolation/ggrotat.F                            |  235 +
 interpolation/ggvalue.F                            |  153 +
 interpolation/global.F                             |   34 +
 interpolation/gmapbit.c                            |   43 +
 interpolation/grdynam.h                            |  169 +
 interpolation/grfixed.h                            |   77 +
 interpolation/grprs.h                              |   16 +
 interpolation/grspace.h                            |   20 +
 interpolation/hgengg.F                             |  294 +
 interpolation/hgengrd.F                            |  255 +
 interpolation/hgengrw.F                            |  257 +
 interpolation/hgenll.F                             |  254 +
 interpolation/hgenllw.F                            |  257 +
 interpolation/hgetlsm.F                            |  216 +
 interpolation/hirlam.F                             |  653 +++
 interpolation/hirlamw.F                            |  631 ++
 interpolation/hirlsm.F                             |  982 ++++
 interpolation/hll2ll.F                             |  460 ++
 interpolation/hll2llw.F                            |  492 ++
 interpolation/hll2xyz.F                            |   84 +
 interpolation/hnei12.F                             |  462 ++
 interpolation/hneill.F                             |  395 ++
 interpolation/hntfap.F                             |  133 +
 interpolation/hntfaph.F                            |  578 ++
 interpolation/hntfaps.F                            |  463 ++
 interpolation/hntfau.F                             |  137 +
 interpolation/hntfauh.F                            |  530 ++
 interpolation/hntfaus.F                            |  449 ++
 interpolation/hntfbu.F                             |  432 ++
 interpolation/hpshgpw.F                            |  225 +
 interpolation/hrg2gg.F                             |  557 ++
 interpolation/hrg2ggw.F                            |  588 ++
 interpolation/hrg2ll.F                             |  443 ++
 interpolation/hrg2llw.F                            |  520 ++
 interpolation/hsp2gg.F                             |  181 +
 interpolation/hsp2gg2.F                            |  224 +
 interpolation/hsp2gg3.F                            |  191 +
 interpolation/hwts12.F                             |  290 +
 interpolation/hwtsll.F                             |  290 +
 interpolation/hwtslsm.F                            |  487 ++
 interpolation/iafree.F                             |  267 +
 interpolation/iagcntl.F                            |  717 +++
 interpolation/iaidef.F                             |  553 ++
 interpolation/iainit.F                             |  211 +
 interpolation/iaintgg.F                            |  552 ++
 interpolation/iaintll.F                            |  577 ++
 interpolation/iaogdef.F                            |  421 ++
 interpolation/iaoldef.F                            |  471 ++
 interpolation/iarcntl.F                            |  691 +++
 interpolation/iareset.F                            |  307 +
 interpolation/iarmem.F                             |  237 +
 interpolation/ibasini.F                            |  206 +
 interpolation/igalloc.F                            |  346 ++
 interpolation/igbess.F                             |  179 +
 interpolation/igdins.F                             |  309 +
 interpolation/igdiwe.F                             |  384 ++
 interpolation/igglat.F                             |  282 +
 interpolation/iggmem.F                             |  331 ++
 interpolation/iggrid.F                             |  271 +
 interpolation/igint.F                              |  217 +
 interpolation/igintr.F                             |  199 +
 interpolation/iglgrid.F                            |  258 +
 interpolation/iglrev.F                             |  242 +
 interpolation/iglsize.F                            |  410 ++
 interpolation/iglsm01.F                            |  280 +
 interpolation/iglsmb.F                             |  471 ++
 interpolation/iglsmd.F                             |  491 ++
 interpolation/iglsmr.F                             |  232 +
 interpolation/iglsmst.F                            |  336 ++
 interpolation/ignorm.F                             |  207 +
 interpolation/igplsm.F                             |  181 +
 interpolation/igpoleg.F                            |  189 +
 interpolation/igpolew.F                            |  220 +
 interpolation/igprec.F                             |  292 +
 interpolation/igscan.F                             |  359 ++
 interpolation/igsetup.F                            |  630 ++
 interpolation/igsize.F                             |  408 ++
 interpolation/igtog.F                              |  276 +
 interpolation/igtogr.F                             |  258 +
 interpolation/igtran.F                             |  345 ++
 interpolation/init_cm.F                            |  309 +
 interpolation/insane.F                             |  550 ++
 interpolation/intf.F                               |  467 ++
 interpolation/intf.h                               |   30 +
 interpolation/intfa.F                              |  182 +
 interpolation/intfap.F                             |  519 ++
 interpolation/intfau.F                             |  326 ++
 interpolation/intfb.F                              | 1241 ++++
 interpolation/intfbp.F                             |  467 ++
 interpolation/intfbu.F                             |  478 ++
 interpolation/intfc.F                              |  125 +
 interpolation/intin.F                              |  861 +++
 interpolation/intisl.F                             |  329 ++
 interpolation/intisl.h                             |   28 +
 interpolation/intlog.F                             |  163 +
 interpolation/intlog.h                             |   14 +
 interpolation/intlogd.F                            |   90 +
 interpolation/intlogr.F                            |  160 +
 interpolation/intlogs.c                            |  107 +
 interpolation/intocn.F                             | 1070 ++++
 interpolation/intocnu.F                            | 1088 ++++
 interpolation/intout.F                             |  904 +++
 interpolation/intpnum.F                            |  124 +
 interpolation/intuvdh.F                            |  195 +
 interpolation/intuvf.F                             |  321 ++
 interpolation/intuvgh.F                            |  419 ++
 interpolation/intuvp.F                             |  747 +++
 interpolation/intuvph.F                            |  547 ++
 interpolation/intuvs.F                             |  142 +
 interpolation/intuvu.F                             |  861 +++
 interpolation/intuvxh.F                            |  418 ++
 interpolation/intuvy.F                             |  137 +
 interpolation/intvect.F                            |  511 ++
 interpolation/intvecy.F                            |  518 ++
 interpolation/intwave.F                            |  542 ++
 interpolation/intwave2.F                           |  567 ++
 interpolation/intwavu.F                            |  365 ++
 interpolation/irdiwe.F                             |  297 +
 interpolation/irgmem.F                             |  326 ++
 interpolation/irgrid.F                             |  232 +
 interpolation/irgtog.F                             |  275 +
 interpolation/irint.F                              |  212 +
 interpolation/irintr.F                             |  211 +
 interpolation/irlrev.F                             |  244 +
 interpolation/irlsmb.F                             |  481 ++
 interpolation/irprec.F                             |  301 +
 interpolation/irscan.F                             |  306 +
 interpolation/irsize.F                             |  396 ++
 interpolation/iscrsz.F                             |  200 +
 interpolation/islproc.F                            |  290 +
 interpolation/issame.F                             |  261 +
 interpolation/itimer.c                             |  123 +
 interpolation/ixtract.c                            |  112 +
 interpolation/jacobi.F                             |  768 +++
 interpolation/jacobif.F                            |  836 +++
 interpolation/jagggp.F                             |  580 ++
 interpolation/jallgp.F                             |  542 ++
 interpolation/jallwn.F                             |  148 +
 interpolation/jchmod.c                             |   65 +
 interpolation/jdebug.F                             |  147 +
 interpolation/jfindfn.F                            |  121 +
 interpolation/jfindfn3.F                           |  121 +
 interpolation/jfindir.F                            |  101 +
 interpolation/jgetgg.F                             |  402 ++
 interpolation/jgglat.F                             |  401 ++
 interpolation/jindex.c                             |   42 +
 interpolation/jintend.F                            |  129 +
 interpolation/jintgg.F                             |  417 ++
 interpolation/jintll.F                             |  366 ++
 interpolation/jjset99.F                            |  213 +
 interpolation/jmakgg.F                             |  189 +
 interpolation/jmakgg3.F                            |  189 +
 interpolation/jmakll.F                             |  235 +
 interpolation/jmakll3.F                            |  234 +
 interpolation/jmemhan.F                            |  482 ++
 interpolation/jmemhan2.F                           |  491 ++
 interpolation/jmkofgg.F                            |  162 +
 interpolation/jmovgg.F                             |  255 +
 interpolation/jmovll.F                             |  255 +
 interpolation/jmvugg.F                             |  317 +
 interpolation/jmvull.F                             |  261 +
 interpolation/jnorsgg.F                            |  179 +
 interpolation/jnumgg.F                             |  134 +
 interpolation/jnumggq.F                            |  119 +
 interpolation/jopngg.F                             |  322 ++
 interpolation/jopnggf.F                            |  392 ++
 interpolation/jopnggsm.c                           |  460 ++
 interpolation/jopnll.F                             |  328 ++
 interpolation/jopnllf.F                            |  410 ++
 interpolation/jopnllsm.c                           |  541 ++
 interpolation/jparam2.h                            |   17 +
 interpolation/jparams.h                            |   44 +
 interpolation/jreadgg.F                            |  175 +
 interpolation/jreadll.F                            |  179 +
 interpolation/jsgggp.F                             |  426 ++
 interpolation/jsh2sh.F                             |  201 +
 interpolation/jsllgp.F                             |  310 +
 interpolation/jspleg1.F                            |  232 +
 interpolation/jsppole.F                            |  182 +
 interpolation/jstrll.F                             |  317 +
 interpolation/jstrwll.F                            |  364 ++
 interpolation/jsymgg.F                             |  348 ++
 interpolation/jsymll.F                             |  372 ++
 interpolation/jtimer.c                             |   62 +
 interpolation/juvpole.F                            |  219 +
 interpolation/jvod2uv.F                            |  200 +
 interpolation/jwindll.F                            |  459 ++
 interpolation/jwscal.F                             |  154 +
 interpolation/kintrg.F                             |  270 +
 interpolation/knfrom4.F                            |  176 +
 interpolation/krg2rg.F                             |  267 +
 interpolation/krg2rgd.F                            |  314 +
 interpolation/krg2rgu.F                            |  191 +
 interpolation/krg2rgy.F                            |  253 +
 interpolation/krg2rgz.F                            |  235 +
 interpolation/lgrpr4.F                             |  225 +
 interpolation/ll2xyz.F                             |   98 +
 interpolation/lrekam.F                             |  208 +
 interpolation/lsm_red.F                            |  317 +
 interpolation/lsmfld.F                             |  125 +
 interpolation/make.dep                             |  212 +
 interpolation/makemap.c                            |  313 +
 interpolation/makerl.F                             |  209 +
 interpolation/memreq.h                             |   79 +
 interpolation/mkbitmp.F                            |  177 +
 interpolation/mkframe.F                            |  115 +
 interpolation/my_ialloc.c                          |   41 +
 interpolation/newisl.F                             |  304 +
 interpolation/ngintrp.F                            |  295 +
 interpolation/ngrotat.F                            |  242 +
 interpolation/ngvalue.F                            |  157 +
 interpolation/nifld.common                         |  256 +
 interpolation/nmakgg.F                             |  143 +
 interpolation/nmakll.F                             |  154 +
 interpolation/nofld.common                         |  158 +
 interpolation/nptwe32.F                            |  128 +
 interpolation/numptns.F                            |  106 +
 interpolation/numptwe.F                            |  127 +
 interpolation/oceanp.F                             |  529 ++
 interpolation/oceanu.F                             |  455 ++
 interpolation/ouspace.h                            |   84 +
 interpolation/outrep.F                             |   35 +
 interpolation/parameter_processing_defaults        |   27 +
 interpolation/parim.h                              |  619 ++
 interpolation/pddefs.F                             |  409 ++
 interpolation/ppallow.F                            |  227 +
 interpolation/precip.F                             |  164 +
 interpolation/qpassm.F                             |  759 +++
 interpolation/rddefs.c                             |  481 ++
 interpolation/rename_unlink.c                      |   79 +
 interpolation/request_defaults                     |   11 +
 interpolation/reset_c.F                            |  640 +++
 interpolation/rgauss_032.h                         |   14 +
 interpolation/rgauss_048.h                         |   23 +
 interpolation/rgauss_064.h                         |   27 +
 interpolation/rgauss_080.h                         |   31 +
 interpolation/rgauss_080_19940113.h                |   31 +
 interpolation/rgauss_080_19980130.h                |   31 +
 interpolation/rgauss_1024.h                        |  216 +
 interpolation/rgauss_128.h                         |   43 +
 interpolation/rgauss_160.h                         |   51 +
 interpolation/rgauss_160_19931222.h                |   51 +
 interpolation/rgauss_200.h                         |   61 +
 interpolation/rgauss_2000.h                        |  211 +
 interpolation/rgauss_256.h                         |   75 +
 interpolation/rgauss_320.h                         |   75 +
 interpolation/rgauss_400.h                         |   91 +
 interpolation/rgauss_512.h                         |  107 +
 interpolation/rgauss_640.h                         |  139 +
 interpolation/rpassm.F                             |  749 +++
 interpolation/rphi.F                               |  136 +
 interpolation/set99.F                              |   69 +
 interpolation/setrep.F                             |   71 +
 interpolation/sharedMemoryCharacteristics.c        |  175 +
 interpolation/sharedgg.c                           |  119 +
 interpolation/sharedlib.c                          |  368 ++
 interpolation/sharedlib.h                          |   23 +
 interpolation/sharedll.c                           |  121 +
 interpolation/sharedmemory.h                       |   42 +
 interpolation/showmap.c                            |   53 +
 interpolation/smread.c                             |  225 +
 interpolation/soffset.c                            |  202 +
 interpolation/sources.CRAY                         |  276 +
 interpolation/sources.FUJITSU                      |  283 +
 interpolation/sources.VPP5000                      |  283 +
 interpolation/sources.decalpha                     |  280 +
 interpolation/sources.decmips                      |  281 +
 interpolation/sources.hp                           |  281 +
 interpolation/sources.hpia64                       |  284 +
 interpolation/sources.hppa                         |  281 +
 interpolation/sources.ibm_power4                   |  287 +
 interpolation/sources.ibm_power6                   |  288 +
 interpolation/sources.ibm_power7                   |  288 +
 interpolation/sources.itanium                      |  280 +
 interpolation/sources.linux                        |  283 +
 interpolation/sources.rs6000                       |  288 +
 interpolation/sources.sgimips                      |  280 +
 interpolation/sources.sun4                         |  281 +
 interpolation/sprotat.F                            |  250 +
 interpolation/sscal.F                              |   79 +
 interpolation/strlat.F                             |  175 +
 interpolation/tatorgg.F                            |  225 +
 interpolation/valpina.c                            |  243 +
 interpolation/w251idx.F                            |  356 ++
 interpolation/waveidx.F                            |  369 ++
 interpolation/wavexx1.F                            |  663 +++
 interpolation/wavexx2.F                            |  502 ++
 interpolation/wavexxx.F                            |  645 +++
 interpolation/wv2di32.F                            |  342 ++
 interpolation/wv2didx.F                            |  388 ++
 interpolation/wv2dint.F                            |  301 +
 interpolation/wv2dppp.F                            |  156 +
 interpolation/wv2dx32.F                            |  484 ++
 interpolation/wv2dxx2.F                            |  352 ++
 interpolation/wv2dxxx.F                            |  496 ++
 interpolation/wvqlidx.F                            |  371 ++
 interpolation/wvqlin2.F                            |  484 ++
 interpolation/wvqlint.F                            |  447 ++
 interpolation/xrotate.F                            |   84 +
 interpolation/xyz2ll.F                             |   97 +
 interpolation/yrotate.F                            |   84 +
 interpolation/zprec.F                              |  189 +
 land_sea_mask/0-INDEX-0                            |   30 +
 land_sea_mask/LSM_GG_0048                          |  Bin 0 -> 106240 bytes
 land_sea_mask/LSM_GG_0080                          |  Bin 0 -> 285744 bytes
 land_sea_mask/LSM_GG_0128                          |  Bin 0 -> 710704 bytes
 land_sea_mask/LSM_GG_0160                          |  Bin 0 -> 1106768 bytes
 land_sea_mask/LSM_GG_0200                          |  Bin 0 -> 1711904 bytes
 land_sea_mask/LSM_GG_0256                          |  Bin 0 -> 2788224 bytes
 land_sea_mask/LSM_GG_0400                          |  Bin 0 -> 6747920 bytes
 land_sea_mask/LSM_GG_0640                          |  Bin 0 -> 17125616 bytes
 land_sea_mask/defaults_for_table_001               |   11 +
 land_sea_mask/defaults_for_table_128               |   14 +
 land_sea_mask/defaults_for_table_129               |   14 +
 land_sea_mask/ksm_xx_lsm0p5deg                     |  Bin 0 -> 32490 bytes
 land_sea_mask/lsm_xx_lsm0p25deg                    |  Bin 0 -> 129780 bytes
 land_sea_mask/lsm_xx_lsm0p5deg                     |  Bin 0 -> 32568 bytes
 land_sea_mask/lsm_xx_lsm10m01                      |  Bin 0 -> 293760 bytes
 land_sea_mask/lsm_xx_lsmn080                       |  Bin 0 -> 6440 bytes
 land_sea_mask/lsm_xx_lsmr160                       |  Bin 0 -> 17296 bytes
 land_sea_mask/parameter_processing_defaults        |   27 +
 land_sea_mask/r160_xx_19790930                     |  Bin 0 -> 16836 bytes
 land_sea_mask/r160_xx_19910917                     |  Bin 0 -> 16836 bytes
 land_sea_mask/r160_xx_19930804                     |  Bin 0 -> 16836 bytes
 land_sea_mask/r160_xx_19940302                     |  Bin 0 -> 16836 bytes
 land_sea_mask/r160_xx_19940823                     |  Bin 0 -> 16836 bytes
 land_sea_mask/r160_xx_19950404                     |  Bin 0 -> 17296 bytes
 options/options_CRAY                               |    5 +
 options/options_FUJITSU                            |   12 +
 options/options_VPP5000                            |   12 +
 options/options_decalpha                           |    7 +
 options/options_decmips                            |    7 +
 options/options_hpia64                             |   15 +
 options/options_hppa                               |   15 +
 options/options_i686                               |   12 +
 options/options_i86pc                              |    7 +
 options/options_ibm_power4                         |    9 +
 options/options_ibm_power6                         |    9 +
 options/options_ibm_power7                         |    9 +
 options/options_itanium                            |    7 +
 options/options_linux                              |   10 +
 options/options_linux_g77                          |    7 +
 options/options_rs6000                             |   11 +
 options/options_sgimips                            |    9 +
 options/options_sun4                               |    9 +
 pbio/0-INDEX-0                                     |   40 +
 pbio/Makefile                                      |   35 +
 pbio/Makefile.in                                   |   41 +
 pbio/Makefile.shared                               |   36 +
 pbio/PBGroutines.c                                 | 2565 +++++++++
 pbio/PBGroutines.h                                 |  192 +
 pbio/README                                        |  657 +++
 pbio/blokex.F                                      | 1951 +++++++
 pbio/bufrgrib.h                                    |   33 +
 pbio/crexrd.c                                      |  121 +
 pbio/emosnum.F                                     |  101 +
 pbio/extras.c                                      |   66 +
 pbio/fileRead.h                                    |   90 +
 pbio/fort2c.c                                      |   48 +
 pbio/fort2c.h                                      |  108 +
 pbio/fort2c_hppa.c                                 |   51 +
 pbio/fortint.h                                     |   24 +
 pbio/gbyte.c                                       |  287 +
 pbio/gbyte_alpha.c                                 |  215 +
 pbio/gbyte_le.c                                    |  369 ++
 pbio/grprs.h                                       |   16 +
 pbio/lwsize.c                                      |   69 +
 pbio/make.dep                                      |   17 +
 pbio/mvchars.c                                     |   55 +
 pbio/newpbio.c                                     |  592 ++
 pbio/pbbufr.F                                      |  125 +
 pbio/pbcrex.F                                      |  134 +
 pbio/pbfp.c                                        |   23 +
 pbio/pbgrib.F                                      |  123 +
 pbio/pbio.c                                        | 1559 +++++
 pbio/pbio_alpha.c                                  |  754 +++
 pbio/pbionum.F                                     |  124 +
 pbio/pbpseu.F                                      |  123 +
 pbio/pbsize.c                                      |   88 +
 pbio/readany.c                                     |   65 +
 pbio/readbufr.c                                    |   61 +
 pbio/readcrex.c                                    |   60 +
 pbio/readgrib.c                                    |   63 +
 pbio/readnext.c                                    |   73 +
 pbio/readprod.c                                    |  891 +++
 pbio/readprod_alpha.c                              |  524 ++
 pbio/recheckLength.c                               |  150 +
 pbio/setpar.c                                      |   38 +
 pbio/sizeRoutines.h                                |   28 +
 pbio/sources.CRAY                                  |   34 +
 pbio/sources.FUJITSU                               |   36 +
 pbio/sources.VPP5000                               |   36 +
 pbio/sources.decalpha                              |   36 +
 pbio/sources.decmips                               |   35 +
 pbio/sources.hpia64                                |   36 +
 pbio/sources.hppa                                  |   38 +
 pbio/sources.i86pc                                 |   36 +
 pbio/sources.ibm_power4                            |   35 +
 pbio/sources.ibm_power6                            |   35 +
 pbio/sources.ibm_power7                            |   35 +
 pbio/sources.itanium                               |   36 +
 pbio/sources.linux                                 |   36 +
 pbio/sources.linux_g77                             |   36 +
 pbio/sources.rs6000                                |   35 +
 pbio/sources.sgimips                               |   36 +
 pbio/sources.sun4                                  |   36 +
 1376 files changed, 371603 insertions(+)

diff --git a/AUTHORS b/AUTHORS
new file mode 100755
index 0000000..a8db325
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,6 @@
+John Hennessy
+John Chambers
+Sinisa Curic
+Milan Dragosavac
+Keith Fielding
+Jean Clochard
diff --git a/LICENSE b/LICENSE
new file mode 100755
index 0000000..db2bda5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                               Apache License
+                          Version 2.0, January 2004
+                       http://www.apache.org/licenses/
+
+  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+  1. Definitions.
+
+     "License" shall mean the terms and conditions for use, reproduction,
+     and distribution as defined by Sections 1 through 9 of this document.
+
+     "Licensor" shall mean the copyright owner or entity authorized by
+     the copyright owner that is granting the License.
+
+     "Legal Entity" shall mean the union of the acting entity and all
+     other entities that control, are controlled by, or are under common
+     control with that entity. For the purposes of this definition,
+     "control" means (i) the power, direct or indirect, to cause the
+     direction or management of such entity, whether by contract or
+     otherwise, or (ii) ownership of fifty percent (50%) or more of the
+     outstanding shares, or (iii) beneficial ownership of such entity.
+
+     "You" (or "Your") shall mean an individual or Legal Entity
+     exercising permissions granted by this License.
+
+     "Source" form shall mean the preferred form for making modifications,
+     including but not limited to software source code, documentation
+     source, and configuration files.
+
+     "Object" form shall mean any form resulting from mechanical
+     transformation or translation of a Source form, including but
+     not limited to compiled object code, generated documentation,
+     and conversions to other media types.
+
+     "Work" shall mean the work of authorship, whether in Source or
+     Object form, made available under the License, as indicated by a
+     copyright notice that is included in or attached to the work
+     (an example is provided in the Appendix below).
+
+     "Derivative Works" shall mean any work, whether in Source or Object
+     form, that is based on (or derived from) the Work and for which the
+     editorial revisions, annotations, elaborations, or other modifications
+     represent, as a whole, an original work of authorship. For the purposes
+     of this License, Derivative Works shall not include works that remain
+     separable from, or merely link (or bind by name) to the interfaces of,
+     the Work and Derivative Works thereof.
+
+     "Contribution" shall mean any work of authorship, including
+     the original version of the Work and any modifications or additions
+     to that Work or Derivative Works thereof, that is intentionally
+     submitted to Licensor for inclusion in the Work by the copyright owner
+     or by an individual or Legal Entity authorized to submit on behalf of
+     the copyright owner. For the purposes of this definition, "submitted"
+     means any form of electronic, verbal, or written communication sent
+     to the Licensor or its representatives, including but not limited to
+     communication on electronic mailing lists, source code control systems,
+     and issue tracking systems that are managed by, or on behalf of, the
+     Licensor for the purpose of discussing and improving the Work, but
+     excluding communication that is conspicuously marked or otherwise
+     designated in writing by the copyright owner as "Not a Contribution."
+
+     "Contributor" shall mean Licensor and any individual or Legal Entity
+     on behalf of whom a Contribution has been received by Licensor and
+     subsequently incorporated within the Work.
+
+  2. Grant of Copyright License. Subject to the terms and conditions of
+     this License, each Contributor hereby grants to You a perpetual,
+     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+     copyright license to reproduce, prepare Derivative Works of,
+     publicly display, publicly perform, sublicense, and distribute the
+     Work and such Derivative Works in Source or Object form.
+
+  3. Grant of Patent License. Subject to the terms and conditions of
+     this License, each Contributor hereby grants to You a perpetual,
+     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+     (except as stated in this section) patent license to make, have made,
+     use, offer to sell, sell, import, and otherwise transfer the Work,
+     where such license applies only to those patent claims licensable
+     by such Contributor that are necessarily infringed by their
+     Contribution(s) alone or by combination of their Contribution(s)
+     with the Work to which such Contribution(s) was submitted. If You
+     institute patent litigation against any entity (including a
+     cross-claim or counterclaim in a lawsuit) alleging that the Work
+     or a Contribution incorporated within the Work constitutes direct
+     or contributory patent infringement, then any patent licenses
+     granted to You under this License for that Work shall terminate
+     as of the date such litigation is filed.
+
+  4. Redistribution. You may reproduce and distribute copies of the
+     Work or Derivative Works thereof in any medium, with or without
+     modifications, and in Source or Object form, provided that You
+     meet the following conditions:
+
+     (a) You must give any other recipients of the Work or
+         Derivative Works a copy of this License; and
+
+     (b) You must cause any modified files to carry prominent notices
+         stating that You changed the files; and
+
+     (c) You must retain, in the Source form of any Derivative Works
+         that You distribute, all copyright, patent, trademark, and
+         attribution notices from the Source form of the Work,
+         excluding those notices that do not pertain to any part of
+         the Derivative Works; and
+
+     (d) If the Work includes a "NOTICE" text file as part of its
+         distribution, then any Derivative Works that You distribute must
+         include a readable copy of the attribution notices contained
+         within such NOTICE file, excluding those notices that do not
+         pertain to any part of the Derivative Works, in at least one
+         of the following places: within a NOTICE text file distributed
+         as part of the Derivative Works; within the Source form or
+         documentation, if provided along with the Derivative Works; or,
+         within a display generated by the Derivative Works, if and
+         wherever such third-party notices normally appear. The contents
+         of the NOTICE file are for informational purposes only and
+         do not modify the License. You may add Your own attribution
+         notices within Derivative Works that You distribute, alongside
+         or as an addendum to the NOTICE text from the Work, provided
+         that such additional attribution notices cannot be construed
+         as modifying the License.
+
+     You may add Your own copyright statement to Your modifications and
+     may provide additional or different license terms and conditions
+     for use, reproduction, or distribution of Your modifications, or
+     for any such Derivative Works as a whole, provided Your use,
+     reproduction, and distribution of the Work otherwise complies with
+     the conditions stated in this License.
+
+  5. Submission of Contributions. Unless You explicitly state otherwise,
+     any Contribution intentionally submitted for inclusion in the Work
+     by You to the Licensor shall be under the terms and conditions of
+     this License, without any additional terms or conditions.
+     Notwithstanding the above, nothing herein shall supersede or modify
+     the terms of any separate license agreement you may have executed
+     with Licensor regarding such Contributions.
+
+  6. Trademarks. This License does not grant permission to use the trade
+     names, trademarks, service marks, or product names of the Licensor,
+     except as required for reasonable and customary use in describing the
+     origin of the Work and reproducing the content of the NOTICE file.
+
+  7. Disclaimer of Warranty. Unless required by applicable law or
+     agreed to in writing, Licensor provides the Work (and each
+     Contributor provides its Contributions) on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+     implied, including, without limitation, any warranties or conditions
+     of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+     PARTICULAR PURPOSE. You are solely responsible for determining the
+     appropriateness of using or redistributing the Work and assume any
+     risks associated with Your exercise of permissions under this License.
+
+  8. Limitation of Liability. In no event and under no legal theory,
+     whether in tort (including negligence), contract, or otherwise,
+     unless required by applicable law (such as deliberate and grossly
+     negligent acts) or agreed to in writing, shall any Contributor be
+     liable to You for damages, including any direct, indirect, special,
+     incidental, or consequential damages of any character arising as a
+     result of this License or out of the use or inability to use the
+     Work (including but not limited to damages for loss of goodwill,
+     work stoppage, computer failure or malfunction, or any and all
+     other commercial damages or losses), even if such Contributor
+     has been advised of the possibility of such damages.
+
+  9. Accepting Warranty or Additional Liability. While redistributing
+     the Work or Derivative Works thereof, You may choose to offer,
+     and charge a fee for, acceptance of support, warranty, indemnity,
+     or other liability obligations and/or rights consistent with this
+     License. However, in accepting such obligations, You may act only
+     on Your own behalf and on Your sole responsibility, not on behalf
+     of any other Contributor, and only if You agree to indemnify,
+     defend, and hold each Contributor harmless for any liability
+     incurred by, or claims asserted against, such Contributor by reason
+     of your accepting any such warranty or additional liability.
+
+  END OF TERMS AND CONDITIONS
+
+  APPENDIX: How to apply the Apache License to your work.
+
+     To apply the Apache License to your work, attach the following
+     boilerplate notice, with the fields enclosed by brackets "[]"
+     replaced with your own identifying information. (Don't include
+     the brackets!)  The text should be enclosed in the appropriate
+     comment syntax for the file format. We also recommend that a
+     file or class name and description of purpose be included on the
+     same "printed page" as the copyright notice for easier
+     identification within third-party archives.
+
+  Copyright 1981-2012 European Centre for Medium-Range Weather Forecasts (ECMWF
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
diff --git a/Makefile b/Makefile
new file mode 100755
index 0000000..290bc20
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,21 @@
+# Makefile for libemos
+#
+TARGETS = all clean
+LIBRARY = libemos$(R64).a
+GRIB_API_MERGING=
+SHELL=/bin/sh
+SUBDIRS = gribex interpolation bufrdc crexdc pbio fft bufrtables $(GRIB_API_MERGING)
+
+
+all :
+	@for name in $(SUBDIRS); do\
+	( echo "*************************"; \
+	echo "*** Make in $$name "; \
+	echo "*************************"; \
+	cd $$name ; make LIB=emos; ) done
+
+clean   :
+	@for name in $(SUBDIRS); do\
+	( echo "*** Clean in $$name ***" ;cd $$name ; make clean ); \
+	done
+	rm -f $(LIBRARY)
diff --git a/Makefile.in b/Makefile.in
new file mode 100755
index 0000000..b2efe81
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,21 @@
+# Makefile for libemos
+#
+GRIB_API_MERGING=glue
+R64 = reals
+TARGETS = all clean
+LIBRARY = libemos$(R64).a
+SHELL=/bin/sh
+SUBDIRS = gribex interpolation bufrdc crexdc pbio fft bufrtables $(GRIB_API_MERGING)
+
+all :
+	@for name in $(SUBDIRS); do\
+	( echo "*************************"; \
+	echo "*** Make in $$name "; \
+	echo "*************************"; \
+	cd $$name ; make ; ) done
+
+clean   :
+	@for name in $(SUBDIRS); do\
+	( echo "*** Clean in $$name ***" ;cd $$name ; make clean ); \
+	done
+	rm -f $(LIBRARY)
diff --git a/NOTICE b/NOTICE
new file mode 100755
index 0000000..abf0b32
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,38 @@
+Emoslib
+=======
+
+Copyright 1981-2013 ECMWF
+
+This product mainly includes software developed by the 
+
+ Data and Services Section 
+
+ and  
+
+ Meteorological Visualisation Section
+
+at the 
+
+  "European Centre for Medium-Range Weather Forecasts" 
+           (ECMWF - http://www.ecmwf.int ).
+
+
+We would like to acknoledge the following contributions to Emoslib:
+
+- Files written by NCAR, the National Center for Atmospheric Research. 
+   bt_ibm_bal.bal
+   btibm.special
+
+- File kwprs1.F makes use of the
+   WMO Manual on Codes re GRIB Code.
+   http://www.nco.ncep.noaa.gov/pmb/docs/on388/appendixc.html.
+
+- File c2gene.F 
+  Algorithm used to determine groups is derived from Harry R. Glahn
+ (U.S. Met Service), from a working paper submitted to WMO SGDRC
+ in 1995.
+
+- File calcop.F 
+  Located in the materials contains the following citation:
+  Seber, G.A.F. (1979). Linear Regression Analyses.
+  John Wiley and Sons
diff --git a/README b/README
new file mode 100755
index 0000000..69211d9
--- /dev/null
+++ b/README
@@ -0,0 +1,313 @@
+
+                              Emos library
+                              --------------
+
+   Any comments on the document or the software would be appreciated. 
+   Please address comments to:
+
+Software Services
+ECMWF
+Shinfield Park
+Reading
+Berkshire RG2 9AX
+U.K.
+
+Fax: +44 1734 869450
+
+e-mail: software.services at ecmwf.int
+
+The software is provided as a tar gzip file. This should be expanded using
+
+tar -xfz emos_version.tar.gz
+
+Content:
+Makefile        Makefile for 'everything'
+build_library   Script bilding library
+install         Install script
+gribex          Subdirectory containing GRIB encoding/decoding software
+gribtables      Subdirectory containing GRIB tables
+gribtemplates   Subdirectory containing Gribex templates
+bufrdc          Subdirectory containing BUFR encoding/decoding software
+bufrtables      Subdirectory containing BUFR tables
+crexdc          Subdirectory containing CREX encoding/decoding software
+crextables      Subdirectory containing CREX tables
+land_sea_mask   Subdirectory containing land-sea mask
+pbio            Subdirectory containing binary read/write routines
+fft             Subdirectory containing Multiple FFT routines 
+examples        Subdirectory containing example programs
+config          Subdirectory containing configuration files for make
+options         Subdirectory containing options files for make
+
+**************************************************************
+
+This is instruction how to build library and install:
+
+Run the script bilding library and answer on a few questions:
+
+ ./build_library
+
+   After library is built, tables, land-sea mask and library should be
+installed at appropriate place.
+
+   It is recomended to do it by install script.
+
+ ./install
+
+   If you want to put library in /usr/local/lib directory,
+you should run install script with root permission.
+
+**************************************************************
+
+It is strongly suggested to build the library using
+shell script ./build_library  and install using ./install !!!
+
+**************************************************************
+
+
+Compilation options
+-------------------
+
+   Files are given for a variety of platforms defining the compilation options:
+makefile configuration, compiler options and source file lists.
+
+   Using SGI as an example, these files are:
+
+1) In the working directory
+
+   config.sgimips
+   config.sgimipsR64
+   options_sgimips
+
+2) In subdirectories gribex and pbio
+
+   sources.sgimips
+
+
+Compiling the library
+---------------------
+
+   The correct configuration, options and source files can be selected using for 
+make variables: ARCH, CNAME, A64 and R64.
+
+   ARCH indicates the machine architecture on which the Emos library will be
+installed. It may not necessarily have a pre-defined value. A list of possible
+values could include: linux, windows, CRAY, FUJITSU, VPP5000, decalpha, hppa,
+i686, ibm_power4, rs6000, sgimips and sun4.
+   CNAME is used to name the compilers; it may or may not be pre-defined, depending
+on the operational system you use. If you want to choose your own compilers, you
+can define them in the appropriate 'config' file. For Linux CNAME=_gfortran can
+be specified in order to compile with Gnu compilers gcc and gfortran.
+
+decalpha - Compaq Fortran 90 compiler
+         - the C++ compiler
+hppa     - HP Fortran compiler
+         - C compiler
+linux    - The Portland Group Compiler Technology Fortran 90 compiler,
+           pgf90 and pgcc
+         - GNU project C, C++ Compiler, F77 compiler
+rs6000   - XL Fortran for AIX
+         - C for AIX Compiler, Version 5
+sgimips  - MIPSpro F77 compiler
+         - MIPS C compiler
+sun4     - Forte[tm] Developer 7 Fortran 95 compiler
+         - SunOS/BSD Compatibility Package C compiler
+
+   A64 determines 32 or 64 bits machine.
+   R64 determines the number of bits in the representation of real numbers.
+The default is 32-bit. You can choose 64-bit setting R64=R64 in order to get
+64-bit real numbers.
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+If you decide to build the library using directly make, please NOTE that
+you have to specify path for gribtables, bufrtables, crextables,
+land_sea_mask, gribtemplates in appropriate
+
+config/config.$ARCH$CNAME$R64
+
+You should add -DTABLE_PATH=\'/your path\'/
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+
+There are two ways of carrying out the compilation:
+----------------------------------------------------
+
+1) Compile setting the ARCH variable just for the command:
+
+   make ARCH=sgimips
+
+   In this case R64 is pre-defined. 
+
+2) Compile setting the ARCH variable and choosing 64-bit reals;
+
+   make ARCH=sgimips R64=R64
+
+3) On Linux  compile setting CNAME=_gfortran to force the use of the Gnu
+   compilers gfortran and gcc.
+
+   make ARCH=linux CNAME=_gfortran
+
+4) Same as 3) and added A64 if machine is 64 bits Linux
+
+   make ARCH=linux CNAME=_gfortran A64=A64
+
+   The library will be created in a working directory and be named libemos(R64).a.
+
+   It is recommended that users should not change any routines in the source 
+sub-directories because any changes would not be present in future ECMWF 
+releases of this software.
+
+   You can use other options for compilation. For example: selecting the working
+directory; modifying the configuration files; changing the level of
+optimisation; etc. The 'make' utility can be used repeatedly. It will only
+cause the re-compilation of routines which have been modified since the
+previous 'make'.
+
+
+Environment variables
+---------------------
+
+IF YOU USE ./build_library SCRIPT YOU DON'T NEED TO SET ENVIRONMENTAL
+VARIABLES BELOW.
+
+  The location of tables and land-sea mask could be specified by the environment
+variables. Put the specification of them in your startup files (.profile, ...)
+to ensure you have access to the tables and land-sea
+on future logins.
+
+Bourne or Korn shell:
+
+  ECMWF_LOCAL_TABLE_PATH="choosen directory"/gribtables/
+  export ECMWF_LOCAL_TABLE_PATH
+
+  LOCAL_DEFINITION_TEMPLATES="choosen directory"/gribtemplates/
+  export LOCAL_DEFINITION_TEMPLATES
+
+  BUFR_TABLES="choosen directory"/bufrtables/
+  export BUFR_TABLES
+
+  CREX_TABLES="choosen directory"/crextables/
+  export CREX_TABLES
+
+  MARS_LSM_PATH="choosen directory"/land_sea_mask/
+  export MARS_LSM_PATH
+
+  HIRLAM_LSM_PATH="choosen directory"/land_sea_mask/
+  export HIRLAM_LSM_PATH
+
+
+C-shell:
+
+  setenv ECMWF_LOCAL_TABLE_PATH "choosen directory"/gribtables/
+  setenv LOCAL_DEFINITION_TEMPLATES "choosen directory"/gribtemplates/
+  setenv BUFR_TABLES "choosen directory"/bufrtables/
+  setenv CREX_TABLES "choosen directory"/crextables/
+  setenv MARS_LSM_PATH "choosen directory"/land_sea_mask/
+  setenv HIRLAM_LSM_PATH "choosen directory"/land_sea_mask/
+
+   The environment variable GRIBEX_DEBUG can be set to ON or OFF
+to switch on or off the debug output from GRIBEX.
+
+   The environment variable GRIBEX_CHECK can be set to ON or OFF
+to switch on or off the checking of headers in GRIBEX.
+
+   The environment variable JDCNDBG can be set to 1 in order to get
+comperhensive output from INTERPOLATION routines
+
+   The following variable can be set to "true" in order to create CREX massege
+with check digit.
+
+ USE_E=TRUE
+
+	HIRLAM_LSM_PATH is place for LSM_GG_xxxx, reduced gaussian land-sea mask files,
+which is used just for rotation of surface fields. LSM_GG_xxxx files supplied 
+with package are just for LITTLE ENDIAN machines. 
+   When compiling a program, you need to specify where to find libemos.a by
+putting its full pathname in the makefile. The initial location of the library
+is "working directory". An alternative is to put libemos.a in /usr/local/lib
+(this may need system priviliges) which is conventionally used on UNIX-type
+systems for holding libraries and should be defined in your environment PATH
+variable.
+
+   The library name follows the normal UNIX convention (it starts with lib and ends
+in .a), so the library can be specified in the compile/link command using the
+standard ld convention, for example:
+
+        cc -o program program.c  -lemos
+   You can see an examples of decoding a GRIB, BUFR, CREX product and interpolation
+in examples/ directory.
+
+cd examples
+
+than choose bufr, crex, gribex, interpolation, fft directory.
+
+ Invoke 'make' and start an executable version of program e.g. agrdemo.F through:
+
+   ./test.sh
+
+  In case of gribex example that will temporary set env variables
+ ECMWF_LOCAL_TABLE_PATH and LOCAL_DEFINITION_TEMPLATES
+   and run
+
+  ./agrdemo -i ../../data/latlon.grib
+
+  for testing purpose before installation
+
+   where latlon.grib is a file containing GRIB fields on latitude/longitude
+grids.
+
+   It can be re-run for gaussian grids and spherical harmonic fields.
+
+Terminology
+-----------
+
+   >From here on, any reference to SOFTWARE in file names should be interpreted
+as the software you have received, i.e. GRIB, PBIO etc.
+
+   The use of the word PLATFORM refers to the make of the computer for which the 
+software is intended and substitutes for CRAY, sun etc.
+
+   SUBPACKAGE could be any of pbio, gribex etc. and refers to a part of the
+whole SOFTWARE set.
+
+
+Provided for UNIX systems named above.
+--------------------------------------
+
+   This README file.
+   The tar file emos_000version.tar (version is a 3-digit number).
+
+
+Other UNIX systems.
+-------------------
+
+   If you use a UNIX system other than those for which the software was prepared,
+you should experiment with the configurations provided to see if any are
+suitable for your system.
+
+   If any problems are encountered, the following points are worth considering:
+
+Is your cc compiler ANSI?
+The C code in this software is ANSI conformant.
+
+Does your FORTRAN compiler need other switches?
+Look at other programs compiled on your system.
+
+Does your system need a ranlib command performed on the libraries?
+Do "man ar" or "man ranlib".
+
+How many bytes are there in a computer word. Is the platform big-endian or
+little-endian? Some of routines are dependent on the word size and on which bit
+in a computer word is the most significant. These dependencies may be resolved
+by choosing one or other of the files gbyte.c or gbyte_alpha.c(for a
+little-endian system).
+
+
+License
+--------
+
+This software is licensed under the Apache License.
+
diff --git a/bufrdc/Makefile b/bufrdc/Makefile
new file mode 100755
index 0000000..9b440dd
--- /dev/null
+++ b/bufrdc/Makefile
@@ -0,0 +1,29 @@
+#
+#                                 Makefile for bufrdc
+#
+LIBRARY = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/bufrdc/Makefile.in b/bufrdc/Makefile.in
new file mode 100755
index 0000000..04b1fdc
--- /dev/null
+++ b/bufrdc/Makefile.in
@@ -0,0 +1,35 @@
+#
+#                                 Makefile for bufrdc
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+LIB = depl
+#
+LIBRARY = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/bufrdc/Makefile.shared b/bufrdc/Makefile.shared
new file mode 100755
index 0000000..b6fd49f
--- /dev/null
+++ b/bufrdc/Makefile.shared
@@ -0,0 +1,30 @@
+#
+#                                 Makefile for bufrdc
+#
+LIBRARY = ../lib$(LIB)$(R64).so
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+PROFILE=$(SHLIB)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(LD) $(DYNLINKFLAGS) $? -o $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/bufrdc/README b/bufrdc/README
new file mode 100755
index 0000000..58341bc
--- /dev/null
+++ b/bufrdc/README
@@ -0,0 +1,156 @@
+This directory contains software from the BUFR decoding and encoding update
+library.
+
+bbuprs0.F	 	Print BUFR section 0 (?)
+bbuprs1.F	 	Print BUFR section 1 (?)
+bbuprs2.F	 	Print BUFR section 2 (?)
+bbuprs3.F	 	Print BUFR section 3 (?)
+bbuprt.F	 	Print BUFR (?)
+bbuprtbox.F	 	Print BUFR box (?)
+
+buaug.F		 	Update augmented Bufr table B.
+bubox.F		 	??
+bucomp.F	 	Pack number of subsets in a compressed form.
+bucrkey.F	 	Extract elements needed for RDB key definition(update).
+bucrekey.F	 	Extract elements needed for RDB key definition.
+buedd.F		 	Expand section 3 of Bufr message
+buens0.F	 	Pack section 0 of Bufrsage.
+buens1.F	 	Pack section 1 of Bufr message.
+buens2.F	 	Pack section 2 of Bufr message.
+buens3.F	 	Pack section 3 of Bufr message.
+buens4.F	 	Pack preliminary items/data of sect.4 of Bufr message.
+buens5.F	 	Pack sect.5 of Bufr message.
+buepmrk.F	 	Process marker operator, replace with table B descriptor
+buepmrkc.F	 	Process marker operator, replace with table B descriptor
+buepwt.F	 	Updates working tables (name,unit,scale,ref,data width)
+buepwtc.F	 	Updates working tables (name,unit,scale,ref,data width)
+buerr.F		 	Print error code.
+buetab.F	 	Load Bufr table B, D and C according to Bufr code.
+buetd.F		 	Expand sect.3 of Bufr message.
+buetdr.F	 	Solve Bufr table D reference.
+buevar.F	 	Initialize constants and variables.
+buexs0.F	 	Expands sect.0 of Bufr message.
+buexs1.F	 	Expands sect.1 of Bufr message.
+buexs2.F	 	Expands sect.2 of Bufr message.
+buexs3.F	 	Expand sect.3 of Bufr message.
+buexs3p.F	 	Expand sect.3 of Bufr message. (preliminary items)
+buexs4.F	 	Expand sect.4 of Bufr message.
+buexs5.F	 	Expands sect.5 of Bufr message.
+bufren.F	 	Encode Bufr message.
+bufrex.F	 	Decode Bufr message into fully expanded form
+bugbts.F	 	Load Bufr table B, D and C according to Bufr code.
+bugetbm.F	 	Create bit map to resolve marker operators.
+buivar.F	 	Initialize constants and variables.
+bunexs.F	 	Sets word/bit pointers at the start of next Bufr sect.
+bunpck.F	 	Unpack bit string
+bunpks.F	 	Unpack bit string of KSIZE bits.
+buoctn.F	 	Calculate number of octets from bit position.
+buoper.F	 	Process Bufr operator.
+buoperc.F	 	Process Bufr operator.
+bupck.F		 	Pack value *KS* in *KSI* bits
+bupkey.F	 	Pack local ECMWF information (rdb key)
+bupks.F		 	Pack bit string of KSIZE bits
+bupmrk.F	 	Process marker operator, relace with table B descriptor.
+buprco.F	 	Process Bufr operator.
+buprq.F		 	Sets variable KPMISS,KPRUS into common block.
+buprs0.F	 	Print sect.0 of Bufr message.
+buprs1.F	 	Print sect.1 of bufr message.
+buprs2.F	 	Print sect.2 of bufr message (expanded RDB key).
+buprs3.F	 	Print sect.3 of Bufr message.
+buprt.F		 	Print expanded Bufr message.
+buprtbox.F	 	Print boxed expanded bufr message.
+burep.F		 	Resolve data descriptor replication problem.
+burepc.F		 	Resolve data descriptor replication problem.
+burqc.F		 	Create parameters needed for partial expansion of Bufr
+burquc.F	 	Create parameters needed for partial expansion of Bufr
+bus012.F	 	Expands sect.0,1 AND 2 of Bufr message.
+busel.F		 	Returns Data Descriptors as in Section 3  of Bufr
+buset.F		 	Set flags in common block (?)
+busrp.F		 	Resolve data descriptor replication problem.
+busrq.F		 	Set Bufr table B references for partial expansion.
+bustdr.F	 	Solve Bufr table D reference.
+buuatb.F	 	Update augmented Bufr table B.
+buukey.F	 	Expands local ECMWF information from sect.2.
+buunp.F		 	Unpack bit string of KSIZE bits
+buunps.F	 	Unpack bit string of KSIZE bits
+buupwt.F	 	Updates working tables (name,unit,scale,ref,data width)
+buxdes.F	 	Expand data descriptors to show user's template
+fmmh.F		 	Find max/min latitude/longitude.
+mbbuprs0.F  	 	Mars version of routine (without leading m)
+mbbuprs1.F  	 	Mars version of routine (without leading m)
+mbbuprs2.F  	 	Mars version of routine (without leading m)
+mbbuprs3.F  	 	Mars version of routine (without leading m)
+mbbuprt.F   	 	Mars version of routine (without leading m)
+mbbuprtbox.F 	 	Mars version of routine (without leading m)
+mbuaug.F    	 	Mars version of routine (without leading m)
+mbubox.F    	 	Mars version of routine (without leading m)
+mbucomp.F   	 	Mars version of routine (without leading m)
+mbucrekey.F 	 	Mars version of routine (without leading m)
+mbucrkey.F  	 	Mars version of routine (without leading m)
+mbuedd.F    	 	Mars version of routine (without leading m)
+mbuens0.F   	 	Mars version of routine (without leading m)
+mbuens1.F   	 	Mars version of routine (without leading m)
+mbuens2.F   	 	Mars version of routine (without leading m)
+mbuens3.F   	 	Mars version of routine (without leading m)
+mbuens4.F   	 	Mars version of routine (without leading m)
+mbuens5.F   	 	Mars version of routine (without leading m)
+mbuepmrk.F  	 	Mars version of routine (without leading m)
+mbuepmrkc.F 	 	Mars version of routine (without leading m)
+mbuepwt.F   	 	Mars version of routine (without leading m)
+mbuepwtc.F  	 	Mars version of routine (without leading m)
+mbuerr.F    	 	Mars version of routine (without leading m)
+mbuetab.F   	 	Mars version of routine (without leading m)
+mbuetd.F    	 	Mars version of routine (without leading m)
+mbuetdr.F   	 	Mars version of routine (without leading m)
+mbuevar.F   	 	Mars version of routine (without leading m)
+mbuexs0.F   	 	Mars version of routine (without leading m)
+mbuexs1.F   	 	Mars version of routine (without leading m)
+mbuexs2.F   	 	Mars version of routine (without leading m)
+mbuexs3.F   	 	Mars version of routine (without leading m)
+mbuexs3p.F  	 	Mars version of routine (without leading m)
+mbuexs4.F   	 	Mars version of routine (without leading m)
+mbuexs5.F   	 	Mars version of routine (without leading m)
+mbufr_mars_filter.F  	 	Mars version of routine (without leading m)
+mbufren.F   	 	Mars version of routine (without leading m)
+mbufrex.F   	 	Mars version of routine (without leading m)
+mbugbts.F   	 	Mars version of routine (without leading m)
+mbugetbm.F  	 	Mars version of routine (without leading m)
+mbuivar.F   	 	Mars version of routine (without leading m)
+mbunexs.F   	 	Mars version of routine (without leading m)
+mbunpck.F   	 	Mars version of routine (without leading m)
+mbunpks.F   	 	Mars version of routine (without leading m)
+mbuoctn.F   	 	Mars version of routine (without leading m)
+mbuoper.F   	 	Mars version of routine (without leading m)
+mbuoperc.F  	 	Mars version of routine (without leading m)
+mbupck.F    	 	Mars version of routine (without leading m)
+mbupkey.F   	 	Mars version of routine (without leading m)
+mbupks.F    	 	Mars version of routine (without leading m)
+mbupmrk.F   	 	Mars version of routine (without leading m)
+mbuprco.F   	 	Mars version of routine (without leading m)
+mbuprq.F    	 	Mars version of routine (without leading m)
+mbuprs0.F   	 	Mars version of routine (without leading m)
+mbuprs1.F   	 	Mars version of routine (without leading m)
+mbuprs2.F   	 	Mars version of routine (without leading m)
+mbuprs3.F   	 	Mars version of routine (without leading m)
+mbuprt.F    	 	Mars version of routine (without leading m)
+mbuprtbox.F 	 	Mars version of routine (without leading m)
+mburep.F    	 	Mars version of routine (without leading m)
+mburepc.F   	 	Mars version of routine (without leading m)
+mburqc.F    	 	Mars version of routine (without leading m)
+mburquc.F   	 	Mars version of routine (without leading m)
+mbus012.F   	 	Mars version of routine (without leading m)
+mbusel.F    	 	Mars version of routine (without leading m)
+mbuset.F    	 	Mars version of routine (without leading m)
+mbusrp.F    	 	Mars version of routine (without leading m)
+mbusrq.F    	 	Mars version of routine (without leading m)
+mbustdr.F   	 	Mars version of routine (without leading m)
+mbuuatb.F   	 	Mars version of routine (without leading m)
+mbuukey.F   	 	Mars version of routine (without leading m)
+mbuunp.F    	 	Mars version of routine (without leading m)
+mbuunps.F   	 	Mars version of routine (without leading m)
+mbuupwt.F   	 	Mars version of routine (without leading m)
+mbuxdes.F   	 	Mars version of routine (without leading m)
+mfmmh.F     	 	Mars version of routine (without leading m)
+msetlalo.F  	 	Mars version of routine (without leading m)
+setlalo.F	    	Return indices for latitude and longitude.
+sources	        	Sources
diff --git a/bufrdc/bbuprs0.F b/bufrdc/bbuprs0.F
new file mode 100755
index 0000000..dec97f8
--- /dev/null
+++ b/bufrdc/bbuprs0.F
@@ -0,0 +1,83 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BBUPRS0(KNT,KSEC0)
+C
+C**** *BUPRS0*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 0 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS0(KNT,KSEC0)*
+C
+C        INPUT :
+C               *KNT*   -  UNIT NUMBER FOR IO
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+C
+#     include "parameter.F"
+C
+      DIMENSION KSEC0(JSEC0)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 0.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(KNT,'(1H1)')
+C
+      WRITE(KNT,'(1H ,A)')    '         BUFR SECTION 0    '
+      WRITE(KNT,'(1H )')
+      WRITE(KNT,'(1H ,A,I5)') 'LENGTH OF SECTION 0 (BYTES)         ',
+     1                       KSEC0(1)
+      WRITE(KNT,'(1H ,A,I5)') 'TOTAL LENGTH OF BUFR MESSAGE (BYTES)',
+     1                       KSEC0(2)
+      WRITE(KNT,'(1H ,A,I5)') 'BUFR EDITION NUMBER                 ',
+     1                       KSEC0(3)
+C
+      RETURN
+      END
diff --git a/bufrdc/bbuprs1.F b/bufrdc/bbuprs1.F
new file mode 100755
index 0000000..e6f8956
--- /dev/null
+++ b/bufrdc/bbuprs1.F
@@ -0,0 +1,180 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BBUPRS1(KNT,KSEC1)
+C
+C**** *BUPRS1*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 1 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS1(KNT,KSEC1)*
+C
+C        INPUT :
+C               *KNT*   -  UNIT NUMBER FOR IO
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION >= 3
+C
+C                            KSEC1(16) - ORIGINATING SUB-CENTRE
+C                            KSEC1(18) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C                            
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+C
+      DIMENSION KSEC1(JSEC1)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 1.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(KNT,'(1H1)')
+C
+      IF(KSEC1( 2).LE.3) THEN
+      WRITE(KNT,'(1H ,A)')    '        BUFR SECTION 1    '
+      WRITE(KNT,'(1H )')
+      WRITE(KNT,'(1H ,A,I5)')'LENGTH OF SECTION 1 (BYTES)   ',KSEC1( 1)
+      WRITE(KNT,'(1H ,A,I5)')'BUFR EDITION NUMBER           ',KSEC1( 2)
+      IF(KSEC1(2).GE.3) THEN
+      WRITE(KNT,'(1H ,A,I5)')'ORIGINATING SUB-CENTRE        ',KSEC1(16)
+      END IF
+      WRITE(KNT,'(1H ,A,I5)')'ORIGINATING CENTRE            ',KSEC1( 3)
+      WRITE(KNT,'(1H ,A,I5)')'UPDATE SEQUENCE NUMBER        ',KSEC1( 4)
+      WRITE(KNT,'(1H ,A,I5)')'FLAG (PRESENCE OF SECTION 2)  ',KSEC1( 5)
+      WRITE(KNT,'(1H ,A,I5)')'BUFR MESSAGE TYPE             ',KSEC1( 6)
+      WRITE(KNT,'(1H ,A,I5)')'BUFR MESSAGE SUBTYPE          ',KSEC1( 7)
+      WRITE(KNT,'(1H ,A,I5)')'VERSION NUMBER OF LOCAL TABLE ',KSEC1( 8)
+      WRITE(KNT,'(1H ,A,I5)')'YEAR                          ',KSEC1( 9)
+      WRITE(KNT,'(1H ,A,I5)')'MONTH                         ',KSEC1(10)
+      WRITE(KNT,'(1H ,A,I5)')'DAY                           ',KSEC1(11)
+      WRITE(KNT,'(1H ,A,I5)')'HOUR                          ',KSEC1(12)
+      WRITE(KNT,'(1H ,A,I5)')'MINUTE                        ',KSEC1(13)
+      WRITE(KNT,'(1H ,A,I5)')'VERSION NUMBER OF MASTER TABLE',KSEC1(15)
+      WRITE(KNT,'(1H ,A,I5)')'BUFR MASTER TABLE             ',KSEC1(14)
+
+      ELSEIF(KSEC1( 2).EQ.4) THEN
+
+      WRITE(KNT,'(1H ,A)')    '        BUFR SECTION 1    '
+      WRITE(KNT,'(1H )')
+      WRITE(KNT,'(1H ,A,I9)')'LENGTH OF SECTION 1 (BYTES)   ',KSEC1( 1)
+      WRITE(KNT,'(1H ,A,I9)')'BUFR MASTER TABLE             ',KSEC1(14)
+      WRITE(KNT,'(1H ,A,I9)')'ORIGINATING CENTRE            ',KSEC1( 3)
+      WRITE(KNT,'(1H ,A,I9)')'ORIGINATING SUB-CENTRE        ',KSEC1(16)
+      WRITE(KNT,'(1H ,A,I9)')'UPDATE SEQUENCE NUMBER        ',KSEC1( 4)
+      WRITE(KNT,'(1H ,A,I9)')'FLAG (PRESENCE OF SECTION 2)  ',KSEC1( 5)
+      WRITE(KNT,'(1H ,A,I9)')'DATA CATEGORY                 ',KSEC1( 6)
+      WRITE(KNT,'(1H ,A,I9)')'DATA SUB-CATEGORY             ',KSEC1(17)
+      WRITE(KNT,'(1H ,A,I9)')'LOCAL DATA SUB-CATEGORU       ',KSEC1( 7)
+      WRITE(KNT,'(1H ,A,I9)')'VERSION NUMBER OF MASTER TABLE',KSEC1(15)
+      WRITE(KNT,'(1H ,A,I9)')'VERSION NUMBER OF LOCAL TABLE ',KSEC1( 8)
+      WRITE(KNT,'(1H ,A,I9)')'YEAR                          ',KSEC1( 9)
+      WRITE(KNT,'(1H ,A,I9)')'MONTH                         ',KSEC1(10)
+      WRITE(KNT,'(1H ,A,I9)')'DAY                           ',KSEC1(11)
+      WRITE(KNT,'(1H ,A,I9)')'HOUR                          ',KSEC1(12)
+      WRITE(KNT,'(1H ,A,I9)')'MINUTE                        ',KSEC1(13)
+      WRITE(KNT,'(1H ,A,I9)')'SECOND                        ',KSEC1(18)
+c     WRITE(KNT,'(1H ,A,I9)')'YEAR    (EARLIEST TIME)       ',KSEC1(19)
+c     WRITE(KNT,'(1H ,A,I9)')'MONTH   (EARLIEST TIME)       ',KSEC1(20)
+c     WRITE(KNT,'(1H ,A,I9)')'DAY     (EARLIEST TIME)       ',KSEC1(21)
+c     WRITE(KNT,'(1H ,A,I9)')'HOUR    (EARLIEST TIME)       ',KSEC1(22)
+c     WRITE(KNT,'(1H ,A,I9)')'MINUTE  (EARLIEST TIME)       ',KSEC1(23)
+c     WRITE(KNT,'(1H ,A,I9)')'SECOND  (EARLIEST TIME)       ',KSEC1(28)
+c     WRITE(KNT,'(1H ,A,I9)')'YEAR    (LATEST TIME)         ',KSEC1(25)
+c     WRITE(KNT,'(1H ,A,I9)')'MONTH   (LATEST TIME)         ',KSEC1(26)
+c     WRITE(KNT,'(1H ,A,I9)')'DAY     (LATEST TIME)         ',KSEC1(27)
+c     WRITE(KNT,'(1H ,A,I9)')'HOUR    (LATEST TIME)         ',KSEC1(28)
+c     WRITE(KNT,'(1H ,A,I9)')'MINUTE  (LATEST TIME)         ',KSEC1(29)
+c     WRITE(KNT,'(1H ,A,I9)')'SECOND  (LATEST TIME)         ',KSEC1(30)
+c     WRITE(KNT,'(1H ,A,I9)')'MOST SOUTHERN LATITUDE        ',KSEC1(31)
+c     WRITE(KNT,'(1H ,A,I9)')'MOST WESTERN LONGITUDE        ',KSEC1(32)
+c     WRITE(KNT,'(1H ,A,I9)')'MOST NORTHERN LATITUDE        ',KSEC1(33)
+c     WRITE(KNT,'(1H ,A,I9)')'MOST EASTERN LONGITUDE        ',KSEC1(34)
+C
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bbuprs2.F b/bufrdc/bbuprs2.F
new file mode 100755
index 0000000..c8288b4
--- /dev/null
+++ b/bufrdc/bbuprs2.F
@@ -0,0 +1,253 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BBUPRS2(KNT,KSUP,KEY)
+C
+C**** *BUPRS2*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 2 OF BUFR MESSAGE (EXPANDED RDB KEY).
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS2(KNT,KSUP,KEY)*
+C
+C        INPUT :
+C               *KNT*   -  UNIT NUMBER FOR IO
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KEY*     -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KEY( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KEY( 2)-- RDB TYPE
+C                            KEY( 3)-- RDB SUBTYPE
+C                            KEY( 4)-- YEAR
+C                            KEY( 5)-- MONTH
+C                            KEY( 6)-- DAY
+C                            KEY( 7)-- HOUR
+C                            KEY( 8)-- MINUTE
+C                            KEY( 9)-- SECOND
+C                            KEY(10)-- LONGITUDE1
+C                            KEY(11)-- LATITUDE1
+C                            KEY(12)-- LONGITUDE2
+C                            KEY(13)-- LATITUDE2
+C                            KEY(14)-- NUMBER OF SUBSETS
+C                            KEY(15)-- IDENT (NUMERIC)
+C                            KEY(16)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(17)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(18)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(19)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(20)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(21)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(22)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(23)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(24)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(25)-- TOTAL BUFR MESSAGE LENGTH
+C                            KEY(26)-- DAY    (RDB INSERTION)
+C                            KEY(27)-- HOUR   (RDB INSERTION)
+C                            KEY(28)-- MINUTE (RDB INSERTION)
+C                            KEY(29)-- SECOND (RDB INSERTION)
+C                            KEY(30)-- DAY    (MDB INSERTION)
+C                            KEY(31)-- HOUR   (MDB INSERTION)
+C                            KEY(32)-- MINUTE (MDB INSERTION)
+C                            KEY(33)-- SECOND (MDB INSERTION)
+C                            KEY(34)-- CORRECTION NUMBER
+C                            KEY(35)-- PART
+C                            KEY(36)-- 0
+C                            KEY(37)-- CORRECTION NUMBER
+C                            KEY(38)-- PART
+C                            KEY(39)-- 0
+C                            KEY(40)-- CORRECTION NUMBER
+C                            KEY(41)-- PART
+C                            KEY(42)-- 0
+C                            KEY(43)-- CORRECTION NUMBER
+C                            KEY(44)-- PART
+C                            KEY(45)-- 0
+C                            KEY(46)-- THE LOWEST Q/C % CONFIDENCE
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+C
+      DIMENSION KSUP(JSUP),KEY(JKEY)
+C
+#ifndef R_4
+      REAL*8 RLAT1
+      REAL*8 RLON1
+      REAL*8 RLAT2
+      REAL*8 RLON2
+#else
+      REAL   RLAT1
+      REAL   RLON1
+      REAL   RLAT2
+      REAL   RLON2
+#endif
+C
+      CHARACTER*9 CIDENT
+      CHARACTER*13 YFM
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 2.
+C                ----------------
+ 100  CONTINUE
+C
+      YFM='(1H ,A,TR0,A)'
+C
+      IF(KSUP(2).LE.1) THEN
+         WRITE(KNT) 'PRTKEY : RDB KEY NOT DEFINED IN SECTION 2.'
+         RETURN
+      END IF
+C
+      WRITE(KNT,'(1H1)')
+C
+      WRITE(KNT,'(1H ,A)')       '        BUFR SECTION 2    '
+      WRITE(KNT,'(1H )')
+      WRITE(KNT,'(1H ,A,I9)')    'LENGTH OF SECTION 2       ', KEY(1)
+      WRITE(KNT,'(1H )')
+      WRITE(KNT,'(1H ,A)')       '      REPORT DATA BASE KEY  '
+      WRITE(KNT,'(1H )')
+C
+      IKTYPE=0
+      IF(KEY(2).EQ.2) IKTYPE=2
+      IF(KEY(2).EQ.3) IKTYPE=2
+      IF(KEY(2).EQ.12)IKTYPE=2
+      IF(KEY(2).EQ.08)IKTYPE=2
+      IF(IKTYPE.EQ.0.AND.KSUP(6).GT.1) IKTYPE=2
+C
+      IF(IKTYPE.EQ.2) THEN
+C      IF(KEY(2).EQ.2.OR.KEY(2).EQ.3.OR.KEY(2).EQ.12) THEN
+C
+         WRITE(KNT,'(1H ,A,I9)') 'RDB DATA TYPE             ', KEY(2)
+         WRITE(KNT,'(1H ,A,I9)') 'RDB DATA SUBTYPE          ', KEY(3)
+         WRITE(KNT,'(1H ,A,I9)') 'YEAR                      ', KEY(4)
+         WRITE(KNT,'(1H ,A,I9)') 'MONTH                     ', KEY(5)
+         WRITE(KNT,'(1H ,A,I9)') 'DAY                       ', KEY(6)
+         WRITE(KNT,'(1H ,A,I9)') 'HOUR                      ', KEY(7)
+         WRITE(KNT,'(1H ,A,I9)') 'MINUTE                    ', KEY(8)
+         WRITE(KNT,'(1H ,A,I9)') 'SECOND                    ', KEY(9)
+         RLAT1=(KEY(11)-9000000)/100000.
+         RLON1=(KEY(10)-18000000)/100000.
+         WRITE(KNT,'(1H ,A,F9.2)')'LATITUDE  1               ', RLAT1
+         WRITE(KNT,'(1H ,A,F9.2)')'LONGITUDE 1               ', RLON1
+         RLAT2=(KEY(13)-9000000)/100000.
+         RLON2=(KEY(12)-18000000)/100000.
+         WRITE(KNT,'(1H ,A,F9.2)')'LATITUDE  2               ', RLAT2
+         WRITE(KNT,'(1H ,A,F9.2)')'LONGITUDE 2               ', RLON2
+         WRITE(KNT,'(1H ,A,I9)') 'NUMBER OF OBSERVATIONS    ', KEY(14)
+         WRITE(KNT,'(1H ,A,I9)') 'IDENTIFIER                ', KEY(15)
+         WRITE(KNT,'(1H ,A,I9)') 'TOTAL BUFR MESSAGE LENGTH ', KEY(25)
+         WRITE(KNT,'(1H ,A,I9)') 'DAY    (RDB INSERTION)    ', KEY(26)
+         WRITE(KNT,'(1H ,A,I9)') 'HOUR   (RDB INSERTION)    ', KEY(27)
+         WRITE(KNT,'(1H ,A,I9)') 'MINUTE( (RDB INSERTION)   ', KEY(28)
+         WRITE(KNT,'(1H ,A,I9)') 'SECOND (RDB INSERTION)    ', KEY(29)
+         WRITE(KNT,'(1H ,A,I9)') 'DAY    (MDB ARRIVAL)      ', KEY(30)
+         WRITE(KNT,'(1H ,A,I9)') 'HOUR   (MDB ARRIVAL)      ', KEY(31)
+         WRITE(KNT,'(1H ,A,I9)') 'MINUTE (MDB ARRIVAL)      ', KEY(32)
+         WRITE(KNT,'(1H ,A,I9)') 'SECOND (MDB ARRIVAL       ', KEY(33)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(34)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(35)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(37)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(38)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(40)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(41)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(43)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(44)
+         WRITE(KNT,'(1H ,A,I9)') 'QUALITY CONTROL % CONF    ', KEY(46)
+      ELSE
+         WRITE(KNT,'(1H ,A,I9)') 'RDB DATA TYPE             ', KEY(2)
+         WRITE(KNT,'(1H ,A,I9)') 'RDB DATA SUBTYPE          ', KEY(3)
+         WRITE(KNT,'(1H ,A,I9)') 'YEAR                      ', KEY(4)
+         WRITE(KNT,'(1H ,A,I9)') 'MONTH                     ', KEY(5)
+         WRITE(KNT,'(1H ,A,I9)') 'DAY                       ', KEY(6)
+         WRITE(KNT,'(1H ,A,I9)') 'HOUR                      ', KEY(7)
+         WRITE(KNT,'(1H ,A,I9)') 'MINUTE                    ', KEY(8)
+         WRITE(KNT,'(1H ,A,I9)') 'SECOND                    ', KEY(9)
+         RLAT1=(KEY(11)-9000000)/100000.
+         RLON1=(KEY(10)-18000000)/100000.
+         WRITE(KNT,'(1H ,A,F9.2)')'LATITUDE  1               ', RLAT1
+         WRITE(KNT,'(1H ,A,F9.2)')'LONGITUDE 1               ', RLON1
+         IDD=0
+         CIDENT=' '
+         DO 201 ID=16,24
+         IDD=IDD+1
+         CIDENT(IDD:IDD)=CHAR(KEY(ID))
+ 201     CONTINUE
+         IDD=INDEX(CIDENT,' ')
+         IF(IDD.EQ.0) IDD=10
+         IDD=10-IDD
+         WRITE(YFM(10:10),'(I1)',ERR=202) IDD
+         GO TO 203
+ 202     YFM(10:10)='9'
+ 203     WRITE(KNT,FMT=YFM)      'IDENTIFER                 ', CIDENT
+         WRITE(KNT,'(1H ,A,I9)') 'TOTAL BUFR MESSAGE LENGTH ', KEY(25)
+         WRITE(KNT,'(1H ,A,I9)') 'DAY    (RDB INSERTION)    ', KEY(26)
+         WRITE(KNT,'(1H ,A,I9)') 'HOUR   (RDB INSERTION)    ', KEY(27)
+         WRITE(KNT,'(1H ,A,I9)') 'MINUTE (RDB INSERTION)    ', KEY(28)
+         WRITE(KNT,'(1H ,A,I9)') 'SECOND (RDB INSERTION)    ', KEY(29)
+         WRITE(KNT,'(1H ,A,I9)') 'DAY    (MDB ARRIVAL)      ', KEY(30)
+         WRITE(KNT,'(1H ,A,I9)') 'HOUR   (MDB ARRIVAL)      ', KEY(31)
+         WRITE(KNT,'(1H ,A,I9)') 'MINUTE (MDB ARRIVAL)      ', KEY(32)
+         WRITE(KNT,'(1H ,A,I9)') 'SECOND (MDB ARRIVAL       ', KEY(33)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(34)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(35)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(37)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(38)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(40)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(41)
+         WRITE(KNT,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(43)
+         WRITE(KNT,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(44)
+         WRITE(KNT,'(1H ,A,I9)') 'QUALITY CONTROL % CONF    ', KEY(46)
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bbuprs3.F b/bufrdc/bbuprs3.F
new file mode 100755
index 0000000..de88c14
--- /dev/null
+++ b/bufrdc/bbuprs3.F
@@ -0,0 +1,115 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BBUPRS3(KNT,KSEC3,KTDLEN,KTDLST,KTDEXL,
+     1                  KTDEXP,KELEM,CNAMES)
+C
+C**** *BUPRS3*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS3(KNT,KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+C                          KELEM,CNAMES)*
+C
+C        INPUT :
+C               *KNT*     -  UNIT NUMBER IO
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C               *KTDEXL*  -  NUMBER OF ENTRIES IN LIST OF EXPANDED DATA
+C                            DESCRIPTORS
+C               *KTDEXP*  -  ARRAY CONTAINIG EXPANDED DATA DESCRIPTORS
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+C
+      DIMENSION KSEC3(JSEC3)
+      DIMENSION KTDLST(KTDLEN)
+      DIMENSION KTDEXP(KTDEXL)
+C
+      CHARACTER*64 CNAMES(KELEM)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 3.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(KNT,'(1H1)')
+C
+      WRITE(KNT,'(1H ,A)')    '         BUFR SECTION 3    '
+      WRITE(KNT,'(1H )')
+      WRITE(KNT,'(1H ,A,I5)') 'LENGTH OF SECTION 3 (BYTES)         ',
+     1                       KSEC3(1)
+      WRITE(KNT,'(1H ,A,I5)') 'RESERVED                            ',
+     1                       KSEC3(2)
+      WRITE(KNT,'(1H ,A,I5)') 'NUMBER OF DATA SUBSETS              ',
+     1                       KSEC3(3)
+      WRITE(KNT,'(1H ,A,I5)') 'FLAG (DATA TYPE/DATA COMPRESSION)   ',
+     1                       KSEC3(4)
+C
+      WRITE(KNT,'(1H ,//)')
+      WRITE(KNT,'(1H ,A)')    '       DATA DESCRIPTORS (UNEXPANDED)'
+C
+      WRITE(KNT,'(1H )')
+      DO 110 I=1,KTDLEN
+       WRITE(KNT,'(1H ,I4,2X,I6.6)') I,KTDLST(I)
+ 110  CONTINUE
+C
+      WRITE(KNT,'(1H ,/)')
+      WRITE(KNT,'(1H ,A)')    '       DATA DESCRIPTORS (EXPANDED)'
+      WRITE(KNT,'(1H )')
+      DO 120 I=1,KTDEXL
+       WRITE(KNT,'(1H ,I5,2X,I6.6,2X,A)') I,KTDEXP(I),CNAMES(I)
+ 120  CONTINUE
+
+      RETURN
+      END
diff --git a/bufrdc/bbuprt.F b/bufrdc/bbuprt.F
new file mode 100755
index 0000000..efd0766
--- /dev/null
+++ b/bufrdc/bbuprt.F
@@ -0,0 +1,420 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BBUPRT(KNT,K,KSUB1,KSUB2,KELEM,CNAMES,CUNITS,
+     1                 CVALS,KVALS,VALUES,KSUP,KSEC1,KERR)
+C
+C**** *BUPRT*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT EXPANDED BUFR MESSAG.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRT(KNT,K,KSUB1,KSUB2,KELEM,CNAMES,CUNITS,
+C                         CVALS,KVALS,VALUES,KSUP,KSEC1,KERR)*
+C
+C        INPUT :
+C               *KNT*     -  UNIT NUMBER FOR IO
+C               *K*       -  SWITCH TO PRINT WITH/WITOUT CONTENT OF CODE TABLES
+C                            0  - NO  CODE TABLE CONTENT
+C                            1  - YES CODE TABLE CONTENT
+C               *KSUB1*   -  STARTING SUBSET
+C               *KSUB2*   -  ENDING SUBSET
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *CVALS*   -  CHARACTER ARRAY CONTAINING BUFR CODE TABLE
+C                            ENTRIES
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  REAL ARRAY (EXPANDED DATA VALUES)
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+C
+#     include "bcomwork.F"
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER YCHAR*30,YLONG*320
+C
+      DIMENSION KSUP(JSUP),KSEC1(JSEC1)
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT BUFR MESSAGE.
+C                -------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      ISUB1=KSUB1
+      ISUB2=KSUB2
+      IF(ISUB1.LE.0.OR.ISUB2.LE.0) THEN
+         WRITE(KNT,'(A)')    ' WARNING - NEGATIVE KSUB1 OR KSUB2.'
+         WRITE(KNT,'(A,I5)') ' WARNING - NUMBER OF SUBSETS IS ',KSUP(6)
+         RETURN
+      END IF
+      IF(ISUB1.GT.KSUP(6)) THEN
+         WRITE(KNT,'(A,I5)') ' WARNING - NUMBER OF SUBSETS IS ',KSUP(6)
+         RETURN
+      END IF
+      IF(ISUB2.GT.KSUP(6)) THEN
+         ISUB2=KSUP(6)
+         WRITE(KNT,'(A,I5)') ' WARNING - KSUB2 REPLACED BY ',KSUP(6)
+      END IF
+C
+      JQCP1= 0
+C
+      IF(K.EQ.0) THEN
+         JQPR=0
+         JQUA=0
+         JQC=0
+C          DO 171 J171=1,KSUP(5)
+C          IF(CNAMES(J171)(1:8).EQ.'DATA PRE') THEN
+C            JQPR=J171
+C            GO TO 172
+C          END IF
+C  171     CONTINUE
+C  172     DO 173 J173=1,KSUP(5)
+C          IF(CNAMES(J173)(1:9).EQ.'QUALITY I') JQUA=J173
+C  173     CONTINUE
+C          DO 174 J174=1,KSUP(5)
+C          IF(CNAMES(J174)(1:3).EQ.'% C') THEN
+C            JQC =J174
+C            GO TO 175
+C          END IF
+C  174     CONTINUE
+C 
+C  175     CONTINUE
+C
+C         WRITE(KNT,'(1H1)')
+C
+C         WRITE(KNT,'(1H ,A)')    'EXPANDED BUFR MESSAGE  '
+C         WRITE(KNT,'(1H ,//)')
+C         WRITE(KNT,'(1H ,A,I6)') 'BUFR MESSAGE  DATA TYPE   ',KSEC1(6)
+C         WRITE(KNT,'(1H ,A,I6)') 'RDB DATA SUBTYPE          ',KSEC1(7)
+C         WRITE(KNT,'(1H ,A,I6)') 'TOTAL BUFR LENGTH (BYTES) ',KSUP(8)
+C
+         NTYPE=KSEC1(7)
+         IF(JQUA.EQ.0) THEN      !IF(JQUA.NE.0) THEN
+            JQUA=KSUP(5)
+C
+            DO 103 JB=ISUB1,ISUB2
+C
+            ILN=0
+            WRITE(KNT,'(1H )')
+C
+            DO 104 JA=1,JQUA
+C
+            ILN=ILN+1
+            JAJB=JA+(JB-1)*KELEM
+C
+            IF(ABS(VALUES(JAJB)-RVIND)/RVIND.LT.EPS) THEN
+               WRITE(KNT,9918) ILN,CNAMES(JA),CUNITS(JA)
+            ELSE
+               IF(CUNITS(JA)(1:4).EQ.'CCIT') THEN
+                  I=NINT(VALUES(JAJB)/1000)
+                  NCHAR=VALUES(JAJB)-I*1000
+                  NW=NCHAR/80
+                  NWOFF=NCHAR-NW*80
+                  IF(NWOFF.NE.0) NW=NW+1
+C
+                  YLONG=' '
+                  YLONG(1:80)=CVALS(I)
+C
+                  II=I
+                  DO 125 JC=1,NW-1
+                  II=II+1
+                  KF=JC*80+1
+                  KL=(JC+1)*80
+                  YLONG(KF:KL)=CVALS(II)
+ 125              CONTINUE
+C
+                  NLINE=NCHAR/30
+                  IDIF =NCHAR-NLINE*30
+                  IF(IDIF.NE.0) NLINE=NLINE+1
+                  YCHAR=' '
+                  YCHAR=YLONG(1:30)
+C
+                  WRITE(KNT,9919)ILN,CNAMES(JA),VALUES(JAJB),
+     1                         CUNITS(JA),YCHAR
+C
+                  IF(NLINE.GT.1) THEN
+                     DO 130 JJ=1,NLINE-1
+C
+                     K2=JJ*30+1
+                     K1=(JJ+1)*30
+                     YCHAR=' '
+                     YCHAR=YLONG(K2:K1)
+C
+                     WRITE(KNT,9920) YCHAR
+ 130                 CONTINUE
+C
+                   END IF
+               ELSE
+                  WRITE(KNT,9917) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA)
+               END IF
+            END IF
+C
+ 104        CONTINUE
+ 103        CONTINUE
+C
+         ELSE
+            JQPRM1=JQPR-1
+            JQC=JQC-1
+C
+            DO 101 JB=ISUB1,ISUB2
+C
+            ILN=0
+            JQCP1=0
+C
+            WRITE(KNT,'(1H )')
+C
+            DO 102 JA=1,JQUA-1
+C
+            ILN=ILN+1
+            JAJB=JA+(JB-1)*KELEM
+            JQPJB=JQPRM1+JA+(JB-1)*KELEM
+C
+            IF(VALUES(JQPJB).EQ.0.0) THEN
+               JQCP1=JQCP1+1
+               JQCPP1=JQC+JQCP1+(JB-1)*KELEM
+               IF(ABS(VALUES(JAJB)-RVIND)/RVIND.LT.EPS) THEN
+                  WRITE(KNT,9918) ILN,CNAMES(JA),CUNITS(JA)
+               ELSE
+                  WRITE(KNT,9916) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA),
+     1            CNAMES(JQC+JQCP1),VALUES(JQCPP1),
+     1            CUNITS(JQC+JQCP1)
+               END IF
+            ELSE
+               IF(ABS(VALUES(JAJB)-RVIND)/RVIND.LT.EPS) THEN
+                  WRITE(KNT,9918) ILN,CNAMES(JA),CUNITS(JA)
+                  IF(NTYPE.EQ.5.OR.NTYPE.EQ.3) JQCP1=JQCP1+1
+               ELSE
+                  WRITE(KNT,9917) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA)
+                  IF(NTYPE.EQ.5.OR.NTYPE.EQ.3) JQCP1=JQCP1+1
+               END IF
+            END IF
+C
+C
+ 102        CONTINUE
+ 101        CONTINUE
+C
+         END IF
+      END IF
+C
+      IF(K.EQ.1) THEN
+C
+C---------------------------------------------------------------------
+          WRITE(KNT,'(1H1)')
+C
+          WRITE(KNT,'(1H ,A)') 'WARNING : PRINTING CONTENT OF CODE'//
+     1   ' TABLES NOT YET IMPLEMENTED.'
+          RETURN
+C---------------------------------------------------------------------
+C
+C          WRITE(KNT,'(1H ,A)')    'EXPANDED BUFR MESSAGE  '
+C          WRITE(KNT,'(1H ,//)')
+C          WRITE(KNT,'(1H ,A,I6)') 'RDB DATA TYPE             ',KSEC1(6)
+C          WRITE(KNT,'(1H ,A,I6)') 'RDB DATA SUBTYPE          ',KSEC1(7)
+C          WRITE(KNT,'(1H ,A,I6)') 'TOTAL BUFR LENGTH (BYTES) ',KSUP(8)
+C
+C          DO 150 JB=1,KSUP(6)
+C
+C          WRITE(KNT,'(1H )')
+C
+C          DO 160 JA=1,KSUP(5)
+C
+C          JAJB=JA+(JB-1)*KELEM
+C
+C          IF(ABS(VALUES(JAJB)-RVIND)/RVIND.LT.EPS) THEN
+C             WRITE(KNT,9903) CNAMES(JA)(1:32),CUNITS(JA)
+C             WRITE(KNT,9903) CNAMES(JA)(33:64)
+C          ELSE
+C             IF(CUNITS(JA)(1:10).EQ.'CODE TABLE'.OR.
+C     1         CUNITS(JA)(1:9) .EQ.'CCITTIA5'     ) THEN
+C                I=NINT(VALUES(JAJB)/1000)
+C                NCHAR=VALUES(JAJB)-I*1000
+C                NW=NCHAR/80
+C                NWOFF=NCHAR-NW*80
+C                IF(NWOFF.NE.0) NW=NW+1
+CC
+C                YLONG(1:80)=CVALS(I)
+C
+C                II=I
+C                DO 165 JC=1,NW-1
+C                II=II+1
+C                KF=JC*80+1
+C                KL=(JC+1)*80
+C                YLONG(KF:KL)=CVALS(II)
+C  165           CONTINUE
+C
+C                NLINE=NCHAR/30
+C                IDIF =NCHAR-NLINE*30
+C                IF(IDIF.NE.0) NLINE=NLINE+1
+C                YCHAR=YLONG(1:30)
+C
+C                WRITE(KNT,9904)CNAMES(JA)(1:32),VALUES(JAJB),
+C     1         CUNITS(JA),YCHAR
+C                WRITE(KNT,9904)CNAMES(JA)(33:64)
+C
+C                IF(NLINE.GT.1) THEN
+C                   DO 170 JJ=1,NLINE-1
+C
+C                   K2=JJ*30+1
+C                   K1=(JJ+1)*30
+C                   YCHAR=YLONG(K2:K1)
+C
+C                   WRITE(KNT,9905) YCHAR
+C  170              CONTINUE
+C
+C                END IF
+C             ELSE
+C                WRITE(KNT,9906) CNAMES(JA)(1:32),VALUES(JAJB),
+C     1                       CUNITS(JA)
+C                WRITE(KNT,9906) CNAMES(JA)(33:64)
+C             END IF
+C          END IF
+C
+C  160     CONTINUE
+C  150     CONTINUE
+C
+        END IF
+C
+C
+C       RETURN
+C
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+C     ------------------------------------------------------------------
+ 9903 FORMAT(1H ,A,'     MISSING',2X,A)
+ 9904 FORMAT(1H ,A,E20.10,2X,A,2X,A)
+ 9905 FORMAT(1H ,100X,A)
+ 9906 FORMAT(1H ,I5,1X,A,E14.10,2X,A)
+ 9916 FORMAT(1H ,I5,1X,A15,1X,E20.10,1X,A20,1X,A15,1X,F3.0,1X,A15)
+ 9917 FORMAT(1H ,I5,1X,A15,1X,E20.10,1X,A24)
+ 9918 FORMAT(1H ,I5,1X,A15,1X,'             MISSING',1X,A24)
+ 9919 FORMAT(1H ,I5,1X,A15,1X,E20.10,1X,A24,1X,A)
+ 9920 FORMAT(1H ,62X,A)
+      END
diff --git a/bufrdc/bbuprtbox.F b/bufrdc/bbuprtbox.F
new file mode 100755
index 0000000..719ef58
--- /dev/null
+++ b/bufrdc/bbuprtbox.F
@@ -0,0 +1,141 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BBUPRTBOX(KNT,KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU)
+C
+C**** *BUPRTBOX*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C               *CALL* *BUPRTBOX(KNT,KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU)*
+C
+C        INPUT :
+C               *KNT*     -  UNIT NUMBER FOR IO
+C               *KBOX*    -  NUMBER OF ROWS      
+C               *KAPP*    -  NUMBER OF COLUMNS
+C               *KLEN*    -  OFFSET FOR START OF NEXT COLUMN
+C               *KBOXR*   -  ARRAY CONTAINING BUFR TABLE B REFERENCE NUMBERS
+C               *VALS*    -  ARRAY CONTAINING UNPACKED VALUES
+C               *CBOXN*   -  ARRAY CONTAINING ELEMENT NAMES
+C               *CBOXU*   -  ARRAY CONTAINING ELEMENT UNITS
+C
+C     METHOD.
+C     -------
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/94.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JELEM=160000)
+      DIMENSION IOPER(100)
+      DIMENSION KBOXR(360000),IBVAL(JELEM),IBPRINT(60)
+#ifndef R_4
+      REAL*8 RPRINT(60)
+      REAL*8 VALS(360000)
+#else
+      REAL  RPRINT(60)
+      REAL  VALS(360000)
+#endif
+      CHARACTER*64 CBOXN(40000)
+      CHARACTER*24 CBOXU(40000)
+C
+C
+C     ------------------------------------------------------------------
+C*                 1. PRINT BOXED EXPANDED BUFR MESSAGE
+C                     ---------------------------------
+ 100  CONTINUE
+C
+      IF(KBOX.LE.6) THEN
+         WRITE(KNT,'(A)') 'THERE IS NO USEFULL DATA TO BE PRINTED.'
+         KBOX=0
+        RETURN
+      END IF
+C
+      IF(KAPP.GT.60) THEN
+         WRITE(KNT,'(A)') 'THERE IS MORE THAN 60 APPLICATIONS IN ',
+     1                    'THE DATA'
+         WRITE(KNT,'(A)') 'ONLY FIRST 60 WILL BE PROCESSED'
+         KAPP=60
+      END IF
+C
+      IF(KAPP.GT.1) THEN
+         IREP=(KAPP-1)/10
+         IOFF=(KAPP-1)-IREP*10
+         IF(IOFF.NE.0) IREP=IREP+1
+      ELSE
+         IREP=1
+         IOFF=0
+      END IF
+C
+      IST=2
+      IEND=11
+C      IF(IREP.EQ.1.AND.KAPP.EQ.1) IEND=IOFF+1
+      IF(IREP.EQ.1 .AND. IOFF .EQ.0) IEND=11
+C
+      DO 2005 J=1,IREP
+C
+      WRITE(KNT,'(A)')' '
+      DO 2002 I=1,KBOX
+      IIII=1
+      RPRINT(IIII)=VALS(I)
+C
+      DO 2003 II=IST,IEND
+      IIII=IIII+1
+      III=I+(II-1)*KLEN      
+      RPRINT(IIII)=VALS(III)
+      IBPRINT(IIII)=KBOXR(III)
+ 2003 CONTINUE
+C     WRITE(KNT,'(1H ,I4,1X,A32,1X,15(1X,I6,1X,F8.1))') 
+C    1        I,CBOXN(I),(IBPRINT(NN),RPRINT(NN),NN=1,KAPP)
+      WRITE(KNT,'(1H ,I4,1X,A32,1X,F14.1,30(1X,F8.1))')
+     1        I,CBOXN(I),(RPRINT(NN),NN=1,IIII)
+ 2002 CONTINUE
+C
+      IF(IOFF.NE.0.AND.J.EQ.(IREP-1)) THEN
+         IST=IEND+1
+         IEND=IEND+IOFF
+      ELSE
+         IST=IEND+1
+         IEND=IEND+10
+      END IF
+C
+ 2005 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/bufrdc/bcmatb.F b/bufrdc/bcmatb.F
new file mode 100755
index 0000000..0687390
--- /dev/null
+++ b/bufrdc/bcmatb.F
@@ -0,0 +1,20 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMATB/ NJA,NATBTR(JTAB),NATBS (JTAB),
+     1                NATBRV(JTAB),NATBDW(JTAB)
+C
+C
+C             NATBTR      - AUGMENTED TABLE B TABLE REFERENCE
+C             NATBS       - AUGMENTED TABLE B SCALE
+C             NATBRV      - AUGMENTED TABLE B REFERENCE VALUE
+C             NATBDW      - AUGMENTED TABLE B DATA WIDTH
+C
diff --git a/bufrdc/bcmatbc.F b/bufrdc/bcmatbc.F
new file mode 100755
index 0000000..2c7be61
--- /dev/null
+++ b/bufrdc/bcmatbc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMATBC/ CATBEN(JTAB),CATBU (JTAB)
+C
+C             CATBEN      - AUGMENTED TABLE B ELEMENT NAME
+C             CATBU       - AUGMENTED TABLE B UNITS
+C
+
diff --git a/bufrdc/bcmbef.F b/bufrdc/bcmbef.F
new file mode 100755
index 0000000..92e0b87
--- /dev/null
+++ b/bufrdc/bcmbef.F
@@ -0,0 +1,19 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMBEF / M,MM,N,JCV
+C
+C             M       -  NUMBER OF ELEMENTS
+C             MM      -  NUMBER OF ELEMENTS
+C             N       -  NUMBER OF DATA SUB_SETS
+C             JCV     -  NUMBER OF CHARACTER VALUES
+C
+
diff --git a/bufrdc/bcmct.F b/bufrdc/bcmct.F
new file mode 100755
index 0000000..18a6c01
--- /dev/null
+++ b/bufrdc/bcmct.F
@@ -0,0 +1,23 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMCT/ NREF(JCTAB)   ,NSTART(JCTAB) ,NLEN(JCTAB),
+     1               NCODNUM(JCTST),NSTARTC(JCTST),
+     2               NLENC(JCTST)
+C
+C             NREF      - TABLE C REFERENCE
+C             NSTART    - STARTING POINTERS TO ARRAY NCODNUM
+C             NLEN      - LENGTHS
+C             NCODNUM   - CODE/FLAG TABLE NUMBER
+C             NSTARTC   - STARTING POINTERS TO ARRAY CTEXT
+C             NLENC     - LENGTHS
+C
+
diff --git a/bufrdc/bcmctc.F b/bufrdc/bcmctc.F
new file mode 100755
index 0000000..8f61404
--- /dev/null
+++ b/bufrdc/bcmctc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+C
+      COMMON /BCMCTC/ CTEXT(JCTEXT)
+C
+C             CTEXT     - TEXT IN CODE/FLAG TABLES
+C
+
diff --git a/bufrdc/bcmdefc.F b/bufrdc/bcmdefc.F
new file mode 100755
index 0000000..0db7eed
--- /dev/null
+++ b/bufrdc/bcmdefc.F
@@ -0,0 +1,15 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMDEFC/ CECMWF,CUSER
+C
+C             CECMWF        -  CHARACTER STRING TO CONTROL DEFAULT SET UP
+C             CUSER  
diff --git a/bufrdc/bcmel.F b/bufrdc/bcmel.F
new file mode 100755
index 0000000..bf6d3db
--- /dev/null
+++ b/bufrdc/bcmel.F
@@ -0,0 +1,19 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMEL/ NTDLEN,NTDLST(JELEM),NTDEXL,NTDEXP(JELEM)
+C
+C             NTDLEN - NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C             NTDLST - LIST OF DATA DESCRIPTORS
+C             NTDEXL - NUMBER OF EXPANDED DATA DESCRIPTORS
+C             NTDEXP - LIST OF EXPANDED DATA DESCRIPTORS
+C
+
diff --git a/bufrdc/bcmoff.F b/bufrdc/bcmoff.F
new file mode 100755
index 0000000..89bcbc1
--- /dev/null
+++ b/bufrdc/bcmoff.F
@@ -0,0 +1,13 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMOFF/ NWP,NBP,NSUBSET,OMULTI
+
diff --git a/bufrdc/bcmroot.F b/bufrdc/bcmroot.F
new file mode 100755
index 0000000..0fd096d
--- /dev/null
+++ b/bufrdc/bcmroot.F
@@ -0,0 +1,16 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      COMMON /BCMROOT/ CROOT,OPRINT
+C
+C            CROOT    -  PATH FOR BUFR TABLES
+C            OPRINT   -  LOGICAL SWITCH TO PRINT TABLE NAMES
+C
+
diff --git a/bufrdc/bcmrq.F b/bufrdc/bcmrq.F
new file mode 100755
index 0000000..48f1c14
--- /dev/null
+++ b/bufrdc/bcmrq.F
@@ -0,0 +1,19 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMRQ/ NWORDP(JWORK),NBITP(JWORK)
+C
+C           NWORDP     - ARRAY CONTAINING WORD POINTERS TO
+C                        REQUESTED ELEMENTS
+C           NBITP      - ARRAY CONTAINING BIT POINTERS TO
+C                        REQUESTED ELEMENTS
+C
+
diff --git a/bufrdc/bcmtab.F b/bufrdc/bcmtab.F
new file mode 100755
index 0000000..702fe82
--- /dev/null
+++ b/bufrdc/bcmtab.F
@@ -0,0 +1,25 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMTAB/ NTABBTR(JTAB),NTABBS (JTAB),NTABBRV(JTAB),
+     1                NTABBDW(JTAB),NTABDTR(JTAB),NTABDST(JTAB),
+     2                NTABDL (JTAB),NTABDSQ(JTAB*20),NTABP(64,256)
+C
+C             NTABBTR    - TABLE B,  TABLE REFERENCE              ARRAY
+C             NTABBS     - TABLE B,  SCALE                        ARRAY
+C             NTABBRF    - TABLE B,  REFERENCE VALUE              ARRAY
+C             NTABBDW    - TABLE B,  DATA WIDTH                   ARRAY
+C             NTABDTR    - TABLE D,  TABLE REFERENCE              ARRAY
+C             NTABDST    - TABLE D,  STARTING POINTERS            ARRAY
+C             NTABDL     - TABLE D,  LENGTHS                      ARRAY
+C             NTABDSQ    - TABLE D,  LIST OF SEQUENCE DESCRIPTORS ARRAY
+C
+
diff --git a/bufrdc/bcmtabc.F b/bufrdc/bcmtabc.F
new file mode 100755
index 0000000..13c7cfc
--- /dev/null
+++ b/bufrdc/bcmtabc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMTABC / CTABBEN(JTAB),CTABBU (JTAB)
+C
+C             CTABBEN      -  TABLE B, ELEMENT NAME           ARRAY
+C             CTABBU       -  TABLE B, UNIT                   ARRAY
+C
+
diff --git a/bufrdc/bcmtabload.F b/bufrdc/bcmtabload.F
new file mode 100755
index 0000000..f037075
--- /dev/null
+++ b/bufrdc/bcmtabload.F
@@ -0,0 +1,30 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+      COMMON /BCMTABLOAD/ MTABBTR(JTAB,JTMAX),MTABBS (JTAB,JTMAX),
+     1                MTABBRV(JTAB,JTMAX),
+     1                MTABBDW(JTAB,JTMAX),MTABDTR(JTAB,JTMAX),
+     2                MTABDST(JTAB,JTMAX),
+     2                MTABDL (JTAB,JTMAX),MTABDSQ(JTAB*20,JTMAX),
+     2                MTABP(JTCLAS,JTEL,JTMAX), NTC,NTT
+C     
+C             MTABBTR    - TABLE B,  TABLE REFERENCE              ARRAY
+C             MTABBS     - TABLE B,  SCALE                        ARRAY
+C             MTABBRF    - TABLE B,  REFERENCE VALUE              ARRAY
+C             MTABBDW    - TABLE B,  DATA WIDTH                   ARRAY
+C             MTABDTR    - TABLE D,  TABLE REFERENCE              ARRAY
+C             MTABDST    - TABLE D,  STARTING POINTERS            ARRAY
+C             MTABDL     - TABLE D,  LENGTHS                      ARRAY
+C             MTABDSQ    - TABLE D,  LIST OF SEQUENCE DESCRIPTORS ARRAY
+C             NTT        - NUMBER OF TABLES
+C             NTC        - CURRENT TABLE
+C
+C
+
diff --git a/bufrdc/bcmtabloadc.F b/bufrdc/bcmtabloadc.F
new file mode 100755
index 0000000..e01316f
--- /dev/null
+++ b/bufrdc/bcmtabloadc.F
@@ -0,0 +1,18 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+      COMMON /BCMTABLOADC / CCTABBEN(JTAB,JTMAX),CCTABBU (JTAB,JTMAX),
+     1                   CTABLE_LIST(JTMAX)
+C
+C             CTABBEN      -  TABLE B, ELEMENT NAME           ARRAY
+C             CTABBU       -  TABLE B, UNIT                   ARRAY
+C             CTABLE_LIST  -  LIST OF TABLES                  ARRAY
+C
+
diff --git a/bufrdc/bcmwork.F b/bufrdc/bcmwork.F
new file mode 100755
index 0000000..6f61f8d
--- /dev/null
+++ b/bufrdc/bcmwork.F
@@ -0,0 +1,29 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      COMMON /BCMWORK/ RVIND,EPS,NBPW,NWPT,NBPT,NWPTB,NBPTB,NMASK(JBPW)
+     1,                NVIND,NBENP,NLTVNP,NWWP,NXXP,NYYP
+     2,                NZZP,NSSP,NEDN
+C
+C             NBPW          -  NUMBER OF BITS PER COMPUTER WORD
+C             NWPT          -  WORD POINTER
+C             NBPT          -  BIT POINTER
+C             NWPTB         -  POINTER TO WORD AT THE BEGINING OF NEXT SECTION
+C             NBPTB         -  POINTER TO BIT AT THE BEGINING OF NEXT SECTION
+C             NMASK         -  BIT MASK ARRAY
+C             NVIND         -  MISSING VALUE INDICATOR (INTEGER)
+C             RVIND         -  MISSING VALUE INDICATOR (REAL)
+C             NBENP         -  PREVIOUS BUFR EDITION NUMBER
+C             NLTVNP        -  PREVIOUS LOCAL TABLE VERSION NUMBER
+C             NXXP          -  BUFR MASTER TABLE USED
+C             NYYP          -  VERSION NUMBER OF MASTER TABLE USED
+C             NZZP          -  VERSION NUMBER OF LOCAL TABLE USED
+C             NEDN          -  BUFR EDITION
+
diff --git a/bufrdc/bcmwt.F b/bufrdc/bcmwt.F
new file mode 100755
index 0000000..5307541
--- /dev/null
+++ b/bufrdc/bcmwt.F
@@ -0,0 +1,36 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMWT/ NDWINC,NSCAM,NAFDW,NWT ,ODREPF,N40,N07,N08,
+     1               NDWINC07,NSCAM07,NAFDWA(100),NFD,NREP,OREP,
+     1               N221,MREL,NFCM,NFUCM,MBMP,OMARKER,
+     2               MBMPL,NSTACK(JELEM),NWTEN(JELEM),
+     3               NWTR (JELEM),NWTS (JELEM),NWTRV (JELEM),
+     4               NWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NDWINC   -  DATA WIDTH INCREMENT
+C             NSCAM    -  SCALE MULTIPLIER
+C             NAFDW    -  AUGMENTED FIELD DATA WIDTH
+C             NWT      -  POINTER TO WORKING TABLE
+C             NSTACK   -  LIST OF DATA DESCRIPTORS
+C             ODREPF   -  REPLICATION (LOGICAL)
+C             N221     -  DATA NOT PRESENT FOR N221 ELEMENTS
+C             MREL     -  POINTER TO THE LAST DATA ELEMENT
+C             NFCM     -  FIRST COMPRESSED MESSAGE
+C             MBMP     -  POINTER TO THE BEGINING OF BIT MAP
+C             NWTR     -  WORKING TABLE REFERENCE
+C             NWTS     -  WORKING SCALE
+C             NWTRV    -  WORKING REFERENCE VALUE
+C             NWTDW    -  WORKING DATA WIDTH
+C             NWTIW    -  WORKING DATA WIDTH OF INCREMENTS
+C             NWTIWS   -  WORKING TOTAL DATA WIDTH OF ELEMENT SET
+C
+
diff --git a/bufrdc/bcmwtc.F b/bufrdc/bcmwtc.F
new file mode 100755
index 0000000..48ee66e
--- /dev/null
+++ b/bufrdc/bcmwtc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCMWTC/ CWTEN(JELEM),CWTU (JELEM)
+C
+C               CWTEN    -  WORKING TABLE ELEMENT NAAME
+C               CWTU     -  WORKING TABLE UNITS
+C
+
diff --git a/bufrdc/bcomatb.F b/bufrdc/bcomatb.F
new file mode 100755
index 0000000..99d9c59
--- /dev/null
+++ b/bufrdc/bcomatb.F
@@ -0,0 +1,21 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMATB/ NJA,NATBTR(JTAB),NATBS (JTAB),
+     1                NATBRV(JTAB),NATBDW(JTAB)
+C
+C
+C             NATBTR      - AUGMENTED TABLE B TABLE REFERENCE
+C             NATBS       - AUGMENTED TABLE B SCALE
+C             NATBRV      - AUGMENTED TABLE B REFERENCE VALUE
+C             NATBDW      - AUGMENTED TABLE B DATA WIDTH
+C
+
diff --git a/bufrdc/bcomatbc.F b/bufrdc/bcomatbc.F
new file mode 100755
index 0000000..4ad3861
--- /dev/null
+++ b/bufrdc/bcomatbc.F
@@ -0,0 +1,16 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMATBC/ CATBEN(JTAB),CATBU (JTAB)
+C
+C             CATBEN      - AUGMENTED TABLE B ELEMENT NAME
+C             CATBU       - AUGMENTED TABLE B UNITS
+
diff --git a/bufrdc/bcombef.F b/bufrdc/bcombef.F
new file mode 100755
index 0000000..a217805
--- /dev/null
+++ b/bufrdc/bcombef.F
@@ -0,0 +1,19 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMBEF / M,MM,N,JCV
+C
+C             M       -  NUMBER OF ELEMENTS
+C             MM      -  NUMBER OF ELEMENTS
+C             N       -  NUMBER OF DATA SUB_SETS
+C             JCV     -  NUMBER OF CHARACTER VALUES
+C
+
diff --git a/bufrdc/bcomcom.F b/bufrdc/bcomcom.F
new file mode 100755
index 0000000..464010c
--- /dev/null
+++ b/bufrdc/bcomcom.F
@@ -0,0 +1,13 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMCOM/ ICOMP
+
diff --git a/bufrdc/bcomct.F b/bufrdc/bcomct.F
new file mode 100755
index 0000000..8337492
--- /dev/null
+++ b/bufrdc/bcomct.F
@@ -0,0 +1,23 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMCT/ NREF(JCTAB)   ,NSTART(JCTAB) ,NLEN(JCTAB),
+     1               NCODNUM(JCTST),NSTARTC(JCTST),
+     2               NLENC(JCTST)
+C
+C             NREF      - TABLE C REFERENCE
+C             NSTART    - STARTING POINTERS TO ARRAY NCODNUM
+C             NLEN      - LENGTHS
+C             NCODNUM   - CODE/FLAG TABLE NUMBER
+C             NSTARTC   - STARTING POINTERS TO ARRAY CTEXT
+C             NLENC     - LENGTHS
+C
+
diff --git a/bufrdc/bcomctc.F b/bufrdc/bcomctc.F
new file mode 100755
index 0000000..c3c5046
--- /dev/null
+++ b/bufrdc/bcomctc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+C
+      COMMON /BCOMCTC/ CTEXT(JCTEXT)
+C
+C             CTEXT     - TEXT IN CODE/FLAG TABLES
+C
+
diff --git a/bufrdc/bcomdefc.F b/bufrdc/bcomdefc.F
new file mode 100755
index 0000000..607969b
--- /dev/null
+++ b/bufrdc/bcomdefc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMDEFC/ CECMWF,CUSER
+C
+C             CECMWF        -  CHARACTER STRING TO CONTROL DEFAULT SET UP
+C             CUSER         -  CHARACTER STRING TO CONTROL USER SET UP
+C
+
diff --git a/bufrdc/bcomel.F b/bufrdc/bcomel.F
new file mode 100755
index 0000000..e10197a
--- /dev/null
+++ b/bufrdc/bcomel.F
@@ -0,0 +1,18 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMEL/ NTDLEN,NTDLST(JELEM),NTDEXL,NTDEXP(JELEM)
+C
+C             NTDLEN - NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C             NTDLST - LIST OF DATA DESCRIPTORS
+C             NTDEXL - NUMBER OF EXPANDED DATA DESCRIPTORS
+C             NTDEXP - LIST OF EXPANDED DATA DESCRIPTORS
+
diff --git a/bufrdc/bcomoff.F b/bufrdc/bcomoff.F
new file mode 100755
index 0000000..dbbdf99
--- /dev/null
+++ b/bufrdc/bcomoff.F
@@ -0,0 +1,14 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMOFF/ NSIZEG(JELEM),NSIZE(JELEM),NWTRG(JWORK),
+     1                 NWTDWG(JWORK),NWP,NBP,NSUBSET,OMULTI,OS4
+
diff --git a/bufrdc/bcomp.F b/bufrdc/bcomp.F
new file mode 100755
index 0000000..62d2fef
--- /dev/null
+++ b/bufrdc/bcomp.F
@@ -0,0 +1,20 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMP/ INWTEN(JELEM),INWTR (JELEM),INWTS (JELEM),
+     1                INWTRV (JELEM),INWTDW(JELEM),
+     2                INWORDP(JWORK),INBITP(JWORK)
+C             INWTEN   -  WOKING TABLE
+C             INWTR     -  WORKING TABLE REFERENCE
+C             INWTS     -  WORKING SCALE
+C             INWTRV    -  WORKING REFERENCE VALUE
+C             INWTDW    -  WORKING DATA WIDTH
+
diff --git a/bufrdc/bcomreq.F b/bufrdc/bcomreq.F
new file mode 100755
index 0000000..e6577b8
--- /dev/null
+++ b/bufrdc/bcomreq.F
@@ -0,0 +1,34 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMREQ/ RQVAL(JELEM),NREQ(2),NRQ(JELEM),NRQL
+C
+C             *NREQ*    -  FLAG
+C                          BIT NUMBER     MEANING
+C
+C                              1        - 0 NO BIT MAP DELIVERED TO USER
+C                                         1    BIT MAP DELIVERED TO USER
+C                              2        - 0 NO PARTIAL EXPANSION
+C                                         1    PARTIAL EXPANSION
+C                              3        - 0 NO Q/C REQUIRED
+C                                       - 1    Q/C REQUIRED
+C                              4        - 0 NO STATISTICS REQUIRED
+C                                       - 1    STATISTICS
+C                              5        - 0 NO DIFFRENCE STATISTICS
+C                                       - 1    DIFFERENCE STATISTICS
+C                              6        - 0 NO SUBSTITUTED VALUES
+C                                       - 1    SUBSTITUTED VALUES
+C             *NRQL*    -  NUMBER OF REQUESTED ELEMENTS
+C             *NRQ*     -  LIST OF REQUESTED TABLE B REFERENCE
+C             *RQVAL*   -  LIST OF VALUES SIGNIFYING REQUESTED ELEMENT
+C                          (SAY PRESSURE  AT 50000 PA)
+C
+
diff --git a/bufrdc/bcomroot.F b/bufrdc/bcomroot.F
new file mode 100755
index 0000000..de1c6ba
--- /dev/null
+++ b/bufrdc/bcomroot.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMROOT/ CROOT,OPRINT,OCTABLE
+C
+C            CROOT    -  PATH FOR BUFR TABLES
+C            OPRINT   -  LOGICAL SWITCH TO PRINT TABLE NAMES
+C            OCTABLE  -  LOGICAL SWITCH TO USE CODE/FLAG TABLES
+C
diff --git a/bufrdc/bcomrq.F b/bufrdc/bcomrq.F
new file mode 100755
index 0000000..4d33300
--- /dev/null
+++ b/bufrdc/bcomrq.F
@@ -0,0 +1,19 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMRQ/ NWORDP(JWORK),NBITP(JWORK)
+C
+C           NWORDP     - ARRAY CONTAINING WORD POINTERS TO
+C                        REQUESTED ELEMENTS
+C           NBITP      - ARRAY CONTAINING BIT POINTERS TO
+C                        REQUESTED ELEMENTS
+C
+
diff --git a/bufrdc/bcomtab.F b/bufrdc/bcomtab.F
new file mode 100755
index 0000000..5851449
--- /dev/null
+++ b/bufrdc/bcomtab.F
@@ -0,0 +1,26 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMTAB/ NTABBTR(JTAB),NTABBS (JTAB),NTABBRV(JTAB),
+     1                NTABBDW(JTAB),NTABDTR(JTAB),NTABDST(JTAB),
+     2                NTABDL (JTAB),NTABDSQ(JTAB*20),NTABP(64,256)
+C     
+C             NTABBTR    - TABLE B,  TABLE REFERENCE              ARRAY
+C             NTABBS     - TABLE B,  SCALE                        ARRAY
+C             NTABBRF    - TABLE B,  REFERENCE VALUE              ARRAY
+C             NTABBDW    - TABLE B,  DATA WIDTH                   ARRAY
+C             NTABDTR    - TABLE D,  TABLE REFERENCE              ARRAY
+C             NTABDST    - TABLE D,  STARTING POINTERS            ARRAY
+C             NTABDL     - TABLE D,  LENGTHS                      ARRAY
+C             NTABDSQ    - TABLE D,  LIST OF SEQUENCE DESCRIPTORS ARRAY
+C
+C
+
diff --git a/bufrdc/bcomtabc.F b/bufrdc/bcomtabc.F
new file mode 100755
index 0000000..13edb1a
--- /dev/null
+++ b/bufrdc/bcomtabc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMTABC / CTABBEN(JTAB),CTABBU (JTAB)
+C
+C             CTABBEN      -  TABLE B, ELEMENT NAME           ARRAY
+C             CTABBU       -  TABLE B, UNIT                   ARRAY
+C
+
diff --git a/bufrdc/bcomtabload.F b/bufrdc/bcomtabload.F
new file mode 100755
index 0000000..fcdb816
--- /dev/null
+++ b/bufrdc/bcomtabload.F
@@ -0,0 +1,37 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+      COMMON /BCOMTABLOAD/ MTABBTR(JTAB,JTMAX),MTABBS (JTAB,JTMAX),
+     1                MTABBRV(JTAB,JTMAX),
+     1                MTABBDW(JTAB,JTMAX),MTABDTR(JTAB,JTMAX),
+     2                MTABDST(JTAB,JTMAX),
+     2                MTABDL (JTAB,JTMAX),MTABDSQ(JTAB*20,JTMAX),
+     2                MTABP(JTCLAS,JTEL,JTMAX), NTC,NTT,
+     3                MNREF(JCTAB,JTMAX),MNSTART(JCTAB,JTMAX),
+     3                MNLEN(JCTAB,JTMAX),MNCODNUM(JCTST,JTMAX),
+     3                MNSTARTC(JCTST,JTMAX),MNLENC(JCTST,JTMAX)
+C     
+C             MTABBTR    - TABLE B,  TABLE REFERENCE              ARRAY
+C             MTABBS     - TABLE B,  SCALE                        ARRAY
+C             MTABBRF    - TABLE B,  REFERENCE VALUE              ARRAY
+C             MTABBDW    - TABLE B,  DATA WIDTH                   ARRAY
+C             MTABDTR    - TABLE D,  TABLE REFERENCE              ARRAY
+C             MTABDST    - TABLE D,  STARTING POINTERS            ARRAY
+C             MTABDL     - TABLE D,  LENGTHS                      ARRAY
+C             MTABDSQ    - TABLE D,  LIST OF SEQUENCE DESCRIPTORS ARRAY
+C             NTT        - NUMBER OF TABLES
+C             NTC        - CURRENT TABLE
+C             MNREF      - TABLE C   REFERENCE NUMBER             ARRAY
+C             MNSTART    - START OF CODES                         ARRAY
+C             MNLEN      - NUMBER OF CODES                        ARRAY
+C             MNSTARTC   - START OF TEXT                          ARRAY
+C             MNLENC     - NUMBER OF CODE STRINGS                 ARRAY
+C
+C
diff --git a/bufrdc/bcomtabloadc.F b/bufrdc/bcomtabloadc.F
new file mode 100755
index 0000000..c3f94cd
--- /dev/null
+++ b/bufrdc/bcomtabloadc.F
@@ -0,0 +1,19 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C
+      COMMON /BCOMTABLOADC / CCTABBEN(JTAB,JTMAX),CCTABBU (JTAB,JTMAX),
+     1                       CTABLE_LIST(JTMAX),CCTEXT(JCTEXT,JTMAX)
+C
+C             CTABBEN      -  TABLE B, ELEMENT NAME           ARRAY
+C             CTABBU       -  TABLE B, UNIT                   ARRAY
+C             CTABLE_LIST  -  LIST OF TABLES                  ARRAY
+C             CCTEXT       -  CODE/FLAG TABLES TEXT           ARRAY
+C
diff --git a/bufrdc/bcomunit.F b/bufrdc/bcomunit.F
new file mode 100755
index 0000000..de1e81d
--- /dev/null
+++ b/bufrdc/bcomunit.F
@@ -0,0 +1,11 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      COMMON /BCOMUNIT/ KNTN
diff --git a/bufrdc/bcomwork.F b/bufrdc/bcomwork.F
new file mode 100755
index 0000000..5a02e51
--- /dev/null
+++ b/bufrdc/bcomwork.F
@@ -0,0 +1,29 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      COMMON /BCOMWORK/ RVIND,EPS,NBPW,NWPT,NBPT,NWPTB,NBPTB,NMASK(JBPW)
+     1,                 NVIND,NBENP,NLTVNP,NWWP,NXXP,NYYP
+     2,                 NZZP,NSSP
+C
+C             NBPW          -  NUMBER OF BITS PER COMPUTER WORD
+C             NWPT          -  WORD POINTER
+C             NBPT          -  BIT POINTER
+C             NWPTB         -  POINTER TO WORD AT THE BEGINING OF NEXT SECTION
+C             NBPTB         -  POINTER TO BIT AT THE BEGINING OF NEXT SECTION
+C             NMASK         -  BIT MASK ARRAY
+C             NVIND         -  MISSING VALUE INDICATOR (INTEGER)
+C             RVIND         -  MISSING VALUE INDICATOR (REAL)
+C             NBENP         -  PREVIOUS BUFR EDITION NUMBER
+C             NLTVNP        -  PREVIOUS LOCAL TABLE VERSION NUMBER
+C             NXXP          -  BUFR MASTER TABLE USED
+C             NYYP          -  VERSION NUMBER OF MASTER TABLE USED
+C             NZZP          -  VERSION NUMBER OF LOCAL TABLE USED
+C
+C
diff --git a/bufrdc/bcomwt.F b/bufrdc/bcomwt.F
new file mode 100755
index 0000000..d8f1b7a
--- /dev/null
+++ b/bufrdc/bcomwt.F
@@ -0,0 +1,37 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMWT/ NDWINC,NSCAM,NAFDW,NWT ,ODREPF,N40,N07,N08,
+     1               NDWINC07,NSCAM07,NAFDWA(100),NFD,NREP,OREP,
+     1               N221,MREL,NFCM,NFUCM,MBMP,OMARKER,M0,NSTOP,
+     2               MBMPL,NSTACK(JELEM),NWTEN(JELEM),
+     3               NWTR (JELEM),NWTS (JELEM),NWTRV (JELEM),
+     4               NWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NDWINC   -  DATA WIDTH INCREMENT
+C             NSCAM    -  SCALE MULTIPLIER
+C             NAFDW    -  AUGMENTED FIELD DATA WIDTH
+C             NWT      -  POINTER TO WORKING TABLE
+C             NSTACK   -  LIST OF DATA DESCRIPTORS
+C             ODREPF   -  REPLICATION (LOGICAL)
+C             N221     -  DATA NOT PRESENT FOR N221 ELEMENTS
+C             MREL     -  POINTER TO THE LAST DATA ELEMENT
+C             NFCM     -  FIRST COMPRESSED MESSAGE
+C             MBMP     -  POINTER TO THE BEGINING OF BIT MAP
+C             NWTR     -  WORKING TABLE REFERENCE
+C             NWTS     -  WORKING SCALE
+C             NWTRV    -  WORKING REFERENCE VALUE
+C             NWTDW    -  WORKING DATA WIDTH
+C             NWTIW    -  WORKING DATA WIDTH OF INCREMENTS
+C             NWTIWS   -  WORKING TOTAL DATA WIDTH OF ELEMENT SET
+C             NSTOP    -  STOP EXPANSION AFTER NSTOP ELEMENTS
+C
+
diff --git a/bufrdc/bcomwtc.F b/bufrdc/bcomwtc.F
new file mode 100755
index 0000000..02940a2
--- /dev/null
+++ b/bufrdc/bcomwtc.F
@@ -0,0 +1,17 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCOMWTC/ CWTEN(JELEM),CWTU (JELEM)
+C
+C             CWTEN    -  WORKING TABLE ELEMENT NAAME
+C               CWTU     -  WORKING TABLE UNITS
+C
+
diff --git a/bufrdc/bcprq.F b/bufrdc/bcprq.F
new file mode 100755
index 0000000..0fc10ad
--- /dev/null
+++ b/bufrdc/bcprq.F
@@ -0,0 +1,14 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C
+      COMMON /BCPRQ/ NPMISS,NPRUS,NOKEY,NOFL
+C
+
diff --git a/bufrdc/big_endian.F b/bufrdc/big_endian.F
new file mode 100755
index 0000000..03f88df
--- /dev/null
+++ b/bufrdc/big_endian.F
@@ -0,0 +1,35 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      logical function big_endian()
+
+      implicit none
+
+      integer*4            icharacter
+      character*4 testcharacter
+      integer*4             newint
+
+
+      testcharacter="ABCD"
+
+      newint=0
+      read(testcharacter,'(a4)') icharacter
+c     icharacter=transfer(testcharacter,0)
+
+      call mvbits(icharacter, 0, 8, newint, 0)
+
+      if(char(newint) .eq. 'A') then
+c         little endian
+          big_endian=.false.
+      else
+c         big endian
+          big_endian=.true.
+      end if
+      end
diff --git a/bufrdc/btable.F b/bufrdc/btable.F
new file mode 100755
index 0000000..eb2e588
--- /dev/null
+++ b/bufrdc/btable.F
@@ -0,0 +1,222 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BTABLE(YNAME,YTABB,KERR)
+C
+C**** *BTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          CREATE BUFR TABLE B IN BINARY FORM.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, FM 94 BUFR.
+C
+C          J.K.GIBSON AND M.DRAGOSAVAC,1987: DECODING DATA 
+C          REPRESENTATION FM 94 BUFR,TECHNICAL MEMORANDUM NO.
+C
+C          J.K.GIBSON,1986:EMOS 2 - STANDARDS FOR SOFTWARE DEVELOPMENT
+C          AND MAINTANANCE ,TECHICAL MEMORANDUM NO.       ECMWF.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomwork.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomct.F"
+#     include "bcomctc.F"
+#     include "bcomroot.F"
+#     include "bcomtabload.F"
+#     include "bcomtabloadc.F"
+
+C
+      CHARACTER*64 CTABBEN,CCTABBEN
+      CHARACTER*24 CTABBU,CCTABBU,CTABLE_LIST,YTABB
+      CHARACTER*120 YENTRY
+      CHARACTER*(*) YNAME
+      CHARACTER*256  YFNAME
+      REAL*8 RVIND,EPS
+C
+C     DATA CTABBEN/JTAB*' '/,CTABBU/JTAB*' '/
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      ICLASS0=0
+      IVIND=2147483647
+      YFNAME=' '
+C
+      DO 101 I=1,64
+      do 101 ii=1,255
+      NTABP(I,ii)=0
+ 101  CONTINUE
+C
+      DO 102 i=1,JTAB
+      NTABBTR(I)=IVIND
+      NTABBS (I)=IVIND
+      NTABBRV(I)=IVIND
+      NTABBDW(I)=IVIND
+      CTABBEN(I)=' '
+      CTABBU (I)=' '
+ 102  CONTINUE
+C
+      II=INDEX(YNAME,' ')
+      II=II-1
+      YFNAME=YNAME(1:II)
+      II=INDEX(YFNAME,' ')
+      II=II-1
+      CALL GET_FREE_UNIT(IUNIT)
+      OPEN(UNIT=IUNIT,FILE=YFNAME(1:II),
+     2            IOSTAT=IOS,      
+     1            STATUS='OLD')
+      IF(IOS.NE.0) THEN
+         print*,'open error on ',YFNAME(1:II)
+         kerr=61
+         return
+      END IF
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE B ELEMENT.
+C                ------------------------
+C
+ 200  CONTINUE
+C
+      YENTRY=' '
+      READ(IUNIT,'(A)',ERR=402,END=300) YENTRY
+C
+      J=J+1
+      IF(J.GT.JTAB) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         kerr=6
+         return
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, ELEMENT NAME, UNITS,
+C*               REFERENCE VALUE AND DATA WIDTH.
+C
+ 210  CONTINUE
+C
+C
+      READ(YENTRY,'(1X,I6,1x,64x,1x,24x,1x,I3,1x,I12,1x,I3)')
+     1                                         NTABBTR(J),NTABBS (J),
+     1                                         NTABBRV(J),NTABBDW(J)
+C
+      CTABBEN(J)=YENTRY( 9:72)
+      CTABBU (J)=YENTRY(74:97)
+C
+      ICLASS=NTABBTR(J)/1000
+      IYYY  =NTABBTR(J)-ICLASS*1000+1
+C
+      ICLASS=ICLASS+1
+      NTABP(ICLASS,IYYY)=J
+C
+c      WRITE(*,1000) NTABBTR(J),CTABBEN(J),CTABBU(J),NTABBS(J),
+c     1              NTABBRV(J),NTABBDW(J)
+c 1000 FORMAT(1H ,1X,I6,1x,64x,1x,24x,1x,,I3,1x,I12,1x,I3)
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      NTT=NTT+1
+      IF(NTT.GT.JTMAX) THEN
+         NTT=NTT-1
+         NTC=NTC+1
+         IF(NTC.GT.10) NTC=1
+         DO J=1,JTAB
+         MTABBTR(J,NTC)=NTABBTR(J)
+         MTABBS (J,NTC)=NTABBS (J)
+         MTABBRV(J,NTC)=NTABBRV(J)
+         MTABBDW(J,NTC)=NTABBDW(J)
+         CCTABBEN(J,NTC)=CTABBEN(J)
+         CCTABBU (J,NTC)=CTABBU (J)
+         END DO
+         DO I=1,64
+         DO K=1,255
+         MTABP(I,K,NTC)=NTABP(I,K)
+         END DO
+         END DO
+         CTABLE_LIST(NTC)=YTABB
+      ELSE
+         DO J=1,JTAB
+         MTABBTR(J,NTT)=NTABBTR(J)
+         MTABBS (J,NTT)=NTABBS (J)
+         MTABBRV(J,NTT)=NTABBRV(J)
+         MTABBDW(J,NTT)=NTABBDW(J)
+         CCTABBEN(J,NTT)=CTABBEN(J)
+         CCTABBU (J,NTT)=CTABBU (J)
+         END DO
+         DO I=1,64
+         DO K=1,255
+         MTABP(I,K,NTT)=NTABP(I,K)
+         END DO
+         END DO
+         CTABLE_LIST(NTT)=YTABB
+      END IF
+C
+      CLOSE(IUNIT)
+C
+C     WRITE(*,'(1h )')
+C     WRITE(*,'(1h ,a,i4)') 'Total number of entries in Table B is ',j
+C
+      RETURN
+C
+402   CONTINUE
+      KERR=6
+      WRITE(*,4402) IOS,YFNAME
+ 4402 FORMAT(1H ,'Read error',i4,' on ',a)
+      RETURN
+C
+ 401  CONTINUE
+C
+      KERR=61
+      WRITE(*,4401) IOS,YFNAME
+ 4401 FORMAT(1H ,'Open error',i4,' on ',a)
+C     
+      RETURN
+      END
diff --git a/bufrdc/btable1.F b/bufrdc/btable1.F
new file mode 100755
index 0000000..438edf3
--- /dev/null
+++ b/bufrdc/btable1.F
@@ -0,0 +1,221 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BTABLE1(YNAME,YTABB,KERR)
+C
+C**** *BTABLE1*
+C
+C
+C     PURPOSE.
+C     --------
+C          CREATE BUFR TABLE B IN BINARY FORM.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, FM 94 BUFR.
+C
+C          J.K.GIBSON AND M.DRAGOSAVAC,1987: DECODING DATA 
+C          REPRESENTATION FM 94 BUFR,TECHNICAL MEMORANDUM NO.
+C
+C          J.K.GIBSON,1986:EMOS 2 - STANDARDS FOR SOFTWARE DEVELOPMENT
+C          AND MAINTANANCE ,TECHICAL MEMORANDUM NO.       ECMWF.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcmwork.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmct.F"
+#     include "bcmctc.F"
+#     include "bcmroot.F"
+#     include "bcmtabload.F"
+#     include "bcmtabloadc.F"
+
+C
+      CHARACTER*64 CTABBEN,CCTABBEN
+      CHARACTER*24 CTABBU,CCTABBU,CTABLE_LIST,YTABB
+      CHARACTER*120 YENTRY
+      CHARACTER*(*) YNAME
+      CHARACTER*256  YFNAME
+      REAL*8 RVIND,EPS
+C
+C     DATA CTABBEN/JTAB*' '/,CTABBU/JTAB*' '/
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      ICLASS0=0
+      IVIND=2147483647
+      YFNAME=' '
+C
+      DO 101 I=1,64
+      do 101 ii=1,255
+      NTABP(I,ii)=0
+ 101  CONTINUE
+C
+      DO 102 i=1,JTAB
+      NTABBTR(I)=IVIND
+      NTABBS (I)=IVIND
+      NTABBRV(I)=IVIND
+      NTABBDW(I)=IVIND
+      CTABBEN(I)=' '
+      CTABBU (I)=' '
+ 102  CONTINUE
+C
+      II=INDEX(YNAME,' ')
+      II=II-1
+      YFNAME=YNAME(1:II)
+      II=INDEX(YFNAME,' ')
+      II=II-1
+      CALL GET_FREE_UNIT(IUNIT)
+      OPEN(UNIT=IUNIT,FILE=YFNAME(1:II),
+     2            IOSTAT=IOS,      
+     1            STATUS='OLD')
+      IF(IOS.NE.0) THEn
+         print*,'open error on ',YFNAME(1:II)
+         kerr=61
+         return
+      END IF
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE B ELEMENT.
+C                ------------------------
+C
+ 200  CONTINUE
+C
+      YENTRY=' '
+      READ(IUNIT,'(A)',ERR=402,END=300) YENTRY
+C
+      J=J+1
+      IF(J.GT.JTAB) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         kerr=65
+         return
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, ELEMENT NAME, UNITS,
+C*               REFERENCE VALUE AND DATA WIDTH.
+C
+ 210  CONTINUE
+C
+C
+      READ(YENTRY,'(1X,I6,1x,64x,1x,24x,1x,I3,1x,I12,1x,I3)')
+     1                                         NTABBTR(J),NTABBS (J),
+     1                                         NTABBRV(J),NTABBDW(J)
+C
+      CTABBEN(J)=YENTRY( 9:72)
+      CTABBU (J)=YENTRY(74:97)
+C
+      ICLASS=NTABBTR(J)/1000
+      IYYY  =NTABBTR(J)-ICLASS*1000+1
+C
+      ICLASS=ICLASS+1
+      NTABP(ICLASS,IYYY)=J
+C
+c      WRITE(*,1000) NTABBTR(J),CTABBEN(J),CTABBU(J),NTABBS(J),
+c     1              NTABBRV(J),NTABBDW(J)
+c 1000 FORMAT(1H ,1X,I6,1x,64x,1x,24x,1x,,I3,1x,I12,1x,I3)
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      NTT=NTT+1
+      IF(NTT.GT.JTMAX) THEN
+         NTT=NTT-1
+         NTC=NTC+1
+         IF(NTC.GT.10) NTC=1
+         DO J=1,JTAB
+         MTABBTR(J,NTC)=NTABBTR(J)
+         MTABBS (J,NTC)=NTABBS (J)
+         MTABBRV(J,NTC)=NTABBRV(J)
+         MTABBDW(J,NTC)=NTABBDW(J)
+         CCTABBEN(J,NTC)=CTABBEN(J)
+         CCTABBU (J,NTC)=CTABBU (J)
+         END DO
+         DO I=1,64
+         DO K=1,255
+         MTABP(I,K,NTC)=NTABP(I,K)
+         END DO
+         END DO
+         CTABLE_LIST(NTC)=YTABB
+      ELSE
+         DO J=1,JTAB
+         MTABBTR(J,NTT)=NTABBTR(J)
+         MTABBS (J,NTT)=NTABBS (J)
+         MTABBRV(J,NTT)=NTABBRV(J)
+         MTABBDW(J,NTT)=NTABBDW(J)
+         CCTABBEN(J,NTT)=CTABBEN(J)
+         CCTABBU (J,NTT)=CTABBU (J)
+         END DO
+         DO I=1,64
+         DO K=1,255
+         MTABP(I,K,NTT)=NTABP(I,K)
+         END DO
+         END DO
+         CTABLE_LIST(NTT)=YTABB
+      END IF
+
+      CLOSE(IUNIT)
+c     WRITE(*,'(1h )')
+c     WRITE(*,'(1h ,a,i4)') 'Total number of entries in Table B is',j
+C
+      RETURN
+C
+402   CONTINUE
+      KERR=1
+      WRITE(*,4402) IOS,YFNAME
+ 4402 FORMAT(1H ,'Read error',i4,' on ',a)
+      RETURN
+C
+ 401  CONTINUE
+C
+      KERR=1
+      WRITE(*,4401) IOS,YFNAME
+ 4401 FORMAT(1H ,'Open error',i4,' on ',a)
+C     
+      RETURN
+      END
diff --git a/bufrdc/bu_check_s4s.F b/bufrdc/bu_check_s4s.F
new file mode 100755
index 0000000..0b57441
--- /dev/null
+++ b/bufrdc/bu_check_s4s.F
@@ -0,0 +1,155 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      SUBROUTINE CHECK_S4S(KELEM,KSEC3,KSEC4,KERR)
+C
+C**** *CHECK_S4S*
+C
+C
+C     PURPOSE.
+C     --------
+C          CHECK SECTION 4 SIZE
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       JUNE 2009
+C
+C
+C     MODIFICATIONS.
+C     --------------
+
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+#     include "parameter.F"
+#     include "bcomoff.F"
+#     include "bcomwt.F"
+
+      DIMENSION KSEC3(*),KSEC4(*)
+      DIMENSION IMASK(8)
+
+    
+      DATA IMASK/1,2,4,8,16,32,64,128/
+
+c        Check if data are compressed
+         IB=0
+         IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+         IF(IB.EQ.0) THEN
+C         Uncompressed
+            IF(OMULTI) then
+              isum=0
+              IF(NSUBSET.EQ.KSEC3(3)) THEN
+              DO J=1,KSEC3(3)
+              DO I=1,NSIZEG(J)
+              IJ=I+(J-1)*KELEM 
+              isum=isum+NWTDWG(IJ)
+              END DO
+              END DO
+              ibytes=isum/8
+              ibit=isum-ibytes*8
+              if(ibit.ne.0) then
+C                padding to byte
+                 ibytes=ibytes+1
+                 if(mod(ibytes,2).ne.0) then
+                    ibytes=ibytes+1
+                 end if
+                 ibytes=ibytes+4
+              else
+                if(mod(ibytes,2).ne.0) then
+                    ibytes=ibytes+1
+                 end if
+                 ibytes=ibytes+4
+              end if
+              if((ksec4(1)-ibytes).gt.1) then
+                  print*,'Error in section 4 size'
+                  print*,'ksec4(1)=',ksec4(1)
+                  print*,'Actual size=',ibytes
+                  KERR=56
+                  return
+              end if
+              END IF
+            ELSE
+              isum=0
+              do I=1,NSIZE(1)
+              isum=isum+NWTDW(I)
+              END DO
+              isum=isum*ksec3(3)
+              ibytes=isum/8
+              ibit=isum-ibytes*8
+              if(ibit.ne.0) then
+C                padding to byte
+                 ibytes=ibytes+1
+                 if(mod(ibytes,2).ne.0) then
+                    ibytes=ibytes+1
+                 end if
+                 ibytes=ibytes+4
+              else
+                if(mod(ibytes,2).ne.0) then
+                    ibytes=ibytes+1
+                 end if
+                 ibytes=ibytes+4
+              end if
+              if((ksec4(1)-ibytes).gt.1) then
+               KERR=56
+               WRITE(KNTN,*)  'ERROR IN BU_CHECK_S4S: '
+               CALL BUERR(KERR)
+              WRITE(KNTN,*)  'KSEC4(1)=',ksec4(1),' ACTUAL SIZE=',ibytes
+               return
+              end if
+            END IF
+         ELSE
+C           Compressed
+            isum=0
+            do I=1,NSIZE(1)
+            isum=isum+NWTIWS(I)
+            END DO
+            ibytes=isum/8
+            ibit=isum-ibytes*8
+            if(ibit.ne.0) then
+C              padding to byte
+                ibytes=ibytes+1
+                if(mod(ibytes,2).ne.0) then
+                    ibytes=ibytes+1
+                 end if
+               ibytes=ibytes+4
+            else
+               if(mod(ibytes,2).ne.0) then
+                  ibytes=ibytes+1
+                end if
+               ibytes=ibytes+4
+            end if
+            if((ksec4(1)-ibytes).gt.1) then
+               KERR=56
+               WRITE(KNTN,*)  'ERROR IN BU_CHECK_S4S: '
+               CALL BUERR(KERR)
+              WRITE(KNTN,*)  'KSEC4(1)=',KSEC4(1),' ACTUAL SIZE=',ibytes
+               return
+            end if
+         END IF
+      END
diff --git a/bufrdc/buaug.F b/bufrdc/buaug.F
new file mode 100755
index 0000000..049160a
--- /dev/null
+++ b/bufrdc/buaug.F
@@ -0,0 +1,225 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUAUG(KPT,KDLEN,KDATA,KJ,KY,KSTACK,KERR)
+C
+C**** *BUAUG*
+C
+C
+C     PURPOSE.
+C     --------
+C          UPDATE AUGMENTED BUFR TABLE B.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUAUG(KPT,KDLEN,KDATA,KJ,KY,KSTACK,KER)
+C
+C        INPUT :
+C               *KPT*      - POINTER TOO KDATA ARRAY
+C               *KDLEN*    -  DIMENSION OF KDATA ARRAY
+C               *KDATA*    -  ARRAY CONTAINING DATA NEEDED FOR DATA DESCRIPTOR
+C                            EXPANSION
+C               *KJ*       - POINTER TO KSTACK ARRAY
+C               *KY*       - OPERAND OF THE DATA DESCRIPTOR OPERATOR
+C
+C        OUTPUT:
+C               *KSTACK* - LIST OF ELEMENTS
+C               *KERR*   - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          GBYTE        - PACK BIT PATHERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmatb.F"
+#     include "bcmatbc.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmbef.F"
+C
+      CHARACTER CATBEN*64,CWTEN*64,CTABBEN*64
+      CHARACTER CATBU*24,CWTU*24,CTABBU*24
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+C     ------------------------------------------------------------------
+C
+C*          1.   UPDATE AUGMENTED TABLE B .
+C                --------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C
+C*          1.1 Y = 0 ?
+C               -------
+ 110  CONTINUE
+C
+      IF( KY.EQ.0) THEN
+C
+C*          1.1.1 CLEAR AUGMENTED TABLE B.
+C                 ------------------------
+         NJA= 0
+C
+         DO 111 J=1,JTAB
+C
+         NATBTR(J)= 0
+         NATBS (J)= 0
+         NATBRV(J)= 0
+         NATBDW(J)= 0
+         CATBEN(J)=' '
+         CATBU (J)=' '
+C
+ 111     CONTINUE
+C
+         GO TO 300
+      END IF
+C
+C*          1.2  GET NEXT DESCRIPTOR FROM STACK.
+C                -------------------------------
+ 120  CONTINUE
+C
+      KJ=KJ + 1
+      KDD = KSTACK(KJ)
+C
+C*          1.3  ELEMENT DESCRIPTOR  ?
+C                ---------------------
+ 130  CONTINUE
+C
+      IF  = KDD /100000
+      IDIF= KDD -IF*100000
+      IX  = IDIF/1000
+      IY  = IDIF-IX*1000
+C
+      IF(IF.EQ.0) THEN
+C
+C*          1.3.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+         NWT = NWT + 1
+         M   = M   + 1
+         NWTEN(NWT)=836970
+         CWTEN(NWT)='REFERENCE VALUE'
+         CWTU (NWT)='  '
+         NWTDW(NWT)= KY
+         NWTS (NWT)=0
+         NWTRV(NWT)=0
+         NWTR (NWT)=0
+C
+C*          1.3.2 ADD ENTRY TO AUGMENTED TABLE B .
+C                 --------------------------------
+         DO 131 J=1,JTAB
+C
+         IF(NTABBTR(J).EQ.KDD) THEN
+            I=J
+            GO TO 133
+         END IF
+C
+ 131     CONTINUE
+C
+         KERR= 23
+         WRITE(KNTN,*) ' BUAUG :'
+         CALL BUERR(KERR)
+         GO TO 300
+C
+ 133  CONTINUE
+C
+         NJA=NJA + 1
+C
+         NATBTR(NJA)=NTABBTR(I)
+         NATBS (NJA)=NTABBS (I)
+         NATBRV(NJA)=NTABBRV(I)
+         NATBDW(NJA)=NTABBDW(I)
+         CATBEN(NJA)=CTABBEN(I)
+         CATBU (NJA)=CTABBU (I)
+C
+C*          1.3.3 COMPLITE ENTRY WITH NEW REFERENCE VALUE
+C                 ----------------------------------------
+C                 FROM DATA SECTION.
+C                 ------------------
+C
+         KPT=KPT+1
+         NATBRV(NJA)=KDATA(KPT)
+C
+C           1.3.4 UPDATE WORKING TABLES
+C                 ---------------------
+ 135     CONTINUE
+C
+C        CALL BUEPWT(KDD,KERR)
+C        IF(KERR.GT.0) RETURN
+C
+         GO TO 120
+C
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*           1.4   CHANGE REFERENCE VALUE ?
+C                  ------------------------
+ 140  CONTINUE
+C
+      IF( IF.EQ.2.AND.IX.EQ.3) THEN
+         IF(IY.EQ.255) GO TO 300
+         KY=IY
+         GO TO 120
+      END IF
+C     ------------------------------------------------------------------
+ 200  CONTINUE
+C
+      KERR=23
+      WRITE(KNTN,*) ' BUAUG :'
+      CALL BUERR(KERR)
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/bubox.F b/bufrdc/bubox.F
new file mode 100755
index 0000000..f64dfb8
--- /dev/null
+++ b/bufrdc/bubox.F
@@ -0,0 +1,533 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUBOX(KSUB,KSUP,KELEM,KWTR,CNAMES,CUNITS,KVALS,VALUES,
+     1                 KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU,KERR)
+C
+C**** *BUBOX*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C               *CALL BUBOX(KSUB,KSUP,KELEM,KWTR,CNAMES,CUNITS,KVALS,VALUES,
+C                           KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU,KERR)*
+C
+C        INPUT :
+C               *KSUB*    -  SUBSET NUMBER
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KELEM*   -  EXPECTED NUMBER OF EXPANDED TABLE B ELEMENTS
+C               *KWTR*    -  ARRAY CONTAINING BUFR TABLE B REFERENCE NUMBERS
+C               *CNAMES*  -  ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  ARRAY CONTAINING ELEMENT UNITS
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  ARRAY CONTAINING UNPACKED VALUES
+C               
+C        OUTPUT :
+C
+C               *KBOX*    -  NUMBER OF ROWS      
+C               *KAPP*    -  NUMBER OF COLUMNS
+C               *KLEN*    -  OFFSET FOR START OF NEXT COLUMN
+C               *KBOXR*   -  ARRAY CONTAINING BUFR TABLE B REFERENCE NUMBERS
+C               *VALS*    -  ARRAY CONTAINING UNPACKED VALUES
+C               *CBOXN*   -  ARRAY CONTAINING ELEMENT NAMES
+C               *CBOXU*   -  ARRAY CONTAINING ELEMENT UNITS
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/94.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+C
+#     include "bcomunit.F"
+C
+      CHARACTER*64 CNAMES(*)
+      CHARACTER*24 CUNITS(*)
+C
+C
+      DIMENSION KSUP(9),KWTR(*)
+C
+      DIMENSION IOPER(100),RPRINT(60)
+C
+      DIMENSION KBOXR(JWORK)
+      DIMENSION IBVAL(JELEM),IBPRINT(60)
+      CHARACTER*64 CBOXN(JELEM)
+      CHARACTER*24 CBOXU(JELEM)
+C
+#ifndef R_4
+      REAL*8 VALUES(*)
+      REAL*8 VALS(JWORK)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(*)
+      REAL   VALS(JWORK)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C     ------------------------------------------------------------------
+C
+C*          1.  GET ALL ELEMENTS UNTIL FIRST OPERATOR APPEAR.
+C               ---------------------------------------------
+ 100  CONTINUE
+C
+
+      IF(KERR.GT.0) RETURN
+C
+      RVIND=1.7D38
+      EPS=10.D-7
+      NVIND=2147483647
+C
+      IF(KELEM.GT.JELEM) THEN
+         KERR=47
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+
+C
+C     JUST TO KEEP PROGRAM FOR FUTURE MULTY SUBSET BOXING
+C
+      KSUB1=KSUB
+      KSUB2=KSUB
+C
+      IF(KSUB1.LT.1.OR.KSUB1.GT.KSUP(6)) THEN
+         KERR=44
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      IF(KSUB1.NE.KSUB2) THEN
+         WRITE(KNTN,*) 'ONLY ONE SUBSET AT A TIME',
+     1' WILL BE BOXED.'
+         KSUB2=KSUB1
+      END IF
+C
+      KBOXR(1)=2147483647
+      CBOXN(1)='OPERATOR'
+      CBOXU(1)=' '
+      KBOXR(2)=2147483647
+      CBOXN(2)='GENERATING CENTRE( CODE TABLE 001031)'
+      CBOXU(2)='CODE TABLE'
+      KBOXR(3)=2147483647
+      CBOXN(3)='GENERATING APPLICATION (CODE TABLE 001032)'
+      CBOXU(3)='CODE TABLE'
+      KBOXR(4)=2147483647
+      CBOXN(4)='STATISTICS (008024/008023) '
+      CBOXU(4)='CODE TABLE'
+      KBOXR(5)=2147483647
+      CBOXN(5)='INCREMENTAL UPDATE NUMBER'
+      CBOXU(5)='NUMERIC'
+      KBOXR(6)=2147483647
+      CBOXN(6)='MINIMISATION SIMULATION NUMBER'
+      CBOXU(6)='NUMERIC'
+C
+      MREL=0
+      J=0
+      DO 103 I=1,KSUP(5)
+      IF(KWTR(I).EQ.222000.OR.
+     1   KWTR(I).EQ.223000.OR.
+     1   KWTR(I).EQ.224000.OR.
+     1   KWTR(I).EQ.225000.OR.
+     1   KWTR(I).EQ.235000.OR.
+     1   KWTR(I).EQ.237255.OR.
+     1   KWTR(I).EQ.232000) THEN
+         J=J+1
+         IOPER(J)=I
+      END IF
+ 103  CONTINUE
+C
+      NOPER=J
+C
+      IOPER(J+1)=KSUP(5)
+C
+      NOPP1=NOPER+1
+      INI=IOPER(1)*8+20
+      IF(INI*NOPP1.GT.JWORK) THEN
+         KERR=47
+         WRITE(KNTN,*) 'TOO MANY DATA FOR BOXING.'
+         RETURN
+      END IF
+C
+      DO 105 I=1,INI*NOPP1
+      VALS(I)=RVIND
+      KBOXR(I)=NVIND
+ 105  CONTINUE
+C
+      IF(NOPER.EQ.0) THEN
+         KAPP =1                            ! NUMBER OF APPLICATIONS
+         KAPPL=1
+         KLEN=KELEM
+         J=6
+         DO 101 I=1,KSUP(5)
+         J=J+1
+         KBOXR(J)=KWTR(I)
+         CBOXN(J)=CNAMES(I)
+         CBOXU(J)=CUNITS(I)
+         DO 191 KK=KSUB1,KSUB2
+         JJ=I+(KK-1)*KELEM                     ! POINTER TO VALUES ARRAY
+         IP=J  !+(KAPP-1)*KLEN  ! +(KK-1)*KAPPL*KLEN ! POINTER TO VALS ARRAY
+         VALS (IP)=VALUES(JJ)
+ 191     CONTINUE
+ 101     CONTINUE
+C
+         KBOX=J                             ! TOTAL NUMBER OF ELEMENTS
+         MREL=J
+         GO TO 2000
+      END IF
+C
+      O236=.FALSE.
+C
+      LFIRST=1
+      J=6
+C
+C
+      LAST=IOPER(1)-1
+      IF(MREL.EQ.0) MREL=LAST+6
+      KLEN=LAST*8+20
+C
+ 102  CONTINUE
+C
+C*          1.1 MOVE ELEMENTS FROM LFIRST TO LAST INTO BOX.
+C               -------------------------------------------
+ 110  CONTINUE
+C
+      KAPP =1                            ! NUMBER OF APPLICATIONS
+      KAPPL=60
+      DO 111 I=LFIRST,LAST
+      J=J+1
+      KBOXR(J)=KWTR(I)
+      CBOXN(J)=CNAMES(I)
+      CBOXU(J)=CUNITS(I)
+      DO 192 KK=KSUB1,KSUB2
+      JJ=I+(KK-1)*KELEM
+      IP=J ! +(KAPP-1)*KLEN   ! +(KK-1)*KAPPL*KLEN
+      VALS (IP)=VALUES(JJ)
+ 192  CONTINUE
+ 111  CONTINUE
+C
+      KBOX=J                             ! TOTAL NUMBER OF ELEMENTS
+C
+      DO 1000 LL=1,NOPER
+C
+      K=IOPER(LL)
+C
+      IF(KWTR(K).EQ.235000) THEN
+         MREL=0
+         K=K+1
+C
+         KL=IOPER(LL+1)-1
+         DO 112 I=K,KL
+         J=J+1
+         KBOXR(J)=KWTR(I)
+         CBOXN(J)=CNAMES(I)
+         CBOXU(J)=CUNITS(I)
+         DO 190 KK=KSUB1,KSUB2
+         JJ=I+(KK-1)*KELEM
+         IP=J  !+(KAPP-1)*KLEN              ! +(KK-1)*KAPPL*KLEN
+         VALS (IP)=VALUES(JJ)
+ 190     CONTINUE
+ 112     CONTINUE
+         GO TO 1000
+      END IF
+      IF(KWTR(K).EQ.222000) THEN
+         K=K+1
+         IMARK=222000
+         IF(MREL.EQ.0) MREL=J
+         GO TO 119
+      END IF
+      IF(KWTR(K).EQ.223000) THEN
+         K=K+1
+         IMARK=223000
+         IF(MREL.EQ.0) MREL=J
+         GO TO 119
+      END IF
+      IF(KWTR(K).EQ.224000) THEN
+         K=K+1
+         IMARK=224000
+         IF(MREL.EQ.0) MREL=J
+         GO TO 119
+      END IF
+      IF(KWTR(K).EQ.225000) THEN
+         K=K+1
+         IMARK=225000
+         IF(MREL.EQ.0) MREL=J
+         GO TO 119
+      END IF
+      IF(KWTR(K).EQ.232000) THEN
+         K=K+1
+         IMARK=232000
+         IF(MREL.EQ.0) MREL=J
+      END IF
+C
+ 119  CONTINUE
+C
+C     CHECK IF NEXT ELEMENT IS OPERATOR
+C
+      IF(KWTR(K).EQ.236000) THEN
+         O236=.TRUE.
+         K=K+1
+      END IF
+C
+      IF(KWTR(K).EQ.237000) THEN
+         K=K+1
+         GO TO 120
+      END IF
+C
+      IF(KWTR(K).EQ.237255) THEN
+         O236=.FALSE.
+         K=K+1
+         GO TO 1000
+      END IF
+C
+C     SKIP IF DELAYED REPLICATION FACTOR FOLLOW
+C
+      IF(KWTR(K).EQ.31002.OR.KWTR(K).EQ.31001.OR.
+     1   KWTR(K).EQ.31000) K=K+1
+C
+C     NEXT ELEMENT MUST BE DATA PRESENT INDICATOR
+C
+      IF(KWTR(K).NE.31031.AND.KWTR(K).NE.31192) THEN
+         KERR=42
+         CALL BUERR(KERR)
+         WRITE(KNTN,*) 'ELEMENT ',K,' MUST BE',
+     1' DATA PRESENT INDICATOR.'
+         RETURN
+      END IF
+C
+C     COUNT NUMBER OF DATA PRESENT INDICATORS
+C
+C     IBITS - POINTER TO THE FIRST DATA PRESENT INDICATOR
+C     IDPI  - NUMBER OF DATA PRESENT INDICATORS
+C
+      IBITS=K
+      IDPI=0
+      DO 113 I=K,IOPER(LL+1)
+      IF(KWTR(I).EQ.31031) THEN
+         IDPI=IDPI+1 
+      ELSE
+         GO TO 114
+      END IF
+ 113  CONTINUE
+C
+      KERR=43
+      CALL BUERR(KERR)
+      RETURN
+C
+ 114  CONTINUE
+C
+C     RESET CURRENT POINTER
+C
+      K=I
+C
+C     GET BIT MAP FROM VALUES
+C
+      IBP=IBITS-1
+      DO 115 I=1,IDPI
+      IBP=IBP+1
+      IF(ABS(VALUES(IBP)-RVIND)/RVIND.LT.EPS) THEN
+         IBVAL(I)=NVIND
+      ELSE 
+         IBVAL(I)=VALUES(IBP)
+      END IF
+ 115  CONTINUE
+C
+C
+ 120  CONTINUE
+C
+C     NEXT 3 ELEMENTS MUST BE GENERATING CENTRE AND APPLICATION 
+C     AND CLASS 8 ELEMENT.
+C
+      KAPP=KAPP+1
+      IF(KAPP.GT.60) THEN
+         WRITE(KNTN,*) 'THERE IS MORE THAN 60 APPLICATIONS',
+     1' IN THE DATA.'
+         RETURN
+      END IF
+      IF(KWTR(K).EQ.1031.OR.KWTR(K).EQ.1033) THEN
+         KP=(KAPP-1)*KLEN
+         KP1=KP+1
+         KBOXR(KP1)=IMARK
+C         CBOXN(KP1)=' '
+C         CBOXU(KP1)=' '
+         DO 194 KK=KSUB1,KSUB2
+         IP=1+(KAPP-1)*KLEN             ! +(KK-1)*KAPPL*KLEN
+         VALS(IP)=IMARK
+ 194     CONTINUE
+         KP2=KP+2
+         KBOXR(KP2)=KWTR(K)
+C         CBOXN(KP2)=CNAMES(K)
+C         CBOXU(KP2)=CUNITS(K)
+         DO 195 KK=KSUB1,KSUB2
+         JJ=K+(KK-1)*KELEM
+         IP=2+(KAPP-1)*KLEN             ! +(KK-1)*KAPPL*KLEN
+         VALS(IP)=VALUES(JJ)  
+ 195     CONTINUE
+         K=K+1
+      END IF
+      IF(KWTR(K).EQ.1032.OR.KWTR(K).EQ.1201.OR.KWTR(K).EQ.63191) THEN
+         KP=(KAPP-1)*KLEN
+         KP3=KP+3
+         KBOXR(KP3)=KWTR(K)
+C         CBOXN(KP3)=CNAMES(K)
+C         CBOXU(KP3)=CUNITS(K)
+         DO 196 KK=KSUB1,KSUB2
+         JJ=K+(KK-1)*KELEM
+         IP=3+(KAPP-1)*KLEN             ! +(KK-1)*KAPPL*KLEN
+         VALS(IP)=VALUES(JJ)
+ 196     CONTINUE
+         K=K+1
+      END IF
+      IF(KWTR(K)/1000.EQ.8) THEN
+         KP=(KAPP-1)*KLEN
+         KP4=KP+4
+         KBOXR(KP4)=KWTR(K)
+C         CBOXN(KP4)=CNAMES(K)
+C         CBOXU(KP4)=CUNITS(K)
+         DO 197 KK=KSUB1,KSUB2
+         JJ=K+(KK-1)*KELEM
+         IP=4+(KAPP-1)*KLEN             !  +(KK-1)*KAPPL*KLEN
+         VALS(IP)=VALUES(JJ)
+ 197     CONTINUE
+         K=K+1
+      END IF
+      IF(KWTR(K).EQ.33210) THEN
+         KP=(KAPP-1)*KLEN
+         KP5=KP+5
+         KBOXR(KP5)=KWTR(K)
+C         CBOXN(KP5)=CNAMES(K)
+C         CBOXU(KP5)=CUNITS(K)
+         DO 201 KK=KSUB1,KSUB2
+         JJ=K+(KK-1)*KELEM
+         IP=5+(KAPP-1)*KLEN             !  +(KK-1)*KAPPL*KLEN
+         VALS(IP)=VALUES(JJ)
+ 201     CONTINUE
+         K=K+1
+      END IF
+      IF(KWTR(K).EQ.33211) THEN
+         KP=(KAPP-1)*KLEN
+         KP6=KP+6
+         KBOXR(KP6)=KWTR(K)
+C         CBOXN(KP6)=CNAMES(K)
+C         CBOXU(KP6)=CUNITS(K)
+         DO 202 KK=KSUB1,KSUB2
+         JJ=K+(KK-1)*KELEM
+         IP=6+(KAPP-1)*KLEN             !  +(KK-1)*KAPPL*KLEN
+         VALS(IP)=VALUES(JJ)
+ 202     CONTINUE
+         K=K+1
+      END IF
+C
+C     NEXT ELEMENT CAN BE DELAYED/EXTENDED DELAYED REPLICATION
+C     SKIP IT
+C
+      IF(KWTR(K).EQ.31002.OR.KWTR(K).EQ.31001.OR.
+     1   KWTR(K).EQ.31000) K=K+1
+C
+C
+C     MOVE CORESPONDING QUALITY CONTROL INTO BOX
+C
+      KQ=MREL-IDPI+1
+      KAPPK=(KAPP-1)*KLEN  
+      DO 121 I=1,IDPI
+      IF(IBVAL(I).NE.0) THEN
+         KKQ=KQ+KAPPK
+         VALS(KKQ)=RVIND 
+         KQ=KQ+1
+      ELSE
+         KKQ=KQ+KAPPK
+         KBOXR(KKQ)=KWTR(K)
+C         CBOXN(KKQ)=CNAMES(K)
+C         CBOXU(KKQ)=CUNITS(K)
+         DO 198 KK=KSUB1,KSUB2
+         JJ=K+(KK-1)*KELEM                ! +(KK-1)*KAPPL*KLEN
+         VALS(KKQ)=VALUES(JJ)
+ 198     CONTINUE
+         K=K+1 
+         KQ=KQ+1
+      END IF
+ 121  CONTINUE
+C
+C     CHECK IF SOME NEW DATA FOLLOW.
+C
+      IF(K.LT.IOPER(LL+1)-1) THEN
+C
+C        MOVE THESE ELEMENTS INTO BOX
+C
+         IF(KWTR(IOPER(LL+1)).GT.200000.AND.
+     1      KWTR(IOPER(LL+1)).NE.999999) THEN
+            ILL=IOPER(LL+1)-1
+         ELSE
+            ILL=IOPER(LL+1)
+         END IF
+         DO 122 I=K,ILL
+         J=J+1
+         KBOXR(J)=KWTR(I)
+         CBOXN(J)=CNAMES(I)
+         CBOXU(J)=CUNITS(I)
+         DO 199 KK=KSUB1,KSUB2
+         JJ=I+(KK-1)*KELEM
+         IP=J   !+(KAPP-1)*KLEN              !  +(KK-1)*KAPPL*KLEN
+         VALS(IP)=VALUES(JJ)
+ 199     CONTINUE
+ 122     CONTINUE
+         KBOX=J
+      END IF
+C
+ 1000 CONTINUE
+C
+ 2000 CONTINUE
+C
+      KBOX=J
+      IF(KBOX.LE.6) KBOX=0
+C
+      RETURN
+      END
diff --git a/bufrdc/bucrekey.F b/bufrdc/bucrekey.F
new file mode 100755
index 0000000..6e8492b
--- /dev/null
+++ b/bufrdc/bucrekey.F
@@ -0,0 +1,220 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE  BUCREKEY(KTDEXP,KSUP,KSEC1,KEY,VALUES,CVALS,KERR)
+C**** *BUCREKEY*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXTRACT ELEMENTS NEEDED FOR RDB KEY DEFINITION
+C          FROM VALUES AND CVALS ARRAYS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C          M. DRAGOSAVAC    *ECMWF*       06/02/95.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C     -------------------------------------------------------------
+      DIMENSION KEY(*),KSUP(*),KSEC1(*),KTDEXP(*)
+#ifndef R_4
+      REAL*8 VALUES(*)
+#else
+      REAL   VALUES(*)
+#endif
+      CHARACTER*(*)CVALS(*)
+      CHARACTER*5 CBLOCK
+C
+ 100  CONTINUE
+C
+C     IPAID - AIRCRAFT FLIGHT NUMBER INDEX
+C     IPSID - SATELLITE IDENTIFIER INDEX
+C     IPBUOY - BUOY/PLATFORM IDENTIFIER INDEX
+C     IPARN - AIRCRAFT REGISTRATION NUMBER INDEX
+C     IPMET - METAR ICAO ID
+C     IPSHIP - SHIPS' CALL SIGN INDEX
+C     IPBLOK - WMO BLOCK NUMBER INDEX
+C     IPSTAT - WMO STATION NUMBER INDEX
+C     IPYEAR - YEAR INDEX
+C     IPMONTH - MONTH INDEX
+C     IPDAY - DAY INDEX
+C     IPHOUR - HOUR INDEX
+C     IPMINUTE - MINUTE INDEX
+C     IPSECOND - SECOND INDEX
+C     IPLAT - LATITUDE INDEX
+C     IPLON - LONGITUDE INDEX
+C     IPLAT - LATITUDE INDEX
+C     IPLON - LONGITUDE INDEX
+C 
+      KERR=0
+C
+      IPAID=0
+      IPSID=0
+      IPBUOY=0
+      IPARN=0
+      IPMET=0
+      IPSHIP=0
+      IPBLOK=0
+      IPSTAT=0
+      IPYEAR=0
+      IPMONTH=0
+      IPDAY=0
+      IPHOUR=0
+      IPMINUTE=0
+      IPSECOND=0
+      IPLAT=0
+      IPLON=0
+      DO 107 I=16,24
+      KEY(I)=32
+ 107  CONTINUE
+C
+      IEND = 26
+      IF( KSEC1(7).EQ.57 ) IEND = 36
+      DO 101 I=1,IEND
+      IF(KTDEXP(I).EQ.001006) IPAID=I
+      IF(KTDEXP(I).EQ.001007) IPSID=I
+      IF(KTDEXP(I).EQ.001005) IPBUOY=I
+C     IF(KTDEXP(I).EQ.001008) IPARN=I
+      IF(KTDEXP(I).EQ.001063) IPMET=I
+      IF(KTDEXP(I).EQ.001011) IPSHIP=I
+      IF(KTDEXP(I).EQ.001001) IPBLOK=I
+      IF(KTDEXP(I).EQ.001002) IPSTAT=I
+      IF(KTDEXP(I).EQ.004001) IPYEAR=I
+      IF(KTDEXP(I).EQ.004002) IPMONTH=I
+      IF(KTDEXP(I).EQ.004003) IPDAY=I
+      IF(KTDEXP(I).EQ.004004) IPHOUR=I
+      IF(KTDEXP(I).EQ.004005) IPMINUTE=I
+      IF(KTDEXP(I).EQ.004006) IPSECOND=I
+      IF(KTDEXP(I).EQ.005001) IPLAT=I
+      IF(KTDEXP(I).EQ.006001) IPLON=I
+      IF(KTDEXP(I).EQ.005002) IPLAT=I
+      IF(KTDEXP(I).EQ.006002) IPLON=I
+ 101  CONTINUE
+C
+      KEY(4)=VALUES(IPYEAR)
+      KEY(5)=VALUES(IPMONTH)
+      KEY(6)=VALUES(IPDAY)
+      KEY(7)=VALUES(IPHOUR)
+      KEY(8)=VALUES(IPMINUTE)
+      IF(IPSECOND.NE.0) KEY(9)=VALUES(IPSECOND)
+C
+      KEY(10)=NINT(VALUES(IPLON)*100000.+18000000)
+      KEY(11)=NINT(VALUES(IPLAT)*100000.+9000000)
+      KEY(12)=NINT(VALUES(IPLON)*100000.+18000000)
+      KEY(13)=NINT(VALUES(IPLAT)*100000.+9000000)
+      KEY(14)=1
+C
+C        SATELITTE ID
+C
+      IF(IPSID.NE.0) THEN
+         KEY(15)=VALUES(IPSID)
+      END IF
+C
+C        WMO BLOCK AND STATION NUMBER
+C
+      IF(IPBLOK.NE.0) THEN
+         KEY(16)=NINT(VALUES(IPBLOK))*1000+NINT(VALUES(IPSTAT))
+         WRITE(CBLOCK,'(I5.5)') KEY(16)
+         J=15
+         DO 105 I=1,5
+         KEY(J+I)=ICHAR(CBLOCK(I:I))
+ 105     CONTINUE
+      END IF
+C
+C        BUOY/PALTFORM ID
+C
+      IF(IPBUOY.NE.0) THEN
+         KEY(16)=NINT(VALUES(IPBUOY))
+         WRITE(CBLOCK,'(I5.5)') KEY(16)
+         J=15
+         DO 106 I=1,5
+         KEY(J+I)=ICHAR(CBLOCK(I:I))
+ 106     CONTINUE
+      END IF
+C
+C        AIRCRAFT IDENTIFIER
+C
+      IF(IPAID.NE.0) THEN
+        IP=(VALUES(IPAID)/1000)
+        INCH=NINT(VALUES(IPAID)-IP*1000)      
+        J=15
+        DO 102 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 102    CONTINUE
+      END IF
+C
+C        AIRCRAFT REGISTRATION NUMBER
+C
+      IF(IPARN.NE.0) THEN      
+        IP=(VALUES(IPARN)/1000)
+        INCH=NINT(VALUES(IPARN)-IP*1000)
+        J=15
+        DO 103 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 103    CONTINUE
+      END IF
+C
+C       SHIP'S CALL SIGN
+C
+      IF(IPSHIP.NE.0) THEN      
+        IP=(VALUES(IPSHIP)/1000)
+        INCH=NINT(VALUES(IPSHIP)-IP*1000)
+        J=15
+        DO 104 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 104    CONTINUE
+      END IF
+C
+C      METAR ID
+C
+      IF(IPMET.NE.0) THEN
+        IP=(VALUES(IPMET)/1000)
+        INCH=NINT(VALUES(IPMET)-IP*1000)
+        J=15
+        DO 194 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 194    CONTINUE
+      END IF
+
+      RETURN
+      END
diff --git a/bufrdc/bucrkey.F b/bufrdc/bucrkey.F
new file mode 100755
index 0000000..2680785
--- /dev/null
+++ b/bufrdc/bucrkey.F
@@ -0,0 +1,279 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE  BUCRKEY(KELEM,KTDEXP,KSUP,KSEC1,KSEC3,KEY,
+     1                     VALUES,CVALS,KERR)
+C**** *BUCRKEY*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXTRACT ELEMENTS NEEDED FOR RDB KEY DEFINITION
+C          FROM VALUES AND CVALS ARRAYS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C          M. DRAGOSAVAC    *ECMWF*       06/06/99.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C     -------------------------------------------------------------
+      DIMENSION KEY(*),KSUP(*),KSEC1(*),KTDEXP(*)
+#ifndef R_4
+      REAL*8 EPS, RVIND
+      REAL*8 VALUES(*)
+      REAL*8 RMINLAT, RMINLON, RMAXLAT, RMAXLON
+#else
+      REAL   EPS, RVIND
+      REAL   VALUES(*)
+      REAL   RMINLAT, RMINLON, RMAXLAT, RMAXLON
+#endif
+      DIMENSION KSEC3(*)
+      CHARACTER*(*)CVALS(*)
+      CHARACTER*5 CBLOCK
+C
+ 100  CONTINUE
+C
+C     IPAID - AIRCRAFT FLIGHT NUMBER INDEX
+C     IPSID - SATELLITE IDENTIFIER INDEX
+C     IPBUOY - BUOY/PLATFORM IDENTIFIER INDEX
+C     IPARN - AIRCRAFT REGISTRATION NUMBER INDEX
+C     IPMET - METAR ICAO ID
+C     IPSHIP - SHIPS' CALL SIGN INDEX
+C     IPBLOK - WMO BLOCK NUMBER INDEX
+C     IPSTAT - WMO STATION NUMBER INDEX
+C     IPYEAR - YEAR INDEX
+C     IPMONTH - MONTH INDEX
+C     IPDAY - DAY INDEX
+C     IPHOUR - HOUR INDEX
+C     IPMINUTE - MINUTE INDEX
+C     IPSECOND - SECOND INDEX
+C     IPLAT - LATITUDE INDEX
+C     IPLON - LONGITUDE INDEX
+C     IPLAT - LATITUDE INDEX
+C     IPLON - LONGITUDE INDEX
+C
+      KERR=0
+      EPS=10.D-7
+      RVIND=1.7D38
+      IPAID=0
+      IPSID=0
+      IPBUOY=0
+      IPARN=0
+      IPMET=0
+      IPSHIP=0
+      IPBLOK=0
+      IPSTAT=0
+      IPYEAR=0
+      IPMONTH=0
+      IPDAY=0
+      IPHOUR=0
+      IPMINUTE=0
+      IPSECOND=0
+      IPLAT=0
+      IPLON=0
+      DO 107 I=16,24
+      KEY(I)=32
+ 107  CONTINUE
+C
+      IEND = 26
+      IF( KSEC1(7).EQ.57 ) IEND = 36
+      DO 101 I=1,IEND
+      IF(KTDEXP(I).EQ.001006) IPAID=I
+      IF(KTDEXP(I).EQ.001007) IPSID=I
+      IF(KTDEXP(I).EQ.001005) IPBUOY=I
+C     IF(KTDEXP(I).EQ.001008) IPARN=I
+      IF(KTDEXP(I).EQ.001194) IPAID=I
+      IF(KTDEXP(I).EQ.001063) IPMET=I
+      IF(KTDEXP(I).EQ.001011) IPSHIP=I
+      IF(KTDEXP(I).EQ.001001) IPBLOK=I
+      IF(KTDEXP(I).EQ.001002) IPSTAT=I
+      IF(KTDEXP(I).EQ.004001) IPYEAR=I
+      IF(KTDEXP(I).EQ.004002) IPMONTH=I
+      IF(KTDEXP(I).EQ.004003) IPDAY=I
+      IF(KTDEXP(I).EQ.004004) IPHOUR=I
+      IF(KTDEXP(I).EQ.004005) IPMINUTE=I
+      IF(KTDEXP(I).EQ.004006) IPSECOND=I
+      IF(KTDEXP(I).EQ.005001) IPLAT=I
+      IF(KTDEXP(I).EQ.006001) IPLON=I
+      IF(KTDEXP(I).EQ.005002) IPLAT=I
+      IF(KTDEXP(I).EQ.006002) IPLON=I
+ 101  CONTINUE
+C
+      KEY(4)=VALUES(IPYEAR)
+      KEY(5)=VALUES(IPMONTH)
+      KEY(6)=VALUES(IPDAY)
+      KEY(7)=VALUES(IPHOUR)
+      KEY(8)=VALUES(IPMINUTE)
+      IF(IPSECOND.NE.0) KEY(9)=VALUES(IPSECOND)
+C
+      IF((ABS(VALUES(IPLON)-RVIND))/RVIND.LT.EPS.OR.
+     1   (ABS(VALUES(IPLAT)-RVIND))/RVIND.LT.EPS) THEN
+          KERR=1
+          PRINT*,'FOUND VALUES(IPLON)=',VALUES(IPLON)
+          PRINT*,'FOUND VALUES(IPLAT)=',VALUES(IPLAT)
+          RETURN
+      ELSE
+         CALL FMMH( IPLAT,IPLON,KELEM,VALUES,KSEC3,RMINLAT,RMINLON,
+     1           RMAXLAT,RMAXLON)
+
+         KEY(10)=NINT(RMINLON*100000.+18000000)
+         KEY(11)=NINT(RMINLAT*100000.+9000000)
+         KEY(12)=NINT(RMAXLON*100000.+18000000)
+         KEY(13)=NINT(RMAXLAT*100000.+9000000)
+      END IF
+C
+      KEY(14)=KSEC3(3)
+C
+C        SATELITTE ID
+C
+      KEY(15)=0
+      DO IS=16,24
+        KEY(IS)=32
+      END DO
+      IF(IPSID.NE.0) THEN
+         KEY(15)=VALUES(IPSID)
+      END IF
+C
+C        WMO BLOCK AND STATION NUMBER
+C
+      IF(IPBLOK.NE.0) THEN
+         IF(ABS(VALUES(IPBLOK)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPBLOK)=',VALUES(IPBLOK)
+            RETURN
+         END IF
+         IF(ABS(VALUES(IPSTAT)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPSTAT)=',VALUES(IPSTAT)
+            RETURN
+         END IF
+         KEY(16)=NINT(VALUES(IPBLOK))*1000+NINT(VALUES(IPSTAT))
+         WRITE(CBLOCK,'(I5.5)') KEY(16)
+         J=15
+         DO 105 I=1,5
+         KEY(J+I)=ICHAR(CBLOCK(I:I))
+ 105     CONTINUE
+      END IF
+C
+C        BUOY/PALTFORM ID
+C
+      IF(IPBUOY.NE.0) THEN
+         IF(ABS(VALUES(IPBUOY)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPBUOY)=',VALUES(IPBUOY)
+            RETURN
+         END IF
+         KEY(16)=NINT(VALUES(IPBUOY))
+         WRITE(CBLOCK,'(I5.5)') KEY(16)
+         J=15
+         DO 106 I=1,5
+         KEY(J+I)=ICHAR(CBLOCK(I:I))
+ 106     CONTINUE
+      END IF
+C
+C        AIRCRAFT IDENTIFIER
+C
+      IF(IPAID.NE.0) THEN
+         IF(ABS(VALUES(IPAID)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPAID)=',VALUES(IPAID)
+            RETURN
+         END IF
+        IP=(VALUES(IPAID)/1000)
+        INCH=NINT(VALUES(IPAID)-IP*1000)
+        J=15
+        DO 102 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 102    CONTINUE
+      END IF
+C
+C        AIRCRAFT REGISTRATION NUMBER
+C
+      IF(IPARN.NE.0) THEN
+         IF(ABS(VALUES(IPARN)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPARN)=',VALUES(IPARN)
+            RETURN
+         END IF
+        IP=(VALUES(IPARN)/1000)
+        INCH=NINT(VALUES(IPARN)-IP*1000)
+        J=15
+        DO 103 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 103    CONTINUE
+      END IF
+C
+C       SHIP'S CALL SIGN
+C
+      IF(IPSHIP.NE.0) THEN
+         IF(ABS(VALUES(IPSHIP)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPSHIP)=',VALUES(IPSHIP)
+            RETURN
+         END IF
+        IP=(VALUES(IPSHIP)/1000)
+        INCH=NINT(VALUES(IPSHIP)-IP*1000)
+        J=15
+        DO 104 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 104    CONTINUE
+      END IF
+C
+C       METAR ID
+C
+      IF(IPMET.NE.0) THEN
+         IF(ABS(VALUES(IPMET)-RVIND)/RVIND.LT.EPS) THEN
+            KERR=1
+            PRINT*,'FOUND VALUES(IPMET)=',VALUES(IPMET)
+            RETURN
+         END IF
+        IP=(VALUES(IPMET)/1000)
+        INCH=NINT(VALUES(IPMET)-IP*1000)
+        J=15
+        DO 194 I=1,INCH
+        KEY(J+I)=ICHAR(CVALS(IP)(I:I))
+ 194    CONTINUE
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/buedd.F b/bufrdc/buedd.F
new file mode 100755
index 0000000..7bf7ed2
--- /dev/null
+++ b/bufrdc/buedd.F
@@ -0,0 +1,362 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEDD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+     1                 KVALS,VALUES,KELEM,CNAMES,CUNITS,KERR)
+C
+C**** *BUEDD*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXPAND SECTION 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEDD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+C                        KVALS,VALUES,KELEM,CNAMES,CUNITS,KERR)
+C
+C        INPUT :
+C               *KPT*     -  POINTER TO KDATA ARRAY
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C               *KDLEN*   -  DIMENSION OF KDATA ARRAY
+C               *KDATA*   -  ARRAY CONTAINING DATA NEEDED FOR DATA DESCRIPTOR
+C                            EXPANSION
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C        OUTPUT :
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C           DATA DESCRIPTOR TAKEN FROM KTDLST ARRAY ARE FULLY
+C        EXPANDED USING DATA FROM KDATA ARRAY IF NEEDED.
+C        ( DELAYED REPLICATION FACTORS ETC.)
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNEXS        - SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                          NEXT SECTION
+C          BUNPCK        - UNPACKS BIT PATHERN
+C          BUREP         - SOLVES REPLICATION PROBLEM
+C          BUETDR        - SOLVES TABLE D REFERENCE
+C          BUOPER        - PROCESS OPERATOR
+C          BUEPWT        - UPDATES WORKING TABLE
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmbef.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmel.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+C
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION ISTACK(JELEM),IISTACK(JELEM)
+      DIMENSION IMASK(8)
+C
+      DIMENSION KSEC3(JSEC3)
+      DIMENSION KDATA(KDLEN),KTDLST(KTDLEN)
+C
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C     ------------------------------------------------------------------
+C
+C*          1.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      N = KSEC3(3)
+C
+C
+C*          2.   EXPAND DATA DESCRIPTORS.
+C                ------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1  SET EXPECTED NUMBER OF DATA DESCRIPTORS.
+C                ----------------------------------------
+C                AND INITIALIZE NUMBER OF DATA VALUES PER SUB-SET.
+C                -------------------------------------------------
+ 210  CONTINUE
+C
+      J      = 0
+      KPT    = 0
+      NWT    = 0
+      JMAX   = KTDLEN
+      JMAXNEW=JMAX
+C
+      IF(KTDLEN.GT.JELEM) THEN
+         WRITE(KNTN,*) ' BUETD :'
+         KERR=29
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C*          2.2  PUT DATA DESCRIPTORS IN STACK.
+C                ------------------------------
+ 220  CONTINUE
+C
+      DO 221 JJ=1,JMAX
+C
+      ISTACK(JJ)=KTDLST(JJ)
+      IISTACK(JJ)=ISTACK(JJ)
+C
+ 221  CONTINUE
+C
+C*          2.2.1 CHECK IF IT IS SAME DATA DESCRIPTOR DESCRIOPTION.
+C                 -------------------------------------------------
+C                 TO MAKE MORE EFFICIENT DATA DESCRIPTOR DESCRIPTION
+C                 EXPANSION, IN CASE THAT DELAYED REPLICATION FACTOR
+C                 IS NOT PRESENT AND DATA DESCRIPTORS ARE THE SAME,
+C                 PREVIOUS WORKING TABLE SHOULD BE USED. IT IS POSIBLE
+C                 AT THIS PLACE IN THE FUTURE TO MAKE MORE SOPHISTICATED
+C                 CONTROL.
+C
+C
+      DO 222 JC=1,JMAX
+C
+      IF(ISTACK(JC).NE.NSTACK(JC)) THEN
+C
+C
+         ODREPF=.FALSE.
+C
+C        SWAP CONTENT OF THE STACKS.
+C
+         DO 223 JJC=1,JMAX
+         NSTACK(JJC)=ISTACK(JJC)
+ 223     CONTINUE
+C
+         NTDLEN = JMAX
+         M=0
+         NOLD=N
+         NFCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         MBMP=0
+         MBMPL=0
+C
+         GO TO 230
+C
+      END IF
+C
+ 222  CONTINUE
+C
+C
+C*    IF MARKER OPERATOR PRESENT EXPAND DESCRIPTORS AGAIN
+C
+      IF(OMARKER) THEN
+         M=0
+         NOLD=N
+         NFCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         NTDLEN=JMAX
+         MBMP=0
+         MBMPL=0
+         GO TO 230
+      END IF
+C
+C*    RETURN IF DELAYED REPLICATION FACTOR IS NOT PRESENT.
+C
+      IF(JMAX.NE.NTDLEN) THEN
+         M=0
+         NOLD=N
+         NFCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         NTDLEN=JMAX
+         MBMP=0
+         MBMPL=0
+         GO TO 230
+      END IF
+C
+      OB=.FALSE.
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0)  OB=.TRUE.
+C
+      IF(ODREPF) GO TO 229
+C
+      IF(.NOT.ODREPF) THEN
+         IF(N.GT.NOLD) NOLD=N
+         IF(OB.AND.NFCM.EQ.1)      GO TO 300
+         IF(.NOT.OB.AND.NFCM.EQ.0) GO TO 300
+      END IF
+C
+ 229  CONTINUE
+C
+      M=0
+      NOLD=N
+      NFCM=0
+      MREL=0
+      OMARKER=.FALSE.
+      NTDLEN=JMAX
+      MBMP=0
+      MBMPL=0
+C
+C     ------------------------------------------------------------------
+C*          2.3  GET NEXT DESCRIPTOR FROM THE STACK.
+C                -----------------------------------
+ 230  CONTINUE
+C
+      J   = J + 1
+      IF(J.GT.JMAX) GO TO 270
+C
+      IDD = ISTACK(J)
+      IF(IDD.EQ.0)  GO TO 230
+C
+      IF = IDD/100000
+C
+C     ------------------------------------------------------------------
+C*          2.4  CHECK IF IT IS REPLICATION DESCRIPTOR.
+C                --------------------------------------
+ 240  CONTINUE
+C
+      IF(IF.EQ.0) THEN
+C
+C*          2.6  ELEMENT DESCRIPTOR, SO UPDATE WORKING TABLE.
+C                --------------------------------------------
+ 260     CONTINUE
+C
+c        IF(IDD.EQ.31031.OR.IDD.EQ.31192) THEN
+c           NWT=NWT+1
+c           NWTR(NWT)=IDD
+c           NWTS(NWT)=0
+c           NWTRV(NWT)=0
+c           NWTDW(NWT)=1
+c           NWTEN(NWT)=0
+c           CWTEN(NWT)='DATA PRESENT INDICATOR'
+c           CWTU (NWT)='FLAG TABLE 031031'
+c           M=M+1
+c        ELSEIF(IDD.EQ.33007.OR.IDD.EQ.63192) THEN
+c           NWT=NWT+1
+c           NWTR(NWT)=IDD
+c           NWTS(NWT)=0
+c           NWTRV(NWT)=0
+c           NWTDW(NWT)=7
+c           NWTEN(NWT)=0
+c           CWTEN(NWT)='% CONFIDENCE'
+c           CWTU (NWT)='%'
+c           M=M+1
+c        ELSE
+            CALL BUEPWTC(IDD,KERR)
+            IF(KERR.GT.0) RETURN
+c        END IF
+      ELSEIF(IF.EQ.1) THEN
+C
+C*          2.4.1     SOLVE REPLICATION PROBLEM.
+C                     --------------------------
+C
+         CALL BUREPC(KPT,KDLEN,KDATA,J,JMAX,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF(IF.EQ.2) THEN
+C
+C
+C*          2.5.3 PROCESS OPERATOR.
+C                 -----------------
+         CALL BUOPERC(KPT,KDLEN,KDATA,J,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF(IF.EQ.3) THEN
+C
+C
+C*          2.5.2 REPLACE BY LIST OF DESCRIPTORS FROM TABLE *D.
+C                 ---------------------------------------------
+         CALL BUETDR(J,JMAX,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) THEN
+            DO 252 IQ=1,JELEM
+            NSTACK(IQ)=0.
+ 252        CONTINUE
+            RETURN
+         END IF
+      ELSE
+         KERR=37
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      GO TO 230
+C
+C     ------------------------------------------------------------------
+C*          2.7 RESOLVE MARKER OPERATOR.
+C               ------------------------
+ 270  CONTINUE
+C
+C      IF(OMARKER) THEN
+C         CALL BUEPMRKC(KSEC3,KVALS,VALUES,KELEM,CNAMES,CUNITS,KERR)
+C         IF(KERR.GT.0) RETURN
+C      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3. COLLECT  SUPPLEMENTARY ITEMS.
+C              -----------------------------
+ 300  CONTINUE
+C
+      NTDEXL =M
+      DO 301 I=1,NTDEXL
+      NTDEXP(I)=NWTR(I)
+ 301  CONTINUE
+C
+      NTDLEN=JMAXNEW
+      DO 302 I=1,NTDLEN
+      NTDLST(I)=IISTACK(I)
+ 302  CONTINUE
+C
+      DO 303 I=1,M
+      CNAMES(I)=CWTEN(I)
+      CUNITS(I)=CWTU (I)
+ 303  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buens0.F b/bufrdc/buens0.F
new file mode 100755
index 0000000..b0209d7
--- /dev/null
+++ b/bufrdc/buens0.F
@@ -0,0 +1,144 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUENS0( KSEC0,KBUFL,KBUFF,KERR)
+C
+C**** *BUENS0*
+C
+C
+C     PURPOSE.
+C     --------
+C          PACK SECTION 0 OF BUFR MESSAGE.
+C     PACKING BUFR EDITION 2.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUENS0( KSEC0,KBUFL,KBUFF,KERR)*
+C
+C
+C        INPUT:
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C        OUTPUT:
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPKS         - PACK BIT PATHERN IN REPEATED WAY
+C          BUPCK         - PACK BIT PATHERN
+C          BUOCTN        - SET LENGTH OF SECTION
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSEC0(JSEC0)
+      DIMENSION IBUFR(4)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DATA IBUFR/66,85,70,82/
+C
+C     B IS CCITT.5 DECIMAL 66
+C     U IS CCITT.5 DECIMAL 85
+C     F IS CCITT.5 DECIMAL 70
+C     R IS CCITT.5 DECIMAL 82
+C
+C
+C     ------------------------------------------------------------------
+C*          1. PACK SECTION 0.
+C              ---------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C
+C*          1.1  INITIALIZE WORKING POINTERS NWPT AND NBPT.
+C                ------------------------------------------
+      NWPT = 1
+      NBPT = 0
+C
+C*          1.2  PACK FIRST FOUR OCTETS CONTAINING *BUFR*.
+C                -------------------------------------------
+C
+      CALL BUPKS(NBPW,KBUFF(NWPT),IBUFR,NWPT,NBPT,8,0,4,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)'ERROR PACKING FIRST FOUR OCTETS',
+     1' OF BUFR MESSAGE.'
+         RETURN
+      END IF
+C
+      IF(KSEC0(3).LE.1) GO TO 200
+C
+C*          1.2 PACK TOTAL LENGTH OF BUFR MESSAGE.
+C               ------------------------------------
+ 120  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING TOTAL LENGTH OF BUFR MESSAGE'
+         WRITE(KNTN,*) 'IN SECTION 0.'
+         RETURN
+      END IF
+C
+C*          1.3 PACK BUFR EDITION NUMBER (IT IS 8TH BYTE ).
+C               ---------------------------------------------
+ 130  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC0(3),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING BUFR EDITION NUMBER IN SECTION 0.'
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buens1.F b/bufrdc/buens1.F
new file mode 100755
index 0000000..c5adf24
--- /dev/null
+++ b/bufrdc/buens1.F
@@ -0,0 +1,424 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUENS1( KSEC0,KSEC1,KBUFL,KBUFF,KERR)
+C
+C**** *BUENS1*
+C
+C
+C     PURPOSE.
+C     --------
+C          PACK SECTION 1 OF BUFR MESSAGE.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUENS1( KSEC0,KSEC1,KBUFL,KBUFF,KERR)*
+C
+C
+C        INPUT :
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C                            
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C        OUTPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C*     METHOD.
+C      -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPCK         -  PACK BIT PATHERN
+C          BUOCTN        - SET LENGTH OF SECTION
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       16/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+C
+      DIMENSION KBUFF(KBUFL),KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION ISEC1(JSEC1)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C*          1.  PACK SECTION 1.
+C               ---------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 101 I=1,JSEC1
+      ISEC1(I)=0
+ 101  CONTINUE
+C
+C*          1.1  KEEP POINTERS TO THE BEGINING OF THE SECTION.
+C                ---------------------------------------------
+ 110  CONTINUE
+C
+      IWPTB = NWPT
+      IBPTB = NBPT
+C
+C
+C*          1.2 PACK LENGTH OF SECTION 1.
+C               -------------------------
+ 120  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING LENGTH OF SECTION 1.'
+         RETURN
+      END IF
+C
+C
+C*          1.3  PACK BUFR EDITION NUMBER/MASTER TABLE USED.
+C                -------------------------------------------
+ 130  CONTINUE
+C
+      IF(KSEC0(3).LE.1) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(2),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING BUFR EDITION NUMBER' 
+            WRITE(KNTN,*) 'IN SECTION 1.'
+            RETURN
+         END IF
+      ELSE
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(14),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING BUFR MASTER TABLE NUMBER'
+            WRITE(KNTN,*) 'IN SECTION 1.'
+            RETURN
+         END IF
+      END IF
+C
+C*          1.4  PACK ORIGINATING CENTRE.
+C                ------------------------
+ 140  CONTINUE
+C
+      IF(KSEC0(3).LT.3) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(3),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING ORIGINATING CENTRE IN SECTION 1.'
+            RETURN
+         END IF
+      ELSEIF(KSEC0(3).EQ.3) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(16),NWPT,NBPT,8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING ORIGINATING ',
+     1                    'SUB-CENTRE IN SECTION 1.'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(3),NWPT,NBPT,8,KERR)
+         IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING ORIGINATING CENTRE IN SECTION 1.'
+            RETURN
+         END IF
+      ELSEIF(KSEC0(3).EQ.4) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(3),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING ORIGINATING CENTRE IN SECTION 1.'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(16),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING ORIGINATING ',
+     1                    'SUB-CENTRE IN SECTION 1.'
+            RETURN
+         END IF
+      END IF
+C
+C*          1.5  PACK UPDATE SEQUENCE NUMBER.
+C                ----------------------------
+ 150  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(4),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING UPDATE SEQUENCE NUMBER ',
+     1                 'IN SECTION 1.'
+         RETURN
+      END IF
+C
+C*          1.6  PACK INTEGER VALUE OF THE OCTET CONTAINING
+C                ------------------------------------------
+C                FLAG BITS(ZERO IF SECTION TWO IS NOT PRESENT).
+C                ----------------------------------------------
+ 160  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(5),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING FLAG IN SECTION 1.'
+         RETURN
+      END IF
+C
+C*          1.7  PACK *BUFR* MESSAGE TYPE.
+C                -------------------------
+ 170  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(6),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+      WRITE(KNTN,*) 'ERROR PACKING BUFR MESSAGE TYPE IN SECTION 1.'
+         RETURN
+      END IF
+C
+C           1.7.1 PACK BUFR INTERNATIONAL SUB-CATEGORY
+C                 -------------------------------------
+      IF(KSEC0(3).EQ.4) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(17),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC1(17) IN SECTION 1.'
+            RETURN
+         END IF
+      END IF
+C
+C*          1.8  PACK *BUFR* MESSAGE SUB-TYPE.
+C                -----------------------------
+ 180  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(7),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING BUFR MESSAGE SUBTYPE.'
+         RETURN
+      END IF
+C
+C*          1.9  PACK LOCAL TABLE VERSION NUMBER OR
+C                ----------------------------------
+C                VERSION NUMBER OF MASTER TABLE USED.
+C                ------------------------------------
+ 190  CONTINUE
+C
+      IF(KSEC0(3).LE.1) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(8),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING VERSION NUMBER OF ',
+     1                    'LOCAL TABLE USED.'
+            RETURN
+         END IF
+      ELSE
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(15),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING VERSION NUMBER OF ',
+     1                    'MASTER TABLE USED.'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1( 8),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING VERSION NUMBER OF ',
+     1                    'LOCAL TABLE USED.'
+            RETURN
+         END IF
+      END IF
+C
+C*          2.0  PACK YEAR.
+C                ----------
+ 200  CONTINUE
+C
+      IF(KSEC0(3).LE.3) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(9),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING KSEC1(9) IN SECTION 1.'
+            RETURN
+         END IF
+      ELSE
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(9),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING KSEC1(9) IN SECTION 1.'
+            RETURN
+         END IF
+      END IF
+C
+C*          2.1  PACK MONTH.
+C                -----------
+ 210  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(10),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC1(10) IN SECTION 1.'
+         RETURN
+      END IF
+C
+C*          2.2 PACK DAY.
+C               -----------
+ 220  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(11),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC1(11) IN SECTION 1.'
+         RETURN
+      END IF
+C
+C*          2.3 PACK HOUR.
+C               ------------
+ 230  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(12),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC1(12) IN SECTION 1.'
+         RETURN
+      END IF
+C
+C*          2.4 PACK MINUTE.
+C               --------------
+ 240  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(13),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC1(13) IN SECTION 1.'
+         RETURN
+      END IF
+C
+C          2.4.1 PACK SECOND
+C                -----------
+      IF(KSEC0(3).EQ.4) THEN
+         CALL BUPCK(NBPW,KBUFF(NWPT),KSEC1(18),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING KSEC1(18) IN SECTION 1.'
+            RETURN
+         END IF
+      END IF
+
+C
+C          2.5 PACK LOCAL ADP CENTRE INFORMATION.
+C              ----------------------------------
+ 250  CONTINUE
+C
+      IF(KSEC0(3).LT.3) THEN
+         IOFF=KSEC1(1)-17
+         IW=16
+         IB=0
+      ELSEIF(KSEC0(3).EQ.3) THEN
+         IOFF=KSEC1(1)-17
+         IF(IOFF.LT.1) THEN
+           WRITE(KNTN,*) 'ERROR IN KSEC1(1)'
+           WRITE(KNTN,*) 'THE SIZE SHALL BE AT LEAST 18 BYTES'
+           KERR=55
+           RETURN
+         END IF
+         IW=18
+         IB=0
+      ELSEIF(KSEC0(3).EQ.4) THEN
+C        IOFF=KSEC1(1)-52
+         IOFF=KSEC1(1)-22
+         IF(IOFF.LT.0) THEN
+           WRITE(KNTN,*) 'ERROR IN KSEC1(1)'
+           WRITE(KNTN,*) 'THE SIZE SHALL BE AT LEAST 22 BYTES'
+           KERR=55
+           RETURN
+         END IF
+C        IW=35      ! index for local info
+         IW=19      ! index for local info
+         IB=0
+      END IF
+      IF(IOFF.GT.0) THEN
+         CALL BUNPKS(NBPW,KSEC1,ISEC1,IW,IB,8,0,IOFF,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING LOCAL ADP CENTRE INFORMATION'
+            WRITE(KNTN,*) 'IN SECTION 1.'
+            RETURN
+         END IF
+C
+         CALL BUPKS(NBPW,KBUFF(NWPT),ISEC1,NWPT,NBPT,8,0,IOFF,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING LOCAL ADP CENTRE INFORMATION'
+            WRITE(KNTN,*) 'IN SECTION 1.'
+            RETURN
+         END IF
+      END IF
+C     ------------------------------------------------------------------
+C*          2.6  SET UP LENGTH OF THE SECTION 1.
+C                --------------------------------
+ 260  CONTINUE
+C
+      CALL BUOCTN(IWPTB,IBPTB,KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C
+      RETURN
+      END
diff --git a/bufrdc/buens2.F b/bufrdc/buens2.F
new file mode 100755
index 0000000..b0c98fd
--- /dev/null
+++ b/bufrdc/buens2.F
@@ -0,0 +1,202 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUENS2( KSEC1,KSEC2,KBUFL,KBUFF,KERR )
+C
+C**** *BUENS2*
+C
+C
+C     PURPOSE.
+C     --------
+C          PACK SECTION 2 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUENS2(KSEC1,KSEC2,KBUFL,KBUFF,KERR)*
+C
+C
+C        INPUT :
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(JSEC2) LOCAL ADP CENTRE
+C                                         INFORMATION (PACKED FORM)
+C        OUTPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPCK          - PACK BIT PATHERN
+C          BUOCTN         - SET LENGTH OF SECTION
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSEC1(JSEC1),KSEC2(JSEC2)
+      DIMENSION IDUM(8),     ISEC2(JSEC2)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DATA IDUM/8*0/
+C
+C     ------------------------------------------------------------------
+C*          1.  EXPAND SECTION 2.
+C               -----------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 101 I=1,JSEC2
+      ISEC2(I)=0
+ 101  CONTINUE
+C
+      IF(KSEC1(5) .NE. 0 .AND. KSEC1(5) .NE.128) THEN
+         KERR=50
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      IF( KSEC1(5).EQ.0) RETURN
+C
+C*          1.1  KEEP POINTERS TO THE BEGINING OF THE SECTION.
+C                ---------------------------------------------
+ 110  CONTINUE
+C
+      IWPTB = NWPT
+      IBPTB = NBPT
+C
+C*          1.2  PACK LENGTH OF SECTION 2.
+C                -------------------------
+      CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING LENGTH OF SECTION 2.'
+         RETURN
+      END IF
+      CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C
+C*          1.3  LOCAL ADP CENTRE INFORMATION.
+C                -----------------------------
+C
+      IOFF=KSEC2(1)-4
+      IF(IOFF.GT.0) THEN
+         IW=2
+         IB=0
+         CALL BUNPKS(NBPW,KSEC2,ISEC2,IW,IB,8,0,IOFF,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING LOCAL ADP CENTRE INFORMATION'
+            WRITE(KNTN,*) 'IN SECTION 2.'
+            RETURN
+         END IF
+C
+         CALL BUPKS(NBPW,KBUFF(NWPT),ISEC2,NWPT,NBPT,8,0,IOFF,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING LOCAL ADP CENTRE INFORMATION'
+            WRITE(KNTN,*) 'IN SECTION 2.'
+            RETURN
+         END IF
+      END IF
+C
+C
+C*          1.5  SET UP LENGTH OF THE SECTION 2.
+C                --------------------------------
+ 150  CONTINUE
+C
+      CALL BUOCTN(IWPTB,IBPTB,KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+      RETURN
+      END
diff --git a/bufrdc/buens3.F b/bufrdc/buens3.F
new file mode 100755
index 0000000..8a175ed
--- /dev/null
+++ b/bufrdc/buens3.F
@@ -0,0 +1,199 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUENS3(KSEC3,KTDLEN,KTDLST,KBUFL,KBUFF,KERR)
+C
+C**** *BUENS3*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PACK SECTION 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUENS3( KSEC3,KTDLEN,KTDLST,KBUFL,KBUFF,KERR)*
+C
+C        INPUT :
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C
+C        OUTPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C      -------
+C
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPCK        - PACKS BIT PATHERN
+C          BUOCTN       - SET LENGTH OF SECTION
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KTDLST(KTDLEN)
+C
+      DIMENSION KSEC3(JSEC3)
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C     ------------------------------------------------------------------
+C*          1.   PACK PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C*          1.1  KEEP POINTERS TO THE BEGINING OF THE SECTION.
+C                ---------------------------------------------
+ 110  CONTINUE
+C
+      IWPTB = NWPT
+      IBPTB = NBPT
+C
+C
+C*          1.2   PACK LENGTH OF SECTION 3.
+C                 -------------------------
+ 120  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING LENGTH OF SECTION 3.'
+         RETURN
+      END IF
+C
+C
+C*          1.3    PACK ZERO BYTE AND PUT IT IN KSEC3(2).
+C                  --------------------------------------
+ 130  CONTINUE
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING RESERVED BYTE IN SECTION 3.'
+         RETURN
+      END IF
+C
+C*          1.4    PACK NUMBER OF DATA SUB-SETS.
+C                  -----------------------------
+ 140  CONTINUE
+C
+      IF(KSEC3(3).GT.65535) THEN
+         KERR=27
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC3(3),NWPT,NBPT,16,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC3(3) IN SECTION 3.'
+         RETURN
+      END IF
+C
+C
+C*          1.5    PACK INTEGER VALUE OF THE OCTET
+C                  ---------------------------------
+C                  CONTAINIG FLAG BITS.
+C                  --------------------
+ 150  CONTINUE
+C
+      IF(KSEC3(3).LE.1) THEN
+         KSEC3(4)=IBCLR(KSEC3(4),6)
+      END IF
+      CALL BUPCK(NBPW,KBUFF(NWPT),KSEC3(4),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING KSEC3(4) IN SECTION 3.'
+         RETURN
+      END IF
+C
+C     -----------------------------------------------------------------
+C*          1.6  PACK DATA DESCRIPTORS.
+C                ----------------------
+ 160  CONTINUE
+C
+C
+      DO 161 I=1,KTDLEN
+      IFIXIY=KTDLST(I)
+C
+      II=IFIXIY/1000
+      IY=IFIXIY-II*1000
+      IF=II/100
+      IX=II-IF*100
+C
+      CALL BUPCK(NBPW,KBUFF(NWPT),IF,NWPT,NBPT,2,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING ',I,' DESCRIPTOR IN SECTION 3.'
+         RETURN
+      END IF
+      CALL BUPCK(NBPW,KBUFF(NWPT),IX,NWPT,NBPT,6,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING ',I,' DESCRIPTOR IN SECTION 3.'
+         RETURN
+      END IF
+      CALL BUPCK(NBPW,KBUFF(NWPT),IY,NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING ',I,' DESCRIPTOR IN SECTION 3.'
+         RETURN
+      END IF
+C
+C
+ 161  CONTINUE
+C
+C*          1.7  SET UP LENGTH OF THE SECTION 1.
+C               --------------------------------
+ 170  CONTINUE
+C
+      CALL BUOCTN(IWPTB,IBPTB,KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C
+      RETURN
+      END
diff --git a/bufrdc/buens4.F b/bufrdc/buens4.F
new file mode 100755
index 0000000..b50acdb
--- /dev/null
+++ b/bufrdc/buens4.F
@@ -0,0 +1,1014 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUENS4(KSEC3,KSEC4,KELEM,KVALS,VALUES,CVALS,
+     1                  KBUFL,KBUFF,KERR)
+C
+C**** *BUENS4*
+C
+C
+C     PURPOSE.
+C     --------
+C          PACK PRELIMINARY ITEMS AND DATA OF SECTION 4 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUENS4(KSEC3,KSEC4,KELEM,KVALS,VALUES,CVALS,
+C                         KBUFL,KBUFF,KERR)*
+C
+C        INPUT :
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KSEC4*   -  ARRAY CONTAINING SECTION 4 INFORMATION
+C                            KSEC4( 1)-- LENGTH OF SECTION 4 (BYTES)
+C                            KSEC4( 2)-- RESERVED
+C               *KELEM*   -  NUMBER OF ELEMENTS IN BUFR TEMPLATE
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  REAL ARRAY (EXPANDED DATA VALUES)
+C
+C        OUTPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPCK          -  PACK BIT PATHERN
+C          BUPKS          -  PACK BIT PATHERN IN REPEATED WAY,
+C                            POINTER ADJUSTMENT
+C          BUOCTN         -  SET LENGTH OF SECTION
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmbef.F"
+#     include "bcprq.F"
+#     include "bcmoff.F"
+C
+      CHARACTER*64 CWTEN
+      CHARACTER*24 CWTU
+C
+      DIMENSION KBUFF(KBUFL)
+C
+      DIMENSION KSEC3(JSEC3),KSEC4(JSEC4)
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 VAL,VAL8S
+      REAL*8 VCHECK
+      REAL*8 RVALS(JWORK)
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+      REAL   VAL
+      REAL   VCHECK
+      REAL   RVALS(JWORK)
+#endif
+C
+      REAL*4 RVALS4(JWORK)
+      REAL*4 VAL4,VAL4S
+      INTEGER*4 I4
+      REAL*8 R8
+      REAL*4 R4
+      LOGICAL OBIG, OEQUAL
+      LOGICAL BIG_ENDIAN
+C
+      DIMENSION IVALS(JWORK),INC(JELEM),ILOCVAL(JELEM)
+      DIMENSION IIVALS(JELEM)
+C
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 YVAL
+C
+      DIMENSION IMASK(8),IMAXV(32)
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C     DATA ILOCVAL/JELEM*0/
+C
+      DATA IMAXV/1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,
+     1  16383,32767,65535,131071,262143,524287,1048575,2097151,
+     2  4194305,8388607,16777215,33554431,671108863,134217727,
+     3  268435455,536870911,1073741823,2147483647,2147483647/
+C
+      SAVE IWPTB,IBPTB
+C     ------------------------------------------------------------------
+C*          1.  PACK PRELIMINARY ITEMS OF SECTION 4.
+C               ------------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      R4=3.4028235e+38
+      R8=1.7976931348623157D+308
+C
+C*          1.1  KEEP POINTERS TO THE BEGINING OF THE SECTION.
+C                ---------------------------------------------
+ 110  CONTINUE
+C
+      IF(OMULTI) THEN
+        IF(NSUBSET.EQ.1) THEN
+           IWPTB = NWPT
+           IBPTB = NBPT 
+        END IF
+      ELSE
+         IWPTB = NWPT
+         IBPTB = NBPT
+      END IF
+
+c     IF(OMULTI.AND.NSUBSET.EQ.1) THEN
+      IF(NSUBSET.EQ.1) THEN
+C
+C*          1.2  PACK LENGTH OF SECTION 4.
+C                -------------------------
+ 120  CONTINUE
+C
+         CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,24,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*) 'ERROR PACKING LENGTH OF SECTION 4.'
+            RETURN
+         END IF
+C
+C*          1.4  PACK RESERVED BYTE.
+C                -------------------
+ 140     CONTINUE
+C
+         CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)'ERROR PACKING RESERVED BYTE IN SECTION 4.'
+            RETURN
+         END IF
+C
+      END IF
+C     -----------------------------------------------------------------
+C*          2. PACK DATA.
+C              ----------
+ 200  CONTINUE
+C
+C      IKK=KELEM*KSEC3(3)
+C      IF(IKK.GT.JWORK) THEN
+C         KERR=17
+C         CALL BUERR(KERR)
+C         WRITE(KNTN,*)'CHECK VALUES OF KELEM AND NUMBER OF SUBSETS KSEC3(3).'
+C         RETURN
+C      END IF
+C      IF(IKK.GT.KVALS) THEN
+C         KERR=14
+C         CALL BUERR(KERR)
+C         WRITE(KNTN,*)'KVALS MUST BE GREATER THAN KELEM*KSEC3(3).'
+C         RETURN
+C      END IF
+C
+C*          2.1  CHECK IF DATA HAS TO BE COMRESSED.
+C                ----------------------------------
+ 210  CONTINUE
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UNCOMPRESSED DATA.
+C               ------------------
+ 300  CONTINUE
+C
+      IF(IB.EQ.0) THEN
+C
+         N=KSEC3(3)
+         IF(OMULTI) N=1
+         
+         DO 301 I=1,N
+C
+         IF(OMULTI) THEN
+            IM1K=(NSUBSET-1)*KELEM
+         ELSE
+            IM1K=(I-1)*KELEM
+         END IF
+C
+         DO 302 J=1,M
+C
+         
+C        IF(NWTR(J).EQ.31011.OR.NWTR(J).EQ.31012) THEN
+C           IRP=VALUES(J+IM1K)             
+C           DO III=J+2,J+IRP
+C            NWTDW(iii)=0
+C           END DO
+C        END IF
+C
+         IF(NWTDW(J).EQ.0) GO TO 302
+C
+         
+         IREF  =NWTRV(J)
+         ISCALE=NWTS (J)
+         IBDW  =NWTDW(J)
+C
+         JI=J+IM1K
+C
+         VAL=VALUES(JI)
+         IF(NWTEN(J).EQ.-999) THEN
+            IBYTES=NWTDW(J)/8
+            IF(ABS(VAL-RVIND)/RVIND.LE.EPS) THEN
+               IF(IBYTES.EQ.4) VAL=R4
+               IF(IBYTES.EQ.8) VAL=R8
+            END IF
+            IF(IBYTES.EQ.4) THEN
+               VAL4=VAL
+               OBIG=BIG_ENDIAN()
+               IF(.NOT.OBIG) THEN
+                  CALL SWAP_BYTES4(VAL4,VAL4S)
+                  VAL4=VAL4S
+               END IF
+               CALL BUGBYTESR4(VAL4,ILOCVAL,0,8,0,IBYTES)
+            ELSE
+               OBIG=BIG_ENDIAN()
+               IF(.NOT.OBIG) THEN
+                  CALL SWAP_BYTES8(VAL,VAL8S)
+                  VAL=VAL8S
+               END IF
+               CALL BUGBYTESR8(VAL,ILOCVAL,0,8,0,IBYTES)
+            END IF
+            ISKIP=0
+            CALL BUPKS(NBPW,KBUFF(NWPT),ILOCVAL,NWPT,NBPT,8,
+     1                ISKIP,IBYTES,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)'BUENS4 :'
+               WRITE(KNTN,*)'ERROR PACKING REAL IEEE'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 302
+         END IF
+C
+         IF(NWTEN(J).EQ.836970) THEN
+            IF(VAL.LT.0) THEN
+               IPACK=ABS(NINT(VAL))
+               IBDW1=1
+               CALL BUPCK(NBPW,KBUFF(NWPT),1,NWPT,NBPT,IBDW1,KERR)
+               IBDWM1=IBDW-1
+               CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,IBDWM1,KERR)
+            ELSE
+               IPACK=NINT(VAL)
+               CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,IBDW,KERR)
+            END IF
+            GO TO 302
+         END IF
+C
+         IF(NWTEN(J).EQ.658367) THEN
+            IF(ABS(VAL-RVIND)/RVIND.LE.EPS) THEN
+              YVAL=' '
+              NCHAR=NWTDW(J)
+              DO 3031 II=1,NCHAR/8
+C             IPACK=ICHAR(YVAL(II:II))
+              IPACK=255
+              IF(IPACK.GT.IMAXV(8)) IPACK=IMAXV(8)
+              CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,8,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'ERROR PACKING ',JI,' VALUE FOR ',J,
+     1                        ' ELEMENT.'
+                 RETURN
+              END IF
+ 3031         CONTINUE
+              GO TO 302
+
+            ELSE
+              IST=NINT(VAL)/1000
+              YVAL=CVALS(IST)
+              NCHAR=NWTDW(J)/8
+              DO 303 II=1,NCHAR
+              IPACK=ICHAR(YVAL(II:II))
+              IF(IPACK.GT.IMAXV(8)) IPACK=IMAXV(8)
+              CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,8,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'ERROR PACKING ',JI,' VALUE FOR ',J,
+     1                        ' ELEMENT.'
+                 RETURN
+              END IF
+ 303          CONTINUE
+              GO TO 302
+            END IF
+         END IF
+C        
+         IF(ABS(VAL-RVIND)/RVIND.LE.EPS) THEN
+            CALL BUPCK(NBPW,KBUFF(NWPT),NMASK(IBDW),NWPT,NBPT,IBDW,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)'ERROR PACKING ',JI,' VALUE FOR ',J,
+     1                      ' ELEMENT.'
+               RETURN
+            END IF
+         ELSE
+C
+C        CHECK VAL VALUE FOR POSSIBLE OVERFLOW
+C
+
+            IF(NOFL.EQ.1) THEN
+               IF(ABS(VAL).LT.EPS) VAL = 0.0
+               IF(VAL.GE.0) THEN
+                  ICHECK=IMAXV(IBDW)
+                  ICHECK=ICHECK+IREF
+                  VCHECK=ICHECK*10.**(-ISCALE)
+C
+                  IF(VAL .GT. VCHECK) THEN
+                     WRITE(KNTN,*) 'VALUE=',VAL,'TOO BIG FOR ',
+     1                      J,' ELEMENT ',I,' SUBSET.'
+                     VAL=VCHECK+1.
+                  END IF
+               ELSE
+                  VCHECK=IREF/10.**ISCALE
+                  IF(VAL.LT.VCHECK) THEN
+                WRITE(KNTN,*)'VALUE=',VAL,'TOO BIG NEGATIVE FOR ',
+     1                      J,' ELEMENT ',I,' SUBSET.'
+                     VAL=IREF/10.**ISCALE-1.
+                  END IF
+               END IF
+            END IF
+
+            IF(ISCALE.LT.0) THEN
+               ISCALE=IABS(ISCALE)
+               IPACK=NINT(VAL/10.**ISCALE) - IREF
+            ELSE
+               IPACK=NINT(VAL*10.**ISCALE) - IREF
+            END IF
+C
+C           CHECK IF VALUE TO BE PACKED NEGATIVE
+C
+            IF(IPACK.LT.0) THEN
+               KERR=-33
+               WRITE(KNTN,*)'BUENS4:'
+               WRITE(KNTN,*)'VALUE ',IPACK,' IS NEGATIVE'
+               WRITE(KNTN,*)'PROBABLY REFERENCE VALUE TOO BIG.'
+               WRITE(KNTN,*)J,' ELEMENT = ',NWTR(J),
+     1               ' REFERENCE VALUE = ',IREF
+               IPACK=0
+               WRITE(KNTN,*)'ELEMENT VALUE PACKED AS',IREF
+            END IF
+C
+C*          CHECK IF VALUE TO BE PACKED TOO BIG.
+C
+            IF(IPACK.GT.IMAXV(IBDW)) THEN
+C
+               IF(NPMISS.EQ.0) THEN
+                KERR=-28
+                WRITE(KNTN,*)'VALUE ',IPACK,' TOO BIG.'
+                WRITE(KNTN,*)'VALUE FOR ',J,' ELEMENT AND ',I,
+     1                       ' SUBSET'
+                WRITE(KNTN,*)'PACKED AS MISSING VALUE FOR',
+     1                         ' DATA WIDTH -1.'
+                IPACK=IMAXV(IBDW)-1
+               ELSE
+C
+C                 ALL ELEMENTS IN CLASS 1 TO 9 MUST BE CORRECT
+C
+                  IF(NWTR(J).GE.31000.AND.NWTR(J).LE.31012) THEN
+                     WRITE(KNTN,*)'VALUE ',IPACK,' TOO BIG.'
+                     WRITE(KNTN,*)'VALUE FOR ',J,' ELEMENT AND ',I,
+     1                           ' SUBSET'
+                     KERR=28
+                     CALL BUERR(KERR)
+                     RETURN
+                  END IF
+C
+                  KERR=-28
+                  WRITE(KNTN,*)'VALUE ',IPACK,' TOO BIG.'
+                  WRITE(KNTN,*)'VALUE FOR ',J,' ELEMENT AND ',I,
+     1                         ' SUBSET'
+                  WRITE(KNTN,*)'PACKED AS MISSING VALUE FOR',
+     1                         '  DATA WIDTH.'
+                  IPACK=IMAXV(IBDW)
+               END IF
+            END IF
+            CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,IBDW,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)'ERROR PACKING ',JI,' VALUE FOR ',J,
+     1         ' ELEMENT.'
+               WRITE(KNTN,*)'VALUE ',IPACK,' DATA WIDTH ',IBDW,
+     1         ' BITS'
+               RETURN
+            END IF
+         END IF
+C
+ 302     CONTINUE
+ 301     CONTINUE
+C
+         NWP=NWPT
+         NBP=NBPT
+      END IF
+C
+C*          4.  COMPRESS DATA.
+C               --------------
+ 400  CONTINUE
+C
+      IF(IB.EQ.1) THEN
+         DO 402 J=1,M
+C
+         IF(NWTDW(J).EQ.0) GO TO 402
+C
+         IREF  =NWTRV(J)
+         ISCALE=NWTS (J)
+         IBDW  =NWTDW(J)
+C
+         DO 401 I=1,KSEC3(3)
+C
+         JI=J+(I-1)*KELEM
+C
+         IF(NWTEN(J).EQ.658367) THEN
+            IVALS(JI)=VALUES(JI)
+            GO TO 401
+         END IF
+C
+         IF(NWTEN(J).EQ.-999) THEN
+            IF(NWTDW(J).EQ.32) THEN
+               IF(ABS(VALUES(JI)-RVIND)/RVIND.LT.EPS) THEN
+                  RVALS4(JI)=R4
+               ELSE
+                  RVALS4(JI)=VALUES(JI)
+               END IF
+            ELSE
+              IF(ABS(VALUES(JI)-RVIND)/RVIND.LT.EPS) THEN 
+                 RVALS(JI)=R8
+               ELSE
+                 RVALS(JI)=VALUES(JI)
+               END IF
+            END IF
+            GO TO 401
+         END IF
+C
+         IF(NWTEN(J).EQ.836970) THEN
+            ISG_REF=0
+            IF(VALUES(JI).LT.0) ISG_REF=1
+            IVALS(JI)=IABS(NINT(VALUES(JI)))
+            GO TO 401
+         END IF
+C
+         IF(ABS(VALUES(JI)-RVIND)/RVIND.LE.EPS) THEN
+            IVALS(JI)=NMASK(IBDW)
+         ELSE
+            IF(NOFL.EQ.1) THEN
+               IF(VALUES(JI).GE.0) THEN
+                  ICHECK=IMAXV(IBDW)
+                  ICHECK=ICHECK+IREF
+                  VCHECK=ICHECK*10.**(-ISCALE)
+C
+                  IF(VALUES(JI) .GT. VCHECK) THEN
+                     WRITE(KNTN,*) 'VALUE=',VALUES(JI),'TOO BIG FOR ',
+     1                      J,' ELEMENT AND ',I,' SUBSET.'
+                     VALUES(JI)=VCHECK+1.
+                  END IF
+               ELSE
+                  VCHECK=IREF/10.**ISCALE
+                  IF(VALUES(JI).LT.VCHECK) THEN 
+                     WRITE(KNTN,*) 'VALUE=',VALUES(JI),
+     1                      'TOO BIG NEGATIVE FOR ',
+     1                      J,' ELEMENT AND ',I,' SUBSET.'
+                     VALUES(JI)=IREF/10.**ISCALE-1.
+                  END IF
+               END IF
+            END IF
+C
+            IF(ISCALE.LT.0) THEN
+               ISCAL=IABS(ISCALE)
+               IPACK=NINT(VALUES(JI)/10.**ISCAL ) - IREF
+            ELSE
+               IPACK=NINT(VALUES(JI)*10.**ISCALE) - IREF
+            END IF
+C
+            IF(IPACK.LT.0) THEN
+               WRITE(KNTN,*)'BUENS4 :'
+               KERR=-33
+               WRITE(KNTN,*)'VALUE ',IPACK,' IS NEGATIVE'
+               WRITE(KNTN,*)'PROBABLY REFERENCE VALUE TOO BIG.'
+               WRITE(KNTN,*)J,'ELEMENT = ',NWTR(J),
+     1                    ' REFERENCE VALUE = ',IREF
+               IPACK=0
+               WRITE(KNTN,*)'ELEMENT PACKED AS',IREF
+            END IF
+C
+C           REPLACE IPACK VALUE WITH MISSING VALUE FOR IBDW -1 
+C           IF GREATER THEN MAXIMUM ALLOWED.
+C
+            IF(IPACK.GT.IMAXV(IBDW)) THEN
+C
+               IF(NPMISS.EQ.0) THEN
+                  KERR=-28
+                  WRITE(KNTN,*)'VALUE ',IPACK,' TOO BIG.'
+                  WRITE(KNTN,*)'VALUE FOR ',J,' ELEMENT AND ',I,
+     1            ' SUBSET'
+                  WRITE(KNTN,*)'PACKED AS MISSING VALUE FOR DATA ',
+     1                         'WIDTH -1.'
+                  IPACK=IMAXV(IBDW)-1
+               ELSE
+C
+C                 ALL ELEMENTS IN CLASS 1 TO 9 MUST BE CORRECT
+C
+                  IF(NWTR(J).GE.31000.AND.NWTR(J).LE.31012) THEN
+                     KERR=28
+                     CALL BUERR(KERR)
+                     WRITE(KNTN,*)'VALUE ',IPACK,' TOO BIG.'
+                     WRITE(KNTN,*)'VALUE FOR ',J,' ELEMENT AND ',I,
+     1               ' SUBSET'
+                     RETURN
+                  END IF
+C
+                  KERR=-28
+                  WRITE(KNTN,*)'VALUE ',IPACK,' TOO BIG.'
+                  WRITE(KNTN,*)'VALUE FOR ',J,' ELEMENT AND ',I,
+     1            ' SUBSET'
+                  WRITE(KNTN,*)'PACKED AS MISSING VALUE.'
+                  IPACK=IMAXV(IBDW)
+               END IF
+            END IF
+            IVALS(JI)=IPACK
+C
+         END IF
+C
+ 401     CONTINUE
+ 402     CONTINUE
+C
+C*          4.1  CHECK IF ALL VALUES ARE MISSING.
+C
+ 410  CONTINUE
+C
+         DO 411 I=1,M
+C
+         IF(NWTDW(I).EQ.0) GO TO 411
+         IBDW  =NWTDW(I)
+C
+         OMIS=.TRUE.
+         IF(NWTEN(I).EQ.658367) THEN
+            OMIS=.FALSE.
+         ELSEIF(NWTEN(I).EQ.-999) THEN
+            OMIS=.FALSE.
+         ELSE
+            DO 412 J=1,KSEC3(3)
+            IJ=I+(J-1)*KELEM
+            IF(IVALS(IJ).NE.NMASK(IBDW)) THEN
+               OMIS=.FALSE.
+            END IF
+ 412        CONTINUE
+         END IF
+C
+         IF(.NOT.OMIS) THEN
+C
+            IF(NWTEN(I).NE.658367.AND.NWTEN(I).NE.-999) THEN
+C
+C              FIND MINIMUM VALUE FOR ELEMENT
+C
+               MIN=IVALS(I)
+               DO 413 J=1,KSEC3(3)
+               IJ=I+(J-1)*KELEM
+               IF(IVALS(IJ).LT.MIN) MIN=IVALS(IJ)
+ 413           CONTINUE
+C
+C              FIND INCREMENTS
+C
+               DO 414 J=1,KSEC3(3)
+               IJ=I+(J-1)*KELEM
+               INC(J)=IVALS(IJ)-MIN
+               IF(IVALS(IJ).EQ.NMASK(IBDW)) INC(J)=NVIND
+ 414           CONTINUE
+C
+C              FIND NUMBER OF BITS NEEDED FOR MAX VALUE OF INCREMENT
+C
+               MAX=0
+               DO 415 J=1,KSEC3(3)
+               IF(INC(J).NE.NVIND.AND.INC(J).GT.MAX) MAX=INC(J)
+ 415           CONTINUE
+C
+C              CHECK IF ALL INCREMENTS ARE ZERO
+C
+               INC0=0
+               DO 419 J=1,KSEC3(3)
+               IF(INC(J).NE.0) INC0=1
+ 419           CONTINUE
+C
+C              FIND NUMBER OF BITS NEEDED
+C
+               IF(INC0.NE.0) THEN
+                  MAX=MAX+1
+                  DO 416 J=1,32
+                  IR=MAX/2
+                  IF(IR.EQ.0) GO TO 417
+                  MAX=IR
+ 416              CONTINUE
+C
+               END IF
+C
+ 417           CONTINUE
+C
+               INCBIT=0
+               IF(INC0.NE.0) INCBIT=J
+C
+C              REPLACE MISSING VALUES FOR INCREMENT BY ALL BITS SET TO 1.
+C
+               DO 418 J=1,KSEC3(3)
+               IF(INC(J).EQ.NVIND) INC(J)=NMASK(INCBIT)
+ 418           CONTINUE
+            END IF
+         END IF
+C
+C*          4.2  PACK DATA IN COMPRESSED FORM.
+C                -----------------------------
+ 420  CONTINUE
+C
+         IF(NWTEN(I).EQ.658367) THEN
+C
+            OSTRING=.TRUE.
+            JI1=I
+            IST1=IVALS(JI1)/1000
+            ICS=NWTDW(I)/8
+C           ICS=NINT(VALUES(JI1))-IST1*1000
+            NCSMAX=ICS
+            DO  IX=ICS,1,-1
+            IF(CVALS(IST1)(IX:IX).NE.' ') THEN
+               NCS=IX
+               GO TO 522
+            END IF
+            END DO
+
+ 522        NCSMAX=NCS
+            DO J=2,KSEC3(3)
+            JI=I+(J-1)*KELEM
+            IST=VALUES(JI)/1000
+            IF(CVALS(IST1).NE.CVALS(IST)) OSTRING=.FALSE.
+C           FIND MAX SIZE OF STRINGS
+            ICS=NWTDW(I)/8
+C           ICS=NINT(VALUES(JI))-IST*1000
+            DO  IX=ICS,1,-1
+            IF(CVALS(IST)(IX:IX).NE.' ') THEN
+               NCS=IX
+               GO TO 521
+            END IF
+            END DO
+ 521        CONTINUE
+            IF(NCS.GT.NCSMAX) NCSMAX=NCS 
+            END DO
+
+C
+            IF(OSTRING) THEN
+C
+              INCHAR=NWTDW(I)/8
+              ISKIP=0
+              DO II=1,INCHAR
+              IPACK=ICHAR(CVALS(IST1)(II:II))
+              CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,8,KERR) 
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'BUENS4 :'
+                 CALL BUERR(KERR)
+                 RETURN
+              END IF
+              END DO
+              IPACK=0
+              CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,6,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'BUENS4 :'
+                 CALL BUERR(KERR)
+                 RETURN
+              END IF
+            ELSE
+C
+C           PACK LOCAL REFERENCE VALUE FOR ELEMENT
+C
+            INCHAR=NWTDW(I)/8
+            ISKIP=0
+            CALL BUPKS(NBPW,KBUFF(NWPT),ILOCVAL,NWPT,NBPT,8,
+     1                ISKIP,INCHAR,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)'BUENS4 :'
+               WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+C
+C           PACK NUMBER OF BITS FOR INCREMENTS/NUMBER OF CHARACTERS
+C
+C           CALL BUPCK(NBPW,KBUFF(NWPT),INCHAR,NWPT,NBPT,6,KERR)
+            CALL BUPCK(NBPW,KBUFF(NWPT),NCSMAX,NWPT,NBPT,6,KERR)
+            IF(KERR.GT.0) THEN
+              WRITE(KNTN,*)'BUENS4 :'
+              WRITE(KNTN,*)'ERROR PACKING NUMBER OF BITS FOR INCREMENTS'
+              CALL BUERR(KERR)
+              RETURN
+            END IF
+C
+C           PACK INCREMENTS
+C
+            DO 421 J=1,KSEC3(3)
+C
+            JI=I+(J-1)*KELEM
+C
+            IST=IVALS(JI)/1000
+            YVAL=CVALS(IST)
+C
+            DO 423 II=1,NCSMAX
+            IPACK=ICHAR(YVAL(II:II))
+            CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,8,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)'BUENS4 :'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+ 423        CONTINUE
+C
+ 421        CONTINUE
+C
+            END IF
+         ELSEIF(NWTEN(I).EQ.-999) THEN
+C
+            OEQUAL=.TRUE.
+            DO J=1,KSEC3(3)-1
+            JI=I+(J-1)*KELEM
+            JII=I+J*KELEM
+            IF(NWTDW(I).EQ.32) THEN
+               IF(ABS(RVALS4(JI)-RVALS4(JII))/RVALS4(JII).GT.EPS) THEN
+                  OEQUAL=.FALSE.
+                  GO TO 4444
+               END IF
+
+            ELSE
+               IF(ABS(RVALS(JI)-RVALS(JII))/RVALS(JII).GT.EPS) THEN
+                  OEQUAL=.FALSE.
+                  GO TO 4444
+               END IF
+            END IF
+            END DO
+C
+C           PACK LOCAL REFERENCE VALUE FOR ELEMENT
+C
+4444        INCHAR=NWTDW(I)/8
+            ISKIP=0
+
+            IF(.NOT.OEQUAL) THEN
+C
+              CALL BUPKS(NBPW,KBUFF(NWPT),ILOCVAL,NWPT,NBPT,8,
+     1                  ISKIP,INCHAR,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'BUENS4 :'
+                 WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE'
+                 CALL BUERR(KERR)
+                 RETURN
+              END IF
+C
+C             PACK NUMBER OF BITS FOR INCREMENTS/NUMBER OF CHARACTERS
+C
+              CALL BUPCK(NBPW,KBUFF(NWPT),INCHAR,NWPT,NBPT,6,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'BUENS4 :'
+                 WRITE(KNTN,*)'ERROR PACKING NUMBER OF BITS
+     1                         FOR INCREMENTS'
+                 CALL BUERR(KERR)
+                 RETURN
+              END IF
+C
+C             PACK INCREMENTS
+C
+              DO J=1,KSEC3(3)
+C
+              JI=I+(J-1)*KELEM
+C
+              IF(NWTDW(I).EQ.32) THEN
+                 VAL4=RVALS4(JI)
+                 CALL BUGBYTESR4(VAL4,IIVALS,0,8,0,INCHAR)
+              ELSE
+                 VAL=RVALS(JI)
+                 CALL BUGBYTESR8(VAL,IIVALS,0,8,0,INCHAR)
+              END IF
+C
+              DO IZ=1,INCHAR
+               IPACK=IIVALS(IZ)
+               CALL BUPCK(NBPW,KBUFF(NWPT),IPACK,NWPT,NBPT,8,KERR)
+              END DO
+C
+              END DO
+
+            ELSE
+
+              IBYTES=NWTDW(I)/8
+              IF(IBYTES.EQ.4) THEN
+                 VAL4=RVALS4(I)
+                 OBIG=BIG_ENDIAN()
+                 IF(.NOT.OBIG) THEN
+                    CALL SWAP_BYTES4(VAL4,VAL4S)
+                    VAL4=VAL4S
+                 END IF
+                 CALL BUGBYTESR4(VAL4,ILOCVAL,0,8,0,IBYTES)
+              ELSE
+                 VAL=RVALS(I)
+                 OBIG=BIG_ENDIAN()
+                 IF(.NOT.OBIG) THEN
+                    CALL SWAP_BYTES8(VAL,VAL8S)
+                    VAL=VAL8S
+                 END IF
+                 CALL BUGBYTESR8(VAL,ILOCVAL,0,8,0,IBYTES)
+              END IF
+              ISKIP=0
+              CALL BUPKS(NBPW,KBUFF(NWPT),ILOCVAL,NWPT,NBPT,8,
+     1                  ISKIP,IBYTES,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'BUENS4 :'
+                 WRITE(KNTN,*)'ERROR PACKING REAL IEEE'
+                 CALL BUERR(KERR)
+                 RETURN
+              END IF
+C
+              CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,6,KERR)
+              IF(KERR.GT.0) THEN
+                 WRITE(KNTN,*)'BUENS4 :'
+                 WRITE(KNTN,*)'ERROR PACKING NUMBER OF BITS FOR'
+                 WRITE(KNTN,*)'INCREMENTS FOR ',I,' ELEMENT.'
+                 RETURN
+              END IF
+
+            END IF
+C
+ 4211       CONTINUE
+C
+         ELSE
+             IF(OMIS) THEN
+C
+C               PACK LOCAL REFERENCE VALUE FOR ELEMENT SET TO MISSING VALUE.
+C
+                CALL BUPCK(NBPW,KBUFF(NWPT),NMASK(IBDW),NWPT,NBPT,
+     1                     IBDW,KERR)
+                IF(KERR.GT.0) THEN
+                   WRITE(KNTN,*)'BUENS4 :'
+                   WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE '
+                   WRITE(KNTN,*)I,' ELEMENT.'
+                   RETURN
+                END IF
+C
+C               PACK NUMBER OF BITS FOR INCREMENTS (SET TO ZERO)
+C
+                CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,6,KERR)
+                IF(KERR.GT.0) THEN
+                   WRITE(KNTN,*)'BUENS4 :'
+                   WRITE(KNTN,*)'ERROR PACKING NUMBER OF BITS FOR'
+                   WRITE(KNTN,*)'INCREMENTS FOR ',I,' ELEMENT.'
+                   RETURN
+                END IF
+C
+             ELSE
+C
+                IF(INCBIT.EQ.0) THEN
+C
+C
+C                  PACK LOCAL REFERENCE VALUE FOR ELEMENT
+C
+                 IF(NWTEN(I).EQ.836970) THEN
+                  IF(ISG_REF.EQ.1) THEN
+                    CALL BUPCK(NBPW,KBUFF(NWPT),1,NWPT,NBPT,1,KERR)
+                    CALL BUPCK(NBPW,KBUFF(NWPT),MIN,NWPT,NBPT,IBDW-1,
+     1                         KERR)
+                  ELSE
+                    CALL BUPCK(NBPW,KBUFF(NWPT),MIN,NWPT,NBPT,IBDW,
+     1                         KERR)
+                    IF(KERR.GT.0) THEN
+                      WRITE(KNTN,*)'BUENS4 :'
+                      WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE'
+                      WRITE(KNTN,*)'FOR ',I,' ELEMENT IN ',IBDW,' BITS.'
+                      RETURN
+                    END IF
+                  END IF
+                 ELSE
+                   CALL BUPCK(NBPW,KBUFF(NWPT),MIN,NWPT,NBPT,IBDW,KERR)
+                   IF(KERR.GT.0) THEN
+                      WRITE(KNTN,*)'BUENS4 :'
+                      WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE'
+                      WRITE(KNTN,*)'FOR ',I,' ELEMENT IN ',IBDW,' BITS.'
+                      RETURN
+                   END IF
+                 ENDIF
+C
+C                  PACK NUMBER OF BITS FOR INCREMENTS
+C
+                   CALL BUPCK(NBPW,KBUFF(NWPT),INCBIT,NWPT,NBPT,6,KERR)
+                   IF(KERR.GT.0) THEN
+                      WRITE(KNTN,*)'BUENS4 :'
+                      WRITE(KNTN,*)'ERROR PACKING NUMBER OF BITS FOR'
+                      WRITE(KNTN,*)'INCREMENTS FOR ',I,' ELEMENT.'
+                      RETURN
+                   END IF
+C
+                ELSE
+C
+C                  PACK LOCAL REFERENCE VALUE FOR ELEMENT
+C
+                   IF(NWTEN(I).EQ.836970) THEN
+                      IF(ISG_REF.EQ.1) THEN
+                         CALL BUPCK(NBPW,KBUFF(NWPT),1,NWPT,NBPT,1,KERR)
+                         CALL BUPCK(NBPW,KBUFF(NWPT),MIN,NWPT,NBPT,
+     1                              IBDW-1,KERR)
+                      ELSE
+                         CALL BUPCK(NBPW,KBUFF(NWPT),MIN,NWPT,NBPT,IBDW,
+     1                              KERR)
+                         IF(KERR.GT.0) THEN
+                            WRITE(KNTN,*)'BUENS4 :'
+                      WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE'
+                      WRITE(KNTN,*)'FOR ',I,' ELEMENT IN ',IBDW,' BITS.'
+                            RETURN
+                         END IF
+                      END IF
+                   ELSE
+                     CALL BUPCK(NBPW,KBUFF(NWPT),MIN,NWPT,NBPT,IBDW,
+     1                          KERR)
+                      IF(KERR.GT.0) THEN
+                         WRITE(KNTN,*)'BUENS4 :'
+                      WRITE(KNTN,*)'ERROR PACKING LOCAL REFERENCE VALUE'
+                      WRITE(KNTN,*)'FOR ',I,' ELEMENT IN ',IBDW,' BITS.'
+                         RETURN
+                      END IF
+                   ENDIF
+
+C
+C                  PACK NUMBER OF BITS FOR INCREMENTS
+C
+                   CALL BUPCK(NBPW,KBUFF(NWPT),INCBIT,NWPT,NBPT,6,KERR)
+                   IF(KERR.GT.0) THEN
+                      WRITE(KNTN,*)'BUENS4 :'
+                      WRITE(KNTN,*)'ERROR PACKING NUMBER OF BITS FOR'
+                      WRITE(KNTN,*)  'INCREMENTS FOR ',I,' ELEMENT.'
+                      RETURN
+                   END IF
+C
+C                  PACK INCREMENTS
+C
+                   CALL BUPKS(NBPW,KBUFF(NWPT),INC,NWPT,NBPT,
+     1                        INCBIT,0,KSEC3(3),KERR)
+                   IF(KERR.GT.0) THEN
+                      WRITE(KNTN,*)  'BUENS4 :'
+                      WRITE(KNTN,*)  'ERROR PACKING INCREMENTS FOR',I,
+     1                ' ELEMENT'
+                      RETURN
+                   END IF
+C
+                END IF
+             END IF
+          END IF
+C
+ 411     CONTINUE
+C
+      END IF
+C
+C*          5.  SET UP LENGTH OF THE SECTION 4.
+C               --------------------------------
+ 500  CONTINUE
+C
+      IF(OMULTI) THEN
+         IF(NSUBSET.EQ.KSEC3(3)) THEN
+            CALL BUOCTN(IWPTB,IBPTB,KBUFL,KBUFF,KERR)
+            IF(KERR.GT.0) THEN
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+         END IF
+      ELSE
+         CALL BUOCTN(IWPTB,IBPTB,KBUFL,KBUFF,KERR)
+         IF(KERR.GT.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+      END IF
+C
+C     ------------------------------------------------------------------
+      RETURN
+      END
diff --git a/bufrdc/buens5.F b/bufrdc/buens5.F
new file mode 100755
index 0000000..c33ba52
--- /dev/null
+++ b/bufrdc/buens5.F
@@ -0,0 +1,207 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUENS5( KSEC0,KSEC1,KBUFL,KBUFF,KERR)
+C
+C
+C
+C
+C     PURPOSE.
+C     --------
+C          PACK SECTION 5 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUENS5( KSEC0,KSEC1,KBUFL,KBUFF,KERR)*
+C
+C        INPUT :
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C               *KSEC1*   -  INTEGER ARRAY OF AT LEAST 40 WORDS
+C                            CONTAINING BUFR SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(40) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C
+C        OUTPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPKS         - PACK BIT PATHERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcprq.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION IBUFR(4)
+      DIMENSION KSEC0(JSEC0),KSEC1(JSEC1)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DATA IBUFR/55,55,55,55/
+C
+C     ------------------------------------------------------------------
+C*          1.   EXPAND SECTION 5.
+C                -----------------
+ 100  CONTINUE
+C
+      IF( KERR.GT.0 ) RETURN
+C
+C*          1.2  PACK LAST FOUR OCTETS CONTAINING '7777'.
+C                ----------------------------------------
+C
+      CALL BUPKS(NBPW,KBUFF(NWPT),IBUFR,NWPT,NBPT,8,0,4,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          1.3  SET TOTAL LENGTH OF BUFR MESSAGE.
+C                ---------------------------------
+ 130  CONTINUE
+C
+      IBYTES=(NWPT-1)*NBPW/8+NBPT/8
+      IWORDS=IBYTES*8/NBPW
+      IF(IWORDS*NBPW.LT.IBYTES*8) IWORDS=IWORDS+1
+      KBUFL =IWORDS
+C
+C*          1.4  SET TOTAL LENGTH OF BUFR MESSAGE IN SECTION 0.
+C                ----------------------------------------------
+ 140  CONTINUE
+C
+      KSEC0(2)=IBYTES
+C
+      IF(KSEC0(3).GT.1) THEN
+C
+C        FOR BUFR EDITION 2 LENGTH OF MESSAGE STARTS AT 5 TH BYTE.
+C
+         IWPT= 32/NBPW + 1
+         IBPT= 32 - (IWPT-1)* NBPW
+C
+         CALL BUPCK(NBPW,KBUFF(IWPT),IBYTES,IWPT,IBPT,24,KERR)
+         IF(KERR.GT.0) THEN
+          WRITE(KNTN,*)  'ERROR PACKING TOTAL LENGTH OF BUFR MESSAGE
+     1 IN SECTION 0.'
+         END IF
+      END IF
+C
+C*          1.5 SET TOTAL BUFR LENGTH IN SECTION 2
+C
+ 150  CONTINUE
+C
+C     RDB KEY PACKED ONLY FOR ECMWF DATA AND SECTION 2 PRESENT.
+C
+      IF(NOKEY.EQ.0.AND.KSEC1(5).NE.0) THEN
+         IBTS=4
+         IF(KSEC0(3).GT.1) IBTS=8
+C
+C        SIZE OF SECTION 0 AND 1 PLUS 36 BYTES FROM BEGINING
+C        OF SECTION 2.
+C
+         IBTS=IBTS+KSEC1(1)+36
+         IBIT=IBTS*8
+C
+         IWPT= IBIT/NBPW + 1
+         IBPT= IBIT - (IWPT-1)* NBPW
+C
+         IF(IBYTES .GT. 65535 ) IBYTES=65535
+C
+         CALL BUPCK(NBPW,KBUFF(IWPT),IBYTES,IWPT,IBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+          WRITE(KNTN,*)  'ERROR PACKING TOTAL LENGTH OF BUFR MESSAGE
+     1 IN SECTION 2.'
+         END IF
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/buepmrk.F b/bufrdc/buepmrk.F
new file mode 100755
index 0000000..11ab730
--- /dev/null
+++ b/bufrdc/buepmrk.F
@@ -0,0 +1,661 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEPMRK(KSEC3,KVALS,VALUES,KELEM,KERR)
+C
+C**** *BUEPMRK*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS MARKER OPERATOR, RELACING IT WITH CORRESPONDING
+C     TABLE B ELEMENT DESCRIPTOR.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEPMRK(KSEC3,KVALS,VALUES,KELEM,KERR)*
+C
+C        INPUT :
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA
+C                                        COMPRESSION)
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  ARAY CONTAINING DATA
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACKS BIT PATTERN
+C          BUNPKS         - UNPACKS BIT PATTERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          M. DRAGOSAVAC 1/10/92 :
+C
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmbef.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmrq.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+      DIMENSION KSEC3(JSEC3)
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION IMASK(8)
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C
+C     ------------------------------------------------------------------
+C*          1.  FINED OPERATOR 223000 TO 237255.
+C               --------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+C
+C           1.1 CHECK IF DATA ARE COMRESSED.
+C               ----------------------------
+ 110  CONTINUE
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+C*          1.2 FIND POSITION OF OPREATORS.
+C               ---------------------------
+ 120  CONTINUE
+C
+      DO 121 J=1,M
+C
+      NR223=0
+      NR224=0
+      NR225=0
+      NR232=0
+C
+C
+      IF(NWTR(J).EQ.222000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 122 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 121
+            END IF
+ 122        CONTINUE
+         END IF
+      END IF
+      IF(NWTR(J).EQ.223000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP223000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 123 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 200
+            END IF
+ 123        CONTINUE
+         END IF
+         GO TO 200
+      END IF
+      IF(NWTR(J).EQ.224000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP224000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 124 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 300
+            END IF
+ 124        CONTINUE
+         END IF
+         GO TO 300
+      END IF
+      IF(NWTR(J).EQ.225000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP225000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 125 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 400
+            END IF
+ 125        CONTINUE
+         END IF
+         GO TO 400
+      END IF
+      IF(NWTR(J).EQ.232000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP232000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 126 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 500
+            END IF
+ 126        CONTINUE
+         END IF
+         GO TO 500
+      END IF
+C
+      IF(NWTR(J).EQ.235000) THEN
+C
+C        RESET POINTER  POINTER TO THE LAST DATA ELEMENT
+C
+         MREL=0
+         MBMP=0
+         MBMPL=0
+      END IF
+C
+      IF(NWTR(J).EQ.237255) THEN
+C
+C        RESET POINTERS TO THE BIT MAP
+C
+         MBMP=0
+         MBMPL=0
+      END IF
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          2.  PROCESS SUBSTITUTED VALUES OPERATOR.
+C               ------------------------------------
+C
+ 200  CONTINUE
+C
+C*          2.1 FIND FIRST ACCURANCE OD 223255.
+C               -------------------------------
+ 210  CONTINUE
+C
+      NP223255=0
+      DO 211 I=NP223000,M
+      IF(NWTR(I).EQ.223255) THEN
+         NP223255=I
+         GO TO 220
+      END IF
+ 211  CONTINUE
+C
+      GO TO 121
+C
+C*          2.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 220  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I223=0
+         OF223=.TRUE.
+         DO 221 I=NP223000,NP223255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF223) THEN
+               I223=I
+               OF223=.FALSE.
+            END IF
+            NR223=NR223+1
+         END IF
+ 221     CONTINUE
+      ELSE
+         I223=MBMP
+         NR223=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          2.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 250  CONTINUE
+C
+      ISUBST=MREL-NR223+1
+C
+C*          2.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 260  CONTINUE
+C
+      DO 261 I=I223,NR223+I223
+      IF(VALUES(I).EQ.0) THEN
+C
+ 262     CONTINUE
+C
+         IF(NWTR(NP223255).EQ.223255) THEN
+            NWTDW (NP223255)=NWTDW(ISUBST)
+            NWTR  (NP223255)=NWTR (ISUBST)
+            NWTRV (NP223255)=NWTRV(ISUBST)
+            NWTS  (NP223255)=NWTS (ISUBST)
+            CWTEN (NP223255)=CWTEN(ISUBST)
+            CWTU  (NP223255)=CWTU (ISUBST)
+            NWTEN (NP223255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP223255=NP223255+1
+         ELSE
+            NP223255=NP223255+1
+            GO TO 262
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 261  CONTINUE
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          3.  PROCESS FIRST ORDER STATISTICS OPERATOR.
+C               ----------------------------------------
+ 300  CONTINUE
+C
+C*          3.1 FIND FIRST ACCURANCE OD 224255.
+C               -------------------------------
+ 310  CONTINUE
+C
+      NP224255=0
+      DO 311 I=NP224000,M
+      IF(NWTR(I).EQ.224255) THEN
+         NP224255=I
+         GO TO 320
+      END IF
+ 311  CONTINUE
+C
+      GO TO 121
+C
+C*          3.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 320  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I224=0
+         OF224=.TRUE.
+         DO 321 I=NP224000,NP224255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF224) THEN
+               I224=I
+               OF224=.FALSE.
+            END IF
+            NR224=NR224+1
+         END IF
+ 321     CONTINUE
+      ELSE
+         I224=MBMP
+         NR224=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          3.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 350  CONTINUE
+C
+      ISUBST=MREL-NR224+1
+C
+C*          3.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 360  CONTINUE
+C
+      DO 361 I=I224,NR224+I224
+      IF(VALUES(I).EQ.0) THEN
+C
+ 362     CONTINUE
+C
+         IF(NWTR(NP224255).EQ.224255) THEN
+            NWTDW (NP224255)=NWTDW(ISUBST)
+            NWTR  (NP224255)=NWTR (ISUBST)
+            NWTRV (NP224255)=NWTRV(ISUBST)
+            NWTS  (NP224255)=NWTS (ISUBST)
+            CWTEN (NP224255)=CWTEN(ISUBST)
+            CWTU  (NP224255)=CWTU (ISUBST)
+            NWTEN (NP224255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP224255=NP224255+1
+         ELSE
+            NP224255=NP224255+1
+            GO TO 362
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 361  CONTINUE
+C
+      GO TO 121
+C
+C
+C     -----------------------------------------------------------------
+C*          4.  PROCESS DIFFERENCE STATISTICS OPERATOR.
+C               ---------------------------------------
+ 400  CONTINUE
+C
+C
+C*          4.1 FIND FIRST ACCURANCE OD 225255.
+C               -------------------------------
+ 410  CONTINUE
+C
+      NP225255=0
+      DO 411 I=NP225000,M
+      IF(NWTR(I).EQ.225255) THEN
+         NP225255=I
+         GO TO 420
+      END IF
+ 411  CONTINUE
+C
+      GO TO 121
+C
+C*          4.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 420  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I225=0
+         OF225=.TRUE.
+         DO 421 I=NP225000,NP225255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF225) THEN
+               I225=I
+               OF225=.FALSE.
+            END IF
+            NR225=NR225+1
+         END IF
+ 421     CONTINUE
+      ELSE
+         I225=MBMP
+         NR225=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          4.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 450  CONTINUE
+C
+      ISUBST=MREL-NR225+1
+C
+C*          4.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 460  CONTINUE
+C
+      DO 461 I=I225,NR225+I225
+      IF(VALUES(I).EQ.0) THEN
+C
+ 462     CONTINUE
+C
+         IF(NWTR(NP225255).EQ.225255) THEN
+            NWTR  (NP225255)=NWTR (ISUBST)
+C
+C           CHANGE REFERENCE VALUE TO BE CENTRED AROUND ZERO
+C           AND INCREASE DATA WIDTH BY 1
+C
+            IF(NWTEN(ISUBST).NE.-999) THEN
+               NWTRV (NP225255)=-2**NWTDW(ISUBST)
+               NWTDW (NP225255)=NWTDW(ISUBST)+1
+            ELSE
+               NWTRV (NP225255)=NWTDW(ISUBST)
+               NWTDW (NP225255)=NWTDW(ISUBST)
+               NWTEN (NP225255)=NWTEN(ISUBST)
+            END IF
+C
+            NWTS  (NP225255)=NWTS (ISUBST)
+            CWTEN (NP225255)=CWTEN(ISUBST)
+            CWTU  (NP225255)=CWTU (ISUBST)
+            NWTEN(NP225255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP225255=NP225255+1
+         ELSE
+            NP225255=NP225255+1
+            GO TO 462
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 461  CONTINUE
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          5.  PROCESS REPLACE/RETAINED OPERATOR.
+C               ----------------------------------
+ 500  CONTINUE
+C
+C
+C*          5.1 FIND FIRST ACCURANCE OF 232255.
+C               -------------------------------
+ 510  CONTINUE
+C
+      NP232255=0
+      DO 511 I=NP232000,M
+      IF(NWTR(I).EQ.232255) THEN
+         NP232255=I
+         GO TO 520
+      END IF
+ 511  CONTINUE
+C
+      GO TO 121
+C
+C*          5.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 520  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I232=0
+         OF232=.TRUE.
+         DO 521 I=NP232000,NP232255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF232) THEN
+               I232=I
+               OF232=.FALSE.
+            END IF
+            NR232=NR232+1
+         END IF
+ 521     CONTINUE
+      ELSE
+         I232=MBMP
+         NR232=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          5.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 550  CONTINUE
+C
+      ISUBST=MREL-NR232+1
+C
+C*          5.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 560  CONTINUE
+C
+      DO 561 I=I232,NR232+I232
+      IF(VALUES(I).EQ.0) THEN
+C
+ 562     CONTINUE
+C
+         IF(NWTR(NP232255).EQ.232255) THEN
+            NWTDW (NP232255)=NWTDW(ISUBST)
+            NWTR  (NP232255)=NWTR (ISUBST)
+            NWTRV (NP232255)=NWTRV(ISUBST)
+            NWTS  (NP232255)=NWTS (ISUBST)
+            CWTEN (NP232255)=CWTEN(ISUBST)
+            CWTU  (NP232255)=CWTU (ISUBST)
+            NWTEN(NP232255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP232255=NP232255+1
+         ELSE
+            NP232255=NP232255+1
+            GO TO 562
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 561  CONTINUE
+C
+C     -----------------------------------------------------------------
+ 121  CONTINUE
+C
+      RETURN
+C
+C
+      END
diff --git a/bufrdc/buepmrkc.F b/bufrdc/buepmrkc.F
new file mode 100755
index 0000000..81dd470
--- /dev/null
+++ b/bufrdc/buepmrkc.F
@@ -0,0 +1,664 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEPMRKC(KSEC3,KVALS,VALUES,KELEM,CNAMES,CUNITS,KERR)
+C
+C**** *BUEPMRKC*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS MARKER OPERATOR, RELACING IT WITH CORRESPONDING
+C     TABLE B ELEMENT DESCRIPTOR.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEPMRKC(KSEC3,KVALS,VALUES,KELEM,CNAMES,
+C                           CUNITS,KERR)*
+C
+C        INPUT :
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA
+C                                        COMPRESSION)
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  ARAY CONTAINING DATA
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACKS BIT PATTERN
+C          BUNPKS         - UNPACKS BIT PATTERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          M. DRAGOSAVAC 1/10/92 :
+C
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmbef.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmrq.F"
+C
+      CHARACTER*64 CWTEN
+      CHARACTER*24 CWTU
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      DIMENSION    KSEC3(JSEC3)
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION IMASK(8)
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C
+C     ------------------------------------------------------------------
+C*          1.  FINED OPERATOR 223000 TO 237255.
+C               --------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+C
+C           1.1 CHECK IF DATA ARE COMRESSED.
+C               ----------------------------
+ 110  CONTINUE
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+C*          1.2 FIND POSITION OF OPREATORS.
+C               ---------------------------
+ 120  CONTINUE
+C
+      DO 121 J=1,M
+C
+      NR223=0
+      NR224=0
+      NR225=0
+      NR232=0
+C
+C
+      IF(NWTR(J).EQ.222000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 122 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 121
+            END IF
+ 122        CONTINUE
+         END IF
+      END IF
+      IF(NWTR(J).EQ.223000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP223000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 123 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 200
+            END IF
+ 123        CONTINUE
+         END IF
+         GO TO 200
+      END IF
+      IF(NWTR(J).EQ.224000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP224000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 124 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 300
+            END IF
+ 124        CONTINUE
+         END IF
+         GO TO 300
+      END IF
+      IF(NWTR(J).EQ.225000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP225000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 125 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 400
+            END IF
+ 125        CONTINUE
+         END IF
+         GO TO 400
+      END IF
+      IF(NWTR(J).EQ.232000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         NP232000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 126 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               GO TO 500
+            END IF
+ 126        CONTINUE
+         END IF
+         GO TO 500
+      END IF
+C
+      IF(NWTR(J).EQ.235000) THEN
+C
+C        RESET POINTER  POINTER TO THE LAST DATA ELEMENT
+C
+         MREL=0
+         MBMP=0
+         MBMPL=0
+      END IF
+C
+      IF(NWTR(J).EQ.237255) THEN
+C
+C        RESET POINTERS TO THE BIT MAP
+C
+         MBMP=0
+         MBMPL=0
+      END IF
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          2.  PROCESS SUBSTITUTED VALUES OPERATOR.
+C               ------------------------------------
+C
+ 200  CONTINUE
+C
+C*          2.1 FIND FIRST ACCURANCE OD 223255.
+C               -------------------------------
+ 210  CONTINUE
+C
+      NP223255=0
+      DO 211 I=NP223000,M
+      IF(NWTR(I).EQ.223255) THEN
+         NP223255=I
+         GO TO 220
+      END IF
+ 211  CONTINUE
+C
+      GO TO 121
+C
+C*          2.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 220  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I223=0
+         OF223=.TRUE.
+         DO 221 I=NP223000,NP223255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF223) THEN
+               I223=I
+               OF223=.FALSE.
+            END IF
+            NR223=NR223+1
+         END IF
+ 221     CONTINUE
+      ELSE
+         I223=MBMP
+         NR223=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          2.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 250  CONTINUE
+C
+      ISUBST=MREL-NR223+1
+C
+C*          2.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 260  CONTINUE
+C
+      DO 261 I=I223,NR223+I223
+      IF(VALUES(I).EQ.0) THEN
+C
+ 262     CONTINUE
+C
+         IF(NWTR(NP223255).EQ.223255) THEN
+            NWTDW (NP223255)=NWTDW(ISUBST)
+            NWTR  (NP223255)=NWTR (ISUBST)
+            NWTRV (NP223255)=NWTRV(ISUBST)
+            NWTS  (NP223255)=NWTS (ISUBST)
+            CWTEN (NP223255)=CWTEN(ISUBST)
+            CWTU  (NP223255)=CWTU (ISUBST)
+            NWTEN (NP223255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP223255=NP223255+1
+         ELSE
+            NP223255=NP223255+1
+            GO TO 262
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 261  CONTINUE
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          3.  PROCESS FIRST ORDER STATISTICS OPERATOR.
+C               ----------------------------------------
+ 300  CONTINUE
+C
+C*          3.1 FIND FIRST ACCURANCE OD 224255.
+C               -------------------------------
+ 310  CONTINUE
+C
+      NP224255=0
+      DO 311 I=NP224000,M
+      IF(NWTR(I).EQ.224255) THEN
+         NP224255=I
+         GO TO 320
+      END IF
+ 311  CONTINUE
+C
+      GO TO 121
+C
+C*          3.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 320  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I224=0
+         OF224=.TRUE.
+         DO 321 I=NP224000,NP224255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF224) THEN
+               I224=I
+               OF224=.FALSE.
+            END IF
+            NR224=NR224+1
+         END IF
+ 321     CONTINUE
+      ELSE
+         I224=MBMP
+         NR224=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          3.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 350  CONTINUE
+C
+      ISUBST=MREL-NR224+1
+C
+C*          3.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 360  CONTINUE
+C
+      DO 361 I=I224,NR224+I224
+      IF(VALUES(I).EQ.0) THEN
+C
+ 362     CONTINUE
+C
+         IF(NWTR(NP224255).EQ.224255) THEN
+            NWTDW (NP224255)=NWTDW(ISUBST)
+            NWTR  (NP224255)=NWTR (ISUBST)
+            NWTRV (NP224255)=NWTRV(ISUBST)
+            NWTS  (NP224255)=NWTS (ISUBST)
+            CWTEN (NP224255)=CWTEN(ISUBST)
+            CWTU  (NP224255)=CWTU (ISUBST)
+            NWTEN (NP224255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP224255=NP224255+1
+         ELSE
+            NP224255=NP224255+1
+            GO TO 362
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 361  CONTINUE
+C
+      GO TO 121
+C
+C
+C     -----------------------------------------------------------------
+C*          4.  PROCESS DIFFERENCE STATISTICS OPERATOR.
+C               ---------------------------------------
+ 400  CONTINUE
+C
+C
+C*          4.1 FIND FIRST ACCURANCE OD 225255.
+C               -------------------------------
+ 410  CONTINUE
+C
+      NP225255=0
+      DO 411 I=NP225000,M
+      IF(NWTR(I).EQ.225255) THEN
+         NP225255=I
+         GO TO 420
+      END IF
+ 411  CONTINUE
+C
+      GO TO 121
+C
+C*          4.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 420  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I225=0
+         OF225=.TRUE.
+         DO 421 I=NP225000,NP225255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF225) THEN
+               I225=I
+               OF225=.FALSE.
+            END IF
+            NR225=NR225+1
+         END IF
+ 421     CONTINUE
+      ELSE
+         I225=MBMP
+         NR225=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          4.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 450  CONTINUE
+C
+      ISUBST=MREL-NR225+1
+C
+C*          4.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 460  CONTINUE
+C
+      DO 461 I=I225,NR225+I225
+      IF(VALUES(I).EQ.0) THEN
+C
+ 462     CONTINUE
+C
+         IF(NWTR(NP225255).EQ.225255) THEN
+            NWTR  (NP225255)=NWTR (ISUBST)
+C
+C           CHANGE REFERENCE VALUE TO BE CENTRED AROUND ZERO
+C           AND INCREASE DATA WIDTH BY 1
+C
+            IF(NWTEN(ISUBST).NE.-999) THEN
+               NWTRV (NP225255)=-2**NWTDW(ISUBST)
+               NWTDW (NP225255)=NWTDW(ISUBST)+1
+            ELSE
+               NWTRV (NP225255)=NWTDW(ISUBST)
+               NWTDW (NP225255)=NWTDW(ISUBST)
+               NWTEN (NP225255)=NWTEN(ISUBST)
+            END IF
+C
+            NWTS  (NP225255)=NWTS (ISUBST)
+            CWTEN (NP225255)=CWTEN(ISUBST)
+            CWTU  (NP225255)=CWTU (ISUBST)
+            ISUBST=ISUBST+1
+            NP225255=NP225255+1
+         ELSE
+            NP225255=NP225255+1
+            GO TO 462
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 461  CONTINUE
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          5.  PROCESS REPLACE/RETAINED OPERATOR.
+C               ----------------------------------
+ 500  CONTINUE
+C
+C
+C*          5.1 FIND FIRST ACCURANCE OF 232255.
+C               -------------------------------
+ 510  CONTINUE
+C
+      NP232255=0
+      DO 511 I=NP232000,M
+      IF(NWTR(I).EQ.232255) THEN
+         NP232255=I
+         GO TO 520
+      END IF
+ 511  CONTINUE
+C
+      GO TO 121
+C
+C*          5.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 520  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I232=0
+         OF232=.TRUE.
+         DO 521 I=NP232000,NP232255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF232) THEN
+               I232=I
+               OF232=.FALSE.
+            END IF
+            NR232=NR232+1
+         END IF
+ 521     CONTINUE
+      ELSE
+         I232=MBMP
+         NR232=MBMPL-MBMP+1
+      END IF
+C
+C
+C*          5.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 550  CONTINUE
+C
+      ISUBST=MREL-NR232+1
+C
+C*          5.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 560  CONTINUE
+C
+      DO 561 I=I232,NR232+I232
+      IF(VALUES(I).EQ.0) THEN
+C
+ 562     CONTINUE
+C
+         IF(NWTR(NP232255).EQ.232255) THEN
+            NWTDW (NP232255)=NWTDW(ISUBST)
+            NWTR  (NP232255)=NWTR (ISUBST)
+            NWTRV (NP232255)=NWTRV(ISUBST)
+            NWTS  (NP232255)=NWTS (ISUBST)
+            CWTEN (NP232255)=CWTEN(ISUBST)
+            CWTU  (NP232255)=CWTU (ISUBST)
+            ISUBST=ISUBST+1
+            NP232255=NP232255+1
+         ELSE
+            NP232255=NP232255+1
+            GO TO 562
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 561  CONTINUE
+C
+C     -----------------------------------------------------------------
+ 121  CONTINUE
+C
+      RETURN
+C
+C
+      END
diff --git a/bufrdc/buepwt.F b/bufrdc/buepwt.F
new file mode 100755
index 0000000..501e13e
--- /dev/null
+++ b/bufrdc/buepwt.F
@@ -0,0 +1,294 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEPWT(KDD,KERR)
+C
+C**** *BUEPWT*
+C
+C
+C     PURPOSE.
+C     --------
+C          UPDATES WORKING TABLES SETTING ELEMENT NAME,UNIT,SCALE,
+C     REFERENCE VALUE AND DATA WIDTH.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEPWT(KDD,KERR)*
+C
+C        INPUT :
+C               *KDD*     -  DATA DESCRIPTOR
+C        OUTPUT:
+C               *KERR*    -  RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmatb.F"
+#     include "bcmatbc.F"
+#     include "bcmbef.F"
+C
+      CHARACTER*64 CATBEN,CWTEN,CTABBEN,YWTEN
+      CHARACTER*24 CATBU,CWTU,CTABBU,YWTU
+C
+C     ------------------------------------------------------------------
+C*          1.   UPDATE WORKING TABLE.
+C                ---------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      ICLASS=KDD/1000
+      IYYY  =KDD-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+C*          1.1  ASSOCIATED FIELD ?
+C                ------------------
+ 110  CONTINUE
+C
+      IF(NFD.EQ.0) GO TO 140
+C
+C*          1.2  UNITS ELEMENT DESCRIPTOR ?
+C                --------------------------
+ 120  CONTINUE
+C
+      I=NTABP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(KNTN,*)  'BUEPWT : ',KDD
+         CALL BUERR(KERR)
+         DO 1 IQ=1,JELEM
+         NSTACK(IQ)=0.
+ 1       CONTINUE
+         RETURN
+      END IF
+C
+      IF(NTABBTR(I)/1000.EQ.31)  GO TO 140
+c     IF(CTABBU(I)(1:4).EQ.'CODE') GO TO 140
+c     IF(CTABBU(I)(1:4).EQ.'FLAG') GO TO 140
+c     IF(CTABBU(I)(1:3).EQ.'NUM' ) GO TO 140
+C
+C*          1.3   ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+ 130  CONTINUE
+C
+      IF(N40.NE.0) THEN
+         NWT=NWT+1
+         CWTEN(NWT)='ASSOCIATED FIELD'
+         CWTU (NWT)=' '
+         NWTDW(NWT)=N40
+         NWTR (NWT)= 999999
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+      ELSE
+         DO I=1,NFD
+         NWT=NWT+1
+         CWTEN(NWT)='ASSOCIATED FIELD'
+         CWTU (NWT)=' '
+         NWTDW(NWT)=NAFDWA(I)
+         NWTR (NWT)= 999999
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+         END DO
+      END IF
+C
+      M=NWT
+C
+C     ------------------------------------------------------------------
+C*          1.4   SEARCH AUGMENTED TABLE *B ENTRIES .
+C                 -----------------------------------
+ 140  CONTINUE
+C
+      DO 141 J=1,NJA
+C
+      IF(NATBTR(J).EQ.KDD) THEN
+         II=J
+C
+C*             MODIFY ENTRY FOR OPERATOR IN FORCE.
+C              -----------------------------------
+C
+C*             ADD ENTRY TO WORKING TABLE.
+C              ---------------------------
+C
+         IX=KDD/1000
+         IF(N40.NE.0.AND.IX.NE.31) THEN
+            NWT=NWT+1
+            NWTR (NWT) = KDD
+            NWTS (NWT) = 0
+            NWTRV(NWT) = 0
+            NWTDW(NWT) = N40
+         ELSE
+            NWT=NWT+1
+            NWTR (NWT) = KDD
+            NWTS (NWT) = NATBS (II) + NSCAM + NSCAM07
+            NWTRV(NWT) = nint(NATBRV(II)*10.**N07)
+            NWTDW(NWT) = NATBDW(II) + NDWINC + NDWINC07
+
+         END IF
+C
+C        CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+         IF(N221.NE.0) THEN
+            IX=KDD/1000
+            IF(IX.GT.9.AND.IX.NE.31) NWTDW(NWT)=0
+            N221=N221-1
+         END IF
+C
+c        IF(NWTR(NWT).EQ.31011.OR.NWTR(NWT).EQ.31012) THEN
+c           IF(NWTR(NWT-1).EQ.31011.OR.NWTR(NWT-1).EQ.31012) THEN
+c              NWTDW(NWT)=0
+c           END IF
+c        END IF
+C
+C*            UPDATE M, CNAMES, CUNITS.
+C             -------------------------
+C
+         CWTEN(NWT) = CATBEN(II)
+         CWTU (NWT) = CATBU (II)
+         NWTEN(NWT) = 0
+         IF(CATBU(II)(1:3).EQ.'CCI') THEN
+            NWTEN(NWT)=658367
+         ELSEIF(N40.NE.0.AND.IX.NE.31.AND.
+     1      CATBU(II)(1:3).NE.'COD'.AND.
+     2      CATBU(II)(1:3).NE.'FLA') THEN
+            NWTEN(NWT) = -999
+         END IF
+C
+         M = NWT
+         RETURN
+      END IF
+C
+ 141  CONTINUE
+C
+C
+C*          1.5  GET TABLE *B ENTRY .
+C                ---------------------
+ 150  CONTINUE
+C
+      I=NTABP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(KNTN,*)  'BUEPWT : ',KDD
+         CALL BUERR(KERR)
+         DO 2 IQ=1,JELEM
+         NSTACK(IQ)=0.
+ 2       CONTINUE
+         RETURN
+      END IF
+C
+ 155  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*          1.6   MODIFY ENTRY FOR OPERATOR IN FORCE.
+C                 -----------------------------------
+ 160  CONTINUE
+C
+C*                ADD ENTRY TO WORKING TABLE.
+C                 ---------------------------
+      IX=KDD/1000
+      IF(CTABBU(I)(1:4).EQ.'CODE'.OR.
+     1   CTABBU(I)(1:4).EQ.'FLAG') THEN
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = NTABBS (I)
+         NWTRV(NWT) = NTABBRV(I)
+         NWTDW(NWT) = NTABBDW(I)
+      ELSEIF(N40.NE.0.AND.IX.NE.31) THEN
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = 0
+         NWTRV(NWT) = 0
+         NWTDW(NWT) = N40
+      ELSE
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = NTABBS (I) + NSCAM +  NSCAM07
+         NWTRV(NWT) = nint(NTABBRV(I)*10.**N07)
+         NWTDW(NWT) = NTABBDW(I) + NDWINC + NDWINC07
+
+      END IF
+C
+C     CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+      IF(N221.NE.0) THEN
+         IX=KDD/1000
+         IF(IX.GT.9.AND.IX.NE.31) NWTDW(NWT)=0
+         N221=N221-1
+      END IF
+C
+C     IF(NWTR(NWT).EQ.31011.OR.NWTR(NWT).EQ.31012) THEN
+C        IF(NWTR(NWT-1).EQ.31011.OR.NWTR(NWT-1).EQ.31012) THEN
+C           NWTDW(NWT)=0
+C        END IF
+C     END IF
+C
+ 175  CONTINUE
+C
+C*          1.8 UPDATE M.
+C               ---------
+ 180  CONTINUE
+C
+      CWTEN(NWT)=  CTABBEN(I)
+      CWTU (NWT)=  CTABBU(I)
+      NWTEN(NWT)= 0
+      IF(CTABBU(I)(1:3).EQ.'CCI') THEN
+         NWTEN(NWT)=658367
+         IF(N08.NE.0) THEN
+             NWTDW(NWT)=N08*8
+         END IF
+      ELSE
+         IF(N40.NE.0.AND.IX.NE.31)   NWTEN(NWT) = -999
+      END IF
+C
+      M=NWT
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/buepwtc.F b/bufrdc/buepwtc.F
new file mode 100755
index 0000000..7c6cdf0
--- /dev/null
+++ b/bufrdc/buepwtc.F
@@ -0,0 +1,291 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEPWTC(KDD,KERR)
+C
+C**** *BUEPWTC*
+C
+C
+C     PURPOSE.
+C     --------
+C          UPDATES WORKING TABLES SETTING ELEMENT NAME,UNIT,SCALE,
+C     REFERENCE VALUE AND DATA WIDTH.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEPWTC(KDD,KERR)*
+C
+C        INPUT :
+C               *KDD*     -  DATA DESCRIPTOR
+C        OUTPUT:
+C               *KERR*    -  RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmatb.F"
+#     include "bcmatbc.F"
+#     include "bcmbef.F"
+C
+      CHARACTER*64 CATBEN,CWTEN,CTABBEN,YWTEN
+      CHARACTER*24 CATBU,CWTU,CTABBU,YWTU
+C
+C     ------------------------------------------------------------------
+C*          1.   UPDATE WORKING TABLE.
+C                ---------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      ICLASS=KDD/1000
+      IYYY  =KDD-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+C*          1.1  ASSOCIATED FIELD ?
+C                ------------------
+ 110  CONTINUE
+C
+      IF(NFD.EQ.0) GO TO 140
+C
+C*          1.2  UNITS ELEMENT DESCRIPTOR ?
+C                --------------------------
+ 120  CONTINUE
+C
+      I=NTABP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(KNTN,*)  'BUEPWT : ',KDD
+         CALL BUERR(KERR)
+         DO 1 IQ=1,JELEM
+         NSTACK(IQ)=0.
+ 1       CONTINUE
+         RETURN
+      END IF
+C
+      IF(NTABBTR(I)/1000.EQ.31)  GO TO 140
+c     IF(CTABBU(I)(1:4).EQ.'CODE') GO TO 140
+c     IF(CTABBU(I)(1:4).EQ.'FLAG') GO TO 140
+c     IF(CTABBU(I)(1:3).EQ.'NUM' ) GO TO 140
+C
+C*          1.3   ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+ 130  CONTINUE
+C
+      IF(N40.NE.0) THEN
+         NWT=NWT+1
+         CWTEN(NWT)='ASSOCIATED FIELD'
+         CWTU (NWT)=' '
+         NWTDW(NWT)=N40
+         NWTR (NWT)= 999999
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+      ELSE
+         DO I=1,NFD
+         NWT=NWT+1
+         CWTEN(NWT)='ASSOCIATED FIELD'
+         CWTU (NWT)=' '
+         NWTDW(NWT)=NAFDWA(I)
+         NWTR (NWT)= 999999
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+         END DO
+      END IF
+C
+      M=NWT
+C
+C     ------------------------------------------------------------------
+C*          1.4   SEARCH AUGMENTED TABLE *B ENTRIES .
+C                 -----------------------------------
+ 140  CONTINUE
+C
+      DO 141 J=1,NJA
+C
+      IF(NATBTR(J).EQ.KDD) THEN
+         II=J
+C
+C*             MODIFY ENTRY FOR OPERATOR IN FORCE.
+C              -----------------------------------
+C
+C*             ADD ENTRY TO WORKING TABLE.
+C              ---------------------------
+C
+         IX=KDD/1000
+         IF(N40.NE.0.AND.IX.NE.31) THEN
+            NWT=NWT+1
+            NWTR (NWT) = KDD
+            NWTS (NWT) = 0
+            NWTRV(NWT) = 0
+            NWTDW(NWT) = N40
+         ELSE
+            NWT=NWT+1
+            NWTR (NWT) = KDD
+            NWTS (NWT) = NATBS (II) + NSCAM + NSCAM07
+            NWTRV(NWT) = NINT(NATBRV(II)*10.**N07)
+            NWTDW(NWT) = NATBDW(II) + NDWINC + NDWINC07
+
+
+         END IF
+C
+C        CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+         IF(N221.NE.0) THEN
+            IX=KDD/1000
+            IF(IX.GT.9.AND.IX.NE.31) NWTDW(NWT)=0
+            N221=N221-1
+         END IF
+C
+c        IF(NWTR(NWT).EQ.31011.OR.NWTR(NWT).EQ.31012) THEN
+c           IF(NWTR(NWT-1).EQ.31011.OR.NWTR(NWT-1).EQ.31012) THEN
+c              NWTDW(NWT)=0
+c           END IF
+c        END IF
+C
+C*            UPDATE M, CNAMES, CUNITS.
+C             -------------------------
+C
+         CWTEN(NWT) = CATBEN(II)
+         CWTU (NWT) = CATBU (II)
+         NWTEN(NWT) = 0
+         IF(CATBU(II)(1:3).EQ.'CCI') THEN
+            NWTEN(NWT)=658367
+         ELSEIF(N40.NE.0.AND.IX.NE.31.AND.
+     1      CATBU(II)(1:3).NE.'COD'.AND.
+     2      CATBU(II)(1:3).NE.'FLA') THEN
+            NWTEN(NWT) = -999
+         END IF
+C
+         M = NWT
+         RETURN
+      END IF
+C
+ 141  CONTINUE
+C
+C
+C*          1.5  GET TABLE *B ENTRY .
+C                ---------------------
+ 150  CONTINUE
+C
+      I=NTABP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(KNTN,*)  'BUEPWT : ',KDD
+         CALL BUERR(KERR)
+         DO 2 IQ=1,JELEM
+         NSTACK(IQ)=0.
+ 2       CONTINUE
+         RETURN
+      END IF
+C
+ 155  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*          1.6   MODIFY ENTRY FOR OPERATOR IN FORCE.
+C                 -----------------------------------
+ 160  CONTINUE
+C
+C*                ADD ENTRY TO WORKING TABLE.
+C                 ---------------------------
+      IX=KDD/1000
+      IF(CTABBU(I)(1:4).EQ.'CODE'.OR.
+     1   CTABBU(I)(1:4).EQ.'FLAG') THEN
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = NTABBS (I)
+         NWTRV(NWT) = NTABBRV(I)
+         NWTDW(NWT) = NTABBDW(I)
+      ELSEIF(N40.NE.0.AND.IX.NE.31) THEN
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = 0
+         NWTRV(NWT) = 0
+         NWTDW(NWT) = N40
+      ELSE
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = NTABBS (I) + NSCAM + NSCAM07
+         NWTRV(NWT) = nint(NTABBRV(I)*10.**N07)
+         NWTDW(NWT) = NTABBDW(I) + NDWINC + NDWINC07
+      END IF
+C
+C     CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+      IF(N221.NE.0) THEN
+         IX=KDD/1000
+         IF(IX.GT.9.AND.IX.NE.31) NWTDW(NWT)=0
+         N221=N221-1
+      END IF
+C
+c     IF(NWTR(NWT).EQ.31011.OR.NWTR(NWT).EQ.31012) THEN
+c        IF(NWTR(NWT-1).EQ.31011.OR.NWTR(NWT-1).EQ.31012) THEN
+c           NWTDW(NWT)=0
+c        END IF
+c     END IF
+C
+ 175  CONTINUE
+C
+C*          1.8 UPDATE M.
+C               ---------
+ 180  CONTINUE
+C
+      CWTEN(NWT)=  CTABBEN(I)
+      CWTU (NWT)=  CTABBU(I)
+      NWTEN(NWT)= 0
+      IF(CTABBU(I)(1:3).EQ.'CCI') THEN
+         NWTEN(NWT)=658367
+      ELSE
+         IF(N40.NE.0.AND.IX.NE.31)   NWTEN(NWT) = -999
+      END IF
+C
+      M=NWT
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/buerr.F b/bufrdc/buerr.F
new file mode 100755
index 0000000..c53ce98
--- /dev/null
+++ b/bufrdc/buerr.F
@@ -0,0 +1,132 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUERR(KERR)
+C**** *BUERR*
+C
+C
+C     PURPOSE.
+C     --------
+C         PRINT ERROR CODE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *BUERR(KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/02/92.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "bcomunit.F"
+C
+      CHARACTER*80 CERROR(100)
+C
+      DATA CERROR/100*' '/
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   INITIALIZE MESSAGES.
+C                --------------------
+ 100  CONTINUE
+C
+      CERROR( 1)=' START OF BUFR MESSAGE NOT FOUND.'
+      CERROR( 2)=' END OF BUFR MESSAGE NOT FOUND.'
+      CERROR( 3)=' ARRAY TO RECEIVE BUFR MESSAGE TOO SMALL.'
+      CERROR( 4)=' JSEC1 PARAMETER TOO SMAL. LOCAL ADP CENTER'//
+     1           ' INFORMATION SKIPPED.'
+      CERROR( 5)=' JSEC2 PARAMETER TOO SMALL. LOCAL ADP CENTRE'//
+     2           ' INFORMATION SKIPPED.'
+      CERROR( 6)=' ERROR DURING READ BUFR TABLE B.'
+      CERROR( 7)=' ERROR DURING READ BUFR TABLE C.'
+      CERROR( 8)=' ERROR DURING READ BUFR TABLE D.'
+      CERROR( 9)=' OPEN ERROR.'
+      CERROR(10)=' ERROR DURING CLOSE BUFR TABLE B.'
+      CERROR(11)=' ERROR DURING CLOSE BUFR TABLE C.'
+      CERROR(12)=' ERROR DURING CLOSE BUFR TABLE D.'
+      CERROR(13)=' NUMBER OF BITS TO BE EXTRACTED GREATER THAN'//
+     1           ' NUMBER OF BITS PER COMPUTER WORD.'
+      CERROR(14)=' ARGUMENT KVALS TOO SMALL.'
+      CERROR(15)=' INCREMENT VALUE FOR COMPRESSED DATA TOO BIG.'
+      CERROR(16)=' JSUBS PARAMETER TOO SMALL.'
+      CERROR(17)=' JWORK PARAMETER TOO SMALL.'
+      CERROR(18)=' REPLICATION FACTOR EQUAL TO ZERO.'
+      CERROR(19)=' DELAYED REPLICATION FACTOR TOO BIG.'
+      CERROR(20)=' TABLE D REFERENCE NOT FOUND.'
+      CERROR(21)=' DATA DESCRIPTOR OPERATOR NOT FOUND.'
+      CERROR(22)=' BUFR OPEARTOR NAME NOT FOUND.'
+      CERROR(23)=' TABLE B REFERENCE NOT FOUND.'
+      CERROR(24)=' AUGMENTED TABLE B REFERENCE NOT FOUND.'
+      CERROR(25)=' KELEM ARGUMENT TOO SMALL.'
+      CERROR(26)=' WORD POINTER OUT OF RANGE.'
+      CERROR(27)=' TOO MANY SUBSETS TO BE PACKED.'
+      CERROR(28)=' NUMBER TO BE PACKED TOO BIG.'
+      CERROR(29)=' NUMBER OF DESCRIPTORS KTDLEN TOO BIG.'
+      CERROR(30)=' NUMBER OF ELEMENTS GREATER THAN JELEM.'
+      CERROR(31)=' TOO FEW ELEMENTS IN KDATA ARRAY.'
+      CERROR(32)=' NUMBER OF SUBSETS EQUAL TO ZERO.'
+      CERROR(33)=' NEGATIVE VALUE TO BE PACKED.'
+      CERROR(34)=' NUMBER OF BITS TO BE PACKED GREATER THAN'//
+     1           ' NUMBER OF BITS PER COMPUTER WORD.'
+      CERROR(35)=' '
+      CERROR(36)=' BAD ORDER OF DATA DESCRIPTORS.'
+      CERROR(37)=' WRONG DATA DESCRIPTOR.'
+      CERROR(38)=' PARTIAL EXPANSION ON TOTAL MESSAGE NOT SUPPORTED.'
+      CERROR(39)=' CAN NOT RECOGNIZE FEEDBACK DATA IN THIS MESSAGE.'
+      CERROR(40)=' REQUEST FLAG ILLEGAL.'
+      CERROR(41)=' BIT MAP NOT SET.'
+      CERROR(42)=' THIS ELEMENT MUST BE DATA PRESENT INDICATOR.'
+      CERROR(43)=' TABLE B ELEMENT MUST FOLLOW BIT MAP.'
+      CERROR(44)=' REQUESTED SUBSET DOES NOT EXIST.'
+      CERROR(45)=' THERE IS NO ONE REQUESTED ELEMENT IN THE DATA.'
+      CERROR(46)=' INPUT ARRAY IS TOO SMALL TO RECEIVE INFORMATION.'
+      CERROR(47)=' KELEM ARGUMENT IS TOO BIG. MAXIMUM ALLOWED IS 160000'
+      CERROR(48)=' '
+      CERROR(49)=' TOO MANY DATA FOR BOXING '
+      CERROR(50)=' ERROR IN KSEC1(5) FLAG. '//
+     1           ' ALLOWED VALUES: ZERO OR 128'
+      CERROR(51)=' WRONG USAGE OF 204Y OPERATOR'
+      CERROR(56)=' WRONG SECTION 4 SIZE'
+C
+      IF(KERR.GE.0.AND.KERR.LE.100) THEN
+        WRITE(KNTN,'(1H ,A)') CERROR(KERR)
+      ELSE
+        WRITE(KNTN,'(1H ,A)') ' ERROR NUMBER OUT OF RANGE !'
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/buetab.F b/bufrdc/buetab.F
new file mode 100755
index 0000000..000f964
--- /dev/null
+++ b/bufrdc/buetab.F
@@ -0,0 +1,291 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUETAB( KSEC1,KERR )
+C
+C**** *BUETAB*
+C
+C
+C     PURPOSE.
+C     --------
+C          LOAD BUFR TABLE B, D AND C ACCORDING TO EDITION AND VERSION
+C     OF BUFR CODE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUETAB(KSEC1,KERR)*
+C
+C        OUTPUT:
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmct.F"
+#     include "bcmctc.F"
+#     include "bcmroot.F"
+#     include "bcmtabload.F"
+#     include "bcmtabloadc.F"
+C
+      CHARACTER*256 YTAB ,YTAC ,YTAD
+      CHARACTER*24  YTABB,YTABC,YTABD,CTABLE_LIST
+      CHARACTER*64  CTABBEN,CTEXT
+      CHARACTER*64  CCTABBEN
+      CHARACTER*24  CTABBU , CCTABBU
+      CHARACTER*256 CROOT
+C
+      LOGICAL*4  OPN
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION KSEC1(JSEC1)
+C
+      SAVE OFIRST
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   GET BUFR TABLES/LOCAL BUFR TABLES.
+C                ----------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0) RETURN
+C
+C*          2.   SET UP BUFR TABLE FILE NAME.
+C                ----------------------------
+ 200  CONTINUE
+C
+C
+C             BUFR EDITION 2 NAMING CONVENTION
+C
+C             BXXXXXYYZZ , CXXXXXYYZZ , DXXXXXYYZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             XXXXX  - ORIGINATING CENTRE
+C             YY     - VERSION NUMBER OF MASTER TABLE
+C                      USED( CURRENTLY 2 )
+C             ZZ     - VERSION NUMBER OF LOCAL TABLE USED
+C
+C             BUFR EDITION 3 NAMING CONVENTION
+C
+C             BWWWXXXYYZZ , CWWWXXXYYZZ , DWWWXXXYYZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             WWW    - ORIGINATING SUB-CENTRE
+C             XXX    - ORIGINATING CENTRE
+C             YY     - VERSION NUMBER OF MASTER TABLE
+C                      USED( CURRENTLY 2 )
+C             ZZ     - VERSION NUMBER OF LOCAL TABLE USED
+C
+C
+C             BUFR EDITION 4 NAMING CONVENTION
+C
+C             BSSSWWWWWXXXXXYYYZZZ , CSSSWWWWWXXXXXYYYZZZ , DSSSWWWWWXXXXXYYYZZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             SSS    - MASTER TABLE NUMBER ( zero for WMO tables)
+C             WWWWWW - ORIGINATING SUB-CENTRE
+C             XXXXXX - ORIGINATING CENTRE
+C             YYY    - VERSION NUMBER OF MASTER
+C                      TABLE USED( CURRENTLY 12 )
+C             ZZZ    - VERSION NUMBER OF LOCAL TABLE USED
+C
+            IXX=KSEC1(3)
+            IYY=KSEC1(15)
+            IZZ=KSEC1(08)
+C           
+            IF(KSEC1(2).EQ.3) THEN
+               IWW=KSEC1(16)
+               ISS=KSEC1(14)
+            ELSEIF(KSEC1(2).EQ.4) THEN
+               IWW=KSEC1(16)
+               ISS=KSEC1(14)
+            ELSE
+               IWW=0
+               ISS=0
+            END IF
+C
+C        IF STANDARD TABLES USED, USE WMO ORIGINATING CENTRE ID
+C
+         IF(KSEC1(8).EQ.0.OR.KSEC1(8).EQ.255) THEN
+            IXX=0
+            IWW=0
+            IZZ=0
+         ENDIF
+C
+         IF(OFIRST) THEN
+            IF(IWW.EQ.NWWP.AND.IXX.EQ.NXXP.AND.IYY.EQ.NYYP.AND.
+     1         IZZ.EQ.NZZP.AND.ISS.EQ.NSSP) RETURN
+         END IF
+C
+         OFIRST=.TRUE.
+C
+         NSSP=ISS
+         NXXP=IXX
+         NYYP=IYY
+         NZZP=IZZ
+         NWWP=IWW
+C
+       WRITE(YTABB,'(A1,I3.3,2(I5.5),2(I3.3),A4)') 
+     1              'B',ISS,IWW,IXX,IYY,IZZ,'.TXT'
+c      WRITE(YTABC,'(A1,I3.3,2(I5.5),2(I3.3),A4)')
+c    1              'C',ISS,IWW,IXX,IYY,IZZ,'.TXT'
+       WRITE(YTABD,'(A1,I3.3,2(I5.5),2(I3.3),A4)')
+     1              'D',ISS,IWW,IXX,IYY,IZZ,'.TXT'
+C
+C      Find if table is already used
+C
+       DO I=1,JTMAX
+       IF(CTABLE_LIST(I).EQ.YTABB) THEN
+          CALL GET_TABLES1(I)
+          RETURN
+       END IF
+       END DO
+       IF(OPRINT) THEN
+       WRITE(KNTN,'(A,1X,A,A,A,A))') 'BUFR TABLES TO BE LOADED ',
+     1    YTABB,',',YTABD
+       END IF
+c      WRITE(KNTN,'(A,1X,A,A,A,A))') 'BUFR TABLES TO BE LOADED ',
+c    1    YTABB,',',YTABC,',',YTABD
+
+C     ----------------------------------------------------------------
+C*          3. OPEN AND READ FILES CONTAINING BUFR TABLES.
+C              -------------------------------------------
+ 300  CONTINUE
+C
+      I=INDEX(CROOT,' ')
+      IF(I.NE.0) I=I-1
+C
+C*          3.1 READ BUFR TABLE B.
+C               ------------------
+ 310  CONTINUE
+C
+      YTAB=CROOT(1:I)//YTABB
+C
+      CALL BTABLE1(YTAB,YTABB,KERR)
+      IF(KERR.NE.0) RETURN
+C
+C
+C*          3.2 READ BUFR TABLE C.
+C               ------------------
+ 320  CONTINUE
+C
+c      YTAC=CROOT(1:I)//YTABC
+C
+c      CALL CTABLE1(YTAC,KERR)
+c      IF(KERR.NE.0) RETURN
+C
+C
+C*          3.3 READ BUFR TABLE D.
+C               ------------------
+ 330  CONTINUE
+C
+      YTAD=CROOT(1:I)//YTABD
+C
+      CALL DTABLE1(YTAD,KERR)
+      IF(KERR.NE.0) RETURN
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/buetd.F b/bufrdc/buetd.F
new file mode 100755
index 0000000..8eba9f1
--- /dev/null
+++ b/bufrdc/buetd.F
@@ -0,0 +1,342 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUETD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+     1                 KVALS,VALUES,KELEM,KERR)
+C
+C**** *BUETD*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXPAND SECTION 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUETD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+C                        KVALS,VALUES,KELEM,KERR)
+C
+C        INPUT :
+C               *KPT*     -  POINTER TO KDATA ARRAY
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C               *KDLEN*   -  DIMENSION OF KDATA ARRAY
+C               *KDATA*   -  ARRAY CONTAINING DATA NEEDED FOR DATA DESCRIPTOR
+C                            EXPANSION
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C        OUTPUT :
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C           DATA DESCRIPTOR TAKEN FROM KTDLST ARRAY ARE FULLY
+C        EXPANDED USING DATA FROM KDATA ARRAY IF NEEDED.
+C        ( DELAYED REPLICATION FACTORS ETC.)
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNEXS        - SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                          NEXT SECTION
+C          BUNPCK        - UNPACKS BIT PATHERN
+C          BUREP         - SOLVES REPLICATION PROBLEM
+C          BUETDR        - SOLVES TABLE D REFERENCE
+C          BUOPER        - PROCESS OPERATOR
+C          BUEPWT        - UPDATES WORKING TABLE
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmbef.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmel.F"
+#     include "bcmoff.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+C
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION ISTACK(JELEM),IISTACK(JELEM)
+      DIMENSION IMASK(8)
+C
+      DIMENSION KSEC3(JSEC3)
+      DIMENSION KDATA(KDLEN),KTDLST(KTDLEN)
+C
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C     ------------------------------------------------------------------
+C
+C*          1.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      N = KSEC3(3)
+C
+C
+C*          2.   EXPAND DATA DESCRIPTORS.
+C                ------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1  SET EXPECTED NUMBER OF DATA DESCRIPTORS.
+C                ----------------------------------------
+C                AND INITIALIZE NUMBER OF DATA VALUES PER SUB-SET.
+C                -------------------------------------------------
+ 210  CONTINUE
+C
+      J      = 0
+      IF(OMULTI) THEN
+         IF(NSUBSET.EQ.1) KPT    = 0
+      ELSE
+         KPT    = 0
+      END IF
+      NWT    = 0
+      JMAX   = KTDLEN
+      JMAXNEW=JMAX
+C
+      IF(KTDLEN.GT.JELEM) THEN
+         WRITE(KNTN,*)  ' BUETD :'
+         KERR=29
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C*          2.2  PUT DATA DESCRIPTORS IN STACK.
+C                ------------------------------
+ 220  CONTINUE
+C
+      DO 221 JJ=1,JMAX
+C
+      ISTACK(JJ)=KTDLST(JJ)
+      IISTACK(JJ)=ISTACK(JJ)
+C
+ 221  CONTINUE
+C
+C*          2.2.1 CHECK IF IT IS SAME DATA DESCRIPTOR DESCRIOPTION.
+C                 -------------------------------------------------
+C                 TO MAKE MORE EFFICIENT DATA DESCRIPTOR DESCRIPTION
+C                 EXPANSION, IN CASE THAT DELAYED REPLICATION FACTOR
+C                 IS NOT PRESENT AND DATA DESCRIPTORS ARE THE SAME,
+C                 PREVIOUS WORKING TABLE SHOULD BE USED. IT IS POSIBLE
+C                 AT THIS PLACE IN THE FUTURE TO MAKE MORE SOPHISTICATED
+C                 CONTROL.
+C
+C
+      DO 222 JC=1,JMAX
+C
+      IF(ISTACK(JC).NE.NSTACK(JC)) THEN
+C
+C
+         ODREPF=.FALSE.
+C
+C        SWAP CONTENT OF THE STACKS.
+C
+         DO 223 JJC=1,JMAX
+         NSTACK(JJC)=ISTACK(JJC)
+ 223     CONTINUE
+C
+         NTDLEN = JMAX
+         M=0
+         NOLD=N
+         NFCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         MBMP=0
+         MBMPL=0
+C
+         GO TO 230
+C
+      END IF
+C
+ 222  CONTINUE
+C
+C
+C*    IF MARKER OPERATOR PRESENT EXPAND DESCRIPTORS AGAIN
+C
+      IF(OMARKER) THEN
+         NTDLEN = JMAX
+         M=0
+         NOLD=N
+         NFCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         MBMP=0
+         MBMPL=0
+         GO TO 230
+      END IF
+C
+C*    RETURN IF DELAYED REPLICATION FACTOR IS NOT PRESENT.
+C
+      IF(JMAX.NE.NTDLEN) THEN
+         M=0
+         NOLD=N
+         NFCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         NTDLEN=JMAX
+         MBMP=0
+         MBMPL=0
+         GO TO 230
+      END IF
+C
+      OB=.FALSE.
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) OB=.TRUE.
+      IF(.NOT.ODREPF) THEN
+         IF(N.GT.NOLD) NOLD=N
+         IF(OB.AND.NFCM.EQ.1)      GO TO 300
+         IF(.NOT.OB.AND.NFCM.EQ.0) GO TO 300
+      END IF
+C
+      M=0
+      NOLD=N
+      NFCM=0
+      MREL=0
+      OMARKER=.FALSE.
+      NTDLEN=JMAX
+      MBMP=0
+      MBMPL=0
+C
+C     ------------------------------------------------------------------
+C*          2.3  GET NEXT DESCRIPTOR FROM THE STACK.
+C                -----------------------------------
+ 230  CONTINUE
+C
+      J   = J + 1
+      IF(J.GT.JMAX) GO TO 270
+C
+      IDD = ISTACK(J)
+      IF(IDD.EQ.0)  GO TO 230
+C
+      IF = IDD/100000
+C
+C     ------------------------------------------------------------------
+C*          2.4  CHECK IF IT IS REPLICATION DESCRIPTOR.
+C                --------------------------------------
+ 240  CONTINUE
+C
+      IF(IF.EQ.0) THEN
+C
+C*          2.6  ELEMENT DESCRIPTOR, SO UPDATE WORKING TABLE.
+C                --------------------------------------------
+ 260     CONTINUE
+C
+            CALL BUEPWT(IDD,KERR)
+            IF(KERR.GT.0) RETURN
+C
+      ELSEIF(IF.EQ.1) THEN
+C
+C*          2.4.1     SOLVE REPLICATION PROBLEM.
+C                     --------------------------
+C
+         CALL BUREP(KPT,KDLEN,KDATA,J,JMAX,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) RETURN
+         GO TO 230
+C
+      ELSEIF(IF.EQ.2) THEN
+C
+C
+C*          2.5.3 PROCESS OPERATOR.
+C                 -----------------
+         CALL BUOPER(KPT,KDLEN,KDATA,J,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF(IF.EQ.3) THEN
+C
+C
+C*          2.5.2 REPLACE BY LIST OF DESCRIPTORS FROM TABLE *D.
+C                 ---------------------------------------------
+         CALL BUETDR(J,JMAX,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) THEN
+            DO 252 IQ=1,JELEM
+            NSTACK(IQ)=0.
+ 252        CONTINUE
+            RETURN
+         END IF
+      ELSE
+         KERR=37
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      GO TO 230
+C
+C     ------------------------------------------------------------------
+C*          2.7 RESOLVE MARKER OPERATOR.
+C               ------------------------
+ 270  CONTINUE
+C
+      IF(OMARKER) THEN
+         CALL BUEPMRK(KSEC3,KVALS,VALUES,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3. COLLECT  SUPPLEMENTARY ITEMS.
+C              -----------------------------
+ 300  CONTINUE
+C
+      N08=0
+      N07=0
+      N40=0
+      NDWINC=0
+      NSCAM=0
+      NSCAM07=0
+      NDWINC07=0
+      NFD=0
+
+      DO I=1,100
+      NAFDWA(I)=0
+      END DO
+
+C
+      NFCM=0
+      IF(OB) NFCM=1
+C
+      RETURN
+      END
diff --git a/bufrdc/buetdr.F b/bufrdc/buetdr.F
new file mode 100755
index 0000000..28719d7
--- /dev/null
+++ b/bufrdc/buetdr.F
@@ -0,0 +1,157 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUETDR(KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *BUETDR*
+C
+C
+C     PURPOSE.
+C     --------
+C          SOLVE BUFR TABLE D REFERENCE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUETDR(KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C                 *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C                 *KJ*       - POINTER TO KSTACK ARRAY
+C                 *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C                 *KSTACK*   - LIST OF DATA DESCRIPTORS
+C                 *KERR*     - RETURN ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+C
+      CHARACTER CTABBEN*64,CTABBU*24
+C
+      DIMENSION ILIST(JELEM),KSTACK(*)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   OBTAIN LIST OF DESCRIPTORS FROM BUFR TABLE D.
+C                ---------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 110 J=1,JTAB
+C
+      IF(KDD.EQ.NTABDTR(J)) THEN
+         I=J
+         GO TO 120
+      END IF
+C
+ 110  CONTINUE
+C
+      KERR=20
+      CALL BUERR(KERR)
+      WRITE(KNTN,*)  'REFERENCE INVOLVED ',KDD
+      RETURN
+C
+ 120  CONTINUE
+C
+      J1=NTABDST(I)
+      J2=NTABDL (I)
+      J3=0
+C
+      DO 121 J=J1,J1+J2-1
+C
+      J3 = J3 +1
+      ILIST(J3) = NTABDSQ(J)
+C
+ 121  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          2.  PUSH DOWN DATA DESCRIPTION DESCRIPTORS
+C               --------------------------------------
+C               TO MAKE ROOM FOR LIST.
+C               ----------------------
+ 200  CONTINUE
+C
+      J2M1=J2-1
+C
+      DO 210 J=KJ1,KJ+1,-1
+C
+      KSTACK(J+J2M1) = KSTACK(J)
+C
+ 210  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          3.  INSERT LIST IN PLACE OF SEQUENCE DESCRIPTORS.
+C               ---------------------------------------------
+ 300  CONTINUE
+C
+      KJM1=KJ-1
+C
+      DO 310 J=1,J3
+C
+      KSTACK(KJM1+J)= ILIST(J)
+C
+ 310  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          4.  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C               ----------------------------------------
+ 400  CONTINUE
+C
+      KJ  = KJ  - 1
+      KJ1 = KJ1 +J3 -1
+C     ------------------------------------------------------------------
+C*          4.1  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 610  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C     -----------------------------------------------------------------
+ 500  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/buevar.F b/bufrdc/buevar.F
new file mode 100755
index 0000000..0b93186
--- /dev/null
+++ b/bufrdc/buevar.F
@@ -0,0 +1,237 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEVAR(KERR)
+C
+C**** *BUEVAR*
+C
+C
+C     PURPOSE.
+C     --------
+C         INITIALIZE CONSTANTS AND VARIABLES.
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *BUEVAR(KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C     GETENV  - GETS VALUE OF AN ENVIRONMENT VARIABLE.
+C     EMOSNUM - GIVES CURRENT EMOSLIB VERSION NUMBER.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/03/92.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomatb.F"
+#     include "bcombef.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomroot.F"
+#     include "bcprq.F"
+#     include "bcomtabload.F"
+#     include "bcomtabloadc.F"
+#     include "bcomoff.F"
+
+C
+      CHARACTER*256 CROOT, HDEFAULT,CPRINT
+      CHARACTER*9   STD_OUT,YKNTN, CTU
+      CHARACTER*24 CTABLE_LIST,CCTABBU
+      CHARACTER*64 CCTABBEN
+      LOGICAL OPRINT,OS4
+C
+      INTEGER IEMOSNM
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     EXTERNAL FUNCTIONS
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+
+#ifdef TABLE_PATH
+      DATA HDEFAULT / TABLE_PATH /
+#else
+      DATA HDEFAULT / '' /
+#endif
+
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE VARIABLES AND CONSTANTS.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      NJA= 0
+      M  =0
+      MM =0
+      N  =0
+      JCV=0
+      NBPW=JBPW
+      NWPT=0
+      NBPT=0
+      NWPTB=0
+      NBPTB=0
+      NSTOP=2147483647
+      NVIND=2147483647
+      RVIND=1.7D38
+      EPS=10.D-7
+      NBENP=0
+      NLTVNP=0
+      NWWP=0
+      NXXP=0
+      NYYP=0
+      NZZP=0
+      NTC=0
+      NTT=0
+      NDWINC=0
+      NSCAM=0
+      NSCAM07=0
+      NDWINC07=0
+      N07=0
+      NAFDW=0
+      NFD=0
+      NWT=0
+      ODREPF=.FALSE.
+      OS4=.FALSE.
+      N221=0
+      N40=0
+      MREL=0
+      NFCM=0
+      MBMP=0
+      MBMPL=0
+      OMARKER=.FALSE.
+      CROOT=' '
+      NREP=0
+      OREP=.false.
+      N08=0
+      NSSP=0
+C
+C     STANDARD OUTPUT UNIT NUMBER
+C
+      STD_OUT=' '
+      YKNTN=' '
+      CALL GETENV('STD_OUT',YKNTN)
+      INKNTN=INDEX(YKNTN,' ')
+      IF(INKNTN.EQ.1) THEN
+        KNTN=6
+      ELSE
+        READ(YKNTN,'(I3.3)') KNTN
+      END IF
+C
+C     CHECK SECTION 4 SIZE
+      CS4=' '
+      CALL GETENV('CHECK_S4',CS4)
+      ILNG=INDEX(CS4,' ')
+      IF(ILNG.LE.1) THEN
+         OS4=.false.
+      ELSEIF(CS4(1:4).EQ.'TRUE'.or.CS4(1:4).EQ.'true') then
+         OS4=.true.
+      END IF
+C
+      CALL GETENV('USE_TABLE_C',CTU)
+      ILNG=INDEX(CTU,' ')
+      IF(ILNG.LE.1) THEN
+         OCTABLE=.false.
+      ELSEIF(CTU(1:4).eq.'true'.or.CTU.eq.'TRUE') then
+         OCTABLE=.true.
+      END IF
+      CALL GETENV('BUFR_TABLES',CROOT)
+      ILNG=INDEX(CROOT,' ')
+      IF(ILNG.LE.1) THEN
+        ILNG=INDEX(HDEFAULT,' ') - 1
+        IF(ILNG.GT.0) THEN
+           CROOT = HDEFAULT(1:ILNG)//'/bufrtables/'
+        ELSE
+           CROOT='/home/ma/emos/tables/bufr/text/'
+C
+C         SGI/HP/SUN BUFR TABLES PATH 
+C
+C
+C         ADD VERSION NUMBER
+C
+          ILNG=INDEX(CROOT,' ')
+          IEMOSNM = EMOSNUM(1)
+          WRITE(CROOT(ILNG:ILNG+5),'(I6.6)') IEMOSNM
+          CROOT(ILNG+6:) = '/'
+        ENDIF
+      ENDIF
+C
+      CPRINT=' '
+      OPRINT=.TRUE.
+      CALL GETENV('PRINT_TABLE_NAMES',CPRINT)
+      ILN=INDEX(CPRINT,' ')
+      IF(ILN.LE.1) THEN
+         OPRINT=.TRUE.
+      ELSE
+         IF(CPRINT(1:ILN-1).EQ.'FALSE'.OR.
+     1      CPRINT(1:ILN-1).EQ.'false') OPRINT=.FALSE.
+      END IF
+
+      IF(OPRINT) THEN
+C
+      WRITE(KNTN,'(1H ,A)') '                  ECMWF '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,A)') '     BUFR DECODING SOFTWARE',
+     1' VERSION -  7.2 '
+      WRITE(KNTN,'(1H ,A)') '           1 APRIL  2007. '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A)') 'Your path for bufr tables is :'
+      WRITE(KNTN,'(1H ,A)')  CROOT(1:ILNG+6)
+      END IF
+C
+      DO 101 I=1,JBPW-2
+      NMASK(I)=2**I-1
+ 101  CONTINUE
+      IF(JBPW.EQ.32) THEN
+          NMASK(31)=2147483647
+      END IF
+C
+      IF(NPMISS.LT.0.OR.NPMISS.GT.1) NPMISS=0
+      IF(NPRUS.LT.0.OR.NPRUS.GT.1)   NPRUS=0
+      IF(NOKEY.LT.0.OR.NOKEY.GT.1)   NOKEY=0
+      IF(NOFL.LT.0.OR.NOFL.GT.1)     NOFL=0
+C
+      RETURN
+      END
diff --git a/bufrdc/buexs0.F b/bufrdc/buexs0.F
new file mode 100755
index 0000000..c9e6aa8
--- /dev/null
+++ b/bufrdc/buexs0.F
@@ -0,0 +1,184 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS0( KBUFL,KBUFF,KSUP,KSEC0,KERR)
+C
+C**** *BUEXS0*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS SECTION 0 OF BUFR MESSAGE. SAVES BUFR EDITION NUMBER
+C     AND TOTAL LENGTH OF BUFR MESSAGE (BYTES).
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS0( KBUFL,KBUFF,KSUP,KSEC0,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPKS          - UNPACK BIT PATTERN IN REPEATED WAY
+C          BUNPCK          - UNPACK BIT PATTERN
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+C
+      DIMENSION KBUFF(KBUFL),KSUP(*),KSEC0(*)
+      DIMENSION IBUFR(4)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      CHARACTER*4 YBUFR
+C
+C     ------------------------------------------------------------------
+C*          1.   EXPAND SECTION 0.
+C                -----------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C
+C*          1.1  INITIALIZE WORKING POINTERS NWPT AND NBPT.
+C                ------------------------------------------
+      IWPT = 0
+      IBPT = 0
+      NWPT = 1
+      NBPT = 0
+C
+C*          1.2  UNPACK FIRST FOUR OCTETS CONTAINING *BUFR*.
+C                -------------------------------------------
+C
+      CALL BUNPKS(NBPW,KBUFF,IBUFR,NWPT,NBPT,8,0,4,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING FIRST FOUR OCTETS OF BUFR
+     1 MESSAGE.'
+         RETURN
+      END IF
+C
+C*          1.3  CHECK IF FIRST FOUR OCTETS ARE 'BUFR'.
+C                --------------------------------------
+      YBUFR=CHAR(IBUFR(1))//CHAR(IBUFR(2))//
+     1      CHAR(IBUFR(3))//CHAR(IBUFR(4))
+      IF(YBUFR.NE.'BUFR') THEN
+         KERR = 1
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C*          1.4 UNPACK BUFR EDITION NUMBER (IT IS 8TH BYTE ).
+C               ---------------------------------------------
+ 140  CONTINUE
+C
+      IWPT=56/NBPW+1
+      IBPT=56-(IWPT-1)*NBPW
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC0(3),IWPT,IBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+      	     WRITE(KNTN,*)  'ERROR UNPACKING KSEC0(3).'
+         RETURN
+      END IF
+C
+      IF(KSEC0(3).LE.1) GO TO 170
+C
+C*          1.5 UNPACK TOTAL LENGTH OF BUFR MESSAGE.
+C               ------------------------------------
+ 150  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC0(2),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC0(2).'
+         RETURN
+      END IF
+C
+C*          1.6 UNPACK BUFR EDITION NUMBER.
+C               ---------------------------
+ 160  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC0(3),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC0(3).'
+         RETURN
+      END IF
+C
+C
+C*          1.7 SET LENGTH OF SECTION 0.
+C               ------------------------
+ 170  CONTINUE
+C
+      KSEC0(1)= 4
+      IF(KSEC0(3).GT.1) KSEC0(1)= 8
+C
+C*          1.8 SET SUPPLEMENTARY INFORMATION.
+C               ------------------------------
+ 180  CONTINUE
+C
+      KSUP (9)= 3
+C
+      RETURN
+C     -----------------------------------------------------------------
+C
+      END
diff --git a/bufrdc/buexs1.F b/bufrdc/buexs1.F
new file mode 100755
index 0000000..20c9bf2
--- /dev/null
+++ b/bufrdc/buexs1.F
@@ -0,0 +1,593 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS1( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KERR)
+C
+C**** *BUEXS1*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS SECTION 1 OF BUFR MESSAGE. SAVES EXPANDED INFORMATION
+C     IN THE ARRAY KSEC1.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS1( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C                            
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C
+C     *METHOD.
+C      -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          -  UNPACK BIT PATTERN
+C          BUNEXS         -  SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                            NEXT SECTION
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       16/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+C
+      DIMENSION KBUFF(KBUFL),KSUP(JSUP),KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION ISEC1(JSEC1)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C
+C     ------------------------------------------------------------------
+C*          1.  EXPAND SECTION 1.
+C               ------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C     SAVE WORD AND BIT POINTERS OF THR BRGINING OF SECTION 1.
+C
+      IWPTB=NWPT
+      IBPTB=NBPT
+C
+C*          1.1 UNPACK LENGTH OF SECTION 1.
+C               ----------------------------
+ 110  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(1),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(1).'
+         RETURN
+      END IF
+C     IF(KSEC1(1).GT.18) THEN
+C        WRITE(KNTN,*)  'LOCAL ADP CENTRE INFORMATION PRESENT 
+C    1 IN THE SECTION 1.'
+C     END IF
+C
+C*          1.1.1 SET THE POINTERS NWPTB AND NBPTB.
+C                 ---------------------------------
+C                 TO BEGINING OF THE NEXT SECTION.
+C                 --------------------------------
+ 1110 CONTINUE
+C
+      CALL BUNEXS(KSEC1(1))
+C
+C
+C*          1.2  UNPACK BUFR EDITION NUMBER/MASTER TABLE USED.
+C                ---------------------------------------------
+ 120  CONTINUE
+C
+      IF(KSEC0(3).LE.1) THEN
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(2),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(2).'
+            RETURN
+         END IF
+      ELSE
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(14),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(14).'
+            RETURN
+         END IF
+C
+         KSEC1(2)=KSEC0(3)
+      END IF
+C
+C*          1.3  UNPACK ORIGINATING CENTRE.
+C                --------------------------
+ 130  CONTINUE
+C
+      IF(KSEC0(3).LT.3) THEN
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(3),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(3).'
+            RETURN
+         END IF
+      ELSEIF(KSEC0(3).EQ.3) THEN
+C        BUFR Edition 3
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(16),NWPT,NBPT,8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(3).'
+            RETURN
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(3),NWPT,NBPT,8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(3).'
+            RETURN
+         END IF
+      ELSEIF(KSEC0(3).EQ.4) THEN
+C        BUFR Edition 4
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(3),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(3).'
+            RETURN
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(16),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(16).'
+            RETURN
+         END IF
+      END IF
+      
+C
+C*          1.4  UNPACK UPDATE SEQUENCE NUMBER.
+C                ------------------------------
+ 140  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(4),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(4).'
+         RETURN
+      END IF
+C
+C*          1.5  UNPACK INTEGER VALUE OF THE OCTET CONTAINING
+C                --------------------------------------------
+C                 FLAG BITS(ZERO IF SECTION TWO IS NOT PRESENT).
+C                 ----------------------------------------------
+ 150  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(5),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(5).'
+         RETURN
+      END IF
+C
+C*          1.6  UNPACK *BUFR* MESSAGE TYPE.
+C                ---------------------------
+ 160  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(6),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(6).'
+         RETURN
+      END IF
+C
+C*          1.7  UNPACK *BUFR* MESSAGE SUB-TYPE.
+C                -------------------------------
+ 170  CONTINUE
+C
+      IF(KSEC0(3).EQ.4) THEN
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(17),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(17).'
+            RETURN
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(7),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(7).'
+            RETURN
+         END IF
+      ELSE
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(7),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(7).'
+            RETURN
+         END IF
+      END IF
+C
+C*          1.8  UNPACK LOCAL TABLE VERSION NUMBER OR
+C                ------------------------------------
+C                VERSION NUMBER OF MASTER TABLE USED.
+C                 -----------------------------------
+ 180  CONTINUE
+C
+      IF(KSEC0(3).LE.1) THEN
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(8),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(8).'
+            RETURN
+         END IF
+      ELSE
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(15),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(15).'
+            RETURN
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,KSEC1( 8),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(8).'
+            RETURN
+         END IF
+      END IF
+C
+C*          1.9  UNPACK YEAR.
+C                ------------
+ 190  CONTINUE
+C
+      IF(KSEC0(3).EQ.4) THEN
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(9),NWPT,NBPT,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(9).'
+            RETURN
+         END IF
+      ELSE
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(9),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(9).'
+            RETURN
+         END IF
+      END IF
+C
+C*          2. UNPACK MONTH.
+C              -------------
+ 200  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(10),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(10).'
+         RETURN
+      END IF
+C
+C*          2.1 UNPACK DAY.
+C               -----------
+ 210  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(11),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(11).'
+         RETURN
+      END IF
+C
+C*          2.2 UNPACK HOUR.
+C               ------------
+ 220  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(12),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(12).'
+         RETURN
+      END IF
+C
+C*          2.3 UNPACK MINUTE.
+C               --------------
+ 230  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC1(13),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(13).'
+         RETURN
+      END IF
+C
+C           2.3.1 UNPACK SECOND
+C                 -------------
+      IF(KSEC0(3).EQ.4) THEN
+         CALL BUNPCK(NBPW,KBUFF,KSEC1(18),NWPT,NBPT, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(13).'
+            RETURN
+         END IF
+C
+C                 METADATA
+C
+C                 YEAR
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(19),NWPT,NBPT,16,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(19).'
+c           RETURN
+c        END IF
+C
+C*             UNPACK MONTH.
+C              -------------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(20),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(20).'
+c           RETURN
+c        END IF
+C
+C*              UNPACK DAY.
+C               -----------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(21),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(21).'
+c           RETURN
+c        END IF
+C
+C*              UNPACK HOUR.
+C               ------------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(22),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(22).'
+c           RETURN
+c        END IF
+C
+C*              UNPACK MINUTE.
+C               --------------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(23),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(23).'
+c           RETURN
+c        END IF
+C
+C               UNPACK SECOND
+C                 -------------
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(24),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(24).'
+c           RETURN
+c        END IF
+C
+C                 YEAR
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(25),NWPT,NBPT,16,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(25).'
+c           RETURN
+c        END IF
+C
+C*             UNPACK MONTH.
+C              -------------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(26),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(26).'
+c           RETURN
+c        END IF
+C
+C*              UNPACK DAY.
+C               -----------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(27),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(27).'
+c           RETURN
+c        END IF
+C
+C*              UNPACK HOUR.
+C               ------------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(28),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(28).'
+c           RETURN
+c        END IF
+C
+C*              UNPACK MINUTE.
+C               --------------
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(29),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(29).'
+c           RETURN
+c        END IF
+C
+C               UNPACK SECOND
+C                 -------------
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(30),NWPT,NBPT, 8,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(30).'
+c           RETURN
+c        END IF
+C
+C
+C               UNPACK  MOST SOUTHERN LATITUDE
+C               ------------------------------
+C        CALL BUNPCK(NBPW,KBUFF,ISG,NWPT,NBPT,1,KERR)
+C        IF(KERR.GT.0) THEN
+C           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(31).'
+C           RETURN
+C        END IF
+C
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(31),NWPT,NBPT,32,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(31).'
+c           RETURN
+c        END IF
+
+C        IF(ISG.EQ.1)  KSEC1(31)=-KSEC1(31)
+C
+C               UNPACK  MOST WESTERN LONGITUDE
+C               ------------------------------
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(32),NWPT,NBPT,32,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(32).'
+c           RETURN
+c        END IF
+C
+C               UNPACK  MOST NORTHERN LATITUDE
+C               ------------------------------
+C        CALL BUNPCK(NBPW,KBUFF,ISG,NWPT,NBPT,1,KERR)
+C        IF(KERR.GT.0) THEN
+C           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(33).'
+C           RETURN
+C        END IF
+
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(33),NWPT,NBPT,32,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(33).'
+c           RETURN
+c        END IF
+
+C        IF(ISG.EQ.1) KSEC1(33)=-KSEC1(33)
+C
+C               UNPACK  MOST EASTERN LONGITUDE
+C               ------------------------------
+c        CALL BUNPCK(NBPW,KBUFF,KSEC1(34),NWPT,NBPT,32,KERR)
+c        IF(KERR.GT.0) THEN
+c           WRITE(KNTN,*)  'ERROR UNPACKING KSEC1(34).'
+c           RETURN
+c        END IF
+C
+      END IF
+C
+C*          2.4 UNPACK LOCAL ADP CENTRE INFORMATION IF ANY.
+C               -------------------------------------------
+ 240  CONTINUE
+C
+      IF(KSEC0(3).LT.3) THEN
+         IOFF=KSEC1(1)-17
+         IW=16
+         IBT=0
+      ELSEIF(KSEC0(3).EQ.3) THEN
+         IOFF=KSEC1(1)-17
+         IW=18
+         IBT=0
+      ELSEIF(KSEC0(3).EQ.4) THEN
+C        IOFF=KSEC1(1)-52
+         IOFF=KSEC1(1)-22
+c        IW=35     ! index for local info
+         IW=19     ! index for local info
+         IBT=0
+      END IF
+      IF(IOFF.LE.JSEC1) THEN
+         CALL BUNPKS(NBPW,KBUFF,ISEC1(1),NWPT,NBPT,
+     1   8,0,IOFF,KERR)
+         IF(KERR.GT.0) THEN
+          WRITE(KNTN,*)  'ERROR UNPACKING LOCAL ADP CENTRE INFORMATION'
+            WRITE(KNTN,*)  'IN SECTION 1.'
+            RETURN
+         END IF
+C
+C                PACK LOCAL ADP CENTRE INFORMATION INTO KSE1(16) ONWARD.
+C
+         CALL BUPKS(NBPW,KSEC1(IW),ISEC1,IW,IBT,8,0,IOFF,KERR)
+         IF(KERR.GT.0) THEN
+          WRITE(KNTN,*)  'ERROR PACKING LOCAL ADP CENTRE INFORMATION'
+            RETURN
+         END IF
+      ELSE
+         IOFF=0
+         KERR=4
+         CALL BUERR(KERR)
+         GO TO 300
+      END IF
+C
+C
+C*          3.  SET SUPPLEMENTARY INFORMATION.
+C               ------------------------------
+ 300  CONTINUE
+C
+      KSUP(1)=15+IOFF/4+1
+C
+C     ------------------------------------------------------------------
+C
+      RETURN
+      END
diff --git a/bufrdc/buexs2.F b/bufrdc/buexs2.F
new file mode 100755
index 0000000..c9b6c51
--- /dev/null
+++ b/bufrdc/buexs2.F
@@ -0,0 +1,257 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS2( KBUFL,KBUFF,KSUP,KSEC1,KSEC2,KERR )
+C
+C**** *BUEXS2*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS SECTION 2 OF BUFR MESSAGE. EXPANDED DATA ARE
+C     STORED IN THE ARRAY KSEC2.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS2(KBUFL,KBUFF,KSUP,KSEC1,KSEC2,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(JSEC2) LOCAL ADP CENTRE
+C                                         INFORMATION(PACKED FORM)
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          THE LENGTH OF SECTION 2 AND POINTERS TO THE BEGINING
+C     OF SECTION 3 ARE SET. RDB KEY IS THEN UNPACKED AND ALL INFORMATION
+C     STORED INTO ARRAY KSEC2.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACK BIT PATTERN
+C          BUNEXS         - SET WORD AND BIT POINTERS AT THE BEGINING
+C                           OF NEXT BUFR SECTION.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcprq.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSUP(JSUP),KSEC1(JSEC1),KSEC2(JSEC2)
+      DIMENSION ISEC2(JSEC2),IISEC2(JSEC2)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C*          1.  EXPAND SECTION 2.
+C               -----------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 101 I=1,JSEC2
+      KSEC2(I)=0
+ 101  CONTINUE
+C
+      IF( KSEC1(5) .NE. 0 .AND. KSEC1(5) .NE. 128) THEN
+          KERR=50
+          CALL BUERR(KERR)
+          RETURN
+      END IF
+C
+      IF( KSEC1(5).EQ.0) THEN
+          KSUP(2) = 1
+          KSEC2(1)= 0
+          RETURN
+      END IF
+C
+C*          1.1 SET THE POINTERS NWPT AND NBPT AT THE BEGINING OF SECTION.
+C              -----------------------------------------------------------
+ 110  CONTINUE
+C
+      NWPT = NWPTB
+      NBPT = NBPTB
+C
+C*          1.2  UNPACK LENGTH OF SECTION 2.
+C                ---------------------------
+      CALL BUNPCK(NBPW,KBUFF,KSEC2(1),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC2(1).'
+         RETURN
+      END IF
+C
+C*          1.2.1  SET POINTERS NWPTB AND NBPTB TO THE
+C                  -----------------------------------
+C                  BEGINING OF THE NEXT SECTION.
+C                  -----------------------------
+      CALL BUNEXS(KSEC2(1))
+C
+      CALL BUNPCK(NBPW,KBUFF,IDUMMY,NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING DUMMY OCTET IN SECTION 2.'
+         RETURN
+      END IF
+C
+C*          1.3  UNPACK LOCAL ADP CENTRE INFORMATION.
+C                ------------------------------------
+C
+      IOFF=KSEC2(1)-4
+C
+      IF(IOFF.GT.JSEC2) THEN
+         KERR=5
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL BUNPKS(NBPW,KBUFF,ISEC2(1),NWPT,NBPT,
+     1            8,0,IOFF,KERR)
+      IF(KERR.GT.0) THEN
+      WRITE(KNTN,*)  'ERROR UNPACKING LOCAL ADP CENTRE INFORMATION'
+         WRITE(KNTN,*)  'IN SECTION2.'
+         RETURN
+      END IF
+C
+      IF(KSEC1(3).EQ.98) THEN
+         IF(NOKEY.EQ.0) THEN
+            IF(ISEC2(2).NE.KSEC1(7)) THEN
+C
+C              BYTES IN THE KEY IN REVERSED ORDER.
+C
+               J=0
+               DO 131 I=1,JSEC2,4
+               IISEC2(I)=ISEC2(I+3)
+               IISEC2(I+1)=ISEC2(I+2)
+               IISEC2(I+2)=ISEC2(I+1)
+               IISEC2(I+3)=ISEC2(I)
+ 131           CONTINUE
+               DO 132 I=1,JSEC2
+               ISEC2(I)=IISEC2(I)
+ 132           CONTINUE
+            END IF
+         END IF
+      END IF
+C
+C                PACK LOCAL ADP CENTRE INFORMATION INTO KSE2(2) ONWARD.
+C
+      IW=2
+      IBT=0
+      CALL BUPKS(NBPW,KSEC2(IW),ISEC2,IW,IBT,8,0,IOFF,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*) 'ERROR PACKING LOCAL ADP CENTRE',
+     1                 ' INFORMATION INTO'
+         WRITE(KNTN,*)  'KSEC2(2) ONWARD.'
+         RETURN
+      END IF
+C
+C                SET LENGHT OF KSEC2
+C
+      KSUP(2)=IW
+C     ------------------------------------------------------------------
+ 200  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buexs3.F b/bufrdc/buexs3.F
new file mode 100755
index 0000000..ffa95f7
--- /dev/null
+++ b/bufrdc/buexs3.F
@@ -0,0 +1,516 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS3(KBUFL,KBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,KERR)
+C
+C**** *BUEXS3*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXPAND SECTION 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS3( KBUFL,KBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C      -------
+C
+C          EXPANDS LIST OF DATA DESCRIPTORS PACKED IN SECTION 3
+C     OF BUFR MESSAGE. WORKING TABLES FOR FURTHER DATA DECODING ARE SET,
+C     LIST OF PACKED BUFR DATA DESCRIPTORS AND LIST OF BUFR DATA DESCRIPTORS
+C     EXPANDED ACCORDING TO TABLE D REFERENCE ARE RETURNED RESPECTIVELY.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNEXS        - SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                          NEXT SECTION
+C          BUNPCK        - UNPACKS BIT PATTERN
+C          BUSRP         - SOLVES REPLICATION PROBLEM
+C          BUSTDR        - SOLVES TABLE D REFERENCE
+C          BUPRCO        - PROCESS OPERATOR
+C          BUUPWT        - UPDATES WORKING TABLE
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcombef.F"
+#     include "bcomwt.F"
+#     include "bcomp.F"
+#     include "bcomwtc.F"
+#     include "bcomrq.F"
+#     include "bcomreq.F"
+#     include "bcomel.F"
+#     include "bcprq.F"
+#     include "bcomoff.F"
+#     include "bcomcom.F"
+C
+      CHARACTER*64 CWTEN
+      CHARACTER*24 CWTU
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+C
+      DIMENSION ISTACK(JELEM),IISTACK(JELEM)
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION IMASK(8)
+C
+#ifndef R_4
+      REAL*8 RQVAL
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RQVAL
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+C
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C
+      SAVE NOLD,KELEMOLD
+C     ------------------------------------------------------------------
+C
+C*          1.   EXPAND PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C
+C*          1.1   SET THE POINTERS NWPT AND NBPT TO THE
+C                 -------------------------------------
+C                 BEGINING OF THE SECTION 3.
+C                 --------------------------
+ 110  CONTINUE
+C
+      NWPT = NWPTB
+      NBPT = NBPTB
+C
+C*          1.2   UNPACK LENGTH OF SECTION 3.
+C                 ---------------------------
+ 120  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(1),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC3(1).'
+         RETURN
+      END IF
+C
+C*          1.2.1  SET THE POINTERS NWPTB AND NBPTB TO
+C                  -----------------------------------
+C                  THE BEGINNING OF THE NEXT SECTION.
+C                  ----------------------------------
+      CALL BUNEXS(KSEC3(1))
+C
+C*          1.3    UNPACK ZERO BYTE AND PUT IT IN KSEC3(2).
+C                  ----------------------------------------
+ 130  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(2),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC3(2).'
+         RETURN
+      END IF
+C
+C*          1.4    UNPACK NUMBER OF DATA SUB-SETS.
+C                  -------------------------------
+ 140  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(3),NWPT,NBPT,16,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC3(3).'
+         RETURN
+      END IF
+      IF(KSEC3(3).LE.0) THEN
+         KERR=32
+         WRITE(KNTN,*)  ' BUEXS3 :'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      N = KSEC3(3)
+C
+C
+C*          1.5    UNPACK INTEGER VALUE OF THE OCTET
+C                  ---------------------------------
+C                  CONTAINING FLAG BITS.
+C                  --------------------
+ 150  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(4),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC3(4).'
+         RETURN
+      END IF
+C
+      ICOMP=KSEC3(4)
+C     -----------------------------------------------------------------
+C
+C*          2.   EXPAND DATA DESCRIPTORS.
+C                ------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1  CALCULATE EXPECTED NUMBER OF DATA DESCRIPTORS.
+C                ----------------------------------------------
+C                AND INITIALIZE NUMBER OF DATA VALUES PER SUB-SET.
+C                -------------------------------------------------
+ 210  CONTINUE
+C
+      J      = 0
+      NWT    = 0
+      JMAX   = ( KSEC3(1) - 7)/2
+      JMAXNEW=JMAX
+C
+      IF(JMAX.GT.JELEM) THEN
+         WRITE(KNTN,*)  'NUMBER OF ELEMENTS IN SECTION3 TOO BIG.'
+         WRITE(KNTN,*)  'PROGRAM CAN NOT HANDLE',JMAX
+         WRITE(KNTN,*)  'DATA DESCRIPTORS IN SECTION3.'
+         WRITE(KNTN,*)  'MAXIMUM NUMBER OF ELEMENTS IS ',JELEM
+         KERR=200
+         RETURN
+      END IF
+C
+C*          2.2  UNPACK AND PUT DATA DESCRIPTORS IN STACK.
+C                -----------------------------------------
+ 220  CONTINUE
+C
+      DO 221 JJ=1,JMAX
+C
+      CALL BUNPCK(NBPW,KBUFF,IF,NWPT,NBPT,2,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING F PART OF DESCRIPTOR.'
+         RETURN
+      END IF
+      CALL BUNPCK(NBPW,KBUFF,IX,NWPT,NBPT,6,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING X PART OF DESCRIPTOR.'
+         RETURN
+      END IF
+      CALL BUNPCK(NBPW,KBUFF,IY,NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING Y PART OF DESCRIPTOR.'
+         RETURN
+      END IF
+C
+      ISTACK(JJ)=IF*100000+IX*1000+IY
+      IISTACK(JJ)=ISTACK(JJ)
+C
+ 221  CONTINUE
+C
+C*          2.2.1 CHECK IF IT IS SAME DATA DESCRIPTOR DESCRIPTION.
+C                 ------------------------------------------------
+C                 TO MAKE MORE EFFICIENT DATA DESCRIPTOR DESCRIPTION
+C                 EXPANSION, IN CASE THAT DELAYED REPLICATION FACTOR
+C                 IS NOT PRESENT AND DATA DESCRIPTORS ARE THE SAME,
+C                 PREVIOUS WORKING TABLE SHOULD BE USED. IT IS POSIBLE
+C                 AT THIS PLACE IN THE FUTURE TO MAKE MORE SOPHISTICATED
+C                 CONTROL.
+C
+C
+      DO 222 JC=1,JMAX
+C
+      IF(ISTACK(JC).NE.NSTACK(JC)) THEN
+C
+         ODREPF=.FALSE.
+C
+C        SWAP CONTENT OF THE STACKS.
+C
+         DO 223 JJC=1,JMAX
+         NSTACK(JJC)=ISTACK(JJC)
+ 223     CONTINUE
+C
+         NTDLEN = JMAX
+         M=0
+         M0=1
+         NOLD=N
+         KELEMOLD=KELEM
+         NFCM=0
+         NFUCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         MBMP=0
+         MBMPL=0
+C
+         GO TO 230
+C
+      END IF
+C
+ 222  CONTINUE
+C
+C*    IF MARKER OPERATOR PRESENT EXPAND DESCRIPTORS AGAIN
+C
+      IF(OMARKER) THEN
+         M=0
+         M0=1
+         NOLD=N
+         KELEMOLD=KELEM
+         NFCM=0
+         NFUCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         NTDLEN=JMAX
+         MBMP=0
+         MBMPL=0
+         GO TO 230
+      END IF
+C
+C*    CHECK IF THE SAME NUMBER OF DESCRIPTORS
+C     AS IN A PREVIOUS MESSAGE
+C
+      IF(JMAX.NE.NTDLEN) THEN
+         M=0
+         M0=1
+         NOLD=N
+         KELEMOLD=KELEM
+         NFCM=0
+         NFUCM=0
+         MREL=0
+         OMARKER=.FALSE.
+         NTDLEN=JMAX
+         MBMP=0
+         MBMPL=0
+         GO TO 230
+      END IF
+C
+C*    RETURN IF DELAYED REPLICATION FACTOR IS NOT PRESENT.
+C
+      IF(NPRUS.EQ.1) GO TO 229
+C
+      OB=.FALSE.
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) OB=.TRUE.
+C
+C     CHECK FOR DELAYED REPLICATION FACTOR
+C
+      IF(ODREPF) GO TO 229
+C
+C     CHECK FOR COMPRESSION
+C
+      IF(OB) THEN
+C
+C        DATA COMPRESSED =/ PREVIOUS  --> RECALCULATE POINTERS
+C
+         GO TO 229
+      END IF
+C
+ 229  CONTINUE
+C
+      M=0
+      M0=1
+      NOLD=N
+      KELEMOLD=KELEM
+      NFCM=0
+      NFUCM=0
+      MREL=0
+      OMARKER=.FALSE.
+      NTDLEN=JMAX
+      MBMP=0
+      MBMPL=0
+C
+C     ------------------------------------------------------------------
+C*          2.3  GET NEXT DESCRIPTOR FROM THE STACK.
+C                -----------------------------------
+ 230  CONTINUE
+C
+      J   = J + 1
+      IF(J.GT.JMAX) GO TO 270
+C
+      IDD = ISTACK(J)
+      IF(IDD.EQ.0)  GO TO 230
+C
+      IF = IDD/100000
+C
+      IF(NWT.GT.NSTOP) GO TO 270
+C     ------------------------------------------------------------------
+C*          2.4  CHECK IF IT IS REPLICATION DESCRIPTOR.
+C                --------------------------------------
+ 240  CONTINUE
+C
+      IF( IF.EQ.0) THEN
+C
+C*          2.6  ELEMENT DESCRIPTOR, SO UPDATE WORKING TABLE.
+C                --------------------------------------------
+ 260     CONTINUE
+C
+            CALL BUUPWT(IDD,KELEM,KERR)
+            IF(KERR.GT.0) RETURN
+C       
+      ELSEIF( IF.EQ.1) THEN
+C
+C*          2.4.1     SOLVE REPLICATION PROBLEM.
+C                     --------------------------
+C
+C
+         CALL BUSRP(KBUFL,KBUFF,KSEC3,J,JMAX,IDD,ISTACK,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.2) THEN
+C
+C*          2.5.3 PROCESS OPERATOR.
+C                 -----------------
+            CALL BUPRCO(KBUFL,KBUFF,J,IDD,ISTACK,KELEM,KERR)
+            IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.3) THEN
+C
+C*          2.5.2 REPLACE BY LIST OF DESCRIPTORS FROM TABLE *D.
+C                 ---------------------------------------------
+            CALL BUSTDR(J,JMAX,IDD,ISTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+      ELSE
+         KERR=37
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      GO TO 230
+C
+C     ------------------------------------------------------------------
+C*          2.7 RESOLVE MARKER OPERATOR.
+C               ------------------------
+ 270  CONTINUE
+C
+      IF(OMARKER) THEN
+         CALL BUPMRK(KBUFL,KBUFF,KSEC3,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+      END IF
+C
+C*          2.8 CHECK IF IT IS CORRESPONDING DATA.
+C               ----------------------------------
+ 280  CONTINUE
+C
+C     CHECK FOR WORKING SPACE.
+C
+      IF(JWORK/N.LT.KELEM) THEN
+         KERR=17
+         WRITE(KNTN,*)  'BUEXS3:'
+         CALL BUERR(KERR)
+         MN=KELEM*N
+         WRITE(KNTN,*)  ' SUGGESTED VALUE FOR JWORK ',MN
+         WRITE(KNTN,*)  ' CHECK IF TOO BIG KELEM USED.'
+         RETURN
+      END IF
+C
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) THEN
+C
+C        COMPRESSED DATA
+C
+         CALL BURQC(KBUFL,KBUFF,KELEM,CNAMES,CUNITS,KSUP ,KSEC3,KERR)
+         IF(KERR.GT.0) RETURN
+      ELSE
+C
+C        UNCOMPRESSED DATA
+C
+         CALL BURQUC(KBUFL,KBUFF,KELEM,CNAMES,CUNITS,KSUP ,KSEC3,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3. COLLECT  SUPPLEMENTARY ITEMS.
+C              -----------------------------
+ 300  CONTINUE
+C
+      NTDEXL =M
+      DO 301 I=1,NTDEXL
+      NTDEXP(I)=INWTR(I)
+ 301  CONTINUE
+C
+      NTDLEN=JMAXNEW
+      DO 302 I=1,NTDLEN
+      NTDLST (I)=IISTACK(I)
+ 302  CONTINUE
+C
+      DO 303 I=1,NTDEXL
+      IJ=I+(NSUBSET-1)*KELEM
+      NWTRG(IJ)=INWTR(I)
+      NWTDWG(IJ)=INWTDW(I)
+ 303  CONTINUE
+C
+      NSIZE(NSUBSET)  =M
+C
+      KSUP(3)= 4
+      KSUP(5)= NSIZE(1)
+      KSUP(6)= KSEC3(3)
+C
+      N07=0
+      N08=0
+      N40=0
+      NDWINC=0
+      NSCAM=0
+      NSCAM07=0
+      NDWINC07=0
+      NFD=0
+    
+      do i=1,100
+      NAFDWA(i)=0
+      end do
+      RETURN
+      END
diff --git a/bufrdc/buexs33.F b/bufrdc/buexs33.F
new file mode 100755
index 0000000..915791a
--- /dev/null
+++ b/bufrdc/buexs33.F
@@ -0,0 +1,135 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS33(KBUFL,KBUFF,KSEC3,KERR)
+C
+C**** *BUEXS33*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXPAND SECTION 3 OF BUFR MESSAGE.
+C               (PRELIMINARY ITEMS)
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS33( KBUFL,KBUFF,KSEC3,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSEC3*
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C      -------
+C
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNEXS        - SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                          NEXT SECTION
+C          BUNPCK        - UNPACKS BIT PATTERN
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSEC3(*)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   EXPAND PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C*          1.1   SET THE POINTERS NWPT AND NBPT TO THE
+C                 -------------------------------------
+C                 BEGINING OF THE SECTION 3.
+C                 --------------------------
+ 110  CONTINUE
+C
+      NWPT = NWPTB
+      NBPT = NBPTB
+C
+C*          1.2   UNPACK LENGTH OF SECTION 3.
+C                 ---------------------------
+ 120  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(1),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C
+C*          1.3    UNPACK ZERO BYTE AND PUT IT IN KSEC3(2).
+C                  ----------------------------------------
+ 130  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(2),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          1.4    UNPACK NUMBER OF DATA SUB-SETS.
+C                  -------------------------------
+ 140  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(3),NWPT,NBPT,16,KERR)
+      IF(KERR.GT.0) RETURN
+      IF(KSEC3(3).LE.0) THEN
+         KERR=32
+         WRITE(KNTN,*)  ' BUEXS3 :'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(4),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) RETURN
+C     -----------------------------------------------------------------
+C
+      NWPT = NWPTB
+      NBPT = NBPTB      
+C
+      RETURN
+      END
diff --git a/bufrdc/buexs3p.F b/bufrdc/buexs3p.F
new file mode 100755
index 0000000..1f95a91
--- /dev/null
+++ b/bufrdc/buexs3p.F
@@ -0,0 +1,165 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS3P(KBUFL,KBUFF,KSUP,KSEC3,KERR)
+C
+C**** *BUEXS3P*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          EXPAND SECTION 3 OF BUFR MESSAGE.
+C               (PRELIMINARY ITEMS)
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS3P( KBUFL,KBUFF,KSUP,KSEC3,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC3*   -  ARRAY KSEC3 
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C      -------
+C
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNEXS        - SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                          NEXT SECTION
+C          BUNPCK        - UNPACKS BIT PATTERN
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+C
+      DIMENSION KBUFF(KBUFL),KSEC3(JSEC3)
+      DIMENSION KSUP(JSUP)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   EXPAND PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C*          1.1   SET THE POINTERS NWPT AND NBPT TO THE
+C                 -------------------------------------
+C                 BEGINING OF THE SECTION 3.
+C                 --------------------------
+ 110  CONTINUE
+C
+      NWPT = NWPTB
+      NBPT = NBPTB
+C
+C*          1.2   UNPACK LENGTH OF SECTION 3.
+C                 ---------------------------
+ 120  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(1),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          1.2.1  SET THE POINTERS NWPTB AND NBPTB TO
+C                  -----------------------------------
+C                  THE BEGINNING OF THE NEXT SECTION.
+C                  ----------------------------------
+      CALL BUNEXS(KSEC3(1))
+C
+C*          1.3    UNPACK ZERO BYTE AND PUT IT IN KSEC3(2).
+C                  ----------------------------------------
+ 130  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(2),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          1.4    UNPACK NUMBER OF DATA SUB-SETS.
+C                  -------------------------------
+ 140  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(3),NWPT,NBPT,16,KERR)
+      IF(KERR.GT.0) RETURN
+      IF(KSEC3(3).LE.0) THEN
+         KERR=32
+         WRITE(KNTN,*)  ' BUEXS3 :'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C
+C*          1.5    UNPACK INTEGER VALUE OF THE OCTET
+C                  ---------------------------------
+C                  CONTAINING FLAG BITS.
+C                  --------------------
+ 150  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC3(4),NWPT,NBPT,8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC3(4).'
+         RETURN
+      END IF
+
+C
+C     -----------------------------------------------------------------
+C
+      KSUP(3)= 4
+      KSUP(5)= 0
+      KSUP(6)= KSEC3(3)
+C
+      RETURN
+      END
diff --git a/bufrdc/buexs4.F b/bufrdc/buexs4.F
new file mode 100755
index 0000000..f42feb6
--- /dev/null
+++ b/bufrdc/buexs4.F
@@ -0,0 +1,869 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS4(KBUFL,KBUFF,KSUP,KSEC3,KSEC4,KELEM,CNAMES,
+     1                  CUNITS,KVALS,VALUES,CVALS,KERR)
+C
+C**** *BUEXS4*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPAND PRELIMINARY ITEMS AND DATA OF SECTION 4 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS4(KBUFL,KBUFF,KSUP,KSEC3,KSEC4,KELEM,CNAMES,
+C                         CUNITS,KVALS,VALUES,CVALS,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KSEC4*   -  ARRAY CONTAINING SECTION 4 INFORMATION
+C                            KSEC4( 1)-- LENGTH OF SECTION 4 (BYTES)
+C                            KSEC4( 2)-- RESERVED
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *VALUES*  -  REAL ARRAY (EXPANDED DATA VALUES)
+C               *CVALS*   -  CHARACTER ARRAY CONTAINING TEXT
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          -  UNPACK BIT PATTERN
+C          BUNPKS          -  UNPACK BIT PATTERN IN REPEATED WAY,
+C                             POINTER ADJUSTMENT
+C          BUUNPS          -  UNPACK BIT PATTERN IN REPEATED WAY,
+C                             NO POINTER ADJUSTMENT
+C          BUUNP           -  UNPACK BIT PATTERN, NO POINTER ADJUSTMENT
+C          BUNEXS          -  SET WORD AND BIT POINTERS AT THE BEGINING OF
+C                             NEXT SECTION
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomreq.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomp.F"
+#     include "bcombef.F"
+#     include "bcomrq.F"
+#     include "bcomoff.F"
+C
+      CHARACTER CTEXT*64
+      CHARACTER CNAMR*64,CUNIR*24
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION ICH(255),ILIST(JWORK),IVALUES(JWORK) 
+      DIMENSION IILIST(8),IR0LIST(8)
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      REAL*4 VVV4,VVV4S
+      REAL*8 VVV8S,VVV8,VAL8S
+      REAL*4 R4, RHUGE4
+      REAL*8 R8, RHUGE8
+      LOGICAL OBIG, BIG_ENDIAN
+C
+#ifndef R_4
+      REAL*8 VALUES(KVALS),RQVAL
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 VVV
+#else
+      REAL   VALUES(KVALS),RQVAL
+      REAL   RVIND
+      REAL   EPS
+      REAL   VVV
+#endif
+      LOGICAL CHECK_S4,OS4
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION IMASK(8),IRO(80)
+      DATA IMASK/1,2,4,8,16,32,64,128/
+
+C
+C     ------------------------------------------------------------------
+C*          1.  EXPAND PRELIMINARY ITEMS FROM SECTION4.
+C               ---------------------------------------
+ 100  CONTINUE
+C
+C                JCV - POINTER TO CVALS ARRAY
+C                JWT - POINTER TO WORKING TABLE ARRAY
+C                JNS - POINTER TO VALUES ARRAY FOR SUB-SETS.
+C
+      IF(KERR.GT.0) RETURN
+C
+      R4=3.4028235e+38
+      R8=1.7976931348623157D+308
+C
+      IF(OMULTI) THEN
+         IF(NSUBSET.EQ.1) JCV = 0
+      ELSE
+        JCV = 0
+      END IF
+      OREPF =.FALSE.
+C
+      IF(KELEM*N.GT.KVALS) THEN
+         KERR=14
+         CALL BUERR(KERR)
+         WRITE(KNTN,*)  ' BUEXS4: NUMBER OF ELEMENTS ',M
+         WRITE(KNTN,*)  ' BUEXS4: NUMBER OF SUBSETS  ',N
+         MN=M*N
+         WRITE(KNTN,*)  ' BUEXS4: SUGGESTED VALUE FOR KVALS ',MN
+         WRITE(KNTN,*)  ' BUEXS4: SUGGESTED VALUE FOR KELEM ',M
+         RETURN
+      END IF
+C
+C*          1.1  SET THE POINTERS NWPT AND NBPT
+C                ------------------------------
+C                TO THE BEGINING OF THE SECTION.
+C                -------------------------------
+ 110  CONTINUE
+C
+      NWPT = NWPTB
+      NBPT = NBPTB
+      NWPTB4 = NWPTB
+      NBPTB4 = NBPTB
+C
+C*          1.2  UNPACK LENGTH OF SECTION 4.
+C                ---------------------------
+ 120  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC4(1),NWPT,NBPT,24,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC4(1).'
+         RETURN
+      END IF
+C
+      IF(OS4.AND.NREQ(1).EQ.0) THEN
+        CALL CHECK_S4S(KELEM,KSEC3,KSEC4,KERR)
+        IF(KERR.NE.0) THEN
+           return
+        END IF
+      END IF
+C
+C
+C*          1.3  SET THE POINTERS NWPTB AND NBPTB.
+C                ---------------------------------
+C                TO BEGINING OF THE NEXT SECTION.
+C                --------------------------------
+ 130  CONTINUE
+C
+      CALL BUNEXS(KSEC4(1))
+C
+C
+C*          1.4  EXPAND RESERVED BYTE.
+C                ---------------------
+ 140  CONTINUE
+C
+      CALL BUNPCK(NBPW,KBUFF,KSEC4(2),NWPT,NBPT, 8,KERR)
+      IF(KERR.GT.0) THEN
+         WRITE(KNTN,*)  'ERROR UNPACKING KSEC4(2).'
+         RETURN
+      END IF
+C
+C     -----------------------------------------------------------------
+C*          2. EXPAND DATA.
+C              ------------
+ 200  CONTINUE
+C
+C
+C*          2.1  CHECK IF DATA ARE COMRESSED.
+C                ----------------------------
+ 210  CONTINUE
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+      IF(IB.EQ.0) THEN
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UNCOMPRESSED DATA.
+C               ------------------
+ 300  CONTINUE
+C
+         IF(OMULTI) N=1
+C
+         DO 301 JNS=1,N
+C
+         ITEMPREP=0
+
+         IF(OMULTI) THEN
+            JNSK=(NSUBSET-1)*KELEM
+            JNSK1=(JNS-1)*KELEM
+         ELSE
+            JNSK=(JNS-1)*KELEM
+         END IF
+C
+         DO 302 JWT=1,M
+C
+         IF(OMULTI) THEN
+            JWTJNS1=JWT+JNSK1
+            JWTJNS=JWT+JNSK
+         ELSE
+            JWTJNS=JWT+JNSK
+         END IF
+C
+c        IF(ITEMPREP.GT.0) THEN
+c           IF(NWTR(JWT-1).NE.031011.AND.NWTR(JWT-1)
+c    1         .NE.031012) THEN
+c              VALUES(JWTJNS)=VALUES(JWTJNS-1)
+c              ITEMPREP=ITEMPREP-1
+c              GO TO 302
+c           ELSE
+c              ITEMPREP=ITEMPREP-1
+c           END IF
+c        END IF
+
+         IF(INWTDW(JWT).EQ.0) THEN
+            VALUES(JWTJNS)=0.0
+            GO TO 302
+         END IF
+C
+         IF(OMULTI) THEN
+            NWPT=INWORDP(JWTJNS1)
+            NBPT=INBITP (JWTJNS1)
+         ELSE
+            NWPT=INWORDP(JWTJNS)
+            NBPT=INBITP (JWTJNS)
+         END IF
+C
+c        IF(INWTR(JWT).EQ.31011.OR.INWTR(JWT).EQ.31012) OREPF=.TRUE.
+C
+C
+C     ------------------------------------------------------------------
+C*          3.1 CHARACTER DATA / IEEE ?
+C               -----------------------
+ 310  CONTINUE
+C
+         IF(INWTEN(JWT).EQ.-999) THEN
+            IBYTES=INWTDW(JWT)/8
+            CALL BUNPKS(NBPW,KBUFF,ILIST,NWPT,NBPT,
+     1                  8,0,IBYTES,KERR)
+            IF(IBYTES.EQ.4) THEN
+               OBIG=BIG_ENDIAN()
+               CALL BUSBYTESR4(VVV4,ILIST,0,8,0,IBYTES)
+               IF(.NOT.OBIG) THEN
+                  CALL SWAP_BYTES4(VVV4,VVV4S)
+                  VVV4=VVV4S
+               END IF
+               IF(ABS(VVV4-R4)/R4.LT.EPS) THEN
+                  VALUES(JWTJNS)=RVIND
+               ELSE
+                  VALUES(JWTJNS)=VVV4
+               END IF
+            ELSE
+               OBIG=BIG_ENDIAN()
+               CALL BUSBYTESR8(VVV8,ILIST,0,8,0,IBYTES)
+               IF(.NOT.OBIG) THEN
+                  CALL SWAP_BYTES8(VVV8,VVV8S)
+                  VVV8=VVV8S
+               END IF
+               IF(ABS(VVV8-R8)/R8.LT.EPS) THEN
+                  VALUES(JWTJNS)=RVIND
+               ELSE
+                  VALUES(JWTJNS)=VVV8
+               END IF
+            END IF
+            GO TO 302
+         END IF
+C
+         IF(INWTEN(JWT).EQ.658367) THEN
+C
+C*          3.2  OBTAIN CHARACTER DATA FROM DATA SECTION.
+C                ----------------------------------------
+ 320  CONTINUE
+C
+            IY=INWTDW(JWT)/8
+C
+            CALL  BUUNPS(NBPW,KBUFF,ICH,NWPT,NBPT,8,0,IY,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING CHARACTER DATA.'
+               RETURN
+            END IF
+C
+C*          3.3  MOVE CHARACTER DATA TO "CVALS".
+C                -------------------------------
+ 330  CONTINUE
+C
+            IYLINE=IY/80
+            IYOFF =IY-IYLINE*80
+            JCVINC=IYLINE
+C
+            JCV = JCV + 1
+            JCVW= JCV
+C
+            IF(IYLINE.EQ.0) THEN
+               CVALS(JCVW)=' '
+               DO 331 J=1,IY
+               CVALS(JCVW)(J:J)=CHAR(ICH(J))
+ 331           CONTINUE
+            ELSE
+               CVALS(JCVW)=' '
+               DO 332 J=1,IYLINE
+               DO 333 JJ=1,80
+               CVALS(JCVW)(JJ:JJ)= CHAR(ICH(JJ))
+ 333           CONTINUE
+C
+               JCVW=JCVW+1
+C
+ 332           CONTINUE
+C
+               CVALS(JCVW)=' '
+               DO 334 J=1,IYOFF
+               CVALS(JCVW)(J:J)= CHAR(ICH(J))
+ 334           CONTINUE
+C
+            END IF
+C
+C*          3.4  COMPUTE POINTER VALUES TO BE STORED IN "VALUES".
+C                ------------------------------------------------
+ 340  CONTINUE
+C
+            VALUES(JWTJNS) = JCV*1000 + IY
+            JCV            = JCV + JCVINC
+C
+            GO TO 302
+C
+         END IF
+C
+C*          3.5  OBTAIN VALUE FROM DATA SECTION.
+C                -------------------------------
+ 350  CONTINUE
+C
+         IF(NWTEN(JWT).EQ.836970) THEN
+            ISGN=0
+            IWPT=NWPT
+            IBPT=NBPT
+C
+            CALL GBYTE(KBUFF(IWPT),ISGN,IBPT,1)
+C
+            IBPT=IBPT+1
+            IWORD= IBPT/NBPW
+            IBPT= IBPT - IWORD*NBPW
+            IWPT= IWPT + IWORD
+C
+            CALL GBYTE(KBUFF(IWPT),IVAL,IBPT,INWTDW(JWT)-1)
+            VALUES(JWTJNS)= DFLOAT(IVAL)
+            IF(ISGN.EQ.1) VALUES(JWTJNS)=-VALUES(JWTJNS)
+            GO TO 302
+         ELSE
+            CALL GBYTE(KBUFF(NWPT),IVAL,NBPT,INWTDW(JWT))
+         END IF
+C
+C
+C     -----------------------------------------------------------------
+C*          3.6  UPDATE THE ARRAY "VALUES".
+C                --------------------------
+ 360  CONTINUE
+C
+C
+C        CHECK IF DATA IS MISSING
+C
+         IF(IVAL.EQ.NMASK(INWTDW(JWT))) THEN
+            IF(INWTDW(JWT).NE.1) THEN
+               IF(INWTR(JWT).NE.999999.AND.
+     1            INWTR(JWT).NE.030001.AND.INWTR(JWT).NE.030002.AND.
+     2            INWTR(JWT).NE.030004) THEN
+                  VALUES(JWTJNS)=RVIND
+               ELSE
+                  VALUES(JWTJNS)=ival
+               END IF
+            ELSE
+               VALUES(JWTJNS)=1.0
+            END IF
+         ELSE
+            IVAL=IVAL+INWTRV(JWT)
+            IF(INWTS(JWT).GT.0) THEN
+               VALUES(JWTJNS)= DFLOAT(IVAL)/10.**INWTS(JWT)
+            ELSE
+               IIWTS=IABS(INWTS(JWT))
+               VALUES(JWTJNS)= DFLOAT(IVAL)*10.**IIWTS
+            END IF
+         END IF
+C
+c        IF(INWTR(JWT).EQ.31011.OR.INWTR(JWT).EQ.31012) THEN
+c           ITEMPREP=VALUES(JWTJNS)
+c        END IF
+
+ 302     CONTINUE
+C
+         KSUP(7)=JCV
+C
+ 301     CONTINUE
+C
+         IF(OMULTI) THEN
+            IBIT=NBITP(NSIZEG(NSUBSET)) + NWTDW(NSIZEG(NSUBSET))
+            IWORD=IBIT/NBPW
+            NBP=IBIT-IWORD*NBPW
+            NWP=NWORDP(NSIZEG(NSUBSET))+IWORD
+         END IF
+      ELSE 
+C     ------------------------------------------------------------------
+C
+C*          4.  COMPRESSED DATA.
+C               ----------------
+ 400  CONTINUE
+C
+C*          4.1 OBTAIN N VALUES BY EXPANSION.
+C               -----------------------------
+ 410  CONTINUE
+C
+         DO 411 JWT=1,M
+C
+         NWPT=INWORDP(JWT)
+         NBPT=INBITP (JWT)
+C
+         IF(INWTDW(JWT).EQ.0) THEN
+            DO 412 J=1,N
+            JWTJ=JWT+(J-1)*KELEM
+            VALUES(JWTJ)=0.0
+ 412        CONTINUE
+C
+            GO TO 411
+         END IF
+C
+C        CHECK IF CHARACTER DATA
+C
+         IF(INWTEN(JWT).EQ.658367) THEN
+            IICH=INWTDW(JWT)/8
+            CALL BUNPKS(NBPW,KBUFF,IRO,NWPT,NBPT,8,0,IICH,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING REFERENCE VALUES FOR'
+               WRITE(KNTN,*)  JWT,' ELEMENT, OF ',J,' SUBSET.'
+               RETURN
+            END IF
+            CALL BUNPCK(NBPW,KBUFF,IDWINC,NWPT,NBPT,6,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING NUMBER OF BITS FOR ',
+     1                        'INCREMENTS'
+               WRITE(KNTN,*)  'FOR ',JWT,' ELEMENT, OF ',J,' SUBSET'
+               RETURN
+            END IF
+C
+            ITOTAL=IDWINC*KSEC3(3)
+            IF(ITOTAL.GT.JWORK) THEN
+               KERR=17
+               CALL BUERR(KERR)
+               RETURN
+            END IF 
+C
+            DO 413 J=1,ITOTAL
+            ILIST(J)=0
+ 413        CONTINUE
+C
+            CALL BUNPKS(NBPW,KBUFF,ILIST,NWPT,NBPT,
+     1                  8,0,ITOTAL,KERR)
+            IF(KERR.GT.0) RETURN
+C
+C           MOVE CHARACTER DATA TO "CVALS" ARRAY.
+C
+            IY=IDWINC
+            IF(IY.EQ.0) THEN
+               IY=IICH
+               IZ=0
+               IF(IICH*KSEC3(3).GT.JWORK) THEN
+                  KERR=17
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+               DO IXX=1,KSEC3(3)
+               DO IZZ=1,IICH
+               IZ=IZ+1
+               ILIST(IZ)=IRO(IZZ)
+               END DO
+               END DO
+            END IF
+C
+            IYLINE=IY/80
+            IYOFF=IY-IYLINE*80
+C
+            JCVINC=IYLINE
+            JJC=0
+C
+            DO 414 I=1,KSEC3(3)
+C
+            JCV=JCV+1
+            JCVW=JCV
+C
+            IF(IYLINE.EQ.0) THEN
+               CVALS(JCVW)=' '
+               DO 415 J=1,IY
+               JJC=JJC+1
+               CVALS(JCVW)(J:J)=CHAR(ILIST(JJC))
+ 415           CONTINUE
+C
+            ELSE
+C
+               CVALS(JCVW)=' '
+               DO 416 J=1,IYLINE
+               DO 417 JJJ=1,80
+               JJC=JJC+1
+               CVALS(JCVW)(JJJ:JJJ)=CHAR(ILIST(JJC))
+ 417           CONTINUE
+C
+               JCVW=JCVW+1
+ 416           CONTINUE
+C
+               CVALS(JCVW)=' '
+               DO 418 J=1,IYOFF
+               JJC=JJC+1
+               CVALS(JCVW)(J:J)=CHAR(ILIST(JJC))
+ 418           CONTINUE
+C
+            END IF
+C
+C           COMPUTE POINTERS TO VALUES ARRAY
+C
+            JWTI=JWT+(I-1)*KELEM
+C           VALUES(JWTI)=JCV*1000+IY
+            VALUES(JWTI)=JCV*1000+INWTDW(JWT)/8
+            JCV         =JCV+JCVINC
+C
+ 414        CONTINUE
+C
+            GO TO 411
+C
+         ELSEIF(INWTEN(JWT).EQ.-999) THEN
+            IICH=INWTDW(JWT)/8
+            CALL BUNPKS(NBPW,KBUFF,IR0LIST,NWPT,NBPT,8,0,IICH,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING REFERENCE VALUES FOR',
+     1                         JWT,' ELEMENT, OF ',J,' SUBSET.'
+               RETURN
+            END IF
+            CALL BUNPCK(NBPW,KBUFF,IDWINC,NWPT,NBPT,6,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING NUMBER OF BITS FOR ',
+     1                        'INCREMENTS'
+               WRITE(KNTN,*)  'FOR ',JWT,' ELEMENT, OF ',J,' SUBSET'
+               RETURN
+            END IF
+C
+            IF(IDWINC.NE.0) THEN
+               ITOTAL=IDWINC*KSEC3(3)
+               DO J=1,ITOTAL
+                 ILIST(J)=0
+               END DO
+C
+               CALL BUNPKS(NBPW,KBUFF,ILIST,NWPT,NBPT,
+     1                     8,0,ITOTAL,KERR)
+               IF(KERR.GT.0) RETURN
+C
+C
+C              COMPUTE POINTERS TO VALUES ARRAY
+C
+               JJC=0
+               DO I=1,KSEC3(3)
+                JWTI=JWT+(I-1)*KELEM
+C
+                DO J=1,IICH
+                 JJC=JJC+1
+                 IILIST(J)=ILIST(JJC)
+                END DO
+
+                IF(IICH.EQ.4) THEN
+                  CALL BUSBYTESR4(RHUGE4,IILIST,0,8,0,IICH)
+                   OBIG=BIG_ENDIAN()
+                   IF(.NOT.OBIG) THEN
+                      CALL SWAP_BYTES4(RHUGE4,VAL4S)
+                      RHUGE4=VAL4S
+                   END IF
+                  VALUES(JWTI)=RHUGE4
+                  IF(ABS(VALUES(JWTI)-R4)/R4.LT.EPS) THEN
+                     VALUES(JWTI)=RVIND               
+                  END IF
+                ELSE
+                  CALL BUSBYTESR8(RHUGE8,IILIST,0,8,0,IICH)
+                  OBIG=BIG_ENDIAN()
+                   IF(.NOT.OBIG) THEN
+                      CALL SWAP_BYTES8(RHUGE8,VAL8S)
+                      RHUGE8=VAL8S
+                   END IF
+                  VALUES(JWTI)=RHUGE8
+                  IF(ABS(VALUES(JWTI)-R8)/R8.LT.EPS) THEN
+                     VALUES(JWTI)=RVIND               
+                  END IF
+                END IF
+C
+               END DO
+            ELSE
+                IF(IICH.EQ.4) THEN
+                   CALL BUSBYTESR4(RHUGE4,IR0LIST,0,8,0,IICH)
+                   OBIG=BIG_ENDIAN()
+                   IF(.NOT.OBIG) THEN
+                      CALL SWAP_BYTES4(RHUGE4,VAL4S)
+                      RHUGE4=VAL4S
+                   END IF
+                   DO I=1,KSEC3(3)
+                    JWTI=JWT+(I-1)*KELEM
+                    IF(ABS(RHUGE4-R4)/R4.LT.EPS) THEN
+                       VALUES(JWTI)=RVIND
+                    ELSE 
+                       VALUES(JWTI)=RHUGE4
+                    END IF
+                   END DO
+                ELSE          
+                   CALL BUSBYTESR8(RHUGE8,IR0LIST,0,8,0,IICH)
+                   OBIG=BIG_ENDIAN()
+                   IF(.NOT.OBIG) THEN
+                      CALL SWAP_BYTES8(RHUGE8,VAL8S)
+                      RHUGE8=VAL8S
+                   END IF
+                   DO I=1,KSEC3(3)
+                    JWTI=JWT+(I-1)*KELEM
+                    IF(ABS(RHUGE8-R8)/R8.LT.EPS) THEN
+                       VALUES(JWTI)=RVIND
+                    ELSE
+                       VALUES(JWTI)=RHUGE8
+                    END IF
+                   END DO
+                END IF 
+            END IF
+C
+            GO TO 411
+         ELSE
+            IF(INWTEN(JWT).EQ.836970) THEN
+               CALL BUNPCK(NBPW,KBUFF,ISG_REF,NWPT,NBPT,1,KERR)
+               CALL BUNPCK(NBPW,KBUFF,IR0,NWPT,NBPT,INWTDW(JWT)-1,KERR)
+               IF(KERR.GT.0) THEN
+                  WRITE(KNTN,*)  'ERROR UNPACKING REFERENCE VALUES FOR'
+                  WRITE(KNTN,*)  JWT,' ELEMENT.'
+                  RETURN
+               END IF
+            ELSE
+               CALL BUNPCK(NBPW,KBUFF,IR0,NWPT,NBPT,INWTDW(JWT),KERR)
+               IF(KERR.GT.0) THEN
+                  WRITE(KNTN,*)  'ERROR UNPACKING REFERENCE VALUES FOR'
+                  WRITE(KNTN,*)  JWT,' ELEMENT.'
+                  RETURN
+               END IF
+            END IF
+            CALL BUNPCK(NBPW,KBUFF,IDWINC,NWPT,NBPT,6,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING NUMBER OF BITS FOR'
+               WRITE(KNTN,*)  'INCREMENTS, FOR ',JWT,' ELEMENT.'
+               RETURN
+            END IF
+            IF(IDWINC.GT.JBPW) THEN
+               KERR=15
+               WRITE(KNTN,*)  ' BUEXS4 :'
+               CALL BUERR(KERR)
+               PRINT*,'JWT=',JWT,'REF=',INWTR(JWT)
+               RETURN
+            END IF
+         END IF
+C
+         DO 423 J=1,N
+         ILIST(J)=0
+ 423     CONTINUE
+C
+         IF(IDWINC.NE.0) THEN
+            CALL BUNPKS(NBPW,KBUFF,ILIST,NWPT,NBPT,
+     1                  IDWINC,0,N,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR UNPACKING INCREMENTS ',
+     1                        'FOR ',JWT,' ELEMENT.'
+               RETURN
+            END IF
+         END IF
+C
+         IF(INWTEN(JWT).NE.658367) THEN
+            IF(IR0.EQ.NMASK(INWTDW(JWT))) THEN
+               DO 425 J=1,N
+               IVALUES(J)=NMASK(INWTDW(JWT))
+ 425           CONTINUE
+            ELSE
+               IWTPR0=INWTRV(JWT)+IR0
+C
+               IF(IDWINC.EQ.0) THEN
+                  DO 426 J=1,N
+                  IVALUES(J)=IWTPR0
+ 426              CONTINUE
+C
+               ELSE
+                  DO 424 J=1,N
+                  IF(ILIST(J).EQ.NMASK(IDWINC)) THEN
+                     IVALUES(J)=NMASK(INWTDW(JWT))
+                  ELSE
+                     IVALUES(J)= IWTPR0 + ILIST(J)
+                  END IF
+ 424              CONTINUE
+C
+               END IF
+            END IF
+         END IF
+C
+         DO 427 J=1,N
+C
+         JWTJ=JWT+(J-1)*KELEM
+C
+         IF(INWTDW(JWT).NE.1) THEN 
+            VALUES(JWTJ)=RVIND
+         ELSE
+            VALUES(JWTJ)=1.0
+         END IF
+            
+         IF(IVALUES(J).NE.NMASK(INWTDW(JWT))) THEN
+            IF(INWTS(JWT).GT.0) THEN
+               VALUES(JWTJ)= DFLOAT(IVALUES(J))/10.**INWTS(JWT)
+            ELSE
+               IIWTS=IABS(INWTS(JWT))
+               VALUES(JWTJ)= DFLOAT(IVALUES(J))*10.**IIWTS
+            END IF
+         END IF
+C
+         IF(INWTEN(JWT).EQ.836970.AND.ISG_REF.EQ.1) THEN
+            VALUES(JWTJ)= - VALUES(JWTJ)
+         END IF
+ 427     CONTINUE
+C
+ 411     CONTINUE
+C
+         KSUP(7)=JCV
+C
+      END IF
+C
+C     ------------------------------------------------------------------
+C*             5.  REPEAT ENTRIES IN CNAMES,CUNITS AND VALUES IF NEEDED.
+C                  -----------------------------------------------------
+ 500  CONTINUE
+C
+      IF(.NOT.OREPF) GO TO 600
+      IST=1
+C
+C*             5.1 SEARCH CNAMES FOR DELAYED REPETITION FACTOR.
+C                  --------------------------------------------
+ 510  CONTINUE
+C
+C      DO 511 J=IST,M
+C      IF(INWTR(J).EQ.31001.OR.INWTR(J).EQ.31002
+C     1   .OR.INWTR(J).EQ.31000) GO TO 520
+C 511  CONTINUE
+C
+C      GO TO 600
+C
+C*             5.2 GET REPETITION FACTOR FROM ARRAY "VALUES".
+C                  -------------------------------------------
+ 520  CONTINUE
+C
+C      IREPF=VALUES(J)
+C      CNAMR=CNAMES(J+1)
+C      CUNIR=CUNITS(J+1)
+C      VALUR=VALUES(J+1)
+C
+C*             5.3 PUSH DOWN ENTRIES IN CNAMES,CUNITS,VALUES.
+C                  ------------------------------------------
+ 530  CONTINUE
+C
+C      IREPM2=IREPF-2
+C
+C      DO 531 JA=M,J+2,-1
+C
+C      CNAMES(JA+IREPM2)=CNAMES(JA)
+C      CUNITS(JA+IREPM2)=CUNITS(JA)
+C
+C      DO 932 JB=1,N
+C
+C      JAJB=JA+(JB-1)*KELEM
+C
+C      VALUES(JAJB+IREPM2)=VALUES(JAJB)
+C 932  CONTINUE
+C
+C 531  CONTINUE
+C
+C*             5.4 REPETITION.
+C                  -----------
+ 540  CONTINUE
+C
+C      DO 541 JA=1,IREPF
+C      CNAMES(J+JA)=CNAMR
+C      CUNITS(J+JA)=CUNIR
+C
+C      DO 542 JB=1,N
+C
+C      JAJB=JA+(JB-1)*KELEM
+C
+C      VALUES(J+JAJB)=VALUR
+C 542  CONTINUE
+C
+C 541  CONTINUE
+C
+C*             5.5 UPDATE M AND POINTER TO CONTINUE SEARCH.
+C                  ----------------------------------------
+C 550  CONTINUE
+C
+C      M=M+IREPF-2
+C      IST=J+IREPF
+C
+C      GO TO 510
+C
+C     -----------------------------------------------------------------
+C*            6.  SET SUPPLEMENTARY INFORMATION.
+C                 ------------------------------
+C
+ 600  CONTINUE
+C
+      KSUP(4)= 2
+C
+C     ------------------------------------------------------------------
+      RETURN
+      END
diff --git a/bufrdc/buexs5.F b/bufrdc/buexs5.F
new file mode 100755
index 0000000..d55d486
--- /dev/null
+++ b/bufrdc/buexs5.F
@@ -0,0 +1,108 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUEXS5( KBUFL,KBUFF,KERR)
+C
+C**** *BUEXS5*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS SECTION 5 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS5( KBUFL,KBUFF,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPKS         - UNPACK BIT PATTERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION IBUFR(4)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      CHARACTER*4 YBUFR
+C
+C     ------------------------------------------------------------------
+C*          1.   EXPAND SECTION 5.
+C                -----------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      NWPT = NWPTB
+      NBPT = NBPTB
+C
+C
+C*          1.2  UNPACK LAST FOUR OCTETS CONTAINING '7777'.
+C                ------------------------------------------
+C
+      CALL BUNPKS(NBPW,KBUFF,IBUFR,NWPT,NBPT,8,0,4,KERR)
+C
+C*          1.3  CHECK IF THE LAST FOUR OCTETS ARE '7777'.
+C                --------------------------------------
+      YBUFR=CHAR(IBUFR(1))//CHAR(IBUFR(2))//
+     1      CHAR(IBUFR(3))//CHAR(IBUFR(4))
+      IF(YBUFR.NE.'7777') THEN
+         KERR = 2
+         WRITE(KNTN,'(1H ,A)') 'BUEXS5 :'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     -----------------------------------------------------------------
+      RETURN
+      END
diff --git a/bufrdc/bufren.F b/bufrdc/bufren.F
new file mode 100755
index 0000000..b54e4d2
--- /dev/null
+++ b/bufrdc/bufren.F
@@ -0,0 +1,314 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUFREN(KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     1                  KTDLEN,KTDLST,KDLEN,KDATA,KELEM,KVALS,
+     2                  VALUES,CVALS,KBUFL,KBUFF,KERR)
+C
+C**** *BUFREN*
+C
+C
+C     PURPOSE.
+C     --------
+C          ENCODE BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C               *CALL BUFREN(KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+C                            KTDLEN,KTDLST,KDLEN,KDATA,KELEM,KVALS,
+C                            VALUES,CVALS,KBUFL,KBUFF,KERR)
+C
+C        INPUT :
+C               *KSEC0*   -  INTEGER ARRAY OF 3 WORDS CONTAINING
+C                            BUFR SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C
+C               *KSEC1*   -  INTEGER ARRAY OF AT LEAST 40 WORDS
+C                            CONTAINING BUFR SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) TO KSEC1(40) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  INTEGER ARRAY OF AT LEAST 64 WORDS
+C                            CONTAINING BUFR SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(64) LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C               *KSEC3*   -  INTEGER ARRAY OF 4 WORDS CONTAINING
+C                            BUFR SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C
+C               *KSEC4*   -  INTEGER ARRAY OF 2 WORDS CONTAINING
+C                            BUFR SECTION 4 INFORMATION
+C                            KSEC4( 1)-- LENGTH OF SECTION 4 (BYTES)
+C                            KSEC4( 2)-- RESERVED
+C
+C               *KTDLEN*  -  INTEGER NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  INTEGER ARRAY OF AT LEAST KTDLEN WORDS
+C                            CONTAINING DATA DESCRIPTORS FOR BUFR SECTION 3
+C               *KDLEN*   -  INTEGER (DIMENSION OF KDATA ARRAY)
+C               *KDATA*   -  INTEGER ARRAY CONTAINING DATA NEEDED FOR DATA
+C                            DESCRIPTOR EXPANSION (DELAYED REPLICATION FACTORS)
+C                            WHICH APPEAR IN THE VALUES ARRAY
+C
+C               *KELEM*   -  INTEGER NUMBER OF ELEMENTS IN BUFR TEMPLATE.
+C               *KVALS*   -  INTEGER (DIMENSION OF VALUES ARRAY)
+C               *VALUES*  -  REAL ARRAY OF KVALS WORDS (EXPANDED DATA )
+C               *CVALS*   -  CHARACTER*80  ARRAY OF KVALS
+C
+C        OUTPUT:
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  INTEGER ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURN ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C          BUFR MESSAGE SECTIONS CONTENET, AND DATA ARE PASSED FOR
+C     FOR PACKING INTO FM-94 BUFR DATA.DURING UNPACKING A BIT PATHERN
+C     GBYTE AND GBYTES ROUTINES (VMS VERSION) ARE USED.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUENS0   -  PACK SECTION 0 OF BUFR MESSAGE
+C          BUENS1   -  PACK SECTION 1 OF BUFR MESSAGE
+C          BUENS2   -  PACK SECTION 2 OF BUFR MESSAGE
+C          BUENS3   -  PACK SECTION 3 OF BUFR MESSAGE
+C          BUETAB    -  LOAD REQUIRED BUFR TABLES
+C          BUENS4   -  PACK SECTION 4 OF BUFR MESSAGE
+C          BUENS5   -  PACK SECTION 5 OF BUFR MESSAGE
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmdefc.F"
+#     include "bcmoff.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSEC0(JSEC0),KSEC1(JSEC1),KSEC2(JSEC2)
+     1,         KSEC3(JSEC3),KSEC4(JSEC4)
+C
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION  KTDLST(KTDLEN)
+      DIMENSION  KDATA(KDLEN)
+C
+      CHARACTER*4   CECMWF,CUSER
+      CHARACTER*80  CVALS(KVALS)
+C
+      SAVE NWPTB1,NBPTB1
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      KERR=0
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUIVAR(KERR)
+         KPT   = 0
+         CECMWF='ECMF'
+      END IF
+C
+      NEDN=KSEC0(3)
+C
+C     -----------------------------------------------------------------
+C*          2.  PACK SECTION 0.
+C               ---------------
+ 200  CONTINUE
+C
+      CALL BUENS0( KSEC0,KBUFL,KBUFF,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          3.   PACK SECTION 1.
+C                ---------------
+ 300  CONTINUE
+C
+      CALL BUENS1( KSEC0,KSEC1,KBUFL,KBUFF,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  PACK SECTION 2.
+C               ---------------
+ 400  CONTINUE
+C
+      CALL BUENS2( KSEC1,KSEC2,KBUFL,KBUFF,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          5.   LOAD BUFR TABLES.
+C                -----------------
+ 500  CONTINUE
+C
+      CALL BUETAB(KSEC1,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C          6.  PACK SECTION 3.
+C              ---------------
+ 600  CONTINUE
+C
+      CALL BUENS3( KSEC3,KTDLEN,KTDLST,KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     -----------------------------------------------------------------
+C
+      OMULTI=.FALSE.
+      NSUBSET=1
+      IF(IAND(KSEC3(4),64).EQ.0.AND.KSEC3(3).GT.1) THEN
+C
+C        Multi-subset uncompressed data
+C
+         NSUBSET=0
+         OMULTI=.TRUE.
+         DO I=1,KSEC3(3)
+         NWT=0
+         M=0
+         NSUBSET=I
+         KERR=0
+         CALL BUETD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+     1              KVALS,VALUES,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+C
+          CALL BUENS4(KSEC3,KSEC4,KELEM,KVALS,VALUES,CVALS,
+     1                KBUFL,KBUFF,KERR)
+         IF(KERR.GT.0) RETURN
+         END DO
+
+         GO TO 800
+      END IF
+C     ------------------------------------------------------------------
+C          6.1  EXPAND DATA DESCRIPTORS.
+C               ------------------------
+ 610  CONTINUE
+      CALL BUETD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+     1           KVALS,VALUES,KELEM,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          7.   PACK SECTION 4.
+C                ---------------
+ 700  CONTINUE
+C
+      CALL BUENS4(KSEC3,KSEC4,KELEM,KVALS,VALUES,CVALS,
+     1            KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          8.   PACK SECTION 5.
+C                ---------------
+ 800  CONTINUE
+C
+      CALL BUENS5(KSEC0,KSEC1,KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     -----------------------------------------------------------------
+C
+C*          9.   SET TOTAL BUFR MESSAGE LENGTH.
+C                ------------------------------
+ 900  CONTINUE
+C
+C
+C     -----------------------------------------------------------------
+      RETURN
+C
+      END
diff --git a/bufrdc/bufrex.F b/bufrdc/bufrex.F
new file mode 100755
index 0000000..fee2532
--- /dev/null
+++ b/bufrdc/bufrex.F
@@ -0,0 +1,347 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUFREX(KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     2                  KELEM,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+C
+C**** *BUFREX*
+C
+C
+C     PURPOSE.
+C     --------
+C          DECODE BUFR MESSAGE INTO FULLY EXPANDED FORM; RETURNING
+C     INFORMATION RELEVANT FOR ALL BUFR SECTIONS, EXPANDED VALUES,
+C     THEIR NAMES AND UNITS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUFREX(KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+C     1                   KELEM,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  INTEGER ARRAY CONTAINING BUFR MESSAGE
+C               *KELEM*   -  INTEGER (EXPECTED NUMBER OF EXPANDED ELEMENTS)
+C               *KVALS*   -  INTEGER (EXPECTED NUMBER OF DATA VALUES)
+C        OUTPUT:
+C               *KSUP*    -  INTEGER ARRAY OF 9 WORDS CONTAINING
+C                            SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES
+C                                           ARRAY, FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX
+C                                           OF VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C
+C               *KSEC0*   -  INTEGER ARRAY OF 3 WORDS CONTAINING
+C                            BUFR SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C
+C               *KSEC1*   -  INTEGER ARRAY OF AT LEAST 40 WORDS
+C                            CONTAINING BUFR SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(40) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  INTEGER ARRAY OF AT LEAST 64 WORDS
+C                            CONTAINING BUFR SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(47) RDB KEY
+C
+C               *KSEC3*   -  INTEGER ARRAY OF 4 WORDS CONTAINING
+C                            BUFR SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C
+C               *KSEC4*   -  INTEGER ARRAY OF 2 WORDS CONTAINING
+C                            BUFR SECTION 4 INFORMATION
+C                            KSEC4( 1)-- LENGTH OF SECTION 4 (BYTES)
+C                            KSEC4( 2)-- RESERVED
+C
+C               *CNAMES*  -  CHARACTER*64  ARRAY OF KELEM CONTAINING
+C                            BUFR TABLE B ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER*24 ARRAY OF KELEM CONTAINIG
+C                            BUFR TABLE B UNITS
+C               *VALUES*  -  REAL ARRAY OF KVALS CONTAINING EXPANDED
+C                            DATA VALUES
+C               *CVALS*   -  CHARACTER*80 ARRAY OF KVALS CONTAINING
+C                            BUFR CODE TABLE OR CCITTIA5 BUFR ELEMENTS
+C                            ENTRIES
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C          BUFR MESSAGE PASSED AS ARGUMENT TO THIS ROUTINE IS DECODED
+C     SECTION BY SECTION. SUPLEMENTARY INFORMATION AND EXPANDED DATA
+C     ARE RETURNED AS WELL AS ERROR CODE. DURING BIT PATTERN UNPACKING
+C     GBYTE AND GBYTES ROUTINES (VMS VERSION) ARE USED.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUEXS0   -  EXPANDS SECTION 0 OF BUFR MESSAGE
+C          BUEXS1   -  EXPANDS SECTION 1 OF BUFR MESSAGE
+C          BUEXS2   -  EXPANDS SECTION 2 OF BUFR MESSAGE
+C          BUEXS3   -  EXPANDS SECTION 3 OF BUFR MESSAGE
+C          BUGBTS   -  LOAD REQUIRED BUFR TABLES
+C          BUEXS4   -  EXPANDS SECTION 4 OF BUFR MESSAGE
+C          BUEXS5   -  EXPANDS SECTION 5 OF BUFR MESSAGE
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomdefc.F"
+#     include "bcomreq.F"
+#     include "bcomoff.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSUP(JSUP),KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+C
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 RQVAL
+      REAL*8 VAL
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+      REAL   RQVAL
+      REAL   VAL
+#endif
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*4  CECMWF,CUSER
+C
+      SAVE NWPTB1,NBPTB1
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      M0=1
+C
+      DO 101 I=1,JSEC0
+      KSEC0(I)=0
+ 101  CONTINUE
+C
+      DO 102 I=1,JSEC1
+      KSEC1(I)=0
+ 102  CONTINUE
+C
+      DO 103 I=1,JSEC3
+      KSEC3(I)=0
+ 103  CONTINUE
+C
+      DO 104 I=1,JSUP
+      KSUP(I)=0
+ 104  CONTINUE
+C
+      DO 105 I=1,JSEC4
+      KSEC4(I)=0
+ 105  CONTINUE
+C
+      DO 106 I=1,JSEC2
+      KSEC2(I)=0
+ 106  CONTINUE
+C
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUEVAR(KERR)
+         CECMWF='ECMF'
+      END IF
+C
+      IF(CUSER.NE.'USER') THEN
+         NREQ(1)=0
+         NREQ(2)=0
+         NRQL=0
+      END IF
+C     -----------------------------------------------------------------
+C*          2.  EXPAND SECTION 0.
+C               -----------------
+ 200  CONTINUE
+C
+      CALL BUEXS0( KBUFL,KBUFF,KSUP,KSEC0,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          3.   EXPAND SECTION 1.
+C                ------------------
+ 300  CONTINUE
+C
+      CALL BUEXS1( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          4.  EXPAND SECTION 2.
+C               -----------------
+ 400  CONTINUE
+C
+      CALL BUEXS2( KBUFL,KBUFF,KSUP,KSEC1,KSEC2,KERR )
+      IF(KERR.GT.0) RETURN
+C
+      CALL BUEXS33(KBUFL,KBUFF,KSEC3,KERR)
+      IF(KERR.GT.0) RETURN
+      
+      NWPTB1=NWPTB
+      NBPTB1=NBPTB
+C     ------------------------------------------------------------------
+C*          5.   LOAD BUFR TABLES.
+C                -----------------
+ 500  CONTINUE
+C
+      CALL BUGBTS(KSEC1,KERR)
+      IF(KERR.GT.0) RETURN
+C
+      OMULTI=.FALSE.
+      NSUBSET=1
+      IF(IAND(KSEC3(4),64).EQ.0.AND.KSEC3(3).GT.1) THEN
+C
+         OMULTI=.TRUE.
+         DO I=1,KSEC3(3)
+         NWT=0
+         M=0
+         NWPTB=NWPTB1
+         NBPTB=NBPTB1
+         NSUBSET=I
+         CALL BUEXS3(KBUFL,KBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,
+     1               KERR)
+         IF(KERR.GT.0) RETURN
+C
+         CALL BUEXS4(KBUFL ,KBUFF ,KSUP  ,KSEC3,KSEC4,
+     1               KELEM ,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+         IF(KERR.GT.0) RETURN
+         END DO
+
+         GO TO 800
+      END IF
+    
+C     ------------------------------------------------------------------
+C*          6.  EXPAND SECTION 3.
+C               -----------------
+ 600  CONTINUE
+C
+      CALL BUEXS3(KBUFL,KBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          7.   EXPAND SECTION 4.
+C                -----------------
+ 700  CONTINUE
+C
+      CALL BUEXS4(KBUFL ,KBUFF ,KSUP  ,KSEC3,KSEC4,
+     1            KELEM ,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          8.   EXPAND SECTION 5.
+C                -----------------
+ 800  CONTINUE
+C
+      CALL BUEXS5(KBUFL,KBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     -----------------------------------------------------------------
+C*          9.   SET TOTAL BUFR MESSAGE LENGTH.
+C                ------------------------------
+ 900  CONTINUE
+C
+      KSUP(8)=KSEC0(1)+KSEC1(1)+KSEC2(1)+KSEC3(1)+KSEC4(1)+4
+C
+C     -----------------------------------------------------------------
+      RETURN
+C
+      END
diff --git a/bufrdc/bugbts.F b/bufrdc/bugbts.F
new file mode 100755
index 0000000..39ea299
--- /dev/null
+++ b/bufrdc/bugbts.F
@@ -0,0 +1,299 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUGBTS( KSEC1,KERR )
+C
+C**** *BUGBTS*
+C
+C
+C     PURPOSE.
+C     --------
+C          LOAD BUFR TABLE B, D AND C ACCORDING TO EDITION AND VERSION
+C     OF BUFR CODE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUGBTS(KSEC1,KERR)*
+C
+C        OUTPUT:
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomct.F"
+#     include "bcomctc.F"
+#     include "bcomroot.F"
+#     include "bcomtabload.F"
+#     include "bcomtabloadc.F"
+C
+      CHARACTER*256 YTAB ,YTAC ,YTAD
+      CHARACTER*24 YTABB,YTABC,YTABD, CTABLE_LIST
+      CHARACTER*64 CTABBEN
+      CHARACTER*24 CTABBU
+      CHARACTER*64 CCTABBEN
+      CHARACTER*24 CCTABBU
+      CHARACTER*256 CROOT
+      CHARACTER*64 CTEXT
+C
+      LOGICAL*4  OPN
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+      DIMENSION KSEC1(JSEC1)
+C
+      SAVE OFIRST
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   GET BUFR TABLES/LOCAL BUFR TABLES.
+C                ----------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0) RETURN
+C
+C*          2.   SET UP BUFR TABLE FILE NAME.
+C                ----------------------------
+ 200  CONTINUE
+C
+C
+C             BUFR EDITION 2 NAMING CONVENTION
+C
+C             BXXXXXYYZZ , CXXXXXYYZZ , DXXXXXYYZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             XXXXX  - ORIGINATING CENTRE
+C             YY     - VERSION NUMBER OF MASTER TABLE
+C                      USED( CURRENTLY 2 )
+C             ZZ     - VERSION NUMBER OF LOCAL TABLE USED
+C
+C             BUFR EDITION 3 NAMING CONVENTION
+C
+C             BWWWXXXYYZZ , CWWWXXXYYZZ , DWWWXXXYYZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             WWW    - ORIGINATING SUB-CENTRE
+C             XXX    - ORIGINATING CENTRE
+C             YY     - VERSION NUMBER OF MASTER TABLE
+C                      USED( CURRENTLY 2 )
+C             ZZ     - VERSION NUMBER OF LOCAL TABLE USED
+C
+C
+C             BUFR EDITION 4 NAMING CONVENTION
+C
+C             BSSSWWWWWXXXXXYYYZZZ , CSSSWWWWWXXXXXYYYZZZ , DSSSWWWWWXXXXXYYYZZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             SSS    - MASTER TABLE NUMBER ( zero for WMO tables)
+C             WWWWWW - ORIGINATING SUB-CENTRE
+C             XXXXXX - ORIGINATING CENTRE
+C             YYY    - VERSION NUMBER OF MASTER
+C                      TABLE USED( CURRENTLY 12 )
+C             ZZZ    - VERSION NUMBER OF LOCAL TABLE USED
+C
+            IXX=KSEC1(3)
+            IYY=KSEC1(15)
+            IZZ=KSEC1(08)
+C           
+            IF(KSEC1(2).EQ.3) THEN
+               IWW=KSEC1(16)
+               ISS=KSEC1(14)
+            ELSEIF(KSEC1(2).EQ.4) THEN
+               IWW=KSEC1(16)
+               ISS=KSEC1(14)
+            ELSE
+               IWW=0
+               ISS=0
+            END IF
+C
+C        IF STANDARD TABLES USED, USE WMO ORIGINATING CENTRE ID
+C
+         IF(KSEC1(8).EQ.0.OR.KSEC1(8).EQ.255) THEN
+            IXX=0
+            IWW=0
+            IZZ=0
+         ENDIF
+C
+         IF(OFIRST) THEN
+            IF(IWW.EQ.NWWP.AND.IXX.EQ.NXXP.AND.IYY.EQ.NYYP.AND.
+     1         IZZ.EQ.NZZP.AND.ISS.EQ.NSSP) RETURN
+         END IF
+C
+         OFIRST=.TRUE.
+C
+         NSSP=ISS
+         NXXP=IXX
+         NYYP=IYY
+         NZZP=IZZ
+         NWWP=IWW
+C
+       WRITE(YTABB,'(A1,I3.3,2(I5.5),2(I3.3),A4)')
+     1             'B',ISS,IWW,IXX,IYY,IZZ,'.TXT'
+       WRITE(YTABC,'(A1,I3.3,2(I5.5),2(I3.3),A4)')
+     1             'C',ISS,IWW,IXX,IYY,IZZ,'.TXT'
+       WRITE(YTABD,'(A1,I3.3,2(I5.5),2(I3.3),A4)')
+     1             'D',ISS,IWW,IXX,IYY,IZZ,'.TXT'
+C
+C
+C      Find if table is already used
+C
+       DO I=1,JTMAX
+         IF(CTABLE_LIST(I).EQ.YTABB) THEN
+            CALL GET_TABLES(I)
+            RETURN
+         END IF
+       END DO
+       IF(OPRINT) THEN
+          IF(OCTABLE) THEN
+             WRITE(KNTN,'(A,1X,A,A,A,A))') 'BUFR TABLES TO BE LOADED ',
+     1       YTABB,',',YTABC,',',YTABD
+          ELSE
+             WRITE(KNTN,'(A,1X,A,A,A))') 'BUFR TABLES TO BE LOADED ',
+     1       YTABB,',',YTABD
+          END IF
+
+       END IF
+C     ----------------------------------------------------------------
+C*          3. OPEN AND READ FILES CONTAINING BUFR TABLES.
+C              -------------------------------------------
+ 300  CONTINUE
+C
+      I=INDEX(CROOT,' ')
+      IF(I.NE.0) I=I-1
+C
+C*          3.1 READ BUFR TABLE B.
+C               ------------------
+ 310  CONTINUE
+C
+      YTAB=CROOT(1:I)//YTABB
+C
+      CALL BTABLE(YTAB,YTABB,KERR)
+      IF(KERR.NE.0) RETURN
+C
+C
+C*          3.2 READ BUFR TABLE C.
+C               ------------------
+ 320  CONTINUE
+C
+       IF(OCTABLE) THEN
+          YTAC=CROOT(1:I)//YTABC
+C
+          CALL CTABLE(YTAC,KERR)
+          IF(KERR.NE.0) RETURN
+       END IF
+C
+C
+C*          3.3 READ BUFR TABLE D.
+C               ------------------
+ 330  CONTINUE
+C
+      YTAD=CROOT(1:I)//YTABD
+C
+      CALL DTABLE(YTAD,KERR)
+      IF(KERR.NE.0) RETURN
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/bugbytesR4.F b/bufrdc/bugbytesR4.F
new file mode 100755
index 0000000..4eb6031
--- /dev/null
+++ b/bufrdc/bugbytesR4.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE BUGBYTESR4(KSOURCE,DESTINATION,KSKIP,KWIDTH,
+     1                       KSKIPBETWEEN,KNUMBER)
+C
+C**** *BUGBYTESR4*
+C
+C
+C     PURPOSE.
+C     --------
+C          
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JULY 2008
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+      REAL*4 DESTINATION
+
+      CALL GBYTES(KSOURCE,DESTINATION,KSKIP,KWIDTH,KSKIPBETWEEN,KNUMBER)
+      RETURN
+      END
diff --git a/bufrdc/bugbytesR8.F b/bufrdc/bugbytesR8.F
new file mode 100755
index 0000000..c3a534c
--- /dev/null
+++ b/bufrdc/bugbytesR8.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE BUGBYTESR8(KSOURCE,DESTINATION,KSKIP,KWIDTH,
+     1                       KSKIPBETWEEN,KNUMBER)
+C
+C**** *BUGBYTESR8*
+C
+C
+C     PURPOSE.
+C     --------
+C          
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JULY 2008
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+      REAL*8 DESTINATION
+
+      CALL GBYTES(KSOURCE,DESTINATION,KSKIP,KWIDTH,KSKIPBETWEEN,KNUMBER)
+      RETURN
+      END
diff --git a/bufrdc/buget_opera_image.F b/bufrdc/buget_opera_image.F
new file mode 100755
index 0000000..70bda0a
--- /dev/null
+++ b/bufrdc/buget_opera_image.F
@@ -0,0 +1,314 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUGET_OPERA_IMAGE(KSEC1,KTDEXL,KTDEXP,
+     1      CNAMES,CUNITS, KELEM,KVALS,VALUES,CVALS,KTDEXL_IMG,
+     2      KTDEXP_IMG,CNAMES_IMG,CUNITS_IMG,KVALS_IMG,VALUES_IMG,
+     3      CVALS_IMG,KSIZE_IMG_BYTES,IMAGE,KPIXEL_SIZE,KERR)
+C
+C**** *BUGET_OPERA_IMAGE*
+C
+C
+C     PURPOSE.
+C     --------
+C          APPLY DELAYED REPETITIONS TO GET FULL IMAGE
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUGET_OPERA_IMAGE(KSEC1,KTDEXL,KTDEXP,CNAMES,CUNITS,
+C                  KELEM,,KVALS,VALUES,CVALS,
+C                  KTDEXL_IMG,KTDEXP_IMG,CNAMES_IMG,CUNITS_IMG,
+C                  KVALS_IMG,VALUES_IMG,CVALS_IMG,IMAGE,KPIXEL_SIZE,KERR)
+C
+C        INPUT :
+C               *KSEC1*      -  An integer array of at least 40 words containing Bufr Section 1
+C               *KTDEXL*     -  An integer variable containing number of expanded data descriptors
+C               *KTDEXP*     -  An integer array containing the list of KTDEXL data descriptors
+C               *CNAMES*     -  A CHARACTER*64  array of kelem containing element names
+C               *CUNITS*     -  A CHARACTER*24 array of kelem containig bufr table B units
+C               *KELEM*      -  An integer containing expected number of expanded elements
+C               *KVALS*      -  An integer containing expected number of data elelemnts
+C               *VALUES*     -  A REAL*8 array containing expanded values
+C               *CVALS*      -  A CHARACTER*80 array containing character values
+C        OUTPUT:
+C               *KTDEXL_IMG* - An integer variable containing number of expanded data descriptors
+C               *KTDEXP_IMG* - An integer array containing the list of KTDEXL_IMG data descriptors
+C               *CNAMES_IMG* - A CHARACTER*64  array of kelem containing element names
+C               *CUNITS_IMG* - A CHARACTER*24 array of kelem containig bufr table B units
+C               *KVALS_IMG*  - An integer containing  number pixels in IMAGE
+C               *VALUES_IMG* - A REAL*8 array containing expanded values
+C               *CVALS_IMG*  - A CHARACTER*80 array containing character values
+C               *IMAGE*      - Integer array containing image ( pixel values)
+C               *KPIXEL_SIZE*- Integer containing pixel size in bytes
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       02/04/2008
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+C
+      PARAMETER (JPIXEL=10000000)
+C
+      DIMENSION KSEC1(JSEC1)
+      INTEGER*4 IMAGE(*)
+      INTEGER*4 IPIXELS(JPIXEL)
+C     
+      DIMENSION KTDEXP(*)
+      DIMENSION KTDEXP_IMG(*)
+      REAL*8    VALUES_IMG(*)
+C
+      CHARACTER*64 CNAMES(*),CNAMES_IMG(*)
+      CHARACTER*24 CUNITS(*),CUNITS_IMG(*)
+      CHARACTER*80 CVALS(*) ,CVALS_IMG(*)
+C
+      CHARACTER*256 COUT1,COUT2,COUT3
+C
+#ifndef R_4
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   VALUES(KVALS)
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C
+      RVIND=1.7D38
+      EPS=10.D-8
+C     Create image
+c
+      IROW=0
+      DO I=1,KTDEXL
+      IF(KTDEXP(i).eq.005031) THEN
+         IROW=IROW+1
+      END IF
+      END DO
+
+C
+      I_N_BYTE=0
+      DO I=1,KTDEXL
+      IF(KTDEXP(i).eq.030001) THEN
+         I_N_BYTE=1
+      ELSEIF(KTDEXP(i).eq.030002) THEN
+         I_N_BYTE=1
+      ELSEIF(KTDEXP(i).eq.030004) THEN
+         I_N_BYTE=2 
+      END IF
+      END DO
+
+
+C     print*,'Size of pixel in bytes=',I_N_BYTE
+C     print*,'total number of rows=',irow
+
+      DO I=1,KTDEXL
+       IF(KTDEXP(I).EQ.005031.AND.KTDEXP(i-1).EQ.031002) THEN
+         IMAGE_START=I-1
+         GO TO 100
+       END IF
+      END DO
+c
+ 100  CONTINUE
+c
+      DO I=1,IMAGE_START-1
+      KTDEXP_IMG(I)=KTDEXP(I)
+      END DO
+
+      KTDEXL_IMG=IMAGE_START-1
+c
+C     print*,'KTDEXL_IMG=',KTDEXL_IMG
+C     print*,'image_start=',image_start
+C
+      DO I=1,IMAGE_START-1
+      VALUES_IMG(I)=VALUES(I)
+      CNAMES_IMG(I)=CNAMES(I)
+      CUNITS_IMG(I)=CUNITS(I)
+      END DO
+C
+C     DO I=1,IMAGE_START-1
+C     WRITE(IUNIT2,'(I6,1X,A64,E23.14E3,1x,a24)') I,CNAMES(I),
+C    c                                VALUES(I),CUNITS(I)
+C     END DO
+C
+      NBPW=JBPW
+      NWPT=1
+      NBPT=0
+      IMX=0
+      MAX=0
+      i0=0
+      DO I=IMAGE_START,KTDEXL
+      IF(KTDEXP(I).EQ.005031) THEN
+      END IF
+      IF(KTDEXP(I).EQ.030001.AND.KTDEXP(I-1).EQ.031012) THEN
+            I_REPEAT=NINT(VALUES(I-1))
+            DO J=1,I_REPEAT
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=255
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+            END DO
+      ELSEIF(KTDEXP(I).EQ.030002.AND.KTDEXP(I-1).EQ.031012) THEN
+            I_REPEAT=NINT(VALUES(I-1))
+            DO J=1,I_REPEAT
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=255
+               CALL BUPCK(NBPW,IMAGE(NWPT),255,NWPT,NBPT,8,IERR)
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+            END DO
+      ELSEIF(KTDEXP(i).EQ.030004.AND.KTDEXP(I-1).EQ.031012) THEN
+            I_REPEAT=NINT(VALUES(I-1))
+            DO J=1,I_REPEAT
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=65535
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+            END DO
+      ELSEIF(KTDEXP(I).EQ.030001.AND.KTDEXP(I-1).EQ.031011) THEN
+            I_REPEAT=NINT(VALUES(I-1))
+            DO J=1,I_REPEAT
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=255
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+            END DO
+      ELSEIF(KTDEXP(I).EQ.030002.AND.KTDEXP(I-1).EQ.031011) THEN
+            I_REPEAT=NINT(VALUES(I-1))
+            DO J=1,I_REPEAT
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=255
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+            END DO
+      ELSEIF(KTDEXP(I).EQ.030004.and.KTDEXP(I-1).EQ.031011) THEN
+            I_REPEAT=NINT(VALUES(I-1))
+            DO J=1,I_REPEAT
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=65535
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+            END DO
+      ELSEIF(KTDEXP(I).EQ.030001) THEN
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=255
+            else 
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+      ELSEIF(KTDEXP(I).EQ.030002) THEN
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=255
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+      ELSEIF(KTDEXP(I).EQ.030004) THEN
+            IMX=IMX+1
+            if(abs(VALUES(I)-rvind)/rvind.lt.eps) then
+               ipixels(IMX)=65355
+            else
+               IF(NINT(VALUES(I)).GT.MAX) MAX=NINT(VALUES(I))
+               IVAL=NINT(VALUES(I))
+               ipixels(IMX)=ival
+            end if
+      END IF
+      END DO
+C
+      KSIZE_IMG_BYTES=IMX*I_N_BYTE
+      KPIXEL_SIZE=I_N_BYTE
+      KVALS_IMG=IMX
+C
+      CALL SBYTES(IMAGE,IPIXELS,0,8,0,IMX)
+      
+C     print*,'max pixel value=',max
+C     print*,'number of pixels=',KVALS_IMG
+C     print*,'image size bytes=',KSIZE_IMG_BYTES
+C
+      GO TO 900
+C     -----------------------------------------------------------------
+C
+ 810  CONTINUE
+C
+      WRITE(*,'(1H ,A)') 'OPEN ERROR ON INPUT FILE'
+      GO TO 900
+C
+ 800  CONTINUE
+C
+      IF(IRET.EQ.-1) THEN
+         PRINT*,'NUMBER OF RECORDS PROCESSED ',N
+         PRINT*,'NUMBER OF OBSERVATIONS      ',IOBS
+      ELSE
+         PRINT*,' BUFR : ERROR= ',IERR
+      END IF
+C
+ 900  CONTINUE
+C
+C
+C     ------------------------------------------------------------------
+      RETURN
+      END
diff --git a/bufrdc/bugetbm.F b/bufrdc/bugetbm.F
new file mode 100755
index 0000000..04dfd91
--- /dev/null
+++ b/bufrdc/bugetbm.F
@@ -0,0 +1,217 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE BUGETBM(KBUFL,KBUFF,KSEC3,KBMP,KBMPL,KBV,KERR)
+C
+C**** *BUGETBM*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          CREATE BIT MAP TO RESOLVE MARKER OPERATORS.
+C
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUGETBM(KBUFL,KBUFF,KSEC3,KBMP,KBMPL,KBV,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KBMP     -  BIT MAP POINTER TO THE FIRST DATA PRESENT
+C                            INDICATOR
+C               *KBMPL    -  NUMBER OF  DATA PRESENT INDICATORS
+C
+C        OUTPUT:
+C               *KBV*     -  BIT MAP ARRAY
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACKS BIT PATTERN
+C          BUNPKS         - UNPACKS BIT PATTERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcombef.F"
+#     include "bcomwt.F"
+#     include "bcomwtc.F"
+#     include "bcomrq.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+      DIMENSION KBUFF(KBUFL),KBV(*)
+      DIMENSION KSEC3(JSEC3)
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION IMASK(8),ILIST(JELEM)
+C
+      DATA IMASK /1,2,4,8,16,32,64,128/
+C
+C
+C     ------------------------------------------------------------------
+C*          1.  CALCULATE WORD AND BIT POINTER TO FIRST
+C               ---------------------------------------
+C               DATA PRESENT INDICATOR.
+C               -----------------------
+ 100  CONTINUE
+C
+C
+      IF(KERR.GT.0) RETURN
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+      IF(IB.EQ.0) THEN
+C
+C        FOR UNCOMPRESSED DATA
+C
+         IBIT=NWPTB*NBPW+32+NBPTB
+         DO 101 I=1,KBMP-1
+         IBIT=IBIT+NWTDW(I)
+ 101     CONTINUE
+C
+         IWPT=IBIT/NBPW
+         IBPT=IBIT-IWPT*NBPW
+      ELSE
+C
+C        FOR COMPRESSED DATA
+C
+         IBIT=32+NBPTB
+         IWORD=IBIT/NBPW
+C
+         NWORDP(1)=NWPTB+IWORD
+         NBITP (1)=IBIT-IWORD*NBPW
+C
+         DO 102 I=2,KBMP
+C
+         IF(NWTDW(I-1).EQ.0) THEN
+            NBITP(I)=NBITP(I-1)
+            NWORDP(I)=NWORDP(I-1)
+            GO TO 102
+         END IF
+C
+         IWRD=NWORDP(I-1)
+         IBTP=NBITP (I-1)
+C
+         IBTP=IBTP+NWTDW(I-1)
+         IF(IBTP.GE.NBPW) THEN
+            IW=IBTP/NBPW
+            IBTP=IBTP-IW*NBPW
+            IWRD=IWRD+IW
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,IDWINC,IWRD,IBTP,6,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(IDWINC.GT.JBPW) THEN
+            KERR=15
+            WRITE(KNTN,*)  'BUPMRK :'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+C
+         IF(CWTU(I-1).EQ.'CCITTIA5') THEN
+            NWTIWS(I-1)=NWTDW(I-1)+6+N*IDWINC*8
+         ELSEIF(NWTEN(I-1).EQ.-999) THEN
+            NWTIWS(I-1)=NWTDW(I-1)+6+N*IDWINC*8
+         ELSE
+            NWTIWS(I-1)=NWTDW(I-1)+6+N*IDWINC
+         END IF
+C
+         IBIT = NBITP(I-1) + NWTIWS(I-1)
+         IWORD= IBIT/NBPW
+C
+         NBITP (I)= IBIT - IWORD*NBPW
+         NWORDP(I)= NWORDP(I-1) + IWORD
+ 102     CONTINUE
+C
+         IBPT=NBITP (KBMP)
+         IWPT=NWORDP(KBMP)
+      END IF
+C
+C*          2.  GET BIT MAP FROM DATA SECTION.
+C               ------------------------------
+ 200  CONTINUE
+C
+      IF(IB.EQ.0) THEN
+         CALL GBYTES(KBUFF(IWPT),KBV,IBPT,1,0,KBMPL)
+      ELSE
+         DO 201 I=1,KBMPL
+         CALL BUNPCK(NBPW,KBUFF,IR0,IWPT,IBPT,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KBUFF,IDWINC,IWPT,IBPT,6,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(IDWINC.GT.JBPW) THEN
+            KERR=15
+            WRITE(KNTN,*)  'BUPMRK:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+C
+         DO 202 K=1,KSEC3(3)
+         ILIST(K)=0
+ 202     CONTINUE
+C
+         IF(IDWINC.NE.0) THEN
+C
+C           UNPACK INCREMENTS
+C
+            CALL BUNPKS(NBPW,KBUFF,ILIST,IWPT,IBPT,
+     1                  IDWINC,0,KSEC3(3),KERR)
+            IF(KERR.GT.0) RETURN
+         END IF
+C
+         KBV(I)=IR0
+         IF(IDWINC.NE.0) KBV(I)=IR0+ILIST(1)
+ 201     CONTINUE
+C
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bugtll.F b/bufrdc/bugtll.F
new file mode 100755
index 0000000..aa50ec6
--- /dev/null
+++ b/bufrdc/bugtll.F
@@ -0,0 +1,267 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUGTLL(KELEM,KTDEXL,KTDEXP,KSEC1,KSEC3 ,
+     1                    KVALS, VALUES,  KERR)
+C
+C**** *BUGTLL*
+C
+C
+C     PURPOSE.
+C     --------
+C           Set section 1 info for Bufr Edition 4
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       06/11/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C
+      DIMENSION KSEC1(*),KSEC3(*)
+      DIMENSION KTDEXP(*)
+#ifndef R_4
+      REAL*8 VALUES(*)
+      REAL*8 RYEAR(10000)
+      REAL*8 RMONTH(10000)
+      REAL*8 RDAY(10000)
+      REAL*8 RHOUR(10000)
+      REAL*8 RMINUTE(10000)
+      REAL*8 RSECOND(10000)
+      REAL*8 RMINLAT, RMINLON, RMAXLAT, RMAXLON
+#else
+      REAL   VALUES(*)
+      REAL   RYEAR(10000)
+      REAL   RMONTH(10000)
+      REAL   RDAY(10000)
+      REAL   RHOUR(10000)
+      REAL   RMINUTE(10000)
+      REAL   RSECOND(10000)
+      REAL   RMINLAT, RMINLON, RMAXLAT, RMAXLON
+#endif
+      DIMENSION IDATE(10000)
+      DIMENSION ITIME(10000)
+C
+C     -----------------------------------------------------------------
+C
+C                1. FIND TIME,LAT,LONG
+C
+      IPYEAR=0
+      IPMONTH=0
+      IPDAY=0
+      IPHOUR=0
+      IPMINUTE=0
+      IPSECOND=0
+      IPLAT=0
+      IPLON=0
+C
+      DO I=1,KTDEXL
+        IF(KTDEXP(I).EQ.004001) THEN
+           IF(IPYEAR.EQ.0) IPYEAR=I
+        END IF
+        IF(KTDEXP(I).EQ.004002) THEN
+           IF(IPMONTH.EQ.0) IPMONTH=I
+        END IF
+        IF(KTDEXP(I).EQ.004003) THEN
+           IF(IPDAY.EQ.0) IPDAY=I
+        END IF
+        IF(KTDEXP(I).EQ.004004) THEN
+           IF(IPHOUR.EQ.0) IPHOUR=I
+        END IF
+        IF(KTDEXP(I).EQ.004005) THEN
+           IF(IPMINUTE.EQ.0) IPMINUTE=I
+        END IF
+        IF(KTDEXP(I).EQ.004006) THEN
+           IF(IPSECOND.EQ.0) IPSECOND=I
+        END IF
+        IF(KTDEXP(I).EQ.005001) THEN
+           IF(IPLAT.EQ.0) IPLAT=I
+        END IF
+        IF(KTDEXP(I).EQ.006001) THEN
+           IF(IPLON.EQ.0) IPLON=I
+        END IF
+        IF(KTDEXP(I).EQ.005002) THEN
+           IF(IPLAT.EQ.0) IPLAT=I
+        END IF
+        IF(KTDEXP(I).EQ.006002) THEN
+           IF(IPLON.EQ.0) IPLON=I
+        END IF
+      END DO
+C
+       CALL FMMH(IPLAT,IPLON,KELEM,VALUES,KSEC3,RMINLAT,RMINLON,
+     1           RMAXLAT,RMAXLON)
+C
+C      IF(RMINLON.LT.0) RMINLON=360.0-ABS(RMINLON)
+C      IF(RMAXLON.lt.0) RMAXLON=360.0-ABS(RMAXLON)
+C
+       KSEC1(31)=NINT(RMINLAT*100000)
+       KSEC1(32)=NINT(RMINLON*100000)
+       KSEC1(33)=NINT(RMAXLAT*100000)
+       KSEC1(34)=NINT(RMAXLON*100000)
+C
+       J=0
+       IF(IPYEAR.NE.0) THEN
+          DO I=1,KSEC3(3)
+             IYE=IPYEAR+(I-1)*KELEM
+             J=J+1
+             RYEAR(J)=VALUES(IYE)
+          END DO 
+       ELSE
+          DO I=1,KSEC3(3)
+          RYEAR(I)=0.
+          END DO
+       END IF
+       J=0
+       IF(IPMONTH.NE.0) THEN
+          DO I=1,KSEC3(3)
+             IMO=IPMONTH+(I-1)*KELEM
+             J=J+1
+             RMONTH(J)=VALUES(IMO)
+          END DO
+       ELSE
+          DO I=1,KSEC3(3)
+          RMONTH(I)=0.
+          END DO
+       END IF
+       J=0
+       IF(IPDAY.NE.0) THEN
+          DO I=1,KSEC3(3)
+             IDA=IPDAY+(I-1)*KELEM
+             J=J+1
+             RDAY(J)=VALUES(IDA)
+          END DO
+       ELSE
+          DO I=1,KSEC3(3)
+          RDAY(I)=0.
+          END DO
+       END IF
+       J=0
+       IF(IPHOUR.NE.0) THEN
+          DO I=1,KSEC3(3)
+             IHO=IPHOUR+(I-1)*KELEM
+             J=J+1
+             RHOUR(J)=VALUES(IHO)
+          END DO
+       ELSE
+          DO I=1,KSEC3(3)
+          RHOUR(I)=0.
+          END DO
+       END IF
+       J=0
+       IF(IPMINUTE.NE.0) THEN
+          DO I=1,KSEC3(3)
+             IMI=IPMINUTE+(I-1)*KELEM
+             J=J+1
+             RMINUTE(J)=VALUES(IMI)
+          END DO
+       ELSE
+          DO I=1,KSEC3(3)
+          RMINUTE(I)=0.
+          END DO
+       END IF
+       J=0
+       IF(IPSECOND.NE.0) THEN
+          DO I=1,KSEC3(3)
+             ISE=IPSECOND+(I-1)*KELEM
+             J=J+1
+             RSECOND(J)=VALUES(ISE)
+          END DO
+       ELSE
+          DO I=1,KSEC3(3)
+          RSECOND(I)=0.
+          END DO
+       END IF
+C
+       
+       DO I=1,KSEC3(3)
+       IDATE(I)=NINT(RYEAR(I))*10000+NINT(RMONTH(I))*100+NINT(RDAY(I))
+       ITIME(I)=NINT(RDAY(I))*1000000+NINT(RHOUR(I))*10000
+     1          +NINT(RMINUTE(I))*100 +NINT(RSECOND(I))
+       END DO
+C
+       IDMAX=IDATE(1)
+       ITMAX=ITIME(1)
+       IDMIN=IDATE(1)
+       ITMIN=ITIME(1)
+       IMAX=1
+       IMIN=1
+C
+       DO I=1,KSEC3(3)
+          IF(IDATE(I).GT.IDMAX) THEN
+             IDMAX=IDATE(I)
+             ITMAX=ITIME(I)
+             IMAX=I
+          ELSEIF(IDATE(I).EQ.IDMAX) THEN
+             IF(ITIME(I).GT.ITMAX) THEN
+                ITMAX=ITIME(I)
+                IMAX=I
+             END IF
+          END IF
+       END DO
+C
+       DO I=1,KSEC3(3)
+          IF(IDATE(I).LT.IDMIN) THEN
+             IDMIN=IDATE(I)
+             ITMIN=ITIME(I)
+             IMIN=I
+          ELSEIF(IDATE(I).EQ.IDMIN) THEN
+             IF(ITIME(I).LT.ITMIN) THEN
+                ITMIN=ITIME(I)
+                IMIN=I
+             END IF
+          END IF
+       END DO
+C
+       KSEC1(19)=NINT(RYEAR(IMIN))
+       KSEC1(20)=NINT(RMONTH(IMIN))
+       KSEC1(21)=NINT(RDAY(IMIN))
+       KSEC1(22)=NINT(RHOUR(IMIN))
+       KSEC1(23)=NINT(RMINUTE(IMIN))
+       KSEC1(24)=NINT(RSECOND(IMIN))
+C
+       KSEC1(25)=NINT(RYEAR(IMAX))
+       KSEC1(26)=NINT(RMONTH(IMAX))
+       KSEC1(27)=NINT(RDAY(IMAX))
+       KSEC1(28)=NINT(RHOUR(IMAX))
+       KSEC1(29)=NINT(RMINUTE(IMAX))
+       KSEC1(30)=NINT(RSECOND(IMAX))
+C
+
+      RETURN
+      END
diff --git a/bufrdc/buivar.F b/bufrdc/buivar.F
new file mode 100755
index 0000000..3446635
--- /dev/null
+++ b/bufrdc/buivar.F
@@ -0,0 +1,209 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUIVAR(KERR)
+C
+C**** *BUIVAR*
+C
+C
+C     PURPOSE.
+C     --------
+C         INITIALIZE CONSTANTS AND VARIABLES.
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *BUIVAR(KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C     GETENV  - GETS VALUE OF AN ENVIRONMENT VARIABLE.
+C     EMOSNUM - GIVES CURRENT EMOSLIB VERSION NUMBER.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/03/92.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmatb.F"
+#     include "bcmbef.F"
+#     include "bcmwork.F"
+#     include "bcmwt.F"
+#     include "bcmroot.F"
+#     include "bcmtabload.F"
+#     include "bcmtabloadc.F"
+C
+      CHARACTER*256 CROOT, HDEFAULT,CPRINT
+      CHARACTER*9   STD_OUT,YKNTN
+      CHARACTER*24 CTABLE_LIST,CCTABBU
+      CHARACTER*64 CCTABBEN
+      LOGICAL OPRINT
+C
+C
+      INTEGER IEMOSNM
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+
+#ifdef TABLE_PATH
+      DATA HDEFAULT / TABLE_PATH /
+#else
+      DATA HDEFAULT / '' /
+#endif
+
+C
+C     EXTERNAL FUNCTIONS
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE VARIABLES AND CONSTANTS.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      NJA= 0
+      M  =0
+      MM =0
+      N  =0
+      JCV=0
+      NBPW=JBPW
+      NWPT=0
+      NBPT=0
+      NWPTB=0
+      NBPTB=0
+      NVIND=2147483647
+      RVIND=1.7D38
+      EPS=10.D-7
+      NBENP=0
+      NLTVNP=0
+      NWWP=0
+      NXXP=0
+      NYYP=0
+      NZZP=0
+      NTC=0
+      NTT=0
+      NDWINC=0
+      NSCAM=0
+      NSCAM07=0
+      NDWINC07=0
+      N07=0
+      NAFDW=0
+      NFD=0
+      NWT=0
+      ODREPF=.FALSE.
+      N221=0
+      N40=0
+      MREL=0
+      NFCM=0
+      MBMP=0
+      MBMPL=0
+      OMARKER=.FALSE.
+      CROOT=' '
+      NREP=0
+      OREP=.false.
+      N08=0
+      NSSP=0
+C
+C     STANDARD OUTPUT UNIT NUMBER
+C
+      STD_OUT=' '
+      YKNTN=' '
+      CALL GETENV('STD_OUT',YKNTN)
+      INKNTN=INDEX(YKNTN,' ')
+      IF(INKNTN.EQ.1) THEN
+        KNTN=6
+      ELSE
+        READ(YKNTN,'(I3.3)') KNTN
+      END IF
+C
+      CROOT=' '
+      CALL GETENV('BUFR_TABLES',CROOT)
+      ILNG=INDEX(CROOT,' ')
+      IF(ILNG.LE.1) THEN
+        ILNG=INDEX(HDEFAULT,' ') - 1
+        IF(ILNG.GT.0) THEN
+	  CROOT = HDEFAULT(1:ILNG)//'/bufrtables/'
+        ELSE
+          CROOT='/home/ma/emos/tables/bufr/text/'
+C
+C         ADD VERSION NUMBER
+C
+          ILNG=INDEX(CROOT,' ')
+          IEMOSNM = EMOSNUM(1)
+          WRITE(CROOT(ILNG:ILNG+5),'(I6.6)') IEMOSNM
+          CROOT(ILNG+6:) = '/'
+        ENDIF
+      ENDIF
+C
+      CPRINT=' '
+      OPRINT=.TRUE.
+      CALL GETENV('PRINT_TABLE_NAMES',CPRINT)
+      ILN=INDEX(CPRINT,' ')
+      IF(ILN.LE.1) THEN
+         OPRINT=.TRUE.
+      ELSE
+         IF(CPRINT(1:ILN-1).EQ.'FALSE'.OR.
+     1      CPRINT(1:ILN-1).EQ.'false') OPRINT=.FALSE.
+      END IF
+
+      IF(OPRINT) THEN
+C
+      WRITE(KNTN,'(1H ,A)') '                  ECMWF '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,A)') '     BUFR ENCODING SOFTWARE',
+     1' VERSION -  7.2 '
+      WRITE(KNTN,'(1H ,A)') '           1 April  2007. '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A)') 'Your path for bufr tables is :'
+      WRITE(KNTN,'(1H ,A)')  CROOT(1:ILNG+6)
+      END IF
+C
+      DO 101 I=1,JBPW-2
+      NMASK(I)=2**I-1
+  101 CONTINUE
+      IF(JBPW.EQ.32) THEN
+         NMASK(31)=2147483647
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bunexs.F b/bufrdc/bunexs.F
new file mode 100755
index 0000000..c0fd3ae
--- /dev/null
+++ b/bufrdc/bunexs.F
@@ -0,0 +1,83 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUNEXS( KLEN)
+C
+C**** *BUNEXS*
+C
+C
+C     PURPOSE.
+C     --------
+C           SETS WORD (NWPT) AND BIT(NBPT) POINTERS AT THE BEGINING
+C     OF NEXT SECTION OF BUFR MESSAGE.
+C
+C**   INTERFACE.
+C     ----------
+C
+C            *CALL* *BUNEXS( KLEN)*
+C
+C        INPUT :
+C                 *KLEN*     - LENGTH OF SECTION IN BYTES
+C
+C     METHOD.
+C     -------
+C
+C          LENGTH OF EACH SECTION IS ADDED UP. WORD AND BIT POINTERS
+C     POINTING TO THE BEGINING OF NEXT SECTION ARE CALCULATED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       16/01/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET UP POINTERS AT THE BEGINING OF THE NEXT SECTION.
+C                -----------------------------------------------------
+ 100  CONTINUE
+C
+      IBIT = (NWPT - 1)*NBPW +NBPT +KLEN * 8 - 24
+C
+      NWPTB = IBIT/NBPW + 1
+      NBPTB = IBIT - (NWPTB - 1)*NBPW
+C
+      RETURN
+      END
diff --git a/bufrdc/bunpck.F b/bufrdc/bunpck.F
new file mode 100755
index 0000000..f10b436
--- /dev/null
+++ b/bufrdc/bunpck.F
@@ -0,0 +1,101 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUNPCK(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KERR)
+C
+C**** *BUNPCK*
+C
+C
+C     PURPOSE.
+C     --------
+C          PURPOSE OF THIS ROUTINE IS TO UNPACK BIT STRING OF
+C     KSIZE BITS, STARTED AT WORD KWPT OF ARRAY KSOURC AFTER
+C     SKIPPING KBPT BITS. RESULT IS PUT INTO KDEST. AT THE END
+C     POINTERS KWPT AND KBPT ARE ADJUSTED.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUNPCK(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KERR)*
+C
+C        INPUT :
+C              *KBPW*      - NUMBER OF BITS IN COMPUTER WORD
+C              *KSOURC*    - SOURCE (CONTINUOUS BIT STRING OF
+C                            ARBITRARY LENGTH)
+C              *KWPT*      - WORD POINTER
+C              *KBPT*      - BIT POINTER
+C              *KSIZE*     - NUMBER OF BITS TO BE EXTRACTED
+C        OUTPUT:
+C              *KDEST*     - DESTINATION
+C              *KERR*      - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C            NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C          GBYTE     - UNPACK BIT PATTERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      DIMENSION KSOURC(*)
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT BIT PATTERN.
+C                --------------------
+ 100  CONTINUE
+C
+      IF(KERR.NE.0) RETURN
+C
+      IF(KSIZE.GT.KBPW) THEN
+         KERR=13
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL GBYTE(KSOURC(KWPT),KDEST,KBPT,KSIZE)
+C
+C     ------------------------------------------------------------------
+C*          1.1  UPDATE WORD AND BIT POINTERS.
+C                -----------------------------
+ 110  CONTINUE
+C
+      KBPT = KBPT + KSIZE
+C
+      IF(KBPT.GE.KBPW) THEN
+         KBPT= KBPT -  KBPW
+         KWPT= KWPT +1
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bunpks.F b/bufrdc/bunpks.F
new file mode 100755
index 0000000..1279373
--- /dev/null
+++ b/bufrdc/bunpks.F
@@ -0,0 +1,104 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUNPKS(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KSKIPB,K,KERR)
+C
+C**** *BUNPKS*
+C
+C
+C     PURPOSE.
+C     --------
+C          PURPOSE OF THIS ROUTINE IS TO UNPACK BIT STRING OF
+C     KSIZE BITS, STARTED AT WORD KWPT OF ARRAY KSOURC AFTER
+C     SKIPPING KBPT BITS. RESULT IS PUT INTO KDEST. AT THE END
+C     POINTERS KWPT AND KBPT ARE ADJUSTED.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUNPKS(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KSKIPB,K,KERR)*
+C
+C        INPUT :
+C            *KBPW*      - NUMBER OF BITS PER COMPUTER WORD
+C            *KSOURC*    - SOURCE (CONTINUOUS BIT STRING OF
+C                          ARBITRARY LENGTH)
+C            *KWPT*      - WORD POINTER
+C            *KBPT*      - BIT POINTER
+C            *KSIZE*     - NUMBER OF BITS TO BE EXTRACTED
+C            *KSKIPB*    - NUMBER OF BITS TO SKIP BETWEEN ELEMENTS
+C            *K*         - ITERATION
+C        OUTPUT:
+C            *KDEST*     - DESTINATION
+C            *KERR*      - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C            NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C          GBYTES     - UNPACK BIT PATTERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      DIMENSION KSOURC(*),KDEST(*)
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT BIT PATTERN.
+C                --------------------
+ 100  CONTINUE
+C
+      IF(KERR.NE.0) RETURN
+C
+      IF(KSIZE.GT.KBPW) THEN
+         KERR=13
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL GBYTES(KSOURC(KWPT),KDEST,KBPT,KSIZE,KSKIPB,K)
+C
+C     ------------------------------------------------------------------
+C*          1.1  UPDATE WORD AND BIT POINTERS.
+C                -----------------------------
+ 110  CONTINUE
+C
+      KBPT = KBPT + K*(KSIZE+KSKIPB)
+C
+      IF(KBPT.GE.KBPW) THEN
+         IW  = KBPT/ KBPW
+         KBPT= KBPT - IW * KBPW
+         KWPT= KWPT +IW
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/buoctn.F b/bufrdc/buoctn.F
new file mode 100755
index 0000000..950ed46
--- /dev/null
+++ b/bufrdc/buoctn.F
@@ -0,0 +1,133 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUOCTN(KWPTB,KBPTB,KBUFL,KBUFF,KERR)
+C
+C**** *BUOCTN*
+C
+C
+C     PURPOSE.
+C     --------
+C             CALCULATE NUMBER OF OCTETS FROM BIT POSITION DEFINED BY
+C     KWPT,KBPT  AND KWPTB,KBPTB; NUMBER OF OCTETS MUST BE EVEN. IF IT IS
+C     NEEDED PADING WITH 0 BIT PERFORMS. NUMBER OF OCTETS IS WRITTEN AT
+C     BEGINIG OF THE SECTION.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUOCTN(KWPTB,KBPTB,KBUFL,KBUFF,KERR)*
+C
+C        INPUT :
+C               *KWPTB*    - WORD POINTER TO THE BEGINING OF SECTION
+C               *KBPTB*    - BIT  POINTER TO THE BEGINING OF SECTION
+C        OUTPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C     *METHOD.
+C      -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUPCK       - PACK BIT PATHERN AND RESETS POINTERS
+C          SBYTE       - PACK BIT PATHERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       07/10/87.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+C
+      DIMENSION KBUFF(KBUFL)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C*          1.    CALCULATE NUMBER OF OCTETS.
+C                 ---------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      IB   =(NWPT-1) * NBPW + NBPT
+      IBB  =(KWPTB-1)* NBPW + KBPTB
+C
+      IDIFB= IB - IBB
+C
+      NOCT = IDIFB/8
+      IBDW = IDIFB - NOCT*8
+C
+      IF(IBDW .NE.0)THEN
+         NOCT=NOCT+1
+         IBDW=8-IBDW
+         CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,IBDW,KERR)
+         IF(KERR.GT.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          2.  CHECK IF THERE ARE EVEN NUMBER OF OCTETS IN BLOCK.
+C               --------------------------------------------------
+ 200  CONTINUE
+C
+      IF(NEDN.LE.3) THEN
+         IF(MOD(NOCT,2).NE.0) THEN
+             IBDW = 8
+             CALL BUPCK(NBPW,KBUFF(NWPT),0,NWPT,NBPT,IBDW,KERR)
+             IF(KERR.GT.0) THEN
+               CALL BUERR(KERR)
+               RETURN
+             END IF
+             NOCT = NOCT+1
+         END IF
+      END IF
+C     ------------------------------------------------------------------
+C*          3.  WRITE NUMBER OF OCTETS AT BEGINING OF BLOCK.
+C               --------------------------------------------
+ 300  CONTINUE
+C
+      IBDW  = 24
+      CALL SBYTE(KBUFF(KWPTB),NOCT,KBPTB,IBDW)
+C
+      RETURN
+      END
diff --git a/bufrdc/buoper.F b/bufrdc/buoper.F
new file mode 100755
index 0000000..fb07c33
--- /dev/null
+++ b/bufrdc/buoper.F
@@ -0,0 +1,854 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUOPER(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)
+C
+C
+C**** *BUOPER*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS BUFR OPERATOR.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUOPER(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C               *KPT*    - POINTER TO KDATA ARRAY
+C               *KDLEN*  - DIMENSION OF KDATA ARRAY
+C               *KDATA*  - ARRAY CONTAINING DATA NEEDED FOR DESCRIPTOR
+C                          EXPANSION
+C               *KJ*     - POINTER T ARRAY KSTACK
+C               *KDD*    - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KSTACK* - LIST OF DESCRIPTORS
+C               *KERR*   - RETURN ERROR CODE
+C
+C     *METHOD.
+C      -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUUATB           - UPDATE AUGMENTED TABLE B
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmbef.F"
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      CHARACTER CWTEN*64,CWTU*24
+C
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   DETERMINE *F *X AND *Y.
+C                -----------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+C
+      IF( IF.NE.2 ) THEN
+         KERR=21
+         CALL BUERR(KERR)
+         WRITE(KNTN,*)  KDD,' IS TO BE OPEATOR'
+         GO TO 400
+      END IF
+C
+C*          1.1   CHANGE DATA WIDTH ?
+C                 -------------------
+ 110  CONTINUE
+C
+      IF(IX.EQ.1) THEN
+         NDWINC= NDWINC + (IY-128)
+         IF(IY.EQ.0) NDWINC=0
+         GO TO 400
+      END IF
+C
+C*          1.2   CHANGE SCALE ?
+C                 --------------
+ 120  CONTINUE
+C
+      IF(IX.EQ.2) THEN
+C
+C*          1.2.1  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         NSCAM=NSCAM + (IY-128)
+         IF(IY.EQ.0) NSCAM=0
+         GO TO 400
+      END IF
+C
+C*          1.3  CHANGE REFERENCE VALUE ?
+C                ------------------------
+ 130  CONTINUE
+C
+      IF(IX.EQ.3) THEN
+C
+C*          1.3.1  UPDATE AUGMENTED TABLE B.
+C                  -------------------------
+         CALL BUAUG(KPT,KDLEN,KDATA,KJ,IY,KSTACK,KERR)
+         GO TO 400
+      END IF
+C
+C*          1.4   ADD ASSOCIATED FIELD ?
+C                 ----------------------
+ 140  CONTINUE
+C
+      IF(IX.EQ.4) THEN
+C
+C*          1.4.1   UPDATE ASSOCIATED FIELD WIDTH.
+C                   ------------------------------
+         IF(IY.EQ.0) THEN
+            NFD=NFD-1
+            IF(NFD.LT.0) THEN
+               KERR=51
+               CALL BUERR(KERR)
+               RETURN
+            ELSEIF(NFD.EQ.0) THEN
+               NAFDW=0
+            END IF
+         ELSE
+            NFD=NFD+1
+            NAFDWA(NFD)=IY
+         END IF
+         GO TO 400
+      END IF
+C
+C*          1.5   SIGNIFY CHARACTER ?
+C                 -------------------
+ 150  CONTINUE
+C
+      IF(IX.EQ.5) THEN
+C
+C*          1.5.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+C         CWTEN(NWT)='CHARACTERS'
+C         CWTU (NWT)=' '
+         NWTR (NWT)= 0
+         NWTDW(NWT)= IY * 8
+         NWTEN(NWT)=658367
+         M=M+1
+         GO TO 400
+      END IF
+C
+C*          1.5.2 SIGNIFY DATA WIDTH FOR IMMEDISTELY
+C                 FOLLOWED LOCAL DESCRIPTOR
+C
+ 152  CONTINUE
+C
+      IF(IX.EQ.6) THEN
+         NWT = NWT + 1
+         KJ=KJ+1
+C         CWTEN(NWT)='UNKNOWN'
+C         CWTU (NWT)='UNKNOWN'
+         NWTR (NWT)= KSTACK(KJ)
+         NWTDW(NWT)= IY
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= NVIND
+         M=NWT
+C
+C        CHECK IF LOCAL TABLE ENTRY KNOWN
+C        --------------------------------
+C
+C         DO 153 I=1,JTAB
+C         IF(NWTR(NWT).EQ.NTABBTR(I)) THEN
+C            CWTEN(NWT)=CTABBEN(I)
+C            CWTU (NWT)=CTABBU (I)
+C            IF(CWTU(NWT)(1:3).EQ.'CCI') NWTEN(NWT)=65367
+C            NWTS (NWT)=NTABBS (I)
+C            NWTRV(NWT)=NTABBRV(I)
+C            NWTDW(NWT)=NTABBDW(I)
+C            NWTEN(NWT)=NTABBTR(I)
+C            GO TO 400
+C         END IF
+C  153    CONTINUE
+C
+         GO TO 400
+      END IF
+C
+      IF(IX.EQ.7) THEN
+C
+C*          1.5.4  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         IF(IY.EQ.0) THEN
+            N07     =0
+            NSCAM07 =0
+            NDWINC07=0
+         ELSE
+            N07=IY
+            NSCAM07 =IY
+            NDWINC07=((10*IY)+2)/3
+         END IF
+         GO TO 400
+      END IF
+
+
+      IF(IX.EQ.8) THEN
+C
+C*          1.5.5  UPDATE DATA WIDTH FOR CCITTIA5
+C                  ------------------------------
+C
+         IF(IY.EQ.0) THEN
+            N08 =0
+         ELSE
+            N08=IY
+         END IF
+         GO TO 400
+      END IF
+
+C
+C*          1.6   QUALITY INFORMATION FOLLOWS.
+C                 ----------------------------
+ 160  CONTINUE
+C
+      IF(IX.EQ.62) THEN
+C
+         IF(IY.EQ.0) GO TO 400
+C
+C*          1.7.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+C         CWTEN(NWT)='QUALITY INFORMATION FOLLOW'
+C         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= KDD
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          2.  PROCESSING NEW OPERATORS.
+C               -------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1   DATA NOT PRESENT.
+C                 -----------------
+ 210  CONTINUE
+C
+      IF(IX.EQ.21) THEN
+         N221=IY
+         GO TO 400
+      END IF
+C
+C
+C*          2.2   QUALITY INFORMATION FOLLOWS.
+C                 ----------------------------
+ 220  CONTINUE
+C
+      IF(IX.EQ.22) THEN
+C
+C*          1.7.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+C         CWTEN(NWT)='QUALITY INFORMATION FOLLOW'
+C         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 222000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          2.3   SUBSTITUTED VALUES FOLLOWS.
+C                 ---------------------------
+ 230  CONTINUE
+C
+      IF(IX.EQ.23) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+C            CWTEN(NWT)='SUBSTITUTED VALUES FOLLOW'
+C            CWTU (NWT)=' '
+            NWTDW(NWT)=0
+            NWTR (NWT)=223000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+C               CWTEN(NWT)='ASSOCIATED FIELD'
+C               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+C            CWTEN(NWT)='SUBSTITUTED VALUE MARKER'
+C            CWTU (NWT)=' '
+C            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+C            NWTRV(NWT)= 0
+C            NWTEN(NWT)= 0
+C            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C
+C*          2.4   FIRST ORDER STATISTICS FOLLOWS.
+C                 -------------------------------
+ 240  CONTINUE
+C
+      IF(IX.EQ.24) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+C            CWTEN(NWT)='FIRST ORDER STATISTICS FOLLOW'
+C            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=224000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+C               CWTEN(NWT)='ASSOCIATED FIELD'
+C               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+C            CWTEN(NWT)='FIRST ORDER STATISTICS VALUE MARKER'
+C            CWTU (NWT)=' '
+C            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+C            NWTRV(NWT)= 0
+C            NWTEN(NWT)= 0
+C            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*          2.5   DIFFERENCE STATISTICAL VALUES FOLLOW.
+C                 -------------------------------------
+ 250  CONTINUE
+C
+      IF(IX.EQ.25) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+C            CWTEN(NWT)='DIFFERENCE STATISTICAL VALUES FOLLOW'
+C            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=225000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+C               CWTEN(NWT)='ASSOCIATED FIELD'
+C               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+C            CWTEN(NWT)='DIFFERENCE STATISTICS VALUE MARKER'
+C            CWTU (NWT)=' '
+C            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+C            NWTRV(NWT)= 0
+C            NWTEN(NWT)= 0
+C            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C
+C*          2.6   REPLACED/RETAINED VALUES FOLLOWS.
+C                 ---------------------------------
+ 260  CONTINUE
+C
+      IF(IX.EQ.32) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+C            CWTEN(NWT)='REPLACE/RETAINED VALUES FOLLOW'
+C            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=232000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+C               CWTEN(NWT)='ASSOCIATED FIELD'
+C               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+C            CWTEN(NWT)='REPLACE/RETAINED VALUE MARKER'
+C            CWTU (NWT)=' '
+C            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+C            NWTRV(NWT)= 0
+C            NWTEN(NWT)= 0
+C            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*          2.7   CANCEL BACKWARD DATA REFERENCE.
+C                 -------------------------------
+ 270  CONTINUE
+C
+      IF(IX.EQ.35) THEN
+C
+C*          2.7.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+C         CWTEN(NWT)='CANCEL BACKWARD DATA REFERENCE'
+C         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 235000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+C
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C*          2.8   DEFINE BACKWARD REFERENCE BIT MAP.
+C                 ----------------------------------
+ 280  CONTINUE
+C
+      IF(IX.EQ.36) THEN
+C
+C*          2.8.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+C         CWTEN(NWT)='BACKWARD REFERENCE BIT MAP'
+C         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 236000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+C
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C*          2.9   DEFINE BACKWARD REFERENCE BIT MAP.
+C                 ----------------------------------
+ 290  CONTINUE
+C
+      IF(IX.EQ.37) THEN
+         IF(IY.EQ.0) THEN
+C
+C*          2.8.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+C            CWTEN(NWT)='USE PREVIOUSLY DEFINED BIT MAP'
+C            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 237000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          2.8.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+C            CWTEN(NWT)='CANCEL PREDEFINED BIT MAP'
+C            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+
+         END IF
+      END IF
+C
+      IF(IX.EQ.9) THEN
+         IF(IY.EQ.0) THEN
+            N40=0
+         ELSE
+            N40=IY
+         END IF
+C
+         GO TO 400
+      END IF
+C
+C
+C*    5. DEFINE EVENT
+C        ------------
+ 500  CONTINUE
+C
+      IF(IX.EQ.41) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.1.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='DEFINE EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 241000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.1.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL DEFINE EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*        5.1  DEFINE CONDITIONING EVENT
+C              -------------------------
+ 510  CONTINUE
+C
+      IF(IX.EQ.42) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.1.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='DEFINE CONDITIONING EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 242000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.1.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL DEFINE CONDITIONING EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*        5.2  DEFINE CONDITIONING EVENT
+C              -------------------------
+ 520  CONTINUE
+C
+      IF(IX.EQ.43) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.2.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CATEGORICAL FORECAST VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 243000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.2.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL CATEGORICAL FORECAST VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+
+C     ------------------------------------------------------------------
+C
+ 300  CONTINUE
+C
+      KERR=22
+      WRITE(KNTN,*)  'BUOPER:'
+      CALL BUERR(KERR)
+C
+C     ------------------------------------------------------------------
+C
+ 400  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buoperc.F b/bufrdc/buoperc.F
new file mode 100755
index 0000000..d7ceed8
--- /dev/null
+++ b/bufrdc/buoperc.F
@@ -0,0 +1,852 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUOPERC(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)
+C
+C
+C**** *BUOPERC*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS BUFR OPERATOR.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUOPERC(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C               *KPT*    - POINTER TO KDATA ARRAY
+C               *KDLEN*  - DIMENSION OF KDATA ARRAY
+C               *KDATA*  - ARRAY CONTAINING DATA NEEDED FOR DESCRIPTOR
+C                          EXPANSION
+C               *KJ*     - POINTER T ARRAY KSTACK
+C               *KDD*    - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KSTACK* - LIST OF DESCRIPTORS
+C               *KERR*   - RETURN ERROR CODE
+C
+C     *METHOD.
+C      -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUUATB           - UPDATE AUGMENTED TABLE B
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmbef.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   DETERMINE *F *X AND *Y.
+C                -----------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+C
+      IF( IF.NE.2 ) THEN
+         KERR=21
+         CALL BUERR(KERR)
+         WRITE(KNTN,*) KDD,' IS TO BE OPEATOR'
+         GO TO 400
+      END IF
+C
+C*          1.1   CHANGE DATA WIDTH ?
+C                 -------------------
+ 110  CONTINUE
+C
+      IF(IX.EQ.1) THEN
+         NDWINC= NDWINC + (IY-128)
+         IF(IY.EQ.0) NDWINC=0
+         GO TO 400
+      END IF
+C
+C*          1.2   CHANGE SCALE ?
+C                 --------------
+ 120  CONTINUE
+C
+      IF(IX.EQ.2) THEN
+C
+C*          1.2.1  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         NSCAM=NSCAM + (IY-128)
+         IF(IY.EQ.0) NSCAM=0
+         GO TO 400
+      END IF
+C
+C*          1.3  CHANGE REFERENCE VALUE ?
+C                ------------------------
+ 130  CONTINUE
+C
+      IF(IX.EQ.3) THEN
+C
+C*          1.3.1  UPDATE AUGMENTED TABLE B.
+C                  -------------------------
+         CALL BUAUG(KPT,KDLEN,KDATA,KJ,IY,KSTACK,KERR)
+         GO TO 400
+      END IF
+C
+C*          1.4   ADD ASSOCIATED FIELD ?
+C                 ----------------------
+ 140  CONTINUE
+C
+      IF(IX.EQ.4) THEN
+C
+C*          1.4.1   UPDATE ASSOCIATED FIELD WIDTH.
+C                   ------------------------------
+         IF(IY.EQ.0) THEN
+            NFD=NFD-1
+            IF(NFD.LT.0) THEN
+               KERR=51
+               CALL BUERR(KERR)
+               RETURN
+            ELSEIF(NFD.EQ.0) THEN
+               NAFDW=0
+            END IF
+         ELSE
+            NFD=NFD+1
+            NAFDWA(NFD)=IY
+         END IF
+         GO TO 400
+      END IF
+
+C
+C*          1.5   SIGNIFY CHARACTER ?
+C                 -------------------
+ 150  CONTINUE
+C
+      IF(IX.EQ.5) THEN
+C
+C*          1.5.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='CHARACTERS'
+         CWTU (NWT)=' '
+         NWTR (NWT)= 0
+         NWTDW(NWT)= IY * 8
+         NWTEN(NWT)=658367
+         M=M+1
+         GO TO 400
+      END IF
+C
+C*          1.5.2 SIGNIFY DATA WIDTH FOR IMMEDISTELY
+C                 FOLLOWED LOCAL DESCRIPTOR
+C
+ 152  CONTINUE
+C
+      IF(IX.EQ.6) THEN
+         NWT = NWT + 1
+         KJ=KJ+1
+         CWTEN(NWT)='UNKNOWN'
+         CWTU (NWT)='UNKNOWN'
+         NWTR (NWT)= KSTACK(KJ)
+         NWTDW(NWT)= IY
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= NVIND
+         M=NWT
+C
+C        CHECK IF LOCAL TABLE ENTRY KNOWN
+C        --------------------------------
+C
+C         DO 153 I=1,JTAB
+C         IF(NWTR(NWT).EQ.NTABBTR(I)) THEN
+C            CWTEN(NWT)=CTABBEN(I)
+C            CWTU (NWT)=CTABBU (I)
+C            IF(CWTU(NWT)(1:3).EQ.'CCI') NWTEN(NWT)=65367
+C            NWTS (NWT)=NTABBS (I)
+C            NWTRV(NWT)=NTABBRV(I)
+C            NWTDW(NWT)=NTABBDW(I)
+C            NWTEN(NWT)=NTABBTR(I)
+C            GO TO 400
+C         END IF
+C  153    CONTINUE
+C
+         GO TO 400
+      END IF
+C
+      IF(IX.EQ.7) THEN
+C
+C*          1.5.4  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         IF(IY.EQ.0) THEN
+            N07     =0
+            NSCAM07 =0
+            NDWINC07=0
+         ELSE
+            N07=IY
+            NSCAM07 =IY
+            NDWINC07=((10*IY)+2)/3
+         END IF
+         GO TO 400
+      END IF
+
+      IF(IX.EQ.8) THEN
+C
+C*          1.5.5  UPDATE DATA WIDTH FOR CCITTIA5
+C                  ------------------------------
+C
+         IF(IY.EQ.0) THEN
+            N08     =0
+         ELSE
+            N07=IY
+         END IF
+         GO TO 400
+      END IF
+
+C
+C*          1.6   QUALITY INFORMATION FOLLOWS.
+C                 ----------------------------
+ 160  CONTINUE
+C
+      IF(IX.EQ.62) THEN
+C
+         IF(IY.EQ.0) GO TO 400
+C
+C*          1.7.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='QUALITY INFORMATION FOLLOW'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= KDD
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          2.  PROCESSING NEW OPERATORS.
+C               -------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1   DATA NOT PRESENT.
+C                 -----------------
+ 210  CONTINUE
+C
+      IF(IX.EQ.21) THEN
+         N221=IY
+         GO TO 400
+      END IF
+C
+C
+C*          2.2   QUALITY INFORMATION FOLLOWS.
+C                 ----------------------------
+ 220  CONTINUE
+C
+      IF(IX.EQ.22) THEN
+C
+C*          1.7.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='QUALITY INFORMATION FOLLOW'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 222000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          2.3   SUBSTITUTED VALUES FOLLOWS.
+C                 ---------------------------
+ 230  CONTINUE
+C
+      IF(IX.EQ.23) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='SUBSTITUTED VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)=0
+            NWTR (NWT)=223000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+            CWTEN(NWT)='SUBSTITUTED VALUE MARKER'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C
+C*          2.4   FIRST ORDER STATISTICS FOLLOWS.
+C                 -------------------------------
+ 240  CONTINUE
+C
+      IF(IX.EQ.24) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='FIRST ORDER STATISTICS FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=224000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+            CWTEN(NWT)='FIRST ORDER STATISTICS VALUE MARKER'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*          2.5   DIFFERENCE STATISTICAL VALUES FOLLOW.
+C                 -------------------------------------
+ 250  CONTINUE
+C
+      IF(IX.EQ.25) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='DIFFERENCE STATISTICAL VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=225000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+            CWTEN(NWT)='DIFFERENCE STATISTICS VALUE MARKER'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C
+C*          2.6   REPLACED/RETAINED VALUES FOLLOWS.
+C                 ---------------------------------
+ 260  CONTINUE
+C
+      IF(IX.EQ.32) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='REPLACE/RETAINED VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=232000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.JELEM) THEN
+                  KERR=30
+                  WRITE(KNTN,*)  'BUOPER:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+            CWTEN(NWT)='REPLACE/RETAINED VALUE MARKER'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*          2.7   CANCEL BACKWARD DATA REFERENCE.
+C                 -------------------------------
+ 270  CONTINUE
+C
+      IF(IX.EQ.35) THEN
+C
+C*          2.7.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='CANCEL BACKWARD DATA REFERENCE'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 235000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+C
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C*          2.8   DEFINE BACKWARD REFERENCE BIT MAP.
+C                 ----------------------------------
+ 280  CONTINUE
+C
+      IF(IX.EQ.36) THEN
+C
+C*          2.8.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='BACKWARD REFERENCE BIT MAP'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 236000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+C
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C*          2.9   DEFINE BACKWARD REFERENCE BIT MAP.
+C                 ----------------------------------
+ 290  CONTINUE
+C
+      IF(IX.EQ.37) THEN
+         IF(IY.EQ.0) THEN
+C
+C*          2.8.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='USE PREVIOUSLY DEFINED BIT MAP'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 237000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          2.8.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL PREDEFINED BIT MAP'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+
+         END IF
+      END IF
+C
+      IF(IX.EQ.9) THEN
+         IF(IY.EQ.0) THEN
+            N40=0
+         ELSE
+            N40=IY
+         END IF
+C
+         GO TO 400
+      END IF
+C
+C
+C*    5. DEFINE EVENT 
+C        ------------
+ 500  CONTINUE
+C
+      IF(IX.EQ.41) THEN 
+         IF(IY.EQ.0) THEN
+C
+C         5.1.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='DEFINE EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 241000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.1.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL DEFINE EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF 
+            GO TO 400
+         END IF
+      END IF
+C
+C*        5.1  DEFINE CONDITIONING EVENT
+C              -------------------------
+ 510  CONTINUE
+C
+      IF(IX.EQ.42) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.1.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='DEFINE CONDITIONING EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 242000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.1.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL DEFINE CONDITIONING EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C*        5.2  DEFINE CONDITIONING EVENT
+C              -------------------------
+ 520  CONTINUE
+C
+      IF(IX.EQ.43) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.2.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CATEGORICAL FORECAST VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 243000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.2.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL CATEGORICAL FORECAST VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C     ------------------------------------------------------------------
+C
+ 300  CONTINUE
+C
+      KERR=22
+      WRITE(KNTN,*)  'BUOPER:'
+      CALL BUERR(KERR)
+C
+C     ------------------------------------------------------------------
+C
+ 400  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/bupck.F b/bufrdc/bupck.F
new file mode 100755
index 0000000..e0fd633
--- /dev/null
+++ b/bufrdc/bupck.F
@@ -0,0 +1,127 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPCK(KBPW,KD,KS,KWPT,KBPT,KSI,KERR)
+C
+C**** *BUPCK*
+C
+C
+C     PURPOSE.
+C     --------
+C         PURPOSE OF THIS ROUTINE IS TO PACK VALUE *KS* IN
+C         *KSI* BITS, STARTED AT WORD KWPT OF ARRAY *KD* AFTER
+C         SKIPPING NBPT BITS.  AT THE END
+C         POINTERS *KWPT* AND *KBPT* ARE ADJUSTED.
+C
+C**   INTERFACE.
+C     ----------
+C
+C     *CALL* *BUPCK(KBPW,KD,KS,KWPT,KBPT,KSI,KERR)*
+C
+C        INPUT :
+C            *KS*    - SOURCE
+C            *KWPT*  - WORD POINTER
+C            *KWPT*  - BIT POINTER
+C            *KSI*   - NUMBER OF BITS ACCUPIED BY KS.
+C
+C        OUTPUT :
+C            *KD*    - DESTINATION ARRAY.
+C            *KERR*  - RETURN ERROR CODE
+C
+C     *METHOD.
+C      -------
+C
+C            NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C            *CALL SBYTE(KD,KS,KBPT,KSI)*
+C
+C            *KD*    - DESTINATION ARRAY.
+C            *KS*    - SOURCE
+C            *KBPT*  - POINTER TO BIT IN THE KD(KWPT)
+C            *KSI*   - NUMBER OF BITS ACCUPIED BY KS.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       09/06/86.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KD(*)
+      DIMENSION IMAXV(32)
+C
+      DATA IMAXV/1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,
+     1  16383,32767,65535,131071,262143,524287,1048575,2097151,
+     2  4194305,8388607,16777215,33554431,671108863,134217727,
+     3  268435455,536870911,1073741823,2147483647,2147483647/
+C
+C     ------------------------------------------------------------------
+C*          1.   SET UP BIT PATTERN.
+C                -------------------
+C
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      IF(KS.EQ.NVIND) KS=IMAXV(KSI)
+C
+      IF(KS.GT.IMAXV(KSI)) THEN
+         KERR=28
+         RETURN
+      END IF
+C
+      CALL SBYTE(KD,KS,KBPT,KSI)
+C
+C     ------------------------------------------------------------------
+C*          1.1  UPDATE WORD AND BIT POINTERS.
+C                -----------------------------
+ 110  CONTINUE
+C
+      KBPT = KBPT + KSI
+C
+      IF(KBPT.GE.KBPW) THEN
+         KBPT= KBPT - KBPW
+         KWPT= KWPT + 1
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bupkey.F b/bufrdc/bupkey.F
new file mode 100755
index 0000000..da99312
--- /dev/null
+++ b/bufrdc/bupkey.F
@@ -0,0 +1,437 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPKEY( KEY,KSEC1,KSEC2,KERR )
+C
+C**** *BUPKEY*
+C
+C
+C     PURPOSE.
+C     --------
+C          PACK LOCAL ECMWF INFORMATION (RDB KEY) INTO KSEC2 ARRAY.
+C
+C
+C**   INTERFACE.
+C     ----------
+C          *CALL* *BUPKEY(KEY,KSEC1,KSEC2,KERR)*
+C
+C        INPUT :
+C               *KEY*     -  ARRAY CONTAINING RDB INFORMATION
+C                            KEY( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KEY( 2)-- RDB TYPE
+C                            KEY( 3)-- RDB SUBTYPE
+C                            KEY( 4)-- YEAR
+C                            KEY( 5)-- MONTH
+C                            KEY( 6)-- DAY
+C                            KEY( 7)-- HOUR
+C                            KEY( 8)-- MINUTE
+C                            KEY( 9)-- SECOND
+C                            KEY(10)-- LONGITUDE1
+C                            KEY(11)-- LATITUDE1
+C                            KEY(12)-- LONGITUDE2
+C                            KEY(13)-- LATITUDE2
+C                            KEY(14)-- NUMBER OF SUBSETS
+C                            KEY(15)-- IDENT (NUMERIC)
+C                            KEY(16)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(17)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(18)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(19)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(20)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(21)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(22)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(23)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(24)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(25)-- TOTAL BUFR MESSAGE LENGTH
+C                            KEY(26)-- DAY    (RDB INSERTION)
+C                            KEY(27)-- HOUR   (RDB INSERTION)
+C                            KEY(28)-- MINUTE (RDB INSERTION)
+C                            KEY(29)-- SECOND (RDB INSERTION)
+C                            KEY(30)-- DAY    (MDB INSERTION)
+C                            KEY(31)-- HOUR   (MDB INSERTION)
+C                            KEY(32)-- MINUTE (MDB INSERTION)
+C                            KEY(33)-- SECOND (MDB INSERTION)
+C                            KEY(34)-- CORRECTION NUMBER
+C                            KEY(35)-- PART
+C                            KEY(36)-- 0
+C                            KEY(37)-- CORRECTION NUMBER
+C                            KEY(38)-- PART
+C                            KEY(39)-- 0
+C                            KEY(40)-- CORRECTION NUMBER
+C                            KEY(41)-- PART
+C                            KEY(42)-- 0
+C                            KEY(43)-- CORRECTION NUMBER
+C                            KEY(44)-- PART
+C                            KEY(45)-- 0
+C                            KEY(46)-- THE LOWEST Q/C % CONFIDENCE
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C        OUTPUT:
+C               *KSEC2*   -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(JSEC2) LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmdefc.F"
+C
+      CHARACTER*4 CECMWF,CUSER
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KSEC1(JSEC1),KSEC2(JSEC2),KEY(JKEY)
+      DIMENSION IDUM(8),KSEC3(JSEC3)
+C
+      DATA IDUM/8*0/
+
+C
+C*          1.  PACK LOCAL ADP CENTRE INFORMATION INTO KSEC2 ARRAY.
+C                --------------------------------------------------
+C
+      KERR=0
+C     
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUIVAR(KERR)
+         CECMWF='ECMF'
+      END IF
+
+C
+C      IF(KSEC1(3).EQ.98) THEN
+         IW=2
+         IB=0
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(2)       ,IW,IB, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(2).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(3)       ,IW,IB, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(3).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(4)       ,IW,IB,12,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(4).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(5)       ,IW,IB, 4,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(5).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(6)       ,IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(6).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(7)       ,IW,IB, 5,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(7).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(8)       ,IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(8).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(9)       ,IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(9).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),0            ,IW,IB, 1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(10)      ,IW,IB,26,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(10).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),0            ,IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(11)      ,IW,IB,25,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(11).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),0            ,IW,IB, 7,KERR)
+         IF(KERR.GT.0) RETURN
+C
+         IF(KEY(14).GT.1.OR.KEY(2).EQ.2.OR.KEY(2).EQ.3.OR.
+     1      KEY(2).EQ.12.OR.KEY(2).EQ.8) THEN
+            CALL BUPCK(NBPW,KSEC2(IW),KEY(12)   ,IW,IB,26,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR PACKING KEY(12).'
+               RETURN
+            END IF
+            CALL BUPCK(NBPW,KSEC2(IW),0         ,IW,IB, 6,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUPCK(NBPW,KSEC2(IW),KEY(13)   ,IW,IB,25,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR PACKING KEY(13).'
+               RETURN
+            END IF
+            CALL BUPCK(NBPW,KSEC2(IW),0         ,IW,IB, 7,KERR)
+            IF(KERR.GT.0) RETURN
+            IF(KEY(14).GT.255.OR.KEY(3).GE.121.AND.
+     1         KEY(3).LE.130.OR.KEY(3).EQ.31) THEN
+               CALL BUPCK(NBPW,KSEC2(IW),KEY(14),IW,IB,16,KERR)
+               IF(KERR.GT.0) THEN
+                  WRITE(KNTN,*)  'ERROR PACKING KEY(14).'
+                  RETURN
+               END IF
+               CALL BUPCK(NBPW,KSEC2(IW),KEY(15),IW,IB,16,KERR)
+               IF(KERR.GT.0) THEN
+                  WRITE(KNTN,*)  'ERROR PACKING KEY(15).'
+                  RETURN
+               END IF
+               CALL BUPKS(NBPW,KSEC2(IW),IDUM  ,IW,IB,8,0,4,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUPCK(NBPW,KSEC2(IW),0      ,IW,IB, 8,KERR)
+               IF(KERR.GT.0) RETURN
+            ELSE
+               CALL BUPCK(NBPW,KSEC2(IW),KEY(14),IW,IB, 8,KERR)
+               IF(KERR.GT.0) THEN
+                  WRITE(KNTN,*)  'ERROR PACKING KEY(14).'
+                  RETURN
+               END IF
+               CALL BUPCK(NBPW,KSEC2(IW),KEY(15),IW,IB,16,KERR)
+               IF(KERR.GT.0) THEN
+                  WRITE(KNTN,*)  'ERROR PACKING KEY(15).'
+                  RETURN
+               END IF
+               CALL BUPKS(NBPW,KSEC2(IW),IDUM      ,IW,IB,8,0,4,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUPCK(NBPW,KSEC2(IW),0      ,IW,IB,16,KERR)
+               IF(KERR.GT.0) RETURN
+            END IF
+            GO TO 140
+         ELSE
+            CALL BUPKS(NBPW,KSEC2(IW),KEY(16),IW,IB,8,0,9,KERR)
+            IF(KERR.GT.0) THEN
+               WRITE(KNTN,*)  'ERROR PACKING KEY(16).'
+               RETURN
+            END IF
+            CALL BUPKS(NBPW,KSEC2(IW),IDUM(1),IW,IB,8,0,8,KERR)
+            IF(KERR.GT.0) RETURN
+         END IF
+C
+C
+C*          1.4 SUB KEY INFORMATION.
+C               --------------------
+ 140  CONTINUE
+C
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(25),IW,IB,16,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(25).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(26),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(26).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(27),IW,IB, 5,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(27).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(28),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(28).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(29),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(29).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),0      ,IW,IB, 1,KERR)
+         IF(KERR.GT.0) RETURN
+C
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(30),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(30).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(31),IW,IB, 5,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(31).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(32),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(32).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(33),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(33).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),0      ,IW,IB, 1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(34),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(34).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(35),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(35).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(36),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(36).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(37),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(37).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(38),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(38).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(39),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(39).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(40),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(40).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(41),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(41).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(42),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(42).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(43),IW,IB, 6,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(43).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(44),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(44).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(45),IW,IB, 1,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(45).'
+            RETURN
+         END IF
+         CALL BUPCK(NBPW,KSEC2(IW),KEY(46),IW,IB, 8,KERR)
+         IF(KERR.GT.0) THEN
+            WRITE(KNTN,*)  'ERROR PACKING KEY(46).'
+            RETURN
+         END IF
+C
+C      ELSE
+C         WRITE(KNTN,'(1H )')
+C         WRITE(KNTN,'(1H ,A)') 'BUPKEY : KEY DEFINITION NOT PACKED.'
+C         WRITE(KNTN,'(1H )')
+C      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bupks.F b/bufrdc/bupks.F
new file mode 100755
index 0000000..f9afdf4
--- /dev/null
+++ b/bufrdc/bupks.F
@@ -0,0 +1,107 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPKS(KBPW,KDEST,KSOURC,KWPT,KBPT,KSIZE,KSKIPB,K,KERR)
+C
+C**** *BUPKS*
+C
+C
+C     PURPOSE.
+C     --------
+C          PURPOSE OF THIS ROUTINE IS TO PACK BIT STRING OF
+C     KSIZE BITS, STARTED AT WORD KWPT OF ARRAY KSOURC AFTER
+C     SKIPPINH KBPT BITS. RESULT IS PUT INTO KDEST. AT THE END
+C     POINTERS KWPT AND KBPT ARE ADJUSTED.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUPKS(KBPW,KDEST,KSOURC,KWPT,KBPT,KSIZE,KSKIPB,K,KERR)*
+C
+C
+C        INPUT :
+C            KBPW      - NUMBER OF BITS PER COMPUTER WORD
+C            KSOURC    - SOURCE (CONTINUOUS BIT STRING OF
+C                          ARBITRARY LENGTH)
+C            KWPT      - WORD POINTER
+C            KBPT      - BIT POINTER
+C            KSIZE     - NUMBER OF BITS USED FOR PACKING
+C            KSKIPB    - NUMBER OF BITS TO SKIP BETWEEN ELEMENTS
+C            K         - ITERATION
+C
+C        OUTPUT :
+C            KDEST     - DESTINATION
+C            KERR      - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C            NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C          SBYTES     - PACK BIT PATHERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      DIMENSION KDEST(*),KSOURC(*)
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT BIT PATTERN.
+C                --------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      IF(KSIZE.GT.KBPW) THEN
+         KERR= 34
+         WRITE(KNTN,*)  'BUPKS :'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL SBYTES(KDEST,KSOURC,KBPT,KSIZE,KSKIPB,K)
+C
+C     ------------------------------------------------------------------
+C*          1.1  UPDATE WORD AND BIT POINTERS.
+C                -----------------------------
+ 110  CONTINUE
+C
+      KBPT = KBPT + K*(KSIZE+KSKIPB)
+C
+      IF(KBPT.GE.KBPW) THEN
+         IW  = KBPT/ KBPW
+         KBPT= KBPT - IW * KBPW
+         KWPT= KWPT +IW
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/bupmrk.F b/bufrdc/bupmrk.F
new file mode 100755
index 0000000..f60aff8
--- /dev/null
+++ b/bufrdc/bupmrk.F
@@ -0,0 +1,738 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPMRK(KBUFL,KBUFF,KSEC3,KELEM,KERR)
+C
+C**** *BUPMRK*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS MARKER OPERATOR, RELACING IT WITH CORRESPONDING
+C         TABLE B ELEMENT DESCRIPTOR.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUPMRK(KBUFL,KBUFF,KSEC3,KELEM,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACKS BIT PATTERN
+C          BUNPKS         - UNPACKS BIT PATTERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcombef.F"
+#     include "bcomwt.F"
+#     include "bcomwtc.F"
+#     include "bcomrq.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KSEC3(JSEC3)
+      DIMENSION KBUFF(KBUFL),IBV(JELEM),ILIST(JELEM)
+      DIMENSION IMASK(8)
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C
+      SAVE IBV
+C
+C     ------------------------------------------------------------------
+C*          1.  FINED OPERATOR 223000 TO 237255.
+C               --------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+C           1.1 CHECK IF DATA ARE COMRESSED.
+C               ----------------------------
+ 110  CONTINUE
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+C*          1.2 FIND POSITION OF OPREATORS.
+C               ---------------------------
+ 120  CONTINUE
+C
+      M0OLD=M0
+      DO 121 J=M0OLD,M
+C
+      NR223=0
+      NR224=0
+      NR225=0
+      NR232=0
+C
+      IF(NWTR(J).EQ.222000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         M0=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 122 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+               I222=MBMP
+               NR222=MBMPL-MBMP+1
+C
+               CALL BUGETBM(KBUFL,KBUFF,KSEC3,I222,NR222,IBV,KERR)
+               IF(KERR.GT.0) RETURN
+C
+               GO TO 121
+            END IF
+ 122        CONTINUE
+         END IF
+         GO TO 121
+      END IF
+C
+      IF(NWTR(J).EQ.223000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         M0=J
+         NP223000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 123 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+C
+               I223=MBMP
+               NR223=MBMPL-MBMP+1
+C
+               CALL BUGETBM(KBUFL,KBUFF,KSEC3,I223,NR223,IBV,KERR)
+               IF(KERR.GT.0) RETURN
+C
+               GO TO 200
+            END IF
+ 123        CONTINUE
+         END IF
+         GO TO 200
+      END IF
+      IF(NWTR(J).EQ.224000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         M0=J
+         NP224000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 124 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+C
+               I224=MBMP
+               NR224=MBMPL-MBMP+1
+C
+               CALL BUGETBM(KBUFL,KBUFF,KSEC3,I224,NR224,IBV,KERR)
+               IF(KERR.GT.0) RETURN
+C
+               GO TO 300
+            END IF
+ 124        CONTINUE
+         END IF
+         GO TO 300
+      END IF
+      IF(NWTR(J).EQ.225000) THEN
+C
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         M0=J
+         NP225000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 125 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+C
+               I225=MBMP
+               NR225=MBMPL-MBMP+1
+C
+               CALL BUGETBM(KBUFL,KBUFF,KSEC3,I225,NR225,IBV,KERR)
+               IF(KERR.GT.0) RETURN
+C
+               GO TO 400
+            END IF
+ 125        CONTINUE
+         END IF
+         GO TO 400
+      END IF
+C
+      IF(NWTR(J).EQ.232000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         IF(MREL.EQ.0) MREL=J-1
+C
+         M0=J
+         NP232000=J
+C
+C        CHECK IF BACKWARD REFERENCE BIT MAP DEFINED
+C
+         IF(NWTR(J+1).EQ.236000) THEN
+            NP236000=J+1
+            OBF=.TRUE.
+            J2=J+2
+C
+C           DELAYED REPLICATION FACTOR CAN FOLLOW 236000
+C
+            IF(NWTR(J2).EQ.031001.OR.NWTR(J2).EQ.031000.OR.
+     1         NWTR(J2).EQ.031002) J2=J+3
+C
+            DO 126 I=J2,M
+            IF(NWTR(I).EQ.031031) THEN
+C
+C              FIND  FIRST POINTER TO DATA PRESENT INDICATOR
+C
+               IF(OBF) MBMP=I
+               OBF=.FALSE.
+            ELSE
+C
+C              LAST POINTER TO DATA PRESENT INDICATOR
+C
+               MBMPL=I-1
+C
+               I232=MBMP
+               NR232=MBMPL-MBMP+1
+C
+               CALL BUGETBM(KBUFL,KBUFF,KSEC3,I232,NR232,IBV,KERR)
+               IF(KERR.GT.0) RETURN
+C
+               GO TO 500
+            END IF
+ 126        CONTINUE
+         END IF
+         GO TO 500
+      END IF
+C
+C
+      IF(NWTR(J).EQ.235000) THEN
+C
+C        SET POINTER TO THE LAST DATA ELEMENT
+C
+         MREL=0
+         MBMP=0
+         MBMPL=0
+         M0=J
+C
+      END IF
+C
+      IF(NWTR(J).EQ.237255) THEN
+C
+C        CANCEL BACKWARD BIT MAP REFERENCE.
+C
+         MBMP=0
+         MBMPL=0
+C
+      END IF
+
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          2.  PROCESS SUBSTITUTED VALUES OPERATOR.
+C               ------------------------------------
+C
+ 200  CONTINUE
+C
+C*          2.1 FIND FIRST ACCURANCE OF 223255.
+C               -------------------------------
+ 210  CONTINUE
+C
+      NP223255=0
+      DO 211 I=NP223000,M
+      IF(NWTR(I).EQ.223255) THEN
+         NP223255=I
+         GO TO 220
+      END IF
+ 211  CONTINUE
+C
+      GO TO 121
+C
+C*          2.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 220  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I223=0
+         OF223=.TRUE.
+         DO 221 I=NP223000,NP223255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF223) THEN
+               I223=I
+               OF223=.FALSE.
+            END IF
+            NR223=NR223+1
+         END IF
+ 221     CONTINUE
+      ELSE
+         I223=MBMP
+         NR223=MBMPL-MBMP+1
+         GO TO 250
+      END IF
+C
+C*          2.3 CALCULATE WORD AND BIT POINTER TO FIRST
+C               ---------------------------------------
+C               DATA PRESENT INDICATOR.
+C               -----------------------
+ 230  CONTINUE
+C
+      CALL BUGETBM(KBUFL,KBUFF,KSEC3,I223,NR223,IBV,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          2.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 250  CONTINUE
+C
+      ISUBST=MREL-NR223+1
+C
+C*          2.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 260  CONTINUE
+C
+      DO 261 I=1,NR223
+      IF(IBV(I).EQ.0) THEN
+C
+ 262     CONTINUE
+C
+         IF(NWTR(NP223255).EQ.223255) THEN
+            NWTDW (NP223255)=NWTDW(ISUBST)
+            NWTR  (NP223255)=NWTR (ISUBST)
+            NWTRV (NP223255)=NWTRV(ISUBST)
+            NWTS  (NP223255)=NWTS (ISUBST)
+            CWTEN (NP223255)=CWTEN(ISUBST)
+            CWTU  (NP223255)=CWTU (ISUBST)
+            NWTEN (NP223255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP223255=NP223255+1
+         ELSE
+            NP223255=NP223255+1
+            GO TO 262
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 261  CONTINUE
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          3.  PROCESS FIRST ORDER STATISTICS OPERATOR.
+C               ----------------------------------------
+ 300  CONTINUE
+C
+C*          3.1 FIND FIRST ACCURANCE OD 224255.
+C               -------------------------------
+ 310  CONTINUE
+C
+      NP224255=0
+      DO 311 I=NP224000,M
+      IF(NWTR(I).EQ.224255) THEN
+         NP224255=I
+         GO TO 320
+      END IF
+ 311  CONTINUE
+C
+      GO TO 121
+C
+C*          3.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 320  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I224=0
+         OF224=.TRUE.
+         DO 321 I=NP224000,NP224255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF224) THEN
+               I224=I
+               OF224=.FALSE.
+            END IF
+            NR224=NR224+1
+         END IF
+ 321     CONTINUE
+      ELSE
+         I224=MBMP
+         NR224=MBMPL-MBMP+1
+         GO TO 350
+      END IF
+C
+C*          3.3 CALCULATE WORD AND BIT POINTER TO FIRST
+C               ---------------------------------------
+C               DATA PRESENT INDICATOR.
+C               -----------------------
+ 330  CONTINUE
+C
+      CALL BUGETBM(KBUFL,KBUFF,KSEC3,I224,NR224,IBV,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          3.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 350  CONTINUE
+C
+      ISUBST=MREL-NR224+1
+C
+C*          3.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 360  CONTINUE
+C
+      DO 361 I=1,NR224
+      IF(IBV(I).EQ.0) THEN
+C
+ 362     CONTINUE
+C
+         IF(NWTR(NP224255).EQ.224255) THEN
+            NWTDW (NP224255)=NWTDW(ISUBST)
+            NWTR  (NP224255)=NWTR (ISUBST)
+            NWTRV (NP224255)=NWTRV(ISUBST)
+            NWTS  (NP224255)=NWTS (ISUBST)
+            CWTEN (NP224255)=CWTEN(ISUBST)
+            CWTU  (NP224255)=CWTU (ISUBST)
+            NWTEN (NP224255)=NWTEN(ISUBST)
+            ISUBST=ISUBST+1
+            NP224255=NP224255+1
+         ELSE
+            NP224255=NP224255+1
+            GO TO 362
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 361  CONTINUE
+C
+      GO TO 121
+C
+C
+C     -----------------------------------------------------------------
+C*          4.  PROCESS DIFFERENCE STATISTICS OPERATOR.
+C               ---------------------------------------
+ 400  CONTINUE
+C
+C
+C*          4.1 FIND FIRST ACCURANCE OD 223255.
+C               -------------------------------
+ 410  CONTINUE
+C
+      NP225255=0
+      DO 411 I=NP225000,M
+      IF(NWTR(I).EQ.225255) THEN
+         NP225255=I
+         GO TO 420
+      END IF
+ 411  CONTINUE
+C
+      GO TO 121
+C
+C*          4.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 420  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I225=0
+         OF225=.TRUE.
+         DO 421 I=NP225000,NP225255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF225) THEN
+               I225=I
+               OF225=.FALSE.
+            END IF
+            NR225=NR225+1
+         END IF
+ 421     CONTINUE
+      ELSE
+         I225=MBMP
+         NR225=MBMPL-MBMP+1
+         GO TO 450
+      END IF
+C
+C*          4.3 CALCULATE WORD AND BIT POINTER TO FIRST
+C               ---------------------------------------
+C               DATA PRESENT INDICATOR.
+C               -----------------------
+ 430  CONTINUE
+C
+      CALL BUGETBM(KBUFL,KBUFF,KSEC3,I225,NR225,IBV,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          4.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 450  CONTINUE
+C
+      ISUBST=MREL-NR225+1
+C
+C*          4.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 460  CONTINUE
+C
+      DO 461 I=1,NR225
+      IF(IBV(I).EQ.0) THEN
+C
+ 462     CONTINUE
+C
+         IF(NWTR(NP225255).EQ.225255) THEN
+            NWTR  (NP225255)=NWTR (ISUBST)
+C
+C           CHANGE REFERENCE VALUE TO BE CENTRED AROUND ZERO
+C           AND INCREASE DATA WIDTH BY 1
+C
+            IF(NWTEN(ISUBST).NE.-999) THEN
+               NWTRV (NP225255)=-2**NWTDW(ISUBST)
+               NWTDW (NP225255)=NWTDW(ISUBST)+1
+            ELSE
+               NWTRV (NP225255)=NWTDW(ISUBST)
+               NWTDW (NP225255)=NWTDW(ISUBST)
+               NWTEN (NP225255)=NWTEN(ISUBST)
+            END IF
+C
+            NWTS  (NP225255)=NWTS (ISUBST)
+            CWTEN (NP225255)=CWTEN(ISUBST)
+            CWTU  (NP225255)=CWTU (ISUBST)
+            ISUBST=ISUBST+1
+            NP225255=NP225255+1
+         ELSE
+            NP225255=NP225255+1
+            GO TO 462
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 461  CONTINUE
+C
+      GO TO 121
+C
+C     -----------------------------------------------------------------
+C*          5.  PROCESS REPLACE/RETAINED OPERATOR.
+C               ----------------------------------
+ 500  CONTINUE
+C
+C
+C*          5.1 FIND FIRST ACCURANCE OD 232255.
+C               -------------------------------
+ 510  CONTINUE
+C
+      NP232255=0
+      DO 511 I=NP232000,M
+      IF(NWTR(I).EQ.232255) THEN
+         NP232255=I
+         GO TO 520
+      END IF
+ 511  CONTINUE
+C
+      GO TO 121
+C
+C*          5.2 COUNT NUMBER OF DATA PRESENT INDICATORS.
+C               ----------------------------------------
+ 520  CONTINUE
+C
+      IF(MBMP.EQ.0) THEN
+         I232=0
+         OF232=.TRUE.
+         DO 521 I=NP232000,NP232255
+         IF(NWTR(I).EQ.031031) THEN
+            IF(OF232) THEN
+               I232=I
+               OF232=.FALSE.
+            END IF
+            NR232=NR232+1
+         END IF
+ 521     CONTINUE
+      ELSE
+         I232=MBMP
+         NR232=MBMPL-MBMP+1
+         GO TO 550
+      END IF
+C
+C*          5.3 CALCULATE WORD AND BIT POINTER TO FIRST
+C               ---------------------------------------
+C               DATA PRESENT INDICATOR.
+C               -----------------------
+ 530  CONTINUE
+C
+      CALL BUGETBM(KBUFL,KBUFF,KSEC3,I232,NR232,IBV,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C*          5.5 DEFINE POINTER REFERING BACK TO DATA.
+C               -------------------------------------
+ 550  CONTINUE
+C
+      ISUBST=MREL-NR232+1
+C
+C*          5.6 REPLACE MARKERS WITH CORRESPONDING DATA WIDTHS.
+C               -----------------------------------------------
+C
+ 560  CONTINUE
+C
+      DO 561 I=1,NR232
+      IF(IBV(I).EQ.0) THEN
+C
+ 562     CONTINUE
+C
+         IF(NWTR(NP232255).EQ.232255) THEN
+            NWTDW (NP232255)=NWTDW(ISUBST)
+            NWTR  (NP232255)=NWTR (ISUBST)
+            NWTRV (NP232255)=NWTRV(ISUBST)
+            NWTS  (NP232255)=NWTS (ISUBST)
+            CWTEN (NP232255)=CWTEN(ISUBST)
+            CWTU  (NP232255)=CWTU (ISUBST)
+            ISUBST=ISUBST+1
+            NP232255=NP232255+1
+         ELSE
+            NP232255=NP232255+1
+            GO TO 562
+         END IF
+      ELSE
+         ISUBST=ISUBST+1
+      END IF
+ 561  CONTINUE
+C
+C     -----------------------------------------------------------------
+ 121  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buprco.F b/bufrdc/buprco.F
new file mode 100755
index 0000000..b972af5
--- /dev/null
+++ b/bufrdc/buprco.F
@@ -0,0 +1,861 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRCO(KBUFL,KBUFF,KJ,KDD,KSTACK,KELEM,KERR)
+C
+C**** *BUPRCO*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS BUFR OPERATOR.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUPRCO(KBUFL,KBUFF,KJ,KDD,KSTACK,KELEM,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KJ*      -  POINTER TO ARRAY KSTACK
+C               *KDD*     -  DATA DESCRIPTOR
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C        OUTPUT:
+C               *KSTACK*  - LIST OF DESCRIPTORS
+C               *KERR*    - RETURN ERROR CODE
+C
+C     *METHOD.
+C      -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUUATB         - UPDATE AUGMENTED TABLE B
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomwtc.F"
+#     include "bcombef.F"
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      CHARACTER CWTEN*64,CWTU*24
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSTACK(*)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   DETERMINE *F *X AND *Y.
+C                -----------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+C
+      IF( IF.NE.2 ) THEN
+         KERR=21
+         CALL BUERR(KERR)
+         WRITE(KNTN,*) KDD,' IS TO BE OPERATOR'
+         GO TO 400
+      END IF
+C
+C*          1.1   CHANGE DATA WIDTH ?
+C                 -------------------
+ 110  CONTINUE
+C
+      IF(IX.EQ.1) THEN
+         IF(IY.EQ.0) THEN
+            NDWINC=0
+         ELSE
+           NDWINC= NDWINC + (IY-128)
+         END IF
+         GO TO 400
+      END IF
+C
+C*          1.2   CHANGE SCALE ?
+C                 --------------
+ 120  CONTINUE
+C
+      IF(IX.EQ.2) THEN
+C
+C*          1.2.1  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         IF(IY.EQ.0) THEN
+            NSCAM=0
+         ELSE
+            NSCAM=NSCAM + (IY-128)
+         END IF
+         GO TO 400
+      END IF
+C
+C*          1.3  CHANGE REFERENCE VALUE ?
+C                ------------------------
+ 130  CONTINUE
+C
+      IF(IX.EQ.3) THEN
+C
+C*          1.3.1  UPDATE AUGMENTED TABLE B.
+C                  -------------------------
+         CALL BUUATB(KBUFL,KBUFF,KJ,IY,KSTACK,KELEM,KERR)
+         GO TO 400
+      END IF
+C
+C*          1.4   ADD ASSOCIATED FIELD ?
+C                 ----------------------
+ 140  CONTINUE
+C
+      IF(IX.EQ.4) THEN
+C
+C*          1.4.1   UPDATE ASSOCIATED FIELD WIDTH.
+C                   ------------------------------
+         IF(IY.EQ.0) THEN
+            NFD=NFD-1
+            IF(NFD.LT.0) THEN
+               KERR=51
+               CALL BUERR(KERR)
+               RETURN
+            ELSEIF(NFD.EQ.0) THEN
+               NAFDW=0
+            END IF
+         ELSE
+            NFD=NFD+1
+            NAFDWA(NFD)=IY
+         END IF
+         GO TO 400
+      END IF
+
+C
+C*          1.5   SIGNIFY CHARACTER ?
+C                 -------------------
+ 150  CONTINUE
+C
+      IF(IX.EQ.5) THEN
+C
+C*          1.5.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='CHARACTERS'
+         CWTU (NWT)=' '
+         NWTR (NWT)= KDD      ! 0
+         NWTDW(NWT)= IY * 8
+         NWTEN(NWT)=658367
+         NWTS (NWT)=0
+         NWTRV(NWT)=0
+         M=M+1
+         GO TO 400
+      END IF
+C
+C*          1.5.2 SIGNIFY DATA WIDTH FOR IMMEDISTELY
+C                 FOLLOWED LOCAL DESCRIPTOR
+C
+ 152  CONTINUE
+C
+      IF(IX.EQ.6) THEN
+         NWT = NWT + 1
+         KJ=KJ+1
+         CWTEN(NWT)='UNKNOWN'
+         CWTU (NWT)='UNKNOWN'
+         NWTR (NWT)= KSTACK(KJ)
+         NWTDW(NWT)= IY
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= NVIND
+         M=NWT
+C
+C        CHECK IF LOCAL TABLE ENTRY KNOWN
+C        --------------------------------
+C
+C         DO 153 I=1,JTAB
+C         IF(NWTR(NWT).EQ.NTABBTR(I)) THEN
+C            CWTEN(NWT)=CTABBEN(I)
+C            CWTU (NWT)=CTABBU (I)
+C            IF(CWTU(NWT)(1:3).EQ.'CCI') NWTEN(NWT)=65367
+C            NWTS (NWT)=NTABBS (I)
+C            NWTRV(NWT)=NTABBRV(I)
+C            NWTDW(NWT)=NTABBDW(I)
+C            NWTEN(NWT)=NTABBTR(I)
+C            GO TO 400
+C         END IF
+C  153    CONTINUE
+C
+         GO TO 400
+      END IF
+C
+      IF(IX.EQ.7) THEN
+C
+C*          1.5.4  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         IF(IY.EQ.0) THEN
+            N07     =0
+            NSCAM07 =0
+            NDWINC07=0
+         ELSE
+            N07     =IY                               ! exponent
+            NSCAM07 =IY
+            NDWINC07=((10*IY)+2)/3                    ! data width
+
+         END IF
+         GO TO 400
+      END IF
+
+      IF(IX.EQ.8) THEN
+C
+C*          1.5.5  SET DATA WIDTH FOR CCITTIA5
+C                  ---------------------------
+C
+         IF(IY.EQ.0) THEN
+           N08=0
+         ELSE
+           N08=IY          ! number of chatacters
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          1.6   QUALITY INFORMATION FOLLOWS.
+C                 ----------------------------
+ 160  CONTINUE
+C
+      IF(IX.EQ.62) THEN
+C
+      IF(IY.EQ.0) GO TO 400
+C
+C*          1.7.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='QUALITY INFORMATION FOLLOW'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 222000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         M=M+1
+         IF(M.GT.KELEM) THEN
+            KERR=25
+            WRITE(KNTN,*)  'BUPRCO:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          2.  PROCESSING NEW OPERATORS.
+C               -------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1   DATA NOT PRESENT.
+C                 -----------------
+ 210  CONTINUE
+C
+      IF(IX.EQ.21) THEN
+         N221=IY
+         GO TO 400
+      END IF
+C
+C
+C*          2.2   QUALITY INFORMATION FOLLOWS.
+C                 ----------------------------
+ 220  CONTINUE
+C
+      IF(IX.EQ.22) THEN
+C
+C*          1.7.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='QUALITY INFORMATION FOLLOW'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 222000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         M=M+1
+         IF(M.GT.KELEM) THEN
+            KERR=25
+            WRITE(KNTN,*)  'BUPRCO:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C
+C*          2.3   SUBSTITUTED VALUES FOLLOWS.
+C                 ---------------------------
+ 230  CONTINUE
+C
+      IF(IX.EQ.23) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='SUBSTITUTED VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=223000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.KELEM) THEN
+                  KERR=25
+                  WRITE(KNTN,*)  'BUPRCO:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+             CWTEN(NWT)='SUBSTITUTED VALUE MARKER'
+             CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+             NWTRV(NWT)= 0
+             NWTEN(NWT)= 0
+             NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C
+C*          2.4   FIRST ORDER STATISTICS FOLLOWS.
+C                 -------------------------------
+ 240  CONTINUE
+C
+      IF(IX.EQ.24) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='FIRST ORDER STATISTICS FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=224000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.KELEM) THEN
+                  KERR=25
+                  WRITE(KNTN,*)  'BUPRCO:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+             CWTEN(NWT)='FIRST ORDER STATISTICS VALUE MARKER'
+             CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+             NWTRV(NWT)= 0
+             NWTEN(NWT)= 0
+             NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*          2.5   DIFFERENCE STATISTICAL VALUES FOLLOW.
+C                 -------------------------------------
+ 250  CONTINUE
+C
+      IF(IX.EQ.25) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='DIFFERENCE STATISTICAL VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=225000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.KELEM) THEN
+                  KERR=25
+                  WRITE(KNTN,*)  'BUPRCO:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+             CWTEN(NWT)='DIFFERENCE STATISTICS VALUE MARKER'
+             CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+             NWTRV(NWT)= 0
+             NWTEN(NWT)= 0
+             NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C
+C*          2.6   REPLACED/RETAINED VALUES FOLLOWS.
+C                 ---------------------------------
+ 260  CONTINUE
+C
+      IF(IX.EQ.32) THEN
+         IF(IY.EQ.0) THEN
+            NWT=NWT+1
+            CWTEN(NWT)='REPLACE/RETAINED VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=232000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+            IF(NFD.NE.0) THEN
+               DO I=1,NFD
+               NWT=NWT+1
+               CWTEN(NWT)='ASSOCIATED FIELD'
+               CWTU (NWT)=' '
+               NWTDW(NWT)= 0
+               NWTR (NWT)= 0
+               NWTRV(NWT)= 0
+               NWTEN(NWT)= 0
+               NWTS (NWT)= 0
+               M=M+1
+               END DO
+               IF(M.GT.KELEM) THEN
+                  KERR=25
+                  WRITE(KNTN,*)  'BUPRCO:'
+                  CALL BUERR(KERR)
+                  RETURN
+               END IF
+            END IF
+            OMARKER=.TRUE.
+            NWT=NWT+1
+             CWTEN(NWT)='REPLACE/RETAINED VALUE MARKER'
+             CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)=KDD
+             NWTRV(NWT)= 0
+             NWTEN(NWT)= 0
+             NWTS (NWT)= 0
+            M=M+1
+            IF(M.GT.KELEM) THEN
+               KERR=25
+               WRITE(KNTN,*)  'BUPRCO:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*          2.7   CANCEL BACKWARD REFERENCE.
+C                 --------------------------
+ 270  CONTINUE
+C
+      IF(IX.EQ.35) THEN
+C
+C*          1.7.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='CANCEL BACKWARD DATA REFERENCE'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 235000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+C
+C         MREL=0
+         M=M+1
+         IF(M.GT.KELEM) THEN
+            KERR=25
+            WRITE(KNTN,*)  'BUPRCO:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C*          2.8   DEFINE BACKWARD REFERENCE BIT MAP.
+C                 ----------------------------------
+ 280  CONTINUE
+C
+      IF(IX.EQ.36) THEN
+C
+C*          2.8.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NWT = NWT + 1
+         CWTEN(NWT)='BACKWARD REFERENCE BIT MAP'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= 0
+         NWTR (NWT)= 236000
+         NWTRV(NWT)= 0
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+C
+         M=M+1
+         IF(M.GT.JELEM) THEN
+            KERR=30
+            WRITE(KNTN,*)  'BUOPER:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         GO TO 400
+      END IF
+C
+C*          2.9   DEFINE BACKWARD REFERENCE BIT MAP.
+C                 ----------------------------------
+ 290  CONTINUE
+C
+      IF(IX.EQ.37) THEN
+         IF(IY.EQ.0) THEN
+C
+C*          2.9.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='USE PREVIOUSLY DEFINED BIT MAP'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 237000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          2.9.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL REFERENCE TO PREDEFINED BIT MAP'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+      IF(IX.EQ.9) THEN
+         IF(IY.EQ.0) THEN
+            N40=0
+         ELSE
+            N40=IY
+         END IF
+C
+         GO TO 400
+      END IF
+C
+
+C
+C*    5. DEFINE EVENT
+C        ------------
+ 500  CONTINUE
+C
+      IF(IX.EQ.41) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.1.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='DEFINE EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 241000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.1.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL DEFINE EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*        5.1  DEFINE CONDITIONING EVENT
+C              -------------------------
+ 510  CONTINUE
+C
+      IF(IX.EQ.42) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.1.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='DEFINE CONDITIONING EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 242000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.1.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL DEFINE CONDITIONING EVENT'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C*        5.2  DEFINE CONDITIONING EVENT
+C              -------------------------
+ 520  CONTINUE
+C
+      IF(IX.EQ.43) THEN
+         IF(IY.EQ.0) THEN
+C
+C         5.2.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C               -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CATEGORICAL FORECAST VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= 243000
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         ELSE
+C
+C*          5.2.2  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+            NWT = NWT + 1
+            CWTEN(NWT)='CANCEL CATEGORICAL FORECAST VALUES FOLLOW'
+            CWTU (NWT)=' '
+            NWTDW(NWT)= 0
+            NWTR (NWT)= KDD
+            NWTRV(NWT)= 0
+            NWTEN(NWT)= 0
+            NWTS (NWT)= 0
+C
+            M=M+1
+            IF(M.GT.JELEM) THEN
+               KERR=30
+               WRITE(KNTN,*)  'BUOPER:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 400
+         END IF
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+ 300  CONTINUE
+C
+      KERR=22
+      WRITE(KNTN,*)  'BUPRCO:'
+      CALL BUERR(KERR)
+C
+C     ------------------------------------------------------------------
+C
+ 400  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buprq.F b/bufrdc/buprq.F
new file mode 100755
index 0000000..632f89d
--- /dev/null
+++ b/bufrdc/buprq.F
@@ -0,0 +1,89 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRQ(KPMISS,KPRUS,KOKEY)
+C
+C**** *BUPRQ*
+C
+C
+C     PURPOSE.
+C     --------
+C            SETS VARIABLE KPMISS,KPRUS INTO COMMON BLOCK.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUPRQ(KPMISS,KPRUS,KOKEY)*
+C
+C        INPUT :
+C               *KPMISS*   -  INTEGER VARIABLE
+C                            0 - DEFAULT, PAKS MAX VALUE FOR DATA WIDTH -1 BITS.
+C
+C                            1 - PAKS VALUE AS MISSING VALUE
+C               *KPRUS*   -   AN INTEGER 
+C                            0 - IF DATA DESCRIPTORS THE SAME REUSE POINTERS
+C                            1 - ALWAYS RECALCULATE POINTERS 
+C               *KOKEY*    - 0 - DEFAULT, PACKS ECMWF RDB KEY
+C                            1 - PACKS SECTION 2 IF NEEDED BUT NOT LENGTH
+C                                OF BUFR MESSAGE IN KEY
+C
+C
+C     METHOD.
+C     -------
+C
+C           DURING PACKING THE VALUE TO BE PACKED CAN HAPPEN TO BE TOO BIG
+C           TO FIT INTO CORRESPONDING DATA WIDTH. THIS SUBROUTINE  ALLOWS USER
+C           TO CHOSE BETWEEN:
+C    
+C            1)  PACK BIG VALUE AS MAX VALUE REPRESENTED WITH DATA WIDTH -1
+C                BITS (DEFAULT)
+C            2)  PACK BIG VALUE AS MISSING VALUE
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/95.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "bcprq.F"
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      IF(KPMISS.LT.0.OR.KPMISS.GT.1) KPMISS=0
+      IF(KPRUS .LT.0.OR.KPRUS.GT.1 ) KPRUS=0
+      IF(KOKEY .LT.0.OR.KOKEY.GT.1 ) NOKEY=0
+      NPMISS=KPMISS
+      NPRUS=KPRUS
+      NOKEY=KOKEY
+C
+      RETURN
+      END
diff --git a/bufrdc/buprs0.F b/bufrdc/buprs0.F
new file mode 100755
index 0000000..3981a80
--- /dev/null
+++ b/bufrdc/buprs0.F
@@ -0,0 +1,83 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRS0(KSEC0)
+C
+C**** *BUPRS0*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 0 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS0(KSEC0)*
+C
+C        INPUT :
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+C
+      DIMENSION KSEC0(JSEC0)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 0.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(KNTN,'(1H1)')
+C
+      WRITE(KNTN,'(1H ,A)')    '         BUFR SECTION 0    '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,I10)') 'LENGTH OF SECTION 0 (BYTES)         ',
+     1                       KSEC0(1)
+      WRITE(KNTN,'(1H ,A,I10)') 'TOTAL LENGTH OF BUFR MESSAGE (BYTES)',
+     1                       KSEC0(2)
+      WRITE(KNTN,'(1H ,A,I10)') 'BUFR EDITION NUMBER                 ',
+     1                       KSEC0(3)
+C
+      RETURN
+      END
diff --git a/bufrdc/buprs1.F b/bufrdc/buprs1.F
new file mode 100755
index 0000000..ba79455
--- /dev/null
+++ b/bufrdc/buprs1.F
@@ -0,0 +1,182 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRS1(KSEC1)
+C
+C**** *BUPRS1*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 1 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS1(KSEC1)*
+C
+C        INPUT :
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION >= 3
+C
+C                            KSEC1(16) - ORIGINATING SUB-CENTRE
+C                            KSEC1(18) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C                            
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+C
+      DIMENSION KSEC1(JSEC1)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 1.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(KNTN,'(1H1)')
+C
+      IF(KSEC1( 2).LE.3) THEN
+      WRITE(KNTN,'(1H ,A)')    '        BUFR SECTION 1    '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,I5)')'LENGTH OF SECTION 1 (BYTES)   ',KSEC1( 1)
+      WRITE(KNTN,'(1H ,A,I5)')'BUFR EDITION NUMBER           ',KSEC1( 2)
+      IF(KSEC1(2).GE.3) THEN
+      WRITE(KNTN,'(1H ,A,I5)')'ORIGINATING SUB-CENTRE        ',KSEC1(16)
+      END IF
+      WRITE(KNTN,'(1H ,A,I5)')'ORIGINATING CENTRE            ',KSEC1( 3)
+      WRITE(KNTN,'(1H ,A,I5)')'UPDATE SEQUENCE NUMBER        ',KSEC1( 4)
+      WRITE(KNTN,'(1H ,A,I5)')'FLAG (PRESENCE OF SECTION 2)  ',KSEC1( 5)
+      WRITE(KNTN,'(1H ,A,I5)')'BUFR MESSAGE TYPE             ',KSEC1( 6)
+      WRITE(KNTN,'(1H ,A,I5)')'BUFR MESSAGE SUBTYPE          ',KSEC1( 7)
+      WRITE(KNTN,'(1H ,A,I5)')'VERSION NUMBER OF LOCAL TABLE ',KSEC1( 8)
+      WRITE(KNTN,'(1H ,A,I5)')'YEAR                          ',KSEC1( 9)
+      WRITE(KNTN,'(1H ,A,I5)')'MONTH                         ',KSEC1(10)
+      WRITE(KNTN,'(1H ,A,I5)')'DAY                           ',KSEC1(11)
+      WRITE(KNTN,'(1H ,A,I5)')'HOUR                          ',KSEC1(12)
+      WRITE(KNTN,'(1H ,A,I5)')'MINUTE                        ',KSEC1(13)
+      WRITE(KNTN,'(1H ,A,I5)')'VERSION NUMBER OF MASTER TABLE',KSEC1(15)
+      WRITE(KNTN,'(1H ,A,I5)')'BUFR MASTER TABLE             ',KSEC1(14)
+
+      ELSEIF(KSEC1( 2).EQ.4) THEN
+
+      WRITE(KNTN,'(1H ,A)')    '        BUFR SECTION 1    '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,I9)')'LENGTH OF SECTION 1 (BYTES)   ',KSEC1( 1)
+      WRITE(KNTN,'(1H ,A,I9)')'BUFR MASTER TABLE             ',KSEC1(14)
+      WRITE(KNTN,'(1H ,A,I9)')'ORIGINATING CENTRE            ',KSEC1( 3)
+      WRITE(KNTN,'(1H ,A,I9)')'ORIGINATING SUB-CENTRE        ',KSEC1(16)
+      WRITE(KNTN,'(1H ,A,I9)')'UPDATE SEQUENCE NUMBER        ',KSEC1( 4)
+      WRITE(KNTN,'(1H ,A,I9)')'FLAG (PRESENCE OF SECTION 2)  ',KSEC1( 5)
+      WRITE(KNTN,'(1H ,A,I9)')'DATA CATEGORY                 ',KSEC1( 6)
+      WRITE(KNTN,'(1H ,A,I9)')'DATA SUB-CATEGORY             ',KSEC1(17)
+      WRITE(KNTN,'(1H ,A,I9)')'LOCAL DATA SUB-CATEGORY       ',KSEC1( 7)
+      WRITE(KNTN,'(1H ,A,I9)')'VERSION NUMBER OF MASTER TABLE',KSEC1(15)
+      WRITE(KNTN,'(1H ,A,I9)')'VERSION NUMBER OF LOCAL TABLE ',KSEC1( 8)
+      WRITE(KNTN,'(1H ,A,I9)')'YEAR                          ',KSEC1( 9)
+      WRITE(KNTN,'(1H ,A,I9)')'MONTH                         ',KSEC1(10)
+      WRITE(KNTN,'(1H ,A,I9)')'DAY                           ',KSEC1(11)
+      WRITE(KNTN,'(1H ,A,I9)')'HOUR                          ',KSEC1(12)
+      WRITE(KNTN,'(1H ,A,I9)')'MINUTE                        ',KSEC1(13)
+      WRITE(KNTN,'(1H ,A,I9)')'SECOND                        ',KSEC1(18)
+c     WRITE(KNTN,'(1H ,A,I9)')'YEAR    (EARLIEST TIME)       ',KSEC1(19)
+c     WRITE(KNTN,'(1H ,A,I9)')'MONTH   (EARLIEST TIME)       ',KSEC1(20)
+c     WRITE(KNTN,'(1H ,A,I9)')'DAY     (EARLIEST TIME)       ',KSEC1(21)
+c     WRITE(KNTN,'(1H ,A,I9)')'HOUR    (EARLIEST TIME)       ',KSEC1(22)
+c     WRITE(KNTN,'(1H ,A,I9)')'MINUTE  (EARLIEST TIME)       ',KSEC1(23)
+c     WRITE(KNTN,'(1H ,A,I9)')'SECOND  (EARLIEST TIME)       ',KSEC1(28)
+c     WRITE(KNTN,'(1H ,A,I9)')'YEAR    (LATEST TIME)         ',KSEC1(25)
+c     WRITE(KNTN,'(1H ,A,I9)')'MONTH   (LATEST TIME)         ',KSEC1(26)
+c     WRITE(KNTN,'(1H ,A,I9)')'DAY     (LATEST TIME)         ',KSEC1(27)
+c     WRITE(KNTN,'(1H ,A,I9)')'HOUR    (LATEST TIME)         ',KSEC1(28)
+c     WRITE(KNTN,'(1H ,A,I9)')'MINUTE  (LATEST TIME)         ',KSEC1(29)
+c     WRITE(KNTN,'(1H ,A,I9)')'SECOND  (LATEST TIME)         ',KSEC1(30)
+c     WRITE(KNTN,'(1H ,A,I9)')'MOST SOUTHERN LATITUDE        ',KSEC1(31)
+c     WRITE(KNTN,'(1H ,A,I9)')'MOST WESTERN LONGITUDE        ',KSEC1(32)
+c     WRITE(KNTN,'(1H ,A,I9)')'MOST NORTHERN LATITUDE        ',KSEC1(33)
+c     WRITE(KNTN,'(1H ,A,I9)')'MOST EASTERN LONGITUDE        ',KSEC1(34)
+
+      END IF
+
+C
+      RETURN
+      END
diff --git a/bufrdc/buprs2.F b/bufrdc/buprs2.F
new file mode 100755
index 0000000..2f13b8c
--- /dev/null
+++ b/bufrdc/buprs2.F
@@ -0,0 +1,256 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRS2(KSUP,KEY)
+C
+C**** *BUPRS2*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 2 OF BUFR MESSAGE (EXPANDED RDB KEY).
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS2(KSUP,KEY)*
+C
+C        INPUT :
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KEY*     -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KEY( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KEY( 2)-- RDB TYPE
+C                            KEY( 3)-- RDB SUBTYPE
+C                            KEY( 4)-- YEAR
+C                            KEY( 5)-- MONTH
+C                            KEY( 6)-- DAY
+C                            KEY( 7)-- HOUR
+C                            KEY( 8)-- MINUTE
+C                            KEY( 9)-- SECOND
+C                            KEY(10)-- LONGITUDE1
+C                            KEY(11)-- LATITUDE1
+C                            KEY(12)-- LONGITUDE2
+C                            KEY(13)-- LATITUDE2
+C                            KEY(14)-- NUMBER OF SUBSETS
+C                            KEY(15)-- IDENT (NUMERIC)
+C                            KEY(16)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(17)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(18)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(19)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(20)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(21)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(22)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(23)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(24)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(25)-- TOTAL BUFR MESSAGE LENGTH
+C                            KEY(26)-- DAY    (RDB INSERTION)
+C                            KEY(27)-- HOUR   (RDB INSERTION)
+C                            KEY(28)-- MINUTE (RDB INSERTION)
+C                            KEY(29)-- SECOND (RDB INSERTION)
+C                            KEY(30)-- DAY    (MDB INSERTION)
+C                            KEY(31)-- HOUR   (MDB INSERTION)
+C                            KEY(32)-- MINUTE (MDB INSERTION)
+C                            KEY(33)-- SECOND (MDB INSERTION)
+C                            KEY(34)-- CORRECTION NUMBER
+C                            KEY(35)-- PART
+C                            KEY(36)-- 0
+C                            KEY(37)-- CORRECTION NUMBER
+C                            KEY(38)-- PART
+C                            KEY(39)-- 0
+C                            KEY(40)-- CORRECTION NUMBER
+C                            KEY(41)-- PART
+C                            KEY(42)-- 0
+C                            KEY(43)-- CORRECTION NUMBER
+C                            KEY(44)-- PART
+C                            KEY(45)-- 0
+C                            KEY(46)-- THE LOWEST Q/C % CONFIDENCE
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+C
+      DIMENSION KSUP(JSUP),KEY(JKEY)
+C
+#ifndef R_4
+      REAL*8 RLAT1
+      REAL*8 RLON1
+      REAL*8 RLAT2
+      REAL*8 RLON2
+#else
+      REAL   RLAT1
+      REAL   RLON1
+      REAL   RLAT2
+      REAL   RLON2
+#endif
+C
+      CHARACTER*9  CIDENT
+      CHARACTER*13 YFM
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 2.
+C                ----------------
+ 100  CONTINUE
+C
+      YFM='(1H ,A,TR0,A)'
+C
+      IF(KSUP(2).LE.1) THEN
+         WRITE(KNTN,*)  'PRTKEY : RDB KEY NOT DEFINED IN SECTION 2.'
+         RETURN
+      END IF
+C
+      WRITE(KNTN,'(1H1)')
+C
+      WRITE(KNTN,'(1H ,A)')       '        BUFR SECTION 2    '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,I9)')    'LENGTH OF SECTION 2       ', KEY(1)
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A)')       '      REPORT DATA BASE KEY  '
+      WRITE(KNTN,'(1H )')
+C
+      IKTYPE=0
+      IF(KEY(2).EQ.2) IKTYPE=2
+      IF(KEY(2).EQ.3) IKTYPE=2
+      IF(KEY(2).EQ.12)IKTYPE=2
+      IF(KEY(2).EQ.08)IKTYPE=2
+      IF(IKTYPE.EQ.0.AND.KSUP(6).GT.1) IKTYPE=2
+C
+      IF(IKTYPE.EQ.2) THEN
+C      IF(KEY(2).EQ.2.OR.KEY(2).EQ.3.OR.KEY(2).EQ.12) THEN
+C
+         WRITE(KNTN,'(1H ,A,I9)') 'RDB DATA TYPE             ', KEY(2)
+         WRITE(KNTN,'(1H ,A,I9)') 'RDB DATA SUBTYPE          ', KEY(3)
+         WRITE(KNTN,'(1H ,A,I9)') 'YEAR                      ', KEY(4)
+         WRITE(KNTN,'(1H ,A,I9)') 'MONTH                     ', KEY(5)
+         WRITE(KNTN,'(1H ,A,I9)') 'DAY                       ', KEY(6)
+         WRITE(KNTN,'(1H ,A,I9)') 'HOUR                      ', KEY(7)
+         WRITE(KNTN,'(1H ,A,I9)') 'MINUTE                    ', KEY(8)
+         WRITE(KNTN,'(1H ,A,I9)') 'SECOND                    ', KEY(9)
+         RLAT1=(KEY(11)-9000000)/100000.
+         RLON1=(KEY(10)-18000000)/100000.
+         WRITE(KNTN,'(1H ,A,F9.2)')'LATITUDE  1               ', RLAT1
+         WRITE(KNTN,'(1H ,A,F9.2)')'LONGITUDE 1               ', RLON1
+         RLAT2=(KEY(13)-9000000)/100000.
+         RLON2=(KEY(12)-18000000)/100000.
+         WRITE(KNTN,'(1H ,A,F9.2)')'LATITUDE  2               ', RLAT2
+         WRITE(KNTN,'(1H ,A,F9.2)')'LONGITUDE 2               ', RLON2
+         WRITE(KNTN,'(1H ,A,I9)') 'NUMBER OF OBSERVATIONS    ', KEY(14)
+         WRITE(KNTN,'(1H ,A,I9)') 'IDENTIFIER                ', KEY(15)
+         WRITE(KNTN,'(1H ,A,I9)') 'TOTAL BUFR MESSAGE LENGTH ', KEY(25)
+         WRITE(KNTN,'(1H ,A,I9)') 'DAY    (RDB INSERTION)    ', KEY(26)
+         WRITE(KNTN,'(1H ,A,I9)') 'HOUR   (RDB INSERTION)    ', KEY(27)
+         WRITE(KNTN,'(1H ,A,I9)') 'MINUTE( (RDB INSERTION)   ', KEY(28)
+         WRITE(KNTN,'(1H ,A,I9)') 'SECOND (RDB INSERTION)    ', KEY(29)
+         WRITE(KNTN,'(1H ,A,I9)') 'DAY    (MDB ARRIVAL)      ', KEY(30)
+         WRITE(KNTN,'(1H ,A,I9)') 'HOUR   (MDB ARRIVAL)      ', KEY(31)
+         WRITE(KNTN,'(1H ,A,I9)') 'MINUTE (MDB ARRIVAL)      ', KEY(32)
+         WRITE(KNTN,'(1H ,A,I9)') 'SECOND (MDB ARRIVAL       ', KEY(33)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(34)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(35)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(37)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(38)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(40)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(41)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(43)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(44)
+         WRITE(KNTN,'(1H ,A,I9)') 'QUALITY CONTROL % CONF    ', KEY(46)
+      ELSE
+         WRITE(KNTN,'(1H ,A,I9)') 'RDB DATA TYPE             ', KEY(2)
+         WRITE(KNTN,'(1H ,A,I9)') 'RDB DATA SUBTYPE          ', KEY(3)
+         WRITE(KNTN,'(1H ,A,I9)') 'YEAR                      ', KEY(4)
+         WRITE(KNTN,'(1H ,A,I9)') 'MONTH                     ', KEY(5)
+         WRITE(KNTN,'(1H ,A,I9)') 'DAY                       ', KEY(6)
+         WRITE(KNTN,'(1H ,A,I9)') 'HOUR                      ', KEY(7)
+         WRITE(KNTN,'(1H ,A,I9)') 'MINUTE                    ', KEY(8)
+         WRITE(KNTN,'(1H ,A,I9)') 'SECOND                    ', KEY(9)
+         RLAT1=(KEY(11)-9000000)/100000.
+         RLON1=(KEY(10)-18000000)/100000.
+         WRITE(KNTN,'(1H ,A,F9.2)')'LATITUDE  1               ', RLAT1
+         WRITE(KNTN,'(1H ,A,F9.2)')'LONGITUDE 1               ', RLON1
+         IDD=0
+         CIDENT=' '
+         DO 201 ID=16,24
+         IDD=IDD+1
+         CIDENT(IDD:IDD)=CHAR(KEY(ID))
+ 201     CONTINUE
+         IDD=INDEX(CIDENT,' ')
+         IF(IDD.EQ.0) THEN
+            YFM='(1H ,A,TR1,A)'
+            GO TO 203
+         END IF
+         IDD=10-IDD
+         WRITE(YFM(10:10),'(I1)',ERR=202) IDD
+         GO TO 203
+ 202     YFM(10:10)='9'
+ 203     WRITE(KNTN,FMT=YFM)      'IDENTIFER                 ', CIDENT
+         WRITE(KNTN,'(1H ,A,I9)') 'TOTAL BUFR MESSAGE LENGTH ', KEY(25)
+         WRITE(KNTN,'(1H ,A,I9)') 'DAY    (RDB INSERTION)    ', KEY(26)
+         WRITE(KNTN,'(1H ,A,I9)') 'HOUR   (RDB INSERTION)    ', KEY(27)
+         WRITE(KNTN,'(1H ,A,I9)') 'MINUTE (RDB INSERTION)    ', KEY(28)
+         WRITE(KNTN,'(1H ,A,I9)') 'SECOND (RDB INSERTION)    ', KEY(29)
+         WRITE(KNTN,'(1H ,A,I9)') 'DAY    (MDB ARRIVAL)      ', KEY(30)
+         WRITE(KNTN,'(1H ,A,I9)') 'HOUR   (MDB ARRIVAL)      ', KEY(31)
+         WRITE(KNTN,'(1H ,A,I9)') 'MINUTE (MDB ARRIVAL)      ', KEY(32)
+         WRITE(KNTN,'(1H ,A,I9)') 'SECOND (MDB ARRIVAL       ', KEY(33)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(34)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(35)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(37)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(38)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(40)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(41)
+         WRITE(KNTN,'(1H ,A,I9)') 'CORRECTION NUMBER         ', KEY(43)
+         WRITE(KNTN,'(1H ,A,I9)') 'PART OF MESSAGE           ', KEY(44)
+         WRITE(KNTN,'(1H ,A,I9)') 'QUALITY CONTROL % CONF    ', KEY(46)
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/buprs3.F b/bufrdc/buprs3.F
new file mode 100755
index 0000000..86a5bcb
--- /dev/null
+++ b/bufrdc/buprs3.F
@@ -0,0 +1,114 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRS3(KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,KELEM,CNAMES)
+C
+C**** *BUPRS3*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRS3(KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+C                          KELEM,CNAMES)*
+C
+C        INPUT :
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C               *KTDEXL*  -  NUMBER OF ENTRIES IN LIST OF EXPANDED DATA
+C                            DESCRIPTORS
+C               *KTDEXP*  -  ARRAY CONTAINIG EXPANDED DATA DESCRIPTORS
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+C
+C
+      DIMENSION KSEC3(JSEC3)
+      DIMENSION KTDLST(KTDLEN),KTDEXP(KTDEXL)
+C
+      CHARACTER*64 CNAMES(KELEM)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 3.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(KNTN,'(1H1)')
+C
+      WRITE(KNTN,'(1H ,A)')    '         BUFR SECTION 3    '
+      WRITE(KNTN,'(1H )')
+      WRITE(KNTN,'(1H ,A,I5)') 'LENGTH OF SECTION 3 (BYTES)         ',
+     1                       KSEC3(1)
+      WRITE(KNTN,'(1H ,A,I5)') 'RESERVED                            ',
+     1                       KSEC3(2)
+      WRITE(KNTN,'(1H ,A,I5)') 'NUMBER OF DATA SUBSETS              ',
+     1                       KSEC3(3)
+      WRITE(KNTN,'(1H ,A,I5)') 'FLAG (DATA TYPE/DATA COMPRESSION)   ',
+     1                       KSEC3(4)
+C
+      WRITE(KNTN,'(1H ,//)')
+      WRITE(KNTN,'(1H ,A)')    '       DATA DESCRIPTORS (UNEXPANDED)'
+C
+      WRITE(KNTN,'(1H )')
+      DO 110 I=1,KTDLEN
+       WRITE(KNTN,'(1H ,I4,2X,I6.6)') I,KTDLST(I)
+ 110  CONTINUE
+C
+      WRITE(KNTN,'(1H ,/)')
+      WRITE(KNTN,'(1H ,A)')    '       DATA DESCRIPTORS (EXPANDED)'
+      WRITE(KNTN,'(1H )')
+      DO 120 I=1,KTDEXL
+       WRITE(KNTN,'(1H ,I5,2X,I6.6,2X,A)') I,KTDEXP(I),CNAMES(I)
+ 120  CONTINUE
+
+      RETURN
+      END
diff --git a/bufrdc/buprt.F b/bufrdc/buprt.F
new file mode 100755
index 0000000..8e48d15
--- /dev/null
+++ b/bufrdc/buprt.F
@@ -0,0 +1,375 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRT(K,KSUB1,KSUB2,KELEM,CNAMES,CUNITS,
+     1                 CVALS,KVALS,VALUES,KSUP,KSEC1,KERR)
+C
+C**** *BUPRT*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT EXPANDED BUFR MESSAG.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *BUPRT(K,KSUB1,KSUB2,KELEM,CNAMES,CUNITS,
+C                         CVALS,KVALS,VALUES,KSUP,KSEC1,KERR)*
+C
+C        INPUT :
+C               *K*       -  SWITCH TO PRINT WITH/WITOUT CONTENT OF CODE TABLES
+C                            0  - NO  CODE TABLE CONTENT
+C                            1  - YES CODE TABLE CONTENT
+C               *KSUB1*   -  STARTING SUBSET
+C               *KSUB2*   -  ENDING SUBSET
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *CVALS*   -  CHARACTER ARRAY CONTAINING BUFR CODE TABLE
+C                            ENTRIES
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  REAL ARRAY (EXPANDED DATA VALUES)
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(BYTE BY BYTE)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomroot.F"
+C
+      DIMENSION KTDLST(JELEM)
+      DIMENSION KTDEXP(JELEM)
+C
+      CHARACTER*256 YCODE
+      CHARACTER*64 YFLAG(32)
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER YCHAR*30,YLONG*320
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 VALUES(KVALS)
+#else
+      REAL   RVIND
+      REAL   EPS
+      REAL   VALUES(KVALS)
+#endif 
+C
+      DIMENSION KSUP(JSUP),KSEC1(JSEC1)
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT BUFR MESSAGE.
+C                -------------------
+ 100  CONTINUE
+C
+      KERR=0
+      YCODE=' '
+C
+      ISUB1=KSUB1
+      ISUB2=KSUB2
+      IF(ISUB1.LE.0.OR.ISUB2.LE.0) THEN
+         WRITE(KNTN,'(A)')    ' WARNING - NEGATIVE KSUB1 OR KSUB2.'
+         WRITE(KNTN,'(A,I5)') ' WARNING - NUMBER OF SUBSETS IS ',KSUP(6)
+         RETURN
+      END IF
+      IF(ISUB1.GT.KSUP(6)) THEN
+         WRITE(KNTN,'(A,I5)') ' WARNING - NUMBER OF SUBSETS IS ',KSUP(6)
+         RETURN
+      END IF
+      IF(ISUB2.GT.KSUP(6)) THEN
+         ISUB2=KSUP(6)
+         WRITE(KNTN,'(A,I5)') ' WARNING - KSUB2 REPLACED BY ',KSUP(6)
+      END IF
+C
+      IF(.NOT. OCTABLE) K=0
+C
+      IF(K.EQ.0) THEN
+C
+            DO 103 JB=ISUB1,ISUB2
+            CALL BUSEL2(JB,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1                  CUNITS,KERR)
+C
+            ILN=0
+            WRITE(KNTN,'(1H )')
+C
+            DO 104 JA=1,KTDEXL
+C
+            ILN=ILN+1
+            JAJB=JA+(JB-1)*KELEM
+C
+            IF(ABS(VALUES(JAJB)-RVIND)/RVIND.LT.EPS) THEN
+               WRITE(KNTN,9918) ILN,CNAMES(JA),CUNITS(JA)
+            ELSE
+               IF(CUNITS(JA)(1:4).EQ.'CCIT') THEN
+                  I=NINT(VALUES(JAJB)/1000)
+                  NCHAR=VALUES(JAJB)-I*1000
+                  NW=NCHAR/80
+                  NWOFF=NCHAR-NW*80
+                  IF(NWOFF.NE.0) NW=NW+1
+C
+                  YLONG=' '
+                  YLONG(1:80)=CVALS(I)
+C
+                  II=I
+                  DO 125 JC=1,NW-1
+                  II=II+1
+                  KF=JC*80+1
+                  KL=(JC+1)*80
+                  YLONG(KF:KL)=CVALS(II)
+ 125              CONTINUE
+C
+                  NLINE=NCHAR/30
+                  IDIF =NCHAR-NLINE*30
+                  IF(IDIF.NE.0) NLINE=NLINE+1
+                  YCHAR=' '
+                  YCHAR=YLONG(1:30)
+C
+                  WRITE(KNTN,9919)ILN,CNAMES(JA),VALUES(JAJB),
+     1                         CUNITS(JA),YCHAR
+C
+                  IF(NLINE.GT.1) THEN
+                     DO 130 JJ=1,NLINE-1
+C
+                     K2=JJ*30+1
+                     K1=(JJ+1)*30
+                     YCHAR=' '
+                     YCHAR=YLONG(K2:K1)
+C
+                     WRITE(KNTN,9920) YCHAR
+ 130                 CONTINUE
+C
+                   END IF
+               ELSE
+                  WRITE(KNTN,9917) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA)
+               END IF
+            END IF
+C
+ 104        CONTINUE
+ 103        CONTINUE
+C
+      END IF
+C
+      IF(K.EQ.1) THEN
+C
+C---------------------------------------------------------------------
+          WRITE(KNTN,'(1H1)')
+C
+C---------------------------------------------------------------------
+C
+          DO 150 JB=ISUB1,ISUB2
+          CALL BUSEL2(JB,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1                  CUNITS,KERR)
+C
+          ILN=0
+          WRITE(KNTN,'(1H )')
+
+C
+          DO 160 JA=1,KTDEXL
+C
+          ILN=ILN+1
+C
+          JAJB=JA+(JB-1)*KELEM
+C
+          IF(ABS(VALUES(JAJB)-RVIND)/RVIND.LT.EPS) THEN
+             WRITE(KNTN,9918) ILN,CNAMES(JA),CUNITS(JA)
+          ELSE
+             IF(CUNITS(JA)(1:4).EQ.'CCIT') THEN
+                  I=NINT(VALUES(JAJB)/1000)
+                  NCHAR=VALUES(JAJB)-I*1000
+                  NW=NCHAR/80
+                  NWOFF=NCHAR-NW*80
+                  IF(NWOFF.NE.0) NW=NW+1
+C
+                  YLONG=' '
+                  YLONG(1:80)=CVALS(I)
+C
+                  II=I
+                  DO 1125 JC=1,NW-1
+                  II=II+1
+                  KF=JC*80+1
+                  KL=(JC+1)*80
+                  YLONG(KF:KL)=CVALS(II)
+1125              CONTINUE
+C
+                  NLINE=NCHAR/30
+                  IDIF =NCHAR-NLINE*30
+                  IF(IDIF.NE.0) NLINE=NLINE+1
+                  YCHAR=' '
+                  YCHAR=YLONG(1:30)
+C
+                  WRITE(KNTN,9919)ILN,CNAMES(JA),VALUES(JAJB),
+     1                         CUNITS(JA),YCHAR
+C
+                  IF(NLINE.GT.1) THEN
+                     DO 1130 JJ=1,NLINE-1
+C
+                     K2=JJ*30+1
+                     K1=(JJ+1)*30
+                     YCHAR=' '
+                     YCHAR=YLONG(K2:K1)
+C
+                     WRITE(KNTN,9920) YCHAR
+1130                 CONTINUE
+C
+                  END IF
+
+             ELSEIF(CUNITS(JA)(1:4).EQ.'CODE') THEN
+                 KCODE=NINT(VALUES(JAJB))
+                 CALL GETCODE(KTDEXP(JA),KCODE,YCODE,IERR)
+                 DO IZ=256,1,-1
+                 IF(YCODE(IZ:IZ).NE.' ') THEN
+                    IZZ=IZ
+                    GO TO 161
+                 END IF
+                 END DO
+ 161             CONTINUE
+                 IKK=IZZ/64+1
+                 WRITE(KNTN,9919) ILN,CNAMES(JA),VALUES(JAJB),
+     1           CUNITS(JA), YCODE(1:64)
+
+                 IF(IKK.GT.1) THEN
+                 IIII=65
+                 DO IK=2,IKK
+                 WRITE(KNTN,9920) YCODE(iiii:iiii+64-1)
+                 IIII=IIII+64
+                 END DO
+                 END IF
+             ELSEIF(CUNITS(JA)(1:4).EQ.'FLAG') THEN
+                 KCODE=NINT(VALUES(JAJB))
+                 CALL GETFLAG(KTDEXP(JA),KCODE,KFLAG,YFLAG,IERR)
+                 WRITE(KNTN,9919) ILN,CNAMES(JA),VALUES(JAJB),
+     1           CUNITS(JA), YFLAG(1)
+                 IF(KFLAG.GT.1) THEN
+                 DO IZ=2,KFLAG
+                 WRITE(KNTN,9920) YFLAG(IZ)
+                 END DO
+                 END IF
+             ELSE
+                 WRITE(KNTN,9917) ILN,CNAMES(JA),VALUES(JAJB),
+     1           CUNITS(JA)
+             END IF
+          END IF
+ 
+  160     CONTINUE
+  150     CONTINUE
+C
+        END IF
+C
+C
+C       RETURN
+C
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+C     ------------------------------------------------------------------
+ 9917 FORMAT(1H ,I6,1X,A32,1X,E23.14E3,1X,A24)
+ 9918 FORMAT(1H ,I6,1X,A32,1X,'                MISSING',1X,A24)
+ 9919 FORMAT(1H ,I6,1X,A32,1X,E23.14E3,1X,A24,1X,A)
+ 9920 FORMAT(1H ,89X,A)
+      END
diff --git a/bufrdc/buprtbox.F b/bufrdc/buprtbox.F
new file mode 100755
index 0000000..dfd539c
--- /dev/null
+++ b/bufrdc/buprtbox.F
@@ -0,0 +1,146 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUPRTBOX(KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU)
+C
+C**** *BUPRTBOX*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C               *CALL* *BUPRTBOX(KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU)*
+C
+C        INPUT :
+C               *KBOX*    -  NUMBER OF ROWS      
+C               *KAPP*    -  NUMBER OF COLUMNS
+C               *KLEN*    -  OFFSET FOR START OF NEXT COLUMN
+C               *KBOXR*   -  ARRAY CONTAINING BUFR TABLE B REFERENCE NUMBERS
+C               *VALS*    -  ARRAY CONTAINING UNPACKED VALUES
+C               *CBOXN*   -  ARRAY CONTAINING ELEMENT NAMES
+C               *CBOXU*   -  ARRAY CONTAINING ELEMENT UNITS
+C
+C     METHOD.
+C     -------
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/94.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+C
+      DIMENSION IOPER(100)
+#ifndef R_4
+      REAL*8 RPRINT(60)
+      REAL*8 VALS(JWORK)
+#else
+      REAL   RPRINT(60)
+      REAL   VALS(JWORK)
+#endif
+      DIMENSION KBOXR(JWORK),IBVAL(JELEM),IBPRINT(60)
+      CHARACTER*64 CBOXN(JELEM)
+      CHARACTER*24 CBOXU(JELEM)
+C
+C
+C     ------------------------------------------------------------------
+C*                 1. PRINT BOXED EXPANDED BUFR MESSAGE
+C                     ---------------------------------
+ 100  CONTINUE
+C
+      IF(KBOX.LE.6) THEN
+         WRITE(KNTN,*)  'THERE IS NO USEFULL DATA TO BE PRINTED.'
+         KBOX=0
+        RETURN
+      END IF
+C
+      IF(KAPP.GT.60) THEN
+         WRITE(KNTN,*)  'THERE IS MORE THAN 60 APPLICATIONS IN THE DATA'
+         WRITE(KNTN,*)  'ONLY FIRST 60 WILL BE PROCESSED'
+         KAPP=60
+      END IF
+C
+      IF(KAPP.GT.1) THEN
+         IREP=(KAPP-1)/10
+         IOFF=(KAPP-1)-IREP*10
+         IF(IOFF.NE.0) IREP=IREP+1
+      ELSE
+         IREP=1
+         IOFF=0
+      END IF
+C
+      IST=2
+      IEND=11
+C      IF(IREP.EQ.1.AND.KAPP.EQ.1) IEND=IOFF+1
+C     IF(IREP.EQ.1) IEND=IOFF+1
+      IF(IREP.EQ.1 .AND. IOFF .EQ.0) THEN
+         IEND=1 
+      ELSEIF(IREP.EQ.1) THEN
+         IEND=IOFF+1
+      END IF
+C
+      DO 2005 J=1,IREP
+C
+      WRITE(KNTN,*)  ' '
+      DO 2002 I=1,KBOX
+      IIII=1
+      RPRINT(IIII)=VALS(I)
+C
+      DO 2003 II=IST,IEND
+      IIII=IIII+1
+      III=I+(II-1)*KLEN      
+      RPRINT(IIII)=VALS(III)
+      IBPRINT(IIII)=KBOXR(III)
+ 2003 CONTINUE
+C     WRITE(KNTN,'(1H ,I4,1X,A32,1X,15(1X,I6,1X,F8.1))') 
+C    1        I,CBOXN(I),(IBPRINT(NN),RPRINT(NN),NN=1,KAPP)
+      WRITE(KNTN,'(1H ,I4,1X,A32,1X,F14.1,30(1X,F8.1))')
+     1        I,CBOXN(I),(RPRINT(NN),NN=1,IIII)
+ 2002 CONTINUE
+C
+      IF(IOFF.NE.0.AND.J.EQ.(IREP-1)) THEN
+         IST=IEND+1
+         IEND=IEND+IOFF
+      ELSE
+         IST=IEND+1
+         IEND=IEND+10
+      END IF
+C
+ 2005 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/bufrdc/burep.F b/bufrdc/burep.F
new file mode 100755
index 0000000..1df0a6e
--- /dev/null
+++ b/bufrdc/burep.F
@@ -0,0 +1,323 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUREP(KPT,KDLEN,KDATA,KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *BUREP*
+C
+C
+C     PURPOSE.
+C     --------
+C          RESOLVE DATA DESCRIPTOR REPLICATION PROBLEM.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUREP(KPT,KDLEN,KDATA,KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C               *KPT*      - POINTER TOO KDATA ARRAY
+C               *KDLEN*    -  DIMENSION OF KDATA ARRAY
+C               *KDATA*    -  ARRAY CONTAINING DATA NEEDED FOR DATA DESCRIPTOR
+C                            EXPANSION
+C               *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KJ*       - POINTER TO KSTACK ARRAY
+C               *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C               *KSTACK*   - LIST OF DATA DESCRIPTORS
+C               *KERR*     - RETURN CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUETDR            - RESOLVE TABLE D REFERENCE
+C          BUEPWT            - UPDATE WORKING TABLES
+C          GBYTE             - UNPACK BIT PATHERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmbef.F"
+#     include "bcmoff.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+      DIMENSION ILIST(JELEM)
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   STORE K, NUMBER OF DESCRIPTORS TO BE REPLICATED.
+C                ------------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+      K   = IX
+      IF(IY.EQ.0) ODREPF=.TRUE.
+C
+C*          1.1   DELAYED REPLICATION ?
+C                 ---------------------
+ 110  CONTINUE
+C
+      IF( IY .NE. 0 ) THEN
+C
+C*          1.2   STORE NUMBER OF DESCRIPTORS, K, AND REPLICATION
+C                 -----------------------------------------------
+C                 FACTOR JR.
+C                 ----------
+ 120     CONTINUE
+C
+         JR = IY
+         GO TO 500
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          2.   GET NEXT DESCRIPTOR.
+C                --------------------
+ 200  CONTINUE
+C
+      KJ =KJ + 1
+      KDD= KSTACK(KJ)
+C
+C     ------------------------------------------------------------------
+C
+C*          2.1  REPLICATION FACTOR ?
+C                --------------------
+ 210  CONTINUE
+C
+      IF(KDD.NE.31001.AND.KDD.NE.31002.AND.
+     1   KDD.NE.31000.AND.
+     1   KDD.NE.31011.AND.KDD.NE.31012 )THEN
+C
+C*          2.1.1  SEQUENCE DESCRIPTOR ?
+C                  ---------------------
+C
+         IF=KDD/100000
+C
+         IF( IF.EQ.3) THEN
+C
+C*          2.1.1.1  SOLVE TABLE D REFERENCE.
+C                    ------------------------
+            CALL BUETDR(KJ,KJ1,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         IF( IF.EQ.2) THEN
+            CALL BUOPER(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         KERR=36
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UPDATE WORKING TABLE.
+C               ---------------------
+ 300  CONTINUE
+C
+      IF(KDD.EQ.31031.OR.KDD.EQ.31192) THEN
+         NWT=NWT+1
+         NWTR(NWT)=KDD
+         NWTS(NWT)=0
+         NWTRV(NWT)=0
+         NWTDW(NWT)=1
+         M=M+1
+      ELSEIF(KDD.EQ.33007.OR.KDD.EQ.63192) THEN
+         NWT=NWT+1
+         NWTR(NWT)=KDD
+         NWTS(NWT)=0
+         NWTRV(NWT)=0
+         NWTDW(NWT)=7
+         M=M+1
+      ELSE
+         CALL BUEPWT (KDD,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(KDD.EQ.031011.or.KDD.EQ.031012) RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  STORE JR, THE REPLICATION FACTOR FROM DATA.
+C               ------------------------------------------------------
+ 400  CONTINUE
+C
+      KPT=KPT+1
+      IF(KPT.GT.KDLEN) THEN
+         KERR=31
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      JR=KDATA(KPT)
+C
+      IF(JR.EQ.0) THEN
+         IIIF=KSTACK(KJ+1)/100000
+         IIII=KSTACK(KJ+1)-IIIF*100000
+         IIIX=IIII/1000
+         IIIY=IIII-IIIX*1000
+C
+         IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+            KJ=KJ+1
+            CALL BUOPER(KPT,KDLEN,KDATA,KJ,KSTACK(KJ),KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+         END IF
+
+         KJ=KJ+K
+         GO TO 640
+      END IF
+
+      JRTK=JR*K+KJ1-K
+      IF(JRTK.GT.JELEM) THEN
+         KERR=30
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     CHECK IF NEXT DESCRIPTOR CANCEL OPERATOR FOR DELAYED
+C     REPLICATION
+C
+      IIIF=KSTACK(KJ+1)/100000
+      IIII=KSTACK(KJ+1)-IIIF*100000
+      IIIX=IIII/1000
+      IIIY=IIII-IIIX*1000
+C
+      IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+         KJ=KJ+1
+         CALL BUOPER(KPT,KDLEN,KDATA,KJ,KSTACK(KJ),KSTACK,KERR)
+         IF(KERR.GT.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+      END IF
+C     ------------------------------------------------------------------
+C*          5.  GET NEXT K DESCRIPTORS.
+C               -----------------------
+ 500  CONTINUE
+C
+      DO 501 J=1,K
+C
+      ILIST(J)=KSTACK(KJ+J)
+C
+ 501  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.  ADD JR TIMES K DESCRIPTORS IN PLACE OF K
+C               ----------------------------------------
+C               DESCRIPTORS OBTAINED.
+C               ---------------------
+ 600  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.1  PUSH DOWN DESCRIPTORS IN KSTACK FOR (JR-1)*K PLACES
+C                ---------------------------------------------------
+C                STARTING AT KJ1 AND ENDING AT KJ+K.
+C                -----------------------------------
+ 610  CONTINUE
+C
+      JRKM1=(JR-1)*K
+C
+      DO 611 J=KJ1,KJ+K,-1
+C
+      KSTACK(J+JRKM1)=KSTACK(J)
+C
+ 611  CONTINUE
+C
+C*          6.2  INSERT LIST IN THE STACK.
+C                -------------------------
+ 620  CONTINUE
+C
+      DO 622 J=1,JR
+C
+      KJJM1K=KJ+(J-1)*K
+C
+      DO 623 J1=1,K
+C
+      KSTACK(KJJM1K+J1)=ILIST(J1)
+C
+ 623  CONTINUE
+ 622  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.3  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C                ----------------------------------------
+ 630  CONTINUE
+C
+      KJ1 = KJ1  + (JR-1)*K
+C
+C     ------------------------------------------------------------------
+C*          6.4  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 640  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C
+C     ------------------------------------------------------------------
+ 700  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/burepc.F b/bufrdc/burepc.F
new file mode 100755
index 0000000..3f08d30
--- /dev/null
+++ b/bufrdc/burepc.F
@@ -0,0 +1,312 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUREPC(KPT,KDLEN,KDATA,KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *BUREPC*
+C
+C
+C     PURPOSE.
+C     --------
+C          RESOLVE DATA DESCRIPTOR REPLICATION PROBLEM.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUREPC(KPT,KDLEN,KDATA,KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C               *KPT*      - POINTER TOO KDATA ARRAY
+C               *KDLEN*    -  DIMENSION OF KDATA ARRAY
+C               *KDATA*    -  ARRAY CONTAINING DATA NEEDED FOR DATA DESCRIPTOR
+C                            EXPANSION
+C               *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KJ*       - POINTER TO KSTACK ARRAY
+C               *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C               *KSTACK*   - LIST OF DATA DESCRIPTORS
+C               *KERR*     - RETURN CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUETDR            - RESOLVE TABLE D REFERENCE
+C          BUEPWT            - UPDATE WORKING TABLES
+C          GBYTE             - UNPACK BIT PATHERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmwt.F"
+#     include "bcmwtc.F"
+#     include "bcmbef.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+      DIMENSION ILIST(JELEM)
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   STORE K, NUMBER OF DESCRIPTORS TO BE REPLICATED.
+C                ------------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+      K   = IX
+      IF(IY.EQ.0) ODREPF=.TRUE.
+C
+C*          1.1   DELAYED REPLICATION ?
+C                 ---------------------
+ 110  CONTINUE
+C
+      IF( IY .NE. 0 ) THEN
+C
+C*          1.2   STORE NUMBER OF DESCRIPTORS, K, AND REPLICATION
+C                 -----------------------------------------------
+C                 FACTOR JR.
+C                 ----------
+ 120     CONTINUE
+C
+         JR = IY
+         GO TO 500
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          2.   GET NEXT DESCRIPTOR.
+C                --------------------
+ 200  CONTINUE
+C
+      KJ =KJ + 1
+      KDD= KSTACK(KJ)
+C
+C     ------------------------------------------------------------------
+C
+C*          2.1  REPLICATION FACTOR ?
+C                --------------------
+ 210  CONTINUE
+C
+      IF(KDD.NE.31001.AND.KDD.NE.31002.AND.
+     1   KDD.NE.31000.AND.
+     1   KDD.NE.31011.AND.KDD.NE.31012 )THEN
+C
+C*          2.1.1  SEQUENCE DESCRIPTOR ?
+C                  ---------------------
+C
+         IF=KDD/100000
+C
+         IF( IF.EQ.3) THEN
+C
+C*          2.1.1.1  SOLVE TABLE D REFERENCE.
+C                    ------------------------
+            CALL BUETDR(KJ,KJ1,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         IF( IF.EQ.2) THEN
+            CALL BUOPERC(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         KERR=36
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UPDATE WORKING TABLE.
+C               ---------------------
+ 300  CONTINUE
+C
+      IF(KDD.EQ.31031.OR.KDD.EQ.31192) THEN
+         NWT=NWT+1
+         NWTR(NWT)=KDD
+         NWTS(NWT)=0
+         NWTRV(NWT)=0
+         NWTDW(NWT)=1
+         M=M+1
+      ELSEIF(KDD.EQ.33007.OR.KDD.EQ.63192) THEN
+         NWT=NWT+1
+         NWTR(NWT)=KDD
+         NWTS(NWT)=0
+         NWTRV(NWT)=0
+         NWTDW(NWT)=7
+         M=M+1
+      ELSE
+         CALL BUEPWTC (KDD,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(KDD.EQ.031011.OR.KDD.EQ.031012) RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  STORE JR, THE REPLICATION FACTOR FROM DATA.
+C               ------------------------------------------------------
+ 400  CONTINUE
+C
+      KPT=KPT+1
+      IF(KPT.GT.KDLEN) THEN
+         KERR=31
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+      JR=KDATA(KPT)
+C      IF(JR.EQ.0) THEN
+C         KERR=18
+C         CALL BUERR(KERR)
+C         RETURN
+C      END IF
+C
+      IF(JR.EQ.0) THEN
+         KJ=KJ+K
+         GO TO 640
+      END IF
+C
+      JRTK=JR*K+KJ1-K
+      IF(JRTK.GT.JELEM) THEN
+         KERR=30
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     CHECK IF NEXT DESCRIPTOR CANCEL OPERATOR FOR DELAYED
+C     REPLICATION
+C
+      IIIF=KSTACK(KJ+1)/100000
+      IIII=KSTACK(KJ+1)-IIIF*100000
+      IIIX=IIII/1000
+      IIIY=IIII-IIIX*1000
+C
+      IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+         KJ=KJ+1
+         CALL BUOPERC(KPT,KDLEN,KDATA,KJ,KSTACK(KJ),KSTACK,KERR)
+         IF(KERR.GT.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+      END IF
+C     ------------------------------------------------------------------
+C*          5.  GET NEXT K DESCRIPTORS.
+C               -----------------------
+ 500  CONTINUE
+C
+      DO 501 J=1,K
+C
+      ILIST(J)=KSTACK(KJ+J)
+C
+ 501  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.  ADD JR TIMES K DESCRIPTORS IN PLACE OF K
+C               ----------------------------------------
+C               DESCRIPTORS OBTAINED.
+C               ---------------------
+ 600  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.1  PUSH DOWN DESCRIPTORS IN KSTACK FOR (JR-1)*K PLACES
+C                ---------------------------------------------------
+C                STARTING AT KJ1 AND ENDING AT KJ+K.
+C                -----------------------------------
+ 610  CONTINUE
+C
+      JRKM1=(JR-1)*K
+C
+      DO 611 J=KJ1,KJ+K,-1
+C
+      KSTACK(J+JRKM1)=KSTACK(J)
+C
+ 611  CONTINUE
+C
+C*          6.2  INSERT LIST IN THE STACK.
+C                -------------------------
+ 620  CONTINUE
+C
+      DO 622 J=1,JR
+C
+      KJJM1K=KJ+(J-1)*K
+C
+      DO 623 J1=1,K
+C
+      KSTACK(KJJM1K+J1)=ILIST(J1)
+C
+ 623  CONTINUE
+ 622  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.3  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C                ----------------------------------------
+ 630  CONTINUE
+C
+      KJ1 = KJ1  + (JR-1)*K
+C
+C     ------------------------------------------------------------------
+C*          6.4  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 640  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C
+C     ------------------------------------------------------------------
+ 700  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/burqc.F b/bufrdc/burqc.F
new file mode 100755
index 0000000..867426c
--- /dev/null
+++ b/bufrdc/burqc.F
@@ -0,0 +1,1106 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BURQC(KBUFL,KBUFF,KELEM,CNAMES,CUNITS,KSUP,KSEC3,KERR)
+C
+C**** *BURQC*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          CREATE PARAMETERS NEEDED FOR PARTIAL EXPANSION OF
+C     BUFR MESSAGE WITH COMPRESSED DATA ACCORDING TO REQUESTED
+C     INPUT LISTS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BURQC(KBUFL,KBUFF,KELEM,CNAMES,CUNITS,KSUP,KSEC3,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C      -------
+C
+C          WORD AND BIT POINTERS ARE CALCULATED FOR EVERY ELEMENT
+C     IN THE EXPANDED LIST OF ELEMENTS. IF PARTIAL EXPANSION REQUESTED,
+C     INDECES TO REQUIRED ELEMENTS ARE DETERMINED, AS WELL AS CORRESPONDING
+C     QUALITY CONTROL, STATISTICS ETC. INFORMATION.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACKS BIT PATTERN
+C          BUNPKS         - UNPACKS BIT PATTERN IN REPEATED WAY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcombef.F"
+#     include "bcomwt.F"
+#     include "bcomp.F"
+#     include "bcomwtc.F"
+#     include "bcomrq.F"
+#     include "bcomreq.F"
+C
+      CHARACTER*64 CWTEN
+      CHARACTER*24 CWTU
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+C
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+      DIMENSION KBUFF(KBUFL)
+C
+      DIMENSION IRQEI(JELEM),IQCI(JELEM),IQCDPI(JELEM)
+      DIMENSION IBVAL(JELEM),IBV(JELEM)
+      DIMENSION IC7(JELEM),IC8(JELEM),IC7R(JELEM),IC8R(JELEM)
+      DIMENSION NQP(JELEM),ITYPE(100)
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 RQVAL
+      REAL*8 VAL
+#else
+      REAL   RVIND
+      REAL   EPS
+      REAL   RQVAL
+      REAL   VAL
+#endif
+      DIMENSION IMASK(8)
+C
+      SAVE IBV,IBVAL
+C
+      DATA IMASK /1,2,4,8,16,32,64,128/
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          1.  DEFINE WORD/BIT POINTERS TO EVERY ELEMENT.
+C               ------------------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      NFCM=1
+      NFUCM=0
+C
+C     CHECK REQUEST VALIDITY
+C
+      IF(NREQ(1).EQ.0.AND.NREQ(2).NE.0) THEN
+         KERR=38
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      MREL=0
+C
+      IBP32= 32 + NBPTB
+C
+      IB1=0
+      IF(IAND(NREQ(2),IMASK(1)).NE.0) IB1=1
+      IB2=0
+      IF(IAND(NREQ(2),IMASK(2)).NE.0) IB2=1
+      IB3=0
+      IF(IAND(NREQ(2),IMASK(3)).NE.0) IB3=1
+      IB4=0
+      IF(IAND(NREQ(2),IMASK(4)).NE.0) IB4=1
+      IB5=0
+      IF(IAND(NREQ(2),IMASK(5)).NE.0) IB5=1
+      IB6=0
+      IF(IAND(NREQ(2),IMASK(6)).NE.0) IB6=1
+C
+C*          1.1 COMPRESSED DATA.
+C               ----------------
+ 110  CONTINUE
+C
+      IBIT=IBP32
+      IWORD=IBIT/NBPW
+C
+      NWORDP(1)=NWPTB+IWORD
+      NBITP (1)=IBIT-IWORD*NBPW
+C
+      DO 111 I=2,M+1
+      IWRD=NWORDP(I-1)
+      IBTP=NBITP (I-1)
+C
+      IF(NWTDW(I-1).EQ.0) THEN
+         NBITP(I) =NBITP(I-1)
+         NWORDP(I)=NWORDP(I-1)
+         GO TO 111
+      END IF
+C
+      IBTP=IBTP+NWTDW(I-1)
+      IF(IBTP.GE.NBPW) THEN
+         IW=IBTP/NBPW
+         IBTP=IBTP-IW*NBPW
+         IWRD=IWRD+IW
+      END IF
+C
+      CALL BUNPCK(NBPW,KBUFF,IDWINC,IWRD,IBTP,6,KERR)
+      IF(KERR.GT.0) RETURN
+      IF(IDWINC.GT.JBPW) THEN
+            KERR=15
+            WRITE(KNTN,*)  'BURQC :'
+            CALL BUERR(KERR)
+            RETURN
+      END IF
+      IF(IWRD.GT.KBUFL) THEN
+            KERR=26
+            WRITE(KNTN,*)  'BURQC :'
+            CALL BUERR(KERR)
+            RETURN
+      END IF
+C
+      IF(CWTU(I-1).EQ.'CCITTIA5') THEN
+         NWTIWS(I-1)=NWTDW(I-1)+6+N*IDWINC*8
+      ELSEIF(NWTEN(I-1).EQ.-999) THEN
+         NWTIWS(I-1)=NWTDW(I-1)+6+N*IDWINC*8
+      ELSE
+         NWTIWS(I-1)=NWTDW(I-1)+6+N*IDWINC
+      END IF
+C
+      IBIT = NBITP(I-1) + NWTIWS(I-1)
+      IWORD= IBIT/NBPW
+C
+      NBITP (I)= IBIT - IWORD*NBPW
+      NWORDP(I)= NWORDP(I-1) + IWORD
+C
+      IF(NWORDP(I).GT.KBUFL) THEN
+            KERR=26
+            WRITE(KNTN,*)  'BURQC :'
+            CALL BUERR(KERR)
+            RETURN
+      END IF
+ 111  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*          2. CREATE POINTERS FOR REQUESTED ELEMENTS.
+C              ---------------------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1 CHECK IF SUBSET OF ELEMENTS REQUESTED.
+C
+ 210  CONTINUE
+C
+      IF(NREQ(1).EQ.0) THEN
+         DO 212 I=1,M
+         INWTEN(I)=NWTEN(I)
+         INWTR (I)=NWTR (I)
+         INWTS (I)=NWTS (I)
+         INWTDW(I)=NWTDW(I)
+         INWTRV(I)=NWTRV(I)
+         CNAMES(I)=CWTEN(I)
+         CUNITS(I)=CWTU(I)
+         INWORDP(I)=NWORDP(I)
+         INBITP(I)=NBITP(I)
+ 212     CONTINUE
+         RETURN
+      END IF
+C
+      IF(NREQ(1).EQ.1) THEN
+         DO 213 I=1,M
+         IF(NWTR(I).GT.200000.AND.
+     1      NWTR(I).NE.999999) THEN
+            MREL=I-1
+            GO TO 2133
+         END IF
+ 213     CONTINUE
+         MREL=M
+C
+ 2133    CONTINUE
+         J=0
+         IF(NRQL.EQ.0) THEN
+            DO 2131 I=1,MREL
+            J=J+1
+            INBITP(J)=NBITP(I)
+            INWORDP(J)=NWORDP(I)
+            INWTEN(J)=NWTEN(I)
+            INWTR(J) =NWTR(I)
+            INWTS(J) =NWTS(I)
+            INWTDW(J)=NWTDW(I)
+            INWTRV(J)=NWTRV(I)
+            CNAMES(J)=CWTEN(I)
+            CUNITS(J)=CWTU(I)
+ 2131       CONTINUE
+C
+            M=J
+            RETURN
+         ELSE
+            M=MREL
+            GO TO 220
+         END IF
+      END IF
+C
+      IF(NREQ(1).EQ.2) THEN
+         DO 214 I=1,M
+         IF(NWTR(I).EQ.235000) THEN
+            M=I-1
+            GO TO 2141
+         END IF
+ 214     CONTINUE
+C
+ 2141    CONTINUE
+C
+         J=0
+         IF(NREQ(2).EQ.0) THEN
+            DO 2142 I=1,M
+            J=J+1
+            INBITP(J)=NBITP(I)
+            INWORDP(J)=NWORDP(I)
+            INWTEN(J)=NWTEN(I)
+            INWTR(J)=NWTR(I)
+            INWTS(J)=NWTS(I)
+            INWTDW(J)=NWTDW(I)
+            INWTRV(J)=NWTRV(I)
+            CNAMES(J)=CWTEN(I)
+            CUNITS(J)=CWTU(I)
+ 2142       CONTINUE
+            RETURN
+         ELSE
+            GO TO 220
+         END IF
+      END IF
+C
+      IF(NREQ(1).EQ.3) THEN
+         DO 215 I=1,M
+         IF(NWTR(I).EQ.235000) THEN
+C
+C           COPY CLASS 1 - 8 ELEMENTS
+C
+            DO 2151 III=1,M
+            IF(NWTR(III).GT.8000) THEN
+               J=0
+               IF(NREQ(2).EQ.0) THEN
+                  DO 2161 II=1,III-1
+                  J=J+1
+                  INBITP(J)=NBITP(II)
+                  INWORDP(J)=NWORDP(II)
+                  INWTR(J)=NWTR(II)
+                  INWTS(J)=NWTS(II)
+                  INWTRV(J)=NWTRV(II)
+                  INWTDW(J)=NWTDW(II)
+                  INWTEN(J)=NWTEN(II)
+                  CNAMES(J)=CWTEN(II)
+                  CUNITS(J)=CWTU(II)
+ 2161             CONTINUE
+                  GO TO 2160
+              ELSE
+                  DO 21611 II=1,III-1
+                  J=J+1
+                  NBITP(J)=NBITP(II)
+                  NWORDP(J)=NWORDP(II)
+                  NWTR(J)=NWTR(II)
+                  NWTS(J)=NWTS(II)
+                  NWTRV(J)=NWTRV(II)
+                  NWTDW(J)=NWTDW(II)
+                  NWTEN(J)=NWTEN(II)
+                  CWTEN(J)=CWTEN(II)
+                  CWTU(J)=CWTU(II)
+21611             CONTINUE
+                  GO TO 2160
+
+              END IF
+            END IF
+ 2151       CONTINUE
+C
+ 2160       CONTINUE
+C
+            IF(NREQ(2).EQ.0) THEN
+               DO 216 II=I+1,M
+               J=J+1
+               INBITP(J)=NBITP(II)
+               INWORDP(J)=NWORDP(II)
+               INWTR(J)=NWTR(II)
+               INWTS(J)=NWTS(II)
+               INWTRV(J)=NWTRV(II)
+               INWTDW(J)=NWTDW(II)
+               INWTEN(J)=NWTEN(II)
+               CNAMES(J)=CWTEN(II)
+               CUNITS(J)=CWTU(II)
+ 216           CONTINUE
+               M=J
+               RETURN
+            ELSE
+               DO 2169 II=I+1,M
+               J=J+1
+               NBITP(J)=NBITP(II)
+               NWORDP(J)=NWORDP(II)
+               NWTR(J)=NWTR(II)
+               NWTS(J)=NWTS(II)
+               NWTRV(J)=NWTRV(II)
+               NWTDW(J)=NWTDW(II)
+               NWTEN(J)=NWTEN(II)
+               CWTEN(J)=CWTEN(II)
+               CWTU(J)=CWTU(II) 
+ 2169          CONTINUE
+               M=J
+               GO TO 220
+            END IF
+         END IF
+C
+ 215     CONTINUE
+C
+         KERR=39
+         CALL BUERR(KERR)
+         RETURN
+      ELSE
+         KERR=40
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C
+C*          2.2 CREATE INDECES TO CLASS 7/8
+C               ---------------------------
+ 220  CONTINUE
+C
+      DO 225 I=1,M
+      IF(NWTR(I).GT.200000.AND.
+     1   NWTR(I).NE.999999) THEN
+         MREL=I-1
+         GO TO 226
+      END IF
+ 225  CONTINUE
+C
+      MREL=M
+C
+ 226  CONTINUE
+C
+      J=0
+      JJ=0
+      DO 221 I=1,MREL
+      ICLASS=NWTR(I)/1000
+      IF(ICLASS.EQ.7) THEN
+         J=J+1
+         IC7(J)=I
+      END IF
+C
+      IF(ICLASS.EQ.8) THEN
+         JJ=JJ+1
+         IC8(JJ)=I
+      END IF
+ 221  CONTINUE
+C
+      IC7L=J
+      IC8L=JJ
+      J=0
+      JJ=0
+      DO 223 I=1,NRQL
+      ICLASS=NRQ(I)/1000
+      IF(ICLASS.EQ.7.AND.(ABS(RQVAL(I)-RVIND)/RVIND.GT.EPS)) THEN
+         J=J+1
+         IC7R(J)=I
+      END IF
+C
+      IF(ICLASS.EQ.8.AND.(ABS(RQVAL(I)-RVIND)/RVIND.GT.EPS)) THEN
+         JJ=JJ+1
+         IC8R(JJ)=I
+      END IF
+ 223  CONTINUE
+C
+      IC7RL=J
+      IC8RL=JJ
+C
+C*          2.3 CREATE INDECES TO THE REQUESTED ELEMENTS.
+C               -----------------------------------------
+ 230  CONTINUE
+C
+      IF(IC7RL.EQ.0.AND.IC8RL.EQ.0) THEN
+         IL=MREL
+         IRL=NRQL
+      END IF
+      IF(IC7RL.NE.0.AND.IC8RL.EQ.0) THEN
+         IL=IC7(1)
+         IRL=IC7R(1)-1
+      END IF
+      IF(IC8RL.NE.0.AND.IC7RL.EQ.0) THEN
+         IL=IC8(1)
+         IRL=IC8R(1)-1
+      END IF
+      IF(IC7RL.NE.0.AND.IC8RL.NE.0) THEN
+         IL=IC7(1)
+         IF(IC7(1).GT.IC8(1)) IL=IC8(1)
+         IRL=IC7R(1)
+         IF(IC7R(1).GT.IC8R(1)) IRL=IC8R(1)
+         IRL=IRL-1
+      END IF
+C
+      DO 299 I=1,MREL
+      IRQEI(I)=0
+ 299  CONTINUE
+C
+      ORQEI=.FALSE.
+      DO 231 I=1,IL
+      IF(IB2.EQ.0.OR.NRQL.EQ.0) THEN
+         ORQEI=.TRUE.
+         IRQEI(I)=I
+      ELSE
+         DO 232 K=1,IRL
+         IF(NWTR(I).EQ.NRQ(K)) THEN
+            ORQEI=.TRUE.
+            IRQEI(I)=I
+         END IF
+ 232     CONTINUE
+      END IF
+ 231  CONTINUE
+C
+      IF(IC7RL.NE.0) THEN
+C
+C        CLASS 7 SIGNIFYING
+C
+         IST=1
+         DO 233 IJ=1,IC7RL
+         III=IC7R(IJ)
+         DO 234 I=IST,IC7L
+         II=IC7(I)
+         IBITP=NBITP(II)
+         IWORD=NWORDP(II)
+
+         CALL BUNPCK(NBPW,KBUFF,IVAL,IWORD,IBITP,NWTDW(II),KERR)
+         IF(KERR.NE.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,IDWINC,IWORD,IBITP,6,KERR)
+         IF(KERR.NE.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         CALL BUNPCK(NBPW,KBUFF,INC,IWORD,IBITP,IDWINC,KERR)
+         IF(INC.EQ.NMASK(IDWINC)) IVAL=NMASK(NWTDW(II))
+C
+         IF(IVAL.NE.NMASK(NWTDW(II))) THEN
+            ISCALE=NWTS(II)
+            IREF  =NWTRV(II)
+            IVAL  =IVAL+IREF+INC
+            VAL   =RVIND
+            IF(IVAL.NE.NMASK(NWTDW(II))) THEN
+               IF(ISCALE.GT.0) THEN
+                  VAL=IVAL/10.**ISCALE
+               ELSE
+                  IISCALE=IABS(ISCALE)
+                  VAL=IVAL*10.**IISCALE
+               END IF
+            END IF
+         ELSE
+            VAL=RVIND
+         END IF
+C
+         INEXT=IC7(I+1)-1
+         IF(IC7(I+1).LE.0) INEXT=MREL
+         IF(ABS(RQVAL(III)-VAL).LT.EPS.OR.
+     1      ABS(RQVAL(III)-RVIND)/RVIND.LT.EPS) THEN
+            DO 236 KI=II,INEXT
+            IF(IB2.EQ.0) THEN
+               ORQEI=.TRUE.
+               IRQEI(KI)=KI
+            ELSE
+               IE=IC7R(IJ+1)-1
+               IF(IJ.EQ.IC7RL) IE=NRQL
+               IF(IC8RL.NE.0) THEN
+                  DO 238 JA=1,IC8RL
+                  IF(IC8R(JA).GT.III.AND.IC8R(JA).LT.IE) THEN
+                     IE=IC8R(JA)-2
+                     GO TO 298
+                  END IF
+ 238              CONTINUE
+               END IF
+ 298           CONTINUE
+               DO 237 IK=III,IE
+               IF(NWTR(KI).EQ.NRQ(IK)) THEN
+                  ORQEI=.TRUE.
+                  IRQEI(KI)=KI
+               END IF
+ 237           CONTINUE
+            END IF
+ 236        CONTINUE
+C
+            GO TO 233
+         END IF
+ 234     CONTINUE
+ 233     CONTINUE
+C
+      END IF
+C
+      IF(IC8RL.NE.0) THEN
+C
+C        CLASS 8 SIGNIFYING
+C
+         IST=1
+         DO 241 IJ=1,IC8RL
+         III=IC8R(IJ)
+         DO 242 I=IST,IC8L
+         II=IC8(I)
+         IBITP=NBITP(II)
+         IWORD=NWORDP(II)
+         CALL GBYTE(KBUFF(IWORD),IVAL,IBITP,NWTDW(II))
+         ISCALE=NWTS(II)
+         IREF  =NWTRV(II)
+         IVAL  =IVAL+IREF
+         VAL   =RVIND
+         IF(IVAL.NE.NMASK(NWTDW(II))) THEN
+            IF(ISCALE.GT.0) THEN
+               VAL=IVAL/10.**ISCALE
+            ELSE
+               IISCALE=IABS(ISCALE)
+               VAL=IVAL*10.**IISCALE
+            END IF
+         END IF
+C
+         INEXT=IC8(I+1)-2
+         IF(IC8(I+1).EQ.0) INEXT=MREL
+C
+         OT=.FALSE.
+         IF(ABS(VAL-RVIND)/RVIND.LT.EPS) THEN
+            IVAL=NINT(VAL)
+            IRQV=NINT(RQVAL(III))
+C
+            IF(NWTR(II).EQ.008001) THEN
+               OT=.TRUE.
+               IF(IAND(IVAL,IRQV).NE.IRQV) OT=.FALSE.
+            ELSE
+               OT=.TRUE.
+               IF(ABS(VAL-RQVAL(III)).GT.EPS) OT=.FALSE.
+            END IF
+         END IF
+C
+         IF(OT) THEN
+            ICL=NWTR(II-1)/1000
+            IF(ICL.EQ.7) IRQEI(II-1)=II-1
+            DO 244 KI=II,INEXT
+            IF(IB2.EQ.0) THEN
+               ORQEI=.TRUE.
+               IRQEI(KI)=KI
+            ELSE
+               IE=IC8R(IJ+1)-1
+               IF(IJ.EQ.IC8RL) IE=NRQL
+               IF(IC7RL.NE.0) THEN
+                  DO 248 JA=1,IC7RL
+                  IF(IC7R(JA).GT.III.AND.IC7R(JA).LT.IE) THEN
+                     IE=IC7R(JA)-1
+                     GO TO 297
+                  END IF
+ 248              CONTINUE
+               END IF
+ 297           CONTINUE
+               DO 245 IK=III,IE
+               IF(NWTR(KI).EQ.NRQ(IK)) THEN
+                 ORQEI=.TRUE.
+                 IRQEI(KI)=KI
+               END IF
+ 245           CONTINUE
+            END IF
+ 244        CONTINUE
+C
+         END IF
+ 242     CONTINUE
+ 241     CONTINUE
+C
+      END IF
+C
+      IF(.NOT.ORQEI) THEN
+         KERR=45
+         CALL BUERR(KERR)
+         M=0
+         RETURN
+      END IF
+C
+C
+C
+C*          3. FIND POINTERS TO QUALITY CONTROL,START OF DATA
+C               ----------------------------------------------
+C               PRESENT INDICATORS AND %CONFIDENCE.
+C               -----------------------------------
+C
+ 300  CONTINUE
+C
+      I=0
+      IF(IB3.NE.0) THEN
+         I=I+1
+         ITYPE(I)=222000
+      END IF
+C
+      IF(IB4.NE.0) THEN
+         I=I+1
+         ITYPE(I)=224000
+      END IF
+C
+      IF(IB5.NE.0) THEN
+         I=I+1
+         ITYPE(I)=225000
+      END IF
+C
+      IF(IB6.NE.0) THEN
+         I=I+1
+         ITYPE(I)=223000
+      END IF
+C
+      KEND=I
+      IF(KEND.EQ.0) THEN
+         J=0
+         DO 4011 I=1,MREL
+         IF(IRQEI(I).NE.0) THEN
+            II=IRQEI(I)
+            J=J+1
+            INWORDP(J)=NWORDP(II)
+            INBITP(J)=NBITP(II)
+            INWTR(J)=NWTR(II)
+            INWTS(J)=NWTS(II)
+            INWTRV(J)=NWTRV(II)
+            INWTDW(J)=NWTDW(II)
+            INWTEN(J)=NWTEN(II)
+            CNAMES(J)=CWTEN(II)
+            CUNITS(J)=CWTU(II)
+         END IF
+ 4011    CONTINUE
+         GO TO 900
+      END IF
+C
+      OLIST=.FALSE.
+      O236=.FALSE.
+      O237=.FALSE.
+C
+      DO 500 KT=1,KEND
+         JQPR=0
+         JQUA=0
+         JQCA=0
+         JQC =0
+         JQCC=0
+         JQCS=0
+         KM=MREL
+C
+C
+C        FIND POINTERS TO OPERATORS
+C
+         KZ=0
+         DO 3031 I=KM,M
+         IF(NWTR(I).EQ.ITYPE(KT)) THEN
+            KZ=KZ+1
+            NQP(KZ)=I
+         END IF
+ 3031    CONTINUE
+C
+         IF(KZ.EQ.0) THEN
+            WRITE(KNTN,*) ITYPE(KT),' NOT PRESENT IN THIS MESSAGE.'
+            GO TO 500
+         ELSE
+            KZ=KZ+1
+            NQP(KZ)=M
+         END IF
+C
+         DO 3033 KQ=1,KZ-1
+C
+         JQUA=NQP(KQ)
+C
+         IF(NWTR(JQUA+1).EQ.236000) THEN
+            JQ236=JQUA+1
+            O236=.TRUE.
+         END IF
+C
+         IF(NWTR(JQUA+1).EQ.237000) THEN
+            JQ237=JQUA+1
+            O237=.TRUE.
+         ELSE
+            O237=.FALSE.
+         END IF
+C
+C
+C        DATA PRESENT INDICATOR
+C
+         IF(.NOT.O236.AND.O237) THEN
+C
+C           FIND LAST DEFINED BIT MAP
+C
+            DO 420 I=JQUA,MREL,-1
+            IF(NWTR(I).EQ.236000) GO TO 421
+ 420        CONTINUE
+C
+            KERR=41
+            CALL BUERR(KERR)
+            RETURN
+C
+ 421        CONTINUE
+C
+            O236=.TRUE.
+            O237=.FALSE.
+            JQ236=I
+            JQ237=0
+            IK=I
+            IDPRF=0
+            DO 3015 I=IK,M
+            IF(NWTR(I).EQ.31031.OR.NWTR(I).EQ.31192) THEN
+               IDPRF=IDPRF+1
+               IF(IDPRF.EQ.1) JQPR=I
+            ELSE
+               IF(IDPRF.NE.0) GO TO 30111
+            END IF
+ 3015       CONTINUE
+C
+ 3016       CONTINUE
+         END IF
+C
+C        DATA PRESENT INDICATOR
+C
+         IF(.NOT.O237) THEN
+            IDPRF=0
+            DO 301 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I).EQ.31031.OR.NWTR(I).EQ.31192) THEN
+               IDPRF=IDPRF+1
+               IF(IDPRF.EQ.1) JQPR=I
+            ELSE
+               IF(IDPRF.NE.0) GO TO 30111
+            END IF
+ 301        CONTINUE
+         END IF
+C
+30111   CONTINUE
+C
+C        GENERATING CENTRE
+C
+         DO 309 I=JQUA,NQP(KQ+1)
+         IF(NWTR(I).EQ.1031) THEN
+            JQCC=I
+            GO TO 302
+         END IF
+ 309     CONTINUE
+C
+ 302     CONTINUE
+C
+C        GENERATING APPLICATION
+C
+         DO 307 I=JQUA,NQP(KQ+1)
+         IF(NWTR(I).EQ.1032.OR.NWTR(I).EQ.1201.OR.
+     1      NWTR(I).EQ.63191) THEN
+            JQCA=I
+            GO TO 3071
+         END IF
+ 307     CONTINUE
+C
+ 3071    CONTINUE
+C
+C        PERCENTAGE CONFIDENCE
+C
+         IF(ITYPE(KT).EQ.222000) THEN
+            DO 305 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I)/1000.EQ.33.OR.NWTR(I).EQ.63192) THEN
+               JQC=I
+               GO TO 306
+            END IF
+ 305        CONTINUE
+         ELSE
+C           SIGNIFICANCE
+C
+            DO 308 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I)/1000.EQ.8) THEN
+               JQCS=I
+               GO TO 3088
+            END IF
+ 308        CONTINUE
+C
+ 3088       CONTINUE
+C
+            DO 3051 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I).EQ.223255.OR.NWTR(I).EQ.224255.OR.
+     1         NWTR(I).EQ.225255) THEN
+               JQC=I
+               GO TO 306
+            END IF
+ 3051       CONTINUE
+         END IF
+C
+C
+ 306     CONTINUE
+C
+C*          3.1  SET INDICES TO GET Q/C.
+C                GET BIT MAP FROM DATA SECTION.
+C
+ 310  CONTINUE
+C
+         IF(JQUA.EQ.0) THEN
+            WRITE(KNTN,'(1H )')
+        WRITE(KNTN,'(1H ,A)') 'Q/C NOT PRESENT IN THIS BUFR MESSAGE.'
+            WRITE(KNTN,'(1H )')
+         ELSE
+C
+            IF(.NOT.O237) THEN
+C
+               KAK=0
+               IQPR=JQPR-1
+               DO 311 K=1,IDPRF
+               IQPR=IQPR+1
+               KAK=KAK+1
+               IWPT=NWORDP(IQPR)
+               IBPT=NBITP (IQPR)
+               CALL GBYTE(KBUFF(IWPT),IBVAL(KAK),IBPT,1)
+ 311           CONTINUE
+            END IF
+C
+            IDIF=MREL-IDPRF
+C
+            JS=0
+            IF(IDIF.NE.0) THEN
+               DO 313 I=1,IDIF
+               JS=JS+1
+               IQCDPI(JS)=0
+ 313           CONTINUE
+            END IF
+C
+            JQPRM1=JQPR-1
+            DO 314 I=1,IDPRF
+            JS=JS+1
+            IQCDPI(JS)=I+JQPRM1
+ 314        CONTINUE
+C
+            JS=0
+            IF(IDIF.NE.0) THEN
+               DO 315 I=1,IDIF
+               JS=JS+1
+               IQCI(JS)=0
+ 315           CONTINUE
+            END IF
+C
+            K=JQC-1
+            DO 317 I=1,IDPRF
+            OK=.TRUE.
+            JS=JS+1
+            IQCI(JS)=0
+            IF(IBVAL(I).EQ.0) THEN
+               IF(OK) K=K+1
+               IQCI(JS)=K
+               OK=.FALSE.
+            END IF
+ 317        CONTINUE
+C
+         END IF
+C
+C
+C*          4.  CREATE REQUESTED ELEMENT LIST.
+C               ------------------------------
+ 400  CONTINUE
+C
+      IF(.NOT.OLIST) THEN
+         IF(NREQ(2).EQ.0) NRQL=0
+         J=0
+         DO 401 I=1,MREL
+         IF(IRQEI(I).NE.0) THEN
+            II=IRQEI(I)
+            J=J+1
+            INBITP(J)=NBITP(II)
+            INWORDP(J)=NWORDP(II)
+            INWTR(J)  =NWTR(II)
+            INWTS(J)  =NWTS(II)
+            INWTRV(J) =NWTRV(II)
+            INWTDW(J) =NWTDW(II)
+            INWTEN(J) =NWTEN(II)
+            CNAMES(J)=CWTEN(II)
+            CUNITS(J)=CWTU(II)
+            OLIST=.TRUE.
+         END IF
+ 401     CONTINUE
+      END IF
+C
+      IF(JQUA.NE.0) THEN
+C
+C*          4.1 ADD DATA PRESENT INDICATOR AND Q/C.
+C               -----------------------------------
+ 410     CONTINUE
+C
+C                  ADD OPERATOR 222000
+         J=J+1
+         INWORDP(J)=NWORDP(JQUA)
+         INBITP (J)=NBITP (JQUA)
+         INWTR(J)  =NWTR(JQUA)
+         INWTS(J)  =NWTS(JQUA)
+         INWTRV(J) =NWTRV(JQUA)
+         INWTDW(J) =NWTDW(JQUA)
+         INWTEN(J) =NWTEN(JQUA)
+         CNAMES(J)=CWTEN(JQUA)
+         CUNITS(J)=CWTU(JQUA)
+C
+         IF(O236.AND..NOT.O237) THEN
+            J=J+1
+            INWORDP(J)=NWORDP(JQ236)
+            INBITP (J)=NBITP (JQ236)
+            INWTR(J)  =NWTR(JQ236)
+            INWTS(J)  =NWTS(JQ236)
+            INWTRV(J) =NWTRV(JQ236)
+            INWTDW(J) =NWTDW(JQ236)
+            INWTEN(J) =NWTEN(JQ236)
+            CNAMES(J)=CWTEN(JQ236)
+         END IF
+C
+         IF(O237) THEN
+            J=J+1
+            INWORDP(J)=NWORDP(JQ237)
+            INBITP (J)=NBITP (JQ237)
+            INWTR (J) =NWTR (JQ237)
+            INWTS (J) =NWTS (JQ237)
+            INWTRV(J) =NWTRV(JQ237)
+            INWTDW(J) =NWTDW(JQ237)
+            INWTEN(J) =NWTEN(JQ237)
+            CNAMES(J)=CWTEN(JQ237)
+            CUNITS(J)=CWTU (JQ237)
+         END IF
+C
+         IF(.NOT.O237) THEN 
+            DO 412 I=1,MREL
+            IF(IRQEI(I).NE.0) THEN
+               IF(IQCDPI(I).NE.0) THEN
+                  J=J+1
+                  INWORDP(J)=NWORDP(IQCDPI(I))
+                  INBITP (J)=NBITP (IQCDPI(I))
+                  INWTR(J)  =NWTR(IQCDPI(I))
+                  INWTS(J)  =NWTS(IQCDPI(I))
+                  INWTRV(J) =NWTRV(IQCDPI(I))
+                  INWTDW(J) =NWTDW(IQCDPI(I))
+                  INWTEN(J) =NWTEN(IQCDPI(I))
+                  CNAMES(J)=CWTEN(IQCDPI(I))
+                  CUNITS(J)=CWTU(IQCDPI(I))
+               END IF
+            END IF
+ 412        CONTINUE
+         END IF
+C
+C
+C        GENERATING CENTRE
+C
+         IF(JQCC.NE.0) THEN
+            J=J+1
+            INWORDP(J)=NWORDP(JQCC)
+            INBITP (J)=NBITP (JQCC)
+            INWTR(J)  =NWTR(JQCC)
+            INWTS(J)  =NWTS(JQCC)
+            INWTRV(J) =NWTRV(JQCC)
+            INWTDW(J) =NWTDW(JQCC)
+            INWTEN(J) =NWTEN(JQCC)
+            CNAMES(J)=CWTEN(JQCC)
+            CUNITS(J)=CWTU(JQCC)
+         END IF
+C
+C        Q/C APPLICATION
+C
+         IF(JQCA.NE.0) THEN
+            J=J+1
+            INWORDP(J)=NWORDP(JQCA)
+            INBITP (J)=NBITP (JQCA)
+            INWTR(J)  =NWTR(JQCA)
+            INWTS(J)  =NWTS(JQCA)
+            INWTRV(J) =NWTRV(JQCA)
+            INWTDW(J) =NWTDW(JQCA)
+            INWTEN(J) =NWTEN(JQCA)
+            CNAMES(J)=CWTEN(JQCA)
+            CUNITS(J)=CWTU(JQCA)
+         END IF
+C
+C        SIGNIFICANCE
+C
+         IF(JQCS.NE.0) THEN
+            J=J+1
+            INWORDP(J)=NWORDP(JQCS)
+            INBITP (J)=NBITP (JQCS)
+            INWTR(J)  =NWTR(JQCS)
+            INWTS(J)  =NWTS(JQCS)
+            INWTRV(J) =NWTRV(JQCS)
+            INWTDW(J) =NWTDW(JQCS)
+            INWTEN(J) =NWTEN(JQCS)
+            CNAMES(J)=CWTEN(JQCS)
+            CUNITS(J)=CWTU(JQCS)
+         END IF
+C
+C
+C        CLASS 33 ELEMENTS
+C
+         DO 415 I=1,MREL
+         IF(IRQEI(I).NE.0) THEN
+            OK=.TRUE.
+            IF(IQCI(I).NE.0) THEN
+               IF(OK) J=J+1
+               OK=.FALSE.
+               INWORDP(J)=NWORDP(IQCI(I))
+               INBITP (J)=NBITP (IQCI(I))
+               INWTR(J)  =NWTR  (IQCI(I))
+               INWTS(J)  =NWTS  (IQCI(I))
+               INWTRV(J) =NWTRV (IQCI(I))
+               INWTDW(J) =NWTDW (IQCI(I))
+               INWTEN(J) =NWTEN (IQCI(I))
+               CNAMES(J)=CWTEN (IQCI(I))
+               CUNITS(J)=CWTU  (IQCI(I))
+            END IF
+         END IF
+ 415     CONTINUE
+      END IF
+ 3033 CONTINUE
+C
+C
+C*          5. MAKE ONE TO ONE CORRESPONDENCE BETWEEN ELEMENTS AND
+C              Q/C,STATISTICS,DIFFERENCE STATISTICS OR SUBSTITUTED VALUES
+C              LEAVING BEHIND DATA PRESENT INDICATORS.
+ 500  CONTINUE
+C
+C
+C*          9.  UPDATE TOTAL NUMBER OF ELEMENTS.
+C               --------------------------------
+ 900  CONTINUE
+C
+      M=J
+      NFCM=1
+      NFUCM=0
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/burquc.F b/bufrdc/burquc.F
new file mode 100755
index 0000000..42838d6
--- /dev/null
+++ b/bufrdc/burquc.F
@@ -0,0 +1,1234 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BURQUC(KBUFL,KBUFF,KELEM,CNAMES,CUNITS,KSUP,KSEC3,KERR)
+C
+C**** *BURQUC*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          CREATE PARAMETERS NEEDED FOR PARTIAL EXPANSION OF
+C     BUFR MESSAGE ACCORDING TO REQUESTED INPUT LISTS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BURQUC(KBUFL,KBUFF,KELEM,CNAMES,CUNITS,KSUP,KSEC3,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)-- LENGTH OF SECTION 3 (BYTES)
+C                            KSEC3( 2)-- RESERVED
+C                            KSEC3( 3)-- NUMBER OF SUBSETS
+C                            KSEC3( 4)-- FLAG (DATA TYPE,DATA COMPRESSION)
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C          WORD AND BIT POINTERS ARE CALCULATED FOR EVERY ELEMENT
+C     IN THE EXPANDED LIST OF ELEMENTS. IF PARTIAL EXPANSION REQUESTED,
+C     INDECES TO REQUIRED ELEMENTS ARE DETERMINED, AS WELL AS CORRESPONDING
+C     QUALITY CONTROL, STATISTICS ETC. INFORMATION.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACKS BIT PATTERN
+C          BUNPKS         - UNPACKS BIT PATTERN IN REPEATED WAY
+C          BUPMRK          - PROCES MARKER OPERATOR
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcombef.F"
+#     include "bcomwt.F"
+#     include "bcomp.F"
+#     include "bcomwtc.F"
+#     include "bcomrq.F"
+#     include "bcomreq.F"
+#     include "bcomoff.F"
+C
+      CHARACTER CWTEN*64,CWTU*24
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+C
+      DIMENSION IRQEI(JELEM),IQCI(JELEM),IQCDPI(JELEM)
+      DIMENSION IBVAL(JELEM),IBV(JELEM)
+      DIMENSION IC7(JELEM),IC8(JELEM),IC7R(JELEM),IC8R(JELEM)
+      DIMENSION NQP(JELEM),ITYPE(100)
+C
+      DIMENSION IMASK(8)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 RQVAL
+      REAL*8 VAL
+#else
+      REAL   RVIND
+      REAL   EPS
+      REAL   RQVAL
+      REAL   VAL
+#endif
+C
+      SAVE IBV,IBVAL
+C
+      DATA IMASK /1,2,4,8,16,32,64,128/
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          1.  DEFINE WORD/BIT POINTERS TO EVERY ELEMENT.
+C               ------------------------------------------
+ 100  CONTINUE
+C
+      NFUCM=1
+      NFCM=0
+C
+      IF(KERR.GT.0) RETURN
+C
+C     CHECK REQUEST VALIDITY
+C
+      IF(NREQ(1).EQ.0.AND.NREQ(2).NE.0) THEN
+         KERR=38
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      MREL=0
+C
+      IBP32= 32 + NBPTB
+C
+      IB1=0
+      IF(IAND(NREQ(2),IMASK(1)).NE.0) IB1=1
+      IB2=0
+      IF(IAND(NREQ(2),IMASK(2)).NE.0) IB2=1
+      IB3=0
+      IF(IAND(NREQ(2),IMASK(3)).NE.0) IB3=1
+      IB4=0
+      IF(IAND(NREQ(2),IMASK(4)).NE.0) IB4=1
+      IB5=0
+      IF(IAND(NREQ(2),IMASK(5)).NE.0) IB5=1
+      IB6=0
+      IF(IAND(NREQ(2),IMASK(6)).NE.0) IB6=1
+C
+C
+C*          1.2 NON-COMPRESSED DATA.
+C               --------------------
+ 120  CONTINUE
+C
+      IF(OMULTI) THEN
+C
+         N=1
+         DO 1221 I=1,N
+         IBIT=0
+         IF(NSUBSET.EQ.1) THEN
+            IBIT = IBIT + IBP32   ! beginning of first element
+            IWORD= IBIT/NBPW
+         ELSE
+            IBIT=NBP
+         END IF
+C
+         I1MK=(I-1)*KELEM
+         I1= 1+I1MK
+C
+         IF(NSUBSET.EQ.1) THEN
+            NBITP (I1)= IBIT - IWORD*NBPW  
+            NWORDP(I1)= NWPTB + IWORD
+         ELSE
+            NWORDP(I1)= NWP
+            NBITP (I1)= NBP
+            IBIT= IBIT + NWP*NBPW
+         END IF
+C
+         DO 1231 J=2,M
+         IBIT = IBIT + NWTDW(J-1)
+         IWORD= IBIT/NBPW
+C
+         JI= J+I1MK
+C
+         NBITP (JI)= IBIT - IWORD*NBPW
+         IF(NSUBSET.EQ.1) THEN
+            NWORDP(JI)= NWPTB + IWORD
+         ELSE
+            NWORDP(JI)=IWORD
+         END IF
+ 1231    CONTINUE
+ 1221    CONTINUE
+
+         NSIZEG(NSUBSET)=M
+      ELSE
+         IBIT0= 0
+C
+         IF(N.GT.1) THEN
+            DO 121 J=1,M
+            IBIT0 = IBIT0 + NWTDW(J)
+ 121        CONTINUE
+         END IF
+C
+         DO 122 I=1,N
+         IBIT=0
+         IBIT=IBIT0*(I-1)
+         IBIT = IBIT + IBP32
+         IWORD= IBIT/NBPW
+C
+         I1MK=(I-1)*KELEM
+         I1= 1+I1MK
+C
+         NBITP (I1)= IBIT - IWORD*NBPW
+         NWORDP(I1)= NWPTB + IWORD
+C
+         DO 123 J=2,M
+         IBIT = IBIT + NWTDW(J-1)
+         IWORD= IBIT/NBPW
+C
+         JI= J+I1MK
+C
+         NBITP (JI)= IBIT - IWORD*NBPW
+         NWORDP(JI)= NWPTB + IWORD
+ 123     CONTINUE
+ 122     CONTINUE
+C
+      END IF
+C     -----------------------------------------------------------------
+C*          2. CREATE POINTERS FOR REQUESTED ELEMENTS.
+C              ---------------------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1 CHECK IF SUBSET OF ELEMENTS REQUESTED.
+C
+ 210  CONTINUE
+C
+      IF(NREQ(1).EQ.0) THEN
+         DO 212 I=1,M
+         INWTEN(I)=NWTEN(I)
+         INWTR (I)=NWTR (I)
+         INWTS (I)=NWTS (I)
+         INWTDW(I)=NWTDW(I)
+         INWTRV(I)=NWTRV(I)
+         CNAMES(I)=CWTEN(I)
+         CUNITS(I)=CWTU(I)
+         DO 2128 J=1,N
+         JM1K=(J-1)*KELEM
+         JI=I+JM1K
+         INWORDP(JI)=NWORDP(JI)
+         INBITP(JI)=NBITP(JI)
+ 2128    CONTINUE
+ 212     CONTINUE
+         RETURN
+      END IF
+C
+      IF(NREQ(1).EQ.1) THEN
+         DO 213 I=1,M
+         IF(NWTR(I).GT.200000.AND.
+     1      NWTR(I).NE.999999) THEN
+            MREL=I-1
+            GO TO 2133
+         END IF
+ 213     CONTINUE
+         MREL=M
+C
+ 2133    CONTINUE
+         J=0
+         IF(NREQ(2).EQ.0) THEN
+            DO 2131 I=1,MREL
+            J=J+1
+            DO 2132 K=1,N
+C
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            IK=I+K1K
+C
+            INBITP(JK)=NBITP(IK)
+            INWORDP(JK)=NWORDP(IK)
+ 2132       CONTINUE
+            INWTEN(J)=NWTEN(I)
+            INWTR(J)=NWTR(I)
+            INWTS(J)=NWTS(I)
+            INWTDW(J)=NWTDW(I)
+            INWTRV(J)=NWTRV(I)
+            CNAMES(J)=CWTEN(I)
+            CUNITS(J)=CWTU(I)
+ 2131       CONTINUE
+            M=J
+            RETURN
+         ELSE
+            M=MREL
+            GO TO 220
+         END IF
+C
+      END IF
+C
+      IF(NREQ(1).EQ.2) THEN
+         DO 214 I=1,M
+         IF(NWTR(I).EQ.235000) THEN
+            M=I-1
+            GO TO 2141
+         END IF
+ 214     CONTINUE
+C
+ 2141    CONTINUE
+C
+         J=0
+         IF(NREQ(2).EQ.0) THEN
+            DO 2142 I=1,M    
+            J=J+1
+            DO 2143 K=1,N
+C
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            IK=I+K1K
+C
+            INBITP(JK)=NBITP(IK)
+            INWORDP(JK)=NWORDP(IK)
+ 2143       CONTINUE
+            INWTEN(J)=NWTEN(I)
+            INWTR(J)=NWTR(I)
+            INWTS(J)=NWTS(I)
+            INWTDW(J)=NWTDW(I)
+            INWTRV(J)=NWTRV(I)
+            CNAMES(J)=CWTEN(I)
+            CUNITS(J)=CWTU(I)
+ 2142       CONTINUE
+C
+            RETURN
+         ELSE
+            GO TO 220
+         END IF
+      END IF
+C
+      IF(NREQ(1).EQ.3) THEN
+         DO 215 I=1,M
+         IF(NWTR(I).EQ.235000) THEN
+C
+C           COPY CLASS 1 - 8
+C
+            DO 2151 III=1,M
+            IF(NWTR(III).GT.8000) THEN
+               J=0
+               IF(NREQ(2).EQ.0) THEN
+                  DO 2161 II=1,III-1
+                  J=J+1
+                  DO 2171 K=1,N
+                  K1K=(K-1)*KELEM
+                  JK=J+K1K
+                  IIK=II+K1K
+                  INBITP(JK)=NBITP(IIK)
+                  INWORDP(JK)=NWORDP(IIK)
+ 2171             CONTINUE
+                  INWTR(J)  =NWTR(II)
+                  INWTS(J)  =NWTS(II)
+                  INWTRV(J) =NWTRV(II)
+                  INWTDW(J) =NWTDW(II)
+                  INWTEN(J) =NWTEN(II)
+                  CNAMES(J)=CWTEN(II)
+                  CUNITS(J)=CWTU(II)
+ 2161             CONTINUE
+                  GO TO 2160
+               ELSE
+                  DO 21611 II=1,III-1
+                  J=J+1
+                  DO 21711 K=1,N
+                  K1K=(K-1)*KELEM
+                  JK=J+K1K
+                  IIK=II+K1K
+                  NBITP(JK)=NBITP(IIK)
+                  NWORDP(JK)=NWORDP(IIK)
+21711             CONTINUE
+                  NWTR(J)  =NWTR(II)
+                  NWTS(J)  =NWTS(II)
+                  NWTRV(J) =NWTRV(II)
+                  NWTDW(J) =NWTDW(II)
+                  NWTEN(J) =NWTEN(II)
+                  CWTEN(J)=CWTEN(II)
+                  CWTU(J)=CWTU(II)
+21611             CONTINUE
+                  GO TO 2160
+               END IF
+            END IF
+ 2151       CONTINUE
+C----------------------------------------------------------------------
+ 2160       CONTINUE
+            IF(NREQ(2).EQ.0) THEN
+            DO 216 II=I+1,M
+               J=J+1
+               DO 217 K=1,N
+               K1K=(K-1)*KELEM
+               JK=J+K1K
+               IIK=II+K1K
+               INBITP(JK)=NBITP(IIK)
+               INWORDP(JK)=NWORDP(IIK)
+ 217           CONTINUE
+               INWTR(J)  =NWTR(II)
+               INWTS(J)  =NWTS(II)
+               INWTRV(J) =NWTRV(II)
+               INWTDW(J) =NWTDW(II)
+               INWTEN(J) =NWTEN(II)
+               CNAMES(J)=CWTEN(II)
+               CUNITS(J)=CWTU(II)
+ 216           CONTINUE
+               M=J
+               RETURN
+            ELSE
+               DO 2169 II=I+1,M
+               J=J+1
+               DO 2179 K=1,N
+               K1K=(K-1)*KELEM
+               JK=J+K1K
+               IIK=II+K1K
+               NBITP(JK)=NBITP(IIK)
+               NWORDP(JK)=NWORDP(IIK)
+ 2179          CONTINUE
+               NWTR(J)  =NWTR(II)
+               NWTS(J)  =NWTS(II)
+               NWTRV(J) =NWTRV(II)
+               NWTDW(J) =NWTDW(II)
+               NWTEN(J) =NWTEN(II)
+               CWTEN(J)=CWTEN(II)
+               CWTU(J)=CWTU(II)
+ 2169          CONTINUE
+               M=J
+               GO TO 220
+            END IF
+         END IF
+ 215     CONTINUE
+         KERR=39
+         CALL BUERR(KERR)
+         M=0
+         RETURN
+      ELSE 
+         KERR=40
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C
+C*          2.2 CREATE INDICES TO CLASS 7/8
+C               ---------------------------
+ 220  CONTINUE
+C
+      DO 225 I=1,M
+      IF(NWTR(I).GT.200000.AND.
+     1   NWTR(I).NE.999999) THEN
+         MREL=I-1
+         GO TO 226
+      END IF
+ 225  CONTINUE
+C
+      MREL=M
+C
+ 226  CONTINUE
+C
+      J=0
+      JJ=0
+      DO 221 I=1,MREL
+      ICLASS=NWTR(I)/1000
+      IF(ICLASS.EQ.7) THEN
+         J=J+1
+         IC7(J)=I
+      END IF
+C
+      IF(ICLASS.EQ.8) THEN
+         JJ=JJ+1
+         IC8(JJ)=I
+      END IF
+ 221  CONTINUE
+C
+      IC7L=J
+      IC8L=JJ
+      J=0
+      JJ=0
+      DO 223 I=1,NRQL
+      ICLASS=NRQ(I)/1000
+      IF(ICLASS.EQ.7.AND.(ABS(RQVAL(I)-RVIND)/RVIND.GT.EPS)) THEN
+         J=J+1
+         IC7R(J)=I
+      END IF
+C
+      IF(ICLASS.EQ.8.AND.(ABS(RQVAL(I)-RVIND)/RVIND.GT.EPS)) THEN
+         JJ=JJ+1
+         IC8R(JJ)=I
+      END IF
+ 223  CONTINUE
+C
+      IC7RL=J
+      IC8RL=JJ
+C
+C*          2.3 CREATE INDECES TO THE REQUESTED ELEMENTS.
+C               -----------------------------------------
+ 230  CONTINUE
+C
+      IF(IC7RL.EQ.0.AND.IC8RL.EQ.0) THEN
+         IL=MREL
+         IRL=NRQL
+      END IF
+      IF(IC7RL.NE.0.AND.IC8RL.EQ.0) THEN
+         IL=IC7(1)
+         IRL=IC7R(1)-1
+      END IF
+      IF(IC8RL.NE.0.AND.IC7RL.EQ.0) THEN
+         IL=IC8(1)
+         IRL=IC8R(1)-1
+      END IF
+      IF(IC7RL.NE.0.AND.IC8RL.NE.0) THEN
+         IL=IC7(1)
+         IF(IC7(1).GT.IC8(1)) IL=IC8(1)
+         IRL=IC7R(1)
+         IF(IC7R(1).GT.IC8R(1)) IRL=IC8R(1)
+         IRL=IRL-1
+      END IF
+C
+      DO 299 I=1,MREL
+      IRQEI(I)=0
+ 299  CONTINUE
+C
+      ORQEI=.FALSE.
+      DO 231 I=1,IL
+      IF(IB2.EQ.0.OR.NRQL.EQ.0) THEN
+         ORQEI=.TRUE.
+         IRQEI(I)=I
+      ELSE
+         DO 232 K=1,IRL
+         IF(NWTR(I).EQ.NRQ(K)) THEN
+            ORQEI=.TRUE.
+            IRQEI(I)=I
+         END IF
+ 232     CONTINUE
+      END IF
+ 231  CONTINUE
+C
+C
+      IF(IC7RL.NE.0) THEN
+C
+C        CLASS 7 SIGNIFYING
+C
+         IST=1
+         DO 233 IJ=1,IC7RL
+         III=IC7R(IJ)
+         DO 234 I=IST,IC7L
+         II=IC7(I)
+         IF(IC7R(IJ).EQ.IC7R(IJ+1)) THEN
+         IF(NWTR(II).NE.NWTR(II+1)) GO TO 234
+         END IF
+         IBITP=NBITP(II)
+         IWORD=NWORDP(II)
+         CALL GBYTE(KBUFF(IWORD),IVAL,IBITP,NWTDW(II))
+         ISCALE=NWTS(II)
+         IREF  =NWTRV(II)
+         IVAL  =IVAL+IREF
+         VAL   =RVIND
+         IF(IVAL.NE.NMASK(NWTDW(II))) THEN
+            IF(ISCALE.GT.0) THEN
+               VAL=IVAL/10.**ISCALE
+            ELSE
+               IISCALE=IABS(ISCALE)
+               VAL=IVAL*10.**IISCALE
+            END IF
+         END IF
+C
+         INEXT=IC7(I+1)-1
+         IF(I.EQ.IC7L) INEXT=MREL
+C         IF(IC7(I+1).EQ.0) INEXT=MREL
+         IF(ABS(RQVAL(III)-VAL).LT.EPS.OR.
+     1      ABS(RQVAL(III)-RVIND)/RVIND.LT.EPS) THEN
+            DO 236 KI=II,INEXT
+            IF(IB2.EQ.0) THEN
+               ORQEI=.TRUE.
+               IRQEI(KI)=KI
+            ELSE
+               IE=IC7R(IJ+1)-1
+               IF(IJ.EQ.IC7RL) IE=NRQL
+               IF(IC8RL.NE.0) THEN
+                  DO 238 JA=1,IC8RL
+                  IF(IC8R(JA).GT.III.AND.IC8R(JA).LT.IE) THEN
+                     IE=IC8R(JA)-2
+                     GO TO 298
+                  END IF
+ 238              CONTINUE
+               END IF
+ 298           CONTINUE
+               DO 237 IK=III,IE
+               IF(NWTR(KI).EQ.NRQ(IK)) THEN
+                  ORQEI=.TRUE.
+                  IRQEI(KI)=KI
+               END IF
+ 237           CONTINUE
+            END IF
+ 236        CONTINUE
+C
+            GO TO 233
+         END IF
+ 234     CONTINUE
+ 233     CONTINUE
+C
+      END IF
+C
+      IF(IC8RL.NE.0) THEN
+C
+C        CLASS 8 SIGNIFYING
+C
+         IST=1
+         DO 241 IJ=1,IC8RL
+         III=IC8R(IJ)
+         DO 242 I=IST,IC8L
+         II=IC8(I)
+         IBITP=NBITP(II)
+         IWORD=NWORDP(II)
+         CALL GBYTE(KBUFF(IWORD),IVAL,IBITP,NWTDW(II))
+         ISCALE=NWTS(II)
+         IREF  =NWTRV(II)
+         IVAL  =IVAL+IREF
+         VAL   =RVIND
+         IF(IVAL.NE.NMASK(NWTDW(II))) THEN
+            IF(ISCALE.GT.0) THEN
+               VAL=IVAL/10.**ISCALE
+            ELSE
+               IISCALE=IABS(ISCALE)
+               VAL=IVAL*10.**IISCALE
+            END IF
+         END IF
+C
+         INEXT=IC8(I+1)-2
+         IF(IC8(I+1).EQ.0) INEXT=MREL
+C
+         OT=.FALSE.
+         IF(ABS(VAL-RVIND)/RVIND.LT.EPS) THEN
+            IVAL=NINT(VAL)
+            IRQV=NINT(RQVAL(III))
+C
+            IF(NWTR(II).EQ.008001) THEN
+               OT=.TRUE.
+               IF(IAND(IVAL,IRQV).NE.IRQV) OT=.FALSE.
+            ELSE
+               OT=.TRUE.
+               IF(ABS(VAL-RQVAL(III)).GT.EPS) OT=.FALSE.
+            END IF
+         END IF
+C
+         IF(OT) THEN
+            ICL=NWTR(II-1)/1000
+            IF(ICL.EQ.7) IRQEI(II-1)=II-1
+            DO 244 KI=II,INEXT
+            IF(IB2.EQ.0) THEN
+               ORQEI=.TRUE.
+               IRQEI(KI)=KI
+            ELSE
+               IE=IC8R(IJ+1)-1
+               IF(IJ.EQ.IC8RL) IE=NRQL
+               IF(IC7RL.NE.0) THEN
+                  DO 248 JA=1,IC7RL
+                  IF(IC7R(JA).GT.III.AND.IC7R(JA).LT.IE) THEN
+                     IE=IC7R(JA)-1
+                     GO TO 297
+                  END IF
+ 248              CONTINUE
+               END IF
+ 297           CONTINUE
+               DO 245 IK=III,IE
+               IF(NWTR(KI).EQ.NRQ(IK)) THEN
+                  ORQEI=.TRUE.
+                  IRQEI(KI)=KI
+               END IF
+ 245           CONTINUE
+            END IF
+ 244        CONTINUE
+C
+         END IF
+ 242     CONTINUE
+ 241     CONTINUE
+C
+      END IF
+C
+      IF(.NOT.ORQEI) THEN
+         KERR=45
+         CALL BUERR(KERR)
+         M=0
+         RETURN
+      END IF
+
+C
+C
+C*          3. FIND POINTERS TO QUALITY CONTROL,START OF DATA
+C               ----------------------------------------------
+C               PRESENT INDICATORS AND %CONFIDENCE.
+C               -----------------------------------
+C
+ 300  CONTINUE
+C
+      I=0
+      IF(IB3.NE.0) THEN
+         I=I+1
+         ITYPE(I)=222000
+      END IF
+C
+      IF(IB4.NE.0) THEN
+         I=I+1
+         ITYPE(I)=224000
+      END IF
+C
+      IF(IB5.NE.0) THEN
+         I=I+1
+         ITYPE(I)=225000
+      END IF
+C
+      IF(IB6.NE.0) THEN
+         I=I+1
+         ITYPE(I)=223000
+      END IF
+C
+      KEND=I
+      IF(KEND.EQ.0) THEN
+        J=0
+        DO 4011 I=1,MREL
+        IF(IRQEI(I).NE.0) THEN
+          II=IRQEI(I)
+          J=J+1
+          DO 4021 K=1,N
+          K1K=(K-1)*KELEM
+          JK=J+K1K
+          IIK=II+K1K
+          INWORDP(JK)=NWORDP(IIK)
+          INBITP (JK)=NBITP (IIK)
+ 4021     CONTINUE
+          INWTR(J)  =NWTR(II)
+          INWTS(J)  =NWTS(II)
+          INWTRV(J) =NWTRV(II)
+          INWTDW(J) =NWTDW(II)
+          INWTEN(J) =NWTEN(II)
+          CNAMES(J)=CWTEN(II)
+          CUNITS(J)=CWTU(II)
+        END IF
+4011    CONTINUE
+        GO TO 900
+      END IF
+C
+      OLIST=.FALSE.
+      O236=.FALSE.
+      O237=.FALSE.
+C
+      DO 500 KT=1,KEND
+C
+         JQPR=0
+         JQUA=0
+         JQCA=0
+         JQC =0
+         JQCC=0
+         JQCS=0
+         KM=MREL
+C
+C        FIND POINTERS TO OPERATORS
+C
+         KZ=0
+         DO 3031 I=KM,M
+         IF(NWTR(I).EQ.ITYPE(KT)) THEN
+            KZ=KZ+1
+            NQP(KZ)=I
+         END IF
+ 3031    CONTINUE
+C
+         IF(KZ.EQ.0) THEN
+            WRITE(KNTN,*) ITYPE(KT),' NOT PRESENT IN THIS MESSAGE.'
+            GO TO 500
+         ELSE
+            KZ=KZ+1
+            NQP(KZ)=M
+         END IF
+C
+         DO 3033 KQ=1,KZ-1
+C
+         JQUA=NQP(KQ)
+C
+         IF(NWTR(JQUA+1).EQ.236000) THEN
+            JQ236=JQUA+1
+            O236=.TRUE.
+         END IF
+C
+         IF(NWTR(JQUA+1).EQ.237000) THEN
+            JQ237=JQUA+1
+            O237=.TRUE.
+         ELSE
+            O237=.FALSE.
+         END IF
+C
+C
+C        DATA PRESENT INDICATOR
+C
+         IF(.NOT.O236.AND.O237) THEN
+C
+C           FIND LAST DEFINED BIT MAP
+C
+            DO 420 I=JQUA,MREL,-1
+            IF(NWTR(I).EQ.236000) GO TO 421
+ 420        CONTINUE
+C
+            KERR=41
+            CALL BUERR(KERR)
+            RETURN
+C
+ 421        CONTINUE
+C
+            O236=.TRUE.
+            O237=.FALSE.
+            JQ236=I
+            JQ237=0
+            IK=I
+            IDPRF=0
+            DO 3015 I=IK,M
+            IF(NWTR(I).EQ.31031.OR.NWTR(I).EQ.31192) THEN
+               IDPRF=IDPRF+1
+               IF(IDPRF.EQ.1) JQPR=I
+            ELSE
+               IF(IDPRF.NE.0) GO TO 30111
+            END IF
+ 3015       CONTINUE
+C
+ 3016       CONTINUE
+         END IF
+C
+C        DATA PRESENT INDICATOR
+C
+         IF(.NOT.O237) THEN
+            IDPRF=0
+            DO 301 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I).EQ.31031.OR.NWTR(I).EQ.31192) THEN
+               IDPRF=IDPRF+1
+               IF(IDPRF.EQ.1) JQPR=I
+            ELSE
+               IF(IDPRF.NE.0) GO TO 30111
+            END IF
+ 301        CONTINUE
+         END IF
+C
+30111   CONTINUE
+C
+C        GENERATING CENTRE
+C
+         DO 309 I=JQUA,NQP(KQ+1)
+         IF(NWTR(I).EQ.1031) THEN
+            JQCC=I
+            GO TO 302
+         END IF
+ 309     CONTINUE
+C
+ 302     CONTINUE
+C
+C        GENERATING APPLICATION
+C
+         DO 307 I=JQUA,NQP(KQ+1)
+         IF(NWTR(I).EQ.1032.OR.NWTR(I).EQ.1201.OR.
+     1      NWTR(I).EQ.63191) THEN
+            JQCA=I
+            GO TO 3071
+         END IF
+ 307     CONTINUE
+C
+ 3071    CONTINUE
+C
+C        PERCENTAGE CONFIDENCE
+C
+         IF(ITYPE(KT).EQ.222000) THEN
+            DO 305 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I)/1000.EQ.33.OR.NWTR(I).EQ.63192) THEN
+               JQC=I
+               GO TO 306
+            END IF
+ 305        CONTINUE
+         ELSE
+C           SIGNIFICANCE
+C
+            DO 308 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I)/1000.EQ.8) THEN
+               JQCS=I
+               GO TO 3088
+            END IF
+ 308        CONTINUE
+C
+ 3088       CONTINUE
+
+            DO 3051 I=JQUA,NQP(KQ+1)
+            IF(NWTR(I).EQ.223255.OR.NWTR(I).EQ.224255.OR.
+     1         NWTR(I).EQ.225255) THEN
+               JQC=I
+               GO TO 306
+            END IF
+ 3051       CONTINUE
+         END IF
+C
+C
+ 306     CONTINUE
+C
+C
+C*          3.1  SET INDICES TO GET Q/C.
+C                GET BIT MAP FROM DATA SECTION.
+C
+ 310  CONTINUE
+C
+         IF(JQUA.EQ.0) THEN
+            WRITE(KNTN,'(1H )')
+        WRITE(KNTN,'(1H ,A)') 'Q/C NOT PRESENT IN THIS BUFR MESSAGE.'
+            WRITE(KNTN,'(1H )')
+         ELSE
+C
+            IF(.NOT.O237) THEN
+               DO 311 K=1,N
+C
+               K1K=(K-1)*KELEM
+               JQPRK=JQPR+K1K
+C
+               IWPT=NWORDP(JQPRK)
+               IBPT=NBITP (JQPRK)
+               CALL GBYTES(KBUFF(IWPT),IBV,IBPT,1,0,IDPRF)
+               DO 312 KA=1,IDPRF
+               KAK=KA+K1K
+               IBVAL(KAK)=IBV(KA)
+ 312           CONTINUE
+ 311           CONTINUE
+            END IF
+C
+            IDIF=MREL-IDPRF
+C
+            JS=0
+            IF(IDIF.NE.0) THEN
+               DO 313 I=1,IDIF
+               JS=JS+1
+               IQCDPI(JS)=0
+ 313           CONTINUE
+            END IF
+C
+            JQPRM1=JQPR-1
+            DO 314 I=1,IDPRF
+            JS=JS+1
+            IQCDPI(JS)=I+JQPRM1
+ 314        CONTINUE
+C
+            JS=0
+            IF(IDIF.NE.0) THEN
+               DO 315 I=1,IDIF
+               JS=JS+1
+               DO 316 JJ=1,N
+               JJJ=JS+(JJ-1)*KELEM
+               IQCI(JJJ)=0
+ 316           CONTINUE
+ 315           CONTINUE
+            END IF
+C
+            K=JQC-1
+            DO 317 I=1,IDPRF
+            OK=.TRUE.
+            JS=JS+1
+            DO 318 JJ=1,N
+            JJ1K=(JJ-1)*KELEM
+            JJJ=JS+JJ1K
+            IJJ=I+JJ1K
+            IQCI(JJJ)=0
+            IF(IBVAL(IJJ).EQ.0) THEN
+               IF(OK) K=K+1
+               IQCI(JJJ)=K
+               OK=.FALSE.
+            END IF
+ 318        CONTINUE
+ 317        CONTINUE
+C
+         END IF
+C
+C
+C           4.  CREATE REQUESTED ELEMENT LIST
+C               -----------------------------
+ 400  CONTINUE
+C
+      IF(.NOT.OLIST) THEN
+         IF(NREQ(2).EQ.0) NRQL=0
+         J=0
+         DO 401 I=1,MREL
+         IF(IRQEI(I).NE.0) THEN
+            II=IRQEI(I)
+            J=J+1
+            DO 402 K=1,N
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            IIK=II+K1K
+            INWORDP(JK)=NWORDP(IIK)
+            INBITP (JK)=NBITP (IIK)
+ 402        CONTINUE
+            INWTR(J)  =NWTR(II)
+            INWTS(J)  =NWTS(II)
+            INWTRV(J) =NWTRV(II)
+            INWTDW(J) =NWTDW(II)
+            INWTEN(J) =NWTEN(II)
+            CNAMES(J)=CWTEN(II)
+            CUNITS(J)=CWTU(II)
+            OLIST=.TRUE.
+         END IF
+ 401     CONTINUE
+      END IF
+C
+      IF(JQUA.NE.0) THEN
+C
+C*          4.1 ADD DATA PRESENT INDICATOR AND Q/C.
+C               -----------------------------------
+ 410     CONTINUE
+C
+C               ADD OPERATOR 222000
+C
+         J=J+1
+         DO 411 K=1,N
+C
+         K1K=(K-1)*KELEM
+         JK=J+K1K
+         JQUAK=JQUA+K1K
+C
+         INWORDP(JK)=NWORDP(JQUAK)
+         INBITP (JK)=NBITP (JQUAK)
+ 411     CONTINUE
+         INWTR(J)  =NWTR(JQUA)
+         INWTS(J)  =NWTS(JQUA)
+         INWTRV(J) =NWTRV(JQUA)
+         INWTDW(J) =NWTDW(JQUA)
+         INWTEN(J) =NWTEN(JQUA)
+         CNAMES(J)=CWTEN(JQUA)
+         CUNITS(J)=CWTU(JQUA)
+C
+         IF(O236.AND..NOT.O237) THEN
+            J=J+1
+            DO 4111 K=1,N
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            JQUAK=JQ236+K1K
+C
+            INWORDP(JK)=NWORDP(JQUAK)
+            INBITP (JK)=NBITP (JQUAK)
+ 4111       CONTINUE
+            INWTR(J)  =NWTR(JQ236)
+            INWTS(J)  =NWTS(JQ236)
+            INWTRV(J) =NWTRV(JQ236)
+            INWTDW(J) =NWTDW(JQ236)
+            INWTEN(J) =NWTEN(JQ236)
+            CNAMES(J)=CWTEN(JQ236)
+            CUNITS(J)=CWTU (JQ236)
+         END IF
+C
+         IF(O237) THEN
+            J=J+1
+            DO 4112 K=1,N
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            JQUAK=JQ237+K1K
+C
+            INWORDP(JK)=NWORDP(JQUAK)
+            INBITP (JK)=NBITP (JQUAK)
+ 4112       CONTINUE
+            INWTR (J) =NWTR (JQ237)
+            INWTS (J) =NWTS (JQ237)
+            INWTRV(J) =NWTRV(JQ237)
+            INWTDW(J) =NWTDW(JQ237)
+            INWTEN(J) =NWTEN(JQ237)
+            CNAMES(J)=CWTEN(JQ237)
+            CUNITS(J)=CWTU (JQ237)
+         END IF
+C
+         IF(.NOT.O237) THEN
+            DO 412 I=1,MREL
+            IF(IRQEI(I).NE.0) THEN
+               IF(IQCDPI(I).NE.0) THEN
+                  J=J+1
+                  DO 413 K=1,N
+C
+                  K1K=(K-1)*KELEM
+                  JK=J+K1K
+                  IQCDK=IQCDPI(I)+K1K
+C
+                  INWORDP(JK)=NWORDP(IQCDK)
+                  INBITP (JK)=NBITP (IQCDK)
+ 413              CONTINUE
+                  INWTR(J)  =NWTR(IQCDPI(I))
+                  INWTS(J)  =NWTS(IQCDPI(I))
+                  INWTRV(J) =NWTRV(IQCDPI(I))
+                  INWTDW(J) =NWTDW(IQCDPI(I))
+                  INWTEN(J) =NWTEN(IQCDPI(I))
+                  CNAMES(J)=CWTEN(IQCDPI(I))
+                  CUNITS(J)=CWTU(IQCDPI(I))
+               END IF
+            END IF
+ 412        CONTINUE
+         END IF
+C
+C        GENERATING CENTRE
+C
+         IF(JQCC.NE.0) THEN
+            J=J+1
+            DO 417 K=1,N
+
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            JQCCK=JQCC+K1K
+C
+            INWORDP(JK)=NWORDP(JQCCK)
+            INBITP (JK)=NBITP (JQCCK)
+ 417        CONTINUE
+            INWTR(J)  =NWTR(JQCC)
+            INWTS(J)  =NWTS(JQCC)
+            INWTRV(J) =NWTRV(JQCC)
+            INWTDW(J) =NWTDW(JQCC)
+            INWTEN(J) =NWTEN(JQCC)
+            CNAMES(J)=CWTEN(JQCC)
+            CUNITS(J)=CWTU(JQCC)
+         END IF
+C
+C        GENERATING APPLICATION
+C
+         IF(JQCA.NE.0) THEN
+            J=J+1
+            DO 414 K=1,N
+
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            JQCAK=JQCA+K1K
+C
+            INWORDP(JK)=NWORDP(JQCAK)
+            INBITP (JK)=NBITP (JQCAK)
+ 414        CONTINUE
+            INWTR(J)  =NWTR(JQCA)
+            INWTS(J)  =NWTS(JQCA)
+            INWTRV(J) =NWTRV(JQCA)
+            INWTDW(J) =NWTDW(JQCA)
+            INWTEN(J) =NWTEN(JQCA)
+            CNAMES(J)=CWTEN(JQCA)
+            CUNITS(J)=CWTU(JQCA)
+         END IF
+C
+C        SIGNIFICANCE
+C
+         IF(JQCS.NE.0) THEN
+            J=J+1
+            DO 4147 K=1,N
+
+            K1K=(K-1)*KELEM
+            JK=J+K1K
+            JQCAK=JQCS+K1K
+C
+            INWORDP(JK)=NWORDP(JQCAK)
+            INBITP (JK)=NBITP (JQCAK)
+ 4147       CONTINUE
+            INWTR(J)  =NWTR(JQCS)
+            INWTS(J)  =NWTS(JQCS)
+            INWTRV(J) =NWTRV(JQCS)
+            INWTDW(J) =NWTDW(JQCS)
+            INWTEN(J) =NWTEN(JQCS)
+            CNAMES(J)=CWTEN(JQCS)
+            CUNITS(J)=CWTU(JQCS)
+         END IF
+C
+C        CALSS 33 ELEMENTS
+C
+         DO 415 I=1,MREL
+         IF(IRQEI(I).NE.0) THEN
+            OK=.TRUE.
+            DO 416 JJ=1,N
+            JJ1K=(JJ-1)*KELEM
+            IJJ=I+JJ1K
+            IF(IQCI(IJJ).NE.0) THEN
+               IF(OK) J=J+1
+               OK=.FALSE.
+               INWTR(J)  =NWTR  (IQCI(IJJ))
+               INWTS(J)  =NWTS  (IQCI(IJJ))
+               INWTRV(J) =NWTRV (IQCI(IJJ))
+               INWTDW(J) =NWTDW (IQCI(IJJ))
+               INWTEN(J) =NWTEN (IQCI(IJJ))
+               CNAMES(J)=CWTEN (IQCI(IJJ))
+               CUNITS(J)=CWTU  (IQCI(IJJ))
+C
+               JJJ=J+JJ1K
+               JQCIJJ=IQCI(IJJ)+JJ1K
+C
+               INWORDP(JJJ)=NWORDP(JQCIJJ)
+               INBITP (JJJ)=NBITP (JQCIJJ)
+            END IF
+ 416        CONTINUE
+C
+         END IF
+ 415     CONTINUE
+      END IF
+C
+ 3033 CONTINUE
+C
+ 500  CONTINUE
+C
+C*          5. MAKE ONE TO ONE CORRESPONDENCE BETWEEN ELEMENTS AND
+C              Q/C,STATISTICS,DIFFERENCE STATISTICS OR SUBSTITUTED VALUES
+C              LEAVING BEHIND DATA PRESENT INDICATORS.
+C
+      IF(IB3.NE.0) THEN
+      END IF
+C
+      IF(IB4.NE.0) THEN
+      END IF
+C
+      IF(IB5.NE.0) THEN
+      END IF
+C
+      IF(IB6.NE.0) THEN
+      END IF
+C
+C*          9.  UPDATE TOTAL NUMBER OF ELEMENTS.
+C               --------------------------------
+ 900  CONTINUE
+C
+      M=J
+      NFCM=0
+      NFUCM=1
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/bus012.F b/bufrdc/bus012.F
new file mode 100755
index 0000000..f22da88
--- /dev/null
+++ b/bufrdc/bus012.F
@@ -0,0 +1,205 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUS012( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KERR)
+C
+C**** *BUS012*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS SECTION 0,1 AND 2 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUS012( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(47) RDB KEY
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUEXS0          - UNPACK SECTION 0
+C          BUEXS1          - UNPACK SECTION 1
+C          BUEXS2          - UNPACK SECTION 2
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/07/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomdefc.F"
+#     include "bcomreq.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSUP(*),KSEC0(*),KSEC1(*)
+      DIMENSION KSEC2(*)
+      DIMENSION KSEC3(JSEC3)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 RQVAL
+#else
+      REAL   RVIND
+      REAL   EPS
+      REAL   RQVAL
+#endif
+C
+      CHARACTER*4 CECMWF,CUSER
+C
+C     ------------------------------------------------------------------
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUEVAR(KERR)
+         CECMWF='ECMF'
+      END IF
+C
+      IF(CUSER.NE.'USER') THEN
+         NREQ(1)=0
+         NREQ(2)=0
+         NRQL=0
+      END IF
+C     -----------------------------------------------------------------
+C
+C*          2.  EXPAND SECTION 0.
+C               -----------------
+ 200  CONTINUE
+C
+      CALL BUEXS0( KBUFL,KBUFF,KSUP,KSEC0,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          3.   EXPAND SECTION 1.
+C                ------------------
+ 300  CONTINUE
+C
+      CALL BUEXS1( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  EXPAND SECTION 2.
+C               -----------------
+ 400  CONTINUE
+C
+      CALL BUEXS2( KBUFL,KBUFF,KSUP,KSEC1,KSEC2,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C*          5.  EXPAND SECTION 3 (PRELIMINARY ITEMS).
+C               -------------------------------------
+ 500  CONTINUE
+C
+      CALL BUEXS3P(KBUFL,KBUFF,KSUP,KSEC3,KERR)
+C
+      RETURN
+      END
diff --git a/bufrdc/bus0123.F b/bufrdc/bus0123.F
new file mode 100755
index 0000000..fe82ff9
--- /dev/null
+++ b/bufrdc/bus0123.F
@@ -0,0 +1,212 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUS0123( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,
+     1                    KSEC3,KERR)
+C
+C**** *BUS0123*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS SECTION 0,1,2 AND 3 OF BUFR MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUS0123( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KSEC3,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C        OUTPUT:
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF BUFR MESSAGE (BYTES)
+C                            KSEC0( 3)-- BUFR EDITION NUMBER
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(47) RDB KEY
+C               *KSEC3*   -  ARRAY CONTAINING SECTION 3 INFORMATION
+C                            KSEC3( 1)--
+C                            KSEC3( 2)--
+C                            KSEC3( 3)--
+C                            KSEC3( 4)--
+C
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUEXS0          - UNPACK SECTION 0
+C          BUEXS1          - UNPACK SECTION 1
+C          BUEXS2          - UNPACK SECTION 2
+C          BUEXS3          - UNPACK SECTION 3
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/07/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomdefc.F"
+#     include "bcomreq.F"
+C
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSUP(*),KSEC0(*),KSEC1(*)
+      DIMENSION KSEC2(*),KSEC3(*)
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+      REAL*8 RQVAL
+#else
+      REAL   RVIND
+      REAL   EPS
+      REAL   RQVAL
+#endif
+C
+      CHARACTER*4 CECMWF,CUSER
+C
+C     ------------------------------------------------------------------
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUEVAR(KERR)
+         CECMWF='ECMF'
+      END IF
+C
+      IF(CUSER.NE.'USER') THEN
+         NREQ(1)=0
+         NREQ(2)=0
+         NRQL=0
+      END IF
+C     -----------------------------------------------------------------
+C
+C*          2.  EXPAND SECTION 0.
+C               -----------------
+ 200  CONTINUE
+C
+      CALL BUEXS0( KBUFL,KBUFF,KSUP,KSEC0,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          3.   EXPAND SECTION 1.
+C                ------------------
+ 300  CONTINUE
+C
+      CALL BUEXS1( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  EXPAND SECTION 2.
+C               -----------------
+ 400  CONTINUE
+C
+      CALL BUEXS2( KBUFL,KBUFF,KSUP,KSEC1,KSEC2,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C*          5.  EXPAND SECTION 3 (PRELIMINARY ITEMS).
+C               -------------------------------------
+ 500  CONTINUE
+C
+      CALL BUEXS3P(KBUFL,KBUFF,KSUP,KSEC3,KERR)
+C
+      RETURN
+      END
diff --git a/bufrdc/busbytesR4.F b/bufrdc/busbytesR4.F
new file mode 100755
index 0000000..6afe03d
--- /dev/null
+++ b/bufrdc/busbytesR4.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE BUSBYTESR4(DESTINATION,KSOURCE,KSKIP,KWIDTH,
+     1                       KSKIPBETWEEN,KNUMBER)
+C
+C**** *BUSBYTESR4*
+C
+C
+C     PURPOSE.
+C     --------
+C          
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JULY 2008
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+      REAL*4 DESTINATION
+
+      CALL SBYTES(DESTINATION,KSOURCE,KSKIP,KWIDTH,KSKIPBETWEEN,KNUMBER)
+      RETURN
+      END
diff --git a/bufrdc/busbytesR8.F b/bufrdc/busbytesR8.F
new file mode 100755
index 0000000..e8734ae
--- /dev/null
+++ b/bufrdc/busbytesR8.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE BUSBYTESR8(DESTINATION,KSOURCE,KSKIP,KWIDTH,
+     1                       KSKIPBETWEEN,KNUMBER)
+C
+C**** *BUSBYTESR8*
+C
+C
+C     PURPOSE.
+C     --------
+C          
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JULY 2008
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+      REAL*8 DESTINATION
+
+      CALL SBYTES(DESTINATION,KSOURCE,KSKIP,KWIDTH,KSKIPBETWEEN,KNUMBER)
+      RETURN
+      END
diff --git a/bufrdc/busel.F b/bufrdc/busel.F
new file mode 100755
index 0000000..a0737c2
--- /dev/null
+++ b/bufrdc/busel.F
@@ -0,0 +1,96 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSEL(KTDLEN,KTDLST,KTDEXL,KTDEXP,KERR)
+C
+C**** *BUSEL*
+C
+C
+C     PURPOSE.
+C     --------
+C          RETURNS LIST OF DATA DESCRIPTORS AS IN SECTION 3  OF BUFR
+C          MESSAGE AND TOTAL/REQUESTED LIST OF ELEMENTS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSEL(KTDLEN,KTDLST,KTDEXL,KTDEXP,KERR)*
+C
+C
+C        OUTPUT:
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C               *KTDEXL*  -  NUMBER OF ENTRIES IN LIST OF EXPANDED DATA
+C                            DESCRIPTORS
+C               *KTDEXP*  -  ARRAY CONTAINIG EXPANDED DATA DESCRIPTORS
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomel.F"
+C
+      DIMENSION  KTDLST(*),KTDEXP(*)
+C
+C
+C     -----------------------------------------------------------------
+
+C*          1.  PUT LIST OF ELEMENTS FROM COMMON BLOCK
+C               --------------------------------------
+C               TO REQUESTED ARRAYS.
+C               --------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      KTDLEN=NTDLEN
+      KTDEXL=NTDEXL
+C
+      DO 101 I=1,NTDLEN
+      KTDLST(I)=NTDLST(I)
+ 101  CONTINUE
+C
+      DO 102 I=1,NTDEXL
+      KTDEXP(I)=NTDEXP(I)
+ 102  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/busel2.F b/bufrdc/busel2.F
new file mode 100755
index 0000000..862cf16
--- /dev/null
+++ b/bufrdc/busel2.F
@@ -0,0 +1,115 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSEL2(KSUBSET,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1                  CNAMES,CUNITS,KERR)
+C
+C**** *BUSEL2*
+C
+C
+C     PURPOSE.
+C     --------
+C          RETURNS LIST OF DATA DESCRIPTORS AS IN SECTION 3  OF BUFR
+C          MESSAGE AND TOTAL/REQUESTED LIST OF ELEMENTS, NAMES, UNITS.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSEL2(KSUBSET,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+C                         CUNITS,CVALS,KERR)*
+C
+C
+C        OUTPUT:
+C               *KTDLEN*  -  NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  ARRAY CONTAINING DATA DESCRIPTORS IN SECTION 3
+C               *KTDEXL*  -  NUMBER OF ENTRIES IN LIST OF EXPANDED DATA
+C                            DESCRIPTORS
+C               *KTDEXP*  -  ARRAY CONTAINIG EXPANDED DATA DESCRIPTORS
+C               *CNAMES*  -  ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  ARRAY CONTAINING ELEMENT UNITS
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/2006.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomel.F"
+#     include "bcomoff.F"
+C
+      DIMENSION  KTDLST(*),KTDEXP(*)
+C
+      CHARACTER*64 CNAMES(*)
+      CHARACTER*24 CUNITS(*)
+C
+C     -----------------------------------------------------------------
+
+C*          1.  PUT LIST OF ELEMENTS FROM COMMON BLOCK
+C               --------------------------------------
+C               TO REQUESTED ARRAYS.
+C               --------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      KTDLEN=NTDLEN
+C
+      DO 101 I=1,NTDLEN
+      KTDLST(I)=NTDLST(I)
+ 101  CONTINUE
+C
+      IF(OMULTI) THEN
+         NTDEXL=NSIZE(KSUBSET)
+         KTDEXL=NTDEXL
+         IJ=(KSUBSET-1)*KELEM
+      ELSE
+         NTDEXL=NSIZE(1)
+         KTDEXL=NTDEXL
+         IJ=0
+      END IF
+
+C
+      DO 102 I=1,NTDEXL
+      IIJ=I+IJ
+      KTDEXP(I)=NWTRG(IIJ)
+      CALL GET_NAME_UNIT(KTDEXP(I),CNAMES(I),CUNITS(I))
+ 102  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buset.F b/bufrdc/buset.F
new file mode 100755
index 0000000..fac6b62
--- /dev/null
+++ b/bufrdc/buset.F
@@ -0,0 +1,93 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSET(KPMISS,KPRUS,KOKEY,KOFL,K1,K2,K3,K4)
+C
+C**** *BUSET*
+C
+C
+C     PURPOSE.
+C     --------
+C            SETS VARIABLE KPMISS,KPRUS,KOKEY,KOFL INTO COMMON BLOCK.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSET(KPMISS,KPRUS,KOKEY,KOFL,K1,K2,K3,K4)*
+C
+C        INPUT :
+C               *KPMISS*   -  INTEGER VARIABLE
+C                            0 - DEFAULT, PAKS MAX VALUE FOR DATA WIDTH -1 BITS.
+C
+C                            1 - PAKS VALUE AS MISSING VALUE
+C               *KPRUS*   -   AN INTEGER
+C                            1 - ALWAYS RECALCULATE POINTERS
+C               *KOKEY*    - 0 - DEFAULT, PACKS ECMWF RDB KEY
+C                            1 - PACKS SECTION 2 IF NEEDED BUT NOT LENGTH
+C                                OF BUFR MESSAGE IN KEY
+C               *KOFL*    -  0 - NO CHECK ON VALUES
+C                            1 - CHECK ON VALUES
+C
+C
+C     METHOD.
+C     -------
+C
+C           DURING PACKING THE VALUE TO BE PACKED CAN HAPPEN TO BE TOO BIG
+C           TO FIT INTO CORRESPONDING DATA WIDTH. THIS SUBROUTINE  ALLOWS USER
+C           TO CHOSE BETWEEN:
+C
+C            1)  PACK BIG VALUE AS MAX VALUE REPRESENTED WITH DATA WIDTH -1
+C                BITS (DEFAULT)
+C            2)  PACK BIG VALUE AS MISSING VALUE
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/95.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "bcprq.F"
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      IF(KPMISS.LT.0.AND.KPMISS.GT.1) KPMISS=0
+      IF(KPRUS.LT.0.AND.KPRUS.GT.1)   KPRUS=0
+      IF(KOKEY.LT.0.AND.KOKEY.GT.1)   NOKEY=0
+      IF(KOFL.LT.0.AND.KOFL.GT.1)   NOFL=0
+      NPMISS=KPMISS
+      NPRUS=KPRUS
+      NOKEY=KOKEY
+      NOFL=KOFL
+C
+      RETURN
+      END
diff --git a/bufrdc/busrp.F b/bufrdc/busrp.F
new file mode 100755
index 0000000..bd915ac
--- /dev/null
+++ b/bufrdc/busrp.F
@@ -0,0 +1,465 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSRP(KBUFL,KBUFF,KSEC3,KJ,KJ1,KDD,KSTACK,KELEM,KERR)
+C
+C**** *BUSRP*
+C
+C
+C     PURPOSE.
+C     --------
+C          RESOLVE DATA DESCRIPTOR REPLICATION PROBLEM.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSRP(KBUFL,KBUFF,KSEC3,KJ,KJ1,KDD,KSTACK,KELEM,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KSEC3*   -  ARRAY CONTAINIG SECTION 3 INFORMATION
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KJ*       - POINTER TO KSTACK ARRAY
+C               *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C               *KSTACK*   - LIST OF DATA DESCRIPTORS
+C               *KERR*     - RETURN CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUSTDR            - RESOLVE TABLE D REFERENCE
+C          BUUPWT              - UPDATE WORKING TABLES
+C          GBYTE             - UNPACK BIT PATTERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER CWTEN*64,CWTU*24
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomwt.F"
+#     include "bcomwtc.F"
+#     include "bcombef.F"
+#     include "bcomoff.F"
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KBUFF(KBUFL),ILIST(JELEM)
+      DIMENSION KSTACK(*),KSEC3(JSEC3),IMASK(8)
+C
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   STORE K, NUMBER OF DESCRIPTORS TO BE REPLICATED.
+C                ------------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+      K   = IX
+C
+      IF(IY.EQ.0) ODREPF=.TRUE.
+C
+C*          1.1   DELAYED REPLICATION ?
+C                 ---------------------
+ 110  CONTINUE
+C
+      IF( IY .NE. 0 ) THEN
+C
+C*          1.2   STORE NUMBER OF DESCRIPTORS, K, AND REPLICATION
+C                 -----------------------------------------------
+C                 FACTOR JR.
+C                 ----------
+ 120     CONTINUE
+C
+C         K  = IX
+         JR = IY
+         GO TO 500
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          2.   GET NEXT DESCRIPTOR.
+C                --------------------
+ 200  CONTINUE
+C
+      KJ =KJ + 1
+      KDD= KSTACK(KJ)
+C
+C     ------------------------------------------------------------------
+C
+C*          2.1  REPLICATION FACTOR ?
+C                --------------------
+ 210  CONTINUE
+C
+      IF(KDD.NE.31001.AND.KDD.NE.31002.AND.
+     1   KDD.NE.31000.AND.
+     1   KDD.NE.31011.AND.KDD.NE.31012 )THEN
+
+C
+C*          2.1.1  SEQUENCE DESCRIPTOR ?
+C                  ---------------------
+C
+         IF=KDD/100000
+C
+         IF( IF.EQ.3) THEN
+C
+C*          2.1.1.1  SOLVE TABLE D REFERENCE.
+C                    ------------------------
+            CALL BUSTDR(KJ,KJ1,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         IF( IF.EQ.2) THEN
+            CALL BUPRCO(KBUFL,KBUFF,KJ,KDD,KSTACK,KELEM,KERR)
+            IF(KERR.GT.0) THEN
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         KERR=36
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UPDATE WORKING TABLE.
+C               ---------------------
+ 300  CONTINUE
+C
+c     IF(KDD.EQ.31031.OR.KDD.EQ.31192) THEN
+c        NWT=NWT+1
+c        NWTR(NWT)=KDD
+c        NWTS(NWT)=0
+c        NWTRV(NWT)=0
+c        NWTDW(NWT)=1
+c        CWTEN(NWT)='DATA PRESENT INDICATOR'
+c        CWTU (NWT)='NUMERIC'
+c        M=M+1
+c     ELSEIF(KDD.EQ.33007.OR.KDD.EQ.63192) THEN
+c        NWT=NWT+1
+c        NWTR(NWT)=KDD
+c        NWTS(NWT)=0
+c        NWTRV(NWT)=0
+c        NWTDW(NWT)=7
+c        CWTEN(NWT)='% CONFIDENCE'
+c        CWTU (NWT)='NUMERIC'
+c        M=M+1
+c     ELSE
+         CALL BUUPWT(KDD,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(KDD.EQ.031011.or.kdd.eq.031012) return
+c     END IF
+C
+C     CHECK IF NEXT DESCRIPTOR CANCEL OPERATOR FOR DELAYED
+C     REPLICATION
+C
+      IIIF=KSTACK(KJ+1)/100000
+      IIII=KSTACK(KJ+1)-IIIF*100000
+      IIIX=IIII/1000
+      IIIY=IIII-IIIX*1000
+C
+      IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+         KJ=KJ+1
+         KDD=KSTACK(KJ)
+         CALL BUPRCO(KBUFL,KBUFF,KJ,KDD,KSTACK,KELEM,KERR)
+         IF(KERR.GT.0) THEN
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  LOCATE AND STORE JR, THE REPLICATION FACTOR FROM DATA.
+C               ------------------------------------------------------
+ 400  CONTINUE
+C
+      IB=0
+      IF(IAND(KSEC3(4),IMASK(7)).NE.0) IB=1
+C
+C     RESOLVE MARKERS
+C
+      IF(OMARKER) THEN
+         CALL BUPMRK(KBUFL,KBUFF,KSEC3,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+      END IF
+C
+      IF(IB.EQ.0) THEN
+C
+C        UNCOMPRESSED DATA
+C
+         IBIT=0
+C
+         DO 401 J=1,NWT-1
+C
+         IBIT=IBIT+NWTDW(J)
+C
+ 401     CONTINUE
+C
+         IF(NSUBSET.EQ.1) THEN
+            IBIT = IBIT + 32 + NBPTB
+         ELSE
+            IBIT=IBIT+NBP
+         END IF
+C
+         IWORD= IBIT/NBPW
+         ISKIP= IBIT - IWORD*NBPW
+         IF(NSUBSET.EQ.1) THEN
+            IWORD= IWORD + NWPTB
+         ELSE
+            IWORD= IWORD + NWP
+         END IF
+C
+         CALL GBYTE(KBUFF(IWORD),JR,ISKIP,NWTDW(NWT))
+
+         IF(JR.EQ.0) THEN
+            KJ=KJ+K
+            GO TO 640
+         END IF
+
+c        IF(NWTR(NWT).eq.31011.or.NWTR(NWT).eq.31012) then
+c           NREP=JR
+c        END IF
+      ELSE
+C
+C        COMPRESSED DATA
+C
+         IBIT=32+NBPTB
+         IWORD=IBIT/NBPW
+C
+         IWORDP=NWPTB+IWORD
+         IBITP =IBIT-IWORD*NBPW
+C
+         DO 402 I=2,NWT
+         IWRD=IWORDP
+         IBTP=IBITP
+C
+         IF(NWTDW(I-1).EQ.0) THEN
+            IBITP =IBITP
+            IWORDP=IWORDP
+            GO TO 402
+         END IF
+C
+         IBTP=IBTP+NWTDW(I-1)
+         IF(IBTP.GE.NBPW) THEN
+            IW=IBTP/NBPW
+            IBTP=IBTP-IW*NBPW
+            IWRD=IWRD+IW
+         END IF
+C
+         CALL BUNPCK(NBPW,KBUFF,IDWINC,IWRD,IBTP,6,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(IDWINC.GT.JBPW) THEN
+            KERR=15
+            WRITE(KNTN,*) 'BUSRP:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+         IF(IWRD.GT.KBUFL) THEN
+            KERR=26
+            WRITE(KNTN,*) 'BUSRP:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+C
+         IF(CWTU(I-1)(1:3).EQ.'CCI') THEN
+            IWTIWS=NWTDW(I-1)+6+N*IDWINC*8
+         ELSE
+            IWTIWS=NWTDW(I-1)+6+N*IDWINC
+         END IF
+C
+         IBIT = IBITP + IWTIWS
+         IWORD= IBIT/NBPW
+C
+         IBITP = IBIT - IWORD*NBPW
+         IWORDP= IWORDP + IWORD
+C
+         IF(IWORDP.GT.KBUFL) THEN
+            KERR=26
+            WRITE(KNTN,*) 'BUSRP :'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+ 402     CONTINUE
+C
+C        UNPACK JR DELAYED REPLICATION FACTOR
+C
+         IW=IWORDP
+         IBT=IBITP
+         CALL BUNPCK(NBPW,KBUFF,IR0,IW,IBT,NWTDW(NWT),KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KBUFF,IDWINC,IW,IBT,6,KERR)
+         IF(KERR.GT.0) RETURN
+         IF(IDWINC.GT.JBPW) THEN
+            KERR=15
+            WRITE(KNTN,*) ' BUSRP :'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+C
+         IF(IDWINC.NE.0) THEN
+            CALL BUNPCK(NBPW,KBUFF,INCR,IW,IBT,IDWINC,KERR)
+            IF(KERR.GT.0) RETURN
+         END IF
+C
+         IF(IR0.EQ.NMASK(NWTDW(NWT))) THEN
+            JR=NMASK(NWTDW(NWT))
+            KERR=19
+            WRITE(KNTN,*) 'BUSRP :'
+            CALL BUERR(KERR)
+            RETURN
+         ELSE
+            IWTPR0=NWTRV(NWT)+IR0
+C
+            IF(IDWINC.EQ.0) THEN
+               JR=IWTPR0
+            ELSE
+               IF(INCR.EQ.NMASK(IDWINC)) THEN
+                  JR=NMASK(NWTDW(NWT))
+                  KERR=19
+                  WRITE(KNTN,*) 'BUSRP :'
+                  CALL BUERR(KERR)
+                  RETURN
+               ELSE
+                  JR= IWTPR0 + INCR
+               END IF
+            END IF
+         END IF
+      END IF
+C
+      IF(JR.EQ.0) THEN
+         KJ=KJ+K
+         GO TO 640
+      END IF
+C
+      JRTK=JR*K+KJ1-K
+      IF(JRTK.GT.JELEM) THEN
+         KERR=19
+         WRITE(KNTN,*) 'BUSRP :'
+         CALL BUERR(KERR)
+         WRITE(KNTN,*)'REPLICATION FACTOR =',JR
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          5.  GET NEXT K DESCRIPTORS.
+C               -----------------------
+ 500  CONTINUE
+C
+      DO 501 J=1,K
+C
+      ILIST(J)=KSTACK(KJ+J)
+C
+ 501  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.  ADD JR TIMES K DESCRIPTORS IN PLACE OF K
+C               ----------------------------------------
+C               DESCRIPTORS OBTAINED.
+C               ---------------------
+ 600  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.1  PUSH DOWN DESCRIPTORS IN KSTACK FOR (JR-1)*K PLACES
+C                ---------------------------------------------------
+C                STARTING AT KJ1 AND ENDING AT KJ+K.
+C                -----------------------------------
+ 610  CONTINUE
+C
+      JRKM1=(JR-1)*K
+C
+      DO 611 J=KJ1,KJ+K,-1
+C
+      KSTACK(J+JRKM1)=KSTACK(J)
+C
+ 611  CONTINUE
+C
+C*          6.2  INSERT LIST IN THE STACK.
+C                -------------------------
+ 620  CONTINUE
+C
+      DO 622 J=1,JR
+C
+      KJJM1K=KJ+(J-1)*K
+C
+      DO 623 J1=1,K
+C
+      KSTACK(KJJM1K+J1)=ILIST(J1)
+C
+ 623  CONTINUE
+ 622  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.3  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C                ----------------------------------------
+ 630  CONTINUE
+C
+      KJ1 = KJ1  + (JR-1)*K
+C
+C     ------------------------------------------------------------------
+C*          6.4  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 640  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C
+C     ------------------------------------------------------------------
+ 700  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/busrq.F b/bufrdc/busrq.F
new file mode 100755
index 0000000..b3e4e51
--- /dev/null
+++ b/bufrdc/busrq.F
@@ -0,0 +1,115 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSRQ(KREQ,KRQL,KRQ,RQV,KERR)
+C
+C**** *BUSRQ*
+C
+C
+C     PURPOSE.
+C     --------
+C          SET LIST OF BUFR TABLE B ELEMENT REFERENCES
+C     FOR PARTIAL EXPANSION.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSRQ(KREQ,KRQL,KRQ,RQV,KERR)*
+C
+C        INPUT :
+C               *KREQ*    -  FLAG
+C                            BIT NUMBER     MEANING
+C                                1        - 0 NO BIT MAP DELIVERED TO USER
+C                                           1    BIT MAP DELIVERED TO USER
+C                                2        - 0 NO PARTIAL EXPANSION
+C                                           1    PARTIAL EXPANSION
+C                                3        - 0 NO Q/C REQUIRED
+C                                         - 1    Q/C REQUIRED
+C                                4        - 0 NO STATISTICS REQUIRED
+C                                         - 1    STATISTICS
+C                                5        - 0 NO DIFFRENCE STATISTICS
+C                                         - 1    DIFFERENCE STATISTICS
+C                                6        - 0 NO SUBSTITUTED VALUES
+C                                         - 1    SUBSTITUTED VALUES
+C               *KRQL*    -  NUMBER OF REQUESTED ELEMENTS
+C               *KRQ*     -  LIST OF REQUESTED TABLE B REFERENCE
+C               *RQV*     -  LIST OF VALUES SIGNIFYING REQUESTED ELEMENT
+C                            (SAY PRESSURE  AT 50000 PA)
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomreq.F"
+#     include "bcomdefc.F"
+C
+      CHARACTER*4 CUSER,CECMWF
+      DIMENSION KRQ(*),KREQ(*)
+#ifndef R_4
+      REAL*8 RQV(*)
+      REAL*8 RQVAL
+#else
+      REAL   RQV(*)
+      REAL   RQVAL
+#endif
+C
+C     ------------------------------------------------------------------
+C*          1. MOVE REQUESTED ELEMENTS INTO COMMON BLOCK /COMREQ/.
+C              ---------------------------------------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      CUSER='USER'
+C
+      NRQL=KRQL
+      NREQ(1)=KREQ(1)
+      NREQ(2)=KREQ(2)
+C
+      DO 101 I=1,KRQL
+      NRQ(I)=KRQ(I)
+      RQVAL(I)=RQV(I)
+ 101  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/bustdr.F b/bufrdc/bustdr.F
new file mode 100755
index 0000000..f0f9cc9
--- /dev/null
+++ b/bufrdc/bustdr.F
@@ -0,0 +1,158 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSTDR(KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *BUSTDR*
+C
+C
+C     PURPOSE.
+C     --------
+C          SOLVE BUFR TABLE D REFERENCE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSTDR(KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C                 *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C                 *KJ*       - POINTER TO KSTACK ARRAY
+C                 *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C                 *KSTACK*   - LIST OF DATA DESCRIPTORS
+C                 *KERR*     - RETURN ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwt.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+C
+      CHARACTER CTABBEN*64,CTABBU*24
+C
+      DIMENSION ILIST(JELEM),KSTACK(*)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   OBTAIN LIST OF DESCRIPTORS FROM BUFR TABLE D.
+C                ---------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 110 J=1,JTAB
+C
+      IF(KDD.EQ.NTABDTR(J)) THEN
+         I=J
+         GO TO 120
+      END IF
+C
+ 110  CONTINUE
+C
+      KERR=20
+      WRITE(KNTN,*)' BUSTDR :',KDD
+      CALL BUERR(KERR)
+      RETURN
+C
+ 120  CONTINUE
+C
+      J1=NTABDST(I)
+      J2=NTABDL (I)
+      J3=0
+C
+      DO 121 J=J1,J1+J2-1
+C
+      J3 = J3 +1
+      ILIST(J3) = NTABDSQ(J)
+C
+ 121  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          2.  PUSH DOWN DATA DESCRIPTION DESCRIPTORS
+C               --------------------------------------
+C               TO MAKE ROOM FOR LIST.
+C               ----------------------
+ 200  CONTINUE
+C
+      J2M1=J2-1
+C
+      DO 210 J=KJ1,KJ+1,-1
+C
+      KSTACK(J+J2M1) = KSTACK(J)
+C
+ 210  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          3.  INSERT LIST IN PLACE OF SEQUENCE DESCRIPTORS.
+C               ---------------------------------------------
+ 300  CONTINUE
+C
+      KJM1=KJ-1
+C
+      DO 310 J=1,J3
+C
+      KSTACK(KJM1+J)= ILIST(J)
+C
+ 310  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          4.  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C               ----------------------------------------
+ 400  CONTINUE
+C
+      KJ  = KJ  - 1
+      KJ1 = KJ1 +J3 -1
+C     ------------------------------------------------------------------
+C*          4.1  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 610  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C     -----------------------------------------------------------------
+ 500  CONTINUE
+C
+      RETURN
+C
+ 9901 FORMAT(1H ,' BUSTDR : TABLE D REFERENCE NOT FOUND, ERROR=',I2)
+C
+      END
diff --git a/bufrdc/bustop.F b/bufrdc/bustop.F
new file mode 100755
index 0000000..03b70a9
--- /dev/null
+++ b/bufrdc/bustop.F
@@ -0,0 +1,79 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUSTOP(KSTOP)
+C
+C**** *BUSTOP*
+C
+C
+C     PURPOSE.
+C     --------
+C            SETS VARIABLE KPMISS,KPRUS,KOKEY,KOFL INTO COMMON BLOCK.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUSTOP(KSTOP)*
+C
+C        INPUT :
+C               *KSTOP*   -  INTEGER CONSTANT
+C
+C
+C     METHOD.
+C     -------
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/2007
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomwt.F"
+#     include "bcomdefc.F"
+C
+      CHARACTER*4 CECMWF      
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      IF(CECMWF.NE.'ECMF') THEN
+         IERR=0
+         CALL BUEVAR(IERR)
+         CECMWF='ECMF'
+      END IF
+C
+      NSTOP=KSTOP
+C
+      RETURN
+      END
diff --git a/bufrdc/buuatb.F b/bufrdc/buuatb.F
new file mode 100755
index 0000000..2d09745
--- /dev/null
+++ b/bufrdc/buuatb.F
@@ -0,0 +1,394 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUUATB(KBUFL,KBUFF,KJ,KY,KSTACK,KELEM,KERR)
+C
+C**** *BUUATB*
+C
+C
+C     PURPOSE.
+C     --------
+C          UPDATE AUGMENTED BUFR TABLE B.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUUATB(KBUFL,KBUFF,KJ,KY,KSTACK,KELEM,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  LENGTH OF BUFR MESSAGE (WORDS)
+C               *KBUFF*   -  ARRAY CONTAINING BUFR MESSAGE
+C               *KJ*      -  POINTER TO KSTACK ARRAY
+C               *KY*      -  OPERAND OF THE DATA DESCRIPTOR OPERATOR
+C               *KELEM*   -
+C        OUTPUT:
+C               *KSTACK* - LIST OF ELEMENTS
+C               *KERR*   - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          GBYTE        - PACK BIT PATTERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomatb.F"
+#     include "bcomatbc.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomwt.F"
+#     include "bcomwtc.F"
+#     include "bcombef.F"
+#     include "bcomcom.F"
+#     include "bcomoff.F"
+C
+      CHARACTER CATBEN*64,CWTEN*64,CTABBEN*64
+      CHARACTER CATBU*24,CWTU*24,CTABBU*24
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KSTACK(*)
+      DIMENSION IMASK(8)
+      DATA IMASK/1,2,4,8,16,32,64,128/
+C     ------------------------------------------------------------------
+C
+C*          1.   UPDATE AUGMENTED TABLE B .
+C                --------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C*          1.1 Y = 0 ?
+C               -------
+ 110  CONTINUE
+C
+      IF( KY.EQ.0) THEN
+C
+C*          1.1.1 CLEAR AUGMENTED TABLE B.
+C                 ------------------------
+         NJA= 0
+C
+         DO 111 J=1,JTAB
+C
+         NATBTR(J)= 0
+         NATBS (J)= 0
+         NATBRV(J)= 0
+         NATBDW(J)= 0
+         CATBEN(J)=' '
+         CATBU (J)=' '
+C
+ 111     CONTINUE
+C
+         GO TO 300
+      END IF
+C
+C*          1.2  GET NEXT DESCRIPTOR FROM STACK.
+C                -------------------------------
+ 120  CONTINUE
+C
+      KJ=KJ + 1
+      KDD = KSTACK(KJ)
+C
+C*          1.3  ELEMENT DESCRIPTOR  ?
+C                ---------------------
+ 130  CONTINUE
+C
+      IF  = KDD /100000
+      IDIF= KDD -IF*100000
+      IX  = IDIF/1000
+      IY  = IDIF-IX*1000
+C
+      IF(IF.EQ.0) THEN
+C
+C*          1.3.1 ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+         NWT = NWT + 1
+         NWTEN(NWT)=836970
+         CWTEN(NWT)='REFERENCE VALUE'
+         CWTU (NWT)=' '
+         NWTDW(NWT)= KY
+         NWTS (NWT)=0
+         NWTRV(NWT)=0
+         M=M+1
+C
+C*          1.3.2 ADD ENTRY TO AUGMENTED TABLE B .
+C                 --------------------------------
+         DO 131 J=1,JTAB
+C
+         IF(NTABBTR(J).EQ.KDD) THEN
+            I=J
+            GO TO 133
+         END IF
+C
+ 131     CONTINUE
+C
+         KERR=23
+         WRITE(KNTN,*)'BUUATB :'
+         CALL BUERR(KERR)
+C
+         GO TO 300
+C
+ 133  CONTINUE
+C
+         NJA=NJA + 1
+C
+         NATBTR(NJA)=NTABBTR(I)
+         NATBS (NJA)=NTABBS (I)
+         NATBRV(NJA)=NTABBRV(I)
+         NATBDW(NJA)=NTABBDW(I)
+         CATBEN(NJA)=CTABBEN(I)
+         CATBU (NJA)=CTABBU (I)
+C
+C*          1.3.3 COMPLITE ENTRY WITH NEW REFERENCE VALUE
+C                 ----------------------------------------
+C                 FROM DATA SECTION.
+C                 ------------------
+C
+         IB=0
+         IF(IAND(ICOMP,IMASK(7)).NE.0) IB=1
+
+         IF(IB.EQ.0) THEN
+C
+            IBIT=0
+C
+            DO 134 J=1,NWT-1
+C
+            IBIT =IBIT + NWTDW(J)
+C
+ 134        CONTINUE
+C
+            IF(NSUBSET.EQ.1) THEN
+               IBIT = IBIT +32 + NBPTB
+            ELSE
+               IBIT = IBIT + NBP
+            END IF
+            IWORD= IBIT/NBPW
+            ISKIP= IBIT - IWORD*NBPW
+            IF(NSUBSET.EQ.1) THEN
+               IWORD= IWORD + NWPTB
+            ELSE
+               IWORD= IWORD + NWP
+            END IF
+C
+C
+C           1.3.4 CHECK IF REFERENCE VALUE NEGATIVE
+C
+            CALL GBYTE(KBUFF(IWORD),ISGN,ISKIP,1)
+            IF(ISGN.EQ.1) THEN
+               IBIT=IBIT+1
+               IWORD= IBIT/NBPW
+               ISKIP= IBIT - IWORD*NBPW
+               IWORD= IWORD + NWPTB
+C
+               CALL GBYTE(KBUFF(IWORD),NATBRV(NJA),ISKIP,KY-1)
+               NATBRV(NJA)=-NATBRV(NJA)
+            ELSE
+               CALL GBYTE(KBUFF(IWORD),NATBRV(NJA),ISKIP,KY)
+            END IF
+C
+         ELSE
+C            COMPRESSED DATA
+C
+            IBIT=32+NBPTB
+            IWORD=IBIT/NBPW
+C
+            IWORDP=NWPTB+IWORD
+            IBITP =IBIT-IWORD*NBPW
+C
+            DO 402 I=2,NWT
+            IWRD=IWORDP
+            IBTP=IBITP
+C
+            IF(NWTDW(I-1).EQ.0) THEN
+               IBITP =IBITP
+               IWORDP=IWORDP
+               GO TO 402
+            END IF
+C
+            IBTP=IBTP+NWTDW(I-1)
+            IF(IBTP.GE.NBPW) THEN
+               IW=IBTP/NBPW
+               IBTP=IBTP-IW*NBPW
+               IWRD=IWRD+IW
+            END IF
+C
+            CALL BUNPCK(NBPW,KBUFF,IDWINC,IWRD,IBTP,6,KERR)
+            IF(KERR.GT.0) RETURN
+            IF(IDWINC.GT.JBPW) THEN
+               KERR=15
+               WRITE(KNTN,*) 'BUUATB:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+            IF(IWRD.GT.KBUFL) THEN
+               KERR=26
+               WRITE(KNTN,*) 'BUUATB:'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+C
+            IF(CWTU(I-1)(1:3).EQ.'CCI') THEN
+               IWTIWS=NWTDW(I-1)+6+N*IDWINC*8
+            ELSE
+               IWTIWS=NWTDW(I-1)+6+N*IDWINC
+            END IF
+C
+            IBIT = IBITP + IWTIWS
+            IWORD= IBIT/NBPW
+C
+            IBITP = IBIT - IWORD*NBPW
+            IWORDP= IWORDP + IWORD
+C
+            IF(IWORDP.GT.KBUFL) THEN
+               KERR=26
+               WRITE(KNTN,*) 'BUUATB :'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+ 402        CONTINUE
+C
+C
+            IW=IWORDP
+            IBT=IBITP
+            CALL BUNPCK(NBPW,KBUFF,ISG_REF,IW,IBT,1,KERR)
+            CALL BUNPCK(NBPW,KBUFF,IR0,IW,IBT,NWTDW(NWT)-1,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KBUFF,IDWINC,IW,IBT,6,KERR)
+            IF(KERR.GT.0) RETURN
+            IF(IDWINC.GT.JBPW) THEN
+               KERR=15
+               WRITE(KNTN,*) ' BUUATB :'
+               CALL BUERR(KERR)
+               RETURN
+            END IF
+C
+            IF(IDWINC.NE.0) THEN
+               CALL BUNPCK(NBPW,KBUFF,INCR,IW,IBT,IDWINC,KERR)
+               IF(KERR.GT.0) RETURN
+            END IF
+C
+            IF(IR0.EQ.NMASK(NWTDW(NWT))) THEN
+               JR=NMASK(NWTDW(NWT))
+               KERR=19
+               WRITE(KNTN,*) 'BUUATB :'
+               CALL BUERR(KERR)
+               RETURN
+            ELSE
+               IWTPR0=NWTRV(NWT)+IR0
+C
+               IF(IDWINC.EQ.0) THEN
+                  JREF=IWTPR0
+               ELSE
+                  IF(INCR.EQ.NMASK(IDWINC)) THEN
+                     JREF=NMASK(NWTDW(NWT))
+                     KERR=19
+                     WRITE(KNTN,*) 'BUUATB :'
+                     CALL BUERR(KERR)
+                     RETURN
+                  ELSE
+                     JREF= IWTPR0 + INCR
+                  END IF
+               END IF
+            END IF
+C
+            NATBRV(NJA)=JREF
+            IF(ISG_REF.EQ.1) NATBRV(NJA)=- NATBRV(NJA)
+         END IF
+C
+C           1.3.5 UPDATA WORKING TABLE ENTRIES.
+C                 -----------------------------
+ 135     CONTINUE
+C
+c        IF(KDD.EQ.31031.OR.KDD.EQ.31192) THEN
+c           NWT=NWT+1
+c           NWTR(NWT)=KDD
+c           NWTS(NWT)=0
+c           NWTRV(NWT)=0
+c           NWTDW(NWT)=1
+c           CWTEN(NWT)='DATA PRESENT INDICATOR'
+c           CWTU (NWT)='NUMERIC'
+c           M=M+1
+c        ELSEIF(KDD.EQ.33007.OR.KDD.EQ.63192) THEN
+c           NWT=NWT+1
+c           NWTR(NWT)=KDD
+c           NWTS(NWT)=0
+c           NWTRV(NWT)=0
+c           NWTDW(NWT)=7
+c           CWTEN(NWT)='% CONFIDENCE'
+c           CWTU (NWT)='NUMERIC'
+c           M=M+1
+c        ELSE
+c           CALL BUUPWT(KDD,KELEM,KERR)
+c           IF(KERR.GT.0) RETURN
+c        END IF
+C
+         GO TO 120
+C
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*           1.4   CHANGE REFERENCE VALUE ?
+C                  ------------------------
+ 140  CONTINUE
+C
+      IF( IF.EQ.2.AND.IX.EQ.3) THEN
+         IF(IY.EQ.255) GO TO 300
+         KY=IY
+         GO TO 120
+      END IF
+C     ------------------------------------------------------------------
+ 200  CONTINUE
+C
+      KERR=23
+      WRITE(KNTN,*)'BUUATB :'
+      CALL BUERR(KERR)
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buukey.F b/bufrdc/buukey.F
new file mode 100755
index 0000000..56d6229
--- /dev/null
+++ b/bufrdc/buukey.F
@@ -0,0 +1,395 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUUKEY( KSEC1,KSEC2,KEY,KSUP,KERR )
+C
+C**** *BUUKEY*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPANDS LOCAL ECMWF INFORMATION FROM SECTION 2.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUUKEY(KSEC1,KSEC2,KEY,KSUP,KERR)*
+C
+C        INPUT :
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- LENGTH OF SECTION 1 (BYTES)
+C                            KSEC1( 2)-- BUFR EDITION NUMBER
+C                            KSEC1( 3)-- ORIGINATING CENTRE
+C                            KSEC1( 4)-- UPDATE SEQUENCE NUMBER
+C                            KSEC1( 5)-- FLAG (PRESENCE OF SECTION 2)
+C                            KSEC1( 6)-- BUFR MESSAGE TYPE
+C                            KSEC1( 7)-- BUFR MESSAGE SUBTYPE
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- YEAR
+C                            KSEC1(10)-- MONTH
+C                            KSEC1(11)-- DAY
+C                            KSEC1(12)-- HOUR
+C                            KSEC1(13)-- MINUTE
+C                            KSEC1(14)-- BUFR MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 3 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- NOT USED
+C                            KSEC1(18) TO KSEC1(JSEC1) - LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C
+C                            FOR BUFR EDITION 4 ONWARD
+C
+C                            KSEC1(16)-- ORIGINATING SUB-CENTRE
+C                            KSEC1(17)-- INTERNATIONAL SUB-CATEGORY (SEE COMMON TABLE C-13
+C                            KSEC1(18)-- SECOND
+C                            KSEC1(19)-- YEAR
+C                            KSEC1(20)-- MONTH
+C                            KSEC1(21)-- DAY
+C                            KSEC1(22)-- HOUR
+C                            KSEC1(23)-- MINUTE
+C                            KSEC1(24)-- SECOND
+C                            KSEC1(25)-- YEAR
+C                            KSEC1(26)-- MONTH
+C                            KSEC1(27)-- DAY
+C                            KSEC1(28)-- HOUR
+C                            KSEC1(29)-- MINUTE
+C                            KSEC1(30)-- SECOND
+C                            KSEC1(31)-- MOST SOUTHERN LATITUDE  (-90 to 90)
+C                            KSEC1(32)-- MOST WESTERN LONGITUDE  ( 0-360)
+C                            KSEC1(33)-- MOST NORTHEN LATITUDE   (-90 to 90)
+C                            KSEC1(34)-- MOST EASTERN LONGITUDE  ( 0-360)
+C                            KSEC1(35) TO KSEC1(JSEC1) - LOCAL ADP CENTRE INFORMATION(PACKED FORM)
+C
+C               *KSEC2*   -  ARRAY CONTAINING SECTION 2 INFORMATION
+C                            KSEC2( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KSEC2( 2) TO KSEC2(JSEC2) LOCAL ADP CENTRE
+C                                        INFORMATION(PACKED FORM)
+C        OUTPUT:
+C               *KEY*     -  ARRAY CONTAINING RDB INFORMATION
+C                            KEY( 1)-- LENGTH OF SECTION 2 (BYTES)
+C                            KEY( 2)-- RDB TYPE
+C                            KEY( 3)-- RDB SUBTYPE
+C                            KEY( 4)-- YEAR
+C                            KEY( 5)-- MONTH
+C                            KEY( 6)-- DAY
+C                            KEY( 7)-- HOUR
+C                            KEY( 8)-- MINUTE
+C                            KEY( 9)-- SECOND
+C                            KEY(10)-- LONGITUDE1
+C                            KEY(11)-- LATITUDE1
+C                            KEY(12)-- LONGITUDE2
+C                            KEY(13)-- LATITUDE2
+C                            KEY(14)-- NUMBER OF SUBSETS
+C                            KEY(15)-- IDENT (NUMERIC)
+C                            KEY(16)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(17)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(18)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(19)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(20)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(21)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(22)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(23)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(24)-- IDENT ( CCITTIA5) ONE CHARACTER
+C                            KEY(25)-- TOTAL BUFR MESSAGE LENGTH
+C                            KEY(26)-- DAY    (RDB INSERTION)
+C                            KEY(27)-- HOUR   (RDB INSERTION)
+C                            KEY(28)-- MINUTE (RDB INSERTION)
+C                            KEY(29)-- SECOND (RDB INSERTION)
+C                            KEY(30)-- DAY    (MDB INSERTION)
+C                            KEY(31)-- HOUR   (MDB INSERTION)
+C                            KEY(32)-- MINUTE (MDB INSERTION)
+C                            KEY(33)-- SECOND (MDB INSERTION)
+C                            KEY(34)-- CORRECTION NUMBER
+C                            KEY(35)-- PART
+C                            KEY(36)-- 0
+C                            KEY(37)-- CORRECTION NUMBER
+C                            KEY(38)-- PART
+C                            KEY(39)-- 0
+C                            KEY(40)-- CORRECTION NUMBER
+C                            KEY(41)-- PART
+C                            KEY(42)-- 0
+C                            KEY(43)-- CORRECTION NUMBER
+C                            KEY(44)-- PART
+C                            KEY(45)-- 0
+C                            KEY(46)-- THE LOWEST Q/C % CONFIDENCE
+C               *KSUP*    -  ARRAY CONTAINING SUPLEMENTARY INFORMATION
+C                         -  KSUP( 1) -- IDIM1, DIMENSION OF KSEC1
+C                         -  KSUP( 2) -- IDIM2, DIMENSION OF KSEC2
+C                         -  KSUP( 3) -- IDIM3, DIMENSION OF KSEC3
+C                         -  KSUP( 4) -- IDIM4, DIMENSION OF KSEC4
+C                         -  KSUP( 5) -- M (NUMBER OF ELEMENTS IN VALUES ARRAY,
+C                                           FIRST INDEX)
+C                         -  KSUP( 6) -- N (NUMBER OF SUBSETS,SECOND INDEX OF
+C                                           VALUES ARRAY)
+C                         -  KSUP( 7) -- JVC (NUMBER OF ELEMENTS IN CVAL ARRAY)
+C                         -  KSUP( 8) -- TOTAL BUFR MESSAGE LENGTH IN BYTES
+C                         -  KSUP( 9) -- IDIM0, DIMENSION OF KSEC0
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUNPCK          - UNPACK BIT PATTERN
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       17/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwork.F"
+#     include "bcomdefc.F"
+C
+      CHARACTER*4 CECMWF,CUSER
+C
+#ifndef R_4
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL   RVIND
+      REAL   EPS
+#endif
+      DIMENSION KSEC1(JSEC1),KSEC2(JSEC2),KEY(JKEY)
+      DIMENSION IDUM(8)     ,KSUP (JSUP ),KSEC3(JSEC3)
+C
+C
+C*          1. UNPACK LOCAL ADP CENTRE INFORMATION.
+C              ------------------------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUEVAR(KERR)
+         CECMWF='ECMF'
+      END IF
+C
+      DO 101 I=1,JKEY
+      KEY(I)=0
+ 101  CONTINUE
+C
+      KEY(1)=KSEC2(1)
+      IW=2
+      IB=0
+      IF(KSEC2(1).EQ.52) THEN
+         CALL BUNPCK(NBPW,KSEC2,KEY(2),IW,IB, 8,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(3),IW,IB, 8,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(4),IW,IB,12,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(5),IW,IB, 4,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(6),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(7),IW,IB, 5,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(8),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(9),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,IDUMMY  ,IW,IB, 1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(10),IW,IB,26,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,IDUMMY  ,IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(11),IW,IB,25,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB, 7,KERR)
+         IF(KERR.GT.0) RETURN
+C
+         IF(KSUP(6).GT.1.OR.KEY(2).EQ.2.OR.KEY(2).EQ.3.OR.
+     1      KEY(2).EQ.12.OR.KEY(2).EQ.8) THEN
+C
+            CALL BUNPCK(NBPW,KSEC2,KEY(12),IW,IB,26,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB, 6,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(13),IW,IB,25,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB, 7,KERR)
+            IF(KERR.GT.0) RETURN
+            IF(KSUP(6).GT.255.OR.KEY(3).GE.121.AND.
+     1         KEY(3).LE.130.OR.KEY(3).EQ.31) THEN
+               CALL BUNPCK(NBPW,KSEC2,KEY(14),IW,IB,16,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,KEY(15),IW,IB,16,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPKS(NBPW,KSEC2,IDUM(1),IW,IB,8,0,4,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB, 8,KERR)
+               IF(KERR.GT.0) RETURN
+            ELSE
+               CALL BUNPCK(NBPW,KSEC2,KEY(14),IW,IB, 8,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,KEY(15),IW,IB,16,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPKS(NBPW,KSEC2,IDUM(1),IW,IB,8,0,4,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB,16,KERR)
+               IF(KERR.GT.0) RETURN
+            END IF
+            GO TO 140
+         ELSE
+            CALL BUNPKS(NBPW,KSEC2,KEY(16),IW,IB,8,0,9,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPKS(NBPW,KSEC2,IDUM(1)  ,IW,IB,8,0,8,KERR)
+            IF(KERR.GT.0) RETURN
+         END IF
+C
+C
+C*          1.4 SUB KEY INFORMATION.
+C               --------------------
+ 140  CONTINUE
+C
+         CALL BUNPCK(NBPW,KSEC2,KEY(25),IW,IB,16,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(26),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(27),IW,IB, 5,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(28),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(29),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB, 1,KERR)
+         IF(KERR.GT.0) RETURN
+C
+         CALL BUNPCK(NBPW,KSEC2,KEY(30),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(31),IW,IB, 5,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(32),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(33),IW,IB, 6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,IDUMMY   ,IW,IB, 1,KERR)
+         IF(KERR.GT.0) RETURN
+C
+         CALL BUNPCK(NBPW,KSEC2,KEY(34),IW,IB,6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(35),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(36),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(37),IW,IB,6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(38),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(39),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(40),IW,IB,6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(41),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(42),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(43),IW,IB,6,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(44),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(45),IW,IB,1,KERR)
+         IF(KERR.GT.0) RETURN
+         CALL BUNPCK(NBPW,KSEC2,KEY(46),IW,IB,8,KERR)
+         IF(KERR.GT.0) RETURN
+         KSUP( 2)=46
+      ELSE
+         IF(KSEC2(1).EQ.28) THEN
+            CALL BUNPCK(NBPW,KSEC2,KEY(2),IW,IB, 8,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(3),IW,IB, 8,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(4),IW,IB,12,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(5),IW,IB, 4,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(6),IW,IB, 6,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(7),IW,IB, 5,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(8),IW,IB, 6,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(9),IW,IB, 6,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,IDUMMY  ,IW,IB, 1,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(10),IW,IB,26,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,KEY(11),IW,IB,25,KERR)
+            IF(KERR.GT.0) RETURN
+            CALL BUNPCK(NBPW,KSEC2,IDUMMY  ,IW,IB, 5,KERR)
+            IF(KERR.GT.0) RETURN
+            IF(KSUP(6).GT.1.OR.KEY(2).EQ.2.OR.KEY(2).EQ.3) THEN
+               CALL BUNPCK(NBPW,KSEC2(IW),KEY(12),IW,IB,26,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,KEY(13),IW,IB,25,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,IDUMMY  ,IW,IB, 5,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,KEY(14),IW,IB, 8,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPCK(NBPW,KSEC2,KEY(15),IW,IB,16,KERR)
+               IF(KERR.GT.0) RETURN
+            ELSE
+               CALL BUNPKS(NBPW,KSEC2,KEY(16),IW,IB,8,0,9,KERR)
+               IF(KERR.GT.0) RETURN
+               CALL BUNPKS(NBPW,KSEC2,IDUM(1)  ,IW,IB,8,0,8,KERR)
+               IF(KERR.GT.0) RETURN
+            END IF
+         ELSE
+            WRITE(KNTN,'(1H )')
+            WRITE(KNTN,'(1H ,A)') 'BUUKEY : KEY DEFINITION NOT KNOWN'
+            WRITE(KNTN,'(1H )')
+         END IF
+      END IF
+C
+C     CHECK IF IDENT IS RIGHT JUSTIFIED.
+C
+      IF(KEY(16).EQ.32) THEN
+         J=15
+         DO 102 I=16,24
+         IF(KEY(I).EQ.32) GO TO 102
+         J=J+1
+         KEY(J)=KEY(I)
+         KEY(I)=32
+ 102     CONTINUE
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/buunp.F b/bufrdc/buunp.F
new file mode 100755
index 0000000..fe980e1
--- /dev/null
+++ b/bufrdc/buunp.F
@@ -0,0 +1,89 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUUNP(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KERR)
+C
+C**** *BUUNP*
+C
+C
+C     PURPOSE.
+C     --------
+C          PURPOSE OF THIS ROUTINE IS TO UNPACK BIT STRING OF
+C     KSIZE BITS, STARTED AT WORD KWPT OF ARRAY KSOURC AFTER
+C     SKIPPING KBPT BITS. RESULT IS PUT INTO KDEST.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUUNP(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KERR)*
+C
+C        INPUT :
+C                 *KBPW*      - NUMBER OF BITS IN COMPUTER WORD
+C                 *KSOURC*    - SOURCE (CONTINUOUS BIT STRING OF
+C                               ARBITRARY LENGTH)
+C                 *KWPT*      - WORD POINTER
+C                 *KBPT*      - BIT POINTER
+C                 *KSIZE*     - NUMBER OF BITS TO BE EXTRACTED
+C        OUTPUT:
+C                 *KDEST*     - DESTINATION
+C                 *KERR*      - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C            NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C          GBYTE     - UNPACK BIT PATTERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      DIMENSION KSOURC(*)
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT BIT PATTERN.
+C                --------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      IF(KSIZE.GT.KBPW) THEN
+         KERR=13
+         WRITE(KNTN,*)' BUUNP :'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+      CALL GBYTE(KSOURC(KWPT),KDEST,KBPT,KSIZE)
+C
+      RETURN
+      END
diff --git a/bufrdc/buunps.F b/bufrdc/buunps.F
new file mode 100755
index 0000000..3f2c859
--- /dev/null
+++ b/bufrdc/buunps.F
@@ -0,0 +1,90 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUUNPS(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KSKIPB,K,KERR)
+C
+C**** *BUUNPS*
+C
+C
+C     PURPOSE.
+C     --------
+C          PURPOSE OF THIS ROUTINE IS TO UNPACK BIT STRING OF
+C     KSIZE BITS, STARTED AT WORD KWPT OF ARRAY KSOURC AFTER
+C     SKIPPING KBPT BITS. RESULT IS PUT INTO KDEST.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUUNPS(KBPW,KSOURC,KDEST,KWPT,KBPT,KSIZE,KSKIPB,K,KERR)*
+C
+C        INPUT :
+C                 *KBPW*      - NUMBER OF BITS PER COMPUTER WORD
+C                 *KSOURC*    - SOURCE (CONTINUOUS BIT STRING OF
+C                               ARBITRARY LENGTH)
+C                 *KWPT*      - WORD POINTER
+C                 *KBPT*      - BIT POINTER
+C                 *KSIZE*     - NUMBER OF BITS TO BE EXTRACTED
+C                 *KSKIPB*    - NUMBER OF BITS TO SKIP BETWEEN ELEMENTS
+C                 *K*         - ITERATION
+C        OUTPUT:
+C                 *KDEST*     - DESTINATION
+C                 *KERR*      - RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C            NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C          GBYTES     - UNPACK BIT PATTERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      DIMENSION KSOURC(*),KDEST(*)
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT BIT PATTERN.
+C                --------------------
+ 100  CONTINUE
+C
+      IF(KERR.GT.0) RETURN
+C
+      IF(KSIZE.GT.KBPW) THEN
+         KERR=13
+         WRITE(KNTN,*)' BUUNPS :'
+         CALL BUERR(KERR)
+      END IF
+C
+      CALL GBYTES(KSOURC(KWPT),KDEST,KBPT,KSIZE,KSKIPB,K)
+C
+      RETURN
+      END
diff --git a/bufrdc/buupwt.F b/bufrdc/buupwt.F
new file mode 100755
index 0000000..0428be6
--- /dev/null
+++ b/bufrdc/buupwt.F
@@ -0,0 +1,341 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUUPWT(KDD,KELEM,KERR)
+C
+C**** *BUUPWT*
+C
+C
+C     PURPOSE.
+C     --------
+C          UPDATES WORKING TABLES SETTING ELEMENT NAME,UNIT,SCALE,
+C     REFERENCE VALUE AND DATA WIDTH.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUUPWT(KDD,KELEM,KERR)*
+C
+C        INPUT :
+C               *KDD*     -  DATA DESCRIPTOR
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C        OUTPUT:
+C               *KERR*    -  RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcomwt.F"
+#     include "bcomwtc.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomatb.F"
+#     include "bcomatbc.F"
+#     include "bcombef.F"
+C
+      CHARACTER CATBEN*64,CWTEN*64,CTABBEN*64
+      CHARACTER CATBU*24,CWTU*24,CTABBU*24
+      CHARACTER YCH6*6
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   UPDATE WORKING TABLE.
+C                ---------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      ICLASS=KDD/1000
+      IYYY  =KDD-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+C*          1.1  ASSOCIATED FIELD ?
+C                ------------------
+ 110  CONTINUE
+C
+      IF(NFD.EQ.0) GO TO 140
+C
+C*          1.2  UNITS ELEMENT DESCRIPTOR ?
+C                --------------------------
+ 120  CONTINUE
+C
+      I=NTABP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(KNTN,*)'BUUPWT : ',KDD
+         CALL BUERR(KERR)
+         DO 1 IQ=1,JELEM
+         NSTACK(IQ)=0.
+ 1       CONTINUE
+         RETURN
+      END IF
+C
+      IF(NTABBTR(I)/1000.EQ.31)  GO TO 140
+c     IF(CTABBU(I)(1:4).EQ.'CODE') GO TO 140
+c     IF(CTABBU(I)(1:4).EQ.'FLAG') GO TO 140
+c     IF(CTABBU(I)(1:3).EQ.'NUM' ) GO TO 140
+C
+C*          1.3   ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+ 130  CONTINUE
+C
+      IF(N40.NE.0) THEN
+         NWT=NWT+1
+         CWTEN(NWT)='ASSOCIATED FIELD'
+         CWTU (NWT)=' '
+         NWTDW(NWT)=N40
+         NWTR (NWT)= 999999
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+      ELSE
+         DO I=1,NFD
+         NWT=NWT+1
+         CWTEN(NWT)='ASSOCIATED FIELD'
+         CWTU (NWT)=' '
+         NWTDW(NWT)=NAFDWA(I)
+         NWTR (NWT)= 999999
+         NWTEN(NWT)= 0
+         NWTS (NWT)= 0
+         NWTRV(NWT)= 0
+         END DO
+      END IF
+C
+C*                UPDATE CNAMES AND CUNITS
+C
+      M=M+1
+      IF(M.GT.KELEM) THEN
+         KERR=25
+         WRITE(KNTN,*)'BUUPWT:'
+         CALL BUERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          1.4   SEARCH AUGMENTED TABLE *B ENTRIES .
+C                 -----------------------------------
+ 140  CONTINUE
+C
+      DO 141 J=1,NJA
+C
+      IF(NATBTR(J).EQ.KDD) THEN
+         II=J
+C
+C*             MODIFY ENTRY FOR OPERATOR IN FORCE.
+C              -----------------------------------
+C
+C*             ADD ENTRY TO WORKING TABLE.
+C              ---------------------------
+C
+         IX=KDD/1000
+         IF(N40.NE.0.AND.IX.NE.31) THEN
+            NWT=NWT+1
+            NWTR (NWT) = KDD
+            NWTS (NWT) = 0
+            NWTRV(NWT) = 0
+            NWTDW(NWT) = N40
+         ELSE
+            NWT=NWT+1
+            NWTR (NWT) = KDD
+            NWTS (NWT) = NATBS (II) + NSCAM + NSCAM07
+            NWTRV(NWT) = NINT(NATBRV(II)*10.**N07)
+            NWTDW(NWT) = NATBDW(II) + NDWINC + NDWINC07
+            NWTEN(NWT) = 0
+
+         END IF
+C
+C        CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+         IF(N221.NE.0) THEN
+            IX=KDD/1000
+            IF(IX.GT.9.AND.IX.NE.31) NWTDW(NWT)=0
+            N221=N221-1
+         END IF
+C
+c        IF(NWTR(NWT).EQ.31011.OR.NWTR(NWT).EQ.31012) THEN
+c           OREP=.true.
+c        END IF
+c        if(OREP) then
+c           if(NREP.GT.1.and.NWTR(NWT-1).ne.31011.and.
+c    1         NWTR(NWT-1).ne.31012) then
+c              NWTDW(NWT)=0
+c              NREP=NREP-1
+c              IF(NREP.le.1) then
+c                 NREP=0
+c                 OREP=.false.
+c              END IF
+c           END IF
+c        END IF
+
+C
+C*            UPDATE M, CNAMES, CUNITS.
+C             -------------------------
+C
+         CWTEN(NWT) = CATBEN(II)
+         CWTU (NWT) = CATBU (II)
+         NWTEN(NWT) = 0
+         IF(CATBU(II)(1:3).EQ.'CCI') THEN
+            NWTEN(NWT)=658367
+         ELSEIF(N40.NE.0.AND.IX.NE.31.AND.
+     1      CATBU(II)(1:3).NE.'COD'.AND.
+     2      CATBU(II)(1:3).NE.'FLA') THEN
+            NWTEN(NWT) = -999
+         ENDIF
+C
+         M = M + 1
+         IF(M.GT.KELEM) THEN
+            KERR=25
+            WRITE(KNTN,*)'BUUPWT:'
+            CALL BUERR(KERR)
+            RETURN
+         END IF
+C
+         RETURN
+      END IF
+C
+ 141  CONTINUE
+C
+C*          1.5  GET TABLE *B ENTRY .
+C                ---------------------
+ 150  CONTINUE
+C
+      I=NTABP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(KNTN,*)'BUUPWT : ',KDD
+         CALL BUERR(KERR)
+         DO 2 IQ=1,JELEM
+         NSTACK(IQ)=0.
+ 2       CONTINUE
+         RETURN
+      END IF
+C
+ 155  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*          1.6   MODIFY ENTRY FOR OPERATOR IN FORCE.
+C                 -----------------------------------
+ 160  CONTINUE
+C
+C*                ADD ENTRY TO WORKING TABLE.
+C                 ---------------------------
+C
+      IF(CTABBU(I)(1:4).EQ.'CODE'.OR.
+     1   CTABBU(I)(1:4).EQ.'FLAG') THEN
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = NTABBS (I) 
+         NWTRV(NWT) = NTABBRV(I)
+         NWTDW(NWT) = NTABBDW(I)
+      ELSEIF(N40.NE.0.AND.IX.NE.31) THEN
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = 0
+         NWTRV(NWT) = 0
+         NWTDW(NWT) = N40
+      ELSE 
+         NWT=NWT+1
+         NWTR (NWT) = KDD
+         NWTS (NWT) = NTABBS (I) + NSCAM + NSCAM07
+         NWTRV(NWT) = NINT(NTABBRV(I)*10.**N07)
+         NWTDW(NWT) = NTABBDW(I) + NDWINC + NDWINC07
+
+      END IF
+C
+C     CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+      IF(N221.NE.0) THEN
+         IX=KDD/1000
+         IF(IX.GT.9.AND.IX.NE.31) NWTDW(NWT)=0
+         N221=N221-1
+      END IF
+C
+c     IF(NWTR(NWT).EQ.31011.OR.NWTR(NWT).EQ.31012) THEN
+c        OREP=.true.
+c     END IF
+c     IF(OREP) THEN
+c        if(NREP.GT.1.and.NWTR(NWT-1).ne.31011.and.
+c    1      NWTR(NWT-1).ne.31012) THEN
+c           NWTDW(NWT)=0
+c           NREP=NREP-1
+c           IF(NREP.le.1) THEN
+c              NREP=0
+c              OREP=.false.
+c           END IF
+c        END IF
+c      END IF
+
+C
+ 175  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          1.8  UPDATE M, CNAMES, CUNITS.
+C                -------------------------
+ 180  CONTINUE
+C
+      CWTEN(NWT) = CTABBEN(I)
+      CWTU (NWT) = CTABBU(I)
+      NWTEN(NWT) = 0
+      IF(CTABBU(I)(1:3).EQ.'CCI') THEN
+         NWTEN(NWT)=658367
+         IF(N08.NE.0) THEN
+            NWTDW(NWT) = N08*8
+         END IF
+      ELSEIF(N40.NE.0.AND.IX.NE.31.AND.
+     1       CTABBU(I)(1:3).NE.'COD'.AND.
+     2       CTABBU(I)(1:3).NE.'FLA') THEN
+         NWTEN(NWT) = -999
+      ENDIF
+C
+       M = M + 1
+       IF(M.GT.KELEM) THEN
+          KERR=25
+          WRITE(KNTN,*) 'BUUPWT:'
+          CALL BUERR(KERR)
+          RETURN
+       END IF
+C
+C     -----------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      RETURN
+      END
diff --git a/bufrdc/buxdes.F b/bufrdc/buxdes.F
new file mode 100755
index 0000000..17fe0ff
--- /dev/null
+++ b/bufrdc/buxdes.F
@@ -0,0 +1,171 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE BUXDES(K,KSEC1,KTDLEN,KTDLST,KDLEN,KDATA,KELEM,
+     2                  KTDEXL,KTDEXP,CNAMES,CUNITS,KERR)
+C
+C**** *BUXDES*
+C
+C
+C     PURPOSE.
+C     --------
+C          EXPAND DATA DESCRIPTORS TO SHOW USER TEMPLATE HE
+C          DESCRIBED BY ARAY KTDLST AND KDATA.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C               *CALL BUXDES(K,KSEC1,KTDLEN,KTDLST,KDLEN,KDATA,KELEM,
+C                            KTDEXL,KTDEXP,CNAMES,CUNITS,KERR)
+C
+C        INPUT :
+C
+C               *K*       -  AN INTEGER, PRINTING SWITCH 0 - NO PRINT
+C                                                        1 - PRINT
+C               *KSEC1*   -  INTEGER ARRAY OF AT LEAST 40 WORDS CONTAINING
+C                            SECTION 1 INFORMATION
+C               *KTDLEN*  -  INTEGER NUMBER OF DATA DESCRIPTORS IN SECTION 3
+C               *KTDLST*  -  INTEGER ARRAY OF AT LEAST KTDLEN WORDS
+C                            CONTAINING DATA DESCRIPTORS FOR BUFR SECTION 3
+C               *KDLEN*   -  INTEGER (DIMENSION OF KDATA ARRAY)
+C               *KDATA*   -  INTEGER ARRAY CONTAINING DATA NEEDED FOR DATA
+C                            DESCRIPTOR EXPANSION (DELAYED REPLICATION FACTORS)
+C                            WHICH APPEAR IN THE VALUES ARRAY
+C
+C               *KELEM*   -  INTEGER NUMBER OF ELEMENTS IN BUFR TEMPLATE.
+C
+C        OUTPUT:
+C               *KTDEXL*  - AN INTEGER CONTAINING NUMBER OF EXPANDED ELEMENTS
+C               *KTDEXP*  - AN INTEGER ARRAY CONTAINING EXPANDED LIST OF DESCRIPTORS
+C               *CNAMES*  - CHARACTER*64 ARRAY OF KELEM CONTAINING ELEMENT NAMES
+C               *CUNITS*  - CHARACTER*24 ARRAY OF KELEM CONTAINING ELEMENT UNITS
+C               *KERR*    -  RETURN ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/06/93.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+#     include "parameter.F"
+#     include "bcomunit.F"
+#     include "bcmwork.F"
+#     include "bcmdefc.F"
+#     include "bcmbef.F"
+#     include "bcmwt.F"
+C
+      DIMENSION  KSEC1(JSEC1),KSEC3(JSEC3)
+#ifndef R_4
+      REAL*8 VALUES(JCVAL)
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL  VALUES(JCVAL)
+      REAL  RVIND
+      REAL  EPS
+#endif
+      DIMENSION  KTDLST(KTDLEN)
+      DIMENSION  KDATA(KDLEN)
+      DIMENSION  KTDEXP(KELEM)
+C
+      CHARACTER*4   CECMWF,CUSER
+      CHARACTER*64  CNAMES(KELEM)
+      CHARACTER*24  CUNITS(KELEM)
+
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      KERR=0
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL BUIVAR(KERR)
+         KPT   = 0
+         CECMWF='ECMF'
+      END IF
+C
+C     -----------------------------------------------------------------
+C*          2.   LOAD BUFR TABLES.
+C                -----------------
+ 200  CONTINUE
+C
+      CALL BUETAB(KSEC1,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C          6.  EXPAND DATA DESCRIPTORS.
+C              ------------------------
+ 600  CONTINUE
+C
+
+      CALL BUEDD(KPT,KTDLEN,KTDLST,KDLEN,KDATA,KSEC3,
+     1           KVALS,VALUES,KELEM,CNAMES,CUNITS,KERR)
+C
+      IF(KERR.GT.0) RETURN
+C
+      KTDEXL =M
+      DO 301 I=1,KTDEXL
+      KTDEXP(I)=NWTR(I)
+ 301  CONTINUE
+C
+      IF(K.EQ.1) THEN
+C
+         WRITE(KNTN,'(1H ,//)')
+         WRITE(KNTN,'(1H ,A)')    '       DATA DESCRIPTORS (UNEXPANDED)'
+C
+         WRITE(KNTN,'(1H )')
+         DO 110 I=1,KTDLEN
+          WRITE(KNTN,'(1H ,I4,2X,I6.6)') I,KTDLST(I)
+ 110     CONTINUE
+C
+         WRITE(KNTN,'(1H ,/)')
+         WRITE(KNTN,'(1H ,A)')    '       DATA DESCRIPTORS (EXPANDED)'
+         WRITE(KNTN,'(1H )')
+         WRITE(KNTN,'(1H ,A,A)')'               ELEMENT NAME',
+     1   '                                                      UNIT'
+         WRITE(KNTN,'(1H )')
+C
+         DO 120 I=1,KTDEXL
+          WRITE(KNTN,'(1H ,I5,2X,I6.6,2X,A,2X,A)') I,KTDEXP(I),
+     1                      CNAMES(I)(1:64),CUNITS(I)(1:24)
+ 120     CONTINUE
+      END IF
+C
+C
+C     -----------------------------------------------------------------
+      RETURN
+C
+      END
diff --git a/bufrdc/ctable.F b/bufrdc/ctable.F
new file mode 100755
index 0000000..821658a
--- /dev/null
+++ b/bufrdc/ctable.F
@@ -0,0 +1,261 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CTABLE(YNAME,KERR)
+C
+C**** *CTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          THE MAIN PURPOSE OF THIS PROGRAMME IS TO CREATE WORKING
+C          CODE TABLES FOR *BUFR* DECODING.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, *FM 94 BUFR*.
+C
+C          J.K.GIBSON AND *M.DRAGOSAVAC,1987:* DECODING *DATA *REPRESENTATION
+C                          *FM 94 BUFR*,*TECHNICAL *MEMORANDUM *NO. 134
+C
+C          J.K.GIBSON,1986:*EMOS 2 - *STANDARDS FOR SOFTWARE DEVELOPMENT
+C                           AND MAINTANANCE *,*TECHICAL MEMORANDUM *NO.
+C                           *ECMWF*.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomwork.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomct.F"
+#     include "bcomctc.F"
+#     include "bcomroot.F"
+#     include "bcomtabload.F"
+#     include "bcomtabloadc.F"
+
+
+C
+      CHARACTER*64 CTEXT
+      CHARACTER*64 CTABBEN
+      CHARACTER*24 CTABBU
+      CHARACTER*256 YFNAME
+      CHARACTER*(*) YNAME
+      CHARACTER*120 YENTRY
+C
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS AND POINTERS
+C                ----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      YFNAME=' '
+C
+      DO 101 I=1,JCTEXT
+      CTEXT(I)=' '
+ 101  CONTINUE
+C
+      DO 102 I=1,JCTAB
+      NREF(I)=0
+      NSTART(I)=0
+      NLEN(I)=0
+ 102  CONTINUE
+C
+      DO 103 I=1,JCTST
+      NCODNUM(I)=0
+      NSTARTC(I)=0
+      NLENC  (I)=0
+ 103  CONTINUE
+C
+      II=INDEX(YNAME,' ')
+      II=II-1
+      YFNAME=YNAME(1:II)
+      II=INDEX(YFNAME,' ')
+      II=II-1
+      CALL GET_FREE_UNIT(IUNIT)
+      OPEN(UNIT=IUNIT,FILE=YFNAME(1:II),ERR=401,STATUS='OLD')
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN CODE TABLE ENTRY
+C                ------------------------
+ 200  CONTINUE
+C
+C
+      READ(IUNIT,'(A)',ERR=402,END=300) YENTRY
+C
+      J = J+1
+C
+      IF(J.GT.JCTAB) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         kerr=66
+         return
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR CODE TABLE TABLE REFERENCE, STARTING POINTERS
+C                FOR LIST OF CODE NUMBERS, LENGTH , LIST OF CODE NUMBERS,
+C                STARTING POINTERS AND LENGTH OF TEXT INFORMATION.
+ 210  CONTINUE
+C
+      READ(YENTRY,'(I6,1X,I4,1X,I4,1X,I2)',IOSTAT=ios) NREF(J),NLEN(J),
+     1                                                NCODE,NLINE
+      if(ios.ne.0) then
+         print*,YENTRY
+         print*,'Internal read error 1'
+         return
+      end if
+    
+C
+      IF(J.EQ.1) THEN
+         NSTART (J)  = 1
+         NSTARTC(J)  = 1
+         IPT = 1
+         IIPT= 1
+      ELSE
+         NSTART(J)   = NSTART(J-1) + NLEN(J-1)
+         IPT         = NSTART(J)
+         IIPT        = IIPT + 1
+         NSTARTC(IPT)= IIPT
+      END IF
+C
+C
+      NCODNUM(IPT)=NCODE
+      NLENC ( IPT)=NLINE
+C
+      CTEXT (IIPT)=YENTRY(21:80)
+C     -------------------------------------------------------------------
+      IF(NLENC(IPT).GT.1) THEN
+         DO 220 JA=1,NLENC(IPT)-1
+         READ(IUNIT,'(A)',END=300) YENTRY
+         IIPT=IIPT+1
+         CTEXT(IIPT)=YENTRY(21:80)
+ 220     CONTINUE
+      END IF
+C
+      IF(NLEN(J).GT.1) THEN
+         DO 230 JA=1,NLEN(J)-1
+         READ(IUNIT,'(A)',END=300) YENTRY
+         READ(YENTRY,'(12X,I4,1X,I2)',IOSTAT=IOS) NCODE,NLINE
+         if(IOS.ne.0) then
+            print*,YENTRY
+            print*,'Internal read error 2'
+            return
+         end if
+         IPT   = IPT + 1
+         IIPT  =IIPT + 1
+         NCODNUM(IPT)= NCODE
+         NSTARTC(IPT)=  IIPT
+         NLENC  (IPT)=NLINE
+         CTEXT(IIPT) = YENTRY(21:80)
+         IF(NLENC(IPT).GT.1) THEN
+            DO 240 JB=1,NLENC(IPT)-1
+            READ(IUNIT,'(A)',END=300) YENTRY
+            IIPT=IIPT+1
+            CTEXT(IIPT)=YENTRY(21:80)
+ 240        CONTINUE
+         END IF
+ 230     CONTINUE
+      END IF
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      IF(NTT.EQ.JTMAX.AND.NTC.NE.0) THEN
+         DO J=1,JCTAB
+            MNREF(J,NTC)=NREF(J)
+            MNSTART(J,NTC)=NSTART(J)
+            MNLEN(J,NTC)=NLEN(J)
+         END DO
+         DO J=1,JCTST
+            MNCODNUM(J,NTC)=NCODNUM(J)
+            MNSTARTC(J,NTC)=NSTARTC(J)
+            MNLENC(J,NTC)=NLENC(J)
+         END DO
+         DO J=1,JCTEXT
+            CCTEXT(J,NTC)=CTEXT(J)
+         END DO
+      ELSE
+         DO J=1,JCTAB
+            MNREF(J,NTT)=NREF(J)
+            MNSTART(J,NTT)=NSTART(J)
+            MNLEN(J,NTT)=NLEN(J)
+         END DO
+         DO J=1,JCTST
+            MNCODNUM(J,NTT)=NCODNUM(J)
+            MNSTARTC(J,NTT)=NSTARTC(J)
+            MNLENC(J,NTT)=NLENC(J)
+         END DO
+         DO J=1,JCTEXT
+            CCTEXT(J,NTT)=CTEXT(J)
+         END DO
+
+      END IF
+
+      CLOSE(IUNIT)
+C
+C     write(*,'(1h )')
+C     write(*,'(1H ,a,i4)') 'Total number of entries in Table C is ',j
+C
+      RETURN
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+ 401  CONTINUE
+C
+      KERR=62
+      WRITE(*,4401) IOS,YFNAME
+ 4401 FORMAT(1H ,'Open error ',i4,' on ',a)
+      RETURN
+C
+ 402  CONTINUE
+      KERR=7
+      WRITE(*,4402) IOS,YFNAME
+ 4402 FORMAT(1H ,'Read error ',i4,' on ',a)
+      RETURN
+C
+      END
diff --git a/bufrdc/ctable1.F b/bufrdc/ctable1.F
new file mode 100755
index 0000000..4719f89
--- /dev/null
+++ b/bufrdc/ctable1.F
@@ -0,0 +1,216 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CTABLE1(YNAME,KERR)
+C
+C**** *CTABLE1*
+C
+C
+C     PURPOSE.
+C     --------
+C          THE MAIN PURPOSE OF THIS PROGRAMME IS TO CREATE WORKING
+C          CODE TABLES FOR *BUFR* DECODING.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, *FM 94 BUFR*.
+C
+C          J.K.GIBSON AND *M.DRAGOSAVAC,1987:* DECODING *DATA *REPRESENTATION
+C                          *FM 94 BUFR*,*TECHNICAL *MEMORANDUM *NO. 134
+C
+C          J.K.GIBSON,1986:*EMOS 2 - *STANDARDS FOR SOFTWARE DEVELOPMENT
+C                           AND MAINTANANCE *,*TECHICAL MEMORANDUM *NO.
+C                           *ECMWF*.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcmwork.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmct.F"
+#     include "bcmctc.F"
+#     include "bcmroot.F"
+
+C
+      CHARACTER*64 CTEXT
+      CHARACTER*64 CTABBEN
+      CHARACTER*24 CTABBU
+      CHARACTER*256 YFNAME
+      CHARACTER*(*) YNAME
+      CHARACTER*120 YENTRY
+C
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS AND POINTERS
+C                ----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      YFNAME=' '
+C
+      DO 101 I=1,JCTEXT
+      CTEXT(I)=' '
+ 101  CONTINUE
+C
+      DO 102 I=1,JCTAB
+      NREF(I)=0
+      NSTART(I)=0
+      NLEN(I)=0
+ 102  CONTINUE
+C
+      DO 103 I=1,JCTST
+      NCODNUM(I)=0
+      NSTARTC(I)=0
+      NLENC  (I)=0
+ 103  CONTINUE
+C
+      II=INDEX(YNAME,' ')
+      II=II-1
+      YFNAME=YNAME(1:II)
+      II=INDEX(YFNAME,' ')
+      II=II-1
+      CALL GET_FREE_UNIT(IUNIT)
+      OPEN(UNIT=IUNIT,FILE=YFNAME(1:II),ERR=401,STATUS='OLD')
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN CODE TABLE ENTRY
+C                ------------------------
+ 200  CONTINUE
+C
+C
+      READ(IUNIT,'(A)',ERR=402,END=300) YENTRY
+C
+      J = J+1
+C
+      IF(J.GT.JCTAB) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         kerr=66
+         return
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR CODE TABLE TABLE REFERENCE, STARTING POINTERS
+C                FOR LIST OF CODE NUMBERS, LENGTH , LIST OF CODE NUMBERS,
+C                STARTING POINTERS AND LENGTH OF TEXT INFORMATION.
+ 210  CONTINUE
+C
+      READ(YENTRY,'(I6,1X,I4,1X,I4,1X,I2)') NREF(J),NLEN(J),NCODE,NLINE
+    
+C
+      IF(J.EQ.1) THEN
+         NSTART (J)  = 1
+         NSTARTC(J)  = 1
+         IPT = 1
+         IIPT= 1
+      ELSE
+         NSTART(J)   = NSTART(J-1) + NLEN(J-1)
+         IPT         = NSTART(J)
+         IIPT        = IIPT + 1
+         NSTARTC(IPT)= IIPT
+      END IF
+C
+C
+      NCODNUM(IPT)=NCODE
+      NLENC ( IPT)=NLINE
+C
+      CTEXT (IIPT)=YENTRY(21:80)
+C     -------------------------------------------------------------------
+      IF(NLENC(IPT).GT.1) THEN
+         DO 220 JA=1,NLENC(IPT)-1
+         READ(IUNIT,'(A)',END=300) YENTRY
+         IIPT=IIPT+1
+         CTEXT(IIPT)=YENTRY(21:80)
+ 220     CONTINUE
+      END IF
+C
+      IF(NLEN(J).GT.1) THEN
+         DO 230 JA=1,NLEN(J)-1
+         READ(IUNIT,'(A)',END=300) YENTRY
+         READ(YENTRY,'(12X,I4,1X,I2)') NCODE,NLINE
+         IPT   = IPT + 1
+         IIPT  =IIPT + 1
+         NCODNUM(IPT)= NCODE
+         NSTARTC(IPT)=  IIPT
+         NLENC  (IPT)=NLINE
+         CTEXT(IIPT) = YENTRY(21:80)
+         IF(NLENC(IPT).GT.1) THEN
+            DO 240 JB=1,NLENC(IPT)-1
+            READ(IUNIT,'(A)',END=300) YENTRY
+            IIPT=IIPT+1
+            CTEXT(IIPT)=YENTRY(21:80)
+ 240        CONTINUE
+         END IF
+ 230     CONTINUE
+      END IF
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      CLOSE(IUNIT)
+C
+C     write(*,'(1h )')
+C     write(*,'(1H ,a,i4)') 'Total number of entries in Table C is ',j
+C
+      RETURN
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+ 401  CONTINUE
+C
+      KERR=62
+      WRITE(*,4401) IOS,YFNAME
+ 4401 FORMAT(1H ,'Open error ',i4,' on ',a)
+      RETURN
+C
+ 402  CONTINUE
+      KERR=7
+      WRITE(*,4402) IOS,YFNAME
+ 4402 FORMAT(1H ,'Read error ',i4,' on ',a)
+      RETURN
+C
+      END
diff --git a/bufrdc/dtable.F b/bufrdc/dtable.F
new file mode 100755
index 0000000..3d17105
--- /dev/null
+++ b/bufrdc/dtable.F
@@ -0,0 +1,213 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DTABLE(YNAME,KERR)
+C
+C**** *DTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          THE MAIN PURPOSE OF THIS PROGRAMME IS TO CREATE WORKING
+C          TABLE OF SEQUENCE DESCRIPTORS FOR *BUFR* DECODING.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, *FM 94 BUFR*.
+C
+C          J.K.GIBSON AND *M.DRAGOSAVAC,1987:* DECODING *DATA *REPRESENTATION
+C                          *FM 94 BUFR*,*TECHNICAL *MEMORANDUM *NO.
+C
+C          J.K.GIBSON,1986:*EMOS 2 - *STANDARDS FOR SOFTWARE DEVELOPMENT
+C                           AND MAINTANANCE *,*TECHICAL MEMORANDUM *NO.
+C                           *ECMWF*.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomwork.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomct.F"
+#     include "bcomctc.F"
+#     include "bcomroot.F"
+#     include "bcomtabload.F"
+#     include "bcomtabloadc.F"
+
+C
+      CHARACTER*64 CTABBEN,CCTABBEN
+      CHARACTER*24 CTABBU,CCTABBU,CTABLE_LIST
+      CHARACTER*120 YENTRY
+      CHARACTER*256 YFNAME
+      CHARACTER*(*) YNAME
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS.
+C                ----------------------
+ 100  CONTINUE
+C
+      KERR=0
+      J  =0
+      IST=1
+      YFNAME=' '
+C
+      DO 101 I=1,JTAB
+      NTABDTR(I)=999999
+      NTABDL (I)=0
+      NTABDST(I)=0
+ 101  CONTINUE
+C
+      DO 102 I=1,JTAB*20
+      NTABDSQ(I)=0
+ 102  CONTINUE
+C
+      II=INDEX(YNAME,' ')
+      II=II-1
+      YFNAME=YNAME(1:II)
+      II=INDEX(YFNAME,' ')
+      II=II-1
+      CALL GET_FREE_UNIT(IUNIT)
+      OPEN(UNIT=IUNIT,iostat=ios,FILE=YFNAME(1:II),STATUS='OLD')
+      IF(IOS.NE.0) THEN
+         print*,'Open error on ',YFNAME(1:II)
+         kerr=63
+         return
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE D
+C                ---------------
+C
+ 200  CONTINUE
+C
+      READ(IUNIT,'(A)',IOSTAT=IOS,END=300) YENTRY
+      IF(IOS.NE.0) THEN
+         print*,'Read error ',ios
+         kerr=8
+         return
+      END IF
+C
+      J=J+1
+C
+      IF(J.GT.JTAB) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         KERR=64
+         RETURN
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, DATA LENGTH,
+C*               STARTING POINTER AND SEQUENCE DESCRIPTORS.
+C
+ 210  CONTINUE
+C
+C
+      READ(YENTRY,'(1X,I6,I3)') NTABDTR(J),NTABDL (J)
+C
+      IF(J.EQ.1) THEN
+         IST=1
+         NTABDST(J)=IST
+      ELSE
+         IST=IST + NTABDL(J-1)
+         NTABDST(J)=IST
+      END IF
+C
+      IF(NTABDL(J).GT.1) THEN
+         READ(YENTRY,'(11X,I6)') NTABDSQ(IST)
+         IIST=IST
+C
+         DO 220 JA=1,NTABDL(J)-1
+         IIST=IIST+1
+         READ(IUNIT,'(A)',END=300) YENTRY
+         READ(YENTRY,'(11X,I6)') NTABDSQ(IIST)
+ 220     CONTINUE
+C
+      ELSE
+         READ(YENTRY,'(11X,I6)') NTABDSQ(IST)
+      END IF
+C
+C
+C     WRITE(*,1000) NTABDTR(J),NTABDL(J),NTABDST(J),
+C    1              (NTABDSQ(I),I=NTABDST(J),NTABDL(J)+NTABDST(J)-1)
+C
+C1000 FORMAT(1H ,I6,I3,1X,I6,1X,I6/ (18X,I6))
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      IF(NTT.EQ.JTMAX.AND.NTC.NE.0) THEN
+         DO J=1,JTAB
+            MTABDTR(J,NTC)=NTABDTR(J)
+            MTABDL (J,NTC)=NTABDL(J)
+            MTABDST(J,NTC)=NTABDST(J)
+         END DO
+         DO J=1,JTAB*20
+            MTABDSQ(J,NTC)=NTABDSQ(J)
+         END DO
+      ELSE
+         DO J=1,JTAB
+            MTABDTR(J,NTT)=NTABDTR(J)
+            MTABDL (J,NTT)=NTABDL(J)
+            MTABDST(J,NTT)=NTABDST(J)
+         END DO
+         DO J=1,JTAB*20
+            MTABDSQ(J,NTT)=NTABDSQ(J)
+         END DO
+      END IF
+C
+      CLOSE(IUNIT)
+C
+c     WRITE(*,'(1h )')
+c     WRITE(*,'(1h ,a,i4)')'Total number of entries in Table D is ',j
+C
+      RETURN
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/dtable1.F b/bufrdc/dtable1.F
new file mode 100755
index 0000000..ff7375f
--- /dev/null
+++ b/bufrdc/dtable1.F
@@ -0,0 +1,212 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DTABLE1(YNAME,KERR)
+C
+C**** *DTABLE1*
+C
+C
+C     PURPOSE.
+C     --------
+C          THE MAIN PURPOSE OF THIS PROGRAMME IS TO CREATE WORKING
+C          TABLE OF SEQUENCE DESCRIPTORS FOR *BUFR* DECODING.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, *FM 94 BUFR*.
+C
+C          J.K.GIBSON AND *M.DRAGOSAVAC,1987:* DECODING *DATA *REPRESENTATION
+C                          *FM 94 BUFR*,*TECHNICAL *MEMORANDUM *NO.
+C
+C          J.K.GIBSON,1986:*EMOS 2 - *STANDARDS FOR SOFTWARE DEVELOPMENT
+C                           AND MAINTANANCE *,*TECHICAL MEMORANDUM *NO.
+C                           *ECMWF*.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcmwork.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmct.F"
+#     include "bcmctc.F"
+#     include "bcmroot.F"
+#     include "bcmtabload.F"
+#     include "bcmtabloadc.F"
+
+C
+      CHARACTER*64 CTABBEN,CCTABBEN
+      CHARACTER*24 CTABBU,CCTABBU,CTABLE_LIST
+      CHARACTER*120 YENTRY
+      CHARACTER*256 YFNAME
+      CHARACTER*(*) YNAME
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS.
+C                ----------------------
+ 100  CONTINUE
+C
+      KERR=0
+      J  =0
+      IST=1
+      YFNAME=' '
+C
+      DO 101 I=1,JTAB
+      NTABDTR(I)=999999
+      NTABDL (I)=0
+      NTABDST(I)=0
+ 101  CONTINUE
+C
+      DO 102 I=1,JTAB*20
+      NTABDSQ(I)=0
+ 102  CONTINUE
+C
+      II=INDEX(YNAME,' ')
+      II=II-1
+      YFNAME=YNAME(1:II)
+      II=INDEX(YFNAME,' ')
+      II=II-1
+      CALL GET_FREE_UNIT(IUNIT)
+      OPEN(UNIT=IUNIT,iostat=ios,FILE=YFNAME(1:II),STATUS='OLD')
+      IF(IOS.NE.0) THEN
+         print*,'Open error on ',YFNAME(1:II)
+         kerr=63
+         return
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE D
+C                ---------------
+C
+ 200  CONTINUE
+C
+      READ(IUNIT,'(A)',IOSTAT=IOS,END=300) YENTRY
+      IF(IOS.NE.0) THEN
+         print*,'Read error ',ios
+         kerr=8
+         return
+      END IF
+C
+      J=J+1
+C
+      IF(J.GT.JTAB) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         KERR=64
+         RETURN
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, DATA LENGTH,
+C*               STARTING POINTER AND SEQUENCE DESCRIPTORS.
+C
+ 210  CONTINUE
+C
+C
+      READ(YENTRY,'(1X,I6,I3)') NTABDTR(J),NTABDL (J)
+C
+      IF(J.EQ.1) THEN
+         IST=1
+         NTABDST(J)=IST
+      ELSE
+         IST=IST + NTABDL(J-1)
+         NTABDST(J)=IST
+      END IF
+C
+      IF(NTABDL(J).GT.1) THEN
+         READ(YENTRY,'(11X,I6)') NTABDSQ(IST)
+         IIST=IST
+C
+         DO 220 JA=1,NTABDL(J)-1
+         IIST=IIST+1
+         READ(IUNIT,'(A)',END=300) YENTRY
+         READ(YENTRY,'(11X,I6)') NTABDSQ(IIST)
+ 220     CONTINUE
+C
+      ELSE
+         READ(YENTRY,'(11X,I6)') NTABDSQ(IST)
+      END IF
+C
+C
+c     WRITE(*,1000) NTABDTR(J),NTABDL(J),NTABDST(J),
+c    1              (NTABDSQ(I),I=NTABDST(J),NTABDL(J)+NTABDST(J)-1)
+C
+c1000 FORMAT(1H ,I6,I3,1X,I6,1X,I6/ (18X,I6))
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+ 300  CONTINUE
+C
+      IF(NTT.EQ.JTMAX.AND.NTC.NE.0) THEN
+         DO J=1,JTAB
+            MTABDTR(J,NTC)=NTABDTR(J)
+            MTABDL (J,NTC)=NTABDL(J)
+            MTABDST(J,NTC)=NTABDST(J)
+         END DO
+         DO J=1,JTAB*20
+            MTABDSQ(J,NTC)=NTABDSQ(J)
+         END DO
+      ELSE
+         DO J=1,JTAB
+            MTABDTR(J,NTT)=NTABDTR(J)
+            MTABDL (J,NTT)=NTABDL(J)
+            MTABDST(J,NTT)=NTABDST(J)
+         END DO
+         DO J=1,JTAB*20
+            MTABDSQ(J,NTT)=NTABDSQ(J)
+         END DO
+      END IF
+
+      CLOSE(IUNIT)
+C     WRITE(*,'(1h )')
+C     WRITE(*,'(1h ,a,i4)') 'Total number of entries in Table D is ',j
+C
+      RETURN
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/bufrdc/fmmh.F b/bufrdc/fmmh.F
new file mode 100755
index 0000000..28e7cd7
--- /dev/null
+++ b/bufrdc/fmmh.F
@@ -0,0 +1,259 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE FMMH(KLA,KLO,KELEM,VALUES,KSEC3,RMINLAT,RMINLON,
+     1                RMAXLAT,RMAXLON)
+C
+C**** *FMM*
+C
+C
+C     PURPOSE.
+C     --------
+C         FIND MINIMUM AND MAXIMUM LATITUDE AND LOGITUDE.
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *FMMH(KLA,KLO,VALUES,KSEC3,RMINLAT,RMINLON,
+C                      RMAXLAT,RMAXLON)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/04/1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+      DIMENSION KSEC3(*)
+#ifndef R_4
+      REAL*8 VALUES(*)
+      REAL*8 RNLON
+      REAL*8 RNLAT
+      REAL*8 RMINLAT
+      REAL*8 RMINLON
+      REAL*8 RMAXLAT
+      REAL*8 RMAXLON
+      REAL*8 RVIND
+      REAL*8 EPS
+#else
+      REAL VALUES(*)
+      REAL RNLON
+      REAL RNLAT
+      REAL RMINLAT
+      REAL RMINLON
+      REAL RMAXLAT
+      REAL RMAXLON
+      REAL RVIND
+      REAL EPS
+
+#endif
+C     -----------------------------------------------------------------
+C*          1.   FIND MIN/MAX LATITUDES/LONGITUDES.
+C                ----------------------------------
+ 100  CONTINUE
+C
+      RVIND=1.7D38
+      EPS=10.D-7
+C
+      ISUB=KSEC3(3)
+C
+C
+      DO 101 I=1,ISUB
+      KLAI=KELEM*(I-1)+KLA
+      IF(ABS(VALUES( KLAI)-RVIND)/RVIND.GT.EPS)
+     1   THEN
+            RMINLAT=VALUES( KLAI)
+            GO TO 105
+         END IF
+ 101  CONTINUE
+C
+ 105  CONTINUE
+C
+      DO 110 I=1,ISUB
+C
+      KLAI=KELEM*(I-1)+KLA
+      IF(ABS(VALUES( KLAI)-RVIND)/RVIND.LT.EPS) GO TO 110
+      RNLAT=VALUES( KLAI)
+      IF(RNLAT.LT.RMINLAT) RMINLAT=RNLAT
+C
+ 110  CONTINUE
+C
+      DO 111 I=1,ISUB
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.GT.EPS) THEN
+         RMINLON=VALUES( KLOI)+180.
+         GO TO 115
+      END IF
+ 111  CONTINUE
+C
+ 115  CONTINUE
+C
+      DO 120 I=1,ISUB
+C
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.LT.EPS) GO TO 120
+      RNLON=VALUES( KLOI)+180.
+      IF(RNLON.LT.RMINLON) RMINLON=RNLON
+C
+ 120  CONTINUE
+C
+      DO 121 I=1,ISUB
+      KLAI=KELEM*(I-1)+KLA
+      IF(ABS(VALUES(KLAI)-RVIND)/RVIND.GT.EPS) THEN
+         RMAXLAT=VALUES( KLAI)
+         GO TO 125
+      END IF
+ 121  CONTINUE
+C
+ 125  CONTINUE
+C
+      DO 130 I=1,ISUB
+C
+      KLAI=KELEM*(I-1)+KLA
+      IF(ABS(VALUES( KLAI)-RVIND)/RVIND.LT.EPS) GO TO 130
+      RNLAT=VALUES( KLAI)
+      IF(RNLAT.GT.RMAXLAT) RMAXLAT=RNLAT
+C
+ 130  CONTINUE
+C
+C
+      DO 131 I=1,ISUB
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.GT.EPS) THEN
+         RMAXLON=VALUES( KLOI)+180.
+         GO TO 135
+      END IF
+ 131  CONTINUE
+C
+ 135  CONTINUE
+C
+      DO 140 I=1,ISUB
+C
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.LT.EPS) GO TO 140
+      RNLON=VALUES( KLOI)+180.
+      IF(RNLON.GT.RMAXLON) RMAXLON=RNLON
+C
+ 140  CONTINUE
+C
+      RMINLON=RMINLON-180.
+
+      RMAXLON=RMAXLON-180.
+C
+C
+C*          2. CHECK IF ALL OBSERVATION FITS IN THE BOX.
+C              -----------------------------------------
+ 200  CONTINUE
+C
+      DO 201 I=1,ISUB
+C
+      KLAI=KELEM*(I-1)+KLA
+      KLOI=KELEM*(I-1)+KLO
+      IF((VALUES( KLAI).LT.RMINLAT.AND.VALUES( KLAI).GT.RMAXLAT).OR.
+     1   (VALUES( KLOI).LT.RMINLON.AND.VALUES( KLOI).GT.RMAXLON) )
+     2   GO TO 210
+ 201  CONTINUE
+C
+C     ALL DATA IN THE BOX
+C
+      RETURN
+C
+C*          2.1 FIND MAX NEGATIVE LONGITUDE AND MIN POSITIVE LONGITUDE.
+C               -------------------------------------------------------
+ 210  CONTINUE
+C
+      DO 211 I=1,ISUB
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.GT.EPS) THEN
+         IF(VALUES( KLOI).LT.0) THEN
+            RMAXLON=VALUES( KLOI)
+            GO TO 215
+         END IF
+      END IF
+ 211  CONTINUE
+C
+C     NEGATIVE LONGITUDES NOT FOUND
+C
+      PRINT*,'FMM:NEGATIVE LONGITUDES NOT FOUND'
+      RETURN
+C
+ 215  CONTINUE
+C
+      DO 220 I=1,ISUB
+C
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.LT.EPS) GO TO 220
+      IF(VALUES( KLOI).LT.0) THEN
+         RNLON=VALUES( KLOI)
+
+         IF(RNLON.GT.RMAXLON) RMAXLON=RNLON
+      END IF
+C
+ 220  CONTINUE
+C
+C*          2.3 FIND MIN POSITIVE LONGITUDE.
+C
+ 230  CONTINUE
+      DO 231 I=1,ISUB
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.GT.EPS) THEN
+         IF(VALUES( KLOI).GE.0) THEN
+            RMINLON=VALUES( KLOI)
+            GO TO 235
+         END IF
+      END IF
+ 231  CONTINUE
+C
+C     POSITIVE LONGITUDES NOT FOUND
+C
+      PRINT*,'FMM:POSITIVE LONGITUDES NOT FOUND'
+      RETURN
+C
+ 235  CONTINUE
+C
+      DO 232 I=1,ISUB
+C
+      KLOI=KELEM*(I-1)+KLO
+      IF(ABS(VALUES( KLOI)-RVIND)/RVIND.LT.EPS) GO TO 232
+      IF(VALUES( KLOI).GE.0) THEN
+         RNLON=VALUES( KLOI)
+         IF(RNLON.LT.RMINLON) RMINLON=RNLON
+      END IF
+C
+ 232  CONTINUE
+
+      RETURN
+      END
diff --git a/bufrdc/get_free_unit.F b/bufrdc/get_free_unit.F
new file mode 100755
index 0000000..572dfe8
--- /dev/null
+++ b/bufrdc/get_free_unit.F
@@ -0,0 +1,67 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GET_FREE_UNIT(KUNIT)
+C
+C**** *CTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C        Get free unit number  
+C         
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 2008.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+C
+      DO I=10,300
+         INQUIRE(UNIT=i,IOSTAT=IOS,OPENED=OPENED)
+         IF(.NOT.OPENED) THEN
+            KUNIT=I
+            GO TO 100
+         END IF
+      END DO
+100   CONTINUE
+      END 
diff --git a/bufrdc/get_name_unit.F b/bufrdc/get_name_unit.F
new file mode 100755
index 0000000..179e23b
--- /dev/null
+++ b/bufrdc/get_name_unit.F
@@ -0,0 +1,122 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GET_NAME_UNIT(KREFERENCE,YNAME,YUNIT)
+C
+C**** *GET_NAME_UNIT*
+C
+C
+C     PURPOSE.
+C     --------
+C          FIND NAME AND THE UNIT FOR THE PARTICULAR REFERENCE NUMBER.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *GET_NAME_UNIT(KREFERENCE,YNAME,YUNIT)*
+C
+C
+C        INPUT : *KREFERENCE* - TABLE B REFERENCE NUMBER
+C        OUTPUT:
+C                *CNAMES*     -  ARRAY CONTAINING ELEMENT NAMES
+C                *CUNITS*     -  ARRAY CONTAINING ELEMENT UNITS
+C                *KERR*       -  RETURN CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/2006.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+C
+#     include "parameter.F"
+
+      CHARACTER*64 YNAME
+      CHARACTER*24 YUNIT
+C
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+C
+      CHARACTER*64 CTABBEN
+      CHARACTER*24 CTABBU
+      DIMENSION KREF(11)
+      CHARACTER*64  CN(11)
+
+C
+      DATA KREF/222000,235000,236000,237000,224000,225000,223000,
+     1          232000,235000,999999,0/ 
+      DATA CN/'QUALITY INFORMATION FOLLOW',
+     1        'CANCEL BACKWARD DATA REFERENCE',
+     2        'BACKWARD REFERENCE BIT MAP',
+     3        'USE PREVIOUSLY DEFINED BIT MAP',
+     4        'FIRST ORDER STATISTICS FOLLOW',
+     5        'DIFFERENCE STATISTICAL VALUES FOLLOW',
+     6        'SUBSTITUTED VALUES FOLLOW',
+     7        'REPLACE/RETAINED VALUES FOLLOW',
+     8        'CANCEL BACKWARD DATA REFERENCE',
+     9        'ASSOCIATED FIELD',
+     1        'REFERENCE VALUE'/ 
+C
+      KERR=0
+      DO I=1,11
+      IF(KREFERENCE.EQ.KREF(I)) THEN
+         YNAME=CN(I)
+         YUNIT=' '
+         RETURN 
+      END IF
+      END DO
+      IF(KREFERENCE/1000.EQ.205) THEN
+        YNAME='CHARACTERS'
+        YUNIT='CCITT IA5 '
+        RETURN
+      END IF
+C
+      ICLASS=KREFERENCE/1000
+      IYYY  =KREFERENCE-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+      if(ICLASS.GT.64.or.IYYY.gt.256) then
+         print*,'KREFERENCE=',KREFERENCE
+         print*,'ICLASS=',ICLASS
+         print*,'IYYY=',IYYY
+         KERR=57
+         RETURN
+      end if
+      I=NTABP(ICLASS,IYYY)
+      YNAME=CTABBEN(I)
+      YUNIT=CTABBU(I)
+C
+      RETURN
+      END
diff --git a/bufrdc/get_tables.F b/bufrdc/get_tables.F
new file mode 100755
index 0000000..d90963f
--- /dev/null
+++ b/bufrdc/get_tables.F
@@ -0,0 +1,105 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GET_TABLES(K)
+C
+C**** *GET_TABLES*
+C
+C
+C     PURPOSE.
+C     --------
+C          GET TABLES FROM THE ARRAY OF TABLES
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, FM 94 BUFR.
+C
+C          J.K.GIBSON AND M.DRAGOSAVAC,1987: DECODING DATA 
+C          REPRESENTATION FM 94 BUFR,TECHNICAL MEMORANDUM NO.
+C
+C          J.K.GIBSON,1986:EMOS 2 - STANDARDS FOR SOFTWARE DEVELOPMENT
+C          AND MAINTANANCE ,TECHICAL MEMORANDUM NO.       ECMWF.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 2007
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomtabload.F"
+#     include "bcomtabloadc.F"
+
+C
+      CHARACTER*64 CTABBEN,CCTABBEN
+      CHARACTER*24 CTABBU,CCTABBU,CTABLE_LIST
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+C
+      IF(K.LT.1.OR.K.GT.JTMAX) THEN
+         print*,'Table number > JTMAX'
+         call exit(2)
+      END IF
+      DO 101 I=1,64
+      DO 101 ii=1,255
+      NTABP(I,II)=MTABP(I,II,K)
+ 101  CONTINUE
+C
+      DO 102 I=1,JTAB
+      NTABBTR(I)=MTABBTR(I,K)
+      NTABBS (I)=MTABBS (I,K)
+      NTABBRV(I)=MTABBRV(I,K)
+      NTABBDW(I)=MTABBDW(I,K)
+      CTABBEN(I)=CCTABBEN(I,K)
+      CTABBU (I)=CCTABBU(I,K)
+      NTABDTR(I)=MTABDTR(I,K)
+      NTABDL (I)=MTABDL(I,K)
+      NTABDST(I)=MTABDST(I,K)
+ 102  CONTINUE
+      DO I=1,JTAB*20
+      NTABDSQ(I)=MTABDSQ(I,K)
+      END DO
+C
+C     ------------------------------------------------------------------
+      RETURN
+      END
diff --git a/bufrdc/get_tables1.F b/bufrdc/get_tables1.F
new file mode 100755
index 0000000..e088916
--- /dev/null
+++ b/bufrdc/get_tables1.F
@@ -0,0 +1,107 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GET_TABLES1(K)
+C
+C**** *GET_TABLES1*
+C
+C
+C     PURPOSE.
+C     --------
+C          GET TABLES FROM THE ARRAY OF TABLES FOR
+C          ENCODING
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, FM 94 BUFR.
+C
+C          J.K.GIBSON AND M.DRAGOSAVAC,1987: DECODING DATA 
+C          REPRESENTATION FM 94 BUFR,TECHNICAL MEMORANDUM NO.
+C
+C          J.K.GIBSON,1986:EMOS 2 - STANDARDS FOR SOFTWARE DEVELOPMENT
+C          AND MAINTANANCE ,TECHICAL MEMORANDUM NO.       ECMWF.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 2007
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcmtab.F"
+#     include "bcmtabc.F"
+#     include "bcmtabload.F"
+#     include "bcmtabloadc.F"
+
+C
+      CHARACTER*64 CTABBEN,CCTABBEN
+      CHARACTER*24 CTABBU,CCTABBU,CTABLE_LIST
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+C
+      IF(K.LT.1.OR.K.GT.JTMAX) THEN
+         print*,'Table number > JTMAX'
+         call exit(2)
+      END IF
+      DO 101 I=1,64
+      DO 101 ii=1,255
+      NTABP(I,II)=MTABP(I,II,K)
+ 101  CONTINUE
+C
+      DO 102 I=1,JTAB
+      NTABBTR(I)=MTABBTR(I,K)
+      NTABBS (I)=MTABBS (I,K)
+      NTABBRV(I)=MTABBRV(I,K)
+      NTABBDW(I)=MTABBDW(I,K)
+      CTABBEN(I)=CCTABBEN(I,K)
+      CTABBU (I)=CCTABBU(I,K)
+      NTABDTR(I)=MTABDTR(I,K)
+      NTABDL (I)=MTABDL(I,K)
+      NTABDST(I)=MTABDST(I,K)
+ 102  CONTINUE
+
+      DO I=1,JTAB*20
+      NTABDSQ(I)=MTABDSQ(I,K)
+      END DO
+C
+C     ------------------------------------------------------------------
+      RETURN
+      END
diff --git a/bufrdc/getcode.F b/bufrdc/getcode.F
new file mode 100755
index 0000000..bbe1bcf
--- /dev/null
+++ b/bufrdc/getcode.F
@@ -0,0 +1,116 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GETCODE(KREF,KCODE,YCODE,KERR)
+C
+C**** *GETCODE*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          The main purpose of the subroutine is to get text 
+C          associated with code number 
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 2008.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomwork.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomct.F"
+#     include "bcomctc.F"
+#     include "bcomroot.F"
+C#     include "bcomtabload.F"
+C#     include "bcomtabloadc.F"
+
+
+C
+      CHARACTER*64 CTEXT
+      CHARACTER*64 CTABBEN
+      CHARACTER*24 CTABBU
+      CHARACTER*256 YCODE
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS AND POINTERS
+C                ----------------------------------
+ 100  CONTINUE
+C
+      kerr=0
+C
+      ycode=' '
+      do i=1,JCTAB
+      if(nref(i).eq.kref) go to 200
+      end do
+      ycode(1:)='CODE ENTRY NOT KNOWN'
+      return      
+c
+ 200  continue
+      ipt=nstart(i)
+      do i=ipt,ipt+nlen(i)-1
+       if(ncodnum(i).eq.KCODE) then
+         iptc=nstartc(i)
+         ii=1
+         iptc1=nlenc(i)+iptc-1
+         do j=iptc,iptc1
+          do k=64,1,-1
+          if(ctext(j)(k:k).ne.' ') then
+           iz=k
+           go to 201
+          end if
+          end do
+ 201      ycode(ii:ii+iz-1)=ctext(j)(1:iz)
+          ii=ii+iz
+         end do
+         go to 300
+       end if
+      end do
+      ycode(1:)='CODE ENTRY NOT KNOWN'
+C
+ 300  continue
+      return
+      END
diff --git a/bufrdc/getflag.F b/bufrdc/getflag.F
new file mode 100755
index 0000000..67f2dff
--- /dev/null
+++ b/bufrdc/getflag.F
@@ -0,0 +1,135 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GETFLAG(KREF,KCODE,KFLAG,YFLAG,KERR)
+C
+C**** *GETFLAG*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          The main purpose of the subroutine is to get text 
+C          associated with code number 
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 2008.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+#     include "parameter.F"
+#     include "bcomwork.F"
+#     include "bcomtab.F"
+#     include "bcomtabc.F"
+#     include "bcomct.F"
+#     include "bcomctc.F"
+#     include "bcomroot.F"
+C#     include "bcomtabload.F"
+C#     include "bcomtabloadc.F"
+
+
+C
+      CHARACTER*64  CTEXT
+      CHARACTER*64  CTABBEN
+      CHARACTER*24  CTABBU
+      CHARACTER*64  YFLAG(32)
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS AND POINTERS
+C                ----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      do i=1,32
+      YFLAG(i)=' '
+      end do
+C
+      do i=1,JCTAB
+      if(nref(i).eq.kref) go to 200
+      end do
+      print*,'Could not find ',kref
+      ierr=2
+      return      
+c
+ 200  continue
+C
+      ictab=i
+C
+C     Find data width for kref
+C
+      do i=1,JTAB
+      if(NTABBTR(I).eq.kref) go to 201
+      end do
+
+      print*,'Could not find ',kref
+      ierr=2
+      return
+ 201  continue
+c
+      ibtab=i
+c
+      iwidth=NTABBDW(ibtab)
+c
+      if(KCODE.eq.NMASK(iwidth)) then
+         KFLAG=1
+         YFLAG(1)='MISSING VALUE'         
+         return
+      else
+         ipt=nstart(ictab)
+         iptc=nstartc(ipt)
+         KFLAG=0
+         do i=ipt,ipt+nlen(ictab)-1
+            ibitnumber=ncodnum(i)
+c           test bit 
+            ipos=iwidth-ibitnumber
+            if(btest(KCODE,ipos)) then
+               ic=iptc+ibitnumber-1
+               KFLAG=KFLAG+1
+               YFLAG(KFLAG)=ctext(ic)
+            end if
+         end do
+      end if
+
+      return
+      END
diff --git a/bufrdc/mbufr_mars_filter.F b/bufrdc/mbufr_mars_filter.F
new file mode 100755
index 0000000..1b4c195
--- /dev/null
+++ b/bufrdc/mbufr_mars_filter.F
@@ -0,0 +1,246 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE MBUFR_MARS_FILTER(KSIZE,KREQUEST,KBUFL,
+     1                             KBUFF,FOUND,KERR)
+C
+C**** *MBUFR_MARS_FILTER*
+C
+C
+C     PURPOSE.
+C     --------
+C         FILTER BUFR MESSAGES FROM kbuff array
+C         ACCORDING TO REQUEST and returning requested bufr message 
+C         in kbuff array if repacking is not needed or kbufr otherwise.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         CALL MBUSEL
+C         CALL MBUFREX
+C         CALL MBUFREN
+C         CALL MBUPRS0
+C         CALL MBUPRS1
+C         CALL MBUPRS2
+C         CALL MBUPRS3
+C         CALL MBUPRT
+C         CALL MBUUKEY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       12/09/2002
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=   4,
+     1          JSEC4=2,JELEM=160000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=3000,JCTST=3000,JCTEXT=6000,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=3000,JCTST=3000,JCTEXT=6000,
+#endif
+     3          JWORK=4096000,JKEY=46, JTMAX=10,JTCLAS=64,JTEL=255)
+C
+      PARAMETER (KELEM=200)
+      PARAMETER (KVALS=200000)
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY(JKEY),KEY1(JKEY),KEY2(JKEY)
+      REAL*8 VALUES(KVALS)
+      REAL*8 RQV(KELEM)
+      REAL*8 RVIND
+      REAL*8 EPS
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM)
+      DIMENSION KDATA(200)
+      DIMENSION KREQ(2),KRQ(KELEM)
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*9  CIDENTS
+      LOGICAL      FOUND
+      DIMENSION KREQUEST(KSIZE)
+C                                                                       
+C
+C     ------------------------------------------------------------------
+C*          1. GET FILE NAMES.
+C              ---------------
+ 100  CONTINUE
+C
+      RVIND=1.7D38
+      NBYTES=JBPW/8
+      EPS=10.D-7
+C
+      
+      KBUFL1=KBUFL/NBYTES+1
+C
+C
+C     -----------------------------------------------------------------
+C*          2.1 EXPAND BUFR MESSAGE SECTION 0,1,2
+C               ---------------------------------
+ 210  CONTINUE
+C
+      IERR=0
+      CALL BUS0123( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KSEC3,IERR)
+      IF(KERR.NE.0) RETURN
+C
+      IF(KSEC3(3).EQ.1.OR.KSEC3(3).GT.1.AND.
+     1   KSEC3(4).EQ.192.OR.KSEC3(4).EQ.64) THEN
+C       Expand first 9 elements
+         CALL BUSTOP(9)
+      END IF
+
+C            2.1.1  UNPACK KEY
+C
+C     CALL BUUKEY(KSEC1,KSEC2,KEY,KSUP,KERR)
+C
+C              PRINT KEY
+C
+C      CALL BUPRS2(KSUP ,KEY)
+C
+C----------------------------------------------------------------
+C
+C            2.3 MULTI-SUBSET MESSAGE
+C
+ 230  CONTINUE
+C
+      IF(KSUP(6).GT.1)  THEN
+         KEL=KVALS/KSUP(6)
+         IF(KEL.GT.KELEM) KEL=KELEM
+      ELSE
+         KEL=KELEM
+      END IF
+C
+      KREQ(1)=1
+      KREQ(2)=2
+      KRQ (1)=002048
+      KRQ (2)=002019
+      RQV (1)=RVIND
+      RQV (2)=RVIND
+      KRQL=2
+
+      KERR=0
+      CALL BUSRQ(KREQ,KRQL,KRQ,RQV,KERR)
+      IF(KERR.NE.0) RETURN
+C
+      CALL BUFREX(KBUFL1,KBUFF,KSUP,KSEC0 ,KSEC1,KSEC2 ,KSEC3 ,KSEC4,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+C
+      IF(KERR.NE.0) RETURN
+C
+C*          2.4 PRINT EXPANDED BUFR MESSAGE.
+C               ----------------------------
+ 240  CONTINUE
+C
+C      CALL BUPRS0(KSEC0)
+C      CALL BUPRS1(KSEC1)
+C      CALL BUUKEY(KSEC1,KSEC2,KEY,KSUP,KERR)
+C      CALL BUPRS2(KSUP ,KEY)
+C
+      CALL BUSEL(KTDLEN,KTDLST,KTDEXL,KTDEXP,KERR)
+      IF(KERR.NE.0) RETURN
+C
+C      CALL BUPRS3(KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,KEL,CNAMES)
+C      IST=1
+C      IEND=KSUP(6)
+C      CALL BUPRT(ICODE,IST,IEND,KEL,CNAMES,CUNITS,CVALS,
+C     1           KVALS,VALUES,KSUP,KSEC1,IERR)
+C
+C
+C
+      i_002048=0
+      i_002019=0
+      DO I=1,KTDEXL
+        IF(KTDEXP(i).EQ.002048) i_002048=i
+        IF(KTDEXP(i).EQ.002019) i_002019=i
+      END DO
+C
+      if(i_002048.ne.0) then
+         do i=1,ksize
+         if(krequest(i).eq.605) then
+            krequest(i)=0
+         elseif(krequest(i).eq.623) then
+            krequest(i)=1
+         elseif(krequest(i).eq.627) then
+            krequest(i)=2
+         elseif(krequest(i).eq.570) then
+            krequest(i)=3
+         elseif(krequest(i).eq.574) then
+            krequest(i)=4
+         elseif(krequest(i).eq.590) then
+            krequest(i)=5
+         elseif(krequest(i).eq.905) then
+            krequest(i)=6
+         elseif(krequest(i).eq.312) then
+            krequest(i)=7
+         elseif(krequest(i).eq.313) then
+            krequest(i)=8
+         elseif(krequest(i).eq.203) then
+            krequest(i)=11
+         end if
+         end do
+      end if
+C
+      FOUND=.FALSE.
+C     
+      if(i_002048.ne.0) then
+         do i=1,ksize
+           do j=1,ksec3(3)
+             ij=i_002048+(j-1)*kel
+             if(abs(values(ij)-rvind)/rvind.gt.eps) then
+             if(nint(values(ij)).eq.krequest(i)) FOUND =.TRUE.
+             end if
+           end do 
+         end do
+      elseif(i_002019.ne.0) then
+         do i=1,ksize
+           do j=1,ksec3(3)
+             ij=i_002019+(j-1)*kel
+             if(abs(values(ij)-rvind)/rvind.gt.eps) then
+             if(nint(values(ij)).eq.krequest(i)) FOUND =.TRUE.
+             end if
+           end do
+         end do
+      else
+         FOUND =.FALSE.
+      end if
+
+C     -----------------------------------------------------------------
+      KERR=0
+C
+      RETURN
+C
+C      
+      END
diff --git a/bufrdc/parameter.F b/bufrdc/parameter.F
new file mode 100755
index 0000000..baff418
--- /dev/null
+++ b/bufrdc/parameter.F
@@ -0,0 +1,18 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=   4,
+     1          JSEC4=2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=3000,JCTST=9000,JCTEXT=9000,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=3000,JCTST=9000,JCTEXT=9000,
+#endif
+     3          JWORK=4096000,JKEY=46, JTMAX=10,JTCLAS=64,JTEL=255)
diff --git a/bufrdc/setlalo.F b/bufrdc/setlalo.F
new file mode 100755
index 0000000..0d24dc5
--- /dev/null
+++ b/bufrdc/setlalo.F
@@ -0,0 +1,254 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SETLALO(K,KLA,KLO,KERR)
+C
+C     RETURN INDICES FOR LATITUDE AND LONGITUDE
+C
+      KERR=0
+C
+      IF(K.EQ.1) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.2) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.3) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.4) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.7) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.9) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.11) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.13) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.19) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.21) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.22) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.23) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.51) THEN
+         KLA=8
+         KLO=9
+         RETURN
+      ELSEIF(K.EQ.53) THEN
+         KLA=8
+         KLO=9
+         RETURN
+      ELSEIF(K.EQ.54) THEN
+         KLA=22
+         KLO=23
+         RETURN
+      ELSEIF(K.EQ.55) THEN
+         KLA=22
+         KLO=23
+         RETURN
+       ELSEIF(K.EQ.61) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.62) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.63) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.71) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.72) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.73) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.82) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.83) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.84) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.85) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.86) THEN
+         KLA=9
+         KLO=10
+         RETURN
+       ELSEIF(K.EQ.87) THEN
+         KLA=12
+         KLO=13
+         RETURN
+       ELSEIF(K.EQ.88) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.89) THEN
+         KLA=12
+         KLO=13
+         RETURN
+      ELSEIF(K.EQ.91) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.92) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.95) THEN
+         KLA=3 
+         KLO=4
+         RETURN
+      ELSEIF(K.EQ.96) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.97) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.101) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.102) THEN
+         KLA=11
+         KLO=12
+         RETURN
+      ELSEIF(K.EQ.103) THEN
+         KLA=11
+         KLO=12
+         RETURN
+      ELSEIF(K.EQ.104) THEN
+         KLA=15
+         KLO=16
+         RETURN
+      ELSEIF(K.EQ.106) THEN
+         KLA=11
+         KLO=12
+         RETURN
+      ELSEIF(K.EQ.121) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.122) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.123) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.126) THEN
+         KLA=9
+         KLO=10
+         RETURN
+      ELSEIF(K.EQ.127) THEN
+         KLA=11
+         KLO=12
+         RETURN
+      ELSEIF(K.EQ.129) THEN
+         KLA=11
+         KLO=12
+         RETURN
+      ELSEIF(K.EQ.130) THEN
+         KLA=11
+         KLO=12
+         RETURN
+      ELSEIF(K.EQ.131) THEN
+         KLA=10
+         KLO=11
+         RETURN
+      ELSEIF(K.EQ.132) THEN
+         KLA=7
+         KLO=8
+         RETURN
+      ELSEIF(K.EQ.133) THEN
+         KLA=7
+         KLO=8
+         RETURN
+      ELSEIF(K.EQ.136) THEN
+         KLA=14
+         KLO=15
+         RETURN
+      ELSEIF(K.EQ.137) THEN
+         KLA=16
+         KLO=17
+         RETURN
+      ELSEIF(K.EQ.142) THEN
+         KLA=8
+         KLO=9
+         RETURN
+      ELSEIF(K.EQ.144) THEN
+         KLA=8
+         KLO=9
+         RETURN
+      ELSEIF(K.EQ.145) THEN
+         KLA=15
+         KLO=16
+         RETURN
+      ELSEIF(K.EQ.164) THEN
+         KLA=6
+         KLO=7
+         RETURN
+      ELSEIF(K.EQ.255) THEN
+         KLA=8
+         KLO=9
+         RETURN
+      ELSE
+         PRINT*,'POINTERS FOR ',K,' SYBTYPE NOT DEFINED.'
+         KERR=1
+         KLA=0
+         KLO=0
+         RETURN
+      END IF
+C
+      RETURN
+      END
diff --git a/bufrdc/sources b/bufrdc/sources
new file mode 100755
index 0000000..0622f5c
--- /dev/null
+++ b/bufrdc/sources
@@ -0,0 +1,106 @@
+#
+#   Sources for bufrdc
+#
+
+SOURCES.F = \
+   bbuprs0.F   \
+   bbuprs1.F   \
+   bbuprs2.F   \
+   bbuprs3.F   \
+   bbuprt.F    \
+   bbuprtbox.F \
+   buaug.F     \
+   bubox.F     \
+   bucrkey.F   \
+   bucrekey.F  \
+   buedd.F     \
+   buens0.F    \
+   buens1.F    \
+   buens2.F    \
+   buens3.F    \
+   buens4.F    \
+   buens5.F    \
+   buepmrk.F   \
+   buepmrkc.F  \
+   buepwt.F    \
+   buepwtc.F   \
+   buerr.F     \
+   buetab.F    \
+   buetd.F     \
+   buetdr.F    \
+   buevar.F    \
+   buexs0.F    \
+   buexs1.F    \
+   buexs2.F    \
+   buexs3.F    \
+   buexs3p.F   \
+   buexs4.F    \
+   buexs5.F    \
+   bufren.F    \
+   bufrex.F    \
+   bugbts.F    \
+   bugetbm.F   \
+   buivar.F    \
+   bunexs.F    \
+   bunpck.F    \
+   bunpks.F    \
+   buoctn.F    \
+   buoper.F    \
+   buoperc.F   \
+   bupck.F     \
+   bupkey.F    \
+   bupks.F     \
+   bupmrk.F    \
+   buprco.F    \
+   buprq.F     \
+   buprs0.F    \
+   buprs1.F    \
+   buprs2.F    \
+   buprs3.F    \
+   buprt.F     \
+   buprtbox.F  \
+   burep.F     \
+   burepc.F    \
+   burqc.F     \
+   burquc.F    \
+   bustop.F    \
+   bus012.F    \
+   busel.F     \
+   buset.F     \
+   busrp.F     \
+   busrq.F     \
+   bustdr.F    \
+   buuatb.F    \
+   buukey.F    \
+   buunp.F     \
+   buunps.F    \
+   buupwt.F    \
+   buxdes.F    \
+   bugtll.F    \
+   buexs33.F   \
+   busel2.F    \
+   bus0123.F   \
+   get_name_unit.F \
+   mbufr_mars_filter.F \
+   fmmh.F      \
+   btable.F    \
+   ctable.F    \
+   dtable.F    \
+   btable1.F    \
+   ctable1.F    \
+   dtable1.F    \
+   big_endian.F \
+   swap_bytes4.F \
+   swap_bytes8.F \
+   get_tables.F \
+   get_tables1.F \
+   get_free_unit.F \
+   busbytesR8.F \
+   busbytesR4.F \
+   bugbytesR8.F \
+   bugbytesR4.F \
+   buget_opera_image.F \
+   getcode.F \
+   getflag.F \
+   bu_check_s4s.F \
+   setlalo.F    
diff --git a/bufrdc/swap_bytes4.F b/bufrdc/swap_bytes4.F
new file mode 100755
index 0000000..a6d74b5
--- /dev/null
+++ b/bufrdc/swap_bytes4.F
@@ -0,0 +1,36 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      subroutine swap_bytes4(r1,r2)
+c     ---------------------------------
+      implicit none
+
+      real*4 r1, r2
+      real*4 r14
+      real*4 r24
+      integer*4 kint14,kint24
+
+      equivalence(r14,kint14)
+      equivalence(r24,kint24)
+
+
+
+c Reverse order of bytes
+
+      r14=r1
+
+      call mvbits(kint14, 24, 8, kint24, 0)
+      call mvbits(kint14, 16, 8, kint24, 8)
+      call mvbits(kint14,  8, 8, kint24,16)
+      call mvbits(kint14,  0, 8, kint24,24)
+      r2=r24
+
+      return
+      end
diff --git a/bufrdc/swap_bytes8.F b/bufrdc/swap_bytes8.F
new file mode 100755
index 0000000..0ec9034
--- /dev/null
+++ b/bufrdc/swap_bytes8.F
@@ -0,0 +1,42 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      subroutine swap_bytes8(r1,r2)
+c     ---------------------------------
+      implicit none
+
+      real*8 r1, r2
+      real*8 r18
+      real*8 r28
+      integer*8 kint18,kint28
+
+      equivalence(r18,kint18)
+      equivalence(r28,kint28)
+
+
+
+c Reverse order of bytes
+
+      r18=r1
+
+      call mvbits(kint18, 56, 8, kint28, 0)
+      call mvbits(kint18, 48, 8, kint28, 8)
+      call mvbits(kint18, 40, 8, kint28,16)
+      call mvbits(kint18, 32, 8, kint28,24)
+      call mvbits(kint18, 24, 8, kint28,32)
+      call mvbits(kint18, 16, 8, kint28,40)
+      call mvbits(kint18,  8, 8, kint28,48)
+      call mvbits(kint18,  0, 8, kint28,56)
+
+
+      r2=r28
+
+      return
+      end
diff --git a/bufrtables/B0000000000098000000.TXT b/bufrtables/B0000000000098000000.TXT
new file mode 100755
index 0000000..e00fb7f
--- /dev/null
+++ b/bufrtables/B0000000000098000000.TXT
@@ -0,0 +1,458 @@
+ 000001 TABLE A: ENTRY                                                   CCITTIA5                   0            0  24  
+ 000002 TABLE A: DATA CATEGORY DESCRIPTION, LINE 1                       CCITTIA5                   0            0 256  
+ 000003 TABLE A: DATA CATEGORY DESCRIPTION, LINE 2                       CCITTIA5                   0            0 256  
+ 000005 BUFR EDITION NUMBER                                              CCITTIA5                   0            0  24  
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8  
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16  
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24  
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256  
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256  
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192  
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8  
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24  
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8  
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80  
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24  
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  40  
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7  
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10  
+ 001003 WMO REGION NUMBER                                                NUMERIC                    0            0   3  
+ 001004 WMO REGION SUB-AREA                                              NUMERIC                    0            0   3  
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17  
+ 001006 AIRCRAFT IDENTIFIER                                              CCITTIA5                   0            0  64  
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 001007          0            0  10  
+ 001008 AIRCRAFT REGISTRATION NUMBER                                     CCITTIA5                   0            0  64  
+ 001011 SHIP'S CALL SIGN                                                 CCITTIA5                   0            0  72  
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM                 DEGREE TRUE                0            0   9  
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM                     M/S                        0            0  10  
+ 001014 PLATFORM DRIFT SPEED(HIGH PRECISION                              M/S                        2            0  10  
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14  
+ 001031 GENERATING CENTRE                                                CODE TABLE 001031          0            0  16  
+ 001032 GENERATING APPLICATION                                           CODE TABLE 001032          0            0   8  
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64  
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE 001192          0            0   8  
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE 001193          0            0   4  
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72  
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72  
+ 001201 GENERATING APPLICATION                                           CODE TABLE 001201          0            0   8  
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31  
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31  
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31  
+ 002001 TYPE OF STATION                                                  CODE TABLE 002001          0            0   2  
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 002002          0            0   4  
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 002003          0            0   4  
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUEMENT OR TYPE OF CR CODE TABLE 002004          0            0   4  
+ 002005 PRECISION OF TEMTERATURE OBS.                                    K                          2            0   7  
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 002011          0            0   8  
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 002012          0            0   4  
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 002013          0            0   4  
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM                              CODE TABLE 002014          0            0   7  
+ 002015 RADIOSONDE COMPLETNESS                                           CODE TABLE 002015          0            0   4  
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 002021          0            0   9  
+ 002022 SATELLITE DATA PROCESSING TECHNIQUE USED                         FLAG TABLE 002022          0            0   8  
+ 002023 CLOUD MOTION COMPUTATIONAL METHOD                                CODE TABLE 002023          0            0   4  
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 002024          0            0   4  
+ 002025 SATELLITE CHANNEL                                                FLAG TABLE 002025          0            0  25  
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12  
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12  
+ 002031 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 002031          0            0   5  
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 002032          0            0   2  
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 002033          0            0   3  
+ 002034 DROGUE TYPE                                                      CODE TABLE 002034          0            0   5  
+ 002035 CABLE LENGTH                                                     M                          0            0   9  
+ 002036 BUOY TYPE                                                        CODE TABLE 002036          0            0   2  
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 002041          0            0   6  
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 002061          0            0   3  
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 002062          0            0   4  
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16  
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 002070          0            0   4  
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 002101          0            0   4  
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8  
+ 002103 RADOME                                                           FLAG TABLE 002103          0            0   2  
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 002104          0            0   4  
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6  
+ 002106 3-dB BEAMWIDTH                                                   DEGREE                     1            0   6  
+ 002107 SIDELOBE SUPPRESION                                              dB                         0            0   6  
+ 002108 CROSSPOL DISCRIMINATION(ON AXIS)                                 dB                         0            0   6  
+ 002109 ANTENNA SPEED(AZIMUTH)                                           DEGREE/S                   2            0  12  
+ 002110 ANTENNA SPEED(ELEVATION)                                         DEGREE/S                   2            0  12  
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10  
+ 002112 RADAR TARGET AZIMUTH ANGLE                                       DEGREE                     1            0  12  
+ 002113 NO. OF AZIMUTH LOOKS                                             NUMERIC                    0            0   4  
+ 002114 ANTENNA EFFECTIVE SRFACE AREA                                    M**2                       0            0  15  
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7  
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8  
+ 002123 PEAK POWER                                                       W                         -4            0   7  
+ 002124 AVERAGE POWER                                                    W                         -1            0   7  
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8  
+ 002126 PULSE WIDTH                                                      S                          7            0   6  
+ 002127 RECEIVER INTERMEDIATEFREQUENCY (IF)                              Hz                        -6            0   7  
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6  
+ 002129 MINIMUM DETECTABLE SIGNAL(MDS)                                   dB                         0         -150   5  
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7  
+ 002131 SENSITIVITY TIME CONTROL(STC)                                    FLAG TABLE 002131          0            0   2  
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6  
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6  
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16  
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15  
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9  
+ 004001 YEAR                                                             YEAR                       0            0  12  
+ 004002 MONTH                                                            MONTH                      0            0   4  
+ 004003 DAY                                                              DAY                        0            0   6  
+ 004004 HOUR                                                             HOUR                       0            0   5  
+ 004005 MINUTE                                                           MINUTE                     0            0   6  
+ 004006 SECOND                                                           SECOND                     0            0   6  
+ 004011 TIME INCREMENT                                                   YEARS                      0        -1024  11  
+ 004012 TIME INCREMENT                                                   MONTHS                     0        -1024  11  
+ 004013 TIME INCREMENT                                                   DAYS                       0        -1024  11  
+ 004014 TIME INCREMENT                                                   HOURS                      0        -1024  11  
+ 004015 TIME INCREMENT                                                   MINUTES                    0        -2048  12  
+ 004016 TIME INCREMENT                                                   SECONDS                    0        -4096  13  
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEARS                      0        -1024  11  
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTHS                     0        -1024  11  
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAYS                       0        -1024  11  
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOURS                      0        -1024  11  
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTES                    0        -2048  12  
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECONDS                    0        -4096  13  
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9  
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25  
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15  
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25  
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15  
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16  
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16  
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12  
+ 005033 PIXEL SIZE ON HORIZONTAL-1                                       M                         -1            0  16  
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24  
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8  
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6  
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8  
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5  
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31  
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5  
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12  
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26  
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16  
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26  
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16  
+ 006021 DISTANCE                                                         M                         -1            0  13  
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12  
+ 006033 PIXEL SIZE ON HORIZONTAL-2                                       M                         -1            0  16  
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31  
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13  
+ 007001 HEIGHT OF STATION                                                M                          0         -400  15  
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16  
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17  
+ 007004 PRESSURE                                                         PA                        -1            0  14  
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12  
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15  
+ 007021 ELEVATION                                                        DEGREE                     2        -9000  15  
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15  
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14  
+ 007062 DEPTH BELOW SEA SURFACE                                          M                          1            0  17  
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31  
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 008001          0            0   7  
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 008002          0            0   6  
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 008003          0            0   6  
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 008004          0            0   3  
+ 008011 HORIZONTAL SIGNIFICANCE                                          CODE TABLE 008011          0            0   6  
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 008012          0            0   2  
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 008021          0            0   5  
+ 008022 TOTAL NUMBER(WITH RESPECT TO ACCUMULATION OR AVERAGE)            NUMERIC                    0            0  16  
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 008023          0            0   6  
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 008024          0            0   6  
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8  
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 008222          0            0   4  
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15  
+ 010002 HEIGHT                                                           M                         -1          -40  16  
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17  
+ 010004 PRESSURE                                                         PA                        -1            0  14  
+ 010050 STD.DEV. ALTITUDE                                                M                          2            0  16  
+ 010051 PRESSURE REDUCED TO MSL                                          PA                        -1            0  14  
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14  
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11  
+ 010061 3 HOUR PRESSURE CHANGE                                           PA                        -1         -500  10  
+ 010062 24 HOUR PRESSURE CHANGE                                          PA                        -1         -500  10  
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 010063          0            0   4  
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20  
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9  
+ 011002 WIND SPEED                                                       M/S                        1            0  12  
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13  
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13  
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10  
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13  
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9  
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12  
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9  
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12  
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17  
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17  
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17  
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 011031          0            0   4  
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16  
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16  
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11  
+ 011035 VERTICAL GUST ACCELERATION                                       M/S                        2        -8192  14  
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST                         M/S                        1            0  10  
+ 011041 MAXIMUM WIND SPEED (GUSTS)                                       M/S                        1            0  12  
+ 011042 MAXIMUM WIND SPEED (10 MIN MEAN WIND)                            M/S                        1            0  12  
+ 011050 STD.DEV. WIND SPEED                                              M/S                        1            0  12  
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12  
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12  
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 012001 TEMPERATURE/DRY BULB TEMPERATURE                                 K                          1            0  12  
+ 012002 WET BULB TEMPERATURE                                             K                          1            0  12  
+ 012003 DEW POINT TEMPERATURE                                            K                          1            0  12  
+ 012004 DRY BULB TEMPERATURE AT 2M                                       K                          1            0  12  
+ 012005 WET BULB TEMPERATURE AT 2M                                       K                          1            0  12  
+ 012006 DEW POINT TEMPERATURE AT 2M                                      K                          1            0  12  
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12  
+ 012011 MAXIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12  
+ 012012 MINIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12  
+ 012013 GROUND MINIMUM TEMPERATURE PAST 12 HOURS                         K                          1            0  12  
+ 012014 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12  
+ 012015 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12  
+ 012016 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12  
+ 012017 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12  
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12  
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12  
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12  
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12  
+ 013001 SPECIFIC HUMIDITY                                                G/G                        5            0  14  
+ 013002 MIXING RATIO                                                     G/G                        5            0  14  
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7  
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10  
+ 013005 VAPOUR DENSITY                                                   G/M**3                     0            0   7  
+ 013006 MIXING HEIGHT                                                    M                         -1          -40  16  
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       M                          4           -1  14  
+ 013012 DEPTH OF FRESH SNOW                                              M                          2            0  12  
+ 013013 TOTAL SNOW DEPTH                                                 M                          2            0  16  
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGE RATE)                 M/S                        7            0  12  
+ 013015 SNOWFALL (AVERAGE RATE)                                          M/S                        1            0  10  
+ 013016 PRECIPITABLE WATER                                               M                          3            0   7  
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  M                          4           -1  14  
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 M                          4           -1  14  
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 M                          4           -1  14  
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                M                          4           -1  14  
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                M                          4           -1  14  
+ 013031 EVAPOTRANSPIRATION                                               M                          3            0   7  
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   M                          4            0   8  
+ 013041 PASQUILL-GILLFORD STABILITY CATEGORY                             CODE TABLE 013041          0            0   4  
+ 013192 RELATIVE HUMUDITY AT 2 M                                         %                          0            0   8  
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8  
+ 014001 LONG WAVE RADIATION,INTEGRATED OVER 24 HOURS                     J/M**2                    -3        -2048  12  
+ 014002 LONG WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED             J/M**2                    -3        -2048  12  
+ 014003 SHORT WAVE RADIATION,INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12  
+ 014004 SHORT WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12  
+ 014011 NET LONG WAVE RADIATION,INTEGRATED OVER 24 HOURS                 J/M**2                    -3        -2048  12  
+ 014012 NET LONG WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -3        -2048  12  
+ 014013 NET SHORT WAVE RADIATION,INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12  
+ 014014 NET SHORT WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12  
+ 014015 NET RADIATION INTEGRATED OVER 24HOURS                            J/M**2                    -4       -16384  15  
+ 014016 NET RADIATION,INTEGRATED OVER PERIOD SPECIFIED                   J/M**2                    -4       -16384  15  
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION                                J/M**2                    -3        -2048  12  
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION                               J/M**2                    -3        -2048  12  
+ 014020 GLOBAL SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15  
+ 014021 GLOBAL RADIATION INTEGRATED OVERPERIOD SPECIFIED                 J/M**2                    -4            0  15  
+ 014022 DIFFUSE SOLAR RADIATION INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15  
+ 014023 DIFFUSE SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15  
+ 014024 DIRECT SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15  
+ 014025 DIRECT SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED          J/M**2                    -4            0  15  
+ 014031 TOTAL SUNSHINE                                                   MINUTES                    0            0   6  
+ 014032 TOTAL SUNSHINE                                                   HOURS                      0            0  10  
+ 015001 OZON                                                             DOBSON                     0            0  10  
+ 015202 INTEGRATED ELECTRON DENSITY                                      LOG/M**2                   3        13000  12  
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 019001          0            0   6  
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12  
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8  
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12  
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13  
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7  
+ 020003 PRESENT WEATHER                                                  CODE TABLE 020003          0            0   8  
+ 020004 PAST WEATHER (1)                                                 CODE TABLE 020004          0            0   4  
+ 020005 PAST WEATHER (2)                                                 CODE TABLE 020005          0            0   4  
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7  
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 020011          0            0   4  
+ 020012 CLOUD TYPE                                                       CODE TABLE 020012          0            0   6  
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11  
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11  
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14  
+ 020016 PRESSURE AT THE TOP OF CLOUD                                     PA                        -1            0  14  
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 020017          0            0   4  
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7  
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 020032          0            0   3  
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 020033          0            0   4  
+ 020034 SEA ICE CONCETRATION                                             CODE TABLE 020034          0            0   5  
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 020035          0            0   4  
+ 020036 ICE SITUATION                                                    CODE TABLE 020036          0            0   5  
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 020037          0            0   5  
+ 020038 BEARING OF THE ICE EDGE                                          DEGREE TRUE                1            0  12  
+ 020039 ICE DISTANCE                                                     M                         -1            0  13  
+ 020041 AIRFRAME ICING                                                   CODE TABLE 020041          0            0   4  
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7  
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7  
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7  
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12  
+ 020062 STATE OF GROUND (WITH OR WITHOUT SNOW)                           CODE TABLE 020062          0            0   5  
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 020063          0            0  10  
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE 020192          0            0  14  
+ 021001 HORIZONTAL REFLECTIVITY(ZH)                                      dB                         0          -64   7  
+ 021002 VERTICAL REFLECTIVITY(ZV)                                        dB                         0          -64   7  
+ 021003 DIFFERENTIAL REFLECTIVITY(ZDR)                                   dB                         1           -5   7  
+ 021005 LINEAR DEPOLARISATION RATIO(LDR)                                 dB                         0          -65   6  
+ 021006 CIRCULAR DEPOLARIZATION RATIO(CDR)                               dB                         0          -65   6  
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION(VX)                         M/S                        0         -128   8  
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION(VY)                         M/S                        0         -128   8  
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION(VZ)                         M/S                        0         -128   8  
+ 021014 DOPPLER MEAN VELOCITY RADIAL                                     M/S                        1        -4096  13  
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1        -4096   8  
+ 021021 ECHO TOPS                                                        M                         -3            0   4  
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT(VIL)                  KG/M**2                    0            0   7  
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12  
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8  
+ 021051 SIGNAL POWER ABOVE ONE MW                                        dB                         0         -256   8  
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13  
+ 021193 NOISE FIGURE                                                     %                          0            0   7  
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8  
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE 021196          0            0  12  
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE 021197          0            0  12  
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE 021198          0            0   8  
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE 021199          0            0   7  
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE 021200          0            0  15  
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE 021202          0            0   4  
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE 021203          0            0   9  
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10  
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE 021206          0            0   3  
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10  
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11  
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10  
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14  
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7  
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE 021214          0            0   3  
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4  
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9  
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9  
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9  
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0  12  
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6  
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6  
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6  
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10  
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10  
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10  
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13  
+ 022042 SEA TEMPERATURE                                                  K                          1            0  12  
+ 022043 SEA TEMPERATURE                                                  K                          2            0  15  
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14  
+ 022050 STANDARD DEVIATION SEA SURFACE TEMPERATURE                       K                          2            0   8  
+ 022061 STATE OF SEA                                                     CODE TABLE 022061          0            0   4  
+ 022062 SALINITY                                                         %.                         3            0  14  
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14  
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10  
+ 023001 ACCIDENT EARLEY NOTIFICATION-ARTICLE APPLICABLE                  CODE TABLE 023001          0            0   3  
+ 023002 ACTIVITY OR FACILITY INVOLVED ININCIDENT                         CODE TABLE 023002          0            0   5  
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 023003          0            0   3  
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 023004          0            0   3  
+ 023005 COUSE OF INCIDENT                                                CODE TABLE 023005          0            0   2  
+ 023006 INCIDENT SITUATION                                               CODE TABLE 023006          0            0   3  
+ 023007 CHARACTERISTIC OF RELEASE                                        CODE TABLE 023007          0            0   3  
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 023008          0            0   2  
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 023009          0            0   2  
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEATH EFFECT           CODE TABLE 023016          0            0   2  
+ 023017 FLOW DISCHARGE OF MAJOR RECEPIENT                                M**3/S                     6            0  20  
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 023018          0            0   3  
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17  
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17  
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24  
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12  
+ 023024 MAIN TRANSPORT SPEED WATER                                       M/S                        2            0  13  
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13  
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9  
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9  
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9  
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 023031          0            0   2  
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 023032          0            0   2  
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28  
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28  
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 024003          0            0   5  
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16  
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9  
+ 024011 DOSE                                                             mSv                        2            0  32  
+ 024012 TRAJECTORY DOSE IN AIR ALONG THEMAIN TRANSPORT PATH(DEFINED LOCA mSv                        2            0  32  
+ 024013 GAMMA DOSE IN AIR ALONG THE MAINTRANSPORT PATH(DEFINED LOCATION  mSv                        2            0  32  
+ 024021 AIR CONCENTRATION(OF NAMED ISOTOP TYPE INCLUDING GROSS BETA      Bq/M**3                    2            0  32  
+ 024022 CONCENTRATION IN PRECIPITATION ( OF NAMED ISOTOP TYPE)           Bq/L                       2            0  32  
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6  
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4  
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8  
+ 025004 ECHO PROCESSING                                                  CODE TABLE 025004          0            1   2  
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 025005          0            0   2  
+ 025006 Z TO R CONVERSION                                                CODE TABLE 025006          0            0   3  
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12  
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9  
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 025009          0            0   4  
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 025010          0            0   4  
+ 025011 GROUND ACCULTATION CORRECTION(SCREENING)                         CODE TABLE 025011          0            0   2  
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 025012          0            0   2  
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 025013          0            0   2  
+ 025014 AZIMUTH CLUTTER CUT-OFF                                          NUMERIC    025014          0            0  12
+ 025015 RADOM ATTENUATION CORRECTION                                     FLAG TABLE 025015          0            0   2
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6  
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 025017          0            0   2  
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6  
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7  
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 025020          0            0   2  
+ 025021 WIND COMPUTATION EHANCEMENT                                      FLAG TABLE 025021          0            0   8  
+ 025030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8  
+ 027001 LATITUDE(HIGH ACCURACY)                                          DEGREE                     5     -9000000  25  
+ 027002 LATITUDE(COARSE ACCURACY)                                        DEGREE                     2        -9000  15  
+ 027003 ALTERNATE LATITUDE                                               DEGREE                     2        -9000  15  
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16  
+ 028001 LONGITUDE(HIGH ACCURACY)                                         DEGREE                     5    -18000000  26  
+ 028002 LONGITUDE(COARSE ACCURACY)                                       DEGREE                     2       -18000  16  
+ 028003 ALTERNATE LONGITUDE                                              DEGREE                     2       -18000  16  
+ 029001 PROJECTION TYPE                                                  CODE TABLE 029001          0            0   3  
+ 029002 COORDINATE GRID TYPE                                             CODE TABLE 029002          0            0   3  
+ 030001 PIXEL VALUE(4 BITS)                                              NUMERIC                    0            0   4  
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12  
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12  
+ 030031 PICTURE TYPE                                                     CODE TABLE 030031          0            0   4  
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 030032          0            0  16  
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8  
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16  
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8  
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16  
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 031021          0            0   6  
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 031031          0            0   1  
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1  
+ 033001 QUALITY INFORMATION AS A 1 BIT FLAG                              FLAG TABLE 033001          0            0   1  
+ 033002 QUALITY INFORMATION AS A 2 BIT F                                 FLAG TABLE 033002          0            0   2  
+ 033003 QUALITY INFORMATION AS A 3 BIT F                                 FLAG TABLE 033003          0            0   3  
+ 033004 QUALITY INFORMATION AS A 4 BIT F                                 FLAG TABLE 033004          0            0   4  
+ 033007 % CONFIDENCE                                                     %                          0            0   7  
+ 033191 ECMWF WAM QC INDICATOR                                           CODE TABLE 033191          0            0   2  
+ 033193 DATA QUALITY 3 BIT CODE                                          CODE TABLE 033193          0            0   3  
+ 033194 DATA QUALITY 2 BIT CODE                                          CODE TABLE 033194          0            0   2  
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE 033200          0            0  31  
+ 033201 ANALYSIS REPORT STATUS FLAGS                                     FLAG TABLE 033201          0            0  13  
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE 033202          0            0  31  
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE 033203          0            0  11  
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE 033204          0            0  21  
+ 033210 INCREMENTAL VARIATIONAL ANALYSISUPDATE NUMBER                    NUMERIC                    0            0   7  
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10  
+ 033212 1D VAR ITERRATION NUMBER                                         NUMERIC                    0            0  10  
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11  
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE 033214          0            0  11  
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE 033231          0            0   6  
+ 062190 STATISTICS APPLICATION                                           CODE TABLE 062190          0            0   8  
+ 062191 TYPE OF STATISTICS                                               CODE TABLE 062191          0            0   8  
+ 063190 APPLICATION DERIVING SUBSTITUTE OR ALTERNATIVE VALUE             CODE TABLE 063190          0            0   8  
+ 063191 Q/C APPLICATION                                                  CODE TABLE 063191          0            0   8  
+ 063192 % CONFIDENCE                                                     %                          0            0   7  
diff --git a/bufrtables/B0000000000098002001.TXT b/bufrtables/B0000000000098002001.TXT
new file mode 100755
index 0000000..7e74823
--- /dev/null
+++ b/bufrtables/B0000000000098002001.TXT
@@ -0,0 +1,649 @@
+ 000001 TABLE A: ENTRY                                                   CCITTIA5                   0            0  24  
+ 000002 TABLE A: DATA CATEGORY DESCRIPTION, LINE 1                       CCITTIA5                   0            0 256  
+ 000003 TABLE A: DATA CATEGORY DESCRIPTION, LINE 2                       CCITTIA5                   0            0 256  
+ 000005 BUFR EDITION NUMBER                                              CCITTIA5                   0            0  24  
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8  
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16  
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24  
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256  
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256  
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192  
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8  
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24  
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8  
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80  
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24  
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48  
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7  
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10  
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              NUMERIC                    0            0   3  
+ 001004 WMO REGION SUB-AREA                                              NUMERIC                    0            0   3  
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17  
+ 001006 AIRCRAFT IDENTIFIER                                              CCITTIA5                   0            0  64  
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE   1007          0            0  10  
+ 001008 AIRCRAFT REGISTRATION NUMBER                                     CCITTIA5                   0            0  64  
+ 001011 SHIP'S CALL SIGN                                                 CCITTIA5                   0            0  72  
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM                 DEGREE TRUE                0            0   9  
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM                     M/S                        0            0  10  
+ 001014 PLATFORM DRIFT SPEED(HIGH PRECISION                              M/S                        2            0  10  
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14  
+ 001022 VULCANO NAME                                                     CCITTIA5                   0            0 160  
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24  
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64  
+ 001031 GENERATING CENTRE                                                CODE TABLE   1031          0            0  16  
+ 001032 GENERATING APPLICATION                                           CODE TABLE   1032          0            0   8  
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64  
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE   1192          0            0   8  
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE   1193          0            0   4  
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72  
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72  
+ 001196 CONSTANT LEVEL BALLOON IDENTIFIER                                CCITTIA5                   0            0  72  
+ 001197 RTP - PLATFORM TYPE                                              CODE TABLE   1197          0            0  10  
+ 001198 ITP - DECK ID                                                    CODE TABLE   1198          0            0  10  
+ 001199 DUP - DUPLICATE STATUS                                           CODE TABLE   1199          0            0   4  
+ 001201 GENERATING APPLICATION                                           CODE TABLE   1201          0            0   8  
+ 001205 SATELLITE IDENTIFIER                                             CODE TABLE   1205          0            0  10  
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31  
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31  
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31  
+ 002001 TYPE OF STATION                                                  CODE TABLE   2001          0            0   2  
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE   2002          0            0   4  
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE   2003          0            0   4  
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUEMENT OR TYPE OF CR CODE TABLE   2004          0            0   4  
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7  
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE   2011          0            0   8  
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE   2012          0            0   4  
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE   2013          0            0   4  
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM                              CODE TABLE   2014          0            0   7  
+ 002015 RADIOSONDE COMPLETNESS                                           CODE TABLE   2015          0            0   4  
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE   2021          0            0   9  
+ 002022 SATELLITE DATA PROCESSING TECHNIQUE USED                         FLAG TABLE   2022          0            0   8  
+ 002023 CLOUD MOTION COMPUTATIONAL METHOD                                CODE TABLE   2023          0            0   4  
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE   2024          0            0   4  
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE   2025          0            0  25  
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12  
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12  
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE   2030          0            0   3  
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE   2031          0            0   5  
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE   2032          0            0   2  
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE   2033          0            0   3  
+ 002034 DROGUE TYPE                                                      CODE TABLE   2034          0            0   5  
+ 002035 CABLE LENGTH                                                     M                          0            0   9  
+ 002036 BUOY TYPE                                                        CODE TABLE   2036          0            0   2  
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE   2041          0            0   6  
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE   2061          0            0   3  
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE   2062          0            0   4  
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16  
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 002064          0            0   2
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE   2070          0            0   4  
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE   2101          0            0   4  
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8  
+ 002103 RADOME                                                           FLAG TABLE   2103          0            0   2  
+ 002104 ANTENNA POLARISATION                                             CODE TABLE   2104          0            0   4  
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6  
+ 002106 3-dB BEAMWIDTH                                                   DEGREE                     1            0   6  
+ 002107 SIDELOBE SUPPRESION                                              dB                         0            0   6  
+ 002108 CROSSPOL DISCRIMINATION(ON AXIS)                                 dB                         0            0   6  
+ 002109 ANTENNA SPEED(AZIMUTH)                                           DEGREE/S                   2            0  12  
+ 002110 ANTENNA SPEED(ELEVATION)                                         DEGREE/S                   2            0  12  
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10  
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12  
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4  
+ 002114 ANTENNA EFFECTIVE SRFACE AREA                                    M**2                       0            0  15  
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7  
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8  
+ 002123 PEAK POWER                                                       W                         -4            0   7  
+ 002124 AVERAGE POWER                                                    W                         -1            0   7  
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8  
+ 002126 PULSE WIDTH                                                      S                          7            0   6  
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7  
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6  
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5  
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7  
+ 002131 SENSITIVITY TIME CONTROL                                         FLAG TABLE   2131          0            0   2  
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6  
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6  
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16  
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15  
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9  
+ 002193 1D VAR SATELLITE CHANNEL(S) USED                                 FLAG TABLE   2193          0            0  28  
+ 002194 CONSTANT LEVEL BALLOON TYPE                                      CODE TABLE   2194          0            0   4  
+ 002195 TYPE OF SATELLITE INSTRUMENTATION                                CODE TABLE   2195          0            0   4  
+ 002196 SATELLITE CLASSIFICATION                                         CODE TABLE   2196          0            0   9  
+ 002197 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26  
+ 002198 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26  
+ 002199 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE   2199          0            0   4  
+ 002201 SIMULATED SATELLITE INSTRUMENT                                   FLAG TABLE   2201          0            0   4  
+ 002202 SIMULATED DATA PROCESSING TECHNIQUE USED                         FLAG TABLE   2202          0            0   4  
+ 002220 DATA PRODUCER                                                    CODE TABLE   2220          0            0   9  
+ 002221 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18
+ 002222 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18
+ 002223 TOVS/ATOVS/AVHRR CHANNEL NUMBER                                  CODE TABLE   2223          0            0   6
+ 002231 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE   2231          0            0   4
+ 002232 TRACER CORRELATION METHOD                                        CODE TABLE   2232          0            0   3
+ 002251 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE   2251          0            0   4
+ 002252 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE   2252          0            0  31  
+ 002253 HUMIDITY COMPUTATIONAL METHOD                                    CODE TABLE   2253          0            0   8  
+ 002254 RADIANCE TYPE                                                    CODE TABLE   2254          0            0   4  
+ 004001 YEAR                                                             YEAR                       0            0  12  
+ 004002 MONTH                                                            MONTH                      0            0   4  
+ 004003 DAY                                                              DAY                        0            0   6  
+ 004004 HOUR                                                             HOUR                       0            0   5  
+ 004005 MINUTE                                                           MINUTE                     0            0   6  
+ 004006 SECOND                                                           SECOND                     0            0   6  
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11  
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11  
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11  
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11  
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12  
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13  
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11  
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11  
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11  
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -1024  11  
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12  
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13  
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9  
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25  
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15  
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25  
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15  
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16  
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16  
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12  
+ 005033 PIXEL SIZE ON HORIZONTAL-1                                       M                         -1            0  16  
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24  
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8  
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6  
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8  
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5  
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5  
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10  
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31  
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16  
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26  
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16  
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26  
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16  
+ 006021 DISTANCE                                                         M                         -1            0  13  
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12  
+ 006033 PIXEL SIZE ON HORIZONTAL-2                                       M                         -1            0  16  
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6  
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7  
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31  
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13  
+ 007001 HEIGHT OF STATION                                                M                          0         -400  15  
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16  
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17  
+ 007004 PRESSURE                                                         PA                        -1            0  14  
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12  
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15  
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16
+ 007021 ELEVATION                                                        DEGREE                     2        -9000  15  
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15  
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14  
+ 007062 DEPTH BELOW SEA SURFACE                                          M                          1            0  17  
+ 007190 HEIGHT INCREMENT                                                 M                          1        -1024  12  
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31  
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE   8001          0            0   7  
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE   8002          0            0   6  
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE   8003          0            0   6  
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE   8004          0            0   3  
+ 008005 SURFACE SYNOPTIC FEATURE SIGNIFICANCE                            CODE TABLE   8005          0            0   4  
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE   8007          0            0   4  
+ 008011 HORIZONTAL SIGNIFICANCE                                          CODE TABLE   8011          0            0   6  
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE   8012          0            0   2  
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE   8021          0            0   5  
+ 008022 TOTAL NUMBER(WITH RESPECT TO ACCUMULATION OR AVERAGE)            NUMERIC                    0            0  16  
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE   8023          0            0   6  
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE   8024          0            0   6  
+ 008193 TIME QUALIFIER                                                   CODE TABLE   8193          0            0   0 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE   8070          0            0   4
+ 008195 DATA TYPE                                                        CODE TABLE   8195          0            0   7
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8  
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE   8222          0            0   4  
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE   8223          0            0   7  
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15  
+ 010002 HEIGHT                                                           M                         -1          -40  16  
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17  
+ 010004 PRESSURE                                                         PA                        -1            0  14  
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16  
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14  
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14  
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11  
+ 010061 3 HOUR PRESSURE CHANGE                                           PA                        -1         -500  10  
+ 010062 24 HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11  
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE  10063          0            0   4  
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20  
+ 010196 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9  
+ 011002 WIND SPEED                                                       M/S                        1            0  12  
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13  
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13  
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10  
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13  
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9  
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12  
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9  
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12  
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17  
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17  
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17  
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE  11031          0            0   4  
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16  
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16  
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11  
+ 011035 VERTICAL GUST ACCELERATION                                       M/S                        2        -8192  14  
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST                         M/S                        1            0  10  
+ 011037 TURBULENT INDEX                                                  CODE TABLE 011037          0            0   6
+ 011038 TIME OF OCCURANCE OF PEAK EDDY DISSIPATION RATE                  CODE TABLE 011038          0            0   5
+ 011039 EXTENDED TIME OF OCCURENCE OF PEAK EDDY DISSIPATION RATE         CODE TABLE 011039          0            0   6
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12
+ 011041 MAXIMUM WIND SPEED (GUSTS)                                       M/S                        1            0  12  
+ 011042 MAXIMUM WIND SPEED (10 MIN MEAN WIND)                            M/S                        1            0  12  
+ 011049 STANDARD DEVIATION WIND DIRECTION                                DEGREE TRUE                0            0   9  
+ 011050 STANDARD DEVIATION WIND SPEED                                    M/S                        1            0  12  
+ 011051 STANDARD DEVIATION W COMPONENT                                   M/S                        1            0   8  
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12  
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12  
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011201 HORIZONTAL LINE OF SIGHT COMPONENT                               M/S                        1        -4096  13  
+ 011210 1D VAR WIND SPEED RETREIVED ERRO(S)                              M/S                        2            0  12  
+ 011211 WIND SPEED INDEPENDENT ESTIMATE OF ERROR(S)                      M/S                        2            0  12  
+ 011220 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  12  
+ 011221 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15  
+ 012001 TEMPERATURE/DRY BULB TEMPERATURE                                 K                          1            0  12  
+ 012002 WET BULB TEMPERATURE                                             K                          1            0  12  
+ 012003 DEW POINT TEMPERATURE                                            K                          1            0  12  
+ 012004 DRY BULB TEMPERATURE AT 2M                                       K                          1            0  12  
+ 012005 WET BULB TEMPERATURE AT 2M                                       K                          1            0  12  
+ 012006 DEW POINT TEMPERATURE AT 2M                                      K                          1            0  12  
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12  
+ 012011 MAXIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12  
+ 012012 MINIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12  
+ 012013 GROUND MINIMUM TEMPERATURE PAST 12 HOURS                         K                          1            0  12  
+ 012014 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12  
+ 012015 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12  
+ 012016 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12  
+ 012017 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12  
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12  
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12  
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12  
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12  
+ 012193 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12  
+ 012194 RADIANCE                                                         W/M**2*STER*M**(-1)        6            0  31  
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14  
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14  
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7  
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10  
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7  
+ 013006 MIXING HEIGHT                                                    M                         -1          -40  16  
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14  
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12  
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16  
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGE RATE)                 KG/(M**2)S                 4            0  12  
+ 013015 SNOWFALL (AVERAGE RATE)                                          M/S                        7            0  12  
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7  
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14  
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14  
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14  
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14  
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14  
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7  
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8  
+ 013041 PASQUILL-GILLFORD STABILITY CATEGORY                             CODE TABLE  13041          0            0   4  
+ 013192 RELATIVE HUMIDITY AT 2 M                                         %                          0            0   8  
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8  
+ 013194 TOTAL COLUMN WATER                                               KG/M**2                    2            0  11  
+ 013195 RAIN RATE                                                        KG/M**2HOUR                0            0   5  
+ 013196 ANTECEDENT PRECIPITATION INDEX                                   KG/M**2                    0            0   7  
+ 013197 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    1            0  10  
+ 013198 RAIN FLAG                                                        CODE TABLE  13198          0            0   3  
+ 013199 SPECIFIC HUMIDITY AT 2 M                                         KG/KG                      5            0  14  
+ 013201 CLOUD LIQUID WATER                                               KG/KG                      7            0  14  
+ 013202 TYPE OF SURFACE                                                  CODE TABLE  13202          0            0   8  
+ 013203 1D VAR ESTIMATE OF RAIN RATE                                     KG/M**2*HOUR               2            0  12  
+ 013204 SSMI INDEPENDENT ESTIMATE OF RAIN RATE                           KG/M**2*HOUR               2            0  12  
+ 013205 CLOUD LIQUID WATER PATH                                          KG/M**2                    4            0  14  
+ 013210 1D VAR CLOUD LIQUID WATER PATH RETRIEVED ERROR(S)                KG/M**2                    4            0  14  
+ 013211 TOTAL PRECIPITABLE WATER INDIPENDENT ESTIMATE OF ERROR(S)        KG/M**2                    2            0  11  
+ 013212 CLOUD LIQUID WATER PATH INDIPENDENT ESTIMATE OF ERROR(S)         KG/M**2                    4            0  14  
+ 014001 LONG-WAVE RADIATION,INTEGRATED OVER 24 HOURS                     J/M**2                    -3        -2048  12  
+ 014002 LONG-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED             J/M**2                    -3        -2048  12  
+ 014003 SHORT-WAVE RADIATION,INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12  
+ 014004 SHORT-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12  
+ 014011 NET LONG-WAVE RADIATION,INTEGRATED OVER 24 HOURS                 J/M**2                    -3        -2048  12  
+ 014012 NET LONG-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -3        -2048  12  
+ 014013 NET SHORT-WAVE RADIATION,INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12  
+ 014014 NET SHORT-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12  
+ 014015 NET RADIATION INTEGRATED OVER 24HOURS                            J/M**2                    -4       -16384  15  
+ 014016 NET RADIATION,INTEGRATED OVER PERIOD SPECIFIED                   J/M**2                    -4       -16384  15  
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION                                J/M**2                    -3        -2048  12  
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION                               J/M**2                    -3        -2048  12  
+ 014020 GLOBAL SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15  
+ 014021 GLOBAL RADIATION INTEGRATED OVERPERIOD SPECIFIED                 J/M**2                    -4            0  15  
+ 014022 DIFFUSE SOLAR RADIATION INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15  
+ 014023 DIFFUSE SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15  
+ 014024 DIRECT SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15  
+ 014025 DIRECT SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED          J/M**2                    -4            0  15  
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11  
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10  
+ 015001 OZON                                                             DOBSON                     0            0  10  
+ 015202 INTEGRATED ELECTRON DENSITY                                      1/M**2                     3        13000  12  
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE  19001          0            0   6  
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12  
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8  
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12  
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9  
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14  
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12  
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE  19008          0            0   3  
+ 019009 EFFECTIVE RADIUS WITH RESPECT TOWIND SPEEDS ABOVE TRESHOLD       M                         -3            0  12  
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13  
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7  
+ 020003 PRESENT WEATHER                                                  CODE TABLE  20003          0            0   9  
+ 020004 PAST WEATHER (1)                                                 CODE TABLE  20004          0            0   5  
+ 020005 PAST WEATHER (2)                                                 CODE TABLE  20005          0            0   5  
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7  
+ 020011 CLOUD AMOUNT                                                     CODE TABLE  20011          0            0   4  
+ 020012 CLOUD TYPE                                                       CODE TABLE  20012          0            0   6  
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11  
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11  
+ 020016 PRESSURE AT THE TOP OF CLOUD                                     PA                        -1            0  14  
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE  20017          0            0   4  
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7  
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE  20032          0            0   3  
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE  20033          0            0   4  
+ 020034 SEA ICE CONCETRATION                                             CODE TABLE  20034          0            0   5  
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE  20035          0            0   4  
+ 020036 ICE SITUATION                                                    CODE TABLE  20036          0            0   5  
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE  20037          0            0   5  
+ 020038 BEARING OF THE ICE EDGE                                          DEGREE TRUE                0            0  12  
+ 020039 ICE DISTANCE                                                     M                         -1            0  13  
+ 020041 AIRFRAME ICING                                                   CODE TABLE  20041          0            0   4  
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7  
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7  
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7  
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12  
+ 020062 STATE OF GROUND (WITH OR WITHOUT SNOW)                           CODE TABLE  20062          0            0   5  
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE  20063          0            0  10  
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE  20192          0            0  14  
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7  
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7  
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14
+ 020250 CALCULATED SURFACE TYPE                                          CODE TABLE  20250          0            0   5  
+ 020251 ICE AGE                                                          CODE TABLE  20251          0            0   3  
+ 020252 ICE EDGE                                                         CODE TABLE  20252          0            0   3  
+ 020253 SURFACE TYPE                                                     CODE TABLE  20253          0            0   3  
+ 020254 ICE CONCENTRATION                                                %                          0            0   7  
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7  
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7  
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7  
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6  
+ 021006 CIRCULAR DEPOLARIZATION RATIO                                    dB                         0          -65   6  
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8  
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8  
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION(VZ)                         M/S                        0         -128   8  
+ 021014 DOPPLER MEAN VELOCITY RADIAL                                     M/S                        1        -4096  13  
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1        -4096   8  
+ 021021 ECHO TOPS                                                        M                         -3            0   4  
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7  
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12  
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8  
+ 021051 SIGNAL POWER ABOVE 1 mW                                          dB                         0         -256   8  
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13  
+ 021193 NOISE FIGURE                                                     %                          0            0   7  
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8  
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE  21196          0            0  12  
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE  21197          0            0  12  
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE  21198          0            0   8  
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE  21199          0            0   7  
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE  21200          0            0  15  
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE  21202          0            0   4  
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE  21203          0            0   9  
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10  
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE  21206          0            0   3  
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10  
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11  
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10  
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14  
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7  
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE  21214          0            0   3  
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4  
+ 021222 DOPPLER SPECTRUM 0 TH MOMENT (AMPLITUDE)                         dB                         0            0   7  
+ 021225 PRESCAT PRODUCT CONFIDENCE                                       FLAG TABLE  21225          0            0   6  
+ 021226 BACKSCATER DISTANCE                                              NUMERIC                    1        -4096  13  
+ 021230 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3  
+ 021231 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3  
+ 021232 TOTAL NMBER OF SIGMA-0 MEASUREMENTS                              NUMERIC                    0            0   5  
+ 021233 NUMBER OF SIGMA-0 USABLE FOR WIND                                NUMERIC                    0            0   5  
+ 021234 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    1       -10000  14  
+ 021235 WIND VECTOR CELL QUALITY FLAG                                    FLAG TABLE  21235          0            0   3  
+ 021236 NUMBER OF FORE-BEAM SIGMA-0                                      NUMERIC                    1            0   6  
+ 021237 NUMBER OF MID-BEAM V-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021238 NUMBER OF MID-BEAM H-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021239 NUMBER OF AFT-BEAM SIGMA-0                                       NUMERIC                    1            0   6  
+ 021240 NORMALIZED RADAR CROSS SECTION                                   NUMERIC                    2       -10000  14  
+ 021241 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    5            0  14  
+ 021242 Kp VARIANCE COEFFICIENT (BETHA)                                  NUMERIC                    6            0  16  
+ 021243 Kp VARIANCE COEFFICIENT (GAMMA)                                  NUMERIC                    6            0  16  
+ 021244 SIGMA-0 QUALITY FLAG                                             FLAG TABLE  21244          0            0  15  
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9  
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9  
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9  
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0  12  
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6  
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6  
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6  
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10  
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10  
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10  
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10  
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13  
+ 022042 SEA TEMPERATURE                                                  K                          1            0  12  
+ 022043 SEA TEMPERATURE                                                  K                          2            0  15  
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14  
+ 022050 STANDARD DEVIATION SEA SURFACE TEMPERATURE                       K                          2            0   8  
+ 022061 STATE OF SEA                                                     CODE TABLE  22061          0            0   4  
+ 022062 SALINITY                                                         %.                         3            0  14  
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14  
+ 022192 SPECTRAL PERIOD                                                  S                          2            0  13  
+ 022193 MEAN WAVENUMBER                                                  1/M                        5            0  15  
+ 022194 PEAK WAVENUMBER                                                  1/M                        5            0  15  
+ 022195 MEAN WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022196 PEAK WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022197 DIRECTION SPREAD                                                 DEGREE                     1            0  13  
+ 022198 VARIANCE SPECTRAL DENSITY                                        M**2*S/RAD                 4            0  18  
+ 022199 CORRELATION COEFF OF SIMULATED FG AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022200 CORRELATION COEFF OF SIMULATED BF AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022201 CORRELATION COEFF OF OCEAN WAVE FG AND EXTRACTED WAVE SPECTRUM   NUMERIC                    4       -10000  15  
+ 022202 ERROR BETWEEN FIRST GUESS AND OBSERVED SAR                       NUMERIC                    5            0  21  
+ 022203 ERROR BETWEEN SIMULATED AND OBSERVED SAR                         NUMERIC                    5            0  21  
+ 022204 MEAN PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022205 SPECTRAL DENSITY                                                 M**2*S/RAD                 4            0  25  
+ 022206 PEAK PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022207 MEAN WAVE PERIOD                                                 S                          1            0  10  
+ 022208 PEAK PERIOD OF 1D SPECTRA                                        S                          1            0  10  
+ 022209 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  13  
+ 022210 MEAN SQUARE SLOPE OF WAVES                                       NUMERIC                    4       -10000  14  
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10  
+ 023001 ACCIDENT EARLY NOTIFICATION-ARTICLE APPLICABLE                   CODE TABLE  23001          0            0   3  
+ 023002 ACTIVITY OR FACILITY INVOLVED ININCIDENT                         CODE TABLE  23002          0            0   5  
+ 023003 TYPE OF RELEASE                                                  CODE TABLE  23003          0            0   3  
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE  23004          0            0   3  
+ 023005 COUSE OF INCIDENT                                                CODE TABLE  23005          0            0   2  
+ 023006 INCIDENT SITUATION                                               CODE TABLE  23006          0            0   3  
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE  23007          0            0   3  
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE  23008          0            0   2  
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE  23009          0            0   2  
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE  23016          0            0   2  
+ 023017 FLOW DISCHARGE OF MAJOR RECEPIENT                                M**3/S                     6            0  20  
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE  23018          0            0   3  
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17  
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17  
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24  
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12  
+ 023024 MAIN TRANSPORT SPEED WATER                                       M/S                        2            0  13  
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13  
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9  
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9  
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9  
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE  23031          0            0   2  
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE  23032          0            0   2  
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28  
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28  
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE  24003          0            0   5  
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16  
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9  
+ 024011 DOSE                                                             mSv                        2            0  32  
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME)             mSv                        2            0  32  
+ 024013 GAMMA DOSE IN AIR ALONG THE MAINTRANSPORT PATH(DEFINED LOCATION  mSv                        2            0  32  
+ 024021 AIR CONCENTRATION(OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA     Bq/M**3                    2            0  32  
+ 024022 CONCENTRATION IN PRECIPITATION ( OF NAMED ISOTOPE TYPE)          Bq/L                       2            0  32  
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6  
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4  
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8  
+ 025004 ECHO PROCESSING                                                  CODE TABLE  25004          0            0   2  
+ 025005 ECHO INTEGRATION                                                 CODE TABLE  25005          0            0   2  
+ 025006 Z TO R CONVERSION                                                CODE TABLE  25006          0            0   3  
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12  
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9  
+ 025009 CALIBRATION METHOD                                               FLAG TABLE  25009          0            0   4  
+ 025010 CLUTTER TREATMENT                                                CODE TABLE  25010          0            0   4  
+ 025011 GROUND ACCULTATION CORRECTION(SCREENING)                         CODE TABLE  25011          0            0   2  
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE  25012          0            0   2  
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE  25013          0            0   2  
+ 025014 AZIMUTH CLUTTER CUT-OFF                                          NUMERIC                    0            0  12
+ 025015 RADOM ATTENUATION CORRECTION                                     FLAG TABLE  25015          0            0   2  
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6  
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE  25017          0            0   2  
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6  
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7  
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE  25020          0            0   2  
+ 025021 WIND COMPUTATION EHANCEMENT                                      FLAG TABLE  25021          0            0   8  
+ 025030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8  
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE  25032          0            0   2  
+ 025033 NOAA WIND PROFILER SUBMODE INFORMATION                           CODE TABLE  25033          0            0   2  
+ 025034 NOAA WIND PROFILER QUALITY CONTROL TEST RESULTS                  FLAG TABLE  25034          0            0   4  
+ 025193 ATTENUATION CORRECTION ON SIGMA0                                 dB                         3            0  14  
+ 025194 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4
+ 025197 ANTENNA CORRECTIONS VERSION NUMBER                               NUMERIC                    0            0   5
+ 025198 LOG (TEMP-RAD CENTRAL WAVE NUMBER)                               1/M                        8            0  30
+ 025199 BANDWIDTH CORRECTION COEFFICIENT 1                               NUMERIC                    4       -10000  15
+ 025200 BANDWIDTH CORRECTION COEFFICIENT 2                               NUMERIC                    5            0  17
+ 025201 ALBEDO-RAD SOLAR FILTERED IRRADIANCE                             NUMERIC                    4            0  24
+ 025202 ALBEDO-RAD EQUIVALENT FILTER WIDTH                               NUMERIC                   10            0  14
+ 025203 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE  25081          0            0  31
+ 025204 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE  25082          0            0  31
+ 025205 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE  25083          0            0  31
+ 025206 FOV QUALITY FLAGS FOR ATOVS                                      FLAG TABLE  25084          0            0  31
+ 026193 YEAR                                                             YEAR                       0            0  12
+ 026194 MONTH                                                            MONTH                      0            0   4
+ 026195 DAY                                                              DAY                        0            0   6  
+ 026196 HOUR                                                             HOUR                       0            0   5  
+ 026197 MINUTE                                                           MINUTE                     0            0   6  
+ 026198 SECOND                                                           SECOND                     0            0   6  
+ 026200 LOCATION WITHIN ASSIMILATION WINDOW IN TIME                      NUMERIC                    6            0  20  
+ 027001 LATITUDE(HIGH ACCURACY)                                          DEGREE                     5     -9000000  25  
+ 027002 LATITUDE(COARSE ACCURACY)                                        DEGREE                     2        -9000  15  
+ 027003 ALTERNATE LATITUDE                                               DEGREE                     2        -9000  15  
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16  
+ 027193 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16
+ 028001 LONGITUDE(HIGH ACCURACY)                                         DEGREE                     5    -18000000  26  
+ 028002 LONGITUDE(COARSE ACCURACY)                                       DEGREE                     2       -18000  16  
+ 028003 ALTERNATE LONGITUDE                                              DEGREE                     2       -18000  16  
+ 029001 PROJECTION TYPE                                                  CODE TABLE  29001          0            0   3  
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE  29002          0            0   2  
+ 030001 PIXEL VALUE(4 BITS)                                              NUMERIC                    0            0   4  
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12  
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12  
+ 030031 PICTURE TYPE                                                     CODE TABLE  30031          0            0   4  
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE  30032          0            0  16  
+ 030193 POSITION NUMBER ALONG SCAN                                       NUMERIC                    0            0   8  
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8  
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16  
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8  
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16  
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE  31021          0            0   6  
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE  31031          0            0   1  
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1  
+ 033002 QUALITY INFORMATION TABLE                                        CODE TABLE  33002          0            0   2  
+ 033003 QUALITY INFORMATION TABLE                                        CODE TABLE  33003          0            0   3  
+ 033007 % CONFIDENCE                                                     %                          0            0   7  
+ 033191 ECMWF WAM QC INDICATOR                                           CODE TABLE 033191          0            0   2
+ 033193 DATA QUALITY 3 BIT CODE                                          CODE TABLE  33193          0            0   3  
+ 033194 DATA QUALITY 2 BIT CODE                                          CODE TABLE  33194          0            0   2  
+ 033195 ECMWF SAR QC INDICATOR                                           CODE TABLE  33195          0            0   5  
+ 033196 ECMWF WAM QC INDICATOR                                           CODE TABLE  33196          0            0   2  
+ 033197 ECMWF SAR INVERSION QC INDICATOR                                 CODE TABLE  33197          0            0   3  
+ 033198 MINIMUM COST                                                     NUMERIC                    4            0  14  
+ 033199 1D VAR TOTAL PRECIPITABLE WATER RETRIEVED ERROR(S)               KG/M**2                    2            0  11  
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE  33200          0            0  31  
+ 033201 ANALYSIS REPORT STATUS EVENT                                     FLAG TABLE  33201          0            0  13  
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE  33202          0            0  31  
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE  33203          0            0  11  
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE  33204          0            0  21  
+ 033205 VARIATIONAL ANALYSIS BLACK LIST FLAG                             CODE TABLE  33205          0            0   4  
+ 033206 VARIATIONAL ANALYSIS QUALITY CONTROL FLAG                        CODE TABLE  33206          0            0   4  
+ 033207 VARIATIONAL ANALYSIS DEPARTURE FLAG                              CODE TABLE  33207          0            0   4  
+ 033208 VARIATIONAL ANALYSIS FIRST QUESSCHECK FLAG                       CODE TABLE  33208          0            0   4  
+ 033209 VARIATIONAL ANALYSIS FINAL FLAG                                  CODE TABLE  33209          0            0   4  
+ 033210 INCREMENTAL VARIATIONAL ANALYSISUPDATE NUMBER                    NUMERIC                    0            0   7  
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10  
+ 033212 1D VAR ITERRATION NUMBER                                         NUMERIC                    0            0  10  
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11  
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE  33214          0            0  11  
+ 033215 DIRECTIONAL SKILL                                                NUMERIC                    1        -4096  13  
+ 033216 1D VAR SURFACE TYPE QUALITY CONTROL                              CODE TABLE  33216          0            0   3  
+ 033217 1D VAR FAILURE INDICATOR                                         CODE TABLE  33217          0            0   2  
+ 033218 1D VAR ESTIMATE OF SCATTERING                                    NUMERIC                    2            0  12  
+ 033219 SSMI INDIPENDENT SCATTERING INDEX                                NUMERIC                    2       -50000  16  
+ 033220 VARIATIONAL ANALYSIS REPORT EVENTS (1)                           FLAG TABLE  33220          0            0  31  
+ 033221 VARIATIONAL ANALYSIS SYNOP EVENTS (2)                            FLAG TABLE  33221          0            0  31  
+ 033222 VARIATIONAL ANALYSIS AIREP EVENTS (2)                            FLAG TABLE  33222          0            0  31  
+ 033223 VARIATIONAL ANALYSIS SATOB EVENTS (2)                            FLAG TABLE  33223          0            0  31  
+ 033224 VARIATIONAL ANALYSIS DRIBU EVENTS (2)                            FLAG TABLE  33224          0            0  31  
+ 033225 VARIATIONAL ANALYSIS TEMP EVENTS (2)                             FLAG TABLE  33225          0            0  31  
+ 033226 VARIATIONAL ANALYSIS PILOT EVENTS (2)                            FLAG TABLE  33226          0            0  31  
+ 033227 VARIATIONAL ANALYSIS SATEM/TOVS EVENTS (2)                       FLAG TABLE  33227          0            0  31  
+ 033228 VARIATIONAL ANALYSIS PAOB EVENTS (2)                             FLAG TABLE  33228          0            0  31  
+ 033229 VARIATIONAL ANALYSIS SCATTEROMETER EVENTS (2)                    FLAG TABLE  33229          0            0  31  
+ 033230 VARIATIONAL ANALYSIS RAW RADIANCES EVENTS (2)                    FLAG TABLE  33230          0            0  31  
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE  33231          0            0   6  
+ 033232 REPORT BLACK LIST EVENTS                                         FLAG TABLE  33232          0            0  31  
+ 033233 VARIATIONAL ANALYSIS REPORT STATUS                               FLAG TABLE  33233          0            0  31  
+ 033234 VARIATIONAL ANALYSIS DATUM STATUS                                FLAG TABLE  33234          0            0  31  
+ 033236 VARIATIONAL ANALYSIS DATUM EVENTS (1)                            FLAG TABLE  33236          0            0  31  
+ 033237 VARIATIONAL ANALYSIS SYNOP DATUMEVENTS (2)                       FLAG TABLE  33237          0            0  31  
+ 033238 VARIATIONAL ANALYSIS AIREP DATUMEVENTS (2)                       FLAG TABLE  33238          0            0  31  
+ 033239 VARIATIONAL ANALYSIS SATOB DATUMEVENTS (2)                       FLAG TABLE  33239          0            0  31  
+ 033240 VARIATIONAL ANALYSIS DRIBU DATUMEVENTS (2)                       FLAG TABLE  33240          0            0  31  
+ 033241 GROSS ERROR PROBABILITY                                          NUMERIC                    3            0  10  
+ 033242 GROSS ERROR INDICATOR                                            CODE TABLE  33242          0            0   2  
+ 033243 VARIATIONAL ANALYSIS TEMP DATUM EVENTS (2)                       FLAG TABLE  33243          0            0  31  
+ 033244 VARIATIONAL ANALYSIS PILOT DATUMEVENTS (2)                       FLAG TABLE  33244          0            0  31  
+ 033245 VARIATIONAL ANALYSIS SATEM/TOVS DATUM EVENTS (2)                 FLAG TABLE  33245          0            0  31  
+ 033246 VARIATIONAL ANALYSIS PAOB DATUM EVENTS (2)                       FLAG TABLE  33246          0            0  31  
+ 033247 VARIATIONAL ANALYSIS SCATTEROMETER DATUM EVENTS (2)              FLAG TABLE  33247          0            0  31  
+ 033248 VARIATIONAL ANALYSIS RAW RADIANCES DATUM EVENTS (2)              FLAG TABLE  33248          0            0  31  
+ 033249 DATUM BLACK LIST EVENTS                                          FLAG TABLE  33249          0            0  31  
+ 033250 PROBABILITY OF GROSS ERROR                                       NUMERIC                    6            0  20  
+ 033251 RANGE OF POSSIBLE VALUES                                         NUMERIC                    2            0  14  
+ 033252 MANUAL-AUTOMATIC QUALITY CONTROL                                 CODE TABLE  33252          0            0   4  
+ 033253 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7  
+ 033254 WIND CORRELATION METHOD                                          FLAG TABLE  33254          0            0  20
+ 055003 DATA EXTRACTION INDICATOR                                        FLAG TABLE  55003          0            0   8  
+ 062190 STATISTICS APPLICATION                                           CODE TABLE  62190          0            0   8  
+ 062191 TYPE OF STATISTICS                                               CODE TABLE  62191          0            0   8  
+ 063190 APPLICATION DERIVING SUBSTITUTE OR ALTERNATIVE VALUE             CODE TABLE  63190          0            0   8  
diff --git a/bufrtables/B0000000000098006000.TXT b/bufrtables/B0000000000098006000.TXT
new file mode 100755
index 0000000..5d91e3d
--- /dev/null
+++ b/bufrtables/B0000000000098006000.TXT
@@ -0,0 +1,1283 @@
+ 000001 TABLE A: ENTRY                                                   CCITTIA5                   0            0  24
+ 000002 TABLE A: DATA CATEGORY DESCRIPTION, LINE 1                       CCITTIA5                   0            0 256
+ 000003 TABLE A: DATA CATEGORY DESCRIPTION, LINE 2                       CCITTIA5                   0            0 256
+ 000005 BUFR EDITION NUMBER                                              CCITTIA5                   0            0  24
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 001003          0            0   3
+ 001004 WMO REGION SUB-AREA                                              NUMERIC                    0            0   3
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 001007          0            0  10
+ 001008 AIRCRAFT REGISTRATION NUMBER                                     CCITTIA5                   0            0  64
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER(C-MAN BUOYS)                 CCITTIA5                   0            0  64
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM                 DEGREE TRUE                0            0   9
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM                     M/S                        0            0  10
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14
+ 001022 NAME OF FEATURE                                                  CCITTIA5                   0            0 224
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 001031          0            0  16
+ 001032 GENERATING APPLICATION                                           CODE TABLE 001032          0            0   8
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 001033          0            0   8
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 001034          0            0   8
+ 001035 ORIGINATING CENTRE                                               CODE TABLE 001035          0            0  16
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 001036          0            0  20
+ 001037 SIGMET SEQUENCE NUMBER                                           CCITTIA5                   0            0  24
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT                     M/S                        5  -1073741824  31
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT                    M/S                        5  -1073741824  31
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT                     M/S                        5  -1073741824  31
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96
+ 001060 AIRCRAFT REPORTING POINT(BEACON IDENTIFIER)                      CCITTIA5                   0            0  64
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32
+ 001065 ICAO REGION IDENTIFIER                                           CCITTIA5                   0            0 256
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 001090          0            0   8
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 001092          0            0   8
+ 001095 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0 112
+ 001096 ACQUISITION STATION IDENTIFIER                                   CCITTIA5                   0            0 160
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE   1192          0            0   8  
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE   1193          0            0   4  
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72  
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72  
+ 001196 CONSTANT LEVEL BALLOON IDENTIFIER                                CCITTIA5                   0            0  72  
+ 001197 RTP - PLATFORM TYPE                                              CODE TABLE   1197          0            0  10  
+ 001198 ITP - DECK ID                                                    CODE TABLE   1198          0            0  10  
+ 001199 DUP - DUPLICATE STATUS                                           CODE TABLE   1199          0            0   4  
+ 001201 GENERATING APPLICATION                                           CODE TABLE   1201          0            0   8  
+ 001205 SATELLITE IDENTIFIER                                             CODE TABLE   1205          0            0  10  
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31  
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31  
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31  
+ 002001 TYPE OF STATION                                                  CODE TABLE 002001          0            0   2
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 002002          0            0   4
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 002003          0            0   4
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT              CODE TABLE 002004          0            0   4
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 002011          0            0   8
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 002012          0            0   4
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 002013          0            0   4
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 002014          0            0   7
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 002015          0            0   4
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 002019          0            0  11
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 002020          0            0   9
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 002021          0            0   9
+ 002022 SATELLITE DATA PROCESSING TECHNIQUE USED                         FLAG TABLE 002022          0            0   8
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 002023          0            0   4
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 002024          0            0   4
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 002025          0            0  25
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 002030          0            0   3
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 002031          0            0   5
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 002032          0            0   2
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 002033          0            0   3
+ 002034 DROGUE TYPE                                                      CODE TABLE 002034          0            0   5
+ 002035 CABLE LENGTH                                                     M                          0            0   9
+ 002036 BUOY TYPE                                                        CODE TABLE 002036          0            0   2
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 002037          0            0   3
+ 002038 METHOD OF SEA-SURFACE TEMPERATURE MEASUREMENT                    CODE TABLE 002038          0            0   4
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 002039          0            0   3
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 002040          0            0   4
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 002041          0            0   6
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 002044          0            0   4
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 002045          0            0   4
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 002046          0            0   4
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 002048          0            0   4
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 002049          0            0   8
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 002050          0            0  20
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 002051          0            0   4
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 002052          0            0   6
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 002053          0            0   4
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 002054          0            0   4
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 002055          0            0   4
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 002056          0            0   4
+ 002057 ORIGIN OF FIRST GUESS INFORMATION                                CODE TABLE 002057          0            0   4
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 002058          0            0   4
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 002059          0            0   4
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 002060          0            0   4
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 002061          0            0   3
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 002062          0            0   4
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 002064          0            0   2
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 002070          0            0   4
+ 002091 ENTRY SENSOR 4/20 mA                                             A                          0            4  10
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 002101          0            0   4
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8
+ 002103 RADOME                                                           FLAG TABLE 002103          0            0   2
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 002104          0            0   4
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6
+ 002106 3-dB BEAMWIDTH                                                   DEGREE                     1            0   6
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6
+ 002108 CROSSPOL DISCRIMINATION(ON AXIS)                                 dB                         0            0   6
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 002119          0            0   3
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8
+ 002123 PEAK POWER                                                       W                         -4            0   7
+ 002124 AVERAGE POWER                                                    W                         -1            0   7
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8
+ 002126 PULSE WIDTH                                                      S                          7            0   6
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7
+ 002131 SENSITIVITY TIME CONTROL                                         FLAG TABLE 002131          0            0   2
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/IDENTIFICATION                    CCITTIA5                   0            0  32
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 002143          0            0   7
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTROPHOTOMETER                   CODE TABLE 002144          0            0   4
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 002145          0            0   4
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 002146          0            0   4
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 002148          0            0   5
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 002149          0            0   6
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 002150          0            0   6
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 002151          0            0  11
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING                     FLAG TABLE 002152          0            0  31
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 002158          0            0   9
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 002159          0            0   8
+ 002160 ASCENDING/DESCENDING ORBIT DESIGNATOR                            CODE TABLE 002160          0            0   2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 002163          0            0   4
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 002164          0            0   3
+ 002166 RADIANCE TYPE                                                    CODE TABLE 002166          0            0   4
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 002167          0            0   4
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 002169          0            0   4
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 002172          0            0   8
+ 002173 SQUARE OF THE OFF NADIR ANGLE                                    DEGREE**2                  4            0  10
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 002175          0            0   4
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 002176          0            0   4
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 002177          0            0   4
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 002178          0            0   4
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 002179          0            0   4
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 002180          0            0   4
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 002181          0            0  21
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 002182          0            0   4
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 002183          0            0   4
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 002184          0            0   4
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 002185          0            0   4
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 002186          0            0  30
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 002187          0            0  18
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 002188          0            0  21
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 002189          0            0  12
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9  
+ 002193 1D VAR SATELLITE CHANNEL(S) USED                                 FLAG TABLE   2193          0            0  28  
+ 002194 CONSTANT LEVEL BALLOON TYPE                                      CODE TABLE   2194          0            0   4  
+ 002195 TYPE OF SATELLITE INSTRUMENTATION                                CODE TABLE   2195          0            0   4  
+ 002196 SATELLITE CLASSIFICATION                                         CODE TABLE   2196          0            0   9  
+ 002197 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26  
+ 002198 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26  
+ 002199 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE   2199          0            0   4  
+ 002201 SIMULATED SATELLITE INSTRUMENT                                   FLAG TABLE   2201          0            0   4  
+ 002202 SIMULATED DATA PROCESSING TECHNIQUE USED                         FLAG TABLE   2202          0            0   4  
+ 002220 DATA PRODUCER                                                    CODE TABLE   2220          0            0   9  
+ 002221 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18  
+ 002222 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18  
+ 002223 TOVS/ATOVS/AVHRR CHANNEL NUMBER                                  CODE TABLE   2223          0            0   6  
+ 002231 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE   2231          0            0   4  
+ 002232 TRACER CORRELATION METHOD                                        CODE TABLE   2232          0            0   3  
+ 002240 TYPE OF TERMODYNAMIC SENSING                                     CODE TABLE   2240          0            0   8  
+ 002241 TYPE OF ROCKET MOTOR                                             CODE TABLE   2241          0            0   3  
+ 002242 TYPE OF WIND SENSING EQUIPMENT                                   CODE TABLE   2242          0            0   8  
+ 002243 TERMODYNAMIC CORRECTION TECHNIQUE                                CODE TABLE   2243          0            0   3  
+ 002244 WIND CORRECTION TECHNIQUE                                        CODE TABLE   2244          0            0   3  
+ 002245 METHOD OF REDUCING OF DATA                                       CODE TABLE   2245          0            0   4  
+ 002251 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE   2251          0            0   4  
+ 002252 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE   2252          0            0  31  
+ 002253 HUMIDITY COMPUTATIONAL METHOD                                    CODE TABLE   2253          0            0   8  
+ 002254 RADIANCE TYPE                                                    CODE TABLE   2254          0            0   4  
+ 004001 YEAR                                                             YEAR                       0            0  12
+ 004002 MONTH                                                            MONTH                      0            0   4
+ 004003 DAY                                                              DAY                        0            0   6
+ 004004 HOUR                                                             HOUR                       0            0   5
+ 004005 MINUTE                                                           MINUTE                     0            0   6
+ 004006 SECOND                                                           SECOND                     0            0   6
+ 004007 SECOND WITHIN MINUTE                                             SECOND                     6            0  26
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6
+ 004041 TIME DIFFERENCE, UTC-LMT                                         MINUTE                     0        -1440  12
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12
+ 005033 PIXEL SIZE ON HORIZONTAL-1                                       M                         -1            0  16
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10  
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7  
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31  
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16  
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16
+ 006021 DISTANCE                                                         M                         -1            0  13
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12
+ 006033 PIXEL SIZE ON HORIZONTAL-2                                       M                         -1            0  16
+ 006034 CROSS TRACK CELL NUMBER                                          NUMERIC                    0            0   7
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6  
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7  
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31  
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13  
+ 007001 HEIGHT OF STATION                                                M                          0         -400  15
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17
+ 007004 PRESSURE                                                         PA                        -1            0  14
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15
+ 007007 HEIGHT                                                           M                          0        -1000  17
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16
+ 007021 ELEVATION                                                        DEGREE                     2        -9000  15
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL                    M                          1        -4000  17
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL                         M                          1        -4000  17
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND ( OR DECK OF MARINE PLATFORM M                          2            0  16
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE                             M                          1            0  12
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17
+ 007064 HEIGHT ABOVE STATION (SENSOR HEIGHT ARTIFICIALLY CORRECTED) (SEE M                          0            0   4
+ 007070 DROGUE DEPTH                                                     M                          0            0  10
+ 007190 HEIGHT INCREMENT                                                 M                          1        -1024  12  
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31  
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 008001          0            0   7
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 008002          0            0   6
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 008003          0            0   6
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 008004          0            0   3
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 008005          0            0   4
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 008006          0            0   9
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 008007          0            0   4
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 008008          0            0   9
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 008009          0            0   4
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 008010          0            0   5
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 008011          0            0   6
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 008012          0            0   2
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 008013          0            0   2
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 008014          0            0   4
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 008016          0            0   3
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 008017          0            0   2
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 008018          0            0  17
+ 008019 QUALIFIER FOR FOLLOWING CENTRE IDENTIFIER                        CODE TABLE 008019          0            0   4
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 008021          0            0   5
+ 008022 TOTAL NUMBER(WITH RESPECT TO ACCUMULATION OR AVERAGE)            NUMERIC                    0            0  16
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 008023          0            0   6
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 008024          0            0   6
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 008025          0            0   4
+ 008029 REMOTELY SENSED SURFACE TYPE                                     CODE TABLE 008029          0            0   8
+ 008030 MANUAL ON CODES (VOLUME I.1 SECTION C CODE TABLE FROM WHICH DATA NUMERIC                    0            0  13
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 008033          0            0   7
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 008035          0            0   3
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 008036          0            0   3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 008050          0            0   4
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 008051          0            0   3
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 008052          0            0   5
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 008053          0            0   2
+ 008059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 008059          0            0   6
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 008060          0            0   4
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 008070          0            0   4
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 008072          0            0   3
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 008074          0            0   2
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 008075          0            0   2
+ 008076 TYPE OF BAND                                                     CODE TABLE 008076          0            0   6
+ 008080 QUALIFIER FOR GTSSPP QUALITY FLAG                                CODE TABLE 008080          0            0   6
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE   8081          0            0   6
+ 008082 ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE          CODE TABLE   8082          0            0   3
+ 008193 TIME QUALIFIER                                                   CODE TABLE   8193          0            0   6  
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE   8194          0            0   4  
+ 008195 DATA TYPE                                                        CODE TABLE   8195          0            0   7  
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8  
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE   8222          0            0   4  
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE   8223          0            0   7  
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10  
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15
+ 010002 HEIGHT                                                           M                         -1          -40  16
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17
+ 010004 PRESSURE                                                         PA                        -1            0  14
+ 010007 HEIGHT                                                           M                          0        -1000  17
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31
+ 010032 SATELLITE DISTANCE TO EARTH CENTRE                               M                          1            0  27
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27
+ 010034 EARTH RADIUS                                                     M                          1            0  27
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11
+ 010061 3 HOUR PRESSURE CHANGE                                           PA                        -1         -500  10
+ 010062 24 HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 010063          0            0   4
+ 010064 SIGMET CRUISING LEVEL                                            CODE TABLE 010064          0            0   3
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      M/S                        3       -65536  17
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE**2                  2            0  16
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE**2                  2            0  16
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18
+ 010086 GEOID HEIGHT                                                     M                          3      -131072  18
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16
+ 010090 LONG PERIOD TIDE HEIGHT                                          M                          3       -32768  16
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20  
+ 010196 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15  
+ 010197 ANEMOMETER HEIGHT                                                M                          0            0   9  
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9
+ 011002 WIND SPEED                                                       M/S                        1            0  12
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9
+ 011019 STEADINESS OF WIND                                               %                          0            0   7
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 011031          0            0   4
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10
+ 011037 TURBULENT INDEX                                                  CODE TABLE 011037          0            0   6
+ 011038 TIME OF OCCURANCE OF PEAK EDDY DISSIPATION RATE                  CODE TABLE 011038          0            0   5
+ 011039 EXTENDED TIME OF OCCURENCE OF PEAK EDDY DISSIPATION RATE         CODE TABLE 011039          0            0   6
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12
+ 011041 MAXIMUM WIND SPEED (GUSTS)                                       M/S                        1            0  12
+ 011042 MAXIMUM WIND SPEED (10 MIN MEAN WIND)                            M/S                        1            0  12
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                m**(2/3)/S                 2            0   8
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   SECOND                     0            0  12
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011195 STEADINESS OF WIND                                               %                          0            0   7  
+ 011196 FRICTION VELOCITY                                                M/S                        5            0  19  
+ 011201 HORIZONTAL LINE OF SIGHT COMPONENT                               M/S                        1        -4096  13  
+ 011210 1D VAR WIND SPEED RETREIVED ERRO(S)                              M/S                        2            0  12  
+ 011211 WIND SPEED INDEPENDENT ESTIMATE OF ERROR(S)                      M/S                        2            0  12  
+ 011220 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  12  
+ 011221 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15  
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13  
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13  
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13  
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13  
+ 012001 TEMPERATURE/DRY BULB TEMPERATURE                                 K                          1            0  12
+ 012002 WET BULB TEMPERATURE                                             K                          1            0  12
+ 012003 DEW POINT TEMPERATURE                                            K                          1            0  12
+ 012004 DRY BULB TEMPERATURE AT 2M                                       K                          1            0  12
+ 012005 WET BULB TEMPERATURE AT 2M                                       K                          1            0  12
+ 012006 DEW POINT TEMPERATURE AT 2M                                      K                          1            0  12
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12
+ 012011 MAXIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12
+ 012012 MINIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12
+ 012014 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12
+ 012015 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12
+ 012016 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12
+ 012017 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31
+ 012073 TEMPERATURE                                                      K                          2            0  16
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16
+ 012101 TEMPERATURE/DRY BULB TEMPERATURE                                 K                          2            0  16
+ 012102 WET BULB TEMPERATURE                                             K                          2            0  16
+ 012103 DEW POINT TEMPERATURE                                            K                          2            0  16
+ 012104 DRY BULB TEMPERATURE AT 2M                                       K                          2            0  16
+ 012105 WET BULB TEMPERATURE AT 2M                                       K                          2            0  16
+ 012106 DEW POINT TEMPERATURE AT 2M                                      K                          2            0  16
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16
+ 012111 MAXIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          2            0  16
+ 012112 MINIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          2            0  16
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED PAST 24 HOURS            K                          2            0  16
+ 012119 MINIMUM TEMPERATURE AT HEIGHT SPECIFIED PAST 24 HOURS            K                          2            0  16
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16
+ 012180 AVERAGED 12 MICRON BT for ALL CLEAR PIXELS AT NADIR              K                          2            0  16
+ 012181 AVERAGED 11 MICRON BT for ALL CLEAR PIXELS AT NADIR              K                          2            0  16
+ 012182 AVERAGED 3.7 MICRON BT for ALL CLEAR PIXELS AT NADIR             K                          2            0  16
+ 012183 AVERAGED 12 MICRON BT for ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16
+ 012184 AVERAGED 11 MICRON BT for ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16
+ 012185 AVERAGED 3.7 MICRON BT for ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16
+ 012193 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12  
+ 012194 RADIANCE                                                         W/M**2*STER*M**(-1)        6            0  31  
+ 012195 SPECTRAL RADIANCE                                                W/M**2*STER*M**(-1)       10            0  31  
+ 012196 RADIANCE                                                         W/M**2*STER                3            0  16  
+ 012197 MAXIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12  
+ 012198 MINIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12  
+ 012199 MAXIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12  
+ 012200 MINIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12  
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7
+ 013006 MIXING HEIGHT                                                    M                         -1          -40  16
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGE RATE)                 KG/(M**2)S                 4            0  12
+ 013015 SNOWFALL (AVERAGE RATE)                                          M/S                        7            0  12
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 013038          0            0   2
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 013039          0            0   3
+ 013040 SURFACE FLAG                                                     CODE TABLE 013040          0            0   4
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 013041          0            0   4
+ 013042 PARCEL LIFTED INDEX (TO 500 hPa)                                 K                          0          -20   6
+ 013043 BEST LIFTED INDEX (TO 500 hPa)                                   K                          0          -20   6
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 013051          0            0   4
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1          -10  17
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14
+ 013080 WATER PH                                                         pH                         1            0  10
+ 013081 WATER CONDUCTIVITY                                               SIEMENS/M                  3            0  14
+ 013082 WATER TEMPERATURE                                                K                          1            0  12
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10   
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30
+ 013192 RELATIVE HUMIDITY AT 2 M                                         %                          0            0   8  
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8  
+ 013194 TOTAL COLUMN WATER                                               KG/M**2                    2            0  11  
+ 013195 RAIN RATE                                                        KG/M**2HOUR                0            0   5  
+ 013196 ANTECEDENT PRECIPITATION INDEX                                   KG/M**2                    0            0   7  
+ 013197 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    1            0  10  
+ 013198 RAIN FLAG                                                        CODE TABLE  13198          0            0   3  
+ 013199 SPECIFIC HUMIDITY AT 2 M                                         KG/KG                      5            0  14  
+ 013201 CLOUD LIQUID WATER                                               KG/KG                      7            0  14  
+ 013202 TYPE OF SURFACE                                                  CODE TABLE  13202          0            0   8  
+ 013203 1D VAR ESTIMATE OF RAIN RATE                                     KG/M**2*HOUR               2            0  12  
+ 013204 SSMI INDEPENDENT ESTIMATE OF RAIN RATE                           KG/M**2*HOUR               2            0  12  
+ 013205 CLOUD LIQUID WATER PATH                                          KG/M**2                    4            0  14  
+ 013206 TOTAL PRECIPITATION ICE CONTENT                                  KG/M**2                    6            0  14  
+ 013207 TOTAL CLOUD LIQUID WATER                                         KG/M**2                    6            0  14  
+ 013208 SURFACE RAIN RATE ( INSTANTANEOUS )                              KG/M**2*S                  5            0  17  
+ 013209 RAIN POSSIBILITY                                                 NUMERIC                    0         -256   9  
+ 013210 1D VAR CLOUD LIQUID WATER PATH RETRIEVED ERROR(S)                KG/M**2                    4            0  14  
+ 013211 TOTAL PRECIPITABLE WATER INDIPENDENT ESTIMATE OF ERROR(S)        KG/M**2                    2            0  11  
+ 013212 CLOUD LIQUID WATER PATH INDIPENDENT ESTIMATE OF ERROR(S)         KG/M**2                    4            0  14  
+ 013230 CONVECTIVE PRECIPITATION                                         KG/M**2                    1           -1  14  
+ 013231 LARGE SCALE PRECIPITATION                                        KG/M**2                    1           -1  14  
+ 013233 FRACTION OF TOTAL PRECIPITATION IN SOLID FORM (SNOW)             M                          4            0  18
+ 013240 AIR DENSITY                                                      KG/M**3                    3            0  10  
+ 014001 LONG-WAVE RADIATION,INTEGRATED OVER 24 HOURS                     J/M**2                    -3        -2048  12
+ 014002 LONG-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED             J/M**2                    -3        -2048  12
+ 014003 SHORT-WAVE RADIATION,INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12
+ 014004 SHORT-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12
+ 014011 NET LONG-WAVE RADIATION,INTEGRATED OVER 24 HOURS                 J/M**2                    -3        -2048  12
+ 014012 NET LONG-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -3        -2048  12
+ 014013 NET SHORT-WAVE RADIATION,INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12
+ 014014 NET SHORT-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12
+ 014015 NET RADIATION INTEGRATED OVER 24HOURS                            J/M**2                    -4       -16384  15
+ 014016 NET RADIATION,INTEGRATED OVER PERIOD SPECIFIED                   J/M**2                    -4       -16384  15
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION                                J/M**2                    -3        -2048  12
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION                               J/M**2                    -3        -2048  12
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7
+ 014020 GLOBAL SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15
+ 014021 GLOBAL RADIATION INTEGRATED OVERPERIOD SPECIFIED                 J/M**2                    -4            0  15
+ 014022 DIFFUSE SOLAR RADIATION INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15
+ 014023 DIFFUSE SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15
+ 014024 DIRECT SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15
+ 014025 DIRECT SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED          J/M**2                    -4            0  15
+ 014026 ALBEDO AT THE TOP OF CLOUD                                       %                          0            0   7
+ 014027 ALBEDO                                                           %                          0            0   7
+ 014028 GLOBAL SOLAR RADIATION INTEGRATED OVERPERIOD SPECIFIED           J/M**2                    -2            0  16
+ 014029 DIFFUSE SOLAR RADIATION INTEGRATED OVERPERIOD SPECIFIED          J/M**2                    -2            0  16
+ 014030 DIRECT SOLAR RADIATION INTEGRATED OVERPERIOD SPECIFIED           J/M**2                    -2            0  16
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11
+ 014042 BIDIRECTIONAL REFLECTANCE                                        %                          0            0   7
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11
+ 014050 EMISSIVITY                                                       %                          1            0  10
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16
+ 015001 OZONE                                                            DOBSON                     0            0  10
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11
+ 015005 OZONE P                                                          DU                         0            0  10
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG(1/M**2)                3        14000  13
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31
+ 015020 INTEGRATED OZONE DENSITY                                         KG/M**2                    8            0  21
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREME OF SCAN      M                          5       -10000  15
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14
+ 015202 INTEGRATED ELECTRON DENSITY                                      1/M**2                     3        13000  12  
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 019001          0            0   6
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 019008          0            0   3
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -3            0  12
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 019010          0            0   4
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7
+ 020003 PRESENT WEATHER                                                  CODE TABLE 020003          0            0   9
+ 020004 PAST WEATHER (1)                                                 CODE TABLE 020004          0            0   5
+ 020005 PAST WEATHER (2)                                                 CODE TABLE 020005          0            0   5
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 020008          0            0   5
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 020009          0            0   4
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 020011          0            0   4
+ 020012 CLOUD TYPE                                                       CODE TABLE 020012          0            0   6
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 020017          0            0   4
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 020018          0            0   2
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 020021          0            0  30
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 020022          0            0   4
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 020023          0            0  18
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 020024          0            0   3
+ 020025 OBSCURATION                                                      FLAG TABLE 020025          0            0  21
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 020026          0            0   4
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 020027          0            0   9
+ 020028 EXPECTED CHANGE IN INTENSITY                                     CODE TABLE 020028          0            0   3
+ 020029 RAIN FLAG                                                        CODE TABLE 020029          0            0   2
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 020032          0            0   3
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 020033          0            0   4
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 020034          0            0   5
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 020035          0            0   4
+ 020036 ICE SITUATION                                                    CODE TABLE 020036          0            0   5
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 020037          0            0   5
+ 020038 BEARING OF ICE EDGE                                              DEGREE TRUE                0            0  12
+ 020039 ICE DISTANCE                                                     M                         -1            0  13
+ 020041 AIRFRAME ICING                                                   CODE TABLE 020041          0            0   4
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 020042          0            0   2
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7
+ 020045 SUPERCOOLED LARGE DROPLET (SDL) CONDITIONS                       CODE TABLE 020045          0            0   2
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 020062          0            0   5
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 020063          0            0  10
+ 020065 SNOW COVER                                                       %                          0            0   7
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 020071          0            0   4
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 020090          0            0   4
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE  20192          0            0  14  
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7  
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7  
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14  
+ 020250 CALCULATED SURFACE TYPE                                          CODE TABLE  20250          0            0   5  
+ 020251 ICE AGE                                                          CODE TABLE  20251          0            0   3  
+ 020252 ICE EDGE                                                         CODE TABLE  20252          0            0   3  
+ 020253 SURFACE TYPE                                                     CODE TABLE  20253          0            0   3  
+ 020254 ICE CONCENTRATION                                                %                          0            0   7  
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION(VZ)                         M/S                        0         -128   8
+ 021014 DOPPLER MEAN VELOCITY RADIAL                                     M/S                        1        -4096  13
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8
+ 021021 ECHO TOPS                                                        M                         -3            0   4
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8
+ 021051 SIGNAL POWER ABOVE 1 mW                                          dB                         0         -256   8
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE                            FLAG TABLE 021066          0            0  12
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 021067          0            0  13
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 021068          0            0   8
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 021069          0            0  10
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST 2)                           FLAG TABLE 021070          0            0  23
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 021072          0            0   4
+ 021073 SATELLITE ALTIMETER INSTRUMENT MODE                              FLAG TABLE 021073          0            0   9
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 021076          0            0   3
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS-TRACK BAND NUMBER            NUMERIC                    0            0   4
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0th MOMENT                         dB                         0         -100   8
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0th MOMENT                          dB                         0         -100   8
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 021109          0            0  17
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 021115          0            0  17
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 021116          0            0  17
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 021119          0            0   6
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10
+ 021121 SEAWIND NOF RAIN INDEX                                           NUMERIC                    0            0   8
+ 021122 ATTENUATION CORRECTION ON SIGMA-0 (FROM tB)                      dB                         2       -10000  14
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREES                    3            0  19
+ 021133 WAVELENGHT OF SPECTRUM MAX ON HIGHER RESOLUTION GRID             M                          3            0  29
+ 021134 RANGE RESOLUTION OF CROSS COVARIANCE SPECTRUM                    RAD/M                      3            0  19
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  DB                         2       -32768  16
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              DB                         2       -32768  16
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR ACG                      DB                         2        -2048  12
+ 021140 S  BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  DB                         2       -32768  16
+ 021141 STD S  BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              DB                         2       -32768  16
+ 021142 S  BAND NET INSTRUMENTAL CORRECTION FOR ACG                      DB                         2        -1024  11
+ 021143 KU BAND RAIN ATTENUATION                                         DB                         2  -1073741824  31
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 021144          0            0   2
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13  
+ 021193 NOISE FIGURE                                                     %                          0            0   7  
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8  
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE  21196          0            0  12  
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE  21197          0            0  12  
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE  21198          0            0   8  
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE  21199          0            0   7  
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE  21200          0            0  15  
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE  21202          0            0   4  
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE  21203          0            0   9  
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10  
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE  21206          0            0   3  
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10  
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11  
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10  
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14  
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7  
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE  21214          0            0   3  
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4  
+ 021222 DOPPLER SPECTRUM 0 TH MOMENT (AMPLITUDE)                         dB                         0            0   7  
+ 021225 PRESCAT PRODUCT CONFIDENCE                                       FLAG TABLE  21225          0            0   6  
+ 021226 BACKSCATER DISTANCE                                              NUMERIC                    1        -4096  13  
+ 021230 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3  
+ 021231 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3  
+ 021232 TOTAL NMBER OF SIGMA-0 MEASUREMENTS                              NUMERIC                    0            0   5  
+ 021233 NUMBER OF SIGMA-0 USABLE FOR WIND                                NUMERIC                    0            0   5  
+ 021234 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    1       -10000  14  
+ 021235 WIND VECTOR CELL QUALITY FLAG                                    FLAG TABLE  21235          0            0   3  
+ 021236 NUMBER OF FORE-BEAM SIGMA-0                                      NUMERIC                    1            0   6  
+ 021237 NUMBER OF MID-BEAM V-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021238 NUMBER OF MID-BEAM H-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021239 NUMBER OF AFT-BEAM SIGMA-0                                       NUMERIC                    1            0   6  
+ 021240 NORMALIZED RADAR CROSS SECTION                                   NUMERIC                    2       -10000  14  
+ 021241 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    5            0  14  
+ 021242 Kp VARIANCE COEFFICIENT (BETHA)                                  NUMERIC                    6            0  16  
+ 021243 Kp VARIANCE COEFFICIENT (GAMMA)                                  NUMERIC                    6            0  16  
+ 021244 SIGMA-0 QUALITY FLAG                                             FLAG TABLE  21244          0            0  15  
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14
+ 022041 SEA-SURFACE TEMPERATURE(15-DAY RUNNING MEAN)                     K                          1            0  12
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19
+ 022050 STANDARD DEVIATION SEA SURFACE TEMPERATURE                       K                          2            0   8
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 022056          0            0   2
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 022060          0            0   3
+ 022061 STATE OF THE SEA                                                 CODE TABLE 022061          0            0   4
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 022067          0            0  10
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 022068          0            0   7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20
+ 022084 BAND CONTAINING MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY    NUMERIC                    0            0   7
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)        DEGREE                     0            0   9
+ 022101 TOTAL ENERGY (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS            NUMERIC                    0            0  31
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 022120          0            0   5
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 022121          0            0   5
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 022122          0            0   5
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 022123          0            0   5
+ 022141 SEA SURFACE TEMPERATURE (15 DAY RUNNING MEAN)                    K                          2            0  15
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S  BAND                         NUMERIC                    0            0  10
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16
+ 022157 STD 18 HZ KU BAND SIGNIFICANT WAVE HEIGHT                        M                          3            0  16
+ 022158 S  BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16
+ 022159 STD 18 HZ S  BAND SIGNIFICANT WAVE HEIGHT                        M                          3            0  16
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27
+ 022192 SPECTRAL PERIOD                                                  S                          2            0  13  
+ 022193 MEAN WAVENUMBER                                                  1/M                        5            0  15  
+ 022194 PEAK WAVENUMBER                                                  1/M                        5            0  15  
+ 022195 MEAN WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022196 PEAK WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022197 DIRECTION SPREAD                                                 DEGREE                     1            0  13  
+ 022198 VARIANCE SPECTRAL DENSITY                                        M**2*S/RAD                 4            0  18  
+ 022199 CORRELATION COEFF OF SIMULATED FG AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022200 CORRELATION COEFF OF SIMULATED BF AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022201 CORRELATION COEFF OF OCEAN WAVE FG AND EXTRACTED WAVE SPECTRUM   NUMERIC                    4       -10000  15  
+ 022202 ERROR BETWEEN FIRST GUESS AND OBSERVED SAR                       NUMERIC                    5            0  21  
+ 022203 ERROR BETWEEN SIMULATED AND OBSERVED SAR                         NUMERIC                    5            0  21  
+ 022204 MEAN PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022205 SPECTRAL DENSITY                                                 M**2*S/RAD                 4            0  25  
+ 022206 PEAK PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022207 MEAN WAVE PERIOD                                                 S                          1            0  10  
+ 022208 PEAK PERIOD OF 1D SPECTRA                                        S                          1            0  10  
+ 022209 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  13  
+ 022210 MEAN SQUARE SLOPE OF WAVES                                       NUMERIC                    4       -10000  14  
+ 022211 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  17  
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10  
+ 023001 ACCIDENT EARLY NOTIFICATION-ARTICLE APPLICABLE                   CODE TABLE 023001          0            0   3
+ 023002 ACTIVITY OR FACILITY INVOLVED INCIDENT                           CODE TABLE 023002          0            0   5
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 023003          0            0   3
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 023004          0            0   3
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 023005          0            0   2
+ 023006 INCIDENT SITUATION                                               CODE TABLE 023006          0            0   3
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 023007          0            0   3
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 023008          0            0   2
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 023009          0            0   2
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 023016          0            0   2
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 023018          0            0   3
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12
+ 023024 MAIN TRANSPORT SPEED WATER                                       M/S                        2            0  13
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 023031          0            0   2
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 023032          0            0   2
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 024003          0            0   5
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9
+ 024011 DOSE                                                             mSv                        2            0  32
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH(DEFINED LOCATION mSv                        2            0  32
+ 024021 AIR CONCENTRATION(OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA     Bq/M**3                    2            0  32
+ 024022 CONCENTRATION IN PRECIPITATION ( OF NAMED ISOTOPE TYPE)          Bq/L                       2            0  32
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8
+ 025004 ECHO PROCESSING                                                  CODE TABLE 025004          0            0   2
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 025005          0            0   2
+ 025006 Z TO R CONVERSION                                                CODE TABLE 025006          0            0   3
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 025009          0            0   4
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 025010          0            0   4
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 025011          0            0   2
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 025012          0            0   2
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 025013          0            0   2
+ 025014 AZIMUTH CLUTTER CUT-OFF                                          NUMERIC                    0            0  12
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 025015          0            0   2
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 025017          0            0   2
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 025020          0            0   2
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 025021          0            0   8
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 025030          0            0   2
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 025032          0            0   2
+ 025033 WIND PROFILER SUBMODE INFORMATION                                CODE TABLE 025033          0            0   2
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS                       FLAG TABLE 025034          0            0   4
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 025036          0            0   4
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 025040          0            0   4
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 025041          0            0   2
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 025042          0            0   2
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 025045          0            0  21
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 025046          0            0   5
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 025047          0            0   4
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 025048          0            0  16
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 025049          0            0   6
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 025051          0            0   7
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 025053          0            0  12
+ 025050 PRINCIPAL COMPONENT SCORE                                        NUMERIC                    4      -131072  18
+ 025054 SSMIS SUBFRAME ID NUMBER                                         NUMERIC                    0            0   5
+ 025055 MULTIPLEX HOUSEKEEPING                                           K                          2            0  16
+ 025060 SOFTWARE IDENTIFICATION                                          NUMERIC                    0            0  14
+ 025061 SOFTWARE IDENTIFICATION                                          CCITTIA5                   0            0  96
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5
+ 025076 LOG_10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 for ATOVS                     NUMERIC                    5      -100000  18
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 025086          0            0   2
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (Cn2)                 dB                         3       -18192  13
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14
+ 025093 RASS COMPUTATIONAL CORRECTION                                    FLAG TABLE 025093          0            0   8
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 025095          0            0   2
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 025096          0            0   5
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 025097          0            0   4
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8
+ 025104 NUMBER OF WAVELENGHT BINS                                        NUMERIC                    0            0   8
+ 025105 FIRST DIRECTIONAL BIN                                            DEGREES                    3            0  19
+ 025106 DIRECTIONAL BIN STEP                                             DEGREES                    3            0  19
+ 025107 FIRST WAVELENGHT BIN                                             M                          3            0  29
+ 025108 LAST WAVELENGHT BIN                                              M                          3            0  29
+ 025110 IMAGE PROCESSING SUMMARY                                         FLAG TABLE 025110          0            0  10
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8
+ 025120 RA2_L2_PROCESSING FLAG                                           CODE TABLE 025120          0            0   2
+ 025121 RA2_L2_PROCESSING QUALITY                                        %                          0            0   7
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 025122          0            0   2
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 025123          0            0   2
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 025124          0            0   2
+ 025125 MWR L2 PROCESSING QUALITY                                        %                          0            0   7
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16
+ 025127 SEA SURFACE HEIGHT CORRECTION DUE TO PRESSURE LOADING            M                          3       -32768  16
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16
+ 025137 SEA STATE BIAS CORRECTION ON S  BAND                             M                          3       -32768  16
+ 025138 AVERAGE SIGNAL TO NOISE RATIO                                    NUMERIC                    0        -2048  12
+ 025193 ATTENUATION CORRECTION ON SIGMA0                                 dB                         3            0  14  
+ 025194 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4  
+ 025197 ANTENNA CORRECTIONS VERSION NUMBER                               NUMERIC                    0            0   5  
+ 025198 LOG (TEMP-RAD CENTRAL WAVE NUMBER)                               1/M                        8            0  30  
+ 025199 BANDWIDTH CORRECTION COEFFICIENT 1                               NUMERIC                    4       -10000  15  
+ 025200 BANDWIDTH CORRECTION COEFFICIENT 2                               NUMERIC                    5            0  17  
+ 025201 ALBEDO-RAD SOLAR FILTERED IRRADIANCE                             NUMERIC                    4            0  24  
+ 025202 ALBEDO-RAD EQUIVALENT FILTER WIDTH                               NUMERIC                   10            0  14  
+ 025203 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE  25081          0            0  31  
+ 025204 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE  25082          0            0  31  
+ 025205 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE  25083          0            0  31  
+ 025206 FOV QUALITY FLAGS FOR ATOVS                                      FLAG TABLE  25084          0            0  31  
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 026010          0            0  26
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11
+ 026193 YEAR                                                             YEAR                       0            0  12  
+ 026194 MONTH                                                            MONTH                      0            0   4  
+ 026195 DAY                                                              DAY                        0            0   6  
+ 026196 HOUR                                                             HOUR                       0            0   5  
+ 026197 MINUTE                                                           MINUTE                     0            0   6  
+ 026198 SECOND                                                           SECOND                     0            0   6  
+ 026200 LOCATION WITHIN ASSIMILATION WINDOW IN TIME                      NUMERIC                    6            0  20  
+ 026201 HOURS INCLUDED                                                   FLAG TABLE  26201          0            0  26  
+ 027001 LATITUDE(HIGH ACCURACY)                                          DEGREE                     5     -9000000  25
+ 027002 LATITUDE(COARSE ACCURACY)                                        DEGREE                     2        -9000  15
+ 027003 ALTERNATE LATITUDE                                               DEGREE                     2        -9000  15
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31
+ 027035 LENGTH OF PHENOMENON                                             M                         -3            0  13
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16
+ 027193 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16  
+ 028001 LONGITUDE(HIGH ACCURACY)                                         DEGREE                     5    -18000000  26
+ 028002 LONGITUDE(COARSE ACCURACY)                                       DEGREE                     2       -18000  16
+ 028003 ALTERNATE LONGITUDE                                              DEGREE                     2       -18000  16
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26
+ 028031 IN DIRECTION 90 DEGREES EAST,DISTANCE FROM THE EARTH'S CENTRE    M                          2  -1073741824  31
+ 028035 WIDTH OF PHENOMENON                                              M                         -3            0  13
+ 029001 PROJECTION TYPE                                                  CODE TABLE 029001          0            0   3
+ 029002 COORDINATE GRID TYPE                                             CODE TABLE 029002          0            0   3
+ 030001 PIXEL VALUE(4 BITS)                                              NUMERIC                    0            0   4
+ 030002 PIXEL VALUE(8 BITS)                                              NUMERIC                    0            0   8
+ 030004 PIXEL VALUE(16 BITS)                                             NUMERIC                    0            0  16
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12
+ 030031 PICTURE TYPE                                                     CODE TABLE 030031          0            0   4
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 030032          0            0  16
+ 030193 POSITION NUMBER ALONG SCAN                                       NUMERIC                    0            0   8  
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 031021          0            0   6
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 031031          0            0   1
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1
+ 033002 QUALITY INFORMATION                                              CODE TABLE 033002          0            0   2
+ 033003 QUALITY INFORMATION                                              CODE TABLE 033003          0            0   3
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 033005          0            0  30
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 033006          0            0   3
+ 033007 % CONFIDENCE                                                     %                          0            0   7
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 033020          0            0   3
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 033021          0            0   2
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 033022          0            0   2
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 033023          0            0   2
+ 033024 STATION ELEVATION QUALITY MARK  (FOR MOBILE STATION)             CODE TABLE 033024          0            0   4
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 033025          0            0   3
+ 033026 MIXING RATIO QUALITY                                             CODE TABLE 033026          0            0   6
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66% CONFIDENCE)       CODE TABLE 033027          0            0   3
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 033030          0            0  24
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 033031          0            0  24
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 033032          0            0  24
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 033033          0            0  24
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 033035          0            0   4
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 033037          0            0  20
+ 033038 QUALITY FLAG FOR GROUND BASED GNSS DATA                          FLAG TABLE 033038          0            0  10
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 033041          0            0   2
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 033043          0            0   8
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 033044          0            0  15
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 033047          0            0  31
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 033048          0            0   2
+ 033049 CONFIDENCE MEASURE OF WIND RETIEVAL                              CODE TABLE 033049          0            0   2
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 033050          0            0   4
+ 033051 ASAR QUALITY INFORMATION                                         FLAG TABLE 033051          0            0  15
+ 033052 S  BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 033052          0            0  21
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 033053          0            0  21
+ 033054 DATA EXTRACTION INDICATOR                                        FLAG TABLE 033054          0            0   8
+ 033192 TEM1 CONFIDENCE                                                  %                          0            0   7  
+ 033193 DATA QUALITY 3 BIT CODE                                          CODE TABLE  33193          0            0   3  
+ 033194 DATA QUALITY 2 BIT CODE                                          CODE TABLE  33194          0            0   2  
+ 033195 ECMWF SAR QC INDICATOR                                           CODE TABLE  33195          0            0   5  
+ 033196 ECMWF WAM QC INDICATOR                                           CODE TABLE  33196          0            0   2  
+ 033197 ECMWF SAR INVERSION QC INDICATOR                                 CODE TABLE  33197          0            0   3  
+ 033198 MINIMUM COST                                                     NUMERIC                    4            0  14
+ 033199 1D VAR TOTAL PRECIPITABLE WATER RETRIEVED ERROR(S)               KG/M**2                    2            0  11
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE  33200          0            0  31  
+ 033201 ANALYSIS REPORT STATUS EVENT                                     FLAG TABLE  33201          0            0  13  
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE  33202          0            0  31  
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE  33203          0            0  11  
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE  33204          0            0  21  
+ 033205 VARIATIONAL ANALYSIS BLACK LIST FLAG                             CODE TABLE  33205          0            0   4  
+ 033206 VARIATIONAL ANALYSIS QUALITY CONTROL FLAG                        CODE TABLE  33206          0            0   4  
+ 033207 VARIATIONAL ANALYSIS DEPARTURE FLAG                              CODE TABLE  33207          0            0   4  
+ 033208 VARIATIONAL ANALYSIS FIRST QUESS CHECK FLAG                      CODE TABLE 033208          0            0   4
+ 033209 VARIATIONAL ANALYSIS FINAL FLAG                                  CODE TABLE  33209          0            0   4  
+ 033210 INCREMENTAL VARIATIONAL ANALYSIS UPDATE NUMBER                   NUMERIC                    0            0   7
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10
+ 033212 1D VAR ITERATION NUMBER                                          NUMERIC                    0            0  10
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE  33214          0            0  11  
+ 033215 DIRECTIONAL SKILL                                                NUMERIC                    1        -4096  13
+ 033216 1D VAR SURFACE TYPE QUALITY CONTROL                              CODE TABLE  33216          0            0   3  
+ 033217 1D VAR FAILURE INDICATOR                                         CODE TABLE  33217          0            0   2  
+ 033218 1D VAR ESTIMATE OF SCATTERING                                    NUMERIC                    2            0  12
+ 033219 SSMI INDIPENDENT SCATTERING INDEX                                NUMERIC                    2       -50000  16
+ 033220 VARIATIONAL ANALYSIS REPORT EVENTS (1)                           FLAG TABLE  33220          0            0  31  
+ 033221 VARIATIONAL ANALYSIS SYNOP EVENTS (2)                            FLAG TABLE  33221          0            0  31  
+ 033222 VARIATIONAL ANALYSIS AIREP EVENTS (2)                            FLAG TABLE  33222          0            0  31  
+ 033223 VARIATIONAL ANALYSIS SATOB EVENTS (2)                            FLAG TABLE  33223          0            0  31  
+ 033224 VARIATIONAL ANALYSIS DRIBU EVENTS (2)                            FLAG TABLE  33224          0            0  31  
+ 033225 VARIATIONAL ANALYSIS TEMP EVENTS (2)                             FLAG TABLE  33225          0            0  31  
+ 033226 VARIATIONAL ANALYSIS PILOT EVENTS (2)                            FLAG TABLE  33226          0            0  31  
+ 033227 VARIATIONAL ANALYSIS SATEM/TOVS EVENTS (2)                       FLAG TABLE  33227          0            0  31  
+ 033228 VARIATIONAL ANALYSIS PAOB EVENTS (2)                             FLAG TABLE  33228          0            0  31  
+ 033229 VARIATIONAL ANALYSIS SCATTEROMETER EVENTS (2)                    FLAG TABLE  33229          0            0  31  
+ 033230 VARIATIONAL ANALYSIS RAW RADIANCES EVENTS (2)                    FLAG TABLE  33230          0            0  31  
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE  33231          0            0   6  
+ 033232 REPORT BLACK LIST EVENTS                                         FLAG TABLE  33232          0            0  31  
+ 033233 VARIATIONAL ANALYSIS REPORT STATUS                               FLAG TABLE  33233          0            0  31  
+ 033234 VARIATIONAL ANALYSIS DATUM STATUS                                FLAG TABLE  33234          0            0  31  
+ 033236 VARIATIONAL ANALYSIS DATUM EVENTS (1)                            FLAG TABLE  33236          0            0  31  
+ 033237 VARIATIONAL ANALYSIS SYNOP DATUM EVENTS (2)                      FLAG TABLE 033237          0            0  31
+ 033238 VARIATIONAL ANALYSIS AIREP DATUM EVENTS (2)                      FLAG TABLE 033238          0            0  31
+ 033239 VARIATIONAL ANALYSIS SATOB DATUM EVENTS (2)                      FLAG TABLE 033239          0            0  31
+ 033240 VARIATIONAL ANALYSIS DRIBU DATUM EVENTS (2)                      FLAG TABLE 033240          0            0  31
+ 033241 GROSS ERROR PROBABILITY                                          NUMERIC                    3            0  10
+ 033242 GROSS ERROR INDICATOR                                            CODE TABLE  33242          0            0   2  
+ 033243 VARIATIONAL ANALYSIS TEMP DATUM EVENTS (2)                       FLAG TABLE  33243          0            0  31  
+ 033244 VARIATIONAL ANALYSIS PILOT DATUM EVENTS (2)                      FLAG TABLE 033244          0            0  31
+ 033245 VARIATIONAL ANALYSIS SATEM/TOVS DATUM EVENTS (2)                 FLAG TABLE  33245          0            0  31  
+ 033246 VARIATIONAL ANALYSIS PAOB DATUM EVENTS (2)                       FLAG TABLE  33246          0            0  31  
+ 033247 VARIATIONAL ANALYSIS SCATTEROMETER DATUM EVENTS (2)              FLAG TABLE  33247          0            0  31  
+ 033248 VARIATIONAL ANALYSIS RAW RADIANCES DATUM EVENTS (2)              FLAG TABLE  33248          0            0  31  
+ 033249 DATUM BLACK LIST EVENTS                                          FLAG TABLE  33249          0            0  31  
+ 033250 PROBABILITY OF GROSS ERROR                                       NUMERIC                    6            0  20
+ 033251 RANGE OF POSSIBLE VALUES                                         NUMERIC                    2            0  14
+ 033252 MANUAL-AUTOMATIC QUALITY CONTROL                                 CODE TABLE  33252          0            0   4  
+ 033253 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7
+ 033254 WIND CORRELATION METHOD                                          FLAG TABLE  33254          0            0  20  
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 035000          0            0  10
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 035001          0            0   3
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 035030          0            0   4
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 035031          0            0   7
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 035032          0            0   4
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 035033          0            0   7
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 035034          0            0   3
+ 049193 SAR INVERSION QC FLAGS                                           FLAG TABLE  49193          0            0  15  
+ 049194 ALTIMETER WAVE HEIGHT QC FLAFS                                   FLAG TABLE  49194          0            0  15  
+ 062190 STATISTICS APPLICATION                                           CODE TABLE  62190          0            0   8  
+ 062191 TYPE OF STATISTICS                                               CODE TABLE  62191          0            0   8  
+ 063190 APPLICATION DERIVING SUBSTITUTE OR ALTERNATIVE VALUE             CODE TABLE  63190          0            0   8  
diff --git a/bufrtables/B0000000000098006001.TXT b/bufrtables/B0000000000098006001.TXT
new file mode 100755
index 0000000..9a6566e
--- /dev/null
+++ b/bufrtables/B0000000000098006001.TXT
@@ -0,0 +1,985 @@
+ 000001 TABLE A: ENTRY                                                   CCITTIA5                   0            0  24  
+ 000002 TABLE A: DATA CATEGORY DESCRIPTION, LINE 1                       CCITTIA5                   0            0 256  
+ 000003 TABLE A: DATA CATEGORY DESCRIPTION, LINE 2                       CCITTIA5                   0            0 256  
+ 000005 BUFR EDITION NUMBER                                              CCITTIA5                   0            0  24  
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8  
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16  
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24  
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256  
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256  
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192  
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8  
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24  
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8  
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80  
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24  
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48  
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7  
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10  
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE   1003          0            0   3  
+ 001004 WMO REGION SUB-AREA                                              NUMERIC                    0            0   3  
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17  
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64  
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE   1007          0            0  10  
+ 001008 AIRCRAFT REGISTRATION NUMBER                                     CCITTIA5                   0            0  64  
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64  
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER(C-MAN BUOYS)                 CCITTIA5                   0            0  64  
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72  
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM                 DEGREE TRUE                0            0   9  
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM                     M/S                        0            0  10  
+ 001014 PLATFORM DRIFT SPEED(HIGH PRECISION                              M/S                        2            0  10  
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160  
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4  
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14  
+ 001022 NAME OF FEATURE                                                  CCITTIA5                   0            0 224
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24  
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64  
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE   1031          0            0  16  
+ 001032 GENERATING APPLICATION                                           CODE TABLE   1032          0            0   8  
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE   1033          0            0   8  
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE   1034          0            0   8  
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT                     M/S                        5  -1073741824  31  
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT                    M/S                        5  -1073741824  31  
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT                     M/S                        5  -1073741824  31  
+ 001060 AIRCRAFT REPORTING POINT(BEACON IDENTIFIER)                      CCITTIA5                   0            0  64  
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64  
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32  
+ 001075 TIDE STATION IDENTIFIER                                          CCITTIA5                   0            0  40  
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE   1192          0            0   8  
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE   1193          0            0   4  
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72  
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72  
+ 001196 CONSTANT LEVEL BALLOON IDENTIFIER                                CCITTIA5                   0            0  72  
+ 001197 RTP - PLATFORM TYPE                                              CODE TABLE   1197          0            0  10  
+ 001198 ITP - DECK ID                                                    CODE TABLE   1198          0            0  10  
+ 001199 DUP - DUPLICATE STATUS                                           CODE TABLE   1199          0            0   4  
+ 001201 GENERATING APPLICATION                                           CODE TABLE   1201          0            0   8  
+ 001205 SATELLITE IDENTIFIER                                             CODE TABLE   1205          0            0  10  
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31  
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31  
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31  
+ 002001 TYPE OF STATION                                                  CODE TABLE   2001          0            0   2  
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE   2002          0            0   4  
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE   2003          0            0   4  
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUEMENT               CODE TABLE   2004          0            0   4  
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7  
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE   2011          0            0   8  
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE   2012          0            0   4  
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE   2013          0            0   4  
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE   2014          0            0   7  
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE   2015          0            0   4  
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE   2019          0            0  11
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE   2020          0            0   9
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE   2021          0            0   9  
+ 002022 SATELLITE DATA PROCESSING TECHNIQUE USED                         FLAG TABLE   2022          0            0   8  
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE   2023          0            0   4  
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE   2024          0            0   4  
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE   2025          0            0  25  
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12  
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12  
+ 002028 RADIOMETER IDENTIFIER                                            CODE TABLE   2028          0            0  11
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE   2030          0            0   3  
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE   2031          0            0   5  
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE   2032          0            0   2  
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE   2033          0            0   3  
+ 002034 DROGUE TYPE                                                      CODE TABLE   2034          0            0   5  
+ 002035 CABLE LENGTH                                                     M                          0            0   9  
+ 002036 BUOY TYPE                                                        CODE TABLE   2036          0            0   2  
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE   2037          0            0   3  
+ 002038 METHOD OF SEA-SURFACE TEMPERATURE MEASUREMENT                    CODE TABLE   2038          0            0   4  
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE   2039          0            0   3  
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE   2040          0            0   4  
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE   2041          0            0   6  
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE METHOD         CODE TABLE   2044          0            0   4  
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE   2045          0            0   4  
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE   2046          0            0   4  
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE   2048          0            0   4  
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE   2049          0            0   8  
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE   2050          0            0  20  
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE   2051          0            0   4  
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE   2052          0            0   6  
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE   2053          0            0   4  
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE   2054          0            0   4  
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE   2055          0            0   4  
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACYSTATISTICS                       CODE TABLE   2056          0            0   4  
+ 002057 ORIGIN OF FIRST GUESS INFORMATION                                CODE TABLE   2057          0            0   4  
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE   2058          0            0   4  
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE   2059          0            0   4  
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE   2060          0            0   4  
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE   2061          0            0   3  
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE   2062          0            0   4  
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16  
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE   2064          0            0   2
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE   2070          0            0   4  
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12  
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE   2101          0            0   4  
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8  
+ 002103 RADOME                                                           FLAG TABLE   2103          0            0   2  
+ 002104 ANTENNA POLARISATION                                             CODE TABLE   2104          0            0   4  
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6  
+ 002106 3-dB BEAMWIDTH                                                   DEGREE                     1            0   6  
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6  
+ 002108 CROSSPOL DISCRIMINATION(ON AXIS)                                 dB                         0            0   6  
+ 002109 ANTENNA SPEED(AZIMUTH)                                           DEGREE/S                   2            0  12  
+ 002110 ANTENNA SPEED(ELEVATION)                                         DEGREE/S                   2            0  12  
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10  
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12  
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4  
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15  
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7  
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8  
+ 002123 PEAK POWER                                                       W                         -4            0   7  
+ 002124 AVERAGE POWER                                                    W                         -1            0   7  
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8  
+ 002126 PULSE WIDTH                                                      S                          7            0   6  
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7  
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6  
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5  
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7  
+ 002131 SENSITIVITY TIME CONTROL                                         FLAG TABLE   2131          0            0   2  
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6  
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6  
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16  
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15  
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16  
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9  
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24  
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/IDENTIFICATION                    CCITTIA5                   0            0  32  
+ 002143 OZON INSTRUMENT TYPE                                             CODE TABLE   2143          0            0   7  
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTROPHOTOMETER                   CODE TABLE   2144          0            0   4  
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE   2145          0            0   4  
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE   2146          0            0   4  
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION                                 CODE TABLE   2150          0            0   6
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE   2151          0            0  11
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING                     FLAG TABLE   2152          0            0  31
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 002158          0            0   9
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 002159          0            0   8
+ 002160 ASCENDING/DESCENDING ORBIT DESIGNATOR                            CODE TABLE 002160          0            0   2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 002163          0            0   4
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 002164          0            0   3
+ 002166 RADIANCE TYPE                                                    CODE TABLE 002166          0            0   4
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 002167          0            0   4
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 002169          0            0   4
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE   2172          0            0   8
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9  
+ 002193 1D VAR SATELLITE CHANNEL(S) USED                                 FLAG TABLE   2193          0            0  28  
+ 002194 CONSTANT LEVEL BALLOON TYPE                                      CODE TABLE   2194          0            0   4  
+ 002195 TYPE OF SATELLITE INSTRUMENTATION                                CODE TABLE   2195          0            0   4  
+ 002196 SATELLITE CLASSIFICATION                                         CODE TABLE   2196          0            0   9  
+ 002197 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26  
+ 002198 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26  
+ 002199 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE   2199          0            0   4  
+ 002201 SIMULATED SATELLITE INSTRUMENT                                   FLAG TABLE   2201          0            0   4  
+ 002202 SIMULATED DATA PROCESSING TECHNIQUE USED                         FLAG TABLE   2202          0            0   4  
+ 002220 DATA PRODUCER                                                    CODE TABLE   2220          0            0   9  
+ 002221 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18
+ 002222 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18
+ 002223 TOVS/ATOVS/AVHRR CHANNEL NUMBER                                  CODE TABLE   2223          0            0   6
+ 002231 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE   2231          0            0   4
+ 002232 TRACER CORRELATION METHOD                                        CODE TABLE   2232          0            0   3
+ 002240 TYPE OF TERMODYNAMIC SENSING                                     CODE TABLE   2240          0            0   8
+ 002241 TYPE OF ROCKET MOTOR                                             CODE TABLE   2241          0            0   3
+ 002242 TYPE OF WIND SENSING EQUIPMENT                                   CODE TABLE   2242          0            0   8
+ 002243 TERMODYNAMIC CORRECTION TECHNIQUE                                CODE TABLE   2243          0            0   3
+ 002244 WIND CORRECTION TECHNIQUE                                        CODE TABLE   2244          0            0   3
+ 002245 METHOD OF REDUCING OF DATA                                       CODE TABLE   2245          0            0   4
+ 002251 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE   2251          0            0   4
+ 002252 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE   2252          0            0  31  
+ 002253 HUMIDITY COMPUTATIONAL METHOD                                    CODE TABLE   2253          0            0   8  
+ 002254 RADIANCE TYPE                                                    CODE TABLE   2254          0            0   4  
+ 004001 YEAR                                                             YEAR                       0            0  12  
+ 004002 MONTH                                                            MONTH                      0            0   4  
+ 004003 DAY                                                              DAY                        0            0   6  
+ 004004 HOUR                                                             HOUR                       0            0   5  
+ 004005 MINUTE                                                           MINUTE                     0            0   6  
+ 004006 SECOND                                                           SECOND                     0            0   6  
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11  
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11  
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11  
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11  
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12  
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13  
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11  
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11  
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11  
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12  
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12  
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13  
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8  
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6  
+ 004041 TIME DIFFERENCE, UTC-LMT                                         MINUTE                     0        -1440  12  
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9  
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6  
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25  
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15  
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25  
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15  
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16  
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16  
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12  
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12  
+ 005033 PIXEL SIZE ON HORIZONTAL-1                                       M                         -1            0  16  
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24  
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8  
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6  
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8  
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5  
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5  
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10  
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31  
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16  
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26  
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16  
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26  
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16  
+ 006021 DISTANCE                                                         M                         -1            0  13  
+ 006030 WAVENUMBER (SPECTRAL)                                            RAD/M                      5            0  13  
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12  
+ 006033 PIXEL SIZE ON HORIZONTAL-2                                       M                         -1            0  16  
+ 006034 CROSS TRACK CELL NUMBER                                          NUMERIC                    0            0   7
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6  
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7  
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31  
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13  
+ 007001 HEIGHT OF STATION                                                M                          0         -400  15  
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16  
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17  
+ 007004 PRESSURE                                                         PA                        -1            0  14  
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12  
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15  
+ 007007 HEIGHT                                                           M                          0        -1000  17  
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20  
+ 007021 ELEVATION                                                        DEGREE                     2        -9000  15  
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15  
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15  
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14  
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17  
+ 007190 HEIGHT INCREMENT                                                 M                          1        -1024  12  
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31  
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE   8001          0            0   7  
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE   8002          0            0   6  
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE   8003          0            0   6  
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE   8004          0            0   3  
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE   8005          0            0   4  
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE   8006          0            0  10
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE   8007          0            0   4
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE   8011          0            0   6  
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE   8012          0            0   2  
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE   8013          0            0   2  
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE   8014          0            0   4  
+ 008016 CHANGE INDICATOR OF A TREND-TYPEFORECAST OR AN AERODROME FORECAS CODE TABLE   8016          0            0   3  
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE   8017          0            0   2  
+ 008018 SEAWINDS LAND/ICE SURFACE FLAG                                   FLAG TABLE   8018          0            0  17
+ 008020 TOTAL NUMBER OF MISSING ENTITIES(WITH RESPECT TO ACCUMULATION)   NUMERIC                    0            0  16  
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE   8021          0            0   5  
+ 008022 TOTAL NUMBER(WITH RESPECT TO ACCUMULATION OR AVERAGE)            NUMERIC                    0            0  16  
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE   8023          0            0   6  
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE   8024          0            0   6  
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE   8025          0            0   4  
+ 008030 MANUAL ON CODES (VOL i.1 sECTION C CODE TABLE FROM WHICH DATA AR NUMERIC                    0            0  13  
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 008033          0            0   7
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE   8051          0            0   3  
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE   8052          0            0   5  
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE   8053          0            0   2  
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE   8060          0            0   4
+ 008065 TYPE OF PRECIPITATION                                            FLAG TABLE   8065          0            0  12
+ 008066 PRECIPITATION OCCURRENCE                                         CODE TABLE   8066          0            0   3
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE   8070          0            0   4
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE   8072          0            0   3 
+ 008193 TIME QUALIFIER                                                   CODE TABLE   8193          0            0   6 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE   8194          0            0   4
+ 008195 DATA TYPE                                                        CODE TABLE   8195          0            0   7
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8  
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE   8222          0            0   4  
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE   8223          0            0   7  
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15  
+ 010002 HEIGHT                                                           M                         -1          -40  16  
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17  
+ 010004 PRESSURE                                                         PA                        -1            0  14  
+ 010007 HEIGHT                                                           M                          0        -1000  17  
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20  
+ 010031 IN DIRECTION OF THE NORTH POLE  , DISTANCE FROM THE EARTH CENTRE m                          2  -1073741824  31  
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16  
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14  
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14  
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11  
+ 010061 3 HOUR PRESSURE CHANGE                                           PA                        -1         -500  10  
+ 010062 24 HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11  
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE  10063          0            0   4  
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20  
+ 010196 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15
+ 010197 ANEMOMETER HEIGHT                                                M                          0            0   9
+ 010200 SURFACE PRESSURE ( SP GRIB )                                     PA                        -1            0  14
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9  
+ 011002 WIND SPEED                                                       M/S                        1            0  12  
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13  
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13  
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10  
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13  
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9  
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12  
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9  
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12  
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9  
+ 011017 EXTREME CLOCKWISE WIND DIRECTIONOF A VARIABLE WIND               DEGREE TRUE                0            0   9  
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17  
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17  
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17  
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE  11031          0            0   4  
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16  
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16  
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11  
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14  
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10  
+ 011041 MAXIMUM WIND SPEED (GUSTS)                                       M/S                        1            0  12  
+ 011042 MAXIMUM WIND SPEED (10 MIN MEAN WIND)                            M/S                        1            0  12  
+ 011043 MAKSIMUM WIND GUST DIRECTION                                     DEGREE TRUE                0            0   9  
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9  
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12  
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9  
+ 011050 STANDARD DEVIATION OF HORIZONTALWIND SPEED                       M/S                        1            0  12  
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8  
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12  
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12  
+ 011070 RUNWAY DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR(INCLUING  CCITTIA5                   0            0  32  
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14  
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11  
+ 011073 TURBULENT KENETIC ENERGY                                         M**2/S**2                  2        -1024  13  
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10  
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                m**(2/3)/S                 2            0   8
+ 011081 MODEL WIND DIRECTION AT 10 M                                     DEGREE TRUE                2            0  16
+ 011082 MODEL WIND SPEED AT 10 M                                         M/S                        2            0  14
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011195 STEADINESS OF WIND                                               %                          0            0   7
+ 011196 FRICTION VELOCITY                                                M/S                        5            0  19
+ 011201 HORIZONTAL LINE OF SIGHT COMPONENT                               M/S                        1        -4096  13  
+ 011210 1D VAR WIND SPEED RETREIVED ERRO(S)                              M/S                        2            0  12  
+ 011211 WIND SPEED INDEPENDENT ESTIMATE OF ERROR(S)                      M/S                        2            0  12  
+ 011220 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  12  
+ 011221 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15  
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13
+ 012001 TEMPERATURE/DRY BULB TEMPERATURE                                 K                          1            0  12  
+ 012002 WET BULB TEMPERATURE                                             K                          1            0  12  
+ 012003 DEW POINT TEMPERATURE                                            K                          1            0  12  
+ 012004 DRY BULB TEMPERATURE AT 2M                                       K                          1            0  12  
+ 012005 WET BULB TEMPERATURE AT 2M                                       K                          1            0  12  
+ 012006 DEW POINT TEMPERATURE AT 2M                                      K                          1            0  12  
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12  
+ 012011 MAXIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12  
+ 012012 MINIMUM TEMPERATURE,AT HEIGHT AND OVER PERIOD SPECIFIED          K                          1            0  12  
+ 012013 GROUND MINIMUM TEMPERATURE PAST 12 HOURS                         K                          1            0  12  
+ 012014 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12  
+ 012015 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          1            0  12  
+ 012016 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12  
+ 012017 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          1            0  12  
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12  
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10  
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12  
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12  
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12  
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12  
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12  
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12
+ 012073 TEMPERATURE                                                      K                          1            0  12
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16
+ 012193 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12  
+ 012194 RADIANCE                                                         W/M**2*STER*M**(-1)        6            0  31  
+ 012195 SPECTRAL RADIANCE                                                W/M**2*STER*M**(-1)       10            0  31
+ 012196 RADIANCE                                                         W/M**2*STER                3            0  16
+ 012197 MAXIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12
+ 012198 MINIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12
+ 012199 MAXIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12
+ 012200 MINIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12
+ 012211 SOIL TEMPERATURE LEVEL 1 ( STL1  GRIB)                           K                          2            0  16
+ 012212 SOIL TEMPERATURE LEVEL 2 ( STL2  GRIB)                           K                          2            0  16
+ 012213 SOIL TEMPERATURE LEVEL 3 ( STL3  GRIB)                           K                          2            0  16
+ 012214 SOIL TEMPERATURE LEVEL 4 ( STL4  GRIB)                           K                          2            0  16
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14  
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14  
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7  
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10  
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7  
+ 013006 MIXING HEIGHT                                                    M                         -1          -40  16  
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14  
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12  
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16  
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGE RATE)                 KG/(M**2)S                 4            0  12  
+ 013015 SNOWFALL (AVERAGE RATE)                                          M/S                        7            0  12  
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7  
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14  
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14  
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14  
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14  
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14  
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7  
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8  
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10  
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE  13038          0            0   2  
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE  13039          0            0   3  
+ 013041 PASQUILL-GILLFORD STABILITY CATEGORY                             CODE TABLE  13041          0            0   4  
+ 013042 PARCEL LIFTED INDEX (TO 500 hPa)                                 K                          0          -20   6  
+ 013043 BEST LIFTED INDEX (TO 500 hPa)                                   K                          0          -20   6  
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE  13051          0            0   4  
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14  
+ 013055 INTENSITY OF PRECIPITATION                                       KG/M**2S                   4            0   8
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7
+ 013059 NUMBER OF FLASHES                                                NUMERIC                    0            0   7
+ 013192 RELATIVE HUMIDITY AT 2 M                                         %                          0            0   8  
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8  
+ 013194 TOTAL COLUMN WATER                                               KG/M**2                    2            0  11  
+ 013195 RAIN RATE                                                        KG/M**2HOUR                0            0   5  
+ 013196 ANTECEDENT PRECIPITATION INDEX                                   KG/M**2                    0            0   7  
+ 013197 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    1            0  10  
+ 013198 RAIN FLAG                                                        CODE TABLE  13198          0            0   3  
+ 013199 SPECIFIC HUMIDITY AT 2 M                                         KG/KG                      5            0  14  
+ 013201 CLOUD LIQUID WATER                                               KG/KG                      7            0  14  
+ 013202 TYPE OF SURFACE                                                  CODE TABLE  13202          0            0   8  
+ 013203 1D VAR ESTIMATE OF RAIN RATE                                     KG/M**2*HOUR               2            0  12  
+ 013204 SSMI INDEPENDENT ESTIMATE OF RAIN RATE                           KG/M**2*HOUR               2            0  12  
+ 013205 CLOUD LIQUID WATER PATH                                          KG/M**2                    4            0  14  
+ 013206 TOTAL PRECIPITATION ICE CONTENT                                  KG/M**2                    6            0  14
+ 013207 TOTAL CLOUD LIQUID WATER                                         KG/M**2                    6            0  14
+ 013208 SURFACE RAIN RATE ( INSTANTANEOUS )                              KG/M**2*S                  5            0  17
+ 013209 RAIN POSSIBILITY                                                 NUMERIC                    0         -256   9
+ 013210 1D VAR CLOUD LIQUID WATER PATH RETRIEVED ERROR(S)                KG/M**2                    4            0  14  
+ 013211 TOTAL PRECIPITABLE WATER INDIPENDENT ESTIMATE OF ERROR(S)        KG/M**2                    2            0  11  
+ 013212 CLOUD LIQUID WATER PATH INDIPENDENT ESTIMATE OF ERROR(S)         KG/M**2                    4            0  14  
+ 013221 VOLUMETRIC SOIL WATER LAYER 1 ( SWVL1 GRIB)                      M**3/M**3                  5            0  17
+ 013222 VOLUMETRIC SOIL WATER LAYER 2 ( SWVL2 GRIB)                      M**3/M**3                  5            0  17
+ 013223 VOLUMETRIC SOIL WATER LAYER 3 ( SWVL3 GRIB)                      M**3/M**3                  5            0  17
+ 013224 VOLUMETRIC SOIL WATER LAYER 4 ( SWVL4 GRIB)                      M**3/M**3                  5            0  17
+ 013230 CONVECTIVE PRECIPITATION                                         KG/M**2                    1           -1  14
+ 013231 LARGE SCALE PRECIPITATION                                        KG/M**2                    1           -1  14
+ 013233 FRACTION OF TOTAL PRECIPITATION IN SOLID FORM (SNOW)             M                          4            0  18
+ 013234 SNOW DEPTH (WATER EQUIVALENT SD GRIB)                            M                          4            0  14
+ 013240 AIR DENSITY                                                      KG/M**3                    3            0  10
+ 013241 CONVECTIVE AVAILABLE POTENTIAL ENERGY                            J/KG                       1            0  17
+ 014001 LONG-WAVE RADIATION,INTEGRATED OVER 24 HOURS                     J/M**2                    -3        -2048  12  
+ 014002 LONG-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED             J/M**2                    -3        -2048  12  
+ 014003 SHORT-WAVE RADIATION,INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12  
+ 014004 SHORT-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12  
+ 014011 NET LONG-WAVE RADIATION,INTEGRATED OVER 24 HOURS                 J/M**2                    -3        -2048  12  
+ 014012 NET LONG-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -3        -2048  12  
+ 014013 NET SHORT-WAVE RADIATION,INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12  
+ 014014 NET SHORT-WAVE RADIATION,INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12  
+ 014015 NET RADIATION INTEGRATED OVER 24HOURS                            J/M**2                    -4       -16384  15  
+ 014016 NET RADIATION,INTEGRATED OVER PERIOD SPECIFIED                   J/M**2                    -4       -16384  15  
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION                                J/M**2                    -3        -2048  12  
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION                               J/M**2                    -3        -2048  12  
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7  
+ 014020 GLOBAL SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15  
+ 014021 GLOBAL RADIATION INTEGRATED OVERPERIOD SPECIFIED                 J/M**2                    -4            0  15  
+ 014022 DIFFUSE SOLAR RADIATION INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15  
+ 014023 DIFFUSE SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15  
+ 014024 DIRECT SOLAR RADIATION INTEGRATED OVER 24 HOURS                  J/M**2                    -4            0  15  
+ 014025 DIRECT SOLAR RADIATION INTEGRATED OVER PERIOD SPECIFIED          J/M**2                    -4            0  15  
+ 014026 ALBEDO AT THE TOP OF CLOUD                                       %                          0            0   7  
+ 014027 ALBEDO                                                           %                          0            0   7
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11  
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10  
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9  
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11
+ 014042 BIDIRECTIONAL REFLECTANCE                                        %                          0            0   7  
+ 014045 CHANNEL RADIANCE                                                 (W/m**2)*(1/sr)*cm         0            0  11
+ 014200 SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)                    W/(M**2 )*S               -2            0  24
+ 015001 OZONE                                                            DOBSON                     0            0  10  
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10  
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         5            0  12
+ 015004 OZONE SOUNDING CORRECTION FACTOR (CF)                            NUMERIC                    3            0  14
+ 015005 OZONE p                                                          DOBSON                     0            0  10
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG(1/M**2)                3        14000  13  
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31  
+ 015020 INTEGRATED OZONE DENSITY                                         KG/M**2                    8            0  21
+ 015202 INTEGRATED ELECTRON DENSITY                                      1/M**2                     3        13000  12  
+ 015231 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4            0  15
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE  19001          0            0   6  
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12  
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8  
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12  
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9  
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14  
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12  
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE  19008          0            0   3  
+ 019009 EFFECTIVE RADIUS WITH RESPECT TOWIND SPEEDS ABOVE TRESHOLD       M                         -3            0  12  
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13  
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7  
+ 020003 PRESENT WEATHER                                                  CODE TABLE  20003          0            0   9  
+ 020004 PAST WEATHER (1)                                                 CODE TABLE  20004          0            0   5  
+ 020005 PAST WEATHER (2)                                                 CODE TABLE  20005          0            0   5  
+ 020009 GENERAL WEATHER INDICATOR                                        CODE TABLE  20009          0            0   4  
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7  
+ 020011 CLOUD AMOUNT                                                     CODE TABLE  20011          0            0   4  
+ 020012 CLOUD TYPE                                                       CODE TABLE  20012          0            0   6  
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11  
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11  
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14  
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE  20017          0            0   4  
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE  20018          0            0   2  
+ 020019 SIGNIFICANT PRESENT OF FORECAST WEATHER                          CCITTIA5                   0            0  72  
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32  
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7  
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE  20032          0            0   3  
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE  20033          0            0   4  
+ 020034 SEA ICE CONCETRATION                                             CODE TABLE  20034          0            0   5  
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE  20035          0            0   4  
+ 020036 ICE SITUATION                                                    CODE TABLE  20036          0            0   5  
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE  20037          0            0   5  
+ 020038 BEARING OF ICE EDGE                                              DEGREE TRUE                0            0  12  
+ 020039 ICE DISTANCE                                                     M                         -1            0  13  
+ 020041 AIRFRAME ICING                                                   CODE TABLE  20041          0            0   4  
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7  
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7  
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7  
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12  
+ 020062 STATE OF GROUND (WITH OR WITHOUTSNOW                             CODE TABLE  20062          0            0   5  
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE  20063          0            0  10  
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE  20090          0            0   4
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE  20192          0            0  14  
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7  
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7  
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14
+ 020250 CALCULATED SURFACE TYPE                                          CODE TABLE  20250          0            0   5  
+ 020251 ICE AGE                                                          CODE TABLE  20251          0            0   3  
+ 020252 ICE EDGE                                                         CODE TABLE  20252          0            0   3  
+ 020253 SURFACE TYPE                                                     CODE TABLE  20253          0            0   3  
+ 020254 ICE CONCENTRATION                                                %                          0            0   7  
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7  
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7  
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7  
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6  
+ 021006 CIRCULAR DEPOLARIZATION RATIO                                    dB                         0          -65   6  
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8  
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8  
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION(VZ)                         M/S                        0         -128   8  
+ 021014 DOPPLER MEAN VELOCITY RADIAL                                     M/S                        1        -4096  13  
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8  
+ 021021 ECHO TOPS                                                        M                         -3            0   4  
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8  
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7  
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12  
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8  
+ 021051 SIGNAL POWER ABOVE 1 mW                                          dB                         0         -256   8  
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13  
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10  
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8  
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE                            FLAG TABLE  21066          0            0  12  
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE  21067          0            0  13  
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE  21068          0            0   8  
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE  21069          0            0  10  
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE  21072          0            0   4  
+ 021073 SATELLITE ALTIMETER INSTRUMENT MODE                              FLAG TABLE  21073          0            0   9  
+ 021075 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE  21076          0            0   3  
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10  
+ 021080 ALTITUDE CORRECTION (CALIBRATIONCONSTANT)                        M                          3            0  11  
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10  
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14  
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS-TRACK BAND NUMBER            NUMERIC                    0            0   4  
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5
+ 021104 LIKELIHOOD COMPUTED FOR WIND SOLUTION                            NUMERIC                    3       -30000  15
+ 021105 NORMALIZED RADAR CROSS SECTION                                   dB                         2       -10000  14
+ 021106 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14
+ 021107 Kp VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY FLAG                           FLAG TABLE  21109          0            0  17
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6
+ 021114 Kp VARIANCE COEFFICIENT (GAMMA)                                  dB                         3      -140000  18
+ 021115 SEAWINDS SIGMA-0 QUALITY FLAG                                    FLAG TABLE  21115          0            0  17
+ 021116 SEAWINDS SIGMA-0 MODE FLAG                                       FLAG TABLE  21116          0            0  17
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE  21119          0            0   6
+ 021120 SEAWINDS PROBABILITY OF RAIN                                     NUMERIC                    3            0  10
+ 021121 SEAWINDS NOF RAIN INDEX                                          NUMERIC                    0            0   8
+ 021122 ATTENUATION CORRECTION ON SIGMA-0 (FROM Tb)                      dB                         2       -10000  14
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13  
+ 021193 NOISE FIGURE                                                     %                          0            0   7  
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8  
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE  21196          0            0  12  
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE  21197          0            0  12  
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE  21198          0            0   8  
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE  21199          0            0   7  
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE  21200          0            0  15  
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE  21202          0            0   4  
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE  21203          0            0   9  
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10  
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE  21206          0            0   3  
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10  
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11  
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10  
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14  
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7  
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE  21214          0            0   3  
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4  
+ 021222 DOPPLER SPECTRUM 0 TH MOMENT (AMPLITUDE)                         dB                         0            0   7  
+ 021225 PRESCAT PRODUCT CONFIDENCE                                       FLAG TABLE  21225          0            0   6  
+ 021226 BACKSCATER DISTANCE                                              NUMERIC                    1        -4096  13  
+ 021230 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3  
+ 021231 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3  
+ 021232 TOTAL NMBER OF SIGMA-0 MEASUREMENTS                              NUMERIC                    0            0   5  
+ 021233 NUMBER OF SIGMA-0 USABLE FOR WIND                                NUMERIC                    0            0   5  
+ 021234 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    1       -10000  14  
+ 021235 WIND VECTOR CELL QUALITY FLAG                                    FLAG TABLE  21235          0            0   3  
+ 021236 NUMBER OF FORE-BEAM SIGMA-0                                      NUMERIC                    1            0   6  
+ 021237 NUMBER OF MID-BEAM V-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021238 NUMBER OF MID-BEAM H-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021239 NUMBER OF AFT-BEAM SIGMA-0                                       NUMERIC                    1            0   6  
+ 021240 NORMALIZED RADAR CROSS SECTION                                   NUMERIC                    2       -10000  14  
+ 021241 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    5            0  14  
+ 021242 Kp VARIANCE COEFFICIENT (BETHA)                                  NUMERIC                    6            0  16  
+ 021243 Kp VARIANCE COEFFICIENT (GAMMA)                                  NUMERIC                    6            0  16  
+ 021244 SIGMA-0 QUALITY FLAG                                             FLAG TABLE  21244          0            0  15  
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9  
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9  
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9  
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9  
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6  
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6  
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6  
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10  
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10  
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10  
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10  
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10  
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13  
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15  
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15  
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION(SURGE OF OFFSET)         M                          3        -5000  12  
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OF OFFSET)        M                          3        -5000  14  
+ 022041 SEA-SURFACE TEMPERATURE(15-DAY RUNNING MEAN)                     K                          1            0  12  
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12  
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15  
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14  
+ 022050 STANDARD DEVIATION SEA SURFACE TEMPERATURE                       K                          2            0   8  
+ 022061 STATE OF THE SEA                                                 CODE TABLE  22061          0            0   4  
+ 022062 SALINITY                                                         %.                         2            0  14  
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14  
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE  22067          0            0  10  
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE  22068          0            0   7  
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13  
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9  
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13  
+ 022073 MAXIMUM WAVE LENGTH                                              M                          2            0  13  
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9  
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13  
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9  
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9  
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12  
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16  
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10  
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13  
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRALWAVE DENSITY                     M**2S                      2            0  20  
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRALWAVE NUMBER                      M**3                       2            0  20  
+ 022084 BAND CONTAINING MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY    NUMERIC                    0            0   7  
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7  
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9  
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9  
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7  
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7  
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20  
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20  
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BYWAVE FREQUENCY                   M**2S/RAD                  2            0  20  
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BYWAVE NUMBER                      M**4                       2            0  20  
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7  
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUALWAVES                            DEGREE                     0            0   8  
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4  
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)        DEGREE                     0            0   9
+ 022101 TOTAL ENERGY (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS            NUMERIC                    0            0  31
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE  22120          0            0   5  
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE  22121          0            0   5  
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE  22122          0            0   5  
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE  22123          0            0   5  
+ 022191 SPECTRAL DENSITY                                                 M**2*S/RAD                 2            0  20
+ 022192 SPECTRAL PERIOD                                                  S                          2            0  13  
+ 022193 MEAN WAVENUMBER                                                  1/M                        5            0  15  
+ 022194 PEAK WAVENUMBER                                                  1/M                        5            0  15  
+ 022195 MEAN WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022196 PEAK WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022197 DIRECTION SPREAD                                                 DEGREE                     1            0  13  
+ 022198 VARIANCE SPECTRAL DENSITY                                        M**2*S/RAD                 4            0  18  
+ 022199 CORRELATION COEFF OF SIMULATED FG AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022200 CORRELATION COEFF OF SIMULATED BF AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022201 CORRELATION COEFF OF OCEAN WAVE FG AND EXTRACTED WAVE SPECTRUM   NUMERIC                    4       -10000  15  
+ 022202 ERROR BETWEEN FIRST GUESS AND OBSERVED SAR                       NUMERIC                    5            0  21  
+ 022203 ERROR BETWEEN SIMULATED AND OBSERVED SAR                         NUMERIC                    5            0  21  
+ 022204 MEAN PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022205 SPECTRAL DENSITY                                                 M**2*S/RAD                 4            0  25  
+ 022206 PEAK PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022207 MEAN WAVE PERIOD                                                 S                          1            0  10  
+ 022208 PEAK PERIOD OF 1D SPECTRA                                        S                          1            0  10  
+ 022209 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  13
+ 022210 MEAN SQUARE SLOPE OF WAVES                                       NUMERIC                    4       -10000  14  
+ 022211 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  17
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10  
+ 023001 ACCIDENT EARLY NOTIFICATION-ARTICLE APPLICABLE                   CODE TABLE  23001          0            0   3  
+ 023002 ACTIVITY OR FACILITY INVOLVED ININCIDENT                         CODE TABLE  23002          0            0   5  
+ 023003 TYPE OF RELEASE                                                  CODE TABLE  23003          0            0   3  
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE  23004          0            0   3  
+ 023005 COUSE OF INCIDENT                                                CODE TABLE  23005          0            0   2  
+ 023006 INCIDENT SITUATION                                               CODE TABLE  23006          0            0   3  
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE  23007          0            0   3  
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE  23008          0            0   2  
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE  23009          0            0   2  
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE  23016          0            0   2  
+ 023017 FLOW DISCHARGE OF MAJOR RECEPIENT                                M**3/S                     6            0  20  
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE  23018          0            0   3  
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17  
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17  
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24  
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12  
+ 023024 MAIN TRANSPORT SPEED WATER                                       M/S                        2            0  13  
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13  
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9  
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9  
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9  
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE  23031          0            0   2  
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE  23032          0            0   2  
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28  
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28  
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE  24003          0            0   5  
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16  
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9  
+ 024011 DOSE                                                             mSv                        2            0  32  
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME)             mSv                        2            0  32  
+ 024013 GAMMA DOSE IN AIR ALONG THE MAINTRANSPORT PATH(DEFINED LOCATION  mSv                        2            0  32  
+ 024021 AIR CONCENTRATION(OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA     Bq/M**3                    2            0  32  
+ 024022 CONCENTRATION IN PRECIPITATION ( OF NAMED ISOTOPE TYPE)          Bq/L                       2            0  32  
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6  
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4  
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8  
+ 025004 ECHO PROCESSING                                                  CODE TABLE  25004          0            0   2  
+ 025005 ECHO INTEGRATION                                                 CODE TABLE  25005          0            0   2  
+ 025006 Z TO R CONVERSION                                                CODE TABLE  25006          0            0   3  
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12  
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9  
+ 025009 CALIBRATION METHOD                                               FLAG TABLE  25009          0            0   4  
+ 025010 CLUTTER TREATMENT                                                CODE TABLE  25010          0            0   4  
+ 025011 GROUND ACCULTATION CORRECTION(SCREENING)                         CODE TABLE  25011          0            0   2  
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE  25012          0            0   2  
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE  25013          0            0   2  
+ 025014 AZIMUTH CLUTTER CUT-OFF                                          NUMERIC                    0            0  12
+ 025015 RADOM ATTENUATION CORRECTION                                     FLAG TABLE  25015          0            0   2  
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6  
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE  25017          0            0   2  
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6  
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7  
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE  25020          0            0   2  
+ 025021 WIND COMPUTATION EHANCEMENT                                      FLAG TABLE  25021          0            0   8  
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE  25030          0            0   2  
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE  25032          0            0   2  
+ 025033 WIND PROFILER SUBMODE INFORMATION                                CODE TABLE  25033          0            0   2  
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS                       FLAG TABLE  25034          0            0   4  
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE  25040          0            0   4  
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE  25041          0            0   2  
+ 025042 MOVING PLATFORM SPEED REPORTING                                  CODE TABLE  25042          0            0   2  
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15  
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14  
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE  25045          0            0  21  
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE  25046          0            0   5  
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE  25047          0            0   4  
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE  25048          0            0  16  
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE  25049          0            0   6  
+ 025050 PRINCIPAL COMPONENT SCORE                                        NUMERIC                    4      -131072  18
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE  25051          0            0   7  
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE  25053          0            0  12  
+ 025060 SOFTWARE INDENTIFICATION                                         NUMERIC                    0            0  14  
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5
+ 025076 LOG_10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 for ATOVS                     NUMERIC                    5      -100000  18
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14
+ 025193 ATTENUATION CORRECTION ON SIGMA0                                 dB                         3            0  14  
+ 025194 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4
+ 025197 ANTENNA CORRECTIONS VERSION NUMBER                               NUMERIC                    0            0   5
+ 025198 LOG (TEMP-RAD CENTRAL WAVE NUMBER)                               1/M                        8            0  30
+ 025199 BANDWIDTH CORRECTION COEFFICIENT 1                               NUMERIC                    4       -10000  15
+ 025200 BANDWIDTH CORRECTION COEFFICIENT 2                               NUMERIC                    5            0  17
+ 025201 ALBEDO-RAD SOLAR FILTERED IRRADIANCE                             NUMERIC                    4            0  24
+ 025202 ALBEDO-RAD EQUIVALENT FILTER WIDTH                               NUMERIC                   10            0  14
+ 025203 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE  25081          0            0  31
+ 025204 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE  25082          0            0  31
+ 025205 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE  25083          0            0  31
+ 025206 FOV QUALITY FLAGS FOR ATOVS                                      FLAG TABLE  25084          0            0  31
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12  
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12  
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12  
+ 026193 YEAR                                                             YEAR                       0            0  12
+ 026194 MONTH                                                            MONTH                      0            0   4
+ 026195 DAY                                                              DAY                        0            0   6  
+ 026196 HOUR                                                             HOUR                       0            0   5  
+ 026197 MINUTE                                                           MINUTE                     0            0   6  
+ 026198 SECOND                                                           SECOND                     0            0   6  
+ 026200 LOCATION WITHIN ASSIMILATION WINDOW IN TIME                      NUMERIC                    6            0  20  
+ 026201 HOURS INCLUDED                                                   FLAG TABLE  26201          0            0  26
+ 027001 LATITUDE(HIGH ACCURACY)                                          DEGREE                     5     -9000000  25  
+ 027002 LATITUDE(COARSE ACCURACY)                                        DEGREE                     2        -9000  15  
+ 027003 ALTERNATE LATITUDE                                               DEGREE                     2        -9000  15  
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16  
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16  
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31  
+ 027193 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16
+ 028001 LONGITUDE(HIGH ACCURACY)                                         DEGREE                     5    -18000000  26  
+ 028002 LONGITUDE(COARSE ACCURACY)                                       DEGREE                     2       -18000  16  
+ 028003 ALTERNATE LONGITUDE                                              DEGREE                     2       -18000  16  
+ 028031 IN DIRECTION OF 90 DEGREES EAST,DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31  
+ 029001 PROJECTION TYPE                                                  CODE TABLE  29001          0            0   3  
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE  29002          0            0   3  
+ 030001 PIXEL VALUE(4 BITS)                                              NUMERIC                    0            0   4  
+ 030002 PIXEL VALUE(8 BITS)                                              NUMERIC                    0            0   8  
+ 030004 PIXEL VALUE(16 BITS)                                             NUMERIC                    0            0  16  
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12  
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12  
+ 030031 PICTURE TYPE                                                     CODE TABLE  30031          0            0   4  
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE  30032          0            0  16  
+ 030193 POSITION NUMBER ALONG SCAN                                       NUMERIC                    0            0   8  
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1  
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8  
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16  
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8  
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16  
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE  31021          0            0   6  
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE  31031          0            0   1  
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1  
+ 033002 QUALITY INFORMATION TABLE                                        CODE TABLE  33002          0            0   2  
+ 033003 QUALITY INFORMATION TABLE                                        CODE TABLE  33003          0            0   3  
+ 033007 % CONFIDENCE                                                     %                          0            0   7  
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE  33020          0            0   3  
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE  33021          0            0   2  
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE  33022          0            0   2  
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE  33023          0            0   2  
+ 033024 STATION ELEVATION QUALITY MARK  (FOR MOBILE STATION)             CODE TABLE  33024          0            0   2  
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE  33025          0            0   3
+ 033026 MIXING RATIO QUALITY                                             CODE TABLE  33026          0            0   6
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66% CONFIDENCE        CODE TABLE  33027          0            0   3
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE  33030          0            0  24
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE  33031          0            0  24
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE  33032          0            0  24
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE  33033          0            0  24
+ 033191 ECMWF WAM QC INDICATOR                                           CODE TABLE 033191          0            0   2
+ 033192 TEM1 CONFIDENCE                                                  %                          0            0   7
+ 033193 DATA QUALITY 3 BIT CODE                                          CODE TABLE  33193          0            0   3  
+ 033194 DATA QUALITY 2 BIT CODE                                          CODE TABLE  33194          0            0   2  
+ 033195 ECMWF SAR QC INDICATOR                                           CODE TABLE  33195          0            0   5  
+ 033196 ECMWF WAM QC INDICATOR                                           CODE TABLE  33196          0            0   2  
+ 033197 ECMWF SAR INVERSION QC INDICATOR                                 CODE TABLE  33197          0            0   3  
+ 033198 MINIMUM COST                                                     NUMERIC                    4            0  14  
+ 033199 1D VAR TOTAL PRECIPITABLE WATER RETRIEVED ERROR(S)               KG/M**2                    2            0  11  
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE  33200          0            0  31  
+ 033201 ANALYSIS REPORT STATUS EVENT                                     FLAG TABLE  33201          0            0  13  
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE  33202          0            0  31  
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE  33203          0            0  11  
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE  33204          0            0  21  
+ 033205 VARIATIONAL ANALYSIS BLACK LIST FLAG                             CODE TABLE  33205          0            0   4  
+ 033206 VARIATIONAL ANALYSIS QUALITY CONTROL FLAG                        CODE TABLE  33206          0            0   4  
+ 033207 VARIATIONAL ANALYSIS DEPARTURE FLAG                              CODE TABLE  33207          0            0   4  
+ 033208 VARIATIONAL ANALYSIS FIRST QUESSCHECK FLAG                       CODE TABLE  33208          0            0   4  
+ 033209 VARIATIONAL ANALYSIS FINAL FLAG                                  CODE TABLE  33209          0            0   4  
+ 033210 INCREMENTAL VARIATIONAL ANALYSISUPDATE NUMBER                    NUMERIC                    0            0   7  
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10  
+ 033212 1D VAR ITERRATION NUMBER                                         NUMERIC                    0            0  10  
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11  
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE  33214          0            0  11  
+ 033215 DIRECTIONAL SKILL                                                NUMERIC                    1        -4096  13  
+ 033216 1D VAR SURFACE TYPE QUALITY CONTROL                              CODE TABLE  33216          0            0   3  
+ 033217 1D VAR FAILURE INDICATOR                                         CODE TABLE  33217          0            0   2  
+ 033218 1D VAR ESTIMATE OF SCATTERING                                    NUMERIC                    2            0  12  
+ 033219 SSMI INDIPENDENT SCATTERING INDEX                                NUMERIC                    2       -50000  16  
+ 033220 VARIATIONAL ANALYSIS REPORT EVENTS (1)                           FLAG TABLE  33220          0            0  31  
+ 033221 VARIATIONAL ANALYSIS SYNOP EVENTS (2)                            FLAG TABLE  33221          0            0  31  
+ 033222 VARIATIONAL ANALYSIS AIREP EVENTS (2)                            FLAG TABLE  33222          0            0  31  
+ 033223 VARIATIONAL ANALYSIS SATOB EVENTS (2)                            FLAG TABLE  33223          0            0  31  
+ 033224 VARIATIONAL ANALYSIS DRIBU EVENTS (2)                            FLAG TABLE  33224          0            0  31  
+ 033225 VARIATIONAL ANALYSIS TEMP EVENTS (2)                             FLAG TABLE  33225          0            0  31  
+ 033226 VARIATIONAL ANALYSIS PILOT EVENTS (2)                            FLAG TABLE  33226          0            0  31  
+ 033227 VARIATIONAL ANALYSIS SATEM/TOVS EVENTS (2)                       FLAG TABLE  33227          0            0  31  
+ 033228 VARIATIONAL ANALYSIS PAOB EVENTS (2)                             FLAG TABLE  33228          0            0  31  
+ 033229 VARIATIONAL ANALYSIS SCATTEROMETER EVENTS (2)                    FLAG TABLE  33229          0            0  31  
+ 033230 VARIATIONAL ANALYSIS RAW RADIANCES EVENTS (2)                    FLAG TABLE  33230          0            0  31  
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE  33231          0            0   6  
+ 033232 REPORT BLACK LIST EVENTS                                         FLAG TABLE  33232          0            0  31  
+ 033233 VARIATIONAL ANALYSIS REPORT STATUS                               FLAG TABLE  33233          0            0  31  
+ 033234 VARIATIONAL ANALYSIS DATUM STATUS                                FLAG TABLE  33234          0            0  31  
+ 033236 VARIATIONAL ANALYSIS DATUM EVENTS (1)                            FLAG TABLE  33236          0            0  31  
+ 033237 VARIATIONAL ANALYSIS SYNOP DATUMEVENTS (2)                       FLAG TABLE  33237          0            0  31  
+ 033238 VARIATIONAL ANALYSIS AIREP DATUMEVENTS (2)                       FLAG TABLE  33238          0            0  31  
+ 033239 VARIATIONAL ANALYSIS SATOB DATUMEVENTS (2)                       FLAG TABLE  33239          0            0  31  
+ 033240 VARIATIONAL ANALYSIS DRIBU DATUMEVENTS (2)                       FLAG TABLE  33240          0            0  31  
+ 033241 GROSS ERROR PROBABILITY                                          NUMERIC                    3            0  10  
+ 033242 GROSS ERROR INDICATOR                                            CODE TABLE  33242          0            0   2  
+ 033243 VARIATIONAL ANALYSIS TEMP DATUM EVENTS (2)                       FLAG TABLE  33243          0            0  31  
+ 033244 VARIATIONAL ANALYSIS PILOT DATUMEVENTS (2)                       FLAG TABLE  33244          0            0  31  
+ 033245 VARIATIONAL ANALYSIS SATEM/TOVS DATUM EVENTS (2)                 FLAG TABLE  33245          0            0  31  
+ 033246 VARIATIONAL ANALYSIS PAOB DATUM EVENTS (2)                       FLAG TABLE  33246          0            0  31  
+ 033247 VARIATIONAL ANALYSIS SCATTEROMETER DATUM EVENTS (2)              FLAG TABLE  33247          0            0  31  
+ 033248 VARIATIONAL ANALYSIS RAW RADIANCES DATUM EVENTS (2)              FLAG TABLE  33248          0            0  31  
+ 033249 DATUM BLACK LIST EVENTS                                          FLAG TABLE  33249          0            0  31  
+ 033250 PROBABILITY OF GROSS ERROR                                       NUMERIC                    6            0  20  
+ 033251 RANGE OF POSSIBLE VALUES                                         NUMERIC                    2            0  14  
+ 033252 MANUAL-AUTOMATIC QUALITY CONTROL                                 CODE TABLE  33252          0            0   4  
+ 033253 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7  
+ 033254 WIND CORRELATION METHOD                                          FLAG TABLE  33254          0            0  20
+ 049193 SAR INVERSION QC FLAGS                                           FLAG TABLE  49193          0            0  15
+ 049194 ALTIMETER WAVE HEIGHT QC FLAFS                                   FLAG TABLE  49194          0            0  15
+ 055003 DATA EXTRACTION INDICATOR                                        FLAG TABLE  55003          0            0   8  
+ 062190 STATISTICS APPLICATION                                           CODE TABLE  62190          0            0   8  
+ 062191 TYPE OF STATISTICS                                               CODE TABLE  62191          0            0   8  
+ 063190 APPLICATION DERIVING SUBSTITUTE OR ALTERNATIVE VALUE             CODE TABLE  63190          0            0   8  
diff --git a/bufrtables/B0000000000098013001.TXT b/bufrtables/B0000000000098013001.TXT
new file mode 100755
index 0000000..fe50545
--- /dev/null
+++ b/bufrtables/B0000000000098013001.TXT
@@ -0,0 +1,1589 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000004 BUFR/CREX MASTER TABLE                                           CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000006 BUFR MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2 
+ 000007 CREX MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000008 BUFR LOCAL TABLE VERSION NUMBER                                  CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0        24
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0         2
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0         1
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0         4
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0         3
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2         4
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0         2
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0        28
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0         3
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 001030 NUMERICAL MODEL IDENTIFIER                                       CCITTIA5                   0            0 128 CHARACTER                 0        16
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0         5
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0         3
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0         3
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0         3
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0         5
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0         7
+ 001037 SIGMET SEQUENCE IDENTIFIER                                       CCITTIA5                   0            0  24 CHARACTER                 0         3 
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5        10
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0         6
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001065 ICAO REGION IDENTIFIER                                           CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001087 WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER                NUMERIC                    0            0  23 NUMERIC                   0         7
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0         3
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0         4
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0         3
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001096 STATION ACQUISITION                                              CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001101 STATE IDENTIFIER                                                 CODE TABLE 1101            0            0  10 CODE TABLE 1101           0         3
+ 001102 NATIONAL STATION IDENTIFIER                                      NUMERIC                    0            0  30 NUMERIC                   0         9
+ 001124 GRID POINT IDENTIFIER                                            NUMERIC                    0            0  24 NUMERIC                   0         8
+ 001144 SNAPSHOT IDENTIFIER                                              NUMERIC                    0            0  31 NUMERIC                   0        10
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE 001192          0            0   8
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE 1193            0            0   4  
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72  
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72  
+ 001196 CONSTANT LEVEL BALLOON IDENTIFIER                                CCITTIA5                   0            0  72  
+ 001197 RTP - PLATFORM TYPE                                              CODE TABLE 1197            0            0  10  
+ 001198 ITP - DECK ID                                                    CODE TABLE 1198            0            0  10  
+ 001199 DUP - DUPLICATE STATUS                                           CODE TABLE 1199            0            0   4  
+ 001201 GENERATING APPLICATION                                           CODE TABLE 1201            0            0   8  
+ 001205 SATELLITE IDENTIFIER                                             CODE TABLE 1205            0            0  10  
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31  
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31  
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31  
+ 001211 ORIGIN OF SEA SURFACE ANALYSIS                                   CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001220 RADAR COMPOSITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0         1
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0         2
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0         2
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0         2
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2         3
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0         3
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0         2
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0         2
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0         3
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0         2
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0         2
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0         4
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0         3
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0         3
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0         3
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0         2
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0         2
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0         9
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0         6
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0         6
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0         1
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0         2
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0         1
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0         1
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0         2
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0         3
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0         1
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0         1
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0         2
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0         1
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0         2
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0         2
+ 002042 INDICATOR FOR SEA SURFACE CURRENT SPEED                          CODE TABLE 2042            0            0   2 CODE TABLE 2042           0         1
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0         2
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0         2
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0         2
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0         2
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0         3
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0         7
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0         2
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0         2
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0         2
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0         2
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0         2
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0         2
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0         2
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0         2
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0         2
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0         2
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0         1
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0         2
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2         5
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0         1
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0         2
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5         5
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0         2
+ 002071 SPECTROGRAPHIC WAVELENGTH                                        M                         13            0  30 M                        13        10
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0         2
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0         2
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3         4
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0         2
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0         2
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3         4
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1         4
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4         3
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0         2
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0         2
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0         2
+ 002098 TYPE OF WAVE SENSOR                                              CODE TABLE 2098            0            0   4 CODE TABLE 2098           0         2
+ 002099 POLARISATION                                                     CODE TABLE 2099            0            0   3 CODE TABLE 2099           0         1
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1         4
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0         2
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0         3
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0         1
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0         2
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0         2
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1         2
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0         2
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0         2
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1         4
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1         4
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0         2
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0         5
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0         2
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7 %                         0         3
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 2119            0            0   3 CODE TABLE 2119           0         1
+ 002120 OCEAN WAVE FREQUENCY                                             Hz                         3            0  10 Hz                        3         4
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8         3
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6         3
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4         3
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1         3
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1         3
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7         2
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6         3
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5         2
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0         3
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0         3
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0         1
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2         2
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2         2
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2         5
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2         5
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3         5
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0         3
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0         3
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0         2
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0         2
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0         2
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0         2
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0         2
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0         2
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0         4
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0        10
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8         8
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8         8
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7 %                         0         3
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7 %                         0         3
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0         3
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0         3
+ 002160 WAVE LENGTH OF THE RADAR                                         CODE TABLE 2160            0            0   4 CODE TABLE 2160           0         2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0         2
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0         1
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0         2
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0         2
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0         5
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0         2
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0         3
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4         4
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9 NUMERIC                   0         3
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0         2
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0         2
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0         2
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0         2
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0         2
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0         2
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0         7
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0         2
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0         2
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0         2
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0   4 CODE TABLE 2185           0         2
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0        10
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0         6
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0         7
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189            0            0  12 FLAG TABLE 2189           0         4
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7 %                         0         3
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9
+ 002193 1D VAR SATELLITE CHANNEL(S) USED                                 FLAG TABLE 2193            0            0  28  
+ 002194 CONSTANT LEVEL BALLOON TYPE                                      CODE TABLE 2194            0            0   4  
+ 002195 TYPE OF SATELLITE INSTRUMENTATION                                CODE TABLE 2195            0            0   4  
+ 002196 SATELLITE CLASSIFICATION                                         CODE TABLE 2196            0            0   9  
+ 002197 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26  
+ 002198 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26  
+ 002199 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2199            0            0   4  
+ 002200 LATITUDINAL RESOLUTION                                           DEGREE                     5            0  25
+ 002201 LONGITUDINAL RESOLUTION                                          DEGREE                     5            0  25
+ 002202 SIMULATED DATA PROCESSING TECHNIQUE USED                         FLAG TABLE 2202            0            0   4  
+ 002205 LATITUDINAL RESOLUTION                                           DEGREE                     3            0   9
+ 002206 LONGITUDINAL RESOLUTION                                          DEGREE                     3            0   9 
+ 002207 TYPE OF SCAN                                                     CODE TABLE 2207            0            0   3
+ 002220 DATA PRODUCER                                                    CODE TABLE 2220            0            0   9  
+ 002221 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18  
+ 002222 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18  
+ 002223 TOVS/ATOVS/AVHRR CHANNEL NUMBER                                  CODE TABLE 2223            0            0   6  
+ 002231 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2231            0            0   4  
+ 002232 TRACER CORRELATION METHOD                                        CODE TABLE 2232            0            0   3  
+ 002240 TYPE OF TERMODYNAMIC SENSING                                     CODE TABLE 2240            0            0   8  
+ 002241 TYPE OF ROCKET MOTOR                                             CODE TABLE 2241            0            0   3  
+ 002242 TYPE OF WIND SENSING EQUIPMENT                                   CODE TABLE 2242            0            0   8  
+ 002243 TERMODYNAMIC CORRECTION TECHNIQUE                                CODE TABLE 2243            0            0   3  
+ 002244 WIND CORRECTION TECHNIQUE                                        CODE TABLE 2244            0            0   3  
+ 002245 METHOD OF REDUCING OF DATA                                       CODE TABLE 2245            0            0   4  
+ 002251 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2251            0            0   4  
+ 002252 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2252            0            0  31  
+ 002253 HUMIDITY COMPUTATIONAL METHOD                                    CODE TABLE 2253            0            0   8  
+ 002254 RADIANCE TYPE                                                    CODE TABLE 2254            0            0   4  
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0         4
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0         2
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0         2
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0         2
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0         2
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0         2
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6         8
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0         4
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0         4
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0         4
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0         4
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0         4
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0         4
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0         4
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0         4
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0         4
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0         4
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0         3
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0         2
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0         3
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0         2
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0         2
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0         2
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0         2
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0         2
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0         2
+ 004080 AVERAGING PERIOD FOR FOLLOWING VALUE                             CODE TABLE 4080            0            0   4 CODE TABLE 4080           0         2
+ 004086 LONG TIME PERIOD OR DISPLACEMENT                                 SECOND                     0        -8192  15 SECOND                    0         5
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005015 LATITUDE DISPLACEMENT (HIGH ACCURACY)                            DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005016 LATITUDE DISPLACEMENT (COARSE ACCURACY)                          DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005023 SUN TO SATELLITE AZIMUTH DIFFERENCE                              DEGREE                     1        -1800  12 DEGREE                    1         4
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0         4
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0         4
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1         5
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0         2
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0         8
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0         2^M
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005060 Y ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005061 Z ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10 NUMERIC                   0         4 
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11 NUMERIC                   0         4  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 005196 SCAN ANGLE                                                       DEGREE                     1        -1800  12 DEGREE                    1         4
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31 M                         2        10 
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16 DEGREE                    2         5 
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006015 LONGITUDE DISPLACEMENT (HIGH ACCURACY)                           DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006016 LONGITUDE DISPLACEMENT (COARSE ACCURACY)                         DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1         4
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5         4
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0         4
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1         5
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0         3
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0         4
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6 NUMERIC                   0         2 
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31 M                         2        10 
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13 ADS/M                     5         4
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0         5
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1         5
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0         4
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0         5
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1         5
+ 007012 GRID POINT ALTITUDE                                              M                          2       -50000  20 M                         2         7
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007026 SATELLITE ZENITH ANGLE                                           DEGREE                     4      -900000  21 DEGREE                    4         7
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1        -4000  17 M                         1         5
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1        -4000  17 M                         1         5
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2         5
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1         4
+ 007040 IMPACT PARAMETER (SEE NOTE 8)                                    M                          1     62000000  22 M                         1         8
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2         5
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1         6
+ 007063 DEPTH BELOW SEA/WATER SURFACE                                    M                          2            0  20 M                         2         7
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0         2
+ 007065 WATER PRESSURE                                                   PA                        -3            0  17 PA                        0         6
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0         4
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31 M                         2        10 
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0         3
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0         2
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0         2
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0         1
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0         2
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0         3
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0         2
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0         3
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0         2
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0         2
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0         2
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0         1
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0         1
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0         2
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0         1
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0         1
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0         6
+ 008019 QUALIFIER FOR FOLLOWING CENTRE IDENTIFIER                        CODE TABLE 8019            0            0   4 CODE TABLE 8019           0         2
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0         2
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0         2
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0         2
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0         2
+ 008026 MATRIX SIGNIFICANCE                                              CODE TABLE 8026            0            0   6 CODE TABLE 8026           0         2
+ 008029 REMOTLY SENSED SURFACE TYPE                                      CODE TABLE 8029            0            0   8 CODE TABLE 8029           0         3
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0         4
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0         3
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0         1
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0         1
+ 008039 TIME SIGNIFICANCE ( AVIATION FORECAST)                           CODE TABLE 8039            0            0   6 CODE TABLE 8039           0         2
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0         2
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0         2
+ 008042 EXTENDED VERTICAL SOUNDING SIGNIFICANCE                          FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0         6
+ 008043 ATMOSPHERIC CHEMICAL OR PHISICAL CONSTITUENT TYPE                CODE TABLE 8043            0            0   8 CODE TABLE 8043           0         3
+ 008044 CAS REGISTRY NUMBER                                              CCITTIA5                   0            0  88 CHARACTERS                0        11
+ 008045 PARTICULATE MATTER CHARACTERIZATION                              CODE TABLE 8045            0            0   8 CODE TABLE 8045           0         3
+ 008049 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0         2
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0         1
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0         2
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0         1
+ 008054 QUALIFIER FOR WIND SPEED OR WIND GUST                            CODE TABLE 8054            0            0   3 CODE TABLE 8054           0         1
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0         2
+ 008065 SUN-GLINT INDICATOR                                              CODE TABLE 8065            0            0   2 CODE TABLE 8065           0         1
+ 008066 SEMI-TRANSPARENCY INDICATOR                                      CODE TABLE 8066            0            0   2 CODE TABLE 8066           0         1
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0         2
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0         1
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0         1
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0         1
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0         2
+ 008077 RADIOMETER SENSED SURFACE TYPE                                   CODE TABLE 8077            0            0   7 CODE TABLE 8077           0         3
+ 008079 PRODUCT STATUS                                                   CODE TABLE 8079            0            0   4 CODE TABLE 8079           0         2
+ 008080 QUALIFIER FOR GTSPP QUALITY FLAG                                 CODE TABLE 8080            0            0   6 CODE TABLE 8080           0         2
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE 8081            0            0   6 CODE TABLE 8081           0         2
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0         1
+ 008083 NOMINAL VALUE INDICATOR                                          FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0         5
+ 008085 BEAM IDENTIFIER                                                  CODE TABLE 8085            0            0   3 CODE TABLE 8085           0         1
+ 008090 DECIMAL SCALE                                                    NUMERIC                    0         -127   8 NUMERIC                   0         3
+ 008193 TIME QUALIFIER                                                   CODE TABLE 8193            0            0   6 CODE TABLE 8193           0         2 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8194            0            0   4 CODE TABLE 8194           0         2 
+ 008195 DATA TYPE                                                        CODE TABLE 8195            0            0   7 CODE TABLE 8195           0         3 
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3 
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 8222            0            0   4 CODE TABLE 8222           0         2 
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE 8223            0            0   7 FLAG TABLE 8223           0         3 
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10 NUMERIC                   3         4 
+ 008225 GHRSST SURFACE TYPE                                              FLAG TABLE 8225            0            0   5 FLAG TABLE 8225           0         2
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0         5
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1         5
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2        10
+ 010032 SATELLITE DISTANCE TO EARTH'S CENTRE                             M                          1            0  27 M                         2         9
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27 M                         2         9
+ 010034 EARTH RADIUS                                                     M                          1            0  27 M                         2         9
+ 010035 EARTH'S LOCAL RADIUS OF CURVATURE                                M                          1     62000000  22 M                         1         8
+ 010036 GEOID UNDULATION (SEE NOTE 4)                                    M                          2       -15000  15 M                         2         6
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0         4
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2         5
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1         5
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1         5
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1         4
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1         4
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1         4
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0         2
+ 010064 SIGMET CRUISING LEVEL                                            CODE TABLE 10064           0            0   3 CODE TABLE 10064          0         1
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0         5
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15 DEGREE                    2         5
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31 M                         3        10
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      MS-1                       3       -65536  17 MS-1                      3         6
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE**2                  2            0  16 DEGREE**2                 2         5
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE**2                  2            0  16 DEGREE**2                 2         5
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18 M                         3         6
+ 010086 GEOID'S HEIGHT                                                   M                          3      -131072  18 M                         3         6
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18 M                         3         6
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16 M                         3         5
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16 M                         3         5
+ 010090 LONG PERIOD  TIDE HEIGHT                                         M                          3       -32768  16 M                         3         5
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16 M                         3         5
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16 M                         3         5
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16 M                         3         5
+ 010095 HEIGHT OF ATMOSPHERE USED                                        M                          0            0  16 M                         0         5
+ 010096 MEAN DYNAMIC TOPOGRAPHY                                          M                          3      -131072  18
+ 010097 MEAN SEA SURFACE HEIGHT FROM ALTIMETER ONLY                      M                          3      -131072  18
+ 010098 LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 1             M                          4        -2000  12
+ 010099 LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 2             M                          4        -2000  12
+ 010100 NON-EQUILIBRIUM LONG PERIOD TIDE HEIGHT                          M                          4        -2000  12
+ 010101 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM  DATA     DEGREE**2                  2       -32768  16 DEGREE**2                 2         5
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20  
+ 010196 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15  
+ 010197 ANEMOMETER HEIGHT                                                M                          0            0   9  
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1         4
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1         4
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2         4
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1         4
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1         4
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0         3
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9         6
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9         6
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2         6
+ 011030 EXTENDED DEGREE OF TURBULENCE                                    CODE TABLE 11030           0            0   6 CODE TABLE                0         2
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0         2
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1         5
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1         5
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1         4
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2         5
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1         4
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0         2
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0         2
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0         2
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1         4
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1         4
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1         4
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1         4
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1         4
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1         4
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1         4
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1         3
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2         5
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2         5
+ 011054 MEAN WIND DIRECTION FOR 1500 M - 3000 M                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011055 MEAN WIND SPEED FOR 1500 M - 3000 M                              M/S                        1            0  12 M/S                       1         4
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1         4
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1         4
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3         5
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3         4
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2         4
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2         4
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0         4
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2         4
+ 011083 WIND SPEED                                                       KM/HOUR                    0            0   9 KM/HOUR                   0         3
+ 011084 WIND SPEED                                                       KNOT                       0            0   8 KNOT                      0         3
+ 011085 MAXIMUM WIND GUST SPEED                                          KM/HOUR                    0            0   9 KM/HOUR                   0         3
+ 011086 MAXIMUM WIND GUST SPEED                                          KNOT                       0            0   8 KNOT                      0         3
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011097 WIND SPEED FROM ALTIMETER                                        M/S                        2            0  12
+ 011098 WIND SPEED FROM RADIOMETER                                       M/S                        2            0  12
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13 M/S                       1         4^M
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13 M/S                       1         4^M 
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13 M/S                       1         4^M 
+ 011195 STEADINESS OF WIND                                               %                          0            0   7 %                         0         3 
+ 011196 FRICTION VELOCITY                                                M/S                        5            0  19  
+ 011201 HORIZONTAL LINE OF SIGHT COMPONENT                               M/S                        1        -4096  13  
+ 011210 1D VAR WIND SPEED RETREIVED ERRO(S)                              M/S                        2            0  12  
+ 011211 WIND SPEED INDEPENDENT ESTIMATE OF ERROR(S)                      M/S                        2            0  12  
+ 011220 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  12  
+ 011221 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15  
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13 M/S                       1         4^M 
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13 M/S                       1         4^M 
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1         3
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1         3
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1         3
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1         3
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1         3
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012023 TEMPERATURE                                                      C                          0          -99   8 C                         0         2
+ 012024 DEW POINT TEMPERATURE                                            C                          0          -99   8 C                         0         2
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012049 TEMPERATURE CHANGE OVER SPECIFIED PERIOD                         K                          0          -30   6 C                         0         2
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1         3
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1         3
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1         3
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1         3
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1         3
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1         4
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1         4
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2         5
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1         4
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6         9
+ 012073 TEMPERATURE                                                      K                          2            0  16 K                         1         4
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3         5
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3         5
+ 012080 BRIGHTNESS TEMPERATURE REAL PART                                 K                          2       -10000  16 K                         2         5
+ 012081 BRIGHTNESS TEMPERATURE IMAGINARY PART                            K                          2       -10000  16 K                         2         5
+ 012082 PIXEL RADIOMETRIC ACCURACY                                       K                          2            0  12 K                         2         4
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2         4
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2         4
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2         4
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2         4
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2         4
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2         4
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2         4
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2         4
+ 012121 GROUND MINIMUM TEMPERATURE                                       K                          2            0  16 C                         2         4
+ 012122 GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT                K                          2            0  16 C                         2         4
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2         4
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2         4
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2         4
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2         4
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2         4
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2         5
+ 012165 DIRECT SUN BRIGHTNESS TEMPERATURE                                K                          0            0  23 K                         0         7
+ 012166 SNAPSHOT ACCURACY                                                K                          1        -4000  13 K                         1         4
+ 012167 RADIOMETRIC ACCURACY (PURE POLARISATION)                         K                          1            0   9 K                         1         3
+ 012168 RADIOMETRIC ACCURACY ( CRESS POLARISATION )                      K                          1            0   9 K                         1         3
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2         5
+ 012180 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012181 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012182 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR             K                          2            0  16 K                         2         5
+ 012183 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012184 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012185 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16 K                         2         5
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16 K                         2         5
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16 K                         2         5
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 012193 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12  
+ 012194 RADIANCE                                                         W/M**2*STER*M**(-1)        6            0  31  
+ 012195 SPECTRAL RADIANCE                                                W/M**2*STER*M**(-1)       10            0  31  
+ 012196 RADIANCE                                                         W/M**2*STER                3            0  16  
+ 012197 MAXIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12  
+ 012198 MINIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12  
+ 012199 MAXIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12  
+ 012200 MINIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12  
+ 012201 BRIGHTNES TEMPERATURE OR STOKES PARAMETER                        K                          3      -271300  20
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5         5
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5         5
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0         3
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1         4
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3         3
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1         5
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1         4
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2         4
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2         5
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4         4
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7         4
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1         4
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1         3
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0         1
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0         1
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0         2
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0         2
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0         2
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0         2
+ 013044 K INDEX                                                          K                          0          -30   8 K                         0         3
+ 013045 KO INDEX                                                         K                          0          -30   8 K                         0         3
+ 013046 MAXIMUM BUOYANCY                                                 K                          0          -30   8 K                         0         3
+ 013047 MODIFIED SHOWALTER STABILITY INDEX                               K                          0          -60   6 C                         0         2
+ 013048 WATER FRACTION                                                   %                          1            0  10 %                         1         4
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0         2
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1         3
+ 013056 CHARACTER AND INTENSITY OF PRECIPITATION                         CODE TABLE 13056           0            0   4 CODE TABLE 13056          0         2
+ 013057 TIME OF BEGINNING OR END OF PRECIPITATION                        CODE TABLE 13057           0            0   4 CODE TABLE 13057          0         2
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1         3
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0         3
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1         5
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2         5
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2         4
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2         4
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1         3
+ 013081 WATER CONDUCTIVITY                                               S M-1                      3            0  14 S M-1                     3         4
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1         4
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6         5
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0         4
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3         4
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8 KG/M**2                   2         3
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8 NUMERIC                   0         3
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19 KG/M**2                   4         6
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30 KG/M**2                   8        10   
+ 013192 RELATIVE HUMIDITY AT 2 M                                         %                          0            0   8
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8  
+ 013194 TOTAL COLUMN WATER                                               KG/M**2                    2            0  11  
+ 013195 RAIN RATE                                                        KG/M**2HOUR                0            0   5  
+ 013196 ANTECEDENT PRECIPITATION INDEX                                   KG/M**2                    0            0   7  
+ 013197 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    1            0  10  
+ 013198 RAIN FLAG                                                        CODE TABLE 13198           0            0   3  
+ 013199 SPECIFIC HUMIDITY AT 2 M                                         KG/KG                      5            0  14  
+ 013201 CLOUD LIQUID WATER                                               KG/KG                      7            0  14  
+ 013202 TYPE OF SURFACE                                                  CODE TABLE 13202           0            0   8  
+ 013203 1D VAR ESTIMATE OF RAIN RATE                                     KG/M**2*HOUR               2            0  12  
+ 013204 SSMI INDEPENDENT ESTIMATE OF RAIN RATE                           KG/M**2*HOUR               2            0  12  
+ 013205 CLOUD LIQUID WATER PATH                                          KG/M**2                    4            0  14  
+ 013206 TOTAL PRECIPITATION ICE CONTENT                                  KG/M**2                    6            0  14  
+ 013207 TOTAL CLOUD LIQUID WATER                                         KG/M**2                    6            0  14  
+ 013208 SURFACE RAIN RATE ( INSTANTANEOUS )                              KG/M**2*S                  5            0  17  
+ 013209 RAIN POSSIBILITY                                                 NUMERIC                    0         -256   9  
+ 013210 1D VAR CLOUD LIQUID WATER PATH RETRIEVED ERROR(S)                KG/M**2                    4            0  14  
+ 013211 TOTAL PRECIPITABLE WATER INDIPENDENT ESTIMATE OF ERROR(S)        KG/M**2                    2            0  11  
+ 013212 CLOUD LIQUID WATER PATH INDIPENDENT ESTIMATE OF ERROR(S)         KG/M**2                    4            0  14  
+ 013230 CONVECTIVE PRECIPITATION                                         KG/M**2                    1           -1  14  
+ 013231 LARGE SCALE PRECIPITATION                                        KG/M**2                    1           -1  14  
+ 013240 AIR DENSITY                                                      KG/M**3                    3            0  10  
+ 013241 CONVECTIVE AVAILABLE POTENTIAL ENERGY                            J/KG                       1            0  17  
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0         3
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0         3
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0         3
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0         4
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0         3
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0         3
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*(1/CM)     0            0  11 WM-2SR-1CM-1              0         4
+ 014046 SCALED IASI RADIANCE                                             (W/M**2)*(1/SR)*(1/M)      0        -5000  16 (W/M**2)*(1/SR)*(1/M)     0         5 
+ 014047 SCALED MEAN AVHRR RADIANCE                                       (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014048 SCALED STANDARD DEVIATION RADIANCE                               (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1         4
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3         4
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16 NUMERIC                   0         5
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0         4
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0         4
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0         4
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2         3
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0         3
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3         4
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0         3
+ 015008 SCALED MIXING RATIO                                              NUMERIC                    0            0  10 NUMERIC                   0         4
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3         4
+ 015012 TOTAL ELECTRON COUNT PER SQUARE METER                            1/M**2                   -16            0   6 1/M**2                  -16         2
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0        10
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8         7
+ 015021 INTEGRATED MASS DENSITY                                          KG/M**2                   11            0  31 KG/M**2                  11        10
+ 015024 OPTICAL DEPTH                                                    NUMERIC                    4            0  24 NUMERIC                   4         8
+ 015025 TYPE OF POLLUTANT                                                CODE TABLE 15025           0            0   4 CODE TABLE 15025          0         2
+ 015026 CONCENTRATION OF POLLUTANT                                       MOLMOL-1                   9            0   9 MOLMOL-1                  9         3
+ 015027 CONCENTRATION OF POLLUTANT                                       KG/M3                      9            0  10 KG/M3                     9         4
+ 015030 AEROSOL CONTAMINATION INDEX                                      NUMERIC                    2        -1000  12 NUMERIC                   2         4
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4         5
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4         4
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5         5
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5         5
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4         5
+ 015036 ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                            N-UNITS                    3            0  19 N-UNITS                   3         6
+ 015037 BENDING ANGLE                                                    RADIANS                    8      -100000  23 RADIANS                   8         7
+ 015202 INTEGRATED ELECTRON DENSITY                                      1/M**2                     3        13000  12  
+ 015231 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4            0  15
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0         2
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2         4
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0         3
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2         4
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2         5
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3         4
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0         1
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3         4
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0         2
+ 019100 TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE  CODE TABLE 19100           0            0   4 CODE TABLE 19100          0         2
+ 019101 ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE   CODE TABLE 19101           0            0   4 CODE TABLE 19101          0         2
+ 019102 SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE          CODE TABLE 19102           0            0   3 CODE TABLE 19102          0         1
+ 019103 DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE        CODE TABLE 19103           0            0   4 CODE TABLE 19103          0         2
+ 019104 CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES             CODE TABLE 19104           0            0   4 CODE TABLE 19104          0         2
+ 019105 DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE           CODE TABLE 19105           0            0   4 CODE TABLE 19105          0         2
+ 019106 IDENTIFICATION NUMBER OF TROPICAL CYCLONE                        NUMERIC                    0            0   7 NUMERIC                   0         3
+ 019107 TIME INTERVAL OF THE TROPICAL CYCLONE ANALYSIS                   CODE TABLE 19107           0            0   4 CODE TABLE 19107          0         2
+ 019108 ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE        CODE TABLE 19108           0            0   3 CODE TABLE 19108          0         1
+ 019109 MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE      CODE TABLE 19109           0            0   4 CODE TABLE 19109          0         2
+ 019110 APPARENT 24-HOUR CHANGE IN INTENSITY OF TROPICAL CYCLONE         CODE TABLE 19110           0            0   4 CODE TABLE 19110          0         2
+ 019111 CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE            NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019112 DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019113 CLOUD PATTERN TYPE OF THE DT- NUMBER                             CODE TABLE 19113           0            0   4 CODE TABLE 19113          0         2
+ 019114 MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE     NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019115 TREND OF PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)         NUMERIC                    1          -30   6 NUMERIC                   1         2
+ 019116 PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE             NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019117 CLOUD PICTURE TYPE OF THE PT- NUMBER                             CODE TABLE 19117           0            0   3 CODE TABLE 19117          0         1
+ 019118 FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019119 TYPE OF THE FINAL T-NUMBER                                       CODE TABLE 19119           0            0   3 CODE TABLE 19119          0         1
+ 019150 TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1         4
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1         3
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0         3
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0         2
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0         2
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0         2
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0         2
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0         3
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0         2
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0         2
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1         4
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1         4
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1         5
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1         5
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0         2
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0         1
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0        10
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0         2
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0         6
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0         1
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0         7
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0         2
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0         3
+ 020028 EXPECTED CHANGE IN INTENSITY                                     CODE TABLE 20028           0            0   3 CODE TABLE 20028          0         1
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0         1
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2         3
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0         1
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0         2
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0         2
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0         2
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0         2
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0         2
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0         3
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1         4
+ 020040 EVOLUTION OF DRIFT OF SNOW                                       CODE TABLE 20040           0            0   4 CODE TABLE 20040          0         2
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0         2
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0         1
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0         2
+ 020048 EVOLUTION OF FEATURE                                             CODE TABLE 20048           0            0   4 CODE TABLE 20048          2         2
+ 020050 CLOUD INDEX                                                      CODE TABLE 20050           0            0   8 CODE TABLE 20050          0         3
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0         3
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0         3
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0         3
+ 020054 TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 020055 STATE OF SKY IN TROPICS                                          CODE TABLE 20055           0            0   4 CODE TABLE 20055          0         2
+ 020056 CLOUD PHASE                                                      CODE TABLE 20056           0            0   3 CODE TABLE 20056          0         1
+ 020059 MINIMUM HORIZONTAL VISIBILITY                                    M                         -1            0   9 M                        -1         3
+ 020060 PREVAILING HORIZONTAL VISIBILITY                                 M                         -1            0  10 M                        -1         4
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0         4
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0         2
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0         4
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0         3
+ 020066 MAXIMUM DIAMETER OF HAILSTONES                                   M                          3            0   8 M                         3         3
+ 020067 DIAMETER OF DEPOSIT                                              M                          3            0   9 M                         3         3
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0         2
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0         3
+ 020083 AMOUNT OF SEGMENT COVERED BY SCENE                               %                          0            0   7 %                         0         3
+ 020085 GENERAL CONDITION OF RUNWAY                                      CODE TABLE 20085           0            0   4 CODE TABLE 20085          0         1
+ 020086 RANWAY DEPOSITS                                                  CODE TABLE 20086           0            0   4 CODE TABLE 20086          0         1
+ 020087 RUNWAY CONTAMINATION                                             CODE TABLE 20087           0            0   4 CODE TABLE 20087          0         1
+ 020088 DEPTH OF RANWAY DEPOSITS                                         M                          3            0  12 M                         3         4
+ 020089 RUNWAY FRICTION COEFICIENT                                       CODE TABLE 20089           0            0   7 CODE TABLE 20089          0         2
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0         2
+ 020091 VERTICAL VISIBILITY                                              FEET                      -2            0  10 FEET                     -2         3
+ 020092 HEIGHT OF BASE OF CLOUD                                          FEET                      -2            0  10 FEET                     -2         3
+ 020095 ICE PROBABILITY                                                  NUMERIC                    3            0  10 NUMERIC                   3         4
+ 020096 ICE AGE ("A" PARAMETER)                                          dB                         2        -4096  13 dB                        2         4
+ 020101 LOCUST (ACRIDIAN) NAME                                           CODE TABLE 20101           0            0   4 CODE TABLE 20101          0         2
+ 020102 LOCUST (MATURITY) COLOR                                          CODE TABLE 20102           0            0   4 CODE TABLE 20102          0         2
+ 020103 STAGE OF DEVELOPMENT OF LOCUSTS                                  CODE TABLE 20103           0            0   4 CODE TABLE 20103          0         2
+ 020104 ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS                   CODE TABLE 20104           0            0   4 CODE TABLE 20104          0         2
+ 020105 SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARMCODE TABLE 20105           0            0   4 CODE TABLE 20105          0         2
+ 020106 LOCUST POPULATION DENSITY                                        CODE TABLE 20106           0            0   4 CODE TABLE 20106          0         2
+ 020107 DIRECTION OF MOVEMENTS OF LOCUST SWARM                           CODE TABLE 20107           0            0   4 CODE TABLE 20107          0         2
+ 020108 EXTENT OF VEGETATION                                             CODE TABLE 20108           0            0   4 CODE TABLE 20108          0         2
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE 020192          0            0  14
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3 
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7 %                         0         3 
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14 PA                       -1         5 
+ 020249 SEA-ICE FRACTION                                                 NUMERIC                    2            0   7 NUMERIC                   2         3
+ 020250 CALCULATED SURFACE TYPE                                          CODE TABLE 20250           0            0   5  
+ 020251 ICE AGE                                                          CODE TABLE 20251           0            0   3  
+ 020252 ICE EDGE                                                         CODE TABLE 20252           0            0   3  
+ 020253 SURFACE TYPE                                                     CODE TABLE 20253           0            0   3  
+ 020254 ICE CONCENTRATION                                                %                          0            0   7  
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0         3
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0         3
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1         3
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0         2
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0         2
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1         4
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1         3
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3         2
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0         3
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0         3
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7         4
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2         3
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0         3
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2         4
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1         4
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0         3
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0         4
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0         5
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0         3
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0         4
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0         6
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0         2
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0         3
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0         1
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3         5
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3         3
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3         4
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3         4
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3         4
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3         5
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0         2
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021088 WET BACKSCATTER                                                  dB                         2        -5000  13 dB                        2         4
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0         3
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0         3
+ 021093 Ku BAND PEAKINESS                                                NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021094 S BAND PEAKINESS                                                 NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0         2
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3         5
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2         5
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3         5
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8         5
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0         6
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3         6
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0         6
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0         6
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2         5
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2         5
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0         2
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2         5
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2         5
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREE                     3            0  19 DEGREE                    3         6
+ 021133 WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID            M                          3            0  29 M                         3         9
+ 021134 RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM                    RAD/M                      3            0  19 RAD/M                     3         6
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  dB                         2       -32768  16 dB                        2         5
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              dB                         2       -32768  16 dB                        2         5
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR AGC                      dB                         2        -2048  12 dB                        2         4
+ 021140 S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                   dB                         2       -32768  16 dB                        2         5
+ 021141 STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT               dB                         2       -32768  16 dB                        2         5
+ 021142 S BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -1024  11 dB                        2         4
+ 021143 KU BAND RAIN ATTENUATION                                         dB                         2  -1073741824  31 dB                        2        10
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0         1
+ 021145 KU BAND AUTOMATIC GAIN CONTROL                                   dB                         2            0  13
+ 021146 RMS KU BAND AUTOMATIC GAIN CONTROL                               dB                         2            0   8
+ 021147 NUMBER OF VALID POINTS FOR KU BAND AUTOMATIC GAIN CONTROL        NUMERIC                    0            0   5
+ 021150 BEAM COLLOCATION                                                 CODE TABLE 21150           0            0   2 CODE TABLE 21150          0         1
+ 021151 ESTIMATED ERROR IN SIGMA0 AT 40DEG INCIDENCE ANGLE               dB                         2            0   9 dB                        2         3
+ 021152 SLOPE AT 40DEG INCIDENCE ANGLE                                   dB/DEG                     2          -80   7 dB/DEG                    2         3
+ 021153 ESTIMATED ERROR IN SLOPE AT 40DEG INCIDENCE ANGLE                dB/DEG                     2          -40   6 dB/DEG                    2         3
+ 021154 SOIL MOISTURE SENSITIVITY                                        dB                         2            0  12 dB                        2         4
+ 021155 WIND VECTOR CELL QUALITY                                         FLAG TABLE 21155           0            0  24 FLAG TABLE 21155          0         8
+ 021156 BACKSCATTER DISTANCE                                             NUMERIC                    1        -4096  13 NUMERIC                   1         4
+ 021157 LOSS PER UNIT LENGTH OF ATMOSPHERE USED                          dB/M                      10            0  22 dB/M                     10         7
+ 021158 ASCAT kp ESTIMATE QUALITY                                        CODE TABLE 21158           0            0   2 CODE TABLE 21158          0         1
+ 021159 ASCAT SIGMA-0 USABILITY                                          CODE TABLE 21159           0            0   2 CODE TABLE 21159          0         1
+ 021160 ASCAT USE OF SYNTHETIC DATA                                      NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021161 ASCAT SYNTHETIC DATA QUALITY                                     NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021162 ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021163 ASCAT SOLAR ARRAY REFLECTION CONTAMINATION                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021164 ASCAT TELEMETRY PRESENCE AND QUALITY                             NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021165 ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE                   NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021166 ASCAT LAND FRACTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021169 ICE PRESENCE INDICATOR                                           CODE TABLE                 0            0   2
+ 021170 C BAND CORRECTED OCEAN BACKSCATTER COEFICIENT                    dB                         2       -32768  16
+ 021171 RMS C BAND CORRECTED OCEAN BACKSCATTER COEFICIENT                dB                         2       -32768  16
+ 021172 C BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -2048  12
+ 021173 C BAND AUTOMATIC GAIN CONTROL                                    dB                         2            0  13
+ 021174 RMS C BAND AUTOMATIC GAIN CONTROL                                dB                         2            0   9
+ 021175 NUMBER OF VALID POINTS FOR C BAND AUTOMATIC GAIN CONTROL         NUMERIC                    0            0  10
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13
+ 021193 NOISE FIGURE                                                     %                          0            0   7  
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8  
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE 21196           0            0  12  
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE 21197           0            0  12  
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE 21198           0            0   8  
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE 21199           0            0   7  
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE 21200           0            0  15  
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE 21202           0            0   4  
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE 21203           0            0   9  
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10  
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE 21206           0            0   3  
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10  
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11  
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10  
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14  
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7  
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE 21214           0            0   3  
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4  
+ 021222 DOPPLER SPECTRUM 0 TH MOMENT (AMPLITUDE)                         dB                         0            0   7  
+ 021225 PRESCAT PRODUCT CONFIDENCE                                       FLAG TABLE 21225           0            0   6  
+ 021226 BACKSCATER DISTANCE                                              NUMERIC                    1        -4096  13  
+ 021227 GLARE ANGLE                                                      CODE TABLE 21227           0            6   6
+ 021230 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3  
+ 021231 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3  
+ 021232 TOTAL NMBER OF SIGMA-0 MEASUREMENTS                              NUMERIC                    0            0   5  
+ 021233 NUMBER OF SIGMA-0 USABLE FOR WIND                                NUMERIC                    0            0   5  
+ 021234 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    1       -10000  14  
+ 021235 WIND VECTOR CELL QUALITY FLAG                                    FLAG TABLE 21235           0            0   3  
+ 021236 NUMBER OF FORE-BEAM SIGMA-0                                      NUMERIC                    1            0   6  
+ 021237 NUMBER OF MID-BEAM V-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021238 NUMBER OF MID-BEAM H-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021239 NUMBER OF AFT-BEAM SIGMA-0                                       NUMERIC                    1            0   6  
+ 021240 NORMALIZED RADAR CROSS SECTION                                   NUMERIC                    2       -10000  14  
+ 021241 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    5            0  14  
+ 021242 Kp VARIANCE COEFFICIENT (BETHA)                                  NUMERIC                    6            0  16  
+ 021243 Kp VARIANCE COEFFICIENT (GAMMA)                                  NUMERIC                    6            0  16  
+ 021244 SIGMA-0 QUALITY FLAG                                             FLAG TABLE 21244           0            0  15  
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022005 DIRECTION OF SEA SURFACE CURRENT                                 DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0         2
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0         2
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0         2
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1         4
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1         4
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1         4
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2         4
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2         4
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2         4
+ 022032 SPEED OF SEA SURFACE CURRENT                                     M/S                        2            0  13 M/S                       2         4
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2         4
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2         4
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3         5
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3         5
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3         4
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3         5
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1         4
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1         4
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2         5
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1         5
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3         6
+ 022049 SEA SURFACE TEMPERATURE                                          K                          2            0  15 K                         2         5
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2         3
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0         1
+ 022059 SEA SURFACE SALINITY                                             PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 22060           0            0   3 CODE TABLE 22060          0         1
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0         2
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0         5
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3         6
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3         6
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6         8
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0         4
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0         3
+ 022069 SPECTRAL WAVE DENSITY                                            M2HZ-1                     3            0  22 M2HZ-1                    3         7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2         4
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1         3
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0         4
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2         4
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1         3
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0         4
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0         3
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0         4
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0         5
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3         4
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5         4
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2         7
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2         7
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2         7
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2         7
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2         7
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2         7
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0         3
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3         2
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0         5
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0         5
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0         3
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0        10
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0         2
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0         2
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0         2
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0         2
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2         5
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31 M                         3        10
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16 M                         3         5
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S BAND                          NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31 M                         3        10
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16 M                         3         5
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16 M                         3         5
+ 022157 STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16 M                         3         5
+ 022158 S BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16 M                         3         5
+ 022159 STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16 M                         3         5
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21 NUMERIC                   6         7
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27 M**4                      4         9
+ 022162 RMS OF 20Hz KU BAND OCEAN RANGE                                  M                          3            0  16
+ 022163 NUMBER OF 20Hz VALID POINTS FOR KU BAND                          NUMERIC                    0            0  10
+ 022164 RMS 20Hz KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16
+ 022165 NUMBER OF 20Hz VALID POINTS FOR KU BAND SIGNIFICANT WAVE HEIGHT  NUMERIC                    0            0  10
+ 022166 KU BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT  M                          3        -1000  11
+ 022167 NUMBER OF VALID POINTS FOR KU BAND BACKSCATTER                   NUMERIC                    0            0  10
+ 022168 C BAND OCEAN RANGE                                               M                          3            0  31
+ 022169 RMS OF C BAND OCEAN RANGE                                        M                          3            0  16
+ 022170 NUMBER OF 20Hz VALID POINTS FOR C BAND                           NUMERIC                    0            0  10
+ 022171 C BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16
+ 022172 RMS 20Hz C BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16
+ 022173 NUMBER OF 20Hz VALID POINTS FOR C BAND                           NUMERIC                    0            0  10
+ 022174 C BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT   M                          3        -1000  11
+ 022175 NUMBER OF VALID POINTS FOR C BAND BACKSCATTER                    NUMERIC                    0            0  10
+ 022186 DIRECTION FROM WHICH WAVES ARE COMING                            DEGREE TRUE                0            0   9
+ 022187 DIRECTIONAL SPREAD OF WAVES                                      DEGREE                     0            0   9 
+ 022191 SPECTRAL DENSITY                                                 M**2*S/RAD                 2            0  20
+ 022192 SPECTRAL PERIOD                                                  S                          2            0  13
+ 022193 MEAN WAVENUMBER                                                  1/M                        5            0  15  
+ 022194 PEAK WAVENUMBER                                                  1/M                        5            0  15  
+ 022195 MEAN WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022196 PEAK WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022197 DIRECTION SPREAD                                                 DEGREE                     1            0  13  
+ 022198 VARIANCE SPECTRAL DENSITY                                        M**2*S/RAD                 4            0  18  
+ 022199 CORRELATION COEFF OF SIMULATED FG AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022200 CORRELATION COEFF OF SIMULATED BF AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022201 CORRELATION COEFF OF OCEAN WAVE FG AND EXTRACTED WAVE SPECTRUM   NUMERIC                    4       -10000  15  
+ 022202 ERROR BETWEEN FIRST GUESS AND OBSERVED SAR                       NUMERIC                    5            0  21  
+ 022203 ERROR BETWEEN SIMULATED AND OBSERVED SAR                         NUMERIC                    5            0  21  
+ 022204 MEAN PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022205 SPECTRAL DENSITY                                                 M**2*S/RAD                 4            0  25  
+ 022206 PEAK PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022207 MEAN WAVE PERIOD                                                 S                          1            0  10  
+ 022208 PEAK PERIOD OF 1D SPECTRA                                        S                          1            0  10  
+ 022209 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  13  
+ 022210 MEAN SQUARE SLOPE OF WAVES                                       NUMERIC                    4       -10000  14  
+ 022211 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  17  
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10  
+ 023001 ACCIDENT EARLY NOTIFICATION   ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0         1
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0         2
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0         1
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0         1
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0         1
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0         1
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0         1
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0         1
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0         1
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0         1
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6         7
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0         1
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0         6
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0         6
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0         8
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1         4
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2         4
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2         4
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0         1
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0         1
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                      -11         9
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                      -11         9
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0         2
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0         3
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2        10
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2        10
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2        10
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2        10
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2        10
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1         4
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1         4
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1         2
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0         1
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0         1
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0         1
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2         3
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0         2
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0         2
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0         1
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0         1
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0         1
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0         1
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5         2
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0         1
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7         2
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2         3
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0         1
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0         3
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1         3
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12 V                         1         4
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15 NUMERIC                   1         5
+ 025029 CALIBRATION METHOD                                               FLAG TABLE 25029           0            0   6 FLAG TABLE 25029          0         2
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0         1
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0         1
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0         1
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0         2
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0         2
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0         2
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0         1
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0         1
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4         5
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2         5
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0         7
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0         2
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0         2
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0         6
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0         2
+ 025050 PRINCIPAL COMPONENT SCORE                                        NUMERIC                    4      -131072  18
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0         3
+ 025052 LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA            NUMERIC                    4            0  15 NUMERIC                   4         5
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0         4
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2         5
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 025062 DATABASE IDENTIFICATION                                          NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0         4
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0         3
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8        10
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5         7
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5         6
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4         8
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10         5
+ 025081 INCIDENCE ANGLE                                                  DEGREE                     3            0  17 DEGREE                    3         6
+ 025082 AZIMUTH ANGLE                                                    DEGREE                     3            0  19 DEGREE                    3         6
+ 025083 FARADEY ROTATIONAL ANGLE                                         DEGREE                     3            0  19 DEGREE                    3         6
+ 025084 GEOMETRIC ROTATIONAL ANGLE                                       DEGREE                     5            0  26 DEGREE                    5         8
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0         1
+ 025090 ORBIT STATE FLAG                                                 CODE TABLE 25090           0            0   4 CODE TABLE 25090          0         2
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3         5
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2         5
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0         3
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0         1
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0         2
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0         2
+ 025098 ALTIMETER DATA QUALITY FLAG                                      FLAG TABLE 25098           0            0   9 FLAG TABLE 25098          0         3
+ 025099 ALTIMETER CORRECTION QUALITY                                     FLAG TABLE 25099           0            0   9 FLAG TABLE 25099          0         3
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5         6
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5         6
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025104 NUMBER OF WAVE-LENGTH BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025105 FIRST DIRECTIONAL BIN                                            DEGREES                    3            0  19
+ 025106 DIRECTIONAL BIN STEP                                             DEGREES                    3            0  19
+ 025107 FIRST WAVE-LENGTH BIN                                            M                          3            0  29 M                         3         9
+ 025108 LAST WAVE-LENGTH BIN                                             M                          3            0  29 M                         3         9
+ 025110 IMAGE PROCESSING SUMMARY                                         FLAG TABLE 25110           0            0  10
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025120 RA2-L2-PROCESSING FLAG                                           CODE TABLE 25120           0            0   2 CODE TABLE 25120          0         1
+ 025121 RA2-L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 25122           0            0   2 CODE TABLE 25122          0         1
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 25123           0            0   2 CODE TABLE 25123          0         1
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 25124           0            0   2 CODE TABLE 25124          0         1
+ 025125 MWR L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025127 INVERTED BAROMETER CORRECTION                                    M                          3       -32768  16 M                         3         5
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3         5
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16 M                         3         5
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16 M                         3         5
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16 M                         3         5
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025137 SEA STATE BIAS CORRECTION ON S BAND                              M                          3       -32768  16 M                         3         5
+ 025138 AVERAGE SIGNAL TO NOISE RATION                                   NUMERIC                    0        -2048  12 NUMERIC                   0         4
+ 025140 START CHANNEL                                                    NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025141 END CHANNEL                                                      NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025142 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6 NUMERIC                   0         2
+ 025143 LINEAR COEFFICIENT                                               NUMERIC                    6     -5000000  24 NUMERIC                   6         8
+ 025150 SATELLITE INTENSITY ANALYSIS METHOD OF TROPICAL CYCLONE          CODE TABLE 25150           0            0   4 CODE TABLE 25150          2         2
+ 025160 KU BAND INSTRUMENTAL CORRECTION                                  M                          4      -120000  18
+ 025161 C BAND INSTRUMENTAL CORRECTION                                   M                          4      -120000  18
+ 025162 SEA STATE BIAS CORRECTION ON C BAND                              M                          4        -6000  13
+ 025163 ALTIMETER IONOSPHERIC CORRECTION ON KU BAND                      M                          3       -32768  16
+ 025164 RADIOMETER WET                                                   M                          4        -5000  13
+ 025174 SMOS INFORMATION FLAG                                            FLAG TABLE 25174           0            0  14 FLAG TABLE 25174          0         5
+ 025193 ATTENUATION CORRECTION ON SIGMA0                                 dB                         3            0  14  
+ 025194 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4  
+ 025197 ANTENNA CORRECTIONS VERSION NUMBER                               NUMERIC                    0            0   5  
+ 025198 LOG (TEMP-RAD CENTRAL WAVE NUMBER)                               1/M                        8            0  30  
+ 025199 BANDWIDTH CORRECTION COEFFICIENT 1                               NUMERIC                    4       -10000  15  
+ 025200 BANDWIDTH CORRECTION COEFFICIENT 2                               NUMERIC                    5            0  17  
+ 025201 ALBEDO-RAD SOLAR FILTERED IRRADIANCE                             NUMERIC                    4            0  24  
+ 025202 ALBEDO-RAD EQUIVALENT FILTER WIDTH                               NUMERIC                   10            0  14  
+ 025203 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 25203           0            0  31  
+ 025204 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 25204           0            0  31  
+ 025205 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 25205           0            0  31  
+ 025206 FOV QUALITY FLAGS FOR ATOVS                                      FLAG TABLE 25206           0            0  31  
+ 025207 COMPASS AZIMUTH ANGLE                                            DEGREE                     2            0  16
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0         4
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0         9
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0         4
+ 026193 YEAR                                                             YEAR                       0            0  12  
+ 026194 MONTH                                                            MONTH                      0            0   4  
+ 026195 DAY                                                              DAY                        0            0   6  
+ 026196 HOUR                                                             HOUR                       0            0   5  
+ 026197 MINUTE                                                           MINUTE                     0            0   6  
+ 026198 SECOND                                                           SECOND                     0            0   6  
+ 026200 LOCATION WITHIN ASSIMILATION WINDOW IN TIME                      NUMERIC                    6            0  20  
+ 026201 HOURS INCLUDED                                                   FLAG TABLE 26201           0            0  26  
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027010 FOOTPRINT AXIS 1                                                 M                         -1            0  14 M                        -1         5
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2        10
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16 DEGREE TRUE               0         5
+ 027193 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16  
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028010 FOOTPRINT AXIS 2                                                 M                         -1            0  14 M                        -1         5
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2        10
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0         1
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0         1
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0         2
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0         5
+ 030010 NUMBER OF GRID POINTS                                            NUMERIC                    0            0  13 NUMERIC                   0         4
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0         2
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0         6
+ 030193 POSITION NUMBER ALONG SCAN                                       NUMERIC                    0            0   8  
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0         1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0         2
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0         1
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0         1
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0         1
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0        10
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0         1
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0         3
+ 033009 RELATIVE ERROR                                                   %                          6            0  20 %                         0         7
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0         2
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0         1
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0         1
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0         1
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0         1
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0         2
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0         1
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0         2
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0         1
+ 033028 SNAPSHOT OVERALL QUALITY                                         CODE TABLE 22028           0            0   3 CODE TABLE 22028          0         1
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0         8
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0         8
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0         8
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0         8
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0         2
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0         3
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0         7
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0         4
+ 033039 QUALITY FLAGS FOR RADIO OCCULTATION DATA                         FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0         6
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0         3
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0         1
+ 033042 TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE                     CODE TABLE 33042           0            0   3 CODE TABLE 33042          0         1
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0         3
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0         5
+ 033045 PROBABILITY OF FOLLOWING EVENT                                   %                          0            0   7 %                         0         3
+ 033046 CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECI %                          0            0   7 %                         0         3
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0        11
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 33048           0            0   2 CODE TABLE 33048          0         1
+ 033049 CONFIDENCE MEASURE OF WIND RETRIEVAL                             CODE TABLE 33049           0            0   2 CODE TABLE 33049          0         1
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0         2
+ 033052 S BAND OCEAN RETRACKING QUALITY                                  FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0         7
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0         7
+ 033060 GQISFLAGQUAL-INDIVIDUAL IASI-SYSTEM QUALITY FLAG                 CODE TABLE 33060           0            0   2 CODE TABLE 33060          0         1
+ 033061 GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE       %                          0            0   7 %                         0         3
+ 033062 GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX         %                          0            0   7 %                         0         3
+ 033063 GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE    %                          0            0   7 %                         0         3
+ 033064 GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE  %                          0            0   7 %                         0         3
+ 033065 GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC QUALITY FUNCTION       NUMERIC                    0            0  24 NUMERIC                   0        24
+ 033066 SBUV TOTAL OZONE QUALITY                                         CODE TABLE 33066           0            0   4 CODE TABLE 33066          0         2
+ 033067 SBUV PROFILE OZONE QUALITY                                       CODE TABLE 33067           0            0   4 CODE TABLE 33067          0         2
+ 033070 TOTAL OZONE QUALITY                                              CODE TABLE 33070           0            0   4 CODE TABLE 33070          0         2
+ 033071 PROFILE OZONE QUALITY                                            CODE TABLE 33071           0            0   4 CODE TABLE 33071          0         2
+ 033191 ECMWF WAM QC INDICATOR                                           CODE TABLE 033191          0            0   2
+ 033192 TEM1 CONFIDENCE                                                  %                          0            0   7
+ 033193 DATA QUALITY 3 BIT CODE                                          CODE TABLE 33193           0            0   3  
+ 033194 DATA QUALITY 2 BIT CODE                                          CODE TABLE 33194           0            0   2  
+ 033195 ECMWF SAR QC INDICATOR                                           CODE TABLE 33195           0            0   5  
+ 033196 ECMWF WAM QC INDICATOR                                           CODE TABLE 33196           0            0   2  
+ 033197 ECMWF SAR INVERSION QC INDICATOR                                 CODE TABLE 33197           0            0   3  
+ 033198 MINIMUM COST                                                     NUMERIC                    4            0  14  
+ 033199 1D VAR TOTAL PRECIPITABLE WATER RETRIEVED ERROR(S)               KG/M**2                    2            0  11  
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE 33200           0            0  31  
+ 033201 ANALYSIS REPORT STATUS EVENT                                     FLAG TABLE 33201           0            0  13  
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE 33202           0            0  31  
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE 33203           0            0  11  
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE 33204           0            0  21  
+ 033205 VARIATIONAL ANALYSIS BLACK LIST FLAG                             CODE TABLE 33205           0            0   4  
+ 033206 VARIATIONAL ANALYSIS QUALITY CONTROL FLAG                        CODE TABLE 33206           0            0   4  
+ 033207 VARIATIONAL ANALYSIS DEPARTURE FLAG                              CODE TABLE 33207           0            0   4  
+ 033208 VARIATIONAL ANALYSIS FIRST QUESS CHECK FLAG                      CODE TABLE 33208           0            0   4  
+ 033209 VARIATIONAL ANALYSIS FINAL FLAG                                  CODE TABLE 33209           0            0   4  
+ 033210 INCREMENTAL VARIATIONAL ANALYSIS UPDATE NUMBER                   NUMERIC                    0            0   7  
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10  
+ 033212 1D VAR ITERATION NUMBER                                          NUMERIC                    0            0  10  
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11  
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE 33214           0            0  11  
+ 033215 DIRECTIONAL SKILL                                                NUMERIC                    1        -4096  13  
+ 033216 1D VAR SURFACE TYPE QUALITY CONTROL                              CODE TABLE 33216           0            0   3  
+ 033217 1D VAR FAILURE INDICATOR                                         CODE TABLE 33217           0            0   2  
+ 033218 1D VAR ESTIMATE OF SCATTERING                                    NUMERIC                    2            0  12  
+ 033219 SSMI INDIPENDENT SCATTERING INDEX                                NUMERIC                    2       -50000  16  
+ 033220 VARIATIONAL ANALYSIS REPORT EVENTS (1)                           FLAG TABLE 33220           0            0  31  
+ 033221 VARIATIONAL ANALYSIS SYNOP EVENTS (2)                            FLAG TABLE 33221           0            0  31  
+ 033222 VARIATIONAL ANALYSIS AIREP EVENTS (2)                            FLAG TABLE 33222           0            0  31  
+ 033223 VARIATIONAL ANALYSIS SATOB EVENTS (2)                            FLAG TABLE 33223           0            0  31  
+ 033224 VARIATIONAL ANALYSIS DRIBU EVENTS (2)                            FLAG TABLE 33224           0            0  31  
+ 033225 VARIATIONAL ANALYSIS TEMP EVENTS (2)                             FLAG TABLE 33225           0            0  31  
+ 033226 VARIATIONAL ANALYSIS PILOT EVENTS (2)                            FLAG TABLE 33226           0            0  31  
+ 033227 VARIATIONAL ANALYSIS SATEM/TOVS EVENTS (2)                       FLAG TABLE 33227           0            0  31  
+ 033228 VARIATIONAL ANALYSIS PAOB EVENTS (2)                             FLAG TABLE 33228           0            0  31  
+ 033229 VARIATIONAL ANALYSIS SCATTEROMETER EVENTS (2)                    FLAG TABLE 33229           0            0  31  
+ 033230 VARIATIONAL ANALYSIS RAW RADIANCES EVENTS (2)                    FLAG TABLE 33230           0            0  31  
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE 33231           0            0   6  
+ 033232 REPORT BLACK LIST EVENTS                                         FLAG TABLE 33232           0            0  31  
+ 033233 VARIATIONAL ANALYSIS REPORT STATUS                               FLAG TABLE 33233           0            0  31  
+ 033234 VARIATIONAL ANALYSIS DATUM STATUS                                FLAG TABLE 33234           0            0  31  
+ 033236 VARIATIONAL ANALYSIS DATUM EVENTS (1)                            FLAG TABLE 33236           0            0  31  
+ 033237 VARIATIONAL ANALYSIS SYNOP DATUM EVENTS (2)                      FLAG TABLE 33237           0            0  31  
+ 033238 VARIATIONAL ANALYSIS AIREP DATUM EVENTS (2)                      FLAG TABLE 33238           0            0  31  
+ 033239 VARIATIONAL ANALYSIS SATOB DATUM EVENTS (2)                      FLAG TABLE 33239           0            0  31  
+ 033240 VARIATIONAL ANALYSIS DRIBU DATUM EVENTS (2)                      FLAG TABLE 33240           0            0  31  
+ 033241 GROSS ERROR PROBABILITY                                          NUMERIC                    3            0  10  
+ 033242 GROSS ERROR INDICATOR                                            CODE TABLE 33242           0            0   2  
+ 033243 VARIATIONAL ANALYSIS TEMP DATUM EVENTS (2)                       FLAG TABLE 33243           0            0  31  
+ 033244 VARIATIONAL ANALYSIS PILOT DATUM EVENTS (2)                      FLAG TABLE 33244           0            0  31  
+ 033245 VARIATIONAL ANALYSIS SATEM/TOVS DATUM EVENTS (2)                 FLAG TABLE 33245           0            0  31  
+ 033246 VARIATIONAL ANALYSIS PAOB DATUM EVENTS (2)                       FLAG TABLE 33246           0            0  31  
+ 033247 VARIATIONAL ANALYSIS SCATTEROMETER DATUM EVENTS (2)              FLAG TABLE 33247           0            0  31  
+ 033248 VARIATIONAL ANALYSIS RAW RADIANCES DATUM EVENTS (2)              FLAG TABLE 33248           0            0  31  
+ 033249 DATUM BLACK LIST EVENTS                                          FLAG TABLE 33249           0            0  31  
+ 033250 PROBABILITY OF GROSS ERROR                                       NUMERIC                    6            0  20  
+ 033251 RANGE OF POSSIBLE VALUES                                         NUMERIC                    2            0  14  
+ 033252 MANUAL-AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33252           0            0   4  
+ 033253 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7  
+ 033254 WIND CORRELATION METHOD                                          FLAG TABLE 33254           0            0  20  
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0         3
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0         1
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0         4
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0         1
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0         2
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0         1
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0         2
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0         1
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0         2
+ 040001 SURFACE SOIL MOISTURE (MS)                                       %                          1            0  10 %                         1         4
+ 040002 ESTIMATED ERROR IN SURFACE SOIL MOISTURE                         %                          1            0  10 %                         1         4
+ 040003 MEAN SURFACE SOIL MOISTURE                                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040004 RAIN FALL DETECTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040005 SOIL MOISTURE CORRECTION FLAG                                    FLAG TABLE 40005           0            0   8 FLAG FLAG TABLE 40005     0         3
+ 040006 SOIL MOISTURE PROCESSING FLAG                                    FLAG TABLE 40006           0            0  16 FLAG FLAG TABLE 40006     0         5
+ 040007 SOIL MOISTURE QUALITY                                            %                          1            0  10 %                         1         4
+ 040008 FROZEN LAND SURFACE FRACTION                                     %                          1            0  10 %                         1         4
+ 040009 INUNDATION AND WETLAND FRACTION                                  %                          1            0  10 %                         1         4
+ 040010 TOPOGRAPHIC COMPLEXITY                                           %                          1            0  10 %                         1         4
+ 040011 INTERPOLATION FLAG                                               FLAG TABLE 40011           0            0   8 FLAG TABLE 40011          0         3
+ 040012 RADIOMETER DATA QUALITY FLAG                                     FLAG TABLE 40012           0            0   8 FLAG TABLE 40012          0         3
+ 040013 RADIOMETER BRIGHTNESS TEMPERATURE INTERPOLATION FLAG             CODE TABLE 40013           0            0   3
+ 040014 HIGH FREQUENCY FLUCTUATIONS OF THE SEA SURFACE TOPOGRAPHY CORRECTM                          4        -3000  13
+ 040018 GLACAVGLMAGLLS - AVERAGE OF IMAGER MEASUREMENTS                  W/(M**2 SR M**-1)          6            0  24
+ 040019 GLACVARLMAGLLS - VARIANCE OF IMAGER MEASUREMENTS                 W/(M**2 SR M**-1)          6            0  24
+ 040020 GQISFLAGQUALDETAILED - QUALITY FLAG FOR THE SYSTEM               FLAG TABLE 40020           0            0  17
+ 040021 FRACTION OF WEIGHTED AVHRR PIXEL IN IASI FOV COVERED WITH SNOW/IC%                          0            0   7
+ 040022 NUMBER OF MISSING, BAD OR FAILED AVHRR PIXELS                    NUMERIC                    0            0   7
+ 040192 CLOUD FORMATION AND HEIGHT ASSIGNMENT                            FLAG TABLE 40192           0            0  16
+ 040193 INSTRUMENT DETECTING CLOUDS                                      FLAG TABLE 40193           0            0  16
+ 040194 VALIDATION FLAG FOR IASI LEVEL 1 PRODUCT                         FLAG TABLE 40194           0            0  16
+ 040195 QUALITY AND COMPLETENESS OF RETRIEVAL                            CODE TABLE 40195           0            0   4
+ 040196 RETRIEVAL CHOICE INDICATOR                                       FLAG TABLE 40196           0            0   8
+ 040197 SATELLITE MANOEUVRE INDICATOR                                    CODE TABLE 40197           0            0   3
+ 040198 SELECTION OF BACKGROUND STATE                                    CODE TABLE 40198           0            0   3
+ 040199 INTEGRATED N2O DENSITY                                           KG/M**2                    6            0  16
+ 040200 INTEGRATED CO DENSITY                                            KG/M**2                    7            0  16
+ 040201 INTEGRATED CH4 DENSITY                                           KG/M**2                    6            0  16
+ 040202 INTEGRATED CO2 DENSITY                                           KG/M**2                    3            0  16
+ 040203 COLD/WARM LOAD FLAG                                              FLAG TABLE 40203           0            0  12
+ 040210 OCEANSAT2 SIGMA_0 FLAG                                           FLAG TABLE 40210           0            0  25
+ 049193 SAR INVERSION QC FLAGS                                           FLAG TABLE 49193           0            0  15  
+ 049194 ALTIMETER WAVE HEIGHT QC FLAFS                                   FLAG TABLE 49194           0            0  15  
+ 055003 DATA EXTRACTION INDICATOR                                        FLAG TABLE  55003          0            0   8
diff --git a/bufrtables/B0000000000098014001.TXT b/bufrtables/B0000000000098014001.TXT
new file mode 100755
index 0000000..3d90dd0
--- /dev/null
+++ b/bufrtables/B0000000000098014001.TXT
@@ -0,0 +1,1616 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 000004 BUFR/CREX MASTER TABLE                                           CCITTIA5                   0            0  16 CHARACTER                 0         2              
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 000006 BUFR MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2              
+ 000007 CREX MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2              
+ 000008 BUFR LOCAL TABLE VERSION NUMBER                                  CCITTIA5                   0            0  16 CHARACTER                 0         2              
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0         1              
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0         2              
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0        24              
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0         1              
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0         1              
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0        10              
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0         6              
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0         2              
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3              
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0         1              
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0         1              
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0         5              
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0         4              
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0         9              
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0         3              
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2         4              
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20              
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0         5              
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0         2              
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0         4              
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0        28              
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0         3              
+ 001024 WIND SPEED SOURCE                                                CODE TABLE 1024            0            0   5
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0        10              
+ 001028 AEROSOL OPTICAL DEPTH (AOD) SOURCE                               CODE TABLE 1028            0            0   5 CODE TABLE 1028           0         2
+ 001029 SSI SOURCE                                                       CODE TABLE 1029            0            0   5 CODE TABLE 1029           0         2
+ 001030 NUMERICAL MODEL IDENTIFIER                                       CCITTIA5                   0            0 128 CHARACTER                 0        16              
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0         5              
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0         3              
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0         3              
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0         3              
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0         5              
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0         7              
+ 001037 SIGMET SEQUENCE IDENTIFIER                                       CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 001038 SOURCE OF SEA ICE FRACTION                                       CODE TABLE 1038            0            0   5 CODE TABLE 1035           0         2
+ 001039 GRAPHICAL AREA FORECAST (GFA) SEQUENCE IDENTIFIER                CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10              
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5        10              
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10              
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0         6              
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0        12              
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0         8              
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 001065 ICAO REGION IDENTIFIER                                           CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0         5              
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0        20              
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0         4              
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0         1              
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0        20              
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0        32              
+ 001087 WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER                NUMERIC                    0            0  23 NUMERIC                   0         7              
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0         3              
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0         4              
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0         3              
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0        12              
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0         5              
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 001096 STATION ACQUISITION                                              CCITTIA5                   0            0 160 CHARACTER                 0        20              
+ 001101 STATE IDENTIFIER                                                 CODE TABLE 1101            0            0  10 CODE TABLE 1101           0         3
+ 001102 NATIONAL STATION NUMBER                                          NUMERIC                    0            0  30 NUMERIC                   0         9
+ 001124 GRID POINT IDENTIFIER                                            NUMERIC                    0            0  24 NUMERIC                   0         8              
+ 001144 SNAPSHOT IDENTIFIER                                              NUMERIC                    0            0  31 NUMERIC                   0        10              
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE 001192          0            0   8                                     
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE 1193            0            0   4                                                    
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72                                                    
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72                                                    
+ 001196 CONSTANT LEVEL BALLOON IDENTIFIER                                CCITTIA5                   0            0  72                                                    
+ 001197 RTP - PLATFORM TYPE                                              CODE TABLE 1197            0            0  10                                                    
+ 001198 ITP - DECK ID                                                    CODE TABLE 1198            0            0  10                                                    
+ 001199 DUP - DUPLICATE STATUS                                           CODE TABLE 1199            0            0   4                                                    
+ 001201 GENERATING APPLICATION                                           CODE TABLE 1201            0            0   8                                                    
+ 001205 SATELLITE IDENTIFIER                                             CODE TABLE 1205            0            0  10                                                    
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31                                                    
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31                                                    
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31                                                    
+ 001211 ORIGIN OF SEA SURFACE ANALYSIS                                   CCITTIA5                   0            0 160 CHARACTER                 0        20              
+ 001220 RADAR COMPOSITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20              
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0         1              
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0         2              
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0         2              
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0         2              
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2         3              
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0         3              
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0         2              
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0         2              
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0         3              
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0         2              
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0         2              
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0         4              
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0         3              
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0         3              
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0         3              
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0         2              
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0         2              
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0         9              
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2         4              
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2         4              
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0         6              
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0         6              
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0         1              
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0         2              
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0         1              
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0         1              
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0         2              
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0         3              
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0         1              
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0         1              
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0         2              
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0         1              
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0         2              
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0         2              
+ 002042 INDICATOR FOR SEA SURFACE CURRENT SPEED                          CODE TABLE 2042            0            0   2 CODE TABLE 2042           0         1              
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0         2              
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0         2              
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0         2              
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0         2              
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0         3              
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0         7              
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0         2              
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0         2              
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0         2              
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0         2              
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0         2              
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0         2              
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0         2              
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0         2              
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0         2              
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0         2              
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0         1              
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0         2              
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2         5              
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0         1              
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0         5              
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0         2              
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5         5              
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0         2              
+ 002071 SPECTROGRAPHIC WAVELENGTH                                        M                         13            0  30 M                        13        10              
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0         2              
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0         2              
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3         4              
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0         2              
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0         2              
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3         4              
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1         4              
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4         3              
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0         2              
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0         2              
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0         2              
+ 002099 POLARISATION                                                     CODE TABLE 2099            0            0   3 CODE TABLE 2099           0         1              
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1         4              
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0         2              
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0         3              
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0         1              
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0         2              
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0         2              
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1         2              
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0         2              
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0         2              
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2         4              
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2         4              
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1         4              
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1         4              
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0         2              
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0         5              
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0         2              
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7 %                         0         3              
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3              
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3              
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 2119            0            0   3 CODE TABLE 2119           0         1              
+ 002120 OCEAN WAVE FREQUENCY                                             Hz                         3            0  10 Hz                        3         4              
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8         3              
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6         3              
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4         3              
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1         3              
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1         3              
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7         2              
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6         3              
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5         2              
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0         3              
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0         3              
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0         1              
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2         2              
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2         2              
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2         5              
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2         5              
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3         5              
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0         3              
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0         3              
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0         2              
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0         2              
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0         2              
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0         2              
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0         2              
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0         2              
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0         4              
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0        10              
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8         8              
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8         8              
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7 %                         0         3              
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7 %                         0         3              
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0         3              
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0         3              
+ 002160 WAVE LENGTH OF THE RADAR                                         CODE TABLE 2160            0            0   4 CODE TABLE 2160           0         2              
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0         2              
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0         1              
+ 002165 RADIANCE FLAG                                                    FLAG TABLE 2165            0            0  15 FLAG TABLE 2165           0         5              
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0         2              
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0         2              
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0         5              
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0         2              
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0         3              
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4         4              
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9 NUMERIC                   0         3              
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0         2              
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0         2              
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0         2              
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0         2              
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0         2              
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0         2              
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0         7              
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0         2              
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0         2              
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0         2              
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0   4 CODE TABLE 2185           0         2              
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0        10              
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0         6              
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0         7              
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189            0            0  12 FLAG TABLE 2189           0         4              
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7 %                         0         3              
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9
+ 002193 1D VAR SATELLITE CHANNEL(S) USED                                 FLAG TABLE 2193            0            0  28                                                    
+ 002194 CONSTANT LEVEL BALLOON TYPE                                      CODE TABLE 2194            0            0   4                                                    
+ 002195 TYPE OF SATELLITE INSTRUMENTATION                                CODE TABLE 2195            0            0   4                                                    
+ 002196 SATELLITE CLASSIFICATION                                         CODE TABLE 2196            0            0   9                                                    
+ 002197 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26                                                    
+ 002198 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26                                                    
+ 002199 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2199            0            0   4                                                    
+ 002200 LATITUDINAL RESOLUTION                                           DEGREE                     5            0  25                                                        
+ 002201 LONGITUDINAL RESOLUTION                                          DEGREE                     5            0  25                                                        
+ 002202 SIMULATED DATA PROCESSING TECHNIQUE USED                         FLAG TABLE 2202            0            0   4                                                    
+ 002205 LATITUDINAL RESOLUTION                                           DEGREE                     3            0   9                                                    
+ 002206 LONGITUDINAL RESOLUTION                                          DEGREE                     3            0   9                                                    
+ 002207 TYPE OF SCAN                                                     CODE TABLE 2207            0            0   3                                                    
+ 002220 DATA PRODUCER                                                    CODE TABLE 2220            0            0   9                                                    
+ 002221 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18                                                    
+ 002222 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18                                                    
+ 002223 TOVS/ATOVS/AVHRR CHANNEL NUMBER                                  CODE TABLE 2223            0            0   6                                                    
+ 002231 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2231            0            0   4                                                    
+ 002232 TRACER CORRELATION METHOD                                        CODE TABLE 2232            0            0   3                                                    
+ 002240 TYPE OF TERMODYNAMIC SENSING                                     CODE TABLE 2240            0            0   8                                                    
+ 002241 TYPE OF ROCKET MOTOR                                             CODE TABLE 2241            0            0   3                                                    
+ 002242 TYPE OF WIND SENSING EQUIPMENT                                   CODE TABLE 2242            0            0   8                                                    
+ 002243 TERMODYNAMIC CORRECTION TECHNIQUE                                CODE TABLE 2243            0            0   3                                                    
+ 002244 WIND CORRECTION TECHNIQUE                                        CODE TABLE 2244            0            0   3                                                    
+ 002245 METHOD OF REDUCING OF DATA                                       CODE TABLE 2245            0            0   4                                                    
+ 002251 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2251            0            0   4                                                    
+ 002252 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2252            0            0  31                                                    
+ 002253 HUMIDITY COMPUTATIONAL METHOD                                    CODE TABLE 2253            0            0   8                                                    
+ 002254 RADIANCE TYPE                                                    CODE TABLE 2254            0            0   4                                                    
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0         4              
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0         2              
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0         2              
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0         2              
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0         2              
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0         2              
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6         8              
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0         4              
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0         4              
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0         4              
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0         4              
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0         4              
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0         4              
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0         4              
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0         4              
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0         4              
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0         4              
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0         4              
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0         4              
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0         4              
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0         3              
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0         2              
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0         4              
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0         3              
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2              
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2              
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0         2              
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0         2              
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0         2              
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0         2              
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0         2              
+ 004080 AVERAGING PERIOD FOR FOLLOWING VALUE                             CODE TABLE 4080            0            0   4 CODE TABLE 4080           0         2              
+ 004086 LONG TIME PERIOD OR DISPLACEMENT                                 SECOND                     0        -8192  15 SECOND                    0         5              
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7              
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4              
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7              
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4              
+ 005015 LATITUDE DISPLACEMENT (HIGH ACCURACY)                            DEGREE                     5     -9000000  25 DEGREE                    5         7              
+ 005016 LATITUDE DISPLACEMENT (COARSE ACCURACY)                          DEGREE                     2        -9000  15 DEGREE                    2         4              
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2         5              
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2         5              
+ 005023 SUN TO SATELLITE AZIMUTH DIFFERENCE                              DEGREE                     1        -1800  12 DEGREE                    1         4              
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0         4              
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0         4              
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1         5              
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4              
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0         2              
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0         8              
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0         2^M            
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4              
+ 005045 FIELD OF REGARD NUMBER                                           NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0         2              
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0         2              
+ 005060 Y ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8              
+ 005061 Z ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8              
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10 NUMERIC                   0         4              
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11 NUMERIC                   0         4              
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 005196 SCAN ANGLE                                                       DEGREE                     1        -1800  12 DEGREE                    1         4              
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31 M                         2        10              
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16 DEGREE                    2         5              
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8              
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5              
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8              
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5              
+ 006015 LONGITUDE DISPLACEMENT (HIGH ACCURACY)                           DEGREE                     5    -18000000  26 DEGREE                    5         8              
+ 006016 LONGITUDE DISPLACEMENT (COARSE ACCURACY)                         DEGREE                     2       -18000  16 DEGREE                    2         5              
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1         4              
+ 006029 WAVE NUMBER                                                      1/M                        1            0  22 M                         1         7 
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5         4              
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0         4              
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1         5              
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0         4              
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31 M                         2        10              
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13 ADS/M                     5         4              
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0         5              
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1         5              
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6              
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5              
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0         4              
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0         5              
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0         6              
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7              
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5              
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1         5              
+ 007012 GRID POINT ALTITUDE                                              M                          2       -50000  20 M                         2         7              
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2         5              
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2         5              
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2         5              
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2         5              
+ 007026 SATELLITE ZENITH ANGLE                                           DEGREE                     4      -900000  21 DEGREE                    4         7              
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1        -4000  17 M                         1         5              
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1        -4000  17 M                         1         5              
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2         5              
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1         4              
+ 007040 IMPACT PARAMETER (SEE NOTE 8)                                    M                          1     62000000  22 M                         1         8              
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2         5              
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1         6              
+ 007063 DEPTH BELOW SEA/WATER SURFACE                                    M                          2            0  20 M                         2         7              
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0         2              
+ 007065 WATER PRESSURE                                                   PA                        -3            0  17 PA                        0         6              
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0         4              
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31 M                         2        10              
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0         3              
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0         2              
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0         2              
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0         1              
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0         2              
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0         3              
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0         2              
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0         3              
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0         2              
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0         2              
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0         2              
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0         1              
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0         1              
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0         2              
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0         1              
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0         1              
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0         6              
+ 008019 QUALIFIER FOR FOLLOWING CENTRE IDENTIFIER                        CODE TABLE 8019            0            0   4 CODE TABLE 8019           0         2              
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0         2              
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0         2              
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0         2              
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0         2              
+ 008026 MATRIX SIGNIFICANCE                                              CODE TABLE 8026            0            0   6 CODE TABLE 8026           0         2              
+ 008029 REMOTLY SENSED SURFACE TYPE                                      CODE TABLE 8029            0            0   8 CODE TABLE 8029           0         3              
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0         4              
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0         3              
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0         1              
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0         1              
+ 008039 TIME SIGNIFICANCE ( AVIATION FORECAST)                           CODE TABLE 8039            0            0   6 CODE TABLE 8039           0         2              
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0         2              
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0         2              
+ 008042 EXTENDED VERTICAL SOUNDING SIGNIFICANCE                          FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0         6              
+ 008043 ATMOSPHERIC CHEMICAL OR PHISICAL CONSTITUENT TYPE                CODE TABLE 8043            0            0   8 CODE TABLE 8043           0         3              
+ 008044 CAS REGISTRY NUMBER                                              CCITTIA5                   0            0  88 CHARACTERS                0        11              
+ 008045 PARTICULATE MATTER CHARACTERIZATION                              CODE TABLE 8045            0            0   8 CODE TABLE 8045           0         3              
+ 008049 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0         2              
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0         1              
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0         2              
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0         1              
+ 008054 QUALIFIER FOR WIND SPEED OR WIND GUST                            CODE TABLE 8054            0            0   3 CODE TABLE 8054           0         1              
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0         2              
+ 008065 SUN-GLINT INDICATOR                                              CODE TABLE 8065            0            0   2 CODE TABLE 8065           0         1              
+ 008066 SEMI-TRANSPARENCY INDICATOR                                      CODE TABLE 8066            0            0   2 CODE TABLE 8066           0         1              
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0         2              
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0         1              
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0         1              
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0         1              
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0         2              
+ 008077 RADIOMETER SENSED SURFACE TYPE                                   CODE TABLE 8077            0            0   7 CODE TABLE 8077           0         3              
+ 008079 PRODUCT STATUS                                                   CODE TABLE 8079            0            0   4 CODE TABLE 8079           0         2              
+ 008080 QUALIFIER FOR GTSPP QUALITY FLAG                                 CODE TABLE 8080            0            0   6 CODE TABLE 8080           0         2              
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE 8081            0            0   6 CODE TABLE 8081           0         2              
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0         1              
+ 008083 NOMINAL VALUE INDICATOR                                          FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0         5              
+ 008085 BEAM IDENTIFIER                                                  CODE TABLE 8085            0            0   3 CODE TABLE 8085           0         1              
+ 008090 DECIMAL SCALE OF FOLLOWING SIGNIFICANDS                          NUMERIC                    0         -127   8 NUMERIC                   0         3              
+ 008193 TIME QUALIFIER                                                   CODE TABLE 8193            0            0   6 CODE TABLE 8193           0         2              
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8194            0            0   4 CODE TABLE 8194           0         2              
+ 008195 DATA TYPE                                                        CODE TABLE 8195            0            0   7 CODE TABLE 8195           0         3              
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 8222            0            0   4 CODE TABLE 8222           0         2              
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE 8223            0            0   7 FLAG TABLE 8223           0         3              
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 008225 GHRSST SURFACE TYPE                                              FLAG TABLE 8225            0            0   5 FLAG TABLE 8225           0         2              
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0         5              
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1         5              
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6              
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5              
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0         6              
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7              
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5              
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5              
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5              
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2        10              
+ 010032 SATELLITE DISTANCE TO EARTH'S CENTRE                             M                          1            0  27 M                         2         9              
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27 M                         2         9              
+ 010034 EARTH RADIUS                                                     M                          1            0  27 M                         2         9              
+ 010035 EARTH'S LOCAL RADIUS OF CURVATURE                                M                          1     62000000  22 M                         1         8              
+ 010036 GEOID UNDULATION (SEE NOTE 4)                                    M                          2       -15000  15 M                         2         6              
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0         4              
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2         5              
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1         5              
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1         5              
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1         4              
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1         4              
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1         4              
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0         2              
+ 010064 SIGMET CRUISING LEVEL                                            CODE TABLE 10064           0            0   3 CODE TABLE 10064          0         1              
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0         5              
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15 DEGREE                    2         5              
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31 M                         3        10              
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      MS-1                       3       -65536  17 MS-1                      3         6              
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE**2                  2            0  16 DEGREE**2                 2         5              
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE**2                  2            0  16 DEGREE**2                 2         5              
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18 M                         3         6              
+ 010086 GEOID'S HEIGHT                                                   M                          3      -131072  18 M                         3         6              
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18 M                         3         6              
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16 M                         3         5              
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16 M                         3         5              
+ 010090 LONG PERIOD  TIDE HEIGHT                                         M                          3       -32768  16 M                         3         5              
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16 M                         3         5              
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16 M                         3         5              
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16 M                         3         5              
+ 010095 HEIGHT OF ATMOSPHERE USED                                        M                          0            0  16 M                         0         5              
+ 010096 MEAN DYNAMIC TOPOGRAPHY                                          M                          3      -131072  18                                                    
+ 010097 MEAN SEA SURFACE HEIGHT FROM ALTIMETER ONLY                      M                          3      -131072  18                                                    
+ 010098 LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 1             M                          4        -2000  12                                                    
+ 010099 LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 2             M                          4        -2000  12                                                    
+ 010100 NON-EQUILIBRIUM LONG PERIOD TIDE HEIGHT                          M                          4        -2000  12                                                    
+ 010101 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM  DATA     DEGREE**2                  2       -32768  16 DEGREE**2                 2         5              
+ 010102 SEA SURFACE HEIGHT ANOMALY                                       M                          3       -32768  16
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20                                                    
+ 010196 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15                                                    
+ 010197 ANEMOMETER HEIGHT                                                M                          0            0   9                                                    
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1         4              
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4              
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4              
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1         4              
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2         4              
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1         4              
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1         4              
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0         3              
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9         6              
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9         6              
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2         6              
+ 011030 EXTENDED DEGREE OF TURBULENCE                                    CODE TABLE 11030           0            0   6 CODE TABLE                0         2              
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0         2              
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1         5              
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1         5              
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1         4              
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2         5              
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1         4              
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0         2              
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0         2              
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0         2              
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1         4              
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1         4              
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1         4              
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1         4              
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1         4              
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1         4              
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1         4              
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1         3              
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2         5              
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2         5              
+ 011054 MEAN WIND DIRECTION FOR 1500 M - 3000 M                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 011055 MEAN WIND SPEED FOR 1500 M - 3000 M                              M/S                        1            0  12 M/S                       1         4              
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1         4              
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1         4              
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3         5              
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3         4              
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2         4              
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2         4              
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3              
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3              
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0         4              
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2         5              
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2         4              
+ 011083 WIND SPEED                                                       KM/HOUR                    0            0   9 KM/HOUR                   0         3              
+ 011084 WIND SPEED                                                       KNOT                       0            0   8 KNOT                      0         3              
+ 011085 MAXIMUM WIND GUST SPEED                                          KM/HOUR                    0            0   9 KM/HOUR                   0         3              
+ 011086 MAXIMUM WIND GUST SPEED                                          KNOT                       0            0   8 KNOT                      0         3              
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4              
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4              
+ 011097 WIND SPEED FROM ALTIMETER                                        M/S                        2            0  12                                                    
+ 011098 WIND SPEED FROM RADIOMETER                                       M/S                        2            0  12                                                    
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13 M/S                       1         4^M            
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13 M/S                       1         4^M            
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13 M/S                       1         4^M            
+ 011195 STEADINESS OF WIND                                               %                          0            0   7 %                         0         3              
+ 011196 FRICTION VELOCITY                                                M/S                        5            0  19                                                    
+ 011201 HORIZONTAL LINE OF SIGHT COMPONENT                               M/S                        1        -4096  13                                                    
+ 011210 1D VAR WIND SPEED RETREIVED ERRO(S)                              M/S                        2            0  12                                                    
+ 011211 WIND SPEED INDEPENDENT ESTIMATE OF ERROR(S)                      M/S                        2            0  12                                                    
+ 011220 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  12                                                    
+ 011221 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15                                                    
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M            
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13 M/S                       1         4^M            
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M            
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13 M/S                       1         4^M            
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1         3              
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1         3              
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1         3              
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3              
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3              
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1         3              
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1         3              
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3              
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3              
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1         3              
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3              
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3              
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3              
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3              
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4              
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4              
+ 012023 TEMPERATURE                                                      C                          0          -99   8 C                         0         2              
+ 012024 DEW POINT TEMPERATURE                                            C                          0          -99   8 C                         0         2              
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1         3              
+ 012049 TEMPERATURE CHANGE OVER SPECIFIED PERIOD                         K                          0          -30   6 C                         0         2              
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1         3              
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1         3              
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1         3              
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1         3              
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1         3              
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1         3              
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1         4              
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1         4              
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2         5              
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1         4              
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6         9              
+ 012073 TEMPERATURE                                                      K                          2            0  16 K                         1         4              
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3         5              
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3         5              
+ 012080 BRIGHTNESS TEMPERATURE REAL PART                                 K                          2       -10000  16 K                         2         5              
+ 012081 BRIGHTNESS TEMPERATURE IMAGINARY PART                            K                          2       -10000  16 K                         2         5              
+ 012082 PIXEL RADIOMETRIC ACCURACY                                       K                          2            0  12 K                         2         4              
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2         4              
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2         4              
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2         4              
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4              
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4              
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2         4              
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2         4              
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4              
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4              
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2         4              
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4              
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4              
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4              
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4              
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2         4              
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2         4              
+ 012121 GROUND MINIMUM TEMPERATURE                                       K                          2            0  16 C                         2         4              
+ 012122 GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT                K                          2            0  16 C                         2         4              
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2         4              
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2         4              
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2         4              
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2         4              
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2         4              
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2         4              
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2         4              
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2         5              
+ 012165 DIRECT SUN BRIGHTNESS TEMPERATURE                                K                          0            0  23 K                         0         7              
+ 012166 SNAPSHOT ACCURACY                                                K                          1        -4000  13 K                         1         4              
+ 012167 RADIOMETRIC ACCURACY (PURE POLARISATION)                         K                          1            0   9 K                         1         3              
+ 012168 RADIOMETRIC ACCURACY ( CROSS POLARISATION )                      K                          1            0   9 K                         1         3              
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2         5              
+ 012180 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5              
+ 012181 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5              
+ 012182 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR             K                          2            0  16 K                         2         5              
+ 012183 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5              
+ 012184 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5              
+ 012185 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16 K                         2         5              
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16 K                         2         5              
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16 K                         2         5              
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5              
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5              
+ 012193 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12                                                    
+ 012194 RADIANCE                                                         W/M**2*STER*M**(-1)        6            0  31                                                    
+ 012195 SPECTRAL RADIANCE                                                W/M**2*STER*M**(-1)       10            0  31                                                    
+ 012196 RADIANCE                                                         W/M**2*STER                3            0  16                                                    
+ 012197 MAXIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12                                                    
+ 012198 MINIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12                                                    
+ 012199 MAXIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12                                                    
+ 012200 MINIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12                                                    
+ 012201 BRIGHTNES TEMPERATURE OR STOKES PARAMETER                        K                          3      -271300  20                                                    
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5         5              
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5         5              
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0         3              
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1         4              
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3         3              
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1         5              
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3              
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3              
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1         4              
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1         5              
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2         4              
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2         5              
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4         4              
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7         4              
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0         3              
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1         4              
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5              
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5              
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5              
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5              
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0         3              
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1         3              
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1         4              
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0         1              
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0         1              
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0         2              
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0         2              
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0         2              
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0         2              
+ 013044 K INDEX                                                          K                          0          -30   8 K                         0         3              
+ 013045 KO INDEX                                                         K                          0          -30   8 K                         0         3              
+ 013046 MAXIMUM BUOYANCY                                                 K                          0          -30   8 K                         0         3              
+ 013047 MODIFIED SHOWALTER STABILITY INDEX                               K                          0          -60   6 C                         0         2              
+ 013048 WATER FRACTION                                                   %                          1            0  10 %                         1         4              
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0         2              
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1         5              
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1         3              
+ 013056 CHARACTER AND INTENSITY OF PRECIPITATION                         CODE TABLE 13056           0            0   4 CODE TABLE 13056          0         2              
+ 013057 TIME OF BEGINNING OR END OF PRECIPITATION                        CODE TABLE 13057           0            0   4 CODE TABLE 13057          0         2              
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1         3              
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1         5              
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2         5              
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2         4              
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2         4              
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1         3              
+ 013081 WATER CONDUCTIVITY                                               S M-1                      3            0  14 S M-1                     3         4              
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1         4              
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6         5              
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0         4              
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3         4              
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10 KG/M**2                   1         4              
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8 KG/M**2                   2         3              
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19 KG/M**2                   4         6              
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4              
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4              
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30 KG/M**2                   8        10              
+ 013155 INTENSITY OF PRECIPITATION (HIGH ACCURACY)                       KG/M**2S                   5           -1  16 MM/HOUR                   1         5
+ 013192 RELATIVE HUMIDITY AT 2 M                                         %                          0            0   8
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8                                                    
+ 013194 TOTAL COLUMN WATER                                               KG/M**2                    2            0  11                                                    
+ 013195 RAIN RATE                                                        KG/M**2HOUR                0            0   5                                                    
+ 013196 ANTECEDENT PRECIPITATION INDEX                                   KG/M**2                    0            0   7                                                    
+ 013197 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    1            0  10                                                    
+ 013198 RAIN FLAG                                                        CODE TABLE 13198           0            0   3                                                    
+ 013199 SPECIFIC HUMIDITY AT 2 M                                         KG/KG                      5            0  14                                                    
+ 013201 CLOUD LIQUID WATER                                               KG/KG                      7            0  14                                                    
+ 013202 TYPE OF SURFACE                                                  CODE TABLE 13202           0            0   8                                                    
+ 013203 1D VAR ESTIMATE OF RAIN RATE                                     KG/M**2*HOUR               2            0  12                                                    
+ 013204 SSMI INDEPENDENT ESTIMATE OF RAIN RATE                           KG/M**2*HOUR               2            0  12                                                    
+ 013205 CLOUD LIQUID WATER PATH                                          KG/M**2                    4            0  14                                                    
+ 013206 TOTAL PRECIPITATION ICE CONTENT                                  KG/M**2                    6            0  14                                                    
+ 013207 TOTAL CLOUD LIQUID WATER                                         KG/M**2                    6            0  14                                                    
+ 013208 SURFACE RAIN RATE ( INSTANTANEOUS )                              KG/M**2*S                  5            0  17                                                    
+ 013209 RAIN POSSIBILITY                                                 NUMERIC                    0         -256   9                                                    
+ 013210 1D VAR CLOUD LIQUID WATER PATH RETRIEVED ERROR(S)                KG/M**2                    4            0  14                                                    
+ 013211 TOTAL PRECIPITABLE WATER INDIPENDENT ESTIMATE OF ERROR(S)        KG/M**2                    2            0  11                                                    
+ 013212 CLOUD LIQUID WATER PATH INDIPENDENT ESTIMATE OF ERROR(S)         KG/M**2                    4            0  14                                                    
+ 013230 CONVECTIVE PRECIPITATION                                         KG/M**2                    1           -1  14                                                    
+ 013231 LARGE SCALE PRECIPITATION                                        KG/M**2                    1           -1  14                                                    
+ 013240 AIR DENSITY                                                      KG/M**3                    3            0  10                                                    
+ 013241 CONVECTIVE AVAILABLE POTENTIAL ENERGY                            J/KG                       1            0  17                                                    
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3       -65536  17 J/M**2                   -3         5              
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4         5              
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4         5              
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                     0         -512  10 W/M**2                    0         4              
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                     0        -2048  12 W/M**2                    0         4              
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0         3              
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5              
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5              
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4         5              
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4         5              
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5              
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5              
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0         3              
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0         3              
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  20 J/M**2                   -2         6              
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  20 J/M**2                   -2         6              
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  20 J/M**2                   -2         6              
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0         4              
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0         4              
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0         3              
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0         4              
+ 014035 SOLAR RADIATION FLUX                                             W/M**2                     1            0  14 W/M**2                    1         5
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0         3              
+ 014044 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         7      -100000  22 WM-2SR-1CM                7         7
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11 WM-2SR-1CM                0         4              
+ 014046 SCALED IASI RADIANCE                                             (W/M**2)*(1/SR)*M          0        -5000  16 (W/M**2)*(1/SR)*M         0         5              
+ 014047 SCALED MEAN AVHRR RADIANCE                                       (W/M**2)*(1/SR)*M          0            0  31 (W/M**2)*(1/SR)*M         0        10              
+ 014048 SCALED STANDARD DEVIATION RADIANCE                               (W/M**2)*(1/SR)*M          0            0  31 (W/M**2)*(1/SR)*M         0        10              
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1         4              
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3         4              
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16 NUMERIC                   0         5              
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0         4              
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0         4              
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0         4              
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2         3              
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0         3              
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3         4              
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0         3              
+ 015008 SIGNIFICAND OF VOLUMETRIC MIXING RATIO                           NUMERIC                    0            0  10 NUMERIC                   0         4              
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3         4              
+ 015012 TOTAL ELECTRON COUNT PER SQUARE METER                            1/M**2                   -16            0   6 1/M**2                  -16         2              
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0        10              
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8         7              
+ 015021 INTEGRATED MASS DENSITY                                          KG/M**2                   11            0  31 KG/M**2                  11        10              
+ 015024 OPTICAL DEPTH                                                    NUMERIC                    4            0  24 NUMERIC                   4         8              
+ 015025 TYPE OF POLLUTANT                                                CODE TABLE 15025           0            0   4 CODE TABLE 15025          0         2              
+ 015026 CONCENTRATION OF POLLUTANT                                       MOLMOL-1                   9            0   9 MOLMOL-1                  9         3              
+ 015027 CONCENTRATION OF POLLUTANT                                       KG/M3                      9            0  10 KG/M3                     9         4              
+ 015030 AEROSOL CONTAMINATION INDEX                                      NUMERIC                    2        -1000  12 NUMERIC                   2         4              
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4         5              
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4         4              
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5         5              
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5         5              
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4         5              
+ 015036 ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                            N-UNITS                    3            0  19 N-UNITS                   3         6              
+ 015037 BENDING ANGLE                                                    RADIANS                    8      -100000  23 RADIANS                   8         7              
+ 015202 INTEGRATED ELECTRON DENSITY                                      1/M**2                     3        13000  12                                                    
+ 015231 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4            0  15                                                    
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0         2              
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2         4              
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0         3              
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2         4              
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2         5              
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3         4              
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0         1              
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3         4              
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0         2              
+ 019100 TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE  CODE TABLE 19100           0            0   4 CODE TABLE 19100          0         2              
+ 019101 ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE   CODE TABLE 19101           0            0   4 CODE TABLE 19101          0         2              
+ 019102 SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE          CODE TABLE 19102           0            0   3 CODE TABLE 19102          0         1              
+ 019103 DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE        CODE TABLE 19103           0            0   4 CODE TABLE 19103          0         2              
+ 019104 CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES             CODE TABLE 19104           0            0   4 CODE TABLE 19104          0         2              
+ 019105 DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE           CODE TABLE 19105           0            0   4 CODE TABLE 19105          0         2              
+ 019106 IDENTIFICATION NUMBER OF TROPICAL CYCLONE                        NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 019107 TIME INTERVAL OF THE TROPICAL CYCLONE ANALYSIS                   CODE TABLE 19107           0            0   4 CODE TABLE 19107          0         2              
+ 019108 ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE        CODE TABLE 19108           0            0   3 CODE TABLE 19108          0         1              
+ 019109 MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE      CODE TABLE 19109           0            0   4 CODE TABLE 19109          0         2              
+ 019110 APPARENT 24-HOUR CHANGE IN INTENSITY OF TROPICAL CYCLONE         CODE TABLE 19110           0            0   4 CODE TABLE 19110          0         2              
+ 019111 CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE            NUMERIC                    1            0   7 NUMERIC                   1         3              
+ 019112 DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3              
+ 019113 CLOUD PATTERN TYPE OF THE DT- NUMBER                             CODE TABLE 19113           0            0   4 CODE TABLE 19113          0         2              
+ 019114 MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE     NUMERIC                    1            0   7 NUMERIC                   1         3              
+ 019115 TREND OF PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)         NUMERIC                    1          -30   6 NUMERIC                   1         2              
+ 019116 PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE             NUMERIC                    1            0   7 NUMERIC                   1         3              
+ 019117 CLOUD PICTURE TYPE OF THE PT- NUMBER                             CODE TABLE 19117           0            0   3 CODE TABLE 19117          0         1              
+ 019118 FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3              
+ 019119 TYPE OF THE FINAL T-NUMBER                                       CODE TABLE 19119           0            0   3 CODE TABLE 19119          0         1              
+ 019150 TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)          CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1         4              
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1         3              
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0         3              
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0         2              
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0         2              
+ 020006 FLIGHT RULES                                                     CODE TABLE 20006           0            0   3 CODE TABLE 20006          0         1
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0         2              
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0         2              
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0         3              
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0         2              
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0         2              
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1         4              
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1         4              
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1         5              
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1         5              
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0         2              
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0         1              
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0         9              
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0        10              
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0         2              
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0         6              
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0         1              
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0         7              
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0         2              
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0         3              
+ 020028 EXPECTED CHANGE IN INTENSITY                                     CODE TABLE 20028           0            0   3 CODE TABLE 20028          0         1              
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0         1              
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2         3              
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0         1              
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0         2              
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0         2              
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0         2              
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0         2              
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0         2              
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0         3              
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1         4              
+ 020040 EVOLUTION OF DRIFT OF SNOW                                       CODE TABLE 20040           0            0   4 CODE TABLE 20040          0         2              
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0         2              
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0         1              
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4         2              
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4         2              
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0         2              
+ 020048 EVOLUTION OF FEATURE                                             CODE TABLE 20048           0            0   4 CODE TABLE 20048          2         2              
+ 020050 CLOUD INDEX                                                      CODE TABLE 20050           0            0   8 CODE TABLE 20050          0         3              
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0         3              
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0         3              
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0         3              
+ 020054 TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 020055 STATE OF SKY IN TROPICS                                          CODE TABLE 20055           0            0   4 CODE TABLE 20055          0         2              
+ 020056 CLOUD PHASE                                                      CODE TABLE 20056           0            0   3 CODE TABLE 20056          0         1              
+ 020058 VISIBILITY SEAWARD FROM COASTA STATION                           M                         -1            0  13 M                        -1         4
+ 020059 MINIMUM HORIZONTAL VISIBILITY                                    M                         -1            0   9 M                        -1         3
+ 020060 PREVAILING HORIZONTAL VISIBILITY                                 M                         -1            0  10 M                        -1         4              
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0         4              
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0         2              
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0         4              
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0         3              
+ 020066 MAXIMUM DIAMETER OF HAILSTONES                                   M                          3            0   8 M                         3         3              
+ 020067 DIAMETER OF DEPOSIT                                              M                          3            0   9 M                         3         3              
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0         2              
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3              
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0         3              
+ 020083 AMOUNT OF SEGMENT COVERED BY SCENE                               %                          0            0   7 %                         0         3              
+ 020085 GENERAL CONDITION OF RUNWAY                                      CODE TABLE 20085           0            0   4 CODE TABLE 20085          0         1              
+ 020086 RANWAY DEPOSITS                                                  CODE TABLE 20086           0            0   4 CODE TABLE 20086          0         1              
+ 020087 RUNWAY CONTAMINATION                                             CODE TABLE 20087           0            0   4 CODE TABLE 20087          0         1              
+ 020088 DEPTH OF RANWAY DEPOSITS                                         M                          3            0  12 M                         3         4              
+ 020089 RUNWAY FRICTION COEFICIENT                                       CODE TABLE 20089           0            0   7 CODE TABLE 20089          0         2              
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0         2              
+ 020091 VERTICAL VISIBILITY                                              FOOT                      -2            0  10 FEET                     -2         3              
+ 020092 HEIGHT OF BASE OF CLOUD                                          FOOT                      -2            0  10 FEET                     -2         3              
+ 020095 ICE PROBABILITY                                                  NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 020096 ICE AGE ("A" PARAMETER)                                          dB                         2        -4096  13 dB                        2         4              
+ 020101 LOCUST (ACRIDIAN) NAME                                           CODE TABLE 20101           0            0   4 CODE TABLE 20101          0         2              
+ 020102 LOCUST (MATURITY) COLOR                                          CODE TABLE 20102           0            0   4 CODE TABLE 20102          0         2              
+ 020103 STAGE OF DEVELOPMENT OF LOCUSTS                                  CODE TABLE 20103           0            0   4 CODE TABLE 20103          0         2              
+ 020104 ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS                   CODE TABLE 20104           0            0   4 CODE TABLE 20104          0         2              
+ 020105 SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARMCODE TABLE 20105           0            0   4 CODE TABLE 20105          0         2              
+ 020106 LOCUST POPULATION DENSITY                                        CODE TABLE 20106           0            0   4 CODE TABLE 20106          0         2              
+ 020107 DIRECTION OF MOVEMENTS OF LOCUST SWARM                           CODE TABLE 20107           0            0   4 CODE TABLE 20107          0         2              
+ 020108 EXTENT OF VEGETATION                                             CODE TABLE 20108           0            0   4 CODE TABLE 20108          0         2              
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE 020192          0            0  14                                                    
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3              
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7 %                         0         3              
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14 PA                       -1         5              
+ 020249 SEA-ICE FRACTION                                                 NUMERIC                    2            0   7 NUMERIC                   2         3              
+ 020250 CALCULATED SURFACE TYPE                                          CODE TABLE 20250           0            0   5                                                    
+ 020251 ICE AGE                                                          CODE TABLE 20251           0            0   3                                                    
+ 020252 ICE EDGE                                                         CODE TABLE 20252           0            0   3                                                    
+ 020253 SURFACE TYPE                                                     CODE TABLE 20253           0            0   3                                                    
+ 020254 ICE CONCENTRATION                                                %                          0            0   7                                                    
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0         3              
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0         3              
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1         3              
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0         2              
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0         2              
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0         3              
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0         3              
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0         3              
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1         4              
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1         3              
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3         2              
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0         3              
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0         3              
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7         4              
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2         3              
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0         3              
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2         4              
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1         4              
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0         3              
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0         4              
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0         5              
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0         3              
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0         4              
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0         6              
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0         2              
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0         3              
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0         1              
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3         5              
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3         3              
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3         4              
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3         4              
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3         4              
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3         5              
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0         2              
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9 NUMERIC                   0         3              
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9 NUMERIC                   0         3              
+ 021088 WET BACKSCATTER                                                  dB                         2        -5000  13 dB                        2         4              
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0         3              
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0         3              
+ 021093 Ku BAND PEAKINESS                                                NUMERIC                    3            0  16 NUMERIC                   0         5              
+ 021094 S BAND PEAKINESS                                                 NUMERIC                    3            0  16 NUMERIC                   0         5              
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0         1              
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0         1              
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0         2              
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3         5              
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2         5              
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3         5              
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8         5              
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0         6              
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3         6              
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0         6              
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0         6              
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2         5              
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2         5              
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0         2              
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2         5              
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2         5              
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28 NUMERIC                   6         9              
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28 NUMERIC                   6         9              
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREE                     3            0  19 DEGREE                    3         6              
+ 021133 WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID            M                          3            0  29 M                         3         9              
+ 021134 RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM                    RAD/M                      3            0  19 RAD/M                     3         6              
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20 NUMERIC                   3         7              
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20 NUMERIC                   3         7              
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  dB                         2       -32768  16 dB                        2         5              
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              dB                         2       -32768  16 dB                        2         5              
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR AGC                      dB                         2        -2048  12 dB                        2         4              
+ 021140 S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                   dB                         2       -32768  16 dB                        2         5              
+ 021141 STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT               dB                         2       -32768  16 dB                        2         5              
+ 021142 S BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -1024  11 dB                        2         4              
+ 021143 KU BAND RAIN ATTENUATION                                         dB                         2  -1073741824  31 dB                        2        10              
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0         1              
+ 021145 KU BAND AUTOMATIC GAIN CONTROL                                   dB                         2            0  13                                                    
+ 021146 RMS KU BAND AUTOMATIC GAIN CONTROL                               dB                         2            0   8                                                    
+ 021147 NUMBER OF VALID POINTS FOR KU BAND AUTOMATIC GAIN CONTROL        NUMERIC                    0            0   5                                                    
+ 021150 BEAM COLLOCATION                                                 CODE TABLE 21150           0            0   2 CODE TABLE 21150          0         1              
+ 021151 ESTIMATED ERROR IN SIGMA0 AT 40DEG INCIDENCE ANGLE               dB                         2            0   9 dB                        2         3              
+ 021152 SLOPE AT 40DEG INCIDENCE ANGLE                                   dB/DEG                     2          -80   7 dB/DEG                    2         3              
+ 021153 ESTIMATED ERROR IN SLOPE AT 40DEG INCIDENCE ANGLE                dB/DEG                     2          -40   6 dB/DEG                    2         3              
+ 021154 SOIL MOISTURE SENSITIVITY                                        dB                         2            0  12 dB                        2         4              
+ 021155 WIND VECTOR CELL QUALITY                                         FLAG TABLE 21155           0            0  24 FLAG TABLE 21155          0         8              
+ 021156 BACKSCATTER DISTANCE                                             NUMERIC                    1        -4096  13 NUMERIC                   1         4              
+ 021157 LOSS PER UNIT LENGTH OF ATMOSPHERE USED                          dB/M                      10            0  22 dB/M                     10         7              
+ 021158 ASCAT kp ESTIMATE QUALITY                                        CODE TABLE 21158           0            0   2 CODE TABLE 21158          0         1              
+ 021159 ASCAT SIGMA-0 USABILITY                                          CODE TABLE 21159           0            0   2 CODE TABLE 21159          0         1              
+ 021160 ASCAT USE OF SYNTHETIC DATA                                      NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021161 ASCAT SYNTHETIC DATA QUALITY                                     NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021162 ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY                       NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021163 ASCAT SOLAR ARRAY REFLECTION CONTAMINATION                       NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021164 ASCAT TELEMETRY PRESENCE AND QUALITY                             NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021165 ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE                   NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021166 LAND FRACTION                                                    NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 021169 ICE PRESENCE INDICATOR                                           CODE TABLE                 0            0   2                                                    
+ 021170 C BAND CORRECTED OCEAN BACKSCATTER COEFICIENT                    dB                         2       -32768  16                                                    
+ 021171 RMS C BAND CORRECTED OCEAN BACKSCATTER COEFICIENT                dB                         2       -32768  16                                                    
+ 021172 C BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -2048  12                                                    
+ 021173 C BAND AUTOMATIC GAIN CONTROL                                    dB                         2            0  13                                                    
+ 021174 RMS C BAND AUTOMATIC GAIN CONTROL                                dB                         2            0   9                                                    
+ 021175 NUMBER OF VALID POINTS FOR C BAND AUTOMATIC GAIN CONTROL         NUMERIC                    0            0  10                                                    
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13
+ 021193 NOISE FIGURE                                                     %                          0            0   7                                                    
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8                                                    
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8                                                    
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE 21196           0            0  12                                                    
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE 21197           0            0  12                                                    
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE 21198           0            0   8                                                    
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE 21199           0            0   7                                                    
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE 21200           0            0  15                                                    
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16                                                    
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE 21202           0            0   4                                                    
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE 21203           0            0   9                                                    
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10                                                    
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8                                                    
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE 21206           0            0   3                                                    
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14                                                    
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9                                                    
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10                                                    
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11                                                    
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10                                                    
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14                                                    
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7                                                    
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE 21214           0            0   3                                                    
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4                                                    
+ 021222 DOPPLER SPECTRUM 0 TH MOMENT (AMPLITUDE)                         dB                         0            0   7                                                    
+ 021225 PRESCAT PRODUCT CONFIDENCE                                       FLAG TABLE 21225           0            0   6                                                    
+ 021226 BACKSCATER DISTANCE                                              NUMERIC                    1        -4096  13                                                    
+ 021227 GLARE ANGLE                                                      CODE TABLE 21227           0            6   6                                                    
+ 021230 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3                                                    
+ 021231 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3                                                    
+ 021232 TOTAL NMBER OF SIGMA-0 MEASUREMENTS                              NUMERIC                    0            0   5                                                    
+ 021233 NUMBER OF SIGMA-0 USABLE FOR WIND                                NUMERIC                    0            0   5                                                    
+ 021234 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    1       -10000  14                                                    
+ 021235 WIND VECTOR CELL QUALITY FLAG                                    FLAG TABLE 21235           0            0   3                                                    
+ 021236 NUMBER OF FORE-BEAM SIGMA-0                                      NUMERIC                    1            0   6                                                    
+ 021237 NUMBER OF MID-BEAM V-POL SIGMA-0                                 NUMERIC                    1            0   6                                                    
+ 021238 NUMBER OF MID-BEAM H-POL SIGMA-0                                 NUMERIC                    1            0   6                                                    
+ 021239 NUMBER OF AFT-BEAM SIGMA-0                                       NUMERIC                    1            0   6                                                    
+ 021240 NORMALIZED RADAR CROSS SECTION                                   NUMERIC                    2       -10000  14                                                    
+ 021241 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    5            0  14                                                    
+ 021242 Kp VARIANCE COEFFICIENT (BETHA)                                  NUMERIC                    6            0  16                                                    
+ 021243 Kp VARIANCE COEFFICIENT (GAMMA)                                  NUMERIC                    6            0  16                                                    
+ 021244 SIGMA-0 QUALITY FLAG                                             FLAG TABLE 21244           0            0  15                                                    
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022005 DIRECTION OF SEA SURFACE CURRENT                                 DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0         2              
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0         2              
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0         2              
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1         4              
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1         4              
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1         4              
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2         4              
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2         4              
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2         4              
+ 022032 SPEED OF SEA SURFACE CURRENT                                     M/S                        2            0  13 M/S                       2         4              
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2         4              
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2         4              
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3         5              
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3         5              
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3         4              
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3         5              
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1         4              
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1         4              
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2         5              
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1         5              
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3         6              
+ 022046 SEA ICE FRACTION                                                 NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022049 SEA SURFACE TEMPERATURE                                          K                          2            0  15 K                         2         5              
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2         3              
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3              
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0         1              
+ 022059 SEA SURFACE SALINITY                                             PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5              
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 22060           0            0   3 CODE TABLE 22060          0         1              
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0         2              
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5              
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0         5              
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3         6              
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3         6              
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6         8              
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0         4              
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0         3              
+ 022069 SPECTRAL WAVE DENSITY                                            M2HZ-1                     3            0  22 M2HZ-1                    3         7              
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2         4              
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1         3              
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0         4              
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2         4              
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1         3              
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0         4              
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0         3              
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0         4              
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0         5              
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3         4              
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5         4              
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2         7              
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2         7              
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2         3              
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2         3              
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2         7              
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2         7              
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2         7              
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2         7              
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0         3              
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3         2              
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0         5              
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0         5              
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0         3              
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0        10              
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0         2              
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0         2              
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0         2              
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0         2              
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2         5              
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10 NUMERIC                   0         4              
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31 M                         3        10              
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16 M                         3         5              
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S BAND                          NUMERIC                    0            0  10 NUMERIC                   0         4              
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31 M                         3        10              
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16 M                         3         5              
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16 M                         3         5              
+ 022157 STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16 M                         3         5              
+ 022158 S BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16 M                         3         5              
+ 022159 STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16 M                         3         5              
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21 NUMERIC                   6         7              
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27 M**4                      4         9              
+ 022162 RMS OF 20Hz KU BAND OCEAN RANGE                                  M                          3            0  16                                                    
+ 022163 NUMBER OF 20Hz VALID POINTS FOR KU BAND                          NUMERIC                    0            0  10                                                    
+ 022164 RMS 20Hz KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16                                                    
+ 022165 NUMBER OF 20Hz VALID POINTS FOR KU BAND SIGNIFICANT WAVE HEIGHT  NUMERIC                    0            0  10                                                    
+ 022166 KU BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT  M                          3        -1000  11                                                    
+ 022167 NUMBER OF VALID POINTS FOR KU BAND BACKSCATTER                   NUMERIC                    0            0  10                                                    
+ 022168 C BAND OCEAN RANGE                                               M                          3            0  31                                                    
+ 022169 RMS OF C BAND OCEAN RANGE                                        M                          3            0  16                                                    
+ 022170 NUMBER OF 20Hz VALID POINTS FOR C BAND                           NUMERIC                    0            0  10                                                    
+ 022171 C BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16                                                    
+ 022172 RMS 20Hz C BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16                                                    
+ 022173 NUMBER OF 20Hz VALID POINTS FOR C BAND                           NUMERIC                    0            0  10                                                    
+ 022174 C BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT   M                          3        -1000  11                                                    
+ 022175 NUMBER OF VALID POINTS FOR C BAND BACKSCATTER                    NUMERIC                    0            0  10                                                    
+ 022191 SPECTRAL DENSITY                                                 M**2*S/RAD                 2            0  20
+ 022192 SPECTRAL PERIOD                                                  S                          2            0  13
+ 022193 MEAN WAVENUMBER                                                  1/M                        5            0  15                                                    
+ 022194 PEAK WAVENUMBER                                                  1/M                        5            0  15                                                    
+ 022195 MEAN WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13                                                    
+ 022196 PEAK WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13                                                    
+ 022197 DIRECTION SPREAD                                                 DEGREE                     1            0  13                                                    
+ 022198 VARIANCE SPECTRAL DENSITY                                        M**2*S/RAD                 4            0  18                                                    
+ 022199 CORRELATION COEFF OF SIMULATED FG AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15                                                    
+ 022200 CORRELATION COEFF OF SIMULATED BF AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15                                                    
+ 022201 CORRELATION COEFF OF OCEAN WAVE FG AND EXTRACTED WAVE SPECTRUM   NUMERIC                    4       -10000  15                                                    
+ 022202 ERROR BETWEEN FIRST GUESS AND OBSERVED SAR                       NUMERIC                    5            0  21                                                    
+ 022203 ERROR BETWEEN SIMULATED AND OBSERVED SAR                         NUMERIC                    5            0  21                                                    
+ 022204 MEAN PERIOD OF WAVES                                             SECOND                     2            0  13                                                    
+ 022205 SPECTRAL DENSITY                                                 M**2*S/RAD                 4            0  25                                                    
+ 022206 PEAK PERIOD OF WAVES                                             SECOND                     2            0  13                                                    
+ 022207 MEAN WAVE PERIOD                                                 S                          1            0  10                                                    
+ 022208 PEAK PERIOD OF 1D SPECTRA                                        S                          1            0  10                                                    
+ 022209 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  13                                                    
+ 022210 MEAN SQUARE SLOPE OF WAVES                                       NUMERIC                    4       -10000  14                                                    
+ 022211 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  17                                                    
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10                                                    
+ 023001 ACCIDENT EARLY NOTIFICATION   ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0         1              
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0         2              
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0         1              
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0         1              
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0         1              
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0         1              
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0         1              
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0         1              
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0         1              
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0         1              
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6         7              
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0         1              
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0         6              
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0         6              
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0         8              
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1         4              
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2         4              
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2         4              
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3              
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0         1              
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0         1              
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                      -11         9              
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                      -11         9              
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0         2              
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0         2              
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0         3              
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2        10              
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2        10              
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2        10              
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2        10              
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2        10              
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1         4              
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1         4              
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1         2              
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0         2              
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0         1              
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0         1              
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0         1              
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0         4              
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2         3              
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0         2              
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0         2              
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0         1              
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0         1              
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0         1              
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0         4              
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0         1              
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5         2              
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0         1              
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7         2              
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2         3              
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0         1              
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0         3              
+ 025022 GHRSS REJECTION FLAG                                             FLAG TABLE 25022           0            0   9 FLAG TABLE 25022          0         3
+ 025023 GHRSS CONFIDENCE FLAG                                            FLAG TABLE 25023           0            0   9 FLAG TABLE 25023          0         3
+ 025024 GHRSS DATA QUALITY                                               CODE TABLE 25024           0            0   4 CODE TABLE 25024          0         2
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1         3              
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12 V                         1         4              
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15 NUMERIC                   1         5              
+ 025029 CALIBRATION METHOD                                               FLAG TABLE 25029           0            0   6 FLAG TABLE 25029          0         2              
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0         1              
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0         1              
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0         1              
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0         2              
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0         2              
+ 025037 SST BIAS                                                         K                          2         -127   8 K                         2         3
+ 025038 DIFFERENCE BETWEEN SST AND ANALYSIS                              K                          1         -127   8 K                         1         3
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0         2              
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0         1              
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0         1              
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4         5              
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2         5              
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0         7              
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0         2              
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0         2              
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0         6              
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0         2              
+ 025050 PRINCIPAL COMPONENT SCORE                                        NUMERIC                    4      -131072  18 NUMERIC                   4         6  18 NUMERIC                   4         6
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0         3              
+ 025052 LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA            NUMERIC                    4            0  15 NUMERIC                   4         5              
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0         4              
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0         2              
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2         5              
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0         5              
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0        12              
+ 025062 DATABASE IDENTIFICATION                                          NUMERIC                    0            0  14 NUMERIC                   0         5              
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2         4              
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2         4              
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0         4              
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0         3              
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0         2              
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0         2              
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0         2              
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8        10              
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5         7              
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5         6              
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4         8              
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10         5              
+ 025081 INCIDENCE ANGLE                                                  DEGREE                     3            0  17 DEGREE                    3         6              
+ 025082 AZIMUTH ANGLE                                                    DEGREE                     3            0  19 DEGREE                    3         6              
+ 025083 FARADEY ROTATIONAL ANGLE                                         DEGREE                     3            0  19 DEGREE                    3         6              
+ 025084 GEOMETRIC ROTATIONAL ANGLE                                       DEGREE                     5            0  26 DEGREE                    5         8              
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0         3              
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0         1              
+ 025090 ORBIT STATE FLAG                                                 CODE TABLE 25090           0            0   4 CODE TABLE 25090          0         2              
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3         5              
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2         5              
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0         3              
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0         1              
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0         2              
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0         2              
+ 025098 ALTIMETER DATA QUALITY FLAG                                      FLAG TABLE 25098           0            0   9 FLAG TABLE 25098          0         3              
+ 025099 ALTIMETER CORRECTION QUALITY                                     FLAG TABLE 25099           0            0   9 FLAG TABLE 25099          0         3              
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5         6              
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5         6              
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 025104 NUMBER OF WAVE-LENGTH BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 025105 FIRST DIRECTIONAL BIN                                            DEGREES                    3            0  19                                                    
+ 025106 DIRECTIONAL BIN STEP                                             DEGREES                    3            0  19                                                    
+ 025107 FIRST WAVE-LENGTH BIN                                            M                          3            0  29 M                         3         9              
+ 025108 LAST WAVE-LENGTH BIN                                             M                          3            0  29 M                         3         9              
+ 025110 IMAGE PROCESSING SUMMARY                                         FLAG TABLE 25110           0            0  10                                                    
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 025120 RA2-L2-PROCESSING FLAG                                           CODE TABLE 25120           0            0   2 CODE TABLE 25120          0         1              
+ 025121 RA2-L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3              
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 25122           0            0   2 CODE TABLE 25122          0         1              
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 25123           0            0   2 CODE TABLE 25123          0         1              
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 25124           0            0   2 CODE TABLE 25124          0         1              
+ 025125 MWR L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3              
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5              
+ 025127 INVERTED BAROMETER CORRECTION                                    M                          3       -32768  16 M                         3         5              
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5              
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3         5              
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16 M                         3         5              
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16 M                         3         5              
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16 M                         3         5              
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16 M                         3         5              
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16 M                         3         5              
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16 M                         3         5              
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16 M                         3         5              
+ 025137 SEA STATE BIAS CORRECTION ON S BAND                              M                          3       -32768  16 M                         3         5              
+ 025138 AVERAGE SIGNAL TO NOISE RATION                                   NUMERIC                    0        -2048  12 NUMERIC                   0         4              
+ 025140 START CHANNEL                                                    NUMERIC                    0            0  14 NUMERIC                   0         5              
+ 025141 END CHANNEL                                                      NUMERIC                    0            0  14 NUMERIC                   0         5              
+ 025142 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6 NUMERIC                   0         2              
+ 025143 LINEAR COEFFICIENT                                               NUMERIC                    6     -5000000  24 NUMERIC                   6         8              
+ 025150 SATELLITE INTENSITY ANALYSIS METHOD OF TROPICAL CYCLONE          CODE TABLE 25150           0            0   4 CODE TABLE 25150          2         2              
+ 025160 KU BAND INSTRUMENTAL CORRECTION                                  M                          4      -120000  18                                                    
+ 025161 C BAND INSTRUMENTAL CORRECTION                                   M                          4      -120000  18                                                    
+ 025162 SEA STATE BIAS CORRECTION ON C BAND                              M                          4        -6000  13                                                    
+ 025163 ALTIMETER IONOSPHERIC CORRECTION ON KU BAND                      M                          3       -32768  16                                                    
+ 025164 RADIOMETER WET                                                   M                          4        -5000  13                                                    
+ 025174 SMOS INFORMATION FLAG                                            FLAG TABLE 25174           0            0  14 FLAG TABLE 25174          0         5              
+ 025193 ATTENUATION CORRECTION ON SIGMA0                                 dB                         3            0  14                                                    
+ 025194 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4                                                    
+ 025197 ANTENNA CORRECTIONS VERSION NUMBER                               NUMERIC                    0            0   5                                                    
+ 025198 LOG (TEMP-RAD CENTRAL WAVE NUMBER)                               1/M                        8            0  30                                                    
+ 025199 BANDWIDTH CORRECTION COEFFICIENT 1                               NUMERIC                    4       -10000  15                                                    
+ 025200 BANDWIDTH CORRECTION COEFFICIENT 2                               NUMERIC                    5            0  17                                                    
+ 025201 ALBEDO-RAD SOLAR FILTERED IRRADIANCE                             NUMERIC                    4            0  24                                                    
+ 025202 ALBEDO-RAD EQUIVALENT FILTER WIDTH                               NUMERIC                   10            0  14                                                    
+ 025203 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 25203           0            0  31                                                    
+ 025204 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 25204           0            0  31                                                    
+ 025205 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 25205           0            0  31                                                    
+ 025206 FOV QUALITY FLAGS FOR ATOVS                                      FLAG TABLE 25206           0            0  31                                                    
+ 025207 COMPASS AZIMUTH ANGLE                                            DEGREE                     2            0  16                                                    
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3              
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3              
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0         4              
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0         9              
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0         4              
+ 026030 MEASUREMENT INTEGRATION TIME                                     SECOND                     2            0   8 SECOND                    2         3
+ 026193 YEAR                                                             YEAR                       0            0  12                                                    
+ 026194 MONTH                                                            MONTH                      0            0   4                                                    
+ 026195 DAY                                                              DAY                        0            0   6                                                    
+ 026196 HOUR                                                             HOUR                       0            0   5                                                    
+ 026197 MINUTE                                                           MINUTE                     0            0   6                                                    
+ 026198 SECOND                                                           SECOND                     0            0   6                                                    
+ 026200 LOCATION WITHIN ASSIMILATION WINDOW IN TIME                      NUMERIC                    6            0  20                                                    
+ 026201 HOURS INCLUDED                                                   FLAG TABLE 26201           0            0  26                                                    
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7              
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4              
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4              
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7              
+ 027010 FOOTPRINT AXIS 1                                                 M                         -1            0  14 M                        -1         5              
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2        10              
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16 DEGREE TRUE               0         5              
+ 027193 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16                                                    
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8              
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5              
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5              
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8              
+ 028010 FOOTPRINT AXIS 2                                                 M                         -1            0  14 M                        -1         5              
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2        10              
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0         1              
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0         1              
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0         2              
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 030010 NUMBER OF GRID POINTS                                            NUMERIC                    0            0  13 NUMERIC                   0         4              
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0         4              
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0         4              
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0         2              
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0         6              
+ 030193 POSITION NUMBER ALONG SCAN                                       NUMERIC                    0            0   8                                                    
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0         1              
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0         3              
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0         5              
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0         2              
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0         1              
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1                                                    
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0         1              
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0         1              
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0        10              
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0         1              
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0         3              
+ 033009 RELATIVE ERROR                                                   %                          6            0  20 %                         0         7              
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0         2              
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0         1              
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0         1              
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0         1              
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0         1              
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0         2              
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0         1              
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0         2              
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0         1              
+ 033028 SNAPSHOT OVERALL QUALITY                                         CODE TABLE 22028           0            0   3 CODE TABLE 22028          0         1              
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0         8              
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0         8              
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0         8              
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0         8              
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0         2              
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0         3              
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0         7              
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0         4              
+ 033039 QUALITY FLAGS FOR RADIO OCCULTATION DATA                         FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0         6              
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0         3              
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0         1              
+ 033042 TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE                     CODE TABLE 33042           0            0   3 CODE TABLE 33042          0         1              
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0         3              
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0         5              
+ 033045 PROBABILITY OF FOLLOWING EVENT                                   %                          0            0   7 %                         0         3              
+ 033046 CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECI %                          0            0   7 %                         0         3              
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0        11              
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 33048           0            0   2 CODE TABLE 33048          0         1              
+ 033049 CONFIDENCE MEASURE OF WIND RETRIEVAL                             CODE TABLE 33049           0            0   2 CODE TABLE 33049          0         1              
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0         2              
+ 033052 S BAND OCEAN RETRACKING QUALITY                                  FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0         7              
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0         7              
+ 033060 GQISFLAGQUAL-INDIVIDUAL IASI-SYSTEM QUALITY FLAG                 CODE TABLE 33060           0            0   2 CODE TABLE 33060          0         1              
+ 033061 GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE       %                          0            0   7 %                         0         3              
+ 033062 GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX         %                          0            0   7 %                         0         3              
+ 033063 GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE    %                          0            0   7 %                         0         3              
+ 033064 GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE  %                          0            0   7 %                         0         3              
+ 033065 GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC QUALITY FUNCTION       NUMERIC                    0            0  24 NUMERIC                   0        24              
+ 033066 SBUV TOTAL OZONE QUALITY                                         CODE TABLE 33066           0            0   4 CODE TABLE 33066          0         2              
+ 033067 SBUV PROFILE OZONE QUALITY                                       CODE TABLE 33067           0            0   4 CODE TABLE 33067          0         2              
+ 033070 TOTAL OZONE QUALITY                                              CODE TABLE 33070           0            0   4 CODE TABLE 33070          0         2              
+ 033071 PROFILE OZONE QUALITY                                            CODE TABLE 33071           0            0   4 CODE TABLE 33071          0         2              
+ 033072 OZONE ERROR                                                      CODE TABLE 33072           0            0   5 CODE TABLE 33072          0         2
+ 033075 SCAN LEVEL QUALITY FLAG                                          FLAG TABLE 33075           0            0  13 FLAG TABLE 33075          0         5              
+ 033076 CALIBRATION QUALITY FLAG                                         FLAG TABLE 33076           0            0   9 FLAG TABLE 33076          0         3              
+ 033077 FIELD OF VIEW QUALITY FLAG                                       FLAG TABLE 33077           0            0  19 FLAG TABLE 33077          0         7              
+ 033078 GEOLOCATION QUALITY                                              CODE TABLE 33078           0            0   4 CODE TABLE 33078          0         2              
+ 033191 ECMWF WAM QC INDICATOR                                           CODE TABLE 033191          0            0   2
+ 033192 TEM1 CONFIDENCE                                                  %                          0            0   7                                                    
+ 033193 DATA QUALITY 3 BIT CODE                                          CODE TABLE 33193           0            0   3                                                    
+ 033194 DATA QUALITY 2 BIT CODE                                          CODE TABLE 33194           0            0   2                                                    
+ 033195 ECMWF SAR QC INDICATOR                                           CODE TABLE 33195           0            0   5                                                    
+ 033196 ECMWF WAM QC INDICATOR                                           CODE TABLE 33196           0            0   2                                                    
+ 033197 ECMWF SAR INVERSION QC INDICATOR                                 CODE TABLE 33197           0            0   3                                                    
+ 033198 MINIMUM COST                                                     NUMERIC                    4            0  14                                                    
+ 033199 1D VAR TOTAL PRECIPITABLE WATER RETRIEVED ERROR(S)               KG/M**2                    2            0  11                                                    
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE 33200           0            0  31                                                    
+ 033201 ANALYSIS REPORT STATUS EVENT                                     FLAG TABLE 33201           0            0  13                                                    
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE 33202           0            0  31                                                    
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE 33203           0            0  11                                                    
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE 33204           0            0  21                                                    
+ 033205 VARIATIONAL ANALYSIS BLACK LIST FLAG                             CODE TABLE 33205           0            0   4                                                    
+ 033206 VARIATIONAL ANALYSIS QUALITY CONTROL FLAG                        CODE TABLE 33206           0            0   4                                                    
+ 033207 VARIATIONAL ANALYSIS DEPARTURE FLAG                              CODE TABLE 33207           0            0   4                                                    
+ 033208 VARIATIONAL ANALYSIS FIRST QUESS CHECK FLAG                      CODE TABLE 33208           0            0   4                                                    
+ 033209 VARIATIONAL ANALYSIS FINAL FLAG                                  CODE TABLE 33209           0            0   4                                                    
+ 033210 INCREMENTAL VARIATIONAL ANALYSIS UPDATE NUMBER                   NUMERIC                    0            0   7                                                    
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10                                                    
+ 033212 1D VAR ITERATION NUMBER                                          NUMERIC                    0            0  10                                                    
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11                                                    
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE 33214           0            0  11                                                    
+ 033215 DIRECTIONAL SKILL                                                NUMERIC                    1        -4096  13                                                    
+ 033216 1D VAR SURFACE TYPE QUALITY CONTROL                              CODE TABLE 33216           0            0   3                                                    
+ 033217 1D VAR FAILURE INDICATOR                                         CODE TABLE 33217           0            0   2                                                    
+ 033218 1D VAR ESTIMATE OF SCATTERING                                    NUMERIC                    2            0  12                                                    
+ 033219 SSMI INDIPENDENT SCATTERING INDEX                                NUMERIC                    2       -50000  16                                                    
+ 033220 VARIATIONAL ANALYSIS REPORT EVENTS (1)                           FLAG TABLE 33220           0            0  31                                                    
+ 033221 VARIATIONAL ANALYSIS SYNOP EVENTS (2)                            FLAG TABLE 33221           0            0  31                                                    
+ 033222 VARIATIONAL ANALYSIS AIREP EVENTS (2)                            FLAG TABLE 33222           0            0  31                                                    
+ 033223 VARIATIONAL ANALYSIS SATOB EVENTS (2)                            FLAG TABLE 33223           0            0  31                                                    
+ 033224 VARIATIONAL ANALYSIS DRIBU EVENTS (2)                            FLAG TABLE 33224           0            0  31                                                    
+ 033225 VARIATIONAL ANALYSIS TEMP EVENTS (2)                             FLAG TABLE 33225           0            0  31                                                    
+ 033226 VARIATIONAL ANALYSIS PILOT EVENTS (2)                            FLAG TABLE 33226           0            0  31                                                    
+ 033227 VARIATIONAL ANALYSIS SATEM/TOVS EVENTS (2)                       FLAG TABLE 33227           0            0  31                                                    
+ 033228 VARIATIONAL ANALYSIS PAOB EVENTS (2)                             FLAG TABLE 33228           0            0  31                                                    
+ 033229 VARIATIONAL ANALYSIS SCATTEROMETER EVENTS (2)                    FLAG TABLE 33229           0            0  31                                                    
+ 033230 VARIATIONAL ANALYSIS RAW RADIANCES EVENTS (2)                    FLAG TABLE 33230           0            0  31                                                    
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE 33231           0            0   6                                                    
+ 033232 REPORT BLACK LIST EVENTS                                         FLAG TABLE 33232           0            0  31                                                    
+ 033233 VARIATIONAL ANALYSIS REPORT STATUS                               FLAG TABLE 33233           0            0  31                                                    
+ 033234 VARIATIONAL ANALYSIS DATUM STATUS                                FLAG TABLE 33234           0            0  31                                                    
+ 033236 VARIATIONAL ANALYSIS DATUM EVENTS (1)                            FLAG TABLE 33236           0            0  31                                                    
+ 033237 VARIATIONAL ANALYSIS SYNOP DATUM EVENTS (2)                      FLAG TABLE 33237           0            0  31                                                    
+ 033238 VARIATIONAL ANALYSIS AIREP DATUM EVENTS (2)                      FLAG TABLE 33238           0            0  31                                                    
+ 033239 VARIATIONAL ANALYSIS SATOB DATUM EVENTS (2)                      FLAG TABLE 33239           0            0  31                                                    
+ 033240 VARIATIONAL ANALYSIS DRIBU DATUM EVENTS (2)                      FLAG TABLE 33240           0            0  31                                                    
+ 033241 GROSS ERROR PROBABILITY                                          NUMERIC                    3            0  10                                                    
+ 033242 GROSS ERROR INDICATOR                                            CODE TABLE 33242           0            0   2                                                    
+ 033243 VARIATIONAL ANALYSIS TEMP DATUM EVENTS (2)                       FLAG TABLE 33243           0            0  31                                                    
+ 033244 VARIATIONAL ANALYSIS PILOT DATUM EVENTS (2)                      FLAG TABLE 33244           0            0  31                                                    
+ 033245 VARIATIONAL ANALYSIS SATEM/TOVS DATUM EVENTS (2)                 FLAG TABLE 33245           0            0  31                                                    
+ 033246 VARIATIONAL ANALYSIS PAOB DATUM EVENTS (2)                       FLAG TABLE 33246           0            0  31                                                    
+ 033247 VARIATIONAL ANALYSIS SCATTEROMETER DATUM EVENTS (2)              FLAG TABLE 33247           0            0  31                                                    
+ 033248 VARIATIONAL ANALYSIS RAW RADIANCES DATUM EVENTS (2)              FLAG TABLE 33248           0            0  31                                                    
+ 033249 DATUM BLACK LIST EVENTS                                          FLAG TABLE 33249           0            0  31                                                    
+ 033250 PROBABILITY OF GROSS ERROR                                       NUMERIC                    6            0  20                                                    
+ 033251 RANGE OF POSSIBLE VALUES                                         NUMERIC                    2            0  14                                                    
+ 033252 MANUAL-AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33252           0            0   4                                                    
+ 033253 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7                                                    
+ 033254 WIND CORRELATION METHOD                                          FLAG TABLE 33254           0            0  20                                                    
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0         3              
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0         1              
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0         4              
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0         6              
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0         6              
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0         4              
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0         3              
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0         1              
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0         2              
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0         1              
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0         2              
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0         1              
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0         2              
+ 040001 SURFACE SOIL MOISTURE (MS)                                       %                          1            0  10 %                         1         4              
+ 040002 ESTIMATED ERROR IN SURFACE SOIL MOISTURE                         %                          1            0  10 %                         1         4              
+ 040003 MEAN SURFACE SOIL MOISTURE                                       NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 040004 RAIN FALL DETECTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4              
+ 040005 SOIL MOISTURE CORRECTION FLAG                                    FLAG TABLE 40005           0            0   8 FLAG FLAG TABLE 40005     0         3              
+ 040006 SOIL MOISTURE PROCESSING FLAG                                    FLAG TABLE 40006           0            0  16 FLAG FLAG TABLE 40006     0         5              
+ 040007 SOIL MOISTURE QUALITY                                            %                          1            0  10 %                         1         4              
+ 040008 FROZEN LAND SURFACE FRACTION                                     %                          1            0  10 %                         1         4              
+ 040009 INUNDATION AND WETLAND FRACTION                                  %                          1            0  10 %                         1         4              
+ 040010 TOPOGRAPHIC COMPLEXITY                                           %                          1            0  10 %                         1         4              
+ 040011 INTERPOLATION FLAG                                               FLAG TABLE 40011           0            0   8 FLAG TABLE 40011          0         3              
+ 040012 RADIOMETER DATA QUALITY FLAG                                     FLAG TABLE 40012           0            0   8 FLAG TABLE 40012          0         3              
+ 040013 RADIOMETER BRIGHTNESS TEMPERATURE INTERPOLATION FLAG             CODE TABLE 40013           0            0   3                                                    
+ 040014 HIGH FREQUENCY FLUCTUATIONS OF THE SEA SURFACE TOPOGRAPHY CORRECTM                          4        -3000  13                                                    
+ 040015 QUANTIZATION FACTOR                                              NUMERIC                    2            0  16
+ 040016 RESIDUAL RMS IN BAND                                             NUMERIC                    3            0  14
+ 040017 NON-NORMALISED PRINCIPAL COMPONENT SCORE                         NUMERIC                    0  -1073741824  31
+ 040018 GLACAVGIMAGIIS - AVERAGE OF IMAGER MEASUREMENTS                  (W/M**2)*(1/SR)*(1/M)      6            0  24
+ 040019 GLACVARIMAGIIS - VARIANCE OF IMAGER MEASUREMENTS                 (W/M**2)*(1/SR)*(1/M)      6            0  24
+ 040020 GQISFLAGQUALDETAILED - QUALITY FLAG FOR THE SYSTEM               FLAG TABLE 40020           0            0  17
+ 040021 FRACTION OF WEIGHTED AVHRR PIXEL IN IASI FOV COVERED WITH ICE    %                          0            0   7
+ 040022 NUMBER OF MISSING, BAD OR FAILED AVHRR PIXELS                    NUMERIC                    0            0   7
+ 040023 AUXILIARY ALTIMETER STATE FLAG                                   FLAG TABLE 40023           0            0   5
+ 040024 METEOROLOGICAL MAP AVAILABILITY                                  CODE TABLE 40024           0            0   3
+ 040025 INTERPOLATION FLAG FOR MEAN DIURNAL TIDE                         CODE TABLE 40025           0            0   2
+ 040193 INSTRUMENT DETECTING CLOUDS                                      FLAG TABLE 40193           0            0  16                                                    
+ 040194 VALIDATION FLAG FOR IASI LEVEL 1 PRODUCT                         FLAG TABLE 40194           0            0  16                                                    
+ 040195 QUALITY AND COMPLETENESS OF RETRIEVAL                            CODE TABLE 40195           0            0   4                                                    
+ 040196 RETRIEVAL CHOICE INDICATOR                                       FLAG TABLE 40196           0            0   8                                                    
+ 040197 SATELLITE MANOEUVRE INDICATOR                                    CODE TABLE 40197           0            0   3                                                    
+ 040198 SELECTION OF BACKGROUND STATE                                    CODE TABLE 40198           0            0   3                                                    
+ 040199 INTEGRATED N2O DENSITY                                           KG/M**2                    6            0  16                                                    
+ 040200 INTEGRATED CO DENSITY                                            KG/M**2                    7            0  16                                                    
+ 040201 INTEGRATED CH4 DENSITY                                           KG/M**2                    6            0  16                                                    
+ 040202 INTEGRATED CO2 DENSITY                                           KG/M**2                    3            0  16                                                    
+ 040203 COLD/WARM LOAD FLAG                                              FLAG TABLE 40203           0            0  12                                                    
+ 049193 SAR INVERSION QC FLAGS                                           FLAG TABLE 49193           0            0  15                                                    
+ 049194 ALTIMETER WAVE HEIGHT QC FLAFS                                   FLAG TABLE 49194           0            0  15                                                    
+ 055003 DATA EXTRACTION INDICATOR                                        FLAG TABLE  55003          0            0   8
diff --git a/bufrtables/B0000000000254011001.TXT b/bufrtables/B0000000000254011001.TXT
new file mode 100755
index 0000000..d55b947
--- /dev/null
+++ b/bufrtables/B0000000000254011001.TXT
@@ -0,0 +1,1349 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0          1
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0          2
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0         24
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0          1
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0          1
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0         10
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0          6
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0          2
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0          3
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0          1
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0          1
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0          5
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0          4
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0          9
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0          3
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2          4
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0         20
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0          5
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0          2
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0          4
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0         28
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0          3
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0         10
+ 001030 (VAL) NUMERICAL MODEL IDENTIFIER (SEE NOTE 13)                   CCITTIA5                   0            0 128 CHARACTER                 0         16
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0          5
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0          3
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0          3
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0          3
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0          5
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0          7
+ 001037 (VAL) SIGMET SEQUENCE IDENTIFIER                                 CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5         10
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5         10
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5         10
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0          6
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0         12
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0          8
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 001065 (VAL) ICAO REGION IDENTIFIER                                     CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0          5
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0         20
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0          4
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0          1
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0         20
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0         32
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0          3
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0          4
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0          3
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0         12
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0          5
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 001096 (CBS) STATION ACQUISITION                                        CCITTIA5                   0            0 160 CHARACTER                 0         20
+ 001192 MODEL VERSION NUMBER                                             CODE TABLE   1192          0            0   8  
+ 001193 SIGMA_0 SIMULATION METHOD                                        CODE TABLE   1193          0            0   4  
+ 001194 CARRIER BALLOON/AIRCRAFT IDENTIFIER                              CCITTIA5                   0            0  72  
+ 001195 MOBIL LAND STATION IDENTIFIER                                    CCITTIA5                   0            0  72  
+ 001196 CONSTANT LEVEL BALLOON IDENTIFIER                                CCITTIA5                   0            0  72  
+ 001197 RTP - PLATFORM TYPE                                              CODE TABLE   1197          0            0  10  
+ 001198 ITP - DECK ID                                                    CODE TABLE   1198          0            0  10  
+ 001199 DUP - DUPLICATE STATUS                                           CODE TABLE   1199          0            0   4  
+ 001201 GENERATING APPLICATION                                           CODE TABLE   1201          0            0   8  
+ 001205 SATELLITE IDENTIFIER                                             CODE TABLE   1205          0            0  10  
+ 001208 VELOCITY OF PLATFORM, X                                          M/S                        5  -1073741824  31  
+ 001209 VELOCITY OF PLATFORM, Y                                          M/S                        5  -1073741824  31  
+ 001210 VELOCITY OF PLATFORM, Z                                          M/S                        5  -1073741824  31  
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0          1
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0          2
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0          2
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0          2
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2          3
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0          3
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0          2
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0          2
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0          3
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0          2
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0          2
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0          4
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0          3
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0          3
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0          3
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0          2
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0          2
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0          9
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2          4
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2          4
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0          6
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0          6
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0          1
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0          2
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0          1
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0          1
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0          2
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0          3
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0          1
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0          1
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0          2
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0          1
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0          2
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0          2
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0          2
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0          2
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0          2
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0          2
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0          3
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0          7
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0          2
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0          2
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0          2
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0          2
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0          2
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0          2
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0          2
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0          2
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0          2
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0          2
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0          1
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0          2
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2          5
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0          1
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0          5
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0          2
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5          5
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0          2
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0          2
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0          2
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3          4
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0          2
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0          2
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3          4
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1          4
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4          3
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0          2
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0          2
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0          2
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1          4
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0          2
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0          3
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0          1
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0          2
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0          2
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1          2
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0          2
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0          2
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2          4
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2          4
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1          4
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1          4
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0          2
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0          5
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0          2
+ 002116 (CBS) PERCENTAGE OF 320 MHZ BAND PROCESSED                       %                          0            0   7 %                         0          3
+ 002117 (CBS) PERCENTAGE OF 80 MHZ BAND PROCESSED                        %                          0            0   7 %                         0          3
+ 002118 (CBS) PERCENTAGE OF 20 MHZ BAND PROCESSED                        %                          0            0   7 %                         0          3
+ 002119 (CBS)  RA-2 INSTRUMENT OPERATIONS                                CODE TABLE 2119            0            0   3 CODE TABLE 2119           0          1
+ 002120 (CBS) OCEAN WAVE FREQUENCY                                       Hz                         3            0  10 Hz                        3          4
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8          3
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6          3
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4          3
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1          3
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1          3
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7          2
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6          3
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5          2
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0          3
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0          3
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0          1
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2          2
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2          2
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2          5
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2          5
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3          5
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0          3
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0          3
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0          2
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0          2
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0          2
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0          2
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0          2
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0          2
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0          4
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0         10
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8          8
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8          8
+ 002156 (CBS) PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS        %                          0            0   7 %                         0          3
+ 002157 (CBS) PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS         %                          0            0   7 %                         0          3
+ 002158 (CBS) RA-2 INSTRUMENT                                            FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0          3
+ 002159 (CBS) MWR INSTRUMENT                                             FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0          3
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0          2
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0          1
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0          2
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0          2
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0          5
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0          2
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0          3
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4          4
+ 002174 (CBS) MEAN ACROSS TRACK PIXEL NUMBER                             NUMERIC                    0            0   9 NUMERIC                   0          3
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0          2
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0          2
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0          2
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0          2
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0          2
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0          2
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0          7
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0          2
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0          2
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0          2
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0  4  CODE TABLE 2185           0          2
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0         10
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0          6
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0          7
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189           0            0   12 FLAG TABLE 2189           0          4
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7  
+ 002192 SAR AZIMUTH ANGLE                                                DEGREE                     0            0   9  
+ 002193 1D VAR SATELLITE CHANNEL(S) USED                                 FLAG TABLE   2193          0            0  28  
+ 002194 CONSTANT LEVEL BALLOON TYPE                                      CODE TABLE   2194          0            0   4  
+ 002195 TYPE OF SATELLITE INSTRUMENTATION                                CODE TABLE   2195          0            0   4  
+ 002196 SATELLITE CLASSIFICATION                                         CODE TABLE   2196          0            0   9  
+ 002197 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26  
+ 002198 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26  
+ 002199 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE   2199          0            0   4  
+ 002201 SIMULATED SATELLITE INSTRUMENT                                   FLAG TABLE   2201          0            0   4  
+ 002202 SIMULATED DATA PROCESSING TECHNIQUE USED                         FLAG TABLE   2202          0            0   4  
+ 002220 DATA PRODUCER                                                    CODE TABLE   2220          0            0   9  
+ 002221 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18  
+ 002222 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18  
+ 002223 TOVS/ATOVS/AVHRR CHANNEL NUMBER                                  CODE TABLE   2223          0            0   6  
+ 002231 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE   2231          0            0   4  
+ 002232 TRACER CORRELATION METHOD                                        CODE TABLE   2232          0            0   3  
+ 002240 TYPE OF TERMODYNAMIC SENSING                                     CODE TABLE   2240          0            0   8  
+ 002241 TYPE OF ROCKET MOTOR                                             CODE TABLE   2241          0            0   3  
+ 002242 TYPE OF WIND SENSING EQUIPMENT                                   CODE TABLE   2242          0            0   8  
+ 002243 TERMODYNAMIC CORRECTION TECHNIQUE                                CODE TABLE   2243          0            0   3  
+ 002244 WIND CORRECTION TECHNIQUE                                        CODE TABLE   2244          0            0   3  
+ 002245 METHOD OF REDUCING OF DATA                                       CODE TABLE   2245          0            0   4  
+ 002251 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE   2251          0            0   4  
+ 002252 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE   2252          0            0  31  
+ 002253 HUMIDITY COMPUTATIONAL METHOD                                    CODE TABLE   2253          0            0   8  
+ 002254 RADIANCE TYPE                                                    CODE TABLE   2254          0            0   4  
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0          4
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0          2
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0          2
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0          2
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0          2
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0          2
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6          8
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0          4
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0          4
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0          4
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0          4
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0          4
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0          4
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0          4
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0          4
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0          4
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0          4
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0          4
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0          4
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0          4
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0          3
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0          2
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0          4
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0          3
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0          2
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0          2
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0          2
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0          2
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0          2
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0          2
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0          2
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0          2
+ 004086 (CBS) LONG TIME PERIOD OR DISPLACEMENT                           SECOND                     0        -8192  15 SECOND                    0          5
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5          7
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2          4
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5          7
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2          4
+ 005015 (CBS) LATITUDE DISPLACEMENT (HIGH ACCURACY)                      DEGREE                     5     -9000000  25 DEGREE                    5          7
+ 005016 (CBS) LATITUDE DISPLACEMENT (COARSE ACCURACY)                    DEGREE                     2        -9000  15 DEGREE                    2          4
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2          5
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2          5
+ 005023 (CBS) SUN TO SATELLITE AZIMUTH DIFFERENCE                        DEGREE                     1        -1800  12 DEGREE                    1          4
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0          4
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0          4
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1          5
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0          4
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0          2
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0          8
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0          3
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0          2
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0          3
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0          4
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0          2
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0          2
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10  
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7  
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31  
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16  
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5          8
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2          5
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5          8
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2          5
+ 006015 (CBS) LONGITUDE DISPLACEMENT (HIGH ACCURACY)                     DEGREE                     5    -18000000  26 DEGREE                    5          8
+ 006016 (CBS) LONGITUDE DISPLACEMENT (COARSE ACCURACY)                   DEGREE                     2       -18000  16 DEGREE                    2          5
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1          4
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5          4
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0          4
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1          5
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0          3
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0          4
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6  
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7  
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31  
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13  
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0          5
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1          5
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1          6
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1          5
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0          4
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0          5
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0          6
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0          7
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0          5
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1          5
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2          5
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2          5
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2          5
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2          5
+ 007026 (CBS) SATELLITE ZENITH ANGLE                                     DEGREE                     4      -900000  21 DEGREE                    4          7
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1       - 4000  17 M                         1          5
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1       - 4000  17 M                         1          5
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2          5
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1          4
+ 007040 (CBS) IMPACT PARAMETER (SEE NOTE 10)                             M                          1     62000000  22 M                         1          8
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2          5
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1          6
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0          2
+ 007065 (VAL) REPRESENTATIVE HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DEC M                          2            0  16 M                         2          5
+ 007066 (VAL)  REPRESENTATIVE HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE  M                          1            0  12 M                         1          4
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0          4
+ 007190 HEIGHT INCREMENT                                                 M                          1        -1024  12  
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31  
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0          3
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0          2
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0          2
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0          1
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0          2
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0          3
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0          2
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0          3
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0          2
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0          2
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0          2
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0          1
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0          1
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0          2
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0          1
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0          1
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0          6
+ 008019 (VAL) QUALIFIER FOR FOLLOWING CENTRE IDENTIFIER                  CODE TABLE 8019            0            0   4 CODE TABLE 8019           0          2
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0          5
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0          2
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0          5
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0          2
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0          2
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0          2
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0          4
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0          3
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0          3
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0          1
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0          1
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0          2
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0          2
+ 008042 (CBS) EXTENDED VERTICAL SOUNDING SIGNIFICANCE                    FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0          6
+ 008049 (CBS) NUMBER OF OBSERVATIONS                                     NUMERIC                    0            0   8 NUMERIC                   0          3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0          2
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0          1
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0          2
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0          1
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0          2
+ 008065 (CBS) SUN-GLINT INDICATOR                                        CODE TABLE 8065            0            0   2 CODE TABLE 8065           0          1
+ 008066 (CBS) SEMI-TRANSPARENCY INDICATOR                                CODE TABLE 8066            0            0   2 CODE TABLE 8066           0          1
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0          2
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0          1
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0          1
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0          1
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0          2
+ 008079 (VAL) CHANGE IN STATUS OF FOLLOWING PRODUCT                      CODE TABLE 8079            0            0   3 CODE TABLE 8079           0          1
+ 008081 (CBS) TYPE OF EQUIPMENT                                          CODE TABLE 8081            0            0   6 CODE TABLE 8081           0          2
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0          1
+ 008083 (VAL) NOMINAL VALUE INDICATOR                                    FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0          5
+ 008193 TIME QUALIFIER                                                   CODE TABLE   8193          0            0   6  
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE   8194          0            0   4  
+ 008195 DATA TYPE                                                        CODE TABLE   8195          0            0   7  
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8  
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE   8222          0            0   4  
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE   8223          0            0   7  
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10  
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0          5
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1          5
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1          6
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1          5
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0          6
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0          7
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0          5
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1          5
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1          5
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2         10
+ 010032 (CBS) SATELLITE DISTANCE TO EARTH'S CENTRE                       M                          1            0  27 M                         2          9
+ 010033 (CBS) ALTITUDE (PLATFORM TO ELLIPSOID)                           M                          1            0  27 M                         2          9
+ 010034 (CBS) EARTH RADIUS                                               M                          1            0  27 M                         2          9
+ 010035 (CBS) EARTH'S LOCAL RADIUS OF CURVATURE                          M                          1     62000000  22 M                         1          8
+ 010036 (CBS) GEOID UNDULATION (SEE NOTE 4)                              M                          2       -15000  15 M                         2          6
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0          4
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2          5
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1          5
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1          5
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1          4
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1          4
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1          4
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0          2
+ 010064 (VAL) SIGMET CRUISING LEVEL                                      CODE TABLE 10064           0            0   3 CODE TABLE 10064          0          1
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0          5
+ 010080 (CBS) VIEWING ZENITH ANGLE                                       DEGREE                     2        -9000  15 DEGREE                    2          5
+ 010081 (CBS) ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                  M                          3            0  31 M                         3         10
+ 010082 (CBS) INSTANTANEOUS ALTITUDE RATE                                MS-1                       3       -65536  17 MS-1                      3          6
+ 010083 (CBS) OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA        DEGREE                     2       -36000  17 DEGREE                    2          6
+ 010084 (CBS) OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA        DEGREE                     2       -36000  17 DEGREE                    2          6
+ 010085 (CBS) MEAN SEA SURFACE HEIGHT                                    M                          3      -131072  18 M                         3          6
+ 010086 (CBS) GEOID'S HEIGHT                                             M                          3      -131072  18 M                         3          6
+ 010087 (CBS) OCEAN DEPTH/LAND ELEVATION                                 M                          1      -131072  18 M                         3          6
+ 010088 (CBS) TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1              M                          3       -32768  16 M                         3          5
+ 010089 (CBS) TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2              M                          3       -32768  16 M                         3          5
+ 010090 (CBS) LONG PERIOD  TIDE HEIGHT                                   M                          3       -32768  16 M                         3          5
+ 010091 (CBS) TIDAL LOADING HEIGHT                                       M                          3       -32768  16 M                         3          5
+ 010092 (CBS) SOLID EARTH TIDE HEIGHT                                    M                          3       -32768  16 M                         3          5
+ 010093 (CBS) GEOCENTRIC POLE TIDE HEIGHT                                M                          3       -32768  16 M                         3          5
+ 010195 HEIGHT(HIGH ACCURACY)                                            M                          1        -4096  20  
+ 010196 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15  
+ 010197 ANEMOMETER HEIGHT                                                M                          0            0   9  
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1          4
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1          4
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1          4
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1          4
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2          4
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1          4
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1          4
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0          3
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9          6
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9          6
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2          6
+ 011030 (VAL) EXTENDED DEGREE OF TURBULENCE                              CODE TABLE 11030           0            0   6 CODE TABLE 11030          0          2
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0          2
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1          5
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1          5
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1          4
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2          5
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1          4
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0          2
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0          2
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0          2
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1          4
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1          4
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1          4
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1          4
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1          4
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1          4
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1          4
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1          3
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2          5
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2          5
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1          4
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1          4
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3          5
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3          4
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2          4
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2          4
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2          3
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2          3
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0          4
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2          5
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2          4
+ 011095 (CBS) U COMPONENT OF THE MODEL WIND VECTOR                       M/S                        1        -4096  13 M/S                       1          4
+ 011096 (CBS) V COMPONENT OF THE MODEL WIND VECTOR                       M/S                        1        -4096  13 M/S                       1          4
+ 011192 U - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011193 V - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011194 W - COMPONENT AT 10 M                                            M/S                        1        -4096  13  
+ 011195 STEADINESS OF WIND                                               %                          0            0   7  
+ 011196 FRICTION VELOCITY                                                M/S                        5            0  19  
+ 011201 HORIZONTAL LINE OF SIGHT COMPONENT                               M/S                        1        -4096  13  
+ 011210 1D VAR WIND SPEED RETREIVED ERRO(S)                              M/S                        2            0  12  
+ 011211 WIND SPEED INDEPENDENT ESTIMATE OF ERROR(S)                      M/S                        2            0  12  
+ 011220 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  12  
+ 011221 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15  
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13  
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13  
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13  
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13  
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1          3
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1          3
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1          3
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1          3
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1          3
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1          3
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1          3
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1          3
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1          3
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1          3
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1          3
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1          3
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1          3
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1          3
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2          4
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2          4
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1          3
+ 012049 (VAL) TEMPERATURE CHANGE OVER SPECIFIED PERIOD                   K                          0          -30   6 C                         0          2
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1          3
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1          3
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1          3
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1          3
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1          3
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1          3
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1          4
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1          4
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2          5
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1          4
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6          9
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3          5
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3          5
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2          4
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2          4
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2          4
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2          4
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2          4
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2          4
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2          4
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2          4
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2          4
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2          4
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2          4
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2          4
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2          4
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2          4
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2          4
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2          4
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2          4
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2          4
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2          4
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2          4
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2          4
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2          4
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2          4
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2          5
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2          5
+ 012180 (CBS) AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR        K                          2            0  16 K                         2          5
+ 012181 (CBS) AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR        K                          2            0  16 K                         2          5
+ 012182 (CBS) AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR       K                          2            0  16 K                         2          5
+ 012183 (CBS) AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW   K                          2            0  16 K                         2          5
+ 012184 (CBS) AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW   K                          2            0  16 K                         2          5
+ 012185 (CBS) AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW  K                          2            0  16 K                         2          5
+ 012186 (CBS) MEAN NADIR SEA SURFACE TEMPERATURE                         K                          2            0  16 K                         2          5
+ 012187 (CBS) MEAN DUAL VIEW SEA SURFACE TEMPERATURE                     K                          2            0  16 K                         2          5
+ 012188 (CBS) INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                K                          2            0  16 K                         2          5
+ 012189 (CBS) INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                K                          2            0  16 K                         2          5
+ 012193 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12  
+ 012194 RADIANCE                                                         W/M**2*STER*M**(-1)        6            0  31  
+ 012195 SPECTRAL RADIANCE                                                W/M**2*STER*M**(-1)       10            0  31  
+ 012196 RADIANCE                                                         W/M**2*STER                3            0  16  
+ 012197 MAXIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12  
+ 012198 MINIMUM TEMPERATURE AT 2M, PAST  3 HOURS                         K                          1            0  12  
+ 012199 MAXIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12  
+ 012200 MINIMUM TEMPERATURE AT 2M, PAST  6 HOURS                         K                          1            0  12  
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5          5
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5          5
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0          3
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1          4
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3          3
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1          5
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0          3
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0          3
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1          4
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1          5
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2          4
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2          5
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4          4
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7          4
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0          3
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1          4
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1          5
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1          5
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1          5
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1          5
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0          3
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1          3
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1          4
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0          1
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0          1
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0          2
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0          2
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0          2
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0          2
+ 013044 (CBS) K INDEX                                                    K                          0          -30   8 K                         0          3
+ 013045 (CBS) KO INDEX                                                   K                          0          -30   8 K                         0          3
+ 013046 (CBS) MAXIMUM BUOYANCY                                           K                          0          -30   8 K                         0          3
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0          2
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1          5
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1          4
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1          3
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0          3
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1          5
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2          4
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2          4
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2          4
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1          3
+ 013081 WATER CONDUCTIVITY                                               SIEMENS/M                  3            0  14 SIEMENS/M                 3          4
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1          4
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6          5
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0          4
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3          4
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KGM-2                      1            0  10 KGM-2                     1          4
+ 013091 RADIOMETER LIQUID CONTENT                                        KGM-2                      2            0   8 KGM-2                     2          3
+ 013093 (CBS) CLOUD OPTICAL THICKNESS                                    NUMERIC                    0            0   8 NUMERIC                   0          3
+ 013095 (CBS) TOTAL COLUMN WATER VAPOUR                                  KGM-2                      4            0  19 KGM-2                     4          6
+ 013096 (CBS) MWR WATER VAPOUR CONTENT                                   KGM-2                      2            0  14 KGM-2                     2          5
+ 013097 (CBS) MWR LIQUID WATER CONTENT                                   KGM-2                      2            0  14 KGM-2                     2          5
+ 013098 (CBS) INTEGRATED WATER VAPOUR DENSITY                            KGM-2                      8            0  30 KGM-2                     8         10
+ 013192 RELATIVE HUMIDITY AT 2 M                                         %                          0            0   8  
+ 013193 RELATIVE HUMIDITY                                                %                          0            0   8  
+ 013194 TOTAL COLUMN WATER                                               KG/M**2                    2            0  11  
+ 013195 RAIN RATE                                                        KG/M**2HOUR                0            0   5  
+ 013196 ANTECEDENT PRECIPITATION INDEX                                   KG/M**2                    0            0   7  
+ 013197 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    1            0  10  
+ 013198 RAIN FLAG                                                        CODE TABLE  13198          0            0   3  
+ 013199 SPECIFIC HUMIDITY AT 2 M                                         KG/KG                      5            0  14  
+ 013201 CLOUD LIQUID WATER                                               KG/KG                      7            0  14  
+ 013202 TYPE OF SURFACE                                                  CODE TABLE  13202          0            0   8  
+ 013203 1D VAR ESTIMATE OF RAIN RATE                                     KG/M**2*HOUR               2            0  12  
+ 013204 SSMI INDEPENDENT ESTIMATE OF RAIN RATE                           KG/M**2*HOUR               2            0  12  
+ 013205 CLOUD LIQUID WATER PATH                                          KG/M**2                    4            0  14  
+ 013206 TOTAL PRECIPITATION ICE CONTENT                                  KG/M**2                    6            0  14  
+ 013207 TOTAL CLOUD LIQUID WATER                                         KG/M**2                    6            0  14  
+ 013208 SURFACE RAIN RATE ( INSTANTANEOUS )                              KG/M**2*S                  5            0  17  
+ 013209 RAIN POSSIBILITY                                                 NUMERIC                    0         -256   9  
+ 013210 1D VAR CLOUD LIQUID WATER PATH RETRIEVED ERROR(S)                KG/M**2                    4            0  14  
+ 013211 TOTAL PRECIPITABLE WATER INDIPENDENT ESTIMATE OF ERROR(S)        KG/M**2                    2            0  11  
+ 013212 CLOUD LIQUID WATER PATH INDIPENDENT ESTIMATE OF ERROR(S)         KG/M**2                    4            0  14  
+ 013230 CONVECTIVE PRECIPITATION                                         KG/M**2                    1           -1  14  
+ 013231 LARGE SCALE PRECIPITATION                                        KG/M**2                    1           -1  14  
+ 013240 AIR DENSITY                                                      KG/M**3                    3            0  10  
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3        -2048  12 J/M**2                   -3          4
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4          5
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4          5
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                    -3        -2048  12 W/M**2                   -3          4
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                    -3        -2048  12 W/M**2                   -3          4
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0          3
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4          5
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4          5
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4          5
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4          5
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4          5
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4          5
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0          3
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0          3
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2          5
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  16 J/M**2                   -2          5
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2          5
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0          4
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0          4
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0          3
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0          4
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0          3
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11 WM-2SR-1CM-1              0          4
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1          4
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3          4
+ 014055 (CBS) SOLAR ACTIVITY INDEX                                       NUMERIC                    0       -32768  16 NUMERIC                   0          5
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0          3
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0          4
+ 014192 SCALED RADIANCE                                                  NUMERIC                    0            0  16
+ 014193 SCALED MEAN RADIANCE                                             NUMERIC                    0            0  31
+ 014194 SCALED STD DEV RADIANCE                                          NUMERIC                    0            0  31
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0          4
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2          3
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0          3
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3          4
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0          3
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3          4
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0         10
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8          7
+ 015025 (CBS) TYPE OF POLLUTANT                                          CODE TABLE 15025           0            0   4 CODE TABLE 15025          0          2
+ 015026 (CBS) CONCENTRATION OF POLLUTANT                                 MOLMOL-1                   9            0   9 MOLMOL-1                  9          3
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4          5
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4          4
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5          5
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5          5
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4          5
+ 015036 (CBS) ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                      N-UNITS                    3            0  19 N-UNITS                   3          6
+ 015037 (CBS) BENDING ANGLE                                              RADIANS                    8      -100000  23 RADIANS                   8          7
+ 015202 INTEGRATED ELECTRON DENSITY                                      1/M**2                     3        13000  12  
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0          2
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2          4
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0          3
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2          4
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2          5
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3          4
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0          1
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3          4
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0          2
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1          4
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1          3
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0          3
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0          2
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0          2
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0          2
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0          2
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0          3
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0          2
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0          2
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1          4
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1          4
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1          5
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1          5
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0          2
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0          1
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0          9
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0         10
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0          2
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0          6
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0          1
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0          7
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0          2
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0          3
+ 020028 (VAL) EXPECTED CHANGE IN INTENSITY                               CODE TABLE 20028           0            0   3 CODE TABLE 20028          0          1
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0          1
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2          3
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0          1
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0          2
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0          2
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0          2
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0          2
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0          2
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0          3
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1          4
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0          2
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0          1
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4          2
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4          2
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0          2
+ 020050 (CBS) CLOUD INDEX                                                CODE TABLE 20050           0            0   8 CODE TABLE 20050          0          3
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0          3
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0          3
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0          3
+ 020054 (VAL) TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 020056 (CBS) CLOUD PHASE                                                CODE TABLE 20056           0            0   3 CODE TABLE 20056          0          1
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0          4
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0          2
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0          4
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0          3
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0          3
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0          2
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0          3
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0          3
+ 020083 (CBS) AMOUNT OF SEGMENT COVERED BY SCENE                         %                          0            0   7 %                         0          3
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0          2
+ 020192 SPECIAL PHENOMENA                                                CODE TABLE  20192          0            0  14  
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7  
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7  
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14  
+ 020250 CALCULATED SURFACE TYPE                                          CODE TABLE  20250          0            0   5  
+ 020251 ICE AGE                                                          CODE TABLE  20251          0            0   3  
+ 020252 ICE EDGE                                                         CODE TABLE  20252          0            0   3  
+ 020253 SURFACE TYPE                                                     CODE TABLE  20253          0            0   3  
+ 020254 ICE CONCENTRATION                                                %                          0            0   7  
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0          3
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0          3
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1          3
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0          2
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0          2
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0          3
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0          3
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0          3
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1          4
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1          3
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3          2
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0          3
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0          3
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7          4
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2          3
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0          3
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2          4
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1          4
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0          3
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0          3
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0          4
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0          5
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0          3
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0          4
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0          6
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0          5
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0          2
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0          3
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0          3
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0          1
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3          5
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3          3
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3          4
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3          4
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3          4
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3          5
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0          5
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0          5
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0          2
+ 021086 (CBS) NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                    NUMERIC                    0            0   9 NUMERIC                   0          3
+ 021087 (CBS) NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                     NUMERIC                    0            0   9 NUMERIC                   0          3
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0          3
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0          3
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0          1
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0          1
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0          2
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3          5
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2          5
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3          5
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8          5
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0          6
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0          2
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0          2
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0          2
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0          2
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3          6
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0          6
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0          6
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2          5
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2          5
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0          2
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3          4
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0          3
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2          5
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2          5
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0          3
+ 021130 (CBS) SPECTRUM TOTAL ENERGY                                      NUMERIC                    6            0  28 NUMERIC                   6          9
+ 021131 (CBS) SPECTRUM MAX ENERGY                                        NUMERIC                    6            0  28 NUMERIC                   6          9
+ 021132 (CBS) DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID        DEGREE                     3            0  19 DEGREE                    3          6
+ 021133 (CBS) WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID      M                          3            0  29 M                         3          9
+ 021134 (CBS) RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM              RAD/M                      3            0  19 RAD/M                     3          6
+ 021135 (CBS) REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS       NUMERIC                    3      -524288  20 NUMERIC                   3          7
+ 021136 (CBS) IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS  NUMERIC                    3      -524288  20 NUMERIC                   3          7
+ 021137 (CBS) KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT            dB                         2       -32768  16 dB                        2          5
+ 021138 (CBS) STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT        dB                         2       -32768  16 dB                        2          5
+ 021139 (CBS) KU BAND NET INSTRUMENTAL CORRECTION FOR ACG                dB                         2        -2048  12 dB                        2          4
+ 021140 (CBS) S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT             dB                         2       -32768  16 dB                        2          5
+ 021141 (CBS) STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT         dB                         2       -32768  16 dB                        2          5
+ 021142 (CBS) S BAND NET INSTRUMENTAL CORRECTION FOR ACG                 dB                         2        -1024  11 dB                        2          4
+ 021143 (CBS) KU BAND RAIN ATTENUATION                                   dB                         2  -1073741824  31 dB                        2         10
+ 021144 (CBS) ALTIMETER RAIN FLAG                                        FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0          1
+ 021192 RADAR BACK SCATTER                                               dB                         2        -5000  13  
+ 021193 NOISE FIGURE                                                     %                          0            0   7  
+ 021194 BACKGROUND NOISE LEVEL                                           NUMERIC                    0            0   8  
+ 021195 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8  
+ 021196 UWA PRODUCT CONFIDENCE                                           FLAG TABLE  21196          0            0  12  
+ 021197 UWI PRODUCT CONFIDENCE                                           FLAG TABLE  21197          0            0  12  
+ 021198 URA PRODUCT CONFIDENCE                                           FLAG TABLE  21198          0            0   8  
+ 021199 UAT PRODUCT CONFIDENCE                                           FLAG TABLE  21199          0            0   7  
+ 021200 MWI PRODUCT CONFIDENCE                                           FLAG TABLE  21200          0            0  15  
+ 021201 PEAKINESS                                                        NUMERIC                    0            0  16  
+ 021202 ALTIMETER CALIBRATION STATUS                                     FLAG TABLE  21202          0            0   4  
+ 021203 ALTIMETER INSTRUMENT MODE                                        FLAG TABLE  21203          0            0   9  
+ 021204 MULTI/SINGLE VIEW DIFFERENCE                                     K                          2         -512  10  
+ 021205 SPECTRAL INTENSITY                                               NUMERIC                    0            0   8  
+ 021206 REPRESENTATION OF INTENSITY                                      CODE TABLE  21206          0            0   3  
+ 021207 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14  
+ 021208 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9  
+ 021209 LTITUDE CORRECTION (WET TROPOSPHERE)                             M                          3         2000  10  
+ 021210 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11  
+ 021211 OPEN LOOP CORRECTION (HTL)                                       M                          3            0  10  
+ 021212 OPEN LOOP CORRECTION (AGC)                                       dB                         3        -3000  14  
+ 021213 AMBIGUITY REMOVAL CONFIDENCE                                     %                          0            0   7  
+ 021214 UAT QUALITY SUMMARY                                              CODE TABLE  21214          0            0   3  
+ 021215 UAT ACROSS-TRACK BAND NO.                                        NUMERIC                    0            0   4  
+ 021222 DOPPLER SPECTRUM 0 TH MOMENT (AMPLITUDE)                         dB                         0            0   7  
+ 021225 PRESCAT PRODUCT CONFIDENCE                                       FLAG TABLE  21225          0            0   6  
+ 021226 BACKSCATER DISTANCE                                              NUMERIC                    1        -4096  13  
+ 021230 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3  
+ 021231 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3  
+ 021232 TOTAL NMBER OF SIGMA-0 MEASUREMENTS                              NUMERIC                    0            0   5  
+ 021233 NUMBER OF SIGMA-0 USABLE FOR WIND                                NUMERIC                    0            0   5  
+ 021234 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    1       -10000  14  
+ 021235 WIND VECTOR CELL QUALITY FLAG                                    FLAG TABLE  21235          0            0   3  
+ 021236 NUMBER OF FORE-BEAM SIGMA-0                                      NUMERIC                    1            0   6  
+ 021237 NUMBER OF MID-BEAM V-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021238 NUMBER OF MID-BEAM H-POL SIGMA-0                                 NUMERIC                    1            0   6  
+ 021239 NUMBER OF AFT-BEAM SIGMA-0                                       NUMERIC                    1            0   6  
+ 021240 NORMALIZED RADAR CROSS SECTION                                   NUMERIC                    2       -10000  14  
+ 021241 Kp VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    5            0  14  
+ 021242 Kp VARIANCE COEFFICIENT (BETHA)                                  NUMERIC                    6            0  16  
+ 021243 Kp VARIANCE COEFFICIENT (GAMMA)                                  NUMERIC                    6            0  16  
+ 021244 SIGMA-0 QUALITY FLAG                                             FLAG TABLE  21244          0            0  15  
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0          2
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0          2
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0          2
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1          4
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1          4
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1          4
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2          4
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2          4
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2          4
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2          4
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2          4
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3          5
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3          5
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3          4
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3          5
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1          4
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1          4
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2          5
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1          5
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3          6
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2          3
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0          3
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0          1
+ 022060 (CBS) LAGRANGIAN DRIFTER DROGUE STATUS                           CODE TABLE 22060           0            0   3 CODE TABLE 22060          0          1
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0          2
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2          5
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0          5
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3          6
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3          6
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6          8
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0          4
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0          3
+ 022069 (CBS) SPECTRAL WAVE DENSITY                                      M2HZ-1                     3            0  22 M2HZ-1                    3          7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2          4
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1          3
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0          4
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2          4
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1          3
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0          4
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0          3
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0          4
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0          5
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3          4
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5          4
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2          7
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2          7
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0          3
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0          3
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2          3
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2          3
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2          7
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2          7
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2          7
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2          7
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0          3
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0          3
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3          2
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0          5
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0          5
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0          3
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0         10
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0          2
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0          2
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0          2
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0          2
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2          5
+ 022150 (CBS) NUMBER OF 18 HZ VALID POINTS FOR KU BAND                   NUMERIC                    0            0  10 NUMERIC                   0          4
+ 022151 (CBS) KU BAND OCEAN RANGE                                        M                          3            0  31 M                         3         10
+ 022152 (CBS) STD OF 18 HZ KU BAND OCEAN RANGE                           M                          3            0  16 M                         3          5
+ 022153 (CBS) NUMBER OF 18 HZ VALID POINTS FOR S BAND                    NUMERIC                    0            0  10 NUMERIC                   0          4
+ 022154 (CBS) S BAND OCEAN RANGE                                         M                          3            0  31 M                         3         10
+ 022155 (CBS) STD OF 18 HZ S BAND OCEAN RANGE                            M                          3            0  16 M                         3          5
+ 022156 (CBS) KU BAND SIGNIFICANT WAVE HEIGHT                            M                          3            0  16 M                         3          5
+ 022157 (CBS) STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                   M                          3            0  16 M                         3          5
+ 022158 (CBS) S BAND SIGNIFICANT WAVE HEIGHT                             M                          3            0  16 M                         3          5
+ 022159 (CBS) STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                    M                          3            0  16 M                         3          5
+ 022160 (CBS) NORMALIZED INVERSE WAVE AGE                                NUMERIC                    6            0  21 NUMERIC                   6          7
+ 022161 (CBS) WAVE SPECTRA                                               M**4                       4            0  27 M**4                      4          9
+ 022192 SPECTRAL PERIOD                                                  S                          2            0  13  
+ 022193 MEAN WAVENUMBER                                                  1/M                        5            0  15  
+ 022194 PEAK WAVENUMBER                                                  1/M                        5            0  15  
+ 022195 MEAN WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022196 PEAK WAVE PROPAGATION DIRECTION                                  DEGREE                     1            0  13  
+ 022197 DIRECTION SPREAD                                                 DEGREE                     1            0  13  
+ 022198 VARIANCE SPECTRAL DENSITY                                        M**2*S/RAD                 4            0  18  
+ 022199 CORRELATION COEFF OF SIMULATED FG AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022200 CORRELATION COEFF OF SIMULATED BF AND OBSERVED SAR SPECTRUM      NUMERIC                    4       -10000  15  
+ 022201 CORRELATION COEFF OF OCEAN WAVE FG AND EXTRACTED WAVE SPECTRUM   NUMERIC                    4       -10000  15  
+ 022202 ERROR BETWEEN FIRST GUESS AND OBSERVED SAR                       NUMERIC                    5            0  21  
+ 022203 ERROR BETWEEN SIMULATED AND OBSERVED SAR                         NUMERIC                    5            0  21  
+ 022204 MEAN PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022205 SPECTRAL DENSITY                                                 M**2*S/RAD                 4            0  25  
+ 022206 PEAK PERIOD OF WAVES                                             SECOND                     2            0  13  
+ 022207 MEAN WAVE PERIOD                                                 S                          1            0  10  
+ 022208 PEAK PERIOD OF 1D SPECTRA                                        S                          1            0  10  
+ 022209 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  13  
+ 022210 MEAN SQUARE SLOPE OF WAVES                                       NUMERIC                    4       -10000  14  
+ 022211 COEFICIENT OF DRAG WITH WAVES                                    NUMERIC                    6            0  17  
+ 022243 STANDARD DEVIATION SIGNIFICANT WAVE HEIGHT                       M                          2            0  10  
+ 023001 ACCIDENT EARLY NOTIFICATION - ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0          1
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0          2
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0          1
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0          1
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0          1
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0          1
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0          1
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0          1
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0          1
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0          1
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6          7
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0          1
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0          6
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0          6
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0          8
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1          4
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2          4
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2          4
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0          3
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0          1
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0          1
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                       -11          9
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                       -11          9
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0          2
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0          2
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0          3
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2         10
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2         10
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2         10
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2         10
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2         10
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1          4
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1          4
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1          2
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0          2
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0          3
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0          1
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0          1
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0          1
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0          4
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2          3
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0          2
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0          2
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0          1
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0          1
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0          1
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0          4
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0          1
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5          2
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0          1
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7          2
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2          3
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0          1
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0          3
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1          3
+ 025026 (CBS) BATTERY VOLTAGE (LARGE RANGE)                              V                          1            0  12 V                         1          4
+ 025028 (CBS) OPERATOR OR MANUFACTURER DEFINED PARAMETER                 NUMERIC                    1       -16384  15 NUMERIC                   1          5
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0          1
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0          1
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0          1
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0          2
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0          2
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0          2
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0          1
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0          1
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4          5
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2          5
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0          7
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0          2
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0          2
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0          6
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0          2
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0          3
+ 025052 (CBS) LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA      NUMERIC                    4            0  15 NUMERIC                   4          5
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0          4
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0          2
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2          5
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0          5
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0         12
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2          4
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2          4
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0          4
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0          3
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0          3
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0          2
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0          2
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0          2
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8         10
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5          7
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5          6
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4          8
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10          5
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0          3
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0          1
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3          5
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2          5
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0          3
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0          1
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0          2
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0          2
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5          6
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5          6
+ 025102 (CBS) NUMBER OF MISSING LINES EXCLUDING DATA GAPS                NUMERIC                    0            0   8 NUMERIC                   0          3
+ 025103 (CBS) NUMBER OF DIRECTIONAL BINS                                 NUMERIC                    0            0   8 NUMERIC                   0          3
+ 025104 (CBS) NUMBER OF WAVE-LENGTH BINS                                 NUMERIC                    0            0   8 NUMERIC                   0          3
+ 025107 (CBS) FIRST WAVE-LENGTH BIN                                      M                          3            0  29 M                         3          9
+ 025108 (CBS) LAST WAVE-LENGTH BIN                                       M                          3            0  29 M                         3          9
+ 025111 (CBS) NUMBER OF INPUT DATA GAPS                                  NUMERIC                    0            0   8 NUMERIC                   0          3
+ 025120 (CBS) RA2-L2-PROCESSING FLAG                                     CODE TABLE 25120           0            0   2 CODE TABLE 25120          0          1
+ 025121 (CBS) RA2-L2-PROCESSING QUALITY                                  %                          0            0   7 %                         0          3
+ 025122 (CBS) HARDWARE CONFIGURATION FOR RF                              CODE TABLE 25122           0            0   2 CODE TABLE 25122          0          1
+ 025123 (CBS) HARDWARE CONFIGURATION FOR HPA                             CODE TABLE 25123           0            0   2 CODE TABLE 25123          0          1
+ 025124 (CBS) MWR L2 PROCESSING FLAG                                     CODE TABLE 25124           0            0   2 CODE TABLE 25124          0          1
+ 025125 (CBS) MWR L2-PROCESSING QUALITY                                  %                          0            0   7 %                         0          3
+ 025126 (CBS) MODEL DRY TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3          5
+ 025127 (CBS) INVERTED BAROMETER CORRECTION                              M                          3       -32768  16 M                         3          5
+ 025128 (CBS) MODEL WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3          5
+ 025129 (CBS) MWR DERIVED WET TROPOSPHERIC CORRECTION                    M                          3       -32768  16 M                         3          5
+ 025130 (CBS) RA2 IONOSPHERIC CORRECTION ON KU BAND                      M                          3       -32768  16 M                         3          5
+ 025131 (CBS) IONOSPHERIC CORRECTION FROM DORIS ON KU BAND               M                          3       -32768  16 M                         3          5
+ 025132 (CBS) IONOSPHERIC CORRECTION FROM MODEL ON KU BAND               M                          3       -32768  16 M                         3          5
+ 025133 (CBS) SEA STATE BIAS CORRECTION ON KU BAND                       M                          3       -32768  16 M                         3          5
+ 025134 (CBS) RA2 IONOSPHERIC CORRECTION ON S BAND                       M                          3       -32768  16 M                         3          5
+ 025135 (CBS) IONOSPHERIC CORRECTION FROM DORIS ON S BAND                M                          3       -32768  16 M                         3          5
+ 025136 (CBS) IONOSPHERIC CORRECTION FROM MODEL ON S BAND                M                          3       -32768  16 M                         3          5
+ 025137 (CBS) SEA STATE BIAS CORRECTION ON S BAND                        M                          3       -32768  16 M                         3          5
+ 025138 (CBS) AVERAGE SIGNAL TO NOISE RATION                             NUMERIC                    0        -2048  12 NUMERIC                   0          4
+ 025192 START CHANNEL                                                    NUMERIC                    0            0  14
+ 025193 END CHANNEL                                                      NUMERIC                    0            0  14
+ 025194 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6
+ 025197 ANTENNA CORRECTIONS VERSION NUMBER                               NUMERIC                    0            0   5  
+ 025198 LOG (TEMP-RAD CENTRAL WAVE NUMBER)                               1/M                        8            0  30  
+ 025199 BANDWIDTH CORRECTION COEFFICIENT 1                               NUMERIC                    4       -10000  15  
+ 025200 BANDWIDTH CORRECTION COEFFICIENT 2                               NUMERIC                    5            0  17  
+ 025201 ALBEDO-RAD SOLAR FILTERED IRRADIANCE                             NUMERIC                    4            0  24  
+ 025202 ALBEDO-RAD EQUIVALENT FILTER WIDTH                               NUMERIC                   10            0  14  
+ 025203 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE  25081          0            0  31  
+ 025204 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE  25082          0            0  31  
+ 025205 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE  25083          0            0  31  
+ 025206 FOV QUALITY FLAGS FOR ATOVS                                      FLAG TABLE  25084          0            0  31  
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1          3
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1          3
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0          4
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0          9
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0          4
+ 026193 YEAR                                                             YEAR                       0            0  12  
+ 026194 MONTH                                                            MONTH                      0            0   4  
+ 026195 DAY                                                              DAY                        0            0   6  
+ 026196 HOUR                                                             HOUR                       0            0   5  
+ 026197 MINUTE                                                           MINUTE                     0            0   6  
+ 026198 SECOND                                                           SECOND                     0            0   6  
+ 026200 LOCATION WITHIN ASSIMILATION WINDOW IN TIME                      NUMERIC                    6            0  20  
+ 026201 HOURS INCLUDED                                                   FLAG TABLE  26201          0            0  26  
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5          7
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2          4
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2          4
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5          7
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0          5
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0          5
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2         10
+ 027035 (VAL) LENGTH OF PHENOMENON                                       M                         -3            0  13 M                        -3          4
+ 027080 (CBS) VIEWING AZIMUTH ANGLE                                      DEGREE TRUE                2            0  16 DEGREE TRUE               0          5
+ 027193 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16  
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5          8
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2          5
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2          5
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5          8
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2         10
+ 028035 (VAL) WIDTH OF PHENOMENON                                        M                         -3            0  13 M                        -3          4
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0          1
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0          1
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0          2
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0          3
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0          5
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0          4
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0          4
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0          2
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0          6
+ 030193 POSITION NUMBER ALONG SCAN                                       NUMERIC                    0            0   8  
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0          1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0          3
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0          5
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0          3
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0          5
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0          2
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0          1
+ 031192 DATA PRESENT INDICATOR                                           NUMERIC                    0            0   1  
+ 033001 RESERVED                                                                                                                                             
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0          1
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0          1
+ 033004 RESERVED                                                                                                                                             
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0         10
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0          1
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0          3
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0          2
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0          1
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0          1
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0          1
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0          1
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0          2
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0          1
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0          2
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0          1
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0          8
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0          8
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0          8
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0          8
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0          2
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0          3
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0          7
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0          4
+ 033039 (CBS) QUALITY FLAGS FOR RADIO OCCULTATION DATA                   FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0          6
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0          3
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0          1
+ 033042 (CBS)  TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE              CODE TABLE 33042           0            0   3 CODE TABLE 33042          0          1
+ 033043 (CBS) AST CONFIDENCE                                             FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0          3
+ 033044 (CBS) ASAR QUALITY INFORMATION                                   FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0          5
+ 033045 (CBS) PROBABILITY OF FOLLOWING EVENT                             %                          0            0   7 %                         0          3
+ 033046 (CBS) CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO %                          0            0   7 %                         0          3
+ 033047 (CBS) MEASUREMENT CONFIDENCE DATA                                FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0         11
+ 033048 (CBS) CONFIDENCE MEASURE OF SAR INVERSION                        CODE TABLE 33048           0            0   2 CODE TABLE 33048          0          1
+ 033049 (CBS) CONFIDENCE MEASURE OF WIND RETRIEVAL                       CODE TABLE 33049           0            0   2 CODE TABLE 33049          0          1
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0          2
+ 033052 (CBS) S BAND OCEAN RETRACKING QUALITY                            FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0          7
+ 033053 (CBS) KU BAND OCEAN RETRACKING QUALITY                           FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0          7
+ 033192 GQIS FLAG QUAL                                                   CODE TABLE                 0            0   2
+ 033193 GQIS QUAL INDEX                                                  %                          0            0   7
+ 033194 QIS QUAL INDEX LOC                                               %                          0            0   7
+ 033195 GQIS QUAL INDEX RAD                                              %                          0            0   7
+ 033196 GQIS QUAL INDEX SPECT                                            %                          0            0   7
+ 033197 GQIS SYSTEC SOND QUAL                                            CODE TABLE                 0            0  24
+ 033198 MINIMUM COST                                                     NUMERIC                    4            0  14  
+ 033199 1D VAR TOTAL PRECIPITABLE WATER RETRIEVED ERROR(S)               KG/M**2                    2            0  11  
+ 033200 ANALYSIS REPORT EVENTS                                           FLAG TABLE  33200          0            0  31  
+ 033201 ANALYSIS REPORT STATUS EVENT                                     FLAG TABLE  33201          0            0  13  
+ 033202 ANALYSIS DATUM EVENT FLAGS (1)                                   FLAG TABLE  33202          0            0  31  
+ 033203 ANALYSIS DATUM EVENT FLAGS (2)                                   FLAG TABLE  33203          0            0  11  
+ 033204 ANALYSIS DATUM STATUS FLAGS                                      FLAG TABLE  33204          0            0  21  
+ 033205 VARIATIONAL ANALYSIS BLACK LIST FLAG                             CODE TABLE  33205          0            0   4  
+ 033206 VARIATIONAL ANALYSIS QUALITY CONTROL FLAG                        CODE TABLE  33206          0            0   4  
+ 033207 VARIATIONAL ANALYSIS DEPARTURE FLAG                              CODE TABLE  33207          0            0   4  
+ 033208 VARIATIONAL ANALYSIS FIRST QUESS CHECK FLAG                      CODE TABLE 033208          0            0   4  
+ 033209 VARIATIONAL ANALYSIS FINAL FLAG                                  CODE TABLE  33209          0            0   4  
+ 033210 INCREMENTAL VARIATIONAL ANALYSIS UPDATE NUMBER                   NUMERIC                    0            0   7  
+ 033211 MINIMISATION SIMULATION NUMBER                                   NUMERIC                    0            0  10  
+ 033212 1D VAR ITERATION NUMBER                                          NUMERIC                    0            0  10  
+ 033213 1D VAR RADIANCE COST                                             NUMERIC                    1        -1000  11  
+ 033214 1D VAR ERROR(S)                                                  FLAG TABLE  33214          0            0  11  
+ 033215 DIRECTIONAL SKILL                                                NUMERIC                    1        -4096  13  
+ 033216 1D VAR SURFACE TYPE QUALITY CONTROL                              CODE TABLE  33216          0            0   3  
+ 033217 1D VAR FAILURE INDICATOR                                         CODE TABLE  33217          0            0   2  
+ 033218 1D VAR ESTIMATE OF SCATTERING                                    NUMERIC                    2            0  12  
+ 033219 SSMI INDIPENDENT SCATTERING INDEX                                NUMERIC                    2       -50000  16  
+ 033220 VARIATIONAL ANALYSIS REPORT EVENTS (1)                           FLAG TABLE  33220          0            0  31  
+ 033221 VARIATIONAL ANALYSIS SYNOP EVENTS (2)                            FLAG TABLE  33221          0            0  31  
+ 033222 VARIATIONAL ANALYSIS AIREP EVENTS (2)                            FLAG TABLE  33222          0            0  31  
+ 033223 VARIATIONAL ANALYSIS SATOB EVENTS (2)                            FLAG TABLE  33223          0            0  31  
+ 033224 VARIATIONAL ANALYSIS DRIBU EVENTS (2)                            FLAG TABLE  33224          0            0  31  
+ 033225 VARIATIONAL ANALYSIS TEMP EVENTS (2)                             FLAG TABLE  33225          0            0  31  
+ 033226 VARIATIONAL ANALYSIS PILOT EVENTS (2)                            FLAG TABLE  33226          0            0  31  
+ 033227 VARIATIONAL ANALYSIS SATEM/TOVS EVENTS (2)                       FLAG TABLE  33227          0            0  31  
+ 033228 VARIATIONAL ANALYSIS PAOB EVENTS (2)                             FLAG TABLE  33228          0            0  31  
+ 033229 VARIATIONAL ANALYSIS SCATTEROMETER EVENTS (2)                    FLAG TABLE  33229          0            0  31  
+ 033230 VARIATIONAL ANALYSIS RAW RADIANCES EVENTS (2)                    FLAG TABLE  33230          0            0  31  
+ 033231 PRESAT SUMMARY FLAGS                                             FLAG TABLE  33231          0            0   6  
+ 033232 REPORT BLACK LIST EVENTS                                         FLAG TABLE  33232          0            0  31  
+ 033233 VARIATIONAL ANALYSIS REPORT STATUS                               FLAG TABLE  33233          0            0  31  
+ 033234 VARIATIONAL ANALYSIS DATUM STATUS                                FLAG TABLE  33234          0            0  31  
+ 033236 VARIATIONAL ANALYSIS DATUM EVENTS (1)                            FLAG TABLE  33236          0            0  31  
+ 033237 VARIATIONAL ANALYSIS SYNOP DATUM EVENTS (2)                      FLAG TABLE 033237          0            0  31  
+ 033238 VARIATIONAL ANALYSIS AIREP DATUM EVENTS (2)                      FLAG TABLE 033238          0            0  31  
+ 033239 VARIATIONAL ANALYSIS SATOB DATUM EVENTS (2)                      FLAG TABLE 033239          0            0  31  
+ 033240 VARIATIONAL ANALYSIS DRIBU DATUM EVENTS (2)                      FLAG TABLE 033240          0            0  31  
+ 033241 GROSS ERROR PROBABILITY                                          NUMERIC                    3            0  10  
+ 033242 GROSS ERROR INDICATOR                                            CODE TABLE  33242          0            0   2  
+ 033243 VARIATIONAL ANALYSIS TEMP DATUM EVENTS (2)                       FLAG TABLE  33243          0            0  31  
+ 033244 VARIATIONAL ANALYSIS PILOT DATUM EVENTS (2)                      FLAG TABLE 033244          0            0  31  
+ 033245 VARIATIONAL ANALYSIS SATEM/TOVS DATUM EVENTS (2)                 FLAG TABLE  33245          0            0  31  
+ 033246 VARIATIONAL ANALYSIS PAOB DATUM EVENTS (2)                       FLAG TABLE  33246          0            0  31  
+ 033247 VARIATIONAL ANALYSIS SCATTEROMETER DATUM EVENTS (2)              FLAG TABLE  33247          0            0  31  
+ 033248 VARIATIONAL ANALYSIS RAW RADIANCES DATUM EVENTS (2)              FLAG TABLE  33248          0            0  31  
+ 033249 DATUM BLACK LIST EVENTS                                          FLAG TABLE  33249          0            0  31  
+ 033250 PROBABILITY OF GROSS ERROR                                       NUMERIC                    6            0  20  
+ 033251 RANGE OF POSSIBLE VALUES                                         NUMERIC                    2            0  14  
+ 033252 MANUAL-AUTOMATIC QUALITY CONTROL                                 CODE TABLE  33252          0            0   4  
+ 033253 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7  
+ 033254 WIND CORRELATION METHOD                                          FLAG TABLE  33254          0            0  20  
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0          3
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0          1
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0          4
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0          6
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0          6
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0          4
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0          3
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0          1
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0          2
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0          1
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0          2
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0          1
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0          2
+ 049193 SAR INVERSION QC FLAGS                                           FLAG TABLE  49193          0            0  15  
+ 049194 ALTIMETER WAVE HEIGHT QC FLAFS                                   FLAG TABLE  49194          0            0  15  
+ 062190 STATISTICS APPLICATION                                           CODE TABLE  62190          0            0   8  
+ 062191 TYPE OF STATISTICS                                               CODE TABLE  62191          0            0   8  
+ 063190 APPLICATION DERIVING SUBSTITUTE OR ALTERNATIVE VALUE             CODE TABLE  63190          0            0   8  
diff --git a/bufrtables/C0000000000000014000.TXT b/bufrtables/C0000000000000014000.TXT
new file mode 100755
index 0000000..4f0f41f
--- /dev/null
+++ b/bufrtables/C0000000000000014000.TXT
@@ -0,0 +1,6040 @@
+001003 0008 0000 01 ANTARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001031 0218 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC          
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC    
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC      
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA       
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0218 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC           
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC     
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC   
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA      
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC         
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC    
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC     
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA       
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE  
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                    RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA  
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO 
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU  
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER 
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING   
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO   
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO    
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R     
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM      
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE            
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0012 0000 01 RESERVED
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED
+                    CHANNEL
+            0002 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANNEL
+            0003 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHANNEL
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRAL
+                    CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANNEL 
+                    IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 02 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS
+                    BUT LESS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 01 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERATURES
+            0001 01 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATURES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0010 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0007 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002131 0002 0001 01 STC OPERATIONAL
+            0003 01 MISSING VALUE
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN) 
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 01 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MEDIUM OPACITY)
+            0005 01 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LARGE OPACITY)
+            0006 01 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRECIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                     MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0009 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0005 01 APODIZED
+            0006 01 UNAPODIZED
+            0007 01 RECONSTRUCTED
+            0008 01 CLOUD CLEARED
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002207 0003 0000 01 AFR SCAN
+            0001 01 FORWARD AFT SCAN
+            0007 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF
+                     MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE 
+            0005 01 AMI WAVE MODE 
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER 
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0031 01 ALL BITS SET - MISSING VALUE
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0005 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 01 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0002 01 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 01 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0005 01 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 01 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0008 01 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0028 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0031 01 MISSING VALUE
+008023 0017 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 VECTOR MEAN
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0012 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 01 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LLT)
+            0003 01 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**-1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0004 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 01 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 01 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBUTION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0043 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0014 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+            0018 01 ALL 18 MISSING
+008043   21 0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 01 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPECI)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE 
+                     LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE
+                     WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0004 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0000 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 01 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0009 01 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0010 01 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0011 01 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0012 01 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD CAUSE
+                    SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M))
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+            0009 01 ALL 9 MISSING VALUE
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 01 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 01 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE
+                    ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP IS MORE THAN 0.5
+                    NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 01 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINUTES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 01 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE THAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 01 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 01 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COVER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 01 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0008 01 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0009 01 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0007 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 01 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC LIMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 01 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMBERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 01 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMBERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED WHEN ERS PLATFORM NOT IN
+                    YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHICH PRODUCT CONFIDENCE DATA
+                    SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 01 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 01 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATION 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 01 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RANGE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 01 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGMA-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 01 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+021227 0034 0000 01 RESERVED
+            0001 01 0-2 DEGREES
+            0002 01 3-4 DEGREES
+            0003 01 5-6 DEGREES
+            0004 01 7-6 DEGREES
+            0005 01 9-6 DEGREES
+            0006 01 11-12 DEGREES
+            0007 01 13-14 DEGREES
+            0008 01 15-16 DEGREES
+            0009 01 17-18 DEGREES
+            0010 01 19-20 DEGREES
+            0011 01 21-22 DEGREES
+            0012 01 23-24 DEGREES
+            0013 01 25-26 DEGREES
+            0014 01 27-28 DEGREES
+            0015 01 29-30 DEGREES
+            0016 01 31-32 DEGREES
+            0017 01 33-34 DEGREES
+            0018 01 35-36 DEGREES
+            0019 01 37-38 DEGREES
+            0020 01 39-40 DEGREES
+            0021 01 41-42 DEGREES
+            0022 01 43-44 DEGREES
+            0023 01 45-46 DEGREES
+            0024 01 47-48 DEGREES
+            0025 01 49-50 DEGREES
+            0026 01 51-52 DEGREES
+            0027 01 53-54 DEGREES
+            0028 01 55-56 DEGREES
+            0029 01 57-58 DEGREES
+            0030 01 59-60 DEGREES
+            0031 01 > 60 DEGREES
+            0032 01 INVALID
+            0064 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 01 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXCEEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 01 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL DATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 01 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 01 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUPPRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 01 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE CRITERIA NOT MET
+            0001 01 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA NOT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0004 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF
+                    NORMAL DATA TAKING EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE)
+                    BITS 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 01 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 01 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0014 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 01 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON SUN ALIAS
+            0003 01 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS FREE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 01 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTED
+            0007 01 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETECTED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 02 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE POLARISATION
+                    DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROSS-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECONSTRUCTION OF
+                    THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 01 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREVIOUS GOOD TIME
+            0002 01 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOUS GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH
+                    PREVIOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR MAY 
+                    NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE SCAN LINE
+                     STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN
+                      TIMES THAT HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED 
+                    NUMBER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR
+                     END OF DATA OR TO A DATA GAP
+            0007 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 01 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF SPACE VIEW
+            0012 01 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 01 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHECK
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+            0002 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+            0005 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+            0006 01 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0020 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 01 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+            0006 01 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH
+                    CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 01 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE DETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECTED
+            0029 01 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERRORS
+            0030 01 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DETECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 01 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033075 0005 0001 01 GAP IN RAW DATA RECORD DATA DETECTED
+            0002 01 RECORDED TIME IS NOT IN SEQUENCE
+            0003 01 LAMDA MONITORED CALCULATION CANNOT BE CALCULATED
+            0004 02 THE MEASURED TEMPERATURE OF ANY INSTRUMENT COMPONENT
+                    IS OUTSIDE THE ALLOWABLE RANGE
+            0005 02 AT LEAST ONE OF THE MONITORED INSTRUMENT TEMPERATURES
+                    HAS DRIFTED MORE THAN A SPECIFIED TOLERANCE VALUE
+033076 0002 0001 01 LUNAR INTRUSION ON FIRST DEEP SPACE VIEW
+            0002 01 LUNAR INTRUSION ON SECOND DEEP SPACE VIEW
+033077 0012 0001 01 DEGRADED SDR QUALITY
+            0002 01 INVALID SDR QUALITY
+            0003 01 INVALID SDR GEOLOCATION  INFORMATION
+            0004 01 DEGRADED RADIOMETRIC CALIBRATION
+            0005 01 INVALID RADIOMETRIC CALIBRATION
+            0006 01 DEGRADED SPECTRAL CALIBRATION
+            0007 01 INVALID SPECTRAL CALIBRATION
+            0008 01 FRINGE COUNT ERROR DETECTED AND CORRECTED
+            0009 01 DAy/NIGHT INDICATOR
+            0010 01 INVALID RDR DATA
+            0011 01 SIGNIFICANT FRINGE COUNT ERROR DETECTED
+            0012 01 BIT TRIM FAILED
+033078 0005 0000 01 NOMINAL- ALTITUDE AND EPHEMERIS DATA AVAILABLE
+            0001 01 MISSING AT MOST A SMALL GAP OF ALTITUDE AND EPHEMERIS
+            0002 02 MISSING MORE THAN A SMALL GAP OF ALTITUDE AND EPHEMERIS
+                    DATA, BUT NO MORE THAN A GRANULE BOUNDARY
+            0003 01 MISSING MORE THAN GRANULE BOUNDARY OF ALTITUDE AND EPHEMERIS
+            0015 01 MISSING VALUE
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+            0002 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+            0005 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+            0006 01 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 01 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIMELY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 01 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 01 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CONFIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 01 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FREQUENCY
+            0010 01 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT REMOTE STATIONS
+            0011 01 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSERVATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+035035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 01 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+            0003 01 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+            0004 01 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+040203 0012 0001 01 WARM LOAD IS CHANGING TOO RAPIDLY
+            0002 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR  6.8 GHz CHANNEL
+            0003 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 10.7 GHz CHANNEL
+            0004 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 18.7 GHz CHANNEL
+            0005 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 23.8 GHz CHANNEL
+            0006 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 37.0 GHz CHANNEL
+            0007 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR  6.8 GHz CHANNEL
+            0008 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 10.7 GHz CHANNEL
+            0009 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 18.7 GHz CHANNEL
+            0010 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 23.8 GHz CHANNEL
+            0011 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 37.0 GHz CHANNEL
+            0012 01 ALL MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/C0000000000098000000.TXT b/bufrtables/C0000000000098000000.TXT
new file mode 100755
index 0000000..d659730
--- /dev/null
+++ b/bufrtables/C0000000000098000000.TXT
@@ -0,0 +1,6065 @@
+001003 0008 0000 01 ATARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001031 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA           
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE              
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                     RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)   POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA   
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU   
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO 
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM 
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE                                                
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0012 0000 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE WATER VAPOUR 
+                     CHANNEL
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED CHAN
+                    NEL
+            0002 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANN
+                    EL
+            0003 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHAN
+                    NEL (CLOUD OR CLEAR AIR NOT  SPECIFIED)
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRA
+                    L CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANN
+                    EL IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 02 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS BUT LE
+                    SS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002041 0005 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMSILATIO
+                    N MANUALLY MODIFIED
+            0063 01 MISSING VALUE 
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 02 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERAT
+                    URES
+            0001 02 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATU
+                    RES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0009 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0006 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MED
+                    IUM OPACITY)
+            0005 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LAR
+                    GE OPACITY)
+            0006 02 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRE
+                    CIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                    MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMU
+                    M GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0012 01 MULTI-CHANNEL SCANNING RADIOMETER
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0007 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 02 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT 
+                    OF RVR (P)
+            0002 02 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF R
+                    VR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 02 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSM
+                    ENT OF RVR (P)
+            0005 02 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 02 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESS
+                    MENT OF RVR (P)
+            0008 02 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0032 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0023 01 MONITORING PERIOD
+            0024 01 AGREED TIME LIMIT FOR REPORT RECEPTION
+            0025 01 NOMINAL REPORTING TIME
+            0026 01 TIME OF LAST KNOWN POSITION
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0030 01 RESERVED
+            0031 01 MISSING VALUE
+008023 0017 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 PROBABILITY OF GROSS ERROR
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0015 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 02 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LL
+                    T)
+            0003 02 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**
+                    -1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0006 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 02 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 02 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBU
+                    TION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0043 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0013 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+008043 0021 0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 02 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPEC
+                    I)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0008 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0002 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 02 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0009 02 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE C
+                    LOUD TYPE CB)
+            0010 02 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TY
+                    PE CB)
+            0011 02 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE
+                     CLOUD TYPE CB)
+            0012 02 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD 
+                    CAUSE SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M)
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                     SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 02 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG
+                     ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP I
+                    S MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 02 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINU
+                    TES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 02 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE T
+                    HAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 02 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLET
+                    ELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 02 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COV
+                    ER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 02 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0008 02 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0009 02 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0008 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 02 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC L
+                    IMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 02 -18 DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL (ONE BIT
+                    PER 10-ARCMIN CELL)
+            0011 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED
+                     WHEN ERS PLATFORM NOT IN YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHIC
+                    H PRODUCT CONFIDENCE DATA SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 02 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRA
+                    TION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 02 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATIO
+                    N 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 02 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RAN
+                    GE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 02 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGM
+                    A-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RAN
+                    GE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 02 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXC
+                    EEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 02 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL D
+                    ATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 02 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOUR
+                    S
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 02 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUP
+                    PRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE 
+                     CRITERIA NOT MET
+            0001 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA N
+                    OT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0003 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF NORMAL DATA TAKI
+                    NG EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE) BIT
+                    S 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0013 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 02 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON
+                     SUN ALIAS
+            0003 02 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS F
+                    REE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 02 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTE
+                    D
+            0007 02 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETEC
+                    TED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 03 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE 
+                    POLARISATION DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROS
+                    S-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECON
+                    STRUCTION OF THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 02 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREV
+                    IOUS GOOD TIME
+            0002 02 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOU
+                    S GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH PREV
+                    IOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR
+                     MAY NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE S
+                     CAN LINE STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN TIMES THAT 
+                    HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED NUMB
+                    ER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR END OF DAT
+                    A OR TO A DATA GAP
+            0007 02 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT 
+                    PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F SPACE VIEW
+            0012 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 02 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHEC
+                    K
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 02 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VA
+                    LUE
+            0006 02 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < S
+                    PECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH CUT-OFF FIT DID
+                     NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 02 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE D
+                    ETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 02 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECT
+                    ED
+            0029 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERR
+                    ORS
+            0030 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DET
+                    ECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 02 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER
+                     FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND M
+                    ANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 02 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIME
+                    LY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 02 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE
+                     PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 02 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CON
+                    FIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 02 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FRE
+                    QUENCY
+            0010 02 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT RE
+                    MOTE STATIONS
+            0011 02 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSER
+                    VATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+033035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 02 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0003 02 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0004 02 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCE
+                    AN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/C0000000000098002001.TXT b/bufrtables/C0000000000098002001.TXT
new file mode 100755
index 0000000..d659730
--- /dev/null
+++ b/bufrtables/C0000000000098002001.TXT
@@ -0,0 +1,6065 @@
+001003 0008 0000 01 ATARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001031 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA           
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE              
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                     RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)   POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA   
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU   
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO 
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM 
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE                                                
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0012 0000 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE WATER VAPOUR 
+                     CHANNEL
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED CHAN
+                    NEL
+            0002 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANN
+                    EL
+            0003 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHAN
+                    NEL (CLOUD OR CLEAR AIR NOT  SPECIFIED)
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRA
+                    L CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANN
+                    EL IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 02 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS BUT LE
+                    SS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002041 0005 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMSILATIO
+                    N MANUALLY MODIFIED
+            0063 01 MISSING VALUE 
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 02 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERAT
+                    URES
+            0001 02 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATU
+                    RES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0009 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0006 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MED
+                    IUM OPACITY)
+            0005 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LAR
+                    GE OPACITY)
+            0006 02 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRE
+                    CIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                    MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMU
+                    M GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0012 01 MULTI-CHANNEL SCANNING RADIOMETER
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0007 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 02 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT 
+                    OF RVR (P)
+            0002 02 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF R
+                    VR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 02 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSM
+                    ENT OF RVR (P)
+            0005 02 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 02 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESS
+                    MENT OF RVR (P)
+            0008 02 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0032 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0023 01 MONITORING PERIOD
+            0024 01 AGREED TIME LIMIT FOR REPORT RECEPTION
+            0025 01 NOMINAL REPORTING TIME
+            0026 01 TIME OF LAST KNOWN POSITION
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0030 01 RESERVED
+            0031 01 MISSING VALUE
+008023 0017 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 PROBABILITY OF GROSS ERROR
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0015 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 02 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LL
+                    T)
+            0003 02 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**
+                    -1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0006 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 02 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 02 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBU
+                    TION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0043 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0013 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+008043 0021 0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 02 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPEC
+                    I)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0008 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0002 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 02 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0009 02 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE C
+                    LOUD TYPE CB)
+            0010 02 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TY
+                    PE CB)
+            0011 02 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE
+                     CLOUD TYPE CB)
+            0012 02 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD 
+                    CAUSE SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M)
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                     SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 02 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG
+                     ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP I
+                    S MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 02 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINU
+                    TES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 02 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE T
+                    HAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 02 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLET
+                    ELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 02 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COV
+                    ER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 02 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0008 02 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0009 02 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0008 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 02 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC L
+                    IMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 02 -18 DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL (ONE BIT
+                    PER 10-ARCMIN CELL)
+            0011 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED
+                     WHEN ERS PLATFORM NOT IN YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHIC
+                    H PRODUCT CONFIDENCE DATA SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 02 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRA
+                    TION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 02 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATIO
+                    N 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 02 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RAN
+                    GE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 02 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGM
+                    A-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RAN
+                    GE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 02 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXC
+                    EEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 02 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL D
+                    ATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 02 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOUR
+                    S
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 02 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUP
+                    PRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE 
+                     CRITERIA NOT MET
+            0001 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA N
+                    OT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0003 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF NORMAL DATA TAKI
+                    NG EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE) BIT
+                    S 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0013 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 02 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON
+                     SUN ALIAS
+            0003 02 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS F
+                    REE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 02 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTE
+                    D
+            0007 02 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETEC
+                    TED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 03 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE 
+                    POLARISATION DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROS
+                    S-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECON
+                    STRUCTION OF THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 02 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREV
+                    IOUS GOOD TIME
+            0002 02 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOU
+                    S GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH PREV
+                    IOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR
+                     MAY NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE S
+                     CAN LINE STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN TIMES THAT 
+                    HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED NUMB
+                    ER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR END OF DAT
+                    A OR TO A DATA GAP
+            0007 02 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT 
+                    PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F SPACE VIEW
+            0012 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 02 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHEC
+                    K
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 02 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VA
+                    LUE
+            0006 02 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < S
+                    PECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH CUT-OFF FIT DID
+                     NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 02 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE D
+                    ETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 02 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECT
+                    ED
+            0029 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERR
+                    ORS
+            0030 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DET
+                    ECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 02 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER
+                     FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND M
+                    ANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 02 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIME
+                    LY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 02 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE
+                     PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 02 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CON
+                    FIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 02 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FRE
+                    QUENCY
+            0010 02 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT RE
+                    MOTE STATIONS
+            0011 02 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSER
+                    VATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+033035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 02 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0003 02 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0004 02 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCE
+                    AN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/C0000000000098006000.TXT b/bufrtables/C0000000000098006000.TXT
new file mode 100755
index 0000000..d659730
--- /dev/null
+++ b/bufrtables/C0000000000098006000.TXT
@@ -0,0 +1,6065 @@
+001003 0008 0000 01 ATARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001031 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA           
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE              
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                     RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)   POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA   
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU   
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO 
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM 
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE                                                
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0012 0000 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE WATER VAPOUR 
+                     CHANNEL
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED CHAN
+                    NEL
+            0002 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANN
+                    EL
+            0003 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHAN
+                    NEL (CLOUD OR CLEAR AIR NOT  SPECIFIED)
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRA
+                    L CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANN
+                    EL IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 02 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS BUT LE
+                    SS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002041 0005 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMSILATIO
+                    N MANUALLY MODIFIED
+            0063 01 MISSING VALUE 
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 02 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERAT
+                    URES
+            0001 02 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATU
+                    RES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0009 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0006 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MED
+                    IUM OPACITY)
+            0005 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LAR
+                    GE OPACITY)
+            0006 02 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRE
+                    CIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                    MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMU
+                    M GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0012 01 MULTI-CHANNEL SCANNING RADIOMETER
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0007 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 02 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT 
+                    OF RVR (P)
+            0002 02 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF R
+                    VR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 02 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSM
+                    ENT OF RVR (P)
+            0005 02 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 02 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESS
+                    MENT OF RVR (P)
+            0008 02 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0032 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0023 01 MONITORING PERIOD
+            0024 01 AGREED TIME LIMIT FOR REPORT RECEPTION
+            0025 01 NOMINAL REPORTING TIME
+            0026 01 TIME OF LAST KNOWN POSITION
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0030 01 RESERVED
+            0031 01 MISSING VALUE
+008023 0017 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 PROBABILITY OF GROSS ERROR
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0015 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 02 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LL
+                    T)
+            0003 02 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**
+                    -1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0006 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 02 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 02 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBU
+                    TION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0043 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0013 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+008043 0021 0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 02 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPEC
+                    I)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0008 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0002 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 02 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0009 02 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE C
+                    LOUD TYPE CB)
+            0010 02 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TY
+                    PE CB)
+            0011 02 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE
+                     CLOUD TYPE CB)
+            0012 02 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD 
+                    CAUSE SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M)
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                     SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 02 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG
+                     ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP I
+                    S MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 02 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINU
+                    TES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 02 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE T
+                    HAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 02 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLET
+                    ELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 02 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COV
+                    ER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 02 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0008 02 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0009 02 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0008 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 02 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC L
+                    IMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 02 -18 DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL (ONE BIT
+                    PER 10-ARCMIN CELL)
+            0011 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED
+                     WHEN ERS PLATFORM NOT IN YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHIC
+                    H PRODUCT CONFIDENCE DATA SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 02 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRA
+                    TION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 02 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATIO
+                    N 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 02 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RAN
+                    GE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 02 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGM
+                    A-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RAN
+                    GE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 02 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXC
+                    EEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 02 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL D
+                    ATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 02 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOUR
+                    S
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 02 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUP
+                    PRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE 
+                     CRITERIA NOT MET
+            0001 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA N
+                    OT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0003 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF NORMAL DATA TAKI
+                    NG EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE) BIT
+                    S 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0013 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 02 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON
+                     SUN ALIAS
+            0003 02 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS F
+                    REE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 02 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTE
+                    D
+            0007 02 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETEC
+                    TED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 03 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE 
+                    POLARISATION DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROS
+                    S-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECON
+                    STRUCTION OF THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 02 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREV
+                    IOUS GOOD TIME
+            0002 02 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOU
+                    S GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH PREV
+                    IOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR
+                     MAY NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE S
+                     CAN LINE STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN TIMES THAT 
+                    HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED NUMB
+                    ER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR END OF DAT
+                    A OR TO A DATA GAP
+            0007 02 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT 
+                    PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F SPACE VIEW
+            0012 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 02 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHEC
+                    K
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 02 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VA
+                    LUE
+            0006 02 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < S
+                    PECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH CUT-OFF FIT DID
+                     NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 02 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE D
+                    ETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 02 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECT
+                    ED
+            0029 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERR
+                    ORS
+            0030 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DET
+                    ECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 02 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER
+                     FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND M
+                    ANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 02 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIME
+                    LY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 02 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE
+                     PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 02 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CON
+                    FIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 02 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FRE
+                    QUENCY
+            0010 02 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT RE
+                    MOTE STATIONS
+            0011 02 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSER
+                    VATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+033035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 02 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0003 02 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0004 02 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCE
+                    AN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/C0000000000098006001.TXT b/bufrtables/C0000000000098006001.TXT
new file mode 100755
index 0000000..41d78de
--- /dev/null
+++ b/bufrtables/C0000000000098006001.TXT
@@ -0,0 +1,6020 @@
+001003 0008 0000 01 ATARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001031 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE              
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                    RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA         30
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO             60
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU              90
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER           120
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING             150
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO             180
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO         210
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R        240
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM       270
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE                                                             296
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0008 0000 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE WATER VAPOUR 
+                    CHANNEL
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED
+                    CHANNEL
+            0002 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANNEL
+            0003 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT  SPECIFIED)
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRAL
+                    CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANNEL 
+                    IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 01 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS
+                    BUT LESS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002041 0005 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMSILATIO
+                    N MANUALLY MODIFIED
+            0063 01 MISSING VALUE 
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 01 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERATURES
+            0001 01 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATURES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0010 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0007 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002131 0002 0001 01 STC OPERATIONAL
+            0003 01 MISSING VALUE
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN) 
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 01 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MEDIUM OPACITY)
+            0005 01 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LARGE OPACITY)
+            0006 01 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRECIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                     MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            008035 0000 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING0015 01 MISSING VALUE
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF
+                     MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE 
+            0005 01 AMI WAVE MODE 
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER 
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0031 01 ALL BITS SET - MISSING VALUE
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0005 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 01 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0002 01 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 01 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0005 01 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 01 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0008 01 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0028 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0031 01 MISSING VALUE
+008023 0010 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 PROBABILITY OF GROSS ERROR
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0012 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 01 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LLT)
+            0003 01 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**-1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0004 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 01 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 01 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBUTION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0044 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0014 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+            0018 01 ALL 18 MISSING
+008043      0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 01 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPECI)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE 
+                     LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE
+                     WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0004 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0000 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 01 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0009 01 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0010 01 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0011 01 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0012 01 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD CAUSE
+                    SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M))
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+            0009 01 ALL 9 MISSING VALUE
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 01 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 01 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE
+                    ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP IS MORE THAN 0.5
+                    NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 01 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINUTES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 01 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE THAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 01 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 01 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COVER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 01 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0008 01 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0009 01 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0007 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 01 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC LIMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 01 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMBERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 01 -18 DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL (ONE BIT PER 10-ARCMIN CELL)
+            0011 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 01 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMBERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED WHEN ERS PLATFORM NOT IN
+                    YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHICH PRODUCT CONFIDENCE DATA
+                    SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 01 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 01 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATION 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 01 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RANGE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 01 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGMA-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 01 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 01 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXCEEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 01 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL DATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 01 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 01 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUPPRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 01 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE CRITERIA NOT MET
+            0001 01 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA NOT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0004 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF
+                    NORMAL DATA TAKING EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE)
+                    BITS 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 01 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 01 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0014 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 01 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON SUN ALIAS
+            0003 01 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS FREE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 01 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTED
+            0007 01 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETECTED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 02 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE POLARISATION
+                    DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROSS-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECONSTRUCTION OF
+                    THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 01 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREVIOUS GOOD TIME
+            0002 01 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOUS GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH
+                    PREVIOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR MAY 
+                    NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE SCAN LINE
+                     STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN
+                      TIMES THAT HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED 
+                    NUMBER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR
+                     END OF DATA OR TO A DATA GAP
+            0007 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 01 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF SPACE VIEW
+            0012 01 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 01 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHECK
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+            0002 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+            0005 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+            0006 01 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0020 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0020 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 01 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+            0006 01 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH
+                    CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 01 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE DETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECTED
+            0029 01 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERRORS
+            0030 01 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DETECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 01 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+            0002 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+            0005 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+            0006 01 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 01 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIMELY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 01 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 01 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CONFIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 01 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FREQUENCY
+            0010 01 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT REMOTE STATIONS
+            0011 01 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSERVATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+033035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 01 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+            0003 01 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+            0004 01 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/C0000000000098013001.TXT b/bufrtables/C0000000000098013001.TXT
new file mode 100755
index 0000000..11cb156
--- /dev/null
+++ b/bufrtables/C0000000000098013001.TXT
@@ -0,0 +1,6062 @@
+001003 0008 0000 01 ATARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001031 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA           
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE              
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC                  50
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC          110
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC                     140
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA            190
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE               219
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                     RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)   POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA   
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU   
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO 
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM 
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE                                                
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0012 0000 01 RESERVED 
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED
+                    CHANNEL
+            0002 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANNEL
+            0003 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHANNEL
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRAL
+                    CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANNEL
+                    IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 01 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS BUT LE
+                    SS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002041 0005 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMSILATIO
+                    N MANUALLY MODIFIED
+            0063 01 MISSING VALUE 
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 02 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERAT
+                    URES
+            0001 02 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATU
+                    RES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0009 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0006 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MED
+                    IUM OPACITY)
+            0005 02 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LAR
+                    GE OPACITY)
+            0006 02 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRE
+                    CIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                    MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMU
+                    M GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0012 01 MULTI-CHANNEL SCANNING RADIOMETER
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0007 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 02 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT 
+                    OF RVR (P)
+            0002 02 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF R
+                    VR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 02 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSM
+                    ENT OF RVR (P)
+            0005 02 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 02 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESS
+                    MENT OF RVR (P)
+            0008 02 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT 
+                    OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0032 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0023 01 MONITORING PERIOD
+            0024 01 AGREED TIME LIMIT FOR REPORT RECEPTION
+            0025 01 NOMINAL REPORTING TIME
+            0026 01 TIME OF LAST KNOWN POSITION
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0030 01 RESERVED
+            0031 01 MISSING VALUE
+008023 0017 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 PROBABILITY OF GROSS ERROR
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0015 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 02 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LL
+                    T)
+            0003 02 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**
+                    -1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0006 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 02 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 02 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBU
+                    TION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0043 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0013 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+008043 0021 0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 02 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPEC
+                    I)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABO
+                    VE WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0008 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0002 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 02 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0009 02 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE C
+                    LOUD TYPE CB)
+            0010 02 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TY
+                    PE CB)
+            0011 02 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE
+                     CLOUD TYPE CB)
+            0012 02 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE
+                     CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD 
+                    CAUSE SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M)
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                     SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 02 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG
+                     ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP I
+                    S MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 02 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINU
+                    TES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 02 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE T
+                    HAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 02 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLET
+                    ELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 02 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COV
+                    ER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 02 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0008 02 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0009 02 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUN
+                    TED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0008 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 02 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC L
+                    IMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 02 -18 DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL (ONE BIT
+                    PER 10-ARCMIN CELL)
+            0011 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 02 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMB
+                    ERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED
+                     WHEN ERS PLATFORM NOT IN YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHIC
+                    H PRODUCT CONFIDENCE DATA SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 02 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRA
+                    TION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 02 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATIO
+                    N 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 02 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RAN
+                    GE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 02 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGM
+                    A-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RAN
+                    GE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 02 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXC
+                    EEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 02 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL D
+                    ATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 02 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOUR
+                    S
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 02 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUP
+                    PRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE 
+                     CRITERIA NOT MET
+            0001 02 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA N
+                    OT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0003 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF NORMAL DATA TAKI
+                    NG EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE) BIT
+                    S 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0013 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 02 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON
+                     SUN ALIAS
+            0003 02 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS F
+                    REE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 02 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTE
+                    D
+            0007 02 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETEC
+                    TED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 03 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE 
+                    POLARISATION DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROS
+                    S-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECON
+                    STRUCTION OF THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 02 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREV
+                    IOUS GOOD TIME
+            0002 02 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOU
+                    S GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH PREV
+                    IOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR
+                     MAY NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE S
+                     CAN LINE STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN TIMES THAT 
+                    HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED NUMB
+                    ER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR END OF DAT
+                    A OR TO A DATA GAP
+            0007 02 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT 
+                    PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F SPACE VIEW
+            0012 02 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR O
+                    F BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 02 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHEC
+                    K
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONAB
+                    LE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONA
+                    BLE OR HAS NOT BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 02 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VA
+                    LUE
+            0006 02 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < S
+                    PECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH CUT-OFF FIT DID
+                     NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 02 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE D
+                    ETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 02 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECT
+                    ED
+            0029 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERR
+                    ORS
+            0030 02 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DET
+                    ECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 02 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER
+                     FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PA
+                    SSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DE
+                    LETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FA
+                    ILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE
+                    -INSERTED
+            0006 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND N
+                    OT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND M
+                    ANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 02 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIME
+                    LY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 02 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE
+                     PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 02 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CON
+                    FIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 02 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FRE
+                    QUENCY
+            0010 02 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT RE
+                    MOTE STATIONS
+            0011 02 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSER
+                    VATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+033035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 02 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0003 02 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER O
+                    CEAN, 1=LESS THAN 4 POINTS)
+            0004 02 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCE
+                    AN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/C0000000000098014001.TXT b/bufrtables/C0000000000098014001.TXT
new file mode 100755
index 0000000..4f0f41f
--- /dev/null
+++ b/bufrtables/C0000000000098014001.TXT
@@ -0,0 +1,6040 @@
+001003 0008 0000 01 ANTARCTICA
+            0001 01 REGION I
+            0002 01 REGION II
+            0003 01 REGION III
+            0004 01 REGION IV
+            0005 01 REGION V
+            0006 01 REGION VI
+            0007 01 MISSING VALUE
+001007 0132 0001 01 ERS 1
+            0002 01 ERS 2
+            0003 01 METOP-1
+            0004 01 METOP-2
+            0005 01 METOP-3
+            0020 01 SPOT1
+            0021 01 SPOT2
+            0022 01 SPOT3
+            0023 01 SPOT4
+            0040 01 OERSTED
+            0041 01 CHAMP
+            0042 01 TERRASAR-X
+            0050 01 METEOSAT 3
+            0051 01 METEOSAT 4
+            0052 01 METEOSAT 5
+            0053 01 METEOSAT 6
+            0054 01 METEOSAT 7
+            0055 01 METEOSAT 8
+            0056 01 METEOSAT 9
+            0057 01 METEOSAT 10
+            0058 01 METEOSAT 1
+            0059 01 METEOSAT 2
+            0060 01 ENVISAT
+            0070 01 METEOSAT 11
+            0120 01 ADEOS
+            0121 01 ADEOS II
+            0150 01 GMS 3
+            0151 01 GMS 4
+            0152 01 GMS 5
+            0171 01 MTSAT-1R
+            0172 01 MTSAT-2
+            0200 01 NOAA 8
+            0201 01 NOAA 9
+            0202 01 NOAA 10
+            0203 01 NOAA 11
+            0204 01 NOAA 12
+            0205 01 NOAA 14
+            0206 01 NOAA 15
+            0207 01 NOAA 16
+            0208 01 NOAA 17
+            0209 01 NOAA 18
+            0220 01 LANDSAT 5
+            0221 01 LANDSAT 4
+            0222 01 LANDSAT 7
+            0240 01 DMSP 7
+            0241 01 DMSP 8
+            0242 01 DMSP 9
+            0243 01 DMSP 10
+            0244 01 DMSP 11
+            0245 01 DMSP 12
+            0246 01 DMSP 13
+            0247 01 DMSP 14
+            0248 01 DMSP 15
+            0249 01 DMSP 16
+            0250 01 GOES 6
+            0251 01 GOES 7
+            0252 01 GOES 8
+            0253 01 GOES 9
+            0254 01 GOES 10
+            0255 01 GOES 11
+            0256 01 GOES 12
+            0257 01 GOES 13
+            0258 01 GOES 14
+            0259 01 GOES 15
+            0260 01 JASON-1
+            0261 01 JASON-2
+            0281 01 QUIKSCAT
+            0282 01 TRMM
+            0283 01 CORIOLIS
+            0285 01 DMSP17
+            0310 01 GOMS 1
+            0311 01 GOMS 2
+            0320 01 METEOR 2-21
+            0321 01 METEOR 3-5
+            0322 01 METEOR 3M-1
+            0323 01 METEOR 3M-2
+            0341 01 RESURS 01-4
+            0430 01 INSAT 1B
+            0431 01 INSAT 1C
+            0432 01 INSAT 1D
+            0450 01 INSAT 2A
+            0451 01 INSAT 2B
+            0452 01 INSAT 2E
+            0470 01 INSAT 3A
+            0471 01 INSAT 3D
+            0472 01 INSAT 3E
+            0500 01 FY-1C
+            0501 01 FY-1D
+            0510 01 FY-2
+            0512 01 FY-2B
+            0513 01 FY-2C
+            0514 01 FY-2D
+            0700 01 TIROS M (ITOS 1)
+            0701 01 NOAA 1
+            0702 01 NOAA 2
+            0703 01 NOAA 3
+            0704 01 NOAA 4
+            0705 01 NOAA 5
+            0706 01 NOAA 6
+            0707 01 NOAA 7
+            0708 01 TIROS-N
+            0710 01 GOES (SMS 1)
+            0711 01 GOES (SMS 2)
+            0720 01 TOPEX
+            0721 01 GFO (GEOSAT FOLLOW ON)
+            0722 01 GRACE A
+            0723 01 GRACE B
+            0731 01 GOES 1
+            0732 01 GOES 2
+            0733 01 GOES 3
+            0734 01 GOES 4
+            0735 01 GOES 5
+            0740 01 COSMIC-1
+            0741 01 COSMIC-2
+            0742 01 COSMIC-3
+            0743 01 COSMIC-4
+            0744 01 COSMIC-5
+            0745 01 COSMIC-6
+            0763 01 NIMBUS 3
+            0764 01 NIMBUS 4
+            0765 01 NIMBUS 5
+            0766 01 NIMBUS 6
+            0767 01 NIMBUS 7
+            0780 01 ERBS
+            0781 01 UARS
+            0782 01 EARTH PROBE
+            0783 01 TERRA
+            0784 01 AQUA
+            0785 01 AURA
+            0800 01 SUNSAT
+            0820 01 SAC-C
+            1023 01 MISSIN VALUE
+001031 0218 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW 
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC          
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC    
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC      
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA       
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+001032 0041 0001 01 PREPROCESSING CONSISTENCY CHECK
+            0010 01 BIAS CORRECTION
+            0020 01 BLACK LIST
+            0030 01 OI MASS AND WIND ANALYSIS, REPORT STATUS
+            0031 01 OI HUMIDITY ANALYSIS, REPORT STATUS
+            0032 01 OI ANALYSIS VARIABLES 
+            0033 01 OI ANALYSIS, FIRST GUESS Q/C
+            0034 01 OI ANALYSIS, FINAL ANALYSIS Q/C
+            0035 01 OI ANALYSIS, EVENT FLAGS
+            0040 01 DYNAMIC INITIALISATION SCHEME
+            0041 01 NORMAL MODE INITIALISATION SCHEME
+            0050 01 SURFACE ANALYSIS, REPORT STATUS
+            0051 01 SURFACE ANALYSIS VARIABLES
+            0052 01 SURFACE ANALYSIS Q/C
+            0053 01 SURFACE ANALYSIS, EVENT FLAGS
+            0060 01 3D VAR REPORT STATUS
+            0061 01 3D VAR ANALYSIS VARIABLES
+            0062 01 3D VAR Q/C
+            0063 01 3D VAR EVENT FLAGS
+            0080 01 PRESAT FIRST GUESS
+            0081 01 PRESAT ERROR STANDARD DEVIATIONS
+            0082 01 PRESAT BIAS ESTIMATES 
+            0083 01 PRESAT BRIGHTNESS TEMPERATURE QUALITY FLAGS
+            0084 01 PRESAT SAMARY FLAGS
+            0090 01 FIRST GUESS (6 HOUR FORECAST)
+            0091 01 FIRST GUESS (FGAT INTERPOLATED)
+            0100 01 PRESCAT AMBIGUITY REMOVAL
+            0110 01 WAM FIRST GUESS
+            0111 01 WAM ANALYSIS
+            0112 01 WAM FORECAST
+            0113 01 WAM Q/C
+            0201 01 COLLOCATION WITH SURFACE DATA
+            0202 01 COLLOCATION WITH TEMP/PILOT DATA
+            0203 01 COLLOCATION WITH AIREP DATA 
+            0204 01 COLLOCATION WITH SATOB DATA
+            0205 01 COLLOCATION WITH TOVS DATA
+            0206 01 COLLOCATION WITH ERS1 SCATTEROMETER DATA
+            0207 01 COLLOCATION WITH ERS1 ALTIMETER DATA
+            0220 01 ERS1 SCATTEROMETER COLLOCATION BLACK LIST
+            0230 01 GAUSS ERROR
+            0231 01 GROSS ERROR
+001033 0218 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC           
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC     
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC   
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA      
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+001035 0219 0000 01 WMO SECRETARIAT
+            0001 01 MELBOURNE
+            0002 01 MELBOURNE
+            0003 01 MELBOURNE
+            0004 01 MOSCOW
+            0005 01 MOSCOW
+            0006 01 MOSCOW
+            0007 02 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMEN
+                    TAL PREDICTION(NCEP)
+            0008 02 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONSGATEWAY (NWSTG
+                    )
+            0009 01 US NATIONAL WEATHER SERVICE - OTHER
+            0010 01 CAIRO (RSMC)
+            0011 01 CAIRO (RSMC)
+            0012 01 DAKAR (RSMC)
+            0013 01 DAKAR (RSMC)
+            0014 01 NAIROBI (RSMC)
+            0015 01 NAIROBI (RSMC)
+            0016 01 CASABLANCA (RSMC)
+            0017 01 TUNIS (RSMC)
+            0018 01 TUNIS CASABLANCA (RSMC)
+            0019 01 TUNIS CASABLANCA (RSMC)
+            0020 01 LAS PALMAS
+            0021 01 ALGIERS (RSMC)
+            0022 01 ACMAD
+            0023 01 MOZAMBIQUE NMC
+            0024 01 PRETORIA (RSMC)
+            0025 01 LA R�UNION (RSMC)
+            0026 01 KHABAROVSK (RSMC)
+            0027 01 KHABAROVSK (RSMC)
+            0028 01 NEW DELHI (RSMC)
+            0029 01 NEW DELHI (RSMC)
+            0030 01 NOVOSIBIRSK (RSMC)
+            0031 01 NOVOSIBIRSK (RSMC)
+            0032 01 TASHKENT (RSMC)
+            0033 01 JEDDAH (RSMC)
+            0034 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0035 01 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+            0036 01 BANGKOK
+            0037 01 ULAN BATOR
+            0038 01 BEIJING (RSMC)
+            0039 01 BEIJING (RSMC)
+            0040 01 SEOUL
+            0041 01 BUENOS AIRES (RSMC)
+            0042 01 BUENOS AIRES (RSMC)
+            0043 01 BRASILIA (RSMC)
+            0044 01 BRASILIA (RSMC)
+            0045 01 SANTIAGO
+            0046 01 BRAZILIAN SPACE AGENCY - INPE
+            0047 01 COLOMBIA NMC
+            0048 01 ECUADOR NMC
+            0049 01 PERU NMC         
+            0050 01 VENEZUELA NMC
+            0051 01 MIAMI (RSMC)
+            0052 01 MIAMI RSMC, NATIONAL HURRICANE CENTER
+            0053 01 MONTREAL (RSMC)
+            0054 01 MONTREAL (RSMC)
+            0055 01 SAN FRANCISCO
+            0056 01 ARINC CENTRE
+            0057 01 U.S. AIR FORCE AIR FORCE GLOBAL WEATHER CENTRAL
+            0058 02 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTERE
+                    Y, CA
+            0059 01 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, USA
+            0060 02 UNITED STATES NATIONAL CENTRE FOR ATMOSPHERIC RESEARCH (NCAR
+                    )
+            0061 01 SERVICE ARGOS - LANDOVER
+            0062 01 U.S. NAVAL OCEANOGRAPHIC OFFICE
+            0063 02 IRI (INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIET
+                    Y)
+            0064 01 HONOLULU (RSMC)
+            0065 01 DARWIN (RSMC)
+            0066 01 DARWIN (RSMC)
+            0067 01 MELBOURNE (RSMC)
+            0069 01 WELLINGTON (RSMC)
+            0070 01 WELLINGTON (RSMC)
+            0071 01 NADI (RSMC)
+            0072 01 SINGAPORE
+            0073 01 MALAYSIA NMC
+            0074 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0075 01 UK METEOROLOGICAL OFFICE - EXETER (RSMC)
+            0076 01 MOSCOW (RSMC)
+            0078 01 OFFENBACH (RSMC)
+            0079 01 OFFENBACH (RSMC)
+            0080 01 ROME (RSMC)
+            0081 01 ROME (RSMC)
+            0082 01 NORRK�PING
+            0083 01 NORRK�PING
+            0084 01 TOULOUSE (RSMC)
+            0085 01 TOULOUSE (RSMC)
+            0086 01 HELSINKI
+            0087 01 BELGRADE
+            0088 01 OSLO
+            0089 01 PRAGUE
+            0090 01 EPISKOPI
+            0091 01 ANKARA
+            0092 01 FRANKFURT/MAIN)
+            0093 01 LONDON (WAFC)
+            0094 01 COPENHAGEN
+            0095 01 ROTA
+            0096 01 ATHENS
+            0097 01 EUROPEAN SPACE AGENCY (ESA)
+            0098 01 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECAST (ECMWF)
+            0099 01 DE BILT
+            0100 01 BRAZZAVILLE
+            0101 01 ABIDJAN
+            0102 01 LIBYAN ARAB JAMAHIRIYA NMC
+            0103 01 MADAGASCAR NMC
+            0104 01 MAURITIUS NMC
+            0105 01 NIGER NMC
+            0106 01 SEYCHELLES NMC
+            0107 01 UGANDA NMC
+            0108 01 TANZANIA NMC
+            0109 01 ZIMBABWE NMC
+            0110 01 HONG-KONG, CHINA
+            0111 01 AFGHANISTAN NMC    
+            0112 01 BAHRAIN NMC
+            0113 01 BANGLADESH NMC
+            0114 01 BHUTAN NMC
+            0115 01 CAMBODIA NMC
+            0116 01 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA NMC
+            0117 01 ISLAMIC REPUBLIC OF IRAN NMC
+            0118 01 IRAQ NMC
+            0119 01 KAZAKHSTAN NMC
+            0120 01 KUWAIT NMC
+            0121 01 KYRGYZ REPUBLIC NMC
+            0122 01 LAO PEOPLE'S DEMOCRATIC REPUBLIC NMC
+            0123 01 MACAO, CHINA
+            0124 01 MALDIVES NMC
+            0125 01 MYANMAR NMC
+            0126 01 NEPAL NMC
+            0127 01 OMAN NMC
+            0128 01 PAKISTAN NMC
+            0129 01 QATAR NMC
+            0130 01 REPUBLIC OF YEMEN NMC
+            0131 01 SRI LANKA NMC
+            0132 01 TAJIKISTAN NMC
+            0133 01 TURKMENISTAN NMC
+            0134 01 UNITED ARAB EMIRATES NMC
+            0135 01 UZBEKISTAN NMC
+            0136 01 SOCIALIST REPUBLIC OF VIET NAM NMC
+            0140 01 BOLIVIA NMC
+            0141 01 GUYANA NMC
+            0142 01 PARAGUAY NMC
+            0143 01 SURINAME NMC
+            0144 01 URUGUAY NMC     
+            0145 01 FRENCH GUYANA
+            0146 01 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+            0150 01 ANTIGUA AND BARBUDA NMC
+            0151 01 BAHAMAS NMC
+            0152 01 BARBADOS NMC
+            0153 01 BELIZE NMC
+            0154 01 BRITISH CARIBBEAN TERRITORIES CENTRE
+            0155 01 SAN JOSE
+            0156 01 CUBA NMC
+            0157 01 DOMINICA NMC
+            0158 01 DOMINICAN REPUBLIC NMC
+            0159 01 EL SALVADOR NMC
+            0160 01 US NOAA/NESDIS
+            0161 01 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+            0162 01 GUATEMALA NMC
+            0163 01 HAITI NMC
+            0164 01 HONDURAS NMC
+            0165 01 JAMAICA NMC
+            0166 01 MEXICO
+            0167 01 NETHERLANDS ANTILLES AND ARUBA NMC
+            0168 01 NICARAGUA NMC
+            0169 01 PANAMA NMC
+            0170 01 SAINT LUCIA NMC
+            0171 01 TRINIDAD AND TOBAGO NMC
+            0172 01 FRENCH DEPARTMENTS IN RA IV
+            0173 01 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+            0190 01 COOK ISLANDS NMC
+            0191 01 FRENCH POLYNESIA NMC
+            0192 01 TONGA NMC
+            0193 01 VANUATU NMC
+            0194 01 BRUNEI DARUSSALAM NMC
+            0195 01 INDONESIA NMC
+            0196 01 KIRIBATI NMC
+            0197 01 FEDERATED STATES OF MICRONESIA NMC
+            0198 01 NEW CALEDONIA NMC
+            0199 01 NIUE
+            0200 01 PAPUA NEW GUINEA NMC
+            0201 01 PHILIPPINES NMC
+            0202 01 SAMOA NMC
+            0203 01 SOLOMON ISLANDS NMC
+            0210 01 FRASCATI (ESA/ESRIN)
+            0211 01 LANNION
+            0212 01 LISBOA
+            0213 01 REYKJAVIK
+            0214 01 MADRID
+            0215 01 Z�RICH
+            0216 01 SERVICE ARGOS TOULOUSE
+            0217 01 BRATISLAVA
+            0218 01 BUDAPEST
+            0219 01 LJUBLJANA       
+            0220 01 WARSAW
+            0221 01 ZAGREB
+            0222 01 ALBANIA NMC
+            0223 01 ARMENIA NMC
+            0224 01 AUSTRIA NMC
+            0225 01 AZERBAIJAN NMC
+            0226 01 BELARUS NMC
+            0227 01 BELGIUM NMC
+            0228 01 BOSNIA AND HERZEGOVINA NMC
+            0229 01 BULGARIA NMC
+            0230 01 CYPRUS NMC
+            0231 01 ESTONIA NMC
+            0232 01 GEORGIA NMC
+            0233 01 DUBLIN
+            0234 01 ISRAEL NMC
+            0235 01 JORDAN NMC
+            0236 01 LATVIA NMC
+            0237 01 LEBANON NMC
+            0238 01 LITHUANIA NMC
+            0239 01 LUXEMBOURG
+            0240 01 MALTA NMC
+            0241 01 MONACO
+            0242 01 ROMANIA NMC
+            0243 01 SYRIAN ARAB REPUBLIC NMC
+            0244 01 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA NMC
+            0245 01 UKRAINE NMC
+            0246 01 REPUBLIC OF MOLDOVA NMC
+            0254 01 EUMETSAT OPERATION CENTRE
+            0255 01 MISSING VALUE  
+001090 0005 0000 01 LAF (LAGGED-AVERAGE FORECASTING)
+            0001 01 BREEDING
+            0002 01 SINGULAR VECTOR
+            0003 01 MULTIPLE ANALYSIS CYCLE
+            0255 01 MISSING VALUE
+001092 0005 0000 01 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+            0001 01 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+            0002 01 NEGATIVELY PERTURBED FORECAST
+            0003 01 POSITIVELY PERTURBED FORECAST
+            0255 01 MISSING VALUE
+002001 0004 0000 01 AUTOMATIC STATION
+            0001 01 MANNED STATION
+            0002 01 HYBRID, BOTH MANNED AND AUTOMATIC
+            0003 01 MISSING VALUE
+002002 0004 0000 01 MEASURED IN M S-1 UNLESS OTHERWISE INDICATED 
+            0001 01 CERTIFIED INSTRUMENTS
+            0002 01 ORIGINALY MEASURED IN KNOTS
+            0003 01 ORIGINALY MEASURED IN KM/H
+002003 0012 0000 01 PRESSURE INSTRUMENT ASSOCIATED WITH WIND-MEASURING EQUIPMENT
+            0001 01 OPTICAL THEODOLITE
+            0002 01 RADIO THEODOLITE
+            0003 01 RADAR
+            0004 01 VLF-OMEGA
+            0005 01 LORAN C
+            0006 01 WIND PROFILER
+            0007 01 SATELLITE NAVIGATION
+            0008 01 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+            0009 01 SODAR
+            0014 02 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASUREMENT EQUIPME
+                    NT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+            0015 01 MISSING VALUE
+002004 0011 0000 01 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+            0001 01 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+            0002 01 GGI-300 EVAPORIMETER (SUNKEN)
+            0003 01 20 M**2 TANK
+            0004 01 OTHERS
+            0005 01 RICE
+            0006 01 WHEAT
+            0007 01 MAIZE
+            0008 01 SORGHUM
+            0009 01 OTHER CROPS
+            0015 01 MISSING VALUE
+002011 0054 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 01 NO RADIOSONDE-PASSIVE TARGET(E.G.REFLECTOR)
+            0003 01 NO RADIOSONDE-ACTIVE TARGET(E.G.TRANSPONDER)
+            0004 01 NO RADIOSONDE-PASSIVE TEMPERATURE-HUMIDITY PROFILER
+            0005 01 NO RADIOSONDE-ACTIVE TEMPERATURE-HUMIDITY PROFILER
+            0006 01 NO RADIOSONDE-RADIO ACOUSTIC SOUNDER
+            0009 01 NO RADIOSONDE-SYSTEM UNKNOWN OR NOT SPECIFIED
+            0010 01 RS VIZ TYPE A (USA)
+            0011 01 RS VIZ TYPE B (USA)
+            0012 01 RS SDC (SPACE DATA CORPORATION-USA)
+            0013 01 ASTOR (NO LONGER MADE-AUSTRALIA)
+            0014 01 VIZ MARK I MICROSONDE(USA)
+            0015 01 EEC COMPANY TYPE 23 (USA)
+            0016 01 ELIN (AUSTRIA)
+            0017 01 GRAW G. (GERMANY)
+            0019 01 GRAW M60 (GERMANY)
+            0020 01 INDIAN MET SERVICE MK3 (INDIA)
+            0021 01 VIZ/JIN YANG MARK I MICROSONDE(SOUTH KOREA)
+            0022 01 MEISEI RS2-80 (JAPAN)
+            0023 01 MESURAL FMO 1950A (FRANCE) 
+            0024 01 MESURAL FMO 19455A (FRANCE) 
+            0025 01 MESURAL MH73A (FRANCE) 
+            0026 01 METEOLABOR BASORA (SWITZERLAND)
+            0027 01 AVK-MRZ (USSR)
+            0028 01 METEORIT MARZ2-1 (USSR)
+            0029 01 METEIRIT MARZ2-2 (USSR)
+            0030 01 OKI RS2-80 (JAPAN)
+            0031 01 VIZ/VALCOM TYPE A PRESSURE-COMMUTATED(CANADA)
+            0032 01 SHANGAI RADIO (CHINA)
+            0033 01 UK MET OFFICE MK3( UK)
+            0034 01 VINOHRADY(CZECHOSLOVAKIA)
+            0035 01 VAISALA RS18 (FINLAND)
+            0036 01 VAISALA RS21 (FINLAND)
+            0037 01 VAISALA RS80 (FINLAND)
+            0038 01 VIZ LOCATE (LORAN-C)(USA)
+            0039 01 SPRENGER E076 (GERMANY)
+            0040 01 SPRENGER E084 (GERMANY)
+            0041 01 SPRENGER E085 (GERMANY)
+            0042 01 SPRENGER E086 (GERMANY)
+            0043 01 AIR IS -4A-1680 (UK)
+            0044 01 AIR IS -4A-1680 X (UK)
+            0045 01 RS MSS(USA)
+            0046 01 AIR IS -4A-403(USA)
+            0047 01 MEISLEI RS2-91(JAPAN)
+            0048 01 VALCOM(CANADA)
+            0049 01 VIZ MARK II(USA)
+            0060 01 VAISALA RS80/MICROCORA (FINLAND)
+            0061 01 VAISALA RS80/DIGCORA OR MARWIN (FINLAND)
+            0062 01 VAISALA RS80/PCCORA (FINLAND)
+            0063 01 VAISALA RS80/STAR (FINLAND)
+            0064 03 ORBITAL,SCIENCE CORPORATION,SPACE DATA DIVISION,TRANSPONDER
+                    RADIOSONDE,TYPE 909-11-XX,WHERE XX CORRECPOND TO THE MODEL
+                    OF THE INSTRUMENT
+            0065 01 VIZ TRANSPONDER RADIOSONDE,MODEL NUMBER 1499-520(USA)
+            0255 01 MISSING VALUE
+002012 0001 0000 01 TO BE DEVELOPED
+002013 0009 0000 01 NO CORRECTION
+            0001 01 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+            0002 01 CIMO SOLAR CORRECTED AND IFRARED CORRECTED
+            0003 01 CIMO SOLAR CORRECTED ONLY
+            0004 02 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SY
+                    STEM
+            0005 01 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+            0006 01 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+            0007 01 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+            0015 01 MISSING VALUE
+002014 0050 0000 01 NO WINDFINDING
+            0001 01 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+            0002 01 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+            0003 01 AUTOMATIC WITH AUXILIARY RANGING
+            0004 01 NOT USED
+            0005 01 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+            0006 01 AUTOMATIC CROSS CHAIN LORAN-C
+            0007 01 AUTOMATIC WITH AUXILIARY WIND PROFILER
+            0008 01 AUTOMATIC SATELLITE NAVIGATION
+            0019 01 TRACKING TECHNIQUE NOT SPECIFIED
+            0020 01 VESSEL STOPPED
+            0021 01 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+            0022 01 VESSEL'S ARRIVAL DELAYED
+            0023 01 CONTAINER DAMAGED
+            0024 01 POWER FAILURE TO CONTAINER
+            0029 01 OTHER PROBLEMS
+            0030 01 MAJOR POWER PROBLEMS
+            0031 01 UPS INOPERATIVE
+            0032 01 RECEIVER HARDWARE PROBLEMS
+            0033 01 RECEIVER SOFTWARE PROBLEMS
+            0034 01 PROCESSOR HARDWARE PROBLEMS
+            0035 01 PROCESSOR SOFTWARE PROBLEMS
+            0036 01 NAVAID SYSTEM DAMAGED
+            0037 01 SHORTAGE OF LIFTING GAS
+            0039 01 OTHER PROBLEMS
+            0040 01 MECHANICAL DEFECT
+            0041 01 MATERIAL DEFECT (HAND LAUNCHER)
+            0042 01 POWER FAILURE
+            0043 01 CONTROL FAILURE
+            0044 01 PNEUMATIC/HYDRAULIC FAILURE
+            0045 01 OTHER PROBLEMS
+            0046 01 COMPRESSOR PROBLEMS
+            0047 01 BALLOON PROBLEMS
+            0048 01 BALLOON RELEASE PROBLEMS
+            0049 01 LAUNCHER DAMAGED
+            0050 01 R/S RECEIVER ANTENNA DEFECT
+            0051 01 NAVAID ANTENNA DEFECT
+            0052 01 R/S RECEIVER CABLING (ANTENNA DEFECT)
+            0053 01 NAVAID ANTENNA CABLING DEFECT
+            0059 01 OTHER PROBLEMS
+            0060 01 ASAP COMMUNICATIONS DEFECT
+            0061 01 COMMUNICATIONS FACILITY REJECTED DATA
+            0062 01 NO POWER AT TRANSMITTINGANTENN
+            0063 01 ANTENNA CABLE BROKEN
+            0064 01 ANTENNA CABLE DEFECT
+            0065 01 MESSAGE TRANSMITTED POWER BELOW NORMAL
+            0069 01 OTHER PROBLEMS
+            0070 01 ALL SYSTEMS IN NORMAL OPERATION
+            0099 01 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+            0127 01 MISSING VALUE
+002015 0006 0001 01 PRESSURE ONLY RADIOSONDE
+            0002 01 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+            0003 01 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+            0004 01 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+            0005 01 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+            0015 01 MISSING VALUE
+002016 0004 0001 01 TRAIN REGULATOR
+            0002 01 LIGHT UNIT
+            0003 01 PARACHUTE
+            0004 01 ROOFTOP RELEASE
+002019 0296 0010 02 BNSC    RADIOMETER      AATSR   ADVANCED ALONG TRACK SCANNIN
+                    G RADIOMETER
+            0011 02 BNSC    RADIOMETER      ATSR    ALONG TRACK SCANNING RADIOME
+                    TER
+            0012 02 BNSC    RADIOMETER      ATSR-2  ALONG TRACK SCANNING RADIOME
+                    TER  -2
+            0013 01 BNSC    RADIOMETER      MWR     MICROWAVE RADIOMETER
+            0030 01 CNES    COMMUNICATIONS  ARGOS
+            0040 01 CNES    LIDAR   LASER REFLECTORS
+            0041 02 CNES    LIDAR   DORIS   DOPPLER ORBITOGRAPHY AND RADIO-POSIT
+                    IONING INTEGRATED BY SATELLITE
+            0042 02 CNES    LIDAR   DORIS-NG        DOPPLER ORBITOGRAPHY AND RAD
+                    IO-POSITIONING INTEGRATED BY SATELLITE-NG
+            0047 03 CNES    RADAR ALTIMETERS        POSEIDON-1 (SSALT-1)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (S
+                    INGLE FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0048 03  CNES    RADAR ALTIMETERS        POSEIDON-2 (SSALT-2)    POSI
+                    TIONING OCEAN SOLID EARTH ICE DYNAMICS ORBITING NAVIGATOR (D
+                    UAL FREQUENCY SOLID STATE RADAR ALTIMETER)
+            0050 01 CNES    IMAGER RADIOMETER       ATSR/M  ATSR/M
+            0051 01 CNES    HIGH RESOLUTION OPTICAL IMAGERS HRG
+            0052 01 CNES    RADIOMETER      HRV     HIGH RESOLUTION VISIBLE
+            0053 02 CNES    RADIOMETER      HRVIR   HIGH RESOLUTION VISIBLE AND 
+                            INFRA-RED
+            0054 02 CNES    RADIOMETER      SCARAB/MV2      SCANNER FOR EARTH'S 
+                            RADIATION BUDGET
+            0055 01 CNES    RADIOMETER      POLDER  POLDER
+            0060 01 CNES    SPECTROMETER    VEGETATION      VEGETATION
+            0061 01 CNES    SPECTROMETER    WINDII  WINDII
+            0080 01 CSA     COMMUNICATIONS  RADARSAT DTT
+            0081 01 CSA     COMMUNICATIONS  RADARSAT TTC
+            0085 02 CSA     RADAR   SAR (CSA)       SYNTHETIC APERTURE RADAR (CS
+                    A)
+            0090 02 CSA     RADIOMETER      MOPITT  MEASUREMENTS OF POLLUTION IN
+                     THE TROPOSPHERE
+            0091 02 CSA     CHEMISTRY INSTRUMENTS   OSIRIS  OPTICAL SPECTROGRAPH
+                     AND INFRA-RED IMAGING SYSTEM
+            0097 01 CSIRO   RADIOMETER      PANCHROMATIC IMAGER
+            0098 02 CRCSS   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPS 
+                    RECEIVER
+            0102 02 DLR     RADIOMETER      CHAMP GPS SOUNDER       GPS TURBORO
+                    GUE SPACE RECEIVER (TRSR)
+            0103 01 UNKNOWN
+            0116 03 DLR MAGNETOMETER    IGOR CHAMP GRAVITY PACKAGE (ACCELEROMETE
+                    R+GPS)       INTEGRATED GPS AND OCCULTATION RECEIVER STAR AC
+                    CELEROMETER
+            0117 03 DLR     MAGNETOMETER    CHAMP MAGNETOMETRY PACKAGE (1 SCALAR
+                    +2 VECTOR MAGNETOMETER)     OVERHAUSER MAGNETOMETER (OVM) AN
+                    D FLUXGATE MAGNETOMETER (FGM)
+            0120 02 ESA     COMMUNICATIONS  ENVISAT COMMS   COMMUNICATIONS PACKA  
+                    GE ON ENVISAT
+            0121 02 ESA     COMMUNICATIONS  ERS COMMS       COMMUNICATION PACKAG
+                    E FOR ERS
+            0130 01 ESA     LIDARS  ALADIN  ATMOSPHERIC LASER DOPPLER INSTRUMENT
+            0131 01 ESA     LIDARS  ATLID   ATMOSPHERIC LIDAR
+            0140 02 ESA     RADAR   AMI/SAR/IMAGE   ACTIVE MICROWAVE INSTRUMENTA
+                    TION. IMAGE MODE
+            0141 02 ESA     RADAR   AMI/SAR/WAVE    ACTIVE MICROWAVE INSTRUMENTA
+                    TION. WAVE MODE
+            0142 02 ESA     RADAR   AMI/SCATTEROMETER       ACTIVE MICROWAVE INS
+                    TRUMENTATION. WIND MODE
+            0143 01 ESA     RADAR   ASAR    ASAR
+            0144 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (IMAGE MODE)
+            0145 02 ESA     IMAGING MICROWAVE RADARS        ASAR    ADVANCED SYN
+                    TETIC APERTURA RADAR (WAVE MODE)
+            0146 01 ESA     CLOUD PROFILE AND RAIN RADARS   CPR     CLOUD RADAR
+            0147 01 ESA     RADAR   RA-2/MWR        RADAR ALTIMETER - 2
+            0148 01 ESA     RADAR   RA/MWR  RADAR ALTIMETER
+            0150 01 ESA     SCATTEROMETERS  SCATTEROMETER   SCATTEROMETER
+            0161 02 ESA     RADIOMETER      MIPAS   MICHELSON INTERFEROMETRIC PA
+                    SSIVE ATMOSPHERE SOUNDER
+            0162 02 ESA     IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E   MWR-2   MICROWAVE RADIOMETER-2
+            0163 03 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       SOPRANO SUB-
+                    MILIMETRE OBSERVATION OF PROCESSES IN THE ABSORPTION NOTEWOR
+                    THY FOR OZONE
+            0170 02 ESA     ATMOSPHERIC CHEMISTRY INSTRUMENTS       GOME I  GLOB
+                    AL OZONE MONITORING EXPERIMENT
+            0172 02 ESA     SPECTROMETER    GOMOS   GLOBAL OZONE MONITORING BY O
+                    CCULTATION OF STARS
+            0174 02 ESA     SPECTROMETER    MERIS   MEDIUM RESOLUTION IMAGING SP
+                    ECTROMETER
+            0175 02 ESA     SPECTROMETER    SCIAMACHY       SCANNING IMAGING ABS
+                    ORPTION SPECTROMETER FOR ATMOSPHERIC CARTOGRAPHY
+            0181 02 EUMETSAT        COMMUNICATIONS  METEOSAT COMMS  COMMUNICATIO
+                    NS PACKAGE FOR METEOSAT
+            0182 02 EUMETSAT        COMMUNICATIONS  MSG COMMS       COMMUNICATIO
+                    NS PACKAGE FOR MSG
+            0190 02 ESA/ EUMETSAT        SCATTEROMETERS  ASCAT   ADVANCED SCATTE
+                    ROMETER
+            0200 02 EUMETSAT        RADIOMETER      GERB    GEOSTATIONARY EARTH 
+                    RADIATION BUDGET
+            0202 02 ESA/ EUMETSAT        RADIOMETER      GRAS    GNSS RECEIVER F
+                    OR ATMOSPHERIC SOUNDING
+            0203 02 EUMETSAT        RADIOMETER      MHS     MICROWAVE HUMIDITY S
+                    OUNDER
+            0205 02 EUMETSAT        RADIOMETER      MVIRI   METEOSAT VISIBLE AND
+                    INFRA-RED IMAGER
+            0207 02 EUMETSAT        RADIOMETER      SEVIRI  SPINNING ENHANCED VI
+                    SIBLE AND INFRARED IMAGER
+            0208 02 EUMETSAT        IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR) 
+                        VIRI    VIRI
+            0220 02 ESA/ EUMETSAT        SPECTROMETER    GOME-2  GLOBAL OZONE MO 
+                    NITORING EXPERIMENT - 2
+            0221 03 CNES/ EUMETSAT        ATMOSPHERIC TEMPERATURE AND HUMIDITY S              
+                    OUNDERS   IASI    INFRA-RED ATMOSPHERIC SOUNDING INTERFEROME
+                    TER
+            0240 02 CAST    COMMUNICATIONS  DCP     DATA COLLECTION PLATFORM TRA
+                    NSPONDER
+            0245 01 CAST    RADIOMETER      CCD     HIGH RESOLUTION CCD CAMERA
+            0246 02 INPE    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   HSB 
+                        HUMIDITY SOUNDER/BRAZIL
+            0248 02 INPE    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     OBA 
+                        OBSERVADOR BRASILEIRO DA AMAZONIA
+            0250 01 CAST    RADIOMETER      WFI     WIDE FIELD IMAGER
+            0255 02 CAST    SPECTROMETER    IRMSS   INFRA RED MULTI SPECTRAL SCA
+                    NNER
+            0260 01 ISRO    PRECISION ORBIT BSS & FSS TRANSPONDERS
+            0261 01 ISRO    PRECISION ORBIT DRT-S&R
+            0262 02 ISRO    COMMUNICATIONS  INSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR INSAT
+            0268 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS HR-PAN  HIGH RESOLUT
+                    ION PANCHROMATIC CAMERA
+            0269 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MSMR    MULTIFREQUENCY SCANNING MICROWAVE RADIOMETER
+            0270 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VHRR
+                        VERY HIGH RESOLUTION RADIOMETER
+            0271 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WIFS
+                        WIDE FIELD SENSOR
+            0275 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS AWIFS   ADVANCED WID
+                    E FIELD SENSOR
+            0276 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-I  LINEAR IMAGI
+                    NG SELF SCANNER - I
+            0277 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-II LINEAR IMAGI
+                    NG SELF SCANNER - II
+            0278 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-III        LINE
+                    AR IMAGING SELF SCANNER - III
+            0279 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS LISS-IV LINEAR IMAGI
+                    NG SELF SCANNER - IV
+            0284 02 ISRO    HIGH RESOLUTION OPTICAL IMAGERS PAN     PANCHROMATIC
+                     SENSOR
+            0285 02 ISRO    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MOS 
+                        MODULAR OPTO-ELECTRONIC SCANNER
+            0286 02 ISRO    OCEAN COLOUR INSTRUMENTS        OCM     OCEAN COLOUR
+                     MONITOR
+            0290 02 JMA     COMMUNICATIONS  MTSAT COMMS     COMMUNICATIONS PACKA
+                    GE FOR MTSAT
+            0294 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                    -1R IMAGER/MTSAT
+            0295 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      IMAGER/MTSAT
+                        IMAGER/MTSAT
+            0296 02 JMA     IMAGING MULTI-SPECTRAL RADIOMETERS      VISSR (GMS4)
+                        VISIBLE AND INFRA-RED SPIN SCAN RADIOMETER (GMS4)
+            0300 01 NASA    LIDARS  GLAS    GEOSCIENCE LASER ALTIMETER SYSTEM
+            0301 01 NASA    PRECISION ORBIT LRA     LASER RETROREFLECTOR ARRAY
+            0302 01 NASA    LIDARS  MBLA    MULTI BEAM LASER ALTIMETER
+            0309 02 NASA    CLOUD PROFILE AND RAIN RADARS   CPR (CLOUDSAT)  CLOU  
+                    D PROFILING RADAR
+            0312 01 NASA    RADAR   NSCAT   NASA SCATTEROMETER                                
+            0313 01 NASA    RADAR   SEAWINDS       ADEOS II - NASA SCATTEROMETER
+            0330 02 NASA    EARTH RADIATION BUDGET RADIOMETER       ACRIM   ACTI
+                    VE CAVITY RADIOMETER IRRADIANCE MONITOR
+            0334 02 NASA    TOTAL AND PROFILE OZONE BUV     BACKSCATTER ULTRAVIO
+                    LET INSTRUMENT
+            0336 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ALI     ADVANCED LAN
+                    D IMAGER
+            0347 02 NASA    HIGH RESOLUTION OPTICAL IMAGERS ASTER   ADVANCED SPA
+                    CEBORNE THERMAL EMISSION AND REFLECTION RADIOMETER
+            0348 02 NASA    EARTH RADIATION BUDGET RADIOMETER       CERES-2 CLOU
+                    D AND THE EARTH'S RADIANT ENERGY SYSTEM
+            0351 02 CONAE   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GPSD
+                    R   GPS DEMONSTRATION RECEIVER
+            0353 02 NASA    TOTAL AND PROFILE OZONE HIRDLS  HIGH RESOLUTION DYNA
+                    MICS LIMB SOUNDER
+            0354 02 NASA    TOTAL AND PROFILE OZONE HRDI    HIGH RESOLUTION DOPP
+                    LER IMAGER
+            0356 01 NASA    RADIOMETER      LIS     LIGHTNING IMAGING SENSOR
+            0358 02 NASA    MAGNETIC FIELD, AUROAL IMAGERYSCINTILLATION BOUNDARY
+                        PEM     PARTICLE ENVIRONMENT MONITOR
+            0359 02 NASA    OCEAN COLOUR INSTRUMENTS        SEAWIFS SEA-VIEWING 
+                    WIDE FIELD-OF-VIEW SENSOR
+            0360 02 NASA    EARTH RADIATION BUDGET RADIOMETER       SUSIM (UARS)
+                        SOLAR ULTRAVIOLET IRRADIANCE MONITOR
+            0363 02 NASA    TOTAL AND PROFILE OZONE SBUV/1  SOLAR BACKSCATTER UL
+                    TRAVIOLET 1 INSTRUMENT
+            0365 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  TMI     TRMM MICROWAVE IMAGER
+            0366 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  JMR     JASON-1 MICROWAVE RADIOMETER
+            0369 02 NASA    TOTAL AND PROFILE OZONE LIMS    LIMB INFRARED MONITO
+                    R OF THE STRATOSPHERE
+            0370 02 NASA    TOTAL AND PROFILE OZONE LRIR    LIMB RADIANCE INVERS
+                    ION RADIOMETER INSTRUMENT
+            0371 02 NASA    TOTAL AND PROFILE OZONE EPIC    EARTH POLYCHROMATIC 
+                    IMAGING CAMERA
+            0372 02 NASA    EARTH RADIATION BUDGET RADIOMETER       NISTAR  NIST
+                     ADVANCED RADIOMETER
+            0373 02 NASA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   PLASMA-MAG
+            0374 01 NASA    OTHER   XPS     XUV PHOTOMETER SYSTEM
+            0375 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRS
+                        VISIBLE INFRA-RED SCANNER
+            0376 03 CNES    MULTIPLE DIRECTION/POLARISATION RADIOMETERS     POLD
+                    ER II       POLARIZATION AND DIRECTIONALITY OF THE EARTH'S R
+                    EFLECTANCE - II
+            0377 02 NASA    EARTH RADIATION BUDGET RADIOMETER       TIM     TOTA
+                    L IRRADIANCE MONITOR
+            0379 02 NASA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     WFC 
+                        WIDE FIELD CAMERA
+            0382 02 NASA    SPECTRO-RADIOMETER      CLAES   CRYOGENIC LIMB ARRAY
+                     ETALON SPECTROMETER
+            0383 02 NASA    SPECTRO-RADIOMETER      HALOE   HALOGEN OCCULTATION 
+                    EXPERIMENT
+            0384 02 NASA    SPECTRO-RADIOMETER      ISAMS   IMPROVED STRATOSPHER 
+                    IC AND MESOSPHERIC SOUNDER
+            0385 02 NASA    SPECTRO-RADIOMETER      MISR    MULTI-ANGLE IMAGING              
+                    SPECTRORADIOMETER
+            0386 01 NASA    SPECTRO-RADIOMETER    MLS     MICROWAVE LIMB SOUNDER
+            0387 02 NASA    SPECTRO-RADIOMETER    MLS (EOS-AURA)  MICROWAVE LIMB
+                     SOUNDER (EOS-AURA)
+            0389 02 NASA    SPECTRO-RADIOMETER      MODIS   MODERATE-RESOLUTION 
+                    IMAGING SPECTRORADIOMETER
+            0393 02 NASA    GRAVITY HAIRS   HIGH ACCURACY INTER-SATELLITE RANGIN
+                    G SYSTEM
+            0394 02 NASA    TOTAL AND PROFILE OZONE OMI     OZONE MEASURING INST
+                    RUMENT
+            0395 02 NASA    RADIOMETER      ATMOSPHERIC CORRECTOR   ATMOSPHERIC 
+                    CORRECTOR
+            0396 01 NASA    RADIOMETER      HYPERION        HYPERSPECTRAL IMAGER
+            0399 02 NASA    SPECTRO-RADIOMETER      SAGE I  STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-I
+            0400 02 NASA    SPECTRO-RADIOMETER      SAGE II STRATOSPHERIC AEROSO
+                    L AND GAS EXPERIMENT-II
+            0401 02 NASA    SPECTRO-RADIOMETER      SAGE III        STRATOSPHERI
+                    C AEROSOL AND GAS EXPERIMENT-III
+            0402 02 NASA    SPECTRO-RADIOMETER      SAMS    STRATOSPHERIC AND ME
+                    SOSPHERIC SOUNDER
+            0403 02 NASA    SPECTRO-RADIOMETER      SAM II  STRATOSPHERIC AEROSO
+                    L MEASUREMENT II
+            0404 02 NASA    SPECTRO-RADIOMETER      IRIS    INFRARED INTERFEROME
+                    TER SPECTROMETER
+            0405 02 NASA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   GIFT
+                    S   GEOSYNCHRONOUS IMAGING FOURIER TRANSFORM SPECTROMETER
+            0420 01 NASA    SPECTROMETER    AIRS   ATMOSPHERIC INFRA-RED SOUNDER
+            0426 02 NASA    SPECTROMETER    SOLSTICE        SOLAR STELLAR IRRADI
+                    ANCE COMPARISON EXPERIMENT
+            0430 02 NASA    SPECTROMETER    TES     TROPOSHPERIC EMISSION SPECTR
+                    OMETER
+            0431 02 NASA    SPECTROMETER    TOMS    TOTAL OZONE MAPPING SPECTROM
+                    ETER
+            0450 02 JAXA    COMMUNICATIONS  ADEOS COMMS     COMMUNICATIONS PACKA
+                    GE FOR ADEOS
+            0451 02 JAXA    COMMUNICATIONS  DCS (JAXA)      DATA COLLECTION SYST
+                    EM (JAXA)
+            0453 02 JAXA    COMMUNICATIONS  GMS COMMS       COMMUNICATIONS PACKA
+                    GE ON GMS
+            0454 02 JAXA    COMMUNICATIONS  JERS-1 COMMS    COMMUNICATIONS PACKA
+                    GE FOR JERS-1
+            0460 01 JAXA    LIDAR   RIS     RETROREFLECTOR IN SPACE
+            0461 01 JAXA    RADAR   PR      PRECIPITATION RADAR
+            0462 02 JAXA    IMAGING MICROWAVE RADARS        SAR     SYNTETIC APE
+                    RTURE RADAR
+            0470 02 JAXA    IMAGING MICROWAVE RADARS        PALSAR  PHASED ARRAY
+                     TYPE L-BAND SYNTHETIC APERTURE RADAR
+            0479 02 JAXA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  AMSR-E  ADVANCED MICROWAVE SCANNING RADIOMETER-EOS
+            0480 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS PRISM (ALOS)    PANC
+                    HROMATIC REMOTE-SENSING INSTRUMENT FOR STEREO MAPPING
+            0481 02 JAXA    RADIOMETER      AMSR    ADVANCED MICROWAVE SCANNING   
+                    RADIOMETER
+            0482 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR   ADVANCED VIS           
+                    IBLE AND NEAR INFRARED RADIOMETER
+            0483 02 JAXA    HIGH RESOLUTION OPTICAL IMAGERS AVNIR-2 ADVANCED VIS
+                    IBLE AND NEAR INFRA-RED RADIOMETER TYPE 2
+            0484 01 JAXA    IMAGER  GLI     GLOBAL IMAGER
+            0485 02 JAXA    RADIOMETER      MESSR   MULTISPECTRAL ELECTRONIC SEL
+                    F SCANNING RADIOMETER
+            0486 01 JAXA    RADIOMETER      MSR    MICROWAVE SCANNING RADIOMETER
+            0487 02 JAXA    RADIOMETER      OCTS   OCEAN COLOR AND TEMPERATURE S
+                    CANNER
+            0488 01 JAXA    RADIOMETER      OPS     OPTICAL SENSOR
+            0489 02 JAXA    SPECTRO-RADIOMETER      VISSR (GMS5)    VISIBLE AND 
+                    INFRA-RED SPIN SCAN RADIOMETER (GMS5)
+            0490 02 JAXA    RADIOMETER      VTIR    VISIBLE AND THERMAL INFRA-RE
+                    D RADIOMETER
+            0510 02 JAXA    SPECTROMETER    ILAS-I  IMOROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0511 02 JAXA    SPECTROMETER    ILAS-II IMPROVED LIMB ATOMOSPHIRIC S
+                    PECTROMETER
+            0512 02 JAXA    SPECTROMETER    IMG     INFEROMETRIC MONITOR OF GREE
+                    NHOUSE GASES
+            0514 02 JAXA    SPACE ENVIRONMENT       SEM     SPACE ENVIRONMENT MO
+                    NITOR (JAXA)
+            0515 02 JAXA    TOTAL AND PROFILE OZONE SOFIS   SOLAR OCCULTATION FO
+                    URIER TRANSFORM SPECTROMETER FOR INCLINED ORBIT SATELLITE
+            0540 02 NOAA    COMMUNICATIONS  DCS (NOAA)      DATA COLLECTION SYST
+                    EM (NOAA)
+            0541 02 NOAA    COMMUNICATIONS  GOES COMMS      COMMUNICATIONS PACKA
+                    GE ON GOES
+            0542 02 NOAA    COMMUNICATIONS  LANDSAT COMMS   COMMUNICATIONS PACKA
+                    GE FOR LANDSAT
+            0543 02 NOAA    COMMUNICATIONS  NOAA COMMS      COMMUNICATIONS PACKA
+                    GE FOR NOAA
+            0544 01 NOAA    COMMUNICATIONS  S&R (GOES)      SEARCH AND RESCUE
+            0545 01 NOAA    COMMUNICATIONS  S&R (NOAA)      SEARCH AND RESCUE
+            0546 01 NOAA    COMMUNICATIONS  WEFAX   WEATHER FACSIMILE
+            0547 02 NOAA    SPECTROMETER    SEM(GOES)       SPACE ENVIRONMENT MO
+                    NITOR
+            0550 01 NOAA    MAGNETIC FIELD  SSM     SPECIAL SENSOR MAGNETOMETER
+            0551 02 NOAA    MAGNETIC FIELD  SSJ/4   SPECIAL SENSOR PRECIPITATING
+                     PLASMA MONITOR
+            0552 02 NOAA    SPACE ENVIRONMENT       SSIES-2 SPECIAL SENSOR IONOS
+                    PHERIC PLASMA DRIFT/SCINTILLATION METER
+            0553 02 NOAA    SPACE ENVIRONMENT       SSB/X-2 SPECIAL SENSOR GAMMA
+                     RAY PARTICLE DECTECTOR
+            0570 02 NOAA    RADIOMETER      AMSU-A  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-A
+            0574 02 NOAA    RADIOMETER      AMSU-B  ADVANCED MICROWAVE SOUNDING 
+                    UNIT-B
+            0580 02 NOAA    RADIOMETER      ATOVS (HIRS/3 + AMSU + AVHRR/3) ADVA
+                    NCED TIROS OPERATIONAL VERTICAL SOUNDER
+            0590 02 NOAA    RADIOMETER      AVHRR/2 ADVANCED VERY HIGH RESOLUTIO   
+                    N RADIOMETER/2
+            0591 02 NOAA    RADIOMETER      AVHRR/3 ADVANCED VERY HIGH RESOLUTIO             
+                    N RADIOMETER/3
+            0592 02 NOAA    RADIOMETER      AVHRR/4 ADVANCED VERY HIGH RESOLUTIO
+                    N RADIOMETER/4
+            0600 02 NOAA    RADIOMETER      ERBE    EARTH'S RADIATION BUDGET EXP
+                    ERIMENT
+            0601 01 NOAA    RADIOMETER      ETM+    ENHANCED THEMATIC MAPPER
+            0605 02 NOAA    RADIOMETER      HIRS/2  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/2
+            0606 02 NOAA    RADIOMETER      HIRS/3  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/3
+            0607 02 NOAA    RADIOMETER      HIRS/4  HIGH RESOLUTION INFRA-RED SO
+                    UNDER/4
+            0615 01 NOAA    RADIOMETER      IMAGER  IMAGER
+            0616 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIIR
+                    S   VISIBLE/INFRARED IMAGER RADIOMETER SUITE
+            0620 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   CRIR
+                    S/NP        CROSS TRACK INFRA-RED SOUNDER/NPOESS
+            0621 02 NOAA    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   ATMS
+                        ADVANCED TECHNOLOGY MICROWAVE SOUNDER
+            0622 01 NOAA    RADIOMETER      MSS    MULTISPECTRAL SCANNING SYSTEM
+            0623 01 NOAA    RADIOMETER      MSU     MICROWAVE SOUNDING UNIT
+            0624 02 NOAA    RADIOMETER      SBUV/2  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/2
+            0625 02 NOAA    RADIOMETER      SBUV/3  SOLAR BACKSCATTTER ULTRA-VIO
+                    LET INSTRUMENT/3
+            0626 01 NOAA    RADIOMETER      SOUNDER SOUNDER
+            0627 01 NOAA    RADIOMETER      SSU     STRATOSPHERIC SOUNDING UNIT
+            0628 01 NOAA    RADIOMETER      TM      THEMATIC MAPPER
+            0629 02 NOAA    RADIOMETER      TOVS (HIRS/2 + MSU + SSU)       TIRO
+                    S OPERATIONAL VERTICAL SOUNDER
+            0630 01 NOAA    RADIOMETER      VAS     VISSR ATMOSPHERIC SOUNDER
+            0631 01 NOAA    RADIOMETER      SSZ
+            0645 01 NOAA    SPECTROMETER    SEM     SPACE ENVIRONMENT MONITOR
+            0650 02 NRSCC   RADIOMETER      MVIRSR (10 CHANNEL)     MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0651 02 NRSCC   RADIOMETER      MVIRSR (3 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0652 02 NRSCC   RADIOMETER      MVIRSR (5 CHANNEL)      MULTISPECTRA
+                    L VISIBLE AND INFRA-RED SCAN RADIOMETER
+            0670 01 NSAU    RADAR   RLSBO   SIDE LOOKING MICROWAVE RADAR
+            0680 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS MSU-EU  MULTI-SPECTR
+                    AL RADIOMETER WITH HIGH RESOLUTION
+            0681 02 NSAU    IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MSU-
+                    UM  VISIBLE MULTI-SPECTRAL RADIOMETER
+            0682 01 NSAU    RADIOMETER      RM-08   IMAGING MICROWAVE RADIOMETER
+            0683 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-UMS  STEREO RADIO    
+                    METER WITH HIGH RESOLUTION
+            0684 02 NSAU    HIGH RESOLUTION OPTICAL IMAGERS SU-VR   VISIBLE RADI       
+                    OMETER WITH HIGH RESOLUTION
+            0685 01 NSAU    RADIOMETER      TRASSER
+            0700 02 ROSCOSMOS       COMMUNICATIONS  KONDOR-2        DATA COLLECT
+                    ION AND TRANSMISSION SYSTEM
+            0701 01 ROSCOSMOS       COMMUNICATIONS  BRK
+            0710 01 ROSCOSMOS       LIDAR   ALISSA  BACKSCATTER LIDAR
+            0712 01 ROSCOSMOS       LIDAR   BALKAN-2 LIDAR
+            0715 01 ROSCOSMOS       LIDAR   MK-4
+            0716 01 ROSCOSMOS       LIDAR   MK-4M
+            0730 01 ROSCOSMOS       RADAR   GREBEN  RADAR ALTIMETER
+            0731 01 ROSCOSMOS       RADAR   SAR-10  SYNTETIC APERTURE RADAR
+            0732 01 ROSCOSMOS       RADAR   SAR-3   SYNTETIC APERTURE RADAR
+            0733 01 ROSCOSMOS       RADAR   SAR-70  SYNTETIC APERTURE RADAR
+            0740 01 ROSCOSMOS       RADAR   SLR-3   SIDE LOOKING RADAR
+            0745 01 ROSCOSMOS       RADAR   TRAVERS SAR
+            0750 02 ROSCOSMOS       RADIOMETER      174-K   TEMPERATURE AND HUMI
+                    DITY PROFILER
+            0751 02 ROSCOSMOS       RADIOMETER      BTVK    SCANNING TELEVISION 
+                    RADIOMETER
+            0752 02 ROSCOSMOS       RADIOMETER      CHAIKA  SCANNING IR RADIOMET
+                    ER
+            0753 02 ROSCOSMOS       RADIOMETER      DELTA-2 MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0755 02 ROSCOSMOS       RADIOMETER      IKAR-D  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0756 02 ROSCOSMOS       RADIOMETER      IKAR-N  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0757 02 ROSCOSMOS       RADIOMETER      IKAR-P  MULTISPECTRAL MICROW
+                    AVE SCANNER
+            0760 01 ROSCOSMOS       RADIOMETER      ISP
+            0761 02 ROSCOSMOS       RADIOMETER      KFA-1000        PHOTOGRAPHIC
+                     CAMERA
+            0762 01 ROSCOSMOS       RADIOMETER      KFA-200 PHOTOGRAPHIC CAMERA
+            0763 02 ROSCOSMOS       RADIOMETER      KFA-3000        PHOTOGRAPHIC
+                     CAMERA
+            0770 01 ROSCOSMOS       RADIOMETER     KLIMAT SCANNING IR RADIOMETER
+            0771 02 ROSCOSMOS       RADIOMETER      KLIMAT-2        SCANNING IR 
+                    RADIOMETER
+            0775 01 ROSCOSMOS       RADIOMETER      MIRAS
+            0776 01 ROSCOSMOS       RADIOMETER      MIVZA
+            0777 02 ROSCOSMOS       RADIOMETER      MIVZA-M MICROWAVE SCANNING R     
+                    ADIOMETER
+            0780 01 ROSCOSMOS       RADIOMETER      MR-2000                            
+            0781 01 ROSCOSMOS       RADIOMETER      MR-2000M
+            0785 02 ROSCOSMOS       RADIOMETER      MR-900  SCANNING TELEPHOTOME
+                    TER
+            0786 02 ROSCOSMOS       RADIOMETER      MR-900B SCANNING VISUAL BAND
+                     TELEPHOTOMETER
+            0790 02 ROSCOSMOS       RADIOMETER      MSU-E   MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0791 02 ROSCOSMOS       RADIOMETER      MSU-E1  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0792 02 ROSCOSMOS       RADIOMETER      MSU-E2  MULTISPECTRAL HIGH R
+                    ESOLUTION ELECTRONIC SCANNER
+            0793 01 ROSCOSMOS       RADIOMETER      MSU-M
+            0794 02 ROSCOSMOS       RADIOMETER      MSU-S   MULTISPECTRAL MEDIUM
+                     RESOLUTION SCANNER
+            0795 02 ROSCOSMOS       RADIOMETER      MSU-SK  MULTISPECTRAL MEDIUM
+                    RESOLUTION CONICAL SCANNER
+            0796 02 ROSCOSMOS       RADIOMETER      MSU-V   MULTISPECTRAL HIGH R
+                    ESOLUTION CONICAL SCANNER
+            0810 02 ROSCOSMOS       RADIOMETER      MTZA    SCANNING MICROWAVE R
+                    ADIOMETER
+            0815 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  MZOAS   SCANNING MICROWAVE RADIO
+                    METER
+            0820 03 ROSCOSMOS       IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE 
+                    MICROWAVE)  R-225   SINGLE CHANNEL MICROWAVE
+                     RADIOMETER
+            0821 01 ROSCOSMOS       RADIOMETER      R-400
+            0822 02 ROSCOSMOS       RADIOMETER      R-600   SINGLE CHANNEL MICRO
+                    WAVE RADIOMETER
+            0830 02 ROSCOSMOS       RADIOMETER      RMS     RADIATION MEASUREMEN
+                    T SYSTEM
+            0835 01 ROSCOSMOS       RADIOMETER      TV CAMERA
+            0836 01 ROSCOSMOS       RADIOMETER      SILVA
+            0840 02 ROSCOSMOS       SPECTRO-RADIOMETER      SROSMO  SPECTRORADIO
+                    METER FOR OCEAN MONITORING
+            0850 02 ROSCOSMOS       SPECTROMETER    BUFS-2  BACKSCATTER SPECTROM
+                    ETER/2
+            0851 02 ROSCOSMOS       SPECTROMETER    BUFS-4  BACKSCATTER SPECTROM
+                    ETER/4
+            0855 02 ROSCOSMOS       SPECTROMETER    ISTOK-1 INFRA-RED SPECTROMET
+                    ER
+            0856 02 ROSCOSMOS       SPECTROMETER    SFM-2   SPECTROMETER TO MEAS
+                    URE DIRECT SOLAR RADIATION
+            0857 01 ROSCOSMOS       SPECTROMETER    DOPI
+            0858 01 ROSCOSMOS       SPECTROMETER    KGI-4
+            0859 01 ROSCOSMOS       SPECTROMETER    OZON-M
+            0860 01 ROSCOSMOS       SPECTROMETER    RMK-2
+            0900 02 NOAA    RADIOMETER      MAXIE   MAGNETOSPHERIC ATMOSPHERIC X
+                    -RAY IMAGING EXPERIMENT
+            0901 01 NOAA    RADIOMETER      OLS     OPERATIONAL LINESCAN SYSTEM      
+            0905 02 NOAA    RADIOMETER      SSM/I   MISSION SENSOR MICROWAVE IMA     
+                    GER
+            0906 02 NOAA    RADIOMETER      SSM/T-1 MISSION SENSOR MICROWAVE TEM
+                    PERATURE SOUNDER
+            0907 02 NOAA    RADIOMETER      SSM/T-2 MISSION SENSOR MICROWAVE WAT
+                    ER VAPOR SOUNDER
+            0908 02 NOAA    RADIOMETER      SSMIS   SPECIAL SENSOR MICROWAVE IMA
+                    GER SOUNDER
+            0910 01 NOAA    RADIOMETER      SXI     SOLAR X-RAY IMAGER
+            0930 02 NOAA    SPECTROMETER    EHIC    ENERGETIC HEAVY ION COMPOSIT
+                    ION EXPERIMENT
+            0931 01 NOAA    SPECTROMETER    X-RAY ASTRONOMY PAYLOAD
+            0932 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     IVIS
+                    SR (FY-2)   IMPROVED MULTISPECTRAL VISIBLE AND INFRA-RED SCA
+                    N RADIOMETER (5 CHANNELS)
+            0933 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IRAS
+                        INFRARED ATMOSPHERIC SOUNDER
+            0934 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWAS
+                        MICROWAVE ATMOSPHERIC SOUNDER
+            0935 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   IMWA
+                    S   IMPROVED MICROWAVE ATMOSPHERIC SOUNDER
+            0936 02 NRSCC   ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   MWHS
+                        MICROWAVE HUMIDITY SOUNDER
+            0937 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     MVIR
+                    S   MODERATE RESOLUTION VISIBLE AND INFRARED IMAGING SPECTRO
+                    RADIOMETER
+            0938 02 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  MWRI    MICROWAVE RADIATION IMAGER
+            0940 02 ROSCOSMOS       ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDER
+                    S   MTVZA-OK        SCANNING MICROWAVE RADIOMETER
+            0941 02 CNES    ATMOSPHERIC TEMPERATURE AND HUMIDITY SOUNDERS   SAPH
+                    IR
+            0944 01 NOAA    RADAR ALTIMETERS        ALT     ALTIMETER
+            0945 02 NOAA    EARTH RADIATION BUDGET RADIOMETER       TSIS    TOTA
+                    L SOLAR IRRADIANCE SENSOR
+            0946 02 NOAA    IMAGING MULTI-SPECTRAL RADIOMETERS (PASSIVE MICROWAV
+                    E)  CMIS    CONICAL-SCANNING MICROWAVE IMAGER/SOUNDER
+            0947 02 NOAA    TOTAL AND PROFILE OZONE OMPS    OZONE MAPPING AND PR
+                    OFILER SUITE
+            0948 03 NOAA    SPACE ENVIRONMENT ATMOSPHERIC TEMPERATURE AND HUMIDI
+                    TY SOUNDERS GPSOS   GLOBAL POSITIONING SYSTEM OCCULTATION SE
+                    NSOR
+            0949 02 NOAA    MAGNETIC FIELD, AUROAL IMAGERY SCINTILLATION BOUNDAR
+                    Y   SESS    SPACE ENVIRONMENTAL SENSOR SUITE
+            0950 03 NRSCC   IMAGING MULTI-SPECTRAL RADIOMETERS (VIS/IR)     VIRR
+                        MULTISPECTRAL VISIBLE AND INFRA-RED SCAN RADIOMETER (10 
+                    CHANNELS
+            0951 01 NRSCC   TOTAL AND PROFILE OZONE TOM     TOTAL OZONE MAPPER
+            0952 01 NRSCC   TOTAL AND PROFILE OZONE OP      OZONE PROFILER
+            2047 01 MISSING VALUE            
+002020 0024 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+            0003 01 TIROS 2 (NOAA-14 ONWARDS)
+            0010 01 EOS
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS)
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0261 01 JASON
+            0271 01 GMS
+            0272 01 MTSAT
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME (MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+            0351 01 GOMS
+            0380 01 FY-1
+            0381 01 FY-2
+            0401 01 GPS
+            0402 01 GLONASS
+            0403 01 GALILEO
+            0511 01 MISSING VALUE
+002021 0008 0001 01 HIGH RESOLUTION INFRA RED SOUNDER (HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT           (MSU )
+            0003 01 STRATOSPHERIC SOUNDING UNIT       (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+002022 0005 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 AUTOMATED STATISTICAL REGRESSION
+            0003 01 CLEAR PATH
+            0004 01 PARTLY CLOUDY PATH
+            0005 01 CLOUDY PATH
+002023 0012 0000 01 RESERVED
+            0001 02 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED
+                    CHANNEL
+            0002 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANNEL
+            0003 01 WIND DERIVED FROM CLOUD MOTION OBSERVED IN WATER VAPOUR CHANNEL
+            0004 02 WIND DERIVED FROM MOTION OBSERVED IN  COMBINATION OF SPECTRAL
+                    CHANNELS
+            0005 02 WIND DERIVED FROM MOTION OBSERVED IN THE WATER  VAPOUR CHANNEL 
+                    IN CLEAR AIR
+            0006 01 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE  CHANNEL
+            0007 02 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL
+                    (CLOUD OR CLEAR AIR NOT SPECIFIED)
+            0008 01 WIND DERIVED FROM ALTIMETER
+            0009 01 WIND DERIVED FROM RADIOMETER
+            0013 01 ROOT MEAN SQUARE
+            0015 01 MISSING VALUE
+002024 0003 0001 01 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002025 0016 0001 01 RESERVED
+            0002 01 HIRS
+            0003 01 MSU
+            0006 01 HIRS
+            0007 01 MSU
+            0010 01 HIRS(1, 2, 3, 8,9, 16, 17)
+            0011 01 HIRS(1, 2, 3, 9, 17)
+            0012 01 MSU
+            0015 01 HIRS
+            0016 01 HIRS
+            0017 01 MSU
+            0018 01 SKINTK(OCEAN ONLY)
+            0021 01 HIRS
+            0022 01 SSU
+            0023 01 MSU (3 ,4)
+            0025 01 MISSING
+002030 0007 0001 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0002 01 GEK (GEOMAGNETIC ELECTRO KINETOGRAPH)
+            0003 01 SHIPS'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+            0004 02 SHIPS'S SET AND DRIFT DETERMINED BY MORE THAN 6 HOURS
+                    BUT LESS THAN 12 HOURS APART
+            0005 01 DRIFT OF BUOY
+            0006 01 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+            0007 01 MISSIN VALUE
+002031 0021 0000 01 RESERVED
+            0001 01 INSTANTANEOUS
+            0002 01 AVERAGED OVER 3 MINUTES OR LESS
+            0003 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0004 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0005 01 INSTANTANEOUS
+            0006 01 AVERAGED OVER 3 MINUTES OR LESS
+            0007 01 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+            0008 01 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+            0009 01 VECTOR OR DOPPLER CURRENT PROFILLING METHOD NOT USED
+            0010 01 RESERVED
+            0011 01 1 HOUR OR LESS
+            0012 01 MORE THAN  1 HOUR BUT  2 AT THE MOST
+            0013 01 MORE THAN  2 HOUR BUT  4 AT THE MOST
+            0014 01 MORE THAN  4 HOUR BUT  8 AT THE MOST
+            0015 01 MORE THAN  8 HOUR BUT 12 AT THE MOST
+            0016 01 MORE THAN 12 HOUR BUT 18 AT THE MOST
+            0017 01 MORE THAN 18 HOUR BUT 24 AT THE MOST
+            0018 01 RESERVED
+            0019 01 DRIFT METHOD NOT USED
+            0031 01 MISSING
+002032 0004 0000 02 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUME
+                    NT OR SELECTED BY ANY OTHER METHOD)
+            0001 02 VALUES AT SIGNIFICANT DEPTHS (DATA POINTS TAKEN FROM TRACES
+                    AT SIGNIFICANT DEPTHS)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002033 0005 0000 01 NO SALINITY MEASURED
+            0001 01 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 %
+            0002 01 IN SITU SENSOR, ACCURACY LESS THAN 0.02 %
+            0003 01 SAMPLE ANALYSIS
+            0007 01 MISSING VALUE
+002034 0007 0000 01 UNSPECIFIED DROGUE
+            0001 01 HOLEY SOCK
+            0002 01 TRISTAR
+            0003 01 WINDOW SHADE
+            0004 01 PARACHUTE
+            0005 01 NON-LAGRANGIAN SEA ANCHOR
+            0031 01 MISSING VALUE
+002036 0004 0000 01 DRIFTING BUOY
+            0001 01 FIXED BUOY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002037 0007 0000 01 REASERVED
+            0001 01 MANUAL READING FROM VERTICAL TIDE STAFF
+            0002 01 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+            0003 01 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+            0004 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITHOUT LEVEL REFERENCE CHECK
+            0005 02 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+                    WITH LEVEL REFERENCE CHECK,OR MULTIPLE AUTOMATIC RECORDERS
+            0007 01 MISSING
+002038 0012 0000 01 SHIP INTAKE
+            0001 01 BUCKET
+            0002 01 HULL CONTACT SENSOR
+            0003 01 REVERSING TERMOMETER
+            0004 01 STD/CTD SENSOR
+            0005 01 MECHANICAL BT
+            0006 01 EXPANDABLE BT
+            0007 01 DIGITAL BT
+            0008 01 THERMISTOR CHAIN 
+            0009 01 INFRARED SCANNER
+            0010 01 MICROWAVE SCANNER
+            0015 01 MISSING VALUE
+002039 0005 0000 01 MEASURED WET-BULB TEMPERATURE
+            0001 01 ICED BULB MEASURED WET-BULB TEMPERATURE
+            0002 01 COMPUTED WET-BULB TEMPERATURE
+            0003 01 ICED BULB COMPUTED WET-BULB TEMPERATURE
+            0007 01 MISSING VALUE
+002040 0008 0000 01 SHIPS MOTION REMOVED BY AVARAGING 
+            0001 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0002 01 SHIPS MOTION NOT REMOVED
+            0003 01 SHIPS MOTION REMOVED BY AVERAGING
+            0004 01 SHIPS MOTION REMOVED BY MOTION COMPENSATION
+            0005 01 SHIPS MOTION NOT REMOVED
+            0006 01 DOPPLER CURRENT PROFILING METHOD NOT USED
+            0015 01 MISSING VALUE
+002041 0006 0000 01 INFORMATION BASED ON MANUAL ANALYSIS
+            0001 01 INFORMATION BASED ON COMPUTER ANALYSIS
+            0002 01 INFORMATION BASED ON DATA ASSIMILATION
+            0003 02 INFORMATION BASED ON COMPUTER ANALYSIS OR
+                    DATA ASSIMILATION MANUALLY MODIFIED 
+            0010 01 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+            0063 01 MISSING VALUE
+002044 0006 0000 01 RESERVED
+            0001 01 LONGUET-HIGGINS (1964)
+            0002 01 LONGUET-HIGGINS (F3 METHOS)
+            0003 01 MAXIMUM LIKELIHOOD METHOD
+            0004 01 MAXIMUM ENTROPY METHOD
+            0015 01 MISSING VALUE
+002045 0005 0000 01 SEA STATION
+            0001 01 AUTOMATIC DATA BUOY
+            0002 01 AIRCRAFT
+            0003 01 SATELLITE
+            0015 01 MISSING VALUE
+
+002046 0004 0000 01 RESERVED
+            0001 01 HEAVE SENSOR
+            0002 01 SLOPE SENSOR
+            0015 01 MISSING VALUE
+002048 0012 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A
+            0004 01 AMSU-B
+            0005 01 AVHRR
+            0006 01 SSMI
+            0007 01 NSCAT
+            0008 01 SEA WINDS
+            0009 01 POSEIDON ALTIMETER
+            0010 01 JMR (JASON MICROWAVE RADIOMETER)
+            0015 01 MISSING VALUE
+002049 0004 0001 01 PROCESSING TECHNIQUE NOT DEFINED
+            0002 01 SIMULTANIOUS PHISICAL RETRIEVAL
+            0003 01 CLEAR SOUNDING 
+            0004 01 CLOUDY COUNDING
+002050 0019 0001 01 CHANNEL 1 14.71 MICROMETERS
+            0002 01 CHANNEL 2 14.37 MICROMETERS
+            0003 01 CHANNEL 3 14.06 MICROMETERS
+            0004 01 CHANNEL 4 13.64 MICROMETERS
+            0005 01 CHANNEL 5 13.37 MICROMETERS
+            0006 01 CHANNEL 6 12.66 MICROMETERS
+            0007 01 CHANNEL 7 12.02 MICROMETERS
+            0008 01 CHANNEL 8 11.03 MICROMETERS
+            0009 01 CHANNEL 9  9.71 MICROMETERS
+            0010 01 CHANNEL 10 7.43 MICROMETERS
+            0011 01 CHANNEL 11 7.02 MICROMETERS
+            0012 01 CHANNEL 12 6.51 MICROMETERS
+            0013 01 CHANNEL 13 4.57 MICROMETERS
+            0014 01 CHANNEL 14 4.52 MICROMETERS
+            0015 01 CHANNEL 15 4.45 MICROMETERS
+            0016 01 CHANNEL 16 4.13 MICROMETERS
+            0017 01 CHANNEL 17 3.98 MICROMETERS
+            0018 01 CHANNEL 18 3.74 MICROMETERS
+            0019 01 CHANNEL 19 0.969 MICROMETERS
+002051 0004 0001 01 MAXIMUM/MINIMUM THERMOMETERS
+            0002 01 AUTOMATED INSTRUMENT
+            0003 01 THERMOGRAPH
+            0015 01 MISSING VALUE
+002052 0005 0001 01 CHANNEL 1 0.55-.75 MICROMETERS
+            0002 01 CHANNEL 2 3.9 MICROMETERS
+            0003 01 CHANNEL 3 6.7 MICROMETERS
+            0004 01 CHANNEL 4 10.7 MICROMETERS
+            0005 01 CHANNEL 5 12.0 MICROMETERS
+002053 0005 0000 01 OBSERVED BRIGHTNESS TEMPERATURES
+            0001 01 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+            0002 01 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+            0003 01 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+            0015 01 MISSING VALUE
+002054 0006 0000 01 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERATURES
+            0001 01 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATURES
+            0002 01 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+            0003 01 PARAMETER DERIVED USING  NMC ANALYSIS INFORMATION
+            0004 01 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+            0015 01 MISSING VALUE
+002055 0010 0000 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+            0001 01 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+            0002 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+            0003 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+            0004 01 STATISTICS GENERATED COMPARING OBSERVED VERSUS FORST GUESS
+            0005 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+            0006 01 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+            0007 01 STATISTICS GENERATED FOR RADIOSONDE
+            0008 01 STATISTICS GENERATED FOR FIRST GUESS
+002056 0006 0000 01 SUMS OF DIFFERENCE
+            0001 01 SUMS OF SQUARED DIFFERENCES
+            0002 01 SAMPLE SIZE
+            0003 01 MINIMUM DIFFERENCE
+            0004 01 MAXIMUM DIFFERENCE
+            0015 01 MISSING VALUE
+002057 0007 0000 01 NESTED GRID MODEL (NMG)
+            0001 01 AVIATION MODEL(AVN)
+            0002 01 MEDIUM RANGE FORECAST (MRF) MODEL
+            0003 01 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+            0004 01 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+            0005 01 CLIMATOLOGY
+002058 0005 0000 01 12 HOUR AND 18 HOUR
+            0001 01 18 HOUR AND 24 HOUR
+            0002 01  6 HOUR AND 12 HOUR
+            0003 01 GREATER THAN 24 HOUR
+            0015 01 MISSING VALUE
+002059 0005 0000 01 NCEP NESTED GRID MODEL ANALYSIS
+            0001 01 NCEP AVIATION MODEL ANALYSIS
+            0002 01 NCEP MEDIUM RANGE FORECAST MODEL ANALYSIS
+            0003 01 NCEP GLOBAL DATA ASSIMILATION SYSTEM FORECAST MODEL ANALYSIS
+            0015 01 MISSING VALUE
+002060 0007 0000 01 CURRENT SURFACE HOURLY REPORTS
+            0001 01 CURRENT SHIP REPORTS
+            0002 01 CURRENT BUOY REPORTS
+            0003 01 ONE HOUR OLD SURFACE HOURLY REPORTS
+            0004 01 ONE HOUR SHIP OLD REPORTS
+            0005 01 ONE HOUR BUOY OLD REPORTS
+            0015 01 MISSING VALUE
+002061 0003 0000 01 INERTIAL NAVIGATOR SYSTEM
+            0001 01 OMEGA
+            0007 01 MISSING VALUE
+002062 0007 0000 01 ASDAR
+            0001 01 ASDAR(ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+            0002 01 ASDAR(ACARS ALSO AVAILABLE AND OPERATIVE)
+            0003 01 ACARS
+            0004 01 ACARS(ASDAR ALSO AVALILABLE BUT NOT OPERATIVE)
+            0005 01 ACARS(ASDAR ALSO AVAILABLE AND OPERATIVE)
+            0015 01 MISSING VALUE
+002064 0004 0000 01 GOOD
+            0001 01 BAD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+002066 0004 0000 01 TRS 2000
+            0001 01 IMS 1500C
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002070 0013 0000 01 ACTUAL LOCATION IN SECONDS
+            0001 01 ACTUAL LOCATION IN MINUTES
+            0002 01 ACTUAL LOCATION IN DEGREES
+            0003 01 ACTUAL LOCATION IN DECIDEGREES
+            0004 01 ACTUAL LOCATION OM CENTIDEGREES
+            0005 01 REFERENCED TO CHECKPOINT IN SECONDS
+            0006 01 REFERENCED TO CHECKPOINT IN MINUTES
+            0007 01 REFERENCED TO CHECKPOINT IN DEGREES
+            0008 01 REFERENCED TO CHECKPOINT IN DECIDEGREES
+            0009 01 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+            0010 01 ACTUAL LOCATION IN TENTHS OF A MINUTE
+            0011 01 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+            0015 01 MISSING VALUE
+002080 0005 0000 01 KAYSAM
+            0001 01 TOTEX
+            0002 01 KKS
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+002081 0009 0000 01 GP26
+            0001 01 GP28
+            0002 01 GP30
+            0003 01 HM26
+            0004 01 HM28
+            0005 01 HM30
+            0006 01 SV16
+            0030 01 OTHER
+            0031 01 MISSING VALUE 
+002083 0006 0000 01 HIGH BAY
+            0001 01 LOW BAY
+            0002 01 BALLOON INFLATION LAUNCH SYSTEM (BILS)
+            0003 01 ROOF-TOP BILS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002084 0005 0000 01 HYDROGEN
+            0001 01 HELIUM
+            0002 01 NATURAL GAS
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002095 0005 0000 01 CAPACITANCE ANEROID
+            0001 01 DERIVED FROM GPS
+            0002 01 RESISTIVE STRAIN GAUGE
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002096 0005 0000 01 ROD THERMISTOR
+            0001 01 BEAD THERMISTOR
+            0002 01 CAPACITANCE BEAD
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002097 0008 0000 01 VIZ MARK II CARBON HYGRISTOR
+            0001 01 VIZ B2 HYGRISTOR
+            0002 01 VAISALA A-HUMICAP
+            0003 01 VAISALA H-HUMICAP
+            0004 01 CAPACITANCE SENSOR
+            0005 01 VAISALA RS90
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002098 0005 0000 01 HH POLARISATION
+            0001 01 VV POLARISATION
+            0002 01 HV POLARISATION REAL VALUED COMPONENT
+            0003 01 HV POLARISATION IMAGINARY VALUED COMPONENT
+            0007 01 MISSING VALUE
+002101 0010 0000 01 CENTRE FRONT-FED PARABOLOID
+            0001 01 OFFSET FRONT-FED PARABOLOID
+            0002 01 CENTRE CASSEGRAIN PARABOLOID
+            0003 01 OFFSET CASSEGRAIN PARABOLOID
+            0004 01 PLANAR ARRAY
+            0005 01 COAXIAL-COLLINEAR ARRAY
+            0006 01 YAGI ELEMENTS ARRAY
+            0007 01 MICROSTRIP
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002103 0002 0001 01 RADAR ANTENNA IS PROTECTED BY A RADOME
+            0002 01 MISSING VALUE
+002104 0007 0000 01 HORIZONTAL POLARISATION
+            0001 01 VERTICAL POLARISATION
+            0002 01 RIGHT CIRCULAR POLARISATION
+            0003 01 LEFT CIRCULAR POLARSZATION
+            0004 01 HORIZONTAL AND VERTICAL POLARISATION
+            0005 01 RIGHT AND LEFT CIRCULAR POLARISATION
+            0015 01 MISSING VALUE
+002115 0007 0000 01 PDB
+            0001 01 RSOIS
+            0002 01 ASOS
+            0003 01 PSYCHROMETER
+            0004 01 F420
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+002119 0008 0000 01 INTERMEDIATE FREQUENCY CALIBRATION MODE (IFCAL)
+            0001 01 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+            0002 01 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+            0003 01 PRESET TRACKING (PSET TRK)
+            0004 01 PRESET LOOP OUT
+            0005 01 ACQUISITION
+            0006 01 TRACKING
+            0007 01 MISSING VALUE
+002131 0001 0001 01 STC OPERATIONAL
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROPHOTOMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN)
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED FOR FUTURE USE
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002216 0017 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG(1)
+            0015 01 SLICES PER COMPOSITE FLAG(2)
+            0016 01 SLICES PER COMPOSITE FLAG(3)
+            0017 01 MISSING VALUE
+002131 0002 0001 01 STC OPERATIONAL
+            0003 01 MISSING VALUE
+002143 0021 0000 01 RESERVED
+            0001 01 BREWER SPECTROMETER
+            0002 01 CAVER TEICHERT
+            0003 01 DOBSON
+            0004 01 DOBSON (JAPAN) 
+            0005 01 EHMET
+            0006 01 FECKER TELESCOPE
+            0007 01 HOELPER
+            0008 01 JODMETER
+            0009 01 FILTER OZONOMETER M-83
+            0010 01 MAST
+            0011 01 OXFORD
+            0012 01 PAETZOLD
+            0013 01 REGENER
+            0014 01 RESERVED
+            0015 01 VASSY FILTER OZONOMETER
+            0016 01 CARBON IODIDE
+            0017 01 SURFACE OZONE BUBLLER
+            0018 01 FILTER OZONOMETER M-124
+            0019 01 ECC SONDE
+            0127 01 MISSING VALUE
+002144 0008 0000 01 DIRECT SUN, ATTENUATOR #0
+            0001 01 DIRECT SUN, ATTENUATOR #1
+            0002 01 DIRECT SUN, ATTENUATOR #2
+            0003 01 FOCUSSED MOON
+            0004 01 FOCUSSED SUN
+            0005 01 FOCUSSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+            0006 01 ZENITH SKY
+            0015 01 MISSING VALUE
+002145 0009 0000 01 WAVELENGTH AD ORDINARY SETTING
+            0001 01 WAVELENGTH BD ORDINARY SETTING
+            0002 01 WAVELENGTH CD ORDINARY SETTING
+            0003 01 WAVELENGTH CC' ORDINARY SETTING
+            0004 01 WAVELENGTH AD FOCUSSING IMAGE
+            0005 01 WAVELENGTH BD FOCUSSING IMAGE
+            0006 01 WAVELENGTH CD FOCUSSING IMAGE
+            0007 01 WAVELENGTH CC' FOCUSSING IMAGE
+            0015 01 MISSING VALUE
+002146 0011 0000 01 ON DIRECT SUN
+            0001 01 ON DIRECT MOON
+            0002 01 ON BLUE ZENITH SKY
+            0003 01 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+            0004 01 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MEDIUM OPACITY)
+            0005 01 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LARGE OPACITY)
+            0006 01 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITOUT PRECIPITATION)
+            0007 01 ON ZENITH CLOUD (FOG)
+            0008 01 ON ZENITH HAZE
+            0009 01 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+            0015 01 MISSING VALUE
+002148 0006 0000 01 RESERVED
+            0001 01 ARGOS
+            0002 01 GPS
+            0003 01 GOES DCP
+            0004 01 METEOSAT DCP
+            0031 01 MISSING VALUE
+002149 0022 0000 01 UNSPECIFIED DRIFTING BUOY
+            0001 01 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+            0002 01 STANDARD FGGE TYPE DRIFTING BUOY
+            0003 01 WIND MEASURING FGGE TYPE DRIFTING BUOY
+            0004 01 ICE FLOAT
+            0008 01 UNSPECIFIED SUB-SURFACE FLOAT
+            0009 01 SOFAR
+            0010 01 ALACE
+            0011 01 MARVOR
+            0012 01 RAFOS
+            0016 01 UNSPECIFIED MOORED BUOY
+            0017 01 NOMAD
+            0018 01 3-METRE DISCUS
+            0019 01 10-12-METRE DISCUS
+            0020 01 ODAS 30 SERIES
+            0021 01 ATLAS (E.G. TAO AREA)
+            0022 01 TRITON BUOY
+            0023 01 RESERVED
+            0024 01 OMNIDIRECTIONAL WAVERIDER
+            0025 01 DIRECTIONAL WAVERIDER
+            0026 01 SUB-SURFACE ARGO FLOAT
+            0063 01 MISSING VALUE
+002150 0055 0000 01 RESERVED
+            0001 01 HIRS 1 
+            0002 01 HIRS 2
+            0003 01 HIRS 3
+            0004 01 HIRS 4
+            0005 01 HIRS 5
+            0006 01 HIRS 6
+            0007 01 HIRS 7
+            0008 01 HIRS 8
+            0009 01 HIRS 9
+            0010 01 HIRS 10
+            0011 01 HIRS 11
+            0012 01 HIRS 12
+            0013 01 HIRS 13
+            0014 01 HIRS 14
+            0015 01 HIRS 15
+            0016 01 HIRS 16
+            0017 01 HIRS 17
+            0018 01 HIRS 18
+            0019 01 HIRS 19
+            0020 01 HIRS 20
+            0021 01 MSU 1 
+            0022 01 MSU 2
+            0023 01 MSU 3
+            0024 01 MSU 4
+            0025 01 SSU 1
+            0026 01 SSU 2
+            0027 01 SSU 3
+            0028 01 AMSU-A 1
+            0029 01 AMSU-A 2
+            0030 01 AMSU-A 3
+            0031 01 AMSU-A 4
+            0032 01 AMSU-A 5
+            0033 01 AMSU-A 6
+            0034 01 AMSU-A 7
+            0035 01 AMSU-A 8
+            0036 01 AMSU-A 9
+            0037 01 AMSU-A 10
+            0038 01 AMSU-A 11
+            0039 01 AMSU-A 12
+            0040 01 AMSU-A 13
+            0041 01 AMSU-A 14
+            0042 01 AMSU-A 15
+            0043 01 AMSU-B 1
+            0044 01 AMSU-B 2
+            0045 01 AMSU-B 3
+            0046 01 AMSU-B 4
+            0047 01 AMSU-B 5
+            0048 01 AVHRR 1
+            0049 01 AVHRR 2
+            0050 01 AVHRR 3A
+            0051 01 AVHRR 3B
+            0052 01 AVHRR 4
+            0053 01 AVHRR 5
+            0063 01 MISSING VALUE
+002151 0009 0000 01 HIRS
+            0001 01 MSU
+            0002 01 SSU
+            0003 01 AMSU-A1-1
+            0004 01 AMSU-A1-2
+            0005 01 AMSU-A2
+            0006 01 AMSU-B
+            0007 01 AVHRR
+            2047 01 MISSING VALUE
+002152 0011 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 MICROWAVE SOUNDING UNIT (MSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE
+            0005 01 AMI WAVE MODE
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+002158 0008 0001 01 MISMATCH IN RED VEC HPA
+            0002 01 MISMATCH IN RED VEC RFSS
+            0003 01 PTR CALIBRATION BAND 320 MHZ (KU)
+            0004 01 PTR CALIBRATION BAND 80 MHZ (KU)
+            0005 01 PTR CALIBRATION BAND 20 MHZ (KU)
+            0006 01 PTR CALIBRATION BAND 160 MHZ (S)
+            0007 01 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+            0008 01 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
+002159 0005 0001 01 TEMPERATURE INCONSISTENCY
+            0002 01 DATA IS MISSING
+            0003 01 REDUNDANCY CHANNEL
+            0004 01 POWER BUS PROTECTION
+            0005 01 OVERVOLTAGE/OVERLOAD PROTECTION
+002163 0015 0000 01 AUTO EDITOR
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF 
+                     MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002164 0004 0000 01 LP - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0007 01 MISSING VALUE 
+002166 0009 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0005 01 APODIZED
+            0006 01 UNAPODIZED
+            0007 01 RECONSTRUCTED
+            0008 01 CLOUD CLEARED
+002167 0004 0000 01 METHOD NOT DEFINE
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE 
+002169 0004 0000 01 CUP ROTOR
+            0001 01 PROPELLER ROTOR
+            0002 01 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+            0015 01 MISSING VALUE
+002172 0003 0001 01 RETRIEVAL FROM A NADIR SOUNDING
+            0002 01 RETRIEVAL FROM A LIMB SOUNDING
+            0255 01 MISSING VALUE 
+002175 0009 0000 01 MANUAL MEASUREMENT
+            0001 01 TIPPING BUCKET METHOD
+            0002 01 WEIGHING METHOD
+            0003 01 OPTICAL METHOD
+            0004 01 PRESSURE METHOD
+            0005 01 FLOAT METHOD
+            0006 01 DROP COUNTER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002176 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VIDEO CAMERA METHOD
+            0002 01 INFRA-RED METHOD
+            0003 01 LASER METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002177 0005 0000 01 MANUAL OBSERVATION
+            0001 01 ULTRASONIC METHOD
+            0002 01 VIDEO CAMERA METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002178 0005 0000 01 MANUAL OBSERVATION
+            0001 01 OPTICAL METHOD
+            0002 01 CAPACITIVE METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002179 0006 0000 01 MANUAL OBSERVATION
+            0001 01 VAISALA ALGORITHM
+            0002 01 ASOS (FAA) ALGORITHM
+            0003 01 AWOS (CANADA) ALGORITHM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002180 0008 0000 01 MANUAL OBSERVATION
+            0001 02 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION
+                    OCCURRENCE SENSING SYSTEM 
+            0002 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF VISIBLE LIGHT
+            0003 01 FORWARD AND/OR BACK-SCATTER SYSTEM OF INFRARED LIGHT
+            0004 01 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+            0005 01 DOPPLER RADAR SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002181 0005 0001 01 RAIN DETECTOR
+            0002 01 FREEZING RAIN SENSOR
+            0003 01 ICE DETECTION SENSOR
+            0004 01 HAIL AND ICE PELLET SENSOR
+            0020 01 OTHER
+002182 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 TRANSMISSOMETER SYSTEM (BASE > 25)
+            0002 01 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+            0003 01 FORWARD SCATTER SYSTEM
+            0004 01 BACK SCATTER SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002183 0009 0000 01 MANUAL OBSERVATION
+            0001 01 CEILOMETER SYSTEM
+            0002 01 INFRARED CAMERA SYSTEM
+            0003 01 MICROWAVE VISUAL CAMERA SYSTEM
+            0004 01 SKY IMAGER SYSTEM
+            0005 01 VIDEO TIME LAPSED CAMERA SYSTEM
+            0006 01 MICRO PULSE LIDAR (MPL) SYSTEM
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002184 0008 0000 01 MANUAL OBSERVATION
+            0001 01 LIGHTNING IMAGING SENSOR
+            0002 01 ELECTRICAL STORM IDENTIFICATION SENSOR
+            0003 01 MAGNETIC FINDER SENSOR
+            0004 01 LIGHTNING STRIKE SENSOR
+            0005 01 FLASH COUNTER
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002185 0007 0000 01 MANUAL MEASUREMENT
+            0001 01 BALANCED FLOATING METHOD
+            0002 01 PRESSURE METHOD
+            0003 01 ULTRASONIC METHOD
+            0004 01 HYDRAULIC METHOD
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+002186 0023 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+002187 0011 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+002188 0010 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+002189 0004 0001 01 MANUAL OBSERVATION
+            0002 01 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+            0003 01 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+            0004 02 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN
+                    CLOUD TO GROUND AND CLOUD TO CLOUD
+002194 0002 0000 01 FGGE
+            0015 01 MISSING VALUE
+002196 0017 0000 01 NIMBUS
+            0001 01 VTPR
+            0002 01 TIROS 1   ( TIROS NOAA 6 TO NOAA 13)
+            0003 01 TIROS 2   ( NOAA-14 ONWARD)
+            0031 01 DMSP
+            0061 01 EUMETSAT POLAR SYSTEM (EPS) 
+            0091 01 ERS
+            0121 01 ADEOS
+            0241 01 GOES
+            0271 01 GMS
+            0301 01 INSAT
+            0331 01 METEOSAT OPERATIONAL PROGRAMME(MOP)
+            0332 01 METEOSAT TRANSITIONAL PROGRAMME(MTP)
+            0333 01 METEOSAT SECOND GENERATION PROGRAMME(MSG)
+            0351 01 GOMS
+            0381 01 FY-2
+            0512 01 MISSING VALUE
+002199 0004 0000 01 RESERVED
+            0001 01 TABLE WITH FULL RANGE OF HUMMIDITY VALUES IN LAYER
+            0002 01 REGRESSION TECHNIQUE ON 2 HUMMIDITY VALUES IN LAYER
+            0015 01 MISSING VALUE
+002207 0003 0000 01 AFR SCAN
+            0001 01 FORWARD AFT SCAN
+            0007 01 MISSING VALUE
+002231 0015 0000 01 RESERVED
+            0001 01 IRW HEIGHT ASSIGNMENT
+            0002 01 WV HEIGHT ASSIGNMENT
+            0003 01 H2O INTERCEPT HEIGHT ASSIGNMENT
+            0004 01 CO2 SLICING HEIGHT ASSIGNMENT
+            0005 01 LOW PIXEL MAX GRADIENT
+            0006 01 HIGHER PIXEL MAX GRADIENT
+            0007 01 PRIMARY HEIGHT ASSIGNMENT
+            0008 01 LAYER THICKNESS ASSIGNMENT
+            0009 01 CUMULATIVE CONTRIBUTION FUNCTION -10 PERCENT HEIGHT
+            0010 01 CUMULATIVE CONTRIBUTION FUNCTION -50 PERCENT HEIGHT
+            0011 01 CUMULATIVE CONTRIBUTION FUNCTION -90 PERCENT HEIGHT
+            0012 02 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF
+                     MAXIMUM GRADIENT
+            0014 01 COMPOSITE HEIGHT ASSIGNMENT
+            0015 01 MISSING VALUE
+002232 0004 0000 01 P - NORMS LEAST SQUARE MINIMUM
+            0001 01 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+            0002 01 CC - CROSS CORRELATION
+            0003 01 MISSING VALUE
+002251 0004 0000 01 METHOD NOT DEFINED
+            0001 01 1B RAW RADIANCE
+            0002 01 PROCESSED RADIANCE
+            0015 01 MISSING VALUE
+002252 0012 0001 01 HIGH-RESOLUTION INFRARED SOUNDER(HIRS)
+            0002 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0003 01 STRATOSPHERIC SOUNDING UNIT (SSU)
+            0004 01 AMI WIND MODE 
+            0005 01 AMI WAVE MODE 
+            0006 01 AMI IMAGE MODE
+            0007 01 RADAR ALTIMETER
+            0008 01 ATSR
+            0009 01 GEOSTATIONARY IMAGER
+            0010 01 GEOSTATIONARY SOUNDER 
+            0011 01 GEOSTATIONARY EARTH RADIATION (GERB)
+            0031 01 ALL BITS SET - MISSING VALUE
+002254 0006 0000 01 TYPE NOT DEFINED
+            0001 01 AUTOMATED STATISTICAL REGRESSION
+            0002 01 CLEAR PATH
+            0003 01 PARTLY CLOUDY PATH
+            0004 01 CLOUDY PATH
+            0015 01 MISSING VALUE
+004059 0005 0001 01 00 UTC
+            0002 01 06 UTC
+            0003 01 12 UTC
+            0004 01 18 UTC
+            0005 01 OTHER HOURS
+008001 0007 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+            0006 01 SIGNIFICANT LEVEL, WIND
+            0007 01 MISSING VALUE
+008002 0013 0000 02 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF
+                    FM 12-IX EXT. SYNOP AND FM 13-IX EXT. SHIP APPLY
+            0001 01 FIRST NON - CB SIGNIFICANT LAYER
+            0002 01 SECOND NON - CB SIGNIFICANT LAYER
+            0003 01 THIRD NON - CB SIGNIFICANT LAYER
+            0004 01 CUMULONIMBUS LAYER
+            0005 01 CEILING
+            0006 01 CLOUD NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+            0007 01 LOW CLOUD
+            0008 01 MIDDLE CLOUD
+            0009 01 HIGH CLOUD
+            0010 02 CLOUD LAYER WITH BASE BELOW THE STATION LEVEL AND TOP 
+                    ABOVE THE STATION LEVEL
+            0011 01 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+            0063 01 MISSING VALUE
+008003 0009 0000 01 SURFACE
+            0001 01 BASE OF SATELLITE SOUNDING
+            0002 01 CLOUD TOP
+            0003 01 TROPOPAUSE
+            0004 01 PRECIPITABLE WATER
+            0005 01 SOUNDING RADIANCES
+            0006 01 MEAN TEMPERATURES
+            0007 01 OZON
+            0063 01 MISSING VALUE
+008004 0006 0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING(DES)
+            0007 01 MISSING VALUE
+008005 0005 0000 01 RESERVED
+            0001 01 STORM CENTRE
+            0002 01 OUTER LIMIT OR EDGE OF STORM
+            0003 01 LOCATION OF MAXIMUM WIND
+            0004 01 LOCATION OF STORM IN THE PERTURBED ANALYSIS
+            0005 01 LOCATION OF STORM IN THE ANALYSIS
+            0015 01 MISSING VALUE
+008006 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 PROMINENT MAXIMUM LEVEL
+            0005 01 PROMINENT MINIMUM LEVEL
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008007 0005 0000 01 POINT
+            0001 01 LINE
+            0002 01 AREA
+            0003 01 VOLUME
+            0015 01 MISSING VALUE
+008008 0008 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 LEVEL OF BETA RADIATION MAXIMUM
+            0005 01 LEVEL OF GAMMA RADIATION MAXIMUM
+            0006 01 MINIMUM PRESSURE LEVEL
+            0007 01 RESERVED
+            0008 01 LEVEL OF UNDETERMINED SIGNIFICANCE
+008009 0016 0000 01 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+            0001 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+            0002 01 UNSTEADY (UNS)
+            0003 01 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+            0004 01 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+            0005 01 ASCENDING (ASC)
+            0006 01 DESCENDING (DES)
+            0007 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0008 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0009 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0010 02 ASCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0011 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS
+            0012 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    TIME INCREMENTS, UNSTEADY
+            0013 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS
+            0014 02 DESCENDING, OBSERVATION INTERVALS SELECTED BY
+                    PRESSURE INCREMENTS, UNSTEADY
+            0015 01 MISSING VALUE
+008010 0013 0000 01 RESERVED
+            0001 01 BARE SOIL
+            0002 01 BARE ROCK
+            0003 01 LAND GRASS COVER
+            0004 01 WATER (LAKE, SEA)
+            0005 01 FLOOD WATER UNDERNEATH
+            0006 01 SNOW
+            0007 01 ICE
+            0008 01 RUNWAY OR ROAD
+            0009 01 SHIP OR PLATFORM DECK IN STEEL
+            0010 01 SHIP OR PLATFORM DECK IN WOOD
+            0011 01 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+            0031 01 MISSING VALUE
+008011 0026 0000 01 QUASI-STATIONARY FRONT AT THE SURFACE
+            0001 01 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+            0002 01 WARM FRONT AT THE SURFACE
+            0003 01 WARM FRONT ABOVE THE SURFACE
+            0004 01 COLD FRONT AT THE SURFACE
+            0005 01 COLD FRONT ABOVE THE SURFACE
+            0006 01 OCCLUSION
+            0007 01 INSTABILITY LINE
+            0008 01 INTERTROPICAL FRONT
+            0009 01 CONVERGENCE LINE
+            0010 01 JET STREAM
+            0011 01 CLOUD CLEAR
+            0012 01 CLOUD
+            0013 01 TURBULENCE
+            0014 01 STORM
+            0015 01 AIRFRAME ICING
+            0016 01 PHENOMENON
+            0017 01 VOLCANO
+            0018 01 ATMOSPHERICS
+            0020 01 SPECIAL CLOUDS
+            0021 01 THUNDERSTORM (VAL)
+            0022 01 TROPICAL CYCLONE (VAL)
+            0023 01 MOUNTAIN WAVE (VAL)
+            0024 01 DUSTSTORM (VAL)
+            0025 01 SANDSTORM (VAL)
+            0063 01 MISSING VALUE
+008012 0004 0000 01 LAND
+            0001 01 SEA
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008013 0004 0000 01 NIGHT
+            0001 01 DAY
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008014 0010 0000 01 10-MINUTE MEAN VALUE - NORMAL VALUE
+            0001 01 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0002 01 10-MINUTE MEAN VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0003 01 ONE MINUTE MINIMUM VALUE - NORMAL VALUE
+            0004 01 ONE MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0005 01 ONE MINUTE MINIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0006 01 ONE MINUTE MAXIMUM VALUE - NORMAL VALUE
+            0007 01 ONE MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENT OF RVR (P)
+            0008 01 ONE MINUTE MAXIMUM VALUE - BELOW LOWER LIMIT FOR ASSESSMENT OF RVR (M)
+            0015 01 MISSING VALUE
+008016 0005 0000 01 NOSIG
+            0001 01 BECMG
+            0002 01 TEMPO
+            0003 01 FM
+            0007 01 MISSING VALUE
+008017 0004 0000 01 FM
+            0001 01 TL
+            0002 01 AT
+            0003 01 MISSING VALUE
+008018 0005 0001 01 LAND IS PRESENT
+            0002 01 SURFACE ICE MAP INDICATES ICE IS PRESENT
+            0011 01 ICE MAP DATA NOT AVAILABLE
+            0012 01 ATTENUATION MAP DATA NOT AVAILABLE
+            0017 01 MISSING VALUE
+008021 0028 0000 01 RESERVED
+            0001 01 TIME SERIES
+            0002 01 TIME AVERAGED
+            0003 01 ACCUMULATED
+            0004 01 FORECAST
+            0005 01 FORECAST TIME SERIES
+            0006 01 FORECAST TIME AVERAGED
+            0007 01 FORECAST ACCUMULATED
+            0008 01 ENSEMBLE MEAN
+            0009 01 ENSEMBLE MEAN TIME SERIES
+            0010 01 ENSEMBLE MEAN TIME AVERAGED
+            0011 01 ENSEMBLE MEAN ACCUMULATED
+            0012 01 ENSEMBLE MEAN FORECAST
+            0013 01 ENSEMBLE MEAN FORECAST TIME SERIES
+            0014 01 ENSEMBLE MEAN FORECAST AVERAGED
+            0015 01 ENSEMBLE MEAN FORECAST ACCUMULATED
+            0016 01 ANALYSIS
+            0017 01 START OF PHENOMENON
+            0018 01 RADIOSONDE LAUNCH TIME
+            0019 01 START OF ORBIT
+            0020 01 END OF ORBIT
+            0021 01 TIME OF ASCENDING NODE
+            0022 01 TIME OF OCCURENCE OF WIND SHIFT
+            0027 01 FIRST GUESS    --NOT WMO ENTRY
+            0028 01 START OF SCAN  --NOT WMO ENTRY
+            0029 01 END OF SCAN    --NOT WMO ENTRY
+            0031 01 MISSING VALUE
+008023 0017 0002 01 MAXIMUM VALUE
+            0003 01 MINIMUM VALUE
+            0004 01 MEAN VALUE
+            0005 01 MEDIAN VALUE
+            0006 01 MODAL VALUE
+            0007 01 MEAN ABSOLUTE ERROR
+            0009 01 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+            0010 01 STANDARD DEVIATION
+            0011 01 HARMONIC MEAN
+            0012 01 ROOT MEAN SQUARE VECTOR ERROR
+            0013 01 ROOT-MEAN-SQUARE
+            0032 01 VECTOR MEAN
+            0033 01 PRESCRIBED OBSERVATION ERROR
+            0034 01 PERSISTENCE OBSERVATION ERROR
+            0035 01 FINAL OBSERVATION ERROR
+            0036 01 REPRESENTATIVNESS OBSERVATION ERROR
+            0063 01 MISSING
+008024 0012 0002 01 OBSERVED MINUS MAXIMUM
+            0003 01 OBSERVED MINUS MINIMUM
+            0004 01 OBSERVED MINUS MEAN
+            0005 01 OBSERVED MINUS MEDIAN
+            0006 01 OBSERVED MINUS MODE
+            0011 01 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+            0012 01 OBSERVED MINUS ANALYZED VALUE
+            0013 01 OBSERVED MINUS INITIALISED ANALYZED VALUE
+            0014 01 OBSERVED MINUS FORECAST VALUE
+            0021 01 OBSERVED MINUS INTERPOLATED VALUE
+            0022 01 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+            0032 01 OBSERVED MINUS FIRST GUESS
+            0033 01 OBSERVED MINUS ANALYSIS
+            0034 01 OBSERVED MINUS INITIALIZED ANALYSIS
+            0063 01 MISSING
+008025 0005 0000 02 UNIVERSAL TIME COORDINATED (UTC) MINUS 
+                    LOCAL STANDARD TIME (LST)
+            0001 01 LOCAL STANDARD TIME
+            0002 01 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+            0005 01 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+            0015 01 MISSING
+008026 0005 0000 01 AVERAGING KERNEL MATRIX
+            0001 01 CORRELATION MATRIX
+            0002 01 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LLT)
+            0003 01 INVERSE LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L**-1) 
+            0063 01 MISSING VALUE
+008027 0007 0000 01 ASSUME NO PARTICULAR MATRIX GEOMETRY
+            0001 01 DIAGONAL MATRIX
+            0002 01 TRIDIAGONAL MATRIX
+            0003 01 MULTI-DIAGONAL MATRIX (GENERAL CASE: DIAGONAL AND ABOVE)
+            0004 01 LOWER TRIANGULAR MATRIX
+            0005 01 SYMETRICAL MATRIX
+            0063 01 MISSING VALUE
+008029 0005 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 ENCLOSED SEA OR LAKE
+            0002 01 CONTINENTAL ICE
+            0003 01 LAND
+            0255 01 MISSING
+008033 0004 0000 01 RESERVED
+            0001 01 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+            0002 01 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD 
+                    DEVIATION OF TEMPERATURE
+            0003 02 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF
+                     THE CLOUD CONTAMINATION
+            0004 01 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBUTION
+            0127 01 MISSING
+008035 0008 0000 01 GLOBAL
+            0001 01 REGIONAL
+            0002 01 NATIONAL
+            0003 01 SPECIAL
+            0004 01 BILATERAL
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING
+008036 0008 0000 01 WMO SECRETARIAT
+            0001 01 WMO
+            0002 01 RSMC
+            0003 01 NMC
+            0004 01 RTH
+            0005 01 OBSERVING SITE
+            0006 01 OTHER
+            0007 01 MISSING 
+008039 0008 0000 01 ISSUE TIME OF FORECAST
+            0001 01 TIME OF COMMNENCEMENT OF PERIOD OF THE FORECAST
+            0002 01 TIME OF ENDING OF PERIOD OF THE FORECAST
+            0003 01 FORECSAT TIME OF MAXIMUM TEMPERATURE
+            0004 01 FORECSAT TIME OF MINIMUM TEMPERATURE
+            0005 01 TIME OF BEGINNING OF THE FORECAST
+            0006 01 TIME OF ENDING OF THE FORECAST
+            0063 01 MISSING VALUE
+008040 0043 0000 01 HIGH RESOLUTION DATA SAMPLE
+            0001 01 WITHIN 20 HPA OF SURFACE
+            0002 02 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.)
+                    WHEN NO OTHER REASON APPLIES
+            0003 01 BASE PRESSURE LEVEL FOR STABILITY INDEX
+            0004 01 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0005 01 BEGIN MISSING DATA (ALL ELEMENTS)
+            0006 01 BEGIN MISSING RH DATA
+            0007 01 BEGIN MISSING TEMPERATURE DATA
+            0008 02 HIGHEST LEVEL REACHED BEFORE BALLOON 
+                    DESCENT BECAUSE OF ICING OR TURBULENCE
+            0009 01 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+            0010 01 END MISSING DATA (ALL ELEMENTS)
+            0011 01 END MISSING RH DATA
+            0012 01 END MISSING TEMPERATURE DATA
+            0013 01 ZERO DEGREES C CROSSING(S) FOR RADAT
+            0014 01 STANDARD PRESSURE LEVEL
+            0015 01 OPERATOR ADDED LEVEL
+            0016 01 OPERATOR DELETED LEVEL
+            0017 01 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+            0018 01 SIGNIFICANT RH LEVEL
+            0019 01 RH LEVEL SELECTION TERMINATED
+            0020 01 SURFACE LEVEL
+            0021 01 SIGNIFICANT TEMPERATURE LEVEL
+            0022 01 MANDATORY TEMPERATURE LEVEL
+            0023 01 FLIGHT TERMINATION LEVEL
+            0024 01 TROPOPAUSE(S)
+            0025 01 AIRCRAFT REPORT
+            0026 01 INTERPOLATED (GENERATED) LEVEL
+            0027 01 MANDATORY WIND LEVEL
+            0028 01 SIGNIFICANT WIND LEVEL
+            0029 01 MAXIMUM WIND LEVEL
+            0030 01 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+            0031 01 INCREMENTAL HEIGHT LEVEL (GENERATED)
+            0032 01 WIND TERMINATION LEVEL
+            0033 01 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+            0040 01 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+            0041 01 SIGNIFICANT RH LEVEL ( PER NCDC CRITERIA)
+            0042 01 SIGNIFICANT TEMPERATURE LEVEL (PER NCDC)
+            0043 01 BEGIN MISSING WIND DATA
+            0044 01 END MISSING WIND DATA
+            0060 01 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+            0061 01 LEVEL OF 80-KNOT ISOTACH BELOW JET
+            0062 01 OTHER
+            0063 01 MISSING VALUE
+008041 0009 0000 01 PARENT SITE
+            0001 01 OBSERVATION SITE
+            0002 01 BALLOON MANUFACTURE DATE
+            0003 01 BALLOON LAUNCH POINT
+            0004 01 SURFACE OBSERVATION
+            0005 01 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+            0006 01 FLIGHT LEVEL OBSERVATION
+            0007 01 FLIGHT LEVEL TERMINATION POINT
+            0031 01 MISSING VALUE 
+008042 0014 0001 01 SURFACE
+            0002 01 STANDARD LEVEL
+            0003 01 TROPOPAUSE LEVEL
+            0004 01 MAXIMUM WIND LEVEL
+            0005 01 SIGNIFICANT TEMPERATURE LEVEL
+            0006 01 SIGNIFICANT HUMIDITY LEVEL
+            0007 01 SIGNIFICANT WIND LEVEL
+            0008 01 BEGINNING OF MISSING TEMPERATURE DATA
+            0009 01 END OF MISSING TEMPERATURE DATA
+            0010 01 BEGINNING OF MISSING HUMIDITY DATA
+            0011 01 END OF MISSING HUMIDITY DATA
+            0012 01 BEGINNING OF MISSING WIND DATA
+            0013 01 END OF MISSING WIND DATA
+            0018 01 ALL 18 MISSING
+008043   21 0000 01 OZONE, O3,10028-15-6
+            0001 01 WATER VAPOUR, H2O, 7732-18-5
+            0002 01 METHANE, CH4, 74-82-8
+            0003 01 CARBON DIOXIDE, CO2, 37210-16-5
+            0004 01 CARBON MONOXIDE, CO, 630-08-0
+            0005 01 NITROGEN DIOXIDE, NO2, 10102-44-0
+            0006 01 NITROUS OXIDE, N2O, 10024-97-2
+            0007 01 FORMALDEHYDE, HCHO, 50-00-0
+            0008 01 SULFUR DIOXIDE, SO2, 7446-09-5
+            0009 01 BROMINE OXIDE, BRO, 15656-19-6
+            0010 01 CHLORINE DIOXIDE, OCLO, 10049-04-4
+            0011 01 NITROGEN MONOXIDE, NO, 10102-43-9
+            0012 01 AMMONIA, NH3, 7664-41-7
+            0025 01 PARTICULATE MATTER < 1.0 MICRONS
+            0026 01 PARTICULATE MATTER < 2.5 MICRONS
+            0027 01 PARTICULATE MATTER < 10 MICRONS
+            0028 01 AEROSOLS GENERIC
+            0029 01 SMOKE GENERIC
+            0030 01 CRUSTAL MATERIAL (GENERIC DUST)
+            0031 01 VOLCANIC ASH
+            0255 01 MISSING
+008050 0011 0000 01 RESERVED
+            0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MAXIMUM TEMPERATURE
+            0008 01 MINIMUM TEMPERATURE
+            0009 01 WIND
+            0015 01 MISSING VALUE
+008051 0007 0001 01 PRESSURE
+            0002 01 TEMPERATURE
+            0003 01 EXTREME TEMPERATURE
+            0004 01 VAPOUR PRESSURE
+            0005 01 PRECIPITATION
+            0006 01 SUNSHINE DURATION
+            0007 01 MISSING VALUE
+008052 0026 0000 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 10 M/S
+            0001 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 20 M/S
+            0002 02 MEAN WIND SPEED OVER 10-MINUTES PERIOD OBSERVED OR RECORDED
+                    EQUAL TO OR MORE THAN 30 M/S
+            0003 01 MAXIMUM TEMPERATURE LESS THAN 273.2 K
+            0004 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.2 K
+            0005 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.2 K
+            0006 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.2 K
+            0007 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.2 K
+            0008 01 MINIMUM TEMPERATURE LESS THAN 273.2 K
+            0009 01 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.2 K
+            0010 01 PRECIPITATION EQUAL TO OR MORE THAN   1.0 KG/M**2
+            0011 01 PRECIPITATION EQUAL TO OR MORE THAN   5.0 KG/M**2
+            0012 01 PRECIPITATION EQUAL TO OR MORE THAN  10.0 KG/M**2
+            0013 01 PRECIPITATION EQUAL TO OR MORE THAN  50.0 KG/M**2
+            0014 01 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG/M**2
+            0015 01 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG/M**2
+            0016 01 SNOW DEPTH MORE THAN 0.0 M
+            0017 01 SNOW DEPTH MORE THAN 0.01 M
+            0018 01 SNOW DEPTH MORE THAN 0.10 M
+            0019 01 SNOW DEPTH MORE THAN 0.50 M
+            0020 01 HORIZONTAL VISIBILITY LESS THAN   50 M
+            0021 01 HORIZONTAL VISIBILITY LESS THAN  100 M
+            0022 01 HORIZONTAL VISIBILITY LESS THAN 1000 M
+            0023 01 HAIL
+            0024 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+008053 0004 0000 01 VALUE OCCURED ON ONLY ONE DAY IN THE MONTH
+            0001 01 VALUE OCCURED ON MORE THAN ONE DAY IN THE MONTH
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008054 0003 0000 01 WIND SPEED OR GUST IS AS REPORTED
+            0001 01 WIND SPEED IS GREATER THAN THAT REPRTED (P IN METAR/TAF/SPECI)
+            0007 01 MISSING VALUE
+008060 0008 0000 01 RESERVED
+            0001 01 RANGE
+            0002 01 AZIMUTH
+            0003 01 HORIZONTAL
+            0004 01 VERTICAL
+            0005 01 NORTH/SOUTH
+            0006 01 EAST/WEST
+            0015 01 MISSING VALUE
+008065 0004 0000 01 NO SUN-GLINT
+            0001 01 SUN-GLINT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008066 0004 0000 01 OPAQUE
+            0001 01 SEMI-TRANSPARENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008070 0006 0000 01 RESERVED
+            0001 01 RESERVED
+            0002 02 EARTH LOCATED INSTRUMENT COUNTS, 
+                    CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+            0003 01 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+            0004 02 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED
+                    CALIBRATED RADIANCES (LEVEL 1D)
+            0015 01 MISSING VALUE
+008072 0004 0000 01 MIXED
+            0001 01 CLEAR
+            0002 01 CLOUDY
+            0007 01 MISSING VALUE
+008074 0004 0000 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0001 01 NON-OCEAN LIKE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008075 0004 0000 01 ASCENDING ORBIT
+            0001 01 DESCENDING ORBIT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+008076 0003 0000 01 KU
+            0001 01 C
+            0063 01 MISSING VALUE
+008077 0007 0000 01 LAND
+            0001 01 SEA
+            0002 01 COASTAL
+            0003 01 OPEN OCEAN OR SEMI-ENCLOSED SEA
+            0004 01 ENCLOSED SEA OR LAKE
+            0005 01 CONTINENTAL ICE
+            0127 01 MISSING VALUE
+008079 0009 0000 01 NORMAL ISSUE
+            0001 01 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+            0002 01 AMANDMENT TO A PREVIOUSLY ISSUED PRODUCT *AMD) 
+            0003 01 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+            0004 01 CANCELLATION OD A PREVIOUSLY ISSUED PRODUCT (CNL)
+            0005 01 NO PRODUCT AVAILABLE (NIL)
+            0006 01 SPECIAL REPORT ( SPECI)
+            0007 01 CORRECTED SPECIAL REPORT (SPECI COR)
+            0015 01 MISSING VALUE
+008080 0009 0000 01 TOTAL WATER PRESSURE PROFILE
+            0001 01 TOTAL WATER TEMPERATURE PROFILE
+            0002 01 TOTAL WATER SALINITY PROFILE
+            0003 01 TOTAL WATER CONDUCTIVITY PROFILE
+            0010 01 WATER PRESSURE AT A LEVEL
+            0011 01 WATER TEMPERATURE AT A LEVEL
+            0012 01 SALINITY AT A LEVEL
+            0020 01 POSITION
+            0063 01 MISSING VALUE
+008081 0005 0000 01 SENSOR
+            0001 01 TRANSMITTER
+            0002 01 RECEIVER
+            0003 01 OBSERVING PLATFORM
+            0063 01 MISSING VALUE
+008082 0003 0000 01 SENSOR HEIGHT IS NOT MODIFIED
+            0001 01 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+            0007 01 MISSING VALUE
+008083 0009 0001 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE 
+                     LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+            0002 02 ADJUSTED WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE
+                     WATER SURFACE
+            0003 01 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+            0004 01 ADJUSTED WITH RESPECT TO WIND SPEED
+            0005 01 ADJUSTED WITH RESPECT TO TEMPERATURE
+            0006 01 ADJUSTED WITH RESPECT TO PRESSURE
+            0007 01 ADJUSTED WITH RESPECT TO HUMIDITY
+            0008 01 ADJUSTED WITH RESPECT TO EVAPORATION
+            0009 01 ADJUSTED WITH RESPECT TO WETTING LOSSES
+008085 0004 0000 01 FORE BEAM
+            0001 01 MID BEAM
+            0002 01 AFT BEAM
+            0003 01 RESERVED
+            0004 01 RESERVED
+            0005 01 RESERVED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+008193 0007 0000 01 START TIME OF ORBIT
+            0001 01 END TIME OF ORBIT
+            0002 01 TIME OF ASCENDING NODE
+            0003 01 ASSIMILATION TIME
+            0004 01 START TIME OF ASSIMILATION
+            0005 01 END TIME OF ASSIMLATION
+            0063 01 MISSING
+008195 0032 0001 01 FIRST GUESS
+            0002 01 ANALYSIS
+            0003 01 INITIALISED ANALYSIS
+            0004 01 OI ANALYSIS
+            0005 01 3 D VARIATIONAL ANALYSIS
+            0006 01 4 D VARIATIONAL ANALYSIS
+            0007 01 3 D VARIATIONAL GRADIENTS
+            0008 01 4 D VARIATIONAL GRADIENTS
+            0009 01 FORECAST
+            0010 01 CONTROL FORECAST
+            0011 01 PERTURBED FORECAST
+            0012 01 ERRORS IN FIRST GUESS
+            0013 01 ERRORS IN ANALYSIS
+            0014 01 CLUSTER MEANS
+            0015 01 CLUSTER STANDARD DEVIATIONS
+            0016 01 FORECAST PROBABILITIES
+            0017 01 ENSEMBLE MEANS
+            0018 01 ENSEMBLE STANDARD DEVIATIONS
+            0019 01 FORECAST ACCUMULATIONS
+            0020 01 CLIMATOLOGY
+            0021 01 CLIMATE SIMULATION
+            0030 01 OBSERVATIONS
+            0031 01 QUALITY CONTROL
+            0032 01 DIFFERENCE STATISTICS
+            0040 01 IMAGE DATA
+            0050 01 SENSITIVITY GRADIENTS
+            0051 01 TRAJECTORY FORECAST
+            0052 01 SENSITIVITY FORECAST
+            0060 01 PERTURBED ANALYSIS
+            0061 01 PERTURBATION
+            0062 01 SINGULAR VECTOR
+            0127 01 MISSING VALUE
+010063 0010 0000 02 INCREASING, THEN DECREASING: ATMOSPHERIC PRESURE THE SAME OR
+                     HIGHER THAN 3 HOURS AGO (OR 24 HOURS AGO )
+            0001 01 INCREASING, THEN STEADY; OR INCREASING; THEN MORE SLOWLY
+            0002 01 INCREASING (STEADILY OR UNSTEADILY )
+            0003 01 DECREASING OR STEADY, THEN INCREASING; RAPIDLY
+            0004 02 STEADY; ATMOSPHERIC PRESSURE THE SAME AS 3 HOURS AGO (OR 24
+                    HOURS)
+            0005 02 DECREASING; THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME O
+                    R LOWER THAN 3 HOURS AGO
+            0006 02 DECREASING, THEN STEADY; OR DECREASING, DECREASING MORE SLOW
+                    LY
+            0007 01 DECREASING (STEADILY OR UNSTEADELY )
+            0008 02 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN
+                    DECREASING MORE RAPIDLY
+            0015 01 MISSING
+010064 0004 0000 01 SUBSONIC
+            0001 01 TRANSONIC
+            0002 01 SUPERSONIC
+            0007 01 MISSING VALUE
+011031 0009 0000 01 NIL           IN CLOUD
+            0001 01 SLIGHT        IN CLOUD
+            0002 01 MODERATE      IN CLOUD
+            0003 01 SEVERE        IN CLOUD
+            0004 01 NIL           IN CLEAR AIR
+            0005 01 SLIGHT        IN CLEAR AIR
+            0006 01 MODERATE      IN CLEAR AIR
+            0007 01 SEVERE        IN CLEAR AIR
+            0015 01 MISSING VALUE
+011037 0030 0000 01 AVE <0.1 PEAK <0.1 
+            0001 01 AVE <0.1 0.1 <= PEAK <0.2
+            0002 01 0.1 <= AVE <0.2 0.1 <= PEAK <0.2
+            0003 01 AVE <0.1 0.2 <= PEAK <0.3
+            0004 01 0.1 <= AVE <0.2 0.2 <= PEAK <0.3
+            0005 01 0.2 <= AVE <0.3 0.2 <= PEAK <0.3
+            0006 01 AVE <0.1 0.3 <= PEAK <0.4
+            0007 01 0.1 <= AVE <0.2 0.3 <= PEAK <0.4
+            0008 01 0.2 <= AVE <0.3 0.3 <= PEAK <0.4
+            0009 01 0.3 <= AVE <0.4 0.3 <= PEAK <0.4
+            0010 01 AVE <0.1 0.4 <= PEAK <0.5
+            0011 01 0.1 <= AVE <0.2 0.4 <= PEAK <0.5
+            0012 01 0.2 <= AVE <0.3 0.4 <= PEAK <0.5
+            0013 01 0.3 <= AVE <0.4 0.4 <= PEAK <0.5
+            0014 01 0.4 <= AVE <0.5 0.4 <= PEAK <0.5
+            0015 01 AVE <0.1 0.5 <= PEAK <0.8
+            0016 01 0.1 <= AVE <0.2 0.5 <= PEAK <0.8
+            0017 01 0.2 <= AVE <0.3 0.5 <= PEAK <0.8
+            0018 01 0.3 <= AVE <0.4 0.5 <= PEAK <0.8
+            0019 01 0.4 <= AVE <0.5 0.5 <= PEAK <0.8
+            0020 01 0.5 <= AVE <0.8 0.5 <= PEAK <0.8
+            0021 01 AVE <0.1 0.8 <= PEAK
+            0022 01 0.1 <= AVE <0.2 0.8 <= PEAK
+            0023 01 0.2 <= AVE <0.3 0.8 <= PEAK
+            0024 01 0.3 <= AVE <0.4 0.8 <= PEAK
+            0025 01 0.4 <= AVE <0.5 0.8 <= PEAK
+            0026 01 0.5 <= AVE <0.8 0.8 <= PEAK
+            0027 01 0.8 <= AVE 0.8 <= PEAK
+            0028 01 NIL              NIL
+            0063 01 MISSING VALUE
+011038 0017 0000 01 MIN < 1
+            0001 01 1 <= MIN < 2
+            0002 01 2 <= MIN < 3
+            0003 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0015 01 NO TIMING INFORMATION AVAILABLE
+            0031 01 MISSING VALUE
+011039 0016 0000 01 1 <= MIN < 2
+            0001 01 2 <= MIN < 3
+            0002 01 3 <= MIN < 4
+            0004 01 4 <= MIN < 5
+            0005 01 5 <= MIN < 6
+            0006 01 6 <= MIN < 7
+            0007 01 7 <= MIN < 8
+            0008 01 8 <= MIN < 9
+            0009 01 9 <= MIN < 10
+            0010 01 10 <= MIN < 11
+            0011 01 11 <= MIN < 12
+            0012 01 12 <= MIN < 13
+            0013 01 13 <= MIN < 14
+            0014 01 14 <= MIN < 15
+            0060 01 NO TIMING INFORMATION AVAILABLE
+            0063 01 MISSING VALUE
+013038 0004 0000 01 NOT SUPERADIABATIC
+            0001 01 SUPERADIABATIC
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+013039 0003 0000 01 SEA ICE
+            0001 01 SNOW ON LAND
+            0007 01 MISSING VALUE
+013040 0009 0000 01 LAND
+            0001 01 RESERVED
+            0002 01 NEAR COAST
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 DESERT
+            0015 01 MISSING VALUE
+013041 0010 0001 01 A
+            0002 01 A-B
+            0003 01 B
+            0004 01 B-C
+            0005 01 C
+            0006 01 D
+            0007 01 E
+            0008 01 F
+            0009 01 G
+            0015 01 MISSING VALUE
+013051 0008 0000 01 SMALLER THAN ANY VALUE IN THE 30 YEARS PERIOD
+            0001 01 IN THE FIRST QUINTILE
+            0002 01 IN THE SECOND QUINTILE
+            0003 01 IN THE THIRD QUINTILE
+            0004 01 IN THE FOURTH QUINTILE
+            0005 01 IN THE FIFTH QUINTILE
+            0006 01 GREATER THAN ANY VALUE IN THE 30 YEAR PERIOD
+            0015 01 MISSING VALUE
+013056 0010 0000 01 NO PRECIPITATION
+            0001 01 LIGHT INTERMITTENT
+            0002 01 MODERATE INTERMITTENT
+            0003 01 HEAVY INTERMITTENT
+            0004 01 VERY HEAVY INTERMITTENT
+            0005 01 LIGHT CONTINUOUS
+            0006 01 MODERATE CONTINUOUS
+            0007 01 VERY HEAVY CONTINUOUS
+            0009 01 VARIABLE-ALTERNATIVELY LIGHT AND HEAVY
+            0015 01 MISSING VALUE
+013057 0011 0000 01 NO PRECIPITATION
+            0001 01 WITHIN THE LAST HOUR
+            0002 01 1 TO 2 HOURS AGO
+            0003 01 2 TO 3 HOURS AGO
+            0004 01 3 TO 4 HOURS AGO
+            0005 01 4 TO 5 HOURS AGO
+            0006 01 5 TO 6 HOURS AGO
+            0007 01 6 TO 8 HOURS AGO
+            0008 01 8 TO 10 HOURS AGO
+            0009 01 MORE THAN 10 HOURS AHO
+            0015 01 MISSING VALUE
+013202 0007 0000 01 LAND
+            0001 01 VEGETATION
+            0003 01 MULTI-YEAR ICE
+            0004 01 POSSIBLE ICE OR FIRST YEAR ICE
+            0005 01 OCEAN
+            0006 01 COASTLINE
+            0015 01 MISSING
+015025 0000 0000 01 OZONE
+            0015 01 MISSING VALUE
+019001 0007 0000 01 DEPRESSION OR LOW (EXTRATROPICAL)
+            0001 01 TROPICAL DEPRESSION
+            0002 01 TROPICAL STORM
+            0003 01 SEVERE TROPICAL STORM
+            0004 01 TYPHOON
+            0010 01 DUST/SANDSTORM
+            0063 01 MISSING VALUE 
+019008 0005 0000 01 RESERVED
+            0001 01 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL
+            0002 01 MEDIUM(TOP BETWEEN 700-HPA AND 400-HPA)
+            0003 01 DEEP(TOP ABOVE 400-HPA LEVEL
+            0007 01 MISSING VALUE
+019010 0004 0000 01 RESERVED
+            0001 01 MINIMUM VALUE OF SEA LEVEL PRESSURE
+            0002 01 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+            0015 01 MISSING VALUE
+020003 0250 0000 01 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+            0001 01 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+            0002 01 STATE OF SKY ON THE WHOLE UNCHANGED
+            0003 01 CLOUDS GENERALLY FORMING OR DEVELOPING
+            0004 02 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, IN
+                    DUSTRIAL SMOKE OR VOLCANIC ASHES
+            0005 01 HAZE
+            0006 02 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND
+                     AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+            0007 04 DUST OR SEND RAISED BY WIND AT OR NEAR THE STATION AT THE TI
+                    ME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHRIL(S) OR SA
+                    ND WHRIL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE
+                    CASE OF SHIPS, BLOWING SPRAY AT THE STATION
+            0008 03 WELL-DEVELOPED DUST WHRIL(S) OR SAND WHRILS SEEN AT OR NEAR
+                    THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF
+                     OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+            0009 02 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATI
+                    ON, OR AT THE STATION DURING THE PRECEDING HOR
+            0010 01 MIST
+            0011 02 PACHES SHALLOW FOG OR ICE AT THE STATION, WHETHER ON LAND OR
+                     SEA, NOT DEEPER THAN 2 METRES ON LAND OR 10 METRES AT SEA
+            0012 03 MORE OR LESS CONTINUOUS SHALLOW FOG OR ICE AT THE STATION,
+                    WHETHER ON LAND OR SEA, NOT DEEPER THAN 2 METRES ON LAND OR
+                    10 METRES AT SEA
+            0013 01 LIGHTNING VISIBLE, NO THUNDER HEARD
+            0014 02 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE
+                    SURFACE OF THE SEA
+            0015 03 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN
+                    5 KM FROM THE STATION
+            0016 02 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFA
+                    CE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+            0017 02 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATIO
+                    N
+            0018 02 SQUALLS AT OR WITHIN SIGHT OF THE STATION DURING THE PRECEDI
+                    NG HOUR OR AT THE TIME OF OBSERVATION
+            0019 02 FUNNEL CLOUD(S) AT OR WITHIN SIGHT OF THE STATION DURING THE
+                     PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0020 03 DRIZZEL (NOT FREEZING) OR SNOW GRAINS NOT FALLING AS SHOWERS
+                    ; DURING THE PRECEDING HOUR BUT NOT  AT THE TIME OF OBSERVAT
+                    IONS
+            0021 02 RAIN (NOT FREEZING) NOT FALLING AS SHOWER(S); DURING THE PRE
+                    ECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0022 02 SNOW NOT FALLING AS SHOWER(S); DURING THE PRECEDING HOUR BUT
+                     NOT AT THE TIME OF OBSERVATION
+            0023 02 RAIN AND SNOW OR ICE PELLETS NOT FALLING AS SHOWER(S); DURIN
+                    G THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0024 02 FREEZING DRIZZEL OR FREEZING RAIN NOT FALLING AS SHOWER(S);
+                    DURING THE PRECEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0025 02 SHOWER(S) OF RAIN; DURING THE PRECEDING HOUR BUT NOT AT THE
+                    TIME OF OBSERVATION
+            0026 02 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0027 02 SHOWER(S) OF HAIL, OR OF RAIN AND HAIL; DURING THE PRECEDING
+                     HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0028 02 FOG OR ICE FOG; DURING THE PRECEDING HOUR BUT NOT AT THE TIM
+                    E OF OBSERVATION
+            0029 02 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION); DURING THE PRE
+                    CEDING HOUR BUT NOT AT THE TIME OF OBSERVATION
+            0030 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS DECREASED DURI
+                    NG THE PRECEDING HOURS
+            0031 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHA
+                    NGE DURING THE PRECEDING HOUR
+            0032 02 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS I
+                    NCEASED DURING THE PRECEDING HOUR
+            0033 02 SEVERE DUSTSTORM OR SANDSTORM  HAS DECREASED DURING THE PREC
+                    EDING HOURS
+            0034 02 SEVERE DUSTSTORM OR SANDSTORM NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0035 02 SEVERE DUSTSTORM OR SANDSTORM HAS BEGUN OR HAS INCREASED DUR
+                    ING THE PRECEDING HOUR
+            0036 02 SLIGHT OR MODERATE DRIFTING SNOW GENERALLY LOW (BELOW EYE LE
+                    VEL)
+            0037 01 HEAVY DRIFTING SNOW  GENERALY LOW (BELOW EYE LEVEL)
+            0038 02 SLIGHT OR MODERATE BLOWING SNOW GENERALLY HIGH (ABOVE EYE LE
+                    VEL)
+            0039 01 HEAVY BLOWING SNOW  GENERALY HIGH (ABOVE EYE LEVEL)
+            0040 03 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT
+                     NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR IC
+                    E FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+            0041 01 FOG OR ICE FOG IN PATCHES
+            0042 02 FOG OR ICE FOG, SKY VISIBLE,HAS BECOME THINNER DURING THE PR
+                    ECEDING HOUR
+            0043 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BECOME THINNER DURING THE
+                    PRECEDING HOUR
+            0044 02 FOG OR ICE FOG, SKY   VISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0045 02 FOG OR ICE FOG, SKY INVISIBLE,NO APPRECIABLE CHANGE DURING T
+                    HE PRECEDING HOUR
+            0046 02 FOG OR ICE FOG, SKY   VISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0047 02 FOG OR ICE FOG, SKY INVISIBLE,HAS BEGUN OR HAS BECOME THICKE
+                    R DURING THE PRECEDING HOUR
+            0048 01 FOG, DEPOSITING RIME, SKY VISIBLE
+            0049 01 FOG, DEPOSITING RIME, SKY INVISIBLE
+            0050 02 DRIZZLE, NOT FREEZING, INTERMITTENT;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0051 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;SLIGHT AT TIME OF OBSERV
+                    ATION
+            0052 02 DRIZZLE, NOT FREEZING, INTERMITTENT;MODERATE AT TIME OF OBSE
+                    RVATION
+            0053 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;MODERATE AT TIME OF OBSE
+                    RVATION
+            0054 02 DRIZZLE, NOT FREEZING, INTERMITTENT;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0055 02 DRIZZLE, NOT FREEZING, CONTINUOUS  ;HEAVY (DENSE) AT THE TIM
+                    E OF OBSERVATION
+            0056 01 DRIZZLE, FREEZING, SLIGHT
+            0057 01 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+            0058 01 DRIZZLE AND RAIN, SLIGHT
+            0059 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0060 01 RAIN,NOT FREEZING,INTERMITTENT;SLIGHT AT TIME OF OBSERVATION
+            0061 01 RAIN,NOT FREEZING,CONTINUOUS  ;SLIGHT AT TIME OF OBSERVATION
+            0062 02 RAIN,NOT FREEZING,INTERMITTENT;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0063 02 RAIN,NOT FREEZING,CONTINUOUS  ;MODERATE AT TIME OF OBSERVATI
+                    ON
+            0064 02 RAIN, NOT FREEZING, INTERMITTENT;HEAVY AT TIME OF OBSERVATIO
+                    ON
+            0065 01 RAIN, NOT FREEZING, CONTINUOUS;HEAVY AT TIME OF OBSERVATION
+            0066 01 RAIN, FREEZING, SLIGHT
+            0067 01 RAIN, FREEZING, MODERATE OR HEAVY
+            0068 01 RAIN OR DRIZZLE AND SNOW, LIGHT
+            0069 01 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+            0070 02 INTERMITTENT FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0071 02 CONTINUOUS   FALL OF SNOWFLAKES, SLIGHT AT TIME OF OBSERVATI
+                    ON
+            0072 02 INTERMITTENT FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0073 02 CONTINUOUS   FALL OF SNOWFLAKES, MODERATE AT TIME OF OBSERVA
+                    TION
+            0074 02 INTERMITTENT FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0075 02 CONTINUOUS   FALL OF SNOWFLAKES, HEAVY AT TIME OF OBSERVATIO
+                    ONS
+            0076 01 DIAMOND DUST (WITH OR WITHOUT FOG)
+            0077 01 SNOW GRAINS (WITH OR WITHOUT FOG)
+            0078 01 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+            0079 01 ICE PELLETS
+            0080 01 RAIN SHOWER(S), SLIGHT
+            0081 01 RAIN SHOWER(S), MODERATE OR HEAVY
+            0082 01 RAIN SHOWER(S), VIOLENT
+            0083 01 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+            0084 01 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0085 01 SNOW SHOWER(S), SLIGHT
+            0086 01 SNOW SHOWER(S), MODERATE OR HEAVY
+            0087 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, SLIGHT
+            0088 02 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAI
+                    N OR RAIN AND SNOW MIXED, MODERATE OR HEAVY
+            0089 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, SLIGHT
+            0090 02 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIX
+                    ED, NOT ASSOCIATED WITH THUNDER, MODERATE OR HEAVY
+            0091 02 SLIGHT RAIN AT TIME OF OBSERVATION, THUNDERSTORM DURING THE
+                    PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0092 02 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION, THUNDERSTORM
+                    DURING THE PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0093 03 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TIME OF OBSER
+                    VATION, THUNDERSTORM DURING THE PRECEDING HOUR BUT NOT AT TI
+                    ME OF OBSERVATION
+            0094 03 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL AT TI
+                    ME OF OBSERVATION, THUNDERSTORM DURING PRECEDING HOUR BUT NO
+                    T AT TIME OF OBSERVATION
+            0095 03 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL, BUT WITH RAI
+                    N AND/OR SNOW AT TIME OF OBSERVATION, THUNDERSTORM DURING TH
+                    E PRECEDING HOUR BUT NOT AT TIME OF OBSERVATION
+            0096 02 THUNDERSTORM, SLIGHT OR MODERATE,WITH HAIL AT TIME OF OBSERV
+                    ATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0097 02 THUNDERSTORM, HEAVY, WITHOUT HAIL BUT WITH RAIN AND/OR SNOW
+                    AT TIME OF OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0098 02 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF
+                     OBSERVATION, THUNDERSTORM AT TIME OF OBSERVATION
+            0099 02 THUNDERSTORM, HEAVY, WITH HAIL AT TIME OF OBSERVATION, THUND
+                    ERSTORM AT TIME OF OBSERVATION
+            0100 01 NO SIGNIFICANT WEATHER OBSERVED
+            0101 02 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURIN
+                    G THE PAST HOUR
+            0102 01 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+            0103 01 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+            0104 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    EQUAL TO, OR GREATER THAN 1KM
+            0105 02 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY
+                    LESS THAN 1KM
+            0110 01 MIST
+            0111 01 DIAMOND DUST
+            0112 01 DISTANT LIGHTING
+            0118 01 SQUALLS
+            0120 01 FOG
+            0121 01 PRECIPITATION
+            0122 01 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+            0123 01 RAIN (NOT FREEZING)
+            0124 01 SNOW
+            0125 01 FREEZING DRIZZLE OR FREEZING RAIN
+            0126 01 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+            0127 01 BLOWING OR DRIFTING SNOW OR SAND
+            0128 02 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GR
+                    ATER THAN, 1KM
+            0129 01 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+            0130 01 FOG
+            0131 01 FOG OR ICE FOG, IN PATCHES
+            0132 01 FOG OR ICE FOG, HAS BECOME THINNER DURING PAST HOUR
+            0133 01 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING PAST HOUR
+            0134 01 FOG OR ICE FOG, HAS BECUNOR BECOME THICKER DURING PAST HOUR
+            0135 01 FOG, DEPOSITION RIME
+            0140 01 PRECIPITATION
+            0141 01 PRECIPITATION SLIGHT OR MODERATE
+            0142 01 PRECIPITATION, HEAVY
+            0143 01 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+            0144 01 LIQUID PRECIPITATION, HEAVY
+            0145 01 SOLID PRECIPITATION, SLIGHT OR MODERATE
+            0146 01 SOLID PRECIPITATION, HEAVY
+            0147 01 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+            0148 01 FREEZING PRECIPITATION, HEAVY
+            0150 01 DRIZZLE
+            0151 01 DRIZZLE, NOT FREEZING, SLIGHT
+            0152 01 DRIZZLE, NOT FREEZING, MODERATE
+            0153 01 DRIZZLE, NOT FREEZING, HEAVY
+            0154 01 DRIZZLE, FREEZING, SLIGHT
+            0155 01 DRIZZLE, FREEZING, MODERATE
+            0156 01 DRIZZLE, FREEZING, HEAVY
+            0157 01 DRIZZLE AND RAIN, SLIGHT
+            0158 01 DRIZZLE AND RAIN, MODERATE OR HEAVY
+            0160 01 RAIN
+            0161 01 RAIN, NOT FREEZING, SLIGHT
+            0162 01 RAIN, NOT FREEZING, MODERATE
+            0163 01 RAIN, NOT FREEZING, HEAVY
+            0164 01 RAIN, FREEZING, SLIGHT
+            0165 01 RAIN, FREEZING, MODERATE
+            0166 01 RAIN, FREEZING, HEAVY
+            0167 01 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+            0168 01 RAIN (OR DRIZZLE) AND SNOW, MODERATE AND HEAVY
+            0170 01 SNOW
+            0171 01 SNOW, SLIGHT
+            0172 01 SNOW, MODERATE
+            0173 01 SNOW, HEAVY
+            0174 01 ICE PELLETS, SLIGHT
+            0175 01 ICE PELLETS, MODERATE
+            0176 01 ICE PELLETS, HEAVY
+            0180 01 SHOWER(S) OR INTERMITTENT PRECIPITATION
+            0181 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+            0182 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+            0183 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+            0184 01 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+            0185 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+            0186 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+            0187 01 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+            0190 01 THUNDERSTORM
+            0191 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+            0192 02 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR S
+                    NOW SHOWERS
+            0193 01 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+            0194 01 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+            0195 01 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+            0196 01 THUNDERSTORM, HEAVY, WITH HAIL
+            0204 01 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+            0206 01 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+            0207 01 BLOWING SPRAY AT THE STATION
+            0208 01 DRIFTING DUST (SAND)
+            0209 01 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+            0210 01 SNOW HAZE
+            0211 01 WHITEOUT
+            0213 01 LIGHTING, CLOUD TO SURFACE
+            0217 01 DRY THUNDERSTORM
+            0219 02 TORNADO CLOUD (DESTRUCTIVE AT OR WITHIN SIGHT OF THE STATION
+                    DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+            0220 01 DEPOSITION OF VOLCANIC ASH
+            0221 01 DEPOSITION OF DUST OR SAND
+            0222 01 DEPOSITION OF DEW
+            0223 01 DEPOSITION OF WET SNOW
+            0224 01 DEPOSITION OF SOFT RIME
+            0225 01 DEPOSITION OF HARD RIME
+            0226 01 DEPOSITION OF HOAR FROST
+            0227 01 DEPOSITION OF GLAZE
+            0228 01 DEPOSITION OF ICE CRUST (ICE SLICK)
+            0230 01 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 C DEGREES
+            0239 02 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLIN
+                    G OR NOT
+            0241 01 FOG ON SEA
+            0242 01 FOG IN VALLEYS
+            0243 01 ARCTIC OR ANTARCTIC SEA SMOKE
+            0244 01 STEAM FOG (SEA,LAKE OR RIVER)
+            0245 01 STEAM FOG (LAND)
+            0246 01 FOG OVER ICE OR SNOW COVER
+            0247 01 DENCE FOG VISIBILITY 60-90 M
+            0248 01 DENCE FOG VISIBILITY 30-60 M
+            0249 01 DENCE FOG VISIBILITY LESS THAN 30 M
+            0250 01 DRIZZLE, RATE OF FALL  LESS THAN 0.10 MM/H
+            0251 01 DRIZZLE, RATE OF FALL   0.10 -  .19  MM/H
+            0252 01 DRIZZLE, RATE OF FALL   0.20 -  .39  MM/H
+            0253 01 DRIZZLE, RATE OF FALL   0.40 -  .79  MM/H
+            0254 01 DRIZZLE, RATE OF FALL   0.80 - 1.59  MM/H
+            0255 01 DRIZZLE, RATE OF FALL   1.60 - 3.19  MM/H
+            0256 01 DRIZZLE, RATE OF FALL   3.20 - 6.39  MM/H
+            0257 01 DRIZZLE, RATE OF FALL   6.40 MM/H  OR MORE
+            0259 01 DRIZZLE AND SNOW
+            0260 01 RAIN, RATE OF FALL  LESS THAN 1.0 MM/H
+            0261 01 RAIN, RATE OF FALL   1.0  -  1.9   MM/H
+            0262 01 RAIN, RATE OF FALL   2.0  -  3.9   MM/H
+            0263 01 RAIN, RATE OF FALL   4.0  -  7.9   MM/H
+            0264 01 RAIN, RATE OF FALL   8.0  - 15.9   MM/H
+            0265 01 RAIN, RATE OF FALL  16.0  - 31.9   MM/H
+            0266 01 RAIN, RATE OF FALL  32.0  - 63.9   MM/H
+            0267 01 RAIN, RATE OF FALL  64.0  MM/H  OR MORE
+            0270 01 SNOW, RATE OF FALL  LESS THAN 1.0 CM/H
+            0271 01 SNOW, RATE OF FALL   1.0  -  1.9   CM/H
+            0272 01 SNOW, RATE OF FALL   2.0  -  3.9   CM/H
+            0273 01 SNOW, RATE OF FALL   4.0  -  7.9   CM/H
+            0274 01 SNOW, RATE OF FALL   8.0  - 15.9   CM/H
+            0275 01 SNOW, RATE OF FALL  16.0  - 31.9   CM/H
+            0276 01 SNOW, RATE OF FALL  32.0  - 63.9   CM/H
+            0277 01 SNOW, RATE OF FALL  64.0  CM/H  OR MORE
+            0278 01 SNOW OR ICE CRISTAL PRECIPITATION FROM A CLEAR SKY
+            0279 01 WET SNOW, FREEZING ON CONTACT
+            0280 01 PRECIPITATION OF RAIN (WW= 87-99)
+            0281 01 PRECIPITATION OF RAIN,FREEZING (WW= 80-82)
+            0282 01 PRECIPITATION OF RAIN AND SNOW MIXED
+            0283 01 PRECIPITATION OF SNOW
+            0284 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL
+            0285 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+            0286 02 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND S
+                    NOW MIXED
+            0287 01 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+            0288 01 PRECIPITATION OF HAIL
+            0289 01 PRECIPITATION OF HAIL, WITH RAIN
+            0290 01 PRECIPITATION OF HAIL, WITH RAIN AND SNOW MIXED
+            0291 01 PRECIPITATION OF HAIL, WITH SNOW
+            0292 01 SHOWER(S) OR THUNDERSTORM OVER SEA
+            0293 01 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+            0508 02 NO SIGNIFICANT PHENOMENA TO REPORT, PRESENT AND PAST WEATHER
+                     OMITTED
+            0509 02 NOT OBSERVED, NO DATA AVAILABLE, PRESENT AND PAST WEATHER OM
+                    ITTED
+            0510 01 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+            0511 01 MISSING VALUE
+020004 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020005 0021 0000 02 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPP
+                    RIATE PERIOD
+            0001 03 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE A
+                    PPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF TH
+                    E PERIOD
+            0002 02 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPRP
+                    PRIATE PERIOD
+            0003 01 SANSTORM, DUSTSTORM OR BLOWING SNOW
+            0004 01 FOG OR ICE OR THICK HAZE
+            0005 01 DRIZZLE
+            0006 01 RAIN
+            0007 01 SNOW, OR RAIN AND SNOW MIXED
+            0008 01 SHOWER(S)
+            0009 01 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+            0010 01 NO SIGNIFICANT WEATHER OBSERVED
+            0011 01 VISIBILITY REDUCED
+            0012 01 BLOWING PHENOMENA, VISIBILITY REDUCED
+            0013 01 FOG
+            0014 01 PRECIPITATION
+            0015 01 DRIZZLE
+            0016 01 RAIN
+            0017 01 SNOW OR ICE PELLETS
+            0018 01 SHOWERS OR INTERMITTENT PRECIPITATION
+            0019 01 THUNDERSTORM
+            0031 01 MISSING VALUE
+020008 0019 0000 01 SKY CLEAR
+            0001 01 FEW
+            0002 01 SCATTERED
+            0003 01 BROKEN
+            0004 01 OVERCAST
+            0005 01 RESERVED
+            0006 01 SCATTERED/BROKEN (MANY FORECASTS USE SCATTERED/BROKEN
+            0007 01 BROKEN/OVERCAST (BROKEN/OVERCAST FOLLOWED BY CLOUD TYPE(S))
+            0008 01 ISOLATED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0009 01 ISOLATED EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0010 01 OCCASIONAL (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0011 01 OCCASIONAL EMBEDDED (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0012 01 FREQUENT (USED ON AVIATION CHARTS TO DESCRIBE THE CLOUD TYPE CB)
+            0013 02 DENSE (USED ON AVIATION CHARTS TO DESCRIBE CLOUD THAT WOULD CAUSE
+                    SUDDEN CHANGES IN VISIBILITY (LESS THAN 1000M))
+            0014 01 LAYERS
+            0015 01 OBSCURED (OBSC)
+            0016 01 EMBEDDED (EMBD)
+            0017 01  FREQUENT EMBEDDED
+            0031 01 MISSING VALUE 
+020009 0006 0000 01 RESERVED
+            0001 01 NSC MIL SIGNIFICANT CLOUD
+            0002 01 CAVOK
+            0003 01 SKC SKY CLEAR
+            0004 01 NSW NIL SIGNIFICANT WEATHER
+            0015 01 MISSING VALUE
+020011 0011 0000 01 0                              0
+            0001 01 1 OKTA OR LESS, BUT NOT ZERO   1/10 OR LESS, BUT NOT ZERO
+            0002 01 2 OKTAS                        2/10 - 3/10
+            0003 01 3 OKTAS                        4/10
+            0004 01 4 OKTAS                        5/10
+            0005 01 5 OKTAS                        6/10
+            0006 01 6 OKTAS                        7/10 - 8/10
+            0007 01 7 OKTAS OR MORE,BUT NOT 8 OKTAS9/10 OR MORE, BUT NOT 10/10
+            0008 01 8 OKTAS                        10/10
+            0009 01 SKY OBSCURED BY FOG AND OR OTHER METEOROLOGICAL PHENOMENA
+            0015 02 CLOUD COVE IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OT
+                    HER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
+020012 0045 0000 01 CIRRUS (CI)...............CI
+            0001 01 CIRROCUMULUS (CC).........CC
+            0002 01 CIRROSTRATUS (CS).........CS
+            0003 01 ALTOCUMULUS  (AC).........AC
+            0004 01 ALTOSTRATUS  (AS).........AS
+            0005 01 NIMBOSTRATUS (NS).........NS
+            0006 01 STRATOCUMULUS(SC).........SC
+            0007 01 STRATUS      (ST).........ST
+            0008 01 CUMULUS      (CU).........CU
+            0009 01 CUMULONIMBUS (CB).........CB
+            0010 01 NO CH CLOUDS
+            0011 02 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INADIN
+                    G THE SKY
+            0012 04 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USU
+                    ALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF
+                     THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR
+                    FLOCCUS
+            0013 01 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+            0014 02 CIRRUS UNCINUS OR FIBRATUS,OR BOTH, PROGRESSIVELY INVADING T
+                    HE SKY ; THEY GENERALLY THICKEN AS A WHOLE
+            0015 04 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES
+                     ABOVE THE HORIZON
+            0016 05 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS AL
+                    ONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN
+                    ASA WHOLE, BUT THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGR
+                    REES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERE
+                    D
+            0017 01 CIRROSTRATUS COVERING THE WHOLE SKY
+            0018 02 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTI
+                    RELY COVERING IT
+            0019 02 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH
+                     CLOUDS
+            0020 01 NO CM CLOUDS
+            0021 01 ALTOSTRATUS TRANSLUCIDUS
+            0022 01 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+            0023 01 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+            0024 02 PATCHES (OFTEN LENTICULARIS) OF ALTOCUMULUS TRANSLUCIDUS, CO
+                    NTINUALLY CHANGING AND OCCURING AT ONE OR MORE LEVELS
+            0025 04 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF
+                    ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING T
+                    HE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOL
+                    E
+            0026 01 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+            0027 04 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR
+                     ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INV
+                    ADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRAT
+                    US
+            0028 01 ALTOCUMULUS CASTELLANUS OR FLOCUS
+            0029 01 ALTOCUMULUS OF CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+            0030 01 NO CL CLOUDS
+            0031 02 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER
+                    , OR BOTH
+            0032 03 CUMULUS MEDIOCRIS OR CONGESTUS, WITH OR WITHOUT CUMULUS OF S
+                    PECIES FRACTUS OR HUMULIS OR STRATOCUMULUS, ALL HAVING THEIR
+                     BASES AT THE SAME LEVEL
+            0033 02 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS
+                    OR STRATUS
+            0034 01 STRATOCUMULUS CUMULOGENITUS
+            0035 01 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+            0036 02 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATH
+                    ER, OR BOTH
+            0037 02 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH
+                    (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+            0038 02 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGEN
+                    ITUS, WITH BASES AT DIFFERENT LEVELS
+            0039 03 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHO
+                    UT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR P
+                    ANNUS
+            0059 02 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTO
+                    RM, OR OTHER ANALOGOUS PHENOMENA
+            0060 03 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0061 03 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS
+                    LAYER OF LOWER CLOUDS
+            0062 02 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDS
+                    TORM, OR OTHER SIMILAR PHENOMENA
+            0063 01 MISSING VALUE
+020017 0011 0000 01 ISOLATED CLOUD OR FRAGMENTS OF CLOUD
+            0001 01 CONTINUOUS CLOUD
+            0002 01 BROKEN CLOUD - SMALL BREAKS, FLAT TOPS
+            0003 01 BROKEN CLOUD - LARGE BREAKS, FLAT TOPS
+            0004 01 CONTINUOUS CLOUD
+            0005 01 BROKEN CLOUD - SMALL BREAKS, UNDULATED TOPS
+            0006 01 BROKEN CLOUD - LARGE BREAKS, UNDULATED TOPS
+            0007 02 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS A
+                    BOVE THE TOP OF THE LAYER
+            0008 02 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LA
+                    YER
+            0009 01 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+            0015 01 MISSING VALUE
+020018 0004 0000 01 INCREASING (U)
+            0001 01 DECREASING (D)
+            0002 01 NO DISTINCT CHANGE (N)
+            0003 01 MISSING VALUE
+020021 0024 0001 01 PRECIPITATION-UNKNOWN TYPE
+            0002 01 LIQUID PRECIPITATION NOT FREEZING
+            0003 01 LIQUID FREEZING PRECIPITATION
+            0004 01 DRIZZLE
+            0005 01 RAIN
+            0006 01 SOLID PRECIPITATION
+            0007 01 SNOW
+            0008 01 SNOW GRAINS
+            0009 01 SNOW PELLETS
+            0010 01 ICE PELLETS
+            0011 01 ICE CRYSTALS
+            0012 01 DIAMOND DUST
+            0013 01 SMALL HAIL
+            0014 01 HAIL
+            0015 01 GLAZE
+            0016 01 RIME
+            0017 01 SOFT RIME
+            0018 01 HARD RIME
+            0019 01 CLEAR ICE
+            0020 01 WET SNOW
+            0021 01 HOAR FROST
+            0022 01 DEW
+            0023 01 WHITE DEW
+            0030 01 ALL 30 MISSING VALUE
+020022 0007 0000 01 NO PRECIPITATION
+            0001 01 CONTINUOUS
+            0002 01 INTERMITTENT
+            0003 01 SHOWER
+            0004 01 NOT REACHING GROUND
+            0005 01 DEPOSITION
+            0015 01 MISSING VALUE
+020023 0012 0001 01 DUST/SAND WHIRL
+            0002 01 SQUALLS
+            0003 01 SAND STORM
+            0004 01 DUST STORM
+            0005 01 LIGHTNING - CLOUD TO SURFACE
+            0006 01 LIGHTNING - CLOUD TO CLOUD
+            0007 01 LIGHTNING - DISTANT
+            0008 01 THUNDERSTORM
+            0009 01 FUNNEL CLOUD NOT TOUCHING SURFACE
+            0010 01 FUNNEL CLOUD TOUCHING SURFACE
+            0011 01 SPRAY
+            0012 01 WATER-SPOUT
+020024 0007 0000 01 NO PHENOMENA
+            0001 01 LIGHT
+            0002 01 MODERATE
+            0003 01 HEAVY
+            0004 01 VIOLENT
+            0005 01 SEVERE (VAL)
+            0007 01 MISSING VALUE
+020025 0011 0001 01 FOG
+            0002 01 ICE FOG
+            0003 01 STEAM FOG
+            0007 01 MIST
+            0008 01 HAZE
+            0009 01 SMOKE
+            0010 01 VOLCANIC ASH
+            0011 01 DUST
+            0012 01 SAND
+            0013 01 SNOW
+            0021 01 ALL 21 MISSING VALUE
+020026 0014 0000 01 NO CHANGE
+            0001 01 SHALLOW
+            0002 01 PATCHES
+            0003 01 PARTIAL
+            0004 01 FREEZING
+            0005 01 LOW DRIFTING
+            0006 01 BLOWING
+            0007 01 INCREASING
+            0008 01 DECREASING
+            0009 01 IN SUSPENSION IN THE AIR
+            0010 01 WALL
+            0011 01 DENSE
+            0012 01 WHITEOUT
+            0015 01 MISSING VALUE
+020027 0007 0001 01 AT TIME OF OBSERVATION
+            0002 01 IN PAST HOUR
+            0003 01 IN TIME PERIOD FOR PAST WEATHER W1W2
+            0004 01 IN TIME PERIOD SPECIFIED
+            0006 01 BELOW STATION LEVEL
+            0007 01 AT THE STATION
+            0008 01 IN THE VICINITY
+            0009 01 ALL 9 MISSING VALUE
+020029 0004 0000 01 NO RAIN
+            0001 01 RAIN
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020032 0006 0000 01 ICE NOT BUILDING UP
+            0001 01 ICE BUILDING UP SLOWLY
+            0002 01 ICE BUILDING UP QUICKLY
+            0003 01 ICE MELTING OR BREAKING UP SLOWLY
+            0004 01 ICE MELTING OR BREAKING UP RAPIDLY
+            0007 01 MISSING VALUE
+020033 0004 0001 01 ICING FROM OCEAN SPRAY
+            0002 01 ICING FROM FOG
+            0003 01 ICING FROM RAIN
+            0004 01 MISSING VALUE
+020034 0012 0000 01 NO SEA ICE IN SIGHT
+            0001 02 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP
+                    IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+            0002 04 SEA ICE PRESENT IN CONCETRATION LESS THAN 3/10 (3/8), OPEN W
+                    ATER OR VERY OPEN PACK ICE, SEA ICE CONCETRATION IS UNIFORM
+                    IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                    MILE OF ICE EDGE
+            0003 03 4/10 TO 6/10 (3/8 TO LESS THAN 6/8) ,OPEN PACK ICE, SEA ICE
+                    CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE
+                     OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0004 03 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE, SEA ICE
+                     CONCETRATION IS UNIFORM IN THE OBSERVATION AREA, SHIP IN IC
+                     E OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0005 04 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLO
+                    SE PACK ICE, SEA ICE CONCETRATION IS UNIFORM IN THE OBSERVAT
+                    ION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDG
+                    E
+            0006 03 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN, SEA
+                    ICE CONCENTRATION IS NOT UNIFORM IN THE OBSERVATION AREA, SH
+                    IP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE EDGE
+            0007 04 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREA
+                    S OF LESSER CONCENTRATION BETWEEN, SEA ICE CONCETRATION IS N
+                    OT UNIFORM IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.
+                    5 NAUTICAL MILE OF ICE EDGE
+            0008 04 FAST ICE WITH OPEN WATER,VERY OPEN OR OPEN PACK ICE TO SEAWA
+                    RD OF THE ICE BOUNDARY, SEA ICE CONCENTRATION IS NOT UNIFORM
+                     IN THE OBSERVATION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL
+                     MILE OF ICE EDGE
+            0009 04 FAST ICE CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE ICE
+                    BOUNDARY, SEA ICE CONCETRATION IS NOT UNIFORM IN THE OBSERVA
+                    TION AREA, SHIP IN ICE OR WITHIN 0.5 NAUTICAL MILE OF ICE ED
+                    GE
+            0014 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, O
+                    R BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE
+                    EDGE
+            0015 01 MISSING VALUE
+020035 0012 0000 01 NO ICE OF LAND ORIGIN
+            0001 01 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0002 01 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0003 01 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+            0004 01 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0005 01 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+            0006 01 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0007 01 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0008 01 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+            0009 02 MORE THAN 20 ICEBERGS,WITH GROWLERS AND BERGY BITS - A MAJOR
+                    HAZARD TO NAVIGATION
+            0014 02 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR
+                    BECAUSE ONLY SEA ICE IS VISIBLE
+            0015 01 MISSING VALUE
+020036 0012 0000 01 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+            0001 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+            0002 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+            0003 01 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+            0004 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+            0005 01 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+            0006 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE FORMING AND FLOES FREEZING TOGETHAR
+            0007 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER SLIGHT PRESSURE
+            0008 02 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING.
+                    ICE UNDER MODERATE OR SEVERE PRESSURE
+            0009 01 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. SHIP BESET.
+            0030 01 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+            0031 01 MISSING VALUE
+020037 0012 0000 01 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+            0001 01 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+            0002 01 YOUNG ICE(GREY ICE, GREY-WHITE ICE
+            0003 01 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+            0004 01 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG ICE
+            0005 01 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+            0006 02 PREDOMINANTLY MEDIUM FIRST-YEAR ICE
+                    (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM
+            0007 01 ALL MEDIUM AND THICK FIRST-YEAR ICE
+            0008 02 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME
+                    OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+            0009 01 PREDOMINANTLY OLD ICE
+            0030 03 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE
+                    ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP IS MORE THAN 0.5
+                    NAUTICAL MILE AWAY FROM ICE EDGE 
+            0031 01 MISSING VALUE
+020040 0009 0000 01 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+            0001 01 INTENSITY DIMINISHING
+            0002 01 NO CHANGE
+            0003 01 INTENSITY INCREASING
+            0004 01 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINUTES
+            0005 01 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+            0006 01 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+            0007 01 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE THAN 30 MINUTES
+            0015 01 MISSING VALUE
+020041 0011 0000 01 NO ICING
+            0001 01 LIGHT ICING
+            0002 01 LIGHT ICING IN CLOUD
+            0003 01 LIGHT ICING IN PRECIPITATION
+            0004 01 MODERATE ICING
+            0005 01 MODERATE ICING IN CLOUD
+            0006 01 MODERATE ICING IN PRECIPITATION
+            0007 01 SEVERE ICING
+            0008 01 SEVERE ICING IN CLOUD
+            0009 01 SEVERE ICING IN PRECIPITATION
+            0015 01 MISSING VALUE
+020042 0004 0000 01 NO ICING
+            0001 01 ICING PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020045 0004 0000 01 NO SLD CONDITIONS PRESENT
+            0001 01 SLD CONDITIONS PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+020050 0010 0000 01 RESERVED
+            0001 01 1ST LOW CLOUD
+            0002 01 2ND LOW CLOUD
+            0003 01 3RD LOW CLOUD
+            0004 01 1ST MEDIUM CLOUD
+            0005 01 2ND MEDIUM CLOUD
+            0006 01 3RD MEDIUM CLOUD
+            0007 01 1ST HIGH CLOUD
+            0008 01 2ND HIGH CLOUD
+            0255 01 MISSING VALUE
+020055 0011 0000 01 CUMULUS, IF ANY, ARE QUITE SMALL
+            0001 01 CUMULUS OF INTERMEDIATE SIZE
+            0002 01 SWELLING CUMULUS
+            0003 01 SWELLING CUMULUS WITH TOWERS
+            0004 01 SWELLING CUMULUS WITH TOWERS HAVING PRONOUNCED TILT
+            0005 01 TALL CUMULUS CONGESTUS
+            0006 01 ISOLATED CUMULONIMBUS
+            0007 01 NUMEROUS CUMULONIMBUS
+            0008 01 CONTINUOUS DENSE MIDDLE CLOUDS
+            0009 01 CONTINUOUS SHEETS OF MIDDLE CLOUDS
+            0015 01 MISSING VALUE
+020056 0005 0000 01 UNKNOWN
+            0001 01 WATER
+            0002 01 ICE
+            0003 01 MIXED
+            0007 01 MISSING VALUE
+020062 0021 0000 02 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE
+                    AMOUNT OF DUST OR LOOSE SAND)
+            0001 01 SURFACE OF GROUND MOIST
+            0002 02 SURFACE OF GROUND WET (STANDING WATER IN SMALL
+                    OR LARGE POOLS ON SURFACE)
+            0003 01 FLOODED WITHOUT SNOW 
+            0004 01 SURFACE OF GROUND FROZEN MEASURABLE ICE
+            0005 01 GLAZE ON GROUND COVER
+            0006 01 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+            0007 01 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY
+            0008 02 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING
+                    GROUND COMPLETELY
+            0009 01 EXTREMELY DRY WITH CRACKS
+            0010 01 GROUND PREDOMINANTLY COVERED BY ICE
+            0011 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN
+                    ONE-HALF OF THE GROUND
+            0012 02 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST
+                    ONE-HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+            0013 01 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+            0014 02 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND
+                    WITH SNOW OR COMPLETELY MEASURABLE ICE
+            0015 01 LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF THE GROUND COVER
+            0016 02 LOOSE DRY SNOW COVERING AT LEAST ONE-HALF OF THE 
+                    GROUND (BUT NOT COMPLETELY)
+            0017 01 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0018 01 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+            0019 01 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+            0031 01 MISSING VALUE
+020063 0001 0000 01 TO BE DEVELOPED
+020071 0011 0000 01 NO ASSESSMENT            NO ASSESSMENT
+            0001 01 LESS THAN 50 KM          LESS THAN 1 PER SECOND
+            0002 01 BETWEEN 50 AND 200 KM    LESS THAN 1 PER SECOND
+            0003 01 MORE THAN 200 KM         LESS THAN 1 PER SECOND
+            0004 01 LESS THAN 50 KM          1 OR MORE PER SECOND
+            0005 01 BETWEEN 50 AND 200 KM    1 OR MORE PER SECOND
+            0006 01 MORE THAN 200 KM         1 OR MORE PER SECOND
+            0007 01 LESS THANK 50 KM         RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0008 01 BETWEEN 50 AND 200 KM    RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0009 01 MORE THAN 200 KM         RATE SO RAPID NUMBER CANNOT BE COUNTED
+            0015 01 MISSING VALUE
+020086 0008 0000 01 CLEAR AND DRY
+            0001 01 DAMP
+            0005 01 WET SNOW
+            0006 01 SLUSH
+            0007 01 ICE
+            0008 01 COMPACTED OR ROLLED SNOW
+            0009 01 FROZEN RUTS OR RIDGES
+            0015 01 MISSING VALUE
+020090 0007 0000 01 RESERVED
+            0001 01 NACREOUS CLOUDS
+            0002 01 NOCTILUCENT CLOUDS
+            0003 01 CLOUDS FROM WATERFALLS
+            0004 01 CLOUDS FROM FIRES
+            0005 01 CLOUDS FROM VULCANIC ERUPTIONS
+            0015 01 MISSING VALUE
+020101 0010 0001 01 SCHISTOCERCA GREGARIA
+            0002 01 LOCUSTA MIGRATORIA
+            0003 01 NOMADACRIS SEPTEMFASCIATA
+            0004 01 OEDALEUS SENAGALENSIS
+            0005 01 ANRACRIDIUM SPP
+            0006 01 OTHER LOCUST
+            0007 01 OTHER GRASSHOPPERS
+            0008 01 ITHER CRICKETS
+            0009 01 SPODOPTERA EXEMPTA
+            0015 01 MISSING VALUE
+020102 0011 0000 01 GREEN
+            0001 01 GREEN AND BLACK
+            0002 01 BLACK
+            0003 01 YELLOW AND BLACK
+            0004 01 STRAW/GREY
+            0005 01 PINK
+            0006 01 DARK RED/BROWN
+            0007 01 MIXED RED AND YELLOW
+            0008 01 YELLOW
+            0009 01 OTHER
+            0015 01 MISSING VALUE 
+020151 0003 0000 01 FIRST YEAR ICE
+            0001 01 MULTI YEAR ICE
+            0007 01 MISSING 
+020252 0003 0000 01 NO EDGE
+            0001 01 EDGE PRESENT
+            0007 01 MISSING
+020253 0007 0000 01 LAND
+            0001 01 VEGETATION COVERED LAND
+            0002 01 RESERVED
+            0003 01 ICE
+            0004 01 POSSIBLE ICE
+            0005 01 OCEAN
+            0006 01 COAST
+            0007 01 MISSING
+021066 0011 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLINH WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIC VALUE
+            0007 02 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND
+                    QUADRATURE OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
+021067 0012 0001 01 NO FOREBEAM CALCULATION
+            0002 01 NO MIDBEAM CALCULATION
+            0003 01 NO AFTBEAM CALCULATION
+            0004 01 FOREBEAM ARCING DETECTED
+            0005 01 MID ARCING DETECTED
+            0006 01 AFTBEAM ARCING DETECTED
+            0007 01 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO TRESHOLD
+            0008 01 LAND (ANY LAND IN CELL FOOTPRINT)
+            0009 01 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+            0010 01 METEOROLOGICAL BACKGROUND NOT USED
+            0011 01 MINIMUM RESIDUAL EXCEEDED TRESHOLD
+            0012 01 FRAME CHECKSUM ERROR DETECTED
+021068 0007 0001 01 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+            0002 01 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC LIMIT
+            0003 01 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+            0004 01 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+            0005 01 FRAME CHECKSUM ERROR DETECTED
+            0006 01 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+            0007 01 NOT ENOUGH MEASUREMENTS ( N< 10)
+021069 0009 0001 01 12.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0002 01 11.0 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0003 01  3.7 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0004 01  1.6 MICROMETERS CHANNEL PRESENT IN SOURCE DATA
+            0005 02 CLOUD IDENTIFICATION USED 1.6 MICROMETERS 
+                    HISTOGRAM REFLECTANCE CLOUD TEST
+            0006 02 1.6 MICROMETERS HISTOGRAM REFLECTANCE CLOUD
+                    TEST USED DYNAMIC TRESHOLD
+            0007 01 SUN GLINT DETECTED BY 1.6 MICROMETERS REFLECTANCE CLOUD TEST
+            0008 01 3.7 MICROMETERS USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+            0009 02 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA
+                    (NIGHT-TIME IF ZERO)
+021070 0024 0001 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0002 01 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMBERING
+            0003 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0004 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0005 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0006 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0007 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0008 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0009 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0010 01 CELL 1:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0011 01 CELL 2:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL CELL NUMBERING
+            0012 01 CELL 3:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0013 01 CELL 4:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL NW NE
+            0014 01 CELL 5:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 7 8 9
+            0015 01 CELL 6:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 4 5 6
+            0016 01 CELL 7:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL 1 2 3
+            0017 01 CELL 8:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL SW SE
+            0018 01 CELL 9:NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+            0019 01 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0020 01 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+            0021 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED WHEN ERS PLATFORM NOT IN
+                    YAW-STEERING MODE
+            0022 02 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHICH PRODUCT CONFIDENCE DATA
+                    SHOW QUALITY IS POOR OR UNKNOWN
+            0023 01 MISSING VALUE
+021072 0003 0001 01 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION
+            0002 01 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+            0003 01 AGC OUTPUT CORRECTION APPLIED INSTED OF OPEN LOOP CALIBRATION 
+021073 0008 0001 01 BLANK DATA RECORD
+            0002 01 TEST
+            0003 01 CALIBRATION (CLOSED LOOP)
+            0004 01 BITE
+            0005 01 ACQUISITION ON ICE
+            0006 01 ACQUISITION ON OCEAN
+            0007 01 TRACKING ON ICE
+            0008 01 TRACKING ON OCEAN
+021076 0004 0000 01 LINEAR
+            0001 01 LOGARITHMIC (BASE E)
+            0002 01 LOGARITHMIC (BASE 10)
+            0007 01 MISSING VALUE
+021109 0008 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL          
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA0- FOR  WIND RETRIEVAL
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE 
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND  VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0017 01 MISSING VALUE
+021115 0011 0001 01 SIGMA-0 MEASUREMENT IS NOT USABLE
+            0002 01 SIGNAL TO NOISE RATIO IS LOW
+            0003 01 SIGMA-0 IS NEGATIVE
+            0004 01 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+            0005 01 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+            0006 01 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+            0007 01 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+            0008 01 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RANGE
+            0009 01 NO APPLICABLE ATTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+            0010 01 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGMA-0
+            0017 01 MISSING VALUE
+021116 0016 0001 01 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+            0002 01 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+            0003 01 OUTER ANTENNA BEAM
+            0004 01 SIGMA-0 CELL IS AFT OF SPACECRAFT
+            0005 01 CURRENT MODE (1)
+            0006 01 CURRENT MODE (2)
+            0007 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+            0008 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+            0009 01 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+            0010 01 LOW RESOLUTION MODE - WHOLE PULSE DATA
+            0011 01 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+            0012 01 ALTERNATE SPIN RATE - 19.8 RPM
+            0013 01 RECEIVER PROTECTION ON
+            0014 01 SLICES PER COMPOSITE FLAG (1)
+            0015 01 SLICES PER COMPOSITE FLAG (2)
+            0016 01 SLICES PER COMPOSITE FLAG (3)
+021119 0014 0000 01 RESERVED
+            0001 01 SASS
+            0002 01 SASS2
+            0003 01 NSCAT0
+            0004 01 NSCAT1
+            0005 01 NSCAT2
+            0006 01 QSCAT0
+            0007 01 QSCAT1
+            0031 01 CMOD1
+            0032 01 CMOD2
+            0033 01 CMOD3
+            0034 01 CMOD4
+            0035 01 CMOD5
+            0064 01 MISSING VALUE
+021144 0001 0001 01 RAIN
+021150 0004 0000 01 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+            0001 01 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021155 0016 0001 01 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+            0002 01 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+            0003 01 ANY BEAM NOISE CONTENT ABOVE TRESHOLD
+            0004 01 PRODUCT MONITORING NOT USED
+            0005 01 PRODUCT MONITORING FLAG
+            0006 01 KNMI QUALITY CONTROL FAILS
+            0007 01 VARIATIONAL QUALITY CONTROL FAILS
+            0008 01 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+            0009 01 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+            0010 01 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+            0011 01 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+            0012 01 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+            0013 01 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+            0014 01 RAIN FLAG ALGORITHM DETECTS RAIN 
+            0015 01 NO METEOROLOGICAL BACKGROUND USED
+            0016 01 DATA ARE REDUNDANT
+021158 0004 0000 01 ACCEPTABLE
+            0001 01 NOT ACCEPTABLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021159 0004 0000 01 GOOD
+            0001 01 USABLE
+            0002 01 BAD
+            0003 01 MISSING VALUE
+021169 0004 0000 01 NO ICE PRESENT
+            0001 01 ICE PRESENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+021196 0012 0001 01 PROCESSING EQUIPMENT NOT WORKING
+            0002 01 EQUIPMENT FAILED
+            0003 01 PRF CODE CHANGED DURING IMAGE GENERATION
+            0004 01 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+            0005 01 GAIN CHANGED DURING IMAGE GENERATION
+            0006 01 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+            0007 01 INPUT DATA MEAN AND STANDARD DEVIATION OF I AND Q OUT OF RANGE
+            0008 01 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+            0009 01 DOPPLER CENTROID ABSOLUTE VCALUE > PRF/2
+            0010 01 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+            0011 01 OUTPUT DATA MEAN AND STANDARD DEVIATION <= MMCC VALUE
+            0012 01 MISSING VALUE
+021199 0007 0001 01 3.7 MICRO CHANNEL USED IN ASST DERIVATION
+            0002 01 ASST DERIVATION USED DATTIME DATA
+            0003 02 COMPARISON OF ASST AGAINST PREVIOUS 
+                    EQUIVALENT PASS PERFORMED
+            0004 02 COMPARISON OF ASST AGAINST WEEKLY AVERAGE 
+                    OF ASST PERFORMED
+            0005 01 
+            0006 02 COMPARISON OF RATE OF CHANGE OF ASST AGAINST
+                    STATIC TRESHOLD PERFORMED
+            0007 01 MISSING VALUE
+021227 0034 0000 01 RESERVED
+            0001 01 0-2 DEGREES
+            0002 01 3-4 DEGREES
+            0003 01 5-6 DEGREES
+            0004 01 7-6 DEGREES
+            0005 01 9-6 DEGREES
+            0006 01 11-12 DEGREES
+            0007 01 13-14 DEGREES
+            0008 01 15-16 DEGREES
+            0009 01 17-18 DEGREES
+            0010 01 19-20 DEGREES
+            0011 01 21-22 DEGREES
+            0012 01 23-24 DEGREES
+            0013 01 25-26 DEGREES
+            0014 01 27-28 DEGREES
+            0015 01 29-30 DEGREES
+            0016 01 31-32 DEGREES
+            0017 01 33-34 DEGREES
+            0018 01 35-36 DEGREES
+            0019 01 37-38 DEGREES
+            0020 01 39-40 DEGREES
+            0021 01 41-42 DEGREES
+            0022 01 43-44 DEGREES
+            0023 01 45-46 DEGREES
+            0024 01 47-48 DEGREES
+            0025 01 49-50 DEGREES
+            0026 01 51-52 DEGREES
+            0027 01 53-54 DEGREES
+            0028 01 55-56 DEGREES
+            0029 01 57-58 DEGREES
+            0030 01 59-60 DEGREES
+            0031 01 > 60 DEGREES
+            0032 01 INVALID
+            0064 01 MISSING VALUE
+022056 0004 0000 01 UPWARDS PROFILE
+            0001 01 DOWNWARDS PROFILE
+            0002 01 HORIZONTAL
+            0003 01 MISSING VALUE
+022060 0004 0000 01 DROGUE IS DETACHED
+            0001 01 DROGUE IS ATTACHED
+            0002 01 DROGUE STATUS UNKNOWN
+            0007 01 MISSING VALUE
+022061 0011 0000 01 CALM (GLASSY)            HEIGHT     0            M
+            0001 01 CALM (RIPPLED)           HEIGHT     0     - 0.1  M
+            0002 01 SMOOTH (WAVELETS)        HEIGHT     0.1   - 0.5  M
+            0003 01 SLIGHT                   HEIGHT     0.5   - 1.5  M
+            0004 01 MODERATE                 HEIGHT     1.25  - 2.5  M
+            0005 01 ROUGH                    HEIGHT     2.5   - 4    M
+            0006 01 VERY ROUGH               HEIGHT     4     - 6    M
+            0007 01 HIGH                     HEIGHT     6     - 9    M
+            0008 01 VERY HIGH                HEIGHT     9     -14    M
+            0009 01 PHENOMANAL               HEIGHT     OVER   14    M
+            0015 01 MISSING VALUE
+022067 0001 0000 01 SEE COMMON CODE TABLE C3
+022068 0001 0000 01 SEE COMMON CODE TABLE C4
+022120 0013 0000 01 GOOD DATA
+            0001 01 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+            0002 01 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+            0003 01 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+            0004 01 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+            0005 01 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+            0006 02 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS
+                    BACKUP WATER LEVEL SENSOR
+            0007 01 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+            0008 01 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXCEEDED
+            0009 01 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0010 01 MULTIPLE QC CHECKS (ABOVE) FAILED
+            0011 01 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022121 0009 0000 01 OPERATIONAL
+            0001 01 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATE LEVEL DATA
+            0002 01 POSSIBLE DATUM SHIFT
+            0003 01 UNKNOWN STATUS OF WATER LEVEL SENSOR
+            0004 01 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+            0005 01 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+            0006 01 BAD DATA- DO NOT DISSEMINATE
+            0007 01 NO MANUAL WATER LEVEL CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022122 0008 0000 01 GOOD DATA FROM ALL SENSORS
+            0001 01 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+            0002 01 WIND SPEED OUTSIDE OF EXPECTED RANGE
+            0003 01 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+            0004 01 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+            0005 01 MULTIPLE SENSOR FAILED QC CHECKS
+            0006 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022123 0009 0000 01 OPERATIONAL
+            0001 01 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+            0002 01 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+            0003 01 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+            0004 01 UNKNOWN STATUS OF ALL SENSORS
+            0005 01 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+            0006 01 BAD DATA - DO NOT DISSEMINATE
+            0007 01 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+            0031 01 MISSING VALUE
+022252 0006 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 02 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND
+                    PASSED
+            0002 02 AUTOMATIC QUALITY CONTROL PASSED AND MAGNOLIA CHECKED AND
+                    DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    FAILED
+            0005 02 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND
+                    RE-INSERTED
+023001 0005 0000 01 RESERVED
+            0001 01 ARTICLES 1 AND 2
+            0002 01 ARTICLE 3
+            0003 01 ARTICLE 5.2
+            0007 01 MISSING VALUE 
+023002 0016 0000 01 RESERVED
+            0001 01 NUCLEAR REACTOR ON GROUND
+            0002 01 NUCLEAR REACTOR ON SEA
+            0003 01 NUCLEAR REACTOR IN SPACE
+            0004 01 NUCLEAR FULE FACILITY
+            0005 01 RADIOACTIVE WASTE MANAGMENT FACITILY
+            0006 01 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0007 01 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+            0008 01 MANUFACTURE OF RADIO-ISOTOPES
+            0009 01 USE OF RADIO-ISOTOPES
+            0010 01 STORAGE OF RADIO-ISOTOPES
+            0011 01 DISPOSAL OF RADIO-ISOTOPS
+            0012 01 TRANSPORT OF RADIO-ISOTOPES
+            0013 01 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+023003 0008 0000 01 NO RELEASE
+            0001 01 RELEASE TO ATMOSPHERE
+            0002 01 RELEASE TO WATER
+            0003 01 RELEASE TO BOTH ATMOSPHERE AND WATER
+            0004 01 EXPECTED RELEASE TO ATMOSPHERE
+            0005 01 EXPECTED RELEASE TO WATER
+            0006 01 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+            0007 01 MISSING VALUE
+023004 0006 0000 01 NO COUNTERMEASURE
+            0001 01 EVACUATION
+            0002 01 SHELTERING
+            0003 01 PROPHILAXIS
+            0004 01 WATER
+            0007 01 MISSING VALUE
+023005 0004 0000 01 INCIDENT STAT DOES NOT UNDERSTAND WHAT HAPPENED
+            0001 01 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023006 0008 0000 01 NO IMPROVEMENT
+            0001 01 UNSTABLE
+            0002 01 NO DETERIORATION
+            0003 01 IMPROVING
+            0004 01 STABLE
+            0005 01 DETERIORATING
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+023007 0005 0000 01 NO RELEASE
+            0001 01 RELEASE HAS STOPPED
+            0002 01 RELEASE
+            0003 01 RELEASE IS CONTINUING
+            0007 01 MISSING VALUE
+023008 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023009 0004 0000 01 GASEUS
+            0001 01 PARTICULATE
+            0002 01 MIXTURE OF GASEUS AND PARTICULATE
+            0003 01 MISSING VALUE
+023016 0004 0000 01 NO SIGNIFICANT TOXIC HEALTH EFFECT
+            0001 01 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023018 0006 0000 01 RELEASE NO LONGER OCCURRING
+            0001 01 RELEASE STILL OCCURRING
+            0002 01 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+            0003 01 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+            0004 01 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+            0007 01 MISSING VALUE
+023031 0004 0000 01 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+            0001 01 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+023032 0004 0000 01 NO SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0001 01 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN NEXT SIX HOURS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+024003 0005 0000 01 NOBLE GASES
+            0001 01 IODINES
+            0002 01 CAESIUM
+            0003 01 TRANSURANICS
+            0031 01 MISSING VALUE
+025004 0004 0000 01 INCOHERENT
+            0001 01 COHERENT (DOPPLER)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025005 0004 0000 01 LOGATITHM - 2.5 DB
+            0001 01 LINEAR
+            0002 01 SPECIAL
+            0003 01 MISSING VALUE
+025006 0005 0000 01 ZH TO R CONVERSION
+            0001 01 (ZH, ZDR) TO (NO.DO) TO R
+            0002 01 (Z(F1),Z(F2)) TO ATTENUATION TO R
+            0006 01 OTHER
+            0007 01 MISSING VALUE
+025009 0004 0001 01 NONE
+            0002 01 CALIBRATION TARGET OR SIGNAL
+            0003 01 AGAINST RAINGAGES
+            0004 01 AGAINST OTHER INSTRUMENTS (DISTROMETER-ATTENUATION)
+025010 0008 0000 01 NONE
+            0001 01 MAP
+            0002 01 INSERTION OF HIGHER ELEVATION DATA AND MAP
+            0003 01 ANALYSIS OF FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+            0004 01 EXTRACTION OF FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUPPRESSION)
+            0005 01 CLUTTER SUPPRESSION DOPPLER
+            0006 01 MULTIPARAMETER ANALYSIS
+            0015 01 MISSING VALUE
+025011 0004 0000 01 NONE
+            0001 01 MAP OF CORRECTION FACTORS
+            0002 01 INTERPOLATION (AZIMUTH OR ELEVATION)
+            0003 01 MISSING VALUE
+025012 0004 0000 01 HARDWARE
+            0001 01 SOFTWARE
+            0002 01 HARDWARE AND SOFTWARE
+            0003 01 MISSING VALUE
+025013 0001 0001 01 BRIGHT BAND CORRECTION
+025015 0001 0001 01 RADOME ATTENUATION CORRECTION
+025017 0001 0001 01 PRECIPITATION ATTENUATION CORRECTION
+025020 0004 0000 01 FTT (FAST FOURIER TRANSFORM
+            0001 01 PPP (PULSE PAIR PROCESSING
+            0002 01 VPC (VECTOR-PHASE CHANGE)
+            0003 01 MISSING VALUE
+025021 0005 0001 01 SIMPLE AVERAGE
+            0002 01 CONSENSUS AVERAGE
+            0003 01 MEDIAN CHECK
+            0004 01 VERTICAL CONSISTENCY CHECK
+            0005 01 OTHER
+025030 0004 0000 01 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE CRITERIA NOT MET
+            0001 01 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA NOT AVAILABLE
+            0002 01 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+            0003 01 MISSING VALUE
+025032 0004 0000 01 RESERVED
+            0001 01 DATA FROM LOW MODE
+            0002 01 DATA FROM HIGH MODE
+            0003 01 MISSING VALUE
+025033 0004 0000 01 WIND PROFILER OPERATING IN SUBMODE A
+            0001 01 WIND PROFILER OPERATING IN SUBMODE B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025034 0004 0001 01 TEST A PERFORMED AND FAILED
+            0002 01 TEST B PERFORMED AND FAILED
+            0003 01 TEST RESULTS INCONCLUSIVE
+025036 0004 0000 02 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0001 02 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON
+                     THE SAME INDIVIDUAL ATMOSPHERICS
+            0006 01 SINGLE STATION RANGE BEARING TECHNIQUE
+            0015 01 MISSING VALUE
+025040 0010 0000 01 NON-SPECIFIC MODE
+            0001 01 FIRST GUESS DATA
+            0002 01 CLOUD DATA
+            0003 01 AVERAGE VECTOR DATA
+            0004 01 PRIMARY DATA
+            0005 01 GUESS DATA
+            0006 01 VECTOR DATA
+            0007 01 TRACER DATA; THE IMAGE
+            0008 01 TRACER DATA TO NEXT IMAGE
+            0015 01 MISSING VALUE
+025041 0004 0000 01 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+            0001 01 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025042 0004 0000 01 SPEED ORIGINALLY REPORTED IN METERS PER SECOND
+            0001 01 SPEED ORIGINALLY REPORTED USING CODE TABLE 2251, FM 13
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025045 0020 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+            0016 01 CHANNEL 16 PRESENT - (SET TO 1 PRESENT)
+            0017 01 CHANNEL 17 PRESENT - (SET TO 1 PRESENT)
+            0018 01 CHANNEL 18 PRESENT - (SET TO 1 PRESENT)
+            0019 01 CHANNEL 19 PRESENT - (SET TO 1 PRESENT)
+            0020 01 CHANNEL 20 PRESENT - (SET TO 1 PRESENT)
+025046 0004 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+025047 0003 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+025048 0015 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+            0007 01 CHANNEL  7 PRESENT - (SET TO 1 PRESENT)
+            0008 01 CHANNEL  8 PRESENT - (SET TO 1 PRESENT)
+            0009 01 CHANNEL  9 PRESENT - (SET TO 1 PRESENT)
+            0010 01 CHANNEL 10 PRESENT - (SET TO 1 PRESENT)
+            0011 01 CHANNEL 11 PRESENT - (SET TO 1 PRESENT)
+            0012 01 CHANNEL 12 PRESENT - (SET TO 1 PRESENT)
+            0013 01 CHANNEL 13 PRESENT - (SET TO 1 PRESENT)
+            0014 01 CHANNEL 14 PRESENT - (SET TO 1 PRESENT)
+            0015 01 CHANNEL 15 PRESENT - (SET TO 1 PRESENT)
+025049 0005 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+025051 0006 0001 01 CHANNEL  1 PRESENT - (SET TO 1 PRESENT)
+            0002 01 CHANNEL  2 PRESENT - (SET TO 1 PRESENT)
+            0003 01 CHANNEL  3 PRESENT - (SET TO 1 PRESENT)
+            0004 01 CHANNEL  4 PRESENT - (SET TO 1 PRESENT)
+            0005 01 CHANNEL  5 PRESENT - (SET TO 1 PRESENT)
+            0006 01 CHANNEL  6 PRESENT - (SET TO 1 PRESENT)
+025053 0006 0001 01 GOOD
+            0002 01 REDUNDANT
+            0003 01 QUESTIONABLE
+            0004 01 BAD
+            0005 01 EXPERIMENTAL
+            0006 01 PRECIPITATING
+025069 0007 0001 01 SMOOTHED
+            0002 01 BASELINE ADJUSTED
+            0003 01 NORMALIZED TIME INTERVAL
+            0004 01 OUTLIER CHECKED
+            0005 01 PLAUSIBILITY CHECKED
+            0006 01 CONSISTENCY CHECKED
+            0007 01 INTERPOLATED
+025086 0004 0000 01 DEPTHS ARE NOT CORRECTED
+            0001 01 DEPTHS ARE CORRECTED
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025093 0003 0001 01 NO CORRECTION
+            0002 01 VERTICAL VELOCITY CORRECTION
+            0007 01 ALL CORRECTIONS
+025095 0001 0001 02 ALTIMETER OPERATING (SET TO 0 IF NOMINAL, SET TO
+                     BACKUP)
+025096 0004 0001 01 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+            0002 03 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF
+                    NORMAL DATA TAKING EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE)
+                    BITS 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL
+            0003 01 CHANNEL 2 (0 IF ON, 1 IF OFF)
+            0004 01 CHANNEL 3 (0 IF ON, 1 IF OFF)
+025097 0011 0000 01 RANGES BETWEEN 0 AND 30 CM
+            0001 01 RANGES BETWEEN 30 AND 60 CM
+            0002 01 RANGES BETWEEN 60 AND 90 CM
+            0003 01 RANGES BETWEEN 90 AND 120 CM
+            0004 01 RANGES BETWEEN 120 AND 150 CM
+            0005 01 RANGES BETWEEN 150 AND 180 CM
+            0006 01 RANGES BETWEEN 180 AND 210 CM
+            0007 01 RANGES BETWEEN 210 AND 240 CM
+            0008 01 RANGES BETWEEN 240 AND 270 CM
+            0009 01 RANGES LARGER THAN 270 CM
+            0015 01 MISSING VALUE
+025098 0008 0001 01 KU BAND RANGE
+            0002 01 C BAND RANGE
+            0003 01 KU BAND SWH
+            0004 01 C BAND SWH
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT
+            0006 01 C BAND SCATTEROMETER COEFFICIENT
+            0007 01 OFF NADIR ANGLE FROM KU BAND WVEFORM PARAMETERS
+            0008 01 OFF NADIR FROM PLATFORM
+025099 0006 0001 01 KU BAND RANGE INSTRUMENTAL CORRECTION
+            0002 01 C BAND RANGE INSTRUMENTAL CORRECTION
+            0003 01 KU BAND SWH INSTRUMENTAL CORRECTION
+            0004 01 C BAND SWH INSTRUMENTAL CORRECTION
+            0005 01 KU BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+            0006 01 C BAND SCATTEROMETER COEFFICIENT INSTRUMENTAL CORRECTION
+025110 0006 0001 02 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING DEFAULT PARAMETERS
+            0002 01 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION.
+                    CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+            0003 01 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+            0004 01 NOMINAL CHIRP REPLICA USED
+            0005 01 RECONSTRUCTED CHIRP USED
+            0006 01 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
+025120 0004 0000 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                     2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD 
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025122 0004 0000 01 HARDWARE CONFIGURATION FOR RF IS A
+            0001 01 HARDWARE CONFIGURATION FOR RF IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025123 0004 0000 01 HARDWARE CONFIGURATION FOR HPA IS A
+            0001 01 HARDWARE CONFIGURATION FOR HPA IS B
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025124 0004 0000 01 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+            0001 02 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL
+                    2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+025144 0014 0001 01 PIXEL IS AFFECTED BY RFI EFFECTS
+            0002 01 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON SUN ALIAS
+            0003 01 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS FREE ZONE
+            0004 01 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+            0005 01 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+            0006 01 PIXEL IS LOCATED IN ZONE WHERE A MOON ALIAS WAS RECONSTRUCTED
+            0007 01 PIXEL IS LOCATED IN ZONE WHERE SUN REFLECTION HAS BEEN DETECTED
+            0008 01 PIXEL IS LOCATED IN ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+            0009 02 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS PIXEL
+            0010 02 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPOSITE POLARISATION
+                    DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROSS-POLARISATION LEAKAGE
+            0011 02 DIRECT MOON CORRECTION HAS BENN PERFORMED DURING IMAGE RECONSTRUCTION OF
+                    THIS PIXEL
+            0012 02 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION IF THIS PIXEL
+            0013 02 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE 
+                    RECONSTRUCTION OF THIS IMAGE
+026010 0025 0001 01 0100 INCLUDED
+            0002 01 0200 INCLUDED
+            0003 01 0300 INCLUDED
+            0004 01 0400 INCLUDED
+            0005 01 0500 INCLUDED
+            0006 01 0600 INCLUDED
+            0007 01 0700 INCLUDED
+            0008 01 0800 INCLUDED
+            0009 01 0900 INCLUDED
+            0010 01 1000 INCLUDED
+            0011 01 1100 INCLUDED
+            0012 01 1200 INCLUDED
+            0013 01 1300 INCLUDED
+            0014 01 1400 INCLUDED
+            0015 01 1500 INCLUDED
+            0016 01 1600 INCLUDED
+            0017 01 1700 INCLUDED
+            0018 01 1800 INCLUDED
+            0019 01 1900 INCLUDED
+            0020 01 2000 INCLUDED
+            0021 01 2100 INCLUDED
+            0022 01 2200 INCLUDED
+            0023 01 2300 INCLUDED
+            0024 01 2400 INCLUDED
+            0025 01 UNKNOWN MIXTURE OF HOURS
+029001 0006 0000 01 GNOMONIC PROJECTION
+            0001 01 POLAR STEREOGRAPHIC PROJECTION
+            0002 01 LAMBERT'S CONFORMAL CONIC PROJECTION
+            0003 01 MERCATOR'S PROJECTION
+            0004 01 SCANNING CONE (RADAR)
+            0007 01 MISSING VALUE
+029002 0004 0000 01 CARTESIAN
+            0001 01 POLAR
+            0002 01 OTHER
+            0007 01 MISSING VALUE
+030031 0013 0000 01 PPI
+            0001 01 COMPOSITE
+            0002 01 CAPPI
+            0003 01 VERTICAL SECTION
+            0004 01 ALPHANUMERIC DATA
+            0005 01 MAP OF SUBJECT CLUTTER
+            0006 01 MAP
+            0007 01 TEST PICTURE
+            0008 01 COMMENTS
+            0009 01 MAP OF GROUND OCCULTATION
+            0010 01 MAP OF RADAR BEAM HEIGHT
+            0014 01 OTHER
+            0015 01 MISSING VALUE
+030032 0009 0001 01 MAP
+            0002 01 SATELLITE IR
+            0003 01 SATELLITE VIS
+            0004 01 SATELLITE WV
+            0005 01 SATELLITE MULTISPECTRAL
+            0006 01 SYNOPTIC OBSERVATIONS
+            0007 01 FORECAST PARAMETERS
+            0008 01 LIGHTNING DATA
+            0015 01 OTHER DATA
+031021 0004 0001 01 1 BIT INDICATOR OF QUALITY, 0= GOOD; 1=SUSPECT OR BAD
+            0002 02 2 BIT INDICATOR OF QUALITY, 0= GOOD; 1= SLIGHTLY SUSPECTED;
+                    2= HIGHLY SUSPECTED; 3=BAD
+            0007 01 PERCENTAGE CONFIDENCE
+            0063 01 MISSING VALUE
+031031 0001 0001 01 DATA NOT PRESENT
+033002 0004 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SUSPECT
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033003 0005 0000 01 DATA NOT SUSPECT
+            0001 01 DATA SLIGHTLY SUSPECT
+            0002 01 DATA HIGHTLY SUSPECT
+            0003 01 DATA CONSIDERED UNFIT FOR USE
+            0007 01 MISSING VALUE
+033005 0023 0001 01 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+            0002 01 PRESSURE DATA SUSPECT
+            0003 01 WIND DATA SUSPECT
+            0004 01 DRY-BULB TEMPERATURE DATA SUSPECT
+            0005 01 WET-BULB TEMPERATURE DATA SUSPECT
+            0006 01 HUMIDITY DATA SUSPECT
+            0007 01 GROUND TEMPERATURE DATA SUSPECT
+            0008 01 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+            0009 01 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+            0010 01 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+            0011 01 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+            0012 01 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+            0013 01 CLOUD DATA SUSPECT
+            0014 01 VISIBILITY DATA SUSPECT
+            0015 01 PRESENT WEATHER DATA SUSPECT
+            0016 01 LIGHTNING DATA SUSPECT
+            0017 01 ICE DEPOSIT DATA SUSPECT
+            0018 01 PRECIPITATION DATA SUSPECT
+            0019 01 STATE OF GROUND DATA SUSPECT
+            0020 01 SNOW DATA SUSPECT
+            0021 01 WATER CONTENT DATA SUSPECT
+            0022 01 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+            0023 01 SUNSHINE DATA SUSPECT
+033006 0005 0000 01 SELF-CHECK OK
+            0001 01 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+            0002 01 AT LEAST ONE ALARM ACTIVE
+            0003 01 SENSOR FAILURE
+            0007 01 MISSING VALUE
+033015 0016 0000 01 PASSED ALL CHECKS
+            0001 01 MISSING-DATA CHECK
+            0002 01 DESCENDING/REASCENDING BALLOON CHECK
+            0003 01 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+            0004 01 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+            0005 01 SUPERADIABATIC LAPSE RATE CHECK
+            0006 01 LIMITING ANGLES CHECK
+            0007 01 ASCENSION RATE CHECK
+            0008 01 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+            0009 01 BALLOON OVERHEAD CHECK
+            0010 01 WIND SPEED CHECK
+            0011 01 WIND DIRECTION CHECK
+            0012 01 DEPENDENCY CHECK
+            0013 01 DATA VALID BUT MODIFIED
+            0014 01 DATA OUTLIER CHECK
+            0063 01 MISSING DATA
+033020 0008 0000 01 GOOD
+            0001 01 INCONSISTENT
+            0002 01 DOUBTFUL
+            0003 01 WRONG
+            0004 01 NOT CHECKED
+            0005 01 HAS BEEN CHECKED
+            0006 01 RESERVED
+            0007 01 MISSING VALUE
+033021 0004 0000 01 WITHIN LIMITS
+            0001 01 OUTSIDE LIMITS
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033022 0004 0000 01 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+            0001 01 DUBIOUS (NO IDENTICAL REPORT HAVE BEEN RECEIVED)
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033023 0004 0000 01 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+            0001 01 LATEST KNOWN (NO LOCATION OVER CORRESPONDING PASS)
+            0002 01 DUBIOUS
+            0003 01 MISSING VALUE
+033024 0010 0000 01 RESERVED
+            0001 01 EXELLENT - WITHIN 3 METRES
+            0002 01 GOOD - WITHIN 10 METRES
+            0003 01 FAIR - WITHIN 20 METRES
+            0004 01 POOR - MORE THAN 20 METRES
+            0005 01 EXELLENT -WITHIN 10 FEET
+            0006 01 GOOD WITHIN-30 FEET
+            0007 01 FAIR WITHIN 60 FEET
+            0008 01 POOR - MORE THAN 60 FEET
+            0015 01 MISSING VALUE
+033025 0005 0000 01 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+            0001 01 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+            0002 01 TIME, LATITUDE AND LONGITUDE INTERPOLATED
+            0003 01 TIME, LATITUDE AND LONGITUDE REPORTED
+            0007 01 MISSING VALUE
+033026 0010 0000 01 NORMAL OPERATIONS - MEASUREMENT MODE
+            0001 01 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+            0002 01 SMALL RH
+            0003 01 HUMIDITY ELEMENT IS WET
+            0004 01 HUMIDITY ELEMENT IS CONTAMINATED
+            0005 01 HEATER FAIL
+            0006 01 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+            0007 01 SINGLE VALIDITY BAD
+            0008 01 NUMERIC ERROR
+            0063 01 MISSING VALUE
+033027 0005 0000 01 RADIUS >= 1500 M
+            0001 01 500 M <= RADIUS < 1500 M
+            0002 01 250 M <= RADIUS < 500 M
+            0003 01 RADIUS < 250 M
+            0007 01 MISSING VALUE
+033028 0006 0000 01 RESERVED
+            0001 01 NOMINAL
+            0002 01 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+            0003 01 DEGRADED BY INSTRUMENT ERROR
+            0004 01 DEGRADED BY CORRUPTED/MISSING ADF
+            0007 01 MISSING
+033030 0007 0001 01 DO NOT USE SCAN FOR PRODUCT GENERATION
+            0002 01 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+            0003 01 DATA GAP PRECEDES THIS SCAN
+            0004 01 NO CALIBRATION
+            0005 01 NO EARTH LOCATION
+            0006 01 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+            0007 01 INSTRUMENT STATUS CHANGED WITH THIS SCAN
+033031 0021 0001 01 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREVIOUS GOOD TIME
+            0002 01 TIME FIELD IS BAD AND CAN�~@~YT BE INFERRED FROM THE PREVIOUS GOOD TIME
+            0003 04 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH
+                    PREVIOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR MAY 
+                    NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE SCAN LINE
+                     STATUS FLAGS FOR ATOVS)
+            0004 02 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN
+                      TIMES THAT HAVE BEEN PREVIOUSLY ACCEPTED
+            0005 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+            0006 03 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED 
+                    NUMBER OF SCAN LINES BECAUSE OF PROXIMATY TO START OR
+                     END OF DATA OR TO A DATA GAP
+            0007 01 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT PRT DATA
+            0008 01 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+            0009 01 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+            0010 01 UNCALIBRATED DUE TO INSTRUMENT MODE
+            0011 01 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF SPACE VIEW
+            0012 01 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF BLACK BODY
+            0013 01 NOT EARTH LOCATED BECAUSE OF BAD TIME
+            0014 03 EARTH LOCATION QUESTIONABLE BECAUSE OF
+                     QUESTIONABLE TIME CODE (SEE TIME PROBLEM
+                     CODE BITS)
+            0015 02 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT
+                     WITH REASONABLENESS CHECK
+            0016 01 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+            0017 01 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHECK
+            0018 01 SCAN LINE CALIBRATION COLD BLACK BODY
+            0019 01 SCAN LINE CALIBRATION WARM BLACK BODY
+            0020 01 SCAN LINE CALIBRATION SPACE VIEW
+            0021 01 EARTH VIEW
+033032 0006 0001 01 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+            0002 01 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+            0003 01 NO GOOD PRTS FOR THIS LINE
+            0004 01 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+            0005 01 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+            0006 01 SOME BAD PRT TEMPS ON THIS LINE
+033033 0023 0001 01 SET IF SECONDARY CALIBRATION USED
+            0002 02 BRIGHTNESS TEMPERATURE IN CHANNEL 1 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0003 02 BRIGHTNESS TEMPERATURE IN CHANNEL 2 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0004 02 BRIGHTNESS TEMPERATURE IN CHANNEL 3 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0005 02 BRIGHTNESS TEMPERATURE IN CHANNEL 4 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0006 02 BRIGHTNESS TEMPERATURE IN CHANNEL 5 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0007 02 BRIGHTNESS TEMPERATURE IN CHANNEL 6 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0008 02 BRIGHTNESS TEMPERATURE IN CHANNEL 7 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0009 02 BRIGHTNESS TEMPERATURE IN CHANNEL 8 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0010 02 BRIGHTNESS TEMPERATURE IN CHANNEL 9 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0011 02 BRIGHTNESS TEMPERATURE IN CHANNEL 10 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0012 02 BRIGHTNESS TEMPERATURE IN CHANNEL 11 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0013 02 BRIGHTNESS TEMPERATURE IN CHANNEL 12 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0014 02 BRIGHTNESS TEMPERATURE IN CHANNEL 13 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0015 02 BRIGHTNESS TEMPERATURE IN CHANNEL 14 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0016 02 BRIGHTNESS TEMPERATURE IN CHANNEL 15 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0017 02 BRIGHTNESS TEMPERATURE IN CHANNEL 16 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0018 02 BRIGHTNESS TEMPERATURE IN CHANNEL 17 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0019 02 BRIGHTNESS TEMPERATURE IN CHANNEL 18 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0020 02 BRIGHTNESS TEMPERATURE IN CHANNEL 19 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0021 02 BRIGHTNESS TEMPERATURE IN CHANNEL 20 IS PHYSICALLY UNREASONABLE OR HAS NOT
+                    BEEN CALCULATED DUE TO CALIBRATION PROBLEMS
+            0022 01 SET IF ALL CHANNELS ARE MISSING
+            0023 01 SUSPECT
+033035 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+            0002 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+            0005 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+            0006 01 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE 
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+033037 0020 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+033038 0009 0001 01 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+            0002 01 GALILEO SATELLITES USED
+            0003 01 GLONASS SATELLITES USED
+            0004 01 GPS SATELLITES USED
+            0005 01 METEOROLOGICAL DATA APPLIED
+            0006 01 ATMOSPHERIC LOADING CORRECTION APPLIED
+            0007 01 OCEAN TIDE LOADING APPLIED
+            0008 01 CLIMATE QUALITY DATA PROCESSING
+            0009 01 NEAR-REAL TIME DATA PROCESSING 
+033039 0009 0001 01 NON-NOMINAL QUALITY
+            0002 01 OFFLINE PRODUCT
+            0003 01 ASCENDING OCCULTATION FLAG
+            0004 01 EXCESS PHASE PROCESSING NON-NOMINAL
+            0005 01 BENDING ANGLE PROCESSING NON-NOMINAL
+            0006 01 REFRACTIVITY PROCESSING NON-NOMINAL
+            0007 01 METEOROLOGICAL PROCESSING NON-NOMINAL
+            0014 01 BACKGROUND PROFILE NON-NOMINAL
+            0015 01 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
+033041 0004 0000 01 THE FOLLOWING VALUE IS THE TRUE VALUE
+            0001 02 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+            0002 02 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE 
+                    (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+            0003 01 MISSING VALUE
+033042 0005 0000 01 EXCLUSIVE LOWER LIMIT (>)
+            0001 01 INCLUSIVE LOWER LIMIT (>=)
+            0002 01 EXCLUSIVE UPPER LIMIT (<)
+            0003 01 INCLUSIVE UPPER LIMIT (=<)
+            0007 01 MISSING VALUE
+033043 0004 0001 02 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED
+            0002 02 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON
+                    CHANNEL. LAND MDS RESERVED.
+            0003 01 NADIR VIEW CONTAINS DAY TIME DATA
+            0004 01 FORWARD VIEW CONTAINS DAY TIME DATA
+033044 0014 0001 01 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0002 01 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0003 01 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+            0004 01 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+            0005 01 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+            0006 01 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+            0007 01 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+            0008 01 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+            0009 01 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+            0010 01 DATA SET MISSING
+            0011 01 INVALID DOWNLINK PARAMETERS
+            0012 02 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH
+                    CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+            0013 02 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM
+                    NUMBER OF ITERATIONS
+            0014 03 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL
+                    PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT
+                    IS GREATER THAN A MINIMUM THRESHOLD
+033047 0026 0001 01 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+            0002 01 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+            0003 01 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE DETECTED
+            0004 01 ERRORS DETECTED BY ON-BOARD COMPUTER
+            0005 01 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+            0006 01 RX DELAY FAULT. RX DISTANCE OUT OF RANGE
+            0007 01 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+            0012 01 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+            0013 01 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+            0014 01 RESERVED
+            0015 01 KU OCEAN RETRACKING ERROR
+            0016 01 S OCEAN RETRACKING ERROR
+            0017 01 KU ICE 1 RETRACKING ERROR
+            0018 01 S ICE 1 RETRACKING ERROR
+            0019 01 KU ICE 2 RETRACKING ERROR
+            0020 01 S ICE 2 RETRACKING ERROR
+            0021 01 KU SEA ICE RETRACKING ERROR
+            0022 01 ARITHMETIC FAULT ERROR
+            0023 01 METEO DATA STATE. NO MAP
+            0024 01 METEO DATA STATE. 1 MAP
+            0025 01 METEO DATA STATE 2 MAPS DEGRADED
+            0026 01 METEO DATA STATE 2 MAPS NOMINAL
+            0027 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+            0028 01 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECTED
+            0029 01 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, SEVERAL ERRORS
+            0030 01 ORBIT PROPAGATOR STATUS FOR INITIALISATION MODE, WARNING DETECTED
+033048 0004 0000 01 INVERSION SUCCESSFUL
+            0001 01 INVERSION NOT SUCCESSFUL
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033049 0004 0000 01 EXTERNAL WIND DIRECTION USED DURING INVERSION
+            0001 01 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+            0002 01 RESERVED
+            0003 01 MISSING VALUE
+033050 0008 0000 01 UNQUALIFIED
+            0001 01 CORRECT VALUE (ALL CHECKS PASSED)
+            0002 01 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER FROM CLIMATOLOGY)
+            0003 01 PROBABLY BAD (SPIKE, GRADIENT, �~E IF OTHER TESTS PASSED)
+            0004 02 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL 
+                    INSTABILITY, CONSTANT PROFILE)
+            0005 01 VALUE MODIFIED DURING QUALITY CONTROL
+            0008 01 INTERPOLATED VALUE
+            0015 01 MISSING VALUE
+033052 0020 0001 01 DATA BLOCK 1 INVALID (S BAND)
+            0002 01 DATA BLOCK 2 INVALID (S BAND)
+            0003 01 DATA BLOCK 3 INVALID (S BAND)
+            0004 01 DATA BLOCK 4 INVALID (S BAND)
+            0005 01 DATA BLOCK 5 INVALID (S BAND)
+            0006 01 DATA BLOCK 6 INVALID (S BAND)
+            0007 01 DATA BLOCK 7 INVALID (S BAND)
+            0008 01 DATA BLOCK 8 INVALID (S BAND)
+            0009 01 DATA BLOCK 9 INVALID (S BAND)
+            0010 01 DATA BLOCK 10 INVALID (S BAND)
+            0011 01 DATA BLOCK 11 INVALID (S BAND)
+            0012 01 DATA BLOCK 12 INVALID (S BAND)
+            0013 01 DATA BLOCK 13 INVALID (S BAND)
+            0014 01 DATA BLOCK 14 INVALID (S BAND)
+            0015 01 DATA BLOCK 15 INVALID (S BAND)
+            0016 01 DATA BLOCK 16 INVALID (S BAND)
+            0017 01 DATA BLOCK 17 INVALID (S BAND)
+            0018 01 DATA BLOCK 18 INVALID (S BAND)
+            0019 01 DATA BLOCK 19 INVALID (S BAND)
+            0020 01 DATA BLOCK 20 INVALID (S BAND)
+033053 0020 0001 01 DATA BLOCK 1 INVALID (KU BAND)
+            0002 01 DATA BLOCK 2 INVALID (KU BAND)
+            0003 01 DATA BLOCK 3 INVALID (KU BAND)
+            0004 01 DATA BLOCK 4 INVALID (KU BAND)
+            0005 01 DATA BLOCK 5 INVALID (KU BAND)
+            0006 01 DATA BLOCK 6 INVALID (KU BAND)
+            0007 01 DATA BLOCK 7 INVALID (KU BAND)
+            0008 01 DATA BLOCK 8 INVALID (KU BAND)
+            0009 01 DATA BLOCK 9 INVALID (KU BAND)
+            0010 01 DATA BLOCK 10 INVALID (KU BAND)
+            0011 01 DATA BLOCK 11 INVALID (KU BAND)
+            0012 01 DATA BLOCK 12 INVALID (KU BAND)
+            0013 01 DATA BLOCK 13 INVALID (KU BAND)
+            0014 01 DATA BLOCK 14 INVALID (KU BAND)
+            0015 01 DATA BLOCK 15 INVALID (KU BAND)
+            0016 01 DATA BLOCK 16 INVALID (KU BAND)
+            0017 01 DATA BLOCK 17 INVALID (KU BAND)
+            0018 01 DATA BLOCK 18 INVALID (KU BAND)
+            0019 01 DATA BLOCK 19 INVALID (KU BAND)
+            0020 01 DATA BLOCK 20 INVALID (KU BAND)
+033060 0004 0000 01 PARAMETER=GOOD
+            0001 01 PARAMETER=BAD
+            0002 01 PARAMETER=RESERVED
+            0003 01 MISSING
+033075 0005 0001 01 GAP IN RAW DATA RECORD DATA DETECTED
+            0002 01 RECORDED TIME IS NOT IN SEQUENCE
+            0003 01 LAMDA MONITORED CALCULATION CANNOT BE CALCULATED
+            0004 02 THE MEASURED TEMPERATURE OF ANY INSTRUMENT COMPONENT
+                    IS OUTSIDE THE ALLOWABLE RANGE
+            0005 02 AT LEAST ONE OF THE MONITORED INSTRUMENT TEMPERATURES
+                    HAS DRIFTED MORE THAN A SPECIFIED TOLERANCE VALUE
+033076 0002 0001 01 LUNAR INTRUSION ON FIRST DEEP SPACE VIEW
+            0002 01 LUNAR INTRUSION ON SECOND DEEP SPACE VIEW
+033077 0012 0001 01 DEGRADED SDR QUALITY
+            0002 01 INVALID SDR QUALITY
+            0003 01 INVALID SDR GEOLOCATION  INFORMATION
+            0004 01 DEGRADED RADIOMETRIC CALIBRATION
+            0005 01 INVALID RADIOMETRIC CALIBRATION
+            0006 01 DEGRADED SPECTRAL CALIBRATION
+            0007 01 INVALID SPECTRAL CALIBRATION
+            0008 01 FRINGE COUNT ERROR DETECTED AND CORRECTED
+            0009 01 DAy/NIGHT INDICATOR
+            0010 01 INVALID RDR DATA
+            0011 01 SIGNIFICANT FRINGE COUNT ERROR DETECTED
+            0012 01 BIT TRIM FAILED
+033078 0005 0000 01 NOMINAL- ALTITUDE AND EPHEMERIS DATA AVAILABLE
+            0001 01 MISSING AT MOST A SMALL GAP OF ALTITUDE AND EPHEMERIS
+            0002 02 MISSING MORE THAN A SMALL GAP OF ALTITUDE AND EPHEMERIS
+                    DATA, BUT NO MORE THAN A GRANULE BOUNDARY
+            0003 01 MISSING MORE THAN GRANULE BOUNDARY OF ALTITUDE AND EPHEMERIS
+            0015 01 MISSING VALUE
+033195 0004 0000 01 DEALIASING NOT USED
+            0001 01 DEALIASING USED
+            0002 01 RESERVED
+            0003 01 MISSING
+033205 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033206 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033207 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033208 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033209 0016 0000 01 DATUM CORRECT
+            0001 01 DATUM PROBABLY CORRECT
+            0002 01 DATUM PROBABLY INCORRECT
+            0003 01 DATUM INCORRECT
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 MISSING VALUE
+033220 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 REPORT REJECTED THROUGH THE NAMELIST
+            0017 01 MODEL SUR. TOO FAR FROM STAT. ALT.
+            0018 01 MISSING STATION ALTITUDE
+            0019 01 REPORT OVER SEA
+            0020 01 REPORT OVER LAND
+            0021 01 REDUNDANT REPORT
+            0022 01 TIME OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 HORIZONTAL POSITION OUT OF RANGE 
+            0025 01 ACTIVATED BY WHITELIST 
+            0026 01 ACTIVATED DUE TO RDB FLAG 
+            0027 01 REJECTED DUE TO RDB FLAG 
+            0028 01 BAD REPORTING PRACTICE
+            0029 01 ALL DATA REJECTED
+            0030 01 NO DATA IN THE REPORT
+033221 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033222 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033223 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033224 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033225 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033226 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033227 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033228 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033229 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 THINNED REPORT
+033230 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033232 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 BLACKLISTED DUE TO DISTANCE FROM REF. POINT
+            0015 01 BLACKLISTED DUE TO MODEL OROGRAPHY
+            0016 01 BLACKLISTED DUE TO LAND/SEA MASK
+            0017 01 STATION ALTITUDE BLACKLISTED
+            0018 01 LONGITUDE BLACKLISTED
+            0019 01 LATITUDE BLACKLISTED
+            0020 01 TIME BLACKLISTED
+            0021 01 DATE BLACKLISTED
+            0022 01 INSTRUMENT TYPE BLACKLISTED
+            0023 01 CODE TYPE BLACKLISTED
+            0024 01 STATION ID BLACKLISTED
+            0025 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0026 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0027 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE NAME BLACKLISTED
+            0030 01 MONTHLY MONITORING
+033233 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 REPORT BLACK LISTED
+            0028 01 REPORT REJECTED
+            0029 01 REPORT PASSIVE
+            0030 01 REPORT ACTIVE
+033234 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 DATUM BLACK LISTED
+            0028 01 DATUM REJECTED
+            0029 01 DATUM PASSIVE
+            0030 01 DATUM ACTIVE
+033236 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 DATUM REJECTED DUE TO REJECTED REPORT
+            0006 01 COMBINED FLAGGING
+            0007 01 DATUM REJECTED DUE TO NAMELIST 
+            0008 01 VERTICAL COORDINATE CHANGE FROM Z TO P
+            0009 01 VERTICAL CONSISTENCY CHECK
+            0010 01 LEVEL SELECTION
+            0011 01 MULTI LEVEL CHECK
+            0012 01 TOO MANY SURFACE DATA/LEVELS
+            0013 01 DUPLICATED DATUM/LEVEL
+            0014 01 NOT AN ANALYSIS VARIABLE
+            0015 01 REPORT OVER SEA
+            0016 01 REPORT OVER LAND
+            0017 01 REDUNDANT LEVEL
+            0018 01 REDUNDANT DATUM
+            0019 01 TOO BIG OBSERVATION ERROR
+            0020 01 TOO BIG DEPARTURE IN ASSIMILATION
+            0021 01 TOO BIG FIRST GUESS DEPARTURE
+            0022 01 REFERENCE LEVEL POSITION OUT OF RANGE
+            0023 01 VERTICAL POSITION OUT OF RANGE
+            0024 01 BAD REPORTING PRACTICE
+            0025 01 ACTIVATED BY WHITELIST
+            0026 01 ACTIVATED DUE TO RDB FLAG
+            0027 01 REJECTED DUE TO RDB FLAG
+            0028 01 MISSING FIRST GUESS VALUE
+            0029 01 MISSING OBSERVED VALUE
+            0030 01 MISSING VERTICAL COORDINATE
+033237 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED 
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033238 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033239 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033240 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033243 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033244 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033245 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 LAYER FORMED BY SUMMING UP
+            0029 01 LAYER FORMED BY THINNING UP
+            0030 01 NOT PREDEFINED LAYER
+033246 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033247 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033248 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 NOT DEFINED
+            0025 01 NOT DEFINED
+            0026 01 NOT DEFINED
+            0027 01 NOT DEFINED
+            0028 01 NOT DEFINED
+            0029 01 NOT DEFINED
+            0030 01 NOT DEFINED
+033249 0030 0001 01 NOT DEFINED
+            0002 01 NOT DEFINED
+            0003 01 NOT DEFINED
+            0004 01 NOT DEFINED
+            0005 01 NOT DEFINED
+            0006 01 NOT DEFINED
+            0007 01 NOT DEFINED
+            0008 01 NOT DEFINED
+            0009 01 NOT DEFINED
+            0010 01 NOT DEFINED
+            0011 01 NOT DEFINED
+            0012 01 NOT DEFINED
+            0013 01 NOT DEFINED
+            0014 01 NOT DEFINED
+            0015 01 NOT DEFINED
+            0016 01 NOT DEFINED
+            0017 01 NOT DEFINED
+            0018 01 NOT DEFINED
+            0019 01 NOT DEFINED
+            0020 01 NOT DEFINED
+            0021 01 NOT DEFINED
+            0022 01 NOT DEFINED
+            0023 01 NOT DEFINED
+            0024 01 BLACKLISTED DUE TO FIRST GUESS DEPARTURE
+            0025 01 BLACKLISTED DUE TO OBSERVED VALUE
+            0026 01 BLACKLISTED DUE TO TYPE OF VERTICAL COORDINATE
+            0027 01 BLACKLISTED DUE TO DISTANCE FROM REFERENCE POINT
+            0028 01 BLACKLISTED DUE TO PRESSURE CODE
+            0029 01 VARIABLE BLACKLISTED
+            0030 01 PRESSURE BLACKLISTED
+033252 0010 0000 01 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+            0001 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+            0002 01 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+            0003 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+            0004 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+            0005 01 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+            0006 01 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECCKED
+            0007 02 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE
+                    AND MANUALLY CHECKED AND FAILED
+            0008 01 MANUALLY CHECKED AND FAILED
+            0015 01 MISSING VALUE
+
+033254 0019 0001 01 U DEPARTURE FROM GUESS
+            0002 01 V DEPARTURE FROM GUESS
+            0003 01 U & V DEPARTURE FROM GUESS
+            0004 01 U ACCELERATION
+            0005 01 V ACCELERATION
+            0006 01 U & V ACCELERATION
+            0007 01 POSSIBLE LAND FEATURE
+            0008 01 U ACCELERATION AND POSSIBLE LAND FEATURE
+            0009 01 V ACCELERATION AND POSSIBLE LAND FEATURE
+            0010 01 U & V ACCELERATION AND POSSIBLE LAND FEATURE
+            0011 01 BAD WIND GUESS
+            0012 01 CORRELATION FAILURE
+            0013 01 SEARCH BOX OFF EDGE OF AREA
+            0014 01 TARGET BOX OFF EDGE OF AREA
+            0015 01 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+            0016 01 TARGET OUTSIDE OF LAT/LONG BOX
+            0017 01 TARGET OUTSIDE OF PRESSURE MIN/MAX
+            0018 01 AUTOEDITOR FLAGGED SLOW VECTOR
+            0019 01 AUTOEDITOR FLAGGED VECTORS
+035000 0011 0011 01 000-099 INTERNATIONAL FM CODES
+            0001 01 100-199 RA I CODES
+            0002 01 200-299 RA II CODES
+            0003 01 300-399 RA III CODES
+            0004 01 400-499 RA IV CODES
+            0005 01 500-599 RA V CODES
+            0006 01 600-699 RA VI CODES
+            0007 01 700-799 ANTARCTIC CODES
+            0008 01 800-999 RESERVED
+            0009 01 1000-1022 NOT USED
+            1023 01 MISSING VALUE
+035001 0004 0000 01 REAL TIME
+            0001 01 NEAR-REAL TIME
+            0002 01 NON-REAL TIME
+            0007 01 MISSING VALUE
+035030 0010 0000 01 NO DISCREPANCIES
+            0001 02 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES
+                    AND PROCEDURES INCLUDINGTHOSE OF MONITORING
+            0002 01 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIMELY MANNER
+            0003 01 INCORRECT ROUTEING DIRECTORIES
+            0004 01 LACK OF FLEXIBILITY IN THE ROUTEING ARRANGEMENTS
+            0005 01 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+            0006 01 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+            0007 01 ROUTEING OF DATA DIFFERENT FROM THE ROUTEING PROVIDED IN THE PLAN
+            0008 01 VARIOUS MALPRACTICES
+            0015 01 MISSING VALUE
+035031 0020 0001 01 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+            0002 01 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+            0003 01 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+            0004 01 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+            0005 01 SOME MESSAGES NOT COMPLETE
+            0006 01 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CONFIDENTLY
+            0007 01 GROSS CODING ERRORS
+            0008 01 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+            0009 01 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+            0010 01 DEFICIENCIES IDENTIFIED AND RECTIFIED
+            0011 01 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+            0012 01 DEFICIENCIES NOT IDENTIFIED
+            0013 01 MEASURING ERRORS
+            0014 01 MUTUAL INCONSISTENCY
+            0015 01 TEMPORAL INCONSISTENCY
+            0016 01 FORECAST ERROR
+            0017 01 BIAS
+            0018 01 IMPROVE SYSTEM OF QUALITY CONTROL
+            0019 01 EXPAND TRAINING PROGRAMMES
+            0123 01 MISSING VALUE
+035032 0010 0001 01 DATA GROUPS MISSING DUE TO RADIO FADING
+            0002 01 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+            0003 01 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+            0004 01 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+            0005 01 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+            0006 01 LACK OF CONSUMABLES
+            0007 01 INSTRUMENT FAILURE
+            0008 01 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+            0009 01 SOME OBSERVING PROGRAMMES CEASED
+            0015 01 MISSING VALUE
+035033 0012 0001 01 NO DEFICIENCY
+            0002 01 OBSERVATIONS NOT MADE REGULARLY
+            0003 01 OBSERVATIONS NOT MADE AT RIGHT TIME
+            0004 01 OBSERVATIONS MADE BUT NOT DISSEMINATED
+            0005 01 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+            0006 01 COLLECTION NOT RECEIVED
+            0007 01 COLLECTION TRANSMITTED LATE
+            0008 01 COLLECTION NOT TRANSMITTED
+            0009 01 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FREQUENCY
+            0010 01 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT REMOTE STATIONS
+            0011 01 NO ALTERNATIVE ARRANGEMENT FOR ROUTEING METEOROLOGICAL OBSERVATION
+            0123 01 MISSING VALUE
+035034 0007 0001 01 SLIGHT IMPROVEMENT
+            0002 01 SIGNIFICANT IMPROVEMENT
+            0003 01 MOST SIGNIFICANT IMPROVEMENT
+            0004 01 STEADY
+            0005 01 DECREASING
+            0006 01 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+            0007 01 MISSING VALUE
+035035 0016 0000 01 RESERVED
+            0001 01 BALLOON BURST
+            0002 01 BALLOON FORCED DOWN BY ICING
+            0003 01 LEAKING OR FLOATING BALLOON
+            0004 01 WEAK OR FADING SIGNAL
+            0005 01 BATTERY FAILURE
+            0006 01 GROUND EQUIPMENT FAILURE
+            0007 01 SIGNAL INTERFERENCE
+            0008 01 RADIOSONDE FAILURE
+            0009 01 EXCESSIVE MISSING DATA FRAMES
+            0010 01 RESERVED
+            0011 01 EXCESSIVE MISSING TEMPERATURE
+            0012 01 EXCESSIVE MISSING PRESSURE
+            0013 01 USER TERMINATED
+            0030 01 OTHER
+            0031 01 MISSING VALUE
+040011 0004 0001 01 MEAN SEA SURFACE (MSS) INTERPOLATION FLAG
+            0002 01 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+            0003 01 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+            0004 01 METEOROLOGICAL DATA INTERPOLATION FLAG (0= 4 POINTS OVER OCEAN, 1=LESS THAN 4 POINTS)
+040012 0003 0001 01 18.7 GHZ BRIGHTNESS TEMPERATURE
+            0002 01 23.8 GHZ BRIGHTNESS TEMPERATURE
+            0003 01 34 GHZ BRIGHTNESS TEMPERATURE
+040013 0005 0000 01 INTERPOLATION WITH NO GAP BETWEEN JMR DATA
+            0001 01 INTERPOLATION WITH GAP BETWEEN JMR DATA
+            0002 01 EXTRAOLATION OF JMR DATA
+            0003 01 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+            0007 01 MISSING VALUE
+040203 0012 0001 01 WARM LOAD IS CHANGING TOO RAPIDLY
+            0002 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR  6.8 GHz CHANNEL
+            0003 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 10.7 GHz CHANNEL
+            0004 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 18.7 GHz CHANNEL
+            0005 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 23.8 GHz CHANNEL
+            0006 01 COLD LOAD MOON CONTAMINATION PRESENT IN SCAN FOR 37.0 GHz CHANNEL
+            0007 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR  6.8 GHz CHANNEL
+            0008 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 10.7 GHz CHANNEL
+            0009 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 18.7 GHz CHANNEL
+            0010 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 23.8 GHz CHANNEL
+            0011 01 WARM LOAD PRESENCE OF TERMAL GRADIENT IN SCAN FOR 37.0 GHz CHANNEL
+            0012 01 ALL MISSING VALUE
+049194 0014 0001 01 PASSED QUALITY CONTROL
+            0002 01 OUTSIDE TIME WINDOW
+            0003 01 ABOVE LAND
+            0004 01 OUTSIDE ENTIRE GRID
+            0005 01 WAVE HEIGHT OUT OF RANGE
+            0006 01 TOO HIGH ALONG TRACK JUMP
+            0007 01 TOO SHORT ALONG TRACK JUMP
+            0008 01 TOO HIGH ALONG TRACK VARIANCE
+            0009 01 OUTSIDE CONFIDENCE LIMIT
+            0010 01 DOUBLE OBSERVATION
+            0011 01 PEAKINESS ABOVE THRESHOLD
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
+049193 0014 0001 01 EXELLENT (COST LESS THAN 0.1)
+            0002 01 GOOD (COST LESS THAN 0.5)
+            0003 01 QUESTIONABLE (COST LARGER THAN 0.5)
+            0004 01 RESULTS UNTABLE
+            0005 01 OBSERVED SAR SPECTRUM REJECTED
+            0006 01 WAM FIRST GUESS REJECTED
+            0007 01 SIMULATED SAR REJECTED
+            0008 01 NO AZIMUTH CUT-OFF ADJUSTMENT
+            0009 01 RESERVED
+            0010 01 RESERVED
+            0011 01 RESERVED
+            0012 01 RESERVED
+            0013 01 RESERVED
+            0014 01 RESERVED
diff --git a/bufrtables/D0000000000000014000.TXT b/bufrtables/D0000000000000014000.TXT
new file mode 100755
index 0000000..3f9467d
--- /dev/null
+++ b/bufrtables/D0000000000000014000.TXT
@@ -0,0 +1,4859 @@
+ 300002  2 000002
+           000003
+ 300003  3 000010
+           000011
+           000012
+ 300004  9 300003
+           000013
+           000014
+           000015
+           000016
+           000017
+           000018
+           000019
+           000020
+ 300010  4 300003
+           101000
+           031001
+           000030
+ 301001  2 001001
+           001002
+ 301002  3 001003
+           001004
+           001005
+ 301003  3 001011
+           001012
+           001013
+ 301004  4 001001
+           001002
+           001015
+           002001
+ 301005  2 001035
+           001034
+ 301011  3 004001
+           004002
+           004003
+ 301012  2 004004
+           004005
+ 301013  3 004004
+           004005
+           004006
+ 301014  3 102002  
+           301011
+           301012
+ 301021  2 005001
+           006001
+ 301022  3 005001
+           006001
+           007001
+ 301023  2 005002
+           006002
+ 301024  3 005002
+           006002
+           007001
+ 301025  3 301023
+           004003
+           301012
+ 301026  7 301021
+           004003
+           004003
+           004004
+           004004
+           004005
+           004005
+ 301027  5 008007
+           101000
+           031001
+           301028
+           008007
+ 301028  8 008040
+           033042
+           007010
+           101000
+           031002
+           301023
+           019007
+           008040
+ 301031  5 301001
+           002001
+           301011
+           301012
+           301022
+ 301032  5 301001
+           002001
+           301011
+           301012
+           301024
+ 301033  5 001005
+           002001
+           301011
+           301012
+           301021
+ 301034  5 001005
+           002001
+           301011
+           301012
+           301023
+ 301035  7 001005
+           001012
+           001013
+           002001
+           301011
+           301012
+           301023
+ 301036  5 301003
+           002001
+           301011
+           301012
+           301023
+ 301037  6 301001
+           002011
+           002012
+           301011
+           301012
+           301022
+ 301038  6 301001
+           002011
+           002012
+           301011
+           301012
+           301024
+ 301039  6 301003
+           002011
+           002012
+           301011
+           301012
+           301023
+ 301040  6 301003
+           002011
+           002012
+           301011
+           301012
+           301024
+ 301041  5 001007
+           002021
+           002022
+           301011
+           301012
+ 301042  2 301041
+           301021
+ 301043  5 001007
+           002023
+           301011
+           301013
+           301021
+ 301044  5 001007
+           002024
+           301011
+           301013
+           301021
+ 301045  9 301011
+           301012
+           201138
+           202131
+           004006
+           201000
+           202000
+           304030
+           304031
+ 301046 10 001007
+           001012
+           002048
+           021119
+           025060
+           202124
+           002026
+           002027
+           202000
+           005040
+ 301047 15 001007
+           025060
+           001033
+           001034
+           001012
+           301045
+           002021
+           301011
+           301012
+           201138
+           202131
+           004006
+           201000
+           202000
+           301023
+ 301048 14 002104
+           002121
+           002113
+           002026
+           002027
+           002111
+           002140
+           202127
+           001013
+           202126
+           007001
+           202000
+           025010
+           021064
+ 301049  5 002111
+           002112
+           021062
+           021063
+           021065
+ 301051  6 001006
+           002061
+           301011
+           301012
+           301021
+           008004
+ 301055  7 001005
+           002001
+           301011
+           301012
+           301021
+           001012
+           001014
+ 301062  3 101000
+           031001
+           301001
+ 301065  8 001006
+           001008
+           002001
+           002002
+           002005
+           002062
+           002070
+           002065
+ 301066  6 301011
+           301013
+           301023
+           007004
+           002064
+           008004
+ 301070  3 002143
+           002142
+           002144
+ 301071  5 001007
+           001031
+           002020
+           002028
+           002029
+ 301072  4 301071
+           301011
+           301013
+           301021
+ 301074  4 002143
+           002142
+           002145
+           002146
+ 301075  6 301001
+           001015
+           301024
+           008021
+           301011
+           301012
+ 301076  3 002011
+           002143
+           002142
+ 301090  6 301004
+           301011
+           301012
+           301021
+           007030
+           007031
+ 301091 10 002180
+           002181
+           002182
+           002183
+           002184
+           002179
+           002186
+           002187
+           002188
+           002189
+ 301092  9 001011
+           001003
+           002001
+           301011
+           301012
+           301021
+           007030
+           007031
+           033024
+ 301093  3 301036
+           007030
+           007031
+ 301110  5 301001
+           001011
+           002011
+           002014
+           002003
+ 301111  6 301001
+           001011
+           002011
+           002013
+           002014
+           002003
+ 301112  5 001006
+           002011
+           002013
+           002014
+           002003
+ 301113  3 008021
+           301011
+           301013
+ 301114  5 301021
+           007030
+           007031
+           007007
+           033024
+ 301120  4 301001
+           001094
+           002011
+           301121
+ 301121  5 008041
+           301122
+           301021
+           007031
+           007007
+ 301122  7 301011
+           301012
+           201135
+           202130
+           004006
+           202000
+           201000
+ 301123 33 102002
+           008041
+           001062
+           301001
+           001094
+           002011
+           001018
+           001095
+           025061
+           025068
+           001082
+           001083
+           001081
+           002067
+           002066
+           002014
+           025067
+           025065
+           025066
+           002095
+           002096
+           002097
+           002016
+           002083
+           002080
+           002081
+           001093
+           002084
+           002085
+           002086
+           002082
+           008041
+           301011
+ 301125  6 001033
+           001034
+           025060
+           001007
+           002019
+           001012
+ 301193  5 001007
+           001031
+           002196
+           002221
+           002222
+ 301194  9 001194
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301195  9 001195
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301196  7 301003
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301197  9 001006
+           001008
+           002061
+           002062
+           002002
+           002005
+           002070
+           002063
+           002001
+ 301198  9 001011
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301200  2 001032
+           033194
+ 301201  2 101003
+           033193
+ 301202  2 001031
+           001032
+ 301237 12 001007
+           001012
+           002021
+           301011
+           004004
+           004005
+           201138
+           202131
+           004006
+           201000
+           202000
+           301023
+ 301238 14 002104
+           002121
+           002113
+           002026
+           002027
+           002111
+           002192
+           202127
+           001013
+           202126
+           007001
+           202000
+           025010
+           021194
+ 301239  5 002111
+           002112
+           021192
+           021193
+           021195
+ 301240  5 201131
+           202129
+           022021
+           201000
+           202000
+ 301241  5 201141
+           202130
+           007001
+           201000
+           202000
+ 301242  6 021207
+           021208
+           021209
+           021210
+           021211
+           021212
+ 301250  4 301193
+           301011
+           301013
+           301021
+ 302001  4 010004
+           010051
+           010061
+           010063
+ 302002  5 010004
+           007004
+           010003
+           010061
+           010063
+ 302003  9 011011
+           011012
+           012004
+           012006
+           013003
+           020001
+           020003
+           020004
+           020005
+ 302004  7 020010
+           008002
+           020011
+           020013
+           020012
+           020012
+           020012
+ 302005  4 008002
+           020011
+           020012
+           020013
+ 302006  4 010004
+           010051
+           010062
+           010063
+ 302011  3 302001
+           302003
+           302004
+ 302012  3 302002
+           302003
+           302004
+ 302013  5 302006
+           302003
+           101000
+           031001
+           302005
+ 302021  3 022001
+           022011
+           022021
+ 302022  3 022002
+           022012
+           022022
+ 302023  3 022003
+           022013
+           022023
+ 302024  3 302022
+           101002
+           302023
+ 302031  4 302001
+           010062
+           007004
+           010009
+ 302032  4 007032
+           012101
+           012103
+           013003
+ 302033  2 007032
+           020001
+ 302034  2 007032
+           013023
+ 302035  8 302032
+           302033
+           302034
+           007032
+           302004
+           101000
+           031001
+           302005
+ 302036  7 105000
+           031001
+           008002
+           020011
+           020012
+           020014
+           020017
+ 302037  3 020062
+           013013
+           012113
+ 302038  4 020003
+           004024
+           020004
+           020005
+ 302039  2 004024
+           014031
+ 302040  4 007032
+           102002
+           004024
+           013011
+ 302041  7 007032
+           004024
+           004024
+           012111
+           004024
+           004024
+           012112
+ 302042 11 007032
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+ 302043  7 302038
+           101002
+           302039
+           302040
+           302041
+           302042
+           007032
+ 302044  3 004024
+           002004
+           013033
+ 302045  7 004024
+           014002
+           014004
+           014016
+           014028
+           014029
+           014030
+ 302046  3 004024
+           004024
+           012049
+ 302047  3 102003
+           008002
+           020054
+ 302048  5 005021
+           007021
+           020012
+           005021
+           007021
+ 302049  7 008002
+           020011
+           020013
+           020012
+           020012
+           020012
+           008002
+ 302050 31 008041
+           005021
+           007005
+           202130
+           006021
+           202000
+           008041
+           201131
+           202129
+           002115
+           010004
+           002115
+           013003
+           202000
+           201000
+           002115
+           011001
+           011002
+           002115
+           102002
+           012101
+           004024
+           002115
+           012103
+           012102
+           101003
+           020012
+           020011
+           020013
+           101002
+           020003
+ 302051 12 010004
+           010051
+           007004
+           010003
+           012004
+           012051
+           012016
+           012017
+           013004
+           102004
+           008051
+           008020
+ 302052  7 007032
+           007033
+           012101
+           002039
+           012102
+           012103
+           013003
+ 302053  3 007032
+           007033
+           020001
+ 302054  9 302052
+           302053
+           007033
+           302034
+           007032
+           302004
+           101000
+           031001
+           302005
+ 302055  8 020031
+           020032
+           020033
+           020034
+           020035
+           020036
+           020037
+           020038
+ 302056  4 002038
+           007063
+           022043
+           007063
+ 302057  3 302056
+           302021
+           302024
+ 302058  8 007032
+           007033
+           004024
+           004024
+           012111
+           004024
+           004024
+           012112
+ 302059 12 007032
+           007033
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+ 302060  4 302038
+           302040
+           302058
+           302059
+ 302062 24 302001
+           302052
+           302053
+           007033
+           101000
+           031000
+           302034
+           007032
+           101000
+           031001
+           302005
+           008002
+           101000
+           031000
+           302055
+           101000
+           031000
+           302056
+           101000
+           031000
+           302021
+           101000
+           031000
+           302024
+ 302063  8 302038
+           101000
+           031000
+           302040
+           101000
+           031000
+           302058
+           302059
+ 302066 16 020023
+           020024
+           020027
+           020054
+           020023
+           020027
+           020054
+           020025
+           020026
+           020027
+           020040
+           020066
+           020027
+           020021
+           020067
+           020027
+ 302069  4 007032
+           007033
+           033041
+           020001
+ 302070  8 007032
+           007033
+           011001
+           011002
+           011043
+           011041
+           011016
+           011017
+ 302071 14 007032
+           007033
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+           004025
+           011016
+           011017
+ 302072  5 007032
+           007033
+           012101
+           012103
+           013003
+ 302073  7 020010
+           105004
+           008002
+           020011
+           020012
+           033041
+           020013
+ 302074  4 020003
+           004025
+           020004
+           020005
+ 302075  5 008021
+           004025
+           013055
+           013058
+           008021
+ 302076  7 020021
+           020022
+           026020
+           020023
+           020024
+           020025
+           020026
+ 302077  8 007032
+           007033
+           004025
+           012111
+           012112
+           007032
+           004025
+           012112
+ 302078  4 002176
+           020062
+           002177
+           013013
+ 302079  5 007032
+           002175
+           002178
+           004025
+           013011
+ 302080  3 002185
+           004025
+           013033
+ 302081  2 004025
+           014031
+ 302082  7 004025
+           014002
+           014004
+           014016
+           014028
+           014029
+           014030
+ 302083  8 004025
+           008023
+           010004
+           011001
+           011002
+           012101
+           013003
+           008023
+ 302205  5 201131
+           202129
+           022021
+           201000
+           202000
+ 302206  9 302205
+           201130
+           202129
+           022011
+           201000
+           202000
+           022001
+           011001
+           011002
+ 302207  5 022193
+           022194
+           022195
+           022196
+           022197
+ 302250  5 102000
+           031001
+           020193
+           020194
+           020012
+ 303001  3 007003
+           011001
+           011002
+ 303002  3 007004
+           011001
+           011002
+ 303003  4 007004
+           010003
+           012001
+           012003
+ 303004  6 007004
+           010003
+           012001
+           012003
+           011001
+           011002
+ 303011  4 007003
+           008001
+           011001
+           011002
+ 303012  4 007004
+           008001
+           011001
+           011002
+ 303013  7 007004
+           008001
+           010003
+           012001
+           013003
+           011001
+           011002
+ 303014  7 007004
+           008001
+           010003
+           012001
+           012003
+           011001
+           011002
+ 303021  4 007004
+           007004
+           204007
+           031021
+ 303022  3 303021
+           010003
+           204000
+ 303023  3 303021
+           012001
+           204000
+ 303024  3 303021
+           013016
+           204000
+ 303025  5 002025
+           204007
+           031021
+           012063
+           204000
+ 303026  6 007004
+           008003
+           204007
+           031021
+           012001
+           204000
+ 303027  5 007004
+           204007
+           031021
+           010003
+           204000
+ 303031  6 007004
+           008003
+           007021
+           007022
+           008012
+           012061
+ 303032  2 020011
+           020016
+ 303033  2 020010
+           020016
+ 303040 18 008041
+           004025
+           004026
+           301021
+           301122
+           201131
+           202129
+           025069
+           007004
+           013003
+           202000
+           201000
+           002013
+           012101
+           010009
+           102002
+           008040
+           035035
+ 303041  8 002152
+           002023
+           007004
+           011001
+           011002
+           002153
+           002154
+           012071
+ 303050  7 004086
+           008042
+           007004
+           005015
+           006015
+           011001
+           011002
+ 303051  7 004086
+           008042
+           007004
+           005015
+           006015
+           011061
+           011062
+ 303052  7 004086
+           008042
+           007009
+           005015
+           006015
+           011001
+           011002
+ 303053  7 004086
+           008042
+           007009
+           005015
+           006015
+           011061
+           011062
+ 303054 10 004086
+           008042
+           007004
+           010009
+           005015
+           006015
+           012101
+           012103
+           011001
+           011002
+ 303249  7 002252
+           104000
+           031001
+           002199
+           007004
+           007004
+           013003
+ 303250  8 002252
+           002023
+           007004
+           011001
+           011002
+           002197
+           002198
+           012193
+ 303251  8 002252
+           105000
+           031001
+           002254
+           002251
+           002197
+           002198
+           012063
+ 303252  8 002252
+           105000
+           031001
+           002254
+           002251
+           002197
+           002198
+           012194
+ 304001  5 008003
+           010004
+           012001
+           011001
+           011002
+ 304002  4 008003
+           010004
+           011001
+           011002
+ 304003  2 008003
+           012001
+ 304004  4 008003
+           010004
+           020010
+           012001
+ 304005  4 002024
+           007004
+           007004
+           013003
+ 304006  3 014001
+           014001
+           014003
+ 304011 27 002163
+           002164
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002163
+           007004
+           012001
+ 304030  3 027031
+           028031
+           010031
+ 304031  3 001041
+           001042
+           001043
+ 304032  5 002153
+           002154
+           020081
+           020082
+           020012
+ 304033  8 002152
+           002166
+           002167
+           002153
+           002154
+           012075
+           012076
+           012063
+ 304034  9 102004
+           027001
+           028001
+           007022
+           005043
+           020010
+           020016
+           033003
+           010040
+ 304035 15 002153
+           002154
+           012063
+           008001
+           012063
+           008001
+           012063
+           008001
+           008003
+           012063
+           008003
+           012063
+           008003
+           012063
+           008003
+ 304036 12 020082
+           008012
+           020082
+           008012
+           020081
+           008003
+           020081
+           008003
+           020081
+           008003
+           020081
+           008003
+ 304228  3 005217
+           006217
+           007217
+ 304229  3 001208
+           001209
+           001210
+ 304250 27 002231
+           002232
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002231
+           007004
+           012001
+ 305003  5 301012
+           004065
+           101000
+           031001
+           305001
+ 305006  6 013072
+           013082
+           013019
+           012001
+           013073
+           013060
+ 305007  6 301029
+           301012
+           004065
+           101000
+           031001
+           305006
+ 305008  2 305006
+           012030
+ 305009  6 301029
+           301012
+           004065
+           101000
+           031001
+           305008
+ 305011  6 301029
+           301012
+           004065
+           101000
+           031001
+           305010
+ 305018  8 301029
+           301012
+           004065
+           103000
+           031001
+           305008
+           305016
+           305017
+ 306001  5 002032
+           102000
+           031001
+           007062
+           022042
+ 306002  3 002031
+           022004
+           022031
+ 306003  4 002002
+           011011
+           011012
+           012004
+ 306004  7 002032
+           002033
+           103000
+           031001
+           007062
+           022043
+           022062
+ 306005  6 002031
+           103000
+           031001
+           007062
+           022004
+           022031
+ 306006  3 306003
+           306002
+           022063
+ 306007  6 001012
+           001014
+           306008
+           004024
+           027003
+           028003
+ 306008  3 002034
+           002035
+           002036
+ 306019  8 001075
+           301011
+           301012
+           022042
+           022120
+           022121
+           004015
+           004065
+ 306020  4 306024
+           102006
+           022038
+           022039
+ 306021  7 001075
+           301011
+           301012
+           022122
+           022123
+           012001
+           303002
+ 306022  5 001075
+           301011
+           301012
+           022038
+           022039
+ 306023  8 001015
+           301023
+           301011
+           301012
+           022038
+           022039
+           022120
+           022121
+ 306024  8 001075
+           301011
+           301012
+           022042
+           022120
+           022121
+           004025
+           004015
+ 306025  4 306019
+           102006
+           022038
+           022039
+ 307001  2 301031
+           302011
+ 307002  2 301032
+           302011
+ 307003  4 307001
+           101000
+           031001
+           302005
+ 307004  4 307002
+           101000
+           031001
+           302005
+ 307005  3 307001
+           101004
+           302005
+ 307006  3 307002
+           101004
+           302005
+ 307007  2 301031
+           302012
+ 307008  2 301032
+           302012
+ 307009  2 301031
+           302013
+ 307011 16 001063
+           002001
+           301011
+           301012
+           301024
+           007006
+           011001
+           011016
+           011017
+           011002
+           011041
+           007006
+           012001
+           012003
+           010052
+           020009
+ 307012  5 103000
+           031001
+           008023
+           005021
+           020001
+ 307013  8 106000
+           031001
+           001064
+           008014
+           020061
+           008014
+           020061
+           020018
+ 307014  3 101000
+           031001
+           020019
+ 307015  4 101000
+           031001
+           302005
+           020002
+ 307016  3 101000
+           031001
+           020020
+ 307017  3 101000
+           031001
+           011070
+ 307018 16 008016
+           102000
+           031001
+           008017
+           301012
+           104000
+           031001
+           007006
+           011001
+           011002
+           011041
+           020009
+           101000
+           031001
+           020001
+           307014
+ 307020  3 307011
+           307014
+           307016
+ 307021  9 307011
+           307012
+           307013
+           307014
+           307015
+           307016
+           307017
+           307018
+           307015
+ 307022 31 001015
+           301011
+           301012
+           301022
+           008021
+           004025
+           010004
+           012001
+           013003
+           033038
+           008022
+           106025
+           002020
+           001050
+           005021
+           007021
+           015031
+           015032
+           008060
+           015033
+           015034
+           008060
+           015033
+           015034
+           015035
+           201131
+           202129
+           013016
+           202000
+           201000
+           015011
+ 307030  2 015001
+           015002
+ 307031  7 008022
+           008023
+           015001
+           008023
+           015001
+           008023
+           015002
+ 307041  7 301001
+           001015
+           301022
+           301011
+           301012
+           301070
+           307030
+ 307042  9 301001
+           001015
+           301022
+           301011
+           301012
+           008021
+           004025
+           301070
+           307031
+ 307043  7 301001
+           001015
+           301024
+           301011
+           301012
+           301074
+           307030
+ 307045 25 001063
+           008079
+           002001
+           301011
+           301012
+           301024
+           007032
+           011001
+           011016
+           011017
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           012023
+           012024
+           007032
+           010052
+           020009
+ 307046  5 020060 Metar/speci visibility
+           102000
+           031001
+           005021
+           020059
+ 307047  9 105000 Metar/speci clouds
+           031001
+           008002
+           020011
+           020012
+           020013
+           020092
+           020002
+           020091
+ 307048 25 008016
+           102000
+           031001
+           008017
+           301012
+           112000
+           031000
+           007032
+           011001
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           020009
+           101000
+           031000
+           020060
+           307014
+           307047
+ 307049  4 102000
+           031000
+           022043
+           022021
+ 307050 14 101000
+           031000
+           020085
+           102000
+           031001
+           001064
+           020085
+           105000
+           031001
+           001064
+           020086
+           020087
+           020088
+           020089
+ 307059 12 307045 Full METAR/SPECI
+           307046
+           307013
+           307014
+           307047
+           307016
+           307017
+           307049
+           307050
+           101000
+           031001
+           307048 Trend forecast
+ 307052 12 001063
+           008039
+           301011
+           301012
+           008079
+           008039
+           301011 start of forecast
+           301012
+           008039
+           301011 end of forecast
+           301012
+           301024
+ 307053 16 007032
+           011001
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           020009
+           020060
+           307014
+           307047
+ 307054 13 007032
+           008039
+           004003
+           004004
+           008023
+           012023
+           008039
+           004003
+           004004
+           008023
+           012023
+           008023
+           007032
+ 307055  9 033045
+           008016
+           008039
+           004003
+           301012
+           008039
+           004003
+           301012
+           307053
+ 307056  6 307052 Aerodrome forecast
+           307053
+           307054
+           101000
+           031001
+           307055
+ 307059 12 307045 Full METAR/SPECI
+           307046
+           307013
+           307014
+           307047
+           307016
+           307017
+           307049
+           307050
+           101000
+           031001
+           307048 Trend forecast
+ 307060  2 007061
+           012030
+ 307061  3 301031
+           101005
+           307060
+ 307062  3 301032
+           101005
+           307060
+ 307063  2 007061
+           012130
+ 307071 67 301090
+           004074
+           004023
+           008023
+           010004
+           010051
+           007004
+           010009
+           007032
+           012101
+           002051
+           004051
+           012118
+           004052
+           012119
+           013004
+           008023
+           012151
+           007032
+           102005
+           008050
+           008020
+           014032
+           014033
+           008050
+           008020
+           102018
+           008052
+           008022
+           007032
+           008053
+           004003
+           012152
+           008053
+           004003
+           012153
+           008053
+           004003
+           008023
+           012101
+           008053
+           004003
+           008023
+           012101
+           008023
+           007032
+           002002
+           008053
+           004003
+           011046
+           008053
+           004003
+           004004
+           004023
+           007032
+           013060
+           013051
+           004053
+           008050
+           008020
+           102006
+           008052
+           008022
+           008053
+           004003
+           013052
+           007032
+ 307072 38 004001
+           004001
+           004002
+           004003
+           004004
+           004074
+           004022
+           008023
+           010004
+           010051
+           007004
+           010009
+           007032
+           012101
+           002051
+           004051
+           012118
+           004052
+           012119
+           013004
+           012151
+           007032
+           014032
+           008023
+           004001
+           004001
+           004002
+           004003
+           004004
+           004022
+           007032
+           008023
+           013060
+           004053
+           008023
+           102008
+           008050
+           008020
+ 307073  2 307071
+           307072
+ 307079 30 301090 SYNOP data and marine data from costal stations
+           302031
+           302035
+           302036
+           101000
+           031000
+           302047
+           008002
+           101000
+           031000
+           302048
+           302037
+           102000
+           031000
+           022061
+           020058
+           101000
+           031000
+           302056
+           101000
+           031000
+           302055
+           302043
+           302044
+           101000
+           031001
+           302045
+           101000
+           031000
+           302046
+ 307080 13 301090 BUFR template for synoptic reports
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307081 24 301090 BUFR template for synoptic reports RA I
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012122
+           013056
+           013057
+           020101
+           020102
+           020103
+           020104
+           020105
+           020106
+           020107
+           020108
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307082 15 301090 BUFR template for synoptic reports RA II
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012121
+           012122
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307083 14 301090 BUFR template for synoptic reports RA III
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012122
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307084 17 301090 BUFR template for synoptic reports RA IV
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           020055
+           101000
+           031000
+           205001
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307086 11 301090 BUFR template for synoptic reports RA VI
+           302031
+           302035
+           302036
+           008002
+           302037
+           302066
+           302043
+           302044
+           101002
+           302045
+ 307090 13 301092 BUFR template for synoptic reports from mobile land stations
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307091 66 301089
+           301090
+           008010
+           301091
+           302001
+           007004
+           010009
+           302072
+           103000
+           031000
+           101005
+           307063
+           007061
+           101000
+           031000
+           302069
+           007032
+           007033
+           105000
+           031000
+           020031
+           020032
+           002038
+           022043
+           302021
+           101000
+           031000
+           302078
+           101000
+           031000
+           302073
+           101000
+           031000
+           302074
+           101000
+           031000
+           302075
+           102000
+           031000
+           004025
+           302076
+           302071
+           302077
+           007033
+           101000
+           031000
+           302079
+           007032
+           101000
+           031000
+           302080
+           101000
+           031000
+           302081
+           101000
+           031000
+           302082
+           102000
+           031000
+           004025
+           013059
+           101000
+           031000
+           302083
+           033005
+           033006
+ 307092 62 301089    Surface obs drom N-minute period
+           301090
+           008010
+           301091
+           004015
+           004065
+           125000
+           031001
+           010004
+           302070
+           302072
+           007032
+           012101
+           103000
+           031000
+           101005
+           307063
+           007061
+           101000
+           031000
+           302069
+           007032
+           007033
+           101000
+           031000
+           302073
+           101000
+           031000
+           302076
+           102000
+           031000
+           013055
+           013058
+           102000
+           031000
+           020031
+           020032
+           101000
+           031000
+           302078
+           102000
+           031000
+           302079
+           007032
+           101000
+           031000
+           302080
+           101000
+           031000
+           302081
+           101000
+           031000
+           302083
+           102000
+           031000
+           004025
+           013059
+           101000
+           031000
+           302083
+           033005
+           033006
+ 308001  3 301033
+           302011
+           022042
+ 308002  3 301034
+           302011
+           022042
+ 308003  3 301035
+           302011
+           022042
+ 308004  3 301036
+           302011
+           022042
+ 308005  2 308004
+           302024
+ 308006  8 010004
+           010061
+           010063
+           011001
+           011002
+           012004
+           013003
+           022042
+ 308007  4 301055
+           302011
+           007062
+           022042
+ 308008 84 001003 BUOY
+           001020
+           001005
+           002001
+           002036
+           002149
+           301011
+           301012
+           008021
+           301011
+           301012
+           008021
+           301021
+           027004
+           028004
+           007030
+           001051
+           002148
+           001012
+           001014  
+           002040
+           033022
+           033023
+           033027
+           022063
+           302021
+           302022
+           302023
+           008081
+           025026
+           008081
+           025026
+           008081
+           025026
+           008081
+           002034
+           022060
+           007070
+           002190
+           025086
+           002035
+           002168
+           020031
+           002038
+           306004
+           002030
+           306005
+           007031
+           008081
+           012064
+           302001
+           008081
+           007032
+           007033
+           012101
+           012103
+           013003
+           007032
+           007033
+           008082
+           007033
+           002169
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           004025
+           011043
+           011041
+           008082
+           007033
+           007032
+           004024
+           013011
+           007032
+           008021
+           004024
+           014021
+           008021
+           025028
+           025028
+           025028
+ 308009  7 301093
+           302001
+           302054
+           008002
+           302055
+           302057
+           302060
+ 308010 16 001011 TRACKOB template
+           113000
+           031001
+           301011
+           301012
+           301021
+           004080
+           022049
+           004080
+           022059
+           004080
+           022005
+           002042
+           022032
+           002042
+           004080
+ 308011 27 001011  Climat ship
+           002001
+           301011
+           301012
+           301023
+           007030
+           007031
+           004074
+           004023
+           008023
+           010051
+           007032
+           007033
+           012101
+           013004
+           007032
+           007033
+           302056
+           008023
+           004003
+           004004
+           004023
+           007032
+           013060
+           013051
+           004053
+           007032
+ 308012 28 004001 Monthly normals from an ocean weather station
+           004001
+           004002
+           004003
+           004004
+           004074
+           004022
+           008023
+           010051
+           007032
+           007033
+           012101
+           013002
+           007032
+           007033
+           302056
+           008023
+           004001
+           004001
+           004002
+           004003
+           004004
+           004022
+           007032
+           008023
+           013060
+           004053
+           008023
+ 308013  2 308011
+           308012
+ 309001  4 301037
+           101000
+           031001
+           303011
+ 309002  4 301038
+           101000
+           031001
+           303011
+ 309003  4 301037
+           101000
+           031001
+           303012
+ 309004  4 301038
+           101000
+           031001
+           303012
+ 309005  5 301037
+           302004
+           101000
+           031001
+           303013
+ 309006  5 301038
+           302004
+           101000
+           031001
+           303013
+ 309007  5 301037
+           302004
+           101000
+           031001
+           303014
+ 309008  5 301038
+           302004
+           101000
+           031001
+           303014
+ 309011  4 301039
+           101000
+           031001
+           303011
+ 309012  4 301039
+           101000
+           031001
+           303012
+ 309013  5 301039
+           302004
+           101000
+           031001
+           303013
+ 309014  5 301039
+           302004
+           101000
+           031001
+           303014
+ 309015  4 301040
+           101000
+           031001
+           303011
+ 309016  4 301040
+           101000
+           031001
+           303012
+ 309017  5 301040
+           302004
+           101000
+           031001
+           303013
+ 309018  5 301040
+           302004
+           101000
+           031001
+           303014
+ 309019  5 301031
+           002003
+           101000
+           031001
+           303011
+ 309020  8 301031
+           002003
+           104000
+           031001
+           007003
+           011003
+           011004
+           011005
+ 309030  8 015004
+           015005
+           104000
+           031001
+           004015
+           008006
+           007004
+           015003
+ 309031  8 015004
+           015005
+           104000
+           031001
+           004025
+           008006
+           007004
+           015003
+ 309040  3 301075
+           301076
+           309030
+ 309042  4 307042
+           301075
+           301076
+           309030
+ 309050  9 301110
+           301113
+           301114
+           101000
+           031002
+           303050
+           101000
+           031001
+           303051
+ 309051  9 301110
+           301113
+           301114
+           101000
+           031002
+           303052
+           101000
+           031001
+           303053
+ 309052 11 301111
+           301113
+           301114
+           302049
+           022043
+           101000
+           031002
+           303054
+           101000
+           031001
+           303051
+ 309053  9 301112
+           301113
+           301114
+           101000
+           031002
+           303054
+           101000
+           031001
+           303051
+ 309054 27 301001
+           001011
+           301011
+           301012
+           301021
+           007030
+           007031
+           007007
+           004023
+           004059
+           115000
+           031001
+           008001
+           008023
+           007004
+           010009
+           012101
+           012103
+           008023
+           011001
+           011002
+           008023
+           011019
+           008050
+           008020
+           008050
+           008020
+ 309060  4 301123
+           301121
+           302050
+           303040
+ 309061 21 301120
+           008041
+           301122
+           201131
+           202129
+           025069
+           007004
+           202000
+           201000
+           033007
+           033035
+           033015
+           013009
+           033007
+           033035
+           033015
+           002013
+           012101
+           033007
+           033035
+           033015
+ 309062 19 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+           033007
+ 309063 19 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+           033007
+ 309064 26 301120
+           008041
+           301122
+           201131
+           202129
+           104002
+           025069
+           007004
+           033035
+           033015
+           013003
+           033035
+           033015
+           202000
+           201000
+           104002
+           002013
+           012101
+           033035
+           033015
+           012103
+           033035
+           033015
+           010009
+           033035
+           033015
+ 309065 18 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+ 309066 18 301120
+           008041
+           301122
+           008040
+           201131
+           202129
+           025069
+           007004
+           013003
+           202000
+           201000
+           002013
+           012101
+           012103
+           010009
+           010007
+           011002
+           011001
+ 309194  5 301194
+           302004
+           101000
+           031001
+           303014
+ 309195  5 301195
+           302004
+           101000
+           031001
+           303014
+ 309196  5 301196
+           302004
+           101000
+           031001
+           303014
+ 309198  5 301198
+           302004
+           101000
+           031001
+           303014
+ 310001  5 301042
+           303031
+           303032
+           101026
+           303025
+ 310002  5 301042
+           303031
+           303032
+           101009
+           303023
+ 310003  5 301042
+           303031
+           303032
+           101006
+           303023
+ 310004  5 301042
+           303031
+           303032
+           101003
+           303024
+ 310005  6 301042
+           303031
+           303033
+           101000
+           031001
+           303025
+ 310006  6 301042
+           303031
+           303033
+           101000
+           031001
+           303023
+ 310007  6 301042
+           303031
+           303033
+           101000
+           031001
+           303024
+ 310008  8 310011
+           101019
+           310012
+           002150
+           025079
+           025080
+           033032
+           014045
+ 310009  3 310011
+           101015
+           310012
+ 310010  3 310011
+           101005
+           310012
+ 310011 45 008070
+           001033
+           001034
+           008070
+           001033
+           001034
+           001007
+           002048
+           005040
+           025075
+           201133
+           005041
+           201000
+           005043
+           025070
+           033030
+           033031
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           202126
+           007001
+           202000
+           007024
+           005021
+           007025
+           005022
+           033033
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+ 310012 10 002150
+           025076
+           025077
+           025078
+           033032
+           201132
+           202129
+           012063
+           202000
+           201000
+ 310013 62 001007
+           005040
+           004001
+           004002
+           004003
+           004004
+           004005
+           004006
+           005001
+           006001
+           007025
+           005043
+           025085
+           201131
+           202129
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           202000
+           201000
+           201132
+           202129
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           008023
+           008072
+           012063
+           008072
+           012063
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           202000
+           201000
+ 310014  3 301072
+           303041
+           304011
+ 310015 13 301072
+           007024
+           010002
+           303041
+           101003
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310016 13 301072
+           007024
+           010002
+           303041
+           101012
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310019 68 001007
+           002019
+           301011
+           301013
+           301023
+           007025
+           008021
+           007025
+           008021
+           007025
+           008021
+           008029
+           005040
+           008075
+           008003
+           010004
+           008003
+           207002
+           015001
+           207000
+           033070
+           015030
+           207002
+           020081
+           207000
+           008003
+           033042
+           007004
+           207002
+           015001
+           207000
+           008003
+           113021
+           007004
+           007004
+           207002
+           008021
+           015005
+           008021
+           015005
+           033007
+           207000
+           008026
+           101020
+           025143
+           008026
+           008043
+           109015
+           007004
+           008090
+           207006
+           015008
+           207000
+           008090
+           207002
+           033007
+           207000
+           008043
+           033071
+           108008
+           202124
+           201107
+           002071
+           201000
+           202000
+           207002
+           020081
+           207000
+ 310020  6 310022
+           301011
+           301013
+           301021
+           304034
+           310021
+ 310021 10 108000
+           031001
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+ 310022  4 001007
+           002019
+           001033
+           002172
+ 310023 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101012
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310024 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101003
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310025 61 001007
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           201138
+           202131 
+           004006
+           202000
+           201000
+           201132
+           005041
+           201000
+           201129
+           005043
+           201000
+           005002
+           006002
+           013040
+           020029
+           104024
+           005042
+           012163
+           021083
+           021084
+           115003
+           004001
+           004002
+           004003
+           201142
+           202131
+           004026
+           202000
+           201000
+           005001
+           006001
+           201138
+           202129
+           007001
+           202000
+           201000
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           005040
+           101003
+           012070
+           025054
+           101004
+           025055
+           008007
+           104028
+           005002
+           006002
+           002111
+           005021
+ 310026 82 310022
+           025060
+           008021
+           301011
+           301012
+           201138
+           202131
+           004006
+           202000
+           201000
+           033039
+           033007
+           304030
+           304031
+           002020
+           001050
+           202127
+           304030
+           202000
+           304031
+           201133
+           202131
+           004016
+           202000
+           201000
+           301021
+           304030
+           010035
+           005021
+           010036
+           113000
+           031002
+           301021
+           005021
+           108000
+           031001
+           002121
+           007040
+           015037
+           008023
+           201125
+           015037
+           201000
+           008023
+           033007
+           108000
+           031002
+           007007
+           015036
+           008023
+           201123
+           015036
+           201000
+           008023
+           033007
+           116000
+           031002
+           007009
+           010004
+           012001
+           013001
+           008023
+           201120
+           010004
+           201000
+           201122
+           012001
+           201000
+           201123
+           013001
+           201000
+           008023
+           033007
+           008003
+           007009
+           010004
+           008023
+           201120
+           010004
+           201000
+           008023
+           033007
+ 310027 12 301071
+           301011
+           301013
+           301021
+           030021
+           030022
+           010002
+           304036
+           002152
+           002167
+           101011
+           304035
+ 310029 12 110000
+           031001
+           201138
+           202130
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+           012101
+           013098
+ 310030  6 310022
+           301011
+           301013
+           301021
+           304034
+           310029
+ 310050 14 310051
+           310052
+           101000
+           031002
+           310053
+           101004
+           310054
+           020010
+           310052
+           101015
+           310053
+           310052
+           101005
+           310053
+ 310051 16 001007
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           007025
+           005022
+           102009
+           002151
+           012064
+ 310052 12 002019
+           301011
+           301012
+           202131
+           201138
+           004006
+           201000
+           202000
+           301021
+           007024
+           005021
+           005043
+ 310053  6 201134
+           005042
+           201000
+           025076
+           033032
+           012163
+ 310054 13 201134
+           005042
+           201000
+           025076
+           033032
+           201131
+           202129
+           102002
+           008023
+           014027
+           008023
+           202000
+           201000
+ 310055  8 310051
+           310052
+           102020
+           025076
+           025052
+           101000
+           031002
+           025050
+ 310060 53 001007
+           001033
+           002019
+           002020
+           301011
+           301012
+           207003
+           004006
+           207000
+           304030
+           301021
+           007024
+           005021
+           007025
+           005022
+           008075
+           201133
+           005041
+           201000
+           005045
+           005043
+           005040
+           010001
+           201129
+           007002
+           201000
+           202127
+           201125
+           021166
+           201000
+           202000
+           008012
+           020010
+           020014
+           002165
+           033075
+           107003
+           008076
+           006029
+           006029
+           025140
+           025141
+           033076
+           033077
+           008076
+           033078
+           033003
+           104000
+           031002
+           201133
+           005042
+           201000
+           014044
+ 310193  5 301250
+           303250
+           302250
+           303249
+           303251
+ 310194  5 301250
+           303250
+           302250
+           303249
+           303252
+ 310195  3 301250
+           303250
+           304250
+ 310196  3 301250
+           303249
+           303251
+ 310226 39 310022
+           025060
+           008021
+           301011
+           301012
+           201138
+           202131
+           004006
+           202000
+           201000
+           033039
+           033007
+           304030
+           304031
+           002020
+           001050
+           202127
+           304030
+           202000
+           304031
+           201133
+           202131
+           004016
+           202000
+           201000
+           301021
+           304030
+           010035
+           005021
+           010036
+           107000
+           031002
+           301021
+           005021
+           103000
+           031001
+           002121
+           007040
+           015037
+ 311001  9 301051
+           007002
+           012001
+           011001
+           011002
+           011031
+           011032
+           011033
+           020041
+ 311002  4 301065
+           301066
+           311003
+           311004
+ 311003  5 010070
+           011001
+           011002
+           012001
+           013002
+ 311004 18 101000
+           031000
+           011034
+           101000
+           031000
+           011035
+           101000
+           031000
+           011075
+           101000
+           031000
+           011076
+           101000
+           031000
+           033025
+           101000
+           031000
+           033026
+ 311005 13 001008
+           001023
+           301021
+           301011
+           301013
+           007010
+           008009
+           011001
+           011002
+           011031
+           011036
+           012101
+           033025
+ 311006  6 007010
+           011001
+           011002
+           002064
+           012101
+           012103
+ 311007  7 007010
+           301021
+           011001
+           011002
+           002064
+           012101
+           012103
+ 311008  8 001008
+           301011
+           301013
+           301021
+           008004
+           101000
+           031001
+           311006
+ 311009  8 001008
+           301011
+           301013
+           301021
+           008004
+           101000
+           031001
+           311007
+ 311193 16 301197
+           301011
+           301012
+           301023
+           008004
+           007004
+           008021
+           011001
+           011002
+           011031
+           011034
+           011035
+           012001
+           012003
+           013003
+           020041
+ 312001  2 301043
+           304001
+ 312002  2 301043
+           304002
+ 312003  2 301042
+           304003
+ 312004  2 301042
+           304004
+ 312005  2 301042
+           020014
+ 312006  2 301044
+           304005
+ 312007  2 301042
+           304006
+ 312010  6 001007
+           005040
+           002021
+           005041
+           004001
+           004043
+ 312011  9 202131
+           201149
+           004006
+           201000
+           202126
+           010002
+           202000
+           005043
+           005053
+ 312012  6 202129
+           201132
+           101019
+           012063
+           201000
+           202000
+ 312013  6 005042
+           202129
+           201135
+           012063
+           201000
+           202000
+ 312014  8 312010
+           312011
+           105056
+           301023
+           005042
+           005052
+           312012
+           312013
+ 312015 10 109011
+           301023
+           005042
+           005052
+           202129
+           201132
+           101004
+           012063
+           202000
+           201000
+ 312016  3 312010
+           312011
+           312015
+ 312017 10 109008
+           301023
+           005042
+           005052
+           202129
+           201132
+           101003
+           012063
+           202000
+           201000
+ 312018  3 312010
+           312011
+           312017
+ 312019 13 301047
+           301048
+           015015
+           029002
+           021076
+           106012
+           201129
+           006030
+           201000
+           102012
+           005030
+           021075
+           021066
+ 312020 11 301047
+           301048
+           015015
+           029002
+           021076
+           104012
+           006030
+           102012
+           005030
+           021075
+           021066
+ 312021  6 301047
+           101003
+           301049
+           011012
+           011011
+           021067
+ 312022 15 301047
+           008022
+           011012
+           011050
+           022070
+           022026
+           312041
+           010050
+           021068
+           021071
+           021072
+           021073
+           312042
+           021062
+           015011
+ 312023  7 301047
+           103003
+           008022
+           012061
+           022050
+           021069
+           021085
+ 312024 11 312020
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312025 11 312019
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312026 19 301046
+           301011
+           301013
+           301023
+           312031
+           101004
+           312030
+           021110
+           301023
+           321027
+           021111
+           301023
+           321027
+           021112
+           301023
+           321027
+           021113
+           301023
+           321027
+ 312027  9 301047
+           105009
+           301023
+           007021
+           012061
+           007021
+           012061
+           021085
+           021070
+ 312028 26 301046
+           301011
+           301013
+           301023
+           008025
+           201136
+           004006
+           201000
+           312031
+           312032
+           101004
+           312030
+           101002
+           312033
+           021110
+           301023
+           321028
+           021111
+           301023
+           321028
+           021112
+           301023
+           321028
+           021113
+           301023
+           321028
+ 312030 13 201130
+           202129
+           011012
+           202000
+           201000
+           011052
+           201135
+           202130
+           011011
+           202000
+           201000
+           011053
+           021104
+ 312031  8 005034
+           006034
+           021109
+           011081
+           011082
+           021101
+           021102
+           021103
+ 312032  4 021120
+           021121
+           013055
+           021122
+ 312033  4 002104
+           008022
+           012063
+           012065
+ 312041  5 201141
+           202130
+           007001
+           201000
+           202000
+ 312042  6 021077
+           021078
+           021079
+           021080
+           021081
+           021082
+ 312045 21 001007
+           002019
+           001096
+           025061
+           005040
+           301011
+           301013
+           301021
+           007002
+           012180
+           012181
+           012182
+           012183
+           012184
+           012185
+           002174
+           021086
+           012186
+           021087
+           012187
+           033043
+ 312050 23 001007
+           002019
+           001096
+           025061
+           005040
+           301011
+           301013
+           301021
+           007025
+           005022
+           010080
+           027080
+           008003
+           007004
+           013093
+           008003
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           013095
+ 312051 48 001007
+           002019
+           001096
+           025061
+           005040
+           008075
+           301011
+           301013
+           301021
+           001012
+           201131
+           001013
+           201000
+           010032
+           010033
+           010034
+           007002
+           008012
+           025110
+           025111
+           025102
+           002104
+           025103
+           025104
+           025105
+           025106
+           025107
+           025108
+           002111
+           002121
+           002026
+           002027
+           021130
+           021131
+           021132
+           021133
+           021064
+           025014
+           021134
+           107018
+           005030
+           105024
+           201130
+           006030
+           201000
+           021135
+           021136
+           033044
+ 312052 77 001007
+           002019
+           001096
+           025061
+           005040
+           025120
+           025121
+           025124
+           025125
+           025122
+           025123
+           301011
+           301013
+           301021
+           007002
+           002119
+           033047
+           010081
+           010082
+           010083
+           010084
+           002116
+           002117
+           002118
+           002156
+           002157
+           014055
+           022150
+           022151
+           022152
+           022153
+           022154
+           022155
+           022156
+           022157
+           022158
+           022159
+           021137
+           021138
+           021139
+           021140
+           021141
+           021142
+           010085
+           010086
+           010087
+           010088
+           010089
+           010090
+           010091
+           010092
+           010093
+           011002
+           025126
+           025127
+           025128
+           025129
+           025130
+           025131
+           025132
+           025133
+           025134
+           025135
+           025136
+           025137
+           013096
+           013097
+           011095
+           011096
+           012188
+           012189
+           002158
+           002159
+           033052
+           033053
+           021143
+           021144
+ 312053 54 001007
+           002019
+           001096
+           025061
+           005040
+           008075
+           301011
+           301013
+           301021
+           001012
+           201131
+           001013
+           201000
+           010032
+           010033
+           010034
+           007002
+           008012
+           025110
+           025111
+           025102
+           002104
+           025103
+           025104
+           025105
+           025106
+           025107
+           025108
+           011001
+           011002
+           022160
+           025138
+           201130
+           202129
+           022021
+           202000
+           201000
+           033048
+           033049
+           002026
+           002027
+           021130
+           021131
+           021132
+           021133
+           025014
+           106036
+           005030
+           104024
+           201130
+           006030
+           201000
+           022161
+           033044
+ 312055  5 005033
+           005040
+           006034
+           010095
+           021157
+ 312056 11 025060
+           001032
+           011082
+           011081
+           020095
+           020096
+           021155
+           201133
+           021101
+           021102
+           201000
+ 312057 12 201130
+           202129
+           011012
+           202000
+           201000
+           201131
+           202129
+           011011
+           202000
+           201000
+           021156
+           021104
+ 312058  8 301125
+           301011
+           301013
+           301021
+           312055
+           021150
+           101003
+           321030
+ 312059  4 312056
+           101000
+           031001
+           312057
+ 312060 20 025060
+           025062
+           040001
+           040002
+           021062
+           021151
+           021152
+           021153
+           021154
+           021062
+           021062
+           040003
+           040004
+           040005
+           040006
+           040007
+           020065
+           040008
+           040009
+           040010
+ 312061  3 312058
+           312060
+           312059
+ 312070 27 001007
+           002019
+           001144
+           001124
+           030010
+           301011
+           301013
+           301021
+           007012
+           015012
+           012165
+           012166
+           012167
+           012168
+           027010
+           028010
+           002099
+           013048
+           025081
+           025082
+           025083
+           025084
+           012080
+           012081
+           012082
+           025174 
+           033028
+ 312200 10 301237
+           301238
+           029002
+           021206
+           104012
+           006232
+           102012
+           005232
+           021205
+           021196
+ 312201  6 301237
+           101003
+           301239
+           011012
+           011011
+           021197
+ 312202 13 301237
+           008022
+           011012
+           011050
+           301240
+           022243
+           301241
+           010050
+           021198
+           021201
+           021202
+           021203
+           301242
+ 312203  8 301237
+           008022
+           012061
+           022050
+           021204
+           021199
+           021214
+           021215
+ 312204 12 312201
+           001031
+           011012
+           011011
+           021200
+           021213
+           004004
+           008021
+           004024
+           055003
+           011012
+           011011
+ 312207  3 312202
+           301202
+           033191
+ 312208 17 301202
+           008022
+           008021
+           301011
+           301013
+           301023
+           302205
+           011002
+           001007
+           002021
+           301011
+           301013
+           301023
+           001032
+           001192
+           302205
+           011002
+ 312209 11 301202
+           001192
+           301011
+           301013
+           301023
+           302206
+           104000
+           022192
+           102000
+           005232
+           022191
+ 312210 13 312202
+           021192
+           015202
+           301011
+           004004
+           004005
+           201138
+           202131
+           004006
+           201000
+           202000
+           304228
+           304229
+ 312211 19 301046
+           301011
+           301013
+           301023
+           312031
+           101004
+           312030
+           021110
+           101004
+           312212
+           021111
+           101004
+           312212
+           021112
+           101004
+           312212
+           021113
+           101004
+           312212
+ 312212  2 301023
+           321027
+ 313009  4 021001
+           101000
+           031001
+           021001
+ 313010  4 021036
+           101000
+           031001
+           021036
+ 313031  5 006002
+           006012
+           101000
+           031002
+           030001
+ 313032  5 005002
+           005012
+           101000
+           031002
+           313031
+ 313041 13 006002
+           110000
+           031001
+           104000
+           031001
+           006012
+           101000
+           031012
+           030001
+           006012
+           101000
+           031001
+           030001
+ 313042  5 005002
+           005012
+           101000
+           031002
+           313041
+ 313043 17 006002
+           005002
+           005012
+           112000
+           031001
+           110000
+           031001
+           104000
+           031001
+           006012
+           101000
+           031011
+           030001
+           006012
+           101000
+           031001
+           030001
+ 315001  5 001011
+           301011
+           301012
+           301023
+           306001
+ 315002  5 001011
+           301011
+           301012
+           301023
+           306004
+ 315003 25 001087
+           001085
+           001086
+           002036
+           002148
+           002149
+           022055
+           022056
+           022067
+           301011
+           301012
+           301021
+           008080
+           033050
+           109000
+           031002
+           007065
+           008080
+           033050
+           022045
+           008080
+           033050
+           022064
+           008080
+           033050
+ 316001 10 301011
+           004004
+           301023
+           001021
+           002041
+           019001
+           010051
+           019002
+           019003
+           019004
+ 316002 15 008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           001033
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           007002
+           007002
+ 316003 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           010002
+           011002
+           008007
+           008011
+ 316004 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           011031
+           008007
+           008011
+ 316005 10 108000
+           031001
+           008005
+           008007
+           005002
+           006002
+           001026
+           019001
+           008007
+           008005
+ 316006 14 112000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020011
+           020012
+           008007
+           008011
+ 316007 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           019005
+           019006
+           008007
+           008011
+ 316008 13 111000
+           031001
+           008001
+           008007
+           008023
+           103000
+           031001
+           005002
+           006002
+           010002
+           008023
+           008007
+           008001
+ 316009 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020041
+           008007
+           008011
+ 316010  9 107000
+           031001
+           008011
+           008007
+           001022
+           005002
+           006002
+           008007
+           008011
+ 316011 19 117000
+           031001
+           008011
+           001022
+           008007
+           102000
+           031001
+           005002
+           006002
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           020090
+           008021
+           008007
+           008011
+ 316020  5 001023
+           001025
+           001027
+           301011
+           301012
+ 316021 23 301023
+           002041
+           019001
+           019007
+           019005
+           019006
+           019008
+           008005
+           010004
+           008005
+           010004
+           019007
+           008005
+           008021
+           004075
+           011040
+           019007
+           105004
+           005021
+           005021
+           102002
+           019003
+           019004
+ 316022 24 001032
+           002041
+           019001
+           019010
+           118000
+           031001
+           008021
+           004014
+           008005
+           301023
+           019005
+           019006
+           010004
+           011041
+           008021
+           004075
+           011040
+           019008
+           105004
+           005021
+           005021
+           102002
+           019003
+           019004
+ 316026  2 316020
+           316021
+ 316030 10 301014
+           001037
+           010064
+           008019
+           001062
+           008019
+           001065
+           008019
+           001062
+           008019
+ 316031  8 008021
+           301011
+           301012
+           301027
+           019005
+           019006
+           020028
+           008021
+ 316032  5 008021
+           301011
+           301012
+           301027
+           008021
+ 316033  7 008021
+           301011
+           301012
+           101000
+           031001
+           301027
+           008021
+ 316034 17 008079
+           316030
+           008011
+           001022
+           008007
+           301023
+           008007
+           020090
+           316031
+           101000
+           031000
+           316032
+           101000
+           031001
+           316033
+           008011
+           008079
+ 316035  9 008079
+           316030
+           008011
+           020023
+           020021
+           020008
+           316031
+           008011
+           008079
+ 316036 13 008079
+           316030
+           008011
+           001027
+           316031
+           101000
+           031000
+           316032
+           101000
+           031001
+           316033
+           008011
+           008079
+ 316037  7 008079
+           316030
+           008011
+           011031
+           316031
+           008011
+           008079
+ 316038  8 008079
+           316030
+           008011
+           020041
+           020021
+           316031
+           008011
+           008079
+ 316039  7 008079
+           316030
+           008011
+           020024
+           316031
+           008011
+           008079
+ 316040  6 316030
+           008079
+           301014
+           001037
+           010064
+           008079
+ 316050 16 301001
+           301011
+           301012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ 316052 29 301005
+           301011
+           301012
+           001007
+           025150
+           122000
+           031001
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ 318001  2 301025
+           024011
+ 318003  4 301026
+           024005
+           024004
+           024021
+ 318004  6 301025
+           004023
+           013011
+           024005
+           024004
+           024022
+ 321001  6 002101
+           002114
+           002105
+           002106
+           002107
+           002121
+ 321003  4 021051
+           021014
+           021017
+           021030
+ 321004  5 301031
+           002003
+           101000
+           031001
+           321003
+ 321005 12 025004
+           002121
+           002122
+           002123
+           002124
+           002125
+           002126
+           002127
+           002128
+           002129
+           002130
+           002131
+ 321006  4 025001
+           025002
+           025003
+           025005
+ 321007  8 025009
+           025010
+           025011
+           025012
+           025013
+           025015
+           025016
+           025017
+ 321008  3 025006
+           025007
+           025008
+ 321009  2 025018
+           025019
+ 321010 13 002101
+           007002
+           002102
+           002103
+           002104
+           002105
+           002106
+           002107
+           002108
+           002109
+           002110
+           002132
+           002133
+ 321011  3 030031
+           030032
+           029002
+ 321012  3 101000
+           031001
+           002135
+ 321021 15 002003
+           002101
+           201130
+           002106
+           201000
+           201132
+           202130
+           002121
+           202000
+           201000
+           201133
+           202129
+           025001
+           202000
+           201000
+ 321022 11 007007
+           204001
+           031021
+           011001
+           204000
+           011002
+           204001
+           031021
+           011006
+           204000
+           021030
+ 321023  9 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+ 321024  7 007007
+           204001
+           031021
+           012007
+           011006
+           204000
+           021030
+ 321025 17 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+           021092
+           021030
+           025092
+           201129
+           202129
+           021017
+           202000
+           201000
+ 321026 10 007007
+           204001
+           031021
+           012007
+           025091
+           011071
+           011072
+           011073
+           011074
+           204000
+ 321027 18 021118
+           202129
+           201132
+           002112
+           201000
+           201131
+           002111
+           201000
+           202000
+           002104
+           021105
+           021106
+           021107
+           021114
+           021115
+           021116
+           008018
+           021117
+ 321028 18 021118
+           202129
+           201132
+           002112
+           201000
+           201131
+           002111
+           201000
+           202000
+           002104
+           021123
+           021106
+           021107
+           021114
+           021115
+           021116
+           008018
+           021117
+ 321030 18 008085
+           202129
+           201131
+           002111
+           201000
+           202000
+           002134
+           021062
+           021063
+           021158
+           021159
+           021160
+           021161
+           021162
+           021163
+           021164
+           021165
+           021166
+ 340001 45 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           101010
+           340002
+           101087
+           340003
+           002019
+           025051
+           101007
+           340004
+ 340002  3 025140
+           025141
+           025142
+ 340003  5 104100
+           201136
+           005042
+           201000
+           014046
+ 340004  9 005060
+           005061
+           025085
+           105006
+           005042
+           025142
+           014047
+           025142
+           014048
+ 340005 94 001007
+           002019
+           001096
+           025061
+           005044
+           005040
+           001030
+           301011
+           301012
+           004007
+           005001
+           006001
+           008029
+           008074
+           008077
+           040011
+           025097
+           025095
+           025098
+           025099
+           021144
+           025096
+           040012
+           040013
+           021169
+           022151
+           022162
+           022163
+           025160
+           025133
+           022156
+           022164
+           022165
+           022166
+           021137
+           021138
+           022167
+           021139
+           021118
+           021145
+           021146
+           021147
+           022168
+           022169
+           022170
+           025161
+           025162
+           022171
+           022172
+           022173
+           022174
+           021170
+           021171
+           022175
+           021172
+           021118
+           021173  
+           021174
+           021175
+           102003
+           002153
+           012063
+           013090
+           013091
+           007002
+           011097
+           011098
+           007002
+           011095 
+           011096
+           010096
+           010081
+           010082
+           010083
+           010101
+           025132
+           025163
+           025126
+           025128
+           025164
+           010085
+           010097
+           010086
+           010087
+           010092
+           010088
+           010089
+           010098
+           010099
+           010090
+           010100
+           010093
+           025127
+           040014
+ 340007 57 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           103003
+           025140
+           025141
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           040020
+           101010
+           340002
+           101087
+           340003
+           002019
+           025051
+           101007
+           340004
+           020081
+           008029
+           020083
+           008029
+           040018
+           040019
+           040021
+           040022
+ 340008 70 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           103003
+           025140
+           025141
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           040020
+           101010
+           340002
+           104000
+           031002
+           201136
+           005042
+           201000
+           014046
+           108003
+           025140
+           025141
+           040015
+           040016
+           025062
+           101000
+           031002
+           040017
+           002019
+           025051
+           101007
+           340004
+           020081
+           008029
+           020083
+           008029
+           040018
+           040019
+           040021
+           040022
diff --git a/bufrtables/D0000000000098000000.TXT b/bufrtables/D0000000000098000000.TXT
new file mode 100755
index 0000000..be697a7
--- /dev/null
+++ b/bufrtables/D0000000000098000000.TXT
@@ -0,0 +1,787 @@
+ 300002  2 000002                                                                                                       
+           000003                                                                                                       
+ 300003  3 000010                                                                                                       
+           000011                                                                                                       
+           000012                                                                                                       
+ 300004  9 300003                                                                                                       
+           000013                                                                                                       
+           000014                                                                                                       
+           000015                                                                                                       
+           000016                                                                                                       
+           000017                                                                                                       
+           000018                                                                                                       
+           000019                                                                                                       
+           000020                                                                                                       
+ 300010  4 300003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           000030                                                                                                       
+ 301001  2 001001                                                                                                       
+           001002                                                                                                       
+ 301002  3 001003                                                                                                       
+           001004                                                                                                       
+           001005                                                                                                       
+ 301003  3 001011                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+ 301011  3 004001                                                                                                       
+           004002                                                                                                       
+           004003                                                                                                       
+ 301012  2 004004                                                                                                       
+           004005                                                                                                       
+ 301013  3 004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+ 301021  2 005001                                                                                                       
+           006001                                                                                                       
+ 301022  3 005001                                                                                                       
+           006001                                                                                                       
+           007001                                                                                                       
+ 301023  2 005002                                                                                                       
+           006002                                                                                                       
+ 301024  3 005002                                                                                                       
+           006002                                                                                                       
+           007001                                                                                                       
+ 301025  3 301023                                                                                                       
+           004003                                                                                                       
+           301012                                                                                                       
+ 301026  7 301021                                                                                                       
+           004003                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004005                                                                                                       
+ 301031  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301032  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301033  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+ 301034  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301035  7 001005                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301036  5 301003                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301037  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301038  6 301001                                                                                                       
+           002001                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301039  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301040  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301041  5 001007                                                                                                       
+           002021                                                                                                       
+           002022                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+ 301042  2 301041                                                                                                       
+           301021                                                                                                       
+ 301043  5 001007                                                                                                       
+           002023                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301044  5 001007                                                                                                       
+           002024                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301051  6 001006                                                                                                       
+           002061                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+           008004                                                                                                       
+ 301194  8 001194                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301195  8 001195                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301200  2 001032                                                                                                       
+           033194                                                                                                       
+ 301201  2 101003                                                                                                       
+           033193                                                                                                       
+ 301237  6 001007                                                                                                       
+           001012                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+ 301238 14 002104                                                                                                       
+           002121                                                                                                       
+           002113                                                                                                       
+           002026                                                                                                       
+           002027                                                                                                       
+           002111                                                                                                       
+           002112                                                                                                       
+           202127                                                                                                       
+           001013                                                                                                       
+           202126                                                                                                       
+           007001                                                                                                       
+           202000                                                                                                       
+           025010                                                                                                       
+           021194                                                                                                       
+ 301239  5 002111                                                                                                       
+           002112                                                                                                       
+           021192                                                                                                       
+           021193                                                                                                       
+           021195                                                                                                       
+ 301240  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301241  5 201141                                                                                                       
+           202130                                                                                                       
+           007001                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301242  6 021207                                                                                                       
+           021208                                                                                                       
+           021209                                                                                                       
+           021210                                                                                                       
+           021211                                                                                                       
+           021212                                                                                                       
+ 302001  4 010004                                                                                                       
+           010051                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302002  5 010004                                                                                                       
+           007004                                                                                                       
+           010003                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302003  9 011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+           012006                                                                                                       
+           013003                                                                                                       
+           020001                                                                                                       
+           020003                                                                                                       
+           020004                                                                                                       
+           020005                                                                                                       
+ 302004  7 020010                                                                                                       
+           008002                                                                                                       
+           020011                                                                                                       
+           020013                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+ 302005  4 008002                                                                                                       
+           020011                                                                                                       
+           020012                                                                                                       
+           020013                                                                                                       
+ 302011  3 302001                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302012  3 302002                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302021  3 022001                                                                                                       
+           022011                                                                                                       
+           022021                                                                                                       
+ 302022  3 022002                                                                                                       
+           022012                                                                                                       
+           022022                                                                                                       
+ 302023  3 022003                                                                                                       
+           022013                                                                                                       
+           022023                                                                                                       
+ 302024  3 302022                                                                                                       
+           302023                                                                                                       
+           302023                                                                                                       
+ 303001  3 007003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303002  3 007004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303003  4 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+ 303004  6 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303011  4 007003                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303012  4 007004                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303013  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           013003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303014  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303021  4 007004                                                                                                       
+           007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+ 303022  3 303021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303023  3 303021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303024  3 303021                                                                                                       
+           013016                                                                                                       
+           204000                                                                                                       
+ 303025  5 002025                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012063                                                                                                       
+           204000                                                                                                       
+ 303026  6 007004                                                                                                       
+           008003                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303027  5 007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303031  6 007004                                                                                                       
+           008003                                                                                                       
+           007021                                                                                                       
+           007022                                                                                                       
+           008012                                                                                                       
+           012061                                                                                                       
+ 303032  2 020011                                                                                                       
+           020016                                                                                                       
+ 304001  5 008003                                                                                                       
+           010004                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304002  4 008003                                                                                                       
+           010004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304003  2 008003                                                                                                       
+           012001                                                                                                       
+ 304004  4 008003                                                                                                       
+           010004                                                                                                       
+           020010                                                                                                       
+           012001                                                                                                       
+ 304005  4 002024                                                                                                       
+           007004                                                                                                       
+           007004                                                                                                       
+           013003                                                                                                       
+ 304006  3 014001                                                                                                       
+           014001                                                                                                       
+           014003                                                                                                       
+ 306001  5 002032                                                                                                       
+           102000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022042                                                                                                       
+ 306002  3 002031                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306003  4 002002                                                                                                       
+           011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+ 306004  7 002032                                                                                                       
+           002033                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022043                                                                                                       
+           022062                                                                                                       
+ 306005  6 002031                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306006  3 306003                                                                                                       
+           306002                                                                                                       
+           022063                                                                                                       
+ 306007  6 001012                                                                                                       
+           001014                                                                                                       
+           306008                                                                                                       
+           004024                                                                                                       
+           027003                                                                                                       
+           028003                                                                                                       
+ 306008  3 002034                                                                                                       
+           002035                                                                                                       
+           002036                                                                                                       
+ 307001  2 301031                                                                                                       
+           302011                                                                                                       
+ 307002  2 301032                                                                                                       
+           302011                                                                                                       
+ 307003  4 307001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307004  4 307002                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307005  3 307001                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307006  3 307002                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307007  2 301031                                                                                                       
+           302012                                                                                                       
+ 307008  2 301032                                                                                                       
+           302012                                                                                                       
+ 308001  3 301033                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308002  3 301034                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308003  3 301035                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308004  3 301036                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308005  2 308004                                                                                                       
+           302024                                                                                                       
+ 308006  8 010004                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           012004                                                                                                       
+           013003                                                                                                       
+           022042                                                                                                       
+ 309001  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309002  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309003  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309004  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309005  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309006  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309007  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309008  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309011  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309012  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309013  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309014  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309015  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309016  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309017  5 301040                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309018  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309019  8 301031                                                                                                       
+           002003                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           007003                                                                                                       
+           011003                                                                                                       
+           011004                                                                                                       
+           011005                                                                                                       
+ 309194  5 301194                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309195  5 301195                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 310001  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101026                                                                                                       
+           303025                                                                                                       
+ 310002  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101009                                                                                                       
+           303023                                                                                                       
+ 310003  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101006                                                                                                       
+           303023                                                                                                       
+ 310004  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101003                                                                                                       
+           303024                                                                                                       
+ 311001  9 301051                                                                                                       
+           007002                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011031                                                                                                       
+           011032                                                                                                       
+           011033                                                                                                       
+           020041                                                                                                       
+ 312001  2 301043                                                                                                       
+           304001                                                                                                       
+ 312002  2 301043                                                                                                       
+           304002                                                                                                       
+ 312003  2 301042                                                                                                       
+           304003                                                                                                       
+ 312004  2 301042                                                                                                       
+           304004                                                                                                       
+ 312005  2 301042                                                                                                       
+           020014                                                                                                       
+ 312006  2 301044                                                                                                       
+           304005                                                                                                       
+ 312007  2 301042                                                                                                       
+           304006                                                                                                       
+ 312010  6 001007                                                                                                       
+           005040                                                                                                       
+           002021                                                                                                       
+           005041                                                                                                       
+           004001                                                                                                       
+           004043                                                                                                       
+ 312011  9 202131                                                                                                       
+           201149                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           102032                                                                                                       
+           010002                                                                                                       
+           202000                                                                                                       
+           005043                                                                                                       
+           005053                                                                                                       
+ 312012  6 202129                                                                                                       
+           201132                                                                                                       
+           101019                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312013  6 005033                                                                                                       
+           202129                                                                                                       
+           201135                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312014  8 312010                                                                                                       
+           312011                                                                                                       
+           105056                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           312012                                                                                                       
+           312013                                                                                                       
+ 312015 10 109011                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101004                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312016  3 312010                                                                                                       
+           312011                                                                                                       
+           312015                                                                                                       
+ 312017 10 109008                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101003                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312018  3 312010                                                                                                       
+           312011                                                                                                       
+           312017                                                                                                       
+ 312200 10 301237                                                                                                       
+           301238                                                                                                       
+           029002                                                                                                       
+           021206                                                                                                       
+           104012                                                                                                       
+           006232                                                                                                       
+           102012                                                                                                       
+           005232                                                                                                       
+           021205                                                                                                       
+           021196                                                                                                       
+ 312201  6 301237                                                                                                       
+           101003                                                                                                       
+           301239                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021197                                                                                                       
+ 312202 13 301237                                                                                                       
+           008022                                                                                                       
+           011012                                                                                                       
+           011050                                                                                                       
+           301240                                                                                                       
+           022243                                                                                                       
+           301241                                                                                                       
+           010050                                                                                                       
+           021198                                                                                                       
+           021201                                                                                                       
+           021202                                                                                                       
+           021203                                                                                                       
+           301242                                                                                                       
+ 312203  6 301237                                                                                                       
+           008022                                                                                                       
+           012061                                                                                                       
+           022050                                                                                                       
+           021204                                                                                                       
+           021199                                                                                                       
+ 312204 11 312201                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021200                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           008222                                                                                                       
+           004024                                                                                                       
+           002192                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+ 313009  4 021001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021001                                                                                                       
+ 313010  4 021036                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021036                                                                                                       
+ 313031  5 006002
+           006012
+           101000
+           031002
+           030001
+ 313032  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313031                                                                                                       
+ 313041 10 006002                                                                                                       
+           006012                                                                                                       
+           106000                                                                                                       
+           031001                                                                                                       
+           101000                                                                                                       
+           031011                                                                                                       
+           030001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           030001                                                                                                       
+ 313042  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313041                                                                                                       
+ 315001  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306001                                                                                                       
+ 315002  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306004                                                                                                       
+ 316001 10 301011                                                                                                       
+           004004                                                                                                       
+           301023                                                                                                       
+           001021                                                                                                       
+           002041                                                                                                       
+           019001                                                                                                       
+           010051                                                                                                       
+           019002                                                                                                       
+           019003                                                                                                       
+           019004                                                                                                       
+ 318001  2 301025                                                                                                       
+           024011                                                                                                       
+ 318003  4 301026                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024021                                                                                                       
+ 318004  6 301025                                                                                                       
+           004023                                                                                                       
+           013011                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024022                                                                                                       
+ 321001  6 002101                                                                                                       
+           002114                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002121                                                                                                       
+ 321003  4 021051                                                                                                       
+           021014                                                                                                       
+           021017                                                                                                       
+           025030                                                                                                       
+ 321004  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           321003                                                                                                       
+ 321005 12 025004                                                                                                       
+           002121                                                                                                       
+           002122                                                                                                       
+           002123                                                                                                       
+           002124                                                                                                       
+           002125                                                                                                       
+           002126                                                                                                       
+           002127                                                                                                       
+           002128                                                                                                       
+           002129                                                                                                       
+           002130                                                                                                       
+           002131                                                                                                       
+ 321006  4 025001                                                                                                       
+           025002                                                                                                       
+           025003                                                                                                       
+           025005                                                                                                       
+ 321007  8 025009                                                                                                       
+           025010                                                                                                       
+           025011                                                                                                       
+           025012                                                                                                       
+           025013                                                                                                       
+           025015                                                                                                       
+           025016                                                                                                       
+           025017                                                                                                       
+ 321008  3 025006                                                                                                       
+           025007                                                                                                       
+           025008                                                                                                       
+ 321009  2 025018                                                                                                       
+           025019                                                                                                       
+ 321010 13 002101                                                                                                       
+           007002                                                                                                       
+           002102                                                                                                       
+           002103                                                                                                       
+           002104                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002108                                                                                                       
+           002109                                                                                                       
+           002110                                                                                                       
+           002132                                                                                                       
+           002133                                                                                                       
+ 321011  3 030031                                                                                                       
+           030032                                                                                                       
+           029002                                                                                                       
+ 321012  3 101000                                                                                                       
+           031001                                                                                                       
+           002135                                                                                                       
diff --git a/bufrtables/D0000000000098002001.TXT b/bufrtables/D0000000000098002001.TXT
new file mode 100755
index 0000000..619249e
--- /dev/null
+++ b/bufrtables/D0000000000098002001.TXT
@@ -0,0 +1,914 @@
+ 300002  2 000002                                                                                                       
+           000003                                                                                                       
+ 300003  3 000010                                                                                                       
+           000011                                                                                                       
+           000012                                                                                                       
+ 300004  9 300003                                                                                                       
+           000013                                                                                                       
+           000014                                                                                                       
+           000015                                                                                                       
+           000016                                                                                                       
+           000017                                                                                                       
+           000018                                                                                                       
+           000019                                                                                                       
+           000020                                                                                                       
+ 300010  4 300003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           000030                                                                                                       
+ 301001  2 001001                                                                                                       
+           001002                                                                                                       
+ 301002  3 001003                                                                                                       
+           001004                                                                                                       
+           001005                                                                                                       
+ 301003  3 001011                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+ 301011  3 004001                                                                                                       
+           004002                                                                                                       
+           004003                                                                                                       
+ 301012  2 004004                                                                                                       
+           004005                                                                                                       
+ 301013  3 004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+ 301021  2 005001                                                                                                       
+           006001                                                                                                       
+ 301022  3 005001                                                                                                       
+           006001                                                                                                       
+           007001                                                                                                       
+ 301023  2 005002                                                                                                       
+           006002                                                                                                       
+ 301024  3 005002                                                                                                       
+           006002                                                                                                       
+           007001                                                                                                       
+ 301025  3 301023                                                                                                       
+           004003                                                                                                       
+           301012                                                                                                       
+ 301026  7 301021                                                                                                       
+           004003                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004005                                                                                                       
+ 301031  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301032  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301033  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+ 301034  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301035  7 001005                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301036  5 301003                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301037  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301038  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301039  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301040  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301041  5 001007                                                                                                       
+           002021                                                                                                       
+           002022                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+ 301042  2 301041                                                                                                       
+           301021                                                                                                       
+ 301043  5 001007                                                                                                       
+           002023                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301044  5 001007                                                                                                       
+           002024                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301051  6 001006                                                                                                       
+           002061                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+           008004                                                                                                       
+ 301062  3 101000                                                                                                       
+           031001                                                                                                       
+           301001                                                                                                       
+ 301194  9 001194                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301195  9 001195                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301196  7 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301197  9 001006                                                                                                       
+           001008                                                                                                       
+           002061                                                                                                       
+           002062                                                                                                       
+           002002                                                                                                       
+           002005                                                                                                       
+           002070                                                                                                       
+           002063                                                                                                       
+           002001                                                                                                       
+ 301200  2 001032                                                                                                       
+           033194                                                                                                       
+ 301201  2 101003                                                                                                       
+           033193                                                                                                       
+ 301202  2 001031                                                                                                       
+           001032                                                                                                       
+ 301237 12 001007                                                                                                       
+           001012                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           301023                                                                                                       
+ 301238 14 002104                                                                                                       
+           002121                                                                                                       
+           002113                                                                                                       
+           002026                                                                                                       
+           002027                                                                                                       
+           002111                                                                                                       
+           002192                                                                                                       
+           202127                                                                                                       
+           001013                                                                                                       
+           202126                                                                                                       
+           007001                                                                                                       
+           202000                                                                                                       
+           025010                                                                                                       
+           021194                                                                                                       
+ 301239  5 002111                                                                                                       
+           002112                                                                                                       
+           021192                                                                                                       
+           021193                                                                                                       
+           021195                                                                                                       
+ 301240  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301241  5 201141                                                                                                       
+           202130                                                                                                       
+           007001                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301242  6 021207                                                                                                       
+           021208                                                                                                       
+           021209                                                                                                       
+           021210                                                                                                       
+           021211                                                                                                       
+           021212                                                                                                       
+ 302001  4 010004                                                                                                       
+           010051                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302002  5 010004                                                                                                       
+           007004                                                                                                       
+           010003                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302003  9 011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+           012006                                                                                                       
+           013003                                                                                                       
+           020001                                                                                                       
+           020003                                                                                                       
+           020004                                                                                                       
+           020005                                                                                                       
+ 302004  7 020010                                                                                                       
+           008002                                                                                                       
+           020011                                                                                                       
+           020013                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+ 302005  4 008002                                                                                                       
+           020011                                                                                                       
+           020012                                                                                                       
+           020013                                                                                                       
+ 302011  3 302001                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302012  3 302002                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302021  3 022001                                                                                                       
+           022011                                                                                                       
+           022021                                                                                                       
+ 302022  3 022002                                                                                                       
+           022012                                                                                                       
+           022022                                                                                                       
+ 302023  3 022003                                                                                                       
+           022013                                                                                                       
+           022023                                                                                                       
+ 302024  3 302022                                                                                                       
+           101002                                                                                                       
+           302023                                                                                                       
+ 302205  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 302206  9 302205                                                                                                       
+           201130                                                                                                       
+           202129                                                                                                       
+           022011                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           022001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 302207  5 022193                                                                                                       
+           022194                                                                                                       
+           022195                                                                                                       
+           022196                                                                                                       
+           022197                                                                                                       
+ 303001  3 007003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303002  3 007004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303003  4 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+ 303004  6 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303011  4 007003                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303012  4 007004                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303013  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           013003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303014  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303021  4 007004                                                                                                       
+           007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+ 303022  3 303021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303023  3 303021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303024  3 303021                                                                                                       
+           013016                                                                                                       
+           204000                                                                                                       
+ 303025  5 002025                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012063                                                                                                       
+           204000                                                                                                       
+ 303026  6 007004                                                                                                       
+           008003                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303027  5 007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303031  6 007004                                                                                                       
+           008003                                                                                                       
+           007021                                                                                                       
+           007022                                                                                                       
+           008012                                                                                                       
+           012061                                                                                                       
+ 303032  2 020011                                                                                                       
+           020016                                                                                                       
+ 304001  5 008003                                                                                                       
+           010004                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304002  4 008003                                                                                                       
+           010004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304003  2 008003                                                                                                       
+           012001                                                                                                       
+ 304004  4 008003                                                                                                       
+           010004                                                                                                       
+           020010                                                                                                       
+           012001                                                                                                       
+ 304005  4 002024                                                                                                       
+           007004                                                                                                       
+           007004                                                                                                       
+           013003                                                                                                       
+ 304006  3 014001                                                                                                       
+           014001                                                                                                       
+           014003                                                                                                       
+ 304228  3 005217                                                                                                       
+           006217                                                                                                       
+           007217                                                                                                       
+ 304229  3 001208                                                                                                       
+           001209                                                                                                       
+           001210                                                                                                       
+ 306001  5 002032                                                                                                       
+           102000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022042                                                                                                       
+ 306002  3 002031                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306003  4 002002                                                                                                       
+           011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+ 306004  7 002032                                                                                                       
+           002033                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022043                                                                                                       
+           022062                                                                                                       
+ 306005  6 002031                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306006  3 306003                                                                                                       
+           306002                                                                                                       
+           022063                                                                                                       
+ 306007  6 001012                                                                                                       
+           001014                                                                                                       
+           306008                                                                                                       
+           004024                                                                                                       
+           027003                                                                                                       
+           028003                                                                                                       
+ 306008  3 002034                                                                                                       
+           002035                                                                                                       
+           002036                                                                                                       
+ 307001  2 301031                                                                                                       
+           302011                                                                                                       
+ 307002  2 301032                                                                                                       
+           302011                                                                                                       
+ 307003  4 307001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307004  4 307002                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307005  3 307001                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307006  3 307002                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307007  2 301031                                                                                                       
+           302012                                                                                                       
+ 307008  2 301032                                                                                                       
+           302012                                                                                                       
+ 308001  3 301033                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308002  3 301034                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308003  3 301035                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308004  3 301036                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308005  2 308004                                                                                                       
+           302024                                                                                                       
+ 308006  8 010004                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           012004                                                                                                       
+           013003                                                                                                       
+           022042                                                                                                       
+ 309001  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309002  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309003  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309004  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309005  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309006  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309007  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309008  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309011  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309012  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309013  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309014  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309015  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309016  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309017  5 301040                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309018  5 301031                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309019  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309020  8 301031                                                                                                       
+           002003                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           007003                                                                                                       
+           011003                                                                                                       
+           011004                                                                                                       
+           011005                                                                                                       
+ 309194  5 301194                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309195  5 301195                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309196  5 301196                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 310001  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101026                                                                                                       
+           303025                                                                                                       
+ 310002  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101009                                                                                                       
+           303023                                                                                                       
+ 310003  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101006                                                                                                       
+           303023                                                                                                       
+ 310004  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101003                                                                                                       
+           303024                                                                                                       
+ 311001  9 301051                                                                                                       
+           007002                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011031                                                                                                       
+           011032                                                                                                       
+           011033                                                                                                       
+           020041                                                                                                       
+ 311193 16 301197                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           008004                                                                                                       
+           007004                                                                                                       
+           008021                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011031                                                                                                       
+           011034                                                                                                       
+           011035                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           013003                                                                                                       
+           020041                                                                                                       
+ 312001  2 301043                                                                                                       
+           304001                                                                                                       
+ 312002  2 301043                                                                                                       
+           304002                                                                                                       
+ 312003  2 301042                                                                                                       
+           304003                                                                                                       
+ 312004  2 301042                                                                                                       
+           304004                                                                                                       
+ 312005  2 301042                                                                                                       
+           020014                                                                                                       
+ 312006  2 301044                                                                                                       
+           304005                                                                                                       
+ 312007  2 301042                                                                                                       
+           304006                                                                                                       
+ 312010  6 001007                                                                                                       
+           005040                                                                                                       
+           002021                                                                                                       
+           005041                                                                                                       
+           004001                                                                                                       
+           004043                                                                                                       
+ 312011  9 202131                                                                                                       
+           201149                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202126                                                                                                       
+           010002                                                                                                       
+           202000                                                                                                       
+           005043                                                                                                       
+           005053                                                                                                       
+ 312012  6 202129                                                                                                       
+           201132                                                                                                       
+           101019                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312013  6 005033                                                                                                       
+           202129                                                                                                       
+           201135                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312014  8 312010                                                                                                       
+           312011                                                                                                       
+           105056                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           312012                                                                                                       
+           312013                                                                                                       
+ 312015 10 109011                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101004                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312016  3 312010                                                                                                       
+           312011                                                                                                       
+           312015                                                                                                       
+ 312017 10 109008                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101003                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312018  3 312010                                                                                                       
+           312011                                                                                                       
+           312017                                                                                                       
+ 312200 10 301237                                                                                                       
+           301238                                                                                                       
+           029002                                                                                                       
+           021206                                                                                                       
+           104012                                                                                                       
+           006232                                                                                                       
+           102012                                                                                                       
+           005232                                                                                                       
+           021205                                                                                                       
+           021196                                                                                                       
+ 312201  6 301237                                                                                                       
+           101003                                                                                                       
+           301239                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021197                                                                                                       
+ 312202 13 301237                                                                                                       
+           008022                                                                                                       
+           011012                                                                                                       
+           011050                                                                                                       
+           301240                                                                                                       
+           022243                                                                                                       
+           301241                                                                                                       
+           010050                                                                                                       
+           021198                                                                                                       
+           021201                                                                                                       
+           021202                                                                                                       
+           021203                                                                                                       
+           301242                                                                                                       
+ 312203  8 301237                                                                                                       
+           008022                                                                                                       
+           012061                                                                                                       
+           022050                                                                                                       
+           021204                                                                                                       
+           021199                                                                                                       
+           021214                                                                                                       
+           021215                                                                                                       
+ 312204 12 312201                                                                                                       
+           001031                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021200                                                                                                       
+           021213                                                                                                       
+           004004                                                                                                       
+           008021                                                                                                       
+           004024                                                                                                       
+           055003                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+ 312207  3 312202                                                                                                       
+           301202                                                                                                       
+           033191                                                                                                       
+ 312208 17 301202                                                                                                       
+           008022                                                                                                       
+           008021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           302205                                                                                                       
+           011002                                                                                                       
+           001007                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           001032                                                                                                       
+           001192                                                                                                       
+           302205                                                                                                       
+           011002                                                                                                       
+ 312209 11 301202                                                                                                       
+           001192                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           302206                                                                                                       
+           104000                                                                                                       
+           022192                                                                                                       
+           102000                                                                                                       
+           005232                                                                                                       
+           022191                                                                                                       
+ 312210 13 312202                                                                                                       
+           021192                                                                                                       
+           015202                                                                                                       
+           301011                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           304228                                                                                                       
+           304229                                                                                                       
+ 313009  4 021001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021001                                                                                                       
+ 313010  4 021036                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021036                                                                                                       
+ 313031  5 006002                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           030001                                                                                                       
+ 313032  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313031                                                                                                       
+ 313041 10 006002                                                                                                       
+           006012                                                                                                       
+           106000                                                                                                       
+           031001                                                                                                       
+           101000                                                                                                       
+           031011                                                                                                       
+           030001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           030001                                                                                                       
+ 313042  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313041                                                                                                       
+ 315001  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306001                                                                                                       
+ 315002  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306004                                                                                                       
+ 316001 10 301011                                                                                                       
+           004004                                                                                                       
+           301023                                                                                                       
+           001021                                                                                                       
+           002041                                                                                                       
+           019001                                                                                                       
+           010051                                                                                                       
+           019002                                                                                                       
+           019003                                                                                                       
+           019004                                                                                                       
+ 318001  2 301025                                                                                                       
+           024011                                                                                                       
+ 318003  4 301026                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024021                                                                                                       
+ 318004  6 301025                                                                                                       
+           004023                                                                                                       
+           013011                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024022                                                                                                       
+ 321001  6 002101                                                                                                       
+           002114                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002121                                                                                                       
+ 321003  4 021051                                                                                                       
+           021014                                                                                                       
+           021017                                                                                                       
+           025030                                                                                                       
+ 321004  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           321003                                                                                                       
+ 321005 12 025004                                                                                                       
+           002121                                                                                                       
+           002122                                                                                                       
+           002123                                                                                                       
+           002124                                                                                                       
+           002125                                                                                                       
+           002126                                                                                                       
+           002127                                                                                                       
+           002128                                                                                                       
+           002129                                                                                                       
+           002130                                                                                                       
+           002131                                                                                                       
+ 321006  4 025001                                                                                                       
+           025002                                                                                                       
+           025003                                                                                                       
+           025005                                                                                                       
+ 321007  8 025009                                                                                                       
+           025010                                                                                                       
+           025011                                                                                                       
+           025012                                                                                                       
+           025013                                                                                                       
+           025015                                                                                                       
+           025016                                                                                                       
+           025017                                                                                                       
+ 321008  3 025006                                                                                                       
+           025007                                                                                                       
+           025008                                                                                                       
+ 321009  2 025018                                                                                                       
+           025019                                                                                                       
+ 321010 13 002101                                                                                                       
+           007002                                                                                                       
+           002102                                                                                                       
+           002103                                                                                                       
+           002104                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002108                                                                                                       
+           002109                                                                                                       
+           002110                                                                                                       
+           002132                                                                                                       
+           002133                                                                                                       
+ 321011  3 030031                                                                                                       
+           030032                                                                                                       
+           029002                                                                                                       
+ 321012  3 101000                                                                                                       
+           031001                                                                                                       
+           002135                                                                                                       
diff --git a/bufrtables/D0000000000098006000.TXT b/bufrtables/D0000000000098006000.TXT
new file mode 100755
index 0000000..d2d2c78
--- /dev/null
+++ b/bufrtables/D0000000000098006000.TXT
@@ -0,0 +1,2077 @@
+ 300002  2 000002                                                                                                       
+           000003                                                                                                       
+ 300003  3 000010                                                                                                       
+           000011                                                                                                       
+           000012                                                                                                       
+ 300004  9 300003                                                                                                       
+           000013                                                                                                       
+           000014                                                                                                       
+           000015                                                                                                       
+           000016                                                                                                       
+           000017                                                                                                       
+           000018                                                                                                       
+           000019                                                                                                       
+           000020                                                                                                       
+ 300010  4 300003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           000030                                                                                                       
+ 301001  2 001001                                                                                                       
+           001002                                                                                                       
+ 301002  3 001003                                                                                                       
+           001004                                                                                                       
+           001005                                                                                                       
+ 301003  3 001011                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+ 301011  3 004001                                                                                                       
+           004002                                                                                                       
+           004003                                                                                                       
+ 301012  2 004004                                                                                                       
+           004005                                                                                                       
+ 301013  3 004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+ 301021  2 005001                                                                                                       
+           006001                                                                                                       
+ 301022  3 005001                                                                                                       
+           006001                                                                                                       
+           007001                                                                                                       
+ 301023  2 005002                                                                                                       
+           006002                                                                                                       
+ 301024  3 005002                                                                                                       
+           006002                                                                                                       
+           007001                                                                                                       
+ 301025  3 301023                                                                                                       
+           004003                                                                                                       
+           301012                                                                                                       
+ 301026  7 301021                                                                                                       
+           004003                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004005                                                                                                       
+ 301029  3 001018
+           002001
+           301011
+ 301030  4 001018
+           002001
+           301011
+           301024
+ 301031  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301032  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301033  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+ 301034  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301035  7 001005                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301036  5 301003                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301037  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301038  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301039  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301040  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301041  5 001007                                                                                                       
+           002021                                                                                                       
+           002022                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+ 301042  2 301041                                                                                                       
+           301021                                                                                                       
+ 301043  5 001007                                                                                                       
+           002023                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301044  5 001007                                                                                                       
+           002024                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301045  9 301011                                                                                                       
+           301012                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           304030                                                                                                       
+           304031                                                                                                       
+ 301046 10 001007   SeaWinds header information::SATELLITE IDENTIFIER
+           001012                                DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM
+           002048                                SATELLITE SENSOR INDICATOR
+           021119                             WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION
+           025060                             SOFTWARE INDENTIFICATION
+           202124                                *** decrease scaling by 10^4
+           002026                                ALONG TRACK RESOLUTION
+           002027                                CROSS TRACK RESOLUTION
+           202000                                *** cancel change scaling
+           005040                                ORBIT NUMBER
+ 301047 15 001007                                                                                                       
+           025060                                                                                                       
+           001033                                                                                                       
+           001034                                                                                                       
+           001012                                                                                                       
+           301045                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           301023                                                                                                       
+ 301048 14 002104                                                                                                       
+           002121                                                                                                       
+           002113                                                                                                       
+           002026                                                                                                       
+           002027                                                                                                       
+           002111                                                                                                       
+           002140                                                                                                       
+           202127                                                                                                       
+           001013                                                                                                       
+           202126                                                                                                       
+           007001                                                                                                       
+           202000                                                                                                       
+           025010                                                                                                       
+           021064                                                                                                       
+ 301049  5 002111                                                                                                       
+           002112                                                                                                       
+           021062                                                                                                       
+           021063                                                                                                       
+           021065                                                                                                       
+ 301051  6 001006                                                                                                       
+           002061                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+           008004                                                                                                       
+ 301055  7 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+           001012                                                                                                       
+           001014                                                                                                       
+ 301062  3 101000                                                                                                       
+           031001                                                                                                       
+           301001                                                                                                       
+ 301065  8 001006
+           001008
+           002001
+           002002
+           002005
+           002062
+           002070
+           002065
+ 301066  6 301011
+           301013
+           301023
+           007004
+           002064
+           008004
+ 301070  3 002143
+           002142
+           002144
+ 301071  4 002143
+           002142
+           002145
+           002146
+ 301072  4 301071
+           301011
+           301013
+           301021
+ 301074  4 002143
+           002142
+           002145
+           002146
+ 301075  6 301001
+           001015
+           301022
+           008021
+           301011
+           301012
+ 301076  3 002011
+           002143
+           002142
+ 301193  5 001007                                                                                                       
+           001031                                                                                                       
+           002196                                                                                                       
+           002221                                                                                                       
+           002222
+ 301194  9 001194                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301195  9 001195                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301196  7 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301197  9 001006
+           001008
+           002061
+           002062
+           002002
+           002005
+           002070
+           002063
+           002001
+ 301200  2 001032                                                                                                       
+           033194                                                                                                       
+ 301201  2 101003                                                                                                       
+           033193                                                                                                       
+ 301202  2 001031                                                                                                       
+           001032                                                                                                       
+ 301237 12 001007                                                                                                       
+           001012                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           301023                                                                                                       
+ 301238 14 002104                                                                                                       
+           002121                                                                                                       
+           002113                                                                                                       
+           002026                                                                                                       
+           002027                                                                                                       
+           002111                                                                                                       
+           002192                                                                                                       
+           202127                                                                                                       
+           001013                                                                                                       
+           202126                                                                                                       
+           007001                                                                                                       
+           202000                                                                                                       
+           025010                                                                                                       
+           021194                                                                                                       
+ 301239  5 002111                                                                                                       
+           002112                                                                                                       
+           021192                                                                                                       
+           021193                                                                                                       
+           021195                                                                                                       
+ 301240  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301241  5 201141                                                                                                       
+           202130                                                                                                       
+           007001                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301242  6 021207                                                                                                       
+           021208                                                                                                       
+           021209                                                                                                       
+           021210                                                                                                       
+           021211                                                                                                       
+           021212                                                                                                       
+ 301250  4 301193                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 302001  4 010004                                                                                                       
+           010051                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302002  5 010004                                                                                                       
+           007004                                                                                                       
+           010003                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302003  9 011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+           012006                                                                                                       
+           013003                                                                                                       
+           020001                                                                                                       
+           020003                                                                                                       
+           020004                                                                                                       
+           020005                                                                                                       
+ 302004  7 020010                                                                                                       
+           008002                                                                                                       
+           020011                                                                                                       
+           020013                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+ 302005  4 008002                                                                                                       
+           020011                                                                                                       
+           020012                                                                                                       
+           020013                                                                                                       
+ 302006  4 010004                                                                                                       
+           010051                                                                                                       
+           010062                                                                                                       
+           010063                                                                                                       
+ 302011  3 302001                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302012  3 302002                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302013  5 302006                                                                                                       
+           302003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 302021  3 022001                                                                                                       
+           022011                                                                                                       
+           022021                                                                                                       
+ 302022  3 022002                                                                                                       
+           022012                                                                                                       
+           022022                                                                                                       
+ 302023  3 022003                                                                                                       
+           022013                                                                                                       
+           022023                                                                                                       
+ 302024  3 302022                                                                                                       
+           101002                                                                                                       
+           302023                                                                                                       
+ 302051 12 010004                                                                                                       
+           010051                                                                                                       
+           007004                                                                                                       
+           010003                                                                                                       
+           012004                                                                                                       
+           012051                                                                                                       
+           012016                                                                                                       
+           012017                                                                                                       
+           013004                                                                                                       
+           102004                                                                                                       
+           008051                                                                                                       
+           008020                                                                                                       
+ 302205  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 302206  9 302205                                                                                                       
+           201130                                                                                                       
+           202129                                                                                                       
+           022011                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           022001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 302207  5 022193
+           022194
+           022195
+           022196
+           022197
+ 302250  5 102000                                                                                                       
+           031001                                                                                                       
+           020193                                                                                                       
+           020194
+           020012                                                                                                       
+ 303001  3 007003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303002  3 007004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303003  4 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+ 303004  6 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303011  4 007003                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303012  4 007004                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303013  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           013003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303014  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303021  4 007004                                                                                                       
+           007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+ 303022  3 303021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303023  3 303021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303024  3 303021                                                                                                       
+           013016                                                                                                       
+           204000                                                                                                       
+ 303025  5 002025                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012063                                                                                                       
+           204000                                                                                                       
+ 303026  6 007004                                                                                                       
+           008003                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303027  5 007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303031  6 007004                                                                                                       
+           008003                                                                                                       
+           007021                                                                                                       
+           007022                                                                                                       
+           008012                                                                                                       
+           012061                                                                                                       
+ 303032  2 020011                                                                                                       
+           020016                                                                                                       
+ 303033  2 020010                                                                                                       
+           020016                                                                                                       
+ 303041  8 002152
+           002023
+           007004
+           011001
+           011002
+           002153
+           002154
+           012071
+ 303249  7 002252                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           002199                                                                                                       
+           007004                                                                                                       
+           007004                                                                                                       
+           013003                                                                                                       
+ 303250  8 002252                                                                                                       
+           002023                                                                                                       
+           007004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           002197                                                                                                       
+           002198                                                                                                       
+           012193                                                                                                       
+ 303251  8 002252                                                                                                       
+           105000                                                                                                       
+           031001                                                                                                       
+           002254                                                                                                       
+           002251                                                                                                       
+           002197                                                                                                       
+           002198                                                                                                       
+           012063                                                                                                       
+ 303252  8 002252                                                                                                       
+           105000                                                                                                       
+           031001                                                                                                       
+           002254                                                                                                       
+           002251                                                                                                       
+           002197                                                                                                       
+           002198                                                                                                       
+           012194                                                                                                       
+ 304001  5 008003                                                                                                       
+           010004                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304002  4 008003                                                                                                       
+           010004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304003  2 008003                                                                                                       
+           012001                                                                                                       
+ 304004  4 008003                                                                                                       
+           010004                                                                                                       
+           020010                                                                                                       
+           012001                                                                                                       
+ 304005  4 002024                                                                                                       
+           007004                                                                                                       
+           007004                                                                                                       
+           013003                                                                                                       
+ 304006  3 014001                                                                                                       
+           014001                                                                                                       
+           014003                                                                                                       
+ 304011 27 002163
+           002164
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002163
+           007004
+           012001
+ 304030  3 027031                                                                                                       
+           028031                                                                                                       
+           010031                                                                                                       
+ 304031  3 001041                                                                                                       
+           001042                                                                                                       
+           001043                                                                                                       
+ 304032  5 002153
+           002154
+           020081
+           020082
+           020012
+ 304033  8 002152
+           002166
+           002167
+           002153
+           002154
+           012075
+           012076
+           012063
+ 304034  9 102004
+           027001
+           028001
+           007022
+           005043
+           020010
+           020016
+           033003
+           010040
+ 304228  3 005217                                                                                                       
+           006217                                                                                                       
+           007217                                                                                                       
+ 304229  3 001208                                                                                                       
+           001209                                                                                                       
+           001210                                                                                                       
+ 304250 27 002231                                                                                                       
+           002232                                                                                                       
+           008012                                                                                                       
+           007024                                                                                                       
+           002057                                                                                                       
+           008021                                                                                                       
+           004001                                                                                                       
+           004002                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           008021                                                                                                       
+           004024                                                                                                       
+           110004                                                                                                       
+           008021                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+           008021                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           103010                                                                                                       
+           002231                                                                                                       
+           007004                                                                                                       
+           012001                                                                                                       
+ 306001  5 002032                                                                                                       
+           102000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022042                                                                                                       
+ 306002  3 002031                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306003  4 002002                                                                                                       
+           011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+ 306004  7 002032                                                                                                       
+           002033                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022043                                                                                                       
+           022062                                                                                                       
+ 306005  6 002031                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306006  3 306003                                                                                                       
+           306002                                                                                                       
+           022063                                                                                                       
+ 306007  6 001012                                                                                                       
+           001014                                                                                                       
+           306008                                                                                                       
+           004024                                                                                                       
+           027003                                                                                                       
+           028003                                                                                                       
+ 306008  3 002034                                                                                                       
+           002035                                                                                                       
+           002036                                                                                                       
+ 306023  8 001015                                                                                                       
+           301023                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           022038                                                                                                       
+           022039                                                                                                       
+           022120                                                                                                       
+           022121                                                                                                       
+ 307001  2 301031                                                                                                       
+           302011                                                                                                       
+ 307002  2 301032                                                                                                       
+           302011                                                                                                       
+ 307003  4 307001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307004  4 307002                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307005  3 307001                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307006  3 307002                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307007  2 301031                                                                                                       
+           302012                                                                                                       
+ 307008  2 301032                                                                                                       
+           302012                                                                                                       
+ 307009  2 301031                                                                                                       
+           302013                                                                                                       
+ 307011 16 001063                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+           007006                                                                                                       
+           011001                                                                                                       
+           011016                                                                                                       
+           011017                                                                                                       
+           011002                                                                                                       
+           011041                                                                                                       
+           007006                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           010052                                                                                                       
+           020009                                                                                                       
+ 307012  5 103000                                                                                                       
+           031001                                                                                                       
+           008023                                                                                                       
+           005021                                                                                                       
+           020001                                                                                                       
+ 307013  8 106000                                                                                                       
+           031001                                                                                                       
+           001064                                                                                                       
+           008014                                                                                                       
+           020061                                                                                                       
+           008014                                                                                                       
+           020061                                                                                                       
+           020018                                                                                                       
+ 307014  3 101000                                                                                                       
+           031001                                                                                                       
+           020019                                                                                                       
+ 307015  8 101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+           008002                                                                                                       
+           020011                                                                                                       
+           020012                                                                                                       
+           020013                                                                                                       
+           020002                                                                                                       
+ 307016  3 101000                                                                                                       
+           031001                                                                                                       
+           020020                                                                                                       
+ 307017  3 101000                                                                                                       
+           031001                                                                                                       
+           020020                                                                                                       
+ 307018 18 008016                                                                                                       
+           102000                                                                                                       
+           031001                                                                                                       
+           008017                                                                                                       
+           301012                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           007006                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011041                                                                                                       
+           020009                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           020001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           020019                                                                                                       
+ 307020  3 307011                                                                                                       
+           307014                                                                                                       
+           307016                                                                                                       
+ 307021  9 307011                                                                                                       
+           307012                                                                                                       
+           307013                                                                                                       
+           307014                                                                                                       
+           307015                                                                                                       
+           307016                                                                                                       
+           307017                                                                                                       
+           307018                                                                                                       
+           307015                                                                                                       
+ 307030  2 015001
+           015002
+ 307031  7 008022
+           008023
+           015001
+           008023
+           015001
+           008023
+           015002
+ 307041  7 301001
+           001015
+           301022
+           301011
+           301012
+           301070
+           307030
+ 307042  9 301001
+           001015
+           301022
+           301011
+           301012
+           008021
+           004025
+           301070
+           307031
+ 307043  7 301001
+           001015
+           301024
+           301011
+           301012
+           301074
+           307030
+ 308001  3 301033                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308002  3 301034                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308003  3 301035                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308004  3 301036                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308005  2 308004                                                                                                       
+           302024                                                                                                       
+ 308006  8 010004                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           012004                                                                                                       
+           013003                                                                                                       
+           022042                                                                                                       
+ 308007  4 301055                                                                                                       
+           302011                                                                                                       
+           007062                                                                                                       
+           022042                                                                                                       
+ 309001  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309002  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309003  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309004  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309005  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309006  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309007  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309008  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309011  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309012  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309013  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309014  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309015  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309016  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309017  5 301040                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309018  5 301040                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309019  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309020  8 301031                                                                                                       
+           002003                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           007003                                                                                                       
+           011003                                                                                                       
+           011004                                                                                                       
+           011005                                                                                                       
+ 309030  8 015004
+           015005
+           104000
+           031001
+           004015
+           008006
+           007004
+           015003
+ 309040  3 301075
+           301076
+           309030
+ 309042  4 307042
+           301075
+           301076
+           309030
+ 309194  5 301194                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309195  5 301195                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309196  5 301196                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 310001  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101026                                                                                                       
+           303025                                                                                                       
+ 310002  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101009                                                                                                       
+           303023                                                                                                       
+ 310003  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101006                                                                                                       
+           303023                                                                                                       
+ 310004  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101003                                                                                                       
+           303024                                                                                                       
+ 310005  6 301042                                                                                                       
+           303031                                                                                                       
+           303033                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303025                                                                                                       
+ 310006  6 301042                                                                                                       
+           303031                                                                                                       
+           303033                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303023                                                                                                       
+ 310007  6 301042                                                                                                       
+           303031                                                                                                       
+           303033                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303024                                                                                                       
+ 310008  8 310011
+           101019
+           310012
+           002150 
+           025079
+           025080
+           033032
+           014045
+ 310009  3 310011
+           101015
+           310012
+ 310010  3 310011
+           101005
+           310012
+ 310011 45 008070
+           001033
+           001034
+           008070
+           001033
+           001034
+           001007
+           002048
+           005040
+           025075
+           201133
+           005041
+           201000
+           005043
+           025070
+           033030
+           033031
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           202126
+           007001
+           202000
+           007024
+           005021
+           007025
+           005022
+           033033
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+ 310012 10 002150
+           025076
+           025077
+           025078
+           033032
+           201132
+           202129
+           012063
+           202000
+           201000
+ 310013 62 001007   Satellite ID
+           005040   Orbit number
+           004001   Year
+           004002   Month
+           004003   Day
+           004004   Hour
+           004005   Minute
+           004006   Second
+           005001   Latitude
+           006001   Longitude
+           007025   Solar zenith angle
+           005043   Field of view number
+           025085   Fraction of clear pixels in HIRS field of view
+           201131   Change width
+           202129   Change scale
+           002150   TOVS/ATOVS/AVHRR instrumentation channel number
+           008023   First order statistics
+           008072   Pixel(s) type
+           014027   Albedo
+           008072   Pixel(s) type
+           014027   Albedo
+           002150   TOVS/ATOVS/AVHRR instrumentation channel number
+           008023   First order statistics
+           008072   Pixel(s) type
+           014027   Albedo
+           008072   Pixel(s) type
+           014027   Albedo
+           002150   ATOVS/AVHRR instrumentation channel number
+           008023   First order statistics
+           008072   Pixel(s) type
+           014027   Albedo
+           008072   Pixel(s) type
+           014027   Albedo
+           202000   Change scale
+           201000   Change width
+           201132   Change width
+           202129   Change scale
+           002150   ATOVS/AVHRR instrumentation channel number
+           008023   First order statistics
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           002150   ATOVS/AVHRR instrumentation channel number
+           008023   First order statistics
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           008023   First order statistics
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           002150   ATOVS/AVHRR instrumentation channel number
+           008023   First order statistics
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           008072   Pixel(s) type
+           012063   Brightness temperature
+           202000   Change scale
+           201000   Change width
+ 310014  3 301072   Satellite geostationary wind data
+           303041
+           304011
+ 310015 13 301072   Meteosat radiance data
+           007024
+           010002
+           303041
+           101003
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310016 13 301072 Meteosat second generation radiance data
+           007024
+           010002
+           303041
+           101012
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310020  6 310022
+           301011
+           301013
+           301021
+           304034
+           310021
+ 310021 10 108000
+           031001
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+ 310022  4 001007
+           002019
+           001033
+           002172
+ 310023 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101012
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310024 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101003
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310050 14 310051
+           310052
+           101000
+           031002
+           310053
+           101004
+           310054
+           020010
+           310052
+           101015
+           310053
+           310052
+           101004
+           310053
+ 310051 16 001007
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           007025
+           005022
+           102009
+           002151
+           012064
+ 310052 12 002019
+           301011
+           301012
+           202131
+           201138
+           004006
+           201000
+           202000
+           301021
+           007024
+           005021
+           005043
+ 310053  6 201134
+           005042
+           201000
+           025076
+           033032
+           012163
+ 310054 13 201134
+           005042
+           201000
+           025076
+           033032
+           201131
+           202129
+           102002
+           008023
+           014027
+           008023
+           202000
+           201000
+ 310055  8 310051
+           310052
+           102020
+           025076
+           025051
+           101000
+           031002
+           025050
+ 310193  5 301250                                                                                                       
+           303250                                                                                                       
+           302250                                                                                                       
+           303249                                                                                                       
+           303251                                                                                                       
+ 310194  5 301250                                                                                                       
+           303250                                                                                                       
+           302250                                                                                                       
+           303249                                                                                                       
+           303252                                                                                                       
+ 310195  3 301250                                                                                                       
+           303250                                                                                                       
+           304250                                                                                                       
+ 310196  3 301250                                                                                                       
+           303249                                                                                                       
+           303251                                                                                                       
+ 311001  9 301051                                                                                                       
+           007002                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011031                                                                                                       
+           011032                                                                                                       
+           011033                                                                                                       
+           020041                                                                                                       
+ 311002  4 301065
+           301066
+           311003
+           311004
+ 311003  5 010070
+           011001
+           011002
+           012001
+           013002
+ 311004 18 101000
+           031000
+           011034
+           101000
+           031000
+           011035
+           101000
+           031000
+           011075
+           101000
+           031000
+           011076
+           101000
+           031000
+           033025
+           101000
+           031000
+           033026
+ 311193 16 301197
+           301011
+           301012
+           301023
+           008004
+           007004
+           008021
+           011001
+           011002
+           011031
+           011034
+           011035
+           012001
+           012003
+           013003
+           020041
+ 312001  2 301043                                                                                                       
+           304001                                                                                                       
+ 312002  2 301043                                                                                                       
+           304002                                                                                                       
+ 312003  2 301042                                                                                                       
+           304003                                                                                                       
+ 312004  2 301042                                                                                                       
+           304004                                                                                                       
+ 312005  2 301042                                                                                                       
+           020014                                                                                                       
+ 312006  2 301044                                                                                                       
+           304005                                                                                                       
+ 312007  2 301042                                                                                                       
+           304006                                                                                                       
+ 312010  6 001007                                                                                                       
+           005040                                                                                                       
+           002021                                                                                                       
+           005041                                                                                                       
+           004001                                                                                                       
+           004043                                                                                                       
+ 312011  9 202131                                                                                                       
+           201149                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202126                                                                                                       
+           010002                                                                                                       
+           202000                                                                                                       
+           005043                                                                                                       
+           005053                                                                                                       
+ 312012  6 202129                                                                                                       
+           201132                                                                                                       
+           101019                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312013  6 005033                                                                                                       
+           202129                                                                                                       
+           201135                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312014  8 312010                                                                                                       
+           312011                                                                                                       
+           105056                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           312012                                                                                                       
+           312013                                                                                                       
+ 312015 10 109011                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101004                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312016  3 312010                                                                                                       
+           312011                                                                                                       
+           312015                                                                                                       
+ 312017 10 109008                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101003                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312018  3 312010                                                                                                       
+           312011                                                                                                       
+           312017                                                                                                       
+ 312020 11 301047                                                                                                       
+           301048                                                                                                       
+           015015                                                                                                       
+           029002                                                                                                       
+           021076                                                                                                       
+           104012                                                                                                       
+           006030                                                                                                       
+           102012                                                                                                       
+           005030                                                                                                       
+           021075                                                                                                       
+           021066                                                                                                       
+ 312021  6 301047                                                                                                       
+           101003                                                                                                       
+           301049                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021067                                                                                                       
+ 312022 15 301047                                                                                                       
+           008022                                                                                                       
+           011012                                                                                                       
+           011050                                                                                                       
+           022070                                                                                                       
+           022026                                                                                                       
+           312041                                                                                                       
+           010050                                                                                                       
+           021068                                                                                                       
+           021071                                                                                                       
+           021072                                                                                                       
+           021073                                                                                                       
+           312042                                                                                                       
+           021062                                                                                                       
+           015011                                                                                                       
+ 312023  7 301047                                                                                                       
+           103003                                                                                                       
+           008022                                                                                                       
+           012061                                                                                                       
+           022050                                                                                                       
+           021069                                                                                                       
+           021085                                                                                                       
+ 312024 11 312020
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312026 19 301046   SeaWinds 25km data::SeaWinds header information
+           301011                       Date information
+           301013                       Time information
+           301023                       Position information
+           312031                       SeaWinds WVC information
+           101004                       *** replicate 1 descriptor 4 times
+           312030                       SeaWinds ambiguous wind data
+           021110                       NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)
+           301023                       Position information
+           321027                       SeaWinds Sigma-0 data
+           021111                       NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)
+           301023                       Position information
+           321027                       SeaWinds Sigma-0 data
+           021112                       NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)
+           301023                       Position information
+           321027                       SeaWinds Sigma-0 data
+           021113                       NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)
+           301023                       Position information
+           321027                       SeaWinds Sigma-0 data
+ 312027  9 301047
+           105009
+           301023
+           007021
+           012061
+           007021
+           012061
+           021085
+           021070
+ 312028 26 301046
+           301011
+           301013
+           301023
+           008025
+           201136
+           004006
+           201000
+           312031
+           312032
+           101004
+           312030
+           101002
+           312033
+           021110
+           301023
+           321028
+           021111
+           301023
+           321028
+           021112
+           301023
+           321028
+           021113
+           301023
+           321028
+ 312030 13 201130   SeaWinds ambiguous wind data::*** increase data width by 2 bits
+           202129                                 *** increase scaling by 10^1
+           011012                                 WIND SPEED AT 10 M
+           202000                                 *** cancel change scaling
+           201000                                 *** cancel change data width
+           011052                                 FORMAL UNCERTAINTY IN WIND SPEED
+           201135                                 *** increase data width by 7 bits
+           202130                                 *** increase scaling by 10^2
+           011011                                 WIND DIRECTION AT 10 M
+           202000                                 *** cancel change scaling
+           201000                                 *** cancel change data width
+           011053                                 FORMAL UNCERTAINTY IN WIND DIRECTION
+           021104                                 LIKELIHOOD COMPUTED FOR SOLUTION
+ 312031  8 005034   SeaWinds WVC information::ALONG TRACK ROW NUMBER
+           006034                             CROSS TRACK CELL NUMBER
+           021109                             QSCAT WIND VECTOR CELL QUALITY FLAG
+           011081                             MODEL WIND DIRECTION AT 10 M
+           011082                             MODEL WIND SPEED AT 10 M
+           021101                             NUMBER OF VECTOR AMBIGUITIES
+           021102                             INDEX OF SELECTED WIND VECTOR
+           021103                             TOTAL NUMBER OF SIGMA-0 MEASUREMENTS
+ 312032  4 021120
+           021121
+           013055
+           021122
+ 312033  4 002104
+           008022
+           012063
+           012065
+ 312041  5 201141                                                                                                       
+           202130                                                                                                       
+           007001                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312042  6 021077                                                                                                       
+           021078                                                                                                       
+           021079                                                                                                       
+           021080                                                                                                       
+           021081                                                                                                       
+           021082                                                                                                       
+ 312200 10 301237                                                                                                       
+           301238                                                                                                       
+           029002                                                                                                       
+           021206                                                                                                       
+           104012                                                                                                       
+           006232                                                                                                       
+           102012                                                                                                       
+           005232                                                                                                       
+           021205                                                                                                       
+           021196                                                                                                       
+ 312201  6 301237                                                                                                       
+           101003                                                                                                       
+           301239                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021197                                                                                                       
+ 312202 13 301237                                                                                                       
+           008022                                                                                                       
+           011012                                                                                                       
+           011050                                                                                                       
+           301240                                                                                                       
+           022243                                                                                                       
+           301241                                                                                                       
+           010050                                                                                                       
+           021198                                                                                                       
+           021201                                                                                                       
+           021202                                                                                                       
+           021203                                                                                                       
+           301242                                                                                                       
+ 312203  8 301237                                                                                                       
+           008022                                                                                                       
+           012061                                                                                                       
+           022050                                                                                                       
+           021204                                                                                                       
+           021199                                                                                                       
+           021214                                                                                                       
+           021215                                                                                                       
+ 312204 12 312201                                                                                                       
+           001031                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021200                                                                                                       
+           021213                                                                                                       
+           004004                                                                                                       
+           008021                                                                                                       
+           004024                                                                                                       
+           055003                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+ 312207  3 312202                                                                                                       
+           301202                                                                                                       
+           033191                                                                                                       
+ 312208 17 301202                                                                                                       
+           008022                                                                                                       
+           008021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           302205                                                                                                       
+           011002                                                                                                       
+           001007                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           001032                                                                                                       
+           001192                                                                                                       
+           302205                                                                                                       
+           011002                                                                                                       
+ 312209 11 301202                                                                                                       
+           001192                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           302206                                                                                                       
+           104000                                                                                                       
+           022192                                                                                                       
+           102000                                                                                                       
+           005232                                                                                                       
+           022191                                                                                                       
+ 312210 13 312202                                                                                                       
+           021192                                                                                                       
+           015202                                                                                                       
+           301011                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           304228                                                                                                       
+           304229                                                                                                       
+ 312211 19 301046      SeaWinds 50km data::SeaWinds header information
+           301011               Date information
+           301013               Time information
+           301023               Position information
+           312031               SeaWinds WVC information
+           101004               *** replicate 1 descriptor 4 times
+           312030               SeaWinds ambiguous wind data
+           021110               NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)
+           101004                       *** replicate 1 descriptor 4 times
+           312212                       SeaWinds Sigma-0 position and data
+           021111               NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)
+           101004                       *** replicate 1 descriptor 4 times
+           312212                       SeaWinds Sigma-0 position and data
+           021112               NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)
+           101004                       *** replicate 1 descriptor 4 times
+           312212                       SeaWinds Sigma-0 position and data
+           021113               NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)
+           101004                       *** replicate 1 descriptor 4 times
+           312212                       SeaWinds Sigma-0 position and data
+ 312212  2 301023
+           321027
+ 313009  4 021001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021001                                                                                                       
+ 313010  4 021036                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021036                                                                                                       
+ 313031  5 006002                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           030001                                                                                                       
+ 313032  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313031                                                                                                       
+ 313041 13 006002                                                                                                       
+           110000                                                                                                       
+           031001                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031012                                                                                                       
+           030001                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           030001                                                                                                       
+ 313042  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313041                                                                                                       
+ 313043 16 006002                                                                                                       
+           005002                                                                                                       
+           005012                                                                                                       
+           112000                                                                                                       
+           031001                                                                                                       
+           110000                                                                                                       
+           031001                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031011                                                                                                       
+           030001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           030001                                                                                                       
+ 315001  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306001                                                                                                       
+ 315002  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306004                                                                                                       
+ 316001 10 301011                                                                                                       
+           004004                                                                                                       
+           301023                                                                                                       
+           001021                                                                                                       
+           002041                                                                                                       
+           019001                                                                                                       
+           010051                                                                                                       
+           019002                                                                                                       
+           019003                                                                                                       
+           019004                                                                                                       
+ 316002 15 008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           001033
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           007002
+           007002
+ 316003 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           010002
+           011002
+           008007
+           008011
+ 316004 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           011031
+           008007
+           008011
+ 316005 10 108000
+           031001
+           008005
+           008007
+           005002
+           006002
+           001026
+           019001
+           008007
+           008005
+ 316006 14 112000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020011
+           020012
+           008007
+           008011
+ 316007 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           019005
+           019006
+           008007
+           008011
+ 316008 13 111000
+           031001
+           008001
+           008007
+           008023
+           103000
+           031001
+           005002
+           006002
+           010002
+           008023
+           008007
+           008001
+ 316009 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020041
+           008007
+           008011
+ 316010  9 107000
+           031001
+           008011
+           008007
+           001022
+           005002
+           006002
+           008007
+           008011
+ 316011 19 116000
+           031001
+           008011
+           001022
+           008007
+           102000
+           031001
+           005002
+           006002
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           020090
+           008021
+           008007
+           008011
+ 318001  2 301025                                                                                                       
+           024011                                                                                                       
+ 318003  4 301026                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024021                                                                                                       
+ 318004  6 301025                                                                                                       
+           004023                                                                                                       
+           013011                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024022                                                                                                       
+ 321001  6 002101                                                                                                       
+           002114                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002121                                                                                                       
+ 321003  4 021051                                                                                                       
+           021014                                                                                                       
+           021017                                                                                                       
+           021030                                                                                                       
+ 321004  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           321003                                                                                                       
+ 321005 12 025004                                                                                                       
+           002121                                                                                                       
+           002122                                                                                                       
+           002123                                                                                                       
+           002124                                                                                                       
+           002125                                                                                                       
+           002126                                                                                                       
+           002127                                                                                                       
+           002128                                                                                                       
+           002129                                                                                                       
+           002130                                                                                                       
+           002131                                                                                                       
+ 321006  4 025001                                                                                                       
+           025002                                                                                                       
+           025003                                                                                                       
+           025005                                                                                                       
+ 321007  8 025009                                                                                                       
+           025010                                                                                                       
+           025011                                                                                                       
+           025012                                                                                                       
+           025013                                                                                                       
+           025015                                                                                                       
+           025016                                                                                                       
+           025017                                                                                                       
+ 321008  3 025006                                                                                                       
+           025007                                                                                                       
+           025008                                                                                                       
+ 321009  2 025018                                                                                                       
+           025019                                                                                                       
+ 321010 13 002101                                                                                                       
+           007002                                                                                                       
+           002102                                                                                                       
+           002103                                                                                                       
+           002104                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002108                                                                                                       
+           002109                                                                                                       
+           002110                                                                                                       
+           002132                                                                                                       
+           002133                                                                                                       
+ 321011  3 030031                                                                                                       
+           030032                                                                                                       
+           029002                                                                                                       
+ 321012  3 101000                                                                                                       
+           031001                                                                                                       
+           002135                                                                                                       
+ 321021 15 002003
+           002101
+           201130
+           002106
+           201000
+           201132
+           202130
+           002121
+           202000
+           201000
+           201133
+           202129
+           025001
+           202000
+           201000
+ 321022 11 010007
+           204001
+           031021
+           011001
+           204000
+           011002
+           204001
+           031021
+           011006
+           204000
+           021030
+ 321023  9 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+ 321024  7 007007
+           204002
+           031021
+           012007
+           011006
+           204000
+           021030
+ 321025 17 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+           021092
+           021030
+           025092
+           201129
+           202129
+           021017
+           202000
+           201000
+ 321026 10 010007
+           204001
+           031021
+           012007
+           025091
+           011071
+           011072
+           011073
+           011074
+           204000
+ 321027 18 021118   SeaWinds Sigma-0 data::ATTENUATION CORRECTION ON SIGMA-0
+           202129                          *** increase scaling by 10^1
+           201132                          *** increase data width by 4 bits
+           002112                          RADAR LOOK ANGLE
+           201000                          *** cancel change data width
+           201131                          *** increase data width by 3 bits
+           002111                          RADAR INCIDENCE ANGLE
+           201000                          *** cancel change data width
+           202000                          *** cancel change scaling
+           002104                          ANTENNA POLARISATION
+           021105                          NORMALIZED RADAR CROSS SECTION
+           021106                          Kp VARIANCE COEFFICIENT (ALPHA)
+           021107                          Kp VARIANCE COEFFICIENT (BETA)
+           021114                          Kp VARIANCE COEFFICIENT (GAMMA)
+           021115                          SEAWINDS SIGMA-0 QUALITY FLAG
+           021116                          SEAWINDS SIGMA-0 MODE FLAG
+           008018                          SEAWINDS LAND/ICE SURFACE FLAG
+           021117                          SIGMA-0 VARIANCE QUALITY CONTROL
+ 321028 18 021118  SeaWinds Sigma-0 data::ATTENUATION CORRECTION ON SIGMA-0
+           202129
+           201132                          *** increase data width by 4 bits
+           002112                          RADAR LOOK ANGLE
+           201000                          *** cancel change data width
+           201131                          *** increase data width by 3 bits
+           002111                          RADAR INCIDENCE ANGLE
+           201000                          *** cancel change data width
+           202000                          *** cancel change scaling
+           002104                          ANTENNA POLARISATION
+           021123                          SeaWinds NORMALIZED RADAR CROSS SECTION
+           021106                          Kp VARIANCE COEFFICIENT (ALPHA)
+           021107                          Kp VARIANCE COEFFICIENT (BETA)
+           021114                          Kp VARIANCE COEFFICIENT (GAMMA)
+           021115                          SEAWINDS SIGMA-0 QUALITY FLAG
+           021116                          SEAWINDS SIGMA-0 MODE FLAG
+           008018                          SEAWINDS LAND/ICE SURFACE FLAG
+           021117    
diff --git a/bufrtables/D0000000000098006001.TXT b/bufrtables/D0000000000098006001.TXT
new file mode 100755
index 0000000..7df875d
--- /dev/null
+++ b/bufrtables/D0000000000098006001.TXT
@@ -0,0 +1,2102 @@
+ 300002  2 000002                                                                                                       
+           000003                                                                                                       
+ 300003  3 000010                                                                                                       
+           000011                                                                                                       
+           000012                                                                                                       
+ 300004  9 300003                                                                                                       
+           000013                                                                                                       
+           000014                                                                                                       
+           000015                                                                                                       
+           000016                                                                                                       
+           000017                                                                                                       
+           000018                                                                                                       
+           000019                                                                                                       
+           000020                                                                                                       
+ 300010  4 300003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           000030                                                                                                       
+ 301001  2 001001                                                                                                       
+           001002                                                                                                       
+ 301002  3 001003                                                                                                       
+           001004                                                                                                       
+           001005                                                                                                       
+ 301003  3 001011                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+ 301011  3 004001                                                                                                       
+           004002                                                                                                       
+           004003                                                                                                       
+ 301012  2 004004                                                                                                       
+           004005                                                                                                       
+ 301013  3 004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+ 301021  2 005001                                                                                                       
+           006001                                                                                                       
+ 301022  3 005001                                                                                                       
+           006001                                                                                                       
+           007001                                                                                                       
+ 301023  2 005002                                                                                                       
+           006002                                                                                                       
+ 301024  3 005002                                                                                                       
+           006002                                                                                                       
+           007001                                                                                                       
+ 301025  3 301023                                                                                                       
+           004003                                                                                                       
+           301012                                                                                                       
+ 301026  7 301021                                                                                                       
+           004003                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004005                                                                                                       
+ 301029  3 001018
+           002001
+           301011
+ 301030  4 001018
+           002001
+           301011
+           301024
+ 301031  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301032  5 301001                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301033  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+ 301034  5 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301035  7 001005                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301036  5 301003                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301037  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301022                                                                                                       
+ 301038  6 301001                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301039  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+ 301040  6 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+ 301041  5 001007                                                                                                       
+           002021                                                                                                       
+           002022                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+ 301042  2 301041                                                                                                       
+           301021                                                                                                       
+ 301043  5 001007                                                                                                       
+           002023                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301044  5 001007                                                                                                       
+           002024                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 301045  9 301011                                                                                                       
+           301012                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           304030                                                                                                       
+           304031                                                                                                       
+ 301046 10 001007   
+           001012  
+           002048 
+           021119
+           025060 
+           202124
+           002026 
+           002027
+           202000 
+           005040
+ 301047 15 001007                                                                                                       
+           025060                                                                                                       
+           001033                                                                                                       
+           001034                                                                                                       
+           001012                                                                                                       
+           301045                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           301023                                                                                                       
+ 301048 14 002104                                                                                                       
+           002121                                                                                                       
+           002113                                                                                                       
+           002026                                                                                                       
+           002027                                                                                                       
+           002111                                                                                                       
+           002140                                                                                                       
+           202127                                                                                                       
+           001013                                                                                                       
+           202126                                                                                                       
+           007001                                                                                                       
+           202000                                                                                                       
+           025010                                                                                                       
+           021064                                                                                                       
+ 301049  5 002111                                                                                                       
+           002112                                                                                                       
+           021062                                                                                                       
+           021063                                                                                                       
+           021065                                                                                                       
+ 301051  6 001006                                                                                                       
+           002061                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+           008004                                                                                                       
+ 301055  7 001005                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301021                                                                                                       
+           001012                                                                                                       
+           001014                                                                                                       
+ 301062  3 101000                                                                                                       
+           031001                                                                                                       
+           301001                                                                                                       
+ 301065  8 001006
+           001008
+           002001
+           002002
+           002005
+           002062
+           002070
+           002065
+ 301066  6 301011
+           301013
+           301023
+           007004
+           002064
+           008004
+ 301070  3 002143
+           002142
+           002144
+ 301071  5 001007
+           001031
+           002020
+           002028
+           002029
+ 301072  4 301071
+           301011
+           301013
+           301021
+ 301074  4 002143
+           002142
+           002145
+           002146
+ 301075  6 301001
+           001015
+           301022
+           008021
+           301011
+           301012
+ 301076  3 002011
+           002143
+           002142
+ 301193  5 001007                                                                                                       
+           001031                                                                                                       
+           002196                                                                                                       
+           002221                                                                                                       
+           002222
+ 301194  9 001194                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301195  9 001195                                                                                                       
+           001012                                                                                                       
+           001013                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301196  7 301003                                                                                                       
+           002011                                                                                                       
+           002012                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           007001                                                                                                       
+ 301197  9 001006
+           001008
+           002061
+           002062
+           002002
+           002005
+           002070
+           002063
+           002001
+ 301198  9 001011
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301200  2 001032                                                                                                       
+           033194                                                                                                       
+ 301201  2 101003                                                                                                       
+           033193                                                                                                       
+ 301202  2 001031                                                                                                       
+           001032                                                                                                       
+ 301237 12 001007                                                                                                       
+           001012                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           301023                                                                                                       
+ 301238 14 002104                                                                                                       
+           002121                                                                                                       
+           002113                                                                                                       
+           002026                                                                                                       
+           002027                                                                                                       
+           002111                                                                                                       
+           002192                                                                                                       
+           202127                                                                                                       
+           001013                                                                                                       
+           202126                                                                                                       
+           007001                                                                                                       
+           202000                                                                                                       
+           025010                                                                                                       
+           021194                                                                                                       
+ 301239  5 002111                                                                                                       
+           002112                                                                                                       
+           021192                                                                                                       
+           021193                                                                                                       
+           021195                                                                                                       
+ 301240  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301241  5 201141                                                                                                       
+           202130                                                                                                       
+           007001                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 301242  6 021207                                                                                                       
+           021208                                                                                                       
+           021209                                                                                                       
+           021210                                                                                                       
+           021211                                                                                                       
+           021212                                                                                                       
+ 301250  4 301193                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301021                                                                                                       
+ 302001  4 010004                                                                                                       
+           010051                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302002  5 010004                                                                                                       
+           007004                                                                                                       
+           010003                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+ 302003  9 011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+           012006                                                                                                       
+           013003                                                                                                       
+           020001                                                                                                       
+           020003                                                                                                       
+           020004                                                                                                       
+           020005                                                                                                       
+ 302004  7 020010                                                                                                       
+           008002                                                                                                       
+           020011                                                                                                       
+           020013                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+           020012                                                                                                       
+ 302005  4 008002                                                                                                       
+           020011                                                                                                       
+           020012                                                                                                       
+           020013                                                                                                       
+ 302006  4 010004                                                                                                       
+           010051                                                                                                       
+           010062                                                                                                       
+           010063                                                                                                       
+ 302011  3 302001                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302012  3 302002                                                                                                       
+           302003                                                                                                       
+           302004                                                                                                       
+ 302013  5 302006                                                                                                       
+           302003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 302021  3 022001                                                                                                       
+           022011                                                                                                       
+           022021                                                                                                       
+ 302022  3 022002                                                                                                       
+           022012                                                                                                       
+           022022                                                                                                       
+ 302023  3 022003                                                                                                       
+           022013                                                                                                       
+           022023                                                                                                       
+ 302024  3 302022                                                                                                       
+           101002                                                                                                       
+           302023                                                                                                       
+ 302051 12 010004                                                                                                       
+           010051                                                                                                       
+           007004                                                                                                       
+           010003                                                                                                       
+           012004                                                                                                       
+           012051                                                                                                       
+           012016                                                                                                       
+           012017                                                                                                       
+           013004                                                                                                       
+           102004                                                                                                       
+           008051                                                                                                       
+           008020                                                                                                       
+ 302205  5 201131                                                                                                       
+           202129                                                                                                       
+           022021                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 302206  9 302205                                                                                                       
+           201130                                                                                                       
+           202129                                                                                                       
+           022011                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           022001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 302207  5 022193
+           022194
+           022195
+           022196
+           022197
+ 302250  5 102000                                                                                                       
+           031001                                                                                                       
+           020193                                                                                                       
+           020194
+           020012                                                                                                       
+ 303001  3 007003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303002  3 007004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303003  4 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+ 303004  6 007004                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303011  4 007003                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303012  4 007004                                                                                                       
+           008001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303013  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           013003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303014  7 007004                                                                                                       
+           008001                                                                                                       
+           010003                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 303021  4 007004                                                                                                       
+           007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+ 303022  3 303021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303023  3 303021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303024  3 303021                                                                                                       
+           013016                                                                                                       
+           204000                                                                                                       
+ 303025  5 002025                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012063                                                                                                       
+           204000                                                                                                       
+ 303026  6 007004                                                                                                       
+           008003                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           012001                                                                                                       
+           204000                                                                                                       
+ 303027  5 007004                                                                                                       
+           204007                                                                                                       
+           031021                                                                                                       
+           010003                                                                                                       
+           204000                                                                                                       
+ 303031  6 007004                                                                                                       
+           008003                                                                                                       
+           007021                                                                                                       
+           007022                                                                                                       
+           008012                                                                                                       
+           012061                                                                                                       
+ 303032  2 020011                                                                                                       
+           020016                                                                                                       
+ 303033  2 020010                                                                                                       
+           020016                                                                                                       
+ 303041  8 002152
+           002023
+           007004
+           011001
+           011002
+           002153
+           002154
+           012071
+ 303249  7 002252                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           002199                                                                                                       
+           007004                                                                                                       
+           007004                                                                                                       
+           013003                                                                                                       
+ 303250  8 002252                                                                                                       
+           002023                                                                                                       
+           007004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           002197                                                                                                       
+           002198                                                                                                       
+           012193                                                                                                       
+ 303251  8 002252                                                                                                       
+           105000                                                                                                       
+           031001                                                                                                       
+           002254                                                                                                       
+           002251                                                                                                       
+           002197                                                                                                       
+           002198                                                                                                       
+           012063                                                                                                       
+ 303252  8 002252                                                                                                       
+           105000                                                                                                       
+           031001                                                                                                       
+           002254                                                                                                       
+           002251                                                                                                       
+           002197                                                                                                       
+           002198                                                                                                       
+           012194                                                                                                       
+ 304001  5 008003                                                                                                       
+           010004                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304002  4 008003                                                                                                       
+           010004                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+ 304003  2 008003                                                                                                       
+           012001                                                                                                       
+ 304004  4 008003                                                                                                       
+           010004                                                                                                       
+           020010                                                                                                       
+           012001                                                                                                       
+ 304005  4 002024                                                                                                       
+           007004                                                                                                       
+           007004                                                                                                       
+           013003                                                                                                       
+ 304006  3 014001                                                                                                       
+           014001                                                                                                       
+           014003                                                                                                       
+ 304011 27 002163
+           002164
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002163
+           007004
+           012001
+ 304030  3 027031                                                                                                       
+           028031                                                                                                       
+           010031                                                                                                       
+ 304031  3 001041                                                                                                       
+           001042                                                                                                       
+           001043                                                                                                       
+ 304032  5 002153
+           002154
+           020081
+           020082
+           020012
+ 304033  8 002152
+           002166
+           002167
+           002153
+           002154
+           012075
+           012076
+           012063
+ 304034  9 102004
+           027001
+           028001
+           007022
+           005043
+           020010
+           020016
+           033003
+           010040
+ 304228  3 005217                                                                                                       
+           006217                                                                                                       
+           007217                                                                                                       
+ 304229  3 001208                                                                                                       
+           001209                                                                                                       
+           001210                                                                                                       
+ 304250 27 002231                                                                                                       
+           002232                                                                                                       
+           008012                                                                                                       
+           007024                                                                                                       
+           002057                                                                                                       
+           008021                                                                                                       
+           004001                                                                                                       
+           004002                                                                                                       
+           004003                                                                                                       
+           004004                                                                                                       
+           008021                                                                                                       
+           004024                                                                                                       
+           110004                                                                                                       
+           008021                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+           008021                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           004006                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           103010                                                                                                       
+           002231                                                                                                       
+           007004                                                                                                       
+           012001                                                                                                       
+ 306001  5 002032                                                                                                       
+           102000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022042                                                                                                       
+ 306002  3 002031                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306003  4 002002                                                                                                       
+           011011                                                                                                       
+           011012                                                                                                       
+           012004                                                                                                       
+ 306004  7 002032                                                                                                       
+           002033                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022043                                                                                                       
+           022062                                                                                                       
+ 306005  6 002031                                                                                                       
+           103000                                                                                                       
+           031001                                                                                                       
+           007062                                                                                                       
+           022004                                                                                                       
+           022031                                                                                                       
+ 306006  3 306003                                                                                                       
+           306002                                                                                                       
+           022063                                                                                                       
+ 306007  6 001012                                                                                                       
+           001014                                                                                                       
+           306008                                                                                                       
+           004024                                                                                                       
+           027003                                                                                                       
+           028003                                                                                                       
+ 306008  3 002034                                                                                                       
+           002035                                                                                                       
+           002036                                                                                                       
+ 306023  8 001015                                                                                                       
+           301023                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           022038                                                                                                       
+           022039                                                                                                       
+           022120                                                                                                       
+           022121                                                                                                       
+ 307001  2 301031                                                                                                       
+           302011                                                                                                       
+ 307002  2 301032                                                                                                       
+           302011                                                                                                       
+ 307003  4 307001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307004  4 307002                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+ 307005  3 307001                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307006  3 307002                                                                                                       
+           101004                                                                                                       
+           302005                                                                                                       
+ 307007  2 301031                                                                                                       
+           302012                                                                                                       
+ 307008  2 301032                                                                                                       
+           302012                                                                                                       
+ 307009  2 301031                                                                                                       
+           302013                                                                                                       
+ 307011 16 001063                                                                                                       
+           002001                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301024                                                                                                       
+           007006                                                                                                       
+           011001                                                                                                       
+           011016                                                                                                       
+           011017                                                                                                       
+           011002                                                                                                       
+           011041                                                                                                       
+           007006                                                                                                       
+           012001                                                                                                       
+           012003                                                                                                       
+           010052                                                                                                       
+           020009                                                                                                       
+ 307012  5 103000                                                                                                       
+           031001                                                                                                       
+           008023                                                                                                       
+           005021                                                                                                       
+           020001                                                                                                       
+ 307013  8 106000                                                                                                       
+           031001                                                                                                       
+           001064                                                                                                       
+           008014                                                                                                       
+           020061                                                                                                       
+           008014                                                                                                       
+           020061                                                                                                       
+           020018                                                                                                       
+ 307014  3 101000                                                                                                       
+           031001                                                                                                       
+           020019                                                                                                       
+ 307015  8 101000                                                                                                       
+           031001                                                                                                       
+           302005                                                                                                       
+           008002                                                                                                       
+           020011                                                                                                       
+           020012                                                                                                       
+           020013                                                                                                       
+           020002                                                                                                       
+ 307016  3 101000                                                                                                       
+           031001                                                                                                       
+           020020                                                                                                       
+ 307017  3 101000                                                                                                       
+           031001                                                                                                       
+           020020                                                                                                       
+ 307018 18 008016                                                                                                       
+           102000                                                                                                       
+           031001                                                                                                       
+           008017                                                                                                       
+           301012                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           007006                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011041                                                                                                       
+           020009                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           020001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           020019                                                                                                       
+ 307020  3 307011                                                                                                       
+           307014                                                                                                       
+           307016                                                                                                       
+ 307021  9 307011                                                                                                       
+           307012                                                                                                       
+           307013                                                                                                       
+           307014                                                                                                       
+           307015                                                                                                       
+           307016                                                                                                       
+           307017                                                                                                       
+           307018                                                                                                       
+           307015                                                                                                       
+ 307030  2 015001
+           015002
+ 307031  7 008022
+           008023
+           015001
+           008023
+           015001
+           008023
+           015002
+ 307041  7 301001
+           001015
+           301022
+           301011
+           301012
+           301070
+           307030
+ 307042  9 301001
+           001015
+           301022
+           301011
+           301012
+           008021
+           004025
+           301070
+           307031
+ 307043  7 301001
+           001015
+           301024
+           301011
+           301012
+           301074
+           307030
+ 307060  2 007061
+           012030
+ 307061  3 301031
+           101005
+           307060
+ 307062  3 301032
+           101005
+           307060
+ 307063  2 007061
+           012130
+ 308001  3 301033                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308002  3 301034                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308003  3 301035                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308004  3 301036                                                                                                       
+           302011                                                                                                       
+           022042                                                                                                       
+ 308005  2 308004                                                                                                       
+           302024                                                                                                       
+ 308006  8 010004                                                                                                       
+           010061                                                                                                       
+           010063                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           012004                                                                                                       
+           013003                                                                                                       
+           022042                                                                                                       
+ 308007  4 301055                                                                                                       
+           302011                                                                                                       
+           007062                                                                                                       
+           022042                                                                                                       
+ 309001  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309002  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309003  4 301037                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309004  4 301038                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309005  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309006  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309007  5 301037                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309008  5 301038                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309011  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309012  4 301039                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309013  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309014  5 301039                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309015  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309016  4 301040                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303012                                                                                                       
+ 309017  5 301040                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303013                                                                                                       
+ 309018  5 301040                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309019  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303011                                                                                                       
+ 309020  8 301031                                                                                                       
+           002003                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           007003                                                                                                       
+           011003                                                                                                       
+           011004                                                                                                       
+           011005                                                                                                       
+ 309030  8 015004
+           015005
+           104000
+           031001
+           004015
+           008006
+           007004
+           015003
+ 309040  3 301075
+           301076
+           309030
+ 309042  4 307042
+           301075
+           301076
+           309030
+ 309194  5 301194                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309195  5 301195                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309196  5 301196                                                                                                       
+           302004                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303014                                                                                                       
+ 309198  5 301198
+           302004
+           101000
+           031001
+           303014
+ 310001  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101026                                                                                                       
+           303025                                                                                                       
+ 310002  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101009                                                                                                       
+           303023                                                                                                       
+ 310003  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101006                                                                                                       
+           303023                                                                                                       
+ 310004  5 301042                                                                                                       
+           303031                                                                                                       
+           303032                                                                                                       
+           101003                                                                                                       
+           303024                                                                                                       
+ 310005  6 301042                                                                                                       
+           303031                                                                                                       
+           303033                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303025                                                                                                       
+ 310006  6 301042                                                                                                       
+           303031                                                                                                       
+           303033                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303023                                                                                                       
+ 310007  6 301042                                                                                                       
+           303031                                                                                                       
+           303033                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           303024                                                                                                       
+ 310008  8 310011
+           101019
+           310012
+           002150 
+           025079
+           025080
+           033032
+           014045
+ 310009  3 310011
+           101015
+           310012
+ 310010  3 310011
+           101005
+           310012
+ 310011 45 008070
+           001033
+           001034
+           008070
+           001033
+           001034
+           001007
+           002048
+           005040
+           025075
+           201133
+           005041
+           201000
+           005043
+           025070
+           033030
+           033031
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           202126
+           007001
+           202000
+           007024
+           005021
+           007025
+           005022
+           033033
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+ 310012 10 002150
+           025076
+           025077
+           025078
+           033032
+           201132
+           202129
+           012063
+           202000
+           201000
+ 310013 62 001007   
+           005040   
+           004001   
+           004002   
+           004003   
+           004004   
+           004005   
+           004006   
+           005001   
+           006001   
+           007025   
+           005043   
+           025085   
+           201131   
+           202129   
+           002150   
+           008023   
+           008072   
+           014027   
+           008072   
+           014027   
+           002150   
+           008023   
+           008072   
+           014027   
+           008072   
+           014027   
+           002150   
+           008023   
+           008072   
+           014027   
+           008072   
+           014027   
+           202000   
+           201000   
+           201132   
+           202129   
+           002150   
+           008023   
+           008072   
+           012063   
+           008072   
+           012063   
+           002150   
+           008023   
+           008072   
+           012063   
+           008072   
+           012063   
+           008023   
+           008072   
+           012063   
+           008072   
+           012063   
+           002150   
+           008023   
+           008072   
+           012063   
+           008072   
+           012063   
+           202000   
+           201000   
+ 310014  3 301072   
+           303041
+           304011
+ 310015 13 301072   
+           007024
+           010002
+           303041
+           101003
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310016 13 301072  
+           007024
+           010002
+           303041
+           101012
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310020  6 310022
+           301011
+           301013
+           301021
+           304034
+           310021
+ 310021 10 108000
+           031001
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+ 310022  4 001007
+           002019
+           001033
+           002172
+ 310023 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101012
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310024 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101003
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310050 14 310051
+           310052
+           101000
+           031002
+           310053
+           101004
+           310054
+           020010
+           310052
+           101015
+           310053
+           310052
+           101004
+           310053
+ 310051 16 001007
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           007025
+           005022
+           102009
+           002151
+           012064
+ 310052 12 002019
+           301011
+           301012
+           202131
+           201138
+           004006
+           201000
+           202000
+           301021
+           007024
+           005021
+           005043
+ 310053  6 201134
+           005042
+           201000
+           025076
+           033032
+           012163
+ 310054 13 201134
+           005042
+           201000
+           025076
+           033032
+           201131
+           202129
+           102002
+           008023
+           014027
+           008023
+           202000
+           201000
+ 310055  8 310051
+           310052
+           102020
+           025076
+           025051
+           101000
+           031002
+           025050
+ 310193  5 301250                                                                                                       
+           303250                                                                                                       
+           302250                                                                                                       
+           303249                                                                                                       
+           303251                                                                                                       
+ 310194  5 301250                                                                                                       
+           303250                                                                                                       
+           302250                                                                                                       
+           303249                                                                                                       
+           303252                                                                                                       
+ 310195  3 301250                                                                                                       
+           303250                                                                                                       
+           304250                                                                                                       
+ 310196  3 301250                                                                                                       
+           303249                                                                                                       
+           303251                                                                                                       
+ 311001  9 301051                                                                                                       
+           007002                                                                                                       
+           012001                                                                                                       
+           011001                                                                                                       
+           011002                                                                                                       
+           011031                                                                                                       
+           011032                                                                                                       
+           011033                                                                                                       
+           020041                                                                                                       
+ 311002  4 301065
+           301066
+           311003
+           311004
+ 311003  5 010070
+           011001
+           011002
+           012001
+           013002
+ 311004 18 101000
+           031000
+           011034
+           101000
+           031000
+           011035
+           101000
+           031000
+           011075
+           101000
+           031000
+           011076
+           101000
+           031000
+           033025
+           101000
+           031000
+           033026
+ 311193 16 301197
+           301011
+           301012
+           301023
+           008004
+           007004
+           008021
+           011001
+           011002
+           011031
+           011034
+           011035
+           012001
+           012003
+           013003
+           020041
+ 312001  2 301043                                                                                                       
+           304001                                                                                                       
+ 312002  2 301043                                                                                                       
+           304002                                                                                                       
+ 312003  2 301042                                                                                                       
+           304003                                                                                                       
+ 312004  2 301042                                                                                                       
+           304004                                                                                                       
+ 312005  2 301042                                                                                                       
+           020014                                                                                                       
+ 312006  2 301044                                                                                                       
+           304005                                                                                                       
+ 312007  2 301042                                                                                                       
+           304006                                                                                                       
+ 312010  6 001007                                                                                                       
+           005040                                                                                                       
+           002021                                                                                                       
+           005041                                                                                                       
+           004001                                                                                                       
+           004043                                                                                                       
+ 312011  9 202131                                                                                                       
+           201149                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202126                                                                                                       
+           010002                                                                                                       
+           202000                                                                                                       
+           005043                                                                                                       
+           005053                                                                                                       
+ 312012  6 202129                                                                                                       
+           201132                                                                                                       
+           101019                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312013  6 005033                                                                                                       
+           202129                                                                                                       
+           201135                                                                                                       
+           012063                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312014  8 312010                                                                                                       
+           312011                                                                                                       
+           105056                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           312012                                                                                                       
+           312013                                                                                                       
+ 312015 10 109011                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101004                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312016  3 312010                                                                                                       
+           312011                                                                                                       
+           312015                                                                                                       
+ 312017 10 109008                                                                                                       
+           301023                                                                                                       
+           005042                                                                                                       
+           005052                                                                                                       
+           202129                                                                                                       
+           201132                                                                                                       
+           101003                                                                                                       
+           012063                                                                                                       
+           202000                                                                                                       
+           201000                                                                                                       
+ 312018  3 312010                                                                                                       
+           312011                                                                                                       
+           312017                                                                                                       
+ 312020 11 301047                                                                                                       
+           301048                                                                                                       
+           015015                                                                                                       
+           029002                                                                                                       
+           021076                                                                                                       
+           104012                                                                                                       
+           006030                                                                                                       
+           102012                                                                                                       
+           005030                                                                                                       
+           021075                                                                                                       
+           021066                                                                                                       
+ 312021  6 301047                                                                                                       
+           101003                                                                                                       
+           301049                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021067                                                                                                       
+ 312022 15 301047                                                                                                       
+           008022                                                                                                       
+           011012                                                                                                       
+           011050                                                                                                       
+           022070                                                                                                       
+           022026                                                                                                       
+           312041                                                                                                       
+           010050                                                                                                       
+           021068                                                                                                       
+           021071                                                                                                       
+           021072                                                                                                       
+           021073                                                                                                       
+           312042                                                                                                       
+           021062                                                                                                       
+           015011                                                                                                       
+ 312023  7 301047                                                                                                       
+           103003                                                                                                       
+           008022                                                                                                       
+           012061                                                                                                       
+           022050                                                                                                       
+           021069                                                                                                       
+           021085                                                                                                       
+ 312024 11 312020
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312026 19 301046   
+           301011   
+           301013   
+           301023   
+           312031   
+           101004   
+           312030   
+           021110   
+           301023   
+           321027   
+           021111   
+           301023   
+           321027   
+           021112   
+           301023   
+           321027   
+           021113   
+           301023   
+           321027   
+ 312027  9 301047
+           105009
+           301023
+           007021
+           012061
+           007021
+           012061
+           021085
+           021070
+ 312028 26 301046
+           301011
+           301013
+           301023
+           008025
+           201136
+           004006
+           201000
+           312031
+           312032
+           101004
+           312030
+           101002
+           312033
+           021110
+           301023
+           321028
+           021111
+           301023
+           321028
+           021112
+           301023
+           321028
+           021113
+           301023
+           321028
+ 312030 13 201130   
+           202129   
+           011012   
+           202000   
+           201000   
+           011052   
+           201135   
+           202130   
+           011011   
+           202000   
+           201000   
+           011053   
+           021104   
+ 312031  8 005034   
+           006034   
+           021109   
+           011081   
+           011082   
+           021101   
+           021102   
+           021103   
+ 312032  4 021120
+           021121
+           013055
+           021122
+ 312033  4 002104
+           008022
+           012063
+           012065
+ 312041  5 201141                                                                                                       
+           202130                                                                                                       
+           007001                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+ 312042  6 021077                                                                                                       
+           021078                                                                                                       
+           021079                                                                                                       
+           021080                                                                                                       
+           021081                                                                                                       
+           021082                                                                                                       
+ 312200 10 301237                                                                                                       
+           301238                                                                                                       
+           029002                                                                                                       
+           021206                                                                                                       
+           104012                                                                                                       
+           006232                                                                                                       
+           102012                                                                                                       
+           005232                                                                                                       
+           021205                                                                                                       
+           021196                                                                                                       
+ 312201  6 301237                                                                                                       
+           101003                                                                                                       
+           301239                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021197                                                                                                       
+ 312202 13 301237                                                                                                       
+           008022                                                                                                       
+           011012                                                                                                       
+           011050                                                                                                       
+           301240                                                                                                       
+           022243                                                                                                       
+           301241                                                                                                       
+           010050                                                                                                       
+           021198                                                                                                       
+           021201                                                                                                       
+           021202                                                                                                       
+           021203                                                                                                       
+           301242                                                                                                       
+ 312203  8 301237                                                                                                       
+           008022                                                                                                       
+           012061                                                                                                       
+           022050                                                                                                       
+           021204                                                                                                       
+           021199                                                                                                       
+           021214                                                                                                       
+           021215                                                                                                       
+ 312204 12 312201                                                                                                       
+           001031                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+           021200                                                                                                       
+           021213                                                                                                       
+           004004                                                                                                       
+           008021                                                                                                       
+           004024                                                                                                       
+           055003                                                                                                       
+           011012                                                                                                       
+           011011                                                                                                       
+ 312207  3 312202                                                                                                       
+           301202                                                                                                       
+           033191                                                                                                       
+ 312208 17 301202                                                                                                       
+           008022                                                                                                       
+           008021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           302205                                                                                                       
+           011002                                                                                                       
+           001007                                                                                                       
+           002021                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           001032                                                                                                       
+           001192                                                                                                       
+           302205                                                                                                       
+           011002                                                                                                       
+ 312209 11 301202                                                                                                       
+           001192                                                                                                       
+           301011                                                                                                       
+           301013                                                                                                       
+           301023                                                                                                       
+           302206                                                                                                       
+           104000                                                                                                       
+           022192                                                                                                       
+           102000                                                                                                       
+           005232                                                                                                       
+           022191                                                                                                       
+ 312210 13 312202                                                                                                       
+           021192                                                                                                       
+           015202                                                                                                       
+           301011                                                                                                       
+           004004                                                                                                       
+           004005                                                                                                       
+           201138                                                                                                       
+           202131                                                                                                       
+           004006                                                                                                       
+           201000                                                                                                       
+           202000                                                                                                       
+           304228                                                                                                       
+           304229                                                                                                       
+ 312211 19 301046  
+           301011   
+           301013   
+           301023   
+           312031   
+           101004   
+           312030   
+           021110   
+           101004  
+           312212  
+           021111  
+           101004  
+           312212  
+           021112  
+           101004  
+           312212  
+           021113  
+           101004  
+           312212  
+ 312212  2 301023
+           321027
+ 313009  4 021001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021001                                                                                                       
+ 313010  4 021036                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           021036                                                                                                       
+ 313031  5 006002                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           030001                                                                                                       
+ 313032  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313031                                                                                                       
+ 313041 13 006002                                                                                                       
+           110000                                                                                                       
+           031001                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031012                                                                                                       
+           030001                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           030001                                                                                                       
+ 313042  5 005002                                                                                                       
+           005012                                                                                                       
+           101000                                                                                                       
+           031002                                                                                                       
+           313041                                                                                                       
+ 313043 16 006002                                                                                                       
+           005002                                                                                                       
+           005012                                                                                                       
+           112000                                                                                                       
+           031001                                                                                                       
+           110000                                                                                                       
+           031001                                                                                                       
+           104000                                                                                                       
+           031001                                                                                                       
+           006012                                                                                                       
+           101000                                                                                                       
+           031011                                                                                                       
+           030001                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           030001                                                                                                       
+ 315001  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306001                                                                                                       
+ 315002  5 001011                                                                                                       
+           301011                                                                                                       
+           301012                                                                                                       
+           301023                                                                                                       
+           306004                                                                                                       
+ 316001 10 301011                                                                                                       
+           004004                                                                                                       
+           301023                                                                                                       
+           001021                                                                                                       
+           002041                                                                                                       
+           019001                                                                                                       
+           010051                                                                                                       
+           019002                                                                                                       
+           019003                                                                                                       
+           019004                                                                                                       
+ 316002 15 008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           001033
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           007002
+           007002
+ 316003 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           010002
+           011002
+           008007
+           008011
+ 316004 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           011031
+           008007
+           008011
+ 316005 10 108000
+           031001
+           008005
+           008007
+           005002
+           006002
+           001026
+           019001
+           008007
+           008005
+ 316006 14 112000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020011
+           020012
+           008007
+           008011
+ 316007 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           019005
+           019006
+           008007
+           008011
+ 316008 13 111000
+           031001
+           008001
+           008007
+           008023
+           103000
+           031001
+           005002
+           006002
+           010002
+           008023
+           008007
+           008001
+ 316009 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020041
+           008007
+           008011
+ 316010  9 107000
+           031001
+           008011
+           008007
+           001022
+           005002
+           006002
+           008007
+           008011
+ 316011 19 116000
+           031001
+           008011
+           001022
+           008007
+           102000
+           031001
+           005002
+           006002
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           020090
+           008021
+           008007
+           008011
+ 318001  2 301025                                                                                                       
+           024011                                                                                                       
+ 318003  4 301026                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024021                                                                                                       
+ 318004  6 301025                                                                                                       
+           004023                                                                                                       
+           013011                                                                                                       
+           024005                                                                                                       
+           024004                                                                                                       
+           024022                                                                                                       
+ 321001  6 002101                                                                                                       
+           002114                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002121                                                                                                       
+ 321003  4 021051                                                                                                       
+           021014                                                                                                       
+           021017                                                                                                       
+           021030                                                                                                       
+ 321004  5 301031                                                                                                       
+           002003                                                                                                       
+           101000                                                                                                       
+           031001                                                                                                       
+           321003                                                                                                       
+ 321005 12 025004                                                                                                       
+           002121                                                                                                       
+           002122                                                                                                       
+           002123                                                                                                       
+           002124                                                                                                       
+           002125                                                                                                       
+           002126                                                                                                       
+           002127                                                                                                       
+           002128                                                                                                       
+           002129                                                                                                       
+           002130                                                                                                       
+           002131                                                                                                       
+ 321006  4 025001                                                                                                       
+           025002                                                                                                       
+           025003                                                                                                       
+           025005                                                                                                       
+ 321007  8 025009                                                                                                       
+           025010                                                                                                       
+           025011                                                                                                       
+           025012                                                                                                       
+           025013                                                                                                       
+           025015                                                                                                       
+           025016                                                                                                       
+           025017                                                                                                       
+ 321008  3 025006                                                                                                       
+           025007                                                                                                       
+           025008                                                                                                       
+ 321009  2 025018                                                                                                       
+           025019                                                                                                       
+ 321010 13 002101                                                                                                       
+           007002                                                                                                       
+           002102                                                                                                       
+           002103                                                                                                       
+           002104                                                                                                       
+           002105                                                                                                       
+           002106                                                                                                       
+           002107                                                                                                       
+           002108                                                                                                       
+           002109                                                                                                       
+           002110                                                                                                       
+           002132                                                                                                       
+           002133                                                                                                       
+ 321011  3 030031                                                                                                       
+           030032                                                                                                       
+           029002                                                                                                       
+ 321012  3 101000                                                                                                       
+           031001                                                                                                       
+           002135                                                                                                       
+ 321021 15 002003
+           002101
+           201130
+           002106
+           201000
+           201132
+           202130
+           002121
+           202000
+           201000
+           201133
+           202129
+           025001
+           202000
+           201000
+ 321022 11 010007
+           204001
+           031021
+           011001
+           204000
+           011002
+           204001
+           031021
+           011006
+           204000
+           021030
+ 321023  9 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+ 321024  7 007007
+           204002
+           031021
+           012007
+           011006
+           204000
+           021030
+ 321025 17 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+           021092
+           021030
+           025092
+           201129
+           202129
+           021017
+           202000
+           201000
+ 321026 10 010007
+           204001
+           031021
+           012007
+           025091
+           011071
+           011072
+           011073
+           011074
+           204000
+ 321027 18 021118   
+           202129   
+           201132   
+           002112   
+           201000   
+           201131   
+           002111   
+           201000   
+           202000   
+           002104   
+           021105   
+           021106   
+           021107   
+           021114   
+           021115   
+           021116   
+           008018   
+           021117  
+ 321028 18 021118  
+           202129
+           201132 
+           002112 
+           201000 
+           201131 
+           002111 
+           201000 
+           202000 
+           002104    
+           021123   
+           021106   
+           021107   
+           021114   
+           021115   
+           021116   
+           008018   
+           021117   
diff --git a/bufrtables/D0000000000098013001.TXT b/bufrtables/D0000000000098013001.TXT
new file mode 100755
index 0000000..2f291b0
--- /dev/null
+++ b/bufrtables/D0000000000098013001.TXT
@@ -0,0 +1,4820 @@
+ 300002  2 000002
+           000003
+ 300003  3 000010
+           000011
+           000012
+ 300004  9 300003
+           000013
+           000014
+           000015
+           000016
+           000017
+           000018
+           000019
+           000020
+ 300010  4 300003
+           101000
+           031001
+           000030
+ 301001  2 001001
+           001002
+ 301002  3 001003
+           001004
+           001005
+ 301003  3 001011
+           001012
+           001013
+ 301004  4 001001
+           001002
+           001015
+           002001
+ 301005  2 001035
+           001034
+ 301011  3 004001
+           004002
+           004003
+ 301012  2 004004
+           004005
+ 301013  3 004004
+           004005
+           004006
+ 301014  3 102002  
+           301011
+           301012
+ 301021  2 005001
+           006001
+ 301022  3 005001
+           006001
+           007001
+ 301023  2 005002
+           006002
+ 301024  3 005002
+           006002
+           007001
+ 301025  3 301023
+           004003
+           301012
+ 301026  7 301021
+           004003
+           004003
+           004004
+           004004
+           004005
+           004005
+ 301027  5 008007
+           101000
+           031001
+           301028
+           008007
+ 301028  8 008040
+           033042
+           007010
+           101000
+           031002
+           301023
+           019007
+           008040
+ 301031  5 301001
+           002001
+           301011
+           301012
+           301022
+ 301032  5 301001
+           002001
+           301011
+           301012
+           301024
+ 301033  5 001005
+           002001
+           301011
+           301012
+           301021
+ 301034  5 001005
+           002001
+           301011
+           301012
+           301023
+ 301035  7 001005
+           001012
+           001013
+           002001
+           301011
+           301012
+           301023
+ 301036  5 301003
+           002001
+           301011
+           301012
+           301023
+ 301037  6 301001
+           002011
+           002012
+           301011
+           301012
+           301022
+ 301038  6 301001
+           002011
+           002012
+           301011
+           301012
+           301024
+ 301039  6 301003
+           002011
+           002012
+           301011
+           301012
+           301023
+ 301040  6 301003
+           002011
+           002012
+           301011
+           301012
+           301024
+ 301041  5 001007
+           002021
+           002022
+           301011
+           301012
+ 301042  2 301041
+           301021
+ 301043  5 001007
+           002023
+           301011
+           301013
+           301021
+ 301044  5 001007
+           002024
+           301011
+           301013
+           301021
+ 301045  9 301011
+           301012
+           201138
+           202131
+           004006
+           201000
+           202000
+           304030
+           304031
+ 301046 10 001007
+           001012
+           002048
+           021119
+           025060
+           202124
+           002026
+           002027
+           202000
+           005040
+ 301047 15 001007
+           025060
+           001033
+           001034
+           001012
+           301045
+           002021
+           301011
+           301012
+           201138
+           202131
+           004006
+           201000
+           202000
+           301023
+ 301048 14 002104
+           002121
+           002113
+           002026
+           002027
+           002111
+           002140
+           202127
+           001013
+           202126
+           007001
+           202000
+           025010
+           021064
+ 301049  5 002111
+           002112
+           021062
+           021063
+           021065
+ 301051  6 001006
+           002061
+           301011
+           301012
+           301021
+           008004
+ 301055  7 001005
+           002001
+           301011
+           301012
+           301021
+           001012
+           001014
+ 301062  3 101000
+           031001
+           301001
+ 301065  8 001006
+           001008
+           002001
+           002002
+           002005
+           002062
+           002070
+           002065
+ 301066  6 301011
+           301013
+           301023
+           007004
+           002064
+           008004
+ 301070  3 002143
+           002142
+           002144
+ 301071  5 001007
+           001031
+           002020
+           002028
+           002029
+ 301072  4 301071
+           301011
+           301013
+           301021
+ 301074  4 002143
+           002142
+           002145
+           002146
+ 301075  6 301001
+           001015
+           301024
+           008021
+           301011
+           301012
+ 301076  3 002011
+           002143
+           002142
+ 301089  2 001101
+           001102
+ 301090  6 301004
+           301011
+           301012
+           301021
+           007030
+           007031
+ 301091 10 002180
+           002181
+           002182
+           002183
+           002184
+           002179
+           002186
+           002187
+           002188
+           002189
+ 301092  9 001011
+           001003
+           002001
+           301011
+           301012
+           301021
+           007030
+           007031
+           033024
+ 301093  3 301036
+           007030
+           007031
+ 301110  5 301001
+           001011
+           002011
+           002014
+           002003
+ 301111  6 301001
+           001011
+           002011
+           002013
+           002014
+           002003
+ 301112  5 001006
+           002011
+           002013
+           002014
+           002003
+ 301113  3 008021
+           301011
+           301013
+ 301114  5 301021
+           007030
+           007031
+           007007
+           033024
+ 301120  4 301001
+           001094
+           002011
+           301121
+ 301121  5 008041
+           301122
+           301021
+           007031
+           007007
+ 301122  7 301011
+           301012
+           201135
+           202130
+           004006
+           202000
+           201000
+ 301123 33 102002
+           008041
+           001062
+           301001
+           001094
+           002011
+           001018
+           001095
+           025061
+           025068
+           001082
+           001083
+           001081
+           002067
+           002066
+           002014
+           025067
+           025065
+           025066
+           002095
+           002096
+           002097
+           002016
+           002083
+           002080
+           002081
+           001093
+           002084
+           002085
+           002086
+           002082
+           008041
+           301011
+ 301125  6 001033
+           001034
+           025060
+           001007
+           002019
+           001012
+ 301193  5 001007
+           001031
+           002196
+           002221
+           002222
+ 301194  9 001194
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301195  9 001195
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301196  7 301003
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301197  9 001006
+           001008
+           002061
+           002062
+           002002
+           002005
+           002070
+           002063
+           002001
+ 301198  9 001011
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301200  2 001032
+           033194
+ 301201  2 101003
+           033193
+ 301202  2 001031
+           001032
+ 301237 12 001007
+           001012
+           002021
+           301011
+           004004
+           004005
+           201138
+           202131
+           004006
+           201000
+           202000
+           301023
+ 301238 14 002104
+           002121
+           002113
+           002026
+           002027
+           002111
+           002192
+           202127
+           001013
+           202126
+           007001
+           202000
+           025010
+           021194
+ 301239  5 002111
+           002112
+           021192
+           021193
+           021195
+ 301240  5 201131
+           202129
+           022021
+           201000
+           202000
+ 301241  5 201141
+           202130
+           007001
+           201000
+           202000
+ 301242  6 021207
+           021208
+           021209
+           021210
+           021211
+           021212
+ 301250  4 301193
+           301011
+           301013
+           301021
+ 302001  4 010004
+           010051
+           010061
+           010063
+ 302002  5 010004
+           007004
+           010003
+           010061
+           010063
+ 302003  9 011011
+           011012
+           012004
+           012006
+           013003
+           020001
+           020003
+           020004
+           020005
+ 302004  7 020010
+           008002
+           020011
+           020013
+           020012
+           020012
+           020012
+ 302005  4 008002
+           020011
+           020012
+           020013
+ 302006  4 010004
+           010051
+           010062
+           010063
+ 302011  3 302001
+           302003
+           302004
+ 302012  3 302002
+           302003
+           302004
+ 302013  5 302006
+           302003
+           101000
+           031001
+           302005
+ 302021  3 022001
+           022011
+           022021
+ 302022  3 022002
+           022012
+           022022
+ 302023  3 022003
+           022013
+           022023
+ 302024  3 302022
+           101002
+           302023
+ 302031  4 302001
+           010062
+           007004
+           010009
+ 302032  4 007032
+           012101
+           012103
+           013003
+ 302033  2 007032
+           020001
+ 302034  2 007032
+           013023
+ 302035  8 302032
+           302033
+           302034
+           007032
+           302004
+           101000
+           031001
+           302005
+ 302036  7 105000
+           031001
+           008002
+           020011
+           020012
+           020014
+           020017
+ 302037  3 020062
+           013013
+           012113
+ 302038  4 020003
+           004024
+           020004
+           020005
+ 302039  2 004024
+           014031
+ 302040  4 007032
+           102002
+           004024
+           013011
+ 302041  7 007032
+           004024
+           004024
+           012111
+           004024
+           004024
+           012112
+ 302042 11 007032
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+ 302043  7 302038
+           101002
+           302039
+           302040
+           302041
+           302042
+           007032
+ 302044  3 004024
+           002004
+           013033
+ 302045  7 004024
+           014002
+           014004
+           014016
+           014028
+           014029
+           014030
+ 302046  3 004024
+           004024
+           012049
+ 302047  3 102003
+           008002
+           020054
+ 302048  5 005021
+           007021
+           020012
+           005021
+           007021
+ 302049  7 008002
+           020011
+           020013
+           020012
+           020012
+           020012
+           008002
+ 302050 31 008041
+           005021
+           007005
+           202130
+           006021
+           202000
+           008041
+           201131
+           202129
+           002115
+           010004
+           002115
+           013003
+           202000
+           201000
+           002115
+           011001
+           011002
+           002115
+           102002
+           012101
+           004024
+           002115
+           012103
+           012102
+           101003
+           020012
+           020011
+           020013
+           101002
+           020003
+ 302051 12 010004
+           010051
+           007004
+           010003
+           012004
+           012051
+           012016
+           012017
+           013004
+           102004
+           008051
+           008020
+ 302052  7 007032
+           007033
+           012101
+           002039
+           012102
+           012103
+           013003
+ 302053  3 007032
+           007033
+           020001
+ 302054  9 302052
+           302053
+           007033
+           302034
+           007032
+           302004
+           101000
+           031001
+           302005
+ 302055  8 020031
+           020032
+           020033
+           020034
+           020035
+           020036
+           020037
+           020038
+ 302056  4 002038
+           007063
+           022043
+           007063
+ 302057  3 302056
+           302021
+           302024
+ 302058  8 007032
+           007033
+           004024
+           004024
+           012111
+           004024
+           004024
+           012112
+ 302059 12 007032
+           007033
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+ 302060  4 302038
+           302040
+           302058
+           302059
+ 302062 24 302001
+           302052
+           302053
+           007033
+           101000
+           031000
+           302034
+           007032
+           101000
+           031001
+           302005
+           008002
+           101000
+           031000
+           302055
+           101000
+           031000
+           302056
+           101000
+           031000
+           302021
+           101000
+           031000
+           302024
+ 302063  8 302038
+           101000
+           031000
+           302040
+           101000
+           031000
+           302058
+           302059
+ 302066 16 020023
+           020024
+           020027
+           020054
+           020023
+           020027
+           020054
+           020025
+           020026
+           020027
+           020040
+           020066
+           020027
+           020021
+           020067
+           020027
+ 302069  4 007032
+           007033
+           033041
+           020001
+ 302070  8 007032
+           007033
+           011001
+           011002
+           011043
+           011041
+           011016
+           011017
+ 302071 14 007032
+           007033
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+           004025
+           011016
+           011017
+ 302072  5 007032
+           007033
+           012101
+           012103
+           013003
+ 302073  7 020010
+           105004
+           008002
+           020011
+           020012
+           033041
+           020013
+ 302074  4 020003
+           004025
+           020004
+           020005
+ 302075  5 008021
+           004025
+           013055
+           013058
+           008021
+ 302076  7 020021
+           020022
+           026020
+           020023
+           020024
+           020025
+           020026
+ 302077  8 007032
+           007033
+           004025
+           012111
+           012112
+           007032
+           004025
+           012112
+ 302078  4 002176
+           020062
+           002177
+           013013
+ 302079  5 007032
+           002175
+           002178
+           004025
+           013011
+ 302080  3 002185
+           004025
+           013033
+ 302081  2 004025
+           014031
+ 302082  7 004025
+           014002
+           014004
+           014016
+           014028
+           014029
+           014030
+ 302083  8 004025
+           008023
+           010004
+           011001
+           011002
+           012101
+           013003
+           008023
+ 302205  5 201131
+           202129
+           022021
+           201000
+           202000
+ 302206  9 302205
+           201130
+           202129
+           022011
+           201000
+           202000
+           022001
+           011001
+           011002
+ 302207  5 022193
+           022194
+           022195
+           022196
+           022197
+ 302250  5 102000
+           031001
+           020193
+           020194
+           020012
+ 303001  3 007003
+           011001
+           011002
+ 303002  3 007004
+           011001
+           011002
+ 303003  4 007004
+           010003
+           012001
+           012003
+ 303004  6 007004
+           010003
+           012001
+           012003
+           011001
+           011002
+ 303011  4 007003
+           008001
+           011001
+           011002
+ 303012  4 007004
+           008001
+           011001
+           011002
+ 303013  7 007004
+           008001
+           010003
+           012001
+           013003
+           011001
+           011002
+ 303014  7 007004
+           008001
+           010003
+           012001
+           012003
+           011001
+           011002
+ 303021  4 007004
+           007004
+           204007
+           031021
+ 303022  3 303021
+           010003
+           204000
+ 303023  3 303021
+           012001
+           204000
+ 303024  3 303021
+           013016
+           204000
+ 303025  5 002025
+           204007
+           031021
+           012063
+           204000
+ 303026  6 007004
+           008003
+           204007
+           031021
+           012001
+           204000
+ 303027  5 007004
+           204007
+           031021
+           010003
+           204000
+ 303031  6 007004
+           008003
+           007021
+           007022
+           008012
+           012061
+ 303032  2 020011
+           020016
+ 303033  2 020010
+           020016
+ 303040 18 008041
+           004025
+           004026
+           301021
+           301122
+           201131
+           202129
+           025069
+           007004
+           013003
+           202000
+           201000
+           002013
+           012101
+           010009
+           102002
+           008040
+           035035
+ 303041  8 002152
+           002023
+           007004
+           011001
+           011002
+           002153
+           002154
+           012071
+ 303050  7 004086
+           008042
+           007004
+           005015
+           006015
+           011001
+           011002
+ 303051  7 004086
+           008042
+           007004
+           005015
+           006015
+           011061
+           011062
+ 303052  7 004086
+           008042
+           007009
+           005015
+           006015
+           011001
+           011002
+ 303053  7 004086
+           008042
+           007009
+           005015
+           006015
+           011061
+           011062
+ 303054 10 004086
+           008042
+           007004
+           010009
+           005015
+           006015
+           012101
+           012103
+           011001
+           011002
+ 303249  7 002252
+           104000
+           031001
+           002199
+           007004
+           007004
+           013003
+ 303250  8 002252
+           002023
+           007004
+           011001
+           011002
+           002197
+           002198
+           012193
+ 303251  8 002252
+           105000
+           031001
+           002254
+           002251
+           002197
+           002198
+           012063
+ 303252  8 002252
+           105000
+           031001
+           002254
+           002251
+           002197
+           002198
+           012194
+ 304001  5 008003
+           010004
+           012001
+           011001
+           011002
+ 304002  4 008003
+           010004
+           011001
+           011002
+ 304003  2 008003
+           012001
+ 304004  4 008003
+           010004
+           020010
+           012001
+ 304005  4 002024
+           007004
+           007004
+           013003
+ 304006  3 014001
+           014001
+           014003
+ 304011 27 002163
+           002164
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002163
+           007004
+           012001
+ 304030  3 027031
+           028031
+           010031
+ 304031  3 001041
+           001042
+           001043
+ 304032  5 002153
+           002154
+           020081
+           020082
+           020012
+ 304033  8 002152
+           002166
+           002167
+           002153
+           002154
+           012075
+           012076
+           012063
+ 304034  9 102004
+           027001
+           028001
+           007022
+           005043
+           020010
+           020016
+           033003
+           010040
+ 304035 15 002153
+           002154
+           012063
+           008001
+           012063
+           008001
+           012063
+           008001
+           008003
+           012063
+           008003
+           012063
+           008003
+           012063
+           008003
+ 304036 12 020082
+           008012
+           020082
+           008012
+           020081
+           008003
+           020081
+           008003
+           020081
+           008003
+           020081
+           008003
+ 304037 15 002153
+           002154
+           012063
+           008011
+           012063
+           008011
+           012063
+           008011
+           008003
+           012063
+           008003
+           012063
+           008003
+           012063
+           008003
+ 304228  3 005217
+           006217
+           007217
+ 304229  3 001208
+           001209
+           001210
+ 304250 27 002231
+           002232
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002231
+           007004
+           012001
+ 305003  5 301012
+           004065
+           101000
+           031001
+           305001
+ 305006  6 013072
+           013082
+           013019
+           012001
+           013073
+           013060
+ 305007  6 301029
+           301012
+           004065
+           101000
+           031001
+           305006
+ 305008  2 305006
+           012030
+ 305009  6 301029
+           301012
+           004065
+           101000
+           031001
+           305008
+ 305011  6 301029
+           301012
+           004065
+           101000
+           031001
+           305010
+ 305018  8 301029
+           301012
+           004065
+           103000
+           031001
+           305008
+           305016
+           305017
+ 306001  5 002032
+           102000
+           031001
+           007062
+           022042
+ 306002  3 002031
+           022004
+           022031
+ 306003  4 002002
+           011011
+           011012
+           012004
+ 306004  7 002032
+           002033
+           103000
+           031001
+           007062
+           022043
+           022062
+ 306005  6 002031
+           103000
+           031001
+           007062
+           022004
+           022031
+ 306006  3 306003
+           306002
+           022063
+ 306007  6 001012
+           001014
+           306008
+           004024
+           027003
+           028003
+ 306008  3 002034
+           002035
+           002036
+ 306019  8 001075
+           301011
+           301012
+           022042
+           022120
+           022121
+           004015
+           004065
+ 306020  4 306024
+           102006
+           022038
+           022039
+ 306021  7 001075
+           301011
+           301012
+           022122
+           022123
+           012001
+           303002
+ 306022  5 001075
+           301011
+           301012
+           022038
+           022039
+ 306023  8 001015
+           301023
+           301011
+           301012
+           022038
+           022039
+           022120
+           022121
+ 306024  8 001075
+           301011
+           301012
+           022042
+           022120
+           022121
+           004025
+           004015
+ 306025  4 306019
+           102006
+           022038
+           022039
+ 307001  2 301031
+           302011
+ 307002  2 301032
+           302011
+ 307003  4 307001
+           101000
+           031001
+           302005
+ 307004  4 307002
+           101000
+           031001
+           302005
+ 307005  3 307001
+           101004
+           302005
+ 307006  3 307002
+           101004
+           302005
+ 307007  2 301031
+           302012
+ 307008  2 301032
+           302012
+ 307009  2 301031
+           302013
+ 307011 16 001063
+           002001
+           301011
+           301012
+           301024
+           007006
+           011001
+           011016
+           011017
+           011002
+           011041
+           007006
+           012001
+           012003
+           010052
+           020009
+ 307012  5 103000
+           031001
+           008023
+           005021
+           020001
+ 307013  8 106000
+           031001
+           001064
+           008014
+           020061
+           008014
+           020061
+           020018
+ 307014  3 101000
+           031001
+           020019
+ 307015  4 101000
+           031001
+           302005
+           020002
+ 307016  3 101000
+           031001
+           020020
+ 307017  3 101000
+           031001
+           011070
+ 307018 16 008016
+           102000
+           031001
+           008017
+           301012
+           104000
+           031001
+           007006
+           011001
+           011002
+           011041
+           020009
+           101000
+           031001
+           020001
+           307014
+ 307020  3 307011
+           307014
+           307016
+ 307021  9 307011
+           307012
+           307013
+           307014
+           307015
+           307016
+           307017
+           307018
+           307015
+ 307022 31 001015
+           301011
+           301012
+           301022
+           008021
+           004025
+           010004
+           012001
+           013003
+           033038
+           008022
+           106025
+           002020
+           001050
+           005021
+           007021
+           015031
+           015032
+           008060
+           015033
+           015034
+           008060
+           015033
+           015034
+           015035
+           201131
+           202129
+           013016
+           202000
+           201000
+           015011
+ 307030  2 015001
+           015002
+ 307031  7 008022
+           008023
+           015001
+           008023
+           015001
+           008023
+           015002
+ 307041  7 301001
+           001015
+           301022
+           301011
+           301012
+           301070
+           307030
+ 307042  9 301001
+           001015
+           301022
+           301011
+           301012
+           008021
+           004025
+           301070
+           307031
+ 307043  7 301001
+           001015
+           301024
+           301011
+           301012
+           301074
+           307030
+ 307045 25 001063
+           008079
+           002001
+           301011
+           301012
+           301024
+           007032
+           011001
+           011016
+           011017
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           012023
+           012024
+           007032
+           010052
+           020009
+ 307046  5 020060 
+           102000
+           031001
+           005021
+           020059
+ 307047  9 105000 
+           031001
+           008002
+           020011
+           020012
+           020013
+           020092
+           020002
+           020091
+ 307048 25 008016
+           102000
+           031001
+           008017
+           301012
+           112000
+           031000
+           007032
+           011001
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           020009
+           101000
+           031000
+           020060
+           307014
+           307047
+ 307049  4 102000
+           031000
+           022043
+           022021
+ 307050 14 101000
+           031000
+           020085
+           102000
+           031001
+           001064
+           020085
+           105000
+           031001
+           001064
+           020086
+           020087
+           020088
+           020089
+ 307052 12 001063
+           008039
+           301011
+           301012
+           008079
+           008039
+           301011 
+           301012
+           008039
+           301011 
+           301012
+           301024
+ 307053 16 007032
+           011001
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           020009
+           020060
+           307014
+           307047
+ 307054 13 007032
+           008039
+           004003
+           004004
+           008023
+           012023
+           008039
+           004003
+           004004
+           008023
+           012023
+           008023
+           007032
+ 307055  9 033045
+           008016
+           008039
+           004003
+           301012
+           008039
+           004003
+           301012
+           307053
+ 307056  6 307052 
+           307053
+           307054
+           101000
+           031001
+           307055
+ 307059 12 307045 
+           307046
+           307013
+           307014
+           307047
+           307016
+           307017
+           307049
+           307050
+           101000
+           031001
+           307048 
+ 307060  2 007061
+           012030
+ 307061  3 301031
+           101005
+           307060
+ 307062  3 301032
+           101005
+           307060
+ 307063  2 007061
+           012130
+ 307071 67 301090
+           004074
+           004023
+           008023
+           010004
+           010051
+           007004
+           010009
+           007032
+           012101
+           002051
+           004051
+           012118
+           004052
+           012119
+           013004
+           008023
+           012151
+           007032
+           102005
+           008050
+           008020
+           014032
+           014033
+           008050
+           008020
+           102018
+           008052
+           008022
+           007032
+           008053
+           004003
+           012152
+           008053
+           004003
+           012153
+           008053
+           004003
+           008023
+           012101
+           008053
+           004003
+           008023
+           012101
+           008023
+           007032
+           002002
+           008053
+           004003
+           011046
+           008053
+           004003
+           004004
+           004023
+           007032
+           013060
+           013051
+           004053
+           008050
+           008020
+           102006
+           008052
+           008022
+           008053
+           004003
+           013052
+           007032
+ 307072 38 004001
+           004001
+           004002
+           004003
+           004004
+           004074
+           004022
+           008023
+           010004
+           010051
+           007004
+           010009
+           007032
+           012101
+           002051
+           004051
+           012118
+           004052
+           012119
+           013004
+           012151
+           007032
+           014032
+           008023
+           004001
+           004001
+           004002
+           004003
+           004004
+           004022
+           007032
+           008023
+           013060
+           004053
+           008023
+           102008
+           008050
+           008020
+ 307073  2 307071
+           307072
+ 307080 13 301090 
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307081 24 301090 
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012122
+           013056
+           013057
+           020101
+           020102
+           020103
+           020104
+           020105
+           020106
+           020107
+           020108
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307082 15 301090 
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012121
+           012122
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307083 14 301090 
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012122
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307084 17 301090 
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           020055
+           101000
+           031000
+           205001
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307086 11 301090 
+           302031
+           302035
+           302036
+           008002
+           302037
+           302066
+           302043
+           302044
+           101002
+           302045
+ 307090 13 301092 
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307091 66 301089 
+           301090
+           008010
+           301091
+           302001
+           007004
+           010009
+           302072
+           103000
+           031000
+           101005
+           307063
+           007061
+           101000
+           031000
+           302069
+           007032
+           007033
+           105000
+           031000
+           020031
+           020032
+           002038
+           022043
+           302021
+           101000
+           031000
+           302078
+           101000
+           031000
+           302073
+           101000
+           031000
+           302074
+           101000
+           031000
+           302075
+           102000
+           031000
+           004025
+           302076
+           302071
+           302077
+           007033
+           101000
+           031000
+           302079
+           007032
+           101000
+           031000
+           302080
+           101000
+           031000
+           302081
+           101000
+           031000
+           302082
+           102000
+           031000
+           004025
+           013059
+           101000
+           031000
+           302083
+           033005
+           033006
+ 308001  3 301033
+           302011
+           022042
+ 308002  3 301034
+           302011
+           022042
+ 308003  3 301035
+           302011
+           022042
+ 308004  3 301036
+           302011
+           022042
+ 308005  2 308004
+           302024
+ 308006  8 010004
+           010061
+           010063
+           011001
+           011002
+           012004
+           013003
+           022042
+ 308007  4 301055
+           302011
+           007062
+           022042
+ 308008 84 001003 
+           001020
+           001005
+           002001
+           002036
+           002149
+           301011
+           301012
+           008021
+           301011
+           301012
+           008021
+           301021
+           027004
+           028004
+           007030
+           001051
+           002148
+           001012
+           001014  
+           002040
+           033022
+           033023
+           033027
+           022063
+           302021
+           302022
+           302023
+           008081
+           025026
+           008081
+           025026
+           008081
+           025026
+           008081
+           002034
+           022060
+           007070
+           002190
+           025086
+           002035
+           002168
+           020031
+           002038
+           306004
+           002030
+           306005
+           007031
+           008081
+           012064
+           302001
+           008081
+           007032
+           007033
+           012101
+           012103
+           013003
+           007032
+           007033
+           008082
+           007033
+           002169
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           004025
+           011043
+           011041
+           008082
+           007033
+           007032
+           004024
+           013011
+           007032
+           008021
+           004024
+           014021
+           008021
+           025028
+           025028
+           025028
+ 308009  7 301093
+           302001
+           302054
+           008002
+           302055
+           302057
+           302060
+ 308010 16 001011 
+           113000
+           031001
+           301011
+           301012
+           301021
+           004080
+           022049
+           004080
+           022059
+           004080
+           022005
+           002042
+           022032
+           002042
+           004080
+ 308011 27 001011 
+           002001
+           301011
+           301012
+           301023
+           007030
+           007031
+           004074
+           004023
+           008023
+           010051
+           007032
+           007033
+           012101
+           013004
+           007032
+           007033
+           302056
+           008023
+           004003
+           004004
+           004023
+           007032
+           013060
+           013051
+           004053
+           007032
+ 308012 28 004001 
+           004001
+           004002
+           004003
+           004004
+           004074
+           004022
+           008023
+           010051
+           007032
+           007033
+           012101
+           013002
+           007032
+           007033
+           302056
+           008023
+           004001
+           004001
+           004002
+           004003
+           004004
+           004022
+           007032
+           008023
+           013060
+           004053
+           008023
+ 308013  2 308011
+           308012
+ 308015 49 001003 
+           001020
+           001005
+           001011
+           001205
+           001001
+           001002
+           002044
+           002045
+           301011
+           301012
+           301021
+           022063
+           105002
+           002098
+           022070
+           022071
+           022073
+           022074
+           002098
+           022076
+           022077
+           022094
+           025043
+           022078
+           121000
+           031001
+           002098
+           022082
+           022084
+           116000
+           031001
+           022080
+           022085
+           022086
+           022087
+           022088
+           022089
+           103000
+           031001
+           022090
+           022186
+           022187
+           103000
+           031001
+           022092
+           022186
+           022187
+           002098
+ 308016 49 001003 
+           001020
+           001005
+           001011
+           001205
+           001001
+           001002
+           002044
+           002045
+           301011
+           301012
+           301021
+           022063
+           105002
+           002098
+           022070
+           022072
+           022073
+           022075
+           002098
+           022076
+           022077
+           022094
+           025044
+           022079
+           121000
+           031001
+           002098
+           022083
+           022084
+           116000
+           031001
+           022081
+           022085
+           022086
+           022087
+           022088
+           022089
+           103000
+           031001
+           022091
+           022186
+           022187
+           103000
+           031001
+           022093
+           022186
+           022187
+           002098
+ 309001  4 301037
+           101000
+           031001
+           303011
+ 309002  4 301038
+           101000
+           031001
+           303011
+ 309003  4 301037
+           101000
+           031001
+           303012
+ 309004  4 301038
+           101000
+           031001
+           303012
+ 309005  5 301037
+           302004
+           101000
+           031001
+           303013
+ 309006  5 301038
+           302004
+           101000
+           031001
+           303013
+ 309007  5 301037
+           302004
+           101000
+           031001
+           303014
+ 309008  5 301038
+           302004
+           101000
+           031001
+           303014
+ 309011  4 301039
+           101000
+           031001
+           303011
+ 309012  4 301039
+           101000
+           031001
+           303012
+ 309013  5 301039
+           302004
+           101000
+           031001
+           303013
+ 309014  5 301039
+           302004
+           101000
+           031001
+           303014
+ 309015  4 301040
+           101000
+           031001
+           303011
+ 309016  4 301040
+           101000
+           031001
+           303012
+ 309017  5 301040
+           302004
+           101000
+           031001
+           303013
+ 309018  5 301040
+           302004
+           101000
+           031001
+           303014
+ 309019  5 301031
+           002003
+           101000
+           031001
+           303011
+ 309020  8 301031
+           002003
+           104000
+           031001
+           007003
+           011003
+           011004
+           011005
+ 309030  8 015004
+           015005
+           104000
+           031001
+           004015
+           008006
+           007004
+           015003
+ 309031  8 015004
+           015005
+           104000
+           031001
+           004025
+           008006
+           007004
+           015003
+ 309040  3 301075
+           301076
+           309030
+ 309042  4 307042
+           301075
+           301076
+           309030
+ 309050  9 301110
+           301113
+           301114
+           101000
+           031002
+           303050
+           101000
+           031001
+           303051
+ 309051  9 301110
+           301113
+           301114
+           101000
+           031002
+           303052
+           101000
+           031001
+           303053
+ 309052 11 301111
+           301113
+           301114
+           302049
+           022043
+           101000
+           031002
+           303054
+           101000
+           031001
+           303051
+ 309053  9 301112
+           301113
+           301114
+           101000
+           031002
+           303054
+           101000
+           031001
+           303051
+ 309054 27 301001
+           001011
+           301011
+           301012
+           301021
+           007030
+           007031
+           007007
+           004023
+           004059
+           115000
+           031001
+           008001
+           008023
+           007004
+           010009
+           012101
+           012103
+           008023
+           011001
+           011002
+           008023
+           011019
+           008050
+           008020
+           008050
+           008020
+ 309060  4 301123
+           301121
+           302050
+           303040
+ 309061 21 301120
+           008041
+           301122
+           201131
+           202129
+           025069
+           007004
+           202000
+           201000
+           033007
+           033035
+           033015
+           013009
+           033007
+           033035
+           033015
+           002013
+           012101
+           033007
+           033035
+           033015
+ 309062 19 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+           033007
+ 309063 19 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+           033007
+ 309064 26 301120
+           008041
+           301122
+           201131
+           202129
+           104002
+           025069
+           007004
+           033035
+           033015
+           013003
+           033035
+           033015
+           202000
+           201000
+           104002
+           002013
+           012101
+           033035
+           033015
+           012103
+           033035
+           033015
+           010009
+           033035
+           033015
+ 309065 18 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+ 309066 18 301120
+           008041
+           301122
+           008040
+           201131
+           202129
+           025069
+           007004
+           013003
+           202000
+           201000
+           002013
+           012101
+           012103
+           010009
+           010007
+           011002
+           011001
+ 309194  5 301194
+           302004
+           101000
+           031001
+           303014
+ 309195  5 301195
+           302004
+           101000
+           031001
+           303014
+ 309196  5 301196
+           302004
+           101000
+           031001
+           303014
+ 309198  5 301198
+           302004
+           101000
+           031001
+           303014
+ 310001  5 301042
+           303031
+           303032
+           101026
+           303025
+ 310002  5 301042
+           303031
+           303032
+           101009
+           303023
+ 310003  5 301042
+           303031
+           303032
+           101006
+           303023
+ 310004  5 301042
+           303031
+           303032
+           101003
+           303024
+ 310005  6 301042
+           303031
+           303033
+           101000
+           031001
+           303025
+ 310006  6 301042
+           303031
+           303033
+           101000
+           031001
+           303023
+ 310007  6 301042
+           303031
+           303033
+           101000
+           031001
+           303024
+ 310008  8 310011
+           101019
+           310012
+           002150
+           025079
+           025080
+           033032
+           014045
+ 310009  3 310011
+           101015
+           310012
+ 310010  3 310011
+           101005
+           310012
+ 310011 45 008070
+           001033
+           001034
+           008070
+           001033
+           001034
+           001007
+           002048
+           005040
+           025075
+           201133
+           005041
+           201000
+           005043
+           025070
+           033030
+           033031
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           202126
+           007001
+           202000
+           007024
+           005021
+           007025
+           005022
+           033033
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+ 310012 10 002150
+           025076
+           025077
+           025078
+           033032
+           201132
+           202129
+           012063
+           202000
+           201000
+ 310013 62 001007
+           005040
+           004001
+           004002
+           004003
+           004004
+           004005
+           004006
+           005001
+           006001
+           007025
+           005043
+           025085
+           201131
+           202129
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           202000
+           201000
+           201132
+           202129
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           008023
+           008072
+           012063
+           008072
+           012063
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           202000
+           201000
+ 310014  3 301072
+           303041
+           304011
+ 310015 13 301072
+           007024
+           010002
+           303041
+           101003
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310016 13 301072
+           007024
+           010002
+           303041
+           101012
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310019 68 001007
+           002019
+           301011
+           301013
+           301023
+           007025
+           008021
+           007025
+           008021
+           007025
+           008021
+           008029
+           005040
+           008075
+           008003
+           010004
+           008003
+           207002
+           015001
+           207000
+           033070
+           015030
+           207002
+           020081
+           207000
+           008003
+           033042
+           007004
+           207002
+           015001
+           207000
+           008003
+           113021
+           007004
+           007004
+           207002
+           008021
+           015005
+           008021
+           015005
+           033007
+           207000
+           008026
+           101020
+           025143
+           008026
+           008043
+           109015
+           007004
+           008090
+           207006
+           015008
+           207000
+           008090
+           207002
+           033007
+           207000
+           008043
+           033071
+           108008
+           202124
+           201107
+           002071
+           201000
+           202000
+           207002
+           020081
+           207000
+ 310020  6 310022
+           301011
+           301013
+           301021
+           304034
+           310021
+ 310021 10 108000
+           031001
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+ 310022  4 001007
+           002019
+           001033
+           002172
+ 310023 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101012
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310024 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101003
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310025 61 001007
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           201138
+           202131 
+           004006
+           202000
+           201000
+           201132
+           005041
+           201000
+           201129
+           005043
+           201000
+           005002
+           006002
+           013040
+           020029
+           104024
+           005042
+           012163
+           021083
+           021084
+           115003
+           004001
+           004002
+           004003
+           201142
+           202131
+           004026
+           202000
+           201000
+           005001
+           006001
+           201138
+           202129
+           007001
+           202000
+           201000
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           005040
+           101003
+           012070
+           025054
+           101004
+           025055
+           008007
+           104028
+           005002
+           006002
+           002111
+           005021
+ 310026 82 310022
+           025060
+           008021
+           301011
+           301012
+           201138
+           202131
+           004006
+           202000
+           201000
+           033039
+           033007
+           304030
+           304031
+           002020
+           001050
+           202127
+           304030
+           202000
+           304031
+           201133
+           202131
+           004016
+           202000
+           201000
+           301021
+           304030
+           010035
+           005021
+           010036
+           113000
+           031002
+           301021
+           005021
+           108000
+           031001
+           002121
+           007040
+           015037
+           008023
+           201125
+           015037
+           201000
+           008023
+           033007
+           108000
+           031002
+           007007
+           015036
+           008023
+           201123
+           015036
+           201000
+           008023
+           033007
+           116000
+           031002
+           007009
+           010004
+           012001
+           013001
+           008023
+           201120
+           010004
+           201000
+           201122
+           012001
+           201000
+           201123
+           013001
+           201000
+           008023
+           033007
+           008003
+           007009
+           010004
+           008023
+           201120
+           010004
+           201000
+           008023
+           033007
+ 310027 12 301071
+           301011
+           301013
+           301021
+           030021
+           030022
+           010002
+           304036
+           002152
+           002167
+           101011
+           304035
+ 310028 12 301071
+           301011
+           301013
+           301021
+           030021
+           030022
+           010002
+           304036
+           002152
+           002167
+           101011
+           304037
+ 310029 12 110000
+           031001
+           201138
+           202130
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+           012101
+           013098
+ 310030  6 310022
+           301011
+           301013
+           301021
+           304034
+           310029
+ 310050 14 310051
+           310052
+           101000
+           031002
+           310053
+           101004
+           310054
+           020010
+           310052
+           101015
+           310053
+           310052
+           101005
+           310053
+ 310051 16 001007
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           007025
+           005022
+           102009
+           002151
+           012064
+ 310052 12 002019
+           301011
+           301012
+           202131
+           201138
+           004006
+           201000
+           202000
+           301021
+           007024
+           005021
+           005043
+ 310053  6 201134
+           005042
+           201000
+           025076
+           033032
+           012163
+ 310054 13 201134
+           005042
+           201000
+           025076
+           033032
+           201131
+           202129
+           102002
+           008023
+           014027
+           008023
+           202000
+           201000
+ 310055  8 310051
+           310052
+           102020
+           025076
+           025052
+           101000
+           031002
+           025050
+ 310193  5 301250
+           303250
+           302250
+           303249
+           303251
+ 310194  5 301250
+           303250
+           302250
+           303249
+           303252
+ 310195  3 301250
+           303250
+           304250
+ 310196  3 301250
+           303249
+           303251
+ 310226 39 310022
+           025060
+           008021
+           301011
+           301012
+           201138
+           202131
+           004006
+           202000
+           201000
+           033039
+           033007
+           304030
+           304031
+           002020
+           001050
+           202127
+           304030
+           202000
+           304031
+           201133
+           202131
+           004016
+           202000
+           201000
+           301021
+           304030
+           010035
+           005021
+           010036
+           107000
+           031002
+           301021
+           005021
+           103000
+           031001
+           002121
+           007040
+           015037
+ 311001  9 301051
+           007002
+           012001
+           011001
+           011002
+           011031
+           011032
+           011033
+           020041
+ 311002  4 301065
+           301066
+           311003
+           311004
+ 311003  5 010070
+           011001
+           011002
+           012001
+           013002
+ 311004 18 101000
+           031000
+           011034
+           101000
+           031000
+           011035
+           101000
+           031000
+           011075
+           101000
+           031000
+           011076
+           101000
+           031000
+           033025
+           101000
+           031000
+           033026
+ 311005 13 001008
+           001023
+           301021
+           301011
+           301013
+           007010
+           008009
+           011001
+           011002
+           011031
+           011036
+           012101
+           033025
+ 311006  6 007010
+           011001
+           011002
+           002064
+           012101
+           012103
+ 311007  7 007010
+           301021
+           011001
+           011002
+           002064
+           012101
+           012103
+ 311008  8 001008
+           301011
+           301013
+           301021
+           008004
+           101000
+           031001
+           311006
+ 311009  8 001008
+           301011
+           301013
+           301021
+           008004
+           101000
+           031001
+           311007
+ 311193 16 301197
+           301011
+           301012
+           301023
+           008004
+           007004
+           008021
+           011001
+           011002
+           011031
+           011034
+           011035
+           012001
+           012003
+           013003
+           020041
+ 312001  2 301043
+           304001
+ 312002  2 301043
+           304002
+ 312003  2 301042
+           304003
+ 312004  2 301042
+           304004
+ 312005  2 301042
+           020014
+ 312006  2 301044
+           304005
+ 312007  2 301042
+           304006
+ 312010  6 001007
+           005040
+           002021
+           005041
+           004001
+           004043
+ 312011  9 202131
+           201149
+           004006
+           201000
+           202126
+           010002
+           202000
+           005043
+           005053
+ 312012  6 202129
+           201132
+           101019
+           012063
+           201000
+           202000
+ 312013  6 005042
+           202129
+           201135
+           012063
+           201000
+           202000
+ 312014  8 312010
+           312011
+           105056
+           301023
+           005042
+           005052
+           312012
+           312013
+ 312015 10 109011
+           301023
+           005042
+           005052
+           202129
+           201132
+           101004
+           012063
+           202000
+           201000
+ 312016  3 312010
+           312011
+           312015
+ 312017 10 109008
+           301023
+           005042
+           005052
+           202129
+           201132
+           101003
+           012063
+           202000
+           201000
+ 312018  3 312010
+           312011
+           312017
+ 312019 13 301047
+           301048
+           015015
+           029002
+           021076
+           106012
+           201129
+           006030
+           201000
+           102012
+           005030
+           021075
+           021066
+ 312020 11 301047
+           301048
+           015015
+           029002
+           021076
+           104012
+           006030
+           102012
+           005030
+           021075
+           021066
+ 312021  6 301047
+           101003
+           301049
+           011012
+           011011
+           021067
+ 312022 15 301047
+           008022
+           011012
+           011050
+           022070
+           022026
+           312041
+           010050
+           021068
+           021071
+           021072
+           021073
+           312042
+           021062
+           015011
+ 312023  7 301047
+           103003
+           008022
+           012061
+           022050
+           021069
+           021085
+ 312024 11 312020
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312025 11 312019
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312026 19 301046
+           301011
+           301013
+           301023
+           312031
+           101004
+           312030
+           021110
+           301023
+           321027
+           021111
+           301023
+           321027
+           021112
+           301023
+           321027
+           021113
+           301023
+           321027
+ 312027  9 301047
+           105009
+           301023
+           007021
+           012061
+           007021
+           012061
+           021085
+           021070
+ 312028 26 301046
+           301011
+           301013
+           301023
+           008025
+           201136
+           004006
+           201000
+           312031
+           312032
+           101004
+           312030
+           101002
+           312033
+           021110
+           301023
+           321028
+           021111
+           301023
+           321028
+           021112
+           301023
+           321028
+           021113
+           301023
+           321028
+ 312030 13 201130
+           202129
+           011012
+           202000
+           201000
+           011052
+           201135
+           202130
+           011011
+           202000
+           201000
+           011053
+           021104
+ 312031  8 005034
+           006034
+           021109
+           011081
+           011082
+           021101
+           021102
+           021103
+ 312032  4 021120
+           021121
+           013055
+           021122
+ 312033  4 002104
+           008022
+           012063
+           012065
+ 312041  5 201141
+           202130
+           007001
+           201000
+           202000
+ 312042  6 021077
+           021078
+           021079
+           021080
+           021081
+           021082
+ 312045 21 001007
+           002019
+           001096
+           025061
+           005040
+           301011
+           301013
+           301021
+           007002
+           012180
+           012181
+           012182
+           012183
+           012184
+           012185
+           002174
+           021086
+           012186
+           021087
+           012187
+           033043
+ 312050 23 001007
+           002019
+           001096
+           025061
+           005040
+           301011
+           301013
+           301021
+           007025
+           005022
+           010080
+           027080
+           008003
+           007004
+           013093
+           008003
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           013095
+ 312051 48 001007
+           002019
+           001096
+           025061
+           005040
+           008075
+           301011
+           301013
+           301021
+           001012
+           201131
+           001013
+           201000
+           010032
+           010033
+           010034
+           007002
+           008012
+           025110
+           025111
+           025102
+           002104
+           025103
+           025104
+           025105
+           025106
+           025107
+           025108
+           002111
+           002121
+           002026
+           002027
+           021130
+           021131
+           021132
+           021133
+           021064
+           025014
+           021134
+           107018
+           005030
+           105024
+           201130
+           006030
+           201000
+           021135
+           021136
+           033044
+ 312052 77 001007
+           002019
+           001096
+           025061
+           005040
+           025120
+           025121
+           025124
+           025125
+           025122
+           025123
+           301011
+           301013
+           301021
+           007002
+           002119
+           033047
+           010081
+           010082
+           010083
+           010084
+           002116
+           002117
+           002118
+           002156
+           002157
+           014055
+           022150
+           022151
+           022152
+           022153
+           022154
+           022155
+           022156
+           022157
+           022158
+           022159
+           021137
+           021138
+           021139
+           021140
+           021141
+           021142
+           010085
+           010086
+           010087
+           010088
+           010089
+           010090
+           010091
+           010092
+           010093
+           011002
+           025126
+           025127
+           025128
+           025129
+           025130
+           025131
+           025132
+           025133
+           025134
+           025135
+           025136
+           025137
+           013096
+           013097
+           011095
+           011096
+           012188
+           012189
+           002158
+           002159
+           033052
+           033053
+           021143
+           021144
+ 312053 54 001007
+           002019
+           001096
+           025061
+           005040
+           008075
+           301011
+           301013
+           301021
+           001012
+           201131
+           001013
+           201000
+           010032
+           010033
+           010034
+           007002
+           008012
+           025110
+           025111
+           025102
+           002104
+           025103
+           025104
+           025105
+           025106
+           025107
+           025108
+           011001
+           011002
+           022160
+           025138
+           201130
+           202129
+           022021
+           202000
+           201000
+           033048
+           033049
+           002026
+           002027
+           021130
+           021131
+           021132
+           021133
+           025014
+           106036
+           005030
+           104024
+           201130
+           006030
+           201000
+           022161
+           033044
+ 312055  5 005033
+           005040
+           006034
+           010095
+           021157
+ 312056 11 025060
+           001032
+           011082
+           011081
+           020095
+           020096
+           021155
+           201133
+           021101
+           021102
+           201000
+ 312057 12 201130
+           202129
+           011012
+           202000
+           201000
+           201131
+           202129
+           011011
+           202000
+           201000
+           021156
+           021104
+ 312058  8 301125
+           301011
+           301013
+           301021
+           312055
+           021150
+           101003
+           321030
+ 312059  4 312056
+           101000
+           031001
+           312057
+ 312060 20 025060
+           025062
+           040001
+           040002
+           021062
+           021151
+           021152
+           021153
+           021154
+           021062
+           021062
+           040003
+           040004
+           040005
+           040006
+           040007
+           020065
+           040008
+           040009
+           040010
+ 312061  3 312058
+           312060
+           312059
+ 312070 27 001007
+           002019
+           001144
+           001124
+           030010
+           301011
+           301013
+           301021
+           007012
+           015012
+           012165
+           012166
+           012167
+           012168
+           027010
+           028010
+           002099
+           013048
+           025081
+           025082
+           025083
+           025084
+           012080
+           012081
+           012082
+           025174
+           033028
+ 312200 10 301237
+           301238
+           029002
+           021206
+           104012
+           006232
+           102012
+           005232
+           021205
+           021196
+ 312201  6 301237
+           101003
+           301239
+           011012
+           011011
+           021197
+ 312202 13 301237
+           008022
+           011012
+           011050
+           301240
+           022243
+           301241
+           010050
+           021198
+           021201
+           021202
+           021203
+           301242
+ 312203  8 301237
+           008022
+           012061
+           022050
+           021204
+           021199
+           021214
+           021215
+ 312204 12 312201
+           001031
+           011012
+           011011
+           021200
+           021213
+           004004
+           008021
+           004024
+           055003
+           011012
+           011011
+ 312207  3 312202
+           301202
+           033191
+ 312208 17 301202
+           008022
+           008021
+           301011
+           301013
+           301023
+           302205
+           011002
+           001007
+           002021
+           301011
+           301013
+           301023
+           001032
+           001192
+           302205
+           011002
+ 312209 11 301202
+           001192
+           301011
+           301013
+           301023
+           302206
+           104000
+           022192
+           102000
+           005232
+           022191
+ 312210 13 312202
+           021192
+           015202
+           301011
+           004004
+           004005
+           201138
+           202131
+           004006
+           201000
+           202000
+           304228
+           304229
+ 312211 19 301046
+           301011
+           301013
+           301023
+           312031
+           101004
+           312030
+           021110
+           101004
+           312212
+           021111
+           101004
+           312212
+           021112
+           101004
+           312212
+           021113
+           101004
+           312212
+ 312212  2 301023
+           321027
+ 313009  4 021001
+           101000
+           031001
+           021001
+ 313010  4 021036
+           101000
+           031001
+           021036
+ 313031  5 006002
+           006012
+           101000
+           031002
+           030001
+ 313032  5 005002
+           005012
+           101000
+           031002
+           313031
+ 313041 13 006002
+           110000
+           031001
+           104000
+           031001
+           006012
+           101000
+           031012
+           030001
+           006012
+           101000
+           031001
+           030001
+ 313042  5 005002
+           005012
+           101000
+           031002
+           313041
+ 313043 17 006002
+           005002
+           005012
+           112000
+           031001
+           110000
+           031001
+           104000
+           031001
+           006012
+           101000
+           031011
+           030001
+           006012
+           101000
+           031001
+           030001
+ 315001  5 001011
+           301011
+           301012
+           301023
+           306001
+ 315002  5 001011
+           301011
+           301012
+           301023
+           306004
+ 315003 25 001087
+           001085
+           001086
+           002036
+           002148
+           002149
+           022055
+           022056
+           022067
+           301011
+           301012
+           301021
+           008080
+           033050
+           109000
+           031002
+           007065
+           008080
+           033050
+           022045
+           008080
+           033050
+           022064
+           008080
+           033050
+ 316001 10 301011
+           004004
+           301023
+           001021
+           002041
+           019001
+           010051
+           019002
+           019003
+           019004
+ 316002 15 008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           001033
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           007002
+           007002
+ 316003 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           010002
+           011002
+           008007
+           008011
+ 316004 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           011031
+           008007
+           008011
+ 316005 10 108000
+           031001
+           008005
+           008007
+           005002
+           006002
+           001026
+           019001
+           008007
+           008005
+ 316006 14 112000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020011
+           020012
+           008007
+           008011
+ 316007 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           019005
+           019006
+           008007
+           008011
+ 316008 13 111000
+           031001
+           008001
+           008007
+           008023
+           103000
+           031001
+           005002
+           006002
+           010002
+           008023
+           008007
+           008001
+ 316009 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020041
+           008007
+           008011
+ 316010  9 107000
+           031001
+           008011
+           008007
+           001022
+           005002
+           006002
+           008007
+           008011
+ 316011 19 117000
+           031001
+           008011
+           001022
+           008007
+           102000
+           031001
+           005002
+           006002
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           020090
+           008021
+           008007
+           008011
+ 316020  5 001023
+           001025
+           001027
+           301011
+           301012
+ 316021 23 301023
+           002041
+           019001
+           019007
+           019005
+           019006
+           019008
+           008005
+           010004
+           008005
+           010004
+           019007
+           008005
+           008021
+           004075
+           011040
+           019007
+           105004
+           005021
+           005021
+           102002
+           019003
+           019004
+ 316022 24 001032
+           002041
+           019001
+           019010
+           118000
+           031001
+           008021
+           004014
+           008005
+           301023
+           019005
+           019006
+           010004
+           011041
+           008021
+           004075
+           011040
+           019008
+           105004
+           005021
+           005021
+           102002
+           019003
+           019004
+ 316026  2 316020
+           316021
+ 316030 10 301014
+           001037
+           010064
+           008019
+           001062
+           008019
+           001065
+           008019
+           001062
+           008019
+ 316031  8 008021
+           301011
+           301012
+           301027
+           019005
+           019006
+           020028
+           008021
+ 316032  5 008021
+           301011
+           301012
+           301027
+           008021
+ 316033  7 008021
+           301011
+           301012
+           101000
+           031001
+           301027
+           008021
+ 316034 17 008079
+           316030
+           008011
+           001022
+           008007
+           301023
+           008007
+           020090
+           316031
+           101000
+           031000
+           316032
+           101000
+           031001
+           316033
+           008011
+           008079
+ 316035  9 008079
+           316030
+           008011
+           020023
+           020021
+           020008
+           316031
+           008011
+           008079
+ 316036 13 008079
+           316030
+           008011
+           001027
+           316031
+           101000
+           031000
+           316032
+           101000
+           031001
+           316033
+           008011
+           008079
+ 316037  7 008079
+           316030
+           008011
+           011031
+           316031
+           008011
+           008079
+ 316038  8 008079
+           316030
+           008011
+           020041
+           020021
+           316031
+           008011
+           008079
+ 316039  7 008079
+           316030
+           008011
+           020024
+           316031
+           008011
+           008079
+ 316040  6 316030
+           008079
+           301014
+           001037
+           010064
+           008079
+ 316050 16 301001
+           301011
+           301012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ 316052 29 301005
+           301011
+           301012
+           001007
+           025150
+           122000
+           031001
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ 318001  2 301025
+           024011
+ 318003  4 301026
+           024005
+           024004
+           024021
+ 318004  6 301025
+           004023
+           013011
+           024005
+           024004
+           024022
+ 321001  6 002101
+           002114
+           002105
+           002106
+           002107
+           002121
+ 321003  4 021051
+           021014
+           021017
+           021030
+ 321004  5 301031
+           002003
+           101000
+           031001
+           321003
+ 321005 12 025004
+           002121
+           002122
+           002123
+           002124
+           002125
+           002126
+           002127
+           002128
+           002129
+           002130
+           002131
+ 321006  4 025001
+           025002
+           025003
+           025005
+ 321007  8 025009
+           025010
+           025011
+           025012
+           025013
+           025015
+           025016
+           025017
+ 321008  3 025006
+           025007
+           025008
+ 321009  2 025018
+           025019
+ 321010 13 002101
+           007002
+           002102
+           002103
+           002104
+           002105
+           002106
+           002107
+           002108
+           002109
+           002110
+           002132
+           002133
+ 321011  3 030031
+           030032
+           029002
+ 321012  3 101000
+           031001
+           002135
+ 321021 15 002003
+           002101
+           201130
+           002106
+           201000
+           201132
+           202130
+           002121
+           202000
+           201000
+           201133
+           202129
+           025001
+           202000
+           201000
+ 321022 11 007007
+           204001
+           031021
+           011001
+           204000
+           011002
+           204001
+           031021
+           011006
+           204000
+           021030
+ 321023  9 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+ 321024  7 007007
+           204001
+           031021
+           012007
+           011006
+           204000
+           021030
+ 321025 17 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+           021092
+           021030
+           025092
+           201129
+           202129
+           021017
+           202000
+           201000
+ 321026 10 007007
+           204001
+           031021
+           012007
+           025091
+           011071
+           011072
+           011073
+           011074
+           204000
+ 321027 18 021118
+           202129
+           201132
+           002112
+           201000
+           201131
+           002111
+           201000
+           202000
+           002104
+           021105
+           021106
+           021107
+           021114
+           021115
+           021116
+           008018
+           021117
+ 321028 18 021118
+           202129
+           201132
+           002112
+           201000
+           201131
+           002111
+           201000
+           202000
+           002104
+           021123
+           021106
+           021107
+           021114
+           021115
+           021116
+           008018
+           021117
+ 321030 18 008085
+           202129
+           201131
+           002111
+           201000
+           202000
+           002134
+           021062
+           021063
+           021158
+           021159
+           021160
+           021161
+           021162
+           021163
+           021164
+           021165
+           021166
+ 340001 45 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           101010
+           340002
+           101087
+           340003
+           002019
+           025051
+           101007
+           340004
+ 340002  3 025140
+           025141
+           025142
+ 340003  5 104100
+           201136
+           005042
+           201000
+           014046
+ 340004  9 005060
+           005061
+           025085
+           105006
+           005042
+           025142
+           014047
+           025142
+           014048
+ 340005 94 001007
+           002019
+           001096
+           025061
+           005044
+           005040
+           001030
+           301011
+           301012
+           004007
+           005001
+           006001
+           008029
+           008074
+           008077
+           040011
+           025097
+           025095
+           025098
+           025099
+           021144
+           025096
+           040012
+           040013
+           021169
+           022151
+           022162
+           022163
+           025160
+           025133
+           022156
+           022164
+           022165
+           022166
+           021137
+           021138
+           022167
+           021139
+           021118
+           021145
+           021146
+           021147
+           022168
+           022169
+           022170
+           025161
+           025162
+           022171
+           022172
+           022173
+           022174
+           021170
+           021171
+           022175
+           021172
+           021118
+           021173  
+           021174
+           021175
+           102003
+           002153
+           012063
+           013090
+           013091
+           007002
+           011097
+           011098
+           007002
+           011095 
+           011096
+           010096
+           010081
+           010082
+           010083
+           010101
+           025132
+           025163
+           025126
+           025128
+           025164
+           010085
+           010097
+           010086
+           010087
+           010092
+           010088
+           010089
+           010098
+           010099
+           010090
+           010100
+           010093
+           025127
+           040014
+ 340007 57 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           103003
+           025140
+           025141
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           040020
+           101010
+           340002
+           101087
+           340003
+           002019
+           025051
+           101007
+           340004
+           020081
+           008029
+           020083
+           008029
+           040018
+           040019
+           040021
+           040022
+ 340008 61 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           103003
+           025140
+           025141
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           040020
+           101010
+           340002
+           104000
+           031002
+           201136
+           005042
+           201000
+           014046
+           002019 
+           025051
+           101007
+           340004
+           020081
+           008029
+           020083
+           008029
+           040018
+           040019
+           040021
+           040022
diff --git a/bufrtables/D0000000000098014001.TXT b/bufrtables/D0000000000098014001.TXT
new file mode 100755
index 0000000..7e90777
--- /dev/null
+++ b/bufrtables/D0000000000098014001.TXT
@@ -0,0 +1,5115 @@
+ 300002  2 000002
+           000003
+ 300003  3 000010
+           000011
+           000012
+ 300004  9 300003
+           000013
+           000014
+           000015
+           000016
+           000017
+           000018
+           000019
+           000020
+ 300010  4 300003
+           101000
+           031001
+           000030
+ 301001  2 001001
+           001002
+ 301002  3 001003
+           001004
+           001005
+ 301003  3 001011
+           001012
+           001013
+ 301004  4 001001
+           001002
+           001015
+           002001
+ 301005  2 001035
+           001034
+ 301011  3 004001
+           004002
+           004003
+ 301012  2 004004
+           004005
+ 301013  3 004004
+           004005
+           004006
+ 301014  3 102002  
+           301011
+           301012
+ 301021  2 005001
+           006001
+ 301022  3 005001
+           006001
+           007001
+ 301023  2 005002
+           006002
+ 301024  3 005002
+           006002
+           007001
+ 301025  3 301023
+           004003
+           301012
+ 301026  7 301021
+           004003
+           004003
+           004004
+           004004
+           004005
+           004005
+ 301027  5 008007
+           101000
+           031001
+           301028
+           008007
+ 301028  8 008040
+           033042
+           007010
+           101000
+           031002
+           301023
+           019007
+           008040
+ 301031  5 301001
+           002001
+           301011
+           301012
+           301022
+ 301032  5 301001
+           002001
+           301011
+           301012
+           301024
+ 301033  5 001005
+           002001
+           301011
+           301012
+           301021
+ 301034  5 001005
+           002001
+           301011
+           301012
+           301023
+ 301035  7 001005
+           001012
+           001013
+           002001
+           301011
+           301012
+           301023
+ 301036  5 301003
+           002001
+           301011
+           301012
+           301023
+ 301037  6 301001
+           002011
+           002012
+           301011
+           301012
+           301022
+ 301038  6 301001
+           002011
+           002012
+           301011
+           301012
+           301024
+ 301039  6 301003
+           002011
+           002012
+           301011
+           301012
+           301023
+ 301040  6 301003
+           002011
+           002012
+           301011
+           301012
+           301024
+ 301041  5 001007
+           002021
+           002022
+           301011
+           301012
+ 301042  2 301041
+           301021
+ 301043  5 001007
+           002023
+           301011
+           301013
+           301021
+ 301044  5 001007
+           002024
+           301011
+           301013
+           301021
+ 301045  9 301011
+           301012
+           201138
+           202131
+           004006
+           201000
+           202000
+           304030
+           304031
+ 301046 10 001007
+           001012
+           002048
+           021119
+           025060
+           202124
+           002026
+           002027
+           202000
+           005040
+ 301047 15 001007
+           025060
+           001033
+           001034
+           001012
+           301045
+           002021
+           301011
+           301012
+           201138
+           202131
+           004006
+           201000
+           202000
+           301023
+ 301048 14 002104
+           002121
+           002113
+           002026
+           002027
+           002111
+           002140
+           202127
+           001013
+           202126
+           007001
+           202000
+           025010
+           021064
+ 301049  5 002111
+           002112
+           021062
+           021063
+           021065
+ 301051  6 001006
+           002061
+           301011
+           301012
+           301021
+           008004
+ 301055  7 001005
+           002001
+           301011
+           301012
+           301021
+           001012
+           001014
+ 301062  3 101000
+           031001
+           301001
+ 301065  8 001006
+           001008
+           002001
+           002002
+           002005
+           002062
+           002070
+           002065
+ 301066  6 301011
+           301013
+           301023
+           007004
+           002064
+           008004
+ 301070  3 002143
+           002142
+           002144
+ 301071  5 001007
+           001031
+           002020
+           002028
+           002029
+ 301072  4 301071
+           301011
+           301013
+           301021
+ 301074  4 002143
+           002142
+           002145
+           002146
+ 301075  6 301001
+           001015
+           301024
+           008021
+           301011
+           301012
+ 301076  3 002011
+           002143
+           002142
+ 301089  2 001101
+           001102
+ 301090  6 301004
+           301011
+           301012
+           301021
+           007030
+           007031
+ 301091 10 002180
+           002181
+           002182
+           002183
+           002184
+           002179
+           002186
+           002187
+           002188
+           002189
+ 301092  9 001011
+           001003
+           002001
+           301011
+           301012
+           301021
+           007030
+           007031
+           033024
+ 301093  3 301036
+           007030
+           007031
+ 301110  5 301001
+           001011
+           002011
+           002014
+           002003
+ 301111  6 301001
+           001011
+           002011
+           002013
+           002014
+           002003
+ 301112  5 001006
+           002011
+           002013
+           002014
+           002003
+ 301113  3 008021
+           301011
+           301013
+ 301114  5 301021
+           007030
+           007031
+           007007
+           033024
+ 301120  4 301001
+           001094
+           002011
+           301121
+ 301121  5 008041
+           301122
+           301021
+           007031
+           007007
+ 301122  7 301011
+           301012
+           201135
+           202130
+           004006
+           202000
+           201000
+ 301123 33 102002
+           008041
+           001062
+           301001
+           001094
+           002011
+           001018
+           001095
+           025061
+           025068
+           001082
+           001083
+           001081
+           002067
+           002066
+           002014
+           025067
+           025065
+           025066
+           002095
+           002096
+           002097
+           002016
+           002083
+           002080
+           002081
+           001093
+           002084
+           002085
+           002086
+           002082
+           008041
+           301011
+ 301125  6 001033
+           001034
+           025060
+           001007
+           002019
+           001012
+ 301193  5 001007
+           001031
+           002196
+           002221
+           002222
+ 301194  9 001194
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301195  9 001195
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301196  7 301003
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301197  9 001006
+           001008
+           002061
+           002062
+           002002
+           002005
+           002070
+           002063
+           002001
+ 301198  9 001011
+           001012
+           001013
+           002011
+           002012
+           301011
+           301012
+           301023
+           007001
+ 301200  2 001032
+           033194
+ 301201  2 101003
+           033193
+ 301202  2 001031
+           001032
+ 301237 12 001007
+           001012
+           002021
+           301011
+           004004
+           004005
+           201138
+           202131
+           004006
+           201000
+           202000
+           301023
+ 301238 14 002104
+           002121
+           002113
+           002026
+           002027
+           002111
+           002192
+           202127
+           001013
+           202126
+           007001
+           202000
+           025010
+           021194
+ 301239  5 002111
+           002112
+           021192
+           021193
+           021195
+ 301240  5 201131
+           202129
+           022021
+           201000
+           202000
+ 301241  5 201141
+           202130
+           007001
+           201000
+           202000
+ 301242  6 021207
+           021208
+           021209
+           021210
+           021211
+           021212
+ 301250  4 301193
+           301011
+           301013
+           301021
+ 302001  4 010004
+           010051
+           010061
+           010063
+ 302002  5 010004
+           007004
+           010003
+           010061
+           010063
+ 302003  9 011011
+           011012
+           012004
+           012006
+           013003
+           020001
+           020003
+           020004
+           020005
+ 302004  7 020010
+           008002
+           020011
+           020013
+           020012
+           020012
+           020012
+ 302005  4 008002
+           020011
+           020012
+           020013
+ 302006  4 010004
+           010051
+           010062
+           010063
+ 302011  3 302001
+           302003
+           302004
+ 302012  3 302002
+           302003
+           302004
+ 302013  5 302006
+           302003
+           101000
+           031001
+           302005
+ 302021  3 022001
+           022011
+           022021
+ 302022  3 022002
+           022012
+           022022
+ 302023  3 022003
+           022013
+           022023
+ 302024  3 302022
+           101002
+           302023
+ 302031  4 302001
+           010062
+           007004
+           010009
+ 302032  4 007032
+           012101
+           012103
+           013003
+ 302033  2 007032
+           020001
+ 302034  2 007032
+           013023
+ 302035  8 302032
+           302033
+           302034
+           007032
+           302004
+           101000
+           031001
+           302005
+ 302036  7 105000
+           031001
+           008002
+           020011
+           020012
+           020014
+           020017
+ 302037  3 020062
+           013013
+           012113
+ 302038  4 020003
+           004024
+           020004
+           020005
+ 302039  2 004024
+           014031
+ 302040  4 007032
+           102002
+           004024
+           013011
+ 302041  7 007032
+           004024
+           004024
+           012111
+           004024
+           004024
+           012112
+ 302042 11 007032
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+ 302043  7 302038
+           101002
+           302039
+           302040
+           302041
+           302042
+           007032
+ 302044  3 004024
+           002004
+           013033
+ 302045  7 004024
+           014002
+           014004
+           014016
+           014028
+           014029
+           014030
+ 302046  3 004024
+           004024
+           012049
+ 302047  3 102003
+           008002
+           020054
+ 302048  5 005021
+           007021
+           020012
+           005021
+           007021
+ 302049  7 008002
+           020011
+           020013
+           020012
+           020012
+           020012
+           008002
+ 302050 31 008041
+           005021
+           007005
+           202130
+           006021
+           202000
+           008041
+           201131
+           202129
+           002115
+           010004
+           002115
+           013003
+           202000
+           201000
+           002115
+           011001
+           011002
+           002115
+           102002
+           012101
+           004024
+           002115
+           012103
+           012102
+           101003
+           020012
+           020011
+           020013
+           101002
+           020003
+ 302051 12 010004
+           010051
+           007004
+           010003
+           012004
+           012051
+           012016
+           012017
+           013004
+           102004
+           008051
+           008020
+ 302052  7 007032
+           007033
+           012101
+           002039
+           012102
+           012103
+           013003
+ 302053  3 007032
+           007033
+           020001
+ 302054  9 302052
+           302053
+           007033
+           302034
+           007032
+           302004
+           101000
+           031001
+           302005
+ 302055  8 020031
+           020032
+           020033
+           020034
+           020035
+           020036
+           020037
+           020038
+ 302056  4 002038
+           007063
+           022043
+           007063
+ 302057  3 302056
+           302021
+           302024
+ 302058  8 007032
+           007033
+           004024
+           004024
+           012111
+           004024
+           004024
+           012112
+ 302059 12 007032
+           007033
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+ 302060  4 302038
+           302040
+           302058
+           302059
+ 302062 24 302001
+           302052
+           302053
+           007033
+           101000
+           031000
+           302034
+           007032
+           101000
+           031001
+           302005
+           008002
+           101000
+           031000
+           302055
+           101000
+           031000
+           302056
+           101000
+           031000
+           302021
+           101000
+           031000
+           302024
+ 302063  8 302038
+           101000
+           031000
+           302040
+           101000
+           031000
+           302058
+           302059
+ 302066 16 020023
+           020024
+           020027
+           020054
+           020023
+           020027
+           020054
+           020025
+           020026
+           020027
+           020040
+           020066
+           020027
+           020021
+           020067
+           020027
+ 302069  4 007032
+           007033
+           033041
+           020001
+ 302070  8 007032
+           007033
+           011001
+           011002
+           011043
+           011041
+           011016
+           011017
+ 302071 14 007032
+           007033
+           008021
+           004025
+           011001
+           011002
+           008021
+           103002
+           004025
+           011043
+           011041
+           004025
+           011016
+           011017
+ 302072  5 007032
+           007033
+           012101
+           012103
+           013003
+ 302073  7 020010
+           105004
+           008002
+           020011
+           020012
+           033041
+           020013
+ 302074  4 020003
+           004025
+           020004
+           020005
+ 302075  5 008021
+           004025
+           013055
+           013058
+           008021
+ 302076  7 020021
+           020022
+           026020
+           020023
+           020024
+           020025
+           020026
+ 302077  8 007032
+           007033
+           004025
+           012111
+           012112
+           007032
+           004025
+           012112
+ 302078  4 002176
+           020062
+           002177
+           013013
+ 302079  5 007032
+           002175
+           002178
+           004025
+           013011
+ 302080  3 002185
+           004025
+           013033
+ 302081  2 004025
+           014031
+ 302082  7 004025
+           014002
+           014004
+           014016
+           014028
+           014029
+           014030
+ 302083  8 004025
+           008023
+           010004
+           011001
+           011002
+           012101
+           013003
+           008023
+ 302084 41 302031
+           302072
+           103000
+           031000
+           101005
+           307063
+           007061
+           101000
+           031000
+           302069
+           007032
+           007033
+           105000
+           031000
+           020031
+           020032
+           002038
+           022043
+           302021
+           101000
+           031000
+           302078
+           012113
+           101000
+           031000
+           302004
+           105000
+           031001
+           008002
+           020011
+           020012
+           033041
+           020013
+           302036
+           101000
+           031000
+           302047
+           008002
+           101000
+           031000
+           302048
+ 302085 63 105000
+           031000
+           020003
+           103002
+           004024
+           020004
+           020005
+           101000
+           031000
+           302175
+           102000
+           031000
+           004025
+           302076
+           102000
+           031000
+           004025
+           013059
+           007032
+           007033
+           008021
+           004025
+           011001
+           011002
+           008021
+           103003
+           004025
+           011043
+           011041
+           004025
+           011016
+           011017
+           302077
+           007033
+           302041
+           106000
+           031000
+           007032
+           002175
+           002178
+           102005
+           004024
+           013011
+           007032
+           103000
+           031000
+           002185
+           101002
+           302044
+           102000
+           031000
+           101002
+           302039
+           102000
+           031000
+           101002
+           302045
+           101000
+           031000
+           302046
+           101000
+           031000
+           302083
+ 302089  8 020101
+           020102
+           020103
+           020104
+           020105
+           020106 
+           020107
+           020108
+ 302175  5 008021
+           004025
+           013155
+           013058
+           008021
+ 302205  5 201131
+           202129
+           022021
+           201000
+           202000
+ 302206  9 302205
+           201130
+           202129
+           022011
+           201000
+           202000
+           022001
+           011001
+           011002
+ 302207  5 022193
+           022194
+           022195
+           022196
+           022197
+ 302250  5 102000
+           031001
+           020193
+           020194
+           020012
+ 303001  3 007003
+           011001
+           011002
+ 303002  3 007004
+           011001
+           011002
+ 303003  4 007004
+           010003
+           012001
+           012003
+ 303004  6 007004
+           010003
+           012001
+           012003
+           011001
+           011002
+ 303011  4 007003
+           008001
+           011001
+           011002
+ 303012  4 007004
+           008001
+           011001
+           011002
+ 303013  7 007004
+           008001
+           010003
+           012001
+           013003
+           011001
+           011002
+ 303014  7 007004
+           008001
+           010003
+           012001
+           012003
+           011001
+           011002
+ 303021  4 007004
+           007004
+           204007
+           031021
+ 303022  3 303021
+           010003
+           204000
+ 303023  3 303021
+           012001
+           204000
+ 303024  3 303021
+           013016
+           204000
+ 303025  5 002025
+           204007
+           031021
+           012063
+           204000
+ 303026  6 007004
+           008003
+           204007
+           031021
+           012001
+           204000
+ 303027  5 007004
+           204007
+           031021
+           010003
+           204000
+ 303031  6 007004
+           008003
+           007021
+           007022
+           008012
+           012061
+ 303032  2 020011
+           020016
+ 303033  2 020010
+           020016
+ 303040 18 008041
+           004025
+           004026
+           301021
+           301122
+           201131
+           202129
+           025069
+           007004
+           013003
+           202000
+           201000
+           002013
+           012101
+           010009
+           102002
+           008040
+           035035
+ 303041  8 002152
+           002023
+           007004
+           011001
+           011002
+           002153
+           002154
+           012071
+ 303050  7 004086
+           008042
+           007004
+           005015
+           006015
+           011001
+           011002
+ 303051  7 004086
+           008042
+           007004
+           005015
+           006015
+           011061
+           011062
+ 303052  7 004086
+           008042
+           007009
+           005015
+           006015
+           011001
+           011002
+ 303053  7 004086
+           008042
+           007009
+           005015
+           006015
+           011061
+           011062
+ 303054 10 004086
+           008042
+           007004
+           010009
+           005015
+           006015
+           012101
+           012103
+           011001
+           011002
+ 303249  7 002252
+           104000
+           031001
+           002199
+           007004
+           007004
+           013003
+ 303250  8 002252
+           002023
+           007004
+           011001
+           011002
+           002197
+           002198
+           012193
+ 303251  8 002252
+           105000
+           031001
+           002254
+           002251
+           002197
+           002198
+           012063
+ 303252  8 002252
+           105000
+           031001
+           002254
+           002251
+           002197
+           002198
+           012194
+ 304001  5 008003
+           010004
+           012001
+           011001
+           011002
+ 304002  4 008003
+           010004
+           011001
+           011002
+ 304003  2 008003
+           012001
+ 304004  4 008003
+           010004
+           020010
+           012001
+ 304005  4 002024
+           007004
+           007004
+           013003
+ 304006  3 014001
+           014001
+           014003
+ 304011 27 002163
+           002164
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002163
+           007004
+           012001
+ 304030  3 027031
+           028031
+           010031
+ 304031  3 001041
+           001042
+           001043
+ 304032  5 002153
+           002154
+           020081
+           020082
+           020012
+ 304033  8 002152
+           002166
+           002167
+           002153
+           002154
+           012075
+           012076
+           012063
+ 304034  9 102004
+           027001
+           028001
+           007022
+           005043
+           020010
+           020016
+           033003
+           010040
+ 304035 15 002153
+           002154
+           012063
+           008001
+           012063
+           008001
+           012063
+           008001
+           008003
+           012063
+           008003
+           012063
+           008003
+           012063
+           008003
+ 304036 12 020082
+           008012
+           020082
+           008012
+           020081
+           008003
+           020081
+           008003
+           020081
+           008003
+           020081
+           008003
+ 304228  3 005217
+           006217
+           007217
+ 304229  3 001208
+           001209
+           001210
+ 304250 27 002231
+           002232
+           008012
+           007024
+           002057
+           008021
+           004001
+           004002
+           004003
+           004004
+           008021
+           004024
+           110004
+           008021
+           004004
+           004005
+           004006
+           008021
+           004004
+           004005
+           004006
+           011001
+           011002
+           103010
+           002231
+           007004
+           012001
+ 305003  5 301012
+           004065
+           101000
+           031001
+           305001
+ 305006  6 013072
+           013082
+           013019
+           012001
+           013073
+           013060
+ 305007  6 301029
+           301012
+           004065
+           101000
+           031001
+           305006
+ 305008  2 305006
+           012030
+ 305009  6 301029
+           301012
+           004065
+           101000
+           031001
+           305008
+ 305011  6 301029
+           301012
+           004065
+           101000
+           031001
+           305010
+ 305018  8 301029
+           301012
+           004065
+           103000
+           031001
+           305008
+           305016
+           305017
+ 306001  5 002032
+           102000
+           031001
+           007062
+           022042
+ 306002  3 002031
+           022004
+           022031
+ 306003  4 002002
+           011011
+           011012
+           012004
+ 306004  7 002032
+           002033
+           103000
+           031001
+           007062
+           022043
+           022062
+ 306005  6 002031
+           103000
+           031001
+           007062
+           022004
+           022031
+ 306006  3 306003
+           306002
+           022063
+ 306007  6 001012
+           001014
+           306008
+           004024
+           027003
+           028003
+ 306008  3 002034
+           002035
+           002036
+ 306019  8 001075
+           301011
+           301012
+           022042
+           022120
+           022121
+           004015
+           004065
+ 306020  4 306024
+           102006
+           022038
+           022039
+ 306021  7 001075
+           301011
+           301012
+           022122
+           022123
+           012001
+           303002
+ 306022  5 001075
+           301011
+           301012
+           022038
+           022039
+ 306023  8 001015
+           301023
+           301011
+           301012
+           022038
+           022039
+           022120
+           022121
+ 306024  8 001075
+           301011
+           301012
+           022042
+           022120
+           022121
+           004025
+           004015
+ 306025  4 306019
+           102006
+           022038
+           022039
+ 307001  2 301031
+           302011
+ 307002  2 301032
+           302011
+ 307003  4 307001
+           101000
+           031001
+           302005
+ 307004  4 307002
+           101000
+           031001
+           302005
+ 307005  3 307001
+           101004
+           302005
+ 307006  3 307002
+           101004
+           302005
+ 307007  2 301031
+           302012
+ 307008  2 301032
+           302012
+ 307009  2 301031
+           302013
+ 307011 16 001063
+           002001
+           301011
+           301012
+           301024
+           007006
+           011001
+           011016
+           011017
+           011002
+           011041
+           007006
+           012001
+           012003
+           010052
+           020009
+ 307012  5 103000
+           031001
+           008023
+           005021
+           020001
+ 307013  8 106000
+           031001
+           001064
+           008014
+           020061
+           008014
+           020061
+           020018
+ 307014  3 101000
+           031001
+           020019
+ 307015  4 101000
+           031001
+           302005
+           020002
+ 307016  3 101000
+           031001
+           020020
+ 307017  3 101000
+           031001
+           011070
+ 307018 16 008016
+           102000
+           031001
+           008017
+           301012
+           104000
+           031001
+           007006
+           011001
+           011002
+           011041
+           020009
+           101000
+           031001
+           020001
+           307014
+ 307020  3 307011
+           307014
+           307016
+ 307021  9 307011
+           307012
+           307013
+           307014
+           307015
+           307016
+           307017
+           307018
+           307015
+ 307022 31 001015
+           301011
+           301012
+           301022
+           008021
+           004025
+           010004
+           012001
+           013003
+           033038
+           008022
+           106025
+           002020
+           001050
+           005021
+           007021
+           015031
+           015032
+           008060
+           015033
+           015034
+           008060
+           015033
+           015034
+           015035
+           201131
+           202129
+           013016
+           202000
+           201000
+           015011
+ 307030  2 015001
+           015002
+ 307031  7 008022
+           008023
+           015001
+           008023
+           015001
+           008023
+           015002
+ 307041  7 301001
+           001015
+           301022
+           301011
+           301012
+           301070
+           307030
+ 307042  9 301001
+           001015
+           301022
+           301011
+           301012
+           008021
+           004025
+           301070
+           307031
+ 307043  7 301001
+           001015
+           301024
+           301011
+           301012
+           301074
+           307030
+ 307045 25 001063
+           008079
+           002001
+           301011
+           301012
+           301024
+           007032
+           011001
+           011016
+           011017
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           012023
+           012024
+           007032
+           010052
+           020009
+ 307046  5 020060 Metar/speci visibility
+           102000
+           031001
+           005021
+           020059
+ 307047  9 105000 Metar/speci clouds
+           031001
+           008002
+           020011
+           020012
+           020013
+           020092
+           020002
+           020091
+ 307048 25 008016
+           102000
+           031001
+           008017
+           301012
+           112000
+           031000
+           007032
+           011001
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           020009
+           101000
+           031000
+           020060
+           307014
+           307047
+ 307049  4 102000
+           031000
+           022043
+           022021
+ 307050 14 101000
+           031000
+           020085
+           102000
+           031001
+           001064
+           020085
+           105000
+           031001
+           001064
+           020086
+           020087
+           020088
+           020089
+ 307052 12 001063
+           008039
+           301011
+           301012
+           008079
+           008039
+           301011 start of forecast
+           301012
+           008039
+           301011 end of forecast
+           301012
+           301024
+ 307053 16 007032
+           011001
+           008054
+           011083
+           011084
+           011002
+           008054
+           011085
+           011086
+           011041
+           008054
+           007032
+           020009
+           020060
+           307014
+           307047
+ 307054 13 007032
+           008039
+           004003
+           004004
+           008023
+           012023
+           008039
+           004003
+           004004
+           008023
+           012023
+           008023
+           007032
+ 307055  9 033045
+           008016
+           008039
+           004003
+           301012
+           008039
+           004003
+           301012
+           307053
+ 307056  6 307052 Aerodrome forecast
+           307053
+           307054
+           101000
+           031001
+           307055
+ 307059 12 307045 Full METAR/SPECI
+           307046
+           307013
+           307014
+           307047
+           307016
+           307017
+           307049
+           307050
+           101000
+           031001
+           307048 Trend forecast
+ 307060  2 007061
+           012030
+ 307061  3 301031
+           101005
+           307060
+ 307062  3 301032
+           101005
+           307060
+ 307063  2 007061
+           012130
+ 307071 67 301090
+           004074
+           004023
+           008023
+           010004
+           010051
+           007004
+           010009
+           007032
+           012101
+           002051
+           004051
+           012118
+           004052
+           012119
+           013004
+           008023
+           012151
+           007032
+           102005
+           008050
+           008020
+           014032
+           014033
+           008050
+           008020
+           102018
+           008052
+           008022
+           007032
+           008053
+           004003
+           012152
+           008053
+           004003
+           012153
+           008053
+           004003
+           008023
+           012101
+           008053
+           004003
+           008023
+           012101
+           008023
+           007032
+           002002
+           008053
+           004003
+           011046
+           008053
+           004003
+           004004
+           004023
+           007032
+           013060
+           013051
+           004053
+           008050
+           008020
+           102006
+           008052
+           008022
+           008053
+           004003
+           013052
+           007032
+ 307072 38 004001
+           004001
+           004002
+           004003
+           004004
+           004074
+           004022
+           008023
+           010004
+           010051
+           007004
+           010009
+           007032
+           012101
+           002051
+           004051
+           012118
+           004052
+           012119
+           013004
+           012151
+           007032
+           014032
+           008023
+           004001
+           004001
+           004002
+           004003
+           004004
+           004022
+           007032
+           008023
+           013060
+           004053
+           008023
+           102008
+           008050
+           008020
+ 307073  2 307071
+           307072
+ 307079 30 301090 SYNOP data and marine data from costal stations
+           302031
+           302035
+           302036
+           101000
+           031000
+           302047
+           008002
+           101000
+           031000
+           302048
+           302037
+           102000
+           031000
+           022061
+           020058
+           101000
+           031000
+           302056
+           101000
+           031000
+           302055
+           302043
+           302044
+           101000
+           031001
+           302045
+           101000
+           031000
+           302046
+ 307080 13 301090 BUFR template for synoptic reports
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307081 24 301090 BUFR template for synoptic reports RA I
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012122
+           013056
+           013057
+           020101
+           020102
+           020103
+           020104
+           020105
+           020106
+           020107
+           020108
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307082 15 301090 BUFR template for synoptic reports RA II
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012121
+           012122
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307083 14 301090 BUFR template for synoptic reports RA III
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           012122
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307084 17 301090 BUFR template for synoptic reports RA IV
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           020055
+           101000
+           031000
+           205001
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307086 11 301090 BUFR template for synoptic reports RA VI
+           302031
+           302035
+           302036
+           008002
+           302037
+           302066
+           302043
+           302044
+           101002
+           302045
+ 307090 13 301092 BUFR template for synoptic reports from mobile land stations
+           302031
+           302035
+           302036
+           302047
+           008002
+           302048
+           302037
+           302043
+           302044
+           101002
+           302045
+           302046
+ 307091 66 301089
+           301090
+           008010
+           301091
+           302001
+           007004
+           010009
+           302072
+           103000
+           031000
+           101005
+           307063
+           007061
+           101000
+           031000
+           302069
+           007032
+           007033
+           105000
+           031000
+           020031
+           020032
+           002038
+           022043
+           302021
+           101000
+           031000
+           302078
+           101000
+           031000
+           302073
+           101000
+           031000
+           302074
+           101000
+           031000
+           302075
+           102000
+           031000
+           004025
+           302076
+           302071
+           302077
+           007033
+           101000
+           031000
+           302079
+           007032
+           101000
+           031000
+           302080
+           101000
+           031000
+           302081
+           101000
+           031000
+           302082
+           102000
+           031000
+           004025
+           013059
+           101000
+           031000
+           302083
+           033005
+           033006
+ 307092 62 301089    Surface obs drom N-minute period
+           301090
+           008010
+           301091
+           004015
+           004065
+           125000
+           031001
+           010004
+           302070
+           302072
+           007032
+           012101
+           103000
+           031000
+           101005
+           307063
+           007061
+           101000
+           031000
+           302069
+           007032
+           007033
+           101000
+           031000
+           302073
+           101000
+           031000
+           302076
+           102000
+           031000
+           013055
+           013058
+           102000
+           031000
+           020031
+           020032
+           101000
+           031000
+           302078
+           102000
+           031000
+           302079
+           007032
+           101000
+           031000
+           302080
+           101000
+           031000
+           302081
+           101000
+           031000
+           302083
+           102000
+           031000
+           004025
+           013059
+           101000
+           031000
+           302083
+           033005
+           033006
+ 307093 21 223000
+           236000
+           101000
+           031001
+           031031
+           001033
+           001032
+           008083
+           101000
+           031001
+           223255
+           108000
+           031001
+           223000
+           237000
+           001033
+           001032
+           008083
+           101000
+           031001
+           223255
+ 307096  8 301090
+           301089
+           008010
+           301091
+           302084
+           302085
+           033005
+           033006
+ 308001  3 301033
+           302011
+           022042
+ 308002  3 301034
+           302011
+           022042
+ 308003  3 301035
+           302011
+           022042
+ 308004  3 301036
+           302011
+           022042
+ 308005  2 308004
+           302024
+ 308006  8 010004
+           010061
+           010063
+           011001
+           011002
+           012004
+           013003
+           022042
+ 308007  4 301055
+           302011
+           007062
+           022042
+ 308008 84 001003 BUOY
+           001020
+           001005
+           002001
+           002036
+           002149
+           301011
+           301012
+           008021
+           301011
+           301012
+           008021
+           301021
+           027004
+           028004
+           007030
+           001051
+           002148
+           001012
+           001014  
+           002040
+           033022
+           033023
+           033027
+           022063
+           302021
+           302022
+           302023
+           008081
+           025026
+           008081
+           025026
+           008081
+           025026
+           008081
+           002034
+           022060
+           007070
+           002190
+           025086
+           002035
+           002168
+           020031
+           002038
+           306004
+           002030
+           306005
+           007031
+           008081
+           012064
+           302001
+           008081
+           007032
+           007033
+           012101
+           012103
+           013003
+           007032
+           007033
+           008082
+           007033
+           002169
+           002002
+           008021
+           004025
+           011001
+           011002
+           008021
+           004025
+           011043
+           011041
+           008082
+           007033
+           007032
+           004024
+           013011
+           007032
+           008021
+           004024
+           014021
+           008021
+           025028
+           025028
+           025028
+ 308009  7 301093
+           302001
+           302054
+           008002
+           302055
+           302057
+           302060
+ 308010 16 001011 TRACKOB template
+           113000
+           031001
+           301011
+           301012
+           301021
+           004080
+           022049
+           004080
+           022059
+           004080
+           022005
+           002042
+           022032
+           002042
+           004080
+ 308011 27 001011  Climat ship
+           002001
+           301011
+           301012
+           301023
+           007030
+           007031
+           004074
+           004023
+           008023
+           010051
+           007032
+           007033
+           012101
+           013004
+           007032
+           007033
+           302056
+           008023
+           004003
+           004004
+           004023
+           007032
+           013060
+           013051
+           004053
+           007032
+ 308012 28 004001 Monthly normals from an ocean weather station
+           004001
+           004002
+           004003
+           004004
+           004074
+           004022
+           008023
+           010051
+           007032
+           007033
+           012101
+           013002
+           007032
+           007033
+           302056
+           008023
+           004001
+           004001
+           004002
+           004003
+           004004
+           004022
+           007032
+           008023
+           013060
+           004053
+           008023
+ 308013  2 308011
+           308012
+ 309001  4 301037
+           101000
+           031001
+           303011
+ 309002  4 301038
+           101000
+           031001
+           303011
+ 309003  4 301037
+           101000
+           031001
+           303012
+ 309004  4 301038
+           101000
+           031001
+           303012
+ 309005  5 301037
+           302004
+           101000
+           031001
+           303013
+ 309006  5 301038
+           302004
+           101000
+           031001
+           303013
+ 309007  5 301037
+           302004
+           101000
+           031001
+           303014
+ 309008  5 301038
+           302004
+           101000
+           031001
+           303014
+ 309011  4 301039
+           101000
+           031001
+           303011
+ 309012  4 301039
+           101000
+           031001
+           303012
+ 309013  5 301039
+           302004
+           101000
+           031001
+           303013
+ 309014  5 301039
+           302004
+           101000
+           031001
+           303014
+ 309015  4 301040
+           101000
+           031001
+           303011
+ 309016  4 301040
+           101000
+           031001
+           303012
+ 309017  5 301040
+           302004
+           101000
+           031001
+           303013
+ 309018  5 301040
+           302004
+           101000
+           031001
+           303014
+ 309019  5 301031
+           002003
+           101000
+           031001
+           303011
+ 309020  8 301031
+           002003
+           104000
+           031001
+           007003
+           011003
+           011004
+           011005
+ 309030  8 015004
+           015005
+           104000
+           031001
+           004015
+           008006
+           007004
+           015003
+ 309031  8 015004
+           015005
+           104000
+           031001
+           004025
+           008006
+           007004
+           015003
+ 309040  3 301075
+           301076
+           309030
+ 309042  4 307042
+           301075
+           301076
+           309030
+ 309050  9 301110
+           301113
+           301114
+           101000
+           031002
+           303050
+           101000
+           031001
+           303051
+ 309051  9 301110
+           301113
+           301114
+           101000
+           031002
+           303052
+           101000
+           031001
+           303053
+ 309052 11 301111
+           301113
+           301114
+           302049
+           022043
+           101000
+           031002
+           303054
+           101000
+           031001
+           303051
+ 309053  9 301112
+           301113
+           301114
+           101000
+           031002
+           303054
+           101000
+           031001
+           303051
+ 309054 27 301001
+           001011
+           301011
+           301012
+           301021
+           007030
+           007031
+           007007
+           004023
+           004059
+           115000
+           031001
+           008001
+           008023
+           007004
+           010009
+           012101
+           012103
+           008023
+           011001
+           011002
+           008023
+           011019
+           008050
+           008020
+           008050
+           008020
+ 309060  4 301123
+           301121
+           302050
+           303040
+ 309061 21 301120
+           008041
+           301122
+           201131
+           202129
+           025069
+           007004
+           202000
+           201000
+           033007
+           033035
+           033015
+           013009
+           033007
+           033035
+           033015
+           002013
+           012101
+           033007
+           033035
+           033015
+ 309062 19 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+           033007
+ 309063 19 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+           033007
+ 309064 26 301120
+           008041
+           301122
+           201131
+           202129
+           104002
+           025069
+           007004
+           033035
+           033015
+           013003
+           033035
+           033015
+           202000
+           201000
+           104002
+           002013
+           012101
+           033035
+           033015
+           012103
+           033035
+           033015
+           010009
+           033035
+           033015
+ 309065 18 301120
+           008041
+           301122
+           005001
+           033035
+           033015
+           006001
+           033035
+           033015
+           007007
+           033035
+           033015
+           011003
+           033035
+           033015
+           011004
+           033035
+           033015
+ 309066 18 301120
+           008041
+           301122
+           008040
+           201131
+           202129
+           025069
+           007004
+           013003
+           202000
+           201000
+           002013
+           012101
+           012103
+           010009
+           010007
+           011002
+           011001
+ 309194  5 301194
+           302004
+           101000
+           031001
+           303014
+ 309195  5 301195
+           302004
+           101000
+           031001
+           303014
+ 309196  5 301196
+           302004
+           101000
+           031001
+           303014
+ 309198  5 301198
+           302004
+           101000
+           031001
+           303014
+ 310001  5 301042
+           303031
+           303032
+           101026
+           303025
+ 310002  5 301042
+           303031
+           303032
+           101009
+           303023
+ 310003  5 301042
+           303031
+           303032
+           101006
+           303023
+ 310004  5 301042
+           303031
+           303032
+           101003
+           303024
+ 310005  6 301042
+           303031
+           303033
+           101000
+           031001
+           303025
+ 310006  6 301042
+           303031
+           303033
+           101000
+           031001
+           303023
+ 310007  6 301042
+           303031
+           303033
+           101000
+           031001
+           303024
+ 310008  8 310011
+           101019
+           310012
+           002150
+           025079
+           025080
+           033032
+           014045
+ 310009  3 310011
+           101015
+           310012
+ 310010  3 310011
+           101005
+           310012
+ 310011 45 008070
+           001033
+           001034
+           008070
+           001033
+           001034
+           001007
+           002048
+           005040
+           025075
+           201133
+           005041
+           201000
+           005043
+           025070
+           033030
+           033031
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           202126
+           007001
+           202000
+           007024
+           005021
+           007025
+           005022
+           033033
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+           002151
+           012064
+ 310012 10 002150
+           025076
+           025077
+           025078
+           033032
+           201132
+           202129
+           012063
+           202000
+           201000
+ 310013 62 001007
+           005040
+           004001
+           004002
+           004003
+           004004
+           004005
+           004006
+           005001
+           006001
+           007025
+           005043
+           025085
+           201131
+           202129
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           002150
+           008023
+           008072
+           014027
+           008072
+           014027
+           202000
+           201000
+           201132
+           202129
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           008023
+           008072
+           012063
+           008072
+           012063
+           002150
+           008023
+           008072
+           012063
+           008072
+           012063
+           202000
+           201000
+ 310014  3 301072
+           303041
+           304011
+ 310015 13 301072
+           007024
+           010002
+           303041
+           101003
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310016 13 301072
+           007024
+           010002
+           303041
+           101012
+           304032
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310019 68 001007
+           002019
+           301011
+           301013
+           301023
+           007025
+           008021
+           007025
+           008021
+           007025
+           008021
+           008029
+           005040
+           008075
+           008003
+           010004
+           008003
+           207002
+           015001
+           207000
+           033070
+           015030
+           207002
+           020081
+           207000
+           008003
+           033042
+           007004
+           207002
+           015001
+           207000
+           008003
+           113021
+           007004
+           007004
+           207002
+           008021
+           015005
+           008021
+           015005
+           033007
+           207000
+           008026
+           101020
+           025143
+           008026
+           008043
+           109015
+           007004
+           008090
+           207006
+           015008
+           207000
+           008090
+           207002
+           033007
+           207000
+           008043
+           033071
+           108008
+           202124
+           201107
+           002071
+           201000
+           202000
+           207002
+           020081
+           207000
+ 310020  6 310022
+           301011
+           301013
+           301021
+           304034
+           310021
+ 310021 10 108000
+           031001
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+ 310022  4 001007
+           002019
+           001033
+           002172
+ 310023 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101012
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101012
+           304033
+ 310024 17 301072
+           030021
+           030022
+           008012
+           007024
+           007025
+           010002
+           101003
+           304032
+           105002
+           002152
+           002024
+           007004
+           007004
+           013003
+           101003
+           304033
+ 310025 61 001007
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           201138
+           202131 
+           004006
+           202000
+           201000
+           201132
+           005041
+           201000
+           201129
+           005043
+           201000
+           005002
+           006002
+           013040
+           020029
+           104024
+           005042
+           012163
+           021083
+           021084
+           115003
+           004001
+           004002
+           004003
+           201142
+           202131
+           004026
+           202000
+           201000
+           005001
+           006001
+           201138
+           202129
+           007001
+           202000
+           201000
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           005040
+           101003
+           012070
+           025054
+           101004
+           025055
+           008007
+           104028
+           005002
+           006002
+           002111
+           005021
+ 310026 82 310022
+           025060
+           008021
+           301011
+           301012
+           201138
+           202131
+           004006
+           202000
+           201000
+           033039
+           033007
+           304030
+           304031
+           002020
+           001050
+           202127
+           304030
+           202000
+           304031
+           201133
+           202131
+           004016
+           202000
+           201000
+           301021
+           304030
+           010035
+           005021
+           010036
+           113000
+           031002
+           301021
+           005021
+           108000
+           031001
+           002121
+           007040
+           015037
+           008023
+           201125
+           015037
+           201000
+           008023
+           033007
+           108000
+           031002
+           007007
+           015036
+           008023
+           201123
+           015036
+           201000
+           008023
+           033007
+           116000
+           031002
+           007009
+           010004
+           012001
+           013001
+           008023
+           201120
+           010004
+           201000
+           201122
+           012001
+           201000
+           201123
+           013001
+           201000
+           008023
+           033007
+           008003
+           007009
+           010004
+           008023
+           201120
+           010004
+           201000
+           008023
+           033007
+ 310027 12 301071
+           301011
+           301013
+           301021
+           030021
+           030022
+           010002
+           304036
+           002152
+           002167
+           101011
+           304035
+ 310029 12 110000
+           031001
+           201138
+           202130
+           007004
+           007004
+           202000
+           201000
+           015020
+           010002
+           012101
+           013098
+ 310030  6 310022
+           301011
+           301013
+           301021
+           304034
+           310029
+ 310050 14 310051
+           310052
+           101000
+           031002
+           310053
+           101004
+           310054
+           020010
+           310052
+           101015
+           310053
+           310052
+           101005
+           310053
+ 310051 16 001007
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           007025
+           005022
+           102009
+           002151
+           012064
+ 310052 12 002019
+           301011
+           301012
+           202131
+           201138
+           004006
+           201000
+           202000
+           301021
+           007024
+           005021
+           005043
+ 310053  6 201134
+           005042
+           201000
+           025076
+           033032
+           012163
+ 310054 13 201134
+           005042
+           201000
+           025076
+           033032
+           201131
+           202129
+           102002
+           008023
+           014027
+           008023
+           202000
+           201000
+ 310055  8 310051
+           310052
+           102020
+           025076
+           025052
+           101000
+           031002
+           025050
+ 310060 53 001007
+           001033
+           002019
+           002020
+           301011
+           301012
+           207003
+           004006
+           207000
+           304030
+           301021
+           007024
+           005021
+           007025
+           005022
+           008075
+           201133
+           005041
+           201000
+           005045
+           005043
+           005040
+           010001
+           201129
+           007002
+           201000
+           202127
+           201125
+           021166
+           201000
+           202000
+           008012
+           020010
+           020014
+           002165
+           033075
+           107003
+           008076
+           006029
+           006029
+           025140
+           025141
+           033076
+           033077
+           008076
+           033078
+           033003
+           104000
+           031002
+           201133
+           005042
+           201000
+           014044
+ 310193  5 301250
+           303250
+           302250
+           303249
+           303251
+ 310194  5 301250
+           303250
+           302250
+           303249
+           303252
+ 310195  3 301250
+           303250
+           304250
+ 310196  3 301250
+           303249
+           303251
+ 310226 39 310022
+           025060
+           008021
+           301011
+           301012
+           201138
+           202131
+           004006
+           202000
+           201000
+           033039
+           033007
+           304030
+           304031
+           002020
+           001050
+           202127
+           304030
+           202000
+           304031
+           201133
+           202131
+           004016
+           202000
+           201000
+           301021
+           304030
+           010035
+           005021
+           010036
+           107000
+           031002
+           301021
+           005021
+           103000
+           031001
+           002121
+           007040
+           015037
+ 311001  9 301051
+           007002
+           012001
+           011001
+           011002
+           011031
+           011032
+           011033
+           020041
+ 311002  4 301065
+           301066
+           311003
+           311004
+ 311003  5 010070
+           011001
+           011002
+           012001
+           013002
+ 311004 18 101000
+           031000
+           011034
+           101000
+           031000
+           011035
+           101000
+           031000
+           011075
+           101000
+           031000
+           011076
+           101000
+           031000
+           033025
+           101000
+           031000
+           033026
+ 311005 13 001008
+           001023
+           301021
+           301011
+           301013
+           007010
+           008009
+           011001
+           011002
+           011031
+           011036
+           012101
+           033025
+ 311006  6 007010
+           011001
+           011002
+           002064
+           012101
+           012103
+ 311007  7 007010
+           301021
+           011001
+           011002
+           002064
+           012101
+           012103
+ 311008  8 001008
+           301011
+           301013
+           301021
+           008004
+           101000
+           031001
+           311006
+ 311009  8 001008
+           301011
+           301013
+           301021
+           008004
+           101000
+           031001
+           311007
+ 311193 16 301197
+           301011
+           301012
+           301023
+           008004
+           007004
+           008021
+           011001
+           011002
+           011031
+           011034
+           011035
+           012001
+           012003
+           013003
+           020041
+ 312001  2 301043
+           304001
+ 312002  2 301043
+           304002
+ 312003  2 301042
+           304003
+ 312004  2 301042
+           304004
+ 312005  2 301042
+           020014
+ 312006  2 301044
+           304005
+ 312007  2 301042
+           304006
+ 312010  6 001007
+           005040
+           002021
+           005041
+           004001
+           004043
+ 312011  9 202131
+           201149
+           004006
+           201000
+           202126
+           010002
+           202000
+           005043
+           005053
+ 312012  6 202129
+           201132
+           101019
+           012063
+           201000
+           202000
+ 312013  6 005042
+           202129
+           201135
+           012063
+           201000
+           202000
+ 312014  8 312010
+           312011
+           105056
+           301023
+           005042
+           005052
+           312012
+           312013
+ 312015 10 109011
+           301023
+           005042
+           005052
+           202129
+           201132
+           101004
+           012063
+           202000
+           201000
+ 312016  3 312010
+           312011
+           312015
+ 312017 10 109008
+           301023
+           005042
+           005052
+           202129
+           201132
+           101003
+           012063
+           202000
+           201000
+ 312018  3 312010
+           312011
+           312017
+ 312019 13 301047
+           301048
+           015015
+           029002
+           021076
+           106012
+           201129
+           006030
+           201000
+           102012
+           005030
+           021075
+           021066
+ 312020 11 301047
+           301048
+           015015
+           029002
+           021076
+           104012
+           006030
+           102012
+           005030
+           021075
+           021066
+ 312021  6 301047
+           101003
+           301049
+           011012
+           011011
+           021067
+ 312022 15 301047
+           008022
+           011012
+           011050
+           022070
+           022026
+           312041
+           010050
+           021068
+           021071
+           021072
+           021073
+           312042
+           021062
+           015011
+ 312023  7 301047
+           103003
+           008022
+           012061
+           022050
+           021069
+           021085
+ 312024 11 312020
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312025 11 312019
+           008060
+           008022
+           008060
+           008022
+           025014
+           022101
+           022097
+           022098
+           022099
+           022100
+ 312026 19 301046
+           301011
+           301013
+           301023
+           312031
+           101004
+           312030
+           021110
+           301023
+           321027
+           021111
+           301023
+           321027
+           021112
+           301023
+           321027
+           021113
+           301023
+           321027
+ 312027  9 301047
+           105009
+           301023
+           007021
+           012061
+           007021
+           012061
+           021085
+           021070
+ 312028 26 301046
+           301011
+           301013
+           301023
+           008025
+           201136
+           004006
+           201000
+           312031
+           312032
+           101004
+           312030
+           101002
+           312033
+           021110
+           301023
+           321028
+           021111
+           301023
+           321028
+           021112
+           301023
+           321028
+           021113
+           301023
+           321028
+ 312030 13 201130
+           202129
+           011012
+           202000
+           201000
+           011052
+           201135
+           202130
+           011011
+           202000
+           201000
+           011053
+           021104
+ 312031  8 005034
+           006034
+           021109
+           011081
+           011082
+           021101
+           021102
+           021103
+ 312032  4 021120
+           021121
+           013055
+           021122
+ 312033  4 002104
+           008022
+           012063
+           012065
+ 312041  5 201141
+           202130
+           007001
+           201000
+           202000
+ 312042  6 021077
+           021078
+           021079
+           021080
+           021081
+           021082
+ 312045 21 001007
+           002019
+           001096
+           025061
+           005040
+           301011
+           301013
+           301021
+           007002
+           012180
+           012181
+           012182
+           012183
+           012184
+           012185
+           002174
+           021086
+           012186
+           021087
+           012187
+           033043
+ 312050 23 001007
+           002019
+           001096
+           025061
+           005040
+           301011
+           301013
+           301021
+           007025
+           005022
+           010080
+           027080
+           008003
+           007004
+           013093
+           008003
+           201131
+           202129
+           007004
+           007004
+           202000
+           201000
+           013095
+ 312051 48 001007
+           002019
+           001096
+           025061
+           005040
+           008075
+           301011
+           301013
+           301021
+           001012
+           201131
+           001013
+           201000
+           010032
+           010033
+           010034
+           007002
+           008012
+           025110
+           025111
+           025102
+           002104
+           025103
+           025104
+           025105
+           025106
+           025107
+           025108
+           002111
+           002121
+           002026
+           002027
+           021130
+           021131
+           021132
+           021133
+           021064
+           025014
+           021134
+           107018
+           005030
+           105024
+           201130
+           006030
+           201000
+           021135
+           021136
+           033044
+ 312052 77 001007
+           002019
+           001096
+           025061
+           005040
+           025120
+           025121
+           025124
+           025125
+           025122
+           025123
+           301011
+           301013
+           301021
+           007002
+           002119
+           033047
+           010081
+           010082
+           010083
+           010084
+           002116
+           002117
+           002118
+           002156
+           002157
+           014055
+           022150
+           022151
+           022152
+           022153
+           022154
+           022155
+           022156
+           022157
+           022158
+           022159
+           021137
+           021138
+           021139
+           021140
+           021141
+           021142
+           010085
+           010086
+           010087
+           010088
+           010089
+           010090
+           010091
+           010092
+           010093
+           011002
+           025126
+           025127
+           025128
+           025129
+           025130
+           025131
+           025132
+           025133
+           025134
+           025135
+           025136
+           025137
+           013096
+           013097
+           011095
+           011096
+           012188
+           012189
+           002158
+           002159
+           033052
+           033053
+           021143
+           021144
+ 312053 54 001007
+           002019
+           001096
+           025061
+           005040
+           008075
+           301011
+           301013
+           301021
+           001012
+           201131
+           001013
+           201000
+           010032
+           010033
+           010034
+           007002
+           008012
+           025110
+           025111
+           025102
+           002104
+           025103
+           025104
+           025105
+           025106
+           025107
+           025108
+           011001
+           011002
+           022160
+           025138
+           201130
+           202129
+           022021
+           202000
+           201000
+           033048
+           033049
+           002026
+           002027
+           021130
+           021131
+           021132
+           021133
+           025014
+           106036
+           005030
+           104024
+           201130
+           006030
+           201000
+           022161
+           033044
+ 312055  5 005033
+           005040
+           006034
+           010095
+           021157
+ 312056 11 025060
+           001032
+           011082
+           011081
+           020095
+           020096
+           021155
+           201133
+           021101
+           021102
+           201000
+ 312057 12 201130
+           202129
+           011012
+           202000
+           201000
+           201131
+           202129
+           011011
+           202000
+           201000
+           021156
+           021104
+ 312058  8 301125
+           301011
+           301013
+           301021
+           312055
+           021150
+           101003
+           321030
+ 312059  4 312056
+           101000
+           031001
+           312057
+ 312060 20 025060
+           025062
+           040001
+           040002
+           021062
+           021151
+           021152
+           021153
+           021154
+           021062
+           021062
+           040003
+           040004
+           040005
+           040006
+           040007
+           020065
+           040008
+           040009
+           040010
+ 312061  3 312058
+           312060
+           312059
+ 312070 27 001007
+           002019
+           001144
+           001124
+           030010
+           301011
+           301013
+           301021
+           007012
+           015012
+           012165
+           012166
+           012167
+           012168
+           027010
+           028010
+           002099
+           013048
+           025081
+           025082
+           025083
+           025084
+           012080
+           012081
+           012082
+           025174 
+           033028
+ 312200 10 301237
+           301238
+           029002
+           021206
+           104012
+           006232
+           102012
+           005232
+           021205
+           021196
+ 312201  6 301237
+           101003
+           301239
+           011012
+           011011
+           021197
+ 312202 13 301237
+           008022
+           011012
+           011050
+           301240
+           022243
+           301241
+           010050
+           021198
+           021201
+           021202
+           021203
+           301242
+ 312203  8 301237
+           008022
+           012061
+           022050
+           021204
+           021199
+           021214
+           021215
+ 312204 12 312201
+           001031
+           011012
+           011011
+           021200
+           021213
+           004004
+           008021
+           004024
+           055003
+           011012
+           011011
+ 312207  3 312202
+           301202
+           033191
+ 312208 17 301202
+           008022
+           008021
+           301011
+           301013
+           301023
+           302205
+           011002
+           001007
+           002021
+           301011
+           301013
+           301023
+           001032
+           001192
+           302205
+           011002
+ 312209 11 301202
+           001192
+           301011
+           301013
+           301023
+           302206
+           104000
+           022192
+           102000
+           005232
+           022191
+ 312210 13 312202
+           021192
+           015202
+           301011
+           004004
+           004005
+           201138
+           202131
+           004006
+           201000
+           202000
+           304228
+           304229
+ 312211 19 301046
+           301011
+           301013
+           301023
+           312031
+           101004
+           312030
+           021110
+           101004
+           312212
+           021111
+           101004
+           312212
+           021112
+           101004
+           312212
+           021113
+           101004
+           312212
+ 312212  2 301023
+           321027
+ 313009  4 021001
+           101000
+           031001
+           021001
+ 313010  4 021036
+           101000
+           031001
+           021036
+ 313031  5 006002
+           006012
+           101000
+           031002
+           030001
+ 313032  5 005002
+           005012
+           101000
+           031002
+           313031
+ 313041 13 006002
+           110000
+           031001
+           104000
+           031001
+           006012
+           101000
+           031012
+           030001
+           006012
+           101000
+           031001
+           030001
+ 313042  5 005002
+           005012
+           101000
+           031002
+           313041
+ 313043 17 006002
+           005002
+           005012
+           112000
+           031001
+           110000
+           031001
+           104000
+           031001
+           006012
+           101000
+           031011
+           030001
+           006012
+           101000
+           031001
+           030001
+ 315001  5 001011
+           301011
+           301012
+           301023
+           306001
+ 315002  5 001011
+           301011
+           301012
+           301023
+           306004
+ 315003 25 001087
+           001085
+           001086
+           002036
+           002148
+           002149
+           022055
+           022056
+           022067
+           301011
+           301012
+           301021
+           008080
+           033050
+           109000
+           031002
+           007065
+           008080
+           033050
+           022045
+           008080
+           033050
+           022064
+           008080
+           033050
+ 316001 10 301011
+           004004
+           301023
+           001021
+           002041
+           019001
+           010051
+           019002
+           019003
+           019004
+ 316002 15 008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           001033
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           007002
+           007002
+ 316003 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           010002
+           011002
+           008007
+           008011
+ 316004 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           011031
+           008007
+           008011
+ 316005 10 108000
+           031001
+           008005
+           008007
+           005002
+           006002
+           001026
+           019001
+           008007
+           008005
+ 316006 14 112000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020011
+           020012
+           008007
+           008011
+ 316007 12 110000
+           031001
+           008011
+           008007
+           104000
+           031001
+           005002
+           006002
+           019005
+           019006
+           008007
+           008011
+ 316008 13 111000
+           031001
+           008001
+           008007
+           008023
+           103000
+           031001
+           005002
+           006002
+           010002
+           008023
+           008007
+           008001
+ 316009 13 111000
+           031001
+           008011
+           008007
+           007002
+           007002
+           102000
+           031001
+           005002
+           006002
+           020041
+           008007
+           008011
+ 316010  9 107000
+           031001
+           008011
+           008007
+           001022
+           005002
+           006002
+           008007
+           008011
+ 316011 19 117000
+           031001
+           008011
+           001022
+           008007
+           102000
+           031001
+           005002
+           006002
+           008021
+           004001
+           004002
+           004003
+           004004
+           004005
+           020090
+           008021
+           008007
+           008011
+ 316020  5 001023
+           001025
+           001027
+           301011
+           301012
+ 316021 23 301023
+           002041
+           019001
+           019007
+           019005
+           019006
+           019008
+           008005
+           010004
+           008005
+           010004
+           019007
+           008005
+           008021
+           004075
+           011040
+           019007
+           105004
+           005021
+           005021
+           102002
+           019003
+           019004
+ 316022 24 001032
+           002041
+           019001
+           019010
+           118000
+           031001
+           008021
+           004014
+           008005
+           301023
+           019005
+           019006
+           010004
+           011041
+           008021
+           004075
+           011040
+           019008
+           105004
+           005021
+           005021
+           102002
+           019003
+           019004
+ 316026  2 316020
+           316021
+ 316030 10 301014
+           001037
+           010064
+           008019
+           001062
+           008019
+           001065
+           008019
+           001062
+           008019
+ 316031  8 008021
+           301011
+           301012
+           301027
+           019005
+           019006
+           020028
+           008021
+ 316032  5 008021
+           301011
+           301012
+           301027
+           008021
+ 316033  7 008021
+           301011
+           301012
+           101000
+           031001
+           301027
+           008021
+ 316034 17 008079
+           316030
+           008011
+           001022
+           008007
+           301023
+           008007
+           020090
+           316031
+           101000
+           031000
+           316032
+           101000
+           031001
+           316033
+           008011
+           008079
+ 316035  9 008079
+           316030
+           008011
+           020023
+           020021
+           020008
+           316031
+           008011
+           008079
+ 316036 13 008079
+           316030
+           008011
+           001027
+           316031
+           101000
+           031000
+           316032
+           101000
+           031001
+           316033
+           008011
+           008079
+ 316037  7 008079
+           316030
+           008011
+           011031
+           316031
+           008011
+           008079
+ 316038  8 008079
+           316030
+           008011
+           020041
+           020021
+           316031
+           008011
+           008079
+ 316039  7 008079
+           316030
+           008011
+           020024
+           316031
+           008011
+           008079
+ 316040  6 316030
+           008079
+           301014
+           001037
+           010064
+           008079
+ 316050 16 301001
+           301011
+           301012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ 316052 29 301005
+           301011
+           301012
+           001007
+           025150
+           122000
+           031001
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ 318001  2 301025
+           024011
+ 318003  4 301026
+           024005
+           024004
+           024021
+ 318004  6 301025
+           004023
+           013011
+           024005
+           024004
+           024022
+ 321001  6 002101
+           002114
+           002105
+           002106
+           002107
+           002121
+ 321003  4 021051
+           021014
+           021017
+           021030
+ 321004  5 301031
+           002003
+           101000
+           031001
+           321003
+ 321005 12 025004
+           002121
+           002122
+           002123
+           002124
+           002125
+           002126
+           002127
+           002128
+           002129
+           002130
+           002131
+ 321006  4 025001
+           025002
+           025003
+           025005
+ 321007  8 025009
+           025010
+           025011
+           025012
+           025013
+           025015
+           025016
+           025017
+ 321008  3 025006
+           025007
+           025008
+ 321009  2 025018
+           025019
+ 321010 13 002101
+           007002
+           002102
+           002103
+           002104
+           002105
+           002106
+           002107
+           002108
+           002109
+           002110
+           002132
+           002133
+ 321011  3 030031
+           030032
+           029002
+ 321012  3 101000
+           031001
+           002135
+ 321021 15 002003
+           002101
+           201130
+           002106
+           201000
+           201132
+           202130
+           002121
+           202000
+           201000
+           201133
+           202129
+           025001
+           202000
+           201000
+ 321022 11 007007
+           204001
+           031021
+           011001
+           204000
+           011002
+           204001
+           031021
+           011006
+           204000
+           021030
+ 321023  9 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+ 321024  7 007007
+           204001
+           031021
+           012007
+           011006
+           204000
+           021030
+ 321025 17 007007
+           021091
+           021030
+           202129
+           021014
+           201129
+           021017
+           202000
+           201000
+           021092
+           021030
+           025092
+           201129
+           202129
+           021017
+           202000
+           201000
+ 321026 10 007007
+           204001
+           031021
+           012007
+           025091
+           011071
+           011072
+           011073
+           011074
+           204000
+ 321027 18 021118
+           202129
+           201132
+           002112
+           201000
+           201131
+           002111
+           201000
+           202000
+           002104
+           021105
+           021106
+           021107
+           021114
+           021115
+           021116
+           008018
+           021117
+ 321028 18 021118
+           202129
+           201132
+           002112
+           201000
+           201131
+           002111
+           201000
+           202000
+           002104
+           021123
+           021106
+           021107
+           021114
+           021115
+           021116
+           008018
+           021117
+ 321030 18 008085
+           202129
+           201131
+           002111
+           201000
+           202000
+           002134
+           021062
+           021063
+           021158
+           021159
+           021160
+           021161
+           021162
+           021163
+           021164
+           021165
+           021166
+ 340001 45 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           101010
+           340002
+           101087
+           340003
+           002019
+           025051
+           101007
+           340004
+ 340002  3 025140
+           025141
+           025142
+ 340003  5 104100
+           201136
+           005042
+           201000
+           014046
+ 340004  9 005060
+           005061
+           025085
+           105006
+           005042
+           025142
+           014047
+           025142
+           014048
+ 340005 94 001007
+           002019
+           001096
+           025061
+           005044
+           005040
+           001030
+           301011
+           301012
+           004007
+           005001
+           006001
+           008029
+           008074
+           008077
+           040011
+           025097
+           025095
+           025098
+           025099
+           021144
+           025096
+           040012
+           040013
+           021169
+           022151
+           022162
+           022163
+           025160
+           025133
+           022156
+           022164
+           022165
+           022166
+           021137
+           021138
+           022167
+           021139
+           021118
+           021145
+           021146
+           021147
+           022168
+           022169
+           022170
+           025161
+           025162
+           022171
+           022172
+           022173
+           022174
+           021170
+           021171
+           022175
+           021172
+           021118
+           021173  
+           021174
+           021175
+           102003
+           002153
+           012063
+           013090
+           013091
+           007002
+           011097
+           011098
+           007002
+           011095 
+           011096
+           010096
+           010081
+           010082
+           010083
+           010101
+           025132
+           025163
+           025126
+           025128
+           025164
+           010085
+           010097
+           010086
+           010087
+           010092
+           010088
+           010089
+           010098
+           010099
+           010090
+           010100
+           010093
+           025127
+           040014
+ 340007 57 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           103003
+           025140
+           025141
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           040020
+           101010
+           340002
+           101087
+           340003
+           002019
+           025051
+           101007
+           340004
+           020081
+           008029
+           020083
+           008029
+           040018
+           040019
+           040021
+           040022
+ 340008 70 001007
+           001031
+           002019
+           002020
+           004001
+           004002
+           004003
+           004004
+           004005
+           202131
+           201138
+           004006
+           201000
+           202000
+           005001
+           006001
+           007024
+           005021
+           007025
+           005022
+           005043
+           005040
+           201133
+           005041
+           201000
+           201132
+           025070
+           201000
+           202126
+           007001
+           202000
+           103003
+           025140
+           025141
+           033060
+           033061
+           033062
+           033063
+           033064
+           033065
+           040020
+           101010
+           340002
+           104000
+           031002
+           201136
+           005042
+           201000
+           014046
+           108003
+           025140
+           025141
+           040015
+           040016
+           025062
+           101000
+           031002
+           040017
+           002019
+           025051
+           101007
+           340004
+           020081
+           008029
+           020083
+           008029
+           040018
+           040019
+           040021
+           040022
+ 340009 23 001007
+           001031
+           002019
+           002020
+           301011
+           301013
+           005040
+           201136
+           005041
+           201000
+           025071
+           005001
+           005001
+           006001
+           006001
+           107064
+           106032
+           008012
+           008013
+           008065
+           008072
+           013039
+           040015
+ 340010 97 001007
+           002019
+           001096
+           025061
+           005044
+           005040
+           001030
+           301011
+           301012
+           004007
+           301021
+           008029
+           008074
+           008077
+           040011
+           025097
+           025095
+           025098
+           025099
+           021144
+           025096
+           040012
+           040013
+           021169
+           040023
+           040024
+           040025
+           022151
+           022162
+           022163
+           025160
+           025133
+           022156
+           022164
+           022165
+           022166
+           021137
+           021138
+           022167
+           021139
+           021118
+           021145
+           021146
+           021147
+           022168
+           022169
+           022170
+           025161
+           025162
+           022171
+           022172
+           022173
+           022174
+           021170
+           021171
+           022175
+           021172
+           021118
+           021173
+           021174
+           021175
+           102003
+           002153
+           012063
+           013090
+           013091
+           007002
+           011097
+           011098
+           007002
+           011095
+           011096
+           010096
+           010081
+           010082
+           010083
+           010101
+           025132
+           025163
+           025126
+           025128
+           025164
+           010085
+           010097
+           010086
+           010087
+           010092
+           010088
+           010089
+           010098
+           010099
+           010090
+           010100
+           010093
+           025127
+           040014
+           010102
diff --git a/bufrtables/Makefile b/bufrtables/Makefile
new file mode 100755
index 0000000..a266c56
--- /dev/null
+++ b/bufrtables/Makefile
@@ -0,0 +1,76 @@
+#
+#                                 Makefile for bufrtables
+#
+LIBRARY  = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+SOURCES.F=
+
+LINKS=    B0000000000099010001.TXT \
+          D0000000000098011000.TXT \
+          D0000000000078011007.TXT \
+          B0000000000098011000.TXT \
+          B0000000000098010000.TXT \
+          B0000000000089011255.TXT \
+          B0000000000078011007.TXT \
+          D0000000000099010001.TXT \
+          D0000000000089012001.TXT \
+          D0000000000078011008.TXT \
+          D0000000000034011001.TXT \
+          B0000000000089012001.TXT \
+          B0000000000078011008.TXT \
+          B0000000000034011001.TXT \
+          B0000000000254010001.TXT \
+          D0000000000254010001.TXT \
+          B0000000000000007000.TXT \
+          D0000000000000007000.TXT \
+          B0000000000000008000.TXT \
+          D0000000000000008000.TXT \
+          B0000000000000009000.TXT \
+          D0000000000000009000.TXT \
+          B0000000000000010000.TXT \
+          D0000000000000010000.TXT \
+          B0000000000000011000.TXT \
+          D0000000000000011000.TXT \
+          B0000000000000012000.TXT \
+          D0000000000000012000.TXT \
+          B0000000000098007001.TXT \
+          D0000000000098007001.TXT \
+          B0000000000098008001.TXT \
+          D0000000000098008001.TXT \
+          B0000000000098009001.TXT \
+          D0000000000098009001.TXT \
+          B0000000000098010001.TXT \
+          D0000000000098010001.TXT \
+          B0000000000098011001.TXT \
+          D0000000000098011001.TXT \
+          B0000000000098012001.TXT \
+          D0000000000098012001.TXT 
+
+
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c) 
+#
+#
+all:  links bufr2txt_tables bufr_split_tables txt2bufr_tables
+
+links: 
+	./links.sh
+
+bufr2txt_tables: bufr2txt_tables.f
+	$(FC) $(FFLAGS) -o bufr2txt_tables bufr2txt_tables.f $(LIBRARY)
+bufr_split_tables: bufr_split_tables.f
+	$(FC) $(FFLAGS) -o bufr_split_tables bufr_split_tables.f $(LIBRARY)
+txt2bufr_tables: txt2bufr_tables.f
+	$(FC) $(FFLAGS) -o txt2bufr_tables txt2bufr_tables.f $(LIBRARY)
+
+clean:
+	\rm -f $(LINKS) *.o
+	\rm -f bufr2txt_tables; \rm -f bufr_split_tables; \rm -f txt2bufr_tables
diff --git a/bufrtables/Makefile.in b/bufrtables/Makefile.in
new file mode 100755
index 0000000..5fb5f25
--- /dev/null
+++ b/bufrtables/Makefile.in
@@ -0,0 +1,81 @@
+#
+#                                 Makefile for bufrtables
+#
+R64 = reals
+ARCH = arch
+CNAME = comp
+LIB = depl
+A64 = plat
+#
+LIBRARY  = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+SOURCES.F=
+
+LINKS=    B0000000000099010001.TXT \
+          D0000000000098011000.TXT \
+          D0000000000078011007.TXT \
+          B0000000000098011000.TXT \
+          B0000000000098010000.TXT \
+          B0000000000089011255.TXT \
+          B0000000000078011007.TXT \
+          D0000000000099010001.TXT \
+          D0000000000089012001.TXT \
+          D0000000000078011008.TXT \
+          D0000000000034011001.TXT \
+          B0000000000089012001.TXT \
+          B0000000000078011008.TXT \
+          B0000000000034011001.TXT \
+          B0000000000254010001.TXT \
+          D0000000000254010001.TXT \
+          B0000000000000007000.TXT \
+          D0000000000000007000.TXT \
+          B0000000000000008000.TXT \
+          D0000000000000008000.TXT \
+          B0000000000000009000.TXT \
+          D0000000000000009000.TXT \
+          B0000000000000010000.TXT \
+          D0000000000000010000.TXT \
+          B0000000000000011000.TXT \
+          D0000000000000011000.TXT \
+          B0000000000000012000.TXT \
+          D0000000000000012000.TXT \
+          B0000000000098007001.TXT \
+          D0000000000098007001.TXT \
+          B0000000000098008001.TXT \
+          D0000000000098008001.TXT \
+          B0000000000098009001.TXT \
+          D0000000000098009001.TXT \
+          B0000000000098010001.TXT \
+          D0000000000098010001.TXT \
+          B0000000000098011001.TXT \
+          D0000000000098011001.TXT \
+          B0000000000098012001.TXT \
+          D0000000000098012001.TXT 
+
+
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c) 
+#
+#
+all:  links bufr2txt_tables bufr_split_tables txt2bufr_tables
+
+links: 
+	./links.sh
+bufr2txt_tables: bufr2txt_tables.f
+	$(FC) $(FFLAGS) -o bufr2txt_tables bufr2txt_tables.f $(LIBRARY)
+bufr_split_tables: bufr_split_tables.f
+	$(FC) $(FFLAGS) -o bufr_split_tables bufr_split_tables.f $(LIBRARY)
+txt2bufr_tables: txt2bufr_tables.f
+	$(FC) $(FFLAGS) -o txt2bufr_tables txt2bufr_tables.f $(LIBRARY)
+
+clean:
+	\rm -f $(LINKS) *.o
+	\rm -f bufr2txt_tables; \rm -f bufr_split_tables; \rm -f txt2bufr_tables
diff --git a/bufrtables/bufr2txt_tables.f b/bufrtables/bufr2txt_tables.f
new file mode 100755
index 0000000..8608956
--- /dev/null
+++ b/bufrtables/bufr2txt_tables.f
@@ -0,0 +1,592 @@
+      PROGRAM BUFR2TXT_TABLES
+C
+C**** *BUFR2TXT_TABLES*
+C
+C
+C     PURPOSE.
+C     --------
+C        Unpacks input bufr tables in bufr form and creates
+C        text version of bufr tables and binary bufr tables
+C        used by bufr software.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         CALL BUFREX
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/07/97.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP = 9,JSEC0=   3,JSEC1= 40,JSEC2=4096 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=160000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+     2          JBPW = 32,JTAB =3000,JCTAB=3000,JCTST=3000,JCTEXT=6000,
+     3          JWORK=4096000,JKEY=46)
+C
+      PARAMETER (KELEM=80000)
+      PARAMETER (KVALS=360000)
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY),KREQ(2)
+C
+      REAL*8 VALUES(KVALS),VALUE(KVALS)
+      DIMENSION KTDLST(JELEM),KTDEXP(JELEM),KRQ(KELEM)
+      REAL*8 RQV(KELEM)
+      DIMENSION KDATA(200),KBOXR(JELEM*4)
+      REAL*8 VALS(KVALS)
+C
+      CHARACTER*256 CF,COUT,CARG(4)
+      CHARACTER*64 CNAMES(KELEM),CBOXN(JELEM*4)
+      CHARACTER*24 CUNITS(KELEM),CBOXU(JELEM*4)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 CVAL(KVALS)
+      CHARACTER*80 YENC
+      REAL*8 EPS, RVIND
+c
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C     Missing value indicator
+C 
+      NBYTPW=JBPW/8
+      RVIND=1.7E38
+      nvind=2147483647
+      EPS=10.E-10
+      NPACK=0
+      N=0
+      OO=.FALSE.
+C
+C     Input file name
+C
+C     Get input and output file name.
+C
+      NARG=IARGC()
+c
+      IF(NARG.NE.2) THEN
+         print*,'Usage -- bufr2txt_tables -i infile ' 
+         stop
+      END IF
+c
+      do 101 j=1,narg
+      call getarg(j,carg(j))
+ 101  continue
+c
+      if(carg(1).ne.'-i'.and.carg(1).ne.'-I'.or.
+     1   carg(2).eq.' ') then
+         print*,'Usage -- bufr2txt_tables -i inpfile '
+         stop
+      end if
+c
+      cf=carg(2)
+      ii=index(cf,' ')
+c
+      KRQL=0
+      NR=0
+      KREQ(1)=0
+      KREQ(2)=0
+C
+C*          1.2 OPEN FILE CONTAINING BUFR DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CF(1:ii),'r',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+C
+C
+C     -----------------------------------------------------------------
+C*          3.  READ BUFR MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      KBUFL=0
+C
+      IRET=0
+      CALL PBBUFR(IUNIT,KBUFF,JBUFL,KBUFL,IRET) 
+      IF(IRET.EQ.-1) THEN
+c         IF(N.NE.0) GO TO 600
+         print*,'Number of messages    ',n
+         STOP 'EOF'
+      END IF
+      IF(IRET.EQ.-2) STOP 'File handling problem' 
+      IF(IRET.EQ.-3) STOP 'Array too small for product'
+C
+      N=N+1
+       print*,'----------------------------------',n
+      KBUFL=KBUFL/nbytpw+1
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND BUFR MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      CALL BUS012(KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KERR)
+      IF(KERR.NE.0) THEN
+         PRINT*,'Error in BUS012: ',KERR
+         PRINT*,' BUFR MESSAGE NUMBER ',N,' CORRUPTED.'
+         KERR=0
+         GO TO 300
+      END IF
+C
+      IF(KSUP(6).GT.1) THEN
+         KEL=JWORK/KSUP(6)
+         IF(KEL.GT.KELEM) KEL=KELEM
+      ELSE 
+         KEL=KELEM
+      END IF
+C
+      CALL BUFREX(KBUFL,KBUFF,KSUP,KSEC0 ,KSEC1,KSEC2 ,KSEC3 ,KSEC4,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      print*,'ierr=',ierr
+      IF(IERR.NE.0) call exit(2)
+C
+C*            5. Create text and binary Bufr tables
+C                ----------------------------------
+ 500  continue
+c
+      CALL BUSEL(KTDLEN,KTDLST,KTDEXL,KTDEXP,KERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+c
+      CALL BUTABLES(KSUP,KSEC1,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1             VALUES,CVALS,KERR)
+      if(kerr.ne.0) call exit(2)
+c
+      GO TO 300
+C     -----------------------------------------------------------------
+C
+ 810  CONTINUE
+C
+      WRITE(*,'(1H ,A)') 'OPEN ERROR ON INPUT FILE'
+      GO TO 900
+C      
+ 800  CONTINUE
+C
+      IF(iret.EQ.-1) THEN
+         print*,'Number of records processed ',n
+      ELSE
+         print*,' BUFR : error= ',ierr
+      END IF
+C
+ 900  CONTINUE
+C
+      CALL PBCLOSE(IUNIT,IRET)
+      CALL PBCLOSE(IUNIT1,IRET)
+C
+      END
+      SUBROUTINE BUTABLES(KSUP,KSEC1,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1                   VALUES,CVALS,KERR)
+C
+C**** *BUTABLES*
+C
+C
+C     PURPOSE.
+C     --------
+C         Create text and binary Bufr tables from Bufr data.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          CALL BUTABLES(KSEC1,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+C                       KVALS,VALUES,CVALS,KERR)
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         CALL BUSEL
+C         CALL BUFREX
+C         CALL BUFREN
+C         CALL BUPRS0
+C         CALL BUPRS1
+C         CALL BUPRS2
+C         CALL BUPRS3
+C         CALL BUPRT
+C         CALL BUUKEY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/87.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      dimension ksec1(*),ktdlst(*),ktdexp(*),ksup(*)
+      real*8 values(*), rvind
+      character*80 cvals(*)
+c
+      character*120 crec
+      character*256 YFNAME
+      character*21 YTABB,YTABC,YTABD
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. Initialize constants and variables.
+C              -----------------------------------
+ 100  continue
+C
+C     Missing value indicator
+C 
+      IREP=0
+      RVIND=1.7E38
+      NVIND=2147483647
+c
+C             BUFR EDITION 2 NAMING CONVENTION
+C
+C             BXXXXXYYZZ , CXXXXXYYZZ , DXXXXXYYZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             XXXXX  - ORIGINATING CENTRE
+C             YY     - VERSION NUMBER OF MASTER TABLE
+C                      USED( CURRENTLY 2 )
+C             ZZ     - VERSION NUMBER OF LOCAL TABLE USED
+C
+C             BUFR EDITION 3 NAMING CONVENTION
+C
+C             BWWWXXXYYZZ , CWWWXXXYYZZ , DWWWXXXYYZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             WWW    - ORIGINATING SUB-CENTRE
+C             XXX    - ORIGINATING CENTRE
+C             YY     - VERSION NUMBER OF MASTER TABLE
+C                      USED( CURRENTLY 2 )
+C             ZZ     - VERSION NUMBER OF LOCAL TABLE USED
+C
+C
+C             BUFR EDITION 4 NAMING CONVENTION
+C
+C             BSSSWWWWWXXXXXYYYZZZ , CSSSWWWWWXXXXXYYYZZZ , DSSSWWWWWXXXXXYYYZZZ
+C
+C             B      - BUFR TABLE 'B'
+C             C      - BUFR TABLE 'C'
+C             D      - BUFR TABLE 'D'
+C             SSS    - MASTER TABLE
+C             WWWWWW - ORIGINATING SUB-CENTRE
+C             XXXXXX - ORIGINATING CENTRE
+C             YYY    - VERSION NUMBER OF MASTER
+C                      TABLE USED( CURRENTLY 12 )
+C             ZZZ    - VERSION NUMBER OF LOCAL TABLE USED
+
+         IXX=KSEC1(3)
+         IYY=KSEC1(15)
+         IZZ=KSEC1(08)
+         IF(KSEC1(2).EQ.3) THEN
+            IWW=KSEC1(16)
+            ISS=KSEC1(14)
+         ELSEIF(KSEC1(2).EQ.4) THEN
+            IWW=KSEC1(16)
+            ISS=KSEC1(14)
+         ELSE
+            IWW=0
+            ISS=0
+         END IF
+C
+C     IF STANDARD TABLES USED, USE ECMWF ORIGINATING CENTRE ID
+C
+         IF(KSEC1(8).EQ.0.OR.KSEC1(8).EQ.255) THEN
+            IXX=98
+            IWW=0
+            IZZ=0
+         ENDIF
+C
+      if(ksec1(2).ge.3) then
+         WRITE(YTABB,'(A1,I3.3,2(I5.5),I3.3,I3.3)')
+     1         'B',ISS,IWW,IXX,IYY,IZZ
+         WRITE(YTABC,'(A1,I3.3,2(I5.5),I3.3,I3.3)')
+     1         'C',ISS,IWW,IXX,IYY,IZZ
+         WRITE(YTABD,'(A1,I3.3,2(I5.5),I3.3,I3.3)')
+     1         'D',ISS,IWW,IXX,IYY,IZZ
+         iend=20
+      else
+         WRITE(YTABB,'(A1,I5.5,I2.2,I2.2)') 'B',IXX,IYY,IZZ
+         WRITE(YTABC,'(A1,I5.5,I2.2,I2.2)') 'C',IXX,IYY,IZZ
+         WRITE(YTABD,'(A1,I5.5,I2.2,I2.2)') 'D',IXX,IYY,IZZ
+         iend=10
+      end if
+C
+      if(ksec1(7).eq.1.or.ksec1(17).eq.1) then
+C
+C        Bufr table B
+C
+         yfname=YTABB(1:iend)//'.TXT'
+         PRINT*,'BUFR Tables to be created ',yfname
+         open(unit=67,file=yfname,status='unknown',iostat=ios,err=500)
+C
+c
+c           1.1 Find replication factors if any
+c
+         do 101 i=1,ktdexl
+         if(ktdexp(i).eq.031001.or.ktdexp(i).eq.031002) then
+            irep=nint(values(i))
+            go to 102
+         end if
+ 101     continue
+c
+ 102     continue
+c
+c           1.2 Find first F descriptor
+c
+ 120     continue
+c
+         do 121 i=1,ktdexl
+         if(ktdexp(i).eq.000010) then
+            ist=i
+            go to 122
+         end if
+ 121     continue
+c
+ 122     continue
+c
+         do 201 i=1,irep
+         crec=' '
+c
+c         F DESCRIPTOR TO BE ADDED OR DEFINED
+C
+         icv=nint(values(ist)/1000)      ! index to cval array
+         iln=nint(values(ist))-icv*1000  ! length if chatacter string
+         crec(2:2)=cvals(icv)(1:iln)
+c
+c         X DESCRIPTOR TO BE ADDED OR DEFINED   
+c
+         icv=nint(values(ist+1)/1000)      ! index to cval array
+         iln=nint(values(ist+1))-icv*1000  ! length if chatacter string
+         crec(3:4)=cvals(icv)(1:iln)
+c
+c         Y DESCRIPTOR TO BE ADDED OR DEFINED   
+c
+         icv=nint(values(ist+2)/1000)      ! index to cval array
+         iln=nint(values(ist+2))-icv*1000  ! length if chatacter string
+         crec(5:7)=cvals(icv)(1:iln)
+c
+c         ELEMENT NAME, LINE 1 
+c
+         icv=nint(values(ist+3)/1000)      ! index to cval array
+         iln=nint(values(ist+3))-icv*1000  ! length if chatacter string
+         crec(9:40)=cvals(icv)(1:iln)
+c
+c         ELEMENT NAME, LINE 2 
+c
+         icv=nint(values(ist+4)/1000)      ! index to cval array
+         iln=nint(values(ist+4))-icv*1000  ! length if chatacter string
+         crec(41:72)=cvals(icv)(1:iln)
+c
+c         UNITS NAME
+c
+         icv=nint(values(ist+5)/1000)      ! index to cval array
+         iln=nint(values(ist+5))-icv*1000  ! length if chatacter string
+         crec(74:97)=cvals(icv)(1:iln)
+         if(crec(74:83).eq.'CODE TABLE'.or.
+     1      crec(74:83).eq.'FLAG TABLE') then
+            crec(85:90)=crec(2:7)
+         end if
+c
+c         UNITS SCALE SIGN
+c
+         icv=nint(values(ist+6)/1000)      ! index to cval array
+         iln=nint(values(ist+6))-icv*1000  ! length if character string
+         yscale(1:1)=cvals(icv)(1:iln)
+         if(yscale(1:1).eq.'+') yscale(1:1)=' '
+c
+c         UNITS SCALE
+c
+         icv=nint(values(ist+7)/1000)      ! index to cval array
+         iln=nint(values(ist+7))-icv*1000  ! length if chatacter string
+         iii=101
+         do 112 ii=iln,1,-1
+         crec(iii:iii)=cvals(icv)(ii:ii)
+         if(cvals(icv)(ii:ii).ne.' ') iii=iii-1
+ 112     continue
+         crec(iii:iii)=yscale(1:1)
+
+c
+c         UNITS REFERENCE SIGN
+c
+         icv=nint(values(ist+8)/1000)      ! index to cval array
+         iln=nint(values(ist+8))-icv*1000  ! length if chatacter string
+         yref(1:1)=cvals(icv)(1:iln)
+         if(yref(1:1).eq.'+') yref(1:1)=' '
+c
+c         UNITS REFERENCE VALUE
+c
+         icv=nint(values(ist+9)/1000)      ! index to cval array
+         iln=nint(values(ist+9))-icv*1000  ! length if chatacter string
+         iii=114
+         do 111 ii=iln,1,-1
+         crec(iii:iii)=cvals(icv)(ii:ii)
+         if(cvals(icv)(ii:ii).ne.' ') iii=iii-1
+ 111     continue
+         crec(iii:iii)=yref(1:1)
+c
+c         ELEMENT DATA WIDTH
+c
+         icv=nint(values(ist+10)/1000)      ! index to cval array
+         iln=nint(values(ist+10))-icv*1000  ! length if chatacter string
+         iii=118
+         do 113 ii=iln,1,-1
+         crec(iii:iii)=cvals(icv)(ii:ii)
+         if(cvals(icv)(ii:ii).ne.' ') iii=iii-1
+ 113     continue
+
+c
+         ist=ist+11
+         print*,crec
+         write(67,'(a)',iostat=ios,err=400) crec
+c
+ 201     continue
+c
+         close(67)
+C
+      elseif(ksec1(7).eq.2.or.ksec1(17).eq.2) then
+C
+C           Bufr table D
+C
+         yfname=YTABD(1:iend)//'.TXT'
+         PRINT*,'BUFR Table to be created ',yfname
+         open(unit=68,file=yfname,status='unknown',iostat=ios,err=500)
+c
+         ist=8
+         irep=1
+         if(ktdexp(8).eq.31001.or.ktdexp(8).eq.31002) then
+            irep=nint(values(8))
+            ist=9
+         end if
+c
+         
+         inc=0
+         do 301 i=1,irep
+         crec=' '
+c
+c         F DESCRIPTOR TO BE ADDED OR DEFINED
+C
+         icv=nint(values(ist)/1000)      ! index to cval array
+         iln=nint(values(ist))-icv*1000  ! length if chatacter string
+         crec(2:2)=cvals(icv)(1:iln)
+c
+c         X DESCRIPTOR TO BE ADDED OR DEFINED
+c
+         inc=inc+1
+         icv=nint(values(ist+inc)/1000)      ! index to cval array
+         iln=nint(values(ist+inc))-icv*1000  ! length if chatacter string
+         crec(3:4)=cvals(icv)(1:iln)
+c
+c         Y DESCRIPTOR TO BE ADDED OR DEFINED
+c
+         inc=inc+1
+         icv=nint(values(ist+inc)/1000)      ! index to cval array
+         iln=nint(values(ist+inc))-icv*1000  ! length if chatacter string
+         crec(5:7)=cvals(icv)(1:iln)
+c
+c        Number of sequences
+c
+         inc=inc+1
+         irep1=nint(values(ist+inc))
+         write(crec(8:10),'(i3)') irep1
+c
+c        First in sequence
+c
+         inc=inc+1
+         icv=nint(values(ist+inc)/1000)       ! index to cval array
+         iln=nint(values(ist+inc))-icv*1000  ! length if chatacter string
+         crec(12:17)=cvals(icv)(1:iln)
+c
+         write(*,'(a)') crec
+         write(68,'(a)') crec
+c
+         do 302 j=1,irep1-1
+         crec=' '
+         inc=inc+1
+         icv=nint(values(ist+inc)/1000)       ! index to cval array
+         iln=nint(values(ist+inc))-icv*1000  ! length if chatacter string
+         crec(12:17)=cvals(icv)(1:iln)
+         write(*,'(a)') crec
+         write(68,'(a)') crec
+ 302     continue
+c
+         ist=ist+inc+1
+         inc=0
+c
+ 301     continue
+c
+         close(68)
+         return
+c
+      else
+         kerr=1
+         print*,'Not known table.'
+         call exit(2)
+      end if
+c
+      return
+c
+ 400  continue
+c
+      print*,'Write error ',ios
+      return
+c
+ 500  continue
+c
+      print*,'Open error ',ios
+      return
+      end
diff --git a/bufrtables/bufr_split_tables.f b/bufrtables/bufr_split_tables.f
new file mode 100755
index 0000000..9800764
--- /dev/null
+++ b/bufrtables/bufr_split_tables.f
@@ -0,0 +1,147 @@
+      PROGRAM BUFR_SPLIT_TABLES
+C
+C**** *BUFR_SPLIT_TABLES*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C           Splits bufr source text bufr tables into 
+C           standard wmo table and local table
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         CALL BUFREX
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/07/97.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER*256 CF1,CF2,CF3,carg(4)
+      character*120 record
+c
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C     Input file name
+C
+C     Get input and output file name.
+C
+      narg=IARGC()
+c
+      IF(narg.NE.2) THEN
+         print*,'Usage -- bufr_split_tables -i infile ' 
+         stop
+      END IF
+c
+      do 101 j=1,narg
+      call getarg(j,carg(j))
+ 101  continue
+c
+      if(carg(1).ne.'-i'.and.carg(1).ne.'-I'.or.
+     1   carg(2).eq.' ') then
+         print*,'Usage -- bufr_split_tables -i inpfile '
+         stop
+      end if
+c
+      cf1=carg(2)
+      ii=index(cf1,' ')
+      if(ii.gt.1) ii=ii-1
+      cf2='L'//cf1(2:ii)
+      cf3=cf1(1:II-6)//'00.TXT'
+C
+C*          1.2 OPEN FILE CONTAINING BUFR DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      iunit1=23
+      iunit2=24
+      iunit3=25
+      open(iunit1,file=cf1(1:ii),status='old',
+     1            recl=120,form='formatted')
+      open(iunit2,file=cf2(1:ii),status='unknown',
+     1            recl=120,form='formatted')
+      open(iunit3,file=cf3(1:ii),status='unknown',
+     1            recl=120,form='formatted')
+C
+C     ----------------------------------------------------------------- 
+C*          3.  READ BUFR TABLE
+C               ------------------
+ 300  CONTINUE
+C
+      read(iunit1,'(a)',end=400) record
+      read(record(5:7),'(i3)')  ix
+c
+      if(cf1(1:1).eq.'B') then
+         if(ix.ge.193) then
+            write(iunit2,'(a)') record
+         else
+            write(iunit3,'(a)') record
+         end if
+      elseif(cf1(1:1).eq.'D') then
+         if(ix.ge.193) then
+            read(record(8:10),'(i3)') iloop
+            write(iunit2,'(a)') record
+            do i=1,iloop-1
+            read(iunit1,'(a)',end=400) record
+            write(iunit2,'(a)') record
+            end do
+         else
+            read(record(8:10),'(i3)') iloop
+            write(iunit3,'(a)') record
+            do i=1,iloop-1
+            read(iunit1,'(a)',end=400) record
+            write(iunit3,'(a)') record
+            end do
+         end if
+      else
+         print*,'The table has not been split'
+         go to 400
+      end if
+C
+      go to 300
+C
+C     -----------------------------------------------------------------
+C*          4. Close files
+C              --------------------
+ 400  CONTINUE
+C
+      close(iunit1)
+      close(iunit2)
+      close(iunit3)      
+C     -----------------------------------------------------------------
+C
+C
+C
+      END
diff --git a/bufrtables/links.sh b/bufrtables/links.sh
new file mode 100755
index 0000000..88d9f66
--- /dev/null
+++ b/bufrtables/links.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+ln -fs B0000000000098013001.TXT B0000000000099010001.TXT
+ln -fs C0000000000098013001.TXT C0000000000099010001.TXT
+ln -fs D0000000000098013001.TXT D0000000000099010001.TXT
+ln -fs B0000000000098013001.TXT B0000000000089011255.TXT
+ln -fs C0000000000098013001.TXT C0000000000089011255.TXT
+ln -fs D0000000000098013001.TXT D0000000000089011255.TXT
+ln -fs B0000000000098013001.TXT B0000000000078011007.TXT
+ln -fs C0000000000098013001.TXT C0000000000078011007.TXT
+ln -fs D0000000000098013001.TXT D0000000000078011007.TXT
+ln -fs B0000000000098013001.TXT B0000000000089012001.TXT
+ln -fs C0000000000098013001.TXT C0000000000089012001.TXT
+ln -fs D0000000000098013001.TXT D0000000000089012001.TXT
+ln -fs B0000000000098013001.TXT B0000000000078011008.TXT
+ln -fs C0000000000098013001.TXT C0000000000078011008.TXT
+ln -fs D0000000000098013001.TXT D0000000000078011008.TXT
+ln -fs B0000000000098013001.TXT B0000000000034011001.TXT
+ln -fs C0000000000098013001.TXT C0000000000034011001.TXT
+ln -fs D0000000000098013001.TXT D0000000000034011001.TXT
+ln -fs B0000000000098013001.TXT B0000000000254010001.TXT
+ln -fs C0000000000098013001.TXT C0000000000254010001.TXT
+ln -fs D0000000000098013001.TXT D0000000000254010001.TXT
+ln -fs B0000000000098013001.TXT B0000000000000007000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000007000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000007000.TXT
+ln -fs B0000000000098013001.TXT B0000000000000008000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000008000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000008000.TXT
+ln -fs B0000000000098013001.TXT B0000000000000009000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000009000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000009000.TXT
+ln -fs B0000000000098013001.TXT B0000000000000010000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000010000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000010000.TXT
+ln -fs B0000000000098013001.TXT B0000000000000011000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000011000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000011000.TXT
+ln -fs B0000000000098013001.TXT B0000000000000012000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000012000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000012000.TXT
+ln -fs B0000000000098013001.TXT B0000000000000013000.TXT
+ln -fs C0000000000098013001.TXT C0000000000000013000.TXT
+ln -fs D0000000000098013001.TXT D0000000000000013000.TXT
+ln -fs B0000000000098013001.TXT B0000000000098012001.TXT
+ln -fs C0000000000098013001.TXT C0000000000098012001.TXT
+ln -fs D0000000000098013001.TXT D0000000000098012001.TXT
+ln -fs B0000000000098013001.TXT B0000000000098012000.TXT
+ln -fs C0000000000098013001.TXT C0000000000098012000.TXT
+ln -fs D0000000000098013001.TXT D0000000000098012000.TXT
+ln -fs B0000000000098013001.TXT B0000000000098011001.TXT
+ln -fs C0000000000098013001.TXT C0000000000098011001.TXT
+ln -fs D0000000000098013001.TXT D0000000000098011001.TXT
+ln -fs B0000000000098013001.TXT B0000000000098011000.TXT
+ln -fs C0000000000098013001.TXT C0000000000098011000.TXT
+ln -fs D0000000000098013001.TXT D0000000000098011000.TXT
+ln -fs B0000000000098013001.TXT B0000000000098010001.TXT
+ln -fs C0000000000098013001.TXT C0000000000098010001.TXT
+ln -fs D0000000000098013001.TXT D0000000000098010001.TXT
+ln -fs B0000000000098013001.TXT B0000000000098009001.TXT
+ln -fs C0000000000098013001.TXT C0000000000098009001.TXT
+ln -fs D0000000000098013001.TXT D0000000000098009001.TXT
+ln -fs B0000000000098013001.TXT B0000000000098008001.TXT
+ln -fs C0000000000098013001.TXT C0000000000098008001.TXT
+ln -fs D0000000000098013001.TXT D0000000000098008001.TXT
+ln -fs B0000000000098013001.TXT B0000000000098007001.TXT
+ln -fs C0000000000098013001.TXT C0000000000098007001.TXT
+ln -fs D0000000000098013001.TXT D0000000000098007001.TXT
+ln -fs B0000000000098013001.TXT B0000000000034013001.TXT
+ln -fs C0000000000098013001.TXT C0000000000034013001.TXT
+ln -fs D0000000000098013001.TXT D0000000000034013001.TXT
+ln -fs B0000000000098013001.TXT B0000000000059003003.TXT
+ln -fs C0000000000098013001.TXT C0000000000059003003.TXT
+ln -fs D0000000000098013001.TXT D0000000000059003003.TXT
+ln -fs B0000000000098014001.TXT B0000000000000014000.TXT
+ln -fs C0000000000098014001.TXT C0000000000000014000.TXT
+ln -fs D0000000000098014001.TXT D0000000000000014000.TXT
diff --git a/bufrtables/txt2bufr_tables.f b/bufrtables/txt2bufr_tables.f
new file mode 100755
index 0000000..d791a49
--- /dev/null
+++ b/bufrtables/txt2bufr_tables.f
@@ -0,0 +1,1205 @@
+      PROGRAM TXT2BUFR_TABLES
+C
+C**** *TXT2BUFR_TABLES*
+C
+C
+C     PURPOSE.
+C     --------
+C          CREATES BYNARY BUFR TABLES USED BY BUFR EXPANSION
+C          OR BUFR ENCODING SOFTWARE
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, FM 94 BUFR.
+C
+C          J.K.GIBSON AND M.DRAGOSAVAC,1987: DECODING DATA 
+C          REPRESENTATION FM 94 BUFR,TECHNICAL MEMORANDUM NO.
+C
+C          J.K.GIBSON,1986:EMOS 2 - STANDARDS FOR SOFTWARE DEVELOPMENT
+C          AND MAINTANANCE ,TECHICAL MEMORANDUM NO.       ECMWF.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      character*256 carg(2),cf
+c
+C
+C     ------------------------------------------------------------------
+C*          1.   CREATE BINARY BUFR TABLES.
+C                __________________________
+ 100  CONTINUE
+C
+      ierr=0
+C     Input file name
+C
+C     Get input and output file name.
+C
+      narg=IARGC()
+c
+      IF(narg.NE.2) THEN
+         print*,'Usage -- txt2bufr_tables -i infile '
+         stop
+      END IF
+c
+      do 101 j=1,narg
+      call getarg(j,carg(j))
+ 101  continue
+c
+      if(carg(1).ne.'-i'.and.carg(1).ne.'-I'.or.
+     1   carg(2).eq.' ') then
+         print*,'Usage -- txt2bufr_tables -i inpfile '
+         stop
+      end if
+c
+      cf=carg(2)
+      ii=index(cf,' ')
+      ii=ii-1
+c
+C*          2. TABLE B.
+C              --------
+ 200  CONTINUE
+C
+      IF(cf(1:1).eq.'B') THEN
+         CALL BTABLE(cf,IERR)
+         IF(IERR.NE.0) THEN
+            WRITE(*,'(1H ,A,A,A)') 'Warning --- Bufr Table ',ybtable,
+     1                             ' not created.'
+            IERR=0
+         END IF
+C
+C*          3. TABLE C.
+C              --------
+ 300  CONTINUE
+C
+      ELSEIF(cf(1:1).eq.'C') THEN
+         CALL CTABLE(cf,IERR)
+         IF(IERR.NE.0) THEN
+            WRITE(*,'(1H ,A,A,A)') 'Warning --- Bufr Table ',yctable,
+     1                             ' not created'
+            IERR=0
+         END IF
+C
+C*          4. TABLE D.
+C              --------
+ 400  CONTINUE
+C
+      ELSEIF(cf(1:1).eq.'D') THEN
+         CALL DTABLE(cf,IERR)
+         IF(IERR.NE.0) THEN
+            WRITE(*,'(1H ,A,A,A)') 'Warning --- Bufr Table ',ydtable,
+     1                             ' not created'
+            IERR=0
+         END IF
+      ELSE
+         PRINT*,'Error - This is not B,C or D bufr Table!'
+      ENDIF
+C
+      END
+      SUBROUTINE BTABLE(YNAME,KERR)
+C
+C**** *BTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          CREATE BUFR TABLE B IN BINARY FORM.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, FM 94 BUFR.
+C
+C          J.K.GIBSON AND M.DRAGOSAVAC,1987: DECODING DATA 
+C          REPRESENTATION FM 94 BUFR,TECHNICAL MEMORANDUM NO.
+C
+C          J.K.GIBSON,1986:EMOS 2 - STANDARDS FOR SOFTWARE DEVELOPMENT
+C          AND MAINTANANCE ,TECHICAL MEMORANDUM NO.       ECMWF.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H)
+C
+      PARAMETER(JSUP = 9,JSEC0=   3,JSEC1= 40,JSEC2=4096 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=160000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+     2          JBPW = 32,JTAB =3000,JCTAB=3000,JCTST=3000,JCTEXT=6000,
+     3          JWORK=4096000,JKEY=46)
+C
+      PARAMETER (KELEM=80000)
+      PARAMETER (KVALS=360000)
+C
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+C
+      REAL*8 VALUES(KVALS)
+      DIMENSION KTDLST(KELEM)
+      DIMENSION KDATA(10)
+C
+
+      CHARACTER*80 CVALS(KVALS)
+C
+      CHARACTER*120 YENTRY,YENTRY1
+C
+      CHARACTER*(*) YNAME
+      CHARACTER*120  YFNAME
+c
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      kbufl=jbufl
+      i=index(yname,' ')
+      i=i-1
+      if(i.eq.14) then
+C
+C        Bufr Edition 0,1,2
+C
+         read(yname(9:10),'(i2)') ilocal
+         read(yname(7:8),'(i2)') imaster
+         iedition=2
+         yfname=yname(1:10)//'.buf'
+      elseif(i.eq.15) then
+C
+C        Bufr Edition 3
+C
+         read(yname(10:11),'(i2)') ilocal
+         read(yname(8:9),'(i2)') imaster
+         read(yname(2:4),'(i2)') isubcentre
+         read(yname(5:7),'(i2)') icentre
+         iedition=3
+         yfname=yname(1:11)//'.buf'
+      elseif(i.eq.24) then
+C
+C        Bufr Edition 4
+C
+         read(yname(18:20),'(i3)') ilocal
+         read(yname(15:17),'(i3)') imaster
+         read(yname(5:9),'(i5)') isubcentre
+         read(yname(10:14),'(i5)') icentre
+         iedition=4
+         yfname=' '
+         yfname=yname(1:20)//'.buf'
+      else
+         print*,'Wrong Bufr table name --',cf
+         call exit(2)
+      end if
+
+      J=0
+      jj=0
+C
+C
+      call pbopen(IUNIT1,yfname,'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on bufr.dat'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+
+      OPEN(UNIT=21,FILE=YNAME(1:i),
+     1            ERR=401,
+     2            IOSTAT=IOS,      
+     3            STATUS='OLD')
+c
+c     000001
+      jj=jj+1
+      cvals(jj)='011'
+      values(jj)=jj*1000+3
+c
+c     000002
+      jj=jj+1
+      cvals(jj)='BUFR TABLES, COMPLETE'
+      values(jj)=jj*1000+32
+c
+c     000003
+      jj=jj+1
+      cvals(jj)=' '
+      values(jj)=jj*1000+32
+
+c
+c     000004 BUFR master table
+      jj=jj+1
+      cvals(jj)='00'
+      values(jj)=jj*1000+2
+c
+c     000005 BUFR edition number
+c
+      jj=jj+1
+      cvals(jj)='004'
+      values(jj)=jj*1000+3
+c
+c     000006 BUFR master table version number
+      jj=jj+1
+      print*,'imaster=',imaster
+      write(cvals(jj)(1:2),'(I2.2)') imaster
+      values(jj)=jj*1000+2
+c
+c     000008 BUFR local table version number
+      jj=jj+1
+      print*,'ilocal=',ilocal
+      write(cvals(jj)(1:2),'(I2.2)') ilocal
+      values(jj)=jj*1000+2
+
+
+c     Replication factor
+      jj=jj+1
+      values(jj)=0
+c
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE B ELEMENT.
+C                ------------------------
+C
+      iii=0
+ 200  CONTINUE
+C
+      YENTRY=' '
+      READ(21,'(A)',ERR=402,END=300) YENTRY
+      iii=iii+1
+C
+C
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, ELEMENT NAME, UNITS,
+C*               REFERENCE VALUE AND DATA WIDTH.
+C
+ 210  CONTINUE
+C
+c
+c     F
+c
+      jj=jj+1
+      cvals (jj)=yentry(2:2)
+      values(jj)=jj*1000+1
+c
+c     X
+c
+      jj=jj+1
+      cvals (jj)=yentry(3:4)
+      values(jj)=jj*1000+2
+c
+c     Y
+c
+      jj=jj+1
+      cvals (jj)=yentry(5:7)
+      values(jj)=jj*1000+3
+c
+c     Namne 1
+c
+      jj=jj+1
+      cvals (jj)=yentry(9:40)
+      values(jj)=jj*1000+32
+c
+c     Name 2
+c
+      jj=jj+1
+      cvals (jj)=yentry(41:72)
+      values(jj)=jj*1000+32
+c
+c     Unit name
+c
+      jj=jj+1
+      cvals (jj)=yentry(74:97)
+      values(jj)=jj*1000+24
+c
+c     Unit scale sign
+c
+      iz=0
+      jj=jj+1
+      iz=index(yentry(98:101),'-')
+      if(iz.eq.0) then
+         cvals (jj)='+'
+         values(jj)=jj*1000+1
+      else
+         cvals (jj)='-'
+         values(jj)=jj*1000+1
+      end if
+c
+c     Unit scale
+c
+      jj=jj+1
+      if(iz.ne.0) then
+         izz=98+iz-1
+         yentry(izz:izz)=' '
+         cvals (jj)=yentry(99:101)
+         values(jj)=jj*1000+3
+      else
+        cvals (jj)=yentry(99:101)
+        values(jj)=jj*1000+3
+      end if
+c
+c     Unit reference sign
+c
+      iz=0
+      jj=jj+1
+      iz=index(yentry(102:114),'-')
+      if(iz.eq.0) then
+         cvals (jj)='+'
+         values(jj)=jj*1000+1
+      else
+         cvals (jj)='-'
+         values(jj)=jj*1000+1
+      end if
+c
+c     Unit reference      
+c
+      jj=jj+1
+      if(iz.ne.0) then
+         izz=102+iz-1
+         yentry(izz:izz)=' '
+         cvals (jj)=yentry(105:114)
+         values(jj)=jj*1000+10
+      else
+         cvals (jj)=yentry(105:114)
+         values(jj)=jj*1000+10
+      end if
+c
+c     Element data width
+c
+      jj=jj+1
+      cvals (jj)=yentry(116:118)
+      values(jj)=jj*1000+3
+c
+c     end of element descriptors
+c
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+C*          3.   Pack tables into bufr message
+C                --------------------------------
+ 300  CONTINUE
+C
+c     Set section 0
+c
+      ksec0(3)=iedition
+c
+c     Set section 1
+c
+      IF(KSEC0(3).LE.3) THEN
+        ksec1(1)=18
+        ksec1(2)=iedition
+        ksec1(3)=icentre
+        ksec1(4)=1
+        ksec1(5)=0
+        ksec1(6)=11
+        ksec1(7)=1
+        ksec1(8)=ilocal
+        ksec1(9)=4
+        ksec1(10)=6
+        ksec1(11)=21
+        ksec1(12)=0
+        ksec1(13)=0
+        ksec1(14)=0
+        ksec1(15)=imaster
+        ksec1(16)=isubcentre
+      ELSE
+        ksec1(1)=22
+        ksec1(2)=iedition
+        ksec1(3)=icentre
+        ksec1(4)=1
+        ksec1(5)=0
+        ksec1(6)=11
+        ksec1(7)=0
+        ksec1(8)=ilocal
+        ksec1(9)=2007
+        ksec1(10)=2
+        ksec1(11)=7
+        ksec1(12)=0
+        ksec1(13)=0
+        ksec1(14)=0
+        ksec1(15)=imaster
+        ksec1(16)=isubcentre
+        ksec1(17)=1
+        ksec1(18)=0
+      END IF
+c
+c     Set section 3
+c
+      ksec3(3)=1
+      ksec3(4)=128
+c
+c     Set replication factor
+c
+      print*,'delayed replication is ',iii
+      kdata(1)=iii
+      kdlen=1
+      values(8)=iii
+c
+c     Set list of descriptors
+c
+      ktdlst( 1)=  000001
+      ktdlst( 2)=  000002
+      ktdlst( 3)=  000003
+      ktdlst( 4)=  000004
+      ktdlst( 5)=  000005
+      ktdlst( 6)=  000006
+      ktdlst( 7)=  000008
+      ktdlst( 8)=  101000
+      ktdlst( 9)=  031002
+      ktdlst(10)=  300004
+c
+      ktdlen=10
+c
+      call bufren(ksec0,ksec1,ksec2,ksec3,ksec4,ktdlen,ktdlst,
+     1            kdlen,kdata,kelem,kvals,values,cvals,
+     2            kbufl,kbuff,ierr)
+c
+      if(ierr.ne.0) then
+         print*,'bufren: error ',ierr
+         call exit(2)
+      end if
+c
+      print*,'Number of table B entries packed =',iii
+c
+      ilen=kbufl*4
+      print*,'total length of bufr message is ',ilen
+      call pbwrite(IUNIT1,KBUFF,ILEN,IERR)
+      return
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+      RETURN
+C
+404   CONTINUE
+      KERR=1
+      WRITE(*,4404) IOS,yname
+ 4404 FORMAT(1H ,'Write error',i4,' on ',a)
+      RETURN
+C
+403   CONTINUE
+      KERR=1
+      WRITE(*,4403) IOS,yname
+4403  FORMAT(1H ,'Open error',i4,' on ',a)
+      RETURN
+C
+C
+402   CONTINUE
+      KERR=1
+      WRITE(*,4402) IOS,yfname
+ 4402 FORMAT(1H ,'Read error',i4,' on ',a)
+      RETURN
+C
+C
+ 401  CONTINUE
+C
+      KERR=1
+      WRITE(*,4401) IOS,yfname
+ 4401 FORMAT(1H ,'Open error',i4,' on ',a)
+C     
+      RETURN
+      END
+      SUBROUTINE DTABLE(YNAME,KERR)
+C
+C**** *DTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          THE MAIN PURPOSE OF THIS PROGRAMME IS TO CREATE WORKING
+C          TABLE OF SEQUENCE DESCRIPTORS FOR *BUFR* DECODING.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, *FM 94 BUFR*.
+C
+C          J.K.GIBSON AND *M.DRAGOSAVAC,1987:* DECODING *DATA *REPRESENTATION
+C                          *FM 94 BUFR*,*TECHNICAL *MEMORANDUM *NO.
+C
+C          J.K.GIBSON,1986:*EMOS 2 - *STANDARDS FOR SOFTWARE DEVELOPMENT
+C                           AND MAINTANANCE *,*TECHICAL MEMORANDUM *NO.
+C                           *ECMWF*.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H)
+C
+      PARAMETER(JSUP = 9,JSEC0=   3,JSEC1= 40,JSEC2=4096 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=160000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+     2          JBPW = 32,JTAB =3000,JCTAB=3000,JCTST=3000,JCTEXT=6000,
+     3          JWORK=4096000,JKEY=46)
+C
+      PARAMETER (KELEM=20000)
+      PARAMETER (KVALS=360000)
+C
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+C
+      REAL*8 VALUES(KVALS)
+      DIMENSION KTDLST(KELEM)
+      DIMENSION KDATA(1000)
+C
+      CHARACTER*80 CVALS(KVALS)
+C
+      character*80 YENTRY
+C
+      CHARACTER*(*) YNAME
+      CHARACTER*256 YFNAME
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      kbufl=jbufl
+      i=index(yname,' ')
+      i=i-1
+      if(i.eq.14) then
+c
+c        Bufr Edition 0,1,2
+c
+         read(yname(9:10),'(i2)') ilocal
+         read(yname(7:8),'(i2)') imaster
+         iedition=2
+         yfname=' '
+         yfname=yname(1:10)//'.buf'
+      elseif(i.eq.15) then
+c
+c        Bufr Editin 3
+c
+         read(yname(10:11),'(i2)') ilocal
+         read(yname(8:9),'(i2)') imaster
+         iedition=3
+         yfname=' '
+         yfname=yname(1:11)//'.buf'
+      elseif(i.eq.24) then
+c     
+c        Bufr Editin 4
+c
+         read(yname(18:20),'(i3)') ilocal
+         read(yname(15:17),'(i3)') imaster
+         read(yname(5:9),'(i5)') isubcentre
+         read(yname(10:14),'(i5)') icentre
+
+         iedition=4
+         yfname=' '
+         yfname=yname(1:20)//'.buf'
+
+
+      else
+         print*,'Wrong table name ---',yname
+         call exit(2)
+      end if
+c
+      J=1
+      jj=0
+C
+      call pbopen(IUNIT1,yfname,'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on bufr.dat'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+
+      OPEN(UNIT=21,FILE=YNAME(1:i),
+     1            ERR=401,
+     2            IOSTAT=IOS,
+     3            STATUS='OLD')
+c
+      jj=jj+1
+      cvals(jj)='011'
+      values(jj)=jj*1000+3
+C     000002
+      jj=jj+1
+      cvals(jj)='BUFR TABLES, COMPLETE'
+      values(jj)=jj*1000+32
+c
+c     000003
+      jj=jj+1
+      cvals(jj)=' '
+      values(jj)=jj*1000+32
+
+c
+c     000004 BUFR master table
+      jj=jj+1
+      cvals(jj)='00'
+      values(jj)=jj*1000+2
+c
+c     000005 BUFR edition number
+c
+      jj=jj+1
+      cvals(jj)='004'
+      values(jj)=jj*1000+3
+c
+c     000006 BUFR master table version number
+      jj=jj+1
+      print*,'imaster=',imaster
+      write(cvals(jj)(1:2),'(I2.2)') imaster
+      values(jj)=jj*1000+2
+c
+c     000008 BUFR local table version number
+      jj=jj+1
+      print*,'ilocal=',ilocal
+      write(cvals(jj)(1:2),'(I2.2)') ilocal
+      values(jj)=jj*1000+2
+
+c     Replication factor for all table D entries
+c
+      jj=jj+1
+      values(jj)=0
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE D ELEMENT.
+C                ------------------------
+C
+ 200  CONTINUE
+C
+      YENTRY=' '
+      READ(21,'(A)',ERR=402,END=300) YENTRY
+      j=j+1
+C
+C
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, ELEMENT NAME, UNITS,
+C*               REFERENCE VALUE AND DATA WIDTH.
+C
+ 210  CONTINUE
+C
+c
+c     F
+c
+      jj=jj+1
+      cvals (jj)=yentry(2:2)
+      values(jj)=jj*1000+1
+c
+c     X
+c
+      jj=jj+1
+      cvals (jj)=yentry(3:4)
+      values(jj)=jj*1000+2
+c
+c     Y
+c
+      jj=jj+1
+      cvals (jj)=yentry(5:7)
+      values(jj)=jj*1000+3
+c
+c     Replication factor
+c
+      jj=jj+1
+      read(yentry(9:10),'(i2)') irepl
+      values(jj)=float(irepl)
+      kdata(j)=irepl
+c
+c     Sequence descriptors
+c   
+      jj=jj+1
+      cvals(jj)=yentry(12:17)
+      values(jj)=jj*1000+6
+c
+      do 220 i=1,irepl-1
+      READ(21,'(A)',ERR=402,END=300) YENTRY
+c
+      jj=jj+1
+      cvals(jj)=yentry(12:17)
+      values(jj)=jj*1000+6
+220   continue
+c
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+C*          3.   Pack tables into bufr message
+C                --------------------------------
+ 300  CONTINUE
+C
+c     Set section 0
+c
+      ksec0(3)=iedition
+c
+c     Set section 1
+c
+      IF(KSEC0(3).LE.3) THEN
+        ksec1(1)=18
+        ksec1(2)=iedition
+        ksec1(3)=98
+        ksec1(4)=1
+        ksec1(5)=0
+        ksec1(6)=11
+        ksec1(7)=2
+        ksec1(8)=ilocal
+        ksec1(9)=95
+        ksec1(10)=9
+        ksec1(11)=17
+        ksec1(12)=12
+        ksec1(13)=0
+        ksec1(14)=0
+        ksec1(15)=imaster
+        ksec1(16)=0
+      ELSE
+        ksec1(1)=22
+        ksec1(2)=iedition
+        ksec1(3)=icentre
+        ksec1(4)=1
+        ksec1(5)=0
+        ksec1(6)=11
+        ksec1(7)=0
+        ksec1(8)=ilocal
+        ksec1(9)=2005
+        ksec1(10)=6
+        ksec1(11)=7
+        ksec1(12)=0
+        ksec1(13)=0
+        ksec1(14)=0
+        ksec1(15)=imaster
+        ksec1(16)=isubcentre
+        ksec1(17)=2
+        ksec1(18)=0
+      END IF
+c
+c     Set section 3
+c
+      ksec3(3)=1
+      ksec3(4)=128
+c
+c     Set replication factor
+c
+      print*,'delayed replication is ',j
+      kdata(1)=j-1
+      kdlen=j
+      values(8)=j-1
+c
+c     Set list of descriptors
+c
+      ktdlst(1)=000001
+      ktdlst(2)=000002
+      ktdlst(3)=000003
+      ktdlst(4)=000004
+      ktdlst(5)=000005
+      ktdlst(6)=000006
+      ktdlst(7)=000008
+      ktdlst(8)=104000
+      ktdlst(9)=031002
+      ktdlst(10)=300003
+      ktdlst(11)=101000
+      ktdlst(12)=031002
+      ktdlst(13)=000030
+c
+      ktdlen=13
+c
+      call bufren(ksec0,ksec1,ksec2,ksec3,ksec4,ktdlen,ktdlst,
+     1            kdlen,kdata,kelem,kvals,values,cvals,
+     2            kbufl,kbuff,ierr)
+c
+      if(ierr.gt.0) then
+         print*,'bufren: error ',ierr
+         call exit(2)
+      end if
+c
+      print*,'Number of table D entries packed =',j
+c
+      ilen=kbufl*JBPW/8
+      print*,'total length of bufr message is ',ilen
+      call pbwrite(IUNIT1,KBUFF,ILEN,IERR)
+      return
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+      RETURN
+C
+404   CONTINUE
+      KERR=1
+      WRITE(*,4404) IOS,yname
+ 4404 FORMAT(1H ,'Write error',i4,' on ',a)
+      RETURN
+C
+403   CONTINUE
+      KERR=1
+      WRITE(*,4403) IOS,yname
+4403  FORMAT(1H ,'Open error',i4,' on ',a)
+      RETURN
+C
+C
+402   CONTINUE
+      KERR=1
+      WRITE(*,4402) IOS,yfname
+ 4402 FORMAT(1H ,'Read error',i4,' on ',a)
+      RETURN
+C
+C
+ 401  CONTINUE
+C
+      KERR=1
+      WRITE(*,4401) IOS,yfname
+ 4401 FORMAT(1H ,'Open error',i4,' on ',a)
+C
+      RETURN
+      END
+      SUBROUTINE CTABLE(YNAME,KERR)
+C
+C**** *CTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          THE MAIN PURPOSE OF THIS PROGRAMME IS TO CREATE WORKING
+C          CODE TABLES FOR *BUFR* DECODING.
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          BINARY UNIVERSAL FORM FOR DATA REPRESENTATION, *FM 94 BUFR*.
+C
+C          J.K.GIBSON AND *M.DRAGOSAVAC,1987:* DECODING *DATA *REPRESENTATION
+C                          *FM 94 BUFR*,*TECHNICAL *MEMORANDUM *NO. 134
+C
+C          J.K.GIBSON,1986:*EMOS 2 - *STANDARDS FOR SOFTWARE DEVELOPMENT
+C                           AND MAINTANANCE *,*TECHICAL MEMORANDUM *NO.
+C                           *ECMWF*.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC       *ECMWF*       JANUARY 1991.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP = 9,JSEC0=   3,JSEC1= 40,JSEC2=4096 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=160000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+     2          JBPW = 32,JTAB =3000,JCTAB=3000,JCTST=3000,JCTEXT=6000,
+     3          JWORK=4096000,JKEY=46)
+
+C
+      CHARACTER*64 CTEXT(JCTEXT)
+      CHARACTER*80 YENTRY
+      CHARACTER*120 YFNAME
+      CHARACTER*(*) YNAME
+C
+      DIMENSION NREF(JCTAB),NSTART(JCTAB),NLEN(JCTAB),NCODNUM(JCTST),
+     1          NSTARTC(JCTST),NLENC(JCTST)
+C
+C     ------------------------------------------------------------------
+C*          1.   SET INITIAL CONSTANTS AND POINTERS
+C                ----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      iynamep=index(yname,' ')
+      iynamep=iynamep-1
+      
+c
+      if(iynamep.eq.14) then
+c
+c        Bufr Edition 0,1,2
+c
+         read(yname(9:10),'(i2)') ilocal
+         read(yname(7:8),'(i2)') imaster
+         iedition=2
+         yfname=yname(1:10)//'.buf'
+      elseif(iynamep.eq.15) then
+c
+c        Bufr Editin 3
+c
+         read(yname(10:11),'(i2)') ilocal
+         read(yname(8:9),'(i2)') imaster
+         iedition=3
+         yfname=yname(1:11)//'.buf'
+      elseif(iynamep.eq.24) then
+c
+c        Bufr Editin 4
+c
+         read(yname(18:20),'(i3)') ilocal
+         read(yname(15:17),'(i3)') imaster
+         read(yname(5:9),'(i5)') isubcentre
+         read(yname(10:14),'(i5)') icentre
+         iedition=4
+         yfname=' '
+         yfname=yname(1:20)//'.buf'
+      else
+         print*,'Wrong table name ---',yname
+         call exit(2)
+      end if
+c
+c
+      JPN4=JP*JPN*4
+C
+      DO 101 I=1,JPN4
+      CTEXT(I)=' '
+ 101  CONTINUE
+C
+      DO 102 I=1,JP
+      NREF(I)=0
+      NSTART(I)=0
+      NLEN(I)=0
+ 102  CONTINUE
+C
+      DO 103 I=1,JP*JPN
+      NCODNUM(I)=0
+      NSTARTC(I)=0
+      NLENC  (I)=0
+ 103  CONTINUE
+C
+      OPEN(UNIT=21,FILE=YNAME(1:iynamep),ERR=401,STATUS='OLD')
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN CODE TABLE ENTRY
+C                ------------------------
+ 200  CONTINUE
+C
+C
+      READ(21,'(A)',ERR=402,END=300) YENTRY
+      print*,YENTRY
+C
+      J = J+1
+C
+      IF(J.GT.JP) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         CALL EXIT(2)
+      END IF 
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR CODE TABLE TABLE REFERENCE, STARTING POINTERS
+C                FOR LIST OF CODE NUMBERS, LENGTH , LIST OF CODE NUMBERS,
+C                STARTING POINTERS AND LENGTH OF TEXT INFORMATION.
+ 210  CONTINUE
+C
+      READ(YENTRY,'(I6,1X,I4,1X,I4,1X,I2)') NREF(J),NLEN(J),NCODE,NLINE
+C
+      IF(J.EQ.1) THEN
+         NSTART (J)  = 1
+         NSTARTC(J)  = 1
+         IPT = 1
+         IIPT= 1
+      ELSE
+         NSTART(J)   = NSTART(J-1) + NLEN(J-1)
+         IPT         = NSTART(J)
+         IIPT        = IIPT + 1
+         NSTARTC(IPT)= IIPT
+      END IF
+C
+C
+      NCODNUM(IPT)=NCODE
+      NLENC ( IPT)=NLINE
+C
+      CTEXT (IIPT)=YENTRY(21:80)
+C     -------------------------------------------------------------------
+      IF(NLENC(IPT).GT.1) THEN
+         DO 220 JA=1,NLENC(IPT)-1
+         READ(21,'(A)',END=300) YENTRY
+         IIPT=IIPT+1
+         CTEXT(IIPT)=YENTRY(21:80)
+ 220     CONTINUE
+      END IF
+C
+      IF(NLEN(J).GT.1) THEN
+         DO 230 JA=1,NLEN(J)-1
+         READ(21,'(A)',END=300) YENTRY
+         print*,YENTRY
+         READ(YENTRY,'(12X,I4,1X,I2)') NCODE,NLINE
+         IPT   = IPT + 1
+         IIPT  =IIPT + 1
+         NCODNUM(IPT)= NCODE
+         NSTARTC(IPT)=  IIPT
+         NLENC  (IPT)=NLINE
+         CTEXT(IIPT) = YENTRY(21:80)
+         IF(NLENC(IPT).GT.1) THEN
+            DO 240 JB=1,NLENC(IPT)-1
+            READ(21,'(A)',END=300) YENTRY
+            IIPT=IIPT+1
+            CTEXT(IIPT)=YENTRY(21:80)
+ 240        CONTINUE
+         END IF
+ 230     CONTINUE
+      END IF
+C
+      GO TO 200
+C
+C     ------------------------------------------------------------------
+C*          3.   WRITE WORKING CODE TABLE INTO FILE.
+C                -----------------------------------
+ 300  CONTINUE
+C
+      i=index(yfname,' ')
+      OPEN(UNIT=22,FILE=yfname(1:I-1),ERR=403,
+     1             FORM='UNFORMATTED',
+     2             STATUS='NEW')
+c
+      WRITE(22,IOSTAT=IOS,ERR=404) NREF,NSTART,NLEN,NCODNUM,
+     1                             NSTARTC,NLENC,CTEXT
+C
+      CLOSE(21)
+      CLOSE(22)
+C     -----------------------------------------------------------------
+C*          3.1  WRITE TABLES ON OUTPUT FILE
+C                ---------------------------
+ 310  CONTINUE
+C
+c      JEND=J
+c      DO 311 J=1,JEND
+C
+c      IPT=NSTART(J)
+c      IIPT=NSTARTC(IPT)
+c      WRITE(*,999) NREF(J),NLEN(J),NCODNUM(IPT),NLENC(IPT),CTEXT(IIPT)
+C
+c      IF(NLENC(IPT).GT.1) THEN
+c         DO 312 JA=1,NLENC(IPT)-1
+c         IIPT = IIPT + 1
+c         WRITE(*,998) CTEXT(IIPT)
+c 312     CONTINUE
+c      END IF
+C
+c      IF(NLEN(J).GT.1) THEN
+c         DO 313 JB=1,NLEN(J)-1
+c         IPT = IPT + 1
+c         IIPT= NSTARTC(IPT)
+c         WRITE(*,997) NCODNUM(IPT),NLENC(IPT),CTEXT(IIPT)
+c         IF(NLENC(IPT).GT.1) THEN
+c            DO 314 JC=1,NLENC(IPT)-1
+c            IIPT= IIPT + 1
+c            WRITE(*,998) CTEXT(IIPT)
+c 314        CONTINUE
+c         END IF
+c 313     CONTINUE
+c      END IF
+C
+c 311  CONTINUE
+C
+      write(*,'(1h )')
+      write(*,'(1H ,a,i4)') 'Total number of entries in the Table C is',
+     1                       j
+C
+      RETURN
+C     -----------------------------------------------------------------
+ 400  CONTINUE
+C
+ 401  CONTINUE
+C
+      KERR=1
+      WRITE(*,4401) IOS,yfname
+ 4401 FORMAT(1H ,'Open error ',i4,' on ',a)
+      RETURN
+C
+ 402  CONTINUE
+      KERR=1
+      WRITE(*,4402) IOS,yfname
+ 4402 FORMAT(1H ,'Read error ',i4,' on ',a)
+      RETURN
+C
+ 403  CONTINUE
+C
+      KERR=1
+      WRITE(*,4403) IOS,yname
+ 4403 FORMAT(1H ,'Open error ',i4,' on ',a)
+      RETURN
+ 404  CONTINUE
+C
+      KERR=1
+      WRITE(*,4404) IOS,yname
+ 4404 FORMAT(1H ,'Write error ',i4,' on ',a)
+      RETURN
+C
+  997 FORMAT(1H ,14X,I4,1X,I2,1X,A)
+  998 FORMAT(1H ,22X,A)
+  999 FORMAT(1H ,2X,I6,1X,I4,1X,I4,1X,I2,1X,A)
+C
+      END
diff --git a/build_library b/build_library
new file mode 100755
index 0000000..fac0bdb
--- /dev/null
+++ b/build_library
@@ -0,0 +1,266 @@
+#! /bin/sh
+
+set -e
+
+umask 0
+
+#  make sure all directories exists.
+for subdirs in gribex gribtables pbio bufrdc bufrtables crexdc crextables interpolation land_sea_mask examples config options
+do
+   if test ! -d $subdirs ; then
+       echo
+       echo "Tarfile is incomplete ;  $subdirs does not exist."
+       echo "         Incorrect tarfile downloaded?"
+       quit
+   fi
+done
+
+
+# is the uname available ?
+
+type uname > /dev/null 2>&1
+if test $? -ne 0 ; then
+    echo "install: uname not found"
+    echo "You should try compilation without install script"
+    quit
+fi
+target=`uname -s | tr '[A-Z]' '[a-z]'`
+
+gnu=
+
+echo
+
+case $target in 
+
+linux )
+    target=linux
+    gnu=yes
+	platform=`uname -m`
+	case $platform in
+	x86_64 )
+	    A64=A64
+        CNAME=_x86_64
+		;;
+	ia64 )
+        gnu=
+	    A64=
+		target=itanium
+		;;
+    * )
+	    A64=
+		;;
+    esac
+	    echo "Default compilers are Portland: pgf77 and pgcc."
+    ;;
+darwin* )
+    target=darwin
+    platform=`machine`
+    case $platform in
+    ppc970 )
+        target=ppc
+        A64=_G5
+        ;;
+    ppc* )
+        target=ppc
+        A64=
+        ;;
+    i486 )
+        target=darwin
+        A64=_i486
+        ;;
+    *64 )
+        target=darwin
+        A64=A64
+        ;;
+    * )
+        target=darwin
+        A64=
+        ;;
+    esac
+
+       echo "Default compilers are : gfortran and gcc."
+    ;;
+sunos )
+    target=sun4
+#	platform=`uname -m`
+#    if test "$platform" = "i86pc" ; then
+#      target=i86pc
+#    fi
+
+    ;;
+irix* )
+    target=sgimips
+    ;;
+aix )
+    target=rs6000
+    ;;
+osf1 )
+    target=decalpha
+    ;;
+hp-ux )
+    target=hppa
+    platform=`uname -m`
+    if test "$platform" = "ia64" ; then
+      target=hpia64
+    fi
+    ;;
+fujitsu* )
+    target=FUJITSU
+    ;;
+
+ * )
+        echo
+        echo "install: products can only be installed on Linux, Solaris, Sgi"
+        echo "Alpha, HP, IBM operating systems."
+        echo "You should try compilation without install script"
+        quit
+	;;
+esac
+
+CNAME=
+if test "$gnu" = "yes" ; then
+       echo "Do you want to work with GNU gfortran/gcc (answer y), ifort (answer i) ? [n]"
+       read ans
+       echo
+       if test -n "$ans" ; then
+          if test "$ans" = "y" -o "$ans" = "yes" ; then
+              CNAME=_gfortran
+          fi
+          if test "$ans" = "i" -o "$ans" = "intel" ; then
+              CNAME=_intel
+          fi
+       fi
+fi
+
+if test "$target" = "rs6000" ; then
+       echo "Do you want to force 64 bit addressing mode? (answer y) [n]"
+       read ans
+       echo
+       if test -n "$ans" ; then
+          if test "$ans" = "y" -o "$ans" = "yes" ; then
+              A64=A64
+          fi
+       fi
+fi
+
+
+R64=
+     echo "Default is  32 bit reals."
+     echo "Do you want 64 bit reals ? [y,n]"
+     read ans
+     echo
+if test -n "$ans" ; then
+  if test "$ans" = "y" -o "$ans" = "yes" ; then
+       R64=R64
+  fi
+fi
+
+GRIB_API=
+     echo "Do you want to build with grib_api ? [y,n]"
+     read ans
+     echo
+if test -n "$ans" ; then
+  if test "$ans" = "y" -o "$ans" = "yes" ; then
+       GRIB_API=grib_api_merging
+    echo "   Can you specify the directory path for GRIB_API ?"
+	read ans
+    GRIB_API_DIR=$ans
+JASPER_DIR=
+     echo "Do you need jpeg support for grib_api ? [y,n]"
+     read ans
+     echo
+if test -n "$ans" ; then
+  if test "$ans" = "y" -o "$ans" = "yes" ; then
+    echo "   Can you specify the directory path for JASPER ?"
+	read ans
+    JASPER_DIR="$ans/libjasper.a"
+  fi
+fi
+fi
+fi
+
+echo $R64 > .r64
+
+cat Makefile.in | sed s:reals:$R64: | sed s:glue:$GRIB_API: > Makefile
+
+for subdirs in gribex pbio bufrdc bufrtables crexdc interpolation fft
+do
+cat $subdirs/Makefile.in | sed s:reals:$R64: | sed s:arch:$target: | sed s:plat:$A64: | sed s:depl:emos: | sed s:comp:$CNAME: > $subdirs/Makefile
+done
+
+for subdirs in examples/gribex examples/bufr examples/crex examples/interpolation examples/fft
+do
+cat $subdirs/Makefile.in | sed s:reals:$R64: | sed s:arch:$target: | sed s:plat:$A64: | sed s:comp:$CNAME: > $subdirs/Makefile
+done
+
+#grib_api
+cat grib_api_merging/Makefile.in | sed s:reals:$R64: | sed s:arch:$target: | sed s:plat:$A64: | sed s:comp:$CNAME: | sed s:depl:emos: | sed s:glue:$GRIB_API_DIR: > grib_api_merging/Makefile
+cat examples/interpolation_grib_api/Makefile.in | sed s:reals:$R64: | sed s:arch:$target: | sed s:plat:$A64: | sed s:comp:$CNAME: | sed s:glue:$GRIB_API_DIR: | sed s:jasp:$JASPER_DIR: > examples/interpolation_grib_api/Makefile
+
+
+INSTALL_DIR=/usr/local/lib
+
+echo
+echo "   The default directory for gribtables, bufrtables, crextables,"
+echo "land_sea_mask, gribtemplates and libemos$R64.a will be $INSTALL_DIR,"
+echo " but you may put them anywhere you wish assuming"
+echo "you have permission to do so."
+echo
+echo "   You can specify the directory path for GRIB, BUFR, CREX tables"
+echo "local definition templates, land-sea mask, and libemos$R64.a library"
+echo "or just press RETURN if you want default directory."
+echo
+echo "Tables, templates, land-sea mask and libemos$R64.a directory [$INSTALL_DIR]: "
+read ans
+
+if test -n "$ans" ; then
+    INSTALL_DIR=$ans
+fi
+
+echo $INSTALL_DIR > .emos
+
+cat config/config.$target$CNAME$R64$A64.in | sed s:emos:$INSTALL_DIR: > config/config.$target$CNAME$R64$A64
+
+make
+
+chmod a-xw libemos$R64.a
+
+ls bufrtables/*000* > .list/bufrtables
+
+echo "*******************************************************************"
+echo
+echo "Compilation is completed !"
+echo
+echo "*******************************************************************"
+echo
+echo "  You can put other options for compilation in"
+echo "config/config.$target$R64 like level of optimisation etc."
+echo "and make compilation again. "
+echo
+echo "When you finish your changes run"
+echo
+echo "make clean"
+echo
+echo "make"
+echo
+echo "in order to produce library "
+echo
+echo "*******************************************************************"
+echo
+echo "   Now, if you want to install libemos$R64.a and gribtables, bufrtables, crextables,"
+echo "land_sea_mask it is recomended to do that runing ./install script."
+echo "You must have root permission runinig ./install , if you want"
+echo "to put them on /usr/local/lib "
+echo "Also you can choose your directories."
+echo
+echo "*******************************************************************"
+echo
+echo "Any comments on the document or the software would be appreciated"
+echo
+echo "e-mail software.services at ecmwf.int"
+echo
+echo "*******************************************************************"
+
+exit 0
+
+
diff --git a/config/config.CRAY b/config/config.CRAY
new file mode 100755
index 0000000..b6efceb
--- /dev/null
+++ b/config/config.CRAY
@@ -0,0 +1,18 @@
+#
+#   Configuration file for CRAY.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CFLAGS  =  -DPOINTER_64
+FASTCFLAGS =  -DPOINTER_64
+#
+FC      = f90
+FFLAGS  = -DREAL_8 -DINTEGER_8 -DCRAY -DPOINTER_64
+VECTFFLAGS  = -DREAL_8 -DINTEGER_8 -DCRAY -DPOINTER_64
+#
+LDFLAGS       = -Wl"-L . -l emos -V"
+#
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.FUJITSU b/config/config.FUJITSU
new file mode 100755
index 0000000..afb74c8
--- /dev/null
+++ b/config/config.FUJITSU
@@ -0,0 +1,25 @@
+#
+#   Configuration file for FUJITSU (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PLATFORM_DEFINES_FORTRAN = -Wp,"-DFUJITSU" -Wp,"-D__uxp__"
+PLATFORM_DEFINES_C = -DFUJITSU -D__uxp__
+#
+#
+CC      = vcc
+CFLAGS  = -K 3 -Wv,-Ps -c -Wv,-m3 $(PLATFORM_DEFINES_C)
+FASTCFLAGS = -O -K3 -Keopt -Kpopt -Wv,-Ps -Wv,-m3 $(PLATFORM_DEFINES_C)
+#
+FC      = frt
+VECTFFLAGS =  -X9 -Aab -Sw -Wv,-v $(PLATFORM_DEFINES_FORTRAN)
+FFLAGS  = -X9 -Aab -Oe,-E,-P,-U -Sw $(PLATFORM_DEFINES_FORTRAN)
+#               |
+#               v
+#           32-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.FUJITSU.in b/config/config.FUJITSU.in
new file mode 100755
index 0000000..7ebffbf
--- /dev/null
+++ b/config/config.FUJITSU.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for FUJITSU (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PLATFORM_DEFINES_FORTRAN = -Wp,"-DFUJITSU" -Wp,"-D__uxp__"
+PLATFORM_DEFINES_C = -DFUJITSU -D__uxp__
+#
+#
+CC      = vcc
+CFLAGS  = -K 3 -Wv,-Ps -c -Wv,-m3 $(PLATFORM_DEFINES_C) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = -O -K3 -Keopt -Kpopt -Wv,-Ps -Wv,-m3 $(PLATFORM_DEFINES_C) -DTABLE_PATH=\"emos\"
+#
+FC      = frt
+VECTFFLAGS =  -X9 -Aab -Sw -Wv,-v $(PLATFORM_DEFINES_FORTRAN) -DTABLE_PATH=\"emos\"
+FFLAGS  = -X9 -Aab -Oe,-E,-P,-U -Sw $(PLATFORM_DEFINES_FORTRAN) -DTABLE_PATH=\"emos\"
+#               |
+#               v
+#           32-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.FUJITSUR64 b/config/config.FUJITSUR64
new file mode 100755
index 0000000..768cac6
--- /dev/null
+++ b/config/config.FUJITSUR64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for FUJITSU (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PLATFORM_DEFINES_FORTRAN = -Wp,"-DFUJITSU" -Wp,"-D__uxp__"
+PLATFORM_DEFINES_C = -DFUJITSU -D__uxp__
+#
+CC      = vcc
+CFLAGS  = -K 3 -Wv,-Ps -c -Wv,-m3 -DREAL_8 $(PLATFORM_DEFINES_C)
+FASTCFLAGS = -O -K3 -Keopt -Kpopt -Wv,-Ps -Wv,-m3 -DREAL_8 $(PLATFORM_DEFINES_C)
+#
+FC      = frt
+VECTFFLAGS = -X9 -Aabd -Sw -Wp,"-DREAL_8" -Wp,"-DREAL_BIGGER_THAN_INTEGER" -Wv,-v $(PLATFORM_DEFINES_FORTRAN)
+FFLAGS = -X9 -Aabd -Oe,-E,-P,-U -Sw -Wp,"-DREAL_8" -Wp,"-DREAL_BIGGER_THAN_INTEGER" $(PLATFORM_DEFINES_FORTRAN)
+#               |
+#               v
+#           64-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.FUJITSUR64.in b/config/config.FUJITSUR64.in
new file mode 100755
index 0000000..704f909
--- /dev/null
+++ b/config/config.FUJITSUR64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for FUJITSU (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PLATFORM_DEFINES_FORTRAN = -Wp,"-DFUJITSU" -Wp,"-D__uxp__"
+PLATFORM_DEFINES_C = -DFUJITSU -D__uxp__
+#
+CC      = vcc
+CFLAGS  = -K 3 -Wv,-Ps -c -Wv,-m3 -DREAL_8 $(PLATFORM_DEFINES_C) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = -O -K3 -Keopt -Kpopt -Wv,-Ps -Wv,-m3 -DREAL_8 $(PLATFORM_DEFINES_C) -DTABLE_PATH=\"emos\"
+#
+FC      = frt
+VECTFFLAGS = -X9 -Aabd -Sw -Wp,"-DREAL_8" -Wp,"-DREAL_BIGGER_THAN_INTEGER" -Wv,-v $(PLATFORM_DEFINES_FORTRAN) -DTABLE_PATH=\"emos\"
+FFLAGS = -X9 -Aabd -Oe,-E,-P,-U -Sw -Wp,"-DREAL_8" -Wp,"-DREAL_BIGGER_THAN_INTEGER" $(PLATFORM_DEFINES_FORTRAN) -DTABLE_PATH=\"emos\"
+#               |
+#               v
+#           64-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.VPP5000 b/config/config.VPP5000
new file mode 100755
index 0000000..bc4859c
--- /dev/null
+++ b/config/config.VPP5000
@@ -0,0 +1,24 @@
+#
+#   Configuration file for FUJITSU (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PLATFORM_DEFINES_FORTRAN = -Wp,"-DFUJITSU" -Wp,"-D__uxp__"
+PLATFORM_DEFINES_C = -DFUJITSU -D__uxp__
+#
+CC      = cc
+CFLAGS  = -K 3 -Wv,-Ps -c -Wv,-m3 -DREAL_8=1 -DPOINTER_64 -DINTEGER_IS_INT $(PLATFORM_DEFINES_C)
+FASTCFLAGS = -O -K3 -Keopt -Kpopt -Wv,-Ps -Wv,-m3 -DREAL_8=1 -DPOINTER_64 -DINTEGER_IS_INT $(PLATFORM_DEFINES_C)
+#
+FC      = frt
+VECTFFLAGS = -X9 -Aabd -Sw -Wp,"-DPOINTER_64" -Wp,"-DREAL_8=1" -Wp,"-DINTEGER_IS_INT" -Wp,"-DREAL_BIGGER_THAN_INTEGER" -Wv,-v $(PLATFORM_DEFINES_FORTRAN)
+FFLAGS = -X9 -Aabd -Oe,-E,-P,-U -Sw -Wp,"-DPOINTER_64" -Wp,"-DREAL_8=1" -Wp,"-DINTEGER_IS_INT" -Wp,"-DREAL_BIGGER_THAN_INTEGER" $(PLATFORM_DEFINES_FORTRAN)
+#            |
+#            v
+#        64-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.VPP5000R64 b/config/config.VPP5000R64
new file mode 100755
index 0000000..013755a
--- /dev/null
+++ b/config/config.VPP5000R64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for VPP5000 (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PLATFORM_DEFINES_FORTRAN = -Wp,"-DFUJITSU" -Wp,"-D__uxp__"
+PLATFORM_DEFINES_C = -DFUJITSU -D__uxp__
+#
+CC      = cc
+CFLAGS  = -K 3 -Wv,-Ps -c -Wv,-m3 -DREAL_8 -DPOINTER_64 -DINTEGER_IS_INT $(PLATFORM_DEFINES_C)
+FASTCFLAGS = -O -K3 -Keopt -Kpopt -Wv,-Ps -Wv,-m3 -DREAL_8 -DPOINTER_64 -DINTEGER_IS_INT $(PLATFORM_DEFINES_C)
+#
+FC      = frt
+VECTFFLAGS = -X9 -Aabd -Sw -Wp,"-DPOINTER_64" -Wp,"-DREAL_8" -Wp,"-DINTEGER_IS_INT" -Wp,"-DREAL_BIGGER_THAN_INTEGER" -Wv,-v $(PLATFORM_DEFINES_FORTRAN)
+FFLAGS = -X9 -Aabd -Oe,-E,-P,-U -Sw -Wp,"-DPOINTER_64" -Wp,"-DREAL_8" -Wp,"-DINTEGER_IS_INT" -Wp,"-DREAL_BIGGER_THAN_INTEGER" $(PLATFORM_DEFINES_FORTRAN)
+#              |
+#              v
+#          64-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.darwin b/config/config.darwin
new file mode 100755
index 0000000..cf27d3d
--- /dev/null
+++ b/config/config.darwin
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 =
+USE_NO_POINTERS =
+LARGE_FILE =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran  -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin.in b/config/config.darwin.in
new file mode 100755
index 0000000..65eff74
--- /dev/null
+++ b/config/config.darwin.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 =
+USE_NO_POINTERS =
+LARGE_FILE =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwinA64 b/config/config.darwinA64
new file mode 100755
index 0000000..2f48cbb
--- /dev/null
+++ b/config/config.darwinA64
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -m64
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwinA64.in b/config/config.darwinA64.in
new file mode 100755
index 0000000..2f48cbb
--- /dev/null
+++ b/config/config.darwinA64.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -m64
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwinR64 b/config/config.darwinR64
new file mode 100755
index 0000000..5721a1d
--- /dev/null
+++ b/config/config.darwinR64
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE =
+CC_A32 =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwinR64.in b/config/config.darwinR64.in
new file mode 100755
index 0000000..f604c3e
--- /dev/null
+++ b/config/config.darwinR64.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE =
+CC_A32 =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwinR64A64 b/config/config.darwinR64A64
new file mode 100755
index 0000000..19377c0
--- /dev/null
+++ b/config/config.darwinR64A64
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+CC_A32 = -m64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwinR64A64.in b/config/config.darwinR64A64.in
new file mode 100755
index 0000000..73fccc9
--- /dev/null
+++ b/config/config.darwinR64A64.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+CC_A32 = -m64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin_g95A64.in b/config/config.darwin_g95A64.in
new file mode 100755
index 0000000..c8a76dc
--- /dev/null
+++ b/config/config.darwin_g95A64.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = -g -O2
+#
+LARGE_FILE =
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -DINTEGER_IS_INT -fno-second-underscore -fsloppy-char -Dlinux -DUSE_NO_POINTERS  -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin_g95R64A64.in b/config/config.darwin_g95R64A64.in
new file mode 100755
index 0000000..8c906a5
--- /dev/null
+++ b/config/config.darwin_g95R64A64.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE =
+#
+DEBUG = -g -O2
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -m64 -DREAL_8 -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(DEBUG)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -r8 -i4 -m64 -Dlinux -fsloppy-char -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin_g95R64_i486.in b/config/config.darwin_g95R64_i486.in
new file mode 100755
index 0000000..6cadf59
--- /dev/null
+++ b/config/config.darwin_g95R64_i486.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE =
+#
+DEBUG = -g -O2
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -m32 -mtune=i486
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -r8 -i4 -m32 -mtune=i486 -fsloppy-char -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin_g95_i486.in b/config/config.darwin_g95_i486.in
new file mode 100755
index 0000000..bd594e3
--- /dev/null
+++ b/config/config.darwin_g95_i486.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG =  -g -O2
+#
+LARGE_FILE =
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -m32 -mtune=i486
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -m32 -mtune=i486 -fsloppy-char -Dlinux -DUSE_NO_POINTERS -fzeros -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin_gfortranR64_i486.in b/config/config.darwin_gfortranR64_i486.in
new file mode 100755
index 0000000..670e11a
--- /dev/null
+++ b/config/config.darwin_gfortranR64_i486.in
@@ -0,0 +1,27 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32 -mtune=i486
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.darwin_gfortran_i486.in b/config/config.darwin_gfortran_i486.in
new file mode 100755
index 0000000..588678b
--- /dev/null
+++ b/config/config.darwin_gfortran_i486.in
@@ -0,0 +1,28 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -m32 -mtune=i486
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.decalpha b/config/config.decalpha
new file mode 100755
index 0000000..7f2b212
--- /dev/null
+++ b/config/config.decalpha
@@ -0,0 +1,14 @@
+#
+#                            configuration file for ALPHA/osf
+#
+CC        = cxx
+CFLAGS    = -O2 -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN
+FASTCFLAGS = -O2 -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN
+FC        = f90
+FFLAGS    = -convert big_endian -O2 -align commons -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN
+VECTFFLAGS= -convert big_endian -O2 -align commons -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN
+ARFLAGS   = rlv 
+
+RANLIB    = /usr/bin/ranlib -t 
+
+CT = /bin/true
diff --git a/config/config.decalpha.in b/config/config.decalpha.in
new file mode 100755
index 0000000..22f7457
--- /dev/null
+++ b/config/config.decalpha.in
@@ -0,0 +1,14 @@
+#
+#                            configuration file for ALPHA/osf
+#
+CC        = cxx
+CFLAGS    = -O2 -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+FC        = f90
+FFLAGS    = -convert big_endian -O2 -align commons -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\"
+VECTFFLAGS= $(FFLAGS)
+ARFLAGS   = rlv 
+
+RANLIB    = /usr/bin/ranlib -t 
+
+CT = /bin/true
diff --git a/config/config.decalphaR64 b/config/config.decalphaR64
new file mode 100755
index 0000000..a9b3696
--- /dev/null
+++ b/config/config.decalphaR64
@@ -0,0 +1,14 @@
+#
+#                            Configuration file for ALPHA, 64-bit reals
+#
+CC        = cxx
+CFLAGS    =  -DREAL_8 -O2 -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN
+FASTCFLAGS = $(CFLAGS)
+FC        = f90
+FFLAGS    = -convert big_endian -O2 -align dcommons -real_size 64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN
+VECTFFLAGS= $(FFLAGS)
+#
+ARFLAGS   = rlv 
+RANLIB    = /usr/bin/ranlib -t 
+
+CT = /bin/true
diff --git a/config/config.decalphaR64.in b/config/config.decalphaR64.in
new file mode 100755
index 0000000..ce8a5de
--- /dev/null
+++ b/config/config.decalphaR64.in
@@ -0,0 +1,14 @@
+#
+#                            Configuration file for ALPHA, 64-bit reals
+#
+CC        = cxx
+CFLAGS    =  -DREAL_8 -O2 -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+FC        = f90
+FFLAGS    = -convert big_endian -O2 -align dcommons -real_size 64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -DPOINTER_64 -D__alpha -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\"
+VECTFFLAGS= $(FFLAGS)
+#
+ARFLAGS   = rlv 
+RANLIB    = /usr/bin/ranlib -t 
+
+CT = /bin/true
diff --git a/config/config.decmips b/config/config.decmips
new file mode 100755
index 0000000..8589431
--- /dev/null
+++ b/config/config.decmips
@@ -0,0 +1,13 @@
+#
+#                            configuration file for ALPHA/osf
+#
+CC        = cxx
+CFLAGS    =  -g
+FASTCFLAGS = 
+FC        = f77
+FFLAGS    = -convert big_endian -g
+VECTFFLAGS= -convert big_endian -g
+#
+ARFLAGS   = rlv 
+RANLIB    = /usr/bin/ranlib
+CT = /bin/true
diff --git a/config/config.hp b/config/config.hp
new file mode 100755
index 0000000..559c5f7
--- /dev/null
+++ b/config/config.hp
@@ -0,0 +1,16 @@
+#
+#                            configuration file for hp
+#
+CC     = cc 
+CFLAGS = -Aa -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 -Dhp
+FASTCFLAGS = -O -Aa -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 -Dhp
+#
+FC     = f77 
+FFLAGS = +ppu -Dhp
+VECTFFLAGS = +ppu -Dhp
+#
+RANLIB = /bin/true
+CT     = /bin/true
+
+
+
diff --git a/config/config.hpia64 b/config/config.hpia64
new file mode 100755
index 0000000..2e9ac9a
--- /dev/null
+++ b/config/config.hpia64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for hpia (32-bit reals, 32-bit integers).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = +O0
+#
+CPPFLAGS= -Dhp  -DPOINTER_64 -DhpiaR32
+#
+CC      = cc
+CFLAGS  = +DD32 -Ae -D_XPG2 -Dhp  -DPOINTER_64 +z -O
+
+FASTCFLAGS= $(CFLAGS)
+#
+FC      = /opt/fortran90/bin/f90
+FFLAGS  = +DD32 -g $(DEBUG) +pic=short
+
+VECTFFLAGS = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+LDFLAGS = -Wl,-B,immediate,-B,nonfatal,+s +s -L . -l emos
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.hpia64.in b/config/config.hpia64.in
new file mode 100755
index 0000000..e84ea4b
--- /dev/null
+++ b/config/config.hpia64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for hpia (32-bit reals, 32-bit integers).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = +O0
+#
+CPPFLAGS= -Dhp  -DPOINTER_64 -DhpiaR32
+#
+CC      = cc
+CFLAGS  = +DD32 -Ae -D_XPG2 -Dhp  -DPOINTER_64 +z -O -DTABLE_PATH=\"emos\"
+
+FASTCFLAGS= $(CFLAGS)
+#
+FC      = /opt/fortran90/bin/f90
+FFLAGS  = +DD32 -g $(DEBUG) +pic=short -DTABLE_PATH=\"emos\"
+
+VECTFFLAGS = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+LDFLAGS = -Wl,-B,immediate,-B,nonfatal,+s +s -L . -l emos
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.hpia64R64 b/config/config.hpia64R64
new file mode 100755
index 0000000..1dd06ca
--- /dev/null
+++ b/config/config.hpia64R64
@@ -0,0 +1,22 @@
+#
+#   Configuration file for hpia (64-bit reals, 64-bit integers).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = +O0
+#
+CPPFLAGS= -Dhp -DhpiaR64 -DREAL_8 -DINTEGER_8 -DJBPW_64 -DPOINTER_64
+#
+CC      = cc
+CFLAGS  = +DD64 -Ae -D_XPG2 -Dhp -DhpiaR64 -DREAL_8 -DINTEGER_8 -DPOINTER_64 +Z -O
+FASTCFLAGS= $(CFLAGS)
+#
+FC      = /opt/fortran90/bin/f90
+FFLAGS  = +DD64  +autodbl $(DEBUG) +pic=long +real_constant=double
+VECTFFLAGS = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+LDFLAGS = -Wl,-B,immediate,-B,nonfatal,+s +s -L . -l emos
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.hpia64R64.in b/config/config.hpia64R64.in
new file mode 100755
index 0000000..91aacbe
--- /dev/null
+++ b/config/config.hpia64R64.in
@@ -0,0 +1,22 @@
+#
+#   Configuration file for hpia (64-bit reals, 64-bit integers).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = +O0
+#
+CPPFLAGS= -Dhp -DhpiaR64 -DREAL_8 -DINTEGER_8 -DJBPW_64 -DPOINTER_64
+#
+CC      = cc
+CFLAGS  = +DD64 -Ae -D_XPG2 -Dhp -DhpiaR64 -DREAL_8 -DINTEGER_8 -DPOINTER_64 +Z -O -DTABLE_PATH=\"emos\"
+FASTCFLAGS= $(CFLAGS)
+#
+FC      = /opt/fortran90/bin/f90
+FFLAGS  = +DD64  +autodbl $(DEBUG) +pic=long +real_constant=double -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+LDFLAGS = -Wl,-B,immediate,-B,nonfatal,+s +s -L . -l emos
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.hppa b/config/config.hppa
new file mode 100755
index 0000000..e85b503
--- /dev/null
+++ b/config/config.hppa
@@ -0,0 +1,28 @@
+#
+#   Configuration file for hp.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CPPFLAGS = -Dhp
+#
+CC      = cc 
+CFLAGS  = -Aa +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp +z +O1 +DA2.0
+
+FASTCFLAGS = -Aa +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp +z +O1 +DA2.0
+
+FC      = f90
+FFLAGS  = +z +U77 +O2 -Dhp +FPD +DA2.0
+
+VECTFFLAGS  = +z +U77 +O2 -Dhp +FPD +DA2.0
+NOOPTFFLAGS = +z +U77 -Dhp +FPD +DA2.0
+#
+LDFLAGS   = -Wl,-B,immediate,-B,nonfatal,+s 
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
+
+
diff --git a/config/config.hppa.in b/config/config.hppa.in
new file mode 100755
index 0000000..834b30d
--- /dev/null
+++ b/config/config.hppa.in
@@ -0,0 +1,28 @@
+#
+#   Configuration file for hp.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CPPFLAGS = -Dhp
+#
+CC      = cc 
+CFLAGS  = -Aa +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp +z +O1 +DA2.0 -DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = -Aa +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp +z +O1 +DA2.0 -DTABLE_PATH=\"emos\"
+
+FC      = f90
+FFLAGS  = +z +U77 +O2 -Dhp +FPD +DA2.0 -DTABLE_PATH=\"emos\"
+
+VECTFFLAGS  = +z +U77 +O2 -Dhp +FPD +DA2.0 -DTABLE_PATH=\"emos\"
+NOOPTFFLAGS = +z +U77 -Dhp +FPD +DA2.0 -DTABLE_PATH=\"emos\"
+#
+LDFLAGS   = -Wl,-B,immediate,-B,nonfatal,+s 
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
+
+
diff --git a/config/config.hppaR64 b/config/config.hppaR64
new file mode 100755
index 0000000..937bca2
--- /dev/null
+++ b/config/config.hppaR64
@@ -0,0 +1,25 @@
+#
+#   Configuration file for hp (64-bit reals, 64-bit integers).
+#
+AR      = ar
+ARFLAGS = rv
+#
+CPPFLAGS= -Dhp -DhpR64 -DREAL_8 -DINTEGER_8 -DJBPW_64 -DPOINTER_64
+#
+CC      = cc 
+CFLAGS  = -Ae +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp -DhpR64 -DREAL_8 -DINTEGER_8 -DPOINTER_64 +z +O1 +DA2.0
+FASTCFLAGS= -Ae +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp -DhpR64 -DREAL_8 -DINTEGER_8 -DPOINTER_64 +z +O1 +DA2.0
+#
+FC      = f90
+FFLAGS  = +z +U77 +autodbl +O2 -Dhp +FPD +DA2.0 +pic=long +real_constant=double
+VECTFFLAGS = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+# LDFLAGS   = -Wl,-B,immediate,-B,nonfatal,+s +s -L . -l emos
+LDFLAGS = -Wl,-B,immediate,-B,nonfatal,+s +s
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.hppaR64.in b/config/config.hppaR64.in
new file mode 100755
index 0000000..5d1b673
--- /dev/null
+++ b/config/config.hppaR64.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for hp (64-bit reals, 64-bit integers).
+#
+AR      = ar
+ARFLAGS = rv
+#
+CPPFLAGS= -Dhp -DhpR64 -DREAL_8 -DINTEGER_8 -DJBPW_64 -DPOINTER_64
+#
+CC      = cc 
+CFLAGS  = -Ae +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp -DhpR64 -DREAL_8 -DINTEGER_8 -DPOINTER_64 +z +O1 +DA2.0
+FASTCFLAGS= -Ae +e -D_INCLUDE_HPUX_SOURCE -D_INCLUDE_XOPEN_SOURCE \
+-D_INCLUDE_AES_SOURCE -D_INCLUDE_POSIX_SOURCE -D_XPG2 \
+-DFORTRAN_NO_UNDERSCORE -Dhp -DhpR64 -DREAL_8 -DINTEGER_8 -DPOINTER_64 +z +O1 +DA2.0 -DTABLE_PATH=\"emos\"
+#
+FC      = f90
+FFLAGS  = +z +U77 +autodbl +O2 -Dhp +FPD +DA2.0 +pic=long +real_constant=double -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+# LDFLAGS   = -Wl,-B,immediate,-B,nonfatal,+s +s -L . -l emos
+LDFLAGS = -Wl,-B,immediate,-B,nonfatal,+s +s
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.i686R64 b/config/config.i686R64
new file mode 100755
index 0000000..dc1614b
--- /dev/null
+++ b/config/config.i686R64
@@ -0,0 +1,21 @@
+#
+#   Configuration file for i686 (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = cc
+CFLAGS  = -g -DREAL_8
+FASTCFLAGS = -g -DREAL_8
+#
+FC      = f90
+VECTFFLAGS = -Ad -Wp,"-Dlinux" -Wp,"-DREAL_8" -Wp,"-DREAL_BIGGER_THAN_INTEGER" -Wv,-v
+FFLAGS =     -Ad -Wp,"-Dlinux" -Wp,"-DREAL_8" -Wp,"-DREAL_BIGGER_THAN_INTEGER"
+#            |
+#            v
+#        64-bit reals
+#
+LDFLAGS = -L . -l emos$(R64)
+RANLIB  = /bin/true
+CT      = /bin/true
+NPROC   = 1
diff --git a/config/config.i86pc b/config/config.i86pc
new file mode 100755
index 0000000..2f987fe
--- /dev/null
+++ b/config/config.i86pc
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = /opt/SUNWspro/bin/cc
+CFLAGS  = -xO0
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = /opt/SUNWspro/bin/f90
+FFLAGS  = -ftrap=invalid,overflow,no%underflow,division
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.i86pc.in b/config/config.i86pc.in
new file mode 100755
index 0000000..6040a8d
--- /dev/null
+++ b/config/config.i86pc.in
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = /opt/SUNWspro/bin/cc
+CFLAGS  = -xO0
+FASTCFLAGS = $(CFLAGS) -DTABLE_PATH=\"emos\"
+#
+FC      = /opt/SUNWspro/bin/f90
+FFLAGS  = -ftrap=invalid,overflow,no%underflow,division -DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.i86pcR64 b/config/config.i86pcR64
new file mode 100755
index 0000000..30f206e
--- /dev/null
+++ b/config/config.i86pcR64
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = /opt/SUNWspro/bin/cc
+CFLAGS  = -xO0 -DREAL_8
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = /opt/SUNWspro/bin/f90
+FFLAGS  = -ftrap=invalid,overflow,no%underflow,division -DREAL_8 -DR64 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.i86pcR64.in b/config/config.i86pcR64.in
new file mode 100755
index 0000000..e9ed028
--- /dev/null
+++ b/config/config.i86pcR64.in
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = /opt/SUNWspro/bin/cc
+CFLAGS  = -xO0 -DREAL_8 -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = /opt/SUNWspro/bin/f90
+FFLAGS  = -ftrap=invalid,overflow,no%underflow,division -DREAL_8 -DR64 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power4 b/config/config.ibm_power4
new file mode 100755
index 0000000..7792487
--- /dev/null
+++ b/config/config.ibm_power4
@@ -0,0 +1,25 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+PROFILE=
+DEBUG=-O3
+#
+CC      = xlc_r
+
+
+CFLAGS  = $(DEBUG) $(PROFILE) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+
+FASTCFLAGS = $(DEBUG) $(PROFILE) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) $(PROFILE) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qflttrap=overflow:zerodivide:invalid:enable:imprecise -qfixed=72 -qintlog
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power4.in b/config/config.ibm_power4.in
new file mode 100755
index 0000000..56ea952
--- /dev/null
+++ b/config/config.ibm_power4.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+DEBUG=-O3
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = $(DEBUG)-qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qflttrap=overflow:zerodivide:invalid:enable:imprecise -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power4R64 b/config/config.ibm_power4R64
new file mode 100755
index 0000000..5086a56
--- /dev/null
+++ b/config/config.ibm_power4R64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+PROFILE=
+DEBUG=-O3
+#
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+
+FASTCFLAGS =  $(DEBUG) -qstrict -qinline -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qflttrap=overflow:zerodivide:invalid:enable:imprecise -qfixed=72 -qintlog
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power4R64.in b/config/config.ibm_power4R64.in
new file mode 100755
index 0000000..8972fd4
--- /dev/null
+++ b/config/config.ibm_power4R64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for rs6000 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+DEBUG=-O3
+#
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+
+FASTCFLAGS =  $(DEBUG) -qstrict -qinline -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qflttrap=overflow:zerodivide:invalid:enable:imprecise -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power6 b/config/config.ibm_power6
new file mode 100755
index 0000000..31f1265
--- /dev/null
+++ b/config/config.ibm_power6
@@ -0,0 +1,25 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+PROFILE=
+DEBUG=-O3
+#
+CC      = xlc_r
+
+
+CFLAGS  = $(DEBUG) $(PROFILE) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+
+FASTCFLAGS = $(DEBUG) $(PROFILE) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) $(PROFILE) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qfixed=72 -qintlog
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power6.in b/config/config.ibm_power6.in
new file mode 100755
index 0000000..043458b
--- /dev/null
+++ b/config/config.ibm_power6.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+DEBUG=-O3
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = $(DEBUG)-qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG)-qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power6R64 b/config/config.ibm_power6R64
new file mode 100755
index 0000000..02e192e
--- /dev/null
+++ b/config/config.ibm_power6R64
@@ -0,0 +1,27 @@
+#
+#   Configuration file for ibm_power6 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+PROFILE=
+DEBUG=-O3
+
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+
+FASTCFLAGS =  $(DEBUG) -qstrict -qinline -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qfixed=72 -qintlog
+
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power6R64.in b/config/config.ibm_power6R64.in
new file mode 100755
index 0000000..7f345db
--- /dev/null
+++ b/config/config.ibm_power6R64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for ibm_power6 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+DEBUG=-O3
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = -g -O3 -qstrict -qinline -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power7 b/config/config.ibm_power7
new file mode 100755
index 0000000..31f1265
--- /dev/null
+++ b/config/config.ibm_power7
@@ -0,0 +1,25 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+PROFILE=
+DEBUG=-O3
+#
+CC      = xlc_r
+
+
+CFLAGS  = $(DEBUG) $(PROFILE) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+
+FASTCFLAGS = $(DEBUG) $(PROFILE) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) $(PROFILE) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qfixed=72 -qintlog
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power7.in b/config/config.ibm_power7.in
new file mode 100755
index 0000000..043458b
--- /dev/null
+++ b/config/config.ibm_power7.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+DEBUG=-O3
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = $(DEBUG)-qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG)-qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power7R64 b/config/config.ibm_power7R64
new file mode 100755
index 0000000..02e192e
--- /dev/null
+++ b/config/config.ibm_power7R64
@@ -0,0 +1,27 @@
+#
+#   Configuration file for ibm_power6 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+PROFILE=
+DEBUG=-O3
+
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+
+FASTCFLAGS =  $(DEBUG) -qstrict -qinline -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qfixed=72 -qintlog
+
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.ibm_power7R64.in b/config/config.ibm_power7R64.in
new file mode 100755
index 0000000..7f345db
--- /dev/null
+++ b/config/config.ibm_power7R64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for ibm_power6 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+OLI=-qwarn64
+#
+CC      = xlc_r
+DEBUG=-O3
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = -g -O3 -qstrict -qinline -q64 $(OLI) -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -WF,-DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.itanium b/config/config.itanium
new file mode 100755
index 0000000..c5f674c
--- /dev/null
+++ b/config/config.itanium
@@ -0,0 +1,22 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux
+CC_A32 = -m32
+#
+CC      = gcc
+CFLAGS  = -g -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = /opt/intel/fc/9.0/bin/ifort
+FFLAGS = -i4 -r4 -Dlinux -DLITTLE_ENDIAN -convert big_endian
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.itanium.in b/config/config.itanium.in
new file mode 100755
index 0000000..c0d3ddf
--- /dev/null
+++ b/config/config.itanium.in
@@ -0,0 +1,21 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux
+#
+CC      = gcc
+CFLAGS  = -g -DLITTLE_ENDIAN -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = -i4 -r4 -Dlinux -DLITTLE_ENDIAN -DINTEGER_IS_INT -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.itaniumR64 b/config/config.itaniumR64
new file mode 100755
index 0000000..b8e700c
--- /dev/null
+++ b/config/config.itaniumR64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG=-g
+#
+LARGE_FILE = -Dlinux
+CC_A32 = -m32
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = /opt/intel/fc/9.0/bin/ifort
+FFLAGS = $(DEBUG) -i4 -r8 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -convert big_endian -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.itaniumR64.in b/config/config.itaniumR64.in
new file mode 100755
index 0000000..aadc3f7
--- /dev/null
+++ b/config/config.itaniumR64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG=-g
+#
+LARGE_FILE = -Dlinux
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN $(LOCAL_CFLAGS) $(LARGE_FILE) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = $(DEBUG) -i4 -r8 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Vaxlib -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux b/config/config.linux
new file mode 100755
index 0000000..c216fa7
--- /dev/null
+++ b/config/config.linux
@@ -0,0 +1,22 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+CC      = pgcc
+CFLAGS  = -g -tp px $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = -i4 -r4 -tp px -Dlinux
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux.in b/config/config.linux.in
new file mode 100755
index 0000000..2e92589
--- /dev/null
+++ b/config/config.linux.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+CFLAGS  = $(DEBUG) -tp px -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) -i4 -r4 -tp px -Dlinux -Mextend -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linuxA64 b/config/config.linuxA64
new file mode 100755
index 0000000..19822e3
--- /dev/null
+++ b/config/config.linuxA64
@@ -0,0 +1,21 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+#
+CC      = pgcc
+
+CFLAGS  = -g -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = -g -i4 -r4 -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -fast -Kieee -Mvect=prefetch
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linuxA64.in b/config/config.linuxA64.in
new file mode 100755
index 0000000..6b90544
--- /dev/null
+++ b/config/config.linuxA64.in
@@ -0,0 +1,24 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r4 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linuxR64 b/config/config.linuxR64
new file mode 100755
index 0000000..71b5f55
--- /dev/null
+++ b/config/config.linuxR64
@@ -0,0 +1,21 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+CC      = pgcc
+CFLAGS  = -g -tp px -DREAL_8 $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  -g -i4 -r8 -tp px -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linuxR64.in b/config/config.linuxR64.in
new file mode 100755
index 0000000..4dbdaaf
--- /dev/null
+++ b/config/config.linuxR64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+CFLAGS  = $(DEBUG) -tp px -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) -i4 -r8 -tp px -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Mextend -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linuxR64A64 b/config/config.linuxR64A64
new file mode 100755
index 0000000..518f53b
--- /dev/null
+++ b/config/config.linuxR64A64
@@ -0,0 +1,21 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+#
+CC      = pgcc
+
+CFLAGS  = -g -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = -g -i4 -r8 -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -fast -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linuxR64A64.in b/config/config.linuxR64A64.in
new file mode 100755
index 0000000..0ce4648
--- /dev/null
+++ b/config/config.linuxR64A64.in
@@ -0,0 +1,24 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r8 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN  -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Mextend -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linuxR64_shared b/config/config.linuxR64_shared
new file mode 100755
index 0000000..e9c3e3c
--- /dev/null
+++ b/config/config.linuxR64_shared
@@ -0,0 +1,28 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+#DEBUG = -O2
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64
+CC_A32 = -m32
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) $(PROFILE)  -i4 -r8 -tp px -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(USE_NO_POINTERS) -DLITTLE_ENDIAN
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_amd b/config/config.linux_amd
new file mode 100755
index 0000000..55b5ef6
--- /dev/null
+++ b/config/config.linux_amd
@@ -0,0 +1,28 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+PROFILE=
+#
+DEBUG = -O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE)  -i4 -r4 -tp px -Dlinux -DLITTLE_ENDIAN $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_amd.in b/config/config.linux_amd.in
new file mode 100755
index 0000000..51068a4
--- /dev/null
+++ b/config/config.linux_amd.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+CFLAGS  = $(DEBUG) -tp px -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) -i4 -r4 -tp px -Dlinux -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_amdA64 b/config/config.linux_amdA64
new file mode 100755
index 0000000..29f8779
--- /dev/null
+++ b/config/config.linux_amdA64
@@ -0,0 +1,25 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG=-O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -m64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(DEBUG) $(PROFILE) -m64 $(MEM_MAP)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r4 -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -fast -Kieee -Mvect=prefetch $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_amdA64.in b/config/config.linux_amdA64.in
new file mode 100755
index 0000000..406f993
--- /dev/null
+++ b/config/config.linux_amdA64.in
@@ -0,0 +1,24 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r4 -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_amdR64 b/config/config.linux_amdR64
new file mode 100755
index 0000000..b20e563
--- /dev/null
+++ b/config/config.linux_amdR64
@@ -0,0 +1,31 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG = -O3
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUGF) $(PROFILE) -i4 -r8 -tp px -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(USE_NO_POINTERS) -DLITTLE_ENDIAN $(MEM_MAP)
+
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_amdR64.in b/config/config.linux_amdR64.in
new file mode 100755
index 0000000..35490d7
--- /dev/null
+++ b/config/config.linux_amdR64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+CFLAGS  = $(DEBUG) -tp px -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) -i4 -r8 -tp px -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_amdR64A64 b/config/config.linux_amdR64A64
new file mode 100755
index 0000000..7c6bd7b
--- /dev/null
+++ b/config/config.linux_amdR64A64
@@ -0,0 +1,28 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG=-O3
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -m64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(DEBUG) $(PROFILE) -m64
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r8 -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_amdR64A64.in b/config/config.linux_amdR64A64.in
new file mode 100755
index 0000000..31314f0
--- /dev/null
+++ b/config/config.linux_amdR64A64.in
@@ -0,0 +1,24 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r8 -tp k8-64 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN  -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_core2 b/config/config.linux_core2
new file mode 100755
index 0000000..55b5ef6
--- /dev/null
+++ b/config/config.linux_core2
@@ -0,0 +1,28 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+PROFILE=
+#
+DEBUG = -O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE)  -i4 -r4 -tp px -Dlinux -DLITTLE_ENDIAN $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_core2.in b/config/config.linux_core2.in
new file mode 100755
index 0000000..51068a4
--- /dev/null
+++ b/config/config.linux_core2.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+CFLAGS  = $(DEBUG) -tp px -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) -i4 -r4 -tp px -Dlinux -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_core2A64 b/config/config.linux_core2A64
new file mode 100755
index 0000000..2dc1f7a
--- /dev/null
+++ b/config/config.linux_core2A64
@@ -0,0 +1,25 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG=-O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -m64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(DEBUG) $(PROFILE) -m64 $(MEM_MAP)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r4 -tp core2 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -fast -Kieee -Mvect=prefetch $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_core2A64.in b/config/config.linux_core2A64.in
new file mode 100755
index 0000000..6b90544
--- /dev/null
+++ b/config/config.linux_core2A64.in
@@ -0,0 +1,24 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r4 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_core2R64 b/config/config.linux_core2R64
new file mode 100755
index 0000000..344f4d1
--- /dev/null
+++ b/config/config.linux_core2R64
@@ -0,0 +1,31 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG = -O3
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUGF) $(PROFILE) -i4 -r8 -tp core2 -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(USE_NO_POINTERS) -DLITTLE_ENDIAN $(MEM_MAP)
+
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_core2R64.in b/config/config.linux_core2R64.in
new file mode 100755
index 0000000..0f2add3
--- /dev/null
+++ b/config/config.linux_core2R64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+CFLAGS  = $(DEBUG) -tp core2 -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS =  $(DEBUG) -i4 -r8 -tp core2 -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_core2R64A64 b/config/config.linux_core2R64A64
new file mode 100755
index 0000000..f1c7d45
--- /dev/null
+++ b/config/config.linux_core2R64A64
@@ -0,0 +1,28 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG=-O3
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -m64 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(DEBUG) $(PROFILE) -m64
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r8 -tp core2 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_core2R64A64.in b/config/config.linux_core2R64A64.in
new file mode 100755
index 0000000..fb59a76
--- /dev/null
+++ b/config/config.linux_core2R64A64.in
@@ -0,0 +1,24 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r8 -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN  -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_g95.in b/config/config.linux_g95.in
new file mode 100755
index 0000000..f42182c
--- /dev/null
+++ b/config/config.linux_g95.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG =  -g -O2
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -m32
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -fsloppy-char -Dlinux -DUSE_NO_POINTERS -fzeros -DTABLE_PATH=\"emos\" -m32
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_g95A64.in b/config/config.linux_g95A64.in
new file mode 100755
index 0000000..c2dafd8
--- /dev/null
+++ b/config/config.linux_g95A64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG =  -g -O2
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -DINTEGER_IS_INT -fno-second-underscore -fsloppy-char -Dlinux -DUSE_NO_POINTERS  -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_g95R64.in b/config/config.linux_g95R64.in
new file mode 100755
index 0000000..1a97649
--- /dev/null
+++ b/config/config.linux_g95R64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG =  -g -O2
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -m32
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -r8 -i4 -fsloppy-char -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" -m32
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_g95R64A64.in b/config/config.linux_g95R64A64.in
new file mode 100755
index 0000000..b3ed690
--- /dev/null
+++ b/config/config.linux_g95R64A64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -g -O2
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -m64 -DREAL_8 -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(DEBUG)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -r8 -i4 -m64 -Dlinux -fsloppy-char -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortran b/config/config.linux_gfortran
new file mode 100755
index 0000000..5c969b3
--- /dev/null
+++ b/config/config.linux_gfortran
@@ -0,0 +1,28 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+#CC_A32 = -m32
+CC_A32 =
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortran.in b/config/config.linux_gfortran.in
new file mode 100755
index 0000000..5b77022
--- /dev/null
+++ b/config/config.linux_gfortran.in
@@ -0,0 +1,27 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -m32
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortranA64 b/config/config.linux_gfortranA64
new file mode 100755
index 0000000..0980fb8
--- /dev/null
+++ b/config/config.linux_gfortranA64
@@ -0,0 +1,27 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+#CC_A32 = -m64
+CC_A32 =
+USE_NO_POINTERS = -DPOINTER_64 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DPOINTER_64 -DLITTLE_ENDIAN -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DLITTLE_ENDIAN -DINTEGER_IS_INT
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortranA64.in b/config/config.linux_gfortranA64.in
new file mode 100755
index 0000000..764b1c0
--- /dev/null
+++ b/config/config.linux_gfortranA64.in
@@ -0,0 +1,27 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+#CC_A32 = -m64
+CC_A32 =
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortranR64 b/config/config.linux_gfortranR64
new file mode 100755
index 0000000..a556756
--- /dev/null
+++ b/config/config.linux_gfortranR64
@@ -0,0 +1,27 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#CC_A32 = -m32
+CC_A32 =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Dgfortran -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortranR64.in b/config/config.linux_gfortranR64.in
new file mode 100755
index 0000000..7332371
--- /dev/null
+++ b/config/config.linux_gfortranR64.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortranR64A64 b/config/config.linux_gfortranR64A64
new file mode 100755
index 0000000..9794920
--- /dev/null
+++ b/config/config.linux_gfortranR64A64
@@ -0,0 +1,30 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+# This doesn't work for gfortran
+#CC_A32 = -m64
+CC_A32 =-m64 -Ofast -flto -march=native -funroll-loops
+CC_A32 =
+GFORTRAN_EXTRA=-march=native -ffast-math -funroll-loops -O3
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN -DPOINTER_64 $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DLITTLE_ENDIAN $(GFORTRAN_EXTRA)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gfortranR64A64.in b/config/config.linux_gfortranR64A64.in
new file mode 100755
index 0000000..9ec1e85
--- /dev/null
+++ b/config/config.linux_gfortranR64A64.in
@@ -0,0 +1,27 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#CC_A32 = -m64
+CC_A32 =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DTABLE_PATH=\"emos\" -DLITTLE_ENDIAN
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnu b/config/config.linux_gnu
new file mode 100755
index 0000000..b2af380
--- /dev/null
+++ b/config/config.linux_gnu
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = 
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -fno-second-underscore -Dlinux -DUSE_NO_POINTERS
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnu.in b/config/config.linux_gnu.in
new file mode 100755
index 0000000..6a58e17
--- /dev/null
+++ b/config/config.linux_gnu.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = 
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -g -fzeros -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnuA64 b/config/config.linux_gnuA64
new file mode 100755
index 0000000..365f7a1
--- /dev/null
+++ b/config/config.linux_gnuA64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = 
+#
+#
+CC = gcc
+CFLAGS  = $(DEBUG) -DINTEGER_IS_INT  $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -DINTEGER_IS_INT -fno-second-underscore -Dlinux -DUSE_NO_POINTERS
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnuA64.in b/config/config.linux_gnuA64.in
new file mode 100755
index 0000000..2e670bc
--- /dev/null
+++ b/config/config.linux_gnuA64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = 
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -DINTEGER_IS_INT -fno-second-underscore -Dlinux -DUSE_NO_POINTERS  -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnuR64 b/config/config.linux_gnuR64
new file mode 100755
index 0000000..29306f7
--- /dev/null
+++ b/config/config.linux_gnuR64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = 
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnuR64.in b/config/config.linux_gnuR64.in
new file mode 100755
index 0000000..5dd4394
--- /dev/null
+++ b/config/config.linux_gnuR64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = 
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnuR64A64 b/config/config.linux_gnuR64A64
new file mode 100755
index 0000000..171ec93
--- /dev/null
+++ b/config/config.linux_gnuR64A64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = 
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_gnuR64A64.in b/config/config.linux_gnuR64A64.in
new file mode 100755
index 0000000..aaddaf3
--- /dev/null
+++ b/config/config.linux_gnuR64A64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -g
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(DEBUG)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -I. -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_intel b/config/config.linux_intel
new file mode 100755
index 0000000..093c517
--- /dev/null
+++ b/config/config.linux_intel
@@ -0,0 +1,22 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = 
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = $(DEBUG) -i4 -r4 -Dlinux -DLITTLE_ENDIAN -DINTEGER_IS_INT
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_intel.in b/config/config.linux_intel.in
new file mode 100755
index 0000000..dfb86ad
--- /dev/null
+++ b/config/config.linux_intel.in
@@ -0,0 +1,22 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = 
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = $(DEBUG) -i4 -r4 -Dlinux -DLITTLE_ENDIAN -DINTEGER_IS_INT -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_intelA64.in b/config/config.linux_intelA64.in
new file mode 100755
index 0000000..dfb86ad
--- /dev/null
+++ b/config/config.linux_intelA64.in
@@ -0,0 +1,22 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = 
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = $(DEBUG) -i4 -r4 -Dlinux -DLITTLE_ENDIAN -DINTEGER_IS_INT -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_intelR64 b/config/config.linux_intelR64
new file mode 100755
index 0000000..5404d14
--- /dev/null
+++ b/config/config.linux_intelR64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG=-g
+DEBUG=-O3
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) -i4 -r8 -Dlinux -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_intelR64.in b/config/config.linux_intelR64.in
new file mode 100755
index 0000000..14139ab
--- /dev/null
+++ b/config/config.linux_intelR64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG=-g
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = $(DEBUG) -i4 -r8 -Dlinux -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Vaxlib -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_intelR64A64.in b/config/config.linux_intelR64A64.in
new file mode 100755
index 0000000..14139ab
--- /dev/null
+++ b/config/config.linux_intelR64A64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG=-g
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT $(LOCAL_CFLAGS) $(LARGE_FILE) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = ifort
+FFLAGS = $(DEBUG) -i4 -r8 -Dlinux -DLITTLE_ENDIAN -DPOINTER_64 -DINTEGER_IS_INT -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Vaxlib -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_pgf90 b/config/config.linux_pgf90
new file mode 100755
index 0000000..71cfb33
--- /dev/null
+++ b/config/config.linux_pgf90
@@ -0,0 +1,28 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+PROFILE=
+#
+DEBUG = -O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -m32
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf90
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r4 -tp px -Dlinux -DLITTLE_ENDIAN $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.linux_pgf90R64 b/config/config.linux_pgf90R64
new file mode 100755
index 0000000..58ca60d
--- /dev/null
+++ b/config/config.linux_pgf90R64
@@ -0,0 +1,34 @@
+#
+#   Configuration file for linux (64-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG = -O3
+USE_NO_POINTERS = 
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE 
+# -D_LARGEFILE64_SOURCE  proposed by Peter Towers
+#
+CC_A32 = -m32
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DLITTLE_ENDIAN $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf90
+FFLAGS =  $(DEBUGF) $(PROFILE) -i4 -r8 -tp px -Dlinux -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(USE_NO_POINTERS) -DLITTLE_ENDIAN $(MEM_MAP)
+
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64 b/config/config.linux_x86_64
new file mode 100755
index 0000000..50b6186
--- /dev/null
+++ b/config/config.linux_x86_64
@@ -0,0 +1,28 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG=-O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#COMP = nehalem
+COMP =
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -m32 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+#FASTCFLAGS = $(DEBUG) $(PROFILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r4 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -fast -Kieee -Mvect=prefetch $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64.in b/config/config.linux_x86_64.in
new file mode 100755
index 0000000..de12bc6
--- /dev/null
+++ b/config/config.linux_x86_64.in
@@ -0,0 +1,25 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+COMP =
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -tp px -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r4 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64A64 b/config/config.linux_x86_64A64
new file mode 100755
index 0000000..f610591
--- /dev/null
+++ b/config/config.linux_x86_64A64
@@ -0,0 +1,28 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG=-O3
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#COMP = nehalem-64
+COMP =
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+#FASTCFLAGS = $(DEBUG) $(PROFILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r4 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -fast -Kieee -Mvect=prefetch $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64A64.in b/config/config.linux_x86_64A64.in
new file mode 100755
index 0000000..bbcac6d
--- /dev/null
+++ b/config/config.linux_x86_64A64.in
@@ -0,0 +1,25 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+COMP =
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r4 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64R64 b/config/config.linux_x86_64R64
new file mode 100755
index 0000000..f04eab0
--- /dev/null
+++ b/config/config.linux_x86_64R64
@@ -0,0 +1,31 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG=-O3
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#COMP = nehalem
+COMP =
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -m32 -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+#FASTCFLAGS = $(DEBUG) $(PROFILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r8 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64R64.in b/config/config.linux_x86_64R64.in
new file mode 100755
index 0000000..77ac430
--- /dev/null
+++ b/config/config.linux_x86_64R64.in
@@ -0,0 +1,25 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+COMP =
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG) -tp px -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r8 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN  -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64R64A64 b/config/config.linux_x86_64R64A64
new file mode 100755
index 0000000..ed268d8
--- /dev/null
+++ b/config/config.linux_x86_64R64A64
@@ -0,0 +1,31 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+SHLIB=-fPIC
+DYNLINKFLAGS=-shared
+PROFILE=
+DEBUG=-O3
+DEBUGF = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+#COMP = nehalem-64
+COMP =
+#
+CC      = gcc
+
+CFLAGS  = $(DEBUG) $(PROFILE) -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+#FASTCFLAGS = $(DEBUG) $(PROFILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUGF) $(PROFILE) -i4 -r8 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.linux_x86_64R64A64.in b/config/config.linux_x86_64R64A64.in
new file mode 100755
index 0000000..8a859f9
--- /dev/null
+++ b/config/config.linux_x86_64R64A64.in
@@ -0,0 +1,25 @@
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -Dlinux -DFOPEN64
+#
+DEBUG = -fast
+MEM_MAP = -D_FILE_OFFSET_BITS=64
+#
+COMP =
+#
+CC      = pgcc
+
+CFLAGS  = $(DEBUG)  -DPOINTER_64 -DINTEGER_IS_INT -DLITTLE_ENDIAN -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) $(MEM_MAP)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = pgf77
+FFLAGS = $(DEBUG) -i4 -r8 $(COMP) -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -DLITTLE_ENDIAN  -Kieee -Mvect=prefetch -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" $(MEM_MAP)
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB  = /usr/bin/ranlib
diff --git a/config/config.mac_intel b/config/config.mac_intel
new file mode 100755
index 0000000..4d4a887
--- /dev/null
+++ b/config/config.mac_intel
@@ -0,0 +1,23 @@
+#
+#   Configuration file for mac (32-bit reals).
+#
+AR = ar
+ARFLAGS = ru
+#
+LARGE_FILE =
+#
+#
+CPP = cpp -C -P -xassembler-with-cpp -traditional
+CC = icc
+CFLAGS = -w -O3 -ip $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC = ifort
+FFLAGS = -O3 -unroll0 -xT -fno-alias -ip -w -align all -fno-alias -fp-model precise -convert big_endian
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.mac_intel.in b/config/config.mac_intel.in
new file mode 100755
index 0000000..98053ca
--- /dev/null
+++ b/config/config.mac_intel.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for mac (32-bit reals).
+#
+AR = ar
+ARFLAGS = ru
+#
+LARGE_FILE =
+#
+#
+CPP = cpp -C -P -xassembler-with-cpp -traditional
+CC = icc
+CFLAGS = -w -O3 -ip -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC = ifort
+FFLAGS = -O3 -unroll0 -xT -fno-alias -ip -w -align all -fno-alias -fp-model precise -convert big_endian -DTABLE_PATH=\"emos\"
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB = /usr/bin/ranlib
+
diff --git a/config/config.mac_intelR64 b/config/config.mac_intelR64
new file mode 100755
index 0000000..5e554c2
--- /dev/null
+++ b/config/config.mac_intelR64
@@ -0,0 +1,23 @@
+#
+#   Configuration file for mac (64-bit reals).
+#
+AR = ar
+ARFLAGS = ru
+#
+LARGE_FILE =
+#
+#
+CPP = cpp -C -P -xassembler-with-cpp -traditional
+CC = icc
+CFLAGS = -w -O3 -ip -DREAL_8 -DTABLE_PATH=\"/usr/local/bufr/lib\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC = ifort
+FFLAGS = -O3 -i4 -r8 -unroll0 -xT -fno-alias -ip -w -align all -fno-alias -fp-model precise -convert big_endian -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"/usr/local/bufr/lib\"
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB = /usr/bin/ranlib
+
diff --git a/config/config.mac_intelR64.in b/config/config.mac_intelR64.in
new file mode 100755
index 0000000..5c11454
--- /dev/null
+++ b/config/config.mac_intelR64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for mac (64-bit reals).
+#
+AR = ar
+ARFLAGS = ru
+#
+LARGE_FILE =
+#
+#
+CPP = cpp -C -P -xassembler-with-cpp -traditional
+CC = icc
+CFLAGS = -w -O3 -ip -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC = ifort
+FFLAGS = -O3 -i4 -r8 -unroll0 -xT -fno-alias -ip -w -align all -fno-alias -fp-model precise -convert big_endian -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS =  $(FFLAGS)
+#              |
+#              v
+#          64-bit reals
+#
+RANLIB = /usr/bin/ranlib
+
diff --git a/config/config.ppc b/config/config.ppc
new file mode 100755
index 0000000..bad57e0
--- /dev/null
+++ b/config/config.ppc
@@ -0,0 +1,28 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -mcpu=G4 -mtune=G4
+USE_NO_POINTERS = 
+LARGE_FILE =
+#
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DPOWERPC
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc.in b/config/config.ppc.in
new file mode 100755
index 0000000..641bcc9
--- /dev/null
+++ b/config/config.ppc.in
@@ -0,0 +1,28 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -mcpu=G4 -mtune=G4
+USE_NO_POINTERS = 
+LARGE_FILE =
+#
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppcR64 b/config/config.ppcR64
new file mode 100755
index 0000000..206450c
--- /dev/null
+++ b/config/config.ppcR64
@@ -0,0 +1,27 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE =
+CC_A32 = -mcpu=G4 -mtune=G4
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Dgfortran -DPOWERPC
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppcR64.in b/config/config.ppcR64.in
new file mode 100755
index 0000000..a6d74b8
--- /dev/null
+++ b/config/config.ppcR64.in
@@ -0,0 +1,27 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE =
+CC_A32 = -mcpu=G4 -mtune=G4
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppcR64_G5 b/config/config.ppcR64_G5
new file mode 100755
index 0000000..b09434f
--- /dev/null
+++ b/config/config.ppcR64_G5
@@ -0,0 +1,26 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+CC_A32 = -mcpu=G5 -mtune=G5
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DPOWERPC
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppcR64_G5.in b/config/config.ppcR64_G5.in
new file mode 100755
index 0000000..715780b
--- /dev/null
+++ b/config/config.ppcR64_G5.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+CC_A32 = -mcpu=G5 -mtune=G5
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_G5 b/config/config.ppc_G5
new file mode 100755
index 0000000..aaf2537
--- /dev/null
+++ b/config/config.ppc_G5
@@ -0,0 +1,26 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -mcpu=G5 -mtune=G5
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DPOWERPC
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_G5.in b/config/config.ppc_G5.in
new file mode 100755
index 0000000..60be9b9
--- /dev/null
+++ b/config/config.ppc_G5.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -mcpu=G5 -mtune=G5
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE =
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_g95.in b/config/config.ppc_g95.in
new file mode 100755
index 0000000..6549cba
--- /dev/null
+++ b/config/config.ppc_g95.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG =  -g -O2
+#
+LARGE_FILE =
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -mcpu=G4 -mtune=G4 -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -DPOWERPC -mcpu=G4 -mtune=G4 -fsloppy-char -Dlinux -DUSE_NO_POINTERS -fzeros -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_g95R64.in b/config/config.ppc_g95R64.in
new file mode 100755
index 0000000..165f1a0
--- /dev/null
+++ b/config/config.ppc_g95R64.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE =
+#
+DEBUG = -g -O2
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -mcpu=G4 -mtune=G4 -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -r8 -i4 -DPOWERPC -mcpu=G4 -mtune=G4 -fsloppy-char -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_g95R64_G5.in b/config/config.ppc_g95R64_G5.in
new file mode 100755
index 0000000..67e7008
--- /dev/null
+++ b/config/config.ppc_g95R64_G5.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE =
+#
+DEBUG = -g -O2
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -mcpu=G5 -mtune=G5 -DREAL_8 -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC
+FASTCFLAGS = $(DEBUG)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -fno-second-underscore -r8 -i4 -mcpu=G5 -mtune=G5 -Dlinux -fsloppy-char -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\" -DPOWERPC
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_g95_G5.in b/config/config.ppc_g95_G5.in
new file mode 100755
index 0000000..6c97d00
--- /dev/null
+++ b/config/config.ppc_g95_G5.in
@@ -0,0 +1,25 @@
+#
+#   Configuration file for darwin (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = -g -O2
+#
+LARGE_FILE =
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DINTEGER_IS_INT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE) -mcpu=G5 -mtune=G5 -DPOWERPC
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g95
+FFLAGS = $(DEBUG) -DINTEGER_IS_INT -DPOWERPC -fno-second-underscore -fsloppy-char -mcpu=G5 -mtune=G5 -Dlinux -DUSE_NO_POINTERS  -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_gfortran.in b/config/config.ppc_gfortran.in
new file mode 100755
index 0000000..3ee94ec
--- /dev/null
+++ b/config/config.ppc_gfortran.in
@@ -0,0 +1,28 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -mcpu=G4 -mtune=G4
+USE_NO_POINTERS = 
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_gfortranR64.in b/config/config.ppc_gfortranR64.in
new file mode 100755
index 0000000..386ac7b
--- /dev/null
+++ b/config/config.ppc_gfortranR64.in
@@ -0,0 +1,27 @@
+#
+#   Configuration file for powerpc G4 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS =
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -mcpu=G4 -mtune=G4
+#
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_gfortranR64_G5.in b/config/config.ppc_gfortranR64_G5.in
new file mode 100755
index 0000000..2877b50
--- /dev/null
+++ b/config/config.ppc_gfortranR64_G5.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+CC_A32 = -mcpu=G5 -mtune=G5
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DREAL_8 -DPOINTER_64 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fdefault-real-8 -fcray-pointer -fno-second-underscore -Dlinux $(USE_NO_POINTERS) -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DINTEGER_IS_INT -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.ppc_gfortran_G5.in b/config/config.ppc_gfortran_G5.in
new file mode 100755
index 0000000..2939382
--- /dev/null
+++ b/config/config.ppc_gfortran_G5.in
@@ -0,0 +1,26 @@
+#
+#   Configuration file for powerpc G5 (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+PROFILE=
+DEBUG = -O2
+CC_A32 = -mcpu=G5 -mtune=G5
+USE_NO_POINTERS = -DPOINTER_64
+LARGE_FILE = -Dlinux -DFOPEN64 -D_LARGEFILE64_SOURCE
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(PROFILE) -DPOINTER_64 -DINTEGER_IS_INT $(CC_A32) $(LOCAL_CFLAGS) $(LARGE_FILE) -DPOWERPC -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = gfortran
+FFLAGS = $(DEBUG) $(PROFILE) $(CC_A32) -fcray-pointer -fno-second-underscore -Dlinux -DINTEGER_IS_INT $(USE_NO_POINTERS) -Dgfortran -DPOWERPC -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.rs6000 b/config/config.rs6000
new file mode 100755
index 0000000..47eef4e
--- /dev/null
+++ b/config/config.rs6000
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000.
+#
+AR      = ar
+ARFLAGS = rv
+#
+SHAREDMEM = -DSHAREDMEMORY
+PROFILE=
+DEBUG=-O3
+#
+UNDERSCORE=with
+#
+include ../config/fortran_underscore$(UNDERSCORE)
+
+CC      = cc
+CFLAGS = $(DEBUG) $(PROFILE) -qstrict -qarch=pwr3 -qtune=pwr3 $(SHAREDMEM) $(UNDERSCORE_CFLAGS) -DIBM -Drs6000
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = xlf
+FFLAGS  = $(DEBUG) $(PROFILE) $(UNDERSCORE_FFLAGS) -qstrict -qarch=pwr3 -qtune=pwr3
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000.in b/config/config.rs6000.in
new file mode 100755
index 0000000..2e4fd44
--- /dev/null
+++ b/config/config.rs6000.in
@@ -0,0 +1,22 @@
+#
+#   Configuration file for rs6000.
+#
+AR      = ar
+ARFLAGS = rv
+#
+SHAREDMEM = -DSHAREDMEMORY
+#
+UNDERSCORE=with
+#
+include ../config/fortran_underscore$(UNDERSCORE)
+
+CC      = cc
+CFLAGS = -g -O3 -qstrict -qarch=pwr3 -qtune=pwr3 $(SHAREDMEM) $(UNDERSCORE_CFLAGS) -DIBM -Drs6000 -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = xlf
+FFLAGS  = -g -O3 $(UNDERSCORE_FFLAGS) -qstrict -qarch=pwr3 -qtune=pwr3 -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000A64 b/config/config.rs6000A64
new file mode 100755
index 0000000..5b9d8c9
--- /dev/null
+++ b/config/config.rs6000A64
@@ -0,0 +1,27 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+PROFILE=
+DEBUG=-O3
+#
+SHAREDMEM = -DSHAREDMEMORY
+#
+UNDERSCORE=with
+include ../config/fortran_underscore$(UNDERSCORE)
+#
+CC      = xlc_r
+CFLAGS  = $(DEBUG) $(PROFILE) $(SHAREDMEM) -qstrict -q64 -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DFOPEN64
+
+FASTCFLAGS = $(DEBUG) $(PROFILE) -qstrict -q64 -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) $(PROFILE) $(UNDERSCORE_FFLAGS) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qfixed=72 -qintlog
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000A64.in b/config/config.rs6000A64.in
new file mode 100755
index 0000000..cd94dca
--- /dev/null
+++ b/config/config.rs6000A64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000 (32-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+PROFILE=
+DEBUG=-O3
+#
+CC      = xlc_r
+
+
+CFLAGS  = $(DEBUG) $(PROFILE) -qstrict -q64 -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -DTABLE_PATH=\"emos\"
+
+FASTCFLAGS = $(DEBUG) $(PROFILE) -qstrict -q64 -qarch=auto -qtune=auto -DIBM -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) $(PROFILE) -qstrict -q64 -qextname -qarch=auto -qtune=auto -qwarn64 -qrealsize=4 -qintsize=4 -qalign=4k -qnosource -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000R64 b/config/config.rs6000R64
new file mode 100755
index 0000000..0503de0
--- /dev/null
+++ b/config/config.rs6000R64
@@ -0,0 +1,25 @@
+#
+#   Configuration file for rs6000 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = rv
+#
+SHAREDMEM = -DSHAREDMEMORY
+#
+UNDERSCORE=with
+PROFILE=
+DEBUG=-O3
+#
+include ../config/fortran_underscore$(UNDERSCORE)
+#
+#
+CC      = cc
+CFLAGS  = $(DEBUG) $(PROFILE) $(SHAREDMEM) -DREAL_BIGGER_THAN_INTEGER -DREAL_8  $(UNDERSCORE_CFLAGS) -DIBM -Drs6000 -qstrict -qarch=pwr3 -qtune=pwr3 -DFOPEN64 
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = xlf
+FFLAGS  = $(DEBUG) $(PROFILE) $(UNDERSCORE_FFLAGS) -qrealsize=8 -qintsize=4 -qalign=4k -qnosource -qstrict -qarch=pwr3 -qtune=pwr3
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000R64.in b/config/config.rs6000R64.in
new file mode 100755
index 0000000..a6c78dc
--- /dev/null
+++ b/config/config.rs6000R64.in
@@ -0,0 +1,20 @@
+#
+#   Configuration file for rs6000 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = rv
+#
+SHAREDMEM = -DSHAREDMEMORY
+#
+DEBUG = -O3
+#
+CC      = cc
+CFLAGS  = $(SHAREDMEM) $(DEBUG) -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -Drs6000 -qstrict -qarch=pwr3 -qtune=pwr3 -DFOPEN64 -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = xlf
+FFLAGS  = $(DEBUG) -qextname -qrealsize=8 -qintsize=4 -qalign=4k -qnosource -qstrict -qarch=pwr3 -qtune=pwr3 -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000R64A64 b/config/config.rs6000R64A64
new file mode 100755
index 0000000..60b5754
--- /dev/null
+++ b/config/config.rs6000R64A64
@@ -0,0 +1,28 @@
+#
+#   Configuration file for rs6000 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+#
+SHAREDMEM = -DSHAREDMEMORY
+#
+UNDERSCORE=with
+PROFILE=
+DEBUG=-O3
+#
+include ../config/fortran_underscore$(UNDERSCORE)
+#
+CC      = xlc_r
+CFLAGS  = $(DEBUG) $(PROFILE) $(SHAREDMEM) -qstrict -q64 -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DFOPEN64
+
+FASTCFLAGS =  $(DEBUG) -qstrict -qinline -q64 -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) $(PROFILE) $(UNDERSCORE_FFLAGS) -qstrict -q64 -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qfixed=72 -qintlog
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.rs6000R64A64.in b/config/config.rs6000R64A64.in
new file mode 100755
index 0000000..61761a7
--- /dev/null
+++ b/config/config.rs6000R64A64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for rs6000 (64-bit REALs).
+#
+AR      = ar
+ARFLAGS = -r -v -X64
+#
+CC      = xlc_r
+PROFILE=
+DEBUG=-O3
+
+
+CFLAGS  = $(DEBUG) -qstrict -q64 -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -DTABLE_PATH=\"emos\"
+
+FASTCFLAGS =  $(DEBUG) -qstrict -qinline -q64 -qarch=auto -qtune=auto -DREAL_BIGGER_THAN_INTEGER -DREAL_8 -DIBM -DIBM_POWER4 -Drs6000 -DPOINTER_64 -DINTEGER_IS_INT -DSHAREDMEMORY -DFOPEN64 -DTABLE_PATH=\"emos\"
+#
+FC      = xlf90_r
+CPPFLAGS=-DREAL_BIGGER_THAN_INTEGER,-DREAL_8,-DIBM,-Drs6000,-DPOINTER_64,-DINTEGER_IS_INT,-DIBM_POWER4,-DSHAREDMEMORY,-DFOPEN64
+
+FFLAGS  = -qsigtrap $(DEBUG) -qstrict -q64 -qarch=auto -qtune=auto -qwarn64 -qrealsize=8 -qintsize=4 -qalign=4k -qsource -qfixed=72 -qintlog -WF,-DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+NOOPTFFLAGS = $(FFLAGS)
+#
+RANLIB  = /bin/ranlib
+CT      = /bin/true
diff --git a/config/config.sgimips b/config/config.sgimips
new file mode 100755
index 0000000..f111869
--- /dev/null
+++ b/config/config.sgimips
@@ -0,0 +1,28 @@
+#
+#   Configuration file for sgimips (32-bit reals).
+#
+#
+.SUFFIXES: .o .c .F
+#
+AR      = ar
+ARFLAGS = rv
+RANLIB  = /bin/true
+CT      = cleartool
+#
+CFLAGS  = $(DEBUG)
+FASTCFLAGS = $(DEBUG)
+#
+FC      = f77
+FFLAGS  = $(DEBUG)
+VECTFFLAGS  = $(DEBUG)
+#
+#
+#       32-bit reals (default).
+#
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+#
diff --git a/config/config.sgimips.in b/config/config.sgimips.in
new file mode 100755
index 0000000..e3d80da
--- /dev/null
+++ b/config/config.sgimips.in
@@ -0,0 +1,28 @@
+#
+#   Configuration file for sgimips (32-bit reals).
+#
+#
+.SUFFIXES: .o .c .F
+#
+AR      = ar
+ARFLAGS = rv
+RANLIB  = /bin/true
+CT      = cleartool
+#
+CFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = f77
+FFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(DEBUG)
+#
+#
+#       32-bit reals (default).
+#
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+#
diff --git a/config/config.sgimipsR64 b/config/config.sgimipsR64
new file mode 100755
index 0000000..90a0f57
--- /dev/null
+++ b/config/config.sgimipsR64
@@ -0,0 +1,29 @@
+#
+#   Configuration file for sgimips (64-bit reals).
+#
+#
+.SUFFIXES: .o .c .F
+#
+AR      = ar
+ARFLAGS = rv
+RANLIB  = /bin/true
+CT      = cleartool
+#
+CFLAGS = $(DEBUG) -DREAL_8
+FASTCFLAGS = $(DEBUG) -DREAL_8
+#
+FC      = f77
+FFLAGS = -align64 -r8 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(DEBUG)
+VECTFFLAGS = $(FFLAGS)
+#
+#              |
+#              v
+#            64-bit reals.
+#
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+#
diff --git a/config/config.sgimipsR64.in b/config/config.sgimipsR64.in
new file mode 100755
index 0000000..0fa71d8
--- /dev/null
+++ b/config/config.sgimipsR64.in
@@ -0,0 +1,29 @@
+#
+#   Configuration file for sgimips (64-bit reals).
+#
+#
+.SUFFIXES: .o .c .F
+#
+AR      = ar
+ARFLAGS = rv
+RANLIB  = /bin/true
+CT      = cleartool
+#
+CFLAGS = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\"
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = f77
+FFLAGS = -align64 -r8 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER $(DEBUG) -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#
+#              |
+#              v
+#            64-bit reals.
+#
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+#
diff --git a/config/config.sun4 b/config/config.sun4
new file mode 100755
index 0000000..efa02eb
--- /dev/null
+++ b/config/config.sun4
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = cc
+CFLAGS  =
+FASTCFLAGS = -O
+#
+FC      = f90
+FFLAGS  = -f77 -ftrap=%none
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.sun4.in b/config/config.sun4.in
new file mode 100755
index 0000000..7907f27
--- /dev/null
+++ b/config/config.sun4.in
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4.
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = cc
+CFLAGS  = -DTABLE_PATH=\"emos\"
+FASTCFLAGS = -O -DTABLE_PATH=\"emos\"
+#
+FC      = f90
+FFLAGS  = -f77 -ftrap=%none -O1 -g -DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.sun4R64 b/config/config.sun4R64
new file mode 100755
index 0000000..768b368
--- /dev/null
+++ b/config/config.sun4R64
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4. (64-bit REALs)
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = cc
+CFLAGS  = -DREAL_8
+FASTCFLAGS = -O -DREAL_8
+#
+FC      = f90
+FFLAGS  = -f77 -ftrap=%none -dalign -xtypemap=real:64,double:64,integer:32 -DREAL_8 -DR64 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.sun4R64.in b/config/config.sun4R64.in
new file mode 100755
index 0000000..515905b
--- /dev/null
+++ b/config/config.sun4R64.in
@@ -0,0 +1,16 @@
+#
+#   Configuration file for sun4. (64-bit REALs)
+#
+AR      = ar
+ARFLAGS = rv
+#
+CC      = cc
+CFLAGS  = -DREAL_8 -DTABLE_PATH=\"emos\"
+FASTCFLAGS = -O -DREAL_8 -DTABLE_PATH=\"emos\"
+#
+FC      = f90
+FFLAGS  = -f77 -ftrap=%none -dalign -O1 -g -xtypemap=real:64,double:64,integer:32 -DREAL_8 -DR64 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS  = $(FFLAGS)
+#
+RANLIB  = /usr/bin/ranlib
+CT      = /bin/true
diff --git a/config/config.sun4_gnu b/config/config.sun4_gnu
new file mode 100755
index 0000000..125b827
--- /dev/null
+++ b/config/config.sun4_gnu
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -DFOPEN64
+#
+DEBUG = 
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -fno-second-underscore -Dlinux -DUSE_NO_POINTERS
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.sun4_gnu.in b/config/config.sun4_gnu.in
new file mode 100755
index 0000000..1a0d0e8
--- /dev/null
+++ b/config/config.sun4_gnu.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = 
+#
+LARGE_FILE = -DFOPEN64
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -g -fzeros -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.sun4_gnuR64 b/config/config.sun4_gnuR64
new file mode 100755
index 0000000..63cafac
--- /dev/null
+++ b/config/config.sun4_gnuR64
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+DEBUG = 
+#
+LARGE_FILE = -DFOPEN64
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.sun4_gnuR64.in b/config/config.sun4_gnuR64.in
new file mode 100755
index 0000000..c05fbf8
--- /dev/null
+++ b/config/config.sun4_gnuR64.in
@@ -0,0 +1,24 @@
+#
+#   Configuration file for linux (32-bit reals).
+#
+AR      = ar
+ARFLAGS = rv
+#
+LARGE_FILE = -DFOPEN64
+#
+DEBUG = 
+#
+#
+CC      = gcc
+CFLAGS  = $(DEBUG) -DREAL_8 -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = g77
+FFLAGS = $(DEBUG) -fno-second-underscore -Dlinux -DUSE_NO_POINTERS -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /usr/bin/ranlib
+
diff --git a/config/config.super-uxR64.in b/config/config.super-uxR64.in
new file mode 100755
index 0000000..93d9318
--- /dev/null
+++ b/config/config.super-uxR64.in
@@ -0,0 +1,23 @@
+#
+#   Configuration file for NEC SX cross-compiler (64-bit reals).
+#
+AR      = sxar
+ARFLAGS = -rv
+#
+DEBUG =
+LARGE_FILE =
+#
+#
+CC      = sxmpicc
+CFLAGS  = $(DEBUG) -Chopt -pi auto -pvctl,fullmsg,loopcnt=1000000 -DINTEGER_IS_INT -DNECSX -USX -DMPI -DREAL_8 -DR64 -DREENTRANT -DTABLE_PATH=\"emos\" $(LOCAL_CFLAGS) $(LARGE_FILE)
+FASTCFLAGS = $(CFLAGS)
+#
+FC      = sxmpif90
+FFLAGS =  $(DEBUG) -Pstack -C hopt -Wf,-pvctl,noassume,loopcnt=1000000 -eb -Wf"-L fmtlist transform -pvctl fullmsg -ptr byte -pvctl vwork=stack -O extendreorder" -DNECSX -USX -DMPI -DREAL_8 -DR64 -DREAL_BIGGER_THAN_INTEGER -Wf"-A idbl4" -DTABLE_PATH=\"emos\"
+VECTFFLAGS = $(FFLAGS)
+#              |
+#              v
+#          32-bit reals
+#
+RANLIB  = /bin/true
+LDFLAGS =
diff --git a/config/fortran2c b/config/fortran2c
new file mode 100755
index 0000000..96159e6
--- /dev/null
+++ b/config/fortran2c
@@ -0,0 +1,7 @@
+
+#FORTRAN2C = -lpgf90 -lpgf90_rpm1 -lpgf902 -lpgf90rtl -lpgftnrtl -lpghpf -lpgc -lpgf90 -lc
+FORTRAN2C = -L/usr/local/apps/pgi/pgi-5.2-4/linux86/lib -lpgftnrtl -lnspgc -lpgc  -lgcc -lc -lndbm -lm
+FORTRAN2C = -pgf77libs -pgf90libs -lpgftnrtl -lnspgc -lpgc  -lgcc -lc -lndbm -lm
+
+# for ECMWF only
+#-L/usr/local/apps/pgi/pgi-5.2-4/linux86/lib
diff --git a/config/fortran2c_g95 b/config/fortran2c_g95
new file mode 100755
index 0000000..5e73a88
--- /dev/null
+++ b/config/fortran2c_g95
@@ -0,0 +1,3 @@
+
+FORTRAN2C = -lf95 -lgcc
+
diff --git a/config/fortran2c_gfortran b/config/fortran2c_gfortran
new file mode 100755
index 0000000..680ee4c
--- /dev/null
+++ b/config/fortran2c_gfortran
@@ -0,0 +1,3 @@
+
+FORTRAN2C = -lgfortran
+
diff --git a/config/fortran2c_gnu b/config/fortran2c_gnu
new file mode 100755
index 0000000..c121126
--- /dev/null
+++ b/config/fortran2c_gnu
@@ -0,0 +1,3 @@
+
+FORTRAN2C = -lg2c  -lgcc
+
diff --git a/config/fortran_underscore b/config/fortran_underscore
new file mode 100755
index 0000000..766b028
--- /dev/null
+++ b/config/fortran_underscore
@@ -0,0 +1,2 @@
+UNDERSCORE_CFLAGS=-DFORTRAN_NO_UNDERSCORE
+UNDERSCORE_FFLAGS= -qnoextname 
diff --git a/config/fortran_underscorewith b/config/fortran_underscorewith
new file mode 100755
index 0000000..7f913e0
--- /dev/null
+++ b/config/fortran_underscorewith
@@ -0,0 +1,2 @@
+UNDERSCORE_CFLAGS=
+UNDERSCORE_FFLAGS= -qextname 
diff --git a/crexdc/Makefile b/crexdc/Makefile
new file mode 100755
index 0000000..97e8578
--- /dev/null
+++ b/crexdc/Makefile
@@ -0,0 +1,30 @@
+#
+#                                 Makefile for crexdc
+#
+LIBRARY = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+#$(LIBRARY) : $(LIBRARY)($(OBJECTS))
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS) *.f
diff --git a/crexdc/Makefile.in b/crexdc/Makefile.in
new file mode 100755
index 0000000..ff20c0d
--- /dev/null
+++ b/crexdc/Makefile.in
@@ -0,0 +1,35 @@
+#
+#                                 Makefile for crexdc
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+LIB = depl
+#
+LIBRARY = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS) *.f
diff --git a/crexdc/Makefile.shared b/crexdc/Makefile.shared
new file mode 100755
index 0000000..c44375a
--- /dev/null
+++ b/crexdc/Makefile.shared
@@ -0,0 +1,30 @@
+#
+#                                 Makefile for crexdc
+#
+LIBRARY = ../lib$(LIB)$(R64).so
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+PROFILE=$(SHLIB)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(LD) $(DYNLINKFLAGS) $? -o $@
+
+clean:
+	\rm -f $(OBJECTS) *.f
diff --git a/crexdc/crex_get_name_unit.F b/crexdc/crex_get_name_unit.F
new file mode 100755
index 0000000..c0c1167
--- /dev/null
+++ b/crexdc/crex_get_name_unit.F
@@ -0,0 +1,103 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREX_GET_NAME_UNIT(KREFERENCE,YNAME,YUNIT)
+C
+C**** *CREX_GET_NAME_UNIT*
+
+C
+C
+C     PURPOSE.
+C     --------
+C          FIND NAME AND THE UNIT FOR THE PARTICULAR REFERENCE NUMBER.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREX_GET_NAME_UNIT(KREFERENCE,YNAME,YUNIT)*
+C
+C
+C        INPUT : *KREFERENCE* - TABLE B REFERENCE NUMBER
+C        OUTPUT:
+C                *CNAMES*     -  ARRAY CONTAINING ELEMENT NAMES
+C                *CUNITS*     -  ARRAY CONTAINING ELEMENT UNITS
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/01/2006.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+
+C
+      CHARACTER*64 YNAME
+      CHARACTER*24 YUNIT
+C
+C
+      COMMON/CREXTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1                NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2                NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array 
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR     - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C     
+       COMMON/CREXTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+      CHARACTER CREXNAME*64,CREXUNIT*24
+      CHARACTER*6  CREXLST
+C
+      ICLASS=KREFERENCE/1000
+      IYYY  =KREFERENCE-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+      I=NCREXP(ICLASS,IYYY)
+      YNAME=CREXNAME(I)
+      YUNIT=CREXUNIT(I)
+C
+      RETURN
+      END
diff --git a/crexdc/crexdes.F b/crexdc/crexdes.F
new file mode 100755
index 0000000..ed83542
--- /dev/null
+++ b/crexdc/crexdes.F
@@ -0,0 +1,265 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXDES(K,KSEC1,KTDLEN,CREXKTDLST,KDLEN,KDATA,KELEM,
+     1                   KTDEXL,CREXKTDEXP,CNAMES,CUNITS,KERR)
+C
+C**** *CREXDES*
+C
+C
+C     PURPOSE.
+C     --------
+C           EXPAND DATA DESCRIPTORS TO SHOW USER TEMPLATE 
+C           DESCRIBED BY ARRAY KTDLST AND KDATA
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *CREXDES(K,KSEC1,KTDLEN,CREXKTDLST,KDLEN,KDATA,KELEM,
+C                           KTDEXL,CREXKTDEXP,CNAMES,CUNITS,KERR)*
+C
+C
+C
+C        INPUT :
+C               *K*       -   AN INTEGER, PRINTING SWITCH 0 - NO PRINT
+C                                                         1 - PRINT
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C                           
+C                            Crex Edition 2
+C
+C                            
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+C
+C               *KTDLEN*  -  Integer number of data descriptors in the list
+C               *CREXKTDLST* Integer array of at least ktdlen words
+C               *KDLEN*   -  Integer (dimension of kdata array)
+C               *KDATA*   -  Integer array containing data needed for data
+C                            descriptor expansion (delayed replication factors)
+C                            which appear in the values array
+C               *KELEM*   -
+C        OUTPUT:
+C
+C               *KTDEXL   -  An integer containing number of expanded elements
+C
+C               *KTDEXP*  -  An integer array containing expanded list of descriptors
+C
+C               *CNAMES*  -  Character*64  array of KELEM containing
+C                            CREX Table B element names
+C               *CUNITS*  -  Character*24 array of KELEM containig
+C                            CREX Table B units
+C               *VALUES*  -  Real*8 array of KVALS containing expanded
+C                            data values
+C               *KERR*    -  returned error code
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/2003.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+C
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+      COMMON /CREL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1              NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 3
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+
+      CHARACTER*15  FMT
+      CHARACTER*6  CREXKTDLST(KELEM)
+      CHARACTER*6 CREXKTDEXP(KELEM)
+C
+      INTEGER IVALUE(KELEM)
+C
+      INTEGER IVAL,IIVAL
+c
+      REAL*8 EPS
+      REAL*8 RVIND
+      REAL*8 VAL
+C
+      CHARACTER*64 CNAMES(kelem)
+      CHARACTER*24 CUNITS(kelem)
+
+      DIMENSION KSEC0(JSEC0),KSEC1(JSEC1)
+C
+      CHARACTER*4 CECMWF
+C
+C     ------------------------------------------------------------------
+C
+c*         1. Set Constants
+c             ----------------
+ 100  CONTINUE
+c
+      KERR=0
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL CREXIVAR(KERR)
+         CECMWF='ECMF'
+      END IF
+c
+c*         2. Load Crex Tables
+c             ----------------
+ 200  CONTINUE
+c
+      CALL CREXETAB(KSEC1,KERR)
+      IF(KERR.GT.0) RETURN
+
+c
+c*         3.1 Expand Data Descriptors
+c              -----------------------
+c
+ 310  CONTINUE
+c
+      KPT=0
+      CALL CREXEDD(KPT,KTDLEN,CREXKTDLST,KDLEN,KDATA,KSEC3,
+     1             KELEM,CNAMES,CUNITS,KERR)
+      IF(KERR.GT.0) RETURN
+C
+      KTDEXL =M
+      DO 301 I=1,KTDEXL
+      WRITE(CREXKTDEXP(I),'(i6.6)') NCREXWTR(I)
+      IF(CREXKTDEXP(I)(1:1).EQ.'0') CREXKTDEXP(I)(1:1)="B"
+ 301  CONTINUE
+C
+      IF(K.EQ.1) THEN
+C
+         WRITE(*,'(1H ,//)')
+         WRITE(*,'(1H ,A)')    '       DATA DESCRIPTORS (UNEXPANDED)'
+C
+         WRITE(*,'(1H )')
+         DO 110 I=1,KTDLEN
+          IF(CREXKTDLST(I)(1:1).EQ.'3') CREXKTDLST(I)(1:1)="D"
+          IF(CREXKTDLST(I)(1:1).EQ.'2') CREXKTDLST(I)(1:1)="C"
+          IF(CREXKTDLST(I)(1:1).EQ.'1') CREXKTDLST(I)(1:1)="R"
+          IF(CREXKTDLST(I)(1:1).EQ.'0') CREXKTDLST(I)(1:1)="B"
+          WRITE(*,'(1H ,I4,2X,A)') I,CREXKTDLST(I)
+ 110     CONTINUE
+C
+         WRITE(*,'(1H ,/)')
+         WRITE(*,'(1H ,A)')    '       DATA DESCRIPTORS (EXPANDED)'
+         WRITE(*,'(1H )')
+         WRITE(*,'(1H ,A,A)')'                ELEMENT NAME',
+     1   '                            UNIT'
+         WRITE(*,'(1H )')
+C
+         DO 120 I=1,KTDEXL
+          WRITE(*,'(1H ,I5,2X,A,2X,A,2X,A)') I,CREXKTDEXP(I),
+     1                      CNAMES(I)(1:40),CUNITS(I)(1:18)
+ 120     CONTINUE
+      END IF
+C
+C
+C     -----------------------------------------------------------------
+      RETURN
+C
+      END
diff --git a/crexdc/crexedd.F b/crexdc/crexedd.F
new file mode 100755
index 0000000..aad8d56
--- /dev/null
+++ b/crexdc/crexedd.F
@@ -0,0 +1,309 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXEDD(KPT,KTDLEN,CREXLST,KDLEN,KDATA,KSEC3,
+     1             KELEM,CNAMES,CUNITS,KERR)
+C
+C**** *CREXEDD*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          Expand Crex data descriptors
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXETD( KPT,KTDLEN,CREXLST,KDLEN,KDATA,KSEC3,
+C                           KVALS,VALUES,KELEM,KERR)*
+C
+C        INPUT :
+C               *KPT*     -  POINTER TO KDATA ARRAY
+C               *KTDLEN*  -  number of data descriptors in section 1
+C               *KTDLST*  -  array containing data descriptors in section 1
+C               *KDLEN*   -  DIMENSION OF KDATA ARRAY
+C               *KDATA*   -  ARRAY CONTAINING DATA NEEDED FOR DESCRIPTOR
+C                            EXPANSION ( delayed replications)
+C               *KSEC3*   -  Integer array of 4 words containing
+C
+C                            KSEC3( 1)-- Reserved
+C                            KSEC3( 2)-- Reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- Reserved
+C                            data values
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C        OUTPUT:
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C      -------
+C
+C          Expands list of data descriptors in section 1
+C     of Crex message. Working tables for further data decoding are set,
+C     list of Crex data descriptors and a list of expanded Crex data descriptors
+C     according to table D reference are returned respectively.
+C
+C
+C
+
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C------------------------------------------------------------------------------------
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON/CRTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1              NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2              NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR     - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+      COMMON /CRTABC/ CREXNAME(JTAB),CREXUNIT(JTAB)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+c
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2              NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3              NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4              NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+C
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+      COMMON /CREL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1              NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 3
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+      CHARACTER*64 CREXWTEN
+      CHARACTER*24 CREXWTU
+C
+      CHARACTER*64 CREXNAME
+      CHARACTER*24 CREXUNIT
+C
+      CHARACTER*(*) CREXLST(*)
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+C
+      DIMENSION ISTACK(JELEM),IISTACK(JELEM)
+C
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+C
+      REAL*8 RVIND,EPS
+c
+C     ------------------------------------------------------------------
+C
+C*          1.   EXPAND PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+CC     -----------------------------------------------------------------
+C
+C*          2.   EXPAND DATA DESCRIPTORS.
+C                ------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1  CALCULATE EXPECTED NUMBER OF DATA DESCRIPTORS.
+C                ----------------------------------------------
+C                AND INITIALIZE NUMBER OF DATA VALUES PER SUB-SET.
+C                -------------------------------------------------
+ 210  CONTINUE
+C
+      J = 0
+      M = 0
+      KPT=0
+      NCREXWT=0
+      NCREXTDLEN=ktdlen
+C
+C
+C*          2.2  PUT DATA DESCRIPTORS IN STACK.
+C                -----------------------------------------
+ 220  CONTINUE
+C
+      DO 221 JJ=1,KTDLEN
+C
+      if(CREXLST(JJ)(1:1).eq.'D') CREXLST(JJ)(1:1)='3'
+      if(CREXLST(JJ)(1:1).eq.'B') CREXLST(JJ)(1:1)='0'
+      if(CREXLST(JJ)(1:1).eq.'C') CREXLST(JJ)(1:1)='2'
+      if(CREXLST(JJ)(1:1).eq.'R') CREXLST(JJ)(1:1)='1'
+c
+      IOS=0
+      READ( CREXLST(JJ),'(i6.6)',IOSTAT=IOS) ISTACK(JJ)
+      IF(IOS.NE.0) THEN
+         print*,'Internal read error in CREXLST.'
+         print*,'NCREXTDLEN=ktdlen=',NCREXTDLEN
+         print*,jj,' CREXLST(JJ)=',CREXLST(JJ)
+         kerr=35
+         RETURN
+      END IF
+C
+      IISTACK(JJ)=ISTACK(JJ)
+C
+ 221  CONTINUE
+C
+      JMAX=NCREXTDLEN
+C     ------------------------------------------------------------------
+C*          2.3  GET NEXT DESCRIPTOR FROM THE STACK.
+C                -----------------------------------
+ 230  CONTINUE
+C
+C
+      J   = J + 1
+      IF(J.GT.JMAX) GO TO 300
+C
+      IDD = ISTACK(J)
+      IF(IDD.EQ.0)  GO TO 230
+C
+      IF = IDD/100000
+C
+C     ------------------------------------------------------------------
+C*          2.4  CHECK IF IT IS REPLICATION DESCRIPTOR.
+C                --------------------------------------
+ 240  CONTINUE
+C
+      IF( IF.EQ.0) THEN
+C
+C*          2.6  ELEMENT DESCRIPTOR, SO UPDATE WORKING TABLE.
+C                --------------------------------------------
+ 260     CONTINUE
+C
+         CALL CREXEPWT(IDD,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.1) THEN
+C
+C*          2.4.1     SOLVE REPLICATION PROBLEM.
+C                     --------------------------
+C
+C
+         CALL CREXREP(KPT,KDLEN,KDATA,J,JMAX,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.2) THEN
+C
+C*          2.5.3 PROCESS OPERATOR.
+C                 -----------------
+            CALL CREXOPER(KPT,KDLEN,KDATA,J,IDD,ISTACK,KERR)
+            IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.3) THEN
+C
+C*          2.5.2 REPLACE BY LIST OF DESCRIPTORS FROM TABLE *D.
+C                 ---------------------------------------------
+            CALL CREXETDR(J,JMAX,IDD,ISTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NCREXSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+      ELSE
+         KERR=37
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      GO TO 230
+C
+C     ------------------------------------------------------------------
+C
+C*          3. COLLECT  SUPPLEMENTARY ITEMS.
+C              -----------------------------
+ 300  CONTINUE
+C
+      NCREXTDEXL =M
+      DO 301 I=1,NCREXTDEXL
+      NCREXTDEXP(I)=NCREXWTR(I)
+      CNAMES(I)=CREXWTEN(I)
+      CUNITS(I)=CREXWTU(I)
+ 301  CONTINUE
+C
+      DO 302 I=1,NCREXTDLEN
+      NCREXTDLST (I)=IISTACK(I)
+ 302  CONTINUE
+C
+      KSUP(3)= 4
+      KSUP(5)= M
+      KSEC3(3)=NSUBSET
+      KSUP(6)= KSEC3(3)
+C
+      RETURN
+C
+      END
diff --git a/crexdc/crexen.F b/crexdc/crexen.F
new file mode 100755
index 0000000..5afe695
--- /dev/null
+++ b/crexdc/crexen.F
@@ -0,0 +1,521 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXEN(KSEC0,KSEC1,KSEC3,
+     1                  KTDLEN,CREXKTDLST,KDLEN,KDATA,KELEM,KVALS,
+     2                  VALUES,CVALS,KBUFL,KBUFF,KERR)
+C
+C**** *CREXEN*
+C
+C
+C     PURPOSE.
+C     --------
+C           Creates CREX message
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *CREXEN(KSEC0,KSEC1,KSEC3,
+C                          KTDLEN,CREXKTDLST,KDLEN,KDATA,KELEM,KVALS,
+C                          VALUES,CVALS,KBUFL,KBUFF,KERR)*
+C
+C
+C
+C        INPUT :
+C               *KBUFL*   -  Length of CREX message (words)
+C               *KELEM*   -  Integer (expected number of expanded elements)
+C               *KVALS*   -  Integer (expected number of data values)
+C        OUTPUT:
+C
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC0*   -  Integer array of 3 words containing
+C                            CREX section 0 information
+C                            KSEC0( 1)-- length of section 0 (bytes)
+C                            KSEC0( 2)-- total length of CREX message (bytes)
+C                            KSEC0( 3)-- CREX Edition number
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+C
+C               *KSEC3*   -  Integer array of 4 words containing
+C                            CREX section 3 information
+C                            KSEC3( 1)-- length of section 3 (bytes)
+C                            KSEC3( 2)-- reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- flag (data type,data compression)
+C
+C               *CNAMES*  -  Character*64  array of KELEM containing
+C                            CREX Table B element names
+C               *CUNITS*  -  Character*24 array of KELEM containig
+C                            CREX Table B units
+C               *VALUES*  -  Real*8 array of KVALS containing expanded
+C                            data values
+C               *CVALS*   -  Character*80 array of KVALS containing
+C                            CREX code table or CCITTIA5 CREX elements
+C                            entries
+C               *KERR*    -  returned error code
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       04/02/2003.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+C
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+      COMMON /CREL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1              NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 3
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+      COMMON /CRCMOFF/ NSUBSET
+C
+
+      CHARACTER*120 YENTRY
+      CHARACTER*15  FMT
+      CHARACTER*6  CREXKTDLST(KELEM),CREXKTDLST0
+C
+      INTEGER IVALUE(KELEM)
+C
+      CHARACTER*4 YUSE_E
+C
+      INTEGER IVAL,IIVAL
+c
+      REAL*8 EPS
+      REAL*8 RVIND
+      REAL*8 VAL
+C
+
+      DIMENSION KSUP(JSUP),KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC3(JSEC3)
+      DIMENSION KBUFF(KBUFL)
+      DIMENSION KBUFR(JBUFL)
+C
+      REAL*8 VALUES(KVALS)
+C
+      CHARACTER*80 CVALS(KVALS),CV
+C
+      CHARACTER*(JBUFL*4) YOUT
+C
+      CHARACTER*3 crcrlf
+C
+      CHARACTER*4 CECMWF
+C
+      EQUIVALENCE(KBUFR(1),YOUT)
+
+C     ------------------------------------------------------------------
+C
+      CALL GETENV('USE_E',YUSE_E)
+C 
+      YOUT=' '
+      IPT=1
+      IPT0=1
+      crcrlf=char(13)//char(13)//char(10)
+c
+c*         1. Set Constants
+c             ----------------
+ 100  continue
+c
+      KERR=0
+      IF(CECMWF.NE.'ECMF') THEN
+         CALL CREXIVAR(KERR)
+         IPT   = 1
+         IPT0  = 1
+         CECMWF='ECMF'
+      END IF
+c
+C*          1. Create Section 0 - Indicator Section
+C              ------------------------------------
+ 110  CONTINUE
+c
+      YOUT(1:9)='CREX++'//crcrlf
+c
+c*          2. Create Section 1 - Data Description Section
+c              -------------------------------------------
+ 200  CONTINUE
+c
+      IF(KSEC1(2).LT.2) THEN
+      YOUT(10:10)='T'
+      WRITE(YOUT(10:16),'(A1,3(i2.2))') 'T',KSEC1(14),KSEC1(2),KSEC1(15)
+      YOUT(17:18)=' A'
+      WRITE(YOUT(19:21),'(I3.3)',IOSTAT=IOS) KSEC1(6)
+      IF(IOS.NE.0) THEN
+         print*,'Internal write error.'
+         KERR=33
+         RETURN
+      END IF
+      IPT=22
+      ELSE
+         YOUT(10:10)='T'
+         WRITE(YOUT(10:20),'(A1,5(i2.2))') 'T',KSEC1(14),KSEC1(2),
+     1         KSEC1(15),KSEC1(17),KSEC1(18)
+         YOUT(22:22)='A'
+         WRITE(YOUT(23:28),'(2(i3.3))') KSEC1(6), KSEC1(7)
+         YOUT(30:30)='P'
+         WRITE(YOUT(31:38),'(i5.5,i3.3)') KSEC1(3), KSEC1(16)
+         YOUT(40:40)='U'
+         WRITE(YOUT(41:42),'(i2.2)') ksec1(4)
+         YOUT(44:44)='S'
+         WRITE(YOUT(45:47),'(i3.3)') KSEC1(5)
+         YOUT(49:49)='Y'
+         WRITE(YOUT(50:57),'(I4.4,2(i2.2))') KSEC1(9),KSEC1(10),
+     1         KSEC1(11)
+         YOUT(59:59)='H'
+         WRITE(YOUT(60:63),'(2(i2.2))') KSEC1(12),KSEC1(13)
+
+         IPT=64
+      END IF
+C
+      DO 201 I=1,KTDLEN
+      YOUT(IPT:IPT+6)=' '//CREXKTDLST(I)
+      IPT=IPT+7
+c
+      IF((IPT-IPT0).GT.60) THEN
+         YOUT(IPT:IPT+2)=crcrlf
+         IPT=IPT+3
+         IPT0=IPT
+      END IF
+c
+ 201  CONTINUE
+c
+      IF(YUSE_E.EQ.'true') THEN
+         iE=1
+         YOUT(IPT:IPT+6)=' E++'//crcrlf
+         IPT=IPT+7
+      ELSE
+         YOUT(IPT:IPT+4)='++'//crcrlf
+         IPT=IPT+5
+      END IF
+c
+c*         3. Load Crex Tables
+c             ----------------
+ 300  CONTINUE
+c
+      CALL CREXETAB(KSEC1,KERR)
+      IF(KERR.GT.0) RETURN
+
+c
+c*         3.1 Expand Data Descriptors
+c              -----------------------
+c
+ 310  CONTINUE
+c
+      KPT=0
+      IPT0=IPT
+      NSUBSET=0
+      DO 401 IX=1,KSEC3(3)
+C
+      NSUBSET=NSUBSET+1
+C
+      CALL CREXETD(KPT,KTDLEN,CREXKTDLST,KDLEN,KDATA,KSEC3,
+     1             KVALS,VALUES,KELEM,KERR)
+      IF(KERR.GT.0) RETURN
+c
+c*         4. Create Section 2 - Data Section
+c             -------------------------------
+ 400  CONTINUE
+c
+C
+C
+      DO 402 iy=1,NCREXTDEXL
+      IZ=IY+(NSUBSET-1)*KELEM
+c
+      IF(ABS(VALUES(IZ)-RVIND)/RVIND.gt.EPS) THEN
+         if(CREXWTU(IY)(1:4).EQ.'CHAR') THEN
+            ICP=NINT(VALUES(IZ)/1000)
+            ICH=NINT(VALUES(IZ))-ICP*1000
+            IF(YUSE_E.EQ.'true') THEN
+               YOUT(IPT:IPT)=CHAR(iE+48)
+               iE=iE+1
+               IF(iE.GT.9) iE=0
+               IPT=IPT+1
+            END IF
+            YOUT(IPT:IPT)=' '
+            IPT=IPT+1
+            IF(ICHAR(CVALS(ICP)(1:1)).EQ.255) then
+               cv=' '
+               do ii=1,NCREXWTDW(IY)
+               cv(ii:ii)='/'
+               end do 
+               YOUT(IPT:IPT+NCREXWTDW(IY)-1)=cv
+            else
+               YOUT(IPT:IPT+NCREXWTDW(IY)-1)=CVALS(ICP)
+            end if
+            IPT=IPT+NCREXWTDW(IY)
+            YOUT(IPT:IPT)=' '
+            IPT=IPT+1
+         ELSE
+            IF(CREXWTU(IY)(1:4).EQ.'FLAG') THEN
+               IVAL=INT(VALUES(IZ))
+               CALL DEC2OCTAL(IIVAL,IVAL,IERR)
+               IF(IERR.NE.0) THEN
+                  print*,'Error during flag conversion'
+                  print*,'iz=',iz,' ','values(iz)=',values(iz)
+                  print*,'iz=',iz,' ','ival      =',ival
+                  print*,'iz=',iz,' ','iival      =',iival
+                  KERR=34
+                  RETURN 
+               END IF
+               VALUES(IZ)=FLOAT(IIVAL)
+c           ELSEIF(CREXWTU(IY)(1:4).eq.'C   ') THEN
+c              convert Kelvin into Celsius
+c              VALUES(IZ)=VALUES(IZ)-273.16
+            END IF
+
+            IF(NCREXWTS(IY).GE.0) THEN
+               IVALUE(IY)=NINT(VALUES(IZ)*10.**NCREXWTS(IY))
+            ELSE
+               IVALUE(IY)=NINT(VALUES(IZ)/10.**IABS(NCREXWTS(IY)))
+            END IF
+C
+c-----------------------------------------------------------------
+            JZ=0
+            IRES=IABS(IVALUE(IY))
+            DO WHILE(IRES.GT.0)
+            JZ=JZ+1
+            IRES=IRES/10
+            END DO
+c
+            IF(JZ.GT.NCREXWTDW(IY)) THEN
+      print*,'Element=',iy,' NCREXWTR=',NCREXWTR(iy),'value=',ivalue(iy)
+               print*,'number of figures calculated ',jz
+               print*,'number of figures in tables ',NCREXWTDW(iy)
+c
+c              Replace this value with missing value '/'
+c
+               YOUT(IPT:IPT)=' '
+               IPT=IPT+1
+               if(YUSE_E.EQ.'true') THEN
+                  YOUT(IPT:IPT)=CHAR(iE+48)
+                  iE=iE+1
+                  if(iE.gt.9) iE=0
+                  IPT=IPT+1
+               END IF
+               DO III=1,NCREXWTDW(IY)
+               YOUT(IPT:IPT)='/'
+               IPT=IPT+1
+               END DO
+            ELSE
+c-----------------------------------------------------------------
+               IF(IVALUE(IY).LT.0) THEN
+                  YOUT(IPT:IPT)=' '
+                  IF(YUSE_E.eq.'true') THEN
+                     IPT=IPT+1
+                     YOUT(IPT:IPT)=CHAR(iE+48)
+                     iE=iE+1
+                     IF(iE.gt.9) iE=0
+                  END IF
+                  IPT=IPT+1
+                  YOUT(IPT:IPT)='-'
+               ELSE
+                  YOUT(IPT:IPT)=' '
+                  IF(YUSE_E.EQ.'true') THEN
+                     IPT=IPT+1
+                     YOUT(IPT:IPT)=CHAR(iE+48)
+                     iE=iE+1
+                     IF(iE.gt.9) iE=0
+                  END IF
+               END IF
+c
+               IPT=IPT+1
+c
+               FMT='(i02.02)'
+               IF(NCREXWTR(iy).eq.031001.or.NCREXWTR(iy).eq.031002) then
+                  NCREXWTDW(iy)=4
+               END IF
+               WRITE(FMT(3:4),'(I2.2)',IOSTAT=IOS) NCREXWTDW(iy)
+               IF(IOS.NE.0) THEN
+                  print*,'Internal write error.'
+                  KERR=33
+                  RETURN
+               END IF
+               FMT(6:7)=FMT(3:4)
+               WRITE(YOUT(IPT:IPT+NCREXWTDW(iy)-1),FMT,IOSTAT=IOS)
+     1               IABS(IVALUE(IY))
+               IF(IOS.NE.0) THEN
+                  print*,'Internal write error ',ios
+                  KERR=33
+                  RETURN
+               END IF
+               IPT=IPT+NCREXWTDW(iy)
+            END IF
+         END IF
+      ELSE
+         YOUT(IPT:IPT)=' '
+         IF(YUSE_E.eq.'true') THEN
+            IPT=IPT+1
+            YOUT(IPT:IPT)=CHAR(iE+48)
+            iE=iE+1
+            IF(iE.gt.9) iE=0
+         END IF
+c
+         IPT=IPT+1
+c
+         DO III=1,NCREXWTDW(iy)
+          YOUT(IPT:IPT)='/'
+          IPT=IPT+1
+         END DO
+      END IF
+c
+      IF((IPT-IPT0).GT.60) THEN
+         YOUT(IPT:IPT+2)=crcrlf
+         IPT=IPT+3
+         IPT0=IPT
+      END IF
+C
+ 402  CONTINUE
+c
+      YOUT(IPT:IPT+3)='+'//crcrlf
+      IPT=IPT+4
+      IPT0=IPT
+c
+ 401  CONTINUE
+C
+      IPT=IPT-4
+      YOUT(IPT:IPT+4)='++'//crcrlf
+      IPT=IPT+5
+c
+c*          5. Create Section 4 - End Section
+c              -------------------------------
+ 500  continue
+c
+      YOUT(IPT:IPT+6)='7777'//crcrlf
+      IPT=IPT+6
+      IPT0=IPT
+C
+C           6. Return the size of crex in bytes
+C              --------------------------------
+ 600  CONTINUE
+
+      NBYTPW=JBPW/8
+      K=IPT/NBYTPW+1
+      DO 601 I=1,K
+      KBUFF(i)=KBUFR(i)
+ 601  END DO
+C
+      KBUFL=IPT
+C
+      RETURN
+      END
diff --git a/crexdc/crexepwt.F b/crexdc/crexepwt.F
new file mode 100755
index 0000000..da6c0bd
--- /dev/null
+++ b/crexdc/crexepwt.F
@@ -0,0 +1,294 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXEPWT(KDD,KERR)
+C
+C**** *CREXEPWT*
+C
+C
+C     PURPOSE.
+C     --------
+C          UPDATES WORKING TABLES SETTING ELEMENT NAME,UNIT,SCALE,
+C     REFERENCE VALUE AND DATA WIDTH.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXEPWT(KDD,KELEM,KERR)*
+C
+C        INPUT :
+C               *KDD*     -  DATA DESCRIPTOR
+C        OUTPUT:
+C               *KERR*    -  RETURN ERROR CODE
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+C
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+C
+C
+
+      COMMON/CRTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1              NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2              NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR     - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+C
+C
+
+C      COMMON /CRTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+       COMMON /CRTABC/ CREXNAME(JTAB),CREXUNIT(JTAB)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+      COMMON /CRATB/  NJA,NCREXATBTR(JTAB),NCREXATBS (JTAB),
+     1                NCREXATBDW(JTAB)
+C
+C
+C             NCREXATBTR      - augmented table B table reference
+C             NCREXATBS       - augmented table B scale
+C             NCREXATBDW      - augmented table B data width
+C
+C
+      COMMON /CRATBC/ CREXATBEN(JTAB),CREXATBU (JTAB)
+C
+C             CREXATBEN      - augmented table B element name
+C             CREXATBU       - augmented table B units
+C
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+C
+C
+      REAL*8 RVIND,EPS
+C
+      character*64 CREXNAME, CREXATBEN
+      character*24 CREXATBU,CREXUNIT
+C
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   UPDATE WORKING TABLE.
+C                ---------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      ICLASS=KDD/1000
+      IYYY  =KDD-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+C*          1.1  ASSOCIATED FIELD ?
+C                ------------------
+ 110  CONTINUE
+C
+      IF(NCREXAFDW.EQ.0) GO TO 140
+C
+C*          1.2  UNITS ELEMENT DESCRIPTOR ?
+C                --------------------------
+ 120  CONTINUE
+C
+      I=NCREXP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(*,*) ' CREXEPWT : ', KDD
+         CALL CREXERR(KERR)
+         DO IQ=1,JELEM
+         NCREXSTACK(IQ)=0.
+         END DO
+         RETURN
+      END IF
+C
+      IF(CREXUNIT(I)(1:4).EQ.'CODE') GO TO 140
+      IF(CREXUNIT(I)(1:4).EQ.'FLAG') GO TO 140
+      IF(CREXUNIT(I)(1:3).EQ.'NUM' ) GO TO 140
+C
+C*          1.3   ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+ 130  CONTINUE
+C
+      NCREXWT=NCREXWT+1
+      CREXWTEN(NCREXWT)='ASSOCIATED FIELD'
+      CREXWTU (NCREXWT)=' '
+      NCREXWTDW(NCREXWT)=NCREXAFDW
+      NCREXWTR (NCREXWT)= 999999
+      NCREXWTEN(NCREXWT)= 0
+      NCREXWTS (NCREXWT)= 0
+      NCREXAFDW=0
+C
+      M=NCREXWT
+C
+C     ------------------------------------------------------------------
+C*          1.4   SEARCH AUGMENTED TABLE *B ENTRIES .
+C                 -----------------------------------
+ 140  CONTINUE
+C
+C
+C
+C*          1.5  GET TABLE *B ENTRY .
+C                ---------------------
+ 150  CONTINUE
+C
+      I=NCREXP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         WRITE(*,*)  'CREXEPWT : ',KDD
+         CALL CREXERR(KERR)
+         DO 2 IQ=1,JELEM
+         NCREXSTACK(IQ)=0.
+ 2       CONTINUE
+         RETURN
+      END IF
+C
+ 155  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*          1.6   MODIFY ENTRY FOR OPERATOR IN FORCE.
+C                 -----------------------------------
+ 160  CONTINUE
+C
+C*                ADD ENTRY TO WORKING TABLE.
+C                 ---------------------------
+      NCREXWT=NCREXWT+1
+      NCREXWTR (NCREXWT) = KDD
+      IF(NCREXSCAM.ne.0) THEN
+         NCREXWTS (NCREXWT) = NCREXSCAM
+      ELSE
+         NCREXWTS (NCREXWT) = NCREXBS (I)
+      END IF
+C
+      NCREXSCAM=0
+C
+      IF(NCREXDWINC.ne.0) THEN
+         NCREXWTDW(NCREXWT) = NCREXDWINC
+      ELSE
+         NCREXWTDW(NCREXWT) = NCREXBDW(I)
+      END IF
+C
+      NCREXDWINC=0
+C
+      IF(NCREXWTR (NCREXWT).eq.031002) THEN
+         NCREXWTDW(NCREXWT)=4
+      END IF
+C
+C     CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+      IF(NCREXWTR(NCREXWT).eq.31011.or.
+     1   NCREXWTR(NCREXWT).eq.31012) then
+         IF(NCREXWTR(NCREXWT-1).eq.31011.or.
+     2      NCREXWTR(NCREXWT-1).eq.31012) THEN
+            NCREXWTDW(NCREXWT)=0
+         END IF
+      END IF
+
+ 175  CONTINUE
+C
+C*          1.8 UPDATE M.
+C               ---------
+ 180  CONTINUE
+C
+C
+      CREXWTEN(NCREXWT) = CREXNAME(I)
+      IF(NC07YYY.NE.0) THEN
+         CREXWTU (NCREXWT) = YUNIT
+         YUNIT=' '
+         NC07YYY=0
+      else
+         CREXWTU (NCREXWT) = CREXUNIT(I)
+      END IF
+      NCREXWTEN(NCREXWT) = 0
+      IF(CREXUNIT(I)(1:3).EQ.'CHA') NCREXWTEN(NCREXWT)=658367
+C
+       M = M + 1
+C
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/crexdc/crexerr.F b/crexdc/crexerr.F
new file mode 100755
index 0000000..7445d03
--- /dev/null
+++ b/crexdc/crexerr.F
@@ -0,0 +1,115 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXERR(KERR)
+C**** *CREXERR*
+C
+C
+C     PURPOSE.
+C     --------
+C         PRINT ERROR CODE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *CREXERR(KERR)*
+C
+C         INPUT:  *NONE*
+C
+C         OUTPUT: *KERR* - Return error code
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      CHARACTER*80 CERROR(100)
+C
+      DATA CERROR/100*' '/
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   INITIALIZE MESSAGES.
+C                --------------------
+ 100  CONTINUE
+C
+      CERROR( 1)=' Start of CREX message not found.'
+      CERROR( 2)=' End of CREX message not found.'
+      CERROR( 3)=' Array to receive CREX message too small.'
+      CERROR( 6)=' Error during read CREX table B.'
+      CERROR( 7)=' Error during read CREX table C.'
+      CERROR( 8)=' Error during read CREX table D.'
+      CERROR( 9)=' Open error.'
+      CERROR(10)=' Error during close CREX table B.'
+      CERROR(11)=' Error during close CREX table C.'
+      CERROR(12)=' Error during close CREX table D.'
+      CERROR(13)=' Too many elements in the table'
+      CERROR(14)=' Argument KVALS too small.'
+      CERROR(19)=' Delayed replication factor too big.'
+      CERROR(20)=' Table D reference not found.'
+      CERROR(21)=' Data descriptor operator not found.'
+      CERROR(22)=' CREX Opeartor name not found.'
+      CERROR(23)=' Table B reference not found.'
+      CERROR(25)=' KELEM argument too small.'
+      CERROR(26)=' Word pointer out of range.'
+      CERROR(30)=' Number of elements greater than JELEM.'
+      CERROR(31)=' Too few elements in KDATA array.'
+      CERROR(32)=' Number of subsets equal to zero.'
+      CERROR(33)=' Internal write error'
+      CERROR(34)=' Decimal to octal conversion error'
+      CERROR(35)=' Internal read error'
+      CERROR(36)=' Bad order of data descriptors.'
+      CERROR(37)=' Wrong data descriptor.'
+      CERROR(38)=' Open error on units.cinfig.dat file'
+      CERROR(39)=' Read error on units.cinfig.dat file'
+      CERROR(40)=' Could not find next section'
+      CERROR(41)=' '
+      CERROR(42)=' Wrong start of section 1 of CREX message '
+      CERROR(43)=' Could not find the end of section 1'
+      CERROR(44)=' Error during extraction of Master table'
+      CERROR(45)=' Error during extraction of Edition number'
+      CERROR(46)=' Error during extraction of version number'
+      CERROR(47)=' Unit not found'
+C
+      IF(KERR.GE.0.AND.KERR.LE.100) THEN
+        WRITE(*,'(1h ,A)') CERROR(KERR)
+      ELSE
+        WRITE(*,'(1h ,A)') ' Error number out of range !'
+      END IF
+C
+      RETURN
+      END
diff --git a/crexdc/crexetab.F b/crexdc/crexetab.F
new file mode 100755
index 0000000..d33e7a8
--- /dev/null
+++ b/crexdc/crexetab.F
@@ -0,0 +1,515 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXETAB(KSEC1,KERR)
+C
+C**** *CREXETAB*
+C
+C
+C     PURPOSE.
+C     --------
+C          Load Crex table B and  D  according to Edition and version
+C     of Crex code.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXETAB(KSEC1,KERR)*
+C
+C        OUTPUT:
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       06/11/2003.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      PARAMETER(JP=3000,JL=20)
+C
+      COMMON/CRTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1              NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2              NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR    - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+       COMMON /CRTABC/ CREXNAME(JTAB),CREXUNIT(JTAB)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+C
+      COMMON /CRROOT/ CROOT
+C
+C            croot    -  path for Crex tables
+C
+      CHARACTER*64 CREXNAME
+      CHARACTER*24 CREXUNIT
+      CHARACTER*6  CREXLST
+C
+      CHARACTER*256 YNAME
+      CHARACTER*256  YFNAME
+      CHARACTER*160 YENTRY
+C
+      CHARACTER*256 YTAB ,YTAC ,YTAD
+      CHARACTER*7  YTABB,YTABC,YTABD
+      CHARACTER*256 CROOT
+      CHARACTER*6 CNCREXBR
+C
+      DIMENSION KSEC1(*)
+C
+C     EXTERNAL FUNCTIONS
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+
+      SAVE OFIRST, NXXP, NYYP, NZZP
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   GET CREX TABLES/LOCAL CREX TABLES.
+C                ----------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0) RETURN
+C
+C
+C*          2.   SET UP CREX TABLE FILE NAME.
+C                ----------------------------
+ 200  CONTINUE
+C
+C
+C             CREX EDITION 1 NAMING CONVENTION
+C
+C             BXXYYZZ , DXXYYZZ
+C
+C             B      - CREX TABLE 'B'
+C             D      - CREX TABLE 'D'
+C             XX     - Crex Master table used '00'
+C             YY     - Crex Edition number used '01'
+C             ZZ     - Crex Table version number '01'
+C
+            IXX=0
+            IYY=KSEC1( 2)
+            IZZ=KSEC1(15)
+C
+         IF(OFIRST) THEN
+            IF(IXX.EQ.NXXP.AND.IYY.EQ.NYYP.AND.
+     1         IZZ.EQ.NZZP) RETURN
+         END IF
+C
+      J=0
+      ICLASS0=0
+      IVIND=2147483647
+C
+      DO 101 I=1,64
+      do 101 ii=1,255
+      NCREXP(I,ii)=0
+ 101  CONTINUE
+C
+      DO 102 i=1,JP
+      NCREXBR(I)=IVIND
+      NCREXBS (I)=IVIND
+      NCREXBDW(I)=IVIND
+      CREXNAME(I)=' '
+      CREXUNIT(I)=' '
+ 102  CONTINUE
+C
+      J  =0
+      IST=1
+C
+      DO 103 I=1,JP
+      NCREXDR(I)=999999
+      NCREXDL (I)=0
+      NCREXDST(I)=0
+ 103  CONTINUE
+C
+      DO 104 I=1,JP*20
+      NCREXDSQ(I)=0
+ 104  CONTINUE
+
+      OFIRST=.TRUE.
+C
+      NXXP=IXX
+      NYYP=IYY
+      NZZP=IZZ
+C
+      WRITE(YTABB,'(A1,I2.2,I2.2,I2.2)') 'B',IXX,IYY,IZZ
+C     WRITE(YTABC,'(A1,I2.2,I2.2,I2.2)') 'C',IXX,IYY,IZZ
+      WRITE(YTABD,'(A1,I2.2,I2.2,I2.2)') 'D',IXX,IYY,IZZ
+C
+      PRINT*,'CREX Tables to be loaded ',YTABB,',',YTABD
+C
+C     ----------------------------------------------------------------
+C*          3. OPEN AND READ FILES CONTAINING CREX TABLES.
+C              -------------------------------------------
+ 300  CONTINUE
+C
+      CROOT=' '
+      CALL GETENV('CREX_TABLES',CROOT)
+      ILNG=INDEX(CROOT,' ')
+      IF(ILNG.EQ.1) THEN
+C
+C       SGI/HP/SUN CREX TABLES PATH
+C
+        CROOT='/home/ma/emos/tables/crex/'
+C
+C       ADD VERSION NUMBER
+C
+        ILNG=INDEX(CROOT,' ')
+        IEMOSNM = EMOSNUM(1)
+        WRITE(CROOT(ILNG:ILNG+5),'(I6.6)') IEMOSNM
+        CROOT(ILNG+6:) = '/'
+      ENDIF
+
+      I=INDEX(CROOT,' ')
+      IF(I.NE.0) I=I-1
+      PRINT*,'Path for CREX tables:',CROOT(1:I)
+C
+C*          3.1 READ CREX TABLE B.
+C               ------------------
+ 310  CONTINUE
+C
+      YTAB=CROOT(1:I)//YTABB
+      II=I+7
+C
+      OPEN(UNIT=38,IOSTAT=IOS,ERR=311,FILE=YTAB(1:II),
+     1     FORM='FORMATTED',
+     2     recl=160,
+     5     STATUS='OLD')
+C
+      J=0
+      GO TO 312
+C
+ 311  CONTINUE
+C
+      CLOSE(38)
+C
+      print*,'Open error on ',YTAB(1:II)
+C
+      KERR=9    
+      CALL CREXERR(KERR)
+      RETURN
+
+C
+ 312  CONTINUE
+C
+      J=J+1
+      READ(38,ERR=400,IOSTAT=IOS,END=329,
+     1  FMT='(1x,A,1x,A64,47x,A24,I3,7x,I3)')
+     2  CNCREXBR,CREXNAME(J),CREXUNIT(J),NCREXBS(J),NCREXBDW(J)
+C
+      CNCREXBR(1:1)='0'
+C
+      READ(CNCREXBR,'(I6.6)',IOSTAT=IOS) NCREXBR(J)
+      IF(IOS.NE.0) THEN
+         print*,'Internal read error.'
+         print*,CNCREXBR
+         KERR=35
+         RETURN
+      end if
+C
+C
+      ICLASS=NCREXBR(J)/1000
+      IYYY  =NCREXBR(J)-ICLASS*1000+1
+C
+      ICLASS=ICLASS+1
+      NCREXP(ICLASS,IYYY)=J
+
+      GO TO 312
+C
+ 329  CONTINUE
+C
+      CLOSE(UNIT=38,IOSTAT=IOS,ERR=420)
+C
+C*          3.3 READ CREX TABLE D.
+CC               ------------------
+ 330  CONTINUE
+C
+      YTAD=CROOT(1:I)//YTABD
+C
+      OPEN(UNIT=40,IOSTAT=IOS,ERR=331,FILE=YTAD(1:II),
+     1     FORM='FORMATTED',
+     2     recl=160,
+     5     STATUS='OLD')
+C
+      GO TO 332
+C
+ 331  CONTINUE
+C
+      CLOSE(40)
+C
+      print*,'Open error on ',YTAD
+C
+      kerr=9
+      CALL CREXERR(KERR)
+      return
+C
+ 332  CONTINUE
+C
+      j=0
+ 340  continue
+c
+      YENTRY=' '
+      READ(40,'(a)',iostat=ios,end=390) yentry
+      if(ios.ne.0) then
+         print*,'Read error on CREX table D.'
+         KERR=35
+         RETURN
+      end if
+      if(yentry(2:2).eq.'D') yentry(2:2)='3'
+c
+      j=j+1
+      READ(YENTRY,'(1X,I6,1X,I2)',iostat=ios) NCREXDR(J),NCREXDL(J)
+      if(ios.ne.0) then
+         print*,'Internal read error.'
+         print*,YENTRY
+         KERR=35
+         RETURN
+      end if
+      IF(J.GT.JP) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         kerr=13
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      IF(J.EQ.1) THEN
+         IST=1
+         NCREXDST(J)=IST
+      ELSE
+         IST=IST + NCREXDL(J-1)
+         NCREXDST(J)=IST
+      END IF
+C
+      IF(NCREXDL(J).GT.1) THEN
+         if(YENTRY(12:12).eq.'D') YENTRY(12:12)='3'
+         if(YENTRY(12:12).eq.'C') then
+            YENTRY(12:12)='2'
+c           checkif negative scale is present
+            iminus=0
+            iminus=index(YENTRY(12:16),'-')
+            if(iminus.ne.0) YENTRY(iminus:iminus)='9'
+         end if
+         if(YENTRY(12:12).eq.'R') YENTRY(12:12)='1'
+         if(YENTRY(12:12).eq.'B') YENTRY(12:12)='0'
+         READ(YENTRY,'(11X,I6)',iostat=ios) NCREXDSQ(IST)
+         if(ios.ne.0) then
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         end if
+c
+         IIST=IST
+C
+         DO 220 JA=1,NCREXDL(J)-1
+         IIST=IIST+1
+         READ(40,'(A)',END=300,iostat=ios) YENTRY
+         if(ios.ne.0) then
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         end if
+c
+         if(YENTRY(12:12).eq.'D') YENTRY(12:12)='3'
+         if(YENTRY(12:12).eq.'C') YENTRY(12:12)='2'
+         if(YENTRY(12:12).eq.'R') YENTRY(12:12)='1'
+         if(YENTRY(12:12).eq.'B') YENTRY(12:12)='0'
+         READ(YENTRY,'(11X,I6)',iostat=ios) NCREXDSQ(IIST)
+         if(ios.ne.0) then
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         end if
+ 220     CONTINUE
+C
+      ELSE
+         if(YENTRY(12:12).eq.'D') YENTRY(12:12)='3'
+         if(YENTRY(12:12).eq.'C') YENTRY(12:12)='2'
+         if(YENTRY(12:12).eq.'R') YENTRY(12:12)='1'
+         if(YENTRY(12:12).eq.'B') YENTRY(12:12)='0'
+         READ(YENTRY,'(11X,I6)',iostat=ios) NCREXDSQ(IST)
+         if(ios.ne.0) then
+            print*,'Internal read error.'
+            print*,YENTRY
+            KERR=35
+            RETURN
+         end if
+      END IF
+C
+      go to 340
+c
+ 390  continue
+C
+      CLOSE(UNIT=40,IOSTAT=IOS,ERR=620)
+C
+C
+      RETURN
+C     ----------------------------------------------------------------
+ 400  CONTINUE
+C
+      KERR=6
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 410  CONTINUE
+C
+      KERR=9
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 420  CONTINUE
+C
+      KERR=10
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C     ----------------------------------------------------------------
+ 500  CONTINUE
+C
+      KERR=7
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 510  CONTINUE
+C
+      KERR=9
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 520  CONTINUE
+C
+      KERR=11
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C     -----------------------------------------------------------------
+ 600  CONTINUE
+C
+      KERR=8
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 610  CONTINUE
+C
+      KERR=9
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 620  CONTINUE
+C
+      KERR=12
+      PRINT*,'CREXETAB: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C     -----------------------------------------------------------------
+C
+      END
diff --git a/crexdc/crexetd.F b/crexdc/crexetd.F
new file mode 100755
index 0000000..a8679b6
--- /dev/null
+++ b/crexdc/crexetd.F
@@ -0,0 +1,305 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXETD(KPT,KTDLEN,CREXLST,KDLEN,KDATA,KSEC3,
+     1             KVALS,VALUES,KELEM,KERR)
+C
+C**** *CREXETD*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          Expand Crex data descriptors
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXETD( KPT,KTDLEN,CREXLST,KDLEN,KDATA,KSEC3,
+C                           KVALS,VALUES,KELEM,KERR)*
+C
+C        INPUT :
+C               *KPT*     -  POINTER TO KDATA ARRAY
+C               *KTDLEN*  -  number of data descriptors in section 1
+C               *KTDLST*  -  array containing data descriptors in section 1
+C               *KDLEN*   -  DIMENSION OF KDATA ARRAY
+C               *KDATA*   -  ARRAY CONTAINING DATA NEEDED FOR DESCRIPTOR
+C                            EXPANSION ( delayed replications)
+C               *KSEC3*   -  Integer array of 4 words containing
+C
+C                            KSEC3( 1)-- Reserved
+C                            KSEC3( 2)-- Reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- Reserved
+C               *KVALS    -  Integer (expected number of data values)
+C               *VALUES*  -  Real*8 array of KVALS containing expanded
+C                            data values
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C        OUTPUT:
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C      -------
+C
+C          Expands list of data descriptors in section 1
+C     of Crex message. Working tables for further data decoding are set,
+C     list of Crex data descriptors and a list of expanded Crex data descriptors
+C     according to table D reference are returned respectively.
+C
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C------------------------------------------------------------------------------------
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CRTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1              NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2              NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR    - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+       COMMON /CRTABC/ CREXNAME(JTAB),CREXUNIT(JTAB)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+c
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+C
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+      COMMON /CREL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1              NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 3
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+      COMMON /CRCOFF/ NSUBSET
+C
+      CHARACTER*64 CREXNAME
+      CHARACTER*24 CREXUNIT
+      CHARACTER*(*) CREXLST(*)
+C
+      DIMENSION ISTACK(JELEM),IISTACK(JELEM)
+C
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+C
+      REAL*8 RVIND,EPS
+      REAL*8 VALUES(KVALS)
+c
+C     ------------------------------------------------------------------
+C
+C*          1.   EXPAND PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C     -----------------------------------------------------------------
+C
+C*          2.   EXPAND DATA DESCRIPTORS.
+C                ------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1  CALCULATE EXPECTED NUMBER OF DATA DESCRIPTORS.
+C                ----------------------------------------------
+C                AND INITIALIZE NUMBER OF DATA VALUES PER SUB-SET.
+C                -------------------------------------------------
+ 210  CONTINUE
+C
+      J = 0
+      M = 0
+      IF(NSUBSET.EQ.1) KPT=0
+      NCREXWT=0 
+      NCREXTDLEN=KTDLEN
+C
+C
+C*          2.2  PUT DATA DESCRIPTORS IN STACK.
+C                -----------------------------------------
+ 220  CONTINUE
+C
+      DO 221 JJ=1,KTDLEN
+C
+      if(CREXLST(JJ)(1:1).eq.'D') CREXLST(JJ)(1:1)='3'
+      if(CREXLST(JJ)(1:1).eq.'B') CREXLST(JJ)(1:1)='0'
+      if(CREXLST(JJ)(1:1).eq.'C') CREXLST(JJ)(1:1)='2'
+      if(CREXLST(JJ)(1:1).eq.'R') CREXLST(JJ)(1:1)='1'
+c
+      IOS=0
+      READ( CREXLST(JJ),'(i6.6)',IOSTAT=IOS) ISTACK(JJ)
+      IF(IOS.NE.0) THEN
+         PRINT*,'NCREXTDLEN=KTDLEN=',NCREXTDLEN
+         PRINT*,JJ,' CREXLST(JJ)=',CREXLST(JJ)
+         kerr=35
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      IISTACK(JJ)=ISTACK(JJ)
+C
+ 221  CONTINUE
+C
+      JMAX=NCREXTDLEN
+C     ------------------------------------------------------------------
+C*          2.3  GET NEXT DESCRIPTOR FROM THE STACK.
+C                -----------------------------------
+ 230  CONTINUE
+C
+C
+      J   = J + 1
+      IF(J.GT.JMAX) GO TO 300
+C
+      IDD = ISTACK(J)
+      IF(IDD.EQ.0)  GO TO 230
+C
+      IF = IDD/100000
+C
+C     ------------------------------------------------------------------
+C*          2.4  CHECK IF IT IS REPLICATION DESCRIPTOR.
+C                --------------------------------------
+ 240  CONTINUE
+C
+      IF( IF.EQ.0) THEN
+C
+C*          2.6  ELEMENT DESCRIPTOR, SO UPDATE WORKING TABLE.
+C                --------------------------------------------
+ 260     CONTINUE
+C
+         CALL CREXEPWT(IDD,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.1) THEN
+C
+C*          2.4.1     SOLVE REPLICATION PROBLEM.
+C                     --------------------------
+C
+C
+         CALL CREXREP(KPT,KDLEN,KDATA,J,JMAX,IDD,ISTACK,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.2) THEN
+C
+C*          2.5.3 PROCESS OPERATOR.
+C                 -----------------
+            CALL CREXOPER(KPT,KDLEN,KDATA,J,IDD,ISTACK,KERR)
+            IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.3) THEN
+C
+C*          2.5.2 REPLACE BY LIST OF DESCRIPTORS FROM TABLE *D.
+C                 ---------------------------------------------
+            CALL CREXETDR(J,JMAX,IDD,ISTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NCREXSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+      ELSE
+         KERR=37
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+c
+      GO TO 230
+C
+C     ------------------------------------------------------------------
+C
+C*          3. COLLECT  SUPPLEMENTARY ITEMS.
+C              -----------------------------
+ 300  CONTINUE
+C
+      NCREXTDEXL =M
+      DO 301 I=1,NCREXTDEXL
+      NCREXTDEXP(I)=NCREXWTR(I)
+ 301  CONTINUE
+C
+      DO 302 I=1,NCREXTDLEN
+      NCREXTDLST (I)=IISTACK(I)
+ 302  CONTINUE
+C
+      KSUP(3)= 4
+      KSUP(5)= M
+      KSUP(6)= KSEC3(3)
+C
+      RETURN
+C
+      END
diff --git a/crexdc/crexetdr.F b/crexdc/crexetdr.F
new file mode 100755
index 0000000..cd9ac1f
--- /dev/null
+++ b/crexdc/crexetdr.F
@@ -0,0 +1,195 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXETDR(KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *CREXETDR*
+C
+C
+C     PURPOSE.
+C     --------
+C          SOLVE BUFR TABLE D REFERENCE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXETDR(KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C                 *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C                 *KJ*       - POINTER TO KSTACK ARRAY
+C                 *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C                 *KSTACK*   - LIST OF DATA DESCRIPTORS
+C                 *KERR*     - RETURN ERROR CODE
+C
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+C
+      COMMON/CRTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1              NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2              NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR    - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+       COMMON /CRTABC/ CREXNAME(JTAB),CREXUNIT(JTAB)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+C
+C
+      CHARACTER*64 CREXNAME
+      CHARACTER*24 CREXUNIT
+C
+      DIMENSION ILIST(JELEM),KSTACK(*)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   OBTAIN LIST OF DESCRIPTORS FROM BUFR TABLE D.
+C                ---------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 110 J=1,JTAB
+C
+      IF(KDD.EQ.NCREXDR(J)) THEN
+         I=J
+         GO TO 120
+      END IF
+C
+ 110  CONTINUE
+C
+      KERR=20
+      WRITE(*,*)  'CREXETDR : ',KDD
+      CALL CREXERR(KERR)
+      RETURN
+C
+ 120  CONTINUE
+C
+      J1=NCREXDST(I)
+      J2=NCREXDL (I)
+      J3=0
+C
+      DO 121 J=J1,J1+J2-1
+C
+      J3 = J3 +1
+      ILIST(J3) = NCREXDSQ(J)
+C
+ 121  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          2.  PUSH DOWN DATA DESCRIPTION DESCRIPTORS
+C               --------------------------------------
+C               TO MAKE ROOM FOR LIST.
+C               ----------------------
+ 200  CONTINUE
+C
+      J2M1=J2-1
+C
+      DO 210 J=KJ1,KJ+1,-1
+C
+      KSTACK(J+J2M1) = KSTACK(J)
+C
+ 210  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          3.  INSERT LIST IN PLACE OF SEQUENCE DESCRIPTORS.
+C               ---------------------------------------------
+ 300  CONTINUE
+C
+      KJM1=KJ-1
+C
+      DO 310 J=1,J3
+C
+      KSTACK(KJM1+J)= ILIST(J)
+C
+ 310  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          4.  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C               ----------------------------------------
+ 400  CONTINUE
+C
+      KJ  = KJ  - 1
+      KJ1 = KJ1 +J3 -1
+C     ------------------------------------------------------------------
+C*          4.1  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 610  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C     -----------------------------------------------------------------
+ 500  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/crexdc/crexex.F b/crexdc/crexex.F
new file mode 100755
index 0000000..1bf4798
--- /dev/null
+++ b/crexdc/crexex.F
@@ -0,0 +1,261 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXEX(KBUFL,YBUFF,KSUP,KSEC0,KSEC1,KSEC3,
+     2                  KELEM,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+C
+C**** *CREXEX*
+C
+C
+C     PURPOSE.
+C     --------
+C          Decode Crex message into fully expanded form; returning
+C          information relevant for all CREX sections, expanded values,
+C          their names and units.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXEX(KBUFL,YBUFF,KSUP,KSEC0,KSEC1,KSEC3,
+C     1                   KELEM,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  Length of CREX message (words)
+C               *YBUFF*   -  Character string  containing Crex message
+C               *KELEM*   -  Integer (expected number of expanded elements)
+C               *KVALS*   -  Integer (expected number of data values)
+C        OUTPUT:
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC0*   -  Integer array of 3 words containing
+C                            CREX section 0 information
+C                            KSEC0( 1)-- length of section 0 (bytes)
+C                            KSEC0( 2)-- total length of CREX message (bytes)
+C                            KSEC0( 3)-- CREX Edition number
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+C
+C               *KSEC3*   -  Integer array of 4 words containing
+C
+C                            KSEC3( 1)-- Reserved
+C                            KSEC3( 2)-- Reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- Reserved
+C
+C
+C               *CNAMES*  -  Character*64  array of KELEM containing
+C                            CREX Table B element names
+C               *CUNITS*  -  Character*24 array of KELEM containig
+C                            CREX Table B units
+C               *VALUES*  -  Real*8 array of KVALS containing expanded
+C                            data values
+C               *CVALS*   -  Character*80 array of KVALS containing
+C                            CREX code table or CCITTIA5 CREX elements
+C                            entries
+C               *KERR*    -  returned error code
+C
+C
+C     METHOD.
+C     -------
+C
+C          Crex message passed as argument to this routine is decoded
+C          section by section. Suplementary information and expanded data
+C          are returned as well as error code.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      DIMENSION KSUP(JSUP),KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC3(JSEC3)
+C
+      COMMON /CREXOFF/ NSIZEG(JELEM),NCREXWTRG(JWORK),
+     1                 NBP,NSUBSET,OMULTI
+C
+      REAL*8 VALUES(KVALS)
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+C
+      CHARACTER*(*) YBUFF
+C
+      CHARACTER*4 CECMWF
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SET CONSTANTS.
+C                --------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      M0=1
+C
+      DO 101 I=1,JSEC0
+      KSEC0(I)=0
+ 101  CONTINUE
+C
+      DO 102 I=1,JSEC1
+      KSEC1(I)=0
+ 102  CONTINUE
+C
+      DO 103 I=1,JSEC3
+      KSEC3(I)=0
+ 103  CONTINUE
+C
+      DO 104 I=1,JSUP
+      KSUP(I)=0
+ 104  CONTINUE
+C
+C
+      CALL CREXINIT(KBUFL,KERR)
+C
+C     -----------------------------------------------------------------
+C*          2.  EXPAND SECTION 0.
+C               -----------------
+ 200  CONTINUE
+C
+      CALL CREXS0( KBUFL,YBUFF,KSUP,KSEC0,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          3.   EXPAND SECTION 1. 
+C                ------------------
+ 300  CONTINUE
+C
+      CALL CREXS1( KBUFL,YBUFF,KSUP,KSEC0,KSEC1,KERR )
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          4.   LOAD CREX TABLES.
+C                -----------------
+ 400  CONTINUE
+C
+      CALL CREXTB(KSEC1,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C*          5.  EXPAND SECTION 2.
+C               -----------------
+ 500  CONTINUE
+C
+      OMULTI=.TRUE.
+      NSUBSET=0
+C
+      DO WHILE(OMULTI)
+C
+      NSUBSET=NSUBSET+1
+C
+      CALL CREXS2(KBUFL,YBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+      CALL CREXS2DATA(KBUFL ,YBUFF ,KSUP  ,KSEC3,
+     1            KELEM ,CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+      IF(KERR.GT.0) RETURN
+C
+      END DO
+C
+C     ------------------------------------------------------------------
+C*          6.   EXPAND SECTION 3.
+C                -----------------
+ 600  CONTINUE
+C
+      CALL CREXS5(KBUFL,YBUFF,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     -----------------------------------------------------------------
+      RETURN
+C
+      END
diff --git a/crexdc/crexinit.F b/crexdc/crexinit.F
new file mode 100755
index 0000000..017f2a0
--- /dev/null
+++ b/crexdc/crexinit.F
@@ -0,0 +1,200 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXINIT(KBUFL,KERR)
+C
+C**** *CREXINIT*
+C
+C
+C     PURPOSE.
+C     --------
+C         Initialize variables and constants. 
+C         Read in Units conversion table
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *CREXINIT(KBUFL,KERR)*
+C
+C         INPUT:
+C                 *KBUFL* - Size of CREX message in bytes
+C
+C         OUTPUT:
+C                 *KERR*  - Return error code
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CREXBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+      COMMON /CREXWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2               NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3               NCREXWTR (JELEM),NCREXWTS (JELEM),NCREXWTRV(JELEM),
+     4               NCREXWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTRV    -  working reference value
+C             NCREXWTDW    -  working data width
+C             NWTIW    -  working data width of increments
+C             NWTIWS   -  working total data width of element set
+C
+      COMMON /CREXUT/ YUNIT,CUNITNAME,CIA5,CIA2,NCODE,NRECORDS
+C
+C             NCODE  - array containing unit code number
+C             CUNITNAME - array containing unit name
+C             CIA5 - array  containing unit CCITTIA5 name
+C             CIA2 - array  containing unit CCITTIA2 name
+C             NRECORDS - number of entries in the list
+C
+
+      SAVE IFIRST
+C
+      DIMENSION NCODE(JCTEXT)
+      CHARACTER*30 CUNITNAME(JCTEXT)
+      CHARACTER*24 CIA5(JCTEXT)
+      CHARACTER*24 CIA2(JCTEXT)
+      CHARACTER*24 YUNIT
+C
+      LOGICAL OFIRST
+      LOGICAL ODREPF
+      REAL*8  RVIND
+      REAL*8  EPS
+      CHARACTER*256 CROOT
+      CHARACTER*256 FILENAME
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+C
+      FILENAME=' '
+      CROOT=' '
+      CALL GETENV('CREX_TABLES',CROOT)
+      ILNG=INDEX(CROOT,' ')
+      ILNG=ILNG-1
+      IF(ILNG.EQ.1) THEN
+C
+C        SGI/HP/SUN CREX TABLES PATH
+C
+         CROOT='/home/ma/emos/tables/crex/'
+C
+C        ADD VERSION NUMBER
+C
+         ILNG=INDEX(CROOT,' ')
+         IEMOSNM = EMOSNUM(1)
+         WRITE(CROOT(ILNG:ILNG+5),'(I6.6)') IEMOSNM
+         CROOT(ILNG+6:) = '/'
+         ILNG=ILNG+6
+      END IF
+
+      NGS=KBUFL
+      NE=0
+      NVIND=2147483647
+      RVIND=1.7D38
+      EPS=1.0D-8
+      M=0
+      N=0
+      NCREXWT=0
+      ODREPF=.false.
+      NCREXSCAM=0
+      NCREXAFDW=0
+      NCREXDWINC=0
+      NC07YYY=0
+      YUNIT=' '
+      IFIRST=1
+c
+      IF(IFIRST.NE.2) THEN
+C
+C        Open/read table containing units associated with code numbers
+C        to be used with C07YYY operator
+C
+         FILENAME=CROOT(1:ILNG)//'units.config.dat'
+         I=INDEX(FILENAME,' ')
+         I=I-1
+C
+         print*,'Units configuration file:'
+         print*,FILENAME
+         OPEN(UNIT=21,FILE=FILENAME(1:I),IOSTAT=IOS,STATUS="OLD")
+         IF(IOS.NE.0) THEN
+            print*,'Open error on units.config.dat'
+            KERR=38
+            RETURN
+         END IF
+
+         I=0
+         DO I=1,JCTEXT
+         READ(21,'(I3,1X,A30,A24,A24)',IOSTAT=IOS,END=100) NCODE(I),
+     1                CUNITNAME(I),CIA5(I),CIA2(I)
+         IF(IOS.NE.0) THEN
+            WRITE(*,'(A)') 'Read error on units.config.dat'
+            KERR=39
+            RETURN
+         END IF
+C
+C        WRITE(*,'(I3,1X,I3,1X,A30,A24,A24)') I, NCODE(I),
+C    1                CUNITNAME(I),CIA5(I),CIA2(I)
+         END DO
+C
+ 100     CONTINUE
+         NRECORDS=I-1
+         IFIRST=2
+         CLOSE(21)
+      END IF
+C
+      RETURN
+      END
diff --git a/crexdc/crexivar.F b/crexdc/crexivar.F
new file mode 100755
index 0000000..ee20abc
--- /dev/null
+++ b/crexdc/crexivar.F
@@ -0,0 +1,117 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXIVAR(KERR)
+C
+C**** *CREXIVAR*
+C
+C
+C     PURPOSE.
+C     --------
+C         PRINT ERROR CODE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *CREXIVAR(KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       15/02/2003.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+c
+
+c
+      DIMENSION NCODE(JCTEXT)
+      CHARACTER*30 CUNITNAME(JCTEXT)
+      CHARACTER*24 CIA5(JCTEXT)
+      CHARACTER*24 CIA2(JCTEXT)
+      CHARACTER*24 YUNIT
+c
+      LOGICAL OFIRST
+      LOGICAL ODREPF
+      REAL*8  RVIND
+      REAL*8  EPS
+
+      NGS=KBUFL
+      NE=0
+      NVIND=2147483647
+      RVIND=1.7D38
+      EPS=1.0D-8
+      M=0
+      N=0
+      NCREXWT=0
+      ODREPF=.false.
+      NCREXSCAM=0
+      NCREXAFDW=0
+      NCREXDWINC=0
+      NC07YYY=0
+      YUNIT=' '
+C
+      RETURN
+      END
diff --git a/crexdc/crexoper.F b/crexdc/crexoper.F
new file mode 100755
index 0000000..0fcdaf9
--- /dev/null
+++ b/crexdc/crexoper.F
@@ -0,0 +1,222 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXOPER(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)
+C
+C
+C**** *CREXOPER*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          PROCESS BUFR OPERATOR.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXOPER(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C               *KPT*    - POINTER TO KDATA ARRAY
+C               *KDLEN*  - DIMENSION OF KDATA ARRAY
+C               *KDATA*  - ARRAY CONTAINING DATA NEEDED FOR DESCRIPTOR
+C                          EXPANSION
+C               *KJ*     - POINTER T ARRAY KSTACK
+C               *KDD*    - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KSTACK* - LIST OF DESCRIPTORS
+C               *KERR*   - RETURN ERROR CODE
+C
+C     *METHOD.
+C      -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+
+C
+C
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   DETERMINE *F *X AND *Y.
+C                -----------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+C
+      IF( IF.NE.2 ) THEN
+         KERR=21
+         WRITE(*,*)  ' CREXOPER :'
+         CALL CREXERR(KERR)
+         GO TO 400
+      END IF
+C
+C*          1.1   CHANGE DATA WIDTH ?
+C                 -------------------
+ 110  CONTINUE
+C
+      IF(IX.EQ.1) THEN
+         NCREXDWINC= IY
+         GO TO 400
+      END IF
+C
+C*          1.2   CHANGE SCALE ?
+C                 --------------
+ 120  CONTINUE
+C
+      IF(IX.EQ.2) THEN
+C
+C
+C*          1.2.1  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         IF(IY.GT.900) IY=-(IY-900)
+         NCREXSCAM=IY
+         GO TO 400
+      END IF
+C
+C
+C*          1.4   ADD ASSOCIATED FIELD ?
+C                 ----------------------
+ 140  CONTINUE
+C
+      IF(IX.EQ.4) THEN
+C
+C*          1.4.1   UPDATE ASSOCIATED FIELD WIDTH.
+C                   ------------------------------
+         NCREXAFDW= IY
+         GO TO 400
+      END IF
+C
+C*          1.5   SIGNIFY CHARACTER ?
+C                 -------------------
+ 150  CONTINUE
+C
+      IF(IX.EQ.5) THEN
+C
+C*          1.5.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NCREXWT = NCREXWT + 1
+         CREXWTEN(NCREXWT)='CHARACTERS'
+         CREXWTU(NCREXWT)=' '
+         NCREXWTR (NCREXWT)= kdd
+         NCREXWTDW(NCREXWT)= IY
+         NCREXWTEN(NCREXWT)=658367
+         NCREXWTS (NCREXWT)=0
+         GO TO 400
+      END IF
+C
+C
+C*          1.6    CHANGE UNIT
+C                 ------------
+ 160  CONTINUE
+C
+      IF(IX.EQ.7) THEN
+C
+         IERR=0
+         CALL GET_UNITS(IY,IERR)
+         IF(IERR.EQ.0) THEN
+            NC07YYY=IY
+         END IF
+C
+         GO TO 400
+C
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+ 300  CONTINUE
+C
+      KERR=22
+      WRITE(*,*)  'CREXOPER:'
+      CALL CREXERR(KERR)
+C
+C     ------------------------------------------------------------------
+C
+ 400  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/crexprco.F b/crexdc/crexprco.F
new file mode 100755
index 0000000..bbeb858
--- /dev/null
+++ b/crexdc/crexprco.F
@@ -0,0 +1,219 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXPRCO(KBUFL,YBUFF,KJ,KDD,KSTACK,KELEM,KERR)
+C
+C**** *CREXPRCO*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          Process CREX operator.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXPRCO(KBUFL,YBUFF,KJ,KDD,KSTACK,KELEM,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  length of CREX message (words)
+C               *YBUFF*   -  array containing CREX message
+C               *KJ*      -  pointer to array kstack
+C               *KDD*     -  data descriptor
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C        OUTPUT:
+C               *KSTACK*  - list of descriptors
+C               *KERR*    - return error code
+C
+C     *METHOD.
+C      -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CREXWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2               NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3               NCREXWTR (JELEM),NCREXWTS (JELEM),NCREXWTRV(JELEM),
+     4               NCREXWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTRV    -  working reference value
+C             NCREXWTDW    -  working data width
+C             NWTIW    -  working data width of increments
+C             NWTIWS   -  working total data width of element set
+C
+C
+      COMMON /CREXWTC/ CREXWTEN(JELEM),CREXWTU (JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+      COMMON /CREXBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+      COMMON /CREXUT/ YUNIT,CUNITNAME,CIA5,CIA2,NCODE,NRECORDS
+C
+C             NCODE  - array containing unit code number
+C             CUNITNAME - array containing unit name
+C             CIA5 - array  containing unit CCITTIA5 name
+C             CIA2 - array  containing unit CCITTIA2 name
+C             NRECORDS - number of entries in the list
+C
+      DIMENSION NCODE(JCTEXT)
+      CHARACTER*30 CUNITNAME(JCTEXT)
+      CHARACTER*24 CIA5(JCTEXT)
+      CHARACTER*24 CIA2(JCTEXT)
+      CHARACTER*24 YUNIT
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+      DIMENSION KSTACK(*)
+      CHARACTER*(*) YBUFF
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   DETERMINE *F *X AND *Y.
+C                -----------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+C
+      IF( IF.NE.2 ) THEN
+         KERR=21
+         PRINT*,' CREXPRCO :'
+         CALL CREXERR(KERR)
+         GO TO 400
+      END IF
+C
+C*          1.1   CHANGE DATA WIDTH ?
+C                 -------------------
+ 110  CONTINUE
+C
+      IF(IX.EQ.1) THEN
+         NCREXDWINC= IY
+         GO TO 400
+      END IF
+C
+C*          1.2   CHANGE SCALE ?
+C                 --------------
+ 120  CONTINUE
+C
+      IF(IX.EQ.2) THEN
+C
+C*          1.2.1  UPDATE SCALE MULTIPLIER.
+C                  ------------------------
+C
+         IF(IY.GT.900) IY=-(IY-900)
+         NCREXSCAM=IY
+         GO TO 400
+      END IF
+C
+C
+C*          1.5   SIGNIFY CHARACTER ?
+C                 -------------------
+ 150  CONTINUE
+C
+      IF(IX.EQ.5) THEN
+C
+C*          1.5.1  ADD SPECIAL ENTRY TO WORKING TABLE.
+C                  -----------------------------------
+         NCREXWT = NCREXWT + 1
+         CREXWTEN(NCREXWT)='CHARACTERS'
+         CREXWTU (NCREXWT)=' '
+         NCREXWTR (NCREXWT)= kdd      
+         NCREXWTDW(NCREXWT)= IY
+         NCREXWTEN(NCREXWT)=658367
+         NCREXWTS (NCREXWT)=0
+         NCREXWTRV(NCREXWT)=0
+         GO TO 400
+      END IF
+C
+C          1.6 CHANGE UNIT
+C              -----------
+ 160  CONTINUE
+C
+      IERR=0
+      IF(IX.EQ.7) THEN
+         CALL GET_UNITS(IY,IERR)
+         IF(IERR.EQ.0) THEN
+            NC07YYY=IY
+         END IF
+C
+         GO TO 400
+C
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+ 300  CONTINUE
+C
+      KERR=22
+      PRINT*,'CREXPRCO:'
+      CALL CREXERR(KERR)
+C
+C     ------------------------------------------------------------------
+C
+ 400  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/crexprs0.F b/crexdc/crexprs0.F
new file mode 100755
index 0000000..ffde02c
--- /dev/null
+++ b/crexdc/crexprs0.F
@@ -0,0 +1,77 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXPRS0(KSEC0)
+C
+C**** *CREXPRS0*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 0 OF CREX MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *CREXPRS0(KSEC0)*
+C
+C        INPUT :
+C               *KSEC0*   -  ARRAY CONTAINING SECTION 0 INFORMATION
+C                            KSEC0( 1)-- LENGTH OF SECTION 0 (BYTES)
+C                            KSEC0( 2)-- TOTAL LENGTH OF CREX MESSAGE (BYTES)
+C                            KSEC0( 3)-- Crex Edition number
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      DIMENSION KSEC0(*)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 0.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(*,'(1H1)')
+C
+      WRITE(*,'(1H ,A)')    '         CREX SECTION 0    '
+      WRITE(*,'(1H )')
+      WRITE(*,'(1H ,A,I5)') 'LENGTH OF SECTION 0 (BYTES)         ',
+     1                       KSEC0(1)
+      WRITE(*,'(1H ,A,I5)') 'TOTAL LENGTH OF CREX MESSAGE (BYTES)',
+     1                       KSEC0(2)
+C
+      RETURN
+      END
diff --git a/crexdc/crexprs1.F b/crexdc/crexprs1.F
new file mode 100755
index 0000000..807804a
--- /dev/null
+++ b/crexdc/crexprs1.F
@@ -0,0 +1,195 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXPRS1(KSEC1,KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1                    KELEM,CNAMES)
+C
+C**** *CREXPRS1*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT SECTION 1 OF CREX MESSAGE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *CREXPRS1(KSEC1,KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+C                            KELEM,CNAMES)*
+C
+C        INPUT :
+C
+C               *KSEC1*   -  ARRAY CONTAINING SECTION 1 INFORMATION
+C                            KSEC1( 1)-- Not used
+C                            KSEC1( 2)-- CREX EDITION NUMBER
+C                            KSEC1( 3)-- Not used
+C                            KSEC1( 4)-- Not Used
+C                            KSEC1( 5)-- Not used
+C                            KSEC1( 6)-- CREX MESSAGE TYPE
+C                            KSEC1( 7)-- Not used
+C                            KSEC1( 8)-- VERSION NUMBER OF LOCAL TABLE USED
+C                            KSEC1( 9)-- Not used
+C                            KSEC1(10)-- Not used
+C                            KSEC1(11)-- Not used
+C                            KSEC1(12)-- Not used
+C                            KSEC1(13)-- Not used
+C                            KSEC1(14)-- CREX MASTER TABLE
+C                            KSEC1(15)-- VERSION NUMBER OF MASTER TABLE USED
+C                            KSEC1(16) - KSEC1(JSEC1) -- Not used
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+
+C
+C               *KSEC3*   -  Integer array of 4 words containing
+C                            KSEC3( 1)-- Reserved
+C                            KSEC3( 2)-- Reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- Reserved
+
+C               *KTDLEN*  -  number of data descriptors in section 1
+C               *KTDLST*  -  array containing data descriptors in section 1
+C               *KTDEXL*  -  number of entries in list of expanded data descriptors
+C               *KTDEXP*  -  array containig expanded data descriptors
+C               *KELEM*   -  Integer (expected number of expanded elements)
+C               *CNAMES*  -  Character*64  array of KELEM containing
+C                            CREX Table B element names
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      DIMENSION KSEC1(*)
+      DIMENSION KSEC3(*)
+      DIMENSION KTDLST(KTDLEN),KTDEXP(KTDEXL)
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*6  YYYYYY
+
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT SECTION 1.
+C                ----------------
+ 100  CONTINUE
+C
+      WRITE(*,'(1H1)')
+C
+      WRITE(*,'(1H ,A)')    '        CREX SECTION 1    '
+      WRITE(*,'(1H )')
+      IF(KSEC1(2).LT.2) THEN
+       WRITE(*,'(1H ,A,I5)')'CREX EDITION NUMBER            ',KSEC1( 2)
+       WRITE(*,'(1H ,A,I5)')'CREX MESSAGE TYPE              ',KSEC1( 6)
+       WRITE(*,'(1H ,A,I5)')'VERSION NUMBER OF LOCAL TABLE  ',KSEC1( 8)
+       WRITE(*,'(1H ,A,I5)')'VERSION NUMBER OF MASTER TABLE ',KSEC1(15)
+       WRITE(*,'(1H ,A,I5)')'CREX MASTER TABLE              ',KSEC1(14)
+C
+       WRITE(*,'(1H1)')
+       WRITE(*,'(1H ,A,I5)')'NUMBER OF SUBSETS              ',KSEC3( 3)
+      ELSE
+       WRITE(*,'(1H ,A,I5)')'CREX EDITION NUMBER            ',KSEC1( 2)
+       WRITE(*,'(1H ,A,I5)')'ORIGINATING CENTRE             ',KSEC1( 3)
+       WRITE(*,'(1H ,A,I5)')'ORIGINATING SUB-CENTRE         ',KSEC1(16)
+       WRITE(*,'(1H ,A,I5)')'UPDATE SEQUENCE NUMBER         ',KSEC1( 4)
+       WRITE(*,'(1H ,A,I5)')'CREX DATA CATEGORY             ',KSEC1( 6)
+       WRITE(*,'(1H ,A,I5)')'INTERNATIONAL DATA SUB-CATEGORY',KSEC1( 7)
+       WRITE(*,'(1H ,A,I5)')'YEAR                           ',KSEC1( 9)
+       WRITE(*,'(1H ,A,I5)')'MONTH                          ',KSEC1(10)
+       WRITE(*,'(1H ,A,I5)')'DAY                            ',KSEC1(11)
+       WRITE(*,'(1H ,A,I5)')'HOUR                           ',KSEC1(12)
+       WRITE(*,'(1H ,A,I5)')'MINUTE                         ',KSEC1(13)
+       WRITE(*,'(1H ,A,I5)')'VERSION NUMBER OF MASTER TABLE ',KSEC1(15)
+       WRITE(*,'(1H ,A,I5)')'VERSION NUMBER OF LOCAL TABLE  ',KSEC1( 8)
+       WRITE(*,'(1H ,A,I5)')'CREX MASTER TABLE              ',KSEC1(14)
+       WRITE(*,'(1H ,A,I5)')'BUFR MASTER TABLE NUMBER       ',KSEC1(17)
+       WRITE(*,'(1H ,A,I5)')'BUFR VERSION OF LOCAL TABLE    ',KSEC1(18)
+C
+       WRITE(*,'(1H1)')
+       WRITE(*,'(1H ,A,I5)')'NUMBER OF SUBSETS              ',KSEC3( 3)
+C
+      END IF
+C
+C
+      WRITE(*,'(1H ,//)')
+      WRITE(*,'(1H ,A)')    '       DATA DESCRIPTORS (UNEXPANDED)'
+      WRITE(*,'(1H )')
+C
+      WRITE(*,'(1H )')
+      DO 110 I=1,KTDLEN
+       write(yyyyyy,'(i6.6)') KTDLST(I)
+       if(yyyyyy(1:1).eq.'0') yyyyyy(1:1)='B'
+       if(yyyyyy(1:1).eq.'1') yyyyyy(1:1)='R'
+       if(yyyyyy(1:1).eq.'2') yyyyyy(1:1)='C'
+       if(yyyyyy(1:1).eq.'3') yyyyyy(1:1)='D'
+       WRITE(*,'(1H ,I4,2X,A)') I,yyyyyy
+ 110  CONTINUE
+C
+      WRITE(*,'(1H ,/)')
+      WRITE(*,'(1H ,A)')    '       DATA DESCRIPTORS (EXPANDED)'
+      WRITE(*,'(1H )')
+      DO 120 I=1,KTDEXL
+       write(yyyyyy,'(i6.6)') KTDEXP(I)
+       if(yyyyyy(1:1).eq.'0') yyyyyy(1:1)='B'
+       if(yyyyyy(1:1).eq.'1') yyyyyy(1:1)='R'
+       if(yyyyyy(1:1).eq.'2') yyyyyy(1:1)='C'
+       if(yyyyyy(1:1).eq.'3') yyyyyy(1:1)='D'
+       WRITE(*,'(1H ,I5,2X,A,2X,A)') I,yyyyyy,CNAMES(I)
+ 120  CONTINUE
+
+      RETURN
+      END
diff --git a/crexdc/crexprt.F b/crexdc/crexprt.F
new file mode 100755
index 0000000..a62590c
--- /dev/null
+++ b/crexdc/crexprt.F
@@ -0,0 +1,422 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXPRT(K,KSUB1,KSUB2,KELEM,CNAMES,CUNITS,
+     1                 CVALS,KVALS,VALUES,KSUP,KSEC1,KERR)
+C
+C**** *CREXPRT*
+C
+C
+C     PURPOSE.
+C     --------
+C           PRINT EXPANDED CREX MESSAG.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C           *CALL* *CREXPRT(K,KSUB1,KSUB2,KELEM,CNAMES,CUNITS,
+C                         CVALS,KVALS,VALUES,KSUP,KSEC1,KERR)*
+C
+C        INPUT :
+C               *K*       -  SWITCH TO PRINT WITH/WITOUT CONTENT OF CODE TABLES
+C                            0  - NO  CODE TABLE CONTENT
+C                            1  - YES CODE TABLE CONTENT
+C               *KSUB1*   -  STARTING SUBSET
+C               *KSUB2*   -  ENDING SUBSET
+C               *KELEM*   -  DIMENSION OF CNAMES, CUNITS ARRAY
+C               *CNAMES*  -  CHARACTER ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  CHARACTER ARRAY CONTAINIG UNITS
+C               *CVALS*   -  CHARACTER ARRAY CONTAINING CREX CODE TABLE
+C                            ENTRIES
+C               *KVALS*   -  DIMENSION OF VALUES ARRAY
+C               *VALUES*  -  REAL*8 ARRAY (EXPANDED DATA VALUES)
+C
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+C        OUTPUT:
+C               *KERR*    -  RETURNED ERROR CODE
+C
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C            NONE
+C
+C     EXTERNALS.
+C     ----------
+C
+C            NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       04/02/2003.
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER YCHAR*30,YLONG*320
+C
+C
+      DIMENSION KTDLST(JELEM)
+      DIMENSION KTDEXP(JELEM)
+
+      DIMENSION KSUP(*),KSEC1(*)
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND, EPS
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   PRINT CREX MESSAGE.
+C                -------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      ISUB1=KSUB1
+      ISUB2=KSUB2
+      IF(ISUB1.LE.0.OR.ISUB2.LE.0) THEN
+         WRITE(*,'(A)')    ' WARNING - NEGATIVE KSUB1 OR KSUB2.'
+         WRITE(*,'(A,I5)') ' WARNING - NUMBER OF SUBSETS IS ',KSUP(6)
+         RETURN
+      END IF
+      IF(ISUB1.GT.KSUP(6)) THEN
+         WRITE(*,'(A,I5)') ' WARNING - NUMBER OF SUBSETS IS ',KSUP(6)
+         RETURN
+      END IF
+      IF(ISUB2.GT.KSUP(6)) THEN
+         ISUB2=KSUP(6)
+         WRITE(*,'(A,I5)') ' WARNING - KSUB2 REPLACED BY ',KSUP(6)
+      END IF
+C
+      JQCP1= 0
+C
+      IF(K.EQ.0) THEN
+         JQPR=0
+         JQUA=0
+         JQC=0
+C          DO 171 J171=1,KSUP(5)
+C          IF(CNAMES(J171)(1:8).EQ.'DATA PRE') THEN
+C            JQPR=J171
+C            GO TO 172
+C          END IF
+C  171     CONTINUE
+C  172     DO 173 J173=1,KSUP(5)
+C          IF(CNAMES(J173)(1:9).EQ.'QUALITY I') JQUA=J173
+C  173     CONTINUE
+C          DO 174 J174=1,KSUP(5)
+C          IF(CNAMES(J174)(1:3).EQ.'% C') THEN
+C            JQC =J174
+C            GO TO 175
+C          END IF
+C  174     CONTINUE
+C
+C  175     CONTINUE
+C
+C         WRITE(*,'(1H1)')
+C
+C         WRITE(*,'(1H ,A)')    'EXPANDED CREX MESSAGE  '
+C         WRITE(*,'(1H ,//)')
+C         WRITE(*,'(1H ,A,I6)') 'CREX MESSAGE  DATA TYPE   ',KSEC1(6)
+C         WRITE(*,'(1H ,A,I6)') 'RDB DATA SUBTYPE          ',KSEC1(7)
+C         WRITE(*,'(1H ,A,I6)') 'TOTAL BUFR LENGTH (BYTES) ',KSUP(8)
+C
+         NTYPE=KSEC1(7)
+         IF(JQUA.EQ.0) THEN      !IF(JQUA.NE.0) THEN
+            JQUA=KSUP(5)
+C
+            DO 103 JB=ISUB1,ISUB2
+            CALL CREXSEL2(JB,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1                  CUNITS,KERR)
+            JQUA=KTDEXL
+C
+            ILN=0
+            WRITE(*,'(1H )')
+C
+            DO 104 JA=1,JQUA
+C
+            ILN=ILN+1
+            JAJB=JA+(JB-1)*KELEM
+C
+            IF(ABS(VALUES(JAJB)-RVIND).LT.EPS) THEN
+               WRITE(*,9918) ILN,CNAMES(JA),CUNITS(JA)
+            ELSE
+               IF(CUNITS(JA)(1:4).EQ.'CCIT') THEN
+                  I=NINT(VALUES(JAJB)/1000)
+                  NCHAR=VALUES(JAJB)-I*1000
+                  NW=NCHAR/80
+                  NWOFF=NCHAR-NW*80
+                  IF(NWOFF.NE.0) NW=NW+1
+C
+                  YLONG=' '
+                  YLONG(1:80)=CVALS(I)
+C
+                  II=I
+                  DO 125 JC=1,NW-1
+                  II=II+1
+                  KF=JC*80+1
+                  KL=(JC+1)*80
+                  YLONG(KF:KL)=CVALS(II)
+ 125              CONTINUE
+C
+                  NLINE=NCHAR/30
+                  IDIF =NCHAR-NLINE*30
+                  IF(IDIF.NE.0) NLINE=NLINE+1
+                  YCHAR=' '
+                  YCHAR=YLONG(1:30)
+C
+                  WRITE(*,9919)ILN,CNAMES(JA),VALUES(JAJB),
+     1                         CUNITS(JA),YCHAR
+C
+                  IF(NLINE.GT.1) THEN
+                     DO 130 JJ=1,NLINE-1
+C
+                     K2=JJ*30+1
+                     K1=(JJ+1)*30
+                     YCHAR=' '
+                     YCHAR=YLONG(K2:K1)
+C
+                     WRITE(*,9920) YCHAR
+ 130                 CONTINUE
+C
+                   END IF
+               ELSE
+                  WRITE(*,9917) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA)
+               END IF
+            END IF
+C
+ 104        CONTINUE
+ 103        CONTINUE
+C
+         ELSE
+            JQPRM1=JQPR-1
+            JQC=JQC-1
+C
+            DO 101 JB=ISUB1,ISUB2
+C
+            ILN=0
+            JQCP1=0
+C
+            WRITE(*,'(1H )')
+C
+            DO 102 JA=1,JQUA-1
+C
+            ILN=ILN+1
+            JAJB=JA+(JB-1)*KELEM
+            JQPJB=JQPRM1+JA+(JB-1)*KELEM
+C
+            IF(VALUES(JQPJB).EQ.0.0) THEN
+               JQCP1=JQCP1+1
+               JQCPP1=JQC+JQCP1+(JB-1)*KELEM
+               IF(ABS(VALUES(JAJB)-RVIND).LT.EPS) THEN
+                  WRITE(*,9918) ILN,CNAMES(JA),CUNITS(JA)
+               ELSE
+                  WRITE(*,9916) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA),
+     1            CNAMES(JQC+JQCP1),VALUES(JQCPP1),
+     1            CUNITS(JQC+JQCP1)
+               END IF
+            ELSE
+               IF(ABS(VALUES(JAJB)-RVIND).LT.EPS) THEN
+                  WRITE(*,9918) ILN,CNAMES(JA),CUNITS(JA)
+                  IF(NTYPE.EQ.5.OR.NTYPE.EQ.3) JQCP1=JQCP1+1
+               ELSE
+                  WRITE(*,9917) ILN,CNAMES(JA),VALUES(JAJB),
+     1            CUNITS(JA)
+                  IF(NTYPE.EQ.5.OR.NTYPE.EQ.3) JQCP1=JQCP1+1
+               END IF
+            END IF
+C
+C
+ 102        CONTINUE
+ 101        CONTINUE
+C
+         END IF
+      END IF
+C
+      IF(K.EQ.1) THEN
+C
+C---------------------------------------------------------------------
+          WRITE(*,'(1H1)')
+C
+          WRITE(*,'(1H ,A)') 'WARNING : PRINTING CONTENT OF CODE'//
+     1   ' TABLES NOT YET IMPLEMENTED.'
+          RETURN
+C---------------------------------------------------------------------
+C
+C          WRITE(*,'(1H ,A)')    'EXPANDED CREX MESSAGE  '
+C          WRITE(*,'(1H ,//)')
+C          WRITE(*,'(1H ,A,I6)') 'RDB DATA TYPE             ',KSEC1(6)
+C          WRITE(*,'(1H ,A,I6)') 'RDB DATA SUBTYPE          ',KSEC1(7)
+C          WRITE(*,'(1H ,A,I6)') 'TOTAL BUFR LENGTH (BYTES) ',KSUP(8)
+C
+C          DO 150 JB=1,KSUP(6)
+C
+C          WRITE(*,'(1H )')
+C
+C          DO 160 JA=1,KSUP(5)
+C
+C          JAJB=JA+(JB-1)*KELEM
+C
+C          IF(ABS(VALUES(JAJB)-RVIND).LT.EPS) THEN
+C             WRITE(*,9903) CNAMES(JA)(1:32),CUNITS(JA)
+C             WRITE(*,9903) CNAMES(JA)(33:64)
+C          ELSE
+C             IF(CUNITS(JA)(1:10).EQ.'CODE TABLE'.OR.
+C     1         CUNITS(JA)(1:9) .EQ.'CCITTIA5'     ) THEN
+C                I=NINT(VALUES(JAJB)/1000)
+C                NCHAR=VALUES(JAJB)-I*1000
+C                NW=NCHAR/80
+C                NWOFF=NCHAR-NW*80
+C                IF(NWOFF.NE.0) NW=NW+1
+CC
+C                YLONG(1:80)=CVALS(I)
+C
+C                II=I
+C                DO 165 JC=1,NW-1
+C                II=II+1
+C                KF=JC*80+1
+C                KL=(JC+1)*80
+C                YLONG(KF:KL)=CVALS(II)
+C  165           CONTINUE
+C
+C                NLINE=NCHAR/30
+C                IDIF =NCHAR-NLINE*30
+C                IF(IDIF.NE.0) NLINE=NLINE+1
+C                YCHAR=YLONG(1:30)
+C
+C                WRITE(*,9904)CNAMES(JA)(1:32),VALUES(JAJB),
+C     1         CUNITS(JA),YCHAR
+C                WRITE(*,9904)CNAMES(JA)(33:64)
+C
+C                IF(NLINE.GT.1) THEN
+C                   DO 170 JJ=1,NLINE-1
+C
+C                   K2=JJ*30+1
+C                   K1=(JJ+1)*30
+C                   YCHAR=YLONG(K2:K1)
+C
+C                   WRITE(*,9905) YCHAR
+C  170              CONTINUE
+C
+C                END IF
+C             ELSE
+C                WRITE(*,9906) CNAMES(JA)(1:32),VALUES(JAJB),
+C     1                       CUNITS(JA)
+C                WRITE(*,9906) CNAMES(JA)(33:64)
+C             END IF
+C          END IF
+C
+C  160     CONTINUE
+C  150     CONTINUE
+C
+        END IF
+C
+C
+C       RETURN
+C
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+C     ------------------------------------------------------------------
+ 9903 FORMAT(1H ,A,'     MISSING',2X,A)
+ 9904 FORMAT(1H ,A,F20.4,2X,A,2X,A)
+ 9905 FORMAT(1H ,100X,A)
+ 9906 FORMAT(1H ,I5,1X,A,E14.4,2X,A)
+ 9916 FORMAT(1H ,I5,1X,A15,1X,F20.4,1X,A20,1X,A15,1X,F3.0,1X,A15)
+ 9917 FORMAT(1H ,I5,1X,A15,1X,F20.4,1X,A24)
+ 9918 FORMAT(1H ,I5,1X,A15,1X,'             MISSING',1X,A24)
+ 9919 FORMAT(1H ,I5,1X,A15,1X,F20.4,1X,A24,1X,A)
+ 9920 FORMAT(1H ,62X,A)
+      END
diff --git a/crexdc/crexrep.F b/crexdc/crexrep.F
new file mode 100755
index 0000000..dc3879a
--- /dev/null
+++ b/crexdc/crexrep.F
@@ -0,0 +1,339 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXREP(KPT,KDLEN,KDATA,KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *CREXREP*
+C
+C
+C     PURPOSE.
+C     --------
+C          RESOLVE DATA DESCRIPTOR REPLICATION PROBLEM.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXREP(KPT,KDLEN,KDATA,KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C               *KPT*      - POINTER TOO KDATA ARRAY
+C               *KDLEN*    -  DIMENSION OF KDATA ARRAY
+C               *KDATA*    -  ARRAY CONTAINING DATA NEEDED FOR DATA DESCRIPTOR
+C                            EXPANSION
+C               *KDD*      - DATA DESCRIPTOR
+C        OUTPUT:
+C               *KJ*       - POINTER TO KSTACK ARRAY
+C               *KJ1*      - POINTER TO LAST ELEMENT IN KSTACK
+C               *KSTACK*   - LIST OF DATA DESCRIPTORS
+C               *KERR*     - RETURN CODE
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          BUETDR            - RESOLVE TABLE D REFERENCE
+C          BUEPWT            - UPDATE WORKING TABLES
+C          GBYTE             - UNPACK BIT PATHERN
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       01/02/91.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CRWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                NC07YYY
+C
+      COMMON /CRWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2             NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3             NCREXWTR (JELEM),NCREXWTS (JELEM),
+     4             NCREXWTDW(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTDW    -  working data width
+C
+C
+      COMMON /CRWTC/ CREXWTEN(JELEM),CREXWTU(JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+      COMMON /CRBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+C
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+      DIMENSION ILIST(JELEM)
+      DIMENSION KSTACK(*)
+      DIMENSION KDATA(KDLEN)
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   STORE K, NUMBER OF DESCRIPTORS TO BE REPLICATED.
+C                ------------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+      K   = IX
+      IF(IY.EQ.0) ODREPF=.TRUE.
+C
+C*          1.1   DELAYED REPLICATION ?
+C                 ---------------------
+ 110  CONTINUE
+C
+      IF( IY .NE. 0 ) THEN
+C
+C*          1.2   STORE NUMBER OF DESCRIPTORS, K, AND REPLICATION
+C                 -----------------------------------------------
+C                 FACTOR JR.
+C                 ----------
+ 120     CONTINUE
+C
+         JR = IY
+         GO TO 500
+
+      ELSE
+         KDD=31002
+         go to 300
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          2.   GET NEXT DESCRIPTOR.
+C                --------------------
+ 200  CONTINUE
+C
+      KJ =KJ + 1
+      KDD= KSTACK(KJ)
+C
+C     ------------------------------------------------------------------
+C
+C*          2.1  REPLICATION FACTOR ?
+C                --------------------
+ 210  CONTINUE
+C
+      IF(KDD.NE.31001.AND.KDD.NE.31002.AND.
+     1   KDD.NE.31000.AND.
+     1   KDD.NE.31011.AND.KDD.NE.31012 )THEN
+C
+C*          2.1.1  SEQUENCE DESCRIPTOR ?
+C                  ---------------------
+C
+         IF=KDD/100000
+C
+         IF( IF.EQ.3) THEN
+C
+C*          2.1.1.1  SOLVE TABLE D REFERENCE.
+C                    ------------------------
+            CALL CREXETDR(KJ,KJ1,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NCREXSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         IF( IF.EQ.2) THEN
+            CALL CREXOPER(KPT,KDLEN,KDATA,KJ,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               CALL CREXERR(KERR)
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         KERR=36
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UPDATE WORKING TABLE.
+C               ---------------------
+ 300  CONTINUE
+C
+      CALL CREXEPWT (KDD,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  STORE JR, THE REPLICATION FACTOR FROM DATA.
+C               ------------------------------------------------------
+ 400  CONTINUE
+C
+      KPT=KPT+1
+      IF(KPT.GT.KDLEN) THEN
+         KERR=31
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      JR=KDATA(KPT)
+C
+      IF(JR.EQ.0) THEN
+         IIIF=KSTACK(KJ+1)/100000
+         IIII=KSTACK(KJ+1)-IIIF*100000
+         IIIX=IIII/1000
+         IIIY=IIII-IIIX*1000
+C
+         IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+            KJ=KJ+1
+            CALL CREXOPER(KPT,KDLEN,KDATA,KJ,KSTACK(KJ),KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               CALL CREXERR(KERR)
+               RETURN
+            END IF
+         END IF
+
+         KJ=KJ+K
+         GO TO 640
+      END IF
+
+      JRTK=JR*K+KJ1-K
+      IF(JRTK.GT.JELEM) THEN
+         KERR=30
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C     CHECK IF NEXT DESCRIPTOR CANCEL OPERATOR FOR DELAYED
+C     REPLICATION
+C
+      IIIF=KSTACK(KJ+1)/100000
+      IIII=KSTACK(KJ+1)-IIIF*100000
+      IIIX=IIII/1000
+      IIIY=IIII-IIIX*1000
+C
+      IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+         KJ=KJ+1
+         CALL CREXOPER(KPT,KDLEN,KDATA,KJ,KSTACK(KJ),KSTACK,KERR)
+         IF(KERR.GT.0) THEN
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+      END IF
+C     ------------------------------------------------------------------
+C*          5.  GET NEXT K DESCRIPTORS.
+C               -----------------------
+ 500  CONTINUE
+C
+      DO 501 J=1,K
+C
+      ILIST(J)=KSTACK(KJ+J)
+C
+ 501  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.  ADD JR TIMES K DESCRIPTORS IN PLACE OF K
+C               ----------------------------------------
+C               DESCRIPTORS OBTAINED.
+C               ---------------------
+ 600  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.1  PUSH DOWN DESCRIPTORS IN KSTACK FOR (JR-1)*K PLACES
+C                ---------------------------------------------------
+C                STARTING AT KJ1 AND ENDING AT KJ+K.
+C                -----------------------------------
+ 610  CONTINUE
+C
+      JRKM1=(JR-1)*K
+C
+      DO 611 J=KJ1,KJ+K,-1
+C
+      KSTACK(J+JRKM1)=KSTACK(J)
+C
+ 611  CONTINUE
+C
+C*          6.2  INSERT LIST IN THE STACK.
+C                -------------------------
+ 620  CONTINUE
+C
+      DO 622 J=1,JR
+C
+      KJJM1K=KJ+(J-1)*K
+C
+      DO 623 J1=1,K
+C
+      KSTACK(KJJM1K+J1)=ILIST(J1)
+C
+ 623  CONTINUE
+ 622  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.3  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C                ----------------------------------------
+ 630  CONTINUE
+C
+      KJ1 = KJ1  + (JR-1)*K
+C
+C     ------------------------------------------------------------------
+C*          6.4  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 640  CONTINUE
+C
+      IF(N221.NE.0)  N221= KJ1  - KJ + 1
+C
+C     ------------------------------------------------------------------
+ 700  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/crexs0.F b/crexdc/crexs0.F
new file mode 100755
index 0000000..17ba83c
--- /dev/null
+++ b/crexdc/crexs0.F
@@ -0,0 +1,145 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXS0( KBUFL,YBUFF,KSUP,KSEC0,KERR)
+C
+C**** *BUEXS0*
+C
+C
+C     PURPOSE.
+C     --------
+C          Expands section 0 of Crex message. 
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXS0( KBUFL,YBUFF,KSUP,KSEC0,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  length of CREX message (words)
+C               *YBUFF*   -  Character string containing Crex message
+C        OUTPUT:
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC0*   -  array containing section 0 information
+C                            KSEC0( 1)-- length of section 0 (bytes)
+C                            KSEC0( 2)-- total length of CREX message (bytes)
+C                            KSEC0( 3)-- Not used
+C
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C     --------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      DIMENSION KSEC0(*)
+      DIMENSION KSUP(*)
+      CHARACTER*(*) YBUFF
+C
+      CHARACTER*4 YCREX
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C*          1.   EXPAND SECTION 0.
+C                -----------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      KSEC0(1)=4
+      KSEC0(2)=KBUFL
+      KSUP(8) =KBUFL
+C
+C*          1.1  INITIALIZE WORKING POINTERS NWPT AND NBPT.
+C                ------------------------------------------
+      NBPT = 1
+C
+C*          1.2  UNPACK FIRST FOUR OCTETS CONTAINING *CREX*.
+C                -------------------------------------------
+C
+      IF(YBUFF(NBPT:NBPT+3).ne.'CREX') then
+         KERR=1
+         print*,'This bulletin is not CREX message.'
+         RETURN
+      END IF
+C
+C           1.2 Position pointer to begining of section1.
+C               ---------------------------------------------
+ 120  CONTINUE
+C
+      NBPT=NBPT+4
+      IF(NBPT.GT.KBUFL) THEN
+         KERR=26
+         print*,'CREXS0:'
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      IRET=0
+      CALL NEXTSEC(KBUFL,YBUFF,NBPT,NGS,KERR)
+      IF(KERR.NE.0) THEN
+         KERR=40
+         print*,'NEXTSEC :' 
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      CALL NEXTGRP(KBUFL,YBUFF,NBPT,NGS,KERR)
+      IF(KERR.NE.0) THEN
+         KERR=41
+         print*,'NEXTGRP : '
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      RETURN
+C     -----------------------------------------------------------------
+C
+      END
diff --git a/crexdc/crexs1.F b/crexdc/crexs1.F
new file mode 100755
index 0000000..197b5bc
--- /dev/null
+++ b/crexdc/crexs1.F
@@ -0,0 +1,445 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXS1( KBUFL,YBUFF,KSUP,KSEC0,KSEC1,KERR)
+C
+C**** *CREXS1*
+C
+C
+C     PURPOSE.
+C     --------
+C          Expands section 1 of CREX message. Saves expanded information
+C          in the array KSEC1.
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *BUEXS1( KBUFL,YBUFF,KSUP,KSEC0,KSEC1,KERR)*
+C
+C          INPUT :
+C               *KBUFL*   -  length of CREX message (words)
+C               *YBUFF*   -  array containing CREX message
+C          OUTPUT:
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC0*   -  array containing section 0 information
+C                            KSEC0( 1)-- length of section 0 (bytes)
+C                            KSEC0( 2)-- total length of CREX message (bytes)
+C                            KSEC0( 3)-- CREX Edition number
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+C               *KERR*    -  Return error code
+C
+C      METHOD.
+C      -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      DIMENSION KSUP(JSUP),KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION ISEC1(JSEC1)
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON/CREXTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1                NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2                NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR     - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+       COMMON/CREXTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+c
+C
+      COMMON /CREXEL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1                NCREXTDEXP(JELEM)
+c
+      CHARACTER*6 CREXLST
+      CHARACTER*64 CREXNAME 
+      CHARACTER*24 CREXUNIT
+      REAL*8 RVIND,EPS
+c
+      CHARACTER*(*) YBUFF
+C
+C     ------------------------------------------------------------------
+C*          1.  EXPAND SECTION 1.
+C               ------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF(YBUFF(NBPT:NBPT).NE.'T') THEN
+         KERR=42
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      NBPT=NBPT+1
+      ITEMP=NBPT
+      CALL NEXTSEC(KBUFL,YBUFF, ITEMP,NGS,KERR )
+      IF(KERR.NE.0) THEN
+         KERR=40 
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      IF(ITEMP.GT.NGS) THEN
+         KERR=43
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C
+C     Get Master table used tt
+C
+      CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(14),KERR )
+      IF(KERR.NE.0) THEN
+         KERR=44
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C     Get CREX Edition number  ee
+C
+      CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(2),KERR)
+      IF(KERR.NE.0) THEN
+         KERR=45
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+      KSEC0(3)=KSEC1(2)
+C
+C     Get Version number of master table used  vv
+C
+      CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(15),KERR)
+      IF(KERR.NE.0) THEN
+         KERR=46
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      IF(KSEC1(2).EQ.2 ) THEN
+C
+C        Bufr master table version number  bb
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(17),KERR)
+         IF(KERR.NE.0) THEN
+            KERR=46
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+C
+C        Bufr version number of local table ww
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(18),KERR)
+         IF(KERR.NE.0) THEN
+            KERR=46
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+
+      END IF
+
+      CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+      CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+      IF(KERR.NE.0) THEN
+         print*,'nextprt: error ',ierr
+         RETURN
+      END IF
+C
+      IF(YBUFF(NBPT:NBPT).NE.'A') THEN
+         print*,'CREX table A not found.'
+         RETURN
+      END IF
+C
+      NBPT=NBPT+1
+C
+C     Get CREX table A   nnn
+C
+      CALL EXTGRP(KBUFL,YBUFF, NBPT,3,KSEC1(6),KERR)
+      IF(KERR.NE.0) THEN
+         print*,'extgrp : error ',kerr
+         RETURN
+      END IF
+      IF(KSEC1(2).eq.2) THEN
+C
+C        Get international sub-category mmm
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,3,KSEC1(7),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+
+         CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextprt: error ',ierr
+            RETURN
+         END IF
+C
+         IF(YBUFF(NBPT:NBPT).NE.'P') THEN
+            print*,'CREX oiginating centre not found.'
+            RETURN
+         END IF
+C
+         NBPT=NBPT+1
+C
+C        Get originating centre  ooooo
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,5,KSEC1(3),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+C
+C        Get originating sub-centre ppp
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,3,KSEC1(16),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+
+         CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextprt: error ',ierr
+            RETURN
+         END IF
+C
+         IF(YBUFF(NBPT:NBPT).NE.'U') THEN
+            print*,'CREX update sequence number not found.'
+            RETURN
+         END IF
+C
+         NBPT=NBPT+1
+C
+C        Get update sequence number uu
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(4),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+C
+         CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextprt: error ',ierr
+            RETURN
+         END IF
+C
+         IF(YBUFF(NBPT:NBPT).NE.'S') THEN
+            print*,'CREX number of subsets not found.'
+            RETURN
+         END IF
+C
+         NBPT=NBPT+1
+C          Get number of subsets
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,3,KSEC1(5),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+C
+         CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextprt: error ',ierr
+            RETURN
+         END IF
+
+         IF(YBUFF(NBPT:NBPT).NE.'Y') THEN
+            print*,'CREX date not found.'
+            RETURN
+         END IF
+
+C
+         NBPT=NBPT+1
+C
+C        Get CREX date
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,4,KSEC1(9),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(10),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(11),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+
+         CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextprt: error ',ierr
+            RETURN
+         END IF
+C
+         IF(YBUFF(NBPT:NBPT).NE.'H') THEN
+            print*,'CREX time not found.'
+            RETURN
+         END IF
+C
+         NBPT=NBPT+1
+C
+C        Get CREX time
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(12),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,2,KSEC1(13),KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+
+C
+      END IF
+C
+      KTDLEN=0
+C
+ 200  CONTINUE
+C
+      CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+      CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+      IF(KERR.NE.0) THEN
+         print*,'nextprt: error ',ierr
+         RETURN
+      END IF
+C
+      IF(NBPT.GE.ITEMP) GO TO 300
+C
+      IF(YBUFF(NBPT:NBPT).EQ.'E') THEN
+         NE=1
+         GO TO 200 
+      END IF
+      KTDLEN=KTDLEN+1
+      CALL EXTGRPC(KBUFL,YBUFF, NBPT,6,CREXLST(KTDLEN),KERR)
+      IF(KERR.NE.0) THEN
+         print*,'extgrpc : error ',kerr
+         RETURN
+      END IF
+C
+      GO TO 200
+C
+ 300  CONTINUE
+C
+      NCREXTDLEN=KTDLEN 
+C     ------------------------------------------------------------------
+C
+      RETURN
+      END
diff --git a/crexdc/crexs2.F b/crexdc/crexs2.F
new file mode 100755
index 0000000..5a2e01a
--- /dev/null
+++ b/crexdc/crexs2.F
@@ -0,0 +1,324 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXS2(KBUFL,YBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,KERR)
+C
+C**** *CREXS2*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          Expand Crex data descriptors
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXS2( KBUFL,YBUFF,KSUP,KSEC3,KELEM,CNAMES,CUNITS,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  length of crex message (words)
+C               *YBUFF*   -  array containing CREX message
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C        OUTPUT:
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC3*   -  array containing section 3 information
+C                            KSEC3( 1)-- length of section 3 (bytes)
+C                            KSEC3( 2)-- reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- flag (data type,data compression)
+C               *CNAMES*  -  character array containing element names
+C               *CUNITS*  -  character array containig units
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C      -------
+C
+C          Expands list of data descriptors in section 1
+C          of Crex message. Working tables for further data decoding are set,
+C          list of Crex data descriptors and a list of expanded Crex data descriptors
+C          according to table D reference are returned respectively.
+C
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C------------------------------------------------------------------------------------
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON/CREXTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1                NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2                NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR    - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+       COMMON/CREXTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+c
+C
+      COMMON /CREXBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+      COMMON /CREXWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2               NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3               NCREXWTR (JELEM),NCREXWTS (JELEM),NCREXWTRV(JELEM),
+     4               NCREXWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTRV    -  working reference value
+C             NCREXWTDW    -  working data width
+C             NWTIW    -  working data width of increments
+C             NWTIWS   -  working total data width of element set
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+C
+      COMMON /CREXWTC/ CREXWTEN(JELEM),CREXWTU (JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+      COMMON /CREXEL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1                NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 3
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+C
+      COMMON /CREXOFF/ NSIZEG(JELEM),NCREXWTRG(JWORK),
+     1                 NBP,NSUBSET,OMULTI
+C
+      CHARACTER*64 CNAMES(KELEM),CREXNAME
+      CHARACTER*24 CUNITS(KELEM),CREXUNIT
+      CHARACTER*(*) YBUFF
+      CHARACTER*6 CREXLST
+C
+      DIMENSION ISTACK(JELEM),IISTACK(JELEM)
+C
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+C
+      REAL*8 RVIND,EPS
+c
+C     ------------------------------------------------------------------
+C
+C*          1.   EXPAND PRELIMINARY ITEMS OF SECTION 3.
+C                --------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+C     -----------------------------------------------------------------
+C
+C*          2.   EXPAND DATA DESCRIPTORS.
+C                ------------------------
+ 200  CONTINUE
+C
+C
+C*          2.1  CALCULATE EXPECTED NUMBER OF DATA DESCRIPTORS.
+C                ----------------------------------------------
+C                AND INITIALIZE NUMBER OF DATA VALUES PER SUB-SET.
+C                -------------------------------------------------
+ 210  CONTINUE
+C
+      J = 0
+      M = 0
+      NCREXWT=0
+      IF( NSUBSET.EQ.1) THEN
+          NBPTSEC2=NBPT
+      END IF
+C
+C
+C*          2.2  UNPACK AND PUT DATA DESCRIPTORS IN STACK.
+C                -----------------------------------------
+ 220  CONTINUE
+C
+      DO 221 JJ=1,NCREXTDLEN
+C
+      if(CREXLST(JJ)(1:1).eq.'D') CREXLST(JJ)(1:1)='3'
+      if(CREXLST(JJ)(1:1).eq.'B') CREXLST(JJ)(1:1)='0'
+      if(CREXLST(JJ)(1:1).eq.'C') CREXLST(JJ)(1:1)='2'
+      if(CREXLST(JJ)(1:1).eq.'R') CREXLST(JJ)(1:1)='1'
+c
+      IOS=0
+      READ( CREXLST(JJ),'(i6.6)',IOSTAT=IOS) ISTACK(JJ)
+      IF(IOS.NE.0) THEN
+         KERR=35
+         CALL CREXERR(KERR)
+         print*,'Internal read error in CREXLST.'
+         print*,'NCREXTDLEN=ktdlen=',NCREXTDLEN
+         print*,jj,' CREXLST(JJ)=',CREXLST(JJ)
+         RETURN
+      END IF
+C
+      IISTACK(JJ)=ISTACK(JJ)
+C
+ 221  CONTINUE
+C
+      JMAX=NCREXTDLEN
+C     ------------------------------------------------------------------
+C*          2.3  GET NEXT DESCRIPTOR FROM THE STACK.
+C                -----------------------------------
+ 230  CONTINUE
+C
+      J   = J + 1
+      IF(J.GT.JMAX) GO TO 300
+C
+      IDD = ISTACK(J)
+      IF(IDD.EQ.0)  GO TO 230
+C
+      IF = IDD/100000
+C
+C     ------------------------------------------------------------------
+C*          2.4  CHECK IF IT IS REPLICATION DESCRIPTOR.
+C                --------------------------------------
+ 240  CONTINUE
+C
+      IF( IF.EQ.0) THEN
+C
+C*          2.6  ELEMENT DESCRIPTOR, SO UPDATE WORKING TABLE.
+C                --------------------------------------------
+ 260     CONTINUE
+C
+         CALL CREXUPWT(IDD,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+C       
+      ELSEIF( IF.EQ.1) THEN
+C
+C*          2.4.1     SOLVE REPLICATION PROBLEM.
+C                     --------------------------
+C
+C
+         CALL CREXSRP(KBUFL,YBUFF,KSEC3,J,JMAX,
+     1                IDD,ISTACK,KELEM,KERR)
+         IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.2) THEN
+C
+C*          2.5.3 PROCESS OPERATOR.
+C                 -----------------
+            CALL CREXPRCO(KBUFL,YBUFF,J,IDD,ISTACK,KELEM,KERR)
+            IF(KERR.GT.0) RETURN
+C
+      ELSEIF( IF.EQ.3) THEN
+C
+C*          2.5.2 REPLACE BY LIST OF DESCRIPTORS FROM TABLE *D.
+C                 ---------------------------------------------
+            CALL CREXSTDR(J,JMAX,IDD,ISTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NCREXSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+      ELSE
+         KERR=37
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+c
+      GO TO 230
+C
+C     ------------------------------------------------------------------
+C
+C*          3. COLLECT  SUPPLEMENTARY ITEMS.
+C              -----------------------------
+ 300  CONTINUE
+C
+      NCREXTDEXL =M
+      DO 301 I=1,NCREXTDEXL
+      NCREXTDEXP(I)=NCREXWTR(I)
+      CNAMES(I)=CREXWTEN(I)
+      CUNITS(I)=CREXWTU(I)
+ 301  CONTINUE
+C
+      DO 302 I=1,NCREXTDLEN
+      NCREXTDLST (I)=IISTACK(I)
+ 302  CONTINUE
+C
+      DO 303 I=1,NCREXTDEXL
+      IJ=I+(NSUBSET-1)*KELEM
+      NCREXWTRG(IJ)=NCREXWTR(I)
+ 303  CONTINUE
+C
+      NSIZEG(NSUBSET)  =M
+
+      KSUP(3)= 4
+      KSUP(5)= M
+      KSUP(6)= KSEC3(3)
+C
+      RETURN
+      END
diff --git a/crexdc/crexs2data.F b/crexdc/crexs2data.F
new file mode 100755
index 0000000..bda803b
--- /dev/null
+++ b/crexdc/crexs2data.F
@@ -0,0 +1,442 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXS2DATA(KBUFL ,YBUFF ,KSUP  ,KSEC3, KELEM,
+     1                      CNAMES,CUNITS,KVALS,VALUES,CVALS,KERR)
+C
+C**** *CREXS2DATA*
+C
+C
+C     PURPOSE.
+C     --------
+C          Expand section 2 of Crex (data section)
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXS2DATA(KBUFL,YBUFF,KSUP,KSEC3,KELEM,CNAMES,
+C                         CUNITS,KVALS,VALUES,CVALS,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  length of CREX message (words)
+C               *YBUFF*   -  Character string containing data
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C               *KVALS*   -  dimension of VALUES array
+C        OUTPUT:
+C               *KSUP*    -  Integer array of 9 words containing
+C                            suplementary information
+C                         -  KSUP( 1) -- IDIM1, dimension of KSEC1
+C                         -  KSUP( 2) -- Reserved
+C                         -  KSUP( 3) -- IDIM3, dimension of KSEC3
+C                         -  KSUP( 4) -- Reserved
+C                         -  KSUP( 5) -- M (number of elements in values
+C                                           array, first index)
+C                         -  KSUP( 6) -- N (number of subsets,second index
+C                                           of values array)
+C                         -  KSUP( 7) -- JVC (number of elements in CVAL array)
+C                         -  KSUP( 8) -- total CREX message length in bytes
+C                         -  KSUP( 9) -- IDIM0, dimension of KSEC0
+C
+C               *KSEC3*   -  array containing section 3 information
+C                            KSEC3( 1)-- length of section 3 (bytes)
+C                            KSEC3( 2)-- reserved
+C                            KSEC3( 3)-- number of subsets
+C                            KSEC3( 4)-- flag (data type,data compression)
+C               *CNAMES*  -  character array containing element names
+C               *CUNITS*  -  character array containig units
+C               *VALUES*  -  real*8 array (expanded data values)
+C               *CVALS*   -  character array containing text
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       17/01/2003.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C--------------------------------------------------------------------------------------------
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+C
+      COMMON /CREXWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2               NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3               NCREXWTR (JELEM),NCREXWTS (JELEM),NCREXWTRV(JELEM),
+     4               NCREXWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTRV    -  working reference value
+C             NCREXWTDW    -  working data width
+C             NWTIW    -  working data width of increments
+C             NWTIWS   -  working total data width of element set
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+C
+      COMMON /CREXWTC/ CREXWTEN(JELEM),CREXWTU (JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+C
+      COMMON /CREXBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+C
+      COMMON /CREXOFF/ NSIZEG(JELEM),NCREXWTRG(JWORK),
+     1                 NBP,NSUBSET,OMULTI
+C
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS),CH
+C
+      CHARACTER*(*) YBUFF
+C
+      DIMENSION ILIST(JELEM),IVALUES(JELEM) 
+C
+C
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+      DIMENSION KSUP(JSUP),KSEC3(JSEC3)
+C
+C     ------------------------------------------------------------------
+C*          1.  EXPAND PRELIMINARY ITEMS FROM SECTION4.
+C               ---------------------------------------
+ 100  CONTINUE
+C
+C                JCV - POINTER TO CVALS ARRAY
+C                JWT - POINTER TO WORKING TABLE ARRAY
+C                JNS - POINTER TO VALUES ARRAY FOR SUB-SETS.
+C
+      IF(KERR.GT.0) RETURN
+C
+      IF(NSUBSET.EQ.1) THEN
+         JCV = 0
+      END IF
+      OREPF =.FALSE.
+      IEOLD=0
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  Expand the data
+C               ---------------
+ 300  CONTINUE
+C
+         IF(KELEM.LT.M) THEN
+            KERR=25
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+c
+         JNS=NSUBSET
+C
+         KSEC3(4)=0
+         KSUP(5)=NSIZEG(NSUBSET)
+C
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,NGS,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextprt: error ',ierr
+            RETURN
+         END IF
+c
+         ITEMP=NBPT
+         CALL NEXTSEC(KBUFL,YBUFF, ITEMP,NGS,KERR )
+         IF(KERR.NE.0) THEN
+            print*,'nextsec: error ',ierr
+            RETURN
+         END IF
+c
+ 301     CONTINUE
+C
+         KSEC3(3)=JNS
+         KSUP(6)=JNS
+C
+         JNSK=(JNS-1)*KELEM
+         IF(JNSK.GT.KVALS) THEN
+            KERR=14
+            CALL CREXERR(KERR)
+            print*,'Size of values array too small.'
+            print*,'Number of subsets=',jns
+            print*,'Number of elements=',M
+            print*,'Kelem=',KELEM
+
+            RETURN
+         END IF
+C
+         DO IZ=JNSK+1,JNSK+M
+         VALUES(IZ)=RVIND
+         END DO
+C
+         DO 302 JWT=1,M
+C
+         JWTJNS=JWT+JNSK
+C
+
+         IF(NCREXWTDW(JWT).EQ.0) THEN
+            VALUES(JWTJNS)=0.0
+            GO TO 302
+         END IF
+C
+         NBPTKEEP=NBPT
+c        CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+         CALL NEXTPRT(KBUFL,YBUFF,NBPT,ITEMP,KERR )
+         IF(NBPT.GE.ITEMP) GO TO 600
+c
+c
+c        Check for next E
+C
+         IF(NE.EQ.1) THEN
+            IE=ICHAR(YBUFF(NBPT:NBPT))-48
+            IF(IE.LT.0.OR.IE.GT.9) THEN
+               print*,'E leading character is not a figure',
+     1                 'for ',JWT,' element.'
+               IEOLD=IEOLD+1
+               IF(IEOLD.EQ.10) IEOLD=0
+               CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+               VALUES(JWTJNS)=RVIND
+               GO TO 302
+            END IF
+c
+            IF((IE-IEOLD).EQ.1.OR.(IE-IEOLD).EQ.-9) THEN
+               IEOLD=IE
+            ELSE
+c              check next group
+               IBPT=NBPT
+               CALL NEXTSEP(KBUFL,YBUFF,IBPT,ITEMP,KERR)
+               CALL NEXTPRT(KBUFL,YBUFF,IBPT,ITEMP,KERR )
+               IENEXT=ICHAR(YBUFF(NBPT:NBPT))-48 
+               IF((IENEXT-IEOLD).GE.2.OR.(IENEXT-IEOLD).LT.0) THEN
+                   print*,JWT,' Group is missing for ',NCREXWTR(JWT),
+     1                    ' element.'
+                  IEOLD=IEOLD+1
+                  IF(IEOLD.EQ.10) IEOLD=0
+                  NBPT=NBPTKEEP
+                  VALUES(JWTJNS)=RVIND
+                  GO TO 302
+               END IF
+            END IF
+            NBPT=NBPT+1
+         ELSE
+c              check next group
+c              nbpt points to first character of next group
+               IBPT=NBPT
+               CALL NEXTSEP(KBUFL,YBUFF,IBPT,ITEMP,KERR)
+               if((IBPT-NBPT).ne.NCREXWTDW(JWT)) THEN
+                  if(NCREXWTEN(JWT).eq.658367) THEN
+                     izz=NBPT+NCREXWTDW(JWT)
+                     if(YBUFF(izz:izz).eq.' ') then
+                        IBPT=NBPT+NCREXWTDW(JWT)   
+                        go to 305
+                     end if
+                  end if
+                  do iz=JWT-1,1,-1
+                  if(NCREXWTDW(JWT).eq.NCREXWTDW(iz)) then
+                     print*,iz,'Group is possibly missing ',
+     1                      NCREXWTR(iz),
+     2               'values replaced with missing value'
+                     VALUES(iz)=rvind
+                  else
+                     go to 111
+                  end if
+                  end do
+c                    
+                  
+ 111              CONTINUE
+                  IF(NCREXWTEN(JWT).EQ.658367) THEN
+                     JCV=JCV+1
+                     VALUES(JWTJNS)=JCV*1000+NCREXWTDW(JWT)
+                     CVALS(JCV)=' '
+                  ELSE
+                     VALUES(JWTJNS)=RVIND
+                  END IF
+                  NBPT=IBPT
+                  GO TO 302
+                end if
+         END IF
+C
+ 305  CONTINUE
+C
+         IF(NCREXWTR(JWT).EQ.31011.OR.
+     1      NCREXWTR(JWT).EQ.31012) OREPF=.TRUE.
+C
+C
+C     ------------------------------------------------------------------
+C*          3.1 CHARACTER DATA ?
+C               ----------------
+ 310  CONTINUE
+C
+         IF(NCREXWTEN(JWT).EQ.658367) THEN
+C
+C*          3.2  OBTAIN CHARACTER DATA FROM DATA SECTION.
+C                ----------------------------------------
+ 320  CONTINUE
+C
+            IY=NCREXWTDW(JWT)
+C
+            CALL EXTGRPC(KBUFL,YBUFF, NBPT,IY,CH,KERR)
+            IF(KERR.NE.0) THEN
+               print*,'extgrpc : problem for ',JWT,' th' 
+               print*,' element', NCREXWTR(JWT)
+               print*,'Element is missing'
+            END IF
+C
+C*          3.3  MOVE CHARACTER DATA TO "CVALS".
+C                -------------------------------
+ 330  CONTINUE
+C
+            IYLINE=IY/80
+            IYOFF =IY-IYLINE*80
+            JCVINC=IYLINE
+C
+            JCV = JCV + 1
+            JCVW= JCV
+C
+            IF(IYLINE.EQ.0) THEN
+               CVALS(JCVW)(1:iy)=ch(1:iY)
+            ELSE
+               DO 332 J=1,IYLINE
+               DO 333 JJ=1,80
+               CVALS(JCVW)(JJ:JJ)= CH(JJ:JJ)
+ 333           CONTINUE
+C
+               JCVW=JCVW+1
+C
+ 332           CONTINUE
+C
+               DO 334 J=1,IYOFF
+               CVALS(JCVW)(J:J)= CH(J:J)
+ 334           CONTINUE
+C
+            END IF
+C
+C*          3.4  COMPUTE POINTER VALUES TO BE STORED IN "VALUES".
+C                ------------------------------------------------
+ 340  CONTINUE
+C
+            VALUES(JWTJNS) = JCV*1000 + IY
+            JCV            = JCV + JCVINC
+C
+            GO TO 302
+C
+         END IF
+C
+C*          3.5  OBTAIN VALUE FROM DATA SECTION.
+C                -------------------------------
+ 350  CONTINUE
+C
+         CALL EXTGRP(KBUFL,YBUFF, NBPT,NCREXWTDW(JWT),IVAL,KERR)
+         IF(KERR.NE.0) THEN
+            print*,'extgrp : error ',kerr
+            RETURN
+         END IF
+C
+C     -----------------------------------------------------------------
+C*          3.6  UPDATE THE ARRAY "VALUES".
+C                --------------------------
+ 360  CONTINUE
+C
+C
+C        CHECK IF DATA IS MISSING
+C
+         IF(IVAL.EQ.NVIND) THEN
+            VALUES(JWTJNS)=RVIND
+         ELSE
+            IF(CREXWTU(JWT)(1:4).EQ.'FLAG') then
+               CALL OCTAL2DEC(IVAL,IIVAL,KERR)
+               IVAL=IIVAL
+            END IF
+            IF(NCREXWTS(JWT).GT.0) THEN
+               VALUES(JWTJNS)= IVAL/10.**NCREXWTS(JWT)
+            ELSE
+               IIWTS=IABS(NCREXWTS(JWT))
+               VALUES(JWTJNS)= IVAL*10.**IIWTS
+            END IF
+         END IF
+C
+         CALL NEXTSEP(KBUFL,YBUFF,NBPT,ITEMP,KERR)
+c
+         IF(NBPT.GE.ITEMP) THEN
+            OMULTI=.FALSE.
+            GO TO 600
+         END IF
+C
+ 302     CONTINUE
+C
+         ITEMP1=NBPT
+         CALL NEXTSUBSET(KBUFL,YBUFF, ITEMP1,NGS,KERR )
+         IF(ITEMP1.LT.NGS) THEN
+c           JNS=JNS+1
+            N=JNS
+            IEOLD=0
+c           GO TO 301
+         ELSE
+            OMULTI=.FALSE.
+         END IF 
+C
+         KSUP(7)=JCV
+C
+C     -----------------------------------------------------------------
+C*            6.  SET SUPPLEMENTARY INFORMATION.
+C                 ------------------------------
+C
+ 600  CONTINUE
+C
+      NBP=NBPT
+      KSUP(4)= 2
+C
+C     ------------------------------------------------------------------
+      RETURN
+      END
diff --git a/crexdc/crexs5.F b/crexdc/crexs5.F
new file mode 100755
index 0000000..43056e8
--- /dev/null
+++ b/crexdc/crexs5.F
@@ -0,0 +1,65 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXS5(KBUFL,YBUFF,KERR)
+C
+C**** *CREXS5*
+C
+C
+C     PURPOSE.
+C     --------
+C         Expand CREX section 5
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *CREXS5(KBUFL,YBUFF,KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       15/02/92.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      CHARACTER*(*) YBUFF
+C
+      RETURN
+      END
diff --git a/crexdc/crexsel.F b/crexdc/crexsel.F
new file mode 100755
index 0000000..db418bc
--- /dev/null
+++ b/crexdc/crexsel.F
@@ -0,0 +1,108 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXSEL(KTDLEN,KTDLST,KTDEXL,KTDEXP,KERR)
+C
+C**** *CREXSEL*
+C
+C
+C
+C     PURPOSE.
+C     --------
+C          Returns list of Data Descriptors as in Section 1  of Crex
+C          message and total/requested list of elements.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXSEL(KTDLEN,KTDLST,KTDEXL,KTDEXP,KERR)*
+C
+C
+C        OUTPUT:
+C               *KTDLEN*  -  number of data descriptors in section 1
+C               *KTDLST*  -  array containing data descriptors in section 1
+C               *KTDEXL*  -  number of entries in list of expanded data
+C                            descriptors
+C               *KTDEXP*  -  array containig expanded data descriptors
+C               *KERR*    -  returned error code
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CREXEL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1                NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 1
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+C
+      DIMENSION  KTDLST(*),KTDEXP(*)
+C
+C
+C     -----------------------------------------------------------------
+
+C*          1.  PUT LIST OF ELEMENTS FROM COMMON BLOCK
+C               --------------------------------------
+C               TO REQUESTED ARRAYS.
+C               --------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      KTDLEN=NCREXTDLEN
+      KTDEXL=NCREXTDEXL
+C
+      DO 101 I=1,NCREXTDLEN
+      KTDLST(I)=NCREXTDLST(I)
+ 101  CONTINUE
+C
+      DO 102 I=1,NCREXTDEXL
+      KTDEXP(I)=NCREXTDEXP(I)
+ 102  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/crexsel2.F b/crexdc/crexsel2.F
new file mode 100755
index 0000000..14dc095
--- /dev/null
+++ b/crexdc/crexsel2.F
@@ -0,0 +1,124 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXSEL2(KSUBSET,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1                    CNAMES,CUNITS,KERR)
+C
+C**** *CREXSEL2*
+C
+C
+C
+C     PURPOSE.
+C     --------
+C          Returns list of Data Descriptors as in Section 1  of Crex
+C          message and total/requested list of elements.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXSEL(KSUBSET,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+C                          CNAMES,CUNITS,KERR)*
+C
+C
+C        INPUT: *KSUBSET* -  Subset number
+C               *KELEM*   -  
+C        OUTPUT:
+C               *KTDLEN*  -  number of data descriptors in section 1
+C               *KTDLST*  -  array containing data descriptors in section 1
+C               *KTDEXL*  -  number of entries in list of expanded data
+C                            descriptors
+C               *KTDEXP*  -  array containig expanded data descriptors
+C               *CNAMES*  -  ARRAY CONTAINING ELEMENT NAMES
+C               *CUNITS*  -  ARRAY CONTAINING ELEMENT UNITS
+C               *KERR*    -  returned error code
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CREXEL/ NCREXTDLEN,NCREXTDLST(JELEM),NCREXTDEXL,
+     1                NCREXTDEXP(JELEM)
+C
+C             NCREXTDLEN - number of Data descriptors in section 1
+C             NCREXTDLST - list of Data descriptors
+C             NCREXTDEXL - number of expanded Data Descriptors
+C             NCREXTDEXP - list of expanded Data descriptors
+C
+C
+      COMMON /CREXOFF/ NSIZEG(JELEM),NCREXWTRG(JWORK),
+     1                 NBP,NSUBSET,OMULTI
+C
+      DIMENSION  KTDLST(*),KTDEXP(*)
+C
+      CHARACTER*64 CNAMES(*)
+      CHARACTER*24 CUNITS(*)
+C
+C     -----------------------------------------------------------------
+
+C*          1.  PUT LIST OF ELEMENTS FROM COMMON BLOCK
+C               --------------------------------------
+C               TO REQUESTED ARRAYS.
+C               --------------------
+ 100  CONTINUE
+C
+      KERR=0
+C
+      KTDLEN=NCREXTDLEN
+C
+      DO 101 I=1,NCREXTDLEN
+      KTDLST(I)=NCREXTDLST(I)
+ 101  CONTINUE
+C
+      NTDEXL=NSIZEG(KSUBSET)
+      KTDEXL=NTDEXL
+      IJ=(KSUBSET-1)*KELEM
+
+      DO 102 I=1,KTDEXL
+      IIJ=I+IJ
+      KTDEXP(I)=NCREXWTRG(IIJ)
+      CALL CREX_GET_NAME_UNIT(KTDEXP(I),CNAMES(I),CUNITS(I))
+ 102  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/crexsrp.F b/crexdc/crexsrp.F
new file mode 100755
index 0000000..a1be8ea
--- /dev/null
+++ b/crexdc/crexsrp.F
@@ -0,0 +1,381 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXSRP(KBUFL,YBUFF,KSEC3,KJ,KJ1,KDD,KSTACK,KELEM,KERR)
+C
+C**** *CREXSRP*
+C
+C
+C     PURPOSE.
+C     --------
+C          Resolve data descriptor replication problem.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXSRP(KBUFL,YBUFF,KSEC3,KJ,KJ1,KDD,KSTACK,KELEM,KERR)*
+C
+C        INPUT :
+C               *KBUFL*   -  length of CREX message (words)
+C               *YBUFF*   -  array containing CREX message
+C               *KSEC3*   -  array containig section 3 information
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C               *KDD*      - data descriptor
+C        OUTPUT:
+C               *KJ*       - pointer to kstack array
+C               *KJ1*      - pointer to last element in kstack
+C               *KSTACK*   - list of data descriptors
+C               *KERR*     - return code
+C
+C     METHOD.
+C     -------
+C          NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       01/02/2003.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER CREXWTEN*64,CREXWTU*24
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      COMMON /CREXWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2               NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3               NCREXWTR (JELEM),NCREXWTS (JELEM),NCREXWTRV(JELEM),
+     4               NCREXWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTRV    -  working reference value
+C             NCREXWTDW    -  working data width
+C             NWTIW    -  working data width of increments
+C             NWTIWS   -  working total data width of element set
+C
+C
+      COMMON /CREXWTC/ CREXWTEN(JELEM),CREXWTU (JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+      COMMON /CREXBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+C
+      COMMON /CREXOFF/ NSIZEG(JELEM),NCREXWTRG(JWORK),
+     1                 NBP,NSUBSET,OMULTI
+
+C
+      DIMENSION ILIST(JELEM)
+      DIMENSION KSTACK(*),KSEC3(JSEC3)
+C
+      CHARACTER*(*) YBUFF
+      REAL*8 RVIND,EPS
+C
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   STORE K, NUMBER OF DESCRIPTORS TO BE REPLICATED.
+C                ------------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      IF  = KDD / 100000
+      IDIF= KDD - IF * 100000
+      IX  = IDIF / 1000
+      IY  = IDIF - IX * 1000
+      K   = IX
+C
+C
+C*          1.1   DELAYED REPLICATION ?
+C                 ---------------------
+ 110  CONTINUE
+C
+      IF( IY .NE. 0 ) THEN
+C
+C*          1.2   STORE NUMBER OF DESCRIPTORS, K, AND REPLICATION
+C                 -----------------------------------------------
+C                 FACTOR JR.
+C                 ----------
+ 120     CONTINUE
+C
+         K  = IX
+         JR = IY
+         GO TO 500
+      ELSE
+C
+C           1.3   INSERT DELAYED REPLICATION 
+C
+         ODREPF=.TRUE.
+         KDD=31002
+         GO TO 300
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          2.   GET NEXT DESCRIPTOR.
+C                --------------------
+ 200  CONTINUE
+C
+      KJ =KJ + 1
+      KDD= KSTACK(KJ)
+C
+C     ------------------------------------------------------------------
+C
+C*          2.1  REPLICATION FACTOR ?
+C                --------------------
+ 210  CONTINUE
+C
+      IF(KDD.NE.31001.AND.KDD.NE.31002.AND.
+     1   KDD.NE.31000.AND.
+     1   KDD.NE.31011.AND.KDD.NE.31012 )THEN
+C
+C*          2.1.1  SEQUENCE DESCRIPTOR ?
+C                  ---------------------
+C
+         IF=KDD/100000
+C
+         IF( IF.EQ.3) THEN
+C
+C*          2.1.1.1  SOLVE TABLE D REFERENCE.
+C                    ------------------------
+            CALL CREXSTDR(KJ,KJ1,KDD,KSTACK,KERR)
+            IF(KERR.GT.0) THEN
+               DO 252 IQ=1,JELEM
+               NCREXSTACK(IQ)=0.
+ 252           CONTINUE
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         IF( IF.EQ.2) THEN
+            CALL CREXPRCO(KBUFL,YBUFF,KJ,KDD,KSTACK,KELEM,KERR)
+            IF(KERR.GT.0) THEN
+               CALL CREXERR(KERR)
+               RETURN
+            END IF
+            GO TO 200
+         END IF
+C
+         KERR=36
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          3.  UPDATE WORKING TABLE.
+C               ---------------------
+ 300  CONTINUE
+C
+      CALL CREXUPWT(KDD,KELEM,KERR)
+      IF(KERR.GT.0) RETURN
+C
+C     CHECK IF NEXT DESCRIPTOR CANCEL OPERATOR FOR DELAYED
+C     REPLICATION
+C
+      IIIF=KSTACK(KJ+1)/100000
+      IIII=KSTACK(KJ+1)-IIIF*100000
+      IIIX=IIII/1000
+      IIIY=IIII-IIIX*1000
+C
+      IF(IIIF.EQ.2.AND.IIIY.EQ.0) THEN
+         KJ=KJ+1
+         KDD=KSTACK(KJ)
+         CALL CREXPRCO(KBUFL,YBUFF,KJ,KDD,KSTACK,KELEM,KERR)
+         IF(KERR.GT.0) THEN
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+      END IF
+C
+C     ------------------------------------------------------------------
+C
+C*          4.  LOCATE AND STORE JR, THE REPLICATION FACTOR FROM DATA.
+C               ------------------------------------------------------
+ 400  CONTINUE
+C
+C
+C     UNCOMPRESSED DATA
+C
+      IF(NSUBSET.EQ.1) THEN
+         IBPT=NBPTSEC2
+      ELSE
+         IBPT=NBP       
+      END IF
+      CALL NEXTPRT(KBUFL,YBUFF,IBPT,NGS,KERR )
+      IF(KERR.NE.0) THEN
+         print*,'nextprt: error ',ierr
+         RETURN
+      END IF
+C
+c     Now IBPT points to the first group
+c
+      ITEMP=IBPT
+      CALL NEXTSEC(KBUFL,YBUFF, ITEMP,NGS,KERR )
+      IF(KERR.NE.0) THEN
+         print*,'nextsec: error ',ierr
+         RETURN
+      END IF
+C
+c     Now itemp points to the end of previous section
+c
+      CALL NEXTPRT(KBUFL,YBUFF,IBPT,ITEMP,KERR )
+      IF(KERR.NE.0) THEN
+         print*,'nextprt: error ',ierr
+         RETURN
+      END IF
+c
+      DO 401 J=1,NCREXWT-1
+C
+      IBPT=IBPT+NCREXWTDW(j)+NE
+c     CALL NEXTPRT(KBUFL,YBUFF,IBPT,ITEMP,KERR )
+c     IF(KERR.NE.0) THEN
+c        print*,'nextprt: error ',ierr
+c        RETURN
+c     END IF
+c
+      CALL NEXTSEP(KBUFL,YBUFF,IBPT,ITEMP,KERR )
+      CALL NEXTGRP(KBUFL,YBUFF,IBPT,ITEMP,KERR)
+      IF(KERR.NE.0) THEN
+         print*,'nextsec: error ',ierr
+         RETURN
+      END IF
+C
+ 401  CONTINUE
+C
+      IF(NE.EQ.1) IBPT=IBPT+1
+      CALL EXTGRP(KBUFL,YBUFF, IBPT,NCREXWTDW(NCREXWT),JR,KERR)
+      IF(KERR.NE.0) THEN
+         print*,'extgrp : error ',kerr
+         RETURN
+      end if
+C
+      IF(JR.EQ.0) THEN
+         KJ=KJ+K
+         GO TO 640
+      END IF
+C
+      JRTK=JR*K+KJ1-K
+      IF(JRTK.GT.JELEM) THEN
+         KERR=19
+         PRINT*,'BUSRP :'
+         CALL CREXERR(KERR)
+         PRINT*,'Replication factor =',JR
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          5.  GET NEXT K DESCRIPTORS.
+C               -----------------------
+ 500  CONTINUE
+C
+      DO 501 J=1,K
+C
+      ILIST(J)=KSTACK(KJ+J)
+C
+ 501  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.  ADD JR TIMES K DESCRIPTORS IN PLACE OF K
+C               ----------------------------------------
+C               DESCRIPTORS OBTAINED.
+C               ---------------------
+ 600  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.1  PUSH DOWN DESCRIPTORS IN KSTACK FOR (JR-1)*K PLACES
+C                ---------------------------------------------------
+C                STARTING AT KJ1 AND ENDING AT KJ+K.
+C                -----------------------------------
+ 610  CONTINUE
+C
+      JRKM1=(JR-1)*K
+C
+      DO 611 J=KJ1,KJ+K,-1
+C
+      KSTACK(J+JRKM1)=KSTACK(J)
+C
+ 611  CONTINUE
+C
+C*          6.2  INSERT LIST IN THE STACK.
+C                -------------------------
+ 620  CONTINUE
+C
+      DO 622 J=1,JR
+C
+      KJJM1K=KJ+(J-1)*K
+C
+      DO 623 J1=1,K
+C
+      KSTACK(KJJM1K+J1)=ILIST(J1)
+C
+ 623  CONTINUE
+ 622  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          6.3  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C                ----------------------------------------
+ 630  CONTINUE
+C
+      KJ1 = KJ1  + (JR-1)*K
+C
+C     ------------------------------------------------------------------
+C*          6.4  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 640  CONTINUE
+C
+C
+C     ------------------------------------------------------------------
+ 700  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/crexstdr.F b/crexdc/crexstdr.F
new file mode 100755
index 0000000..8e4a29f
--- /dev/null
+++ b/crexdc/crexstdr.F
@@ -0,0 +1,179 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXSTDR(KJ,KJ1,KDD,KSTACK,KERR)
+C
+C**** *CREXSTDR*
+C
+C
+C     PURPOSE.
+C     --------
+C          Solve CREX table D reference.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXSTDR(KJ,KJ1,KDD,KSTACK,KERR)*
+C
+C        INPUT :
+C                 *KDD*      - data descriptor
+C        OUTPUT:
+C                 *KJ*       - pointer to kstack array
+C                 *KJ1*      - pointer to last element in kstack
+C                 *KSTACK*   - list of data descriptors
+C                 *KERR*     - return error code
+C
+C
+C     METHOD.
+C     -------
+C
+C           NONE.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON/CREXTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1                NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2                NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR    - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+
+       COMMON/CREXTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+C
+      character*64  CREXNAME
+      character*24  CREXUNIT
+      character*6   CREXLST
+C
+      DIMENSION ILIST(JELEM),KSTACK(*)
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   OBTAIN LIST OF DESCRIPTORS FROM CREX TABLE D.
+C                ---------------------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      DO 110 J=1,JTAB
+C
+      IF(KDD.EQ.NCREXDR(J)) THEN
+         I=J
+         GO TO 120
+      END IF
+C
+ 110  CONTINUE
+C
+      KERR=20
+      PRINT*,' CREXSTDR :',KDD
+      CALL CREXERR(KERR)
+      RETURN
+C
+ 120  CONTINUE
+C
+      J1=NCREXDST(I)
+      J2=NCREXDL (I)
+      J3=0
+C
+      DO 121 J=J1,J1+J2-1
+C
+      J3 = J3 +1
+      ILIST(J3) = NCREXDSQ(J)
+C
+ 121  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          2.  PUSH DOWN DATA DESCRIPTION DESCRIPTORS
+C               --------------------------------------
+C               TO MAKE ROOM FOR LIST.
+C               ----------------------
+ 200  CONTINUE
+C
+      J2M1=J2-1
+C
+      DO 210 J=KJ1,KJ+1,-1
+C
+      KSTACK(J+J2M1) = KSTACK(J)
+C
+ 210  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          3.  INSERT LIST IN PLACE OF SEQUENCE DESCRIPTORS.
+C               ---------------------------------------------
+ 300  CONTINUE
+C
+      KJM1=KJ-1
+C
+      DO 310 J=1,J3
+C
+      KSTACK(KJM1+J)= ILIST(J)
+C
+ 310  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          4.  ADJUST DESCRIPTOR COUNT FOR LIST LENGTH.
+C               ----------------------------------------
+ 400  CONTINUE
+C
+      KJ  = KJ  - 1
+      KJ1 = KJ1 +J3 -1
+C     ------------------------------------------------------------------
+C*          4.1  ADJUST NUMBER OF DATA DESCRIPTORS NOT PRESENT.
+C                ----------------------------------------------
+ 610  CONTINUE
+C
+C     -----------------------------------------------------------------
+ 500  CONTINUE
+C
+      RETURN
+C
+ 9901 FORMAT(1H ,' CREXSTDR : table D reference not found, error=',I2)
+C
+      END
diff --git a/crexdc/crextables.F b/crexdc/crextables.F
new file mode 100755
index 0000000..395ae02
--- /dev/null
+++ b/crexdc/crextables.F
@@ -0,0 +1,243 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXTABLES(KSEC1,CREXBTR,CREXBS,CREXBDW,CREXNAMES,
+     1                      CREXUNITS,CREXBP,KERR)
+C
+C**** *BTABLE*
+C
+C
+C     PURPOSE.
+C     --------
+C          CREATE CREX TABLE B IN BINARY FORM.
+C          THIS ROUTINE IS USED IN BUFR2CREX PROGRAM
+C
+C**   INTERFACE.
+C     ----------
+C          NONE.
+C
+C
+C     *METHOD.
+C      -------
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C          NONE.
+C
+C
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC       *ECMWF*       JANUARY 2003.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+c
+      PARAMETER(JP=3000)
+C
+      CHARACTER*64 CREXNAMES(JP)
+      CHARACTER*24 CREXUNITS(JP)
+      CHARACTER*160 YENTRY
+      CHARACTER*256  YFNAME
+C
+      DIMENSION KSEC1(*)
+      INTEGER CREXBTR(JP),CREXBS(JP),CREXBDW(JP)
+      INTEGER CREXBP(64,255)
+C
+      CHARACTER*7   YTABB
+      CHARACTER*256 CROOT
+      INTEGER IEMOSNM
+C
+      INTEGER  EMOSNUM
+      EXTERNAL EMOSNUM
+C
+      SAVE NXXP,NYYP,NZZP, OFIRST
+C
+C     ------------------------------------------------------------------
+C*          1.   INITIALIZE CONSTANTS AND VARIABLES.
+C                -----------------------------------
+ 100  CONTINUE
+C
+      J=0
+      ICLASS0=0
+      IVIND=2147483647
+C
+      CROOT=' '
+      CALL GETENV('CREX_TABLES',CROOT)
+      ILNG=INDEX(CROOT,' ')
+      ILNG=ILNG-1
+      IF(ILNG.EQ.1) THEN
+C
+C        SGI/HP/SUN CREX TABLES PATH
+C
+         CROOT='/home/ma/emos/tables/crex/'
+C
+C        ADD VERSION NUMBER
+C
+         ILNG=INDEX(CROOT,' ')
+         IEMOSNM = EMOSNUM(1)
+         WRITE(CROOT(ILNG:ILNG+5),'(I6.6)') IEMOSNM
+         CROOT(ILNG+6:) = '/'
+         ILNG=ILNG+6
+      END IF
+C
+C             CREX EDITION 1 NAMING CONVENTION
+C
+C             BXXYYZZ , DXXYYZZ
+C
+C             B      - CREX TABLE 'B'
+C             D      - CREX TABLE 'D'
+C             XX     - Crex Master table used '00'
+C             YY     - Crex Edition number used '01'
+C             ZZ     - Crex Table version number '01'
+C
+       IXX=KSEC1(14)   ! BUFR Master Table 0
+       IYY=KSEC1( 2)   ! BUFR Edition 
+       IZZ=KSEC1(15)   ! Version of Master table
+C
+       IF(OFIRST) THEN
+          IF(IXX.EQ.NXXP.AND.IYY.EQ.NYYP.AND.
+     1       IZZ.EQ.NZZP) RETURN
+       END IF
+C
+       WRITE(*,'(1H ,A)') 'Your path for crex tables is :'
+       WRITE(*,'(1H ,A)')  CROOT(1:ILNG)
+
+       OFIRST=.TRUE.
+
+       NXXP=IXX
+       NYYP=IYY
+       NZZP=IZZ
+C
+C
+      DO 101 I=1,64
+      DO 101 II=1,255
+       CREXBP(I,II)=0
+ 101  CONTINUE
+C
+      DO 102 I=1,JP
+       CREXBTR(I)=IVIND
+       CREXBS(I)=IVIND
+       CREXBDW(I)=IVIND
+       CREXNAMES(I)=' '
+       CREXUNITS(I)=' '
+ 102  CONTINUE
+
+C
+      WRITE(YTABB,'(A1,I2.2,I2.2,I2.2)',iostat=ios) 'B',IXX,IYY,IZZ
+      IF(IOS.NE.0) then
+        KERR=33
+        CALL CREXERR(KERR)
+        RETURN
+      END IF
+C
+      print*,'Crex table to be loaded :',YTABB
+C
+      YFNAME=CROOT(1:ILNG)//YTABB
+C
+      DO 301 JJ=1,99
+       INQUIRE(UNIT=JJ,IOSTAT=IOS,OPENED=OPN)
+       IF(.NOT.OPN) THEN
+         IUNIT=JJ
+         OPEN(UNIT=IUNIT,IOSTAT=IOS,ERR=401,FILE=YFNAME,
+     4     FORM='FORMATTED',
+     5      RECL=160,
+     5     STATUS='OLD')
+         GO TO 200
+       END IF
+ 301   CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          2.   READ IN TABLE B ELEMENT.
+C                ------------------------
+C
+ 200  CONTINUE
+C
+      YENTRY=' '
+      READ(IUNIT,'(A)',ERR=402,END=300) YENTRY
+C
+      J=J+1
+      IF(J.GT.JP) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         KERR=13
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          2.1  SET ARRAYS FOR TABLE REFERENCE, ELEMENT NAME, UNITS,
+C*               REFERENCE VALUE AND DATA WIDTH.
+C
+ 210  CONTINUE
+C
+C
+      IMINUS=0
+      IMINUS=INDEX(YENTRY(12:16),'-')
+      IF(IMINUS.NE.0) YENTRY(IMINUS:IMINUS)='9'
+c    1  FMT='(1x,A,1x,A64,47x,A24,I3,8x,I3)')
+      READ(YENTRY,'(2X,I5,1x,64x,71x,I3,7x,I3)',IOSTAT=IOS)
+     1                                    CREXBTR(J),CREXBS(J),
+     1                                    CREXBDW(J)
+      IF(IOS.NE.0) THEN
+         KERR=35
+         CALL CREXERR(KERR)
+         print*,'Line number ',j
+         RETURN
+      END IF
+C
+      CREXNAMES(J)=YENTRY( 9:72)
+      CREXUNITS(J)=YENTRY(120:123)
+C
+      ICLASS=CREXBTR(J)/1000
+      IYYY  =CREXBTR(J)-ICLASS*1000+1
+C
+      ICLASS=ICLASS+1
+      CREXBP(ICLASS,IYYY)=J
+C
+      GO TO 200
+C
+ 300  CONTINUE
+C
+      CLOSE(UNIT=IUNIT)
+      RETURN
+C
+C
+C
+402   CONTINUE
+      KERR=35
+      CALL CREXERR(KERR)
+      WRITE(*,4402) IOS,yfname
+ 4402 FORMAT(1H ,'Read error',i4,' on ',a)
+      RETURN
+C
+C
+ 401  CONTINUE
+C
+      KERR=9
+      CALL CREXERR(KERR)
+      WRITE(*,4401) IOS,yfname
+ 4401 FORMAT(1H ,'Open error',i4,' on ',a)
+C
+      RETURN
+      END
diff --git a/crexdc/crextb.F b/crexdc/crextb.F
new file mode 100755
index 0000000..d4f2e1a
--- /dev/null
+++ b/crexdc/crextb.F
@@ -0,0 +1,525 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXTB(KSEC1,KERR)
+C
+C**** *CREXTB*
+C
+C
+C     PURPOSE.
+C     --------
+C          Load Crex table B and  D  according to Edition and version
+C     of Crex code.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXTB(KSEC1,KERR)*
+C
+C        OUTPUT:
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Reserved
+C                            KSEC1( 4)-- Reserved
+C                            KSEC1( 5)-- Reserved
+C                            KSEC1( 6)-- CREX message type
+C                            KSEC1( 7)-- Reserved
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Reserved
+C                            KSEC1(10)-- Reserved
+C                            KSEC1(11)-- Reserved
+C                            KSEC1(12)-- Reserved
+C                            KSEC1(13)-- Reserved
+C                            KSEC1(14)-- CREX Master table
+C                            KSEC1(15)-- version number of Master table used
+C                            KSEC1(16) - KSEC1(40) -- Reserved
+C
+C                            Crex Edition 2
+C
+C               *KSEC1*   -  Integer array of at least 40 words
+C                            containing CREX section 1 information
+C                            KSEC1( 1)-- Reserved
+C                            KSEC1( 2)-- CREX Edition number
+C                            KSEC1( 3)-- Originating Centre ( oooo)
+C                            KSEC1( 4)-- Update sequence number (uu)
+C                            KSEC1( 5)-- Number of subsets (sss)
+C                            KSEC1( 6)-- CREX data category (nnn)
+C                            KSEC1( 7)-- International data sub-category (mmm)
+C                            KSEC1( 8)-- version number of local table used
+C                            KSEC1( 9)-- Year (yyyy)
+C                            KSEC1(10)-- Month (mm)
+C                            KSEC1(11)-- Day (dd)
+C                            KSEC1(12)-- Hour (hh)
+C                            KSEC1(13)-- Minute (mm)
+C                            KSEC1(14)-- CREX Master table (tt)
+C                            KSEC1(15)-- version number of Master table used (vv)
+C                            KSEC1(16)-- Originating sub-centre (ppp)
+C                            KSEC1(17)-- Bufr master table version number
+C                            KSEC1(18)-- Bufr version number of local table used
+C                            KSEC1(19) - KSEC1(40) -- Reserved
+C
+
+C               *KERR*    -  returned error code
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+      PARAMETER(JP=3000,JL=20)
+C
+      COMMON/CREXTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1                NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2                NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR     - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+       COMMON/CREXTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+C
+      COMMON /CREXROOT/ CROOT
+C
+C            croot    -  path for Crex tables
+C
+      CHARACTER*64 CREXNAME
+      CHARACTER*24 CREXUNIT
+      character*6  CREXLST
+C
+      CHARACTER*256 YNAME
+      CHARACTER*256  YFNAME
+      CHARACTER*160 YENTRY
+C
+      CHARACTER*256 YTAB ,YTAC ,YTAD
+      CHARACTER*7  YTABB,YTABC,YTABD
+      CHARACTER*256 CROOT
+      CHARACTER*6 CNCREXBR
+C
+      DIMENSION KSEC1(*)
+C
+      INTEGER IEMOSNUM
+C     EXTERNAL FUNCTIONS
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+
+      SAVE OFIRST
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   GET CREX TABLES/LOCAL CREX TABLES.
+C                ----------------------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0) RETURN
+C
+C
+C*          2.   SET UP CREX TABLE FILE NAME.
+C                ----------------------------
+ 200  CONTINUE
+C
+C
+C             CREX EDITION 1 NAMING CONVENTION
+C
+C             BXXYYZZ , DXXYYZZ
+C
+C             B      - CREX TABLE 'B'
+C             D      - CREX TABLE 'D'
+C             XX     - Crex Master table used '00'
+C             YY     - Crex Edition number used '01'
+C             ZZ     - Crex Table version number '01'
+C
+            IXX=0
+            IYY=KSEC1( 2)
+            IZZ=KSEC1(15)
+C
+         IF(OFIRST) THEN
+            IF(IXX.EQ.NXXP.AND.IYY.EQ.NYYP.AND.
+     1         IZZ.EQ.NZZP) RETURN
+         END IF
+C
+      J=0
+      ICLASS0=0
+      IVIND=2147483647
+C
+      DO 101 I=1,64
+      DO 101 II=1,255
+       NCREXP(I,II)=0
+ 101  CONTINUE
+C
+      DO 102 i=1,JP
+       NCREXBR(I)=IVIND
+       NCREXBS (I)=IVIND
+       NCREXBDW(I)=IVIND
+       CREXNAME(I)=' '
+       CREXUNIT(I)=' '
+ 102  CONTINUE
+C
+      J  =0
+      IST=1
+C
+      DO 103 I=1,JP
+       NCREXDR(I)=999999
+       NCREXDL (I)=0
+       NCREXDST(I)=0
+ 103  CONTINUE
+C
+      DO 104 I=1,JP*20
+       NCREXDSQ(I)=0
+ 104  CONTINUE
+
+      OFIRST=.TRUE.
+C
+      NXXP=IXX
+      NYYP=IYY
+      NZZP=IZZ
+C
+      WRITE(YTABB,'(A1,I2.2,I2.2,I2.2)') 'B',IXX,IYY,IZZ
+C     WRITE(YTABC,'(A1,I2.2,I2.2,I2.2)') 'C',IXX,IYY,IZZ
+      WRITE(YTABD,'(A1,I2.2,I2.2,I2.2)') 'D',IXX,IYY,IZZ
+C
+      PRINT*,'CREX Tables to be loaded ',YTABB,',',YTABD
+C
+C     ----------------------------------------------------------------
+C*          3. OPEN AND READ FILES CONTAINING CREX TABLES.
+C              -------------------------------------------
+ 300  CONTINUE
+C
+      CROOT=' '
+      CALL GETENV('CREX_TABLES',CROOT)
+      ILNG=INDEX(CROOT,' ')
+      IF(ILNG.EQ.1) THEN
+C
+C       SGI/HP/SUN CREX TABLES PATH
+C
+        CROOT='/home/ma/emos/tables/crex/'
+C
+C       ADD VERSION NUMBER
+C
+        ILNG=INDEX(CROOT,' ')
+        IEMOSNM = EMOSNUM(1)
+        WRITE(CROOT(ILNG:ILNG+5),'(I6.6)') IEMOSNM
+        CROOT(ILNG+6:) = '/'
+      ENDIF
+
+      I=INDEX(CROOT,' ')
+      IF(I.NE.0) I=I-1
+C
+C*          3.1 READ CREX TABLE B.
+C               ------------------
+ 310  CONTINUE
+C
+      YTAB=CROOT(1:I)//YTABB
+      II=I+7
+C
+      OPEN(UNIT=38,IOSTAT=IOS,ERR=311,FILE=YTAB(1:II),
+     1     FORM='FORMATTED',
+     2     recl=160,
+     5     STATUS='OLD')
+C
+      J=0
+      GO TO 312
+C
+ 311  CONTINUE
+C
+      CLOSE(38)
+C
+      KERR=9
+      CALL CREXERR(KERR)
+      print*,'Open error on ',YTAB(1:II)
+C
+      RETURN
+
+C
+ 312  CONTINUE
+C
+      J=J+1
+      READ(38,ERR=400,IOSTAT=IOS,END=329,
+     1  FMT='(1x,A,1x,A64,47x,A24,I3,7x,I3)')
+     2  CNCREXBR,CREXNAME(J),CREXUNIT(J),NCREXBS(J),NCREXBDW(J)
+      IF(IOS.NE.0) THEN
+         print*,'Internal read error.'
+         print*,CNCREXBR
+         KERR=35
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+
+C
+      CNCREXBR(1:1)='0'
+C
+      READ(CNCREXBR,'(i6.6)',IOSTAT=IOS) NCREXBR(J)
+      IF(IOS.NE.0) THEN
+         print*,'Internal read error.'
+         print*,CNCREXBR
+         KERR=35
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C
+      ICLASS=NCREXBR(J)/1000
+      IYYY  =NCREXBR(J)-ICLASS*1000+1
+C
+      ICLASS=ICLASS+1
+      NCREXP(ICLASS,IYYY)=J
+
+      GO TO 312
+C
+ 329  CONTINUE
+C
+      CLOSE(UNIT=38,IOSTAT=IOS,ERR=420)
+C
+C*          3.3 READ CREX TABLE D.
+C               ------------------
+ 330  CONTINUE
+C
+      YTAD=CROOT(1:I)//YTABD
+C
+      OPEN(UNIT=40,IOSTAT=IOS,ERR=331,FILE=YTAD(1:II),
+     1     FORM='FORMATTED',
+     2     recl=160,
+     5     STATUS='OLD')
+C
+      GO TO 332
+C
+ 331  CONTINUE
+C
+      CLOSE(40)
+C
+      print*,'Open error on ',YTAD
+C
+      KERR=9
+      CALL CREXERR(KERR)
+      RETURN
+C
+ 332  CONTINUE
+C
+      J=0
+ 340  CONTINUE
+c
+      YENTRY=' '
+      READ(40,'(A)',IOSTAT=IOS,END=390) YENTRY
+      IF(IOS.NE.0) THEN
+         print*,'Read error on CREX table D.'
+         KERR=35
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+      IF(YENTRY(2:2).EQ.'D') YENTRY(2:2)='3'
+c
+      j=j+1
+      READ(YENTRY,'(1X,I6,1X,I2)',IOSTAT=IOS) NCREXDR(J),NCREXDL(J)
+      IF(IOS.NE.0) THEN
+         print*,YENTRY
+         KERR=35
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+      IF(J.GT.JP) THEN
+         PRINT*,' DIMENSION TOO SMALL J=',J
+         KERR=13
+         RETURN
+      END IF
+C
+      IF(J.EQ.1) THEN
+         IST=1
+         NCREXDST(J)=IST
+      ELSE
+         IST=IST + NCREXDL(J-1)
+         NCREXDST(J)=IST
+      END IF
+C
+      IF(NCREXDL(J).GT.1) THEN
+         if(YENTRY(12:12).eq.'D') YENTRY(12:12)='3'
+         if(YENTRY(12:12).eq.'C') then
+            YENTRY(12:12)='2'
+c           check if negative scale is present
+            IMINUS=0
+            IMINUS=INDEX(YENTRY(12:16),'-')
+            IF(IMINUS.NE.0) YENTRY(IMINUS:IMINUS)='9'
+         end if
+         IF(YENTRY(12:12).eq.'R') YENTRY(12:12)='1'
+         IF(YENTRY(12:12).eq.'B') YENTRY(12:12)='0'
+         READ(YENTRY,'(11X,I6)',IOSTAT=IOS) NCREXDSQ(IST)
+         IF(IOS.NE.0) THEN
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+c
+         IIST=IST
+C
+         DO 220 JA=1,NCREXDL(J)-1
+         IIST=IIST+1
+         READ(40,'(A)',END=300,IOSTAT=IOS) YENTRY
+         IF(IOS.NE.0) THEN
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+c
+         IF(YENTRY(12:12).eq.'D') YENTRY(12:12)='3'
+         IF(YENTRY(12:12).eq.'C') YENTRY(12:12)='2'
+         IF(YENTRY(12:12).eq.'R') YENTRY(12:12)='1'
+         IF(YENTRY(12:12).eq.'B') YENTRY(12:12)='0'
+         READ(YENTRY,'(11X,I6)',IOSTAT=IOS) NCREXDSQ(IIST)
+         IF(IOS.NE.0) THEN
+            print*,'Internal read error.'
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+ 220     CONTINUE
+C
+      ELSE
+         IF(YENTRY(12:12).eq.'D') YENTRY(12:12)='3'
+         IF(YENTRY(12:12).eq.'C') YENTRY(12:12)='2'
+         IF(YENTRY(12:12).eq.'R') YENTRY(12:12)='1'
+         IF(YENTRY(12:12).eq.'B') YENTRY(12:12)='0'
+         READ(YENTRY,'(11X,I6)',IOSTAT=IOS) NCREXDSQ(IST)
+         IF(IOS.NE.0) THEN
+            print*,YENTRY
+            KERR=35
+            CALL CREXERR(KERR)
+            RETURN
+         END IF
+      END IF
+C
+      GO TO 340
+c
+ 390  CONTINUE
+C
+      CLOSE(UNIT=40,IOSTAT=IOS,ERR=620)
+C
+C
+      RETURN
+C     ----------------------------------------------------------------
+ 400  CONTINUE
+C
+      KERR=6
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 410  CONTINUE
+C
+      KERR=9
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 420  CONTINUE
+C
+      KERR=10
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C     ----------------------------------------------------------------
+ 500  CONTINUE
+C
+      KERR=7
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 510  CONTINUE
+C
+      KERR=9
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 520  CONTINUE
+C
+      KERR=11
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C     -----------------------------------------------------------------
+ 600  CONTINUE
+C
+      KERR=8
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 610  CONTINUE
+C
+      KERR=9
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C
+ 620  CONTINUE
+C
+      KERR=12
+      PRINT*,'BUGBTS: IOS ',IOS
+      CALL CREXERR(KERR)
+      OFIRST=.FALSE.
+      RETURN
+C     -----------------------------------------------------------------
+C
+      END
diff --git a/crexdc/crexupwt.F b/crexdc/crexupwt.F
new file mode 100755
index 0000000..16a4d65
--- /dev/null
+++ b/crexdc/crexupwt.F
@@ -0,0 +1,323 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CREXUPWT(KDD,KELEM,KERR)
+C
+C**** *CREXUPWT*
+C
+C
+C     PURPOSE.
+C     --------
+C          Updates working tables setting element name,unit,scale,
+C     reference value and data width.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          *CALL* *CREXUPWT(KDD,KELEM,KERR)*
+C
+C        INPUT :
+C               *KDD*     -  data descriptor
+C               *KELEM*   -  dimension of CNAMES, CUNITS array
+C        OUTPUT:
+C               *KERR*    -  return error code
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+C
+C
+      COMMON /CREXWT/ NCREXDWINC,NCREXSCAM,NCREXAFDW,NCREXWT ,ODREPF,
+     2               NCREXSTACK(JELEM),NCREXWTEN(JELEM),
+     3               NCREXWTR (JELEM),NCREXWTS (JELEM),NCREXWTRV(JELEM),
+     4               NCREXWTDW(JELEM),NWTIW(JELEM),NWTIWS(JELEM)
+C
+C             NCREXDWINC   -  data width increment
+C             NCREXSCAM    -  scale multiplier
+C             NCREXAFDW    -  augmented field data width
+C             NCREXWT      -  pointer to working table
+C             NCREXSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             NCREXWTR     -  working table reference
+C             NCREXWTS     -  working scale
+C             NCREXWTRV    -  working reference value
+C             NCREXWTDW    -  working data width
+C             NWTIW    -  working data width of increments
+C             NWTIWS   -  working total data width of element set
+C
+C
+      COMMON /CREXWTC/ CREXWTEN(JELEM),CREXWTU (JELEM)
+C
+C             CREXWTEN    -  working table element naame
+C             CREXWTU     -  working table units
+C
+C
+
+      COMMON/CREXTAB/ NCREXBR(JTAB),NCREXBS(JTAB)    , NCREXBDW(JTAB),
+     1                NCREXDR(JTAB),NCREXDST(JTAB)   ,
+     2                NCREXDL(JTAB),NCREXDSQ(JTAB*20),NCREXP(64,255)
+
+C
+C             NCREXBR     - table B,  table reference              array
+C             NCREXBS     - table B,  scale                        array
+C             NCREXBDW    - table B,  data width                   array
+C             NCREXDR     - table D,  table reference              array
+C             NCREXDST    - table D,  starting pointers            array
+C             NCREXDL     - table D,  lengths                      array
+C             NCREXDSQ    - table D,  list of sequence descriptors array
+C
+C
+C
+
+       COMMON/CREXTABC/ CREXNAME(JTAB),CREXUNIT(JTAB),CREXLST(JELEM)
+C
+C             CREXNAME      -  table B, ELEMENT NAME           array
+C             CREXUNIT      -  table B, unit                   array
+C
+C
+      COMMON /CREXATB/  NJA,NCREXATBTR(JTAB),NCREXATBS (JTAB),
+     1                  NCREXATBRV(JTAB),NCREXATBDW(JTAB)
+C
+C
+C             NCREXATBTR      - augmented table B table reference
+C             NCREXATBS       - augmented table B scale
+C             NCREXATBRV      - augmented table B reference value
+C             NCREXATBDW      - augmented table B data width
+C
+C
+      COMMON /CREXATBC/ CREXATBEN(JTAB),CREXATBU (JTAB)
+C
+C             CREXATBEN      - augmented table B element name
+C             CREXATBU       - augmented table B units
+C
+C
+      COMMON /CREXBEF / M,MM,N,JCV
+C
+C             M       -  Number of elements
+C             MM      -  Number of elements
+C             N       -  Number of data sub_sets
+C             JCV     -  Number of character values
+C
+      COMMON /CREXUT/ YUNIT,CUNITNAME,CIA5,CIA2,NCODE,NRECORDS
+c
+c             NCODE  - array containing unit code number
+c             CUNITNAME - array containing unit name
+c             CIA5 - array  containing unit CCITTIA5 name
+c             CIA2 - array  containing unit CCITTIA2 name
+c             NRECORDS - number of entries in the list
+c
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+
+      DIMENSION NCODE(JCTEXT)
+      CHARACTER*30 CUNITNAME(JCTEXT)
+      CHARACTER*24 CIA5(JCTEXT)
+      CHARACTER*24 CIA2(JCTEXT)
+      CHARACTER*24 YUNIT
+
+C
+      CHARACTER*64 CREXNAME, CREXATBEN
+      CHARACTER*24 CREXATBU,CREXUNIT
+      CHARACTER*6  CREXLST
+C
+      CHARACTER*64 CREXWTEN
+      CHARACTER*24 CREXWTU
+      CHARACTER YCH6*6
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   UPDATE WORKING TABLE.
+C                ---------------------
+ 100  CONTINUE
+C
+      IF( KERR.NE.0 ) RETURN
+C
+      ICLASS=KDD/1000
+      IYYY  =KDD-ICLASS*1000+1
+      ICLASS=ICLASS+1
+C
+C*          1.1  ASSOCIATED FIELD ?
+C                ------------------
+ 110  CONTINUE
+C
+      IF(NCREXAFDW.EQ.0) GO TO 140
+C
+C*          1.2  UNITS ELEMENT DESCRIPTOR ?
+C                --------------------------
+ 120  CONTINUE
+C
+      I=NCREXP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         PRINT*,'CREXUPWT : ',KDD
+         CALL CREXERR(KERR)
+         DO 1 IQ=1,JELEM
+         NCREXSTACK(IQ)=0.
+ 1       CONTINUE
+         RETURN
+      end if
+C
+      IF(CREXUNIT(I)(1:4).EQ.'CODE') GO TO 140
+      IF(CREXUNIT(I)(1:4).EQ.'FLAG') GO TO 140
+      IF(CREXUNIT(I)(1:3).EQ.'NUM' ) GO TO 140
+C
+C*          1.3   ADD SPECIAL ENTRY TO WORKING TABLE.
+C                 -----------------------------------
+ 130  CONTINUE
+C
+      NCREXWT=NCREXWT+1
+      CREXWTEN(NCREXWT)='ASSOCIATED FIELD'
+      CREXWTU (NCREXWT)=' '
+      NCREXWTDW(NCREXWT)=NCREXAFDW
+      NCREXWTR (NCREXWT)= 999999
+      NCREXWTEN(NCREXWT)= 0
+      NCREXWTS (NCREXWT)= 0
+      NCREXWTRV(NCREXWT)= 0
+      NCREXAFDW=0
+C
+C*                UPDATE CNAMES AND CUNITS
+C
+      M=M+1
+      IF(M.GT.KELEM) THEN
+         KERR=25
+         PRINT*,'CREXUPWT:'
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+C     ------------------------------------------------------------------
+C*          1.4   SEARCH AUGMENTED TABLE *B ENTRIES .
+C                 -----------------------------------
+ 140  CONTINUE
+C
+C*          1.5  GET TABLE *B ENTRY .
+C                ---------------------
+ 150  CONTINUE
+C
+      I=NCREXP(ICLASS,IYYY)
+      IF(I.EQ.0) THEN
+         KERR=23
+         PRINT*,'CREXUPWT : ',KDD
+         CALL CREXERR(KERR)
+         DO 2 IQ=1,JELEM
+         NCREXSTACK(IQ)=0.
+ 2       CONTINUE
+         RETURN
+      END IF
+C
+ 155  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*          1.6   MODIFY ENTRY FOR OPERATOR IN FORCE.
+C                 -----------------------------------
+ 160  CONTINUE
+C
+C*                ADD ENTRY TO WORKING TABLE.
+C                 ---------------------------
+      NCREXWT=NCREXWT+1
+      NCREXWTR (NCREXWT) = KDD
+      if(NCREXSCAM.ne.0) then
+         NCREXWTS (NCREXWT) = NCREXSCAM
+      else
+         NCREXWTS (NCREXWT) = NCREXBS (I)
+      end if
+      NCREXSCAM=0
+c
+      NCREXWTRV(NCREXWT) = NCREXBR(I) 
+      if(NCREXDWINC.ne.0) then
+         NCREXWTDW(NCREXWT) = NCREXDWINC
+      else
+         NCREXWTDW(NCREXWT) = NCREXBDW(I)
+      end if
+      NCREXDWINC=0
+      if(NCREXWTR (NCREXWT).eq.031002) then
+         NCREXWTDW(NCREXWT)=4
+         NCREXWTRV(NCREXWT) = 0
+      end if
+C
+C     CHECK IF DATA ARE PRESENT IN DATA SECTION.
+C
+      if(NCREXWTR(NCREXWT).eq.31011.or.
+     1   NCREXWTR(NCREXWT).eq.31012) then
+         if(NCREXWTR(NCREXWT-1).eq.31011.or.
+     2      NCREXWTR(NCREXWT-1).eq.31012) then
+            NCREXWTDW(NCREXWT)=0
+         end if
+      end if
+C
+ 175  CONTINUE
+C
+C     ------------------------------------------------------------------
+C*          1.8  UPDATE M, CNAMES, CUNITS.
+C                -------------------------
+ 180  CONTINUE
+C
+      CREXWTEN(NCREXWT) = CREXNAME(I)
+      IF(NC07YYY.NE.0) THEN
+         CREXWTU (NCREXWT) = YUNIT
+         YUNIT=' '
+         NC07YYY=0
+      else
+         CREXWTU (NCREXWT) = CREXUNIT(I)
+      END IF
+      NCREXWTEN(NCREXWT) = 0
+      IF(CREXUNIT(I)(1:3).EQ.'CHA') NCREXWTEN(NCREXWT)=658367
+C
+       M = M + 1
+       IF(M.GT.KELEM) THEN
+          KERR=25
+          PRINT*,'CREXUPWT:'
+          CALL CREXERR(KERR)
+          RETURN
+       END IF
+C
+C     -----------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      RETURN
+      END
diff --git a/crexdc/dec2octal.F b/crexdc/dec2octal.F
new file mode 100755
index 0000000..40c35cd
--- /dev/null
+++ b/crexdc/dec2octal.F
@@ -0,0 +1,77 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DEC2OCTAL(KOCTAL,KDECIMAL,KERR)
+C**** *DEC2OCTAL*
+C
+C
+C     PURPOSE.
+C     --------
+C         Convert decomal integer into octal value
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *DEC2OCTAL(KOCTAL,KDECIMAL,KERR)
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+
+      INTEGER KOCTAL
+      INTEGER KDECIMAL
+      CHARACTER*10 C
+c
+      KERR=0
+      WRITE(C,'(O10)',IOSTAT=IOS) KDECIMAL
+      IF(IOS.NE.0) then
+        Print*,'DEC2OCTAL: internal write error ',ios
+        KERR=33
+        RETURN
+      ENDIF
+C
+      READ(C, '(I10)',IOSTAT=IOS) KOCTAL
+      IF(IOS.NE.0) then
+        Print*,'DEC2OCTAL: internal read error ',ios
+        KERR=35
+        RETURN
+      ENDIF
+
+c     
+      RETURN
+      END
diff --git a/crexdc/extgrp.F b/crexdc/extgrp.F
new file mode 100755
index 0000000..dd97008
--- /dev/null
+++ b/crexdc/extgrp.F
@@ -0,0 +1,114 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE EXTGRP(KBUFL,YBUFF, I,K,IVAL,KERR )
+C
+C**** *EXTGRP*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C         Extract value of group of character
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *EXTGRP(kbufl,ybuff, i,k,ival,kerr )
+C
+C                    kbufl - size of ybuff in bytes
+C                    ybuff - character string
+C
+C                    I - CONVERSION OF GROUP STARTS IN WORD I
+C                        OF ARRAY 'KCHAR' .
+C
+C                    K - number of characters to convert
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C 
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          M. D. DRAGOSAVAC    *ECMWF*       15/09/2003.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+C
+      CHARACTER*(*) YBUFF
+      CHARACTER*8 FMT
+      REAL*8 RVIND, EPS
+C
+      DIMENSION NN(5)
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT GROUP OF CHARACTERS.
+C                ----------------------------
+ 100  CONTINUE
+C
+      IVAL=NVIND
+C
+      FMT='(I10.10)'
+      WRITE(FMT(3:4),'(I2.2)') K
+      FMT(6:7)=FMT(3:4)
+C
+C
+c     Check for '-' sign
+c
+      IF(NE.EQ.1) THEN
+         IF(YBUFF(I:I).EQ.'-') THEN
+            I=I+1
+         END IF
+      END IF
+c     
+c     Check for slash or non figure character
+c
+      DO IZ=I,I+K-1
+      IF(YBUFF(IZ:IZ).EQ.'/') RETURN
+      IICH=ICHAR(YBUFF(IZ:IZ)) 
+      IF(IICH.LT.48.OR.IICH.GT.57) RETURN
+      END DO
+c
+      READ(YBUFF(I:I+K-1),FMT,IOSTAT=IOS) IVAL
+      IF(IOS.NE.0) THEN
+         KERR=35
+         CALL CREXERR(KERR)
+         RETURN
+      END IF
+C
+      IF(YBUFF(I-1:I-1).EQ.'-') IVAL=-IVAL
+C
+      I=I+K
+C
+      RETURN
+      END
diff --git a/crexdc/extgrpc.F b/crexdc/extgrpc.F
new file mode 100755
index 0000000..6048ab9
--- /dev/null
+++ b/crexdc/extgrpc.F
@@ -0,0 +1,80 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE EXTGRPC(KBUFL,YBUFF, I,K,CVAL,KERR )
+C
+C**** *EXTGRP*
+C
+C
+C     PURPOSE.
+C     --------
+C         CONVERT GROUP IN THE REPORT
+C         TO INTEGERS IN ARRAY 'KINT' .
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *EXTGRP(KBUFL,YBUFF, I,K,IVAL,KERR )
+C
+C                    kbufl - size of ybuff in bytes
+C                    ybuff - character string
+C
+C                    I - CONVERSION OF GROUP STARTS IN WORD I
+C                        OF ARRAY 'ybuff' .
+C
+C                    k - number of characters to convert
+C
+C
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          M. D. DRAGOSAVAC    *ECMWF*       15/09/2003.
+C
+C
+      IMPLICIT LOGICAL(O,G)
+C
+      CHARACTER*(*) YBUFF , CVAL
+C
+C
+C     ------------------------------------------------------------------
+C*          1.   EXTRACT GROUP OF CHARACTERS.
+C                ----------------------------
+ 100  CONTINUE
+C
+C
+      CVAL=YBUFF(I:I+K-1)
+C
+      I=I+K
+C
+C
+      RETURN
+      END
diff --git a/crexdc/get_units.F b/crexdc/get_units.F
new file mode 100755
index 0000000..a60c3cd
--- /dev/null
+++ b/crexdc/get_units.F
@@ -0,0 +1,89 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GET_UNITS(KY,KERR)
+C**** *GET_UNITS*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C          Get units for the code number KY
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *GET_UNITS(KY,KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+
+c
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2= 64 ,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+     3          JWORK=360000,JKEY=46)
+
+      COMMON /CREXUT/ YUNIT,CUNITNAME,CIA5,CIA2,NCODE,NRECORDS
+c
+c             NCODE  - array containing unit code number
+c             CUNITNAME - array containing unit name
+c             CIA5 - array  containing unit CCITTIA5 name
+c             CIA2 - array  containing unit CCITTIA2 name
+c             NRECORDS - number of entries in the list
+c
+      DIMENSION NCODE(JCTEXT)
+      CHARACTER*30 CUNITNAME(JCTEXT)
+      CHARACTER*24 CIA5(JCTEXT)
+      CHARACTER*24 CIA2(JCTEXT)
+      CHARACTER*24 YUNIT
+c
+      KERR=0
+      DO I=1,NRECORDS
+        IF(NCODE(I).EQ.KY) THEN
+         YUNIT=CIA5(I)
+         RETURN
+        END IF
+      END DO
+c
+      KERR=47
+      CALL CREXERR(KERR)
+c
+      RETURN
+      END
diff --git a/crexdc/nextgrp.F b/crexdc/nextgrp.F
new file mode 100755
index 0000000..8842c66
--- /dev/null
+++ b/crexdc/nextgrp.F
@@ -0,0 +1,105 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NEXTGRP(KBUFL,YBUFF,I,J,KERR)
+C
+C**** *NEXTGRP*
+C
+C
+C     PURPOSE.
+C     --------
+C         LOCATE THE NEXT SEPARATOR
+C         CHARACTER WHICH IS NOT 'CR' OR 'LF' OR 'SPACE' OR '+'
+C
+C         INPUT     : KBUFL - size if ybuff
+C                     YBUFF - character string
+C                     I     - SCAN STARTS AT byte 'I' OF YBUFF
+C                     J     - SCAN ENDS AT byte 'J' OF YBUFF
+C
+C         OUTPUT    : I     - POSITION OF NEXT 'CR' OR 'LF' OR 'SPACE'
+C                             OR '+'
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *NEXTGRP(KBUFL,YBUFF,I,J,KERR)*
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER*(*) YBUFF
+      CHARACTER*1 CR,LF,SPACE,PLUS,MINUS
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+      REAL*8 RVIND, EPS
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SCAN BULLETIN.
+C                --------------
+ 100  CONTINUE
+C
+C     'CR' = 13 , 'LF' = 10 , 'SPACE' = 32 'PLUS' = 43
+C
+      KERR=0
+      cr=char(13)
+      lf=char(10)
+      space=char(32)
+      plus=char(43)
+      minus='-'
+C
+      i=iabs(i)
+      k = i
+      do 101 i=k,j
+      if(NE.eq.0) then
+         if(ybuff(I:I).ne.cr.and.
+     1      ybuff(I:I).ne.lf.and.
+     2      ybuff(I:I).ne.space.and.
+     2      ybuff(I:I).ne.minus.and.
+     2      ybuff(I:I+2).ne.'E++'.and.
+     3      ybuff(I:I).ne.plus) return
+      else
+         if(ybuff(I:I).ne.cr.and.
+     1      ybuff(I:I).ne.lf.and.
+     2      ybuff(I:I).ne.space.and.
+     2      ybuff(I:I+2).ne.'E++'.and.
+     3      ybuff(I:I).ne.plus) return
+      end if
+  101 continue
+C
+      RETURN
+      END
diff --git a/crexdc/nextprt.F b/crexdc/nextprt.F
new file mode 100755
index 0000000..6c581c7
--- /dev/null
+++ b/crexdc/nextprt.F
@@ -0,0 +1,101 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NEXTPRT (KBUFL,YBUFF,I,J,KERR )
+C
+C**** *NEXTPRT*
+C
+C
+C     PURPOSE.
+C     --------
+C         SCANS BULLETIN IN 'KCHAR' FOR NEXT CHARACTER WHICH
+C         IS NOT 'SOH' , 'CR' , 'LF' , 'SPACE' OR 'GS' .
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *NEXTPRT(KBUFL,YBUFF,I,J,KERR*
+C
+C         INPUT     : KBUFL - length of YBUFF in bytes
+C                     YBUFF - charcter string
+C                     I     - SCAN STARTS AT WORD I.
+C                     J     - SCAN STOPS AT WORD J .
+C
+C         OUTPUT    : I     - POSITION OF REQUIRED CHARACTER
+C                     KERR  - ERROR CODE
+C
+
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          M. D. DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER*(*) YBUFF
+      CHARACTER*1 soh,lf,cr,space,gs,plus,minus
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SCAN BULLETIN.
+C                --------------
+ 100  CONTINUE
+C
+C     'SOH' = 1 , 'LF' = 10 , 'CR' = 13 , SPACE = 32 , 'GS' = 29.
+C     '+' = 43, 'MINUS'='-'
+c
+      kerr=0
+      soh=char(1)
+      lf=char(10)
+      cr=char(13)
+      space=char(32)
+      gs=char(29)
+      plus=char(43)
+      minus='-'
+C
+      i = iabs(i)
+      K = I
+      do 101 i=k,j
+         if(ybuff(i:i).ne.soh.and.
+     1      ybuff(i:i).ne.lf.and.
+     2      ybuff(i:i).ne.cr.and.
+     3      ybuff(i:i).ne.space.and.
+     4      ybuff(i:i).ne.gs.and.
+     4      ybuff(i:i).ne.minus.and.
+     5      ybuff(i:i).ne.plus)  then
+            return
+         end if
+  101 continue
+C
+      RETURN
+      END
diff --git a/crexdc/nextsec.F b/crexdc/nextsec.F
new file mode 100755
index 0000000..0935ce3
--- /dev/null
+++ b/crexdc/nextsec.F
@@ -0,0 +1,84 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NEXTSEC(KBUFL,YBUFF, I,J,KERR )
+C
+C**** *NEXTSEC*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C         Scan ybuff for '++' characters
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *NEXTSEC(I,J)*
+C         INPUT     : KBUFL - size of ybuff in bytes
+C                     YBUFF - character string
+C                     I     - scan starts at word I.
+C                     J     - scan stops at word J .
+C
+C         OUTPUT    : I     - position of required character.
+C                     KERR  - error code
+
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*      07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER*(*) YBUFF
+      CHARACTER*2 plusplus
+C
+C     ------------------------------------------------------------------
+C*          1.   SCANE BULLETIN FOR NEXT '=' SIGN.
+C                ---------------------------------
+ 100  CONTINUE
+C
+      plusplus='++'
+C
+      
+      i = iabs(i)
+      k = i
+      do 101 i=k,j
+         if(ybuff(i:i+1).eq.plusplus) return
+  101 continue
+C
+      i=j
+      RETURN
+      END
diff --git a/crexdc/nextsep.F b/crexdc/nextsep.F
new file mode 100755
index 0000000..628a6c8
--- /dev/null
+++ b/crexdc/nextsep.F
@@ -0,0 +1,103 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NEXTSEP(KBUFL,YBUFF,I,J,KERR)
+C
+C**** *NEXTSEP*
+C
+C
+C     PURPOSE.
+C     --------
+C         LOCATE THE NEXT SEPARATOR
+C         CHARACTER WHICH IS 'CR' OR 'LF' OR 'SPACE' OR '+'
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *NEXTSEP(KBUFL,YBUFF,I,J,KERR)*
+C         INPUT     : KBUFL - size if ybuff
+C                     YBUFF - character string
+C                     I     - SCAN STARTS AT byte 'I' OF YBUFF
+C                     J     - SCAN ENDS AT byte 'J' OF YBUFF
+C
+C         OUTPUT    : I     - POSITION OF NEXT 'CR' OR 'LF' OR 'SPACE'
+C                             OR '+'
+
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       15/02/2003.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      CHARACTER*(*) YBUFF
+      CHARACTER*1 cr,lf,space,plus,minus 
+C
+      COMMON /CREXWORK/ NBPT,NGS,NVIND,NBPTSEC2,RVIND,EPS,NE,IEOLD,
+     1                  NC07YYY
+      REAL*8 RVIND,EPS
+C
+C     ------------------------------------------------------------------
+C
+C*          1.   SCAN BULLETIN.
+C                --------------
+ 100  CONTINUE
+C
+C     'CR' = 13 , 'LF' = 10 , 'SPACE' = 32 'PLUS' = 43,
+C
+      cr=char(13)
+      lf=char(10)
+      space=char(32)
+      plus=char(43)
+      minus='-'
+C
+      i=iabs(i)
+      k = i
+      do 101 i=k,j
+       if(NE.eq.0) then
+         if(ybuff(I:I).eq.cr.or.
+     1      ybuff(I:I).eq.lf.or.
+     2      ybuff(I:I).eq.space.or.
+     3      ybuff(I:I).eq.minus.or.
+     3      ybuff(I:I).eq.plus) return
+       else
+         if(ybuff(I:I).eq.cr.or.
+     1      ybuff(I:I).eq.lf.or.
+     2      ybuff(I:I).eq.space.or.
+     3      ybuff(I:I).eq.plus) return
+       end if
+  101 continue
+C
+      return
+      end
diff --git a/crexdc/nextsubset.F b/crexdc/nextsubset.F
new file mode 100755
index 0000000..e085fcb
--- /dev/null
+++ b/crexdc/nextsubset.F
@@ -0,0 +1,90 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NEXTSUBSET(KBUFL,YBUFF, I,J,KERR )
+C
+C**** *NEXTSUBSET*
+C
+C
+C     PURPOSE.
+C     --------
+C
+C         SCANS BULLETIN IN 'KCHAR' FOR NEXT '+CrCrLf' CHARACTER.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *NEXTSUBSET((KBUFL,YBUFF, I,J,KERR)*
+C         INPUT     : KBUFL - size of ybuff in bytes
+C                     YBUFF - character string
+C                     I     - scan starts at character I.
+C                     J     - scan stops at character J .
+C
+C         OUTPUT    : I     - position of required character
+C                             character not found.
+C                     KERR  - return error code
+
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*      05/11/2003
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      character*(*) ybuff
+      character*1 plus
+      character*4 plcrlf 
+C
+C     ------------------------------------------------------------------
+C*          1.   SCANE BULLETIN FOR NEXT '+CrCrLf'
+C                ---------------------------------
+ 100  CONTINUE
+C
+      plus='+'
+      plcrlf='+'//char(13)//char(13)//char(10)
+C
+
+      i = iabs(i)
+      k = i
+      do 101 i=k,j
+         if(ybuff(i-1:i-1).ne.plus.and.ybuff(i:i).eq.plus.and.
+     1      ybuff(i+1:i+1).ne.plus) then
+            return
+         end if
+  101 continue
+C
+      I=J
+      RETURN
+      END
diff --git a/crexdc/octal2dec.F b/crexdc/octal2dec.F
new file mode 100755
index 0000000..9775c91
--- /dev/null
+++ b/crexdc/octal2dec.F
@@ -0,0 +1,75 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE OCTAL2DEC(KOCTAL,KDECIMAL,KERR)
+C**** *DEC2OCTAL*
+C
+C
+C     PURPOSE.
+C     --------
+C         Convert decomal integer into octal value
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *DEC2OCTAL(KOCTAL,KDECIMAL,KERR)
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+
+      INTEGER KOCTAL
+      INTEGER KDECIMAL
+      CHARACTER*10 C
+c
+      KERR=0
+      WRITE(C,'(I10)',IOSTAT=IOS) KOCTAL
+      IF(IOS.NE.0) then
+        Print*,'OCTAL2DEC: internal write error ',ios
+        KERR=33
+        RETURN
+      ENDIF
+
+      READ(C, '(O10)',IOSTAT=IOS) KDECIMAL
+      IF(IOS.NE.0) then
+        Print*,'OCTAL2DEC: internal write error ',ios
+        KERR=33
+        RETURN
+      ENDIF
+c     
+      RETURN
+      END
diff --git a/crexdc/sources b/crexdc/sources
new file mode 100755
index 0000000..073248b
--- /dev/null
+++ b/crexdc/sources
@@ -0,0 +1,45 @@
+#
+#   Sources for crexdc
+#
+
+SOURCES.F = \
+   crexdes.F      \
+   crexedd.F      \
+   crexen.F       \
+   crexepwt.F     \
+   crexerr.F      \
+   crexetab.F     \
+   crexetd.F      \
+   crexetdr.F     \
+   crexex.F       \
+   crexinit.F     \
+   crexivar.F     \
+   crexoper.F     \
+   crexprco.F     \
+   crexprs0.F     \
+   crexprs1.F     \
+   crexprt.F      \
+   crexrep.F      \
+   crexs0.F       \
+   crexs1.F       \
+   crexs2.F       \
+   crexs2data.F   \
+   crexs5.F       \
+   crexsel.F      \
+   crexsrp.F      \
+   crexstdr.F     \
+   crextables.F   \
+   crextb.F       \
+   crexupwt.F     \
+   dec2octal.F    \
+   extgrp.F       \
+   extgrpc.F      \
+   get_units.F    \
+   nextgrp.F      \
+   nextprt.F      \
+   nextsec.F      \
+   nextsep.F      \
+   nextsubset.F   \
+   crex_get_name_unit.F \
+   crexsel2.F     \
+   octal2dec.F    
diff --git a/crextables/B000101 b/crextables/B000101
new file mode 100755
index 0000000..176d728
--- /dev/null
+++ b/crextables/B000101
@@ -0,0 +1,1197 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000004 BUFR/CREX MASTER TABLE                                           CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000006 BUFR MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2 
+ 000007 CREX MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000008 BUFR LOCAL TABLE VERSION NUMBER                                  CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0        24
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0         2
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0         1
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0         4
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0         3
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2         4
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0         2
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0        28
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0         3
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0         5
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0         3
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0         3
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0         3
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0         5
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0         7
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5        10
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0         6
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001087 WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER                NUMERIC                    0            0  23 NUMERIC                   0         7
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0         3
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0         4
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0         3
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001096 STATION ACQUISITION                                              CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0         1
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0         2
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0         2
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0         2
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2         3
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0         3
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0         2
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0         2
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0         3
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0         2
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0         2
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0         4
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0         3
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0         3
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0         3
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0         2
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0         2
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0         9
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0         6
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0         6
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0         1
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0         2
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0         1
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0         1
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0         2
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0         3
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0         1
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0         1
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0         2
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0         1
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0         2
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0         2
+ 002042 INDICATOR FOR SEA SURFACE CURRENT SPEED                          CODE TABLE 2042            0            0   2 CODE TABLE 2042           0         1
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0         2
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0         2
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0         2
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0         2
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0         3
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0         7
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0         2
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0         2
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0         2
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0         2
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0         2
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0         2
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0         2
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0         2
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0         2
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0         2
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0         1
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0         2
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2         5
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0         1
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0         2
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5         5
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0         2
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0         2
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0         2
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3         4
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0         2
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0         2
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3         4
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1         4
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4         3
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0         2
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0         2
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0         2
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1         4
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0         2
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0         3
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0         1
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0         2
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0         2
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1         2
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0         2
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0         2
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1         4
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1         4
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0         2
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0         5
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0         2
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7 %                         0         3
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 2119            0            0   3 CODE TABLE 2119           0         1
+ 002120 OCEAN WAVE FREQUENCY                                             Hz                         3            0  10 Hz                        3         4
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8         3
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6         3
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4         3
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1         3
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1         3
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7         2
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6         3
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5         2
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0         3
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0         3
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0         1
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2         2
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2         2
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2         5
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2         5
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3         5
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0         3
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0         3
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0         2
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0         2
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0         2
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0         2
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0         2
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0         2
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0         4
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0        10
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8         8
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8         8
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7 %                         0         3
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7 %                         0         3
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0         3
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0         3
+ 002160 WAVE LENGTH OF THE RADAR                                         CODE TABLE 2160            0            0   4 CODE TABLE 2160           0         2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0         2
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0         1
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0         2
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0         2
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0         5
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0         2
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0         3
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4         4
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9 NUMERIC                   0         3
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0         2
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0         2
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0         2
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0         2
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0         2
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0         2
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0         7
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0         2
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0         2
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0         2
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0   4 CODE TABLE 2185           0         2
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0        10
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0         6
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0         7
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189            0            0  12 FLAG TABLE 2189           0         4
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7 %                         0         3
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0         4
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0         2
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0         2
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0         2
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0         2
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0         2
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6         8
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0         4
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0         4
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0         4
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0         4
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0         4
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0         4
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0         4
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0         4
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0         4
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0         4
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0         3
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0         2
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0         3
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0         2
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0         2
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0         2
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0         2
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0         2
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0         2
+ 004080 AVERAGING PERIOD FOR FOLLOWING VALUE                             CODE TABLE 4080            0            0   4 CODE TABLE 4080           0         2
+ 004086 LONG TIME PERIOD OR DISPLACEMENT                                 SECOND                     0        -8192  15 SECOND                    0         5
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005015 LATITUDE DISPLACEMENT (HIGH ACCURACY)                            DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005016 LATITUDE DISPLACEMENT (COARSE ACCURACY)                          DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005023 SUN TO SATELLITE AZIMUTH DIFFERENCE                              DEGREE                     1        -1800  12 DEGREE                    1         4
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0         4
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0         4
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1         5
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0         2
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0         8
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0         2^M
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005060 Y ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005061 Z ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10 NUMERIC                   0         4 
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11 NUMERIC                   0         4  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31 M                         2        10 
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16 DEGREE                    2         5 
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006015 LONGITUDE DISPLACEMENT (HIGH ACCURACY)                           DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006016 LONGITUDE DISPLACEMENT (COARSE ACCURACY)                         DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1         4
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5         4
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0         4
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1         5
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0         3
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0         4
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6 NUMERIC                   0         2 
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31 M                         2        10 
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13 ADS/M                     5         4
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0         5
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1         5
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0         4
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0         5
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1         5
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007026 SATELLITE ZENITH ANGLE                                           DEGREE                     4      -900000  21 DEGREE                    4         7
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1       - 4000  17 M                         1         5
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1       - 4000  17 M                         1         5
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2         5
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1         4
+ 007040 IMPACT PARAMETER (SEE NOTE 8)                                    M                          1     62000000  22 M                         1         8
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2         5
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1         6
+ 007063 DEPTH BELOW SEA/WATER SURFACE                                    M                          2            0  20 M                         2         7
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0         2
+ 007065 WATER PRESSURE                                                   PA                        -3            0  17 PA                        0         6
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0         4
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31 M                         2        10 
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0         3
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0         2
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0         2
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0         1
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0         2
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0         3
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0         2
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0         3
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0         2
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0         2
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0         2
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0         1
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0         1
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0         2
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0         1
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0         1
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0         6
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0         2
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0         2
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0         2
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0         2
+ 008029 REMOTLY SENSED SURFACE TYPE                                      CODE TABLE 8029            0            0   8 CODE TABLE 8029           0         3
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0         4
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0         3
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0         1
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0         1
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0         2
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0         2
+ 008042 EXTENDED VERTICAL SOUNDING SIGNIFICANCE                          FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0         6
+ 008049 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0         2
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0         1
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0         2
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0         1
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0         2
+ 008065 SUN-GLINT INDICATOR                                              CODE TABLE 8065            0            0   2 CODE TABLE 8065           0         1
+ 008066 SEMI-TRANSPARENCY INDICATOR                                      CODE TABLE 8066            0            0   2 CODE TABLE 8066           0         1
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0         2
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0         1
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0         1
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0         1
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0         2
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE 8081            0            0   6 CODE TABLE 8081           0         2
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0         1
+ 008083 NOMINAL VALUE INDICATOR                                          FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0         5
+ 008085 BEAM IDENTIFIER                                                  CODE TABLE 8085            0            0   3 CODE TABLE 8085           0         1
+ 008193 TIME QUALIFIER                                                   CODE TABLE 8193            0            0   6 CODE TABLE 8193           0         2 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8194            0            0   4 CODE TABLE 8194           0         2 
+ 008195 DATA TYPE                                                        CODE TABLE 8195            0            0   7 CODE TABLE 8195           0         3 
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3 
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 8222            0            0   4 CODE TABLE 8222           0         2 
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE 8223            0            0   7 FLAG TABLE 8223           0         3 
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10 NUMERIC                   3         4 
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0         5
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1         5
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2        10
+ 010032 SATELLITE DISTANCE TO EARTH'S CENTRE                             M                          1            0  27 M                         2         9
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27 M                         2         9
+ 010034 EARTH RADIUS                                                     M                          1            0  27 M                         2         9
+ 010035 EARTH'S LOCAL RADIUS OF CURVATURE                                M                          1     62000000  22 M                         1         8
+ 010036 GEOID UNDULATION (SEE NOTE 4)                                    M                          2       -15000  15 M                         2         6
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0         4
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2         5
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1         5
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1         5
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1         4
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1         4
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1         4
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0         2
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0         5
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15 DEGREE                    2         5
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31 M                         3        10
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      MS-1                       3       -65536  17 MS-1                      3         6
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18 M                         3         6
+ 010086 GEOID'S HEIGHT                                                   M                          3      -131072  18 M                         3         6
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18 M                         3         6
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16 M                         3         5
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16 M                         3         5
+ 010090 LONG PERIOD  TIDE HEIGHT                                         M                          3       -32768  16 M                         3         5
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16 M                         3         5
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16 M                         3         5
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16 M                         3         5
+ 010095 HEIGHT OF ATMOSPHERE USED                                        M                          0            0  16 M                         0         5
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1         4
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1         4
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2         4
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1         4
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1         4
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0         3
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9         6
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9         6
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2         6
+ 011030 EXTENDED DEGREE OF TURBULENCE                                    CODE TABLE 11030           0            0   6 CODE TABLE                0         2
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0         2
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1         5
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1         5
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1         4
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2         5
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1         4
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0         2
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0         2
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0         2
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1         4
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1         4
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1         4
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1         4
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1         4
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1         4
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1         4
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1         3
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2         5
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2         5
+ 011054 MEAN WIND DIRECTION FOR 1500 M - 3000 M                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011055 MEAN WIND SPEED FOR 1500 M - 3000 M                              M/S                        1            0  12 M/S                       1         4
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1         4
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1         4
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3         5
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3         4
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2         4
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2         4
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0         4
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2         4
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13 M/S                       1         4^M 
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13 M/S                       1         4^M 
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1         3
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1         3
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1         3
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1         3
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1         3
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012049 TEMPERATURE CHANGE OVER SPECIFIED PERIOD                         K                          0          -30   6 C                         0         2
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1         3
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1         3
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1         3
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1         3
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1         3
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1         4
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1         4
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2         5
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1         4
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6         9
+ 012073 TEMPERATURE                                                      K                          2            0  16 K                         2         5
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3         5
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3         5
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2         4
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2         4
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2         4
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2         4
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2         4
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2         4
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2         4
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2         4
+ 012121 GROUND MINIMUM TEMPERATURE                                       K                          2            0  16 C                         2         4
+ 012122 GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT                K                          2            0  16 C                         2         4
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2         4
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2         4
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2         4
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2         4
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2         4
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2         5
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2         5
+ 012180 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012181 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012182 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR             K                          2            0  16 K                         2         5
+ 012183 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012184 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012185 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16 K                         2         5
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16 K                         2         5
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16 K                         2         5
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5         5
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5         5
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0         3
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1         4
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3         3
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1         5
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1         4
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2         4
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2         5
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4         4
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7         4
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1         4
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1         3
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0         1
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0         1
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0         2
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0         2
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0         2
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0         2
+ 013044 K INDEX                                                          K                          0          -30   8 K                         0         3
+ 013045 KO INDEX                                                         K                          0          -30   8 K                         0         3
+ 013046 MAXIMUM BUOYANCY                                                 K                          0          -30   8 K                         0         3
+ 013047 MODIFIED SHOWALTER STABILITY INDEX                               K                          0          -60   6 C                         0         2
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0         2
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1         3
+ 013056 CHARACTER AND INTENSITY OF PRECIPITATION                         CODE TABLE 13056           0            0   4 CODE TABLE 13056          0         2
+ 013057 TIME OF BEGINNING OR END OF PRECIPITATION                        CODE TABLE 13057           0            0   4 CODE TABLE 13057          0         2
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1         3
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0         3
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1         5
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2         5
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2         4
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2         4
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1         3
+ 013081 WATER CONDUCTIVITY                                               S M-1                      3            0  14 S M-1                     3         4
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1         4
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6         5
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0         4
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3         4
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8 KG/M**2                   2         3
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8 NUMERIC                   0         3
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19 KG/M**2                   4         6
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30 KG/M**2                   8        10   
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0         3
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0         3
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0         3
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0         4
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0         3
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0         3
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11 WM-2SR-1CM-1              0         4
+ 014046 SCALED IASI RADIANCE                                             (W/M**2)*(1/SR)*(1/M)      0        -5000  16 (W/M**2)*(1/SR)*(1/M)     0         5 
+ 014047 SCALED MEAN AVHRR RADIANCE                                       (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014048 SCALED STANDARD DEVIATION RADIANCE                               (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1         4
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3         4
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16 NUMERIC                   0         5
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0         4
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0         4
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0         4
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2         3
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0         3
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3         4
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0         3
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3         4
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0        10
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8         7
+ 015025 TYPE OF POLLUTANT                                                CODE TABLE 15025           0            0   4 CODE TABLE 15025          0         2
+ 015026 CONCENTRATION OF POLLUTANT                                       MOLMOL-1                   9            0   9 MOLMOL-1                  9         3
+ 015027 CONCENTRATION OF POLLUTANT                                       KG/M3                      9            0  10 KG/M3                     9         4
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4         5
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4         4
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5         5
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5         5
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4         5
+ 015036 ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                            N-UNITS                    3            0  19 N-UNITS                   3         6
+ 015037 BENDING ANGLE                                                    RADIANS                    8      -100000  23 RADIANS                   8         7
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0         2
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2         4
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0         3
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2         4
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2         5
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3         4
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0         1
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3         4
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0         2
+ 019100 TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE  CODE TABLE 19100           0            0   4 CODE TABLE 19100          0         2
+ 019101 ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE   CODE TABLE 19101           0            0   4 CODE TABLE 19101          0         2
+ 019102 SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE          CODE TABLE 19102           0            0   3 CODE TABLE 19102          0         1
+ 019103 DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE        CODE TABLE 19103           0            0   4 CODE TABLE 19103          0         2
+ 019104 CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES             CODE TABLE 19104           0            0   4 CODE TABLE 19104          0         2
+ 019105 DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE           CODE TABLE 19105           0            0   4 CODE TABLE 19105          0         2
+ 019106 IDENTIFICATION NUMBER OF TROPICAL CYCLONE                        NUMERIC                    0            0   7 NUMERIC                   0         3
+ 019107 TIME INTERVAL OF THE TROPICAL CYCLONE ANALYSIS                   CODE TABLE 19107           0            0   4 CODE TABLE 19107          0         2
+ 019108 ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE        CODE TABLE 19108           0            0   3 CODE TABLE 19108          0         1
+ 019109 MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE      CODE TABLE 19109           0            0   4 CODE TABLE 19109          0         2
+ 019110 APPARENT 24-HOUR CHANGE IN INTENSITY OF TROPICAL CYCLONE         CODE TABLE 19110           0            0   4 CODE TABLE 19110          0         2
+ 019111 CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE            NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019112 DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019113 CLOUD PATTERN TYPE OF THE DT- NUMBER                             CODE TABLE 19113           0            0   4 CODE TABLE 19113          0         2
+ 019114 MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE     NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019115 TREND OF PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)         NUMERIC                    1          -30   6 NUMERIC                   1         2
+ 019116 PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE             NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019117 CLOUD PICTURE TYPE OF THE PT- NUMBER                             CODE TABLE 19117           0            0   3 CODE TABLE 19117          0         1
+ 019118 FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019119 TYPE OF THE FINAL T-NUMBER                                       CODE TABLE 19119           0            0   3 CODE TABLE 19119          0         1
+ 019150 TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1         4
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1         3
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0         3
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0         2
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0         2
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0         2
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0         2
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0         3
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0         2
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0         2
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1         4
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1         4
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1         5
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1         5
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0         2
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0         1
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0        10
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0         2
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0         6
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0         1
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0         7
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0         2
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0         3
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0         1
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2         3
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0         1
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0         2
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0         2
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0         2
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0         2
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0         2
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0         3
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1         4
+ 020040 EVOLUTION OF DRIFT OF SNOW                                       CODE TABLE 20040           0            0   4 CODE TABLE 20040          0         2
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0         2
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0         1
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0         2
+ 020050 CLOUD INDEX                                                      CODE TABLE 20050           0            0   8 CODE TABLE 20050          0         3
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0         3
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0         3
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0         3
+ 020054 TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 020055 STATE OF SKY IN TROPICS                                          CODE TABLE 20055           0            0   4 CODE TABLE 20055          0         2
+ 020056 CLOUD PHASE                                                      CODE TABLE 20056           0            0   3 CODE TABLE 20056          0         1
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0         4
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0         2
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0         4
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0         3
+ 020066 MAXIMUM DIAMETER OF HAILSTONES                                   M                          3            0   8 M                         3         3
+ 020067 DIAMETER OF DEPOSIT                                              M                          3            0   9 M                         3         3
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0         2
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0         3
+ 020083 AMOUNT OF SEGMENT COVERED BY SCENE                               %                          0            0   7 %                         0         3
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0         2
+ 020095 ICE PROBABILITY                                                  NUMERIC                    3            0  10 NUMERIC                   3         4
+ 020096 ICE AGE ("A" PARAMETER)                                          dB                         2        -4096  13 dB                        2         4
+ 020101 LOCUST (ACRIDIAN) NAME                                           CODE TABLE 20101           0            0   4 CODE TABLE 20101          0         2
+ 020102 LOCUST (MATURITY) COLOR                                          CODE TABLE 20102           0            0   4 CODE TABLE 20102          0         2
+ 020103 STAGE OF DEVELOPMENT OF LOCUSTS                                  CODE TABLE 20103           0            0   4 CODE TABLE 20103          0         2
+ 020104 ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS                   CODE TABLE 20104           0            0   4 CODE TABLE 20104          0         2
+ 020105 SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARMCODE TABLE 20105           0            0   4 CODE TABLE 20105          0         2
+ 020106 LOCUST POPULATION DENSITY                                        CODE TABLE 20106           0            0   4 CODE TABLE 20106          0         2
+ 020107 DIRECTION OF MOVEMENTS OF LOCUST SWARM                           CODE TABLE 20107           0            0   4 CODE TABLE 20107          0         2
+ 020108 EXTENT OF VEGETATION                                             CODE TABLE 20108           0            0   4 CODE TABLE 20108          0         2
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3 
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7 %                         0         3 
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14 PA                       -1         5 
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0         3
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0         3
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1         3
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0         2
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0         2
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1         4
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1         3
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3         2
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0         3
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0         3
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7         4
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2         3
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0         3
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2         4
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1         4
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0         3
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0         4
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0         5
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0         3
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0         4
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0         6
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0         2
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0         3
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0         1
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3         5
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3         3
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3         4
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3         4
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3         4
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3         5
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0         2
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021088 WET BACKSCATTER                                                  dB                         2        -5000  13 dB                        2         4
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0         3
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0         3
+ 021093 Ku BAND PEAKINESS                                                NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021094 S BAND PEAKINESS                                                 NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0         2
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3         5
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2         5
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3         5
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8         5
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0         6
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3         6
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0         6
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0         6
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2         5
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2         5
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0         2
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2         5
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2         5
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREE                     3            0  19 DEGREE                    3         6
+ 021133 WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID            M                          3            0  29 M                         3         9
+ 021134 RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM                    RAD/M                      3            0  19 RAD/M                     3         6
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  dB                         2       -32768  16 dB                        2         5
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              dB                         2       -32768  16 dB                        2         5
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR AGC                      dB                         2        -2048  12 dB                        2         4
+ 021140 S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                   dB                         2       -32768  16 dB                        2         5
+ 021141 STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT               dB                         2       -32768  16 dB                        2         5
+ 021142 S BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -1024  11 dB                        2         4
+ 021143 KU BAND RAIN ATTENUATION                                         dB                         2  -1073741824  31 dB                        2        10
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0         1
+ 021150 BEAM COLLOCATION                                                 CODE TABLE 21150           0            0   2 CODE TABLE 21150          0         1
+ 021151 ESTIMATED ERROR IN SIGMA0 AT 40DEG INCIDENCE ANGLE               dB                         2            0   9 dB                        2         3
+ 021152 SLOPE AT 40DEG INCIDENCE ANGLE                                   dB/DEG                     2          -80   7 dB/DEG                    2         3
+ 021153 ESTIMATED ERROR IN SLOPE AT 40DEG INCIDENCE ANGLE                dB/DEG                     2          -40   6 dB/DEG                    2         3
+ 021154 SOIL MOISTURE SENSITIVITY                                        dB                         2            0  12 dB                        2         4
+ 021155 WIND VECTOR CELL QUALITY                                         FLAG TABLE 21155           0            0  24 FLAG TABLE 21155          0         8
+ 021156 BACKSCATTER DISTANCE                                             NUMERIC                    1        -4096  13 NUMERIC                   1         4
+ 021157 LOSS PER UNIT LENGTH OF ATMOSPHERE USED                          dB/M                      10            0  22 dB/M                     10         7
+ 021158 ASCAT kp ESTIMATE QUALITY                                        CODE TABLE 21158           0            0   2 CODE TABLE 21158          0         1
+ 021159 ASCAT SIGMA-0 USABILITY                                          CODE TABLE 21159           0            0   2 CODE TABLE 21159          0         1
+ 021160 ASCAT USE OF SYNTHETIC DATA                                      NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021161 ASCAT SYNTHETIC DATA QUALITY                                     NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021162 ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021163 ASCAT SOLAR ARRAY REFLECTION CONTAMINATION                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021164 ASCAT TELEMETRY PRESENCE AND QUALITY                             NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021165 ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE                   NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021166 ASCAT LAND FRACTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022005 DIRECTION OF SEA SURFACE CURRENT                                 DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0         2
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0         2
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0         2
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1         4
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1         4
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1         4
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2         4
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2         4
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2         4
+ 022032 SPEED OF SEA SURFACE CURRENT                                     M/S                        2            0  13 M/S                       2         4
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2         4
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2         4
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3         5
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3         5
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3         4
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3         5
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1         4
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1         4
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2         5
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1         5
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3         6
+ 022049 SEA SURFACE TEMPERATURE                                          K                          2            0  15 K                         2         5
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2         3
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0         1
+ 022059 SEA SURFACE SALINITY                                             PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 22060           0            0   3 CODE TABLE 22060          0         1
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0         2
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0         5
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3         6
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3         6
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6         8
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0         4
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0         3
+ 022069 SPECTRAL WAVE DENSITY                                            M2HZ-1                     3            0  22 M2HZ-1                    3         7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2         4
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1         3
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0         4
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2         4
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1         3
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0         4
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0         3
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0         4
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0         5
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3         4
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5         4
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2         7
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2         7
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2         7
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2         7
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2         7
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2         7
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0         3
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3         2
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0         5
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0         5
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0         3
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0        10
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0         2
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0         2
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0         2
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0         2
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2         5
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31 M                         3        10
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16 M                         3         5
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S BAND                          NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31 M                         3        10
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16 M                         3         5
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16 M                         3         5
+ 022157 STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16 M                         3         5
+ 022158 S BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16 M                         3         5
+ 022159 STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16 M                         3         5
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21 NUMERIC                   6         7
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27 M**4                      4         9
+ 023001 ACCIDENT EARLY NOTIFICATION   ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0         1
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0         2
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0         1
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0         1
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0         1
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0         1
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0         1
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0         1
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0         1
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0         1
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6         7
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0         1
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0         6
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0         6
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0         8
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1         4
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2         4
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2         4
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0         1
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0         1
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                      -11         9
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                      -11         9
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0         2
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0         3
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2        10
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2        10
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2        10
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2        10
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2        10
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1         4
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1         4
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1         2
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0         1
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0         1
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0         1
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2         3
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0         2
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0         2
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0         1
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0         1
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0         1
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0         1
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5         2
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0         1
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7         2
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2         3
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0         1
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0         3
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1         3
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12 V                         1         4
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15 NUMERIC                   1         5
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0         1
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0         1
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0         1
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0         2
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0         2
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0         2
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0         1
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0         1
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4         5
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2         5
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0         7
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0         2
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0         2
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0         6
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0         2
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0         3
+ 025052 LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA            NUMERIC                    4            0  15 NUMERIC                   4         5
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0         4
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2         5
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 025062 DATABASE IDENTIFICATION                                          NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0         4
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0         3
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8        10
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5         7
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5         6
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4         8
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10         5
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0         1
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3         5
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2         5
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0         3
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0         1
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0         2
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0         2
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5         6
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5         6
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025104 NUMBER OF WAVE-LENGTH BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025107 FIRST WAVE-LENGTH BIN                                            M                          3            0  29 M                         3         9
+ 025108 LAST WAVE-LENGTH BIN                                             M                          3            0  29 M                         3         9
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025120 RA2-L2-PROCESSING FLAG                                           CODE TABLE 25120           0            0   2 CODE TABLE 25120          0         1
+ 025121 RA2-L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 25122           0            0   2 CODE TABLE 25122          0         1
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 25123           0            0   2 CODE TABLE 25123          0         1
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 25124           0            0   2 CODE TABLE 25124          0         1
+ 025125 MWR L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025127 INVERTED BAROMETER CORRECTION                                    M                          3       -32768  16 M                         3         5
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3         5
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16 M                         3         5
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16 M                         3         5
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16 M                         3         5
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025137 SEA STATE BIAS CORRECTION ON S BAND                              M                          3       -32768  16 M                         3         5
+ 025138 AVERAGE SIGNAL TO NOISE RATION                                   NUMERIC                    0        -2048  12 NUMERIC                   0         4
+ 025140 START CHANNEL                                                    NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025141 END CHANNEL                                                      NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025142 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6 NUMERIC                   0         2
+ 025150 SATELLITE INTENSITY ANALYSIS METHOD OF TROPICAL CYCLONE          CODE TABLE 25150           0            0   4 CODE TABLE 25150          2         2
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0         4
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0         9
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0         4
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2        10
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16 DEGREE TRUE               0         5
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2        10
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0         1
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0         1
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0         2
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0         5
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0         2
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0         6
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0         1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0         2
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0         1
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0         1
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0         1
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0        10
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0         1
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0         3
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0         2
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0         1
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0         1
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0         1
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0         1
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0         2
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0         1
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0         2
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0         1
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0         8
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0         8
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0         8
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0         8
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0         2
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0         3
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0         7
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0         4
+ 033039 QUALITY FLAGS FOR RADIO OCCULTATION DATA                         FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0         6
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0         3
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0         1
+ 033042 TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE                     CODE TABLE 33042           0            0   3 CODE TABLE 33042          0         1
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0         3
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0         5
+ 033045 PROBABILITY OF FOLLOWING EVENT                                   %                          0            0   7 %                         0         3
+ 033046 CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECI %                          0            0   7 %                         0         3
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0        11
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 33048           0            0   2 CODE TABLE 33048          0         1
+ 033049 CONFIDENCE MEASURE OF WIND RETRIEVAL                             CODE TABLE 33049           0            0   2 CODE TABLE 33049          0         1
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0         2
+ 033052 S BAND OCEAN RETRACKING QUALITY                                  FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0         7
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0         7
+ 033060 GQISFLAGQUAL-INDIVIDUAL IASI-SYSTEM QUALITY FLAG                 CODE TABLE 33060           0            0   2 CODE TABLE 33060          0         1
+ 033061 GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE       %                          0            0   7 %                         0         3
+ 033062 GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX         %                          0            0   7 %                         0         3
+ 033063 GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE    %                          0            0   7 %                         0         3
+ 033064 GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE  %                          0            0   7 %                         0         3
+ 033065 GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC QUALITY FUNCTION       NUMERIC                    0            0  24 NUMERIC                   0        24
+ 033066 SBUV TOTAL OZONE QUALITY                                         CODE TABLE 33066           0            0   4 CODE TABLE 33066          0         2
+ 033067 SBUV PROFILE OZONE QUALITY                                       CODE TABLE 33067           0            0   4 CODE TABLE 33067          0         2
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0         3
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0         1
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0         4
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0         1
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0         2
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0         1
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0         2
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0         1
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0         2
+ 040001 SURFACE SOIL MOISTURE (MS)                                       %                          1            0  10 %                         1         4
+ 040002 ESTIMATED ERROR IN SURFACE SOIL MOISTURE                         %                          1            0  10 %                         1         4
+ 040003 MEAN SURFACE SOIL MOISTURE                                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040004 RAIN FALL DETECTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040005 SOIL MOISTURE CORRECTION FLAG                                    FLAG TABLE 40005           0            0   8 FLAG FLAG TABLE 40005     0         3
+ 040006 SOIL MOISTURE PROCESSING FLAG                                    FLAG TABLE 40006           0            0  16 FLAG FLAG TABLE 40006     0         5
+ 040007 SOIL MOISTURE QUALITY                                            %                          1            0  10 %                         1         4
+ 040008 FROZEN LAND SURFACE FRACTION                                     %                          1            0  10 %                         1         4
+ 040009 INUNDATION AND WETLAND FRACTION                                  %                          1            0  10 %                         1         4
+ 040010 TOPOGRAPHIC COMPLEXITY                                           %                          1            0  10 %                         1         4
diff --git a/crextables/B000103 b/crextables/B000103
new file mode 100755
index 0000000..176d728
--- /dev/null
+++ b/crextables/B000103
@@ -0,0 +1,1197 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000004 BUFR/CREX MASTER TABLE                                           CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000006 BUFR MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2 
+ 000007 CREX MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000008 BUFR LOCAL TABLE VERSION NUMBER                                  CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0        24
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0         2
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0         1
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0         4
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0         3
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2         4
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0         2
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0        28
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0         3
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0         5
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0         3
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0         3
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0         3
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0         5
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0         7
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5        10
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0         6
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001087 WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER                NUMERIC                    0            0  23 NUMERIC                   0         7
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0         3
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0         4
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0         3
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001096 STATION ACQUISITION                                              CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0         1
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0         2
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0         2
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0         2
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2         3
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0         3
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0         2
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0         2
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0         3
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0         2
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0         2
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0         4
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0         3
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0         3
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0         3
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0         2
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0         2
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0         9
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0         6
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0         6
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0         1
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0         2
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0         1
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0         1
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0         2
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0         3
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0         1
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0         1
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0         2
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0         1
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0         2
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0         2
+ 002042 INDICATOR FOR SEA SURFACE CURRENT SPEED                          CODE TABLE 2042            0            0   2 CODE TABLE 2042           0         1
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0         2
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0         2
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0         2
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0         2
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0         3
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0         7
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0         2
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0         2
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0         2
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0         2
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0         2
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0         2
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0         2
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0         2
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0         2
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0         2
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0         1
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0         2
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2         5
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0         1
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0         2
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5         5
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0         2
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0         2
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0         2
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3         4
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0         2
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0         2
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3         4
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1         4
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4         3
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0         2
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0         2
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0         2
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1         4
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0         2
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0         3
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0         1
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0         2
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0         2
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1         2
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0         2
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0         2
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1         4
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1         4
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0         2
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0         5
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0         2
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7 %                         0         3
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 2119            0            0   3 CODE TABLE 2119           0         1
+ 002120 OCEAN WAVE FREQUENCY                                             Hz                         3            0  10 Hz                        3         4
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8         3
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6         3
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4         3
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1         3
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1         3
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7         2
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6         3
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5         2
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0         3
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0         3
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0         1
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2         2
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2         2
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2         5
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2         5
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3         5
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0         3
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0         3
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0         2
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0         2
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0         2
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0         2
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0         2
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0         2
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0         4
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0        10
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8         8
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8         8
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7 %                         0         3
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7 %                         0         3
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0         3
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0         3
+ 002160 WAVE LENGTH OF THE RADAR                                         CODE TABLE 2160            0            0   4 CODE TABLE 2160           0         2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0         2
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0         1
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0         2
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0         2
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0         5
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0         2
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0         3
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4         4
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9 NUMERIC                   0         3
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0         2
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0         2
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0         2
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0         2
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0         2
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0         2
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0         7
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0         2
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0         2
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0         2
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0   4 CODE TABLE 2185           0         2
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0        10
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0         6
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0         7
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189            0            0  12 FLAG TABLE 2189           0         4
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7 %                         0         3
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0         4
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0         2
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0         2
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0         2
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0         2
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0         2
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6         8
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0         4
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0         4
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0         4
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0         4
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0         4
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0         4
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0         4
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0         4
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0         4
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0         4
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0         3
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0         2
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0         3
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0         2
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0         2
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0         2
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0         2
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0         2
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0         2
+ 004080 AVERAGING PERIOD FOR FOLLOWING VALUE                             CODE TABLE 4080            0            0   4 CODE TABLE 4080           0         2
+ 004086 LONG TIME PERIOD OR DISPLACEMENT                                 SECOND                     0        -8192  15 SECOND                    0         5
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005015 LATITUDE DISPLACEMENT (HIGH ACCURACY)                            DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005016 LATITUDE DISPLACEMENT (COARSE ACCURACY)                          DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005023 SUN TO SATELLITE AZIMUTH DIFFERENCE                              DEGREE                     1        -1800  12 DEGREE                    1         4
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0         4
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0         4
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1         5
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0         2
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0         8
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0         2^M
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005060 Y ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005061 Z ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10 NUMERIC                   0         4 
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11 NUMERIC                   0         4  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31 M                         2        10 
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16 DEGREE                    2         5 
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006015 LONGITUDE DISPLACEMENT (HIGH ACCURACY)                           DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006016 LONGITUDE DISPLACEMENT (COARSE ACCURACY)                         DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1         4
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5         4
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0         4
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1         5
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0         3
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0         4
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6 NUMERIC                   0         2 
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31 M                         2        10 
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13 ADS/M                     5         4
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0         5
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1         5
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0         4
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0         5
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1         5
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007026 SATELLITE ZENITH ANGLE                                           DEGREE                     4      -900000  21 DEGREE                    4         7
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1       - 4000  17 M                         1         5
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1       - 4000  17 M                         1         5
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2         5
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1         4
+ 007040 IMPACT PARAMETER (SEE NOTE 8)                                    M                          1     62000000  22 M                         1         8
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2         5
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1         6
+ 007063 DEPTH BELOW SEA/WATER SURFACE                                    M                          2            0  20 M                         2         7
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0         2
+ 007065 WATER PRESSURE                                                   PA                        -3            0  17 PA                        0         6
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0         4
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31 M                         2        10 
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0         3
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0         2
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0         2
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0         1
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0         2
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0         3
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0         2
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0         3
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0         2
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0         2
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0         2
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0         1
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0         1
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0         2
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0         1
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0         1
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0         6
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0         2
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0         2
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0         2
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0         2
+ 008029 REMOTLY SENSED SURFACE TYPE                                      CODE TABLE 8029            0            0   8 CODE TABLE 8029           0         3
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0         4
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0         3
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0         1
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0         1
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0         2
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0         2
+ 008042 EXTENDED VERTICAL SOUNDING SIGNIFICANCE                          FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0         6
+ 008049 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0         2
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0         1
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0         2
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0         1
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0         2
+ 008065 SUN-GLINT INDICATOR                                              CODE TABLE 8065            0            0   2 CODE TABLE 8065           0         1
+ 008066 SEMI-TRANSPARENCY INDICATOR                                      CODE TABLE 8066            0            0   2 CODE TABLE 8066           0         1
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0         2
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0         1
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0         1
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0         1
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0         2
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE 8081            0            0   6 CODE TABLE 8081           0         2
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0         1
+ 008083 NOMINAL VALUE INDICATOR                                          FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0         5
+ 008085 BEAM IDENTIFIER                                                  CODE TABLE 8085            0            0   3 CODE TABLE 8085           0         1
+ 008193 TIME QUALIFIER                                                   CODE TABLE 8193            0            0   6 CODE TABLE 8193           0         2 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8194            0            0   4 CODE TABLE 8194           0         2 
+ 008195 DATA TYPE                                                        CODE TABLE 8195            0            0   7 CODE TABLE 8195           0         3 
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3 
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 8222            0            0   4 CODE TABLE 8222           0         2 
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE 8223            0            0   7 FLAG TABLE 8223           0         3 
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10 NUMERIC                   3         4 
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0         5
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1         5
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2        10
+ 010032 SATELLITE DISTANCE TO EARTH'S CENTRE                             M                          1            0  27 M                         2         9
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27 M                         2         9
+ 010034 EARTH RADIUS                                                     M                          1            0  27 M                         2         9
+ 010035 EARTH'S LOCAL RADIUS OF CURVATURE                                M                          1     62000000  22 M                         1         8
+ 010036 GEOID UNDULATION (SEE NOTE 4)                                    M                          2       -15000  15 M                         2         6
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0         4
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2         5
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1         5
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1         5
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1         4
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1         4
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1         4
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0         2
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0         5
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15 DEGREE                    2         5
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31 M                         3        10
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      MS-1                       3       -65536  17 MS-1                      3         6
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18 M                         3         6
+ 010086 GEOID'S HEIGHT                                                   M                          3      -131072  18 M                         3         6
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18 M                         3         6
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16 M                         3         5
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16 M                         3         5
+ 010090 LONG PERIOD  TIDE HEIGHT                                         M                          3       -32768  16 M                         3         5
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16 M                         3         5
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16 M                         3         5
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16 M                         3         5
+ 010095 HEIGHT OF ATMOSPHERE USED                                        M                          0            0  16 M                         0         5
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1         4
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1         4
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2         4
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1         4
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1         4
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0         3
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9         6
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9         6
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2         6
+ 011030 EXTENDED DEGREE OF TURBULENCE                                    CODE TABLE 11030           0            0   6 CODE TABLE                0         2
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0         2
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1         5
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1         5
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1         4
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2         5
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1         4
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0         2
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0         2
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0         2
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1         4
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1         4
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1         4
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1         4
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1         4
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1         4
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1         4
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1         3
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2         5
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2         5
+ 011054 MEAN WIND DIRECTION FOR 1500 M - 3000 M                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011055 MEAN WIND SPEED FOR 1500 M - 3000 M                              M/S                        1            0  12 M/S                       1         4
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1         4
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1         4
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3         5
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3         4
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2         4
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2         4
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0         4
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2         4
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13 M/S                       1         4^M 
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13 M/S                       1         4^M 
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1         3
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1         3
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1         3
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1         3
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1         3
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012049 TEMPERATURE CHANGE OVER SPECIFIED PERIOD                         K                          0          -30   6 C                         0         2
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1         3
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1         3
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1         3
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1         3
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1         3
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1         4
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1         4
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2         5
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1         4
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6         9
+ 012073 TEMPERATURE                                                      K                          2            0  16 K                         2         5
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3         5
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3         5
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2         4
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2         4
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2         4
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2         4
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2         4
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2         4
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2         4
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2         4
+ 012121 GROUND MINIMUM TEMPERATURE                                       K                          2            0  16 C                         2         4
+ 012122 GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT                K                          2            0  16 C                         2         4
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2         4
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2         4
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2         4
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2         4
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2         4
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2         5
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2         5
+ 012180 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012181 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012182 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR             K                          2            0  16 K                         2         5
+ 012183 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012184 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012185 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16 K                         2         5
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16 K                         2         5
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16 K                         2         5
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5         5
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5         5
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0         3
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1         4
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3         3
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1         5
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1         4
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2         4
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2         5
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4         4
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7         4
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1         4
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1         3
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0         1
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0         1
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0         2
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0         2
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0         2
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0         2
+ 013044 K INDEX                                                          K                          0          -30   8 K                         0         3
+ 013045 KO INDEX                                                         K                          0          -30   8 K                         0         3
+ 013046 MAXIMUM BUOYANCY                                                 K                          0          -30   8 K                         0         3
+ 013047 MODIFIED SHOWALTER STABILITY INDEX                               K                          0          -60   6 C                         0         2
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0         2
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1         3
+ 013056 CHARACTER AND INTENSITY OF PRECIPITATION                         CODE TABLE 13056           0            0   4 CODE TABLE 13056          0         2
+ 013057 TIME OF BEGINNING OR END OF PRECIPITATION                        CODE TABLE 13057           0            0   4 CODE TABLE 13057          0         2
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1         3
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0         3
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1         5
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2         5
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2         4
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2         4
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1         3
+ 013081 WATER CONDUCTIVITY                                               S M-1                      3            0  14 S M-1                     3         4
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1         4
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6         5
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0         4
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3         4
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8 KG/M**2                   2         3
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8 NUMERIC                   0         3
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19 KG/M**2                   4         6
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30 KG/M**2                   8        10   
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0         3
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0         3
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0         3
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0         4
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0         3
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0         3
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11 WM-2SR-1CM-1              0         4
+ 014046 SCALED IASI RADIANCE                                             (W/M**2)*(1/SR)*(1/M)      0        -5000  16 (W/M**2)*(1/SR)*(1/M)     0         5 
+ 014047 SCALED MEAN AVHRR RADIANCE                                       (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014048 SCALED STANDARD DEVIATION RADIANCE                               (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1         4
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3         4
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16 NUMERIC                   0         5
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0         4
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0         4
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0         4
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2         3
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0         3
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3         4
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0         3
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3         4
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0        10
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8         7
+ 015025 TYPE OF POLLUTANT                                                CODE TABLE 15025           0            0   4 CODE TABLE 15025          0         2
+ 015026 CONCENTRATION OF POLLUTANT                                       MOLMOL-1                   9            0   9 MOLMOL-1                  9         3
+ 015027 CONCENTRATION OF POLLUTANT                                       KG/M3                      9            0  10 KG/M3                     9         4
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4         5
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4         4
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5         5
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5         5
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4         5
+ 015036 ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                            N-UNITS                    3            0  19 N-UNITS                   3         6
+ 015037 BENDING ANGLE                                                    RADIANS                    8      -100000  23 RADIANS                   8         7
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0         2
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2         4
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0         3
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2         4
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2         5
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3         4
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0         1
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3         4
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0         2
+ 019100 TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE  CODE TABLE 19100           0            0   4 CODE TABLE 19100          0         2
+ 019101 ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE   CODE TABLE 19101           0            0   4 CODE TABLE 19101          0         2
+ 019102 SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE          CODE TABLE 19102           0            0   3 CODE TABLE 19102          0         1
+ 019103 DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE        CODE TABLE 19103           0            0   4 CODE TABLE 19103          0         2
+ 019104 CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES             CODE TABLE 19104           0            0   4 CODE TABLE 19104          0         2
+ 019105 DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE           CODE TABLE 19105           0            0   4 CODE TABLE 19105          0         2
+ 019106 IDENTIFICATION NUMBER OF TROPICAL CYCLONE                        NUMERIC                    0            0   7 NUMERIC                   0         3
+ 019107 TIME INTERVAL OF THE TROPICAL CYCLONE ANALYSIS                   CODE TABLE 19107           0            0   4 CODE TABLE 19107          0         2
+ 019108 ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE        CODE TABLE 19108           0            0   3 CODE TABLE 19108          0         1
+ 019109 MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE      CODE TABLE 19109           0            0   4 CODE TABLE 19109          0         2
+ 019110 APPARENT 24-HOUR CHANGE IN INTENSITY OF TROPICAL CYCLONE         CODE TABLE 19110           0            0   4 CODE TABLE 19110          0         2
+ 019111 CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE            NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019112 DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019113 CLOUD PATTERN TYPE OF THE DT- NUMBER                             CODE TABLE 19113           0            0   4 CODE TABLE 19113          0         2
+ 019114 MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE     NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019115 TREND OF PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)         NUMERIC                    1          -30   6 NUMERIC                   1         2
+ 019116 PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE             NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019117 CLOUD PICTURE TYPE OF THE PT- NUMBER                             CODE TABLE 19117           0            0   3 CODE TABLE 19117          0         1
+ 019118 FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019119 TYPE OF THE FINAL T-NUMBER                                       CODE TABLE 19119           0            0   3 CODE TABLE 19119          0         1
+ 019150 TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1         4
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1         3
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0         3
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0         2
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0         2
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0         2
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0         2
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0         3
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0         2
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0         2
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1         4
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1         4
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1         5
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1         5
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0         2
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0         1
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0        10
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0         2
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0         6
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0         1
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0         7
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0         2
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0         3
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0         1
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2         3
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0         1
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0         2
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0         2
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0         2
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0         2
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0         2
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0         3
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1         4
+ 020040 EVOLUTION OF DRIFT OF SNOW                                       CODE TABLE 20040           0            0   4 CODE TABLE 20040          0         2
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0         2
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0         1
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0         2
+ 020050 CLOUD INDEX                                                      CODE TABLE 20050           0            0   8 CODE TABLE 20050          0         3
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0         3
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0         3
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0         3
+ 020054 TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 020055 STATE OF SKY IN TROPICS                                          CODE TABLE 20055           0            0   4 CODE TABLE 20055          0         2
+ 020056 CLOUD PHASE                                                      CODE TABLE 20056           0            0   3 CODE TABLE 20056          0         1
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0         4
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0         2
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0         4
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0         3
+ 020066 MAXIMUM DIAMETER OF HAILSTONES                                   M                          3            0   8 M                         3         3
+ 020067 DIAMETER OF DEPOSIT                                              M                          3            0   9 M                         3         3
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0         2
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0         3
+ 020083 AMOUNT OF SEGMENT COVERED BY SCENE                               %                          0            0   7 %                         0         3
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0         2
+ 020095 ICE PROBABILITY                                                  NUMERIC                    3            0  10 NUMERIC                   3         4
+ 020096 ICE AGE ("A" PARAMETER)                                          dB                         2        -4096  13 dB                        2         4
+ 020101 LOCUST (ACRIDIAN) NAME                                           CODE TABLE 20101           0            0   4 CODE TABLE 20101          0         2
+ 020102 LOCUST (MATURITY) COLOR                                          CODE TABLE 20102           0            0   4 CODE TABLE 20102          0         2
+ 020103 STAGE OF DEVELOPMENT OF LOCUSTS                                  CODE TABLE 20103           0            0   4 CODE TABLE 20103          0         2
+ 020104 ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS                   CODE TABLE 20104           0            0   4 CODE TABLE 20104          0         2
+ 020105 SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARMCODE TABLE 20105           0            0   4 CODE TABLE 20105          0         2
+ 020106 LOCUST POPULATION DENSITY                                        CODE TABLE 20106           0            0   4 CODE TABLE 20106          0         2
+ 020107 DIRECTION OF MOVEMENTS OF LOCUST SWARM                           CODE TABLE 20107           0            0   4 CODE TABLE 20107          0         2
+ 020108 EXTENT OF VEGETATION                                             CODE TABLE 20108           0            0   4 CODE TABLE 20108          0         2
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3 
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7 %                         0         3 
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14 PA                       -1         5 
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0         3
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0         3
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1         3
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0         2
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0         2
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1         4
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1         3
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3         2
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0         3
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0         3
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7         4
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2         3
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0         3
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2         4
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1         4
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0         3
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0         4
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0         5
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0         3
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0         4
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0         6
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0         2
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0         3
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0         1
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3         5
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3         3
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3         4
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3         4
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3         4
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3         5
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0         2
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021088 WET BACKSCATTER                                                  dB                         2        -5000  13 dB                        2         4
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0         3
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0         3
+ 021093 Ku BAND PEAKINESS                                                NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021094 S BAND PEAKINESS                                                 NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0         2
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3         5
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2         5
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3         5
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8         5
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0         6
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3         6
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0         6
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0         6
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2         5
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2         5
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0         2
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2         5
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2         5
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREE                     3            0  19 DEGREE                    3         6
+ 021133 WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID            M                          3            0  29 M                         3         9
+ 021134 RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM                    RAD/M                      3            0  19 RAD/M                     3         6
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  dB                         2       -32768  16 dB                        2         5
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              dB                         2       -32768  16 dB                        2         5
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR AGC                      dB                         2        -2048  12 dB                        2         4
+ 021140 S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                   dB                         2       -32768  16 dB                        2         5
+ 021141 STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT               dB                         2       -32768  16 dB                        2         5
+ 021142 S BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -1024  11 dB                        2         4
+ 021143 KU BAND RAIN ATTENUATION                                         dB                         2  -1073741824  31 dB                        2        10
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0         1
+ 021150 BEAM COLLOCATION                                                 CODE TABLE 21150           0            0   2 CODE TABLE 21150          0         1
+ 021151 ESTIMATED ERROR IN SIGMA0 AT 40DEG INCIDENCE ANGLE               dB                         2            0   9 dB                        2         3
+ 021152 SLOPE AT 40DEG INCIDENCE ANGLE                                   dB/DEG                     2          -80   7 dB/DEG                    2         3
+ 021153 ESTIMATED ERROR IN SLOPE AT 40DEG INCIDENCE ANGLE                dB/DEG                     2          -40   6 dB/DEG                    2         3
+ 021154 SOIL MOISTURE SENSITIVITY                                        dB                         2            0  12 dB                        2         4
+ 021155 WIND VECTOR CELL QUALITY                                         FLAG TABLE 21155           0            0  24 FLAG TABLE 21155          0         8
+ 021156 BACKSCATTER DISTANCE                                             NUMERIC                    1        -4096  13 NUMERIC                   1         4
+ 021157 LOSS PER UNIT LENGTH OF ATMOSPHERE USED                          dB/M                      10            0  22 dB/M                     10         7
+ 021158 ASCAT kp ESTIMATE QUALITY                                        CODE TABLE 21158           0            0   2 CODE TABLE 21158          0         1
+ 021159 ASCAT SIGMA-0 USABILITY                                          CODE TABLE 21159           0            0   2 CODE TABLE 21159          0         1
+ 021160 ASCAT USE OF SYNTHETIC DATA                                      NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021161 ASCAT SYNTHETIC DATA QUALITY                                     NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021162 ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021163 ASCAT SOLAR ARRAY REFLECTION CONTAMINATION                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021164 ASCAT TELEMETRY PRESENCE AND QUALITY                             NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021165 ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE                   NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021166 ASCAT LAND FRACTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022005 DIRECTION OF SEA SURFACE CURRENT                                 DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0         2
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0         2
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0         2
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1         4
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1         4
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1         4
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2         4
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2         4
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2         4
+ 022032 SPEED OF SEA SURFACE CURRENT                                     M/S                        2            0  13 M/S                       2         4
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2         4
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2         4
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3         5
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3         5
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3         4
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3         5
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1         4
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1         4
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2         5
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1         5
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3         6
+ 022049 SEA SURFACE TEMPERATURE                                          K                          2            0  15 K                         2         5
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2         3
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0         1
+ 022059 SEA SURFACE SALINITY                                             PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 22060           0            0   3 CODE TABLE 22060          0         1
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0         2
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0         5
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3         6
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3         6
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6         8
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0         4
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0         3
+ 022069 SPECTRAL WAVE DENSITY                                            M2HZ-1                     3            0  22 M2HZ-1                    3         7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2         4
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1         3
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0         4
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2         4
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1         3
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0         4
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0         3
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0         4
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0         5
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3         4
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5         4
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2         7
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2         7
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2         7
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2         7
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2         7
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2         7
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0         3
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3         2
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0         5
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0         5
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0         3
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0        10
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0         2
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0         2
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0         2
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0         2
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2         5
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31 M                         3        10
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16 M                         3         5
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S BAND                          NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31 M                         3        10
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16 M                         3         5
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16 M                         3         5
+ 022157 STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16 M                         3         5
+ 022158 S BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16 M                         3         5
+ 022159 STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16 M                         3         5
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21 NUMERIC                   6         7
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27 M**4                      4         9
+ 023001 ACCIDENT EARLY NOTIFICATION   ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0         1
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0         2
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0         1
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0         1
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0         1
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0         1
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0         1
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0         1
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0         1
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0         1
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6         7
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0         1
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0         6
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0         6
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0         8
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1         4
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2         4
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2         4
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0         1
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0         1
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                      -11         9
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                      -11         9
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0         2
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0         3
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2        10
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2        10
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2        10
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2        10
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2        10
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1         4
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1         4
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1         2
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0         1
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0         1
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0         1
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2         3
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0         2
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0         2
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0         1
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0         1
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0         1
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0         1
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5         2
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0         1
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7         2
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2         3
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0         1
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0         3
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1         3
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12 V                         1         4
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15 NUMERIC                   1         5
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0         1
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0         1
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0         1
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0         2
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0         2
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0         2
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0         1
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0         1
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4         5
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2         5
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0         7
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0         2
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0         2
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0         6
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0         2
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0         3
+ 025052 LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA            NUMERIC                    4            0  15 NUMERIC                   4         5
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0         4
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2         5
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 025062 DATABASE IDENTIFICATION                                          NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0         4
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0         3
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8        10
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5         7
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5         6
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4         8
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10         5
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0         1
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3         5
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2         5
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0         3
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0         1
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0         2
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0         2
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5         6
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5         6
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025104 NUMBER OF WAVE-LENGTH BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025107 FIRST WAVE-LENGTH BIN                                            M                          3            0  29 M                         3         9
+ 025108 LAST WAVE-LENGTH BIN                                             M                          3            0  29 M                         3         9
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025120 RA2-L2-PROCESSING FLAG                                           CODE TABLE 25120           0            0   2 CODE TABLE 25120          0         1
+ 025121 RA2-L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 25122           0            0   2 CODE TABLE 25122          0         1
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 25123           0            0   2 CODE TABLE 25123          0         1
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 25124           0            0   2 CODE TABLE 25124          0         1
+ 025125 MWR L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025127 INVERTED BAROMETER CORRECTION                                    M                          3       -32768  16 M                         3         5
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3         5
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16 M                         3         5
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16 M                         3         5
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16 M                         3         5
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025137 SEA STATE BIAS CORRECTION ON S BAND                              M                          3       -32768  16 M                         3         5
+ 025138 AVERAGE SIGNAL TO NOISE RATION                                   NUMERIC                    0        -2048  12 NUMERIC                   0         4
+ 025140 START CHANNEL                                                    NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025141 END CHANNEL                                                      NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025142 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6 NUMERIC                   0         2
+ 025150 SATELLITE INTENSITY ANALYSIS METHOD OF TROPICAL CYCLONE          CODE TABLE 25150           0            0   4 CODE TABLE 25150          2         2
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0         4
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0         9
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0         4
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2        10
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16 DEGREE TRUE               0         5
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2        10
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0         1
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0         1
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0         2
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0         5
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0         2
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0         6
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0         1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0         2
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0         1
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0         1
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0         1
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0        10
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0         1
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0         3
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0         2
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0         1
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0         1
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0         1
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0         1
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0         2
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0         1
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0         2
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0         1
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0         8
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0         8
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0         8
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0         8
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0         2
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0         3
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0         7
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0         4
+ 033039 QUALITY FLAGS FOR RADIO OCCULTATION DATA                         FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0         6
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0         3
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0         1
+ 033042 TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE                     CODE TABLE 33042           0            0   3 CODE TABLE 33042          0         1
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0         3
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0         5
+ 033045 PROBABILITY OF FOLLOWING EVENT                                   %                          0            0   7 %                         0         3
+ 033046 CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECI %                          0            0   7 %                         0         3
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0        11
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 33048           0            0   2 CODE TABLE 33048          0         1
+ 033049 CONFIDENCE MEASURE OF WIND RETRIEVAL                             CODE TABLE 33049           0            0   2 CODE TABLE 33049          0         1
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0         2
+ 033052 S BAND OCEAN RETRACKING QUALITY                                  FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0         7
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0         7
+ 033060 GQISFLAGQUAL-INDIVIDUAL IASI-SYSTEM QUALITY FLAG                 CODE TABLE 33060           0            0   2 CODE TABLE 33060          0         1
+ 033061 GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE       %                          0            0   7 %                         0         3
+ 033062 GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX         %                          0            0   7 %                         0         3
+ 033063 GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE    %                          0            0   7 %                         0         3
+ 033064 GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE  %                          0            0   7 %                         0         3
+ 033065 GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC QUALITY FUNCTION       NUMERIC                    0            0  24 NUMERIC                   0        24
+ 033066 SBUV TOTAL OZONE QUALITY                                         CODE TABLE 33066           0            0   4 CODE TABLE 33066          0         2
+ 033067 SBUV PROFILE OZONE QUALITY                                       CODE TABLE 33067           0            0   4 CODE TABLE 33067          0         2
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0         3
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0         1
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0         4
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0         1
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0         2
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0         1
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0         2
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0         1
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0         2
+ 040001 SURFACE SOIL MOISTURE (MS)                                       %                          1            0  10 %                         1         4
+ 040002 ESTIMATED ERROR IN SURFACE SOIL MOISTURE                         %                          1            0  10 %                         1         4
+ 040003 MEAN SURFACE SOIL MOISTURE                                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040004 RAIN FALL DETECTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040005 SOIL MOISTURE CORRECTION FLAG                                    FLAG TABLE 40005           0            0   8 FLAG FLAG TABLE 40005     0         3
+ 040006 SOIL MOISTURE PROCESSING FLAG                                    FLAG TABLE 40006           0            0  16 FLAG FLAG TABLE 40006     0         5
+ 040007 SOIL MOISTURE QUALITY                                            %                          1            0  10 %                         1         4
+ 040008 FROZEN LAND SURFACE FRACTION                                     %                          1            0  10 %                         1         4
+ 040009 INUNDATION AND WETLAND FRACTION                                  %                          1            0  10 %                         1         4
+ 040010 TOPOGRAPHIC COMPLEXITY                                           %                          1            0  10 %                         1         4
diff --git a/crextables/B000203 b/crextables/B000203
new file mode 100755
index 0000000..176d728
--- /dev/null
+++ b/crextables/B000203
@@ -0,0 +1,1197 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000004 BUFR/CREX MASTER TABLE                                           CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000006 BUFR MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2 
+ 000007 CREX MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000008 BUFR LOCAL TABLE VERSION NUMBER                                  CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0        24
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0         2
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0         1
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0         4
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0         3
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2         4
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0         2
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0        28
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0         3
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0         5
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0         3
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0         3
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0         3
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0         5
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0         7
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5        10
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0         6
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001087 WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER                NUMERIC                    0            0  23 NUMERIC                   0         7
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0         3
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0         4
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0         3
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001096 STATION ACQUISITION                                              CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0         1
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0         2
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0         2
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0         2
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2         3
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0         3
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0         2
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0         2
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0         3
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0         2
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0         2
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0         4
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0         3
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0         3
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0         3
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0         2
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0         2
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0         9
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0         6
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0         6
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0         1
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0         2
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0         1
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0         1
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0         2
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0         3
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0         1
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0         1
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0         2
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0         1
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0         2
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0         2
+ 002042 INDICATOR FOR SEA SURFACE CURRENT SPEED                          CODE TABLE 2042            0            0   2 CODE TABLE 2042           0         1
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0         2
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0         2
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0         2
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0         2
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0         3
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0         7
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0         2
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0         2
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0         2
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0         2
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0         2
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0         2
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0         2
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0         2
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0         2
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0         2
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0         1
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0         2
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2         5
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0         1
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0         2
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5         5
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0         2
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0         2
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0         2
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3         4
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0         2
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0         2
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3         4
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1         4
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4         3
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0         2
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0         2
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0         2
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1         4
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0         2
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0         3
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0         1
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0         2
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0         2
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1         2
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0         2
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0         2
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1         4
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1         4
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0         2
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0         5
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0         2
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7 %                         0         3
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 2119            0            0   3 CODE TABLE 2119           0         1
+ 002120 OCEAN WAVE FREQUENCY                                             Hz                         3            0  10 Hz                        3         4
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8         3
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6         3
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4         3
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1         3
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1         3
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7         2
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6         3
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5         2
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0         3
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0         3
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0         1
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2         2
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2         2
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2         5
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2         5
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3         5
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0         3
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0         3
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0         2
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0         2
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0         2
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0         2
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0         2
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0         2
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0         4
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0        10
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8         8
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8         8
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7 %                         0         3
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7 %                         0         3
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0         3
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0         3
+ 002160 WAVE LENGTH OF THE RADAR                                         CODE TABLE 2160            0            0   4 CODE TABLE 2160           0         2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0         2
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0         1
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0         2
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0         2
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0         5
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0         2
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0         3
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4         4
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9 NUMERIC                   0         3
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0         2
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0         2
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0         2
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0         2
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0         2
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0         2
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0         7
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0         2
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0         2
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0         2
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0   4 CODE TABLE 2185           0         2
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0        10
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0         6
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0         7
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189            0            0  12 FLAG TABLE 2189           0         4
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7 %                         0         3
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0         4
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0         2
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0         2
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0         2
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0         2
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0         2
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6         8
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0         4
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0         4
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0         4
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0         4
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0         4
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0         4
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0         4
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0         4
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0         4
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0         4
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0         3
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0         2
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0         3
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0         2
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0         2
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0         2
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0         2
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0         2
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0         2
+ 004080 AVERAGING PERIOD FOR FOLLOWING VALUE                             CODE TABLE 4080            0            0   4 CODE TABLE 4080           0         2
+ 004086 LONG TIME PERIOD OR DISPLACEMENT                                 SECOND                     0        -8192  15 SECOND                    0         5
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005015 LATITUDE DISPLACEMENT (HIGH ACCURACY)                            DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005016 LATITUDE DISPLACEMENT (COARSE ACCURACY)                          DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005023 SUN TO SATELLITE AZIMUTH DIFFERENCE                              DEGREE                     1        -1800  12 DEGREE                    1         4
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0         4
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0         4
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1         5
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0         2
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0         8
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0         2^M
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005060 Y ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005061 Z ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10 NUMERIC                   0         4 
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11 NUMERIC                   0         4  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31 M                         2        10 
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16 DEGREE                    2         5 
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006015 LONGITUDE DISPLACEMENT (HIGH ACCURACY)                           DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006016 LONGITUDE DISPLACEMENT (COARSE ACCURACY)                         DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1         4
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5         4
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0         4
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1         5
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0         3
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0         4
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6 NUMERIC                   0         2 
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31 M                         2        10 
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13 ADS/M                     5         4
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0         5
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1         5
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0         4
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0         5
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1         5
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007026 SATELLITE ZENITH ANGLE                                           DEGREE                     4      -900000  21 DEGREE                    4         7
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1       - 4000  17 M                         1         5
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1       - 4000  17 M                         1         5
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2         5
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1         4
+ 007040 IMPACT PARAMETER (SEE NOTE 8)                                    M                          1     62000000  22 M                         1         8
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2         5
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1         6
+ 007063 DEPTH BELOW SEA/WATER SURFACE                                    M                          2            0  20 M                         2         7
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0         2
+ 007065 WATER PRESSURE                                                   PA                        -3            0  17 PA                        0         6
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0         4
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31 M                         2        10 
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0         3
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0         2
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0         2
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0         1
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0         2
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0         3
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0         2
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0         3
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0         2
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0         2
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0         2
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0         1
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0         1
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0         2
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0         1
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0         1
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0         6
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0         2
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0         2
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0         2
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0         2
+ 008029 REMOTLY SENSED SURFACE TYPE                                      CODE TABLE 8029            0            0   8 CODE TABLE 8029           0         3
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0         4
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0         3
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0         1
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0         1
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0         2
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0         2
+ 008042 EXTENDED VERTICAL SOUNDING SIGNIFICANCE                          FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0         6
+ 008049 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0         2
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0         1
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0         2
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0         1
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0         2
+ 008065 SUN-GLINT INDICATOR                                              CODE TABLE 8065            0            0   2 CODE TABLE 8065           0         1
+ 008066 SEMI-TRANSPARENCY INDICATOR                                      CODE TABLE 8066            0            0   2 CODE TABLE 8066           0         1
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0         2
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0         1
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0         1
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0         1
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0         2
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE 8081            0            0   6 CODE TABLE 8081           0         2
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0         1
+ 008083 NOMINAL VALUE INDICATOR                                          FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0         5
+ 008085 BEAM IDENTIFIER                                                  CODE TABLE 8085            0            0   3 CODE TABLE 8085           0         1
+ 008193 TIME QUALIFIER                                                   CODE TABLE 8193            0            0   6 CODE TABLE 8193           0         2 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8194            0            0   4 CODE TABLE 8194           0         2 
+ 008195 DATA TYPE                                                        CODE TABLE 8195            0            0   7 CODE TABLE 8195           0         3 
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3 
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 8222            0            0   4 CODE TABLE 8222           0         2 
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE 8223            0            0   7 FLAG TABLE 8223           0         3 
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10 NUMERIC                   3         4 
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0         5
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1         5
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2        10
+ 010032 SATELLITE DISTANCE TO EARTH'S CENTRE                             M                          1            0  27 M                         2         9
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27 M                         2         9
+ 010034 EARTH RADIUS                                                     M                          1            0  27 M                         2         9
+ 010035 EARTH'S LOCAL RADIUS OF CURVATURE                                M                          1     62000000  22 M                         1         8
+ 010036 GEOID UNDULATION (SEE NOTE 4)                                    M                          2       -15000  15 M                         2         6
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0         4
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2         5
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1         5
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1         5
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1         4
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1         4
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1         4
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0         2
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0         5
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15 DEGREE                    2         5
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31 M                         3        10
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      MS-1                       3       -65536  17 MS-1                      3         6
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18 M                         3         6
+ 010086 GEOID'S HEIGHT                                                   M                          3      -131072  18 M                         3         6
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18 M                         3         6
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16 M                         3         5
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16 M                         3         5
+ 010090 LONG PERIOD  TIDE HEIGHT                                         M                          3       -32768  16 M                         3         5
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16 M                         3         5
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16 M                         3         5
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16 M                         3         5
+ 010095 HEIGHT OF ATMOSPHERE USED                                        M                          0            0  16 M                         0         5
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1         4
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1         4
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2         4
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1         4
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1         4
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0         3
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9         6
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9         6
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2         6
+ 011030 EXTENDED DEGREE OF TURBULENCE                                    CODE TABLE 11030           0            0   6 CODE TABLE                0         2
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0         2
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1         5
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1         5
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1         4
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2         5
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1         4
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0         2
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0         2
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0         2
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1         4
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1         4
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1         4
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1         4
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1         4
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1         4
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1         4
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1         3
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2         5
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2         5
+ 011054 MEAN WIND DIRECTION FOR 1500 M - 3000 M                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011055 MEAN WIND SPEED FOR 1500 M - 3000 M                              M/S                        1            0  12 M/S                       1         4
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1         4
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1         4
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3         5
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3         4
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2         4
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2         4
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0         4
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2         4
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13 M/S                       1         4^M 
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13 M/S                       1         4^M 
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1         3
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1         3
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1         3
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1         3
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1         3
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012049 TEMPERATURE CHANGE OVER SPECIFIED PERIOD                         K                          0          -30   6 C                         0         2
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1         3
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1         3
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1         3
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1         3
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1         3
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1         4
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1         4
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2         5
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1         4
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6         9
+ 012073 TEMPERATURE                                                      K                          2            0  16 K                         2         5
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3         5
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3         5
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2         4
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2         4
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2         4
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2         4
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2         4
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2         4
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2         4
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2         4
+ 012121 GROUND MINIMUM TEMPERATURE                                       K                          2            0  16 C                         2         4
+ 012122 GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT                K                          2            0  16 C                         2         4
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2         4
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2         4
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2         4
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2         4
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2         4
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2         5
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2         5
+ 012180 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012181 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012182 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR             K                          2            0  16 K                         2         5
+ 012183 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012184 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012185 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16 K                         2         5
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16 K                         2         5
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16 K                         2         5
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5         5
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5         5
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0         3
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1         4
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3         3
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1         5
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1         4
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2         4
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2         5
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4         4
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7         4
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1         4
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1         3
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0         1
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0         1
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0         2
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0         2
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0         2
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0         2
+ 013044 K INDEX                                                          K                          0          -30   8 K                         0         3
+ 013045 KO INDEX                                                         K                          0          -30   8 K                         0         3
+ 013046 MAXIMUM BUOYANCY                                                 K                          0          -30   8 K                         0         3
+ 013047 MODIFIED SHOWALTER STABILITY INDEX                               K                          0          -60   6 C                         0         2
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0         2
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1         3
+ 013056 CHARACTER AND INTENSITY OF PRECIPITATION                         CODE TABLE 13056           0            0   4 CODE TABLE 13056          0         2
+ 013057 TIME OF BEGINNING OR END OF PRECIPITATION                        CODE TABLE 13057           0            0   4 CODE TABLE 13057          0         2
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1         3
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0         3
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1         5
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2         5
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2         4
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2         4
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1         3
+ 013081 WATER CONDUCTIVITY                                               S M-1                      3            0  14 S M-1                     3         4
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1         4
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6         5
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0         4
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3         4
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8 KG/M**2                   2         3
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8 NUMERIC                   0         3
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19 KG/M**2                   4         6
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30 KG/M**2                   8        10   
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0         3
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0         3
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0         3
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0         4
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0         3
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0         3
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11 WM-2SR-1CM-1              0         4
+ 014046 SCALED IASI RADIANCE                                             (W/M**2)*(1/SR)*(1/M)      0        -5000  16 (W/M**2)*(1/SR)*(1/M)     0         5 
+ 014047 SCALED MEAN AVHRR RADIANCE                                       (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014048 SCALED STANDARD DEVIATION RADIANCE                               (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1         4
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3         4
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16 NUMERIC                   0         5
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0         4
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0         4
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0         4
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2         3
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0         3
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3         4
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0         3
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3         4
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0        10
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8         7
+ 015025 TYPE OF POLLUTANT                                                CODE TABLE 15025           0            0   4 CODE TABLE 15025          0         2
+ 015026 CONCENTRATION OF POLLUTANT                                       MOLMOL-1                   9            0   9 MOLMOL-1                  9         3
+ 015027 CONCENTRATION OF POLLUTANT                                       KG/M3                      9            0  10 KG/M3                     9         4
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4         5
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4         4
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5         5
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5         5
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4         5
+ 015036 ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                            N-UNITS                    3            0  19 N-UNITS                   3         6
+ 015037 BENDING ANGLE                                                    RADIANS                    8      -100000  23 RADIANS                   8         7
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0         2
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2         4
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0         3
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2         4
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2         5
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3         4
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0         1
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3         4
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0         2
+ 019100 TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE  CODE TABLE 19100           0            0   4 CODE TABLE 19100          0         2
+ 019101 ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE   CODE TABLE 19101           0            0   4 CODE TABLE 19101          0         2
+ 019102 SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE          CODE TABLE 19102           0            0   3 CODE TABLE 19102          0         1
+ 019103 DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE        CODE TABLE 19103           0            0   4 CODE TABLE 19103          0         2
+ 019104 CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES             CODE TABLE 19104           0            0   4 CODE TABLE 19104          0         2
+ 019105 DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE           CODE TABLE 19105           0            0   4 CODE TABLE 19105          0         2
+ 019106 IDENTIFICATION NUMBER OF TROPICAL CYCLONE                        NUMERIC                    0            0   7 NUMERIC                   0         3
+ 019107 TIME INTERVAL OF THE TROPICAL CYCLONE ANALYSIS                   CODE TABLE 19107           0            0   4 CODE TABLE 19107          0         2
+ 019108 ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE        CODE TABLE 19108           0            0   3 CODE TABLE 19108          0         1
+ 019109 MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE      CODE TABLE 19109           0            0   4 CODE TABLE 19109          0         2
+ 019110 APPARENT 24-HOUR CHANGE IN INTENSITY OF TROPICAL CYCLONE         CODE TABLE 19110           0            0   4 CODE TABLE 19110          0         2
+ 019111 CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE            NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019112 DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019113 CLOUD PATTERN TYPE OF THE DT- NUMBER                             CODE TABLE 19113           0            0   4 CODE TABLE 19113          0         2
+ 019114 MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE     NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019115 TREND OF PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)         NUMERIC                    1          -30   6 NUMERIC                   1         2
+ 019116 PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE             NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019117 CLOUD PICTURE TYPE OF THE PT- NUMBER                             CODE TABLE 19117           0            0   3 CODE TABLE 19117          0         1
+ 019118 FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019119 TYPE OF THE FINAL T-NUMBER                                       CODE TABLE 19119           0            0   3 CODE TABLE 19119          0         1
+ 019150 TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1         4
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1         3
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0         3
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0         2
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0         2
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0         2
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0         2
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0         3
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0         2
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0         2
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1         4
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1         4
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1         5
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1         5
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0         2
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0         1
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0        10
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0         2
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0         6
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0         1
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0         7
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0         2
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0         3
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0         1
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2         3
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0         1
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0         2
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0         2
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0         2
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0         2
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0         2
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0         3
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1         4
+ 020040 EVOLUTION OF DRIFT OF SNOW                                       CODE TABLE 20040           0            0   4 CODE TABLE 20040          0         2
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0         2
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0         1
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0         2
+ 020050 CLOUD INDEX                                                      CODE TABLE 20050           0            0   8 CODE TABLE 20050          0         3
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0         3
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0         3
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0         3
+ 020054 TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 020055 STATE OF SKY IN TROPICS                                          CODE TABLE 20055           0            0   4 CODE TABLE 20055          0         2
+ 020056 CLOUD PHASE                                                      CODE TABLE 20056           0            0   3 CODE TABLE 20056          0         1
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0         4
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0         2
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0         4
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0         3
+ 020066 MAXIMUM DIAMETER OF HAILSTONES                                   M                          3            0   8 M                         3         3
+ 020067 DIAMETER OF DEPOSIT                                              M                          3            0   9 M                         3         3
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0         2
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0         3
+ 020083 AMOUNT OF SEGMENT COVERED BY SCENE                               %                          0            0   7 %                         0         3
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0         2
+ 020095 ICE PROBABILITY                                                  NUMERIC                    3            0  10 NUMERIC                   3         4
+ 020096 ICE AGE ("A" PARAMETER)                                          dB                         2        -4096  13 dB                        2         4
+ 020101 LOCUST (ACRIDIAN) NAME                                           CODE TABLE 20101           0            0   4 CODE TABLE 20101          0         2
+ 020102 LOCUST (MATURITY) COLOR                                          CODE TABLE 20102           0            0   4 CODE TABLE 20102          0         2
+ 020103 STAGE OF DEVELOPMENT OF LOCUSTS                                  CODE TABLE 20103           0            0   4 CODE TABLE 20103          0         2
+ 020104 ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS                   CODE TABLE 20104           0            0   4 CODE TABLE 20104          0         2
+ 020105 SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARMCODE TABLE 20105           0            0   4 CODE TABLE 20105          0         2
+ 020106 LOCUST POPULATION DENSITY                                        CODE TABLE 20106           0            0   4 CODE TABLE 20106          0         2
+ 020107 DIRECTION OF MOVEMENTS OF LOCUST SWARM                           CODE TABLE 20107           0            0   4 CODE TABLE 20107          0         2
+ 020108 EXTENT OF VEGETATION                                             CODE TABLE 20108           0            0   4 CODE TABLE 20108          0         2
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3 
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7 %                         0         3 
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14 PA                       -1         5 
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0         3
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0         3
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1         3
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0         2
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0         2
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1         4
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1         3
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3         2
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0         3
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0         3
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7         4
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2         3
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0         3
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2         4
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1         4
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0         3
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0         4
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0         5
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0         3
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0         4
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0         6
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0         2
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0         3
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0         1
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3         5
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3         3
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3         4
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3         4
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3         4
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3         5
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0         2
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021088 WET BACKSCATTER                                                  dB                         2        -5000  13 dB                        2         4
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0         3
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0         3
+ 021093 Ku BAND PEAKINESS                                                NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021094 S BAND PEAKINESS                                                 NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0         2
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3         5
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2         5
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3         5
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8         5
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0         6
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3         6
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0         6
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0         6
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2         5
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2         5
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0         2
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2         5
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2         5
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREE                     3            0  19 DEGREE                    3         6
+ 021133 WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID            M                          3            0  29 M                         3         9
+ 021134 RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM                    RAD/M                      3            0  19 RAD/M                     3         6
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  dB                         2       -32768  16 dB                        2         5
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              dB                         2       -32768  16 dB                        2         5
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR AGC                      dB                         2        -2048  12 dB                        2         4
+ 021140 S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                   dB                         2       -32768  16 dB                        2         5
+ 021141 STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT               dB                         2       -32768  16 dB                        2         5
+ 021142 S BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -1024  11 dB                        2         4
+ 021143 KU BAND RAIN ATTENUATION                                         dB                         2  -1073741824  31 dB                        2        10
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0         1
+ 021150 BEAM COLLOCATION                                                 CODE TABLE 21150           0            0   2 CODE TABLE 21150          0         1
+ 021151 ESTIMATED ERROR IN SIGMA0 AT 40DEG INCIDENCE ANGLE               dB                         2            0   9 dB                        2         3
+ 021152 SLOPE AT 40DEG INCIDENCE ANGLE                                   dB/DEG                     2          -80   7 dB/DEG                    2         3
+ 021153 ESTIMATED ERROR IN SLOPE AT 40DEG INCIDENCE ANGLE                dB/DEG                     2          -40   6 dB/DEG                    2         3
+ 021154 SOIL MOISTURE SENSITIVITY                                        dB                         2            0  12 dB                        2         4
+ 021155 WIND VECTOR CELL QUALITY                                         FLAG TABLE 21155           0            0  24 FLAG TABLE 21155          0         8
+ 021156 BACKSCATTER DISTANCE                                             NUMERIC                    1        -4096  13 NUMERIC                   1         4
+ 021157 LOSS PER UNIT LENGTH OF ATMOSPHERE USED                          dB/M                      10            0  22 dB/M                     10         7
+ 021158 ASCAT kp ESTIMATE QUALITY                                        CODE TABLE 21158           0            0   2 CODE TABLE 21158          0         1
+ 021159 ASCAT SIGMA-0 USABILITY                                          CODE TABLE 21159           0            0   2 CODE TABLE 21159          0         1
+ 021160 ASCAT USE OF SYNTHETIC DATA                                      NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021161 ASCAT SYNTHETIC DATA QUALITY                                     NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021162 ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021163 ASCAT SOLAR ARRAY REFLECTION CONTAMINATION                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021164 ASCAT TELEMETRY PRESENCE AND QUALITY                             NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021165 ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE                   NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021166 ASCAT LAND FRACTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022005 DIRECTION OF SEA SURFACE CURRENT                                 DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0         2
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0         2
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0         2
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1         4
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1         4
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1         4
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2         4
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2         4
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2         4
+ 022032 SPEED OF SEA SURFACE CURRENT                                     M/S                        2            0  13 M/S                       2         4
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2         4
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2         4
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3         5
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3         5
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3         4
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3         5
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1         4
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1         4
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2         5
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1         5
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3         6
+ 022049 SEA SURFACE TEMPERATURE                                          K                          2            0  15 K                         2         5
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2         3
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0         1
+ 022059 SEA SURFACE SALINITY                                             PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 22060           0            0   3 CODE TABLE 22060          0         1
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0         2
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0         5
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3         6
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3         6
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6         8
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0         4
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0         3
+ 022069 SPECTRAL WAVE DENSITY                                            M2HZ-1                     3            0  22 M2HZ-1                    3         7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2         4
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1         3
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0         4
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2         4
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1         3
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0         4
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0         3
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0         4
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0         5
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3         4
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5         4
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2         7
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2         7
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2         7
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2         7
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2         7
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2         7
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0         3
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3         2
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0         5
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0         5
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0         3
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0        10
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0         2
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0         2
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0         2
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0         2
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2         5
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31 M                         3        10
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16 M                         3         5
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S BAND                          NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31 M                         3        10
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16 M                         3         5
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16 M                         3         5
+ 022157 STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16 M                         3         5
+ 022158 S BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16 M                         3         5
+ 022159 STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16 M                         3         5
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21 NUMERIC                   6         7
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27 M**4                      4         9
+ 023001 ACCIDENT EARLY NOTIFICATION   ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0         1
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0         2
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0         1
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0         1
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0         1
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0         1
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0         1
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0         1
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0         1
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0         1
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6         7
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0         1
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0         6
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0         6
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0         8
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1         4
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2         4
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2         4
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0         1
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0         1
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                      -11         9
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                      -11         9
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0         2
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0         3
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2        10
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2        10
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2        10
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2        10
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2        10
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1         4
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1         4
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1         2
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0         1
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0         1
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0         1
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2         3
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0         2
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0         2
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0         1
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0         1
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0         1
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0         1
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5         2
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0         1
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7         2
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2         3
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0         1
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0         3
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1         3
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12 V                         1         4
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15 NUMERIC                   1         5
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0         1
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0         1
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0         1
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0         2
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0         2
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0         2
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0         1
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0         1
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4         5
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2         5
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0         7
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0         2
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0         2
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0         6
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0         2
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0         3
+ 025052 LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA            NUMERIC                    4            0  15 NUMERIC                   4         5
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0         4
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2         5
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 025062 DATABASE IDENTIFICATION                                          NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0         4
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0         3
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8        10
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5         7
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5         6
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4         8
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10         5
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0         1
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3         5
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2         5
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0         3
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0         1
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0         2
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0         2
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5         6
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5         6
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025104 NUMBER OF WAVE-LENGTH BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025107 FIRST WAVE-LENGTH BIN                                            M                          3            0  29 M                         3         9
+ 025108 LAST WAVE-LENGTH BIN                                             M                          3            0  29 M                         3         9
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025120 RA2-L2-PROCESSING FLAG                                           CODE TABLE 25120           0            0   2 CODE TABLE 25120          0         1
+ 025121 RA2-L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 25122           0            0   2 CODE TABLE 25122          0         1
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 25123           0            0   2 CODE TABLE 25123          0         1
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 25124           0            0   2 CODE TABLE 25124          0         1
+ 025125 MWR L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025127 INVERTED BAROMETER CORRECTION                                    M                          3       -32768  16 M                         3         5
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3         5
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16 M                         3         5
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16 M                         3         5
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16 M                         3         5
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025137 SEA STATE BIAS CORRECTION ON S BAND                              M                          3       -32768  16 M                         3         5
+ 025138 AVERAGE SIGNAL TO NOISE RATION                                   NUMERIC                    0        -2048  12 NUMERIC                   0         4
+ 025140 START CHANNEL                                                    NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025141 END CHANNEL                                                      NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025142 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6 NUMERIC                   0         2
+ 025150 SATELLITE INTENSITY ANALYSIS METHOD OF TROPICAL CYCLONE          CODE TABLE 25150           0            0   4 CODE TABLE 25150          2         2
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0         4
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0         9
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0         4
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2        10
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16 DEGREE TRUE               0         5
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2        10
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0         1
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0         1
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0         2
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0         5
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0         2
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0         6
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0         1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0         2
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0         1
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0         1
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0         1
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0        10
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0         1
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0         3
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0         2
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0         1
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0         1
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0         1
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0         1
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0         2
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0         1
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0         2
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0         1
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0         8
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0         8
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0         8
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0         8
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0         2
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0         3
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0         7
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0         4
+ 033039 QUALITY FLAGS FOR RADIO OCCULTATION DATA                         FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0         6
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0         3
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0         1
+ 033042 TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE                     CODE TABLE 33042           0            0   3 CODE TABLE 33042          0         1
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0         3
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0         5
+ 033045 PROBABILITY OF FOLLOWING EVENT                                   %                          0            0   7 %                         0         3
+ 033046 CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECI %                          0            0   7 %                         0         3
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0        11
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 33048           0            0   2 CODE TABLE 33048          0         1
+ 033049 CONFIDENCE MEASURE OF WIND RETRIEVAL                             CODE TABLE 33049           0            0   2 CODE TABLE 33049          0         1
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0         2
+ 033052 S BAND OCEAN RETRACKING QUALITY                                  FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0         7
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0         7
+ 033060 GQISFLAGQUAL-INDIVIDUAL IASI-SYSTEM QUALITY FLAG                 CODE TABLE 33060           0            0   2 CODE TABLE 33060          0         1
+ 033061 GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE       %                          0            0   7 %                         0         3
+ 033062 GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX         %                          0            0   7 %                         0         3
+ 033063 GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE    %                          0            0   7 %                         0         3
+ 033064 GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE  %                          0            0   7 %                         0         3
+ 033065 GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC QUALITY FUNCTION       NUMERIC                    0            0  24 NUMERIC                   0        24
+ 033066 SBUV TOTAL OZONE QUALITY                                         CODE TABLE 33066           0            0   4 CODE TABLE 33066          0         2
+ 033067 SBUV PROFILE OZONE QUALITY                                       CODE TABLE 33067           0            0   4 CODE TABLE 33067          0         2
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0         3
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0         1
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0         4
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0         1
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0         2
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0         1
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0         2
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0         1
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0         2
+ 040001 SURFACE SOIL MOISTURE (MS)                                       %                          1            0  10 %                         1         4
+ 040002 ESTIMATED ERROR IN SURFACE SOIL MOISTURE                         %                          1            0  10 %                         1         4
+ 040003 MEAN SURFACE SOIL MOISTURE                                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040004 RAIN FALL DETECTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040005 SOIL MOISTURE CORRECTION FLAG                                    FLAG TABLE 40005           0            0   8 FLAG FLAG TABLE 40005     0         3
+ 040006 SOIL MOISTURE PROCESSING FLAG                                    FLAG TABLE 40006           0            0  16 FLAG FLAG TABLE 40006     0         5
+ 040007 SOIL MOISTURE QUALITY                                            %                          1            0  10 %                         1         4
+ 040008 FROZEN LAND SURFACE FRACTION                                     %                          1            0  10 %                         1         4
+ 040009 INUNDATION AND WETLAND FRACTION                                  %                          1            0  10 %                         1         4
+ 040010 TOPOGRAPHIC COMPLEXITY                                           %                          1            0  10 %                         1         4
diff --git a/crextables/B000207 b/crextables/B000207
new file mode 100755
index 0000000..d476ab6
--- /dev/null
+++ b/crextables/B000207
@@ -0,0 +1,1210 @@
+ 000001 TABLE A:  ENTRY                                                  CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000002 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 1                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000003 TABLE A:  DATA CATEGORY DESCRIPTION, LINE 2                      CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000004 BUFR/CREX MASTER TABLE                                           CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000005 BUFR/CREX EDITION NUMBER                                         CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000006 BUFR MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2 
+ 000007 CREX MASTER TABLE VERSION NUMBER                                 CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000008 BUFR LOCAL TABLE VERSION NUMBER                                  CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000010 F DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000011 X DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 000012 Y DESCRIPTOR TO BE ADDED OR DEFINED                              CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000013 ELEMENT NAME, LINE 1                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000014 ELEMENT NAME, LINE 2                                             CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 000015 UNITS NAME                                                       CCITTIA5                   0            0 192 CHARACTER                 0        24
+ 000016 UNITS SCALE SIGN                                                 CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000017 UNITS SCALE                                                      CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000018 UNITS REFERENCE SIGN                                             CCITTIA5                   0            0   8 CHARACTER                 0         1
+ 000019 UNITS REFERENCE VALUE                                            CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 000020 ELEMENT DATA WIDTH                                               CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 000030 DESCRIPTOR DEFINING SEQUENCE                                     CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 001001 WMO BLOCK NUMBER                                                 NUMERIC                    0            0   7 NUMERIC                   0         2
+ 001002 WMO STATION NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 001003 WMO REGION NUMBER/GEOGRAPHICAL AREA                              CODE TABLE 1003            0            0   3 CODE TABLE 1003           0         1
+ 001004 WMO REGION SUB-AREA (SEE NOTE 9)                                 NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001005 BUOY/PLATFORM IDENTIFIER                                         NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001006 AIRCRAFT FLIGHT NUMBER                                           CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001007 SATELLITE IDENTIFIER                                             CODE TABLE 1007            0            0  10 CODE TABLE 1007           0         4
+ 001008 AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION             CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001009 TYPE OF COMMERCIAL AIRCRAFT                                      CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001010 STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS            CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001011 SHIP OR MOBILE LAND STATION IDENTIFIER                           CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 001012 DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM**               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 001013 SPEED OF MOTION OF MOVING OBSERVING PLATFORM*                    M/S                        0            0  10 M/S                       0         3
+ 001014 PLATFORM DRIFT SPEED (HIGH PRECISION)                            M/S                        2            0  10 M/S                       2         4
+ 001015 STATION OR SITE NAME                                             CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001018 SHORT STATION OR SITE NAME                                       CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001019 LONG STATION OR SITE NAME                                        CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001020 WMO REGION SUB-AREA                                              NUMERIC                    0            0   4 NUMERIC                   0         2
+ 001021 SYNOPTIC FEATURE IDENTIFIER                                      NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001022 NAME OF FEATURE (SEE NOTE 11)                                    CCITTIA5                   0            0 224 CHARACTER                 0        28
+ 001023 OBSERVATION SEQUENCE NUMBER                                      NUMERIC                    0            0   9 NUMERIC                   0         3
+ 001025 STORM IDENTIFIER                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 001026 WMO STORM NAME                                                   CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001027 WMO LONG STORM NAME                                              CCITTIA5                   0            0  80 CHARACTER                 0        10
+ 001031 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE (SEE NOTE 10)    CODE TABLE 1031            0            0  16 CODE TABLE 1031           0         5
+ 001032 GENERATING APPLICATION                                           CODE TABLE 1032            0            0   8 CODE TABLE 1032           0         3
+ 001033 IDENTIFICATION OF ORIGINATING/GENERATING CENTRE                  CODE TABLE 1033            0            0   8 CODE TABLE 1033           0         3
+ 001034 IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE              CODE TABLE 1034            0            0   8 CODE TABLE 1034           0         3
+ 001035 ORIGINATING CENTRE                                               COMMON CODE TABLE C-11     0            0  16 COMMON CODE TABLE C-11    0         5
+ 001036 AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM             CODE TABLE 1036            0            0  20 CODE TABLE 1036           0         7
+ 001041 ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001042 ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT (SEE NOTE 6)       M/S                        5  -1073741824  31 M/S                       5        10
+ 001043 ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT (SEE NOTE 6)        M/S                        5  -1073741824  31 M/S                       5        10
+ 001050 PLATFORM TRANSMITTER ID NUMBER                                   NUMERIC                    0            0  17 NUMERIC                   0         6
+ 001051 PLATFORM TRANSMITTER ID NUMBER                                   CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001052 PLATFORM TRANSMITTER ID                                          CODE TABLE 1052            0            0   3 CODE TABLE 1052           0         1 
+ 001053 TSUNAMETER REPORT SEQUENCE NUMBER TRIGGERED BY A TSUNAMI EVENT   NUMERIC                    0            0   7 NUMERIC                   0         2
+ 001060 AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)                     CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001062 SHORT ICAO LOCATION INDICATOR                                    CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001063 ICAO LOCATION INDICATOR                                          CCITTIA5                   0            0  64 CHARACTER                 0         8
+ 001064 RUNWAY DESIGNATOR                                                CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001075 TIDE STATION IDENTIFICATION                                      CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 001080 SHIP LINE NUMBER ACCORDING TO SOOP                               CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001081 RADIOSONDE SERIAL NUMBER                                         CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001082 RADIOSONDE ASCENSION NUMBER (SEE NOTE 12)                        NUMERIC                    0            0  14 NUMERIC                   0         4
+ 001083 RADIOSONDE RELEASE NUMBER (SEE NOTE 12)                          NUMERIC                    0            0   3 NUMERIC                   0         1
+ 001085 OBSERVING PLATFORM MANUFACTURER'S MODEL                          CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 001086 OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER                  CCITTIA5                   0            0 256 CHARACTER                 0        32
+ 001087 WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER                NUMERIC                    0            0  23 NUMERIC                   0         7
+ 001090 TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS                    CODE TABLE 1090            0            0   8 CODE TABLE 1090           0         3
+ 001091 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0  10 NUMERIC                   0         4
+ 001092 TYPE OF ENSEMBLE FORECAST                                        CODE TABLE 1092            0            0   8 CODE TABLE 1092           0         3
+ 001093 BALLOON LOT NUMBER                                               CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 001094 WBAN NUMBER                                                      NUMERIC                    0            0  17 NUMERIC                   0         5
+ 001095 OBSERVER IDENTIFICATION                                          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 001096 STATION ACQUISITION                                              CCITTIA5                   0            0 160 CHARACTER                 0        20
+ 002001 TYPE OF STATION                                                  CODE TABLE 2001            0            0   2 CODE TABLE 2001           0         1
+ 002002 TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT                     FLAG TABLE 2002            0            0   4 FLAG TABLE 2002           0         2
+ 002003 TYPE OF MEASURING EQUIPMENT USED                                 CODE TABLE 2003            0            0   4 CODE TABLE 2003           0         2
+ 002004 TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C CODE TABLE 2004            0            0   4 CODE TABLE 2004           0         2
+ 002005 PRECISION OF TEMPERATURE OBSERVATION                             K                          2            0   7 K                         2         3
+ 002011 RADIOSONDE TYPE                                                  CODE TABLE 2011            0            0   8 CODE TABLE 2011           0         3
+ 002012 RADIOSONDE COMPUTATIONAL METHOD                                  CODE TABLE 2012            0            0   4 CODE TABLE 2012           0         2
+ 002013 SOLAR AND INFRARED RADIATION CORRECTION                          CODE TABLE 2013            0            0   4 CODE TABLE 2013           0         2
+ 002014 TRACKING TECHNIQUE/STATUS OF SYSTEM USED                         CODE TABLE 2014            0            0   7 CODE TABLE 2014           0         3
+ 002015 RADIOSONDE COMPLETENESS                                          CODE TABLE 2015            0            0   4 CODE TABLE 2015           0         2
+ 002016 RADIOSONDE CONFIGURATION                                         FLAG TABLE 2016            0            0   5 FLAG TABLE 2016           0         2
+ 002019 SATELLITE INSTRUMENTS                                            CODE TABLE 2019            0            0  11 CODE TABLE 2019           0         4
+ 002020 SATELLITE CLASSIFICATION                                         CODE TABLE 2020            0            0   9 CODE TABLE 2020           0         3
+ 002021 SATELLITE INSTRUMENT DATA USED IN PROCESSING                     FLAG TABLE 2021            0            0   9 FLAG TABLE 2021           0         3
+ 002022 SATELLITE DATA-PROCESSING TECHNIQUE USED                         FLAG TABLE 2022            0            0   8 FLAG TABLE 2022           0         3
+ 002023 SATELLITE DERIVED WIND COMPUTATION METHOD                        CODE TABLE 2023            0            0   4 CODE TABLE 2023           0         2
+ 002024 INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD                    CODE TABLE 2024            0            0   4 CODE TABLE 2024           0         2
+ 002025 SATELLITE CHANNEL(S) USED IN COMPUTATION                         FLAG TABLE 2025            0            0  25 FLAG TABLE 2025           0         9
+ 002026 CROSS TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002027 ALONG TRACK RESOLUTION                                           M                          2            0  12 M                         2         4
+ 002028 SEGMENT SIZE AT NADIR IN X DIRECTION                             M                          0            0  18 M                         0         6
+ 002029 SEGMENT SIZE AT NADIR IN Y DIRECTION                             M                          0            0  18 M                         0         6
+ 002030 METHOD OF CURRENT MEASUREMENT                                    CODE TABLE 2030            0            0   3 CODE TABLE 2030           0         1
+ 002031 DURATION AND TIME OF CURRENT MEASUREMENT                         CODE TABLE 2031            0            0   5 CODE TABLE 2031           0         2
+ 002032 INDICATOR FOR DIGITIZATION                                       CODE TABLE 2032            0            0   2 CODE TABLE 2032           0         1
+ 002033 METHOD OF SALINITY/DEPTH MEASUREMENT                             CODE TABLE 2033            0            0   3 CODE TABLE 2033           0         1
+ 002034 DROGUE TYPE                                                      CODE TABLE 2034            0            0   5 CODE TABLE 2034           0         2
+ 002035 CABLE LENGTH                                                     M                          0            0   9 M                         0         3
+ 002036 BUOY TYPE                                                        CODE TABLE 2036            0            0   2 CODE TABLE 2036           0         1
+ 002037 METHOD OF TIDAL OBSERVATION                                      CODE TABLE 2037            0            0   3 CODE TABLE 2037           0         1
+ 002038 METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT          CODE TABLE 2038            0            0   4 CODE TABLE 2038           0         2
+ 002039 METHOD OF WET-BULB TEMPERATURE MEASUREMENT                       CODE TABLE 2039            0            0   3 CODE TABLE 2039           0         1
+ 002040 METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT  CODE TABLE 2040            0            0   4 CODE TABLE 2040           0         2
+ 002041 METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES       CODE TABLE 2041            0            0   6 CODE TABLE 2041           0         2
+ 002042 INDICATOR FOR SEA SURFACE CURRENT SPEED                          CODE TABLE 2042            0            0   2 CODE TABLE 2042           0         1
+ 002044 INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA           CODE TABLE 2044            0            0   4 CODE TABLE 2044           0         2
+ 002045 INDICATOR FOR TYPE OF PLATFORM                                   CODE TABLE 2045            0            0   4 CODE TABLE 2045           0         2
+ 002046 WAVE MEASUREMENT INSTRUMENTATION                                 CODE TABLE 2046            0            0   4 CODE TABLE 2046           0         2
+ 002047 DEEP-OCEAN TSUNAMETER TYPE                                       CODE TABLE 2047            0            0   7 CODE TABLE 2047           0         2
+ 002048 SATELLITE SENSOR INDICATOR                                       CODE TABLE 2048            0            0   4 CODE TABLE 2048           0         2
+ 002049 GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED           FLAG TABLE 2049            0            0   8 FLAG TABLE 2049           0         3
+ 002050 GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED                    FLAG TABLE 2050            0            0  20 FLAG TABLE 2050           0         7
+ 002051 INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES   CODE TABLE 2051            0            0   4 CODE TABLE 2051           0         2
+ 002052 GEOSTATIONARY IMAGER SATELLITE CHANNELS USED                     FLAG TABLE 2052            0            0   6 FLAG TABLE 2052           0         2
+ 002053 GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS                  CODE TABLE 2053            0            0   4 CODE TABLE 2053           0         2
+ 002054 GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS                     CODE TABLE 2054            0            0   4 CODE TABLE 2054           0         2
+ 002055 GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS                   CODE TABLE 2055            0            0   4 CODE TABLE 2055           0         2
+ 002056 GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS                      CODE TABLE 2056            0            0   4 CODE TABLE 2056           0         2
+ 002057 ORIGIN OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS         CODE TABLE 2057            0            0   4 CODE TABLE 2057           0         2
+ 002058 VALID TIMES OF FIRST GUESS INFORMATION FOR GOES-I/M SOUNDINGS    CODE TABLE 2058            0            0   4 CODE TABLE 2058           0         2
+ 002059 ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS            CODE TABLE 2059            0            0   4 CODE TABLE 2059           0         2
+ 002060 ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS             CODE TABLE 2060            0            0   4 CODE TABLE 2060           0         2
+ 002061 AIRCRAFT NAVIGATIONAL SYSTEM                                     CODE TABLE 2061            0            0   3 CODE TABLE 2061           0         1
+ 002062 TYPE OF AIRCRAFT DATA RELAY SYSTEM                               CODE TABLE 2062            0            0   4 CODE TABLE 2062           0         2
+ 002063 AIRCRAFT ROLL ANGLE                                              DEGREE                     2       -18000  16 DEGREE                    2         5
+ 002064 AIRCRAFT ROLL ANGLE QUALITY                                      CODE TABLE 2064            0            0   2 CODE TABLE 2064           0         1
+ 002065 ACARS GROUND RECEIVING STATION                                   CCITTIA5                   0            0  40 CHARACTER                 0         5
+ 002066 RADIOSONDE GROUND RECEIVING SYSTEM                               CODE TABLE 2066            0            0   6 CODE TABLE 2066           0         2
+ 002067 RADIOSONDE OPERATING FREQUENCY                                   Hz                        -5            0  15 Hz                       -5         5
+ 002070 ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE                     CODE TABLE 2070            0            0   4 CODE TABLE 2070           0         2
+ 002080 BALLOON MANUFACTURER                                             CODE TABLE 2080            0            0   6 CODE TABLE 2080           0         2
+ 002081 TYPE OF BALLOON                                                  CODE TABLE 2081            0            0   5 CODE TABLE 2081           0         2
+ 002082 WEIGHT OF BALLOON                                                KG                         3            0  12 KG                        3         4
+ 002083 TYPE OF BALLOON SHELTER                                          CODE TABLE 2083            0            0   4 CODE TABLE 2083           0         2
+ 002084 TYPE OF GAS USED IN BALLOON                                      CODE TABLE 2084            0            0   4 CODE TABLE 2084           0         2
+ 002085 AMOUNT OF GAS USED IN BALLOON                                    KG                         3            0  13 KG                        3         4
+ 002086 BALLOON FLIGHT TRAIN LENGTH                                      M                          1            0  10 M                         1         4
+ 002091 ENTRY SENSOR 4/20 MA                                             A                          4            0  10 A                         4         3
+ 002095 TYPE OF PRESSURE SENSOR                                          CODE TABLE 2095            0            0   5 CODE TABLE 2095           0         2
+ 002096 TYPE OF TEMPERATURE SENSOR                                       CODE TABLE 2096            0            0   5 CODE TABLE 2096           0         2
+ 002097 TYPE OF HUMIDITY SENSOR                                          CODE TABLE 2097            0            0   5 CODE TABLE 2097           0         2
+ 002100 RADAR CONSTANT                                                   dB                         1            0  12 dB                        1         4
+ 002101 TYPE OF ANTENNA                                                  CODE TABLE 2101            0            0   4 CODE TABLE 2101           0         2
+ 002102 ANTENNA HEIGHT ABOVE TOWER BASE                                  M                          0            0   8 M                         0         3
+ 002103 RADOME                                                           FLAG TABLE 2103            0            0   2 FLAG TABLE 2103           0         1
+ 002104 ANTENNA POLARISATION                                             CODE TABLE 2104            0            0   4 CODE TABLE 2104           0         2
+ 002105 MAXIMUM ANTENNA GAIN                                             dB                         0            0   6 dB                        0         2
+ 002106 3-DB BEAMWIDTH                                                   DEGREE                     1            0   6 DEGREE                    1         2
+ 002107 SIDELOBE SUPPRESSION                                             dB                         0            0   6 dB                        0         2
+ 002108 CROSSPOL DISCRIMINATION (ON AXIS)                                dB                         0            0   6 dB                        0         2
+ 002109 ANTENNA SPEED (AZIMUTH)                                          DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002110 ANTENNA SPEED (ELEVATION)                                        DEGREE/S                   2            0  12 DEGREE/S                  2         4
+ 002111 RADAR INCIDENCE ANGLE                                            DEGREE                     1            0  10 DEGREE                    1         4
+ 002112 RADAR LOOK ANGLE                                                 DEGREE                     1            0  12 DEGREE                    1         4
+ 002113 NUMBER OF AZIMUTH LOOKS                                          NUMERIC                    0            0   4 NUMERIC                   0         2
+ 002114 ANTENNA EFFECTIVE SURFACE AREA                                   M**2                       0            0  15 M**2                      0         5
+ 002115 TYPE OF SURFACE OBSERVING EQUIPMENT                              CODE TABLE 2115            0            0   5 CODE TABLE 2115           0         2
+ 002116 PERCENTAGE OF 320 MHZ BAND PROCESSED                             %                          0            0   7 %                         0         3
+ 002117 PERCENTAGE OF 80 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002118 PERCENTAGE OF 20 MHZ BAND PROCESSED                              %                          0            0   7 %                         0         3
+ 002119 RA-2 INSTRUMENT OPERATIONS                                       CODE TABLE 2119            0            0   3 CODE TABLE 2119           0         1
+ 002120 OCEAN WAVE FREQUENCY                                             Hz                         3            0  10 Hz                        3         4
+ 002121 MEAN FREQUENCY                                                   Hz                        -8            0   7 Hz                       -8         3
+ 002122 FREQUENCY AGILITY RANGE                                          Hz                        -6         -128   8 Hz                       -6         3
+ 002123 PEAK POWER                                                       W                         -4            0   7 W                        -4         3
+ 002124 AVERAGE POWER                                                    W                         -1            0   7 W                        -1         3
+ 002125 PULSE REPETITION FREQUENCY                                       Hz                        -1            0   8 Hz                       -1         3
+ 002126 PULSE WIDTH                                                      S                          7            0   6 S                         7         2
+ 002127 RECEIVER INTERMEDIATE FREQUENCY                                  Hz                        -6            0   7 Hz                       -6         3
+ 002128 INTERMEDIATE FREQUENCY BANDWIDTH                                 Hz                        -5            0   6 Hz                       -5         2
+ 002129 MINIMUM DETECTABLE SIGNAL                                        dB                         0         -150   5 dB                        0         3
+ 002130 DYNAMIC RANGE                                                    dB                         0            0   7 dB                        0         3
+ 002131 SENSITIVITY TIME CONTROL (STC)                                   FLAG TABLE 2131            0            0   2 FLAG TABLE 2131           0         1
+ 002132 AZIMUTH POINTING ACCURACY                                        DEGREE                     2            0   6 DEGREE                    2         2
+ 002133 ELEVATION POINTING ACCURACY                                      DEGREE                     2            0   6 DEGREE                    2         2
+ 002134 ANTENNA BEAM AZIMUTH                                             DEGREE                     2            0  16 DEGREE                    2         5
+ 002135 ANTENNA ELEVATION                                                DEGREE                     2        -9000  15 DEGREE                    2         5
+ 002136 RANGE PROCESSED BY RANGE ATTENUATION CORRECTION                  M                         -3            0  16 M                        -3         5
+ 002140 SATELLITE RADAR BEAM AZIMUTH ANGLE                               DEGREE                     0            0   9 DEGREE                    0         3
+ 002141 MEASUREMENT TYPE                                                 CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 002142 OZONE INSTRUMENT SERIAL NUMBER/ IDENTIFICATION                   CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 002143 OZONE INSTRUMENT TYPE                                            CODE TABLE 2143            0            0   7 CODE TABLE 2143           0         3
+ 002144 LIGHT SOURCE TYPE FOR BREWER SPECTRO PHOTOMETER                  CODE TABLE 2144            0            0   4 CODE TABLE 2144           0         2
+ 002145 WAVE LENGTH SETTING FOR DOBSON INSTRUMENTS                       CODE TABLE 2145            0            0   4 CODE TABLE 2145           0         2
+ 002146 SOURCE CONDITIONS FOR DOBSON INSTRUMENTS                         CODE TABLE 2146            0            0   4 CODE TABLE 2146           0         2
+ 002148 DATA COLLECTION AND/OR LOCATION SYSTEM                           CODE TABLE 2148            0            0   5 CODE TABLE 2148           0         2
+ 002149 TYPE OF DATA BUOY                                                CODE TABLE 2149            0            0   6 CODE TABLE 2149           0         2
+ 002150 TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER                  CODE TABLE 2150            0            0   6 CODE TABLE 2150           0         2
+ 002151 RADIOMETER IDENTIFIER                                            CODE TABLE 2151            0            0  11 CODE TABLE 2151           0         4
+ 002152 SATELLITE INSTRUMENT USED IN DATA PROCESSING(6)                  FLAG TABLE 2152            0            0  31 FLAG TABLE 2152           0        10
+ 002153 SATELLITE CHANNEL CENTRE FREQUENCY                               Hz                        -8            0  26 Hz                       -8         8
+ 002154 SATELLITE CHANNEL BAND WIDTH                                     Hz                        -8            0  26 Hz                       -8         8
+ 002156 PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS              %                          0            0   7 %                         0         3
+ 002157 PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS               %                          0            0   7 %                         0         3
+ 002158 RA-2 INSTRUMENT                                                  FLAG TABLE 2158            0            0   9 FLAG TABLE 2158           0         3
+ 002159 MWR INSTRUMENT                                                   FLAG TABLE 2159            0            0   8 FLAG TABLE 2159           0         3
+ 002160 WAVE LENGTH OF THE RADAR                                         CODE TABLE 2160            0            0   4 CODE TABLE 2160           0         2
+ 002163 HEIGHT ASSIGNMENT METHOD                                         CODE TABLE 2163            0            0   4 CODE TABLE 2163           0         2
+ 002164 TRACER CORRELATION METHOD                                        CODE TABLE 2164            0            0   3 CODE TABLE 2164           0         1
+ 002165 RADIANCE TYPE FLAGS                                              FLAG TABLE 2165            0            0  15 FLAG TABLE 2165           0         5
+ 002166 RADIANCE TYPE                                                    CODE TABLE 2166            0            0   4 CODE TABLE 2166           0         2
+ 002167 RADIANCE COMPUTATIONAL METHOD                                    CODE TABLE 2167            0            0   4 CODE TABLE 2167           0         2
+ 002168 HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)   PA                        -3            0  16 KPA                       0         5
+ 002169 ANEMOMETER TYPE                                                  CODE TABLE 2169            0            0   4 CODE TABLE 2169           0         2
+ 002172 PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES                     CODE TABLE 2172            0            0   8 CODE TABLE 2172           0         3
+ 002173 SQUARE OF THE OFF NADIR ANGLE (7)                                DEGREE2                    4            0  10 DEGREE2                   4         4
+ 002174 MEAN ACROSS TRACK PIXEL NUMBER                                   NUMERIC                    0            0   9 NUMERIC                   0         3
+ 002175 METHOD OF PRECIPITATION MEASUREMENT                              CODE TABLE 2175            0            0   4 CODE TABLE 2175           0         2
+ 002176 METHOD OF STATE OF GROUND MEASUREMENT                            CODE TABLE 2176            0            0   4 CODE TABLE 2176           0         2
+ 002177 METHOD OF SNOW DEPTH MEASUREMENT                                 CODE TABLE 2177            0            0   4 CODE TABLE 2177           0         2
+ 002178 METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION            CODE TABLE 2178            0            0   4 CODE TABLE 2178           0         2
+ 002179 TYPE OF SKY CONDITION ALGORITHM                                  CODE TABLE 2179            0            0   4 CODE TABLE 2179           0         2
+ 002180 MAIN PRESENT WEATHER DETECTING SYSTEM                            CODE TABLE 2180            0            0   4 CODE TABLE 2180           0         2
+ 002181 SUPPLEMENTARY PRESENT WEATHER SENSOR                             FLAG TABLE 2181            0            0  21 FLAG TABLE 2181           0         7
+ 002182 VISIBILITY MEASUREMENT SYSTEM                                    CODE TABLE 2182            0            0   4 CODE TABLE 2182           0         2
+ 002183 CLOUD DETECTION SYSTEM                                           CODE TABLE 2183            0            0   4 CODE TABLE 2183           0         2
+ 002184 TYPE OF LIGHTNING DETECTION SENSOR                               CODE TABLE 2184            0            0   4 CODE TABLE 2184           0         2
+ 002185 METHOD OF EVAPORATION MEASUREMENT                                CODE TABLE 2185            0            0   4 CODE TABLE 2185           0         2
+ 002186 CAPABILITY TO DETECT PRECIPITATION PHENOMENA                     FLAG TABLE 2186            0            0  30 FLAG TABLE 2186           0        10
+ 002187 CAPABILITY TO DETECT OTHER WEATHER PHENOMENA                     FLAG TABLE 2187            0            0  18 FLAG TABLE 2187           0         6
+ 002188 CAPABILITY TO DETECT OBSCURATION                                 FLAG TABLE 2188            0            0  21 FLAG TABLE 2188           0         7
+ 002189 CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES                     FLAG TABLE 2189            0            0  12 FLAG TABLE 2189           0         4
+ 002190 LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)                %                          0            0   7 %                         0         3
+ 004001 YEAR                                                             YEAR                       0            0  12 YEAR                      0         4
+ 004002 MONTH                                                            MONTH                      0            0   4 MONTH                     0         2
+ 004003 DAY                                                              DAY                        0            0   6 DAY                       0         2
+ 004004 HOUR                                                             HOUR                       0            0   5 HOUR                      0         2
+ 004005 MINUTE                                                           MINUTE                     0            0   6 MINUTE                    0         2
+ 004006 SECOND                                                           SECOND                     0            0   6 SECOND                    0         2
+ 004007 SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)                   SECOND                     6            0  26 S                         6         8
+ 004011 TIME INCREMENT                                                   YEAR                       0        -1024  11 YEAR                      0         4
+ 004012 TIME INCREMENT                                                   MONTH                      0        -1024  11 MONTH                     0         4
+ 004013 TIME INCREMENT                                                   DAY                        0        -1024  11 DAY                       0         4
+ 004014 TIME INCREMENT                                                   HOUR                       0        -1024  11 HOUR                      0         4
+ 004015 TIME INCREMENT                                                   MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004016 TIME INCREMENT                                                   SECOND                     0        -4096  13 SECOND                    0         4
+ 004017 REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA            MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004021 TIME PERIOD OR DISPLACEMENT                                      YEAR                       0        -1024  11 YEAR                      0         4
+ 004022 TIME PERIOD OR DISPLACEMENT                                      MONTH                      0        -1024  11 MONTH                     0         4
+ 004023 TIME PERIOD OR DISPLACEMENT                                      DAY                        0        -1024  11 DAY                       0         4
+ 004024 TIME PERIOD OR DISPLACEMENT                                      HOUR                       0        -2048  12 HOUR                      0         4
+ 004025 TIME PERIOD OR DISPLACEMENT                                      MINUTE                     0        -2048  12 MINUTE                    0         4
+ 004026 TIME PERIOD OR DISPLACEMENT                                      SECOND                     0        -4096  13 SECOND                    0         4
+ 004031 DURATION OF TIME RELATING TO FOLLOWING VALUE                     HOUR                       0            0   8 HOUR                      0         3
+ 004032 DURATION OF TIME RELATING TO FOLLOWING VALUE                     MINUTE                     0            0   6 MINUTE                    0         2
+ 004041 TIME DIFFERENCE, UTC -LMT (SEE NOTE 6)                           MINUTE                     0        -1440  12 MINUTE                    0         4
+ 004043 DAY OF THE YEAR                                                  DAY                        0            0   9 DAY                       0         3
+ 004051 PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004052 PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE           HOUR                       0            0   5 HOUR                      0         2
+ 004053 NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM     NUMERIC                    0            0   6 NUMERIC                   0         2
+ 004059 TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES    FLAG TABLE 4059            0            0   6 FLAG TABLE 4059           0         2
+ 004065 SHORT TIME INCREMENT                                             MINUTE                     0         -128   8 MINUTE                    0         2
+ 004066 SHORT TIME INCREMENT                                             SECOND                     0         -128   8 SECOND                    0         2
+ 004073 SHORT TIME PERIOD OR DISPLACEMENT                                DAY                        0         -128   8 DAY                       0         2
+ 004074 SHORT TIME PERIOD OR DISPLACEMENT                                HOUR                       0         -128   8 HOUR                      0         2
+ 004075 SHORT TIME PERIOD OR DISPLACEMENT                                MINUTE                     0         -128   8 MINUTE                    0         2
+ 004080 AVERAGING PERIOD FOR FOLLOWING VALUE                             CODE TABLE 4080            0            0   4 CODE TABLE 4080           0         2
+ 004086 LONG TIME PERIOD OR DISPLACEMENT                                 SECOND                     0        -8192  15 SECOND                    0         5
+ 005001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005011 LATITUDE INCREMENT (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005012 LATITUDE INCREMENT (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005015 LATITUDE DISPLACEMENT (HIGH ACCURACY)                            DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 005016 LATITUDE DISPLACEMENT (COARSE ACCURACY)                          DEGREE                     2        -9000  15 DEGREE                    2         4
+ 005021 BEARING OR AZIMUTH                                               DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005022 SOLAR AZIMUTH                                                    DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 005023 SUN TO SATELLITE AZIMUTH DIFFERENCE                              DEGREE                     1        -1800  12 DEGREE                    1         4
+ 005030 DIRECTION (SPECTRAL)                                             DEGREE                     0            0  12 DEGREE                    0         4
+ 005031 ROW NUMBER                                                       NUMERIC                    0            0  12 NUMERIC                   0         4
+ 005033 PIXEL SIZE ON HORIZONTAL - 1                                     M                         -1            0  16 M                        -1         5
+ 005034 ALONG TRACK ROW NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 005036 SHIP TRANSECT NUMBER ACCORDING TO SOOP                           NUMERIC                    0            0   7 NUMERIC                   0         2
+ 005040 ORBIT NUMBER                                                     NUMERIC                    0            0  24 NUMERIC                   0         8
+ 005041 SCAN LINE NUMBER                                                 NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005042 CHANNEL NUMBER                                                   NUMERIC                    0            0   6 NUMERIC                   0         2^M
+ 005043 FIELD OF VIEW NUMBER                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005044 SATELLITE CYCLE NUMBER                                           NUMERIC                    0            0  11 NUMERIC                   0         4
+ 055045 FIELD OF REGARD NUMBER                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 005052 CHANNEL NUMBER INCREMENT                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005053 FIELD OF VIEW NUMBER INCREMENT                                   NUMERIC                    0            0   5 NUMERIC                   0         2
+ 005060 Y ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005061 Z ANGULAR POSITION FROM CENTRE OF GRAVITY                        DEGREE                     6     -8000000  24 DEGREE                    6         8
+ 005193 ALONG TRACK ROW NUMBER AT 50 KM                                  NUMERIC                    0            0  10 NUMERIC                   0         4 
+ 005194 ALONG TRACK ROW NUMBER AT 25 KM                                  NUMERIC                    0            0  11 NUMERIC                   0         4  
+ 005195 ENSEMBLE MEMBER NUMBER                                           NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 005217 LOCATION OF PLATFORM, X                                          M                          2  -1073741824  31 M                         2        10 
+ 005232 DIRECTION (SPECTRAL)                                             DEGREE                     2            0  16 DEGREE                    2         5 
+ 006001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006011 LONGITUDE INCREMENT (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006012 LONGITUDE INCREMENT (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006015 LONGITUDE DISPLACEMENT (HIGH ACCURACY)                           DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 006016 LONGITUDE DISPLACEMENT (COARSE ACCURACY)                         DEGREE                     2       -18000  16 DEGREE                    2         5
+ 006021 DISTANCE                                                         M                         -1            0  13 M                        -1         4
+ 006030 WAVE NUMBER (SPECTRAL)                                           RAD/M                      5            0  13 RAD/M                     5         4
+ 006031 COLUMN NUMBER                                                    NUMERIC                    0            0  12 NUMERIC                   0         4
+ 006033 PIXEL SIZE ON HORIZONTAL - 2                                     M                         -1            0  16 M                        -1         5
+ 006034 CROSS-TRACK CELL NUMBER                                          NUMERIC                    0            0   7 NUMERIC                   0         3
+ 006040 RADIUS OF CONFIDENCE                                             M                          0            0  13 M                         0         4
+ 006193 CROSS TRACK CELL NUMBER AT 50 KM                                 NUMERIC                    0            0   6 NUMERIC                   0         2 
+ 006194 CROSS TRACK CELL NUMBER AT 25 KM                                 NUMERIC                    0            0   7 NUMERIC                   0         3 
+ 006217 LOCATION OF PLATFORM, Y                                          M                          2  -1073741824  31 M                         2        10 
+ 006232 WAVENUMBER (SPECTRAL)                                            RADS/M                     5            0  13 ADS/M                     5         4
+ 007001 HEIGHT OF STATION (SEE NOTE 1)                                   M                          0         -400  15 M                         0         5
+ 007002 HEIGHT OR ALTITUDE                                               M                         -1          -40  16 M                        -1         5
+ 007003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 007004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 007005 HEIGHT INCREMENT                                                 M                          0         -400  12 M                         0         4
+ 007006 HEIGHT ABOVE STATION                                             M                          0            0  15 M                         0         5
+ 007007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 007008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 007009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 007010 FLIGHT LEVEL                                                     M                          0        -1024  16 FT                       -1         5
+ 007021 ELEVATION (SEE NOTE 2)                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007022 SOLAR ELEVATION                                                  DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007024 SATELLITE ZENITH ANGLE                                           DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007025 SOLAR ZENITH ANGLE                                               DEGREE                     2        -9000  15 DEGREE                    2         5
+ 007026 SATELLITE ZENITH ANGLE                                           DEGREE                     4      -900000  21 DEGREE                    4         7
+ 007030 HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)       M                          1       - 4000  17 M                         1         5
+ 007031 HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)            M                          1       - 4000  17 M                         1         5
+ 007032 HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) M                          2            0  16 M                         2         5
+ 007033 HEIGHT OF SENSOR ABOVE WATER SURFACE (SEE NOTE 6)                M                          1            0  12 M                         1         4
+ 007040 IMPACT PARAMETER (SEE NOTE 8)                                    M                          1     62000000  22 M                         1         8
+ 007061 DEPTH BELOW LAND SURFACE                                         M                          2            0  14 M                         2         5
+ 007062 DEPTH BELOW SEA/WATER SURFACE                                    M                          1            0  17 M                         1         6
+ 007063 DEPTH BELOW SEA/WATER SURFACE                                    M                          2            0  20 M                         2         7
+ 007064 REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION (SEE NOTE 7)       M                          0            0   4 M                         0         2
+ 007065 WATER PRESSURE                                                   PA                        -3            0  17 PA                        0         6
+ 007070 DROGUE DEPTH                                                     M                          0            0  10 M                         0         4
+ 007217 LOCATION OF PLATFORM, Z                                          M                          2  -1073741824  31 M                         2        10 
+ 008001 VERTICAL SOUNDING SIGNIFICANCE                                   FLAG TABLE 8001            0            0   7 FLAG TABLE 8001           0         3
+ 008002 VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)                     CODE TABLE 8002            0            0   6 CODE TABLE 8002           0         2
+ 008003 VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)                   CODE TABLE 8003            0            0   6 CODE TABLE 8003           0         2
+ 008004 PHASE OF AIRCRAFT FLIGHT                                         CODE TABLE 8004            0            0   3 CODE TABLE 8004           0         1
+ 008005 METEOROLOGICAL ATTRIBUTE SIGNIFICANCE                            CODE TABLE 8005            0            0   4 CODE TABLE 8005           0         2
+ 008006 OZONE VERTICAL SOUNDING SIGNIFICANCE                             FLAG TABLE 8006            0            0   9 FLAG TABLE 8006           0         3
+ 008007 DIMENSIONAL SIGNIFICANCE                                         CODE TABLE 8007            0            0   4 CODE TABLE 8007           0         2
+ 008008 RADIATION VERTICAL SOUNDING SIGNIFICANCE                         FLAG TABLE 8008            0            0   9 FLAG TABLE 8008           0         3
+ 008009 DETAILED PHASE OF FLIGHT                                         CODE TABLE 8009            0            0   4 CODE TABLE 8009           0         2
+ 008010 SURFACE QUALIFIER (TEMPERATURE DATA)                             CODE TABLE 8010            0            0   5 CODE TABLE 8010           0         2
+ 008011 METEOROLOGICAL FEATURE                                           CODE TABLE 8011            0            0   6 CODE TABLE 8011           0         2
+ 008012 LAND/SEA QUALIFIER                                               CODE TABLE 8012            0            0   2 CODE TABLE 8012           0         1
+ 008013 DAY/NIGHT QUALIFIER                                              CODE TABLE 8013            0            0   2 CODE TABLE 8013           0         1
+ 008014 QUALIFIER FOR RUNWAY VISUAL RANGE                                CODE TABLE 8014            0            0   4 CODE TABLE 8014           0         2
+ 008016 CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECA CODE TABLE 8016            0            0   3 CODE TABLE 8016           0         1
+ 008017 QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED       CODE TABLE 8017            0            0   2 CODE TABLE 8017           0         1
+ 008018 SEAWINDS LAND/ICE SURFACE TYPE                                   FLAG TABLE 8018            0            0  17 FLAG TABLE 8018           0         6
+ 008020 TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION O NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008021 TIME SIGNIFICANCE                                                CODE TABLE 8021            0            0   5 CODE TABLE 8021           0         2
+ 008022 TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 008023 FIRST ORDER STATISTICS                                           CODE TABLE 8023            0            0   6 CODE TABLE 8023           0         2
+ 008024 DIFFERENCE STATISTICS                                            CODE TABLE 8024            0            0   6 CODE TABLE 8024           0         2
+ 008025 TIME DIFFERENCE QUALIFIER                                        CODE TABLE 8025            0            0   4 CODE TABLE 8025           0         2
+ 008029 REMOTLY SENSED SURFACE TYPE                                      CODE TABLE 8029            0            0   8 CODE TABLE 8029           0         3
+ 008030 MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DA NUMERIC                    0            0  13 NUMERIC                   0         4
+ 008031 DATA CATEGORY CREX TABLE A                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008032 STAUS OF OPERATIONS                                              CODE TABLE 8032            0            0   3 CODE TABLE 8032           0         1
+ 008033 METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE                    CODE TABLE 8033            0            0   7 CODE TABLE 8033           0         3
+ 008035 TYPE OF MONITORING EXERCISE                                      CODE TABLE 8035            0            0   3 CODE TABLE 8035           0         1
+ 008036 TYPE OF CENTRE OR STATION PERFORMING MONITORING                  CODE TABLE 8036            0            0   3 CODE TABLE 8036           0         1
+ 008040 FLIGHT LEVEL SIGNIFICANCE                                        CODE TABLE 8040            0            0   6 CODE TABLE 8040           0         2
+ 008041 DATA SIGNIFICANCE                                                CODE TABLE 8041            0            0   5 CODE TABLE 8041           0         2
+ 008042 EXTENDED VERTICAL SOUNDING SIGNIFICANCE                          FLAG TABLE 8042            0            0  18 FLAG TABLE 8042           0         6
+ 008049 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 008050 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8050            0            0   4 CODE TABLE 8050           0         2
+ 008051 QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATIST CODE TABLE 8051            0            0   3 CODE TABLE 8051           0         1
+ 008052 CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS         CODE TABLE 8052            0            0   5 CODE TABLE 8052           0         2
+ 008053 DAY OF OCCURRENCE QUALIFIER                                      CODE TABLE 8053            0            0   2 CODE TABLE 8053           0         1
+ 008060 SAMPLE SCANNING MODE SIGNIFICANCE                                CODE TABLE 8060            0            0   4 CODE TABLE 8060           0         2
+ 008065 SUN-GLINT INDICATOR                                              CODE TABLE 8065            0            0   2 CODE TABLE 8065           0         1
+ 008066 SEMI-TRANSPARENCY INDICATOR                                      CODE TABLE 8066            0            0   2 CODE TABLE 8066           0         1
+ 008070 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8070            0            0   4 CODE TABLE 8070           0         2
+ 008072 PIXEL(S) TYPE                                                    CODE TABLE 8072            0            0   3 CODE TABLE 8072           0         1
+ 008074 ALTIMETER ECHO TYPE                                              CODE TABLE 8074            0            0   2 CODE TABLE 8074           0         1
+ 008075 ASCENDING/DESCENDING ORBIT QUALIFIER                             CODE TABLE 8075            0            0   2 CODE TABLE 8075           0         1
+ 008076 TYPE OF BAND                                                     CODE TABLE 8076            0            0   6 CODE TABLE 8076           0         2
+ 008081 TYPE OF EQUIPMENT                                                CODE TABLE 8081            0            0   6 CODE TABLE 8081           0         2
+ 008082 (CBS) ARTIFICIAL CORRECTION OF SENSOR HEIGHT TO ANOTHER VALUE    CODE TABLE 8082            0            0   3 CODE TABLE 8082           0         1
+ 008083 NOMINAL VALUE INDICATOR                                          FLAG TABLE 8083            0            0  15 FLAG TABLE 8083           0         5
+ 008085 BEAM IDENTIFIER                                                  CODE TABLE 8085            0            0   3 CODE TABLE 8085           0         1
+ 008193 TIME QUALIFIER                                                   CODE TABLE 8193            0            0   6 CODE TABLE 8193           0         2 
+ 008194 TOVS/ATOVS PRODUCT QUALIFIER                                     CODE TABLE 8194            0            0   4 CODE TABLE 8194           0         2 
+ 008195 DATA TYPE                                                        CODE TABLE 8195            0            0   7 CODE TABLE 8195           0         3 
+ 008200 NUMBER OF OBSERVATIONS                                           NUMERIC                    0            0   8 NUMERIC                   0         3 
+ 008222 GENERATOR SIGNIFICANCE                                           CODE TABLE 8222            0            0   4 CODE TABLE 8222           0         2 
+ 008223 LAND/ICE SURFACE FLAG                                            FLAG TABLE 8223            0            0   7 FLAG TABLE 8223           0         3 
+ 008224 LAND/SEA FRACTION                                                NUMERIC                    3            0  10 NUMERIC                   3         4 
+ 010001 HEIGHT OF LAND SURFACE                                           M                          0         -400  15 M                         0         5
+ 010002 HEIGHT                                                           M                         -1          -40  16 M                        -1         5
+ 010003 GEOPOTENTIAL                                                     M**2/S**2                 -1         -400  17 M**2/S**2                -1         6
+ 010004 PRESSURE                                                         PA                        -1            0  14 PA                       -1         5
+ 010007 HEIGHT                                                           M                          0        -1000  17 M                         0         6
+ 010008 GEOPOTENTIAL                                                     M**2/S**2                  0       -10000  20 M**2/S**2                 0         7
+ 010009 GEOPOTENTIAL HEIGHT                                              GPM                        0        -1000  17 GPM                       0         5
+ 010010 MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010011 MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL                       PA                        -1            0  14 PA                       -1         5
+ 010031 IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE M                          2  -1073741824  31 M                         2        10
+ 010032 SATELLITE DISTANCE TO EARTH'S CENTRE                             M                          1            0  27 M                         2         9
+ 010033 ALTITUDE (PLATFORM TO ELLIPSOID)                                 M                          1            0  27 M                         2         9
+ 010034 EARTH RADIUS                                                     M                          1            0  27 M                         2         9
+ 010035 EARTH'S LOCAL RADIUS OF CURVATURE                                M                          1     62000000  22 M                         1         8
+ 010036 GEOID UNDULATION (SEE NOTE 4)                                    M                          2       -15000  15 M                         2         6
+ 010040 NUMBER OF RETRIEVED LAYERS                                       NUMERIC                    0            0  10 NUMERIC                   0         4
+ 010050 STANDARD DEVIATION ALTITUDE                                      M                          2            0  16 M                         2         5
+ 010051 PRESSURE REDUCED TO MEAN SEA LEVEL                               PA                        -1            0  14 PA                       -1         5
+ 010052 ALTIMETER SETTING (QNH)                                          PA                        -1            0  14 PA                       -1         5
+ 010060 PRESSURE CHANGE                                                  PA                        -1        -1024  11 PA                       -1         4
+ 010061 3-HOUR PRESSURE CHANGE                                           PA                        -1         -500  10 PA                       -1         4
+ 010062 24-HOUR PRESSURE CHANGE                                          PA                        -1        -1000  11 PA                       -1         4
+ 010063 CHARACTERISTIC OF PRESSURE TENDENCY                              CODE TABLE 10063           0            0   4 CODE TABLE 10063          0         2
+ 010070 INDICATED AIRCRAFT ALTITUDE                                      M                          0         -400  16 M                         0         5
+ 010080 VIEWING ZENITH ANGLE                                             DEGREE                     2        -9000  15 DEGREE                    2         5
+ 010081 ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID                        M                          3            0  31 M                         3        10
+ 010082 INSTANTANEOUS ALTITUDE RATE                                      MS-1                       3       -65536  17 MS-1                      3         6
+ 010083 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010084 SQUARED OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA      DEGREE2                    2            0  16 DEGREE2                   2         5
+ 010085 MEAN SEA SURFACE HEIGHT                                          M                          3      -131072  18 M                         3         6
+ 010086 GEOID'S HEIGHT                                                   M                          3      -131072  18 M                         3         6
+ 010087 OCEAN DEPTH/LAND ELEVATION                                       M                          1      -131072  18 M                         3         6
+ 010088 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 1                    M                          3       -32768  16 M                         3         5
+ 010089 TOTAL GEOCENTRIC OCEAN TIDE HEIGHT SOLUTION 2                    M                          3       -32768  16 M                         3         5
+ 010090 LONG PERIOD  TIDE HEIGHT                                         M                          3       -32768  16 M                         3         5
+ 010091 TIDAL LOADING HEIGHT                                             M                          3       -32768  16 M                         3         5
+ 010092 SOLID EARTH TIDE HEIGHT                                          M                          3       -32768  16 M                         3         5
+ 010093 GEOCENTRIC POLE TIDE HEIGHT                                      M                          3       -32768  16 M                         3         5
+ 010095 HEIGHT OF ATMOSPHERE USED                                        M                          0            0  16 M                         0         5
+ 011001 WIND DIRECTION                                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011002 WIND SPEED                                                       M/S                        1            0  12 M/S                       1         4
+ 011003 U-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011004 V-COMPONENT                                                      M/S                        1        -4096  13 M/S                       1         4
+ 011005 W-COMPONENT                                                      PA/S                       1         -512  10 PA/S                      1         4
+ 011006 W-COMPONENT                                                      M/S                        2        -4096  13 M/S                       2         4
+ 011010 WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011011 WIND DIRECTION AT 10 M                                           DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011012 WIND SPEED AT 10 M                                               M/S                        1            0  12 M/S                       1         4
+ 011013 WIND DIRECTION AT 5 M                                            DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011014 WIND SPEED AT 5 M                                                M/S                        1            0  12 M/S                       1         4
+ 011016 EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011017 EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND              DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011019 STEADINESS OF WIND (6)                                           %                          0            0   7 %                         0         3
+ 011021 RELATIVE VORTICITY                                               1/S                        9       -65536  17 1/S                       9         6
+ 011022 DIVERGENCE                                                       1/S                        9       -65536  17 1/S                       9         6
+ 011023 VELOCITY POTENTIAL                                               M**2/S                    -2       -65536  17 M**2/S                   -2         6
+ 011030 EXTENDED DEGREE OF TURBULENCE                                    CODE TABLE 11030           0            0   6 CODE TABLE                0         2
+ 011031 DEGREE OF TURBULENCE                                             CODE TABLE 11031           0            0   4 CODE TABLE 11031          0         2
+ 011032 HEIGHT OF BASE OF TURBULENCE                                     M                         -1          -40  16 M                        -1         5
+ 011033 HEIGHT OF TOP OF TURBULENCE                                      M                         -1          -40  16 M                        -1         5
+ 011034 VERTICAL GUST VELOCITY                                           M/S                        1        -1024  11 M/S                       1         4
+ 011035 VERTICAL GUST ACCELERATION                                       M/S**2                     2        -8192  14 M/S**2                    2         5
+ 011036 MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED                   M/S                        1            0  10 M/S                       1         4
+ 011037 TURBULENCE INDEX                                                 CODE TABLE 11037           0            0   6 CODE TABLE 11037          0         2
+ 011038 TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE                 CODE TABLE 11038           0            0   5 CODE TABLE 11038          0         2
+ 011039 EXTENDED TIME OF OCCURRENCE OF PEAK  EDDY DISSIPATION RATE       CODE TABLE 11039           0            0   6 CODE TABLE 11039          0         2
+ 011040 MAXIMUM WIND SPEED (MEAN WIND)                                   M/S                        1            0  12 M/S                       1         4
+ 011041 MAXIMUM WIND GUST SPEED                                          M/S                        1            0  12 M/S                       1         4
+ 011042 MAXIMUM WIND SPEED (10-MIN MEAN WIND)                            M/S                        1            0  12 M/S                       1         4
+ 011043 MAXIMUM WIND GUST DIRECTION                                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011044 MEAN WIND DIRECTION FOR SURFACE - 1500 M (5000 FEET)             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011045 MEAN WIND SPEED FOR SURFACE - 1500 M (5000 FEET)                 M/S                        1            0  12 M/S                       1         4
+ 011046 MAXIMUM INSTANTANEOUS WIND SPEED                                 M/S                        1            0  12 M/S                       1         4
+ 011047 MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES                 M/S                        1            0  12 M/S                       1         4
+ 011049 STANDARD DEVIATION OF WIND DIRECTION                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011050 STANDARD DEVIATION OF HORIZONTAL WIND SPEED                      M/S                        1            0  12 M/S                       1         4
+ 011051 STANDARD DEVIATION OF VERTICAL WIND SPEED                        M/S                        1            0   8 M/S                       1         3
+ 011052 FORMAL UNCERTAINTY IN WIND SPEED                                 M/S                        2            0  13 M/S                       2         5
+ 011053 FORMAL UNCERTAINTY IN WIND DIRECTION                             DEGREE TRUE                2            0  15 DEGREE TRUE               2         5
+ 011054 MEAN WIND DIRECTION FOR 1500 M - 3000 M                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 011055 MEAN WIND SPEED FOR 1500 M - 3000 M                              M/S                        1            0  12 M/S                       1         4
+ 011061 ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW                          M/S                        1            0  12 M/S                       1         4
+ 011062 ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE                          M/S                        1            0  12 M/S                       1         4
+ 011070 DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 011071 TURBULENT VERTICAL MOMENTUM FLUX                                 M**2/S**2                  3         -128  14 M**2/S**2                 3         5
+ 011072 TURBULENT VERTICAL BUOYANCY FLUX                                 KM/S                       3         -128  11 KM/S                      3         4
+ 011073 TURBULENT KINETIC ENERGY                                         M**2/S**2                  2        -1024  13 M**2/S**2                 2         4
+ 011074 DISSIPATION ENERGY                                               M**2/S**2                  2        -1024  10 M**2/S**2                 2         4
+ 011075 MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011076 PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)                M**(2/3)/S                 2            0   8 M**(2/3)/S                2         3
+ 011077 REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE   S                          0            0  12 S                         0         4
+ 011081 MODEL WIND DIRECTION AT 10M                                      DEGREE TRUE                2            0  16 DEGREE TRUE               2         5
+ 011082 MODEL WIND SPEED AT 10M                                          M/S                        2            0  14 M/S                       2         4
+ 011095 U COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011096 V COMPONENT OF THE MODEL WIND VECTOR                             M/S                        1        -4096  13 M/S                       1         4
+ 011230 MAXIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011231 MEAN WIND SPEED                                                  M/S                        1        -4096  13 M/S                       1         4^M 
+ 011232 MINIMUM MEAN WIND SPEED                                          M/S                        1        -4096  13 M/S                       1         4^M 
+ 011233 HIGHEST GUST DURING THE 10 MINUTE PERIOD PRECEDING OBSERVATION   M/S                        1        -4096  13 M/S                       1         4^M 
+ 012001 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          1            0  12 C                         1         3
+ 012002 WET-BULB TEMPERATURE                                             K                          1            0  12 C                         1         3
+ 012003 DEW-POINT TEMPERATURE                                            K                          1            0  12 C                         1         3
+ 012004 DRY-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012005 WET-BULB TEMPERATURE AT 2 M                                      K                          1            0  12 C                         1         3
+ 012006 DEW-POINT TEMPERATURE AT 2 M                                     K                          1            0  12 C                         1         3
+ 012007 VIRTUAL TEMPERATURE                                              K                          1            0  12 C                         1         3
+ 012011 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012012 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          1            0  12 C                         1         3
+ 012013 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012014 MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012015 MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS                        K                          1            0  12 C                         1         3
+ 012016 MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012017 MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS                        K                          1            0  12 C                         1         3
+ 012021 MAXIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012022 MINIMUM TEMPERATURE AT 2M                                        K                          2            0  16 C                         2         4
+ 012030 SOIL TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012049 TEMPERATURE CHANGE OVER SPECIFIED PERIOD                         K                          0          -30   6 C                         0         2
+ 012051 STANDARD DEVIATION TEMPERATURE                                   K                          1            0  10 C                         1         3
+ 012052 HIGHEST DAILY MEAN TEMPERATURE                                   K                          1            0  12 C                         1         3
+ 012053 LOWEST DAILY MEAN TEMPERATURE                                    K                          1            0  12 C                         1         3
+ 012061 SKIN TEMPERATURE                                                 K                          1            0  12 C                         1         3
+ 012062 EQUIVALENT BLACK BODY TEMPERATURE                                K                          1            0  12 C                         1         3
+ 012063 BRIGHTNESS TEMPERATURE                                           K                          1            0  12 C                         1         3
+ 012064 INSTRUMENT TEMPERATURE                                           K                          1            0  12 K                         1         4
+ 012065 STANDARD DEVIATION BRIGHTNESS TEMPERATURE                        K                          1            0  12 K                         1         4
+ 012070 WARM LOAD TEMPERATURE                                            K                          2            0  16 K                         2         5
+ 012071 COLDEST CLUSTER TEMPERATURE                                      K                          1            0  12 K                         1         4
+ 012072 RADIANCE                                                         WM**(-2)SR**(-1)           6            0  31 WM**(-2)SR**(-1)          6         9
+ 012073 TEMPERATURE                                                      K                          2            0  16 K                         2         5
+ 012075 SPECTRAL RADIANCE                                                WM**(-3)SR**(-1)          -3            0  16 WM**(-3)SR**(-1)         -3         5
+ 012076 RADIANCE                                                         WM**(-2)SR**(-1)           3            0  16 WM**(-2)SR**(-1)          3         5
+ 012101 TEMPERATURE/DRY-BULB TEMPERATURE                                 K                          2            0  16 C                         2         4
+ 012102 WET-BULB TEMPERATURE                                             K                          2            0  16 C                         2         4
+ 012103 DEW-POINT TEMPERATURE                                            K                          2            0  16 C                         2         4
+ 012104 DRY-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012105 WEB-BULB TEMPERATURE AT 2M                                       K                          2            0  16 C                         2         4
+ 012106 DEW-POINT TEMPERATURE AT 2M                                      K                          2            0  16 C                         2         4
+ 012107 VIRTUAL TEMPERATURE                                              K                          2            0  16 C                         2         4
+ 012111 MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012112 MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED         K                          2            0  16 C                         2         4
+ 012113 GROUND MINIMUM TEMPERATURE, PAST 12 HOURS                        K                          2            0  16 C                         2         4
+ 012114 MAXIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012115 MINIMUM TEMPERATURE AT 2M, PAST 12 HOURS                         K                          2            0  16 C                         2         4
+ 012116 MAXIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012117 MINIMUM TEMPERATURE AT 2M, PAST 24 HOURS                         K                          2            0  16 C                         2         4
+ 012118 MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS           K                          2            0  16 C                         2         4
+ 012119 MINIMUM  TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS          K                          2            0  16 C                         2         4
+ 012121 GROUND MINIMUM TEMPERATURE                                       K                          2            0  16 C                         2         4
+ 012122 GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT                K                          2            0  16 C                         2         4
+ 012130 SOIL TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012151 STANDARD DEVIATION OF DAILY MEAN TEMPERATURE                     K                          2            0  12 C                         2         4
+ 012152 HIGHEST DAILY MEAN TEMPERATURE                                   K                          2            0  16 C                         2         4
+ 012153 LOWEST DAILY MEAN TEMPERATURE                                    K                          2            0  16 C                         2         4
+ 012161 SKIN TEMPERATURE                                                 K                          2            0  16 C                         2         4
+ 012162 EQUIVALENT BLACK BODY TEMPERATURE                                K                          2            0  16 C                         2         4
+ 012163 BRIGHTNESS TEMPERATURE                                           K                          2            0  16 C                         2         4
+ 012164 INSTRUMENT TEMPERATURE                                           K                          2            0  16 K                         2         5
+ 012171 COLDEST CLUSTER TEMPERATURE                                      K                          2            0  16 K                         2         5
+ 012180 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012181 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR              K                          2            0  16 K                         2         5
+ 012182 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR             K                          2            0  16 K                         2         5
+ 012183 AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012184 AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW         K                          2            0  16 K                         2         5
+ 012185 AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW        K                          2            0  16 K                         2         5
+ 012186 MEAN NADIR SEA SURFACE TEMPERATURE                               K                          2            0  16 K                         2         5
+ 012187 MEAN DUAL VIEW SEA SURFACE TEMPERATURE                           K                          2            0  16 K                         2         5
+ 012188 INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 012189 INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR                      K                          2            0  16 K                         2         5
+ 013001 SPECIFIC HUMIDITY                                                KG/KG                      5            0  14 KG/KG                     5         5
+ 013002 MIXING RATIO                                                     KG/KG                      5            0  14 KG/KG                     5         5
+ 013003 RELATIVE HUMIDITY                                                %                          0            0   7 %                         0         3
+ 013004 VAPOUR PRESSURE                                                  PA                        -1            0  10 PA                       -1         4
+ 013005 VAPOUR DENSITY                                                   KG/M**3                    3            0   7 KG/M**3                   3         3
+ 013006 MIXING HEIGHTS                                                   M                         -1          -40  16 M                        -1         5
+ 013007 MINIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013008 MAXIMUM RELATIVE HUMIDITY                                        %                          0            0   7 %                         0         3
+ 013009 RELATIVE HUMIDITY                                                %                          1        -1000  12 %                         1         4
+ 013011 TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT                       KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013012 DEPTH OF FRESH SNOW                                              M                          2           -2  12 M                         2         4
+ 013013 TOTAL SNOW DEPTH                                                 M                          2           -2  16 M                         2         5
+ 013014 RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)                KG/(M**2)S                 4            0  12 KG/(M**2)S                4         4
+ 013015 SNOWFALL  (AVERAGED RATE)                                        M/S                        7            0  12 M/S                       7         4
+ 013016 PRECIPITABLE WATER                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013019 TOTAL PRECIPITATION PAST 1 HOUR                                  KG/M**2                    1           -1  14 KG/M**2                   1         4
+ 013020 TOTAL PRECIPITATION PAST 3 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013021 TOTAL PRECIPITATION PAST 6 HOURS                                 KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013022 TOTAL PRECIPITATION PAST 12 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013023 TOTAL PRECIPITATION PAST 24 HOURS                                KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013031 EVAPOTRANSPIRATION                                               KG/M**2                    0            0   7 KG/M**2                   0         3
+ 013032 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0   8 KG/M**2                   1         3
+ 013033 EVAPORATION/EVAPOTRANSPIRATION                                   KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013038 SUPERADIABATIC INDICATOR                                         CODE TABLE 13038           0            0   2 CODE TABLE 13038          0         1
+ 013039 TERRAIN TYPE (ICE/SNOW)                                          CODE TABLE 13039           0            0   3 CODE TABLE 13039          0         1
+ 013040 SURFACE FLAG                                                     CODE TABLE 13040           0            0   4 CODE TABLE 13040          0         2
+ 013041 PASQUILL-GIFFORD STABILITY CATEGORY                              CODE TABLE 13041           0            0   4 CODE TABLE 13041          0         2
+ 013042 PARCEL LIFTED INDEX (TO 500 HPA)                                 K                          0          -20   6 K                         0         2
+ 013043 BEST LIFTED INDEX (TO 500 HPA)                                   K                          0          -20   6 K                         0         2
+ 013044 K INDEX                                                          K                          0          -30   8 K                         0         3
+ 013045 KO INDEX                                                         K                          0          -30   8 K                         0         3
+ 013046 MAXIMUM BUOYANCY                                                 K                          0          -30   8 K                         0         3
+ 013047 MODIFIED SHOWALTER STABILITY INDEX                               K                          0          -60   6 C                         0         2
+ 013051 FREQUENCY GROUP, PRECIPITATION                                   CODE TABLE 13051           0            0   4 CODE TABLE 13051          0         2
+ 013052 HIGHEST DAILY AMOUNT OF PRECIPITATION                            KG/M**2                    1           -1  14 KG/M**2                   1         5
+ 013055 INTENSITY OF PRECIPITATION                                       KG/(M**2)S                 4            0   8 MM H-1                    1         3
+ 013056 CHARACTER AND INTENSITY OF PRECIPITATION                         CODE TABLE 13056           0            0   4 CODE TABLE 13056          0         2
+ 013057 TIME OF BEGINNING OR END OF PRECIPITATION                        CODE TABLE 13057           0            0   4 CODE TABLE 13057          0         2
+ 013058 SIZE OF PRECIPITATING ELEMENT                                    M                          4            0   7 MM                        1         3
+ 013059 NUMBER OF FLASHES (THUNDERSTORM)                                 NUMERIC                    0            0   7 NUMERIC                   0         3
+ 013060 TOTAL ACCUMULATED PRECIPITATION                                  KG/M**2                    1           -1  17 KG/M**2                   1         5
+ 013071 UPSTREAM WATER LEVEL                                             M                          2            0  14 M                         2         5
+ 013072 DOWNSTREAM WATER LEVEL                                           M                          2            0  14 M                         2         4
+ 013073 MAXIMUM WATER LEVEL                                              M                          2            0  14 M                         2         4
+ 013080 WATER PH                                                         pH                         1            0  10 pH                        1         3
+ 013081 WATER CONDUCTIVITY                                               S M-1                      3            0  14 S M-1                     3         4
+ 013082 WATER TEMPERATURE                                                K                          1            0  12 K                         1         4
+ 013083 DISSOLVED OXYGEN                                                 KG/M**3                    6            0  15 KG/M**3                   6         5
+ 013084 TURBIDITY                                                        LUMEN                      0            0  14 LUMEN                     0         4
+ 013085 OXYDATION REDUCTION POTENTIAL (ORP)                              V                          3            0  14 V                         3         4
+ 013090 RADIOMETER WATER VAPOUR CONTENT                                  KG/M**2                    1            0  10 KG/M**2                   1         4
+ 013091 RADIOMETER LIQUID CONTENT                                        KG/M**2                    2            0   8 KG/M**2                   2         3
+ 013093 CLOUD OPTICAL THICKNESS                                          NUMERIC                    0            0   8 NUMERIC                   0         3
+ 013095 TOTAL COLUMN WATER VAPOUR                                        KG/M**2                    4            0  19 KG/M**2                   4         6
+ 013096 MWR WATER VAPOUR CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013097 MWR LIQUID WATER CONTENT                                         KG/M**2                    2            0  14 KG/M**2                   2         4
+ 013098 INTEGRATED WATER VAPOUR DENSITY                                  KG/M**2                    8            0  30 KG/M**2                   8        10   
+ 014001 LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                    J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014002 LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED            J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014003 SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS                   J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014004 SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED           J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014011 NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014012 NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014013 NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS               J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014014 NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED       J/M**2                    -3        -2048  12 J/M**2                   -3         4
+ 014015 NET RADIATION, INTEGRATED OVER 24 HOURS                          J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014016 NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED                  J/M**2                    -4       -16384  15 J/M**2                   -4         5
+ 014017 INSTANTANEOUS LONG-WAVE RADIATION (SEE NOTE 6)                   W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014018 INSTANTANEOUS SHORT-WAVE RADIATION (SEE NOTE 6)                  W/M**2                    -3        -2048  12 W/M**2                   -3         4
+ 014019 SURFACE ALBEDO                                                   %                          0            0   7 %                         0         3
+ 014020 GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014021 GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014022 DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS                J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014023 DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED        J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014024 DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS                 J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014025 DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED         J/M**2                    -4            0  15 J/M**2                   -4         5
+ 014026 ALBEDO AT THE TOP OF CLOUDS                                      %                          0            0   7 %                         0         3
+ 014027 ALBEDO                                                           %                          0            0   7 %                         0         3
+ 014028 GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014029 DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD  J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014030 DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S J/M**2                    -2            0  16 J/M**2                   -2         5
+ 014031 TOTAL SUNSHINE                                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014032 TOTAL SUNSHINE                                                   HOUR                       0            0  10 HOUR                      0         4
+ 014033 TOTAL SUNSHINE                                                   %                          0            0   9 %                         0         3
+ 014034 SUNSHINE OVER PERIOD SPECIFIED                                   MINUTE                     0            0  11 MINUTE                    0         4
+ 014042 BI-DIRECTIONAL REFLECTANCE                                       %                          0            0   7 %                         0         3
+ 014045 CHANNEL RADIANCE                                                 (W/M**2)*(1/SR)*CM         0            0  11 WM-2SR-1CM-1              0         4
+ 014046 SCALED IASI RADIANCE                                             (W/M**2)*(1/SR)*(1/M)      0        -5000  16 (W/M**2)*(1/SR)*(1/M)     0         5 
+ 014047 SCALED MEAN AVHRR RADIANCE                                       (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014048 SCALED STANDARD DEVIATION RADIANCE                               (W/M**2)*(1/SR)*(1/M)      0            0  31 (W/M**2)*(1/SR)*(1/M)     0        10
+ 014050 EMISSIVITY (SEE NOTE 5)                                          %                          1            0  10 %                         1         4
+ 014051 DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR                 J/M**2                    -3            0  14 JM-2                     -3         4
+ 014055 SOLAR ACTIVITY INDEX                                             NUMERIC                    0       -32768  16 NUMERIC                   0         5
+ 014061 (VAL) INSTANTANEOUS LONG-WAVE RADIATION                          W/M**2                     0         -512  10 W/M**2                    0         4
+ 014062 (VAL) INSTANTANEOUS SHORT-WAVE RADIATION                         W/M**2                     0        -2048  12 W/M**2                    0         4
+ 015001 TOTAL OZONE                                                      DU                         0            0  10 DU                        0         4
+ 015002 AIR MASS (SLANT PATH AT 22 KM)                                   NUMERIC                    2            0  10 NUMERIC                   2         3
+ 015003 MEASURED OZONE PARTIAL PRESSURE (SOUNDING)                       PA                         4            0   9 NBAR                      0         3
+ 015004 OZONE SOUNDING CORRECTION FACTOR                                 NUMERIC                    3            0  11 NUMERIC                   3         4
+ 015005 OZONE P                                                          DU                         0            0  10 DU                        0         3
+ 015011 LOG 10 OF INTEGRATED ELECTRON DENSITY                            LOG (1/M2)                 3        14000  13 LOG (M-2)                 3         4
+ 015015 MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION            NUMERIC                    0            0  31 NUMERIC                   0        10
+ 015020 INTEGRATED 03 DENSITY                                            KG/M**2                    8            0  21 KG/M**2                   8         7
+ 015025 TYPE OF POLLUTANT                                                CODE TABLE 15025           0            0   4 CODE TABLE 15025          0         2
+ 015026 CONCENTRATION OF POLLUTANT                                       MOLMOL-1                   9            0   9 MOLMOL-1                  9         3
+ 015027 CONCENTRATION OF POLLUTANT                                       KG/M3                      9            0  10 KG/M3                     9         4
+ 015031 ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL                       M                          4        10000  15 M                         4         5
+ 015032 ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY                        M                          4            0  10 M                         4         4
+ 015033 DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN     M                          5       -10000  15 M                         5         5
+ 015034 ESTIMATED ERROR IN PATH DELAY DIFFERENCE                         M                          5            0  14 M                         5         5
+ 015035 COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR               M                          4            0  14 M                         4         5
+ 015036 ATMOSPHERIC REFRACTIVITY (SEE NOTE 5)                            N-UNITS                    3            0  19 N-UNITS                   3         6
+ 015037 BENDING ANGLE                                                    RADIANS                    8      -100000  23 RADIANS                   8         7
+ 019001 TYPE OF SYNOPTIC FEATURE                                         CODE TABLE 19001           0            0   6 CODE TABLE 19001          0         2
+ 019002 EFFECTIVE RADIUS OF FEATURE                                      M                         -2            0  12 M                        -2         4
+ 019003 WIND SPEED THRESHOLD                                             M/S                        0            0   8 M/S                       0         3
+ 019004 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD     M                         -2            0  12 M                        -2         4
+ 019005 DIRECTION OF MOTION OF FEATURE                                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 019006 SPEED OF MOTION OF FEATURE                                       M/S                        2            0  14 M/S                       2         5
+ 019007 EFFECTIVE RADIUS OF FEATURE                                      M                         -3            0  12 M                        -3         4
+ 019008 VERTICAL EXTENT OF CIRCULATION                                   CODE TABLE 19008           0            0   3 CODE TABLE 19008          0         1
+ 019009 EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LA M                         -3            0  12 M                        -3         4
+ 019010 METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE               CODE TABLE 19010           0            0   4 CODE TABLE 19010          0         2
+ 019100 TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE  CODE TABLE 19100           0            0   4 CODE TABLE 19100          0         2
+ 019101 ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE   CODE TABLE 19101           0            0   4 CODE TABLE 19101          0         2
+ 019102 SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE          CODE TABLE 19102           0            0   3 CODE TABLE 19102          0         1
+ 019103 DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE        CODE TABLE 19103           0            0   4 CODE TABLE 19103          0         2
+ 019104 CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES             CODE TABLE 19104           0            0   4 CODE TABLE 19104          0         2
+ 019105 DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE           CODE TABLE 19105           0            0   4 CODE TABLE 19105          0         2
+ 019106 IDENTIFICATION NUMBER OF TROPICAL CYCLONE                        NUMERIC                    0            0   7 NUMERIC                   0         3
+ 019107 TIME INTERVAL OF THE TROPICAL CYCLONE ANALYSIS                   CODE TABLE 19107           0            0   4 CODE TABLE 19107          0         2
+ 019108 ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE        CODE TABLE 19108           0            0   3 CODE TABLE 19108          0         1
+ 019109 MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE      CODE TABLE 19109           0            0   4 CODE TABLE 19109          0         2
+ 019110 APPARENT 24-HOUR CHANGE IN INTENSITY OF TROPICAL CYCLONE         CODE TABLE 19110           0            0   4 CODE TABLE 19110          0         2
+ 019111 CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE            NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019112 DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019113 CLOUD PATTERN TYPE OF THE DT- NUMBER                             CODE TABLE 19113           0            0   4 CODE TABLE 19113          0         2
+ 019114 MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE     NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019115 TREND OF PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)         NUMERIC                    1          -30   6 NUMERIC                   1         2
+ 019116 PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE             NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019117 CLOUD PICTURE TYPE OF THE PT- NUMBER                             CODE TABLE 19117           0            0   3 CODE TABLE 19117          0         1
+ 019118 FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE                NUMERIC                    1            0   7 NUMERIC                   1         3
+ 019119 TYPE OF THE FINAL T-NUMBER                                       CODE TABLE 19119           0            0   3 CODE TABLE 19119          0         1
+ 019150 TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)          CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020001 HORIZONTAL VISIBILITY                                            M                         -1            0  13 M                        -1         4
+ 020002 VERTICAL VISIBILITY                                              M                         -1            0   7 M                        -1         3
+ 020003 PRESENT WEATHER (SEE NOTE 1)                                     CODE TABLE 20003           0            0   9 CODE TABLE 20003          0         3
+ 020004 PAST WEATHER (1) (SEE NOTE 2)                                    CODE TABLE 20004           0            0   5 CODE TABLE 20004          0         2
+ 020005 PAST WEATHER (2) (SEE NOTE 2)                                    CODE TABLE 20005           0            0   5 CODE TABLE 20005          0         2
+ 020008 CLOUD DISTRIBUTION FOR AVIATION                                  CODE TABLE 20008           0            0   5 CODE TABLE 20008          0         2
+ 020009 GENERAL WEATHER INDICATOR (TAF/METAR)                            CODE TABLE 20009           0            0   4 CODE TABLE 20009          0         2
+ 020010 CLOUD COVER (TOTAL)                                              %                          0            0   7 %                         0         3
+ 020011 CLOUD AMOUNT                                                     CODE TABLE 20011           0            0   4 CODE TABLE 20011          0         2
+ 020012 CLOUD TYPE                                                       CODE TABLE 20012           0            0   6 CODE TABLE 20012          0         2
+ 020013 HEIGHT OF BASE OF CLOUD                                          M                         -1          -40  11 M                        -1         4
+ 020014 HEIGHT OF TOP OF CLOUD                                           M                         -1          -40  11 M                        -1         4
+ 020015 PRESSURE AT BASE OF CLOUD                                        PA                        -1            0  14 PA                       -1         5
+ 020016 PRESSURE AT TOP OF CLOUD                                         PA                        -1            0  14 PA                       -1         5
+ 020017 CLOUD TOP DESCRIPTION                                            CODE TABLE 20017           0            0   4 CODE TABLE 20017          0         2
+ 020018 TENDENCY OF RUNWAY VISUAL RANGE                                  CODE TABLE 20018           0            0   2 CODE TABLE 20018          0         1
+ 020019 SIGNIFICANT PRESENT OR FORECAST WEATHER                          CCITTIA5                   0            0  72 CHARACTER                 0         9
+ 020020 SIGNIFICANT RECENT WEATHER PHENOMENA                             CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 020021 TYPE OF PRECIPITATION                                            FLAG TABLE 20021           0            0  30 FLAG TABLE 20021          0        10
+ 020022 CHARACTER OF PRECIPITATION                                       CODE TABLE 20022           0            0   4 CODE TABLE 20022          0         2
+ 020023 OTHER WEATHER PHENOMENA                                          FLAG TABLE 20023           0            0  18 FLAG TABLE 20023          0         6
+ 020024 INTENSITY OF PHENOMENA                                           CODE TABLE 20024           0            0   3 CODE TABLE 20024          0         1
+ 020025 OBSCURATION                                                      FLAG TABLE 20025           0            0  21 FLAG TABLE 20025          0         7
+ 020026 CHARACTER OF OBSCURATION                                         CODE TABLE 20026           0            0   4 CODE TABLE 20026          0         2
+ 020027 PHENOMENA OCCURRENCE                                             FLAG TABLE 20027           0            0   9 FLAG TABLE 20027          0         3
+ 020029 RAIN FLAG                                                        CODE TABLE 20029           0            0   2 CODE TABLE 20029          0         1
+ 020031 ICE DEPOSIT (THICKNESS)                                          M                          2            0   7 M                         2         3
+ 020032 RATE OF ICE ACCRETION                                            CODE TABLE 20032           0            0   3 CODE TABLE 20032          0         1
+ 020033 CAUSE OF ICE ACCRETION                                           FLAG TABLE 20033           0            0   4 FLAG TABLE 20033          0         2
+ 020034 SEA ICE CONCENTRATION                                            CODE TABLE 20034           0            0   5 CODE TABLE 20034          0         2
+ 020035 AMOUNT AND TYPE OF ICE                                           CODE TABLE 20035           0            0   4 CODE TABLE 20035          0         2
+ 020036 ICE SITUATION                                                    CODE TABLE 20036           0            0   5 CODE TABLE 20036          0         2
+ 020037 ICE DEVELOPMENT                                                  CODE TABLE 20037           0            0   5 CODE TABLE 20037          0         2
+ 020038 BEARING OF ICE EDGE (SEE NOTE 3)                                 DEGREE TRUE                0            0  12 DEGREE TRUE               0         3
+ 020039 ICE DISTANCE                                                     M                         -1            0  13 M                        -1         4
+ 020040 EVOLUTION OF DRIFT OF SNOW                                       CODE TABLE 20040           0            0   4 CODE TABLE 20040          0         2
+ 020041 AIRFRAME ICING                                                   CODE TABLE 20041           0            0   4 CODE TABLE 20041          0         2
+ 020042 AIRFRAME ICING PRESENT                                           CODE TABLE 20042           0            0   2 CODE TABLE 20042          0         1
+ 020043 PEAK LIQUID WATER CONTENT                                        KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020044 AVERAGE LIQUID WATER CONTENT                                     KG/M**3                    4            0   7 KG/M**3                   4         2
+ 020045 SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS                       CODE TABLE 20045           0            0   2 CODE TABLE 20045          0         2
+ 020050 CLOUD INDEX                                                      CODE TABLE 20050           0            0   8 CODE TABLE 20050          0         3
+ 020051 AMOUNT OF LOW CLOUDS                                             %                          0            0   7 %                         0         3
+ 020052 AMOUNT OF MIDDLE CLOUDS                                          %                          0            0   7 %                         0         3
+ 020053 AMOUNT OF HIGH CLOUDS                                            %                          0            0   7 %                         0         3
+ 020054 TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING                      DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 020055 STATE OF SKY IN TROPICS                                          CODE TABLE 20055           0            0   4 CODE TABLE 20055          0         2
+ 020056 CLOUD PHASE                                                      CODE TABLE 20056           0            0   3 CODE TABLE 20056          0         1
+ 020061 RUNWAY VISUAL RANGE (RVR)                                        M                          0            0  12 M                         0         4
+ 020062 STATE OF THE GROUND (WITH OR WITHOUT SNOW)                       CODE TABLE 20062           0            0   5 CODE TABLE 20062          0         2
+ 020063 SPECIAL PHENOMENA                                                CODE TABLE 20063           0            0  10 CODE TABLE 20063          0         4
+ 020065 SNOW COVER (SEE NOTE 4)                                          %                          0            0   7 %                         0         3
+ 020066 MAXIMUM DIAMETER OF HAILSTONES                                   M                          3            0   8 M                         3         3
+ 020067 DIAMETER OF DEPOSIT                                              M                          3            0   9 M                         3         3
+ 020070 MINIMUM NUMBER OF ATMOSPHERICS                                   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 020071 ACCURACY OF FIX AND RATE OF ATMOSPHERICS                         CODE TABLE 20071           0            0   4 CODE TABLE 20071          0         2
+ 020081 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3
+ 020082 AMOUNT SEGMENT CLOUD FREE                                        %                          0            0   7 %                         0         3
+ 020083 AMOUNT OF SEGMENT COVERED BY SCENE                               %                          0            0   7 %                         0         3
+ 020090 SPECIAL CLOUDS                                                   CODE TABLE 20090           0            0   4 CODE TABLE 20090          0         2
+ 020095 ICE PROBABILITY                                                  NUMERIC                    3            0  10 NUMERIC                   3         4
+ 020096 ICE AGE ("A" PARAMETER)                                          dB                         2        -4096  13 dB                        2         4
+ 020101 LOCUST (ACRIDIAN) NAME                                           CODE TABLE 20101           0            0   4 CODE TABLE 20101          0         2
+ 020102 LOCUST (MATURITY) COLOR                                          CODE TABLE 20102           0            0   4 CODE TABLE 20102          0         2
+ 020103 STAGE OF DEVELOPMENT OF LOCUSTS                                  CODE TABLE 20103           0            0   4 CODE TABLE 20103          0         2
+ 020104 ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS                   CODE TABLE 20104           0            0   4 CODE TABLE 20104          0         2
+ 020105 SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARMCODE TABLE 20105           0            0   4 CODE TABLE 20105          0         2
+ 020106 LOCUST POPULATION DENSITY                                        CODE TABLE 20106           0            0   4 CODE TABLE 20106          0         2
+ 020107 DIRECTION OF MOVEMENTS OF LOCUST SWARM                           CODE TABLE 20107           0            0   4 CODE TABLE 20107          0         2
+ 020108 EXTENT OF VEGETATION                                             CODE TABLE 20108           0            0   4 CODE TABLE 20108          0         2
+ 020193 CLOUD AMOUNT IN SEGMENT                                          %                          0            0   7 %                         0         3 
+ 020194 AMOUNT OF SEGMENT CLOUD FREE                                     %                          0            0   7 %                         0         3 
+ 020215 PRESSURE AT THE BASE OF CLOUD                                    PA                        -1            0  14 PA                       -1         5 
+ 021001 HORIZONTAL REFLECTIVITY                                          dB                         0          -64   7 dB                        0         3
+ 021002 VERTICAL REFLECTIVITY                                            dB                         0          -64   7 dB                        0         3
+ 021003 DIFFERENTIAL REFLECTIVITY                                        dB                         1           -5   7 dB                        1         3
+ 021005 LINEAR DEPOLARISATION RATIO                                      dB                         0          -65   6 dB                        0         2
+ 021006 CIRCULAR DEPOLARISATION RATIO                                    dB                         0          -65   6 dB                        0         2
+ 021011 DOPPLER MEAN VELOCITY IN X-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021012 DOPPLER MEAN VELOCITY IN Y-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021013 DOPPLER MEAN VELOCITY IN Z-DIRECTION                             M/S                        0         -128   8 M/S                       0         3
+ 021014 DOPPLER MEAN VELOCITY (RADIAL)                                   M/S                        1        -4096  13 M/S                       1         4
+ 021017 DOPPLER VELOCITY SPECTRAL WIDTH                                  M/S                        1            0   8 M/S                       1         3
+ 021021 ECHO TOPS                                                        M                         -3            0   4 M                        -3         2
+ 021030 SIGNAL TO NOISE RATIO                                            dB                         0          -32   8 dB                        0         3
+ 021031 VERTICALLY INTEGRATED LIQUID-WATER CONTENT                       KG/M**2                    0            0   7 KG/M**2                   0         3
+ 021036 RADAR RAINFALL INTENSITY                                         M/S                        7            0  12 M/S                       7         4
+ 021041 BRIGHT-BAND HEIGHT                                               M                         -2            0   8 M                        -2         3
+ 021051 SIGNAL POWER ABOVE 1 MW                                          dB                         0         -256   8 dB                        0         3
+ 021062 BACKSCATTER                                                      dB                         2        -5000  13 dB                        2         4
+ 021063 RADIOMETRIC RESOLUTION (NOISE VALUE)                             %                          1            0  10 %                         1         4
+ 021064 CLUTTER NOISE ESTIMATE                                           NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021065 MISSING PACKET COUNTER                                           NUMERIC                    0         -127   8 NUMERIC                   0         3
+ 021066 WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA                       FLAG TABLE 21066           0            0  12 FLAG TABLE 21066          0         4
+ 021067 WIND PRODUCT CONFIDENCE DATA                                     FLAG TABLE 21067           0            0  13 FLAG TABLE 21067          0         5
+ 021068 RADAR ALTIMETER PRODUCT CONFIDENCE DATA                          FLAG TABLE 21068           0            0   8 FLAG TABLE 21068          0         3
+ 021069 SST PRODUCT CONFIDENCE DATA                                      FLAG TABLE 21069           0            0  10 FLAG TABLE 21069          0         4
+ 021070 SST PRODUCT CONFIDENCE DATA (SADIST-2)                           FLAG TABLE 21070           0            0  23 FLAG TABLE 21070          0         6
+ 021071 PEAKINESS                                                        NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021072 SATELLITE ALTIMETER CALIBRATION STATUS                           FLAG TABLE 21072           0            0   4 FLAG TABLE 21072          0         2
+ 021073 SATELLLITE ALTIMETER INSTRUMENT MODE                             FLAG TABLE 21073           0            0   9 FLAG TABLE 21073          0         3
+ 021075 IMAGE SPECTRUM INTENSITY                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021076 REPRESENTATION OF INTENSITIES                                    CODE TABLE 21076           0            0   3 CODE TABLE 21076          0         1
+ 021077 ALTITUDE CORRECTION (IONOSPHERE)                                 M                          3            0  14 M                         3         5
+ 021078 ALTITUDE CORRECTION (DRY TROPOSPHERE)                            M                          3            0   9 M                         3         3
+ 021079 ALTITUDE CORRECTION (WET TROPOSPHERE)                            M                          3         2000  10 M                         3         4
+ 021080 ALTITUDE CORRECTION (CALIBRATION CONSTANT)                       M                          3            0  11 M                         3         4
+ 021081 OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)                          M                          3            0  10 M                         3         4
+ 021082 OPEN LOOP CORRECTION (AUTO GAIN CONTROL)                         dB                         3        -3000  14 dB                        3         5
+ 021083 WARM TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021084 COLD TARGET CALIBRATION                                          NUMERIC                    0            0  16 NUMERIC                   0         5
+ 021085 ATSR SEA SURFACE TEMPERATURE ACROSS- TRACK BAND NUMBER           NUMERIC                    0            0   4 NUMERIC                   0         2
+ 021086 NUMBER OF PIXELS IN NADIR ONLY, AVERAGE                          NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021087 NUMBER OF PIXELS IN DUAL VIEW, AVERAGE                           NUMERIC                    0            0   9 NUMERIC                   0         3
+ 021088 WET BACKSCATTER                                                  dB                         2        -5000  13 dB                        2         4
+ 021091 RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT                         dB                         0         -100   8 dB                        0         3
+ 021092 RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNA dB                         0         -100   8 dB                        0         3
+ 021093 Ku BAND PEAKINESS                                                NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021094 S BAND PEAKINESS                                                 NUMERIC                    3            0  16 NUMERIC                   0         5
+ 021101 NUMBER OF VECTOR AMBIGUITIES                                     NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021102 INDEX OF SELECTED WIND VECTOR                                    NUMERIC                    0            0   3 NUMERIC                   0         1
+ 021103 TOTAL NUMBER OF SIGMA-0 MEASUREMENTS                             NUMERIC                    0            0   5 NUMERIC                   0         2
+ 021104 LIKELIHOOD COMPUTED FOR SOLUTION                                 NUMERIC                    3       -30000  15 NUMERIC                   3         5
+ 021105 NORMALIZED RADAR CROSS-SECTION                                   dB                         2       -10000  14 dB                        2         5
+ 021106 KP VARIANCE COEFFICIENT (ALPHA)                                  NUMERIC                    3            0  14 NUMERIC                   3         5
+ 021107 KP VARIANCE COEFFICIENT (BETA)                                   NUMERIC                    8            0  16 NUMERIC                   8         5
+ 021109 SEAWINDS WIND VECTOR CELL QUALITY                                FLAG TABLE 21109           0            0  17 FLAG TABLE 21109          0         6
+ 021110 NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021111 NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)              NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021112 NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021113 NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)                  NUMERIC                    0            0   6 NUMERIC                   0         2
+ 021114 KP VARIANCE COEFFICENT (GAMMA)                                   dB                         3      -140000  18 dB                        3         6
+ 021115 SEAWINDS SIGMA-0 QUALITY                                         FLAG TABLE 21115           0            0  17 FLAG TABLE 21115          0         6
+ 021116 SEAWINDS SIGMA-0 MODE                                            FLAG TABLE 21116           0            0  17 FLAG TABLE 21116          0         6
+ 021117 SIGMA-0 VARIANCE QUALITY CONTROL                                 NUMERIC                    2            0  16 NUMERIC                   2         5
+ 021118 ATTENUATION CORRECTION ON SIGMA-0                                dB                         2       -10000  14 dB                        2         5
+ 021119 WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION                    CODE TABLE 21119           0            0   6 CODE TABLE 21119          0         2
+ 021120 PROBABILITY OF RAIN                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021121 SEAWINDS NOF* RAIN INDEX                                         NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021122 ATTENUATION CORRECTION OF SIGMA-0 (FROM TB)                      dB                         2       -10000  14 dB                        2         5
+ 021123 SEAWINDS NORMALIZED RADAR CROSS SECTION                          dB                         2       -30000  15 dB                        2         5
+ 021128 NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAME NUMERIC                    0            0   8 NUMERIC                   0         3
+ 021130 SPECTRUM TOTAL ENERGY                                            NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021131 SPECTRUM MAX ENERGY                                              NUMERIC                    6            0  28 NUMERIC                   6         9
+ 021132 DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID              DEGREE                     3            0  19 DEGREE                    3         6
+ 021133 WAVE-LENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID            M                          3            0  29 M                         3         9
+ 021134 RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM                    RAD/M                      3            0  19 RAD/M                     3         6
+ 021135 REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS             NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021136 IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS        NUMERIC                    3      -524288  20 NUMERIC                   3         7
+ 021137 KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                  dB                         2       -32768  16 dB                        2         5
+ 021138 STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT              dB                         2       -32768  16 dB                        2         5
+ 021139 KU BAND NET INSTRUMENTAL CORRECTION FOR AGC                      dB                         2        -2048  12 dB                        2         4
+ 021140 S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT                   dB                         2       -32768  16 dB                        2         5
+ 021141 STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT               dB                         2       -32768  16 dB                        2         5
+ 021142 S BAND NET INSTRUMENTAL CORRECTION FOR AGC                       dB                         2        -1024  11 dB                        2         4
+ 021143 KU BAND RAIN ATTENUATION                                         dB                         2  -1073741824  31 dB                        2        10
+ 021144 ALTIMETER RAIN FLAG                                              FLAG TABLE 21144           0            0   2 FLAG TABLE 21144          0         1
+ 021150 BEAM COLLOCATION                                                 CODE TABLE 21150           0            0   2 CODE TABLE 21150          0         1
+ 021151 ESTIMATED ERROR IN SIGMA0 AT 40DEG INCIDENCE ANGLE               dB                         2            0   9 dB                        2         3
+ 021152 SLOPE AT 40DEG INCIDENCE ANGLE                                   dB/DEG                     2          -80   7 dB/DEG                    2         3
+ 021153 ESTIMATED ERROR IN SLOPE AT 40DEG INCIDENCE ANGLE                dB/DEG                     2          -40   6 dB/DEG                    2         3
+ 021154 SOIL MOISTURE SENSITIVITY                                        dB                         2            0  12 dB                        2         4
+ 021155 WIND VECTOR CELL QUALITY                                         FLAG TABLE 21155           0            0  24 FLAG TABLE 21155          0         8
+ 021156 BACKSCATTER DISTANCE                                             NUMERIC                    1        -4096  13 NUMERIC                   1         4
+ 021157 LOSS PER UNIT LENGTH OF ATMOSPHERE USED                          dB/M                      10            0  22 dB/M                     10         7
+ 021158 ASCAT kp ESTIMATE QUALITY                                        CODE TABLE 21158           0            0   2 CODE TABLE 21158          0         1
+ 021159 ASCAT SIGMA-0 USABILITY                                          CODE TABLE 21159           0            0   2 CODE TABLE 21159          0         1
+ 021160 ASCAT USE OF SYNTHETIC DATA                                      NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021161 ASCAT SYNTHETIC DATA QUALITY                                     NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021162 ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021163 ASCAT SOLAR ARRAY REFLECTION CONTAMINATION                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021164 ASCAT TELEMETRY PRESENCE AND QUALITY                             NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021165 ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE                   NUMERIC                    3            0  10 NUMERIC                   3         4
+ 021166 ASCAT LAND FRACTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 022001 DIRECTION OF WAVES                                               DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022002 DIRECTION OF WIND WAVES                                          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022003 DIRECTION OF SWELL WAVES                                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022004 DIRECTION OF CURRENT                                             DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022005 DIRECTION OF SEA SURFACE CURRENT                                 DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022011 PERIOD OF WAVES                                                  S                          0            0   6 S                         0         2
+ 022012 PERIOD OF WIND WAVES                                             S                          0            0   6 S                         0         2
+ 022013 PERIOD OF SWELL WAVES                                            S                          0            0   6 S                         0         2
+ 022021 HEIGHT OF WAVES                                                  M                          1            0  10 M                         1         4
+ 022022 HEIGHT OF WIND WAVES                                             M                          1            0  10 M                         1         4
+ 022023 HEIGHT OF SWELL WAVES                                            M                          1            0  10 M                         1         4
+ 022025 STANDARD DEVIATION WAVE HEIGHT                                   M                          2            0  10 M                         2         4
+ 022026 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT                    M                          2            0  10 M                         2         4
+ 022031 SPEED OF CURRENT                                                 M/S                        2            0  13 M/S                       2         4
+ 022032 SPEED OF SEA SURFACE CURRENT                                     M/S                        2            0  13 M/S                       2         4
+ 022035 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          2            0  14 M                         2         4
+ 022036 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          2            0  14 M                         2         4
+ 022037 TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM              M                          3       -10000  15 M                         3         5
+ 022038 TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM                M                          3       -10000  15 M                         3         5
+ 022039 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  12 M                         3         4
+ 022040 METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)        M                          3        -5000  14 M                         3         5
+ 022041 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          1            0  12 K                         1         4
+ 022042 SEA/WATER TEMPERATURE                                            K                          1            0  12 K                         1         4
+ 022043 SEA/WATER TEMPERATURE                                            K                          2            0  15 K                         2         5
+ 022044 SOUND VELOCITY                                                   M/S                        1            0  14 M/S                       1         5
+ 022045 SEA/WATER TEMPERATURE                                            K                          3            0  19 K                         3         6
+ 022049 SEA SURFACE TEMPERATURE                                          K                          2            0  15 K                         2         5
+ 022050 STANDARD DEVIATION SEA-SURFACE TEMPERATURE                       K                          2            0   8 K                         2         3
+ 022055 FLOAT CYCLE NUMBER                                               NUMERIC                    0            0  10 NUMERIC                   0         3
+ 022056 DIRECTION OF PROFILE                                             CODE TABLE 22056           0            0   2 CODE TABLE 22056          0         1
+ 022059 SEA SURFACE SALINITY                                             PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022060 LAGRANGIAN DRIFTER DROGUE STATUS                                 CODE TABLE 22060           0            0   3 CODE TABLE 22060          0         1
+ 022061 STATE OF THE SEA                                                 CODE TABLE 22061           0            0   4 CODE TABLE 22061          0         2
+ 022062 SALINITY                                                         PART PER THOUSAND          2            0  14 PART PER THOUSAND         2         5
+ 022063 TOTAL WATER DEPTH                                                M                          0            0  14 M                         0         5
+ 022064 SALINITY                                                         PART PER THOUSAND          3            0  17 PART PER THOUSAND         3         6
+ 022065 WATER PRESSURE                                                   PA                        -3            0  17 PA                       -3         6
+ 022066 WATER CONDUCTIVITY                                               S M-1                      6            0  26 S M-1                     6         8
+ 022067 INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT        CODE TABLE 22067           0            0  10 CODE TABLE 22067          0         4
+ 022068 WATER TEMPERATURE PROFILE RECORDER TYPES                         CODE TABLE 22068           0            0   7 CODE TABLE 22068          0         3
+ 022069 SPECTRAL WAVE DENSITY                                            M2HZ-1                     3            0  22 M2HZ-1                    3         7
+ 022070 SIGNIFICANT WAVE HEIGHT                                          M                          2            0  13 M                         2         4
+ 022071 SPECTRAL PEAK WAVE PERIOD                                        S                          1            0   9 S                         1         3
+ 022072 SPECTRAL PEAK WAVE LENGTH                                        M                          0            0  13 M                         0         4
+ 022073 MAXIMUM WAVE HEIGHT                                              M                          2            0  13 M                         2         4
+ 022074 AVERAGE WAVE PERIOD                                              S                          1            0   9 S                         1         3
+ 022075 AVERAGE WAVE LENGTH                                              M                          0            0  13 M                         0         4
+ 022076 DIRECTION FROM WHICH DOMINANT WAVES ARE COMING                   DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022077 DIRECTIONAL SPREAD OF DOMINANT WAVE                              DEGREE                     0            0   9 DEGREE                    0         3
+ 022078 DURATION OF WAVE RECORD                                          S                          0            0  12 S                         0         4
+ 022079 LENGTH OF WAVE RECORD                                            M                          0            0  16 M                         0         5
+ 022080 WAVEBAND CENTRAL FREQUENCY                                       Hz                         3            0  10 Hz                        3         4
+ 022081 WAVEBAND CENTRAL WAVE NUMBER                                     1/M                        5            0  13 1/M                       5         4
+ 022082 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY                    M**2S                      2            0  20 M**2S                     2         7
+ 022083 MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER                     M**3                       2            0  20 M**3                      2         7
+ 022084 BAND CONTAINING MAXIMUM NON- DIRECTIONAL SPECTRAL WAVE DENSITY   NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022085 SPECTRAL WAVE DENSITY RATIO                                      NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022086 MEAN DIRECTION FROM WHICH WAVES ARE COMING                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022087 PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING                  DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022088 FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS      NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022089 SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS     NUMERIC                    2            0   7 NUMERIC                   2         3
+ 022090 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY              M**2S                      2            0  20 M**2S                     2         7
+ 022091 NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                 M**3                       2            0  20 M**3                      2         7
+ 022092 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY                  M**2S/RAD                  2            0  20 M**2S/RAD                 2         7
+ 022093 DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER                     M**4                       2            0  20 M**4                      2         7
+ 022094 TOTAL NUMBER OF WAVE BANDS                                       NUMERIC                    0            0   7 NUMERIC                   0         3
+ 022095 DIRECTIONAL SPREAD OF INDIVIDUAL WAVES                           DEGREE                     0            0   8 DEGREE                    0         3
+ 022096 SPECTRAL BAND WIDTH                                              1/S                        3            0   4 1/S                       3         2
+ 022097 MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS    M                          0            0  14 M                         0         5
+ 022098 WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS       M                          0            0  14 M                         0         5
+ 022099 MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)          DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 022100 DIRECTION SPREAD AT LOW WAVE NUMBERS(WAVELENGTH > 731 M)         DEGREE                     0            0   9 DEGREE                    0         3
+ 022101 TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS             NUMERIC                    0            0  31 NUMERIC                   0        10
+ 022120 TIDE STATION AUTOMATED WATER LEVEL CHECK                         CODE TABLE 22120           0            0   5 CODE TABLE 22120          0         2
+ 022121 TIDE STATION MANUAL WATER LEVEL CHECK                            CODE TABLE 22121           0            0   5 CODE TABLE 22121          0         2
+ 022122 TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK                 CODE TABLE 22122           0            0   5 CODE TABLE 22122          0         2
+ 022123 TIDE STATION MANUAL METEOROLOGICAL DATA CHECK                    CODE TABLE 22123           0            0   5 CODE TABLE 22123          0         2
+ 022141 SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)                    K                          2            0  15 K                         2         5
+ 022150 NUMBER OF 18 HZ VALID POINTS FOR KU BAND                         NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022151 KU BAND OCEAN RANGE                                              M                          3            0  31 M                         3        10
+ 022152 STD OF 18 HZ KU BAND OCEAN RANGE                                 M                          3            0  16 M                         3         5
+ 022153 NUMBER OF 18 HZ VALID POINTS FOR S BAND                          NUMERIC                    0            0  10 NUMERIC                   0         4
+ 022154 S BAND OCEAN RANGE                                               M                          3            0  31 M                         3        10
+ 022155 STD OF 18 HZ S BAND OCEAN RANGE                                  M                          3            0  16 M                         3         5
+ 022156 KU BAND SIGNIFICANT WAVE HEIGHT                                  M                          3            0  16 M                         3         5
+ 022157 STD 18HZ KU BAND SIGNIFICANT WAVE HEIGHT                         M                          3            0  16 M                         3         5
+ 022158 S BAND SIGNIFICANT WAVE HEIGHT                                   M                          3            0  16 M                         3         5
+ 022159 STD 18HZ S BAND SIGNIFICANT WAVE HEIGHT                          M                          3            0  16 M                         3         5
+ 022160 NORMALIZED INVERSE WAVE AGE                                      NUMERIC                    6            0  21 NUMERIC                   6         7
+ 022161 WAVE SPECTRA                                                     M**4                       4            0  27 M**4                      4         9
+ 022182 WATER COLUMN HEIGHT                                              M                          3            0  23 M                         3         7
+ 022184 WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE           M                      -2000            0  12 M                         3         4
+ 022185 BPR TRANSMISSION COUNT                                           NUMERIC                    0            0  10 NUMERIC                   0         3
+ 023001 ACCIDENT EARLY NOTIFICATION   ARTICLE APPLICABLE                 CODE TABLE 23001           0            0   3 CODE TABLE 23001          0         1
+ 023002 ACTIVITY OR FACILITY INVOLVED IN INCIDENT                        CODE TABLE 23002           0            0   5 CODE TABLE 23002          0         2
+ 023003 TYPE OF RELEASE                                                  CODE TABLE 23003           0            0   3 CODE TABLE 23003          0         1
+ 023004 COUNTERMEASURES TAKEN NEAR BORDER                                CODE TABLE 23004           0            0   3 CODE TABLE 23004          0         1
+ 023005 CAUSE OF INCIDENT                                                CODE TABLE 23005           0            0   2 CODE TABLE 23005          0         1
+ 023006 INCIDENT SITUATION                                               CODE TABLE 23006           0            0   3 CODE TABLE 23006          0         1
+ 023007 CHARACTERISTICS OF RELEASE                                       CODE TABLE 23007           0            0   3 CODE TABLE 23007          0         1
+ 023008 STATE OF CURRENT RELEASE                                         CODE TABLE 23008           0            0   2 CODE TABLE 23008          0         1
+ 023009 STATE OF EXPECTED RELEASE                                        CODE TABLE 23009           0            0   2 CODE TABLE 23009          0         1
+ 023016 POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT          CODE TABLE 23016           0            0   2 CODE TABLE 23016          0         1
+ 023017 FLOW DISCHARGE OF MAJOR RECIPIENT                                M**3/S                     6            0  20 M**3/S                    6         7
+ 023018 RELEASE BEHAVIOUR OVER TIME                                      CODE TABLE 23018           0            0   3 CODE TABLE 23018          0         1
+ 023019 ACTUAL RELEASE HEIGHT                                            M                          0       -15000  17 M                         0         6
+ 023021 EFFECTIVE RELEASE HEIGHT                                         M                          0       -15000  17 M                         0         6
+ 023022 DISTANCE OF RELEASE POINT OR SITE OF INCIDENT                    M                          0            0  24 M                         0         8
+ 023023 MAIN TRANSPORT SPEED IN THE ATMOSPHERE                           M/S                        1            0  12 M/S                       1         4
+ 023024 MAIN TRANSPORT SPEED IN WATER                                    M/S                        2            0  13 M/S                       2         4
+ 023025 MAIN TRANSPORT SPEED IN GROUND WATER                             M/S                        2            0  13 M/S                       2         4
+ 023027 MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE                       DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023028 MAIN TRANSPORT DIRECTION IN WATER                                DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023029 MAIN TRANSPORT DIRECTION IN GROUND WATER                         DEGREE TRUE                0            0   9 DEGREE TRUE               0         3
+ 023031 POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN  CODE TABLE 23031           0            0   2 CODE TABLE 23031          0         1
+ 023032 PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG  CODE TABLE 23032           0            0   2 CODE TABLE 23032          0         1
+ 024001 ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIM Bq                       -11            0  28 Bq                      -11         9
+ 024002 ESTIMATED MAXIMUM POTENTIAL RELEASE                              Bq                       -11            0  28 Bq                      -11         9
+ 024003 COMPOSITION OF RELEASE                                           CODE TABLE 24003           0            0   5 CODE TABLE 24003          0         2
+ 024004 ELEMENT NAME                                                     CCITTIA5                   0            0  16 CHARACTER                 0         2
+ 024005 ISOTOPE MASS                                                     NUMERIC                    0            0   9 NUMERIC                   0         3
+ 024011 DOSE                                                             mSv                        2            0  32 mSv                       2        10
+ 024012 TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)  mSv                        2            0  32 mSv                       2        10
+ 024013 GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATIO mSv                        2            0  32 mSv                       2        10
+ 024021 AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)   Bq/M**3                    2            0  32 Bq/M**3                   2        10
+ 024022 CONCENTRATION IN PRECIPITATION (OF NAMES ISOTOPE TYPE)           Bq/L                       2            0  32 BQ L-1                    2        10
+ 024023 PULSE RATE OF BETA RADIATION                                     1/S                        1            0  14 1/S                       1         4
+ 024024 PULSE RATE OF GAMMA RADIATION                                    1/S                        1            0  14 1/S                       1         4
+ 025001 RANGE-GATE LENGTH                                                M                         -1            0   6 M                        -1         2
+ 025002 NUMBER OF GATES AVERAGED                                         NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025003 NUMBER OF INTEGRATED PULSES                                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025004 ECHO PROCESSING                                                  CODE TABLE 25004           0            0   2 CODE TABLE 25004          0         1
+ 025005 ECHO INTEGRATION                                                 CODE TABLE 25005           0            0   2 CODE TABLE 25005          0         1
+ 025006 Z TO R CONVERSION                                                CODE TABLE 25006           0            0   3 CODE TABLE 25006          0         1
+ 025007 Z TO R CONVERSION FACTOR                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025008 Z TO R CONVERSION EXPONENT                                       NUMERIC                    2            0   9 NUMERIC                   2         3
+ 025009 CALIBRATION METHOD                                               FLAG TABLE 25009           0            0   4 FLAG TABLE 25009          0         2
+ 025010 CLUTTER TREATMENT                                                CODE TABLE 25010           0            0   4 CODE TABLE 25010          0         2
+ 025011 GROUND OCCULTATION CORRECTION (SCREENING)                        CODE TABLE 25011           0            0   2 CODE TABLE 25011          0         1
+ 025012 RANGE ATTENUATION CORRECTION                                     CODE TABLE 25012           0            0   2 CODE TABLE 25012          0         1
+ 025013 BRIGHT-BAND CORRECTION                                           FLAG TABLE 25013           0            0   2 FLAG TABLE 25013          0         1
+ 025014 AZIMUTH CLUTTER CUT-OFF (SEE NOTE 1)                             NUMERIC                    0            0  12 NUMERIC                   0         4
+ 025015 RADOME ATTENUATION CORRECTION                                    FLAG TABLE 25015           0            0   2 FLAG TABLE 25015          0         1
+ 025016 CLEAR-AIR ATTENUATION CORRECTION                                 dB/M                       5            0   6 dB/M                      5         2
+ 025017 PRECIPITATION ATTENUATION CORRECTION                             FLAG TABLE 25017           0            0   2 FLAG TABLE 25017          0         1
+ 025018 A TO Z LAW FOR ATTENUATION FACTOR                                NUMERIC                    7            0   6 NUMERIC                   7         2
+ 025019 A TO Z LAW FOR ATTENUATION EXPONENT                              NUMERIC                    2            0   7 NUMERIC                   2         3
+ 025020 MEAN SPEED ESTIMATION                                            CODE TABLE 25020           0            0   2 CODE TABLE 25020          0         1
+ 025021 WIND COMPUTATION ENHANCEMENT                                     FLAG TABLE 25021           0            0   8 FLAG TABLE 25021          0         3
+ 025025 BATTERY VOLTAGE                                                  V                          1            0   9 V                         1         3
+ 025026 BATTERY VOLTAGE (LARGE RANGE)                                    V                          1            0  12 V                         1         4
+ 025028 OPERATOR OR MANUFACTURER DEFINED PARAMETER                       NUMERIC                    1       -16384  15 NUMERIC                   1         5
+ 025030 RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE                       CODE TABLE 25030           0            0   2 CODE TABLE 25030          0         1
+ 025032 WIND PROFILER MODE INFORMATION                                   CODE TABLE 25032           0            0   2 CODE TABLE 25032          0         1
+ 025033 WIND PROFILER SUBMODE INFORMATION*                               CODE TABLE 25033           0            0   2 CODE TABLE 25033          0         1
+ 025034 WIND PROFILER QUALITY CONTROL TEST RESULTS*                      FLAG TABLE 25034           0            0   4 FLAG TABLE 25034          0         2
+ 025036 ATMOSPHERICS LOCATION METHOD                                     CODE TABLE 25036           0            0   4 CODE TABLE 25036          0         2
+ 025040 CO2 WIND PRODUCT DERIVATION                                      CODE TABLE 25040           0            0   4 CODE TABLE 25040          0         2
+ 025041 MOVING PLATFORM DIRECTION REPORTING METHOD                       CODE TABLE 25041           0            0   2 CODE TABLE 25041          0         1
+ 025042 MOVING PLATFORM SPEED REPORTING METHOD                           CODE TABLE 25042           0            0   2 CODE TABLE 25042          0         1
+ 025043 WAVE SAMPLING INTERVAL (TIME)                                    S                          4            0  15 S                         4         5
+ 025044 WAVE SAMPLING INTERVAL (SPACE)                                   M                          2            0  14 M                         2         5
+ 025045 HIRS CHANNEL COMBINATION                                         FLAG TABLE 25045           0            0  21 FLAG TABLE 25045          0         7
+ 025046 MSU CHANNEL COMBINATION                                          FLAG TABLE 25046           0            0   5 FLAG TABLE 25046          0         2
+ 025047 SSU CHANNEL COMBINATION                                          FLAG TABLE 25047           0            0   4 FLAG TABLE 25047          0         2
+ 025048 AMSU-A CHANNEL COMBINATION                                       FLAG TABLE 25048           0            0  16 FLAG TABLE 25048          0         6
+ 025049 AMSU-B CHANNEL COMBINATION                                       FLAG TABLE 25049           0            0   6 FLAG TABLE 25049          0         2
+ 025051 AVHRR CHANNEL COMBINATION                                        FLAG TABLE 25051           0            0   7 FLAG TABLE 25051          0         3
+ 025052 LOG-10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA            NUMERIC                    4            0  15 NUMERIC                   4         5
+ 025053 OBSERVATION QUALITY                                              FLAG TABLE 25053           0            0  12 FLAG TABLE 25053          0         4
+ 025054 SSMIS SUBFRAME ID NEMBER                                         NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025055 MULTIPLEXER HOUSEKEEPING                                         K                          2            0  16 K                         2         5
+ 025060 SOFTWARE IDENTIFICATION (SEE NOTE 2)                             NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025061 SOFTWARE IDENTIFICATION AND VERSION NUMBER                       CCITTIA5                   0            0  96 CHARACTER                 0        12
+ 025062 DATABASE IDENTIFICATION                                          NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025065 ORIENTATION CORRECTION (AZIMUTH)                                 DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025066 ORIENTATION CORRECTION (ELEVATION)                               DEGREE                     2        -1000  11 DEGREE                    2         4
+ 025067 RADIOSONDE RELEASE POINT PRESSURE CORRECTION                     PA                         0        -8000  14 PA                        0         4
+ 025068 NUMBER OF ARCHIVE RECOMPUTES                                     NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025069 FLIGHT LEVEL PRESSURE CORRECTIONS                                FLAG TABLE 25069           0            0   8 FLAG TABLE 25069          0         3
+ 025070 MAJOR FRAME COUNT                                                NUMERIC                    0            0   4 NUMERIC                   0         2
+ 025071 FRAME COUNT                                                      NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025075 SATELLITE ANTENNA CORRECTIONS VERSION NUMBER                     NUMERIC                    0            0   5 NUMERIC                   0         2
+ 025076 LOG-10 OF (TEMPERATURE-RADIANCE CENTRAL WAVENUMBER) FOR ATOVS    LOG (1/M)                  8            0  30 LOG (1/M)                 8        10
+ 025077 BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS                     NUMERIC                    5      -100000  18 NUMERIC                   5         7
+ 025078 BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS                     NUMERIC                    5            0  17 NUMERIC                   5         6
+ 025079 ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS              W/M**2                     4            0  24 W/M**2                    4         8
+ 025080 ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS                M                         10            0  14 M                        10         5
+ 025085 FRACTION OF CLEAR PIXELS IN HIRS FOV                             NUMERIC                    0            0   7 NUMERIC                   0         3
+ 025086 DEPTH CORRECTION INDICATOR                                       CODE TABLE 25086           0            0   2 CODE TABLE 25086          0         1
+ 025091 STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)                 dB                         3       -18192  13 dB                        3         5
+ 025092 ACOUSTIC PROPAGATION VELOCITY                                    M/S                        2        28000  14 M/S                       2         5
+ 025093 RASS COMPUTATION CORRECTION                                      FLAG TABLE 25093           0            0   8 FLAG TABLE 25093          0         3
+ 025095 ALTIMETER STATE FLAG                                             FLAG TABLE 25095           0            0   2 FLAG TABLE 25095          0         1
+ 025096 RADIOMETER STATE FLAG                                            FLAG TABLE 25096           0            0   5 FLAG TABLE 25096          0         2
+ 025097 THREE DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT          CODE TABLE 25097           0            0   4 CODE TABLE 25097          0         2
+ 025100 XBT/XCTD FALL RATE EQUATION COEFFICIENT A                        NUMERIC                    5            0  20 NUMERIC                   5         6
+ 025101 XBT/XCTD FALL RATE EQUATION COEFFICIENT B                        NUMERIC                    5      -500000  21 NUMERIC                   5         6
+ 025102 NUMBER OF MISSING LINES EXCLUDING DATA GAPS                      NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025103 NUMBER OF DIRECTIONAL BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025104 NUMBER OF WAVE-LENGTH BINS                                       NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025107 FIRST WAVE-LENGTH BIN                                            M                          3            0  29 M                         3         9
+ 025108 LAST WAVE-LENGTH BIN                                             M                          3            0  29 M                         3         9
+ 025111 NUMBER OF INPUT DATA GAPS                                        NUMERIC                    0            0   8 NUMERIC                   0         3
+ 025120 RA2-L2-PROCESSING FLAG                                           CODE TABLE 25120           0            0   2 CODE TABLE 25120          0         1
+ 025121 RA2-L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025122 HARDWARE CONFIGURATION FOR RF                                    CODE TABLE 25122           0            0   2 CODE TABLE 25122          0         1
+ 025123 HARDWARE CONFIGURATION FOR HPA                                   CODE TABLE 25123           0            0   2 CODE TABLE 25123          0         1
+ 025124 MWR L2 PROCESSING FLAG                                           CODE TABLE 25124           0            0   2 CODE TABLE 25124          0         1
+ 025125 MWR L2-PROCESSING QUALITY                                        %                          0            0   7 %                         0         3
+ 025126 MODEL DRY TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025127 INVERTED BAROMETER CORRECTION                                    M                          3       -32768  16 M                         3         5
+ 025128 MODEL WET TROPOSPHERIC CORRECTION                                M                          3       -32768  16 M                         3         5
+ 025129 MWR DERIVED WET TROPOSPHERIC CORRECTION                          M                          3       -32768  16 M                         3         5
+ 025130 RA2 IONOSPHERIC CORRECTION ON KU BAND                            M                          3       -32768  16 M                         3         5
+ 025131 IONOSPHERIC CORRECTION FROM DORIS ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025132 IONOSPHERIC CORRECTION FROM MODEL ON KU BAND                     M                          3       -32768  16 M                         3         5
+ 025133 SEA STATE BIAS CORRECTION ON KU BAND                             M                          3       -32768  16 M                         3         5
+ 025134 RA2 IONOSPHERIC CORRECTION ON S BAND                             M                          3       -32768  16 M                         3         5
+ 025135 IONOSPHERIC CORRECTION FROM DORIS ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025136 IONOSPHERIC CORRECTION FROM MODEL ON S BAND                      M                          3       -32768  16 M                         3         5
+ 025137 SEA STATE BIAS CORRECTION ON S BAND                              M                          3       -32768  16 M                         3         5
+ 025138 AVERAGE SIGNAL TO NOISE RATION                                   NUMERIC                    0        -2048  12 NUMERIC                   0         4
+ 025140 START CHANNEL                                                    NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025141 END CHANNEL                                                      NUMERIC                    0            0  14 NUMERIC                   0         5
+ 025142 CHANNEL SCALE FACTOR                                             NUMERIC                    0            0   6 NUMERIC                   0         2
+ 025150 SATELLITE INTENSITY ANALYSIS METHOD OF TROPICAL CYCLONE          CODE TABLE 25150           0            0   4 CODE TABLE 25150          2         2
+ 025170 SAMPLING INTERVAL (TIME)                                         SECOND                     0            0  10 SECOND                    0         4 
+ 025171 SAMPLE AVERAGING PERIOD                                          SECOND                     0            0  10 SECOND                    0         4
+ 025172 NUMBER OF SAMPLES                                                SECOND                     0            0  10 SECOND                    0         4
+ 026001 PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026002 PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE    HOUR                       1            0  12 HOUR                      1         3
+ 026003 TIME DIFFERENCE                                                  MINUTE                     0        -1440  12 MINUTE                    0         4
+ 026010 HOURS INCLUDED                                                   FLAG TABLE 26010           0            0  26 FLAG TABLE 26010          0         9
+ 026020 DURATION OF PRECIPITATION                                        MINUTE                     0            0  11 MINUTE                    0         4
+ 027001 LATITUDE (HIGH ACCURACY)                                         DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027002 LATITUDE (COARSE ACCURACY)                                       DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027003 ALTERNATE LATITUDE (COARSE ACCURACY)                             DEGREE                     2        -9000  15 DEGREE                    2         4
+ 027004 ALTERNATE LATITUDE (HIGH ACCURACY)                               DEGREE                     5     -9000000  25 DEGREE                    5         7
+ 027020 SATELLITE LOCATION COUNTER                                       NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027021 SATELLITE SUBLOCATION DIMENSION                                  NUMERIC                    0            0  16 NUMERIC                   0         5
+ 027031 IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C M                          2  -1073741824  31 M                         2        10
+ 027080 VIEWING AZIMUTH ANGLE                                            DEGREE TRUE                2            0  16 DEGREE TRUE               0         5
+ 028001 LONGITUDE (HIGH ACCURACY)                                        DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028002 LONGITUDE (COARSE ACCURACY)                                      DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028003 ALTERNATE LONGITUDE (COARSE ACCURACY)                            DEGREE                     2       -18000  16 DEGREE                    2         5
+ 028004 ALTERNATE LONGITUDE (HIGH ACCURACY)                              DEGREE                     5    -18000000  26 DEGREE                    5         8
+ 028031 IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE   M                          2  -1073741824  31 M                         2        10
+ 029001 PROJECTION TYPE                                                  CODE TABLE 29001           0            0   3 CODE TABLE 29001          0         1
+ 029002 CO-ORDINATE GRID TYPE                                            CODE TABLE 29002           0            0   3 CODE TABLE 29002          0         1
+ 030001 PIXEL VALUE (4 BITS)                                             NUMERIC                    0            0   4 NUMERIC                   0         2
+ 030002 PIXEL VALUE (8 BITS)                                             NUMERIC                    0            0   8 NUMERIC                   0         3
+ 030004 PIXEL VALUE (16 BITS)                                            NUMERIC                    0            0  16 NUMERIC                   0         5
+ 030021 NUMBER OF PIXELS PER ROW                                         NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030022 NUMBER OF PIXELS PER COLUMN                                      NUMERIC                    0            0  12 NUMERIC                   0         4
+ 030031 PICTURE TYPE                                                     CODE TABLE 30031           0            0   4 CODE TABLE 30031          0         2
+ 030032 COMBINATION WITH OTHER DATA                                      FLAG TABLE 30032           0            0  16 FLAG TABLE 30032          0         6
+ 031000 SHORT DELAYED DESCRIPTOR REPLICATION FACTOR                      NUMERIC                    0            0   1 NUMERIC                   0         1
+ 031001 DELAYED DESCRIPTOR REPLICATION FACTOR                            NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031002 EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR                   NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031011 DELAYED DESCRIPTOR AND DATA REPETITION FACTOR                    NUMERIC                    0            0   8 NUMERIC                   0         3
+ 031012 EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR           NUMERIC                    0            0  16 NUMERIC                   0         5
+ 031021 ASSOCIATED FIELD SIGNIFICANCE                                    CODE TABLE 31021           0            0   6 CODE TABLE 31021          0         2
+ 031031 DATA PRESENT INDICATOR                                           FLAG TABLE 31031           0            0   1 FLAG TABLE 31031          0         1
+ 033002 QUALITY INFORMATION                                              CODE TABLE 33002           0            0   2 CODE TABLE 33002          0         1
+ 033003 QUALITY INFORMATION                                              CODE TABLE 33003           0            0   3 CODE TABLE 33003          0         1
+ 033005 QUALITY INFORMATION (AWS DATA)                                   FLAG TABLE 33005           0            0  30 FLAG TABLE 33005          0        10
+ 033006 INTERNAL MEASUREMENT STATUS INFORMATION (AWS)                    CODE TABLE 33006           0            0   3 CODE TABLE 33006          0         1
+ 033007 PER CENT CONFIDENCE                                              %                          0            0   7 %                         0         3
+ 033015 DATA QUALITY CHECK INDICATOR                                     CODE TABLE 33015           0            0   6 CODE TABLE 33015          0         2
+ 033020 QUALITY CONTROL INDICATION OF FOLLOWING VALUE                    CODE TABLE 33020           0            0   3 CODE TABLE 33020          0         1
+ 033021 QUALITY OF FOLLOWING VALUE                                       CODE TABLE 33021           0            0   2 CODE TABLE 33021          0         1
+ 033022 QUALITY OF BUOY SATELLITE TRANSMISSION                           CODE TABLE 33022           0            0   2 CODE TABLE 33022          0         1
+ 033023 QUALITY OF BUOY LOCATION                                         CODE TABLE 33023           0            0   2 CODE TABLE 33023          0         1
+ 033024 STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)             CODE TABLE 33024           0            0   4 CODE TABLE 33024          0         2
+ 033025 ACARS INTERPOLATED VALUES                                        CODE TABLE 33025           0            0   3 CODE TABLE 33025          0         1
+ 033026 MOISTURE QUALITY                                                 CODE TABLE 33026           0            0   6 CODE TABLE 33026          0         2
+ 033027 LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)      CODE TABLE 33027           0            0   3 CODE TABLE 33027          0         1
+ 033030 SCAN LINE STATUS FLAGS FOR ATOVS                                 FLAG TABLE 33030           0            0  24 FLAG TABLE 33030          0         8
+ 033031 SCAN LINE QUALITY FLAGS FOR ATOVS                                FLAG TABLE 33031           0            0  24 FLAG TABLE 33031          0         8
+ 033032 CHANNEL QUALITY FLAGS FOR ATOVS                                  FLAG TABLE 33032           0            0  24 FLAG TABLE 33032          0         8
+ 033033 FIELD OF VIEW QUALITY FLAGS FOR ATOVS                            FLAG TABLE 33033           0            0  24 FLAG TABLE 33033          0         8
+ 033035 MANUAL/AUTOMATIC QUALITY CONTROL                                 CODE TABLE 33035           0            0   4 CODE TABLE 33035          0         2
+ 033036 NOMINAL CONFIDENCE THRESHOLD                                     %                          0            0   7 %                         0         3
+ 033037 WIND CORRELATION ERROR                                           FLAG TABLE 33037           0            0  20 FLAG TABLE 33037          0         7
+ 033038 QUALITY FLAGS FOR GROUND-BASED GNSS DATA                         FLAG TABLE 33038           0            0  10 FLAG TABLE 33038          0         4
+ 033039 QUALITY FLAGS FOR RADIO OCCULTATION DATA                         FLAG TABLE 33039           0            0  16 FLAG TABLE 33039          0         6
+ 033040 CONFIDENCE INTERVAL                                              %                          0            0   7 PERCENT                   0         3
+ 033041 ATTRIBUTE OF FOLLOWING VALUE                                     CODE TABLE 33041           0            0   2 CODE TABLE 33041          0         1
+ 033042 TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE                     CODE TABLE 33042           0            0   3 CODE TABLE 33042          0         1
+ 033043 AST CONFIDENCE                                                   FLAG TABLE 33043           0            0   8 FLAG TABLE 33043          0         3
+ 033044 ASAR QUALITY INFORMATION                                         FLAG TABLE 33044           0            0  15 FLAG TABLE 33044          0         5
+ 033045 PROBABILITY OF FOLLOWING EVENT                                   %                          0            0   7 %                         0         3
+ 033046 CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECI %                          0            0   7 %                         0         3
+ 033047 MEASUREMENT CONFIDENCE DATA                                      FLAG TABLE 33047           0            0  31 FLAG TABLE 33047          0        11
+ 033048 CONFIDENCE MEASURE OF SAR INVERSION                              CODE TABLE 33048           0            0   2 CODE TABLE 33048          0         1
+ 033049 CONFIDENCE MEASURE OF WIND RETRIEVAL                             CODE TABLE 33049           0            0   2 CODE TABLE 33049          0         1
+ 033050 GLOBAL GTSPP QUALITY FLAG                                        CODE TABLE 33050           0            0   4 CODE TABLE 33050          0         2
+ 033052 S BAND OCEAN RETRACKING QUALITY                                  FLAG TABLE 33052           0            0  21 FLAG TABLE 33052          0         7
+ 033053 KU BAND OCEAN RETRACKING QUALITY                                 FLAG TABLE 33053           0            0  21 FLAG TABLE 33053          0         7
+ 033060 GQISFLAGQUAL-INDIVIDUAL IASI-SYSTEM QUALITY FLAG                 CODE TABLE 33060           0            0   2 CODE TABLE 33060          0         1
+ 033061 GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE       %                          0            0   7 %                         0         3
+ 033062 GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX         %                          0            0   7 %                         0         3
+ 033063 GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE    %                          0            0   7 %                         0         3
+ 033064 GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE  %                          0            0   7 %                         0         3
+ 033065 GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC QUALITY FUNCTION       NUMERIC                    0            0  24 NUMERIC                   0        24
+ 033066 SBUV TOTAL OZONE QUALITY                                         CODE TABLE 33066           0            0   4 CODE TABLE 33066          0         2
+ 033067 SBUV PROFILE OZONE QUALITY                                       CODE TABLE 33067           0            0   4 CODE TABLE 33067          0         2
+ 035000 FM AND REGIONAL CODE NUMBER                                      CODE TABLE 35000           0            0  10 CODE TABLE 35000          0         3
+ 035001 TIME-FRAME FOR MONITORING                                        CODE TABLE 35001           0            0   3 CODE TABLE 35001          0         1
+ 035011 NUMBER OF REPORTS ACTUALLY RECEIVED                              NUMERIC                    0            0  14 NUMERIC                   0         4
+ 035021 BULLETIN BEING MONITORED (TTAAII)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035022 BULLETIN BEING MONITORED (YYGGGG)                                CCITTIA5                   0            0  48 CHARACTER                 0         6
+ 035023 BULLETIN BEING MONITORED (CCCC)                                  CCITTIA5                   0            0  32 CHARACTER                 0         4
+ 035024 BULLETIN BEING MONITORED (BBB)                                   CCITTIA5                   0            0  24 CHARACTER                 0         3
+ 035030 DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA               CODE TABLE 35030           0            0   4 CODE TABLE 35030          0         1
+ 035031 QUALIFIER ON MONITORING RESULTS                                  CODE TABLE 35031           0            0   7 CODE TABLE 35031          0         2
+ 035032 CAUSE OF MISSING DATA                                            CODE TABLE 35032           0            0   4 CODE TABLE 35032          0         1
+ 035033 OBSERVATION AND COLLECTION DEFICIENCIES                          CODE TABLE 35033           0            0   7 CODE TABLE 35033          0         2
+ 035034 STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY P CODE TABLE 35034           0            0   3 CODE TABLE 35034          0         1
+ 035035 REASON FOR TERMINATION                                           CODE TABLE 35035           0            0   5 CODE TABLE 35035          0         2
+ 040001 SURFACE SOIL MOISTURE (MS)                                       %                          1            0  10 %                         1         4
+ 040002 ESTIMATED ERROR IN SURFACE SOIL MOISTURE                         %                          1            0  10 %                         1         4
+ 040003 MEAN SURFACE SOIL MOISTURE                                       NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040004 RAIN FALL DETECTION                                              NUMERIC                    3            0  10 NUMERIC                   3         4
+ 040005 SOIL MOISTURE CORRECTION FLAG                                    FLAG TABLE 40005           0            0   8 FLAG FLAG TABLE 40005     0         3
+ 040006 SOIL MOISTURE PROCESSING FLAG                                    FLAG TABLE 40006           0            0  16 FLAG FLAG TABLE 40006     0         5
+ 040007 SOIL MOISTURE QUALITY                                            %                          1            0  10 %                         1         4
+ 040008 FROZEN LAND SURFACE FRACTION                                     %                          1            0  10 %                         1         4
+ 040009 INUNDATION AND WETLAND FRACTION                                  %                          1            0  10 %                         1         4
+ 040010 TOPOGRAPHIC COMPLEXITY                                           %                          1            0  10 %                         1         4
diff --git a/crextables/D000101 b/crextables/D000101
new file mode 100755
index 0000000..c0c0921
--- /dev/null
+++ b/crextables/D000101
@@ -0,0 +1,2128 @@
+ D00002  2 B00002                                                                                                       
+           B00003                                                                                                       
+ D00003  3 B00010                                                                                                       
+           B00011                                                                                                       
+           B00012                                                                                                       
+ D00004  9 D00003                                                                                                       
+           B00013                                                                                                       
+           B00014                                                                                                       
+           B00015                                                                                                       
+           B00016                                                                                                       
+           B00017                                                                                                       
+           B00018                                                                                                       
+           B00019                                                                                                       
+           B00020                                                                                                       
+ D00010  3 D00003                                                                                                       
+           R01000                                                                                                       
+           B00030                                                                                                       
+ D01001  2 B01001                                                                                                       
+           B01002                                                                                                       
+ D01002  3 B01003                                                                                                       
+           B01004                                                                                                       
+           B01005                                                                                                       
+ D01003  3 B01011                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+ D01004  4 B01001                                                                                                       
+           B01002                                                                                                       
+           B01015                                                                                                       
+           B02001                                                                                                       
+ D01005  2 001035
+           001034
+ D01011  3 B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+ D01012  2 B04004                                                                                                       
+           B04005                                                                                                       
+ D01013  3 B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+ D01021  2 B05001                                                                                                       
+           B06001                                                                                                       
+ D01022  3 B05001                                                                                                       
+           B06001                                                                                                       
+           B07001                                                                                                       
+ D01023  2 B05002                                                                                                       
+           B06002                                                                                                       
+ D01024  3 B05002                                                                                                       
+           B06002                                                                                                       
+           B07001                                                                                                       
+ D01025  3 D01023                                                                                                       
+           B04003                                                                                                       
+           D01012                                                                                                       
+ D01026  7 D01021                                                                                                       
+           B04003                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04005                                                                                                       
+ D01029  3 B01018
+           B02001
+           D01011
+ D01030  4 B01018
+           B02001
+           D01011
+           D01024
+ D01031  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01032  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01033  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+ D01034  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01035  7 B01005                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01036  5 D01003                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01037  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01038  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01039  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01040  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01041  5 B01007                                                                                                       
+           B02021                                                                                                       
+           B02022                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+ D01042  2 D01041                                                                                                       
+           D01021                                                                                                       
+ D01043  5 B01007                                                                                                       
+           B02023                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01044  5 B01007                                                                                                       
+           B02024                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01049  5 B02111                                                                                                       
+           B02112                                                                                                       
+           B21062                                                                                                       
+           B21063                                                                                                       
+           B21065                                                                                                       
+ D01051  6 B01006                                                                                                       
+           B02061                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B08004                                                                                                       
+ D01055  7 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B01012                                                                                                       
+           B01014                                                                                                       
+ D01062  2 R01000                                                                                                       
+           D01001                                                                                                       
+ D01065  8 B01006                                                                                                       
+           B01008                                                                                                       
+           B02001                                                                                                       
+           B02002                                                                                                       
+           B02005                                                                                                       
+           B02062                                                                                                       
+           B02070                                                                                                       
+           B02065                                                                                                       
+ D01066  6 D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           B07004                                                                                                       
+           B02064                                                                                                       
+           B08004                                                                                                       
+ D01070  3 B02143
+           B02142
+           B02144
+ D01071  5 B01007                                                                                                       
+           B01031                                                                                                       
+           B02020                                                                                                       
+           B02028                                                                                                       
+           B02029                                                                                                       
+ D01072  4 D01071                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01074  4 B02143
+           B02142
+           B02145
+           B02146
+ D01075  6 D01001
+           B01015
+           D01024
+           B08021
+           D01011
+           D01012
+ D01076  3 B02011
+           B02143
+           B02142
+ D01090  6 D01004                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B07030                                                                                                       
+           B07031                                                                                                       
+ D01091 10 B02180                                                                                                       
+           B02181                                                                                                       
+           B02182                                                                                                       
+           B02183                                                                                                       
+           B02184                                                                                                       
+           B02179                                                                                                       
+           B02186                                                                                                       
+           B02187                                                                                                       
+           B02188                                                                                                       
+           B02189                                                                                                       
+ D01092  9 B01011
+           B01003
+           B02001
+           D01011
+           D01012
+           D01021
+           B07030
+           B07031
+           B33024
+ D01093  3 D01036
+           B07030
+           B07031
+ D01110  5 D01001
+           B01011
+           B02011
+           B02014
+           B02003
+ D01111  6 D01001
+           B01011
+           B02011
+           B02013
+           B02014
+           B02003
+ D01112  5 B01006
+           B02011
+           B02013
+           B02014
+           B02003
+ D01113  3 B08021
+           D01011
+           D01013
+ D01114  5 D01021
+           B07030
+           B07031
+           B07007
+           B33024
+ D01193  5 001007
+           001031
+           002196
+           002221
+           002222
+ D01250  4 D01193
+           D01011
+           D01013
+           D01021
+ D02001  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02002  5 B10004                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02003  9 B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+           B12006                                                                                                       
+           B13003                                                                                                       
+           B20001                                                                                                       
+           B20003                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02004  7 B20010                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20013                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+ D02005  4 B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B20013                                                                                                       
+ D02006  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10062                                                                                                       
+           B10063                                                                                                       
+ D02011  3 D02001                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02012  3 D02002                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02013  4 D02006                                                                                                       
+           D02003                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D02021  3 B22001                                                                                                       
+           B22011                                                                                                       
+           B22021                                                                                                       
+ D02022  3 B22002                                                                                                       
+           B22012                                                                                                       
+           B22022                                                                                                       
+ D02023  3 B22003                                                                                                       
+           B22013                                                                                                       
+           B22023                                                                                                       
+ D02024  3 D02022                                                                                                       
+           R01002                                                                                                       
+           D02023                                                                                                       
+ D02031  4 D02001
+           B10062
+           B07004
+           B10009
+ D02032  4 B07032
+           B12101
+           B12103
+           B13003
+ D02033  2 B07032
+           B20001
+ D02034  2 B07032
+           B13023
+ D02035  7 D02032
+           D02033
+           D02034
+           B07032
+           D02004
+           R01000
+           D02005
+ D02036  6 R05000
+           B08002
+           B20011
+           B20012
+           B20014
+           B20017
+ D02037  3 B20062
+           B13013
+           B12113
+ D02038  4 B20003
+           B04024
+           B20004
+           B20005
+ D02039  2 B04024
+           B14031
+ D02040  4 B07032
+           R02002
+           B04024
+           B13011
+ D02041  7 B07032
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02042 11 B07032
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02044  3 B04024
+           B02004
+           B13033
+ D02045  7 B04024
+           B14002
+           B14004
+           B14016
+           B14028
+           B14029
+           B14030
+ D02046  3 B04024
+           B04024
+           B12049
+ D02047  3 R02003
+           B08002
+           B20054
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02048  5 B05021
+           B07021
+           B20012
+           B05021
+           B07021
+ D02049  7 B08002
+           B20011
+           B20013
+           B20012
+           B20012
+           B20012
+           B08002
+ D02051 12 B10004                                                                                                       
+           B10051                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B12004                                                                                                       
+           B12051                                                                                                       
+           B12016                                                                                                       
+           B12017                                                                                                       
+           B13004                                                                                                       
+           R02004                                                                                                       
+           B08051                                                                                                       
+           B08020                                                                                                       
+ D02052  7 B07032
+           B07033
+           B12101
+           B02039
+           B12102
+           B12103
+           B13003
+ D02053  3 B07032
+           B07033
+           B20001
+ D02054  8 D02052
+           D02053
+           B07033
+           D02034
+           B07032
+           D02004
+           R01000
+           302005
+ D02055  8 B20031
+           B20032
+           B20033
+           B20034
+           B20035
+           B20036
+           B20037
+           B20038
+ D02056  2 B02038
+           B22043
+ D02057  3 D02056
+           D02021
+           D02024
+ D02058  8 B07032
+           B07033
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02059 12 B07032
+           B07033
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02060  4 D02038
+           D02040
+           D02058
+           D02059
+ D02062 18 D02001
+           D02052
+           D02053
+           007033
+           R01000
+           D02034
+           007032
+           R01000
+           D02005
+           008002
+           R01000
+           D02055
+           R01000
+           D02056
+           R01000
+           D02021
+           R01000
+           D02024
+ D02063  6 D02038
+           R01000
+           D02040
+           R01000
+           D02058
+           D02059
+ D02066 16 B20023
+           B20024
+           B20027
+           B20054
+           B20023
+           B20027
+           B20054
+           B20025
+           B20026
+           B20027
+           B20040
+           B20066
+           B20027
+           B20021
+           B20067
+           B20027
+ D02069  4 B07032                                                                                                       
+           B07033                                                                                                       
+           B33041                                                                                                       
+           B20001                                                                                                       
+ D02070  8 B07032                                                                                                       
+           B07033                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02071 14 B07032                                                                                                       
+           B07033                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B08021                                                                                                       
+           R03002                                                                                                       
+           B04025                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B04025                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02072  5 B07032                                                                                                       
+           B07033                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+           B13003                                                                                                       
+ D02073  7 B20010                                                                                                       
+           R05004                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B33041                                                                                                       
+           B20013                                                                                                       
+ D02074  4 B20003                                                                                                       
+           B04025                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02075  5 B08021                                                                                                       
+           B04025                                                                                                       
+           B13055                                                                                                       
+           B13058                                                                                                       
+           B08021                                                                                                       
+ D02076  7 B02021                                                                                                       
+           B20022                                                                                                       
+           B26020                                                                                                       
+           B20023                                                                                                       
+           B20024                                                                                                       
+           B20025                                                                                                       
+           B20026                                                                                                       
+ D02077 12 B07032                                                                                                       
+           B07033                                                                                                       
+           B04025                                                                                                       
+           B12111                                                                                                       
+           B12112                                                                                                       
+           B07032                                                                                                       
+           B04025                                                                                                       
+           B12112                                                                                                       
+           B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02078  4 B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02079  5 B07032                                                                                                       
+           B02175                                                                                                       
+           B02178                                                                                                       
+           B04025                                                                                                       
+           B13011                                                                                                       
+ D02080  3 B02185                                                                                                       
+           B04025                                                                                                       
+           B13033                                                                                                       
+ D02081  2 B04025                                                                                                       
+           B14031                                                                                                       
+ D02082  7 B04025                                                                                                       
+           B14002                                                                                                       
+           B14004                                                                                                       
+           B14016                                                                                                       
+           B14028                                                                                                       
+           B14029                                                                                                       
+           B14030                                                                                                       
+ D02083  8 B04025                                                                                                       
+           B08023                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12101                                                                                                       
+           B13003                                                                                                       
+           B08023                                                                                                       
+ D03001  3 B07003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03002  3 B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03003  4 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+ D03004  6 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03011  4 B07003                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03012  4 B07004                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03013  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B13003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03014  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03031  6 B07004                                                                                                       
+           B08003                                                                                                       
+           B07021                                                                                                       
+           B07022                                                                                                       
+           B08012                                                                                                       
+           B12061                                                                                                       
+ D03032  2 B20011                                                                                                       
+           B20016                                                                                                       
+ D03033  2 B20010                                                                                                       
+           B20016                                                                                                       
+ D03041  8 B02152                                                                                                       
+           B02023                                                                                                       
+           B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12071                                                                                                       
+ D03050  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11001
+           B11002
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03052  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11001
+           B11002
+ D03053  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11061
+           B11062
+ D03054 10 B04086
+           B08042
+           B07004
+           B10009
+           B05015
+           B06015
+           B12101
+           B12103
+           B11001
+           B11002
+ D03250  8 B02252
+           B02023
+           B07004
+           B11001
+           B11002
+           B02197
+           B02198
+           B12193
+ D04001  5 B08003                                                                                                       
+           B10004                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04002  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04003  2 B08003                                                                                                       
+           B12001                                                                                                       
+ D04004  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B20010                                                                                                       
+           B12001                                                                                                       
+ D04005  4 B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+ D04006  3 B14001                                                                                                       
+           B14001                                                                                                       
+           B14003                                                                                                       
+ D04011 27 B02163                                                                                                       
+           B02164                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B02057                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B08021                                                                                                       
+           B04024                                                                                                       
+           R10004                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           R03010                                                                                                       
+           B02163                                                                                                       
+           B07004                                                                                                       
+           B12001                                                                                                       
+ D04030  3 B27031                                                                                                       
+           B28031                                                                                                       
+           B10031                                                                                                       
+ D04031  3 B01041                                                                                                       
+           B01042                                                                                                       
+           B01043                                                                                                       
+ D04032  5 B02153                                                                                                       
+           B02154                                                                                                       
+           B20081                                                                                                       
+           B20082                                                                                                       
+           B20012                                                                                                       
+ D04033  8 B02152                                                                                                       
+           B02166                                                                                                       
+           B02167                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12075                                                                                                       
+           B12076                                                                                                       
+           B12063                                                                                                       
+ D04034  9 R02004                                                                                                       
+           B27001                                                                                                       
+           B28001                                                                                                       
+           B07022                                                                                                       
+           B05043                                                                                                       
+           B20010                                                                                                       
+           B20016                                                                                                       
+           B33003                                                                                                       
+           B10040                                                                                                       
+ D04250 27 B02231
+           B02232
+           B08012
+           B07024
+           B02057
+           B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B08021
+           B04024
+           R10004
+           B08021
+           B04004
+           B04005
+           B04006
+           B08021
+           B04004
+           B04005
+           B04006
+           B11001
+           B11002
+           R03010
+           B02231
+           B07004
+           B12001
+ D05001  4 B11001
+           B11002
+           B13060
+           B13071
+ D05002 11 D01012
+           B12001
+           B13003
+           B14051
+           B13060
+           B13072
+           B13080
+           B13081
+           B13082
+           B13083
+           B13084
+ D05003  4 D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05001                                                                                                       
+ D05004  3 D01030
+           D05002
+           D05003
+ D05006  8 B13072                                                                                                       
+           B13082                                                                                                       
+           B13019                                                                                                       
+           C07005
+           C01004
+           B12001                                                                                                       
+           B13073                                                                                                       
+           B13060                                                                                                       
+ D05007  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05006                                                                                                       
+ D05008  4 D05006                                                                                                       
+           C07005
+           C01004
+           B12030                                                                                                       
+ D05009  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05008                                                                                                       
+ D05010  3 D05008
+           B02091
+           B02091
+ D05011  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05010                                                                                                       
+ D05016  7 B14021
+           B07004
+           B13003
+           B11002
+           B11001
+           B11041
+           B11043
+ D05017  5 B13080
+           B13081
+           B13083
+           B13085
+           B13084
+ D05018  7 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R03000                                                                                                       
+           D05008                                                                                                       
+           D05016                                                                                                       
+           D05017                                                                                                       
+ D06001  4 B02032                                                                                                       
+           R02000                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D06002  3 B02031                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06003  4 B02002                                                                                                       
+           B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+ D06004  6 B02032                                                                                                       
+           B02033                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22043                                                                                                       
+           B22062                                                                                                       
+ D06005  5 B02031                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06006  3 D06003                                                                                                       
+           D06002                                                                                                       
+           B22063                                                                                                       
+ D06007  6 B01012                                                                                                       
+           B01014                                                                                                       
+           D06008                                                                                                       
+           B04024                                                                                                       
+           B27003                                                                                                       
+           B28003                                                                                                       
+ D06008  3 B02034                                                                                                       
+           B02035                                                                                                       
+           B02036                                                                                                       
+ D06019  9 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           C01002
+           B04015
+           B04065
+ D06020  8 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           B04075
+           B04065
+ D06021  7 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22122                                                                                                       
+           B22123                                                                                                       
+           B12001                                                                                                       
+           D03002                                                                                                       
+ D06022  5 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+ D06023  8 B01015                                                                                                       
+           D01023                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+           B22120                                                                                                       
+           B22121                                                                                                       
+ D06024  4 D06020
+           R02000
+           B22038
+           B22039
+ D06025  4 D06019
+           R02006
+           B22038
+           B22039
+ D07001  2 D01031                                                                                                       
+           D02011                                                                                                       
+ D07002  2 D01032                                                                                                       
+           D02011                                                                                                       
+ D07003  3 D07001                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07004  3 D07002                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07005  3 D07001                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07006  3 D07002                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07007  2 D01031                                                                                                       
+           D02012                                                                                                       
+ D07008  2 D01032                                                                                                       
+           D02012                                                                                                       
+ D07009  2 D01031                                                                                                       
+           D02013                                                                                                       
+ D07011 16 B01063                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B07006                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B10052                                                                                                       
+           B20009                                                                                                       
+ D07012  4 R03000                                                                                                       
+           B08023                                                                                                       
+           B05021                                                                                                       
+           B20001                                                                                                       
+ D07013  7 R06000                                                                                                       
+           B01064                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B20018                                                                                                       
+ D07014  2 R01000                                                                                                       
+           B20019                                                                                                       
+ D07015  3 R01000                                                                                                       
+           D02005                                                                                                       
+           B20002                                                                                                       
+ D07016  2 R01000                                                                                                       
+           B20020                                                                                                       
+ D07017  2 R01000                                                                                                       
+           B11070                                                                                                       
+ D07018 13 B08016                                                                                                       
+           R02000                                                                                                       
+           B08017                                                                                                       
+           D01012                                                                                                       
+           R04000                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B20009                                                                                                       
+           R01000                                                                                                       
+           B20001                                                                                                       
+           D07014                                                                                                       
+ D07020  3 D07011                                                                                                       
+           D07014                                                                                                       
+           D07016                                                                                                       
+ D07021  9 D07011                                                                                                       
+           D07012                                                                                                       
+           D07013                                                                                                       
+           D07014                                                                                                       
+           D07015                                                                                                       
+           D07016                                                                                                       
+           D07017                                                                                                       
+           D07018                                                                                                       
+           D07015                                                                                                       
+ D07030  2 B15001                                                                                                       
+           B15002                                                                                                       
+ D07031  7 B08022                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15002                                                                                                       
+ D07041  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01070                                                                                                       
+           D07030                                                                                                       
+ D07042  9 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           D01070                                                                                                       
+           D07031                                                                                                       
+ D07043  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01074                                                                                                       
+           D07030                                                                                                       
+ D07044  9 D01001
+           B01015
+           D01024
+           D01011
+           D01012
+           B08021
+           B04025
+           D01074
+           D07031
+ D07060  2 B07061
+           B12030
+ D07061  3 D01031
+           R01005
+           D07060
+ D07062  3 D01032
+           R01005
+           D07060
+ D07063  2 B07061
+           B12130
+ D07080 13 D01090 CREX template for synoptic reports
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07081 24 D01090 CREX template for synoptic reports RA I
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           B13056
+           B13057
+           B20101
+           B20102
+           B20103
+           B20104
+           B20105
+           B20106
+           B20107
+           B20108
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07082 15 D01090 CREX template for synoptic reports RA II
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12121
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07083 14 D01090 CREX template for synoptic reports RA III
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07084 16 D01090 CREX template for synoptic reports RA IV
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B20055
+           R01000
+           C05001
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07086 11 D01090 CREX template for synoptic reports RA VI
+           D02031
+           D02035
+           D02036
+           B08002
+           D02037
+           D02066
+           D02043
+           D02044
+           R01002
+           D02045
+ D07090 13 D01092 CREX template for synoptic reports from mobile land stations
+           D02031
+           D02035
+           D02036
+           D02047
+           008002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D08001  3 D01033                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08002  3 D01034                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08003  3 D01035                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08004  3 D01036                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08005  2 D08004                                                                                                       
+           D02024                                                                                                       
+ D08006  8 B10004                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12004                                                                                                       
+           B13003                                                                                                       
+           B22042                                                                                                       
+ D08007  4 D01055                                                                                                       
+           D02011                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D08008  3 D01093
+           D02062
+           D02063
+ D08009  7 D01093
+           D02001
+           D02054
+           B08002
+           D02055
+           D02057
+           D02060
+ D08010 15 B01011
+           R13000
+           D01011
+           D01012
+           D01021
+           B04080
+           B22049
+           B04080
+           B22059
+           B04080
+           B22005
+           B02042
+           B22032
+           B02042
+           B04080
+ D09001  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09002  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09003  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09004  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09005  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09006  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09007  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09008  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09011  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09012  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09013  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09014  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09015  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09016  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09017  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09018  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09019  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09020  7 D01031                                                                                                       
+           B02003                                                                                                       
+           R04000                                                                                                       
+           B07003                                                                                                       
+           B11003                                                                                                       
+           B11004                                                                                                       
+           B11005                                                                                                       
+ D09030  7 B15004                                                                                                       
+           B15005                                                                                                       
+           R04000                                                                                                       
+           B04015                                                                                                       
+           B08006                                                                                                       
+           B07004                                                                                                       
+           B15003                                                                                                       
+ D09040  3 D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09041  4 D07041
+           D01075
+           D01076
+           D09030
+ D09042  4 D07042                                                                                                       
+           D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09044  4 D07044
+           D01075
+           D01076
+           D09030
+ D09050  7 D01110
+           D01113
+           D01114
+           R01000
+           D03050
+           R01000
+           D03051
+ D09051  7 D01110
+           D01113
+           D01114
+           R01000
+           D03052
+           R01000
+           D03053
+ D09052  9 D01111
+           D01113
+           D01114
+           D02049
+           B22043
+           R01000
+           D03054
+           R01000
+           D03051
+ D09053  7 D01112
+           D01113
+           D01114
+           R01000
+           D03054
+           R01000
+           D03051
+ D10001  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01026                                                                                                       
+           D03025                                                                                                       
+ D10002  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01009                                                                                                       
+           D03023                                                                                                       
+ D10003  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01006                                                                                                       
+           D03023                                                                                                       
+ D10004  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01003                                                                                                       
+           D03024                                                                                                       
+ D10005  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03025                                                                                                       
+ D10006  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03023                                                                                                       
+ D10007  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03024                                                                                                       
+ D10008  8 D10011                                                                                                       
+           R01019                                                                                                       
+           D10012                                                                                                       
+           B02150                                                                                                       
+           B25079                                                                                                       
+           B25080                                                                                                       
+           B33032                                                                                                       
+           B14045                                                                                                       
+ D10009  3 D10011                                                                                                       
+           R01015                                                                                                       
+           D10012                                                                                                       
+ D10010  3 D10011                                                                                                       
+           R01005                                                                                                       
+           D10012                                                                                                       
+ D10014  3 D01072                                                                                                       
+           D03041                                                                                                       
+           D04011                                                                                                       
+ D10015 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01003                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01003                                                                                                       
+           D04033                                                                                                       
+ D10016 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10020  6 D10022                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           D04034                                                                                                       
+           D10021                                                                                                       
+ D10022  4 B01007                                                                                                       
+           B02019                                                                                                       
+           B01033                                                                                                       
+           B02172                                                                                                       
+ D10023 17 D01072                                                                                                       
+           B30021                                                                                                       
+           B30022                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B07025                                                                                                       
+           B10002                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           R05002                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10050 13 D10051                                                                                                       
+           D10052                                                                                                       
+           R01000                                                                                                       
+           D10053                                                                                                       
+           R01004                                                                                                       
+           D10054                                                                                                       
+           B20010                                                                                                       
+           D10052                                                                                                       
+           R01015                                                                                                       
+           D10053                                                                                                       
+           D10052                                                                                                       
+           R01004                                                                                                       
+           D10053                                                                                                       
+ D10195  3 D01250
+           D03250
+           D04250
+ D11001  9 D01051                                                                                                       
+           B07002                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11032                                                                                                       
+           B11033                                                                                                       
+           B20041                                                                                                       
+ D11002  4 D01065                                                                                                       
+           D01066                                                                                                       
+           D11003                                                                                                       
+           D11004                                                                                                       
+ D11003  5 B10070                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12001                                                                                                       
+           B13002                                                                                                       
+ D11004 12 R01000                                                                                                       
+           B11034                                                                                                       
+           R01000                                                                                                       
+           B11035                                                                                                       
+           R01000                                                                                                       
+           B11075                                                                                                       
+           R01000                                                                                                       
+           B11076                                                                                                       
+           R01000                                                                                                       
+           B33025                                                                                                       
+           R01000                                                                                                       
+           B33026                                                                                                       
+ D11005 13 B01008                                                                                                       
+           B01023                                                                                                       
+           D01021                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           B07010                                                                                                       
+           B08009                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11036                                                                                                       
+           B12101                                                                                                       
+           B33025                                                                                                       
+ D11006  6 B07010                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02064                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+ D11193 16 D01197                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           B08004                                                                                                       
+           B07004                                                                                                       
+           B08021                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11034                                                                                                       
+           B11035                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B13003                                                                                                       
+           B20041                                                                                                       
+ D12001  2 D01043                                                                                                       
+           D04001                                                                                                       
+ D12002  2 D01043                                                                                                       
+           D04002                                                                                                       
+ D12003  2 D01042                                                                                                       
+           D04003                                                                                                       
+ D12004  2 D01042                                                                                                       
+           D04004                                                                                                       
+ D12005  2 D01042                                                                                                       
+           B20014                                                                                                       
+ D12006  2 D01044                                                                                                       
+           D04005                                                                                                       
+ D12007  2 D01042                                                                                                       
+           D04006                                                                                                       
+ D12010  6 B01007                                                                                                       
+           B05040                                                                                                       
+           B02021                                                                                                       
+           B05041                                                                                                       
+           B04001                                                                                                       
+           B04043                                                                                                       
+ D12014  8 D12010                                                                                                       
+           D12011                                                                                                       
+           R05056                                                                                                       
+           D01023                                                                                                       
+           B05042                                                                                                       
+           B05052                                                                                                       
+           D12012                                                                                                       
+           D12013                                                                                                       
+ D12016  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12015                                                                                                       
+ D12018  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12017                                                                                                       
+ D12020 11 D01047                                                                                                       
+           D01048                                                                                                       
+           B15015                                                                                                       
+           B29002                                                                                                       
+           B21076                                                                                                       
+           R04012                                                                                                       
+           B06030                                                                                                       
+           R02012                                                                                                       
+           B05030                                                                                                       
+           B21075                                                                                                       
+           B21066                                                                                                       
+ D12021  6 D01047                                                                                                       
+           R01003                                                                                                       
+           D01049                                                                                                       
+           B11012                                                                                                       
+           B11011                                                                                                       
+           B21067                                                                                                       
+ D12022 15 D01047                                                                                                       
+           B08022                                                                                                       
+           B11012                                                                                                       
+           B11050                                                                                                       
+           B22070                                                                                                       
+           B22026                                                                                                       
+           D12041                                                                                                       
+           B10050                                                                                                       
+           B21068                                                                                                       
+           B21071                                                                                                       
+           B21072                                                                                                       
+           B21073                                                                                                       
+           D12042                                                                                                       
+           B21062                                                                                                       
+           B15011                                                                                                       
+ D12023  7 D01047                                                                                                       
+           R03003                                                                                                       
+           B08022                                                                                                       
+           B12061                                                                                                       
+           B22050                                                                                                       
+           B21069                                                                                                       
+           B21085                                                                                                       
+ D12024 11 D12020                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12025 11 D12019                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12026 19 D01046                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           D12031                                                                                                       
+           R01004                                                                                                       
+           D12030                                                                                                       
+           B21110                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21111                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21112                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21113                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+ D12027  9 D01047                                                                                                       
+           R05009                                                                                                       
+           D01023                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B21085                                                                                                       
+           B21070                                                                                                       
+ D12031  8 B05034                                                                                                       
+           B06034                                                                                                       
+           B21109                                                                                                       
+           B11081                                                                                                       
+           B11082                                                                                                       
+           B21101                                                                                                       
+           B21102                                                                                                       
+           B21103                                                                                                       
+ D12032  4 B21120                                                                                                       
+           B21121                                                                                                       
+           B13055                                                                                                       
+           B21122                                                                                                       
+ D12033  4 B02104                                                                                                       
+           B08022                                                                                                       
+           B12063                                                                                                       
+           B12065                                                                                                       
+ D12042  6 B21077                                                                                                       
+           B21078                                                                                                       
+           B21079                                                                                                       
+           B21080                                                                                                       
+           B21081                                                                                                       
+           B21082                                                                                                       
+ D12045 21 B01007                                                                                                       
+           B02019                                                                                                       
+           B01096                                                                                                       
+           B25061                                                                                                       
+           B05040                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           B07002                                                                                                       
+           B12180                                                                                                       
+           B12181                                                                                                       
+           B12182                                                                                                       
+           B12183                                                                                                       
+           B12184                                                                                                       
+           B12185                                                                                                       
+           B02174                                                                                                       
+           B21086                                                                                                       
+           B12186                                                                                                       
+           B21087                                                                                                       
+           B12187                                                                                                       
+           B33043                                                                                                       
+ D13009  3 B21001                                                                                                       
+           R01000                                                                                                       
+           B21001                                                                                                       
+ D13010  3 B21036                                                                                                       
+           R01000                                                                                                       
+           B21036                                                                                                       
+ D13031  4 B06002                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13032  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13031                                                                                                       
+ D13041  9 B06002                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13042  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13041                                                                                                       
+ D13043 11 B06002                                                                                                       
+           B05002                                                                                                       
+           B05012                                                                                                       
+           R12000                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D15001  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06001                                                                                                       
+ D15002  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06004                                                                                                       
+ D16001 10 D01011                                                                                                       
+           B04004                                                                                                       
+           D01023                                                                                                       
+           B01021                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B10051                                                                                                       
+           B19002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16002 15 B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B01033                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+ D16003 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B11002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16004 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B11031                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16005  9 R08000                                                                                                       
+           B08005                                                                                                       
+           B08007                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B01026                                                                                                       
+           B19001                                                                                                       
+           B08007                                                                                                       
+           B08005                                                                                                       
+ D16006 12 R11000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16007 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16008 11 R10000                                                                                                       
+           B08001                                                                                                       
+           B08007                                                                                                       
+           B08023                                                                                                       
+           R03000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B08023                                                                                                       
+           B08007                                                                                                       
+           B08001                                                                                                       
+ D16009 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20041                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16010  8 R07000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B01022                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16011 17 R16000                                                                                                       
+           B08011                                                                                                       
+           B01022                                                                                                       
+           B08007                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B20090                                                                                                       
+           B08021                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16020  5 B01023
+           B01025
+           B01027
+           D01011
+           D01012
+ D16021 23 D01023
+           B02041
+           B19001
+           B19007
+           B19005
+           B19006
+           B19008
+           B08005
+           B10004
+           B08005
+           B10004
+           B19007
+           B08005
+           B08021
+           B04075
+           B11040
+           B19007
+           R05004
+           B05021
+           B05021
+           R02002
+           B19003
+           B19004
+ D16022 23 B01032                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B19010                                                                                                       
+           R18000                                                                                                       
+           B08021                                                                                                       
+           B04014                                                                                                       
+           B08005                                                                                                       
+           D01023                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B10004                                                                                                       
+           B11041                                                                                                       
+           B08021                                                                                                       
+           B04075                                                                                                       
+           B11040                                                                                                       
+           B19008                                                                                                       
+           R05004                                                                                                       
+           B05021                                                                                                       
+           B05021                                                                                                       
+           R02002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16026  2 D16020
+           D16021
+ D16050 16 D01001
+           D01011
+           D01012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ D16052 28 D01005
+           D01011
+           D01012
+           001007
+           025150
+           R22000
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ D18001  2 D01025                                                                                                       
+           B24011                                                                                                       
+ D18003  4 D01026                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24021                                                                                                       
+ D18004  6 D01025                                                                                                       
+           B04023                                                                                                       
+           B13011                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24022                                                                                                       
+ D21001  6 B02101                                                                                                       
+           B02114                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02121                                                                                                       
+ D21003  4 B21051                                                                                                       
+           B21014                                                                                                       
+           B21017                                                                                                       
+           B21030                                                                                                       
+ D21004  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D21003                                                                                                       
+ D21005 12 B25004                                                                                                       
+           B02121                                                                                                       
+           B02122                                                                                                       
+           B02123                                                                                                       
+           B02124                                                                                                       
+           B02125                                                                                                       
+           B02126                                                                                                       
+           B02127                                                                                                       
+           B02128                                                                                                       
+           B02129                                                                                                       
+           B02130                                                                                                       
+           B02131                                                                                                       
+ D21006  4 B25001                                                                                                       
+           B25002                                                                                                       
+           B25003                                                                                                       
+           B25005                                                                                                       
+ D21007  8 B25009                                                                                                       
+           B25010                                                                                                       
+           B25011                                                                                                       
+           B25012                                                                                                       
+           B25013                                                                                                       
+           B25015                                                                                                       
+           B25016                                                                                                       
+           B25017                                                                                                       
+ D21008  3 B25006                                                                                                       
+           B25007                                                                                                       
+           B25008                                                                                                       
+ D21009  2 B25018                                                                                                       
+           B25019                                                                                                       
+ D21010 13 B02101                                                                                                       
+           B07002                                                                                                       
+           B02102                                                                                                       
+           B02103                                                                                                       
+           B02104                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02108                                                                                                       
+           B02109                                                                                                       
+           B02110                                                                                                       
+           B02132                                                                                                       
+           B02133                                                                                                       
+ D21011  3 B30031                                                                                                       
+           B30032                                                                                                       
+           B29002                                                                                                       
+ D21012  2 R01000                                                                                                       
+           B02135                                                                                                       
+ D35001  4 B08035
+           B35001
+           B08036
+           D01001
+ D35002  4 B08035
+           B35001
+           B08036
+           B01033
+ D35003  6 B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B04073
+ D35004  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           D01001
+           B35011
+ D35005  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           B35011
+ D35006  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01003
+           B35011
+ D35007  9 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           R02000
+           B01002
+           B35011
+ D35010  3 D35002
+           D35003
+           D35007
diff --git a/crextables/D000103 b/crextables/D000103
new file mode 100755
index 0000000..c0c0921
--- /dev/null
+++ b/crextables/D000103
@@ -0,0 +1,2128 @@
+ D00002  2 B00002                                                                                                       
+           B00003                                                                                                       
+ D00003  3 B00010                                                                                                       
+           B00011                                                                                                       
+           B00012                                                                                                       
+ D00004  9 D00003                                                                                                       
+           B00013                                                                                                       
+           B00014                                                                                                       
+           B00015                                                                                                       
+           B00016                                                                                                       
+           B00017                                                                                                       
+           B00018                                                                                                       
+           B00019                                                                                                       
+           B00020                                                                                                       
+ D00010  3 D00003                                                                                                       
+           R01000                                                                                                       
+           B00030                                                                                                       
+ D01001  2 B01001                                                                                                       
+           B01002                                                                                                       
+ D01002  3 B01003                                                                                                       
+           B01004                                                                                                       
+           B01005                                                                                                       
+ D01003  3 B01011                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+ D01004  4 B01001                                                                                                       
+           B01002                                                                                                       
+           B01015                                                                                                       
+           B02001                                                                                                       
+ D01005  2 001035
+           001034
+ D01011  3 B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+ D01012  2 B04004                                                                                                       
+           B04005                                                                                                       
+ D01013  3 B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+ D01021  2 B05001                                                                                                       
+           B06001                                                                                                       
+ D01022  3 B05001                                                                                                       
+           B06001                                                                                                       
+           B07001                                                                                                       
+ D01023  2 B05002                                                                                                       
+           B06002                                                                                                       
+ D01024  3 B05002                                                                                                       
+           B06002                                                                                                       
+           B07001                                                                                                       
+ D01025  3 D01023                                                                                                       
+           B04003                                                                                                       
+           D01012                                                                                                       
+ D01026  7 D01021                                                                                                       
+           B04003                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04005                                                                                                       
+ D01029  3 B01018
+           B02001
+           D01011
+ D01030  4 B01018
+           B02001
+           D01011
+           D01024
+ D01031  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01032  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01033  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+ D01034  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01035  7 B01005                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01036  5 D01003                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01037  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01038  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01039  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01040  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01041  5 B01007                                                                                                       
+           B02021                                                                                                       
+           B02022                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+ D01042  2 D01041                                                                                                       
+           D01021                                                                                                       
+ D01043  5 B01007                                                                                                       
+           B02023                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01044  5 B01007                                                                                                       
+           B02024                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01049  5 B02111                                                                                                       
+           B02112                                                                                                       
+           B21062                                                                                                       
+           B21063                                                                                                       
+           B21065                                                                                                       
+ D01051  6 B01006                                                                                                       
+           B02061                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B08004                                                                                                       
+ D01055  7 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B01012                                                                                                       
+           B01014                                                                                                       
+ D01062  2 R01000                                                                                                       
+           D01001                                                                                                       
+ D01065  8 B01006                                                                                                       
+           B01008                                                                                                       
+           B02001                                                                                                       
+           B02002                                                                                                       
+           B02005                                                                                                       
+           B02062                                                                                                       
+           B02070                                                                                                       
+           B02065                                                                                                       
+ D01066  6 D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           B07004                                                                                                       
+           B02064                                                                                                       
+           B08004                                                                                                       
+ D01070  3 B02143
+           B02142
+           B02144
+ D01071  5 B01007                                                                                                       
+           B01031                                                                                                       
+           B02020                                                                                                       
+           B02028                                                                                                       
+           B02029                                                                                                       
+ D01072  4 D01071                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01074  4 B02143
+           B02142
+           B02145
+           B02146
+ D01075  6 D01001
+           B01015
+           D01024
+           B08021
+           D01011
+           D01012
+ D01076  3 B02011
+           B02143
+           B02142
+ D01090  6 D01004                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B07030                                                                                                       
+           B07031                                                                                                       
+ D01091 10 B02180                                                                                                       
+           B02181                                                                                                       
+           B02182                                                                                                       
+           B02183                                                                                                       
+           B02184                                                                                                       
+           B02179                                                                                                       
+           B02186                                                                                                       
+           B02187                                                                                                       
+           B02188                                                                                                       
+           B02189                                                                                                       
+ D01092  9 B01011
+           B01003
+           B02001
+           D01011
+           D01012
+           D01021
+           B07030
+           B07031
+           B33024
+ D01093  3 D01036
+           B07030
+           B07031
+ D01110  5 D01001
+           B01011
+           B02011
+           B02014
+           B02003
+ D01111  6 D01001
+           B01011
+           B02011
+           B02013
+           B02014
+           B02003
+ D01112  5 B01006
+           B02011
+           B02013
+           B02014
+           B02003
+ D01113  3 B08021
+           D01011
+           D01013
+ D01114  5 D01021
+           B07030
+           B07031
+           B07007
+           B33024
+ D01193  5 001007
+           001031
+           002196
+           002221
+           002222
+ D01250  4 D01193
+           D01011
+           D01013
+           D01021
+ D02001  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02002  5 B10004                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02003  9 B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+           B12006                                                                                                       
+           B13003                                                                                                       
+           B20001                                                                                                       
+           B20003                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02004  7 B20010                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20013                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+ D02005  4 B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B20013                                                                                                       
+ D02006  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10062                                                                                                       
+           B10063                                                                                                       
+ D02011  3 D02001                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02012  3 D02002                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02013  4 D02006                                                                                                       
+           D02003                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D02021  3 B22001                                                                                                       
+           B22011                                                                                                       
+           B22021                                                                                                       
+ D02022  3 B22002                                                                                                       
+           B22012                                                                                                       
+           B22022                                                                                                       
+ D02023  3 B22003                                                                                                       
+           B22013                                                                                                       
+           B22023                                                                                                       
+ D02024  3 D02022                                                                                                       
+           R01002                                                                                                       
+           D02023                                                                                                       
+ D02031  4 D02001
+           B10062
+           B07004
+           B10009
+ D02032  4 B07032
+           B12101
+           B12103
+           B13003
+ D02033  2 B07032
+           B20001
+ D02034  2 B07032
+           B13023
+ D02035  7 D02032
+           D02033
+           D02034
+           B07032
+           D02004
+           R01000
+           D02005
+ D02036  6 R05000
+           B08002
+           B20011
+           B20012
+           B20014
+           B20017
+ D02037  3 B20062
+           B13013
+           B12113
+ D02038  4 B20003
+           B04024
+           B20004
+           B20005
+ D02039  2 B04024
+           B14031
+ D02040  4 B07032
+           R02002
+           B04024
+           B13011
+ D02041  7 B07032
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02042 11 B07032
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02044  3 B04024
+           B02004
+           B13033
+ D02045  7 B04024
+           B14002
+           B14004
+           B14016
+           B14028
+           B14029
+           B14030
+ D02046  3 B04024
+           B04024
+           B12049
+ D02047  3 R02003
+           B08002
+           B20054
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02048  5 B05021
+           B07021
+           B20012
+           B05021
+           B07021
+ D02049  7 B08002
+           B20011
+           B20013
+           B20012
+           B20012
+           B20012
+           B08002
+ D02051 12 B10004                                                                                                       
+           B10051                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B12004                                                                                                       
+           B12051                                                                                                       
+           B12016                                                                                                       
+           B12017                                                                                                       
+           B13004                                                                                                       
+           R02004                                                                                                       
+           B08051                                                                                                       
+           B08020                                                                                                       
+ D02052  7 B07032
+           B07033
+           B12101
+           B02039
+           B12102
+           B12103
+           B13003
+ D02053  3 B07032
+           B07033
+           B20001
+ D02054  8 D02052
+           D02053
+           B07033
+           D02034
+           B07032
+           D02004
+           R01000
+           302005
+ D02055  8 B20031
+           B20032
+           B20033
+           B20034
+           B20035
+           B20036
+           B20037
+           B20038
+ D02056  2 B02038
+           B22043
+ D02057  3 D02056
+           D02021
+           D02024
+ D02058  8 B07032
+           B07033
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02059 12 B07032
+           B07033
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02060  4 D02038
+           D02040
+           D02058
+           D02059
+ D02062 18 D02001
+           D02052
+           D02053
+           007033
+           R01000
+           D02034
+           007032
+           R01000
+           D02005
+           008002
+           R01000
+           D02055
+           R01000
+           D02056
+           R01000
+           D02021
+           R01000
+           D02024
+ D02063  6 D02038
+           R01000
+           D02040
+           R01000
+           D02058
+           D02059
+ D02066 16 B20023
+           B20024
+           B20027
+           B20054
+           B20023
+           B20027
+           B20054
+           B20025
+           B20026
+           B20027
+           B20040
+           B20066
+           B20027
+           B20021
+           B20067
+           B20027
+ D02069  4 B07032                                                                                                       
+           B07033                                                                                                       
+           B33041                                                                                                       
+           B20001                                                                                                       
+ D02070  8 B07032                                                                                                       
+           B07033                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02071 14 B07032                                                                                                       
+           B07033                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B08021                                                                                                       
+           R03002                                                                                                       
+           B04025                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B04025                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02072  5 B07032                                                                                                       
+           B07033                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+           B13003                                                                                                       
+ D02073  7 B20010                                                                                                       
+           R05004                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B33041                                                                                                       
+           B20013                                                                                                       
+ D02074  4 B20003                                                                                                       
+           B04025                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02075  5 B08021                                                                                                       
+           B04025                                                                                                       
+           B13055                                                                                                       
+           B13058                                                                                                       
+           B08021                                                                                                       
+ D02076  7 B02021                                                                                                       
+           B20022                                                                                                       
+           B26020                                                                                                       
+           B20023                                                                                                       
+           B20024                                                                                                       
+           B20025                                                                                                       
+           B20026                                                                                                       
+ D02077 12 B07032                                                                                                       
+           B07033                                                                                                       
+           B04025                                                                                                       
+           B12111                                                                                                       
+           B12112                                                                                                       
+           B07032                                                                                                       
+           B04025                                                                                                       
+           B12112                                                                                                       
+           B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02078  4 B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02079  5 B07032                                                                                                       
+           B02175                                                                                                       
+           B02178                                                                                                       
+           B04025                                                                                                       
+           B13011                                                                                                       
+ D02080  3 B02185                                                                                                       
+           B04025                                                                                                       
+           B13033                                                                                                       
+ D02081  2 B04025                                                                                                       
+           B14031                                                                                                       
+ D02082  7 B04025                                                                                                       
+           B14002                                                                                                       
+           B14004                                                                                                       
+           B14016                                                                                                       
+           B14028                                                                                                       
+           B14029                                                                                                       
+           B14030                                                                                                       
+ D02083  8 B04025                                                                                                       
+           B08023                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12101                                                                                                       
+           B13003                                                                                                       
+           B08023                                                                                                       
+ D03001  3 B07003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03002  3 B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03003  4 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+ D03004  6 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03011  4 B07003                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03012  4 B07004                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03013  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B13003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03014  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03031  6 B07004                                                                                                       
+           B08003                                                                                                       
+           B07021                                                                                                       
+           B07022                                                                                                       
+           B08012                                                                                                       
+           B12061                                                                                                       
+ D03032  2 B20011                                                                                                       
+           B20016                                                                                                       
+ D03033  2 B20010                                                                                                       
+           B20016                                                                                                       
+ D03041  8 B02152                                                                                                       
+           B02023                                                                                                       
+           B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12071                                                                                                       
+ D03050  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11001
+           B11002
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03052  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11001
+           B11002
+ D03053  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11061
+           B11062
+ D03054 10 B04086
+           B08042
+           B07004
+           B10009
+           B05015
+           B06015
+           B12101
+           B12103
+           B11001
+           B11002
+ D03250  8 B02252
+           B02023
+           B07004
+           B11001
+           B11002
+           B02197
+           B02198
+           B12193
+ D04001  5 B08003                                                                                                       
+           B10004                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04002  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04003  2 B08003                                                                                                       
+           B12001                                                                                                       
+ D04004  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B20010                                                                                                       
+           B12001                                                                                                       
+ D04005  4 B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+ D04006  3 B14001                                                                                                       
+           B14001                                                                                                       
+           B14003                                                                                                       
+ D04011 27 B02163                                                                                                       
+           B02164                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B02057                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B08021                                                                                                       
+           B04024                                                                                                       
+           R10004                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           R03010                                                                                                       
+           B02163                                                                                                       
+           B07004                                                                                                       
+           B12001                                                                                                       
+ D04030  3 B27031                                                                                                       
+           B28031                                                                                                       
+           B10031                                                                                                       
+ D04031  3 B01041                                                                                                       
+           B01042                                                                                                       
+           B01043                                                                                                       
+ D04032  5 B02153                                                                                                       
+           B02154                                                                                                       
+           B20081                                                                                                       
+           B20082                                                                                                       
+           B20012                                                                                                       
+ D04033  8 B02152                                                                                                       
+           B02166                                                                                                       
+           B02167                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12075                                                                                                       
+           B12076                                                                                                       
+           B12063                                                                                                       
+ D04034  9 R02004                                                                                                       
+           B27001                                                                                                       
+           B28001                                                                                                       
+           B07022                                                                                                       
+           B05043                                                                                                       
+           B20010                                                                                                       
+           B20016                                                                                                       
+           B33003                                                                                                       
+           B10040                                                                                                       
+ D04250 27 B02231
+           B02232
+           B08012
+           B07024
+           B02057
+           B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B08021
+           B04024
+           R10004
+           B08021
+           B04004
+           B04005
+           B04006
+           B08021
+           B04004
+           B04005
+           B04006
+           B11001
+           B11002
+           R03010
+           B02231
+           B07004
+           B12001
+ D05001  4 B11001
+           B11002
+           B13060
+           B13071
+ D05002 11 D01012
+           B12001
+           B13003
+           B14051
+           B13060
+           B13072
+           B13080
+           B13081
+           B13082
+           B13083
+           B13084
+ D05003  4 D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05001                                                                                                       
+ D05004  3 D01030
+           D05002
+           D05003
+ D05006  8 B13072                                                                                                       
+           B13082                                                                                                       
+           B13019                                                                                                       
+           C07005
+           C01004
+           B12001                                                                                                       
+           B13073                                                                                                       
+           B13060                                                                                                       
+ D05007  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05006                                                                                                       
+ D05008  4 D05006                                                                                                       
+           C07005
+           C01004
+           B12030                                                                                                       
+ D05009  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05008                                                                                                       
+ D05010  3 D05008
+           B02091
+           B02091
+ D05011  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05010                                                                                                       
+ D05016  7 B14021
+           B07004
+           B13003
+           B11002
+           B11001
+           B11041
+           B11043
+ D05017  5 B13080
+           B13081
+           B13083
+           B13085
+           B13084
+ D05018  7 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R03000                                                                                                       
+           D05008                                                                                                       
+           D05016                                                                                                       
+           D05017                                                                                                       
+ D06001  4 B02032                                                                                                       
+           R02000                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D06002  3 B02031                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06003  4 B02002                                                                                                       
+           B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+ D06004  6 B02032                                                                                                       
+           B02033                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22043                                                                                                       
+           B22062                                                                                                       
+ D06005  5 B02031                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06006  3 D06003                                                                                                       
+           D06002                                                                                                       
+           B22063                                                                                                       
+ D06007  6 B01012                                                                                                       
+           B01014                                                                                                       
+           D06008                                                                                                       
+           B04024                                                                                                       
+           B27003                                                                                                       
+           B28003                                                                                                       
+ D06008  3 B02034                                                                                                       
+           B02035                                                                                                       
+           B02036                                                                                                       
+ D06019  9 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           C01002
+           B04015
+           B04065
+ D06020  8 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           B04075
+           B04065
+ D06021  7 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22122                                                                                                       
+           B22123                                                                                                       
+           B12001                                                                                                       
+           D03002                                                                                                       
+ D06022  5 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+ D06023  8 B01015                                                                                                       
+           D01023                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+           B22120                                                                                                       
+           B22121                                                                                                       
+ D06024  4 D06020
+           R02000
+           B22038
+           B22039
+ D06025  4 D06019
+           R02006
+           B22038
+           B22039
+ D07001  2 D01031                                                                                                       
+           D02011                                                                                                       
+ D07002  2 D01032                                                                                                       
+           D02011                                                                                                       
+ D07003  3 D07001                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07004  3 D07002                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07005  3 D07001                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07006  3 D07002                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07007  2 D01031                                                                                                       
+           D02012                                                                                                       
+ D07008  2 D01032                                                                                                       
+           D02012                                                                                                       
+ D07009  2 D01031                                                                                                       
+           D02013                                                                                                       
+ D07011 16 B01063                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B07006                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B10052                                                                                                       
+           B20009                                                                                                       
+ D07012  4 R03000                                                                                                       
+           B08023                                                                                                       
+           B05021                                                                                                       
+           B20001                                                                                                       
+ D07013  7 R06000                                                                                                       
+           B01064                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B20018                                                                                                       
+ D07014  2 R01000                                                                                                       
+           B20019                                                                                                       
+ D07015  3 R01000                                                                                                       
+           D02005                                                                                                       
+           B20002                                                                                                       
+ D07016  2 R01000                                                                                                       
+           B20020                                                                                                       
+ D07017  2 R01000                                                                                                       
+           B11070                                                                                                       
+ D07018 13 B08016                                                                                                       
+           R02000                                                                                                       
+           B08017                                                                                                       
+           D01012                                                                                                       
+           R04000                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B20009                                                                                                       
+           R01000                                                                                                       
+           B20001                                                                                                       
+           D07014                                                                                                       
+ D07020  3 D07011                                                                                                       
+           D07014                                                                                                       
+           D07016                                                                                                       
+ D07021  9 D07011                                                                                                       
+           D07012                                                                                                       
+           D07013                                                                                                       
+           D07014                                                                                                       
+           D07015                                                                                                       
+           D07016                                                                                                       
+           D07017                                                                                                       
+           D07018                                                                                                       
+           D07015                                                                                                       
+ D07030  2 B15001                                                                                                       
+           B15002                                                                                                       
+ D07031  7 B08022                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15002                                                                                                       
+ D07041  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01070                                                                                                       
+           D07030                                                                                                       
+ D07042  9 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           D01070                                                                                                       
+           D07031                                                                                                       
+ D07043  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01074                                                                                                       
+           D07030                                                                                                       
+ D07044  9 D01001
+           B01015
+           D01024
+           D01011
+           D01012
+           B08021
+           B04025
+           D01074
+           D07031
+ D07060  2 B07061
+           B12030
+ D07061  3 D01031
+           R01005
+           D07060
+ D07062  3 D01032
+           R01005
+           D07060
+ D07063  2 B07061
+           B12130
+ D07080 13 D01090 CREX template for synoptic reports
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07081 24 D01090 CREX template for synoptic reports RA I
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           B13056
+           B13057
+           B20101
+           B20102
+           B20103
+           B20104
+           B20105
+           B20106
+           B20107
+           B20108
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07082 15 D01090 CREX template for synoptic reports RA II
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12121
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07083 14 D01090 CREX template for synoptic reports RA III
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07084 16 D01090 CREX template for synoptic reports RA IV
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B20055
+           R01000
+           C05001
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07086 11 D01090 CREX template for synoptic reports RA VI
+           D02031
+           D02035
+           D02036
+           B08002
+           D02037
+           D02066
+           D02043
+           D02044
+           R01002
+           D02045
+ D07090 13 D01092 CREX template for synoptic reports from mobile land stations
+           D02031
+           D02035
+           D02036
+           D02047
+           008002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D08001  3 D01033                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08002  3 D01034                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08003  3 D01035                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08004  3 D01036                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08005  2 D08004                                                                                                       
+           D02024                                                                                                       
+ D08006  8 B10004                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12004                                                                                                       
+           B13003                                                                                                       
+           B22042                                                                                                       
+ D08007  4 D01055                                                                                                       
+           D02011                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D08008  3 D01093
+           D02062
+           D02063
+ D08009  7 D01093
+           D02001
+           D02054
+           B08002
+           D02055
+           D02057
+           D02060
+ D08010 15 B01011
+           R13000
+           D01011
+           D01012
+           D01021
+           B04080
+           B22049
+           B04080
+           B22059
+           B04080
+           B22005
+           B02042
+           B22032
+           B02042
+           B04080
+ D09001  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09002  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09003  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09004  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09005  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09006  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09007  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09008  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09011  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09012  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09013  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09014  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09015  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09016  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09017  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09018  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09019  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09020  7 D01031                                                                                                       
+           B02003                                                                                                       
+           R04000                                                                                                       
+           B07003                                                                                                       
+           B11003                                                                                                       
+           B11004                                                                                                       
+           B11005                                                                                                       
+ D09030  7 B15004                                                                                                       
+           B15005                                                                                                       
+           R04000                                                                                                       
+           B04015                                                                                                       
+           B08006                                                                                                       
+           B07004                                                                                                       
+           B15003                                                                                                       
+ D09040  3 D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09041  4 D07041
+           D01075
+           D01076
+           D09030
+ D09042  4 D07042                                                                                                       
+           D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09044  4 D07044
+           D01075
+           D01076
+           D09030
+ D09050  7 D01110
+           D01113
+           D01114
+           R01000
+           D03050
+           R01000
+           D03051
+ D09051  7 D01110
+           D01113
+           D01114
+           R01000
+           D03052
+           R01000
+           D03053
+ D09052  9 D01111
+           D01113
+           D01114
+           D02049
+           B22043
+           R01000
+           D03054
+           R01000
+           D03051
+ D09053  7 D01112
+           D01113
+           D01114
+           R01000
+           D03054
+           R01000
+           D03051
+ D10001  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01026                                                                                                       
+           D03025                                                                                                       
+ D10002  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01009                                                                                                       
+           D03023                                                                                                       
+ D10003  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01006                                                                                                       
+           D03023                                                                                                       
+ D10004  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01003                                                                                                       
+           D03024                                                                                                       
+ D10005  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03025                                                                                                       
+ D10006  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03023                                                                                                       
+ D10007  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03024                                                                                                       
+ D10008  8 D10011                                                                                                       
+           R01019                                                                                                       
+           D10012                                                                                                       
+           B02150                                                                                                       
+           B25079                                                                                                       
+           B25080                                                                                                       
+           B33032                                                                                                       
+           B14045                                                                                                       
+ D10009  3 D10011                                                                                                       
+           R01015                                                                                                       
+           D10012                                                                                                       
+ D10010  3 D10011                                                                                                       
+           R01005                                                                                                       
+           D10012                                                                                                       
+ D10014  3 D01072                                                                                                       
+           D03041                                                                                                       
+           D04011                                                                                                       
+ D10015 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01003                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01003                                                                                                       
+           D04033                                                                                                       
+ D10016 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10020  6 D10022                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           D04034                                                                                                       
+           D10021                                                                                                       
+ D10022  4 B01007                                                                                                       
+           B02019                                                                                                       
+           B01033                                                                                                       
+           B02172                                                                                                       
+ D10023 17 D01072                                                                                                       
+           B30021                                                                                                       
+           B30022                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B07025                                                                                                       
+           B10002                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           R05002                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10050 13 D10051                                                                                                       
+           D10052                                                                                                       
+           R01000                                                                                                       
+           D10053                                                                                                       
+           R01004                                                                                                       
+           D10054                                                                                                       
+           B20010                                                                                                       
+           D10052                                                                                                       
+           R01015                                                                                                       
+           D10053                                                                                                       
+           D10052                                                                                                       
+           R01004                                                                                                       
+           D10053                                                                                                       
+ D10195  3 D01250
+           D03250
+           D04250
+ D11001  9 D01051                                                                                                       
+           B07002                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11032                                                                                                       
+           B11033                                                                                                       
+           B20041                                                                                                       
+ D11002  4 D01065                                                                                                       
+           D01066                                                                                                       
+           D11003                                                                                                       
+           D11004                                                                                                       
+ D11003  5 B10070                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12001                                                                                                       
+           B13002                                                                                                       
+ D11004 12 R01000                                                                                                       
+           B11034                                                                                                       
+           R01000                                                                                                       
+           B11035                                                                                                       
+           R01000                                                                                                       
+           B11075                                                                                                       
+           R01000                                                                                                       
+           B11076                                                                                                       
+           R01000                                                                                                       
+           B33025                                                                                                       
+           R01000                                                                                                       
+           B33026                                                                                                       
+ D11005 13 B01008                                                                                                       
+           B01023                                                                                                       
+           D01021                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           B07010                                                                                                       
+           B08009                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11036                                                                                                       
+           B12101                                                                                                       
+           B33025                                                                                                       
+ D11006  6 B07010                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02064                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+ D11193 16 D01197                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           B08004                                                                                                       
+           B07004                                                                                                       
+           B08021                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11034                                                                                                       
+           B11035                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B13003                                                                                                       
+           B20041                                                                                                       
+ D12001  2 D01043                                                                                                       
+           D04001                                                                                                       
+ D12002  2 D01043                                                                                                       
+           D04002                                                                                                       
+ D12003  2 D01042                                                                                                       
+           D04003                                                                                                       
+ D12004  2 D01042                                                                                                       
+           D04004                                                                                                       
+ D12005  2 D01042                                                                                                       
+           B20014                                                                                                       
+ D12006  2 D01044                                                                                                       
+           D04005                                                                                                       
+ D12007  2 D01042                                                                                                       
+           D04006                                                                                                       
+ D12010  6 B01007                                                                                                       
+           B05040                                                                                                       
+           B02021                                                                                                       
+           B05041                                                                                                       
+           B04001                                                                                                       
+           B04043                                                                                                       
+ D12014  8 D12010                                                                                                       
+           D12011                                                                                                       
+           R05056                                                                                                       
+           D01023                                                                                                       
+           B05042                                                                                                       
+           B05052                                                                                                       
+           D12012                                                                                                       
+           D12013                                                                                                       
+ D12016  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12015                                                                                                       
+ D12018  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12017                                                                                                       
+ D12020 11 D01047                                                                                                       
+           D01048                                                                                                       
+           B15015                                                                                                       
+           B29002                                                                                                       
+           B21076                                                                                                       
+           R04012                                                                                                       
+           B06030                                                                                                       
+           R02012                                                                                                       
+           B05030                                                                                                       
+           B21075                                                                                                       
+           B21066                                                                                                       
+ D12021  6 D01047                                                                                                       
+           R01003                                                                                                       
+           D01049                                                                                                       
+           B11012                                                                                                       
+           B11011                                                                                                       
+           B21067                                                                                                       
+ D12022 15 D01047                                                                                                       
+           B08022                                                                                                       
+           B11012                                                                                                       
+           B11050                                                                                                       
+           B22070                                                                                                       
+           B22026                                                                                                       
+           D12041                                                                                                       
+           B10050                                                                                                       
+           B21068                                                                                                       
+           B21071                                                                                                       
+           B21072                                                                                                       
+           B21073                                                                                                       
+           D12042                                                                                                       
+           B21062                                                                                                       
+           B15011                                                                                                       
+ D12023  7 D01047                                                                                                       
+           R03003                                                                                                       
+           B08022                                                                                                       
+           B12061                                                                                                       
+           B22050                                                                                                       
+           B21069                                                                                                       
+           B21085                                                                                                       
+ D12024 11 D12020                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12025 11 D12019                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12026 19 D01046                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           D12031                                                                                                       
+           R01004                                                                                                       
+           D12030                                                                                                       
+           B21110                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21111                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21112                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21113                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+ D12027  9 D01047                                                                                                       
+           R05009                                                                                                       
+           D01023                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B21085                                                                                                       
+           B21070                                                                                                       
+ D12031  8 B05034                                                                                                       
+           B06034                                                                                                       
+           B21109                                                                                                       
+           B11081                                                                                                       
+           B11082                                                                                                       
+           B21101                                                                                                       
+           B21102                                                                                                       
+           B21103                                                                                                       
+ D12032  4 B21120                                                                                                       
+           B21121                                                                                                       
+           B13055                                                                                                       
+           B21122                                                                                                       
+ D12033  4 B02104                                                                                                       
+           B08022                                                                                                       
+           B12063                                                                                                       
+           B12065                                                                                                       
+ D12042  6 B21077                                                                                                       
+           B21078                                                                                                       
+           B21079                                                                                                       
+           B21080                                                                                                       
+           B21081                                                                                                       
+           B21082                                                                                                       
+ D12045 21 B01007                                                                                                       
+           B02019                                                                                                       
+           B01096                                                                                                       
+           B25061                                                                                                       
+           B05040                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           B07002                                                                                                       
+           B12180                                                                                                       
+           B12181                                                                                                       
+           B12182                                                                                                       
+           B12183                                                                                                       
+           B12184                                                                                                       
+           B12185                                                                                                       
+           B02174                                                                                                       
+           B21086                                                                                                       
+           B12186                                                                                                       
+           B21087                                                                                                       
+           B12187                                                                                                       
+           B33043                                                                                                       
+ D13009  3 B21001                                                                                                       
+           R01000                                                                                                       
+           B21001                                                                                                       
+ D13010  3 B21036                                                                                                       
+           R01000                                                                                                       
+           B21036                                                                                                       
+ D13031  4 B06002                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13032  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13031                                                                                                       
+ D13041  9 B06002                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13042  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13041                                                                                                       
+ D13043 11 B06002                                                                                                       
+           B05002                                                                                                       
+           B05012                                                                                                       
+           R12000                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D15001  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06001                                                                                                       
+ D15002  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06004                                                                                                       
+ D16001 10 D01011                                                                                                       
+           B04004                                                                                                       
+           D01023                                                                                                       
+           B01021                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B10051                                                                                                       
+           B19002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16002 15 B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B01033                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+ D16003 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B11002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16004 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B11031                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16005  9 R08000                                                                                                       
+           B08005                                                                                                       
+           B08007                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B01026                                                                                                       
+           B19001                                                                                                       
+           B08007                                                                                                       
+           B08005                                                                                                       
+ D16006 12 R11000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16007 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16008 11 R10000                                                                                                       
+           B08001                                                                                                       
+           B08007                                                                                                       
+           B08023                                                                                                       
+           R03000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B08023                                                                                                       
+           B08007                                                                                                       
+           B08001                                                                                                       
+ D16009 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20041                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16010  8 R07000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B01022                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16011 17 R16000                                                                                                       
+           B08011                                                                                                       
+           B01022                                                                                                       
+           B08007                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B20090                                                                                                       
+           B08021                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16020  5 B01023
+           B01025
+           B01027
+           D01011
+           D01012
+ D16021 23 D01023
+           B02041
+           B19001
+           B19007
+           B19005
+           B19006
+           B19008
+           B08005
+           B10004
+           B08005
+           B10004
+           B19007
+           B08005
+           B08021
+           B04075
+           B11040
+           B19007
+           R05004
+           B05021
+           B05021
+           R02002
+           B19003
+           B19004
+ D16022 23 B01032                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B19010                                                                                                       
+           R18000                                                                                                       
+           B08021                                                                                                       
+           B04014                                                                                                       
+           B08005                                                                                                       
+           D01023                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B10004                                                                                                       
+           B11041                                                                                                       
+           B08021                                                                                                       
+           B04075                                                                                                       
+           B11040                                                                                                       
+           B19008                                                                                                       
+           R05004                                                                                                       
+           B05021                                                                                                       
+           B05021                                                                                                       
+           R02002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16026  2 D16020
+           D16021
+ D16050 16 D01001
+           D01011
+           D01012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ D16052 28 D01005
+           D01011
+           D01012
+           001007
+           025150
+           R22000
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ D18001  2 D01025                                                                                                       
+           B24011                                                                                                       
+ D18003  4 D01026                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24021                                                                                                       
+ D18004  6 D01025                                                                                                       
+           B04023                                                                                                       
+           B13011                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24022                                                                                                       
+ D21001  6 B02101                                                                                                       
+           B02114                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02121                                                                                                       
+ D21003  4 B21051                                                                                                       
+           B21014                                                                                                       
+           B21017                                                                                                       
+           B21030                                                                                                       
+ D21004  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D21003                                                                                                       
+ D21005 12 B25004                                                                                                       
+           B02121                                                                                                       
+           B02122                                                                                                       
+           B02123                                                                                                       
+           B02124                                                                                                       
+           B02125                                                                                                       
+           B02126                                                                                                       
+           B02127                                                                                                       
+           B02128                                                                                                       
+           B02129                                                                                                       
+           B02130                                                                                                       
+           B02131                                                                                                       
+ D21006  4 B25001                                                                                                       
+           B25002                                                                                                       
+           B25003                                                                                                       
+           B25005                                                                                                       
+ D21007  8 B25009                                                                                                       
+           B25010                                                                                                       
+           B25011                                                                                                       
+           B25012                                                                                                       
+           B25013                                                                                                       
+           B25015                                                                                                       
+           B25016                                                                                                       
+           B25017                                                                                                       
+ D21008  3 B25006                                                                                                       
+           B25007                                                                                                       
+           B25008                                                                                                       
+ D21009  2 B25018                                                                                                       
+           B25019                                                                                                       
+ D21010 13 B02101                                                                                                       
+           B07002                                                                                                       
+           B02102                                                                                                       
+           B02103                                                                                                       
+           B02104                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02108                                                                                                       
+           B02109                                                                                                       
+           B02110                                                                                                       
+           B02132                                                                                                       
+           B02133                                                                                                       
+ D21011  3 B30031                                                                                                       
+           B30032                                                                                                       
+           B29002                                                                                                       
+ D21012  2 R01000                                                                                                       
+           B02135                                                                                                       
+ D35001  4 B08035
+           B35001
+           B08036
+           D01001
+ D35002  4 B08035
+           B35001
+           B08036
+           B01033
+ D35003  6 B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B04073
+ D35004  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           D01001
+           B35011
+ D35005  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           B35011
+ D35006  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01003
+           B35011
+ D35007  9 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           R02000
+           B01002
+           B35011
+ D35010  3 D35002
+           D35003
+           D35007
diff --git a/crextables/D000203 b/crextables/D000203
new file mode 100755
index 0000000..c0c0921
--- /dev/null
+++ b/crextables/D000203
@@ -0,0 +1,2128 @@
+ D00002  2 B00002                                                                                                       
+           B00003                                                                                                       
+ D00003  3 B00010                                                                                                       
+           B00011                                                                                                       
+           B00012                                                                                                       
+ D00004  9 D00003                                                                                                       
+           B00013                                                                                                       
+           B00014                                                                                                       
+           B00015                                                                                                       
+           B00016                                                                                                       
+           B00017                                                                                                       
+           B00018                                                                                                       
+           B00019                                                                                                       
+           B00020                                                                                                       
+ D00010  3 D00003                                                                                                       
+           R01000                                                                                                       
+           B00030                                                                                                       
+ D01001  2 B01001                                                                                                       
+           B01002                                                                                                       
+ D01002  3 B01003                                                                                                       
+           B01004                                                                                                       
+           B01005                                                                                                       
+ D01003  3 B01011                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+ D01004  4 B01001                                                                                                       
+           B01002                                                                                                       
+           B01015                                                                                                       
+           B02001                                                                                                       
+ D01005  2 001035
+           001034
+ D01011  3 B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+ D01012  2 B04004                                                                                                       
+           B04005                                                                                                       
+ D01013  3 B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+ D01021  2 B05001                                                                                                       
+           B06001                                                                                                       
+ D01022  3 B05001                                                                                                       
+           B06001                                                                                                       
+           B07001                                                                                                       
+ D01023  2 B05002                                                                                                       
+           B06002                                                                                                       
+ D01024  3 B05002                                                                                                       
+           B06002                                                                                                       
+           B07001                                                                                                       
+ D01025  3 D01023                                                                                                       
+           B04003                                                                                                       
+           D01012                                                                                                       
+ D01026  7 D01021                                                                                                       
+           B04003                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04005                                                                                                       
+ D01029  3 B01018
+           B02001
+           D01011
+ D01030  4 B01018
+           B02001
+           D01011
+           D01024
+ D01031  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01032  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01033  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+ D01034  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01035  7 B01005                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01036  5 D01003                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01037  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01038  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01039  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01040  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01041  5 B01007                                                                                                       
+           B02021                                                                                                       
+           B02022                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+ D01042  2 D01041                                                                                                       
+           D01021                                                                                                       
+ D01043  5 B01007                                                                                                       
+           B02023                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01044  5 B01007                                                                                                       
+           B02024                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01049  5 B02111                                                                                                       
+           B02112                                                                                                       
+           B21062                                                                                                       
+           B21063                                                                                                       
+           B21065                                                                                                       
+ D01051  6 B01006                                                                                                       
+           B02061                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B08004                                                                                                       
+ D01055  7 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B01012                                                                                                       
+           B01014                                                                                                       
+ D01062  2 R01000                                                                                                       
+           D01001                                                                                                       
+ D01065  8 B01006                                                                                                       
+           B01008                                                                                                       
+           B02001                                                                                                       
+           B02002                                                                                                       
+           B02005                                                                                                       
+           B02062                                                                                                       
+           B02070                                                                                                       
+           B02065                                                                                                       
+ D01066  6 D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           B07004                                                                                                       
+           B02064                                                                                                       
+           B08004                                                                                                       
+ D01070  3 B02143
+           B02142
+           B02144
+ D01071  5 B01007                                                                                                       
+           B01031                                                                                                       
+           B02020                                                                                                       
+           B02028                                                                                                       
+           B02029                                                                                                       
+ D01072  4 D01071                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01074  4 B02143
+           B02142
+           B02145
+           B02146
+ D01075  6 D01001
+           B01015
+           D01024
+           B08021
+           D01011
+           D01012
+ D01076  3 B02011
+           B02143
+           B02142
+ D01090  6 D01004                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B07030                                                                                                       
+           B07031                                                                                                       
+ D01091 10 B02180                                                                                                       
+           B02181                                                                                                       
+           B02182                                                                                                       
+           B02183                                                                                                       
+           B02184                                                                                                       
+           B02179                                                                                                       
+           B02186                                                                                                       
+           B02187                                                                                                       
+           B02188                                                                                                       
+           B02189                                                                                                       
+ D01092  9 B01011
+           B01003
+           B02001
+           D01011
+           D01012
+           D01021
+           B07030
+           B07031
+           B33024
+ D01093  3 D01036
+           B07030
+           B07031
+ D01110  5 D01001
+           B01011
+           B02011
+           B02014
+           B02003
+ D01111  6 D01001
+           B01011
+           B02011
+           B02013
+           B02014
+           B02003
+ D01112  5 B01006
+           B02011
+           B02013
+           B02014
+           B02003
+ D01113  3 B08021
+           D01011
+           D01013
+ D01114  5 D01021
+           B07030
+           B07031
+           B07007
+           B33024
+ D01193  5 001007
+           001031
+           002196
+           002221
+           002222
+ D01250  4 D01193
+           D01011
+           D01013
+           D01021
+ D02001  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02002  5 B10004                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02003  9 B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+           B12006                                                                                                       
+           B13003                                                                                                       
+           B20001                                                                                                       
+           B20003                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02004  7 B20010                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20013                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+ D02005  4 B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B20013                                                                                                       
+ D02006  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10062                                                                                                       
+           B10063                                                                                                       
+ D02011  3 D02001                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02012  3 D02002                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02013  4 D02006                                                                                                       
+           D02003                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D02021  3 B22001                                                                                                       
+           B22011                                                                                                       
+           B22021                                                                                                       
+ D02022  3 B22002                                                                                                       
+           B22012                                                                                                       
+           B22022                                                                                                       
+ D02023  3 B22003                                                                                                       
+           B22013                                                                                                       
+           B22023                                                                                                       
+ D02024  3 D02022                                                                                                       
+           R01002                                                                                                       
+           D02023                                                                                                       
+ D02031  4 D02001
+           B10062
+           B07004
+           B10009
+ D02032  4 B07032
+           B12101
+           B12103
+           B13003
+ D02033  2 B07032
+           B20001
+ D02034  2 B07032
+           B13023
+ D02035  7 D02032
+           D02033
+           D02034
+           B07032
+           D02004
+           R01000
+           D02005
+ D02036  6 R05000
+           B08002
+           B20011
+           B20012
+           B20014
+           B20017
+ D02037  3 B20062
+           B13013
+           B12113
+ D02038  4 B20003
+           B04024
+           B20004
+           B20005
+ D02039  2 B04024
+           B14031
+ D02040  4 B07032
+           R02002
+           B04024
+           B13011
+ D02041  7 B07032
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02042 11 B07032
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02044  3 B04024
+           B02004
+           B13033
+ D02045  7 B04024
+           B14002
+           B14004
+           B14016
+           B14028
+           B14029
+           B14030
+ D02046  3 B04024
+           B04024
+           B12049
+ D02047  3 R02003
+           B08002
+           B20054
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02048  5 B05021
+           B07021
+           B20012
+           B05021
+           B07021
+ D02049  7 B08002
+           B20011
+           B20013
+           B20012
+           B20012
+           B20012
+           B08002
+ D02051 12 B10004                                                                                                       
+           B10051                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B12004                                                                                                       
+           B12051                                                                                                       
+           B12016                                                                                                       
+           B12017                                                                                                       
+           B13004                                                                                                       
+           R02004                                                                                                       
+           B08051                                                                                                       
+           B08020                                                                                                       
+ D02052  7 B07032
+           B07033
+           B12101
+           B02039
+           B12102
+           B12103
+           B13003
+ D02053  3 B07032
+           B07033
+           B20001
+ D02054  8 D02052
+           D02053
+           B07033
+           D02034
+           B07032
+           D02004
+           R01000
+           302005
+ D02055  8 B20031
+           B20032
+           B20033
+           B20034
+           B20035
+           B20036
+           B20037
+           B20038
+ D02056  2 B02038
+           B22043
+ D02057  3 D02056
+           D02021
+           D02024
+ D02058  8 B07032
+           B07033
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02059 12 B07032
+           B07033
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02060  4 D02038
+           D02040
+           D02058
+           D02059
+ D02062 18 D02001
+           D02052
+           D02053
+           007033
+           R01000
+           D02034
+           007032
+           R01000
+           D02005
+           008002
+           R01000
+           D02055
+           R01000
+           D02056
+           R01000
+           D02021
+           R01000
+           D02024
+ D02063  6 D02038
+           R01000
+           D02040
+           R01000
+           D02058
+           D02059
+ D02066 16 B20023
+           B20024
+           B20027
+           B20054
+           B20023
+           B20027
+           B20054
+           B20025
+           B20026
+           B20027
+           B20040
+           B20066
+           B20027
+           B20021
+           B20067
+           B20027
+ D02069  4 B07032                                                                                                       
+           B07033                                                                                                       
+           B33041                                                                                                       
+           B20001                                                                                                       
+ D02070  8 B07032                                                                                                       
+           B07033                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02071 14 B07032                                                                                                       
+           B07033                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B08021                                                                                                       
+           R03002                                                                                                       
+           B04025                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B04025                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02072  5 B07032                                                                                                       
+           B07033                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+           B13003                                                                                                       
+ D02073  7 B20010                                                                                                       
+           R05004                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B33041                                                                                                       
+           B20013                                                                                                       
+ D02074  4 B20003                                                                                                       
+           B04025                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02075  5 B08021                                                                                                       
+           B04025                                                                                                       
+           B13055                                                                                                       
+           B13058                                                                                                       
+           B08021                                                                                                       
+ D02076  7 B02021                                                                                                       
+           B20022                                                                                                       
+           B26020                                                                                                       
+           B20023                                                                                                       
+           B20024                                                                                                       
+           B20025                                                                                                       
+           B20026                                                                                                       
+ D02077 12 B07032                                                                                                       
+           B07033                                                                                                       
+           B04025                                                                                                       
+           B12111                                                                                                       
+           B12112                                                                                                       
+           B07032                                                                                                       
+           B04025                                                                                                       
+           B12112                                                                                                       
+           B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02078  4 B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02079  5 B07032                                                                                                       
+           B02175                                                                                                       
+           B02178                                                                                                       
+           B04025                                                                                                       
+           B13011                                                                                                       
+ D02080  3 B02185                                                                                                       
+           B04025                                                                                                       
+           B13033                                                                                                       
+ D02081  2 B04025                                                                                                       
+           B14031                                                                                                       
+ D02082  7 B04025                                                                                                       
+           B14002                                                                                                       
+           B14004                                                                                                       
+           B14016                                                                                                       
+           B14028                                                                                                       
+           B14029                                                                                                       
+           B14030                                                                                                       
+ D02083  8 B04025                                                                                                       
+           B08023                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12101                                                                                                       
+           B13003                                                                                                       
+           B08023                                                                                                       
+ D03001  3 B07003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03002  3 B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03003  4 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+ D03004  6 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03011  4 B07003                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03012  4 B07004                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03013  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B13003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03014  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03031  6 B07004                                                                                                       
+           B08003                                                                                                       
+           B07021                                                                                                       
+           B07022                                                                                                       
+           B08012                                                                                                       
+           B12061                                                                                                       
+ D03032  2 B20011                                                                                                       
+           B20016                                                                                                       
+ D03033  2 B20010                                                                                                       
+           B20016                                                                                                       
+ D03041  8 B02152                                                                                                       
+           B02023                                                                                                       
+           B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12071                                                                                                       
+ D03050  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11001
+           B11002
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03052  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11001
+           B11002
+ D03053  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11061
+           B11062
+ D03054 10 B04086
+           B08042
+           B07004
+           B10009
+           B05015
+           B06015
+           B12101
+           B12103
+           B11001
+           B11002
+ D03250  8 B02252
+           B02023
+           B07004
+           B11001
+           B11002
+           B02197
+           B02198
+           B12193
+ D04001  5 B08003                                                                                                       
+           B10004                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04002  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04003  2 B08003                                                                                                       
+           B12001                                                                                                       
+ D04004  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B20010                                                                                                       
+           B12001                                                                                                       
+ D04005  4 B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+ D04006  3 B14001                                                                                                       
+           B14001                                                                                                       
+           B14003                                                                                                       
+ D04011 27 B02163                                                                                                       
+           B02164                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B02057                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B08021                                                                                                       
+           B04024                                                                                                       
+           R10004                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           R03010                                                                                                       
+           B02163                                                                                                       
+           B07004                                                                                                       
+           B12001                                                                                                       
+ D04030  3 B27031                                                                                                       
+           B28031                                                                                                       
+           B10031                                                                                                       
+ D04031  3 B01041                                                                                                       
+           B01042                                                                                                       
+           B01043                                                                                                       
+ D04032  5 B02153                                                                                                       
+           B02154                                                                                                       
+           B20081                                                                                                       
+           B20082                                                                                                       
+           B20012                                                                                                       
+ D04033  8 B02152                                                                                                       
+           B02166                                                                                                       
+           B02167                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12075                                                                                                       
+           B12076                                                                                                       
+           B12063                                                                                                       
+ D04034  9 R02004                                                                                                       
+           B27001                                                                                                       
+           B28001                                                                                                       
+           B07022                                                                                                       
+           B05043                                                                                                       
+           B20010                                                                                                       
+           B20016                                                                                                       
+           B33003                                                                                                       
+           B10040                                                                                                       
+ D04250 27 B02231
+           B02232
+           B08012
+           B07024
+           B02057
+           B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B08021
+           B04024
+           R10004
+           B08021
+           B04004
+           B04005
+           B04006
+           B08021
+           B04004
+           B04005
+           B04006
+           B11001
+           B11002
+           R03010
+           B02231
+           B07004
+           B12001
+ D05001  4 B11001
+           B11002
+           B13060
+           B13071
+ D05002 11 D01012
+           B12001
+           B13003
+           B14051
+           B13060
+           B13072
+           B13080
+           B13081
+           B13082
+           B13083
+           B13084
+ D05003  4 D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05001                                                                                                       
+ D05004  3 D01030
+           D05002
+           D05003
+ D05006  8 B13072                                                                                                       
+           B13082                                                                                                       
+           B13019                                                                                                       
+           C07005
+           C01004
+           B12001                                                                                                       
+           B13073                                                                                                       
+           B13060                                                                                                       
+ D05007  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05006                                                                                                       
+ D05008  4 D05006                                                                                                       
+           C07005
+           C01004
+           B12030                                                                                                       
+ D05009  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05008                                                                                                       
+ D05010  3 D05008
+           B02091
+           B02091
+ D05011  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05010                                                                                                       
+ D05016  7 B14021
+           B07004
+           B13003
+           B11002
+           B11001
+           B11041
+           B11043
+ D05017  5 B13080
+           B13081
+           B13083
+           B13085
+           B13084
+ D05018  7 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R03000                                                                                                       
+           D05008                                                                                                       
+           D05016                                                                                                       
+           D05017                                                                                                       
+ D06001  4 B02032                                                                                                       
+           R02000                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D06002  3 B02031                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06003  4 B02002                                                                                                       
+           B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+ D06004  6 B02032                                                                                                       
+           B02033                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22043                                                                                                       
+           B22062                                                                                                       
+ D06005  5 B02031                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06006  3 D06003                                                                                                       
+           D06002                                                                                                       
+           B22063                                                                                                       
+ D06007  6 B01012                                                                                                       
+           B01014                                                                                                       
+           D06008                                                                                                       
+           B04024                                                                                                       
+           B27003                                                                                                       
+           B28003                                                                                                       
+ D06008  3 B02034                                                                                                       
+           B02035                                                                                                       
+           B02036                                                                                                       
+ D06019  9 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           C01002
+           B04015
+           B04065
+ D06020  8 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           B04075
+           B04065
+ D06021  7 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22122                                                                                                       
+           B22123                                                                                                       
+           B12001                                                                                                       
+           D03002                                                                                                       
+ D06022  5 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+ D06023  8 B01015                                                                                                       
+           D01023                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+           B22120                                                                                                       
+           B22121                                                                                                       
+ D06024  4 D06020
+           R02000
+           B22038
+           B22039
+ D06025  4 D06019
+           R02006
+           B22038
+           B22039
+ D07001  2 D01031                                                                                                       
+           D02011                                                                                                       
+ D07002  2 D01032                                                                                                       
+           D02011                                                                                                       
+ D07003  3 D07001                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07004  3 D07002                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07005  3 D07001                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07006  3 D07002                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07007  2 D01031                                                                                                       
+           D02012                                                                                                       
+ D07008  2 D01032                                                                                                       
+           D02012                                                                                                       
+ D07009  2 D01031                                                                                                       
+           D02013                                                                                                       
+ D07011 16 B01063                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B07006                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B10052                                                                                                       
+           B20009                                                                                                       
+ D07012  4 R03000                                                                                                       
+           B08023                                                                                                       
+           B05021                                                                                                       
+           B20001                                                                                                       
+ D07013  7 R06000                                                                                                       
+           B01064                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B20018                                                                                                       
+ D07014  2 R01000                                                                                                       
+           B20019                                                                                                       
+ D07015  3 R01000                                                                                                       
+           D02005                                                                                                       
+           B20002                                                                                                       
+ D07016  2 R01000                                                                                                       
+           B20020                                                                                                       
+ D07017  2 R01000                                                                                                       
+           B11070                                                                                                       
+ D07018 13 B08016                                                                                                       
+           R02000                                                                                                       
+           B08017                                                                                                       
+           D01012                                                                                                       
+           R04000                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B20009                                                                                                       
+           R01000                                                                                                       
+           B20001                                                                                                       
+           D07014                                                                                                       
+ D07020  3 D07011                                                                                                       
+           D07014                                                                                                       
+           D07016                                                                                                       
+ D07021  9 D07011                                                                                                       
+           D07012                                                                                                       
+           D07013                                                                                                       
+           D07014                                                                                                       
+           D07015                                                                                                       
+           D07016                                                                                                       
+           D07017                                                                                                       
+           D07018                                                                                                       
+           D07015                                                                                                       
+ D07030  2 B15001                                                                                                       
+           B15002                                                                                                       
+ D07031  7 B08022                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15002                                                                                                       
+ D07041  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01070                                                                                                       
+           D07030                                                                                                       
+ D07042  9 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           D01070                                                                                                       
+           D07031                                                                                                       
+ D07043  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01074                                                                                                       
+           D07030                                                                                                       
+ D07044  9 D01001
+           B01015
+           D01024
+           D01011
+           D01012
+           B08021
+           B04025
+           D01074
+           D07031
+ D07060  2 B07061
+           B12030
+ D07061  3 D01031
+           R01005
+           D07060
+ D07062  3 D01032
+           R01005
+           D07060
+ D07063  2 B07061
+           B12130
+ D07080 13 D01090 CREX template for synoptic reports
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07081 24 D01090 CREX template for synoptic reports RA I
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           B13056
+           B13057
+           B20101
+           B20102
+           B20103
+           B20104
+           B20105
+           B20106
+           B20107
+           B20108
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07082 15 D01090 CREX template for synoptic reports RA II
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12121
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07083 14 D01090 CREX template for synoptic reports RA III
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07084 16 D01090 CREX template for synoptic reports RA IV
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B20055
+           R01000
+           C05001
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07086 11 D01090 CREX template for synoptic reports RA VI
+           D02031
+           D02035
+           D02036
+           B08002
+           D02037
+           D02066
+           D02043
+           D02044
+           R01002
+           D02045
+ D07090 13 D01092 CREX template for synoptic reports from mobile land stations
+           D02031
+           D02035
+           D02036
+           D02047
+           008002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D08001  3 D01033                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08002  3 D01034                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08003  3 D01035                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08004  3 D01036                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08005  2 D08004                                                                                                       
+           D02024                                                                                                       
+ D08006  8 B10004                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12004                                                                                                       
+           B13003                                                                                                       
+           B22042                                                                                                       
+ D08007  4 D01055                                                                                                       
+           D02011                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D08008  3 D01093
+           D02062
+           D02063
+ D08009  7 D01093
+           D02001
+           D02054
+           B08002
+           D02055
+           D02057
+           D02060
+ D08010 15 B01011
+           R13000
+           D01011
+           D01012
+           D01021
+           B04080
+           B22049
+           B04080
+           B22059
+           B04080
+           B22005
+           B02042
+           B22032
+           B02042
+           B04080
+ D09001  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09002  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09003  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09004  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09005  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09006  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09007  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09008  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09011  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09012  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09013  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09014  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09015  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09016  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09017  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09018  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09019  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09020  7 D01031                                                                                                       
+           B02003                                                                                                       
+           R04000                                                                                                       
+           B07003                                                                                                       
+           B11003                                                                                                       
+           B11004                                                                                                       
+           B11005                                                                                                       
+ D09030  7 B15004                                                                                                       
+           B15005                                                                                                       
+           R04000                                                                                                       
+           B04015                                                                                                       
+           B08006                                                                                                       
+           B07004                                                                                                       
+           B15003                                                                                                       
+ D09040  3 D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09041  4 D07041
+           D01075
+           D01076
+           D09030
+ D09042  4 D07042                                                                                                       
+           D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09044  4 D07044
+           D01075
+           D01076
+           D09030
+ D09050  7 D01110
+           D01113
+           D01114
+           R01000
+           D03050
+           R01000
+           D03051
+ D09051  7 D01110
+           D01113
+           D01114
+           R01000
+           D03052
+           R01000
+           D03053
+ D09052  9 D01111
+           D01113
+           D01114
+           D02049
+           B22043
+           R01000
+           D03054
+           R01000
+           D03051
+ D09053  7 D01112
+           D01113
+           D01114
+           R01000
+           D03054
+           R01000
+           D03051
+ D10001  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01026                                                                                                       
+           D03025                                                                                                       
+ D10002  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01009                                                                                                       
+           D03023                                                                                                       
+ D10003  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01006                                                                                                       
+           D03023                                                                                                       
+ D10004  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01003                                                                                                       
+           D03024                                                                                                       
+ D10005  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03025                                                                                                       
+ D10006  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03023                                                                                                       
+ D10007  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03024                                                                                                       
+ D10008  8 D10011                                                                                                       
+           R01019                                                                                                       
+           D10012                                                                                                       
+           B02150                                                                                                       
+           B25079                                                                                                       
+           B25080                                                                                                       
+           B33032                                                                                                       
+           B14045                                                                                                       
+ D10009  3 D10011                                                                                                       
+           R01015                                                                                                       
+           D10012                                                                                                       
+ D10010  3 D10011                                                                                                       
+           R01005                                                                                                       
+           D10012                                                                                                       
+ D10014  3 D01072                                                                                                       
+           D03041                                                                                                       
+           D04011                                                                                                       
+ D10015 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01003                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01003                                                                                                       
+           D04033                                                                                                       
+ D10016 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10020  6 D10022                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           D04034                                                                                                       
+           D10021                                                                                                       
+ D10022  4 B01007                                                                                                       
+           B02019                                                                                                       
+           B01033                                                                                                       
+           B02172                                                                                                       
+ D10023 17 D01072                                                                                                       
+           B30021                                                                                                       
+           B30022                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B07025                                                                                                       
+           B10002                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           R05002                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10050 13 D10051                                                                                                       
+           D10052                                                                                                       
+           R01000                                                                                                       
+           D10053                                                                                                       
+           R01004                                                                                                       
+           D10054                                                                                                       
+           B20010                                                                                                       
+           D10052                                                                                                       
+           R01015                                                                                                       
+           D10053                                                                                                       
+           D10052                                                                                                       
+           R01004                                                                                                       
+           D10053                                                                                                       
+ D10195  3 D01250
+           D03250
+           D04250
+ D11001  9 D01051                                                                                                       
+           B07002                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11032                                                                                                       
+           B11033                                                                                                       
+           B20041                                                                                                       
+ D11002  4 D01065                                                                                                       
+           D01066                                                                                                       
+           D11003                                                                                                       
+           D11004                                                                                                       
+ D11003  5 B10070                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12001                                                                                                       
+           B13002                                                                                                       
+ D11004 12 R01000                                                                                                       
+           B11034                                                                                                       
+           R01000                                                                                                       
+           B11035                                                                                                       
+           R01000                                                                                                       
+           B11075                                                                                                       
+           R01000                                                                                                       
+           B11076                                                                                                       
+           R01000                                                                                                       
+           B33025                                                                                                       
+           R01000                                                                                                       
+           B33026                                                                                                       
+ D11005 13 B01008                                                                                                       
+           B01023                                                                                                       
+           D01021                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           B07010                                                                                                       
+           B08009                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11036                                                                                                       
+           B12101                                                                                                       
+           B33025                                                                                                       
+ D11006  6 B07010                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02064                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+ D11193 16 D01197                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           B08004                                                                                                       
+           B07004                                                                                                       
+           B08021                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11034                                                                                                       
+           B11035                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B13003                                                                                                       
+           B20041                                                                                                       
+ D12001  2 D01043                                                                                                       
+           D04001                                                                                                       
+ D12002  2 D01043                                                                                                       
+           D04002                                                                                                       
+ D12003  2 D01042                                                                                                       
+           D04003                                                                                                       
+ D12004  2 D01042                                                                                                       
+           D04004                                                                                                       
+ D12005  2 D01042                                                                                                       
+           B20014                                                                                                       
+ D12006  2 D01044                                                                                                       
+           D04005                                                                                                       
+ D12007  2 D01042                                                                                                       
+           D04006                                                                                                       
+ D12010  6 B01007                                                                                                       
+           B05040                                                                                                       
+           B02021                                                                                                       
+           B05041                                                                                                       
+           B04001                                                                                                       
+           B04043                                                                                                       
+ D12014  8 D12010                                                                                                       
+           D12011                                                                                                       
+           R05056                                                                                                       
+           D01023                                                                                                       
+           B05042                                                                                                       
+           B05052                                                                                                       
+           D12012                                                                                                       
+           D12013                                                                                                       
+ D12016  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12015                                                                                                       
+ D12018  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12017                                                                                                       
+ D12020 11 D01047                                                                                                       
+           D01048                                                                                                       
+           B15015                                                                                                       
+           B29002                                                                                                       
+           B21076                                                                                                       
+           R04012                                                                                                       
+           B06030                                                                                                       
+           R02012                                                                                                       
+           B05030                                                                                                       
+           B21075                                                                                                       
+           B21066                                                                                                       
+ D12021  6 D01047                                                                                                       
+           R01003                                                                                                       
+           D01049                                                                                                       
+           B11012                                                                                                       
+           B11011                                                                                                       
+           B21067                                                                                                       
+ D12022 15 D01047                                                                                                       
+           B08022                                                                                                       
+           B11012                                                                                                       
+           B11050                                                                                                       
+           B22070                                                                                                       
+           B22026                                                                                                       
+           D12041                                                                                                       
+           B10050                                                                                                       
+           B21068                                                                                                       
+           B21071                                                                                                       
+           B21072                                                                                                       
+           B21073                                                                                                       
+           D12042                                                                                                       
+           B21062                                                                                                       
+           B15011                                                                                                       
+ D12023  7 D01047                                                                                                       
+           R03003                                                                                                       
+           B08022                                                                                                       
+           B12061                                                                                                       
+           B22050                                                                                                       
+           B21069                                                                                                       
+           B21085                                                                                                       
+ D12024 11 D12020                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12025 11 D12019                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12026 19 D01046                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           D12031                                                                                                       
+           R01004                                                                                                       
+           D12030                                                                                                       
+           B21110                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21111                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21112                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21113                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+ D12027  9 D01047                                                                                                       
+           R05009                                                                                                       
+           D01023                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B21085                                                                                                       
+           B21070                                                                                                       
+ D12031  8 B05034                                                                                                       
+           B06034                                                                                                       
+           B21109                                                                                                       
+           B11081                                                                                                       
+           B11082                                                                                                       
+           B21101                                                                                                       
+           B21102                                                                                                       
+           B21103                                                                                                       
+ D12032  4 B21120                                                                                                       
+           B21121                                                                                                       
+           B13055                                                                                                       
+           B21122                                                                                                       
+ D12033  4 B02104                                                                                                       
+           B08022                                                                                                       
+           B12063                                                                                                       
+           B12065                                                                                                       
+ D12042  6 B21077                                                                                                       
+           B21078                                                                                                       
+           B21079                                                                                                       
+           B21080                                                                                                       
+           B21081                                                                                                       
+           B21082                                                                                                       
+ D12045 21 B01007                                                                                                       
+           B02019                                                                                                       
+           B01096                                                                                                       
+           B25061                                                                                                       
+           B05040                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           B07002                                                                                                       
+           B12180                                                                                                       
+           B12181                                                                                                       
+           B12182                                                                                                       
+           B12183                                                                                                       
+           B12184                                                                                                       
+           B12185                                                                                                       
+           B02174                                                                                                       
+           B21086                                                                                                       
+           B12186                                                                                                       
+           B21087                                                                                                       
+           B12187                                                                                                       
+           B33043                                                                                                       
+ D13009  3 B21001                                                                                                       
+           R01000                                                                                                       
+           B21001                                                                                                       
+ D13010  3 B21036                                                                                                       
+           R01000                                                                                                       
+           B21036                                                                                                       
+ D13031  4 B06002                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13032  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13031                                                                                                       
+ D13041  9 B06002                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13042  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13041                                                                                                       
+ D13043 11 B06002                                                                                                       
+           B05002                                                                                                       
+           B05012                                                                                                       
+           R12000                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D15001  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06001                                                                                                       
+ D15002  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06004                                                                                                       
+ D16001 10 D01011                                                                                                       
+           B04004                                                                                                       
+           D01023                                                                                                       
+           B01021                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B10051                                                                                                       
+           B19002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16002 15 B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B01033                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+ D16003 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B11002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16004 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B11031                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16005  9 R08000                                                                                                       
+           B08005                                                                                                       
+           B08007                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B01026                                                                                                       
+           B19001                                                                                                       
+           B08007                                                                                                       
+           B08005                                                                                                       
+ D16006 12 R11000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16007 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16008 11 R10000                                                                                                       
+           B08001                                                                                                       
+           B08007                                                                                                       
+           B08023                                                                                                       
+           R03000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B08023                                                                                                       
+           B08007                                                                                                       
+           B08001                                                                                                       
+ D16009 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20041                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16010  8 R07000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B01022                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16011 17 R16000                                                                                                       
+           B08011                                                                                                       
+           B01022                                                                                                       
+           B08007                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B20090                                                                                                       
+           B08021                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16020  5 B01023
+           B01025
+           B01027
+           D01011
+           D01012
+ D16021 23 D01023
+           B02041
+           B19001
+           B19007
+           B19005
+           B19006
+           B19008
+           B08005
+           B10004
+           B08005
+           B10004
+           B19007
+           B08005
+           B08021
+           B04075
+           B11040
+           B19007
+           R05004
+           B05021
+           B05021
+           R02002
+           B19003
+           B19004
+ D16022 23 B01032                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B19010                                                                                                       
+           R18000                                                                                                       
+           B08021                                                                                                       
+           B04014                                                                                                       
+           B08005                                                                                                       
+           D01023                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B10004                                                                                                       
+           B11041                                                                                                       
+           B08021                                                                                                       
+           B04075                                                                                                       
+           B11040                                                                                                       
+           B19008                                                                                                       
+           R05004                                                                                                       
+           B05021                                                                                                       
+           B05021                                                                                                       
+           R02002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16026  2 D16020
+           D16021
+ D16050 16 D01001
+           D01011
+           D01012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ D16052 28 D01005
+           D01011
+           D01012
+           001007
+           025150
+           R22000
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ D18001  2 D01025                                                                                                       
+           B24011                                                                                                       
+ D18003  4 D01026                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24021                                                                                                       
+ D18004  6 D01025                                                                                                       
+           B04023                                                                                                       
+           B13011                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24022                                                                                                       
+ D21001  6 B02101                                                                                                       
+           B02114                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02121                                                                                                       
+ D21003  4 B21051                                                                                                       
+           B21014                                                                                                       
+           B21017                                                                                                       
+           B21030                                                                                                       
+ D21004  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D21003                                                                                                       
+ D21005 12 B25004                                                                                                       
+           B02121                                                                                                       
+           B02122                                                                                                       
+           B02123                                                                                                       
+           B02124                                                                                                       
+           B02125                                                                                                       
+           B02126                                                                                                       
+           B02127                                                                                                       
+           B02128                                                                                                       
+           B02129                                                                                                       
+           B02130                                                                                                       
+           B02131                                                                                                       
+ D21006  4 B25001                                                                                                       
+           B25002                                                                                                       
+           B25003                                                                                                       
+           B25005                                                                                                       
+ D21007  8 B25009                                                                                                       
+           B25010                                                                                                       
+           B25011                                                                                                       
+           B25012                                                                                                       
+           B25013                                                                                                       
+           B25015                                                                                                       
+           B25016                                                                                                       
+           B25017                                                                                                       
+ D21008  3 B25006                                                                                                       
+           B25007                                                                                                       
+           B25008                                                                                                       
+ D21009  2 B25018                                                                                                       
+           B25019                                                                                                       
+ D21010 13 B02101                                                                                                       
+           B07002                                                                                                       
+           B02102                                                                                                       
+           B02103                                                                                                       
+           B02104                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02108                                                                                                       
+           B02109                                                                                                       
+           B02110                                                                                                       
+           B02132                                                                                                       
+           B02133                                                                                                       
+ D21011  3 B30031                                                                                                       
+           B30032                                                                                                       
+           B29002                                                                                                       
+ D21012  2 R01000                                                                                                       
+           B02135                                                                                                       
+ D35001  4 B08035
+           B35001
+           B08036
+           D01001
+ D35002  4 B08035
+           B35001
+           B08036
+           B01033
+ D35003  6 B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B04073
+ D35004  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           D01001
+           B35011
+ D35005  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           B35011
+ D35006  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01003
+           B35011
+ D35007  9 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           R02000
+           B01002
+           B35011
+ D35010  3 D35002
+           D35003
+           D35007
diff --git a/crextables/D000207 b/crextables/D000207
new file mode 100755
index 0000000..e29c30c
--- /dev/null
+++ b/crextables/D000207
@@ -0,0 +1,2326 @@
+ D00002  2 B00002                                                                                                       
+           B00003                                                                                                       
+ D00003  3 B00010                                                                                                       
+           B00011                                                                                                       
+           B00012                                                                                                       
+ D00004  9 D00003                                                                                                       
+           B00013                                                                                                       
+           B00014                                                                                                       
+           B00015                                                                                                       
+           B00016                                                                                                       
+           B00017                                                                                                       
+           B00018                                                                                                       
+           B00019                                                                                                       
+           B00020                                                                                                       
+ D00010  3 D00003                                                                                                       
+           R01000                                                                                                       
+           B00030                                                                                                       
+ D01001  2 B01001                                                                                                       
+           B01002                                                                                                       
+ D01002  3 B01003                                                                                                       
+           B01004                                                                                                       
+           B01005                                                                                                       
+ D01003  3 B01011                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+ D01004  4 B01001                                                                                                       
+           B01002                                                                                                       
+           B01015                                                                                                       
+           B02001                                                                                                       
+ D01005  2 001035
+           001034
+ D01011  3 B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+ D01012  2 B04004                                                                                                       
+           B04005                                                                                                       
+ D01013  3 B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+ D01021  2 B05001                                                                                                       
+           B06001                                                                                                       
+ D01022  3 B05001                                                                                                       
+           B06001                                                                                                       
+           B07001                                                                                                       
+ D01023  2 B05002                                                                                                       
+           B06002                                                                                                       
+ D01024  3 B05002                                                                                                       
+           B06002                                                                                                       
+           B07001                                                                                                       
+ D01025  3 D01023                                                                                                       
+           B04003                                                                                                       
+           D01012                                                                                                       
+ D01026  7 D01021                                                                                                       
+           B04003                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04005                                                                                                       
+ D01029  3 B01018
+           B02001
+           D01011
+ D01030  4 B01018
+           B02001
+           D01011
+           D01024
+ D01031  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01032  5 D01001                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01033  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+ D01034  5 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01035  7 B01005                                                                                                       
+           B01012                                                                                                       
+           B01013                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01036  5 D01003                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01037  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01022                                                                                                       
+ D01038  6 D01001                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01039  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+ D01040  6 D01003                                                                                                       
+           B02011                                                                                                       
+           B02012                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+ D01041  5 B01007                                                                                                       
+           B02021                                                                                                       
+           B02022                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+ D01042  2 D01041                                                                                                       
+           D01021                                                                                                       
+ D01043  5 B01007                                                                                                       
+           B02023                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01044  5 B01007                                                                                                       
+           B02024                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01049  5 B02111                                                                                                       
+           B02112                                                                                                       
+           B21062                                                                                                       
+           B21063                                                                                                       
+           B21065                                                                                                       
+ D01051  6 B01006                                                                                                       
+           B02061                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B08004                                                                                                       
+ D01055  7 B01005                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B01012                                                                                                       
+           B01014                                                                                                       
+ D01062  2 R01000                                                                                                       
+           D01001                                                                                                       
+ D01065  8 B01006                                                                                                       
+           B01008                                                                                                       
+           B02001                                                                                                       
+           B02002                                                                                                       
+           B02005                                                                                                       
+           B02062                                                                                                       
+           B02070                                                                                                       
+           B02065                                                                                                       
+ D01066  6 D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           B07004                                                                                                       
+           B02064                                                                                                       
+           B08004                                                                                                       
+ D01070  3 B02143
+           B02142
+           B02144
+ D01071  5 B01007                                                                                                       
+           B01031                                                                                                       
+           B02020                                                                                                       
+           B02028                                                                                                       
+           B02029                                                                                                       
+ D01072  4 D01071                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+ D01074  4 B02143
+           B02142
+           B02145
+           B02146
+ D01075  6 D01001
+           B01015
+           D01024
+           B08021
+           D01011
+           D01012
+ D01076  3 B02011
+           B02143
+           B02142
+ D01090  6 D01004                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01021                                                                                                       
+           B07030                                                                                                       
+           B07031                                                                                                       
+ D01091 10 B02180                                                                                                       
+           B02181                                                                                                       
+           B02182                                                                                                       
+           B02183                                                                                                       
+           B02184                                                                                                       
+           B02179                                                                                                       
+           B02186                                                                                                       
+           B02187                                                                                                       
+           B02188                                                                                                       
+           B02189                                                                                                       
+ D01092  9 B01011
+           B01003
+           B02001
+           D01011
+           D01012
+           D01021
+           B07030
+           B07031
+           B33024
+ D01093  3 D01036
+           B07030
+           B07031
+ D01110  5 D01001
+           B01011
+           B02011
+           B02014
+           B02003
+ D01111  6 D01001
+           B01011
+           B02011
+           B02013
+           B02014
+           B02003
+ D01112  5 B01006
+           B02011
+           B02013
+           B02014
+           B02003
+ D01113  3 B08021
+           D01011
+           D01013
+ D01114  5 D01021
+           B07030
+           B07031
+           B07007
+           B33024
+ D01193  5 001007
+           001031
+           002196
+           002221
+           002222
+ D01250  4 D01193
+           D01011
+           D01013
+           D01021
+ D02001  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02002  5 B10004                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+ D02003  9 B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+           B12006                                                                                                       
+           B13003                                                                                                       
+           B20001                                                                                                       
+           B20003                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02004  7 B20010                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20013                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+           B20012                                                                                                       
+ D02005  4 B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B20013                                                                                                       
+ D02006  4 B10004                                                                                                       
+           B10051                                                                                                       
+           B10062                                                                                                       
+           B10063                                                                                                       
+ D02011  3 D02001                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02012  3 D02002                                                                                                       
+           D02003                                                                                                       
+           D02004                                                                                                       
+ D02013  4 D02006                                                                                                       
+           D02003                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D02021  3 B22001                                                                                                       
+           B22011                                                                                                       
+           B22021                                                                                                       
+ D02022  3 B22002                                                                                                       
+           B22012                                                                                                       
+           B22022                                                                                                       
+ D02023  3 B22003                                                                                                       
+           B22013                                                                                                       
+           B22023                                                                                                       
+ D02024  3 D02022                                                                                                       
+           R01002                                                                                                       
+           D02023                                                                                                       
+ D02031  4 D02001
+           B10062
+           B07004
+           B10009
+ D02032  4 B07032
+           B12101
+           B12103
+           B13003
+ D02033  2 B07032
+           B20001
+ D02034  2 B07032
+           B13023
+ D02035  7 D02032
+           D02033
+           D02034
+           B07032
+           D02004
+           R01000
+           D02005
+ D02036  6 R05000
+           B08002
+           B20011
+           B20012
+           B20014
+           B20017
+ D02037  3 B20062
+           B13013
+           B12113
+ D02038  4 B20003
+           B04024
+           B20004
+           B20005
+ D02039  2 B04024
+           B14031
+ D02040  4 B07032
+           R02002
+           B04024
+           B13011
+ D02041  7 B07032
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02042 11 B07032
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02044  3 B04024
+           B02004
+           B13033
+ D02045  7 B04024
+           B14002
+           B14004
+           B14016
+           B14028
+           B14029
+           B14030
+ D02046  3 B04024
+           B04024
+           B12049
+ D02047  3 R02003
+           B08002
+           B20054
+ D02043  7 D02038
+           R01002
+           D02039
+           D02040
+           D02041
+           D02042
+           B07032
+ D02048  5 B05021
+           B07021
+           B20012
+           B05021
+           B07021
+ D02049  7 B08002
+           B20011
+           B20013
+           B20012
+           B20012
+           B20012
+           B08002
+ D02051 12 B10004                                                                                                       
+           B10051                                                                                                       
+           B07004                                                                                                       
+           B10003                                                                                                       
+           B12004                                                                                                       
+           B12051                                                                                                       
+           B12016                                                                                                       
+           B12017                                                                                                       
+           B13004                                                                                                       
+           R02004                                                                                                       
+           B08051                                                                                                       
+           B08020                                                                                                       
+ D02052  7 B07032
+           B07033
+           B12101
+           B02039
+           B12102
+           B12103
+           B13003
+ D02053  3 B07032
+           B07033
+           B20001
+ D02054  8 D02052
+           D02053
+           B07033
+           D02034
+           B07032
+           D02004
+           R01000
+           302005
+ D02055  8 B20031
+           B20032
+           B20033
+           B20034
+           B20035
+           B20036
+           B20037
+           B20038
+ D02056  2 B02038
+           B22043
+ D02057  3 D02056
+           D02021
+           D02024
+ D02058  8 B07032
+           B07033
+           B04024
+           B04024
+           B12111
+           B04024
+           B04024
+           B12112
+ D02059 12 B07032
+           B07033
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+           R03002
+           B04025
+           B11043
+           B11041
+ D02060  4 D02038
+           D02040
+           D02058
+           D02059
+ D02062 18 D02001
+           D02052
+           D02053
+           007033
+           R01000
+           D02034
+           007032
+           R01000
+           D02005
+           008002
+           R01000
+           D02055
+           R01000
+           D02056
+           R01000
+           D02021
+           R01000
+           D02024
+ D02063  6 D02038
+           R01000
+           D02040
+           R01000
+           D02058
+           D02059
+ D02066 16 B20023
+           B20024
+           B20027
+           B20054
+           B20023
+           B20027
+           B20054
+           B20025
+           B20026
+           B20027
+           B20040
+           B20066
+           B20027
+           B20021
+           B20067
+           B20027
+ D02069  4 B07032                                                                                                       
+           B07033                                                                                                       
+           B33041                                                                                                       
+           B20001                                                                                                       
+ D02070  8 B07032                                                                                                       
+           B07033                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02071 14 B07032                                                                                                       
+           B07033                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B08021                                                                                                       
+           R03002                                                                                                       
+           B04025                                                                                                       
+           B11043                                                                                                       
+           B11041                                                                                                       
+           B04025                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+ D02072  5 B07032                                                                                                       
+           B07033                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+           B13003                                                                                                       
+ D02073  7 B20010                                                                                                       
+           R05004                                                                                                       
+           B08002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B33041                                                                                                       
+           B20013                                                                                                       
+ D02074  4 B20003                                                                                                       
+           B04025                                                                                                       
+           B20004                                                                                                       
+           B20005                                                                                                       
+ D02075  5 B08021                                                                                                       
+           B04025                                                                                                       
+           B13055                                                                                                       
+           B13058                                                                                                       
+           B08021                                                                                                       
+ D02076  7 B02021                                                                                                       
+           B20022                                                                                                       
+           B26020                                                                                                       
+           B20023                                                                                                       
+           B20024                                                                                                       
+           B20025                                                                                                       
+           B20026                                                                                                       
+ D02077 12 B07032                                                                                                       
+           B07033                                                                                                       
+           B04025                                                                                                       
+           B12111                                                                                                       
+           B12112                                                                                                       
+           B07032                                                                                                       
+           B04025                                                                                                       
+           B12112                                                                                                       
+           B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02078  4 B02176                                                                                                       
+           B20062                                                                                                       
+           B02177                                                                                                       
+           B13013                                                                                                       
+ D02079  5 B07032                                                                                                       
+           B02175                                                                                                       
+           B02178                                                                                                       
+           B04025                                                                                                       
+           B13011                                                                                                       
+ D02080  3 B02185                                                                                                       
+           B04025                                                                                                       
+           B13033                                                                                                       
+ D02081  2 B04025                                                                                                       
+           B14031                                                                                                       
+ D02082  7 B04025                                                                                                       
+           B14002                                                                                                       
+           B14004                                                                                                       
+           B14016                                                                                                       
+           B14028                                                                                                       
+           B14029                                                                                                       
+           B14030                                                                                                       
+ D02083  8 B04025                                                                                                       
+           B08023                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12101                                                                                                       
+           B13003                                                                                                       
+           B08023                                                                                                       
+ D03001  3 B07003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03002  3 B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03003  4 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+ D03004  6 B07004                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03011  4 B07003                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03012  4 B07004                                                                                                       
+           B08001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03013  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B13003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03014  7 B07004                                                                                                       
+           B08001                                                                                                       
+           B10003                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D03031  6 B07004                                                                                                       
+           B08003                                                                                                       
+           B07021                                                                                                       
+           B07022                                                                                                       
+           B08012                                                                                                       
+           B12061                                                                                                       
+ D03032  2 B20011                                                                                                       
+           B20016                                                                                                       
+ D03033  2 B20010                                                                                                       
+           B20016                                                                                                       
+ D03041  8 B02152                                                                                                       
+           B02023                                                                                                       
+           B07004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12071                                                                                                       
+ D03050  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11001
+           B11002
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03051  7 B04086
+           B08042
+           B07004
+           B05015
+           B06015
+           B11061
+           B11062
+ D03052  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11001
+           B11002
+ D03053  7 B04086
+           B08042
+           B07009
+           B05015
+           B06015
+           B11061
+           B11062
+ D03054 10 B04086
+           B08042
+           B07004
+           B10009
+           B05015
+           B06015
+           B12101
+           B12103
+           B11001
+           B11002
+ D03250  8 B02252
+           B02023
+           B07004
+           B11001
+           B11002
+           B02197
+           B02198
+           B12193
+ D04001  5 B08003                                                                                                       
+           B10004                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04002  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+ D04003  2 B08003                                                                                                       
+           B12001                                                                                                       
+ D04004  4 B08003                                                                                                       
+           B10004                                                                                                       
+           B20010                                                                                                       
+           B12001                                                                                                       
+ D04005  4 B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+ D04006  3 B14001                                                                                                       
+           B14001                                                                                                       
+           B14003                                                                                                       
+ D04011 27 B02163                                                                                                       
+           B02164                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B02057                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B08021                                                                                                       
+           B04024                                                                                                       
+           R10004                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B08021                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B04006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           R03010                                                                                                       
+           B02163                                                                                                       
+           B07004                                                                                                       
+           B12001                                                                                                       
+ D04030  3 B27031                                                                                                       
+           B28031                                                                                                       
+           B10031                                                                                                       
+ D04031  3 B01041                                                                                                       
+           B01042                                                                                                       
+           B01043                                                                                                       
+ D04032  5 B02153                                                                                                       
+           B02154                                                                                                       
+           B20081                                                                                                       
+           B20082                                                                                                       
+           B20012                                                                                                       
+ D04033  8 B02152                                                                                                       
+           B02166                                                                                                       
+           B02167                                                                                                       
+           B02153                                                                                                       
+           B02154                                                                                                       
+           B12075                                                                                                       
+           B12076                                                                                                       
+           B12063                                                                                                       
+ D04034  9 R02004                                                                                                       
+           B27001                                                                                                       
+           B28001                                                                                                       
+           B07022                                                                                                       
+           B05043                                                                                                       
+           B20010                                                                                                       
+           B20016                                                                                                       
+           B33003                                                                                                       
+           B10040                                                                                                       
+ D04250 27 B02231
+           B02232
+           B08012
+           B07024
+           B02057
+           B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B08021
+           B04024
+           R10004
+           B08021
+           B04004
+           B04005
+           B04006
+           B08021
+           B04004
+           B04005
+           B04006
+           B11001
+           B11002
+           R03010
+           B02231
+           B07004
+           B12001
+ D05001  4 B11001
+           B11002
+           B13060
+           B13071
+ D05002 11 D01012
+           B12001
+           B13003
+           B14051
+           B13060
+           B13072
+           B13080
+           B13081
+           B13082
+           B13083
+           B13084
+ D05003  4 D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05001                                                                                                       
+ D05004  3 D01030
+           D05002
+           D05003
+ D05006  8 B13072                                                                                                       
+           B13082                                                                                                       
+           B13019                                                                                                       
+           C07005
+           C01004
+           B12001                                                                                                       
+           B13073                                                                                                       
+           B13060                                                                                                       
+ D05007  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05006                                                                                                       
+ D05008  4 D05006                                                                                                       
+           C07005
+           C01004
+           B12030                                                                                                       
+ D05009  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05008                                                                                                       
+ D05010  3 D05008
+           B02091
+           B02091
+ D05011  5 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R01000                                                                                                       
+           D05010                                                                                                       
+ D05016  7 B14021
+           B07004
+           B13003
+           B11002
+           B11001
+           B11041
+           B11043
+ D05017  5 B13080
+           B13081
+           B13083
+           B13085
+           B13084
+ D05018  7 D01029                                                                                                       
+           D01012                                                                                                       
+           B04065                                                                                                       
+           R03000                                                                                                       
+           D05008                                                                                                       
+           D05016                                                                                                       
+           D05017                                                                                                       
+ D06001  4 B02032                                                                                                       
+           R02000                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D06002  3 B02031                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06003  4 B02002                                                                                                       
+           B11011                                                                                                       
+           B11012                                                                                                       
+           B12004                                                                                                       
+ D06004  6 B02032                                                                                                       
+           B02033                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22043                                                                                                       
+           B22062                                                                                                       
+ D06005  5 B02031                                                                                                       
+           R03000                                                                                                       
+           B07062                                                                                                       
+           B22004                                                                                                       
+           B22031                                                                                                       
+ D06006  3 D06003                                                                                                       
+           D06002                                                                                                       
+           B22063                                                                                                       
+ D06007  6 B01012                                                                                                       
+           B01014                                                                                                       
+           D06008                                                                                                       
+           B04024                                                                                                       
+           B27003                                                                                                       
+           B28003                                                                                                       
+ D06008  3 B02034                                                                                                       
+           B02035                                                                                                       
+           B02036                                                                                                       
+ D06019  9 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           C01002
+           B04015
+           B04065
+ D06020  8 B01075
+           D01011
+           D01012
+           B22042
+           B22120
+           B22121
+           B04075
+           B04065
+ D06021  7 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22122                                                                                                       
+           B22123                                                                                                       
+           B12001                                                                                                       
+           D03002                                                                                                       
+ D06022  5 B01075                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+ D06023  8 B01015                                                                                                       
+           D01023                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B22038                                                                                                       
+           B22039                                                                                                       
+           B22120                                                                                                       
+           B22121                                                                                                       
+ D06024  4 D06020
+           R02000
+           B22038
+           B22039
+ D06025  4 D06019
+           R02006
+           B22038
+           B22039
+ D06026 21 B01075
+           B01015
+           D01021
+           D01011
+           D01013
+           R15000
+           B04016
+           B08015
+           B02007
+           B22120
+           B22121
+           B04016 
+           R08000
+           B10051
+           B22038
+           B22040
+           B04026
+           R03004
+           B08023
+           B22038
+           B22040
+ D06027  5 B01005
+           B01052
+           B02047
+           D01011
+           D01013
+ D06028  4 D06027
+           D01011
+           D01013
+           D01021
+ D06029  3 B25170
+           B25171
+           B25172
+ D06030 14 D06027
+           D06029
+           R11000
+           B33002
+           D01011
+           D01013
+           B25025
+           B25025
+           B25026
+           B22185
+           B04015
+           B04065
+           R01004
+           B22182 
+ D06031 14 D06027
+           D06029
+           B01053
+           B33002
+           D01011
+           D01013
+           D01011
+           D01013
+           B22185
+           B22182
+           B04016
+           B04066
+           R01000
+           B22184
+ D06032  7 B02032
+           B02033
+           R03000
+           B07062
+           B22043
+           B22062
+           B22066
+ D07001  2 D01031                                                                                                       
+           D02011                                                                                                       
+ D07002  2 D01032                                                                                                       
+           D02011                                                                                                       
+ D07003  3 D07001                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07004  3 D07002                                                                                                       
+           R01000                                                                                                       
+           D02005                                                                                                       
+ D07005  3 D07001                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07006  3 D07002                                                                                                       
+           R01004                                                                                                       
+           D02005                                                                                                       
+ D07007  2 D01031                                                                                                       
+           D02012                                                                                                       
+ D07008  2 D01032                                                                                                       
+           D02012                                                                                                       
+ D07009  2 D01031                                                                                                       
+           D02013                                                                                                       
+ D07011 16 B01063                                                                                                       
+           B02001                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01024                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11016                                                                                                       
+           B11017                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B07006                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B10052                                                                                                       
+           B20009                                                                                                       
+ D07012  4 R03000                                                                                                       
+           B08023                                                                                                       
+           B05021                                                                                                       
+           B20001                                                                                                       
+ D07013  7 R06000                                                                                                       
+           B01064                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B08014                                                                                                       
+           B20061                                                                                                       
+           B20018                                                                                                       
+ D07014  2 R01000                                                                                                       
+           B20019                                                                                                       
+ D07015  3 R01000                                                                                                       
+           D02005                                                                                                       
+           B20002                                                                                                       
+ D07016  2 R01000                                                                                                       
+           B20020                                                                                                       
+ D07017  2 R01000                                                                                                       
+           B11070                                                                                                       
+ D07018 13 B08016                                                                                                       
+           R02000                                                                                                       
+           B08017                                                                                                       
+           D01012                                                                                                       
+           R04000                                                                                                       
+           B07006                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11041                                                                                                       
+           B20009                                                                                                       
+           R01000                                                                                                       
+           B20001                                                                                                       
+           D07014                                                                                                       
+ D07020  3 D07011                                                                                                       
+           D07014                                                                                                       
+           D07016                                                                                                       
+ D07021  9 D07011                                                                                                       
+           D07012                                                                                                       
+           D07013                                                                                                       
+           D07014                                                                                                       
+           D07015                                                                                                       
+           D07016                                                                                                       
+           D07017                                                                                                       
+           D07018                                                                                                       
+           D07015                                                                                                       
+ D07030  2 B15001                                                                                                       
+           B15002                                                                                                       
+ D07031  7 B08022                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15001                                                                                                       
+           B08023                                                                                                       
+           B15002                                                                                                       
+ D07041  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01070                                                                                                       
+           D07030                                                                                                       
+ D07042  9 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           B08021                                                                                                       
+           B04025                                                                                                       
+           D01070                                                                                                       
+           D07031                                                                                                       
+ D07043  7 D01001                                                                                                       
+           B01015                                                                                                       
+           D01024                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01074                                                                                                       
+           D07030                                                                                                       
+ D07044  9 D01001
+           B01015
+           D01024
+           D01011
+           D01012
+           B08021
+           B04025
+           D01074
+           D07031
+ D07060  2 B07061
+           B12030
+ D07061  3 D01031
+           R01005
+           D07060
+ D07062  3 D01032
+           R01005
+           D07060
+ D07063  2 B07061
+           B12130
+ D07080 13 D01090 CREX template for synoptic reports
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07081 24 D01090 CREX template for synoptic reports RA I
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           B13056
+           B13057
+           B20101
+           B20102
+           B20103
+           B20104
+           B20105
+           B20106
+           B20107
+           B20108
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07082 15 D01090 CREX template for synoptic reports RA II
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12121
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07083 14 D01090 CREX template for synoptic reports RA III
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B12122
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07084 16 D01090 CREX template for synoptic reports RA IV
+           D02031
+           D02035
+           D02036
+           D02047
+           B08002
+           D02048
+           D02037
+           B20055
+           R01000
+           C05001
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D07086 11 D01090 CREX template for synoptic reports RA VI
+           D02031
+           D02035
+           D02036
+           B08002
+           D02037
+           D02066
+           D02043
+           D02044
+           R01002
+           D02045
+ D07087 20 D01001
+           B02001
+           D01011
+           D01012
+           D01023
+           B07030
+           B07031
+           D02001
+           B10062
+           B07004
+           B10009
+           B07032
+           B12101
+           B12103
+           B13003
+           B07032
+           B20001
+           D02004
+           R01000
+           D02005
+ D07088 25 B20003
+           B04024
+           B20004
+           B20005
+           B04024
+           B02004
+           B13033
+           R02002
+           B04024
+           B14031
+           R02002
+           B04024
+           B13011
+           B07032
+           B04024
+           B12111
+           B04024
+           B12112
+           B07032
+           B02002
+           B08021
+           B04025
+           B11001
+           B11002
+           B08021
+ D07089  2 D07087
+           D07088
+ D07090 13 D01092 CREX template for synoptic reports from mobile land stations
+           D02031
+           D02035
+           D02036
+           D02047
+           008002
+           D02048
+           D02037
+           D02043
+           D02044
+           R01002
+           D02045
+           D02046
+ D08001  3 D01033                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08002  3 D01034                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08003  3 D01035                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08004  3 D01036                                                                                                       
+           D02011                                                                                                       
+           B22042                                                                                                       
+ D08005  2 D08004                                                                                                       
+           D02024                                                                                                       
+ D08006  8 B10004                                                                                                       
+           B10061                                                                                                       
+           B10063                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12004                                                                                                       
+           B13003                                                                                                       
+           B22042                                                                                                       
+ D08007  4 D01055                                                                                                       
+           D02011                                                                                                       
+           B07062                                                                                                       
+           B22042                                                                                                       
+ D08008  3 D01093
+           D02062
+           D02063
+ D08009  7 D01093
+           D02001
+           D02054
+           B08002
+           D02055
+           D02057
+           D02060
+ D08010 15 B01011
+           R13000
+           D01011
+           D01012
+           D01021
+           B04080
+           B22049
+           B04080
+           B22059
+           B04080
+           B22005
+           B02042
+           B22032
+           B02042
+           B04080
+ D09001  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09002  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09003  3 D01037                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09004  3 D01038                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09005  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09006  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09007  4 D01037                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09008  4 D01038                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09011  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09012  3 D01039                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09013  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09014  4 D01039                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09015  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09016  3 D01040                                                                                                       
+           R01000                                                                                                       
+           D03012                                                                                                       
+ D09017  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03013                                                                                                       
+ D09018  4 D01040                                                                                                       
+           D02004                                                                                                       
+           R01000                                                                                                       
+           D03014                                                                                                       
+ D09019  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D03011                                                                                                       
+ D09020  7 D01031                                                                                                       
+           B02003                                                                                                       
+           R04000                                                                                                       
+           B07003                                                                                                       
+           B11003                                                                                                       
+           B11004                                                                                                       
+           B11005                                                                                                       
+ D09030  7 B15004                                                                                                       
+           B15005                                                                                                       
+           R04000                                                                                                       
+           B04015                                                                                                       
+           B08006                                                                                                       
+           B07004                                                                                                       
+           B15003                                                                                                       
+ D09031  7 B15004
+           B15005
+           R04000
+           B04025
+           B08006
+           B07004
+           B15003
+ D09040  3 D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09041  4 D07041
+           D01075
+           D01076
+           D09030
+ D09042  4 D07042                                                                                                       
+           D01075                                                                                                       
+           D01076                                                                                                       
+           D09030                                                                                                       
+ D09043  4 D07043
+           D01075
+           D01076
+           D09030
+ D09044  4 D07044
+           D01075
+           D01076
+           D09030
+ D09045  3 D01075
+           D01076
+           D09031
+ D09046  4 D07041
+           D01075
+           D01076
+           D09031 
+ D09047  4 D07042
+           D01075
+           D01076
+           D09031
+ D09048  4 D07043
+           D01075
+           D01076
+           D09031
+ D09049  4 D07044
+           D01075
+           D01076
+           D09031
+ D09050  7 D01110
+           D01113
+           D01114
+           R01000
+           D03050
+           R01000
+           D03051
+ D09051  7 D01110
+           D01113
+           D01114
+           R01000
+           D03052
+           R01000
+           D03053
+ D09052  9 D01111
+           D01113
+           D01114
+           D02049
+           B22043
+           R01000
+           D03054
+           R01000
+           D03051
+ D09053  7 D01112
+           D01113
+           D01114
+           R01000
+           D03054
+           R01000
+           D03051
+ D10001  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01026                                                                                                       
+           D03025                                                                                                       
+ D10002  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01009                                                                                                       
+           D03023                                                                                                       
+ D10003  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01006                                                                                                       
+           D03023                                                                                                       
+ D10004  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03032                                                                                                       
+           R01003                                                                                                       
+           D03024                                                                                                       
+ D10005  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03025                                                                                                       
+ D10006  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03023                                                                                                       
+ D10007  5 D01042                                                                                                       
+           D03031                                                                                                       
+           D03033                                                                                                       
+           R01000                                                                                                       
+           D03024                                                                                                       
+ D10008  8 D10011                                                                                                       
+           R01019                                                                                                       
+           D10012                                                                                                       
+           B02150                                                                                                       
+           B25079                                                                                                       
+           B25080                                                                                                       
+           B33032                                                                                                       
+           B14045                                                                                                       
+ D10009  3 D10011                                                                                                       
+           R01015                                                                                                       
+           D10012                                                                                                       
+ D10010  3 D10011                                                                                                       
+           R01005                                                                                                       
+           D10012                                                                                                       
+ D10014  3 D01072                                                                                                       
+           D03041                                                                                                       
+           D04011                                                                                                       
+ D10015 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01003                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01003                                                                                                       
+           D04033                                                                                                       
+ D10016 13 D01072                                                                                                       
+           B07024                                                                                                       
+           B10002                                                                                                       
+           D03041                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10020  6 D10022                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           D04034                                                                                                       
+           D10021                                                                                                       
+ D10022  4 B01007                                                                                                       
+           B02019                                                                                                       
+           B01033                                                                                                       
+           B02172                                                                                                       
+ D10023 17 D01072                                                                                                       
+           B30021                                                                                                       
+           B30022                                                                                                       
+           B08012                                                                                                       
+           B07024                                                                                                       
+           B07025                                                                                                       
+           B10002                                                                                                       
+           R01012                                                                                                       
+           D04032                                                                                                       
+           R05002                                                                                                       
+           B02152                                                                                                       
+           B02024                                                                                                       
+           B07004                                                                                                       
+           B07004                                                                                                       
+           B13003                                                                                                       
+           R01012                                                                                                       
+           D04033                                                                                                       
+ D10050 13 D10051                                                                                                       
+           D10052                                                                                                       
+           R01000                                                                                                       
+           D10053                                                                                                       
+           R01004                                                                                                       
+           D10054                                                                                                       
+           B20010                                                                                                       
+           D10052                                                                                                       
+           R01015                                                                                                       
+           D10053                                                                                                       
+           D10052                                                                                                       
+           R01004                                                                                                       
+           D10053                                                                                                       
+ D10195  3 D01250
+           D03250
+           D04250
+ D11001  9 D01051                                                                                                       
+           B07002                                                                                                       
+           B12001                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11032                                                                                                       
+           B11033                                                                                                       
+           B20041                                                                                                       
+ D11002  4 D01065                                                                                                       
+           D01066                                                                                                       
+           D11003                                                                                                       
+           D11004                                                                                                       
+ D11003  5 B10070                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B12001                                                                                                       
+           B13002                                                                                                       
+ D11004 12 R01000                                                                                                       
+           B11034                                                                                                       
+           R01000                                                                                                       
+           B11035                                                                                                       
+           R01000                                                                                                       
+           B11075                                                                                                       
+           R01000                                                                                                       
+           B11076                                                                                                       
+           R01000                                                                                                       
+           B33025                                                                                                       
+           R01000                                                                                                       
+           B33026                                                                                                       
+ D11005 13 B01008                                                                                                       
+           B01023                                                                                                       
+           D01021                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           B07010                                                                                                       
+           B08009                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11036                                                                                                       
+           B12101                                                                                                       
+           B33025                                                                                                       
+ D11006  6 B07010                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B02064                                                                                                       
+           B12101                                                                                                       
+           B12103                                                                                                       
+ D11007  7 B07010
+           D01021
+           B11001
+           B11002
+           B02064
+           B12101
+           B12103
+ D11008  7 B01008
+           D01011
+           D01013
+           D01021
+           B08004
+           R01000
+           D11006
+ D11009  7 B01008
+           D01011
+           D01013
+           D01021
+           B08004
+           R01000
+           D11007
+ D11193 16 D01197                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           B08004                                                                                                       
+           B07004                                                                                                       
+           B08021                                                                                                       
+           B11001                                                                                                       
+           B11002                                                                                                       
+           B11031                                                                                                       
+           B11034                                                                                                       
+           B11035                                                                                                       
+           B12001                                                                                                       
+           B12003                                                                                                       
+           B13003                                                                                                       
+           B20041                                                                                                       
+ D12001  2 D01043                                                                                                       
+           D04001                                                                                                       
+ D12002  2 D01043                                                                                                       
+           D04002                                                                                                       
+ D12003  2 D01042                                                                                                       
+           D04003                                                                                                       
+ D12004  2 D01042                                                                                                       
+           D04004                                                                                                       
+ D12005  2 D01042                                                                                                       
+           B20014                                                                                                       
+ D12006  2 D01044                                                                                                       
+           D04005                                                                                                       
+ D12007  2 D01042                                                                                                       
+           D04006                                                                                                       
+ D12010  6 B01007                                                                                                       
+           B05040                                                                                                       
+           B02021                                                                                                       
+           B05041                                                                                                       
+           B04001                                                                                                       
+           B04043                                                                                                       
+ D12014  8 D12010                                                                                                       
+           D12011                                                                                                       
+           R05056                                                                                                       
+           D01023                                                                                                       
+           B05042                                                                                                       
+           B05052                                                                                                       
+           D12012                                                                                                       
+           D12013                                                                                                       
+ D12016  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12015                                                                                                       
+ D12018  3 D12010                                                                                                       
+           D12011                                                                                                       
+           D12017                                                                                                       
+ D12020 11 D01047                                                                                                       
+           D01048                                                                                                       
+           B15015                                                                                                       
+           B29002                                                                                                       
+           B21076                                                                                                       
+           R04012                                                                                                       
+           B06030                                                                                                       
+           R02012                                                                                                       
+           B05030                                                                                                       
+           B21075                                                                                                       
+           B21066                                                                                                       
+ D12021  6 D01047                                                                                                       
+           R01003                                                                                                       
+           D01049                                                                                                       
+           B11012                                                                                                       
+           B11011                                                                                                       
+           B21067                                                                                                       
+ D12022 15 D01047                                                                                                       
+           B08022                                                                                                       
+           B11012                                                                                                       
+           B11050                                                                                                       
+           B22070                                                                                                       
+           B22026                                                                                                       
+           D12041                                                                                                       
+           B10050                                                                                                       
+           B21068                                                                                                       
+           B21071                                                                                                       
+           B21072                                                                                                       
+           B21073                                                                                                       
+           D12042                                                                                                       
+           B21062                                                                                                       
+           B15011                                                                                                       
+ D12023  7 D01047                                                                                                       
+           R03003                                                                                                       
+           B08022                                                                                                       
+           B12061                                                                                                       
+           B22050                                                                                                       
+           B21069                                                                                                       
+           B21085                                                                                                       
+ D12024 11 D12020                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12025 11 D12019                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B08060                                                                                                       
+           B08022                                                                                                       
+           B25014                                                                                                       
+           B22101                                                                                                       
+           B22097                                                                                                       
+           B22098                                                                                                       
+           B22099                                                                                                       
+           B22100                                                                                                       
+ D12026 19 D01046                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01023                                                                                                       
+           D12031                                                                                                       
+           R01004                                                                                                       
+           D12030                                                                                                       
+           B21110                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21111                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21112                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+           B21113                                                                                                       
+           D01023                                                                                                       
+           D21027                                                                                                       
+ D12027  9 D01047                                                                                                       
+           R05009                                                                                                       
+           D01023                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B07021                                                                                                       
+           B12061                                                                                                       
+           B21085                                                                                                       
+           B21070                                                                                                       
+ D12031  8 B05034                                                                                                       
+           B06034                                                                                                       
+           B21109                                                                                                       
+           B11081                                                                                                       
+           B11082                                                                                                       
+           B21101                                                                                                       
+           B21102                                                                                                       
+           B21103                                                                                                       
+ D12032  4 B21120                                                                                                       
+           B21121                                                                                                       
+           B13055                                                                                                       
+           B21122                                                                                                       
+ D12033  4 B02104                                                                                                       
+           B08022                                                                                                       
+           B12063                                                                                                       
+           B12065                                                                                                       
+ D12042  6 B21077                                                                                                       
+           B21078                                                                                                       
+           B21079                                                                                                       
+           B21080                                                                                                       
+           B21081                                                                                                       
+           B21082                                                                                                       
+ D12045 21 B01007                                                                                                       
+           B02019                                                                                                       
+           B01096                                                                                                       
+           B25061                                                                                                       
+           B05040                                                                                                       
+           D01011                                                                                                       
+           D01013                                                                                                       
+           D01021                                                                                                       
+           B07002                                                                                                       
+           B12180                                                                                                       
+           B12181                                                                                                       
+           B12182                                                                                                       
+           B12183                                                                                                       
+           B12184                                                                                                       
+           B12185                                                                                                       
+           B02174                                                                                                       
+           B21086                                                                                                       
+           B12186                                                                                                       
+           B21087                                                                                                       
+           B12187                                                                                                       
+           B33043                                                                                                       
+ D13009  3 B21001                                                                                                       
+           R01000                                                                                                       
+           B21001                                                                                                       
+ D13010  3 B21036                                                                                                       
+           R01000                                                                                                       
+           B21036                                                                                                       
+ D13031  4 B06002                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13032  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13031                                                                                                       
+ D13041  9 B06002                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D13042  4 B05002                                                                                                       
+           B05012                                                                                                       
+           R01000                                                                                                       
+           D13041                                                                                                       
+ D13043 11 B06002                                                                                                       
+           B05002                                                                                                       
+           B05012                                                                                                       
+           R12000                                                                                                       
+           R10000                                                                                                       
+           R04000                                                                                                       
+           B06012                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+           R01000                                                                                                       
+           B30001                                                                                                       
+ D15001  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06001                                                                                                       
+ D15002  5 B01011                                                                                                       
+           D01011                                                                                                       
+           D01012                                                                                                       
+           D01023                                                                                                       
+           D06004                                                                                                       
+ D16001 10 D01011                                                                                                       
+           B04004                                                                                                       
+           D01023                                                                                                       
+           B01021                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B10051                                                                                                       
+           B19002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16002 15 B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B01033                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+ D16003 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B11002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16004 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B11031                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16005  9 R08000                                                                                                       
+           B08005                                                                                                       
+           B08007                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B01026                                                                                                       
+           B19001                                                                                                       
+           B08007                                                                                                       
+           B08005                                                                                                       
+ D16006 12 R11000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20011                                                                                                       
+           B20012                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16007 10 R09000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           R04000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16008 11 R10000                                                                                                       
+           B08001                                                                                                       
+           B08007                                                                                                       
+           B08023                                                                                                       
+           R03000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B10002                                                                                                       
+           B08023                                                                                                       
+           B08007                                                                                                       
+           B08001                                                                                                       
+ D16009 11 R10000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B07002                                                                                                       
+           B07002                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B20041                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16010  8 R07000                                                                                                       
+           B08011                                                                                                       
+           B08007                                                                                                       
+           B01022                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16011 17 R16000                                                                                                       
+           B08011                                                                                                       
+           B01022                                                                                                       
+           B08007                                                                                                       
+           R02000                                                                                                       
+           B05002                                                                                                       
+           B06002                                                                                                       
+           B08021                                                                                                       
+           B04001                                                                                                       
+           B04002                                                                                                       
+           B04003                                                                                                       
+           B04004                                                                                                       
+           B04005                                                                                                       
+           B20090                                                                                                       
+           B08021                                                                                                       
+           B08007                                                                                                       
+           B08011                                                                                                       
+ D16020  5 B01023
+           B01025
+           B01027
+           D01011
+           D01012
+ D16021 23 D01023
+           B02041
+           B19001
+           B19007
+           B19005
+           B19006
+           B19008
+           B08005
+           B10004
+           B08005
+           B10004
+           B19007
+           B08005
+           B08021
+           B04075
+           B11040
+           B19007
+           R05004
+           B05021
+           B05021
+           R02002
+           B19003
+           B19004
+ D16022 23 B01032                                                                                                       
+           B02041                                                                                                       
+           B19001                                                                                                       
+           B19010                                                                                                       
+           R18000                                                                                                       
+           B08021                                                                                                       
+           B04014                                                                                                       
+           B08005                                                                                                       
+           D01023                                                                                                       
+           B19005                                                                                                       
+           B19006                                                                                                       
+           B10004                                                                                                       
+           B11041                                                                                                       
+           B08021                                                                                                       
+           B04075                                                                                                       
+           B11040                                                                                                       
+           B19008                                                                                                       
+           R05004                                                                                                       
+           B05021                                                                                                       
+           B05021                                                                                                       
+           R02002                                                                                                       
+           B19003                                                                                                       
+           B19004                                                                                                       
+ D16026  2 D16020
+           D16021
+ D16027  2 D16020
+           D16022
+ D16050 16 D01001
+           D01011
+           D01012
+           002160
+           008005
+           005002
+           006002
+           008005
+           019100
+           019005
+           019006
+           019101
+           019102
+           019103
+           019104
+           019105
+ D16052 28 D01005
+           D01011
+           D01012
+           001007
+           025150
+           R22000
+           001027
+           019150
+           019106
+           008005
+           005002
+           006002
+           008005
+           019107
+           019005
+           019006
+           019108
+           019109
+           019110
+           019111
+           019112
+           019113
+           019114
+           019115
+           019116
+           019117
+           019118
+           019119
+ D16060 14 D01011
+           D01012
+           B05002
+           B06002
+           B19005
+           B19006
+           B05002
+           B06002
+           B05002
+           B06002
+           B04074
+           B20048
+           B11041
+           B13055 
+ D16061 16 D01011
+           D01012
+           B05002
+           B06002
+           B19005
+           B19006
+           R02000
+           B05002
+           B06002
+           R02002
+           B05002
+           B06002
+           B04074
+           B20048
+           B11041
+           B13055
+ D18001  2 D01025                                                                                                       
+           B24011                                                                                                       
+ D18003  4 D01026                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24021                                                                                                       
+ D18004  6 D01025                                                                                                       
+           B04023                                                                                                       
+           B13011                                                                                                       
+           B24005                                                                                                       
+           B24004                                                                                                       
+           B24022                                                                                                       
+ D21001  6 B02101                                                                                                       
+           B02114                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02121                                                                                                       
+ D21003  4 B21051                                                                                                       
+           B21014                                                                                                       
+           B21017                                                                                                       
+           B21030                                                                                                       
+ D21004  4 D01031                                                                                                       
+           B02003                                                                                                       
+           R01000                                                                                                       
+           D21003                                                                                                       
+ D21005 12 B25004                                                                                                       
+           B02121                                                                                                       
+           B02122                                                                                                       
+           B02123                                                                                                       
+           B02124                                                                                                       
+           B02125                                                                                                       
+           B02126                                                                                                       
+           B02127                                                                                                       
+           B02128                                                                                                       
+           B02129                                                                                                       
+           B02130                                                                                                       
+           B02131                                                                                                       
+ D21006  4 B25001                                                                                                       
+           B25002                                                                                                       
+           B25003                                                                                                       
+           B25005                                                                                                       
+ D21007  8 B25009                                                                                                       
+           B25010                                                                                                       
+           B25011                                                                                                       
+           B25012                                                                                                       
+           B25013                                                                                                       
+           B25015                                                                                                       
+           B25016                                                                                                       
+           B25017                                                                                                       
+ D21008  3 B25006                                                                                                       
+           B25007                                                                                                       
+           B25008                                                                                                       
+ D21009  2 B25018                                                                                                       
+           B25019                                                                                                       
+ D21010 13 B02101                                                                                                       
+           B07002                                                                                                       
+           B02102                                                                                                       
+           B02103                                                                                                       
+           B02104                                                                                                       
+           B02105                                                                                                       
+           B02106                                                                                                       
+           B02107                                                                                                       
+           B02108                                                                                                       
+           B02109                                                                                                       
+           B02110                                                                                                       
+           B02132                                                                                                       
+           B02133                                                                                                       
+ D21011  3 B30031                                                                                                       
+           B30032                                                                                                       
+           B29002                                                                                                       
+ D21012  2 R01000                                                                                                       
+           B02135                                                                                                       
+ D35001  4 B08035
+           B35001
+           B08036
+           D01001
+ D35002  4 B08035
+           B35001
+           B08036
+           B01033
+ D35003  6 B08021
+           B04001
+           B04002
+           B04003
+           B04004
+           B04073
+ D35004  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           D01001
+           B35011
+ D35005  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           B35011
+ D35006  7 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01003
+           B35011
+ D35007  9 B08021
+           B04004
+           B08021
+           B04004
+           B35000
+           B01001
+           R02000
+           B01002
+           B35011
+ D35010  3 D35002
+           D35003
+           D35007
diff --git a/crextables/units.config.dat b/crextables/units.config.dat
new file mode 100755
index 0000000..39dfc1b
--- /dev/null
+++ b/crextables/units.config.dat
@@ -0,0 +1,59 @@
+001 metre                         m                       M                       1
+002 kilogram                      kg                      KG                      1 
+003 second                        s                       S                       1
+004 ampere                        A                       A                       1
+005 kelvin                        K                       K                       1
+006 mole                          mol                     MOL                     1 
+007 candela                       cd                      CD                      1
+021 radian                        rad                     RAD                     1
+022 steradian                     sr                      SR                      1
+030 hertz                         Hz                      HZ                      1
+031 newton                        N                       N                       1
+032 pascal                        Pa                      PA                      1
+033 joule                         J                       J                       1
+034 watt                          W                       W                       1
+035 coulomb                       C                       C                       1
+036 volt                          V                       V                       1
+037 farad                         F                       F                       1
+038 ohm                           ohm                     OHM                     1
+039 siemens                       S                       SIE                     1
+040 weber                         Wb                      WB                      1
+041 tesla                         T                       T                       1
+042 henry                         H                       H                       1
+060 degree Celsius                Cel                     CEL                     1
+070 lumen                         lm                      LM                      1
+071 lux                           lx                      LX                      1
+080 becquerel                     Bq                      BQ                      1
+081 gray                          Gy                      GY                      1
+082 sievert                       Sv                      SV                      1
+110 degree (angle)                deg                     DEG                     1
+111 minute (angle)                '                       MNT                     1
+112 second (angle)                "                       SEC                     1
+120 litre                         l                       L                       1
+130 minute (time)                 min                     MIN                     1
+131 hour                          h                       HR                      1
+132 day                           d                       D                       1
+150 tonne                         t                       TNE                     1
+160 electron volt                 eV                      EV                      1
+161 astronomic unit               AU                      AU                      1
+170 parsec                        pc                      PRS                     1
+201 knot                          kt                      KT                      1
+210 decibel                       dB                      DB                      1
+220 hectare                       ha                      HAR                     1
+231 year                          a                       ANN                     1
+300 per cent                      %                       PERCENT                 1
+301 parts per thousand            0/00                    PERTHOU                 1
+310 eiths of cloud                octa                    OCTA                    1
+320 degree true                   deg                     DEG                     1
+321 degrees per second            deg/s                   DEG/S                   1
+350 degrees Celsius               C                       C                       1
+351 degrees Celsius per metre     C/m                     C/M                     1
+352 degrees Celsius per 100 metresC/100 m                 C/100 M                 1
+360 Dobson Unit                   DU                      DU                      1
+430 month                         mon                     MON                     1
+441 per second                    /s                      /S                      1
+510 foot                          ft                      FT                      1
+530 hectopascal                   hPa                     HPAL                    1
+620 grams per kilogram            g/kg                    G/KG                    1
+710 millimetre                    mm                      MM                      1
+740 kilometre                     km                      KM                      1 
diff --git a/data/850ght.grib b/data/850ght.grib
new file mode 100755
index 0000000..1a7e0dd
Binary files /dev/null and b/data/850ght.grib differ
diff --git a/data/ISMD01_OKPR.bufr b/data/ISMD01_OKPR.bufr
new file mode 100755
index 0000000..5019284
Binary files /dev/null and b/data/ISMD01_OKPR.bufr differ
diff --git a/data/ISMD01_OKPR.crex b/data/ISMD01_OKPR.crex
new file mode 100755
index 0000000..d139873
--- /dev/null
+++ b/data/ISMD01_OKPR.crex
@@ -0,0 +1,296 @@
+CREX++

+T0002031300 A000002 P00089000 U00 S007 Y20071121 H1200 D07080

+++

+ 11 423 Primda                1 2007 11 21 12 00 4966944 01267778

+ 07422 07470 09252 ///// -0006 05 //// 09250 00749 00195 -0230

+ -0270 097 00480 0020 00112 ///// ///// 113 05 09 0000 62 61 60

+ 0001 05 09 59 0000 0001 11 // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 049 -0006 04 04 -0001

+ //// -0024 //// 00112 -0006 00000 -0001 00000 00195 -0012 0000

+ //// -0012 0000 //// 01025 10 02 -0010 110 0050 // -0010 ///

+ //// -0360 /// 0120 ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 487 Kocelovice            1 2007 11 21 12 00 4946500 01383111

+ 05190 05219 09522 10162 -0008 08 //// ///// ///// 00200 -0130

+ -0140 099 00490 0270 00101 ///// ///// 100 07 08 0012 36 61 60

+ 0001 01 08 07 0012 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 010 -0006 04 02 -0001

+ //// -0024 //// 00101 -0006 00000 -0001 00000 00200 -0012 0000

+ //// -0012 0000 //// 01015 10 02 -0010 120 0040 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 518 Praha-Ruzyne          1 2007 11 21 12 00 5010083 01425778

+ 03640 03653 09713 10164 -0011 08 //// ///// ///// 00200 -0010

+ -0200 087 00170 0800 00102 ///// ///// 100 07 08 0024 36 61 60

+ 0001 01 08 07 0024 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 010 -0006 02 02 -0001

+ //// -0024 //// 00102 -0006 00000 -0001 00000 00200 -0012 0000

+ //// -0012 0000 //// 01000 10 02 -0010 140 0030 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 603 Liberec               1 2007 11 21 12 00 5077000 01502417

+ 03977 04015 09665 10158 -0007 05 //// ///// ///// 00198 0050

+ -0120 088 00465 0600 00100 ///// ///// 100 07 08 0024 36 61 60

+ 0001 01 08 07 0024 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 010 -0006 02 02 -0001

+ //// -0024 //// 00100 -0006 00000 -0001 00000 00198 -0012 0000

+ //// -0012 0000 //// 01030 10 02 -0010 130 0070 // -0010 ///

+ //// -0360 /// 0130 ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 659 Pribyslav             1 2007 11 21 12 00 4958278 01576278

+ 05325 05364 09513 10171 -0013 07 //// ///// ///// 00201 -0130

+ -0230 093 00624 0180 00096 ///// ///// 100 07 08 0012 36 61 60

+ 0001 01 08 07 0012 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 010 -0006 04 02 -0001

+ //// -0024 //// 00096 -0006 00000 -0001 00000 00201 -0012 0000

+ //// -0012 0000 //// 01408 10 02 -0010 140 0070 // -0010 ///

+ //// -0360 /// 0130 ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 723 Brno-Turany           1 2007 11 21 12 00 4915306 01668889

+ 02410 02457 09873 10178 -0012 08 //// ///// ///// 00200 0190

+ -0070 083 00540 0800 00100 ///// ///// 100 07 08 0045 36 61 60

+ 0001 01 08 07 0045 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 010 -0006 02 02 -0001

+ //// -0024 //// 00100 -0006 00000 -0001 00000 00200 -0012 0000

+ //// -0012 0000 //// 00800 10 02 -0010 160 0030 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 782 Ostrava-Mosnov        1 2007 11 21 12 00 4969750 01812083

+ 02504 02601 09839 10156 -0017 07 //// ///// ///// 00200 0550

+ -0010 067 01100 2500 00100 ///// ///// 025 00 00 0690 30 20 11

+ 0001 01 02 00 0690 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// // ///// //// 508 -0006 10 10 -0001

+ //// -0024 //// 00100 -0006 00000 -0001 00000 00200 -0012 0000

+ //// -0012 0000 //// 01000 10 02 -0010 250 0060 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //++

+7777

+CREX++

+T0002031300 A000002 P00089000 U00 S007 Y20071121 H0600 D07080

+++

+ 11 423 Primda                1 2007 11 21 06 00 4966944 01267778

+ 07422 07470 09252 ///// -0012 07 //// 09250 00749 00195 -0300

+ -0330 098 00480 0020 00112 00000 ///// 113 05 09 0003 62 61 60

+ 0001 05 09 59 0003 0001 11 // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 14 00019 -0300 049 -0006 // //

+ -0001 //// -0024 //// 00112 -0012 00000 -0001 00000 00195 -0012

+ 0000 //// -0012 0000 -0310 01025 10 02 -0010 100 0070 // -0010

+ /// //// -0360 /// 0110 ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 487 Kocelovice            1 2007 11 21 06 00 4946500 01383111

+ 05190 05219 09531 10172 -0008 06 //// ///// ///// 00200 -0160

+ -0170 099 00490 0030 00101 00000 ///// 113 05 09 0006 62 61 60

+ 0001 05 09 59 0006 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 11 -00002 -0200 049 -0006 02 02

+ -0001 //// -0024 //// 00101 -0012 00000 -0001 00000 00200 -0012

+ 0000 //// -0012 0000 -0170 01015 10 02 -0010 130 0040 // -0010

+ /// //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 518 Praha-Ruzyne          1 2007 11 21 06 00 5010083 01425778

+ 03640 03653 09725 10177 -0006 05 //// ///// ///// 00200 -0060

+ -0200 090 00170 0800 00102 00000 ///// 100 07 08 0024 36 61 60

+ 0001 01 08 07 0024 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 04 00000 -0100 010 -0006 02 02

+ -0001 //// -0024 //// 00102 -0012 00000 -0001 00000 00200 -0012

+ 0000 //// -0012 0000 -0060 01000 10 02 -0010 180 0020 // -0010

+ /// //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 603 Liberec               1 2007 11 21 06 00 5077000 01502417

+ 03977 04015 09675 10168 -0006 05 //// ///// ///// 00198 0100

+ -0120 085 00465 1000 00100 00000 ///// 100 07 08 0036 35 61 60

+ 0001 01 08 06 0036 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 14 00010 0100 002 -0006 // // -0001

+ //// -0024 //// 00100 -0012 00000 -0001 00000 00198 -0012 0000

+ //// -0012 0000 0060 01030 10 02 -0010 140 0070 // -0010 ///

+ //// -0360 /// 0120 ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 659 Pribyslav             1 2007 11 21 06 00 4958278 01576278

+ 05325 05364 09525 10185 -0004 07 //// ///// ///// 00201 -0200

+ -0260 096 00624 0150 00096 00000 ///// 100 07 08 0012 36 61 60

+ 0001 01 08 07 0012 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 14 00018 -0200 010 -0006 02 02

+ -0001 //// -0024 //// 00096 -0012 00000 -0001 00000 00201 -0012

+ 0000 //// -0012 0000 -0210 01408 10 02 -0010 140 0080 // -0010

+ /// 0130 -0360 /// 0140 ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 723 Brno-Turany           1 2007 11 21 06 00 4915306 01668889

+ 02410 02457 09887 10193 -0005 07 //// ///// ///// 00200 0140

+ -0040 088 00540 0500 00100 00000 ///// 100 07 08 0030 36 61 60

+ 0001 01 08 07 0030 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 01 00000 0100 010 -0006 02 02 -0001

+ //// -0024 //// 00100 -0012 00000 -0001 00000 00200 -0012 0000

+ //// -0012 0000 0130 00800 10 02 -0010 140 0030 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 782 Ostrava-Mosnov        1 2007 11 21 06 00 4969750 01812083

+ 02504 02601 09858 10182 -0010 07 //// ///// ///// 00200 0050

+ -0210 083 01100 2000 00100 00000 ///// 013 00 00 0690 30 20 11

+ 0001 01 01 00 0690 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 12 00002 -0200 508 -0006 10 10

+ -0001 //// -0024 //// 00100 -0012 00000 -0001 00000 00200 -0012

+ 0000 //// -0012 0000 -0060 01000 10 02 -0010 240 0060 // -0010

+ /// //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //++

+7777

+CREX++

+T0002031300 A000002 P00089000 U00 S007 Y20071121 H1800 D07080

+++

+ 11 423 Primda                1 2007 11 21 18 00 4966944 01267778

+ 07422 07470 09265 ///// 0004 02 //// 09250 00761 00195 -0290

+ -0320 098 00480 0020 00112 ///// ///// 113 05 09 0003 62 61 60

+ 0001 05 09 59 0003 0001 11 // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 14 00019 //// 049 -0006 04 04 -0001

+ //// -0024 //// 00112 -0012 00000 -0001 00000 00195 -0012 0000

+ -0200 -0012 0000 //// 01025 10 02 -0010 000 0020 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 487 Kocelovice            1 2007 11 21 18 00 4946500 01383111

+ 05190 05219 09536 10177 0008 02 //// ///// ///// 00200 -0140

+ -0160 099 00490 0240 00101 ///// ///// 100 07 08 0009 36 61 60

+ 0001 01 08 07 0009 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 11 -00002 //// 010 -0006 02 02

+ -0001 //// -0024 //// 00101 -0012 00000 -0001 00000 00200 -0012

+ 0000 -0100 -0012 0000 //// 01015 10 02 -0010 000 0020 // -0010

+ /// //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 518 Praha-Ruzyne          1 2007 11 21 18 00 5010083 01425778

+ 03640 03653 09724 10175 0006 01 //// ///// ///// 00200 0000 -0170

+ 088 00170 0900 00102 ///// ///// 100 07 08 0027 36 61 60 0001

+ 01 08 07 0027 0001 // // // //// // 07 /// 08 /// 09 /// // /////

+ ///// // ///// ///// // 00000 //// 010 -0006 02 02 -0001 ////

+ -0024 //// 00102 -0012 00000 -0001 00000 00200 -0012 0000 0020

+ -0012 0000 //// 01000 10 02 -0010 180 0020 // -0010 /// ////

+ -0360 /// //// ///// -0024 // //// -0001 //// //// ///// /////

+ ///// ///// -0024 //// //// ///// ///// ///// ///// //// ////

+ //+

+ 11 603 Liberec               1 2007 11 21 18 00 5077000 01502417

+ 03977 04015 09674 10169 0007 01 //// ///// ///// 00198 0020 -0130

+ 090 00465 0600 00100 ///// ///// 100 07 08 0024 36 61 60 0001

+ 01 08 07 0024 0001 // // // //// // 07 /// 08 /// 09 /// // /////

+ ///// // ///// ///// 14 00009 //// 010 -0006 02 02 -0001 ////

+ -0024 //// 00100 -0012 00000 -0001 00000 00198 -0012 0000 0110

+ -0012 0000 //// 01030 10 02 -0010 130 0070 // -0010 /// ////

+ -0360 /// 0120 ///// -0024 // //// -0001 //// //// ///// /////

+ ///// ///// -0024 //// //// ///// ///// ///// ///// //// ////

+ //+

+ 11 659 Pribyslav             1 2007 11 21 18 00 4958278 01576278

+ 05325 05364 09520 10177 0000 04 //// ///// ///// 00201 -0070

+ -0130 096 00624 0110 00096 ///// ///// 100 07 08 0012 36 61 60

+ 0001 01 08 07 0012 0001 // // // //// // 07 /// 08 /// 09 ///

+ // ///// ///// // ///// ///// 14 00018 //// 010 -0006 04 02 -0001

+ //// -0024 //// 00096 -0012 00000 -0001 00000 00201 -0012 0000

+ -0070 -0012 0000 //// 01408 10 02 -0010 150 0050 // -0010 ///

+ //// -0360 /// //// ///// -0024 // //// -0001 //// //// /////

+ ///// ///// ///// -0024 //// //// ///// ///// ///// ///// ////

+ //// //+

+ 11 723 Brno-Turany           1 2007 11 21 18 00 4915306 01668889

+ 02410 02457 09872 10177 0001 00 //// ///// ///// 00200 0190 -0020

+ 086 00540 0500 00100 ///// ///// 100 07 08 0051 35 61 60 0001

+ 01 08 06 0051 0001 // // // //// // 07 /// 08 /// 09 /// // /////

+ ///// // ///// ///// // 00000 //// 010 -0006 02 02 -0001 ////

+ -0024 //// 00100 -0012 00000 -0001 00000 00200 -0012 0000 0210

+ -0012 0000 //// 00800 10 02 -0010 010 0010 // -0010 /// ////

+ -0360 /// //// ///// -0024 // //// -0001 //// //// ///// /////

+ ///// ///// -0024 //// //// ///// ///// ///// ///// //// ////

+ //+

+ 11 782 Ostrava-Mosnov        1 2007 11 21 18 00 4969750 01812083

+ 02504 02601 09842 10163 0003 03 //// ///// ///// 00200 0250 -0020

+ 082 01100 1200 00100 ///// ///// 025 08 01 0390 30 24 12 0001

+ 01 01 03 0390 0001 // // // //// // 07 /// 08 /// 09 /// // /////

+ ///// // ///// ///// // 00000 //// 508 -0006 10 10 -0001 ////

+ -0024 //// 00100 -0012 00000 -0001 00000 00200 -0012 0000 0600

+ -0012 0000 //// 01000 10 02 -0010 240 0070 // -0010 /// ////

+ -0360 /// //// ///// -0024 // //// -0001 //// //// ///// /////

+ ///// ///// -0024 //// //// ///// ///// ///// ///// //// ////

+ //++

+7777

+CREX++

+T0002031300 A000002 P00089000 U00 S007 Y20071121 H0000 D07080

+++

+ 11 423 Primda                0 2007 11 21 00 00 4966944 01267778

+ 07422 07470 09269 ///// -0009 05 //// 09250 00764 00195 -0260

+ -0280 099 00196 0030 00112 ///// ///// /// // // 0003 // // //

+ 0002 05 09 // 0003 // // // //// 0001 11 // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 185

+ -0006 17 13 -0001 //// -0024 0000 00112 -0006 -00001 -0001 -00001

+ 00195 -0012 0000 //// -0012 0000 //// 01025 10 02 -0010 100 0070

+ // -0010 /// //// -0360 /// //// ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //+

+ 11 487 Kocelovice            1 2007 11 21 00 00 4946500 01383111

+ 05190 05219 09544 10185 -0008 07 //// ///// ///// 00200 -0110

+ -0120 099 00490 0250 00101 ///// ///// 100 07 08 0012 36 61 60

+ 0002 01 08 07 0012 // // // //// 0001 // // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 010

+ -0006 02 02 -0001 //// -0024 0000 00101 -0006 00000 -0001 00000

+ 00200 -0012 0000 //// -0012 0000 //// 01015 10 02 -0010 140 0060

+ // -0010 /// //// -0360 /// //// ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //+

+ 11 518 Praha-Ruzyne          1 2007 11 21 00 00 5010083 01425778

+ 03640 03653 09738 10190 -0007 07 //// ///// ///// 00200 0010

+ -0150 089 00170 0900 00102 ///// ///// 100 07 08 0027 36 61 60

+ 0002 01 08 07 0027 // // // //// 0001 // // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 010

+ -0006 02 02 -0001 //// -0024 0000 00102 -0006 00000 -0001 00000

+ 00200 -0012 0000 //// -0012 0000 //// 01000 10 02 -0010 140 0040

+ // -0010 /// //// -0360 /// //// ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //+

+ 11 603 Liberec               0 2007 11 21 00 00 5077000 01502417

+ 03977 04015 09690 10183 -0006 05 //// ///// ///// 00198 0130

+ -0100 085 00190 1000 00100 ///// ///// /// // // 0039 // // //

+ 0002 21 05 // 0039 22 07 // 0270 0001 // // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 100

+ -0006 11 10 -0001 //// -0024 0000 00100 -0006 00000 -0001 00000

+ 00198 -0012 0000 //// -0012 0000 //// 01030 10 02 -0010 140 0060

+ // -0010 /// //// -0360 /// 0130 ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //+

+ 11 659 Pribyslav             1 2007 11 21 00 00 4958278 01576278

+ 05325 05364 09539 10198 -0005 07 //// ///// ///// 00201 -0100

+ -0180 094 00624 0360 00096 ///// ///// 100 07 08 0015 35 61 60

+ 0002 01 08 07 0015 // // // //// 0001 // // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 010

+ -0006 02 02 -0001 //// -0024 0000 00096 -0006 00000 -0001 00000

+ 00201 -0012 0000 //// -0012 0000 //// 01408 10 02 -0010 140 0090

+ // -0010 /// //// -0360 /// 0170 ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //+

+ 11 723 Brno-Turany           1 2007 11 21 00 00 4915306 01668889

+ 02410 02457 09900 10206 -0012 07 //// ///// ///// 00200 0170

+ 0010 089 00540 0700 00100 ///// ///// 100 07 08 0033 36 61 60

+ 0002 01 08 07 0033 // // // //// 0001 // // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 010

+ -0006 02 02 -0001 //// -0024 0000 00100 -0006 00000 -0001 00000

+ 00200 -0012 0000 //// -0012 0000 //// 00800 10 02 -0010 230 0010

+ // -0010 /// //// -0360 /// //// ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //+

+ 11 782 Ostrava-Mosnov        1 2007 11 21 00 00 4969750 01812083

+ 02504 02601 09878 10201 -0013 07 //// ///// ///// 00200 0130

+ -0170 081 01100 1800 00100 ///// ///// 025 00 00 0600 30 20 19

+ 0002 01 02 01 0600 // // // //// 0001 // // // //// // 07 ///

+ 08 /// 09 /// // ///// ///// // ///// ///// // ///// //// 508

+ -0006 10 10 -0001 //// -0024 0084 00100 -0006 00000 -0001 00000

+ 00200 -0012 0000 //// -0012 0000 //// 01000 10 02 -0010 240 0050

+ // -0010 /// //// -0360 /// //// ///// -0024 // //// -0001 ////

+ //// ///// ///// ///// ///// -0024 //// //// ///// ///// /////

+ ///// //// //// //++

+7777

diff --git a/data/IUSD40_OKLI.bufr b/data/IUSD40_OKLI.bufr
new file mode 100755
index 0000000..6bf87a5
Binary files /dev/null and b/data/IUSD40_OKLI.bufr differ
diff --git a/data/IUSD40_OKLI.crex b/data/IUSD40_OKLI.crex
new file mode 100755
index 0000000..6331dee
--- /dev/null
+++ b/data/IUSD40_OKLI.crex
@@ -0,0 +1,303 @@
+CREX++

+T000103 A002 D09052++

+ 11 520 /////////  080 04 006 05 18 2007 11 20 17 30 00 5000833

+ 01444806 03020 03034 000304 // 07 08 0040 36 61 60 // ///// 0082

+ 00000 200000 10000 00160 0000000 00000000 //// //// /// ////

+ 00000 434000 09823 00304 0001000 00001000 0205 -0085 156 0013

+ 00088 200000 09250 00785 0001000 00001000 -0255 -0275 161 0039

+ 00125 030000 08989 01012 0001000 00001000 -0405 -0405 174 0037

+ 00130 030000 08951 01046 0001000 00001000 -0395 -0445 176 0036

+ 00135 020000 08917 01076 0001000 00001000 0315 -0415 179 0036

+ 00140 010000 08882 01108 0001000 00001000 0545 -0855 182 0035

+ 00145 020000 08848 01140 0001000 00001000 0655 -1105 186 0035

+ 00155 020000 08787 01196 0001000 00001000 0715 -1275 193 0034

+ 00199 200000 08500 01470 0001000 00001000 0735 -1465 230 0036

+ 00210 010000 08429 01538 0001000 00001000 0775 -1765 236 0038

+ 00255 030000 08158 01807 0001000 00001000 0755 -0975 244 0047

+ 00420 010000 07160 02869 0002000 00002000 0115 -1175 227 0042

+ 00446 200000 07000 03051 0002000 00002000 0035 -1355 233 0049

+ 00480 004000 06820 03258 0002000 00002000 -0125 -1565 241 0056

+ 00570 020000 06326 03854 0002000 00003000 -0495 -2375 224 0075

+ 00605 004000 06140 04089 0002000 00003000 -0515 -3065 216 0075

+ 00620 010000 06057 04196 0002000 00003000 -0565 -3345 216 0072

+ 00635 030000 05983 04292 0003000 00003000 -0605 -2005 218 0068

+ 00730 004000 05520 04916 0003000 00004000 -1175 -1735 239 0085

+ 00755 020000 05401 05082 0003000 00004000 -1335 -1755 246 0084

+ 00840 010000 05004 05659 0003000 00005000 -1715 -2015 277 0078

+ 00841 200000 05000 05665 0003000 00005000 -1715 -2025 277 0078

+ 00860 004000 04923 05781 0003000 00005000 -1795 -2165 281 0081

+ 00920 010000 04658 06192 0003000 00006000 -2075 -2595 283 0078

+ 00935 010000 04596 06292 0003000 00006000 -2145 -3095 284 0074

+ 00975 030000 04435 06553 0003000 00007000 -2385 -3085 288 0064

+ 00980 030000 04414 06587 0003000 00007000 -2385 -3605 289 0063

+ 01085 030000 04009 07281 0003000 00007000 -2995 -3395 311 0050

+ 01087 200000 04000 07298 0003000 00007000 -3005 -3405 311 0050

+ 01100 004000 03943 07399 0003000 00007000 -3075 -3595 313 0043

+ 01140 004000 03794 07672 0003000 00008000 -3265 -4215 335 0030

+ 01190 004000 03620 08000 0002000 00008000 -3535 -4755 338 0057

+ 01200 010000 03585 08069 0002000 00008000 -3575 -4885 330 0061

+ 01245 004000 03422 08389 0002000 00008000 -3845 -4865 275 0084

+ 01280 004000 03315 08607 0002000 00008000 -4045 -4985 271 0107

+ 01335 010000 03131 08993 0002000 00009000 -4395 -5145 297 0139

+ 01380 200000 03000 09279 0002000 00010000 -4615 -5985 308 0169

+ 01380 014000 02999 09280 0002000 00010000 -4615 -5975 308 0169

+ 01420 004000 02870 09570 0001000 00011000 -4875 -6005 309 0162

+ 01505 004000 02635 10127 0001000 00013000 -5395 -6305 257 0158

+ 01555 200000 02500 10461 0001000 00014000 -5695 -6485 258 0172

+ 01585 020000 02420 10666 0001000 00014000 -5895 -6575 266 0178

+ 01660 004000 02231 11172 0001000 00016000 -6325 -6795 290 0192

+ 01680 010000 02180 11313 0001000 00017000 -6435 -6895 292 0197

+ 01750 004000 02020 11774 0001000 00019000 -6755 -7225 289 0224

+ 01759 200000 02000 11834 0000000 00019000 -6805 -7275 290 0224

+ 01820 120000 01855 12284 0000000 00021000 -7125 -7615 303 0187

+ 01860 004000 01755 12614 0000000 00021000 -6875 -7385 311 0130

+ 01890 030000 01689 12841 -0001000 00022000 -6605 -7175 310 0080

+ 01900 004000 01667 12923 -0001000 00022000 -6615 -7245 307 0068

+ 01915 004000 01632 13050 -0001000 00022000 -6675 -7375 297 0060

+ 01950 004000 01578 13253 -0001000 00022000 -6685 -7535 280 0087

+ 01989 200000 01500 13560 -0001000 00023000 -6595 -7665 287 0112

+ 02010 020000 01459 13728 -0001000 00023000 -6435 -7645 290 0103

+ 02050 010000 01386 14042 -0001000 00023000 -6575 -7975 286 0082

+ 02085 004000 01327 14308 -0001000 00024000 -6585 -8115 284 0079

+ 02140 004000 01233 14757 -0001000 00024000 -6405 -8155 301 0051

+ 02235 004000 01101 15446 -0001000 00025000 -6415 -8395 286 0082

+ 02320 034000 01004 16012 -0002000 00026000 -6375 -8485 302 0089

+ 02323 200000 01000 16035 -0002000 00026000 -6385 -8435 303 0087

+ 02430 004000 00882 16804 -0002000 00027000 -6375 -8615 287 0099

+ 02480 020000 00836 17136 -0002000 00028000 -6295 -8605 292 0121

+ 02550 004000 00771 17633 -0003000 00029000 -6505 -8795 307 0116

+ 02634 200000 00700 18218 -0003000 00030000 -6515 -8845 305 0100

+ 02964 200000 00500 20264 -0005000 00035000 -6635 -8935 296 0151

+ 03150 020000 00414 21399 -0007000 00039000 -6955 -9175 302 0180

+ 03215 004000 00387 21799 -0007000 00041000 -6835 -9095 293 0192

+ 03365 004000 00328 22793 -0009000 00044000 -6855 -9115 310 0201

+ 03454 200000 00300 23325 -0010000 00046000 -6895 -9135 295 0218

+ 03500 004000 00286 23605 -0010000 00048000 -6825 -9105 289 0221

+ 03842 200000 00200 25750 -0013000 00059000 -6975 -9195 294 0288

+ 03860 020000 00196 25863 -0013000 00059000 -6985 -9255 295 0287

+ 03975 004000 00173 26623 -0015000 00063000 -6865 -9195 298 0283

+ 04060 004000 00157 27187 -0015000 00066000 -6865 -9215 283 0312

+ 04095 020000 00151 27416 -0016000 00068000 -6735 -9145 284 0312

+ 04150 004000 00142 27788 -0016000 00070000 -6875 -9235 294 0288

+ 04270 020000 00124 28627 -0017000 00075000 -6935 -9275 286 0376

+ 04315 044000 00118 28925 -0018000 00077000 -6695 -9165 285 0392

+ 04345 020000 00114 29111 -0018000 00079000 -6615 -9115 285 0381

+ 04370 004100 00111 29265 -0018000 00080000 -6655 -9125 285 0374

+ 04375 030000 00111 29295 /////// //////// -6645 -9115 /// ////

+ 0001 04315 044000 00118 -0018000 00077000 0113 ////++

+7777

+CREX++

+T000103 A002 D09052++

+ 11 520 /////////  080 04 006 05 18 2007 11 20 11 15 00 5000833

+ 01444806 03020 03034 000304 // 07 08 0040 36 61 60 // ///// 0075

+ 00000 200000 10000 00161 0000000 00000000 //// //// /// ////

+ 00000 434000 09825 00304 0001000 00001000 0245 -0075 170 0013

+ 00080 200000 09251 00786 0001000 00001000 -0235 -0265 168 0032

+ 00130 030000 08894 01098 0001000 00001000 -0455 -0475 199 0045

+ 00135 020000 08857 01130 0001000 00001000 -0175 -0385 202 0046

+ 00140 020000 08824 01160 0001000 00001000 0275 -0555 205 0048

+ 00145 010000 08792 01190 0001000 00001000 0445 -0745 207 0049

+ 00155 020000 08727 01251 0001000 00001000 0675 -1045 211 0052

+ 00160 004000 08694 01282 0001000 00001000 0675 -1145 212 0053

+ 00190 200000 08500 01467 0001000 00001000 0645 -1605 210 0060

+ 00285 030000 07934 02032 0002000 00001000 0685 -2705 206 0068

+ 00440 010000 07033 03009 0003000 00002000 0115 -3995 200 0105

+ 00445 004000 07007 03039 0003000 00002000 0095 -3825 200 0106

+ 00446 200000 07000 03046 0003000 00002000 0085 -3905 200 0106

+ 00590 010000 06252 03942 0004000 00003000 -0595 -3505 219 0070

+ 00615 010000 06132 04093 0004000 00003000 -0715 -2115 221 0072

+ 00625 004000 06082 04157 0004000 00003000 -0765 -2305 222 0074

+ 00640 010000 06008 04252 0004000 00003000 -0815 -4835 222 0076

+ 00670 010000 05863 04440 0004000 00003000 -0915 -2395 220 0076

+ 00730 004000 05566 04840 0005000 00004000 -1205 -2815 214 0069

+ 00810 030000 05216 05335 0005000 00004000 -1545 -3465 232 0066

+ 00850 010000 05038 05595 0005000 00005000 -1765 -3615 238 0053

+ 00859 200000 05000 05652 0005000 00005000 -1805 -3315 242 0050

+ 00870 004000 04953 05722 0005000 00005000 -1875 -3085 248 0047

+ 00910 004000 04787 05974 0005000 00005000 -2065 -2675 265 0057

+ 00925 010000 04724 06072 0005000 00005000 -2155 -2635 264 0066

+ 01000 004000 04427 06548 0005000 00006000 -2525 -2905 255 0103

+ 01075 030000 04144 07024 0006000 00007000 -2925 -3245 264 0102

+ 01115 200000 04000 07275 0006000 00008000 -3115 -3495 279 0102

+ 01140 004000 03912 07433 0005000 00008000 -3225 -3655 285 0109

+ 01220 020000 03638 07941 0005000 00009000 -3605 -4065 288 0143

+ 01360 010000 03176 08867 0005000 00012000 -4395 -4705 287 0161

+ 01420 200000 03000 09247 0004000 00013000 -4725 -5165 290 0174

+ 01480 004000 02831 09628 0004000 00015000 -5045 -5605 293 0197

+ 01602 200000 02500 10425 0003000 00018000 -5785 -6365 289 0205

+ 01655 030000 02365 10772 0003000 00019000 -6105 -6715 295 0193

+ 01740 004000 02163 11322 0002000 00021000 -6545 -7185 302 0176

+ 01810 200000 02000 11794 0002000 00023000 -6765 -7395 287 0182

+ 01875 130000 01867 12207 0001000 00025000 -6925 -7575 282 0238

+ 01880 004000 01856 12242 0001000 00025000 -6925 -7575 283 0239

+ 01965 004000 01666 12893 0001000 00027000 -6735 -7595 303 0131

+ 02030 004000 01556 13307 0000000 00028000 -6465 -7875 296 0084

+ 02063 200000 01500 13531 0000000 00028000 -6425 -8075 283 0079

+ 02065 010000 01495 13552 0000000 00028000 -6425 -8085 283 0079

+ 02085 004000 01455 13716 0000000 00028000 -6495 -8235 280 0087

+ 02185 004000 01290 14453 0000000 00029000 -6275 -8435 284 0062

+ 02255 020000 01196 14922 0000000 00030000 -6145 -8485 276 0083

+ 02400 034000 01002 16008 0000000 00032000 -6405 -8745 263 0089

+ 02402 200000 01000 16023 0000000 00032000 -6415 -8765 263 0089

+ 02490 020000 00899 16675 0000000 00033000 -6255 -8705 293 0102

+ 02520 004000 00866 16905 0000000 00033000 -6405 -8805 301 0093

+ 02690 004000 00729 17960 -0001000 00035000 -6355 -8805 286 0113

+ 02736 200000 00700 18210 -0001000 00036000 -6315 -8925 289 0141

+ 02790 020000 00665 18522 -0001000 00037000 -6295 -8805 295 0141

+ 02955 004000 00566 19511 -0002000 00040000 -6575 -8995 295 0148

+ 03030 004000 00528 19934 -0002000 00041000 -6645 -9055 278 0146

+ 03090 200000 00500 20260 -0003000 00043000 -6645 -8945 281 0158

+ 03185 004000 00458 20795 -0003000 00045000 -6745 -9085 294 0170

+ 03410 004000 00365 22143 -0005000 00051000 -6985 -9235 293 0232

+ 03480 004000 00341 22559 -0005000 00053000 -7085 -9295 301 0211

+ 03525 020000 00325 22838 -0006000 00054000 -7135 -9325 300 0206

+ 03602 200000 00300 23313 -0006000 00056000 -6995 -9215 300 0218

+ 03760 020000 00254 24308 -0008000 00060000 -6765 -9105 298 0206

+ 03905 004000 00218 25231 -0009000 00064000 -6845 -9155 289 0226

+ 03980 200000 00200 25736 -0010000 00066000 -6965 -9195 285 0258

+ 04070 020000 00180 26361 -0010000 00069000 -7205 -9355 291 0280

+ 04340 020000 00133 28168 -0013000 00080000 -6335 -8815 281 0371

+ 04580 020000 00101 29850 -0014000 00092000 -6635 -8945 282 0377

+ 04589 200000 00100 29914 -0014000 00093000 -6585 -8895 281 0381

+ 04645 020000 00094 30308 -0015000 00096000 -6315 -8755 280 0417

+ 04690 004000 00089 30627 -0015000 00098000 -6475 -8825 278 0436

+ 04740 020000 00084 30953 -0015000 00101000 -6425 -8795 274 0417

+ 04765 004000 00082 31117 -0015000 00103000 -6305 -8735 272 0414

+ 04880 044100 00073 31869 -0015000 00110000 -5855 -8445 270 0518

+ 04890 030000 00072 31938 /////// //////// -5805 -8375 /// ////

+ 0001 04880 044000 00073 -0015000 00110000 0105 ////++

+7777

+CREX++

+T000103 A002 D09052++

+ 11 520 /////////  080 04 006 05 18 2007 11 20 05 29 00 5000833

+ 01444806 03020 03034 000304 // 07 07 0040 36 61 60 // ///// 0057

+ 00000 200000 10000 00154 0000000 00000000 //// //// /// ////

+ 00000 434000 09816 00304 0001000 00001000 0115 -0065 079 0021

+ 00088 200000 09250 00780 0001000 00000000 -0215 -0255 148 0044

+ 00125 030000 08989 01007 0001000 00000000 -0395 -0395 182 0059

+ 00130 024000 08956 01036 0001000 00000000 -0305 -0315 186 0063

+ 00140 020000 08891 01094 0001000 00000000 0505 -0435 192 0072

+ 00150 030000 08828 01153 0001000 00000000 0635 -1005 197 0080

+ 00190 004000 08570 01395 0002000 00001000 0545 -1585 202 0098

+ 00201 200000 08500 01462 0002000 00001000 0495 -1625 199 0098

+ 00220 020000 08377 01580 0002000 00001000 0445 -1565 190 0098

+ 00260 020000 08127 01827 0002000 00001000 0665 -2795 167 0097

+ 00300 004000 07881 02079 0002000 00000000 0595 -2175 154 0093

+ 00310 030000 07818 02145 0003000 00000000 0605 -3395 154 0093

+ 00442 200000 07000 03041 0004000 00000000 0045 -2535 173 0088

+ 00470 020000 06841 03223 0004000 00000000 -0045 -2885 179 0088

+ 00600 004000 06132 04086 0005000 00000000 -0735 -3665 205 0087

+ 00730 004000 05490 04935 0006000 00001000 -1465 -4355 203 0114

+ 00810 030000 05114 05467 0006000 00002000 -1945 -4975 223 0092

+ 00833 200000 05000 05635 0007000 00002000 -2025 -5105 230 0081

+ 00840 010000 04967 05683 0007000 00002000 -2055 -5185 231 0080

+ 00915 010000 04637 06187 0007000 00002000 -2415 -3095 241 0070

+ 00925 004000 04595 06254 0007000 00003000 -2475 -3135 244 0068

+ 01005 010000 04234 06845 0007000 00004000 -2835 -3845 268 0127

+ 01060 200000 04000 07250 0007000 00004000 -3125 -3665 282 0123

+ 01065 030000 03980 07285 0007000 00005000 -3145 -3745 284 0122

+ 01095 004000 03861 07498 0007000 00005000 -3335 -3995 292 0127

+ 01170 010000 03577 08030 0006000 00006000 -3785 -4545 298 0146

+ 01205 020000 03452 08274 0006000 00007000 -4005 -4475 296 0155

+ 01340 010000 03029 09153 0005000 00010000 -4715 -5045 298 0199

+ 01349 200000 03000 09217 0005000 00010000 -4755 -5085 299 0201

+ 01524 200000 02500 10395 0003000 00015000 -5735 -6065 298 0250

+ 01600 020000 02312 10884 0003000 00018000 -6175 -6505 299 0272

+ 01645 004000 02189 11220 0002000 00019000 -6395 -6765 299 0296

+ 01724 200000 02000 11768 0001000 00022000 -6785 -7175 296 0239

+ 01765 030000 01910 12043 0001000 00023000 -6845 -7185 293 0219

+ 01835 134000 01744 12586 0001000 00025000 -7045 -7405 277 0230

+ 01905 020000 01582 13176 0000000 00027000 -6265 -7135 291 0100

+ 01946 200000 01500 13504 0000000 00027000 -6425 -7625 294 0064

+ 01950 004000 01492 13539 0000000 00027000 -6435 -7665 292 0063

+ 01960 010000 01472 13621 0000000 00027000 -6405 -7695 289 0063

+ 02065 004000 01279 14489 0000000 00028000 -6175 -8045 263 0076

+ 02255 034000 01005 15973 0000000 00030000 -6305 -8425 290 0068

+ 02259 200000 01000 16004 0000000 00030000 -6305 -8375 291 0067

+ 02400 020000 00847 17025 0000000 00032000 -6235 -8435 289 0100

+ 02525 004000 00748 17787 -0001000 00034000 -6305 -8535 286 0106

+ 02592 200000 00700 18197 -0001000 00034000 -6365 -8555 294 0094

+ 02855 020000 00540 19784 -0002000 00039000 -6435 -8715 297 0187

+ 02920 004000 00505 20186 -0003000 00041000 -6545 -8795 305 0193

+ 02930 200000 00500 20248 -0003000 00041000 -6585 -8815 305 0189

+ 02985 020000 00472 20595 -0004000 00042000 -6815 -8975 298 0172

+ 03270 004000 00349 22404 -0006000 00049000 -7025 -9115 290 0204

+ 03325 020000 00329 22760 -0006000 00051000 -7095 -9155 294 0216

+ 03413 200000 00300 23303 -0007000 00053000 -7005 -9065 290 0214

+ 03645 004000 00232 24822 -0009000 00060000 -7095 -9175 306 0261

+ 03770 020000 00204 25606 -0010000 00064000 -7125 -9195 298 0265

+ 03786 200000 00200 25710 -0011000 00064000 -7105 -9145 298 0264

+ 04045 034000 00151 27394 -0013000 00073000 -6835 -9035 283 0299

+ 0000++

+7777

+CREX++

+T000103 A002 D09052++

+ 11 520 /////////  080 04 006 05 18 2007 11 19 23 15 00 5000833

+ 01444806 03020 03034 000304 // 07 07 0080 36 61 60 // ///// 0065

+ 00000 200000 10000 00162 0000000 00000000 //// //// /// ////

+ 00000 434000 09826 00304 0001000 00001000 0065 -0085 094 0026

+ 00015 020000 09742 00373 0001000 00001000 0165 -0065 100 0039

+ 00093 200000 09250 00789 0001000 00000000 -0135 -0195 131 0039

+ 00120 034000 09084 00933 0001000 00000000 -0235 -0235 152 0049

+ 00135 020000 08997 01010 0001000 00000000 -0035 -0195 161 0061

+ 00145 020000 08934 01067 0001000 00000000 0245 -0295 165 0071

+ 00150 020000 08905 01093 0001000 00000000 0535 -0465 166 0076

+ 00165 030000 08816 01175 0001000 00000000 0625 -0495 168 0090

+ 00200 004000 08603 01375 0002000 00000000 0535 -0415 169 0107

+ 00218 200000 08500 01474 0002000 00000000 0555 -0415 171 0103

+ 00240 004000 08375 01595 0002000 00000000 0485 -0555 173 0096

+ 00340 030000 07782 02189 0003000 00000000 0175 -1025 155 0096

+ 00360 024000 07671 02305 0003000 -00001000 0365 -1415 155 0099

+ 00385 030000 07530 02456 0003000 -00001000 0335 -1885 159 0094

+ 00485 200000 07000 03042 0004000 -00001000 -0105 -1955 176 0075

+ 00495 004000 06947 03103 0004000 -00001000 -0155 -1955 176 0074

+ 00585 004000 06492 03638 0004000 -00001000 -0445 -2255 188 0108

+ 00600 030000 06426 03719 0005000 -00001000 -0485 -2315 189 0115

+ 00835 004000 05346 05133 0007000 00000000 -1615 -3815 196 0145

+ 00913 200000 05000 05631 0008000 00001000 -2035 -4515 201 0120

+ 01125 030000 04144 06990 0010000 00002000 -3225 -5635 202 0112

+ 01130 004000 04124 07023 0010000 00002000 -3245 -5645 202 0114

+ 01165 200000 04000 07238 0011000 00002000 -3355 -6215 207 0119

+ 01165 010000 03999 07240 0011000 00002000 -3355 -6165 207 0119

+ 01245 004000 03727 07730 0011000 00003000 -3735 -6085 220 0100

+ 01315 010000 03488 08182 0012000 00004000 -4125 -6265 247 0128

+ 01345 004000 03391 08374 0012000 00004000 -4205 -5075 256 0141

+ 01360 010000 03340 08477 0012000 00004000 -4265 -4995 257 0143

+ 01425 004000 03143 08883 0012000 00006000 -4585 -5375 252 0127

+ 01465 030000 03015 09160 0012000 00006000 -4785 -5525 261 0123

+ 01470 200000 03000 09192 0012000 00006000 -4825 -5555 263 0123

+ 01505 004000 02886 09446 0012000 00007000 -5055 -5675 279 0123

+ 01530 004000 02811 09618 0012000 00007000 -5185 -5725 289 0136

+ 01635 200000 02500 10365 0012000 00010000 -5855 -6335 296 0228

+ 01670 010000 02393 10639 0011000 00011000 -6125 -6545 300 0255

+ 01735 030000 02194 11170 0010000 00013000 -6595 -7015 300 0328

+ 01755 044000 02132 11345 0010000 00014000 -6635 -7065 299 0335

+ 01810 200000 02000 11730 0009000 00016000 -6755 -7155 294 0267

+ 01825 130000 01967 11830 0009000 00017000 -6805 -7185 292 0246

+ 01885 020000 01832 12260 0009000 00018000 -6715 -7235 283 0208

+ 01950 020000 01694 12740 0009000 00020000 -6045 -7195 280 0110

+ 01955 004000 01682 12783 0009000 00020000 -6055 -7255 280 0100

+ 01980 004000 01639 12944 0009000 00020000 -6135 -7575 271 0067

+ 01990 010000 01622 13011 0009000 00020000 -6155 -7665 265 0062

+ 02035 004000 01531 13367 0009000 00021000 -6035 -7845 249 0071

+ 02051 200000 01500 13495 0009000 00021000 -5995 -7905 249 0072

+ 02155 004000 01323 14275 0009000 00022000 -6135 -8355 272 0050

+ 02275 004000 01158 15099 0009000 00022000 -6235 -8545 236 0068

+ 02345 004000 01067 15605 0009000 00023000 -6255 -8575 261 0081

+ 02400 034000 01002 15989 0009000 00024000 -6255 -8605 260 0086

+ 02402 200000 01000 16003 0009000 00024000 -6245 -8635 260 0086

+ 02475 004000 00918 16532 0009000 00025000 -6235 -8645 294 0097

+ 02555 004000 00842 17066 0009000 00026000 -6245 -8725 277 0090

+ 02735 200000 00700 18202 0009000 00029000 -6235 -8865 290 0150

+ 02755 020000 00687 18319 0008000 00029000 -6195 -8805 292 0151

+ 02940 004000 00567 19489 0007000 00033000 -6565 -9105 309 0153

+ 03050 200000 00500 20253 0006000 00034000 -6795 -9215 298 0135

+ 03060 120000 00495 20319 0006000 00034000 -6835 -9235 297 0133

+ 03135 004000 00457 20794 0006000 00036000 -6815 -9195 292 0146

+ 03245 004000 00406 21504 0005000 00038000 -6945 -9255 306 0179

+ 03440 004000 00332 22695 0004000 00042000 -6895 -9215 299 0212

+ 03536 200000 00300 23305 0003000 00045000 -6985 -9205 303 0192

+ 03640 004100 00271 23915 0002000 00047000 -7065 -9355 296 0173

+ 03645 030000 00269 23943 /////// //////// -7025 -9335 /// ////

+ 0001 01755 044000 02132 0010000 00014000 0113 0156++

+7777

diff --git a/data/acar.crex b/data/acar.crex
new file mode 100755
index 0000000..47a727d
--- /dev/null
+++ b/data/acar.crex
@@ -0,0 +1,8 @@
+CREX++

+T000103 A004 B01006 B01008 B02061 B02062 B02002 B02005

+ B02070 B02063 B02001 B04001 B04002 B04003 B04004 B04005 B05002

+ B06002 B08004 B07004 B08021 B11001 B11002 B11031 B11034 B11035

+ B12001 B12003 B13003 B20041++

+ 00001008 JEWEITRA  / 03 04 025 10 ///// 0 2003 12 21 21 01 3400

+ -08501 / 06318 // 296 0093 // //// ///// -035 /// /// //++

+7777

diff --git a/data/airep.bufr b/data/airep.bufr
new file mode 100755
index 0000000..1b42f00
Binary files /dev/null and b/data/airep.bufr differ
diff --git a/data/amdar.crex b/data/amdar.crex
new file mode 100755
index 0000000..0b61c7b
--- /dev/null
+++ b/data/amdar.crex
@@ -0,0 +1,5 @@
+CREX++

+T000103 A004 D11001++

+ 00001008 0 2003 11 05 00 00 3150500 01311833 3 01005 -482 318

+ 0293 // ///// ///// //++

+7777

diff --git a/data/buoy.crex b/data/buoy.crex
new file mode 100755
index 0000000..1e5a0a8
--- /dev/null
+++ b/data/buoy.crex
@@ -0,0 +1,6 @@
+CREX++

+T000103 A001 D08003 E++

+ 148583 2/// 3/// 40 52003 611 725 815 910 08336 1-14709 2/////

+ 310114 4//// 5// 6/// 7//// 8/// 9/// 0/// 1//// 2/// 3// 4//

+ 5/// 6// 7// 8//// 9// 0// 1// 2////++

+7777

diff --git a/data/gaussian.grib b/data/gaussian.grib
new file mode 100755
index 0000000..998ee49
Binary files /dev/null and b/data/gaussian.grib differ
diff --git a/data/latlon.grib b/data/latlon.grib
new file mode 100755
index 0000000..c5f6080
Binary files /dev/null and b/data/latlon.grib differ
diff --git a/data/reduced_gg.grib b/data/reduced_gg.grib
new file mode 100755
index 0000000..84b716b
Binary files /dev/null and b/data/reduced_gg.grib differ
diff --git a/data/satob.crex b/data/satob.crex
new file mode 100755
index 0000000..82520ac
--- /dev/null
+++ b/data/satob.crex
@@ -0,0 +1,15 @@
+CREX++

+T000103 A005 D01043 D04001++

+ 0254 01 2003 12 21 23 00 00 3990000 -08950000 02 02600 -495 285

+ 0267+

+ 0254 01 2003 12 21 23 00 00 3990000 -08950000 02 02600 -495 280

+ 0267+

+ 0254 01 2003 12 21 23 00 00 3960000 -08890000 02 03100 -395 285

+ 0216+

+ 0254 01 2003 12 21 23 00 00 3980000 -08790000 02 02800 -473 285

+ 0231+

+ 0254 01 2003 12 21 23 00 00 3850000 -08960000 02 02600 -511 290

+ 0236+

+ 0254 01 2003 12 21 23 00 00 3830000 -08970000 02 02200 -519 290

+ 0241++

+7777

diff --git a/data/spectral.grib b/data/spectral.grib
new file mode 100755
index 0000000..3403817
Binary files /dev/null and b/data/spectral.grib differ
diff --git a/data/synop.crex b/data/synop.crex
new file mode 100755
index 0000000..258cd80
--- /dev/null
+++ b/data/synop.crex
@@ -0,0 +1,7 @@
+CREX++

+T000103 A000 D07005 B13023 B13013 E++

+ 110 2033 31 42003 512 621 722 800 95483000 000950000 100033 209917

+ 309958 40041 5// 6300 70100 8011 9-005 0/// 12500 2002 301 401

+ 5025 601 702 80175 935 020 110 201 307 406 50152 602 7// 8//

+ 9//// 003 1// 2// 3//// 4// 5// 6// 7//// 8///// 9/////++

+7777

diff --git a/data/synop_ship.crex b/data/synop_ship.crex
new file mode 100755
index 0000000..ba63daa
--- /dev/null
+++ b/data/synop_ship.crex
@@ -0,0 +1,6 @@
+CREX++

+T000103 A001 D08004 B12005 B10197 E++

+ 1000001009 2315 3009 41 52003 611 705 806 900 0-0800 1-00320

+ 2///// 310134 40001 500 6150 70080 8220 9171 0/// 12000 2003

+ 302 402 5090 601 707 80045 937 025 116 22948 3190 4///++

+7777

diff --git a/data/temp.crex b/data/temp.crex
new file mode 100755
index 0000000..11b0e36
--- /dev/null
+++ b/data/temp.crex
@@ -0,0 +1,41 @@
+CREX++

+T000103 A002 D09007 R04000 B07004 B08001 B11061 B11062

+ E++

+ 161 2052 3/// 4// 52003 612 721 822 900 01348000 100217000 200227

+ 3/// 4// 5// 6//// 7// 8// 9// 00052 110000 2040 3000126 4///

+ 5/// 6/// 7//// 809890 9100 0000223 1234 2-046 3020 40020 509250

+ 6040 7000792 8228 9-092 0065 10100 208500 3040 4001505 5184 6-216

+ 7080 80060 907000 0040 1003114 2094 3-066 4225 50060 605000 7040

+ 8005766 9-059 0-539 1145 20040 304000 4040 5007443 6-159 7-609

+ 8280 90040 003000 1040 2009493 3-335 4-605 5345 60140 702500

+ 8040 9010719 0-437 1/// 2305 30150 402000 5040 6012160 7-555

+ 8/// 9280 00180 101500 2040 3013896 4-695 5/// 6250 70310 801420

+ 9010 0////// 1/// 2/// 3260 40320 501000 6040 7016240 8-785 9///

+ 0265 10090 200970 3024 4////// 5-799 6/// 7245 80070 900943 0002

+ 1////// 2/// 3/// 4240 50060 600882 7002 8////// 9/// 0/// 1325

+ 20050 300839 4002 5////// 6/// 7/// 8035 90050 000817 1002 2//////

+ 3/// 4/// 5105 60050 700799 8002 9////// 0/// 1/// 2145 30060

+ 400768 5004 6////// 7-819 8/// 9/// 0//// 100700 2044 3018221

+ 4-757 5/// 6215 70050 800668 9002 0////// 1/// 2/// 3245 40050

+ 500615 6004 7////// 8-717 9/// 0/// 1//// 200586 3002 4//////

+ 5/// 6/// 7150 80020 900575 0002 1////// 2/// 3/// 4055 50030

+ 600539 7002 8////// 9/// 0/// 1065 20070 300511 4002 5//////

+ 6/// 7/// 8120 90100 000500 1040 2020172 3-697 4/// 5115 60100

+ 700494 8002 9////// 0/// 1/// 2110 30100 400474 5004 6//////

+ 7-689 8/// 9/// 0//// 100470 2002 3////// 4/// 5/// 6130 70070

+ 800444 9002 0////// 1/// 2/// 3100 40050 500424 6002 7//////

+ 8/// 9/// 0055 10040 200422 3004 4////// 5-641 6/// 7/// 8////

+ 900412 0002 1////// 2/// 3/// 4035 50050 600388 7002 8//////

+ 9/// 0/// 1045 20060 300386 4004 5////// 6-657 7/// 8/// 9////

+ 000369 1002 2////// 3/// 4/// 5075 60070 700356 8004 9//////

+ 0-619 1/// 2/// 3//// 400352 5002 6////// 7/// 8/// 9070 00100

+ 100335 2002 3////// 4/// 5/// 6090 70120 800316 9002 0//////

+ 1/// 2/// 3105 40090 500300 6040 7023232 8-605 9/// 0095 10080

+ 200297 3002 4////// 5/// 6/// 7085 80090 900294 0004 1//////

+ 2-605 3/// 4/// 5//// 600287 7002 8////// 9/// 0/// 1105 20080

+ 300263 4002 5////// 6/// 7/// 8070 90080 000254 1002 2//////

+ 3/// 4/// 5075 60100 700239 8002 9////// 0/// 1/// 2040 30090

+ 400222 5002 6////// 7/// 8/// 9090 00080 100209 2006 3//////

+ 4-523 5/// 6080 70090 800200 9040 0025762 1/// 2/// 3/// 4////

+ 50001 601420 7010 80070 90220++

+7777

diff --git a/data/tigge.grib2 b/data/tigge.grib2
new file mode 100755
index 0000000..bdaa618
Binary files /dev/null and b/data/tigge.grib2 differ
diff --git a/data/wmo_aws.bufr b/data/wmo_aws.bufr
new file mode 100755
index 0000000..18e1f6b
Binary files /dev/null and b/data/wmo_aws.bufr differ
diff --git a/data/wmo_aws_3.bufr b/data/wmo_aws_3.bufr
new file mode 100755
index 0000000..337bc4d
Binary files /dev/null and b/data/wmo_aws_3.bufr differ
diff --git a/data/wmo_buoy.bufr b/data/wmo_buoy.bufr
new file mode 100755
index 0000000..fc97f22
Binary files /dev/null and b/data/wmo_buoy.bufr differ
diff --git a/data/wmo_climat_synop.bufr b/data/wmo_climat_synop.bufr
new file mode 100755
index 0000000..342a740
Binary files /dev/null and b/data/wmo_climat_synop.bufr differ
diff --git a/data/wmo_climat_synop_2.bufr b/data/wmo_climat_synop_2.bufr
new file mode 100755
index 0000000..71dd4bb
Binary files /dev/null and b/data/wmo_climat_synop_2.bufr differ
diff --git a/data/wmo_sarep.bufr b/data/wmo_sarep.bufr
new file mode 100755
index 0000000..d292021
Binary files /dev/null and b/data/wmo_sarep.bufr differ
diff --git a/data/wmo_synop.bufr b/data/wmo_synop.bufr
new file mode 100755
index 0000000..89b7fce
Binary files /dev/null and b/data/wmo_synop.bufr differ
diff --git a/data/wmo_synop_1.bufr b/data/wmo_synop_1.bufr
new file mode 100755
index 0000000..8e0a7ff
Binary files /dev/null and b/data/wmo_synop_1.bufr differ
diff --git a/data/wmo_temp.bufr b/data/wmo_temp.bufr
new file mode 100755
index 0000000..dc5b02d
Binary files /dev/null and b/data/wmo_temp.bufr differ
diff --git a/data/wmo_temp_2.bufr b/data/wmo_temp_2.bufr
new file mode 100755
index 0000000..5939467
Binary files /dev/null and b/data/wmo_temp_2.bufr differ
diff --git a/examples/bufr/Makefile b/examples/bufr/Makefile
new file mode 100755
index 0000000..50fd241
--- /dev/null
+++ b/examples/bufr/Makefile
@@ -0,0 +1,46 @@
+#
+#                                 Makefile for example programs
+#
+PLACE = ../../
+LIB = emos
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+include ../../config/fortran2c$(CNAME)
+#
+TARGDIR  = ./
+#
+#
+TARGETS  = all clean
+EXECS    = decode_bufr decode_bufr_image bufr_decode tdexp create_bufr bufr2crex crex2bufr
+#
+#
+all :$(EXECS)
+
+decode_bufr: decode_bufr.o 
+	$(FC) $(FFLAGS) -o $@ decode_bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+decode_bufr_image: decode_bufr_image.o
+	$(FC) $(FFLAGS) -o $@ decode_bufr_image.o -L$(PLACE) -l$(LIB)$(R64)
+
+bufr_decode: bufr_decode.o 
+	$(CC) $(CFLAGS) -o $@ bufr_decode.o -L$(PLACE) -l$(LIB)$(R64) $(FORTRAN2C)
+
+bufr2crex   : bufr2crex.o
+	$(FC) $(FFLAGS) -o $@ bufr2crex.o -L$(PLACE) -l$(LIB)$(R64)
+
+crex2bufr   : crex2bufr.o
+	$(FC) $(FFLAGS) -o $@ crex2bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+create_bufr: create_bufr.o
+	$(FC) $(FFLAGS) -o $@ create_bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+tdexp: tdexp.o
+	$(FC) $(FFLAGS) -o $@ tdexp.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean   :
+	@for name in $(EXECS); do\
+	(rm -f $$name *.o ); \
+	done 
diff --git a/examples/bufr/Makefile.in b/examples/bufr/Makefile.in
new file mode 100755
index 0000000..d943a56
--- /dev/null
+++ b/examples/bufr/Makefile.in
@@ -0,0 +1,50 @@
+#
+#                                 Makefile for example programs
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+#
+PLACE = ../../
+LIB = emos
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+include ../../config/fortran2c$(CNAME)
+#
+TARGDIR  = ./
+#
+#
+TARGETS  = all clean
+EXECS    = decode_bufr decode_bufr_image bufr_decode create_bufr tdexp bufr2crex crex2bufr
+#
+#
+all :$(EXECS)
+
+decode_bufr: decode_bufr.o 
+	$(FC) $(FFLAGS) -o $@ decode_bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+decode_bufr_image: decode_bufr_image.o
+	$(FC) $(FFLAGS) -o $@ decode_bufr_image.o -L$(PLACE) -l$(LIB)$(R64)
+
+bufr_decode: bufr_decode.o 
+	$(CC) $(CFLAGS) -o $@ bufr_decode.o -L$(PLACE) -l$(LIB)$(R64) $(FORTRAN2C)
+
+bufr2crex   : bufr2crex.o
+	$(FC) $(FFLAGS) -o $@ bufr2crex.o -L$(PLACE) -l$(LIB)$(R64)
+
+crex2bufr   : crex2bufr.o
+	$(FC) $(FFLAGS) -o $@ crex2bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+create_bufr: create_bufr.o
+	$(FC) $(FFLAGS) -o $@ create_bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+tdexp: tdexp.o
+	$(FC) $(FFLAGS) -o $@ tdexp.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean   :
+	@for name in $(EXECS); do\
+	(rm -f $$name *.o ); \
+	done 
diff --git a/examples/bufr/README b/examples/bufr/README
new file mode 100755
index 0000000..c5847b7
--- /dev/null
+++ b/examples/bufr/README
@@ -0,0 +1,74 @@
+    This directory contains example for the BUFR decoding and programs
+for conversion between BUFR and CREX
+
+Note:
+Conversion programs can be compiled only if you have installed both
+crex and bufer libraries!!!
+
+Compilation of C program for decoding bufr_decode.c is optional
+and if you want to compile it please type:
+
+make bufr_decode
+
+This is available only on Linux platform for Gnu compilers g77 and gcc,
+for pgf77 and pgfcc.
+
+    Relevant data in BUFR format are in data directory.
+
+decode_bufr.f :
+
+
+make
+ 
+will compile examples
+
+If you want to run example programs before instal library and Bufr tables
+just run small script:
+
+./test.sh
+
+that will set temporary environment variable: BUFR_TABLES
+and run: 
+
+./decode_bufr -i  data/input_bufr 
+
+Answer the prompts as in the Bufr User's Manual example
+
+
+y
+n
+n
+1
+press return 
+press return 
+press return 
+press return 
+y
+1
+1
+
+
+where:
+     input_bufr - file name containing BUFR data
+
+	The result will be description of data and its values.
+    bufr_example can be run  for different sort of observation data:
+synop.buf, amdar.bufr, atovs.bufr, satob.bufr, synop_ship.bufr, temp.bufr
+
+bufr2crex.f :
+
+    It very useful if there is need for automatic conversion between BUFR and
+CREX data formats, when some centres can not handle meteorogical binary data
+
+./bufr2crex -i input_bufr -o out_crex
+
+where:
+     out_crex - file name containing CREX data
+
+
+
+crex2bufr.f :
+
+    CREX to BUFR conversion program.
+
+./crex2bufr -i input_crex -o out_bufr 
diff --git a/examples/bufr/bufr2crex.F b/examples/bufr/bufr2crex.F
new file mode 100755
index 0000000..bf427b2
--- /dev/null
+++ b/examples/bufr/bufr2crex.F
@@ -0,0 +1,605 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      PROGRAM BUFR2CREX
+C
+C**** *BUFRCREX*
+C
+C
+C     PURPOSE.
+C     --------
+C         Bufr to CREX conversion.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=    4,
+     1       JSEC4=   2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#else 
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#endif
+     3          JWORK=4096000,JKEY=46,JBYTE=80000)
+C
+      PARAMETER (KELEM=20000)
+      PARAMETER (KVALS=360000)
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY),KREQ(2)
+C
+      REAL*8 VALUES(KVALS)
+      REAL*8 RQV(KELEM)
+C
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM),KRQ(KELEM)
+      DIMENSION KDATA(2000)
+C
+      CHARACTER*256    COUT,CARG(4),CFIN
+      CHARACTER*64     CNAMES(KELEM)
+      CHARACTER*24     CUNITS(KELEM)
+      CHARACTER*80     CVALS(KVALS)
+      CHARACTER*80     YENC
+      CHARACTER*160000 YOUT
+      CHARACTER*3      CRCRLF
+C
+C     Common block containing bufr tables
+C
+      COMMON /BCOMTAB/ NTABBTR(JTAB),NTABBS (JTAB),NTABBRV(JTAB),
+     1                 NTABBDW(JTAB),NTABDTR(JTAB),NTABDST(JTAB),
+     2                 NTABDL (JTAB),NTABDSQ(JTAB*20),NTABP(64,255)
+C
+C             NTABBTR    - table B,  table reference              array
+C             NTABBS     - table B,  scale                        array
+C             NTABBRF    - table B,  reference value              array
+C             NTABBDW    - table B,  data width                   array
+C             NTABDTR    - table D,  table reference              array
+C             NTABDST    - table D,  starting pointers            array
+C             NTABDL     - table D,  lengths                      array
+C             NTABDSQ    - table D,  list of sequence descriptors array
+C
+      COMMON /BCOMWT/ NDWINC,NSCAM,NAFDW,NWT ,ODREPF,
+     1                N221,MREL,NFCM,NFUCM,MBMP,OMARKER,M0,
+     2                MBMPL,NSTACK(JELEM),NWTEN(JELEM),
+     3                NWTR (JELEM),NWTS (JELEM),NWTRV (JELEM),
+     4                NWTDW(JELEM)
+C
+C             NDWINC   -  data width increment
+C             NSCAM    -  scale multiplier
+C             NAFDW    -  augmented field data width
+C             NWT      -  pointer to working table
+C             NSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             N221     -  data not present for n221 elements
+C             MREL     -  pointer to the last data element
+C             NFCM     -  first compressed message
+C             MBMP     -  pointer to the begining of bit map
+C             NWTR     -  working table reference
+C             NWTS     -  working scale
+C             NWTRV    -  working reference value
+C             NWTDW    -  working data width
+C
+      COMMON /BCOMWTC/ CWTEN(JELEM),CWTU (JELEM)
+C
+C             CWTEN    -  working table element naame
+C             CWTU     -  working table units
+C
+c
+      PARAMETER(JP=3000)
+C
+      CHARACTER*120 YENTRY
+      CHARACTER*15  YFNAME
+      CHARACTER*15  FMT
+      CHARACTER*6   CREXKTDLST(KELEM),CREXKTDLST0
+C
+      INTEGER IVALUE(KELEM)
+C
+C     Logical switch to use check digit indicator
+C
+      CHARACTER*4 YUSE_E
+C
+      INTEGER IVAL,IIVAL
+c
+      REAL*8 EPS
+      REAL*8 RVIND
+      REAL*8 VAL
+C
+      EQUIVALENCE (YOUT,KBUFR(1))
+C
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C 
+      NBYTPW=JBPW/8
+      RVIND=1.7E38
+      NVIND=2147483647
+      IOBS=0
+      EPS=1.0E-8
+      NPACK=0
+      N=0
+      OO=.FALSE.
+C
+      CRCRLF=CHAR(13)//CHAR(13)//CHAR(10)
+C
+C     Get input and output file name.
+C
+      NARG=IARGC()
+c
+      IF(NARG.LT.4) THEN
+         print*,'Usage -- bufr2crex -i infile -o outfile' 
+         STOP
+      END IF
+c
+      COUT=' '
+      CFIN=' '
+c
+      DO 101 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+c
+      DO 102 J=1,NARG,2
+        IF(CARG(J).EQ.'-i') THEN
+           CFIN=CARG(J+1)
+        ELSEIF(CARG(J).EQ.'-o') THEN
+           COUT=CARG(J+1)
+        ELSE
+            print*,'Usage -- bufr2crex -i infile -o outfile'
+            STOP
+        END IF
+ 102  CONTINUE
+C
+      II=INDEX(CFIN,' ')
+      II=II-1
+      JJ=INDEX(COUT,' ')
+      JJ=JJ-1
+C
+      KRQL=0
+      NR=0
+      KREQ(1)=0
+      KREQ(2)=0
+C
+C
+C*          1.2 OPEN FILE CONTAINING BUFR DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CFIN(1:ii),'r',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+      CALL PBOPEN(IUNIT1,cout(1:jj),'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on bufr.dat'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+      KREQ(1)=1
+      KREQ(2)=0
+C
+      OSEC3=.FALSE.
+      OPRT=.FALSE.
+      OENC=.TRUE.
+      ICODE=0
+      OCOMP=.FALSE.
+C
+C*          2.1 SET REQUEST FOR PARTIAL EXPANSION.
+C               ----------------------------------
+ 210  CONTINUE
+C
+      KERR=0
+      CALL BUSRQ(KREQ,KRQL,KRQ,RQV,KERR)
+C
+C     -----------------------------------------------------------------
+C*          3.  READ BUFR MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      KBUFL=0
+C
+      IRET=0
+      CALL PBBUFR(IUNIT,KBUFF,JBYTE,KBUFL,IRET) 
+      IF(IRET.EQ.-1) THEN
+c         IF(N.NE.0) GO TO 600
+         print*,'Number of subsets     ',iobs
+         print*,'Number of messages    ',n
+         STOP 'EOF'
+      END IF
+      IF(IRET.EQ.-2) STOP 'File handling problem' 
+      IF(IRET.EQ.-3) STOP 'Array too small for product'
+C
+      N=N+1
+      KBUFL=KBUFL/nbytpw+1
+      IF(N.LT.NR) GO TO 300
+      print*,'----------------------',n
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND BUFR MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      CALL BUS012(KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KERR)
+      IF(KERR.NE.0) THEN
+         PRINT*,'Error in BUS012: ',KERR
+         PRINT*,' BUFR MESSAGE NUMBER ',N,' CORRUPTED.'
+         KERR=0
+         GO TO 300
+      END IF
+C
+      KEL=KELEM
+      IF(KSUP(6).GT.1) THEN
+         KEL=KVALS/KSUP(6)
+         IF(KEL.GT.KELEM) KEL=KELEM
+      END IF
+C
+      CALL BUFREX(KBUFL,KBUFF,KSUP,KSEC0 ,KSEC1,KSEC2 ,KSEC3 ,KSEC4,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) THEN
+         IF(IERR.EQ.45) GO TO 300
+         IF(IERR.EQ.2) THEN
+            IERR=0
+            GO TO 300
+         END IF
+         CALL EXIT(2)
+      END IF
+c
+      IOBS=IOBS+KSEC3(3)
+c
+      NPACK=NPACK+1 
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+C*          4.1 PRINT CONTENT OF EXPANDED DATA.
+C               -------------------------------
+ 410  CONTINUE
+C
+      IF(.NOT.OPRT) GO TO 500
+      IF(.NOT.OSEC3) GO TO 450
+C
+C*          4.2 PRINT SECTION ZERO OF BUFR MESSAGE.
+C               -----------------------------------
+ 420  CONTINUE
+C
+
+      CALL BUPRS0(KSEC0)
+C
+C*          4.3 PRINT SECTION ONE OF BUFR MESSAGE.
+C               -----------------------------------
+ 430  CONTINUE
+C
+      CALL BUPRS1(KSEC1)
+C
+C
+C*          4.4 PRINT SECTION TWO OF BUFR MESSAGE.
+C               -----------------------------------
+ 440  CONTINUE
+c
+C              AT ECMWF SECTION 2 CONTAINS RDB KEY.
+C              SO UNPACK KEY
+C
+      CALL BUUKEY(KSEC1,KSEC2,KEY,KSUP,KERR)
+C
+C              PRINT KEY
+C
+      CALL BUPRS2(KSUP ,KEY)
+C
+C*          4.5 PRINT SECTION 3 OF BUFR MESSAGE.
+C               -----------------------------------
+ 450  CONTINUE
+C
+C               FIRST GET DATA DESCRIPTORS
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+C               PRINT  CONTENT
+C
+      IF(OSEC3) THEN
+         CALL BUPRS3(KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,KEL,CNAMES)
+      END IF
+c
+C
+C*         4.6 PRINT SECTION 4 (DATA).
+C              -----------------------
+ 460  CONTINUE
+C
+C          IN THE CASE OF MANY SUBSETS DEFINE RANGE OF SUBSETS
+C
+      IF(.NOT.OO) THEN
+      WRITE(*,'(a,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IST
+      WRITE(*,'(a,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IEND
+      OO=.FALSE.
+      END IF
+C
+C              PRINT DATA
+C
+      ICODE=0
+      CALL BUPRT(ICODE,IST,IEND,KEL,CNAMES,CUNITS,CVALS,
+     1           KVALS,VALUES,KSUP,KSEC1,IERR)
+C
+C
+C     -----------------------------------------------------------------
+C*          5. COLLECT DATA FOR REPACKING.
+C              ---------------------------
+ 500  CONTINUE
+C      
+C               FIRST GET DATA DESCRIPTORS
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+C     -----------------------------------------------------------------
+C*          6. PACK CREX MESSAGE.
+C              ------------------
+ 600  CONTINUE
+C
+C     Modify BUFR operators
+C
+      J=0
+      DO 602 I=1,KTDLEN
+      IF(KTDLST(I).EQ.222000) GO TO 603
+      IF(KTDLST(I).EQ.201000) GO TO 602 
+      IF(KTDLST(I).EQ.202000) GO TO 602
+      IF(KTDLST(I).EQ.204000) GO TO 602
+      IF(KTDLST(I).EQ.031000) GO TO 602
+      IF(KTDLST(I).EQ.031001) GO TO 602
+      IF(KTDLST(I).EQ.031002) GO TO 602
+C
+      CREXKTDLST0=' '
+      WRITE(CREXKTDLST0,'(I6.6)',IOSTAT=IOS) KTDLST(I)
+      IF(IOS.NE.0) THEN
+         print*,'Internal write error.'
+         CALL EXIT(2)
+      END IF
+      J=J+1
+      CREXKTDLST(J)(1:6)=CREXKTDLST0
+C
+      IF(CREXKTDLST(J)(1:1).EQ.'3') THEN
+         CREXKTDLST(J)(1:1)='D'
+      ELSEIF(CREXKTDLST(J)(1:1).EQ.'0') THEN
+         CREXKTDLST(J)(1:1)='B'
+      ELSEIF(CREXKTDLST(J)(1:1).EQ.'1') THEN
+         CREXKTDLST(J)(1:1)='R'
+c        scan for any 201000,202000 or 201y,202y followed by 206y
+         READ(CREXKTDLST(J)(2:3),'(I2.2)',IOSTAT=IOS) IELEMENTS
+         IF(IOS.NE.0) THEN
+            print*,'Internal read error.'
+            CALL EXIT(2)
+         END IF
+         IEL=IELEMENTS
+         DO IN=I,I+IELEMENTS-1
+         IF(KTDLST(IN).EQ.201000) IEL=IEL-1
+         IF(KTDLST(IN).EQ.202000) IEL=IEL-1
+         IF(KTDLST(IN).GE.201001.AND.KTDLST(IN).LE.201999.AND.
+     1      KTDLST(IN+1)/1000.EQ.206) IEL=IEL-1
+         IF(KTDLST(IN).GE.202001.AND.KTDLST(IN).LE.202999.AND.         
+     1      KTDLST(IN+1)/1000.EQ.206) IEL=IEL-1
+         END DO
+         WRITE(CREXKTDLST(J)(2:3),'(I2.2)',IOSTAT=IOS) IEl
+         IF(IOS.NE.0) THEN
+            print*,'Internal write error.'
+            CALL EXIT(2)
+         END IF
+      ELSEIF(CREXKTDLST(J)(1:3).EQ.'201') THEN
+         IF(KTDLST(I+1)/1000.EQ.206) THEN
+            J=J-1
+            GO TO 602
+         END IF
+         READ(CREXKTDLST(J)(4:6),'(I3.3)',IOSTAT=IOS) IY
+         IF(IOS.NE.0) THEN
+            print*,'Internal read error.'
+            CALL EXIT(2)
+         END IF
+         IBITS=IY-128
+         ICLASS=KTDLST(I+1)/1000
+         IYYY  =KTDLST(I+1)-ICLASS*1000+1
+         ICLASS=ICLASS+1
+         III=NTABP(ICLASS,IYYY)
+         IDW=NTABBDW(III)+IBITS
+         IRES=2.**IDW-1
+         JZ=0
+         DO WHILE(IRES.GT.0)
+         JZ=JZ+1
+         IRES=IRES/10
+         END DO
+         CREXKTDLST(J)(1:3)='C01'
+         WRITE(CREXKTDLST(J)(4:6),'(I3.3)',IOSTAT=IOS) JZ
+         IF(IOS.NE.0) THEN
+            print*,'Internal write error.'
+            CALL EXIT(2)
+         END IF
+      ELSEIF(CREXKTDLST(J)(1:3).EQ.'202') THEN
+         GO TO 602
+      ELSEIF(CREXKTDLST(J)(1:3).EQ.'205') THEN
+          CREXKTDLST(J)(1:3)='C05'
+      ELSE
+         print*,'Wrong data descriptor ',crexktdlst(j)
+         print*,'Data containing above descriptor can',
+     1          ' not be converted'
+         go to 300
+      END IF
+ 602  CONTINUE
+c
+ 603  CONTINUE
+C
+      ICREXLEN=J
+c
+C     Find delayed replications
+c
+      KDLEN=0
+C
+      IST=1
+      IEND=1
+      OMULTI=.FALSE.
+      IF(IAND(KSEC3(4),64).NE.0.AND.KSEC3(3).GT.1) THEN
+         IEND=KSEC3(3)
+         OMULTI=.TRUE.
+      END IF
+C
+      DO ISUBSET=IST, IEND
+
+      JJ=(ISUBSET-1)*KEL
+C
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+C
+      DO I=1,KTDEXL
+C
+        II=I+JJ
+C
+        IF(KTDEXP(I).EQ.031001.OR.
+     1     KTDEXP(I).EQ.031000.OR.
+     2     KTDEXP(I).EQ.031002) THEN
+           KDLEN=KDLEN+1
+           KDATA(KDLEN)=NINT(VALUES(II))
+        END IF
+      END DO
+C
+C*   Make unit conversion from K to Celsius
+C
+      DO I=1,KTDEXL
+        IF(CUNITS(I)(1:2).EQ.'K '.AND.
+     1     KTDEXP(I)/1000.EQ.12) THEN
+           IF(KTDEXP(I).NE.012064.AND.
+     1        KTDEXP(I).NE.012065.AND.
+     2        KTDEXP(I).NE.012070.AND.
+     2        KTDEXP(I).NE.012071.AND.
+     4        KTDEXP(I).NE.012164.AND.
+     5        KTDEXP(I).NE.012151.AND.
+     6        KTDEXP(I).NE.012051.AND.
+     7        KTDEXP(I).NE.022050.AND.
+     8        KTDEXP(I).NE.012171) THEN
+              IF(OMULTI) THEN
+              IJ=I+JJ
+              IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps) 
+     1           VALUES(IJ)=VALUES(IJ)-273.15 
+              ELSE
+              DO J=1,KSEC3(3)
+              IJ=I+(J-1)*KEL
+              IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps)
+     1           VALUES(IJ)=VALUES(IJ)-273.15
+              END DO
+              END IF
+           END IF
+        END IF
+        IF(CUNITS(I)(1:2).EQ.'PA'.AND.
+     1     KTDEXP(I).EQ.015003) THEN
+           IF(OMULTI) THEN
+           IJ=I+JJ
+           IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps)
+     1        VALUES(IJ)=VALUES(IJ)*10000.
+           ELSE
+           DO J=1,KSEC3(3)
+           IJ=I+(J-1)*KEL
+           IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps) 
+     1        VALUES(IJ)=VALUES(IJ)*10000.
+           END DO
+           END IF
+        END IF
+      END DO
+C
+      END DO
+
+C
+C*          6.2 ENCODE DATA INTO CREX MESSAGE.
+C               ------------------------------
+ 620  CONTINUE
+C
+      IF(KSEC1(2).EQ.4) THEN         ! Bufr edition number
+         KSEC1(2)=2                  ! Crex edition number
+         KSEC1(5)=KSEC3(3)           ! Number of subsets
+         KSEC1( 7)=KSEC1(17)         ! International sub category
+         KSEC1(17)=KSEC1(15)            ! Bufr master table version number
+         KSEC1(15)=3                    ! Crex version number used
+         KSEC1(18)=KSEC1(8)             ! Bufr version number of local tables
+      ELSE
+         KSEC1(17)=KSEC1(15)            ! Bufr master table version number
+         KSEC1(2)=1                  ! Crex edition number
+         KSEC1(15)=3                    ! Crex version number used
+         KSEC1(18)=KSEC1(8)             ! Bufr version number of local tables
+      END IF
+c
+      CALL CREXEN(KSEC0,KSEC1,KSEC3,
+     1            ICREXLEN,CREXKTDLST,KDLEN,KDATA,KEL,KVALS,
+     2            VALUES,CVALS,KBUFL,KBUFR,KERR)
+      IF(KERR.GT.0) THEN
+         print*,'CREXEN error:',KERR
+         go to 300
+      END IF
+C
+C           6.3 WRITE CREX MESSAGE INTO FILE.
+C               -----------------------------
+ 630  CONTINUE
+C
+      ILEN=KBUFL
+C     
+      IERR=0
+      CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+      IF(IERR.LT.0) THEN
+         print*,'Error writing into target file.'
+         CALL EXIT(2)
+      END IF
+C
+      GO TO 300
+C
+      END
diff --git a/examples/bufr/bufr_decode.c b/examples/bufr/bufr_decode.c
new file mode 100755
index 0000000..ca6a221
--- /dev/null
+++ b/examples/bufr/bufr_decode.c
@@ -0,0 +1,182 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+int main(int argc, char *argv[])
+/*******************************************************************
+*                                                                 
+* Program : Bufr_decode
+*                                                              
+*                                                             
+* Author: Milan Dragosavac    ECMWF    July 1996
+*  
+* Purpose: Decode bufr message
+* 
+*
+*
+* Usage:
+* 
+*
+*
+* References:
+*  
+*
+*
+*
+* File formats:
+* 
+*
+*
+* Restrictions:
+*  
+* 
+* Error handling:
+* 
+*
+*
+* Notes:
+* 
+*
+*
+*******************************************************************/
+{
+#define KVALS 4096000
+#define KELEM 160000
+
+  FILE *fp; 
+  char bufr_message[512000];
+  char filename[256];
+  long int length=512000;
+  long int status = 0;
+  int  Nbpw;
+
+  unsigned long int *kbuff;
+  long int ksup[9];
+  long int ksec0[3];
+  long int ksec1[40];
+  long int ksec2[4096];
+  long int ksec3[4]; 
+  long int ksec4[2];
+  long int key[46];
+  long int kerr;
+
+
+ 
+  int i;
+  long kelem = KELEM,kvals = KVALS;
+
+  static char cnames[KELEM][64],cunits[KELEM][24];
+  
+
+  char cvals[KVALS][80];
+
+  double values[KVALS],vals[KVALS];
+  long icode = 0;
+  long ktdlst[KELEM],ktdexp[KELEM],ktdlen,ktdexl;
+
+ if(sizeof(long) == 4) Nbpw=32;
+  else if(sizeof(long) == 8) Nbpw=64;
+  else{
+    printf("Abort.....\n");
+  }
+
+  printf("%d\n",Nbpw);
+
+/*     Get input and output file name.  */
+/*     -------------------------------  */  
+
+  if(argc != 3) {
+    printf("Usage: bufr_decode -i infile \n");
+    printf("Please try again. \n");
+    exit(1);
+  }
+
+  printf("%c",argc);
+
+  if(!strcmp(argv[1],"-i")) strcpy(filename,argv[2]);
+  else {
+    printf("Usage: bufr_decode -i infile \n");
+    exit(1);
+  }
+
+/*     Open input file       */
+/*     ---------------       */  
+
+  if((fp = fopen(filename,"r")) == NULL) {
+    printf("cannot open file\n");
+    exit(1);
+  }
+  
+/*     Read in bufr messages */
+/*     --------------------- */  
+
+  while(status >= 0){
+      long current_ss;
+     status = readbufr( fp,&bufr_message,&length);
+
+     if(     status == -1 ) printf("End of file.\n");
+     else if(status == -2 ) printf("Error in file handling\n");
+     else if(status == -3 ) printf("Too small input array.\n");
+     else if(status == -4 ) printf("Too small input array.\n");
+     else {
+       printf("It is OK.\n");
+       printf("message read ");
+       printf("%d\n",length);
+       printf("%s\n",&bufr_message[0]);
+     }
+     status=-1;
+
+/*    Expand bufr message calling fortran program */
+       kbuff = (unsigned long *) bufr_message;
+      length /= 4;
+
+      bus012_(&length, kbuff , ksup, ksec0, ksec1, ksec2,  &kerr) ;
+      buprs0_(ksec0);
+      buprs1_(ksec1);
+
+      if (ksup[5] > 1)
+        kelem = kvals/ksup[5];
+      else
+        kelem = KELEM;
+
+      if ( kelem > KELEM ) kelem = KELEM;
+      kerr = 0;
+      bufrex_(&length,(long *)kbuff,ksup,ksec0,ksec1,ksec2,ksec3,ksec4,
+              &kelem,(char **)cnames,(char **)cunits,&kvals,
+              values,(char **)cvals,&kerr);
+      if ( kerr )
+        {
+          kerr = 0;
+        }
+
+      buukey_(ksec1,ksec2,key,ksup,&kerr);
+
+      busel_(&ktdlen,ktdlst,&ktdexl,ktdexp,&kerr);
+      buprs3_(ksec3,&ktdlen,ktdlst,&ktdexl,ktdexp,&kelem,(char **)cnames);
+
+      icode = 0;
+      current_ss = 1;
+      buprt_(&icode,&current_ss,&current_ss,&kelem,(char **)cnames,
+                         (char **)cunits,(char **)cvals,
+                         &kvals,values,ksup,ksec1,&kerr);
+
+      
+  }
+
+  return kerr;
+
+}
+
diff --git a/examples/bufr/create_bufr.F b/examples/bufr/create_bufr.F
new file mode 100755
index 0000000..6524f3b
--- /dev/null
+++ b/examples/bufr/create_bufr.F
@@ -0,0 +1,417 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM BUFR
+C
+C**** *BUFR*
+C
+C
+C     PURPOSE.
+C     --------
+C         An example of using Bufr packing/unpacking software.
+C         It will create synop data in bufr edition 4 
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       05/04/2005.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+C
+      PARAMETER(JSUP =  9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=    4,
+     1          JSEC4=2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT= 200,
+#endif
+     3          JWORK=4096000,JKEY=46)
+
+C
+      PARAMETER (KDLEN=200,KELEM=4000)
+      parameter (KVALS=4000,KVALS1=4000)
+C 
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY)
+      DIMENSION ISUP(JSUP)  ,ISEC0(JSEC0),ISEC1(JSEC1)
+      DIMENSION ISEC2(JSEC2),ISEC3(JSEC3),ISEC4(JSEC4)
+C
+#ifndef R_4
+      REAL*8  VALUES(KVALS),VALUE(KVALS1)
+      REAL*8  RQV(KELEM)
+      REAL*8  RVIND
+#else
+      REAL    VALUES(KVALS),VALUE(KVALS1)
+      REAL    RQV(KELEM)
+      REAL    RVIND
+#endif
+
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM),KRQ(KELEM)
+      DIMENSION ITDLST(KELEM),ITDEXP(KELEM)
+      DIMENSION KDATA(KDLEN),IDATA(KDLEN)
+C
+      CHARACTER*8  CF
+      CHARACTER*64 CNAMES(KELEM),CNAME(KELEM)
+      CHARACTER*24 CUNITS(KELEM),CUNIT(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 CVAL (KVALS1)
+      CHARACTER*80 YENC
+C
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C
+      RVIND=1.7D38
+C
+ 
+      CALL PBOPEN(IUNIT1,'synop.bufr','W',IRET)
+      IF(IRET.EQ.-1) STOP 'OPEN FAILED ON synop.dat'
+      IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+      IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+C
+
+C
+C     INITIALIZE DELAYED REPLICATION FACTORS OR REFERENCE VALUES ETD.
+C
+      DO 101 I=1,KDLEN
+      KDATA(I)=1
+      VALUES(I)=RVIND
+ 101  CONTINUE
+C
+c
+      KDLENG=3
+C
+C
+C     SET DATA DECSRIPTORS
+C
+
+ 
+      ktdlst(    1)=  307080
+ 
+      ktdlen=1
+
+      values(  1)=11.        !001001  WMO BLOCK NUMBER
+      values(  2)=423.       !001002  WMO STATION NUMBER
+      values(  3)=1020.      !001015  STATION OR SITE NAME
+      values(  4)=1.         !002001  TYPE OF STATION
+      values(  5)=2007.      !004001  YEAR
+      values(  6)=11.        !004002  MONTH
+      values(  7)=21.        !004003  DAY
+      values(  8)=12.        !004004  HOUR
+      values(  9)=0.         !004005  MINUTE
+      values( 10)=49.66944   !005001  LATITUDE (HIGH ACCURACY)
+      values( 11)=12.67778   !006001  LONGITUDE (HIGH ACCURACY)
+      values( 12)=742.2      !007030  HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL (SEE NOTE 3)
+      values( 13)=747.       !007031  HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL (SEE NOTE 4)
+      values( 14)=92520.     !010004  PRESSURE
+      values( 15)=rvind      !010051  PRESSURE REDUCED TO MEAN SEA LEVEL
+      values( 16)=-60.       !010061  3-HOUR PRESSURE CHANGE
+      values( 17)=5.         !010063  CHARACTERISTIC OF PRESSURE TENDENCY
+      values( 18)=rvind      !010062  24-HOUR PRESSURE CHANGE
+      values( 19)=92500.     !007004  PRESSURE
+      values( 20)=749.       !010009  GEOPOTENTIAL HEIGHT
+      values( 21)=1.95       !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 22)=270.85     !012101  TEMPERATURE/DRY-BULB TEMPERATURE
+      values( 23)=270.45     !012103  DEW-POINT TEMPERATURE
+      values( 24)=97.        !013003  RELATIVE HUMIDITY
+      values( 25)=4.8        !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 26)=200.       !020001  HORIZONTAL VISIBILITY
+      values( 27)=1.12       !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 28)=rvind      !013023  TOTAL PRECIPITATION PAST 24 HOURS
+      values( 29)=rvind      !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 30)=100.       !020010  CLOUD COVER (TOTAL)
+      values( 31)=5.         !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 32)=9.         !020011  CLOUD AMOUNT
+      values( 33)=0.         !020013  HEIGHT OF BASE OF CLOUD
+      values( 34)=62.        !020012  CLOUD TYPE
+      values( 35)=61.        !020012  CLOUD TYPE
+      values( 36)=60.        !020012  CLOUD TYPE
+      values( 37)=1.         !031001  DELAYED DESCRIPTOR REPLICATION FACTOR
+      values( 38)=5.         !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 39)=9.         !020011  CLOUD AMOUNT
+      values( 40)=59.        !020012  CLOUD TYPE
+      values( 41)=0.         !020013  HEIGHT OF BASE OF CLOUD
+      values( 42)=1.         !031001  DELAYED DESCRIPTOR REPLICATION FACTOR
+      values( 43)=11.        !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 44)=rvind      !020011  CLOUD AMOUNT
+      values( 45)=rvind      !020012  CLOUD TYPE
+      values( 46)=rvind      !020014  HEIGHT OF TOP OF CLOUD
+      values( 47)=rvind      !020017  CLOUD TOP DESCRIPTION
+      values( 48)=7.         !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 49)=rvind      !020054  TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING
+      values( 50)=8.         !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 51)=rvind      !020054  TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING
+      values( 52)=9.         !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 53)=rvind      !020054  TRUE DIRECTION FROM WHICH CLOUDS ARE MOVING
+      values( 54)=rvind      !008002  VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)
+      values( 55)=rvind      !005021  BEARING OR AZIMUTH
+      values( 56)=rvind      !007021  ELEVATION (SEE NOTE 2)
+      values( 57)=rvind      !020012  CLOUD TYPE
+      values( 58)=rvind      !005021  BEARING OR AZIMUTH
+      values( 59)=rvind      !007021  ELEVATION (SEE NOTE 2)
+      values( 60)=rvind      !020062  STATE OF THE GROUND (WITH OR WITHOUT SNOW)
+      values( 61)=rvind      !013013  TOTAL SNOW DEPTH
+      values( 62)=rvind      !012113  GROUND MINIMUM TEMPERATURE, PAST 12 HOURS
+      values( 63)=49.        !020003  PRESENT WEATHER (SEE NOTE 1)
+      values( 64)=-6.        !004024  TIME PERIOD OR DISPLACEMENT
+      values( 65)=4.         !020004  PAST WEATHER (1) (SEE NOTE 2)
+      values( 66)=4.         !020005  PAST WEATHER (2) (SEE NOTE 2)
+      values( 67)=-1.        !004024  TIME PERIOD OR DISPLACEMENT
+      values( 68)=rvind      !014031  TOTAL SUNSHINE
+      values( 69)=-24.       !004024  TIME PERIOD OR DISPLACEMENT
+      values( 70)=rvind      !014031  TOTAL SUNSHINE
+      values( 71)=1.12       !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 72)=-6.        !004024  TIME PERIOD OR DISPLACEMENT
+      values( 73)=0.         !013011  TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT
+      values( 74)=-1.        !004024  TIME PERIOD OR DISPLACEMENT
+      values( 75)=0.         !013011  TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT
+      values( 76)=1.95       !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 77)=-12.       !004024  TIME PERIOD OR DISPLACEMENT
+      values( 78)=0.         !004024  TIME PERIOD OR DISPLACEMENT
+      values( 79)=rvind      !012111  MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED
+      values( 80)=-12.       !004024  TIME PERIOD OR DISPLACEMENT
+      values( 81)=0.         !004024  TIME PERIOD OR DISPLACEMENT
+      values( 82)=rvind      !012112  MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED
+      values( 83)=10.25      !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 84)=8.         !002002  TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT
+      values( 85)=2.         !008021  TIME SIGNIFICANCE
+      values( 86)=-10.       !004025  TIME PERIOD OR DISPLACEMENT
+      values( 87)=110.       !011001  WIND DIRECTION
+      values( 88)=5.         !011002  WIND SPEED
+      values( 89)=rvind      !008021  TIME SIGNIFICANCE
+      values( 90)=-10.       !004025  TIME PERIOD OR DISPLACEMENT
+      values( 91)=rvind      !011043  MAXIMUM WIND GUST DIRECTION
+      values( 92)=rvind      !011041  MAXIMUM WIND GUST SPEED
+      values( 93)=-360.      !004025  TIME PERIOD OR DISPLACEMENT
+      values( 94)=rvind      !011043  MAXIMUM WIND GUST DIRECTION
+      values( 95)=12.        !011041  MAXIMUM WIND GUST SPEED
+      values( 96)=rvind      !007032  HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+      values( 97)=-24.       !004024  TIME PERIOD OR DISPLACEMENT
+      values( 98)=rvind      !002004  TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF C
+      values( 99)=rvind      !013033  EVAPORATION/EVAPOTRANSPIRATION
+      values(100)=-1.        !004024  TIME PERIOD OR DISPLACEMENT
+      values(101)=rvind      !014002  LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED
+      values(102)=rvind      !014004  SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED
+      values(103)=rvind      !014016  NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED
+      values(104)=rvind      !014028  GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S
+      values(105)=rvind      !014029  DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD
+      values(106)=rvind      !014030  DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S
+      values(107)=-24.       !004024  TIME PERIOD OR DISPLACEMENT
+      values(108)=rvind      !014002  LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED
+      values(109)=rvind      !014004  SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED
+      values(110)=rvind      !014016  NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED
+      values(111)=rvind      !014028  GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S
+      values(112)=rvind      !014029  DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD
+      values(113)=rvind      !014030  DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD S
+      values(114)=rvind      !004024  TIME PERIOD OR DISPLACEMENT
+      values(115)=rvind      !004024  TIME PERIOD OR DISPLACEMENT
+      values(116)=rvind      !012049  TEMPERATURE CHANGE OVER SPECIFIED PERIOD
+
+ 
+C     SET CCITTIA5 STATION OR SITE NAME
+
+      cvals(1)='PRIMDA'
+C
+C
+C     SECTION 0 CONTENT
+C
+      KSEC0(1)=0      ! TOTAL LENGTH OF SECTION 0
+      KSEC0(2)=0      ! TOTAL LENGTH OF BUFR MESSAGE
+      KSEC0(3)=4      ! BUFR EDITION NUMBER
+C
+C     SECTION 1 CONTENT
+C
+      KSEC1(1)=22    ! TOTTAL LENGTH OF SECTION 1 (  set to 18 for edition <= 3)
+      KSEC1(2)=4     ! BUFR EDITION NUMBER
+      KSEC1(3)=89    ! ORIGINATING CENTRE
+      KSEC1(4)=1     ! UPDATE SEQUENCE NUMBER
+      KSEC1(5)=0     ! FLAG (PRESENCE OF SECTION 2)
+      KSEC1(6)=0     ! DATA CATEGORY
+      KSEC1(7)=0     ! LOCAL DATA SUB-CATEGORY
+      KSEC1(8)=0     ! VERSION NUMBER OF LOCAL TABLE USED
+      KSEC1(9)=nint(values(5)) 
+      if(KSEC1(2).le.3) then
+        if(ksec1(9).gt.2000) then
+           ksec1(9)=ksec1(9)-2000
+        else
+           ksec1(9)=ksec1(9)-1900
+        end if
+      end if
+      KSEC1(10)=nint(values(6))
+      KSEC1(11)=nint(values(7))   ! DAY
+      KSEC1(12)=nint(values(8))   ! HOUR
+      KSEC1(13)=nint(values(9))   ! MINUTE
+      KSEC1(14)=0    ! BUFR MASTER TABLE( ZERO) FOR METEOROLOGICAL DATA)
+      KSEC1(15)=13   ! VERSION NUMBER OF MASTER TABLE USED
+      KSEC1(16)=255  ! ORIGINATING SUB-CENTRE
+      KSEC1(17)=2    ! INTERNATIONAL SUB-CATEGORY
+      KSEC1(18)=0    ! SECOND
+      
+C
+C     SECTION 2 CONTENT
+C
+      KSEC2(1)=52
+C
+      DO 110 I=2,JSEC2
+      KSEC2(I)=0
+ 110  CONTINUE
+C
+C     SECTION 3 CONTENT
+C
+      KSEC3(1)=0     ! TOTAL LENGTH OF SECTION 3
+      KSEC3(2)=0     ! RESERVED
+      KSEC3(3)=1
+      KSEC3(4)=0     ! 64 FOR COMPRESSION/ 0 MANY SUBSETS
+      if(KSEC3(3).GT.1) KSEC3(4)=64
+C
+      IREP=0
+C
+C
+C*          6. PACK BUFR MESSAGE
+C              -----------------
+ 600  CONTINUE
+C
+C---------------------------------------------------------------
+C              This call is not needed for packing. It just 
+C              prints expanded list corresponding to ktdlst sequence
+C              and delayed replications in kdata array. This four
+C              lines can be deleted or commented out.
+      K=1
+      CALL BUXDES(K,KSEC1,KTDLEN,KTDLST,KDLENG,KDATA,KELEM,
+     1            KTDEXL,KTDEXP,CNAMES,CUNITS,KERR)
+C
+      IF(KERR.NE.0) CALL EXIT(2)
+C---------------------------------------------------------------
+C
+C
+C*          6.2 ENCODE DATA INTO BUFR MESSAGE.
+C               ------------------------------
+ 620  CONTINUE
+C
+      KBUFL=3000
+      KPMISS=1
+      KPRUS=1
+      NOKEY=0
+      CALL BUPRQ(KPMISS,KPRUS,NOKEY)
+C
+      KERR=0
+      CALL BUFREN( KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     1             KTDLEN,KTDLST,KDLENG,KDATA,KELEM,
+     2             KVALS,VALUES,CVALS,KBUFL,KBUFR,KERR)
+C
+
+      IF(KERR.GT.0) THEN
+         CALL EXIT(2)
+      ELSEIF(KERR.lt.0) then
+         print*,'Encoding return_code=',kerr
+      END IF 
+c
+C     ILEN=KBUFL*JBPW/8
+      ILEN=KSEC0(2)
+C
+      IERR=0
+      CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+      IF(IERR.LT.0) THEN
+         PRINT*,'ERROR WRITING INTO TARGET FILE.'
+         CALL EXIT(2)
+      END IF
+
+C
+C     -----------------------------------------------------------------
+C*          7. UNPACK MESSAGE.
+C              -------------
+ 700  CONTINUE
+C
+      DO 702 I=1,KVALS1
+      VALUE(I)=RVIND
+ 702  CONTINUE
+c
+ 701  CONTINUE
+C
+      CALL BUFREX(KBUFL,KBUFR,ISUP,ISEC0 ,ISEC1,ISEC2 ,ISEC3 ,ISEC4,
+     1            KELEM,CNAME,CUNIT,KVALS1,VALUE,CVAL,IERR)
+c
+      IF(IERR.NE.0) CALL EXIT(2)
+C
+      CALL BUPRS0(ISEC0)
+      CALL BUPRS1(ISEC1)
+      CALL BUUKEY(ISEC1,ISEC2,KEY,ISUP,KERR)
+      CALL BUPRS2(ISUP ,KEY)
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      CALL BUPRS3(ISEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,KELEM,CNAME)
+C
+      WRITE(*,'(a,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(I5)')   IST
+      WRITE(*,'(a,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(I6)')   IEND
+C
+      ICODE=0
+      CALL BUPRT(ICODE,IST,IEND,KELEM,CNAME,CUNIT,CVAL,
+     1           KVALS1,VALUE,ISUP,ISEC1,IERR)
+C
+C      
+      IREP=IREP+1
+C   
+      IF(IREP.GT.3) GO TO 900 
+      GO TO 900
+C
+ 810  CONTINUE
+C
+      WRITE(*,'(1H ,A)') 'OPEN ERROR ON INPUT FILE'
+      GO TO 900
+C      
+ 800  CONTINUE
+C
+      IF(IERR.EQ.-1) THEN
+         print*,'Number of records processed ',IREP
+      ELSE
+         print*,' BUFR : error= ',ierr
+      END IF
+C
+ 900  CONTINUE
+C
+      STOP
+      END
diff --git a/examples/bufr/crex2bufr.F b/examples/bufr/crex2bufr.F
new file mode 100755
index 0000000..15c0ad3
--- /dev/null
+++ b/examples/bufr/crex2bufr.F
@@ -0,0 +1,499 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM CREX2BUFR
+C
+C**** *CREX2BUFR*
+C
+C
+C     PURPOSE.
+C     --------
+C         Decode CREX coded data into BUFR format
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =  9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=    4,
+     1       JSEC4=   2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#endif
+     3          JWORK=4096000,JKEY=46,JBYTE=80000)
+C
+      PARAMETER (KELEM=40000)
+      PARAMETER (KVALS=360000)
+C 
+      DIMENSION KBUFF(JBUFL),KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY),KREQ(2)
+C
+      REAL*8 VALUES(KVALS), VALUE(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM),KTDLST1(KELEM)
+      DIMENSION KDATA(2000)
+C
+      CHARACTER*256 CF,COUT,CARG(4)
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 CVAL(KVALS),CV
+      CHARACTER*80 YENC
+      CHARACTER*160000 YBUFF
+c
+      EQUIVALENCE(YBUFF,KBUFF(1))
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+      NBYTPW=JBPW/8
+      RVIND=1.7D38
+      NVIND=2147483647
+      IOBS=0
+      EPS=10.D-8
+      N=0
+      OCOMP=.FALSE.
+      OO=.FALSE.
+      CF=' '
+      COUT=' '
+      KKK=0
+C
+C     GET INPUT AND OUTPUT FILE NAME.
+C
+      NARG=IARGC()
+c
+      IF(NARG.NE.4) THEN
+         print*,'Usage -- crex2bufr -i infile -o outfile' 
+         STOP
+      END IF
+c
+      DO 101 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+c
+      IF(CARG(1).NE.'-i'.AND.CARG(1).NE.'-I'.OR.
+     1   CARG(2).EQ.' ') THEN
+         print*,'Usage -- crex2bufr -i inpfile -o outfile'
+         STOP
+      END IF
+      IF(CARG(3).NE.'-o'.AND.CARG(3).NE.'-O'.OR.
+     1   CARG(4).EQ.' ') THEN
+         print*,'Usage -- crex2bufr -i inpfile -o outfile'
+         STOP
+      END IF
+c
+      CF=CARG(2)
+      II=INDEX(CF,' ')
+      II=II-1
+      COUT=CARG(4)
+      I=INDEX(COUT,' ')
+      I=I-1
+C
+C*          1.2 OPEN FILE CONTAINING CREX DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CF(1:II),'r',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on input file'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+c
+C
+C*          1.2.1 OPEN OUTPUT FILE.
+C               ------------------
+ 121  CONTINUE
+C
+
+      CALL PBOPEN(IUNIT1,COUT(1:I),'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on output file'
+      IF(IRET.EQ.-2) STOP 'Invalid output file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+      NR=1
+      OPRT=.TRUE.
+      OENC=.FALSE.
+C
+      OENC=.TRUE.
+
+ 210  CONTINUE
+C
+C
+C     -----------------------------------------------------------------
+C*          3.  READ CREX MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      IRET=0
+c
+      CALL PBCREX(IUNIT,KBUFF,JBUFL,KBUFL,IRET)
+      IF(IRET.LT.0) THEN
+         if(iret.eq.-1) stop 'End of file '
+         if(iret.eq.-2) stop 'Error in handling the file'
+         if(iret.eq.-3) stop 'Error during read CREX file.'
+      END IF
+c
+      N=N+1
+      print*,'----------------------------------',n
+      IF(N.LT.NR) GO TO 300
+      KEL=KELEM
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND CREX MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      IERR=0
+      CALL CREXEX(KBUFL,YBUFF,KSUP,KSEC0 ,KSEC1,KSEC3 ,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) then
+         print*,'CREX error ', ierr
+         IF(IERR.EQ.20.or.IERR.EQ.14) THEN
+            KEL=KVALS/KSUP(6)
+            GO TO 400
+         ELSE
+            CALL EXIT(2)
+         END IF
+      END IF
+C
+      
+      IOBS=IOBS+KSEC3(3)
+C
+      ISUBSET=1
+      CALL CREXSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1              CNAMES,CUNITS,KERR)
+      IF(KERR.NE.0) then
+         print*,'CREXSEL: error.'
+         CALL EXIT(2)
+      END IF
+C
+C*          4.1 PRINT CONTENT OF EXPANDED DATA.
+C               -------------------------------
+ 410  CONTINUE
+C
+      IF(.NOT.OPRT) GO TO 500
+C
+C*          4.2 PRINT SECTION ZERO OF CREX MESSAGE.
+C               -----------------------------------
+ 420  CONTINUE
+C
+
+      CALL CREXPRS0(KSEC0)
+C
+C*          4.3 PRINT SECTION ONE OF CREX MESSAGE.
+C               -----------------------------------
+ 430  CONTINUE
+C
+      CALL CREXPRS1(KSEC1,KSEC3,KTDLEN,KTDLST,KTDEXL,
+     1              KTDEXP,KEL,CNAMES)
+C
+C
+C
+C*         4.6 PRINT SECTION 4 (DATA).
+C              -----------------------
+ 460  CONTINUE
+C
+C          IN THE CASE OF MANY SUBSETS DEFINE RANGE OF SUBSETS
+C
+      IF(.NOT.OO) THEN
+      WRITE(*,'(a,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IST
+      WRITE(*,'(a,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IEND
+      OO=.false.
+      END IF
+C
+C              PRINT DATA
+C
+      ICODE=0
+      CALL CREXPRT(ICODE,IST,KSEC3(3),KEL,CNAMES,CUNITS,CVALS,
+     1           KVALS,VALUES,KSUP,KSEC1,IERR)
+C
+C
+C     -----------------------------------------------------------------
+C*          5. COLLECT DATA FOR REPACKING.
+C              ---------------------------
+ 500  CONTINUE
+C      
+      IF(.NOT.OENC) GO TO 300
+C
+C               FIRST GET DATA DESCRIPTORS
+C
+      KK=0
+      IST=1
+      IEND=KSEC3(3)
+C
+      DO ISUBSET=IST, IEND
+
+
+      CALL CREXSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) THEN
+         print*,'CREXSEL: error ',kerr
+         CALL EXIT(2)
+      END IF
+C
+      JM1KELEM=(ISUBSET-1)*KEL
+C
+      DO 501 I=1,KTDEXL
+         INV=I+JM1KELEM
+         IN =I+JM1KELEM
+C
+         IF(CUNITS(I).EQ.'CHARACTER') THEN
+            IPOS =VALUES(INV)/1000.
+            ICH=NINT(VALUES(INV)-IPOS*1000)
+            KKK=KKK+1
+            VALUE(IN)=KKK*1000+ICH
+            IF(CVALS(IPOS)(1:1).EQ.'/') THEN
+               CV=' '
+               DO II=1,ICH
+               CV(II:II)=CHAR(255)
+               END DO
+               CVAL(KKK)=CV
+            ELSE
+              CVAL(KKK)=CVALS(IPOS)
+            END IF
+         ELSEIF(CUNITS(I)(1:2).EQ.'C '.AND.
+     1     KTDEXP(I)/1000.eq.12 ) THEN
+           VALUE(IN)=VALUES(INV)+273.15
+         ELSEIF(CUNITS(I)(1:2).EQ.'NB'.AND.
+     1     KTDEXP(I).EQ.015003) THEN
+           VALUE(IN)=VALUES(INV)*0.0001
+         ELSE
+            VALUE(IN)=VALUES(INV)
+         END IF
+C
+         IF(KTDEXP(I).EQ.31001.OR.KTDEXP(I).EQ.31002.OR.
+     1      KTDEXP(I).EQ.31000) THEN
+            KK=KK+1
+            KDATA(KK)=NINT(VALUES(INV))
+         END IF
+ 501  CONTINUE
+C
+      END DO
+C
+      KDLEN=2
+      IF(KK.NE.0) KDLEN=KK
+
+C     -----------------------------------------------------------------
+C*          6. PACK BUFR MESSAGE.
+C              -----------------
+ 600  CONTINUE
+C
+      KKK=0
+C
+      IF(KSEC0(3).LE.1) THEN
+         KSEC0(3)=3              ! Edition 3  of bufr message
+C
+         KSEC1(1)=18
+         KSEC1(2)=3              ! Bufr edition number
+         KSEC1(3)=KSEC1(3)
+         KSEC1(4)=1
+         KSEC1(5)=0            ! presence od section 2
+         KSEC1(7)=0
+         KSEC1(8)=0            ! Bufr local tables version number
+         KSEC1(9)=0
+         KSEC1(10)=0
+         KSEC1(11)=0
+         KSEC1(12)=0
+         KSEC1(13)=0
+         KSEC1(14)=0
+         KSEC1(15)=0           ! Bufr master table version number
+c
+         I_004001=0
+         I_004002=0
+         I_004003=0
+         I_004004=0
+         I_004005=0
+c
+         DO I=1,KTDEXL
+         IF(KTDEXP(I).EQ.004001) THEN
+            IF(I_004001.EQ.0) I_004001=I
+         ELSEIF(KTDEXP(I).EQ.004002) THEN
+            IF(I_004002.EQ.0) I_004002=I
+         ELSEIF(KTDEXP(I).EQ.004003) THEN
+            IF(I_004003.EQ.0) I_004003=I
+         ELSEIF(KTDEXP(I).EQ.004004) THEN
+            IF(I_004004.EQ.0) I_004004=I
+         ELSEIF(KTDEXP(I).EQ.004005) THEN
+            IF(I_004005.EQ.0) I_004005=I
+         END IF
+         END DO
+c
+         KSEC1(9)=NINT(VALUE(I_004001))-1900
+         IF(NINT(VALUE(I_004001)).GE.2000) THEN
+             KSEC1(9)=NINT(VALUE(I_004001))-2000
+         END IF
+         KSEC1(10)=NINT(VALUE(I_004002))
+         KSEC1(11)=NINT(VALUE(I_004003))
+         KSEC1(12)=NINT(VALUE(I_004004))
+         KSEC1(13)=NINT(VALUE(I_004005))
+c
+         KSEC1(14)=0
+         KSEC1(15)=13
+         KSEC1(16)=0
+      ELSEIF(KSEC0(3).EQ.2) THEN
+         KSEC0(3)=4              ! Edition 4  of bufr message
+c
+         KSEC1(1)=22             ! The size of section 1
+         KSEC1(2)=4
+         KSEC1(3)=KSEC1(3)
+         KSEC1(5)=0              ! presence od section 2
+         KSEC1(9)=0
+         KSEC1(10)=0
+         KSEC1(11)=0
+         KSEC1(12)=0
+         KSEC1(13)=0
+c
+         I_004001=0
+         I_004002=0
+         I_004003=0
+         I_004004=0
+         I_004005=0
+c
+         DO I=1,KTDEXL
+         IF(KTDEXP(I).EQ.004001) THEN
+            IF(I_004001.EQ.0) I_004001=I
+         ELSEIF(KTDEXP(I).EQ.004002) THEN
+            IF(I_004002.EQ.0) I_004002=I
+         ELSEIF(KTDEXP(I).EQ.004003) THEN
+            IF(I_004003.EQ.0) I_004003=I
+         ELSEIF(KTDEXP(I).EQ.004004) THEN
+            IF(I_004004.EQ.0) I_004004=I
+         ELSEIF(KTDEXP(I).EQ.004005) THEN
+            IF(I_004005.EQ.0) I_004005=I
+         END IF
+         END DO
+c
+         KSEC1( 9)=NINT(VALUE(I_004001))
+         KSEC1(10)=NINT(VALUE(I_004002))
+         KSEC1(11)=NINT(VALUE(I_004003))
+         KSEC1(12)=NINT(VALUE(I_004004))
+         KSEC1(13)=NINT(VALUE(I_004005))
+c
+         KSEC1(14)=0         ! Bufr master table
+         KSEC1(15)=KSEC1(17) ! Bufr master table version number
+         KSEC1(16)=KSEC1(16) ! Originating sub-centre
+         KSEC1(17)=KSEC1( 7) ! International sub-category
+         KSEC1( 7)=0
+         KSEC1(18)=0         ! Second
+c
+         
+      END IF
+c
+      KSEC3(4)=192                    ! No compression
+c
+      KBUFL=JBUFL
+C
+C
+C*          6.2 ENCODE DATA INTO BUFR MESSAGE.
+C               ------------------------------
+ 620  CONTINUE
+C
+c              Modify descriptor list for delayed 
+c              replication factor
+c
+      J=0
+      DO I=1,KTDLEN
+      IIF=KTDLST(I)/100000
+      IF(IIF.EQ.1) THEN
+         II=KTDLST(I)/1000
+         IY=KTDLST(I)-II*1000
+         IF(IY.EQ.0) THEN
+           J=J+1
+           KTDLST1(J)=KTDLST(I)
+           J=J+1
+           KTDLST1(J)=031002
+         ELSE
+           j=j+1
+           KTDlst1(j)=KTDlst(i)
+         END IF
+      ELSE
+         J=J+1
+         KTDLST1(J)=KTDLST(I)
+      END IF
+      END DO
+c
+      KTDLEN=J
+c 
+      KERR=0
+c     
+      CALL BUFREN( KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     1             KTDLEN,KTDLST1,KDLEN,KDATA,KEL,   
+     2             KVALS,VALUE,CVAL,KBUFL,KBUFR,KERR)
+C
+      IF(KERR.gt.0) THEN
+         print*,'error is ',kerr
+         PRINT*,'ERROR DURING ENCODING.'
+         CALL EXIT(2)
+      END IF
+C
+C           6.3 WRITE PACKED BUFR MESSAGE INTO FILE.
+C               ------------------------------------
+ 630  CONTINUE
+C
+      ILEN=KBUFL*NBYTPW
+C     
+      IERR=0
+      CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+      if(ierr.lt.0) then
+         print*,'Error writing into target file.'
+         CALL EXIT(2)
+      END IF
+C
+      GO TO 300
+C     -----------------------------------------------------------------
+C
+      END
diff --git a/examples/bufr/decode_bufr.F b/examples/bufr/decode_bufr.F
new file mode 100755
index 0000000..d6fa27f
--- /dev/null
+++ b/examples/bufr/decode_bufr.F
@@ -0,0 +1,623 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM BUFR
+C
+C**** *BUFR*
+C
+C
+C     PURPOSE.
+C     --------
+C         EXAMPLE OF USING BUFR UNPACKING/PACKING SOFTWARE.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         CALL BUSEL2
+C         CALL BUFREX
+C         CALL BUFREN
+C         CALL BUPRS0
+C         CALL BUPRS1
+C         CALL BUPRS2
+C         CALL BUPRS3
+C         CALL BUPRT
+C         CALL BUUKEY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/87.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=   4,
+     1          JSEC4=2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=3000,JCTST=9000,JCTEXT=9000,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=3000,JCTST=9000,JCTEXT=9000,
+#endif
+     3          JWORK=4096000,JKEY=46, JTMAX=10,JTCLAS=64,JTEL=255)
+
+C
+      PARAMETER (KELEM=40000)
+      PARAMETER (KVALS=4096000)
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY),KREQ(2)
+      DIMENSION NREQUEST(2)
+C
+      REAL*8 VALUES(KVALS),VALUE(KVALS)
+      DIMENSION KTDLST(JELEM),KTDEXP(JELEM),KRQ(KELEM)
+      REAL*8 RQV(KELEM)
+      DIMENSION KDATA(200),KBOXR(JELEM*4)
+      REAL*8 VALS(KVALS)
+C
+      CHARACTER*256 CF,COUT,CARG(4)
+      CHARACTER*64 CNAMES(KELEM),CBOXN(JELEM*4)
+      CHARACTER*24 CUNITS(KELEM),CBOXU(JELEM*4)
+      CHARACTER*80 CVALS(kelem)
+      CHARACTER*80 CVAL(kelem)
+      CHARACTER*80 YENC
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C     MISSING VALUE INDICATOR
+C 
+      NBYTPW=JBPW/8
+      RVIND=1.7D38
+      NVIND=2147483647
+      IOBS=0
+      EPS=10.D-8
+      NPACK=0
+      IYEAR=NVIND
+      N=0
+      NCOM=0
+      OO=.FALSE.
+C
+C
+C
+C     GET INPUT AND OUTPUT FILE NAME.
+C
+      NARG=IARGC()
+C
+C
+      DO 104 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 104  CONTINUE
+
+      II=0
+      IO=0
+      DO 105 J=1,NARG
+      IF(CARG(J).EQ.'-i') THEN
+         IN=J
+      ELSEIF(CARG(J).EQ.'-o') THEN
+         IO=J
+      END IF
+ 105  CONTINUE
+      IF(IN.EQ.0) THEN
+         PRINT*,'USAGE -- decode_bufr -i infile'
+         STOP
+      END IF
+      IF(IO.EQ.0.and.IN.EQ.0) THEN
+         PRINT*,'USAGE -- decode_bufr -i infile -o outfile'
+         STOP
+      END IF
+
+C
+      IF(IO.NE.0)  COUT=CARG(IO+1)
+C
+      IF(IO.LT.IN) THEN
+         IST=IN+1
+         IEND=NARG
+      ELSE
+         IST=IN+1
+         IEND=IO-1
+      END IF
+C
+C
+      IF(IO.NE.0) THEN
+         JJ=INDEX(COUT,' ')
+         JJ=JJ-1
+         CALL PBOPEN(IUNIT1,COUT(1:JJ),'W',IRET)
+         IF(IRET.EQ.-1) STOP 'OPEN FAILED ON BUFR.DAT'
+         IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+         IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+      END IF
+C
+      DO 101 II=IST,IEND
+
+      CF=CARG(II)
+      ILN=INDEX(CF,' ')
+      ILN=ILN-1
+
+      KRQL=0
+      NR=0
+      KREQ(1)=0
+      KREQ(2)=0
+      DO 103 I=1,KELEM
+      RQV(I)=RVIND
+      KRQ(I)=NVIND
+ 103  CONTINUE
+C
+C*          1.2 OPEN FILE CONTAINING BUFR DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CF(1:ILN),'R',IRET)
+      IF(IRET.EQ.-1) STOP 'OPEN FAILED'
+      IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+      IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+C
+      IF(IO.NE.0) THEN
+         CALL PBOPEN(IUNIT1,COUT(1:JJ),'W',IRET)
+         IF(IRET.EQ.-1) STOP 'OPEN FAILED ON BUFR.DAT'
+         IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+         IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+      END IF
+C
+
+C
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+      OPRT=.FALSE.
+      OENC=.FALSE.
+      WRITE(*,'(A,$)') ' DO YOU WANT TO PRINT( Y/N ) : '
+      READ (*,'(A)') YENC
+      IF(YENC(1:1).EQ.'Y'.OR.YENC(1:1).EQ.'y') THEN
+         OPRT=.TRUE.
+      END IF
+      ICODE=0
+      WRITE(*,'(A,$)') ' CODE TABLES TO BE PRINTED ( Y/N ) : '
+      READ (*,'(A)') YCODC
+      IF(YCODC(1:1).EQ.'Y'.OR.YCODC(1:1).EQ.'y') THEN
+         ICODE=1
+      END IF
+      WRITE(*,'(A,$)') ' DO YOU WANT ENCODING( Y/N ) : '
+      READ (*,'(A)') YENC
+      IF(YENC(1:1).EQ.'Y'.OR.YENC(1:1).EQ.'y') THEN
+          OENC=.TRUE.
+         WRITE(*,'(A,$)') ' NUMBER OF SUBSETS TO PACK : '
+         READ(*,'(BN,I4)')   NCOM
+         OCOMP=.FALSE.
+         WRITE(*,'(A,$)') ' DO YOU WANT COMPRESSION( Y/N ) : '
+         READ (*,'(A)') YCOMP
+         IF(YCOMP(1:1).EQ.'Y'.OR.YCOMP(1:1).EQ.'y') OCOMP=.TRUE.
+      END IF
+      WRITE(*,'(A,$)') ' RECORD NUMBER TO START FROM : '
+      READ(*,'(BN,I6)')   NR
+C
+ 201  CONTINUE
+C
+      WRITE(*,'(A,$)') ' REQUESTED ELEMENT : ' 
+      READ(*,'(BN,I6)')   IEL 
+      WRITE(*,'(A,$)') ' REQUESTED VALUE   : '
+      READ(*,'(BN,F12.2)')   VAL
+      IF(IEL.EQ.0) THEN
+         KRQL=J
+      ELSE
+         J=J+1
+         KRQ(J)=IEL
+         RQV(J)=VAL
+         IF(VAL.EQ.0.) RQV(J)=RVIND
+         GO TO 201
+      END IF
+C
+      WRITE(*,'(A,$)') ' REQUESTED FLAG 1  : '
+      READ(*,'(BN,I6)')  KREQ(1)
+C
+      WRITE(*,'(A,$)') ' REQUESTED FLAG 2  : '
+      READ(*,'(BN,I6)')  KREQ(2)
+C
+      WRITE(*,'(A,$)') ' DO YOU WANT TO PRINT SECTION 0-3( Y/N ) : '
+      READ (*,'(A,$)') YENC
+      OSEC3=.FALSE.
+      IF(YENC(1:1).EQ.'Y'.OR.YENC(1:1).EQ.'y') OSEC3=.TRUE.
+C
+C*          2.1 SET REQUEST FOR PARTIAL EXPANSION.
+C               ----------------------------------
+ 210  CONTINUE
+C
+      IERR=0
+      CALL BUSRQ(KREQ,KRQL,KRQ,RQV,IERR)
+C
+C     SET VARIABLE TO PACK BIG VALUES AS MISSING VALUE INDICATOR
+C
+      KPMISS=1
+      KPRUS=0
+      KOKEY=0
+      CALL BUPRQ(KPMISS,KPRUS,KOKEY)
+C
+C     -----------------------------------------------------------------
+      IF(NCOM.NE.0) THEN
+         KEL1=KVALS/NCOM
+         IF(KEL1.GT.KELEM) KEL1=KELEM
+      END IF
+C
+C*          3.  READ BUFR MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      KBUFL=0
+C
+      CALL PBBUFR(IUNIT,KBUFF,JBUFL,KBUFL,IERR) 
+      IF(IERR.EQ.-1) THEN
+         IF(NPACK.NE.0) GO TO 600
+         PRINT*,'NUMBER OF SUBSETS     ',IOBS
+         PRINT*,'NUMBER OF MESSAGES    ',N
+         STOP 'EOF'
+      END IF
+      IF(IERR.EQ.-2) STOP 'FILE HANDLING PROBLEM' 
+      IF(IERR.EQ.-3) STOP 'ARRAY TOO SMALL FOR PRODUCT'
+C
+      N=N+1
+c     PRINT*,'----------------------------------',N,' ',KBUFL
+      KBUFL=KBUFL/NBYTPW+1
+      IF(N.LT.NR) GO TO 300
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND BUFR MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      CALL BUS0123( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KSEC3,IERR)
+      IF(IERR.NE.0) THEN
+         PRINT*,'ERROR IN BUS012: ',IERR
+         PRINT*,' BUFR MESSAGE NUMBER ',N,' CORRUPTED.'
+         IERR=0
+         GO TO 300
+      END IF
+C
+      KEL=KVALS/KSEC3(3)
+      IF(KEL.GT.KELEM) KEL=KELEM
+C
+      CALL BUFREX(KBUFL,KBUFF,KSUP,KSEC0 ,KSEC1,KSEC2 ,KSEC3 ,KSEC4,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) THEN
+         CALL EXIT(2)
+      END IF
+C
+C
+      IOBS=IOBS+KSEC3(3)
+C
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+C     IF(IERR.NE.0) CALL EXIT(2)
+C
+C
+c      DO 401 IK=1,KSEC3(3)
+c
+c      CALL BUSEL2(IK,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+c    1             CUNITS,IERR)
+c      KSUP(5)=KTDEXL
+c      CALL BUBOX(IK,KSUP,KEL,KTDEXP,CNAMES,CUNITS,KVALS,VALUES,
+c    1            KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU,IERR)
+C
+c 401  CONTINUE
+C
+C
+C*          4.1 PRINT CONTENT OF EXPANDED DATA.
+C               -------------------------------
+ 410  CONTINUE
+C
+      IF(.NOT.OPRT) GO TO 500
+      IF(.NOT.OSEC3) GO TO 450
+C
+C*          4.2 PRINT SECTION ZERO OF BUFR MESSAGE.
+C               -----------------------------------
+ 420  CONTINUE
+C
+
+      CALL BUPRS0(KSEC0)
+C
+C*          4.3 PRINT SECTION ONE OF BUFR MESSAGE.
+C               -----------------------------------
+ 430  CONTINUE
+C
+      CALL BUPRS1(KSEC1)
+C
+C
+C*          4.4 PRINT SECTION TWO OF BUFR MESSAGE.
+C               -----------------------------------
+ 440  CONTINUE
+C
+C              AT ECMWF SECTION 2 CONTAINS RDB KEY.
+C              SO UNPACK KEY
+C
+      CALL BUUKEY(KSEC1,KSEC2,KEY,KSUP,IERR)
+C
+C              PRINT KEY
+C
+      CALL BUPRS2(KSUP ,KEY)
+C
+C*          4.5 PRINT SECTION 3 OF BUFR MESSAGE.
+C               -----------------------------------
+ 450  CONTINUE
+C
+C               FIRST GET DATA DESCRIPTORS
+C
+C     Multi subset uncompressed data descriptors for the 1st subset
+C     Each subset can contain completly different list of expanded
+C     discriptors
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(IERR.NE.0) CALL EXIT(2)
+C
+C               PRINT  CONTENT
+C
+      IF(OSEC3) THEN
+         CALL BUPRS3(KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,KEL,CNAMES)
+      END IF
+C
+C*         4.6 PRINT SECTION 4 (DATA).
+C              -----------------------
+ 460  CONTINUE
+C
+C          IN THE CASE OF MANY SUBSETS DEFINE RANGE OF SUBSETS
+C
+      IF(.NOT.OO) THEN
+      WRITE(*,'(A,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I4)')   IST
+      WRITE(*,'(A,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I4)')   IEND
+      OO=.FALSE.
+      END IF
+C
+C              PRINT DATA
+C
+C     IF(KSEC1(6).EQ.11) THEN
+C
+C        IST=1
+C        IEND=KSEC3(3)
+C
+         CALL BUPRT(ICODE,IST,IEND,KEL,CNAMES,CUNITS,CVALS,
+     1              KVALS,VALUES,KSUP,KSEC1,IERR)
+C     ELSE
+C
+C              RESOLVE BIT MAPS FOR EACH SUBSET
+C
+C        ist=1
+C        iend=ksec3(3)
+C
+C        IF(IEND.GT.KSEC3(3)) IEND=KSEC3(3)
+C
+C        DO 461 IK=IST,IEND
+C 
+C        CALL BUSEL2(IK,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+C    1               CUNITS,IERR)
+C
+C        KSUP(5)=KTDEXL
+C        CALL BUBOX(IK,KSUP,KEL,KTDEXP,CNAMES,CUNITS,KVALS,VALUES,
+C    1              KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU,IERR)
+C        IF(IERR.NE.0) CALL EXIT(2)
+C 
+C        CALL BUPRTBOX(KBOX,KAPP,KLEN,KBOXR,VALS,CBOXN,CBOXU)
+C
+C461     CONTINUE
+C     END IF
+C
+C     -----------------------------------------------------------------
+C*          5. COLLECT DATA FOR REPACKING.
+C              ---------------------------
+ 500  CONTINUE
+C      
+C 
+      IF(.NOT.OENC) GO TO 300
+C
+      ISUBS=KSEC3(3)
+      DO J=1,ISUBS
+C
+      NPACK=NPACK+1
+C
+C            FIRST GET DATA DESCRIPTORS
+C
+      CALL BUSEL2(J,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(IERR.NE.0) CALL EXIT(2)
+C
+      DO I=1,KTDEXL
+      IO=I+(NPACK-1)*KEL1
+      IN=I+(J-1)*KEL
+C
+      IF(CUNITS(I).EQ.'CCITTIA5') THEN
+         IPOS =VALUES(IN)/1000.
+         ICH=NINT(VALUES(IN)-IPOS*1000)
+         KKK=KKK+1
+         VALUE(IO)=KKK*1000+ICH
+         CVAL(KKK)=CVALS(IPOS)
+      ELSE
+         VALUE(IO)=VALUES(IN)
+      END IF
+      IF(KTDEXP(I).EQ.31001.OR.KTDEXP(I).EQ.31002) THEN
+          KK=KK+1
+          KDATA(KK)=NINT(VALUE(IO))
+       END IF
+       IF(KTDEXP(I).EQ.004001) THEN
+          IYEAR=NINT(VALUE(IO))
+       END IF
+
+       END DO
+C
+       KDLEN=KK
+       IF(NPACK.EQ.NCOM) THEN
+         
+
+          KSEC3(3)=NPACK
+          KSEC1(5)=0
+          KSEC1(8)=1
+          KSEC1(15)=12
+          IF(KSEC0(3).LT.4) THEN
+             KSEC1(17)=255
+             KSEC1(18)=0
+          END IF
+          KSEC0(3)=3            ! EDITION 4 OF BUFR MESSAGE
+          IF(KSEC0(3).GE.4) KSEC1(1)=22
+          KSEC3(4)=0            ! NO COMPRESSION
+          IF(KSEC0(3).LE.3) THEN
+             IF(IYEAR.GT.2000) THEN
+                KSEC1(9)=IYEAR-2000
+             ELSE
+                KSEC1(9)=IYEAR-1900
+             END IF
+          ELSE
+             KSEC1(9)=IYEAR
+          END IF
+          IF(OCOMP) KSEC3(4)=64  ! COMPRESSION
+          KBUFL=JBUFL
+          CALL BUFREN( KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     1             KTDLEN,KTDLST,KDLEN,KDATA,KEL1,
+     2             KVALS,VALUE,CVAL,KBUFL,KBUFR,IERR)
+          IF(IERR.NE.0) THEN
+             PRINT*,'ERROR IS ',IERR
+             PRINT*,'ERROR DURING ENCODING.'
+             CALL EXIT(2)
+          END IF
+C
+          ILEN=KBUFL*NBYTPW
+C
+          IERR=0
+C
+          CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+          IF(IERR.LT.0) THEN
+             PRINT*,'ERROR WRITING INTO TARGET FILE.'
+             CALL EXIT(2)
+          END IF
+          PRINT*,'RECORD WRITTEN INTO FILE '
+C
+          NPACK=0
+          KKK=0
+          KK=0
+       END IF
+C
+       END DO
+C
+       GO TO 300
+C     -----------------------------------------------------------------
+C*          6. PACK BUFR MESSAGE BACK INTO BUFR.
+C              ---------------------------------
+ 600  CONTINUE
+C
+     
+       KSEC3(3)=NPACK
+       KSEC1(8)=1
+       KSEC1(15)=12
+       KSEC0(3)=4            ! EDITION 4 OF BUFR MESSAGE
+       IF(KSEC0(3).GE.4) KSEC1(1)=22
+       IF(KSEC0(3).LT.4) THEN
+          KSEC1(17)=255
+          KSEC1(18)=0
+       END IF
+
+       KSEC3(4)=0            ! NO COMPRESSION
+       IF(KSEC1(9).LT.101) THEN
+          KSEC1(9)=IYEAR
+       END IF
+       
+C      
+       IF(OCOMP) KSEC3(4)=64  ! COMPRESSION  
+       KBUFL=JBUFL
+C
+C
+C*          6.2 ENCODE DATA INTO BUFR MESSAGE.
+C               ------------------------------
+ 620   CONTINUE
+C
+       CALL BUFREN( KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     1             KTDLEN,KTDLST,KDLEN,KDATA,KEL1,
+     2             KVALS,VALUE,CVAL,KBUFL,KBUFR,IERR)
+       IF(IERR.NE.0) THEN
+          PRINT*,'ERROR IS ',IERR
+          PRINT*,'ERROR DURING ENCODING.'
+          CALL EXIT(2)
+       END IF
+C
+C           6.3 WRITE PACKED BUFR MESSAGE INTO FILE.
+C               ------------------------------------
+ 630   CONTINUE
+C
+       ILEN=KBUFL*NBYTPW
+C    
+       CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+       IF(IERR.LT.0) THEN
+          PRINT*,'ERROR WRITING INTO TARGET FILE.'
+          CALL EXIT(2)
+       END IF
+       PRINT*,'RECORD WRITTEN INTO FILE ' 
+C
+       NPACK=0
+       KKK=0
+C
+       GO TO 300
+C     -----------------------------------------------------------------
+C
+ 810  CONTINUE
+C
+      WRITE(*,'(1H ,A)') 'OPEN ERROR ON INPUT FILE'
+      GO TO 900
+C      
+ 800  CONTINUE
+C
+      IF(IRET.EQ.-1) THEN
+         PRINT*,'NUMBER OF RECORDS PROCESSED ',N
+         PRINT*,'NUMBER OF OBSERVATIONS      ',IOBS
+      ELSE
+         PRINT*,' BUFR : ERROR= ',IERR
+      END IF
+C
+ 900  CONTINUE
+C
+      CALL PBCLOSE(IUNIT,IRET)
+ 101  CONTINUE
+      CALL PBCLOSE(IUNIT1,IRET)
+C
+      END
diff --git a/examples/bufr/decode_bufr_image.F b/examples/bufr/decode_bufr_image.F
new file mode 100755
index 0000000..2d37421
--- /dev/null
+++ b/examples/bufr/decode_bufr_image.F
@@ -0,0 +1,262 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM DECODE_BUFR_IMAGE
+C
+C**** *DECODE_BUFR_IMAGE*
+C
+C
+C     PURPOSE.
+C     --------
+C         Expnds Opera run-length encoded composite images
+C         and creates image header and image file.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/07/2008.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=   4,
+     1          JSEC4=2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=3000,JCTST=9000,JCTEXT=9000,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=3000,JCTST=9000,JCTEXT=9000,
+#endif
+     3          JWORK=4096000,JKEY=46, JTMAX=10,JTCLAS=64,JTEL=255)
+
+C
+      PARAMETER (JIMG=2500000)
+      PARAMETER (KELEM=320000)
+      PARAMETER (KVALS=4096000)
+   
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+C
+      REAL*8 VALUES(KVALS),VALUES_IMG(500)
+      INTEGER IMAGE(JIMG)
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM)
+      DIMENSION KTDEXP_IMG(KELEM)
+C
+      CHARACTER*256 CF,COUT,CARG(4),COUT1,COUT2,COUT3
+      CHARACTER*64 CNAMES(KELEM),CNAMES_IMG(KELEM)
+      CHARACTER*24 CUNITS(KELEM),CUNITS_IMG(KELEM)
+      CHARACTER*80 CVALS(KELEM),CVALS_IMG(KELEM)
+      REAL*8 RVIND
+C
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C     MISSING VALUE INDICATOR
+C 
+      NBYTPW=JBPW/8
+      RVIND=1.7D38
+      NVIND=2147483647
+      IOBS=0
+      N=0
+C
+C
+C
+C     GET INPUT AND OUTPUT FILE NAME.
+C
+      NARG=IARGC()
+C
+C
+      DO 104 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 104  CONTINUE
+
+      IF(NARG.EQ.0) THEN
+         PRINT*,'USAGE -- decode_bufr_image infile'
+         STOP
+      END IF
+C
+      DO 101 II=1,NARG
+
+      CF=CARG(II)
+      ILN=INDEX(CF,' ')-1
+C
+C*          1.2 OPEN FILE CONTAINING BUFR DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CF(1:ILN),'R',IRET)
+      IF(IRET.EQ.-1) STOP 'OPEN FAILED'
+      IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+      IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+C
+      COUT1=CF(1:ILN-5)//'.img'
+      ILN1=INDEX(COUT1,' ')-1
+      CALL PBOPEN(IUNIT1,COUT1(1:ILN1),'W',IRET)
+      IF(IRET.EQ.-1) STOP 'OPEN FAILED ON *.img file'
+      IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+      IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+C
+      COUT2=CF(1:ILN-5)//'.img_header'
+      ILN2=INDEX(COUT2,' ')-1
+      IUNIT2=40
+      OPEN(UNIT=IUNIT2,FILE=COUT2(1:ILN2),STATUS='UNKNOWN',IOSTAT=ios)
+      IF(IOS.NE.0) THEN
+        PRINT*,'Open error on ',COUT2(1:ILN2)
+        STOP 
+      END IF
+         
+C
+      COUT3=CF(1:ILN-5)//'.section_1'
+      ILN3=INDEX(COUT3,' ')-1
+      IUNIT3=41
+      OPEN(UNIT=IUNIT3,FILE=COUT3(1:ILN3),STATUS='UNKNOWN',IOSTAT=ios)
+      IF(IOS.NE.0) THEN
+        PRINT*,'Open error on ',COUT3(1:ILN3)
+        STOP 
+      END IF
+C
+C     ----------------------------------------------------------------- 
+C
+C*          3.  READ BUFR MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      KBUFL=0
+C
+      CALL PBBUFR(IUNIT,KBUFF,JBUFL,KBUFL,IERR) 
+      IF(IERR.EQ.-1) THEN
+         PRINT*,'NUMBER OF SUBSETS     ',IOBS
+         PRINT*,'NUMBER OF MESSAGES    ',N
+         STOP 'EOF'
+      END IF
+      IF(IERR.EQ.-2) STOP 'FILE HANDLING PROBLEM' 
+      IF(IERR.EQ.-3) STOP 'ARRAY TOO SMALL FOR PRODUCT'
+C
+      N=N+1
+      PRINT*,'----------------------------------',N,' ',KBUFL
+      KBUFL=KBUFL/NBYTPW+1
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND BUFR MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      CALL BUS0123( KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KSEC3,IERR)
+      IF(IERR.NE.0) THEN
+         PRINT*,'ERROR IN BUS012: ',IERR
+         PRINT*,' BUFR MESSAGE NUMBER ',N,' CORRUPTED.'
+         IERR=0
+         GO TO 300
+      END IF
+C
+      KEL=KVALS/KSEC3(3)
+      IF(KEL.GT.KELEM) KEL=KELEM
+C
+      CALL BUFREX(KBUFL,KBUFF,KSUP,KSEC0 ,KSEC1,KSEC2 ,KSEC3 ,KSEC4,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) THEN
+         CALL EXIT(2)
+      END IF
+C
+      IOBS=IOBS+KSEC3(3)
+C
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+C     IF(IERR.NE.0) CALL EXIT(2)
+C
+C     Get full image as array of pixel values
+
+      CALL BUGET_OPERA_IMAGE(KSEC1,KTDEXL,KTDEXP,CNAMES,CUNITS,
+     1      KELEM,KVALS,VALUES,CVALS,KTDEXL_IMG,KTDEXP_IMG,
+     2      CNAMES_IMG,CUNITS_IMG,KVALS_IMG,VALUES_IMG,
+     3      CVALS_IMG,KSIZE_IMG_BYTES,IMAGE,KPIXEL_SIZE,KERR)
+
+c
+c
+C
+C     Write image meta data into file
+C     -------------------------------
+      DO I=1,KTDEXL_IMG
+      WRITE(IUNIT2,'(I6,1X,A64,1x,F20.8,1x,a24)') I,CNAMES_IMG(I),
+     c                                VALUES_IMG(I),CUNITS_IMG(I)
+      END DO
+
+C
+C     Write bufr section 1 into file
+C     ------------------------------
+      CALL BBUPRS1(IUNIT3,KSEC1)
+      IMX=KSIZE_IMG_BYTES
+C   
+C     Write image ( pixel values ) into file
+C     -----------------------------------------------------------------
+      CALL PBWRITE(IUNIT1,IMAGE,IMX,IERR)
+C
+C
+      GO TO 900 
+C     -----------------------------------------------------------------
+C
+ 810  CONTINUE
+C
+      WRITE(*,'(1H ,A)') 'OPEN ERROR ON INPUT FILE'
+      GO TO 900
+C      
+ 800  CONTINUE
+C
+      IF(IRET.EQ.-1) THEN
+         PRINT*,'NUMBER OF RECORDS PROCESSED ',N
+         PRINT*,'NUMBER OF OBSERVATIONS      ',IOBS
+      ELSE
+         PRINT*,' BUFR : ERROR= ',IERR
+      END IF
+C
+ 900  CONTINUE
+C
+      CALL PBCLOSE(IUNIT,IRET)
+      CALL PBCLOSE(IUNIT1,IRET)
+      CLOSE(IUNIT2)
+      CLOSE(IUNIT3)
+ 101  CONTINUE
+C
+      END
diff --git a/examples/bufr/tdexp.F b/examples/bufr/tdexp.F
new file mode 100755
index 0000000..c8365a5
--- /dev/null
+++ b/examples/bufr/tdexp.F
@@ -0,0 +1,187 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM TDEXP
+C
+C**** *TDEXP*
+C
+C
+C     PURPOSE.
+C     --------
+C         Expands list of Bufr data descriptors.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C         CALL BUSEL
+C         CALL BUFREX
+C         CALL BUFREN
+C         CALL BUPRS0
+C         CALL BUPRS1
+C         CALL BUPRS2
+C         CALL BUPRS3
+C         CALL BUPRT
+C         CALL BUUKEY
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       June 2005.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSEC1=40,JSEC3=4)
+      PARAMETER (KDLEN=200,KELEM=40000,KVALS=360000)
+C 
+      DIMENSION KSEC1(JSEC1)     ! ,KSEC3(JSEC3)
+C
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM)
+      DIMENSION KDATA(KDLEN)
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+C                                                                       
+C
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C
+      RVIND=1.7E38
+C
+C     INITIALIZE DELAYED REPLICATION FACTORS OR REFERENCE VALUES ETD.
+C
+C
+      KDATA(1)=127
+      KDATA(2)=5
+      KDATA(3)=5
+      KDATA(4)=5
+      KDATA(5)=5
+C
+C     SET DATA DECSRIPTORS
+C
+      KTDLST(  1)=301090
+      KTDLST(  2)=301091
+      KTDLST(  3)=302001
+      KTDLST(  4)=007004
+      KTDLST(  5)=010009
+      KTDLST(  6)=302072
+      KTDLST(  7)=101005
+      KTDLST(  8)=307063
+      KTDLST(  9)=302069
+      KTDLST( 10)=007032
+      KTDLST( 11)=007033
+      KTDLST( 12)=020031
+      KTDLST( 13)=020032
+      KTDLST( 14)=002038
+      KTDLST( 15)=022043
+      KTDLST( 16)=302021
+      KTDLST( 17)=302078
+      KTDLST( 18)=302073
+      KTDLST( 19)=302074
+      KTDLST( 20)=302075
+      KTDLST( 21)=004025
+      KTDLST( 22)=302076
+      KTDLST( 23)=302071
+      KTDLST( 24)=004025
+      KTDLST( 25)=013059
+      KTDLST( 26)=302083
+      KTDLST( 27)=033005
+      KTDLST( 28)=033006
+
+      KTDLST( 29)=223000
+      KTDLST( 30)=236000
+      KTDLST( 31)=101000
+      KTDLST( 32)=031001
+      KTDLST( 33)=031031
+      KTDLST( 34)=001031
+      KTDLST( 35)=001032
+      KTDLST( 36)=008083
+      KTDLST( 37)=101000
+      KTDLST( 38)=031001
+      KTDLST( 39)=223255
+
+      KTDLST( 40)=223000
+      KTDLST( 41)=237000
+      KTDLST( 42)=001031
+      KTDLST( 43)=001032
+      KTDLST( 44)=008083
+      KTDLST( 45)=101000
+      KTDLST( 46)=031001
+      KTDLST( 47)=223255
+
+      KTDLST( 48)=223000
+      KTDLST( 49)=237000
+      KTDLST( 50)=001031
+      KTDLST( 51)=001032
+      KTDLST( 52)=008083
+      KTDLST( 53)=101000
+      KTDLST( 54)=031001
+      KTDLST( 55)=223255
+
+      KTDLST( 56)=223000
+      KTDLST( 57)=237000
+      KTDLST( 58)=001031
+      KTDLST( 59)=001032
+      KTDLST( 60)=008083
+      KTDLST( 61)=101000
+      KTDLST( 62)=031001
+      KTDLST( 63)=223255
+
+
+
+      ktdlen=63
+
+C
+C     SET DATA DECSRIPTORS
+C
+C     SECTION 1 CONTENT
+C
+      KSEC1(2)=4     ! BUFR EDITION NUMBER
+      KSEC1(14)=0    ! BUFR MASTER TABLE USED
+      ksec1(16)=0    ! ORIGINATING SUB-CENTRE
+      KSEC1(3)=98    ! ORIGINATING CENTRE
+      KSEC1(8)=1     ! VERSION NUMBER OF LOCAL TABLE USED
+      KSEC1(15)=12    ! VERSION NUMBER OF MASTER TABLE USED
+C
+C     SECTION 3 CONTENT
+C
+C
+c
+      K=1
+      CALL BUXDES(K,KSEC1,KTDLEN,KTDLST,KDLEN,KDATA,KELEM,
+     1            KTDEXL,KTDEXP,CNAMES,CUNITS,KERR)
+C
+      END
diff --git a/examples/bufr/test.sh b/examples/bufr/test.sh
new file mode 100755
index 0000000..765efcd
--- /dev/null
+++ b/examples/bufr/test.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+cd ../../
+path=`pwd`
+
+
+BUFR_TABLES=$path/bufrtables/
+export BUFR_TABLES
+
+cd examples/bufr
+
+./decode_bufr -i ../../data/ISMD01_OKPR.bufr
diff --git a/examples/crex/Makefile b/examples/crex/Makefile
new file mode 100755
index 0000000..219da73
--- /dev/null
+++ b/examples/crex/Makefile
@@ -0,0 +1,40 @@
+#
+#                                 Makefile for example programs
+#
+#
+PLACE = ../../
+LIB = emos
+#
+
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+#
+TARGETS  = all clean
+EXECS    = decode_crex create_crex crextdexp bufr2crex crex2bufr
+#
+#
+all :$(EXECS)
+
+decode_crex : decode_crex.o 
+	$(FC) $(FFLAGS) -o $@  decode_crex.o -L$(PLACE) -l$(LIB)$(R64)
+
+create_crex : create_crex.o
+	$(FC) $(FFLAGS) -o $@ create_crex.o -L$(PLACE) -l$(LIB)$(R64)
+
+crextdexp   : crextdexp.o
+	$(FC) $(FFLAGS) -o $@ crextdexp.o -L$(PLACE) -l$(LIB)$(R64)
+
+bufr2crex   : bufr2crex.o
+	$(FC) $(FFLAGS) -o $@ bufr2crex.o -L$(PLACE) -l$(LIB)$(R64)
+
+crex2bufr   : crex2bufr.o
+	$(FC) $(FFLAGS) -o $@ crex2bufr.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean   :
+	@for name in $(EXECS); do\
+	(rm -f $$name *.o ); \
+	done 
+
+
diff --git a/examples/crex/Makefile.in b/examples/crex/Makefile.in
new file mode 100755
index 0000000..99ad4ac
--- /dev/null
+++ b/examples/crex/Makefile.in
@@ -0,0 +1,46 @@
+#
+#                                 Makefile for example programs
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+#
+#
+PLACE = ../../
+#
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+TARGDIR  = ./
+#
+#
+TARGETS  = all clean
+EXECS    = decode_crex create_crex crextdexp bufr2crex crex2bufr
+#
+#
+all :$(EXECS)
+
+decode_crex : decode_crex.o 
+	$(FC) $(FFLAGS) -o $@  decode_crex.o -L$(PLACE) -lemos$(R64)
+
+create_crex : create_crex.o
+	$(FC) $(FFLAGS) -o $@ create_crex.o -L$(PLACE) -lemos$(R64)
+
+crextdexp   : crextdexp.o
+	$(FC) $(FFLAGS) -o $@ crextdexp.o -L$(PLACE) -lemos$(R64)
+
+bufr2crex   : bufr2crex.o
+	$(FC) $(FFLAGS) -o $@ bufr2crex.o -L$(PLACE) -lemos$(R64)
+
+crex2bufr   : crex2bufr.o
+	$(FC) $(FFLAGS) -o $@ crex2bufr.o -L$(PLACE) -lemos$(R64)
+
+clean   :
+	@for name in $(EXECS); do\
+	(rm -f $$name *.o ); \
+	done 
+
+
diff --git a/examples/crex/bufr2crex.F b/examples/crex/bufr2crex.F
new file mode 100755
index 0000000..bf427b2
--- /dev/null
+++ b/examples/crex/bufr2crex.F
@@ -0,0 +1,605 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      PROGRAM BUFR2CREX
+C
+C**** *BUFRCREX*
+C
+C
+C     PURPOSE.
+C     --------
+C         Bufr to CREX conversion.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=    4,
+     1       JSEC4=   2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=512000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#else 
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#endif
+     3          JWORK=4096000,JKEY=46,JBYTE=80000)
+C
+      PARAMETER (KELEM=20000)
+      PARAMETER (KVALS=360000)
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY),KREQ(2)
+C
+      REAL*8 VALUES(KVALS)
+      REAL*8 RQV(KELEM)
+C
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM),KRQ(KELEM)
+      DIMENSION KDATA(2000)
+C
+      CHARACTER*256    COUT,CARG(4),CFIN
+      CHARACTER*64     CNAMES(KELEM)
+      CHARACTER*24     CUNITS(KELEM)
+      CHARACTER*80     CVALS(KVALS)
+      CHARACTER*80     YENC
+      CHARACTER*160000 YOUT
+      CHARACTER*3      CRCRLF
+C
+C     Common block containing bufr tables
+C
+      COMMON /BCOMTAB/ NTABBTR(JTAB),NTABBS (JTAB),NTABBRV(JTAB),
+     1                 NTABBDW(JTAB),NTABDTR(JTAB),NTABDST(JTAB),
+     2                 NTABDL (JTAB),NTABDSQ(JTAB*20),NTABP(64,255)
+C
+C             NTABBTR    - table B,  table reference              array
+C             NTABBS     - table B,  scale                        array
+C             NTABBRF    - table B,  reference value              array
+C             NTABBDW    - table B,  data width                   array
+C             NTABDTR    - table D,  table reference              array
+C             NTABDST    - table D,  starting pointers            array
+C             NTABDL     - table D,  lengths                      array
+C             NTABDSQ    - table D,  list of sequence descriptors array
+C
+      COMMON /BCOMWT/ NDWINC,NSCAM,NAFDW,NWT ,ODREPF,
+     1                N221,MREL,NFCM,NFUCM,MBMP,OMARKER,M0,
+     2                MBMPL,NSTACK(JELEM),NWTEN(JELEM),
+     3                NWTR (JELEM),NWTS (JELEM),NWTRV (JELEM),
+     4                NWTDW(JELEM)
+C
+C             NDWINC   -  data width increment
+C             NSCAM    -  scale multiplier
+C             NAFDW    -  augmented field data width
+C             NWT      -  pointer to working table
+C             NSTACK   -  list of data descriptors
+C             ODREPF   -  replication (logical)
+C             N221     -  data not present for n221 elements
+C             MREL     -  pointer to the last data element
+C             NFCM     -  first compressed message
+C             MBMP     -  pointer to the begining of bit map
+C             NWTR     -  working table reference
+C             NWTS     -  working scale
+C             NWTRV    -  working reference value
+C             NWTDW    -  working data width
+C
+      COMMON /BCOMWTC/ CWTEN(JELEM),CWTU (JELEM)
+C
+C             CWTEN    -  working table element naame
+C             CWTU     -  working table units
+C
+c
+      PARAMETER(JP=3000)
+C
+      CHARACTER*120 YENTRY
+      CHARACTER*15  YFNAME
+      CHARACTER*15  FMT
+      CHARACTER*6   CREXKTDLST(KELEM),CREXKTDLST0
+C
+      INTEGER IVALUE(KELEM)
+C
+C     Logical switch to use check digit indicator
+C
+      CHARACTER*4 YUSE_E
+C
+      INTEGER IVAL,IIVAL
+c
+      REAL*8 EPS
+      REAL*8 RVIND
+      REAL*8 VAL
+C
+      EQUIVALENCE (YOUT,KBUFR(1))
+C
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C 
+      NBYTPW=JBPW/8
+      RVIND=1.7E38
+      NVIND=2147483647
+      IOBS=0
+      EPS=1.0E-8
+      NPACK=0
+      N=0
+      OO=.FALSE.
+C
+      CRCRLF=CHAR(13)//CHAR(13)//CHAR(10)
+C
+C     Get input and output file name.
+C
+      NARG=IARGC()
+c
+      IF(NARG.LT.4) THEN
+         print*,'Usage -- bufr2crex -i infile -o outfile' 
+         STOP
+      END IF
+c
+      COUT=' '
+      CFIN=' '
+c
+      DO 101 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+c
+      DO 102 J=1,NARG,2
+        IF(CARG(J).EQ.'-i') THEN
+           CFIN=CARG(J+1)
+        ELSEIF(CARG(J).EQ.'-o') THEN
+           COUT=CARG(J+1)
+        ELSE
+            print*,'Usage -- bufr2crex -i infile -o outfile'
+            STOP
+        END IF
+ 102  CONTINUE
+C
+      II=INDEX(CFIN,' ')
+      II=II-1
+      JJ=INDEX(COUT,' ')
+      JJ=JJ-1
+C
+      KRQL=0
+      NR=0
+      KREQ(1)=0
+      KREQ(2)=0
+C
+C
+C*          1.2 OPEN FILE CONTAINING BUFR DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CFIN(1:ii),'r',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+      CALL PBOPEN(IUNIT1,cout(1:jj),'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on bufr.dat'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+      KREQ(1)=1
+      KREQ(2)=0
+C
+      OSEC3=.FALSE.
+      OPRT=.FALSE.
+      OENC=.TRUE.
+      ICODE=0
+      OCOMP=.FALSE.
+C
+C*          2.1 SET REQUEST FOR PARTIAL EXPANSION.
+C               ----------------------------------
+ 210  CONTINUE
+C
+      KERR=0
+      CALL BUSRQ(KREQ,KRQL,KRQ,RQV,KERR)
+C
+C     -----------------------------------------------------------------
+C*          3.  READ BUFR MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      KBUFL=0
+C
+      IRET=0
+      CALL PBBUFR(IUNIT,KBUFF,JBYTE,KBUFL,IRET) 
+      IF(IRET.EQ.-1) THEN
+c         IF(N.NE.0) GO TO 600
+         print*,'Number of subsets     ',iobs
+         print*,'Number of messages    ',n
+         STOP 'EOF'
+      END IF
+      IF(IRET.EQ.-2) STOP 'File handling problem' 
+      IF(IRET.EQ.-3) STOP 'Array too small for product'
+C
+      N=N+1
+      KBUFL=KBUFL/nbytpw+1
+      IF(N.LT.NR) GO TO 300
+      print*,'----------------------',n
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND BUFR MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      CALL BUS012(KBUFL,KBUFF,KSUP,KSEC0,KSEC1,KSEC2,KERR)
+      IF(KERR.NE.0) THEN
+         PRINT*,'Error in BUS012: ',KERR
+         PRINT*,' BUFR MESSAGE NUMBER ',N,' CORRUPTED.'
+         KERR=0
+         GO TO 300
+      END IF
+C
+      KEL=KELEM
+      IF(KSUP(6).GT.1) THEN
+         KEL=KVALS/KSUP(6)
+         IF(KEL.GT.KELEM) KEL=KELEM
+      END IF
+C
+      CALL BUFREX(KBUFL,KBUFF,KSUP,KSEC0 ,KSEC1,KSEC2 ,KSEC3 ,KSEC4,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) THEN
+         IF(IERR.EQ.45) GO TO 300
+         IF(IERR.EQ.2) THEN
+            IERR=0
+            GO TO 300
+         END IF
+         CALL EXIT(2)
+      END IF
+c
+      IOBS=IOBS+KSEC3(3)
+c
+      NPACK=NPACK+1 
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+C*          4.1 PRINT CONTENT OF EXPANDED DATA.
+C               -------------------------------
+ 410  CONTINUE
+C
+      IF(.NOT.OPRT) GO TO 500
+      IF(.NOT.OSEC3) GO TO 450
+C
+C*          4.2 PRINT SECTION ZERO OF BUFR MESSAGE.
+C               -----------------------------------
+ 420  CONTINUE
+C
+
+      CALL BUPRS0(KSEC0)
+C
+C*          4.3 PRINT SECTION ONE OF BUFR MESSAGE.
+C               -----------------------------------
+ 430  CONTINUE
+C
+      CALL BUPRS1(KSEC1)
+C
+C
+C*          4.4 PRINT SECTION TWO OF BUFR MESSAGE.
+C               -----------------------------------
+ 440  CONTINUE
+c
+C              AT ECMWF SECTION 2 CONTAINS RDB KEY.
+C              SO UNPACK KEY
+C
+      CALL BUUKEY(KSEC1,KSEC2,KEY,KSUP,KERR)
+C
+C              PRINT KEY
+C
+      CALL BUPRS2(KSUP ,KEY)
+C
+C*          4.5 PRINT SECTION 3 OF BUFR MESSAGE.
+C               -----------------------------------
+ 450  CONTINUE
+C
+C               FIRST GET DATA DESCRIPTORS
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+C               PRINT  CONTENT
+C
+      IF(OSEC3) THEN
+         CALL BUPRS3(KSEC3,KTDLEN,KTDLST,KTDEXL,KTDEXP,KEL,CNAMES)
+      END IF
+c
+C
+C*         4.6 PRINT SECTION 4 (DATA).
+C              -----------------------
+ 460  CONTINUE
+C
+C          IN THE CASE OF MANY SUBSETS DEFINE RANGE OF SUBSETS
+C
+      IF(.NOT.OO) THEN
+      WRITE(*,'(a,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IST
+      WRITE(*,'(a,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IEND
+      OO=.FALSE.
+      END IF
+C
+C              PRINT DATA
+C
+      ICODE=0
+      CALL BUPRT(ICODE,IST,IEND,KEL,CNAMES,CUNITS,CVALS,
+     1           KVALS,VALUES,KSUP,KSEC1,IERR)
+C
+C
+C     -----------------------------------------------------------------
+C*          5. COLLECT DATA FOR REPACKING.
+C              ---------------------------
+ 500  CONTINUE
+C      
+C               FIRST GET DATA DESCRIPTORS
+C
+      ISUBSET=1
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+C     -----------------------------------------------------------------
+C*          6. PACK CREX MESSAGE.
+C              ------------------
+ 600  CONTINUE
+C
+C     Modify BUFR operators
+C
+      J=0
+      DO 602 I=1,KTDLEN
+      IF(KTDLST(I).EQ.222000) GO TO 603
+      IF(KTDLST(I).EQ.201000) GO TO 602 
+      IF(KTDLST(I).EQ.202000) GO TO 602
+      IF(KTDLST(I).EQ.204000) GO TO 602
+      IF(KTDLST(I).EQ.031000) GO TO 602
+      IF(KTDLST(I).EQ.031001) GO TO 602
+      IF(KTDLST(I).EQ.031002) GO TO 602
+C
+      CREXKTDLST0=' '
+      WRITE(CREXKTDLST0,'(I6.6)',IOSTAT=IOS) KTDLST(I)
+      IF(IOS.NE.0) THEN
+         print*,'Internal write error.'
+         CALL EXIT(2)
+      END IF
+      J=J+1
+      CREXKTDLST(J)(1:6)=CREXKTDLST0
+C
+      IF(CREXKTDLST(J)(1:1).EQ.'3') THEN
+         CREXKTDLST(J)(1:1)='D'
+      ELSEIF(CREXKTDLST(J)(1:1).EQ.'0') THEN
+         CREXKTDLST(J)(1:1)='B'
+      ELSEIF(CREXKTDLST(J)(1:1).EQ.'1') THEN
+         CREXKTDLST(J)(1:1)='R'
+c        scan for any 201000,202000 or 201y,202y followed by 206y
+         READ(CREXKTDLST(J)(2:3),'(I2.2)',IOSTAT=IOS) IELEMENTS
+         IF(IOS.NE.0) THEN
+            print*,'Internal read error.'
+            CALL EXIT(2)
+         END IF
+         IEL=IELEMENTS
+         DO IN=I,I+IELEMENTS-1
+         IF(KTDLST(IN).EQ.201000) IEL=IEL-1
+         IF(KTDLST(IN).EQ.202000) IEL=IEL-1
+         IF(KTDLST(IN).GE.201001.AND.KTDLST(IN).LE.201999.AND.
+     1      KTDLST(IN+1)/1000.EQ.206) IEL=IEL-1
+         IF(KTDLST(IN).GE.202001.AND.KTDLST(IN).LE.202999.AND.         
+     1      KTDLST(IN+1)/1000.EQ.206) IEL=IEL-1
+         END DO
+         WRITE(CREXKTDLST(J)(2:3),'(I2.2)',IOSTAT=IOS) IEl
+         IF(IOS.NE.0) THEN
+            print*,'Internal write error.'
+            CALL EXIT(2)
+         END IF
+      ELSEIF(CREXKTDLST(J)(1:3).EQ.'201') THEN
+         IF(KTDLST(I+1)/1000.EQ.206) THEN
+            J=J-1
+            GO TO 602
+         END IF
+         READ(CREXKTDLST(J)(4:6),'(I3.3)',IOSTAT=IOS) IY
+         IF(IOS.NE.0) THEN
+            print*,'Internal read error.'
+            CALL EXIT(2)
+         END IF
+         IBITS=IY-128
+         ICLASS=KTDLST(I+1)/1000
+         IYYY  =KTDLST(I+1)-ICLASS*1000+1
+         ICLASS=ICLASS+1
+         III=NTABP(ICLASS,IYYY)
+         IDW=NTABBDW(III)+IBITS
+         IRES=2.**IDW-1
+         JZ=0
+         DO WHILE(IRES.GT.0)
+         JZ=JZ+1
+         IRES=IRES/10
+         END DO
+         CREXKTDLST(J)(1:3)='C01'
+         WRITE(CREXKTDLST(J)(4:6),'(I3.3)',IOSTAT=IOS) JZ
+         IF(IOS.NE.0) THEN
+            print*,'Internal write error.'
+            CALL EXIT(2)
+         END IF
+      ELSEIF(CREXKTDLST(J)(1:3).EQ.'202') THEN
+         GO TO 602
+      ELSEIF(CREXKTDLST(J)(1:3).EQ.'205') THEN
+          CREXKTDLST(J)(1:3)='C05'
+      ELSE
+         print*,'Wrong data descriptor ',crexktdlst(j)
+         print*,'Data containing above descriptor can',
+     1          ' not be converted'
+         go to 300
+      END IF
+ 602  CONTINUE
+c
+ 603  CONTINUE
+C
+      ICREXLEN=J
+c
+C     Find delayed replications
+c
+      KDLEN=0
+C
+      IST=1
+      IEND=1
+      OMULTI=.FALSE.
+      IF(IAND(KSEC3(4),64).NE.0.AND.KSEC3(3).GT.1) THEN
+         IEND=KSEC3(3)
+         OMULTI=.TRUE.
+      END IF
+C
+      DO ISUBSET=IST, IEND
+
+      JJ=(ISUBSET-1)*KEL
+C
+      CALL BUSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+C
+      DO I=1,KTDEXL
+C
+        II=I+JJ
+C
+        IF(KTDEXP(I).EQ.031001.OR.
+     1     KTDEXP(I).EQ.031000.OR.
+     2     KTDEXP(I).EQ.031002) THEN
+           KDLEN=KDLEN+1
+           KDATA(KDLEN)=NINT(VALUES(II))
+        END IF
+      END DO
+C
+C*   Make unit conversion from K to Celsius
+C
+      DO I=1,KTDEXL
+        IF(CUNITS(I)(1:2).EQ.'K '.AND.
+     1     KTDEXP(I)/1000.EQ.12) THEN
+           IF(KTDEXP(I).NE.012064.AND.
+     1        KTDEXP(I).NE.012065.AND.
+     2        KTDEXP(I).NE.012070.AND.
+     2        KTDEXP(I).NE.012071.AND.
+     4        KTDEXP(I).NE.012164.AND.
+     5        KTDEXP(I).NE.012151.AND.
+     6        KTDEXP(I).NE.012051.AND.
+     7        KTDEXP(I).NE.022050.AND.
+     8        KTDEXP(I).NE.012171) THEN
+              IF(OMULTI) THEN
+              IJ=I+JJ
+              IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps) 
+     1           VALUES(IJ)=VALUES(IJ)-273.15 
+              ELSE
+              DO J=1,KSEC3(3)
+              IJ=I+(J-1)*KEL
+              IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps)
+     1           VALUES(IJ)=VALUES(IJ)-273.15
+              END DO
+              END IF
+           END IF
+        END IF
+        IF(CUNITS(I)(1:2).EQ.'PA'.AND.
+     1     KTDEXP(I).EQ.015003) THEN
+           IF(OMULTI) THEN
+           IJ=I+JJ
+           IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps)
+     1        VALUES(IJ)=VALUES(IJ)*10000.
+           ELSE
+           DO J=1,KSEC3(3)
+           IJ=I+(J-1)*KEL
+           IF(abs(VALUES(IJ)-rvind)/rvind.GT.eps) 
+     1        VALUES(IJ)=VALUES(IJ)*10000.
+           END DO
+           END IF
+        END IF
+      END DO
+C
+      END DO
+
+C
+C*          6.2 ENCODE DATA INTO CREX MESSAGE.
+C               ------------------------------
+ 620  CONTINUE
+C
+      IF(KSEC1(2).EQ.4) THEN         ! Bufr edition number
+         KSEC1(2)=2                  ! Crex edition number
+         KSEC1(5)=KSEC3(3)           ! Number of subsets
+         KSEC1( 7)=KSEC1(17)         ! International sub category
+         KSEC1(17)=KSEC1(15)            ! Bufr master table version number
+         KSEC1(15)=3                    ! Crex version number used
+         KSEC1(18)=KSEC1(8)             ! Bufr version number of local tables
+      ELSE
+         KSEC1(17)=KSEC1(15)            ! Bufr master table version number
+         KSEC1(2)=1                  ! Crex edition number
+         KSEC1(15)=3                    ! Crex version number used
+         KSEC1(18)=KSEC1(8)             ! Bufr version number of local tables
+      END IF
+c
+      CALL CREXEN(KSEC0,KSEC1,KSEC3,
+     1            ICREXLEN,CREXKTDLST,KDLEN,KDATA,KEL,KVALS,
+     2            VALUES,CVALS,KBUFL,KBUFR,KERR)
+      IF(KERR.GT.0) THEN
+         print*,'CREXEN error:',KERR
+         go to 300
+      END IF
+C
+C           6.3 WRITE CREX MESSAGE INTO FILE.
+C               -----------------------------
+ 630  CONTINUE
+C
+      ILEN=KBUFL
+C     
+      IERR=0
+      CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+      IF(IERR.LT.0) THEN
+         print*,'Error writing into target file.'
+         CALL EXIT(2)
+      END IF
+C
+      GO TO 300
+C
+      END
diff --git a/examples/crex/create_crex.F b/examples/crex/create_crex.F
new file mode 100755
index 0000000..58b807c
--- /dev/null
+++ b/examples/crex/create_crex.F
@@ -0,0 +1,296 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM CREX
+C
+C**** *CREX*
+C
+C
+C     PURPOSE.
+C     --------
+C         Example of creating CREX message
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC3=    4,
+     1          JBUFL= 8192)
+C
+      PARAMETER (KDLEN=200,KELEM=2000)
+      PARAMETER (KVALS=80000)
+C 
+      DIMENSION KBUFR(JBUFL)
+      DIMENSION KSEC0(JSEC0),KSEC1(JSEC1), KSEC3(JSEC3)
+C
+      REAL*8  VALUES(KVALS)
+      REAL*8 RVIND
+C
+      DIMENSION KDATA(KDLEN)
+C
+      CHARACTER*6  CREXKTDLST(KELEM),CREXKTDEXP(KELEM)
+      CHARACTER*64 CNAMES(kelem)
+      CHARACTER*24 CUNITS(kelem)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 YENC
+      CHARACTER*256 COUT, CARG(4)
+C      
+      CHARACTER*15000 YOUT
+      EQUIVALENCE(KBUFR(1),YOUT)
+C
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+      RVIND=1.7D38
+      NVIND=2147483647
+C
+C     GET INPUT AND OUTPUT FILE NAME.
+C
+      NARG=IARGC()
+C
+      IF(NARG.LT.2) THEN
+         print*,'Usage -- create_crex -o outfile'
+         STOP
+      END IF
+C
+      COUT=' '
+      CFIN=' '
+C
+      DO 101 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+C
+      DO 102 J=1,NARG,2
+        IF(CARG(J).EQ.'-o') THEN
+           COUT=CARG(J+1)
+        ELSE
+            print*,'Usage -- create_crex -o outfile'
+            STOP
+        END IF
+ 102  CONTINUE
+C
+      JJ=INDEX(COUT,' ')
+      JJ=JJ-1
+C
+      CALL PBOPEN(IUNIT1,COUT(1:JJ),'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on bufr.dat'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+C     INITIALIZE DELAYED REPLICATION FACTORS OR REFERENCE VALUES ETD.
+C
+      KDATA( 1)=0
+      KDATA( 2)=0
+      KDATA( 3)=0
+      KDATA( 4)=0
+C
+      DO I=5,KDLEN
+       KDATA(I)=0
+      END DO
+C
+      KDLENG=200
+C
+C     SET DATA DECSRIPTORS
+C
+      CREXKTDLST(  1)= "D07005"
+c
+      KTDLEN=1
+
+      KSEC0(1)=0
+      KSEC0(2)=0
+      KSEC0(3)=2      ! Crex edition number
+C
+C     SECTION 1 CONTENT
+C
+      KSEC1(1)=0
+      KSEC1(2)=2     ! CREX Edition number (currently)
+      KSEC1(3)=98    ! Originating centre
+      KSEC1(4)=0     ! Update sequence number
+      KSEC1(5)=1     ! Number of subsets
+      KSEC1(6)=0     ! CREX data category
+      KSEC1(7)=2     ! International data sub-category
+      KSEC1(8)=0     ! version number of local table used
+      KSEC1(9)=2003  ! Year
+      KSEC1(10)=12   ! Month
+      KSEC1(11)=2   ! Day
+      KSEC1(12)=12   ! Hour
+      KSEC1(13)=0    ! Minute
+      KSEC1(14)=0    ! CREX Master table ( 0 for standard WMO crex tables)
+      KSEC1(15)=3    ! CREX table version number
+      KSEC1(16)=0    ! Originating sub-centre
+      KSEC1(17)=14   ! BUFR master table version number
+      KSEC1(18)=0    ! BUFR local table version number
+C
+
+      K=1
+      CALL CREXDES(K,KSEC1,KTDLEN,CREXKTDLST,KDLEN,KDATA,KELEM,
+     1            KTDEXL,CREXKTDEXP,CNAMES,CUNITS,KERR)
+      IF(KERR.NE.0) THEN
+         print*,'CREXDES: error'
+         STOP
+      END IF
+
+C
+C     SET VALUES TO BE PACKED
+C
+      K=1
+      KSUBSETS=1
+c
+      DO J=1,KSUBSETS
+
+      IK=(J-1)*KELEM
+      N=1
+      VALUES(N+IK)=13.         ! Block number
+      N=N+1                    !
+      VALUES(N+IK)=274.        ! station number
+      N=N+1                    !
+      VALUES(N+IK)=0.          ! type of station
+      N=N+1                    !
+      VALUES(N+IK)=2003.       ! year
+      N=N+1                    !
+      VALUES(N+IK)=12.         ! month
+      N=N+1                    !
+      VALUES(N+IK)=2.          ! day
+      N=N+1                    !
+      VALUES(N+IK)=12.         ! hour
+      N=N+1                    !
+      VALUES(N+IK)=0.          ! minute
+      N=N+1
+      VALUES(N+IK)=45.2        ! lat
+      N=N+1                    !
+      VALUES(N+IK)=20.5        ! lon
+      N=N+1                    !
+      VALUES(N+IK)=170.        ! station height
+      N=N+1                    !
+      VALUES(N+IK)=102000.     ! station level pressure
+      N=N+1
+      VALUES(N+IK)=102500.     ! msl pressure
+      N=N+1                    !
+      VALUES(N+IK)=100.        ! pressure change
+      N=N+1                    !
+      VALUES(N+IK)=rvind       ! characteristic of pressure change
+      N=N+1                    !
+      VALUES(N+IK)=300.        ! wind dir
+      N=N+1                    !
+      VALUES(N+IK)=8.5         ! wind speed
+      N=N+1                    !
+      VALUES(N+IK)=-5.0        ! T
+      N=N+1                    !
+      VALUES(N+IK)=-7.0        ! Td
+      N=N+1                    !
+      VALUES(N+IK)=70.         ! RH
+      N=N+1                    !
+      VALUES(N+IK)=1000.       ! visibility
+      N=N+1                    !
+      VALUES(N+IK)=rvind          
+      N=N+1                    !
+      VALUES(N+IK)=rvind
+      N=N+1                    !
+      VALUES(N+IK)=rvind         
+      N=N+1                    !
+      VALUES(N+IK)=rvind
+      N=N+1                    !
+      VALUES(N+IK)=rvind
+c
+      DO I=N,47
+      N=N+1                    !
+      VALUES(N+IK)=rvind        
+      END DO
+C                    !
+      END DO                    !
+C
+C     SET CCITTIA5 CALL SIGN 
+C
+      DO I=1,200
+      CVALS( I )=' '
+      END DO
+C
+C
+C     SECTION 3 CONTENT
+C
+      KSEC3(1)=0         ! TOTAL LENGTH OF SECTION 3
+      KSEC3(2)=0         ! RESERVED
+      KSEC3(3)= ksubsets ! NUMBER OF SUBSETS
+      KSEC3(4)=0
+C
+      IREP=0
+C
+C
+C*          6. PACK CREX MESSAGE
+C              -----------------
+ 600  CONTINUE
+C
+C
+      KERR=0
+      CALL CREXEN( KSEC0,KSEC1,KSEC3,
+     1             KTDLEN,crexKTDLST,KDLENG,KDATA,KELEM,
+     2             KVALS,VALUES,CVALS,KBUFL,KBUFR,KERR)
+C
+
+      IF(KERR.GT.0) THEN
+         CALL EXIT(2)
+      ELSEIF(KERR.lt.0) then
+         print*,'Encoding return_code=',kerr
+      END IF 
+C
+C
+      ILEN=KBUFL
+C     ILEN=KSEC0(2)
+C
+      IERR=0
+      CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+      IF(IERR.LT.0) THEN
+         print*,'Error writing into target file.'
+         CALL EXIT(2)
+      END IF
+C
+C     Print CREX message on screen
+      print*,yout(1:ilen)
+C
+C     -----------------------------------------------------------------
+C
+ 900  CONTINUE
+C
+      STOP
+      END
diff --git a/examples/crex/crex2bufr.F b/examples/crex/crex2bufr.F
new file mode 100755
index 0000000..15c0ad3
--- /dev/null
+++ b/examples/crex/crex2bufr.F
@@ -0,0 +1,499 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM CREX2BUFR
+C
+C**** *CREX2BUFR*
+C
+C
+C     PURPOSE.
+C     --------
+C         Decode CREX coded data into BUFR format
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          MILAN DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =  9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=    4,
+     1       JSEC4=   2,JELEM=320000,JSUBS=400,JCVAL=150 ,JBUFL=40000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#endif
+     3          JWORK=4096000,JKEY=46,JBYTE=80000)
+C
+      PARAMETER (KELEM=40000)
+      PARAMETER (KVALS=360000)
+C 
+      DIMENSION KBUFF(JBUFL),KBUFR(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC2(JSEC2),KSEC3(JSEC3),KSEC4(JSEC4)
+      DIMENSION KEY  (JKEY),KREQ(2)
+C
+      REAL*8 VALUES(KVALS), VALUE(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+      DIMENSION KTDLST(KELEM),KTDEXP(KELEM),KTDLST1(KELEM)
+      DIMENSION KDATA(2000)
+C
+      CHARACTER*256 CF,COUT,CARG(4)
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 CVAL(KVALS),CV
+      CHARACTER*80 YENC
+      CHARACTER*160000 YBUFF
+c
+      EQUIVALENCE(YBUFF,KBUFF(1))
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+      NBYTPW=JBPW/8
+      RVIND=1.7D38
+      NVIND=2147483647
+      IOBS=0
+      EPS=10.D-8
+      N=0
+      OCOMP=.FALSE.
+      OO=.FALSE.
+      CF=' '
+      COUT=' '
+      KKK=0
+C
+C     GET INPUT AND OUTPUT FILE NAME.
+C
+      NARG=IARGC()
+c
+      IF(NARG.NE.4) THEN
+         print*,'Usage -- crex2bufr -i infile -o outfile' 
+         STOP
+      END IF
+c
+      DO 101 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+c
+      IF(CARG(1).NE.'-i'.AND.CARG(1).NE.'-I'.OR.
+     1   CARG(2).EQ.' ') THEN
+         print*,'Usage -- crex2bufr -i inpfile -o outfile'
+         STOP
+      END IF
+      IF(CARG(3).NE.'-o'.AND.CARG(3).NE.'-O'.OR.
+     1   CARG(4).EQ.' ') THEN
+         print*,'Usage -- crex2bufr -i inpfile -o outfile'
+         STOP
+      END IF
+c
+      CF=CARG(2)
+      II=INDEX(CF,' ')
+      II=II-1
+      COUT=CARG(4)
+      I=INDEX(COUT,' ')
+      I=I-1
+C
+C*          1.2 OPEN FILE CONTAINING CREX DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CF(1:II),'r',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on input file'
+      IF(IRET.EQ.-2) STOP 'Invalid file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+c
+C
+C*          1.2.1 OPEN OUTPUT FILE.
+C               ------------------
+ 121  CONTINUE
+C
+
+      CALL PBOPEN(IUNIT1,COUT(1:I),'w',IRET)
+      IF(IRET.EQ.-1) STOP 'open failed on output file'
+      IF(IRET.EQ.-2) STOP 'Invalid output file name'
+      IF(IRET.EQ.-3) STOP 'Invalid open mode specified'
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+      NR=1
+      OPRT=.TRUE.
+      OENC=.FALSE.
+C
+      OENC=.TRUE.
+
+ 210  CONTINUE
+C
+C
+C     -----------------------------------------------------------------
+C*          3.  READ CREX MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      IRET=0
+c
+      CALL PBCREX(IUNIT,KBUFF,JBUFL,KBUFL,IRET)
+      IF(IRET.LT.0) THEN
+         if(iret.eq.-1) stop 'End of file '
+         if(iret.eq.-2) stop 'Error in handling the file'
+         if(iret.eq.-3) stop 'Error during read CREX file.'
+      END IF
+c
+      N=N+1
+      print*,'----------------------------------',n
+      IF(N.LT.NR) GO TO 300
+      KEL=KELEM
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND CREX MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+      IERR=0
+      CALL CREXEX(KBUFL,YBUFF,KSUP,KSEC0 ,KSEC1,KSEC3 ,
+     1            KEL,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) then
+         print*,'CREX error ', ierr
+         IF(IERR.EQ.20.or.IERR.EQ.14) THEN
+            KEL=KVALS/KSUP(6)
+            GO TO 400
+         ELSE
+            CALL EXIT(2)
+         END IF
+      END IF
+C
+      
+      IOBS=IOBS+KSEC3(3)
+C
+      ISUBSET=1
+      CALL CREXSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1              CNAMES,CUNITS,KERR)
+      IF(KERR.NE.0) then
+         print*,'CREXSEL: error.'
+         CALL EXIT(2)
+      END IF
+C
+C*          4.1 PRINT CONTENT OF EXPANDED DATA.
+C               -------------------------------
+ 410  CONTINUE
+C
+      IF(.NOT.OPRT) GO TO 500
+C
+C*          4.2 PRINT SECTION ZERO OF CREX MESSAGE.
+C               -----------------------------------
+ 420  CONTINUE
+C
+
+      CALL CREXPRS0(KSEC0)
+C
+C*          4.3 PRINT SECTION ONE OF CREX MESSAGE.
+C               -----------------------------------
+ 430  CONTINUE
+C
+      CALL CREXPRS1(KSEC1,KSEC3,KTDLEN,KTDLST,KTDEXL,
+     1              KTDEXP,KEL,CNAMES)
+C
+C
+C
+C*         4.6 PRINT SECTION 4 (DATA).
+C              -----------------------
+ 460  CONTINUE
+C
+C          IN THE CASE OF MANY SUBSETS DEFINE RANGE OF SUBSETS
+C
+      IF(.NOT.OO) THEN
+      WRITE(*,'(a,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IST
+      WRITE(*,'(a,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I6)')   IEND
+      OO=.false.
+      END IF
+C
+C              PRINT DATA
+C
+      ICODE=0
+      CALL CREXPRT(ICODE,IST,KSEC3(3),KEL,CNAMES,CUNITS,CVALS,
+     1           KVALS,VALUES,KSUP,KSEC1,IERR)
+C
+C
+C     -----------------------------------------------------------------
+C*          5. COLLECT DATA FOR REPACKING.
+C              ---------------------------
+ 500  CONTINUE
+C      
+      IF(.NOT.OENC) GO TO 300
+C
+C               FIRST GET DATA DESCRIPTORS
+C
+      KK=0
+      IST=1
+      IEND=KSEC3(3)
+C
+      DO ISUBSET=IST, IEND
+
+
+      CALL CREXSEL2(ISUBSET,KEL,KTDLEN,KTDLST,KTDEXL,KTDEXP,CNAMES,
+     1            CUNITS,IERR)
+      IF(KERR.NE.0) THEN
+         print*,'CREXSEL: error ',kerr
+         CALL EXIT(2)
+      END IF
+C
+      JM1KELEM=(ISUBSET-1)*KEL
+C
+      DO 501 I=1,KTDEXL
+         INV=I+JM1KELEM
+         IN =I+JM1KELEM
+C
+         IF(CUNITS(I).EQ.'CHARACTER') THEN
+            IPOS =VALUES(INV)/1000.
+            ICH=NINT(VALUES(INV)-IPOS*1000)
+            KKK=KKK+1
+            VALUE(IN)=KKK*1000+ICH
+            IF(CVALS(IPOS)(1:1).EQ.'/') THEN
+               CV=' '
+               DO II=1,ICH
+               CV(II:II)=CHAR(255)
+               END DO
+               CVAL(KKK)=CV
+            ELSE
+              CVAL(KKK)=CVALS(IPOS)
+            END IF
+         ELSEIF(CUNITS(I)(1:2).EQ.'C '.AND.
+     1     KTDEXP(I)/1000.eq.12 ) THEN
+           VALUE(IN)=VALUES(INV)+273.15
+         ELSEIF(CUNITS(I)(1:2).EQ.'NB'.AND.
+     1     KTDEXP(I).EQ.015003) THEN
+           VALUE(IN)=VALUES(INV)*0.0001
+         ELSE
+            VALUE(IN)=VALUES(INV)
+         END IF
+C
+         IF(KTDEXP(I).EQ.31001.OR.KTDEXP(I).EQ.31002.OR.
+     1      KTDEXP(I).EQ.31000) THEN
+            KK=KK+1
+            KDATA(KK)=NINT(VALUES(INV))
+         END IF
+ 501  CONTINUE
+C
+      END DO
+C
+      KDLEN=2
+      IF(KK.NE.0) KDLEN=KK
+
+C     -----------------------------------------------------------------
+C*          6. PACK BUFR MESSAGE.
+C              -----------------
+ 600  CONTINUE
+C
+      KKK=0
+C
+      IF(KSEC0(3).LE.1) THEN
+         KSEC0(3)=3              ! Edition 3  of bufr message
+C
+         KSEC1(1)=18
+         KSEC1(2)=3              ! Bufr edition number
+         KSEC1(3)=KSEC1(3)
+         KSEC1(4)=1
+         KSEC1(5)=0            ! presence od section 2
+         KSEC1(7)=0
+         KSEC1(8)=0            ! Bufr local tables version number
+         KSEC1(9)=0
+         KSEC1(10)=0
+         KSEC1(11)=0
+         KSEC1(12)=0
+         KSEC1(13)=0
+         KSEC1(14)=0
+         KSEC1(15)=0           ! Bufr master table version number
+c
+         I_004001=0
+         I_004002=0
+         I_004003=0
+         I_004004=0
+         I_004005=0
+c
+         DO I=1,KTDEXL
+         IF(KTDEXP(I).EQ.004001) THEN
+            IF(I_004001.EQ.0) I_004001=I
+         ELSEIF(KTDEXP(I).EQ.004002) THEN
+            IF(I_004002.EQ.0) I_004002=I
+         ELSEIF(KTDEXP(I).EQ.004003) THEN
+            IF(I_004003.EQ.0) I_004003=I
+         ELSEIF(KTDEXP(I).EQ.004004) THEN
+            IF(I_004004.EQ.0) I_004004=I
+         ELSEIF(KTDEXP(I).EQ.004005) THEN
+            IF(I_004005.EQ.0) I_004005=I
+         END IF
+         END DO
+c
+         KSEC1(9)=NINT(VALUE(I_004001))-1900
+         IF(NINT(VALUE(I_004001)).GE.2000) THEN
+             KSEC1(9)=NINT(VALUE(I_004001))-2000
+         END IF
+         KSEC1(10)=NINT(VALUE(I_004002))
+         KSEC1(11)=NINT(VALUE(I_004003))
+         KSEC1(12)=NINT(VALUE(I_004004))
+         KSEC1(13)=NINT(VALUE(I_004005))
+c
+         KSEC1(14)=0
+         KSEC1(15)=13
+         KSEC1(16)=0
+      ELSEIF(KSEC0(3).EQ.2) THEN
+         KSEC0(3)=4              ! Edition 4  of bufr message
+c
+         KSEC1(1)=22             ! The size of section 1
+         KSEC1(2)=4
+         KSEC1(3)=KSEC1(3)
+         KSEC1(5)=0              ! presence od section 2
+         KSEC1(9)=0
+         KSEC1(10)=0
+         KSEC1(11)=0
+         KSEC1(12)=0
+         KSEC1(13)=0
+c
+         I_004001=0
+         I_004002=0
+         I_004003=0
+         I_004004=0
+         I_004005=0
+c
+         DO I=1,KTDEXL
+         IF(KTDEXP(I).EQ.004001) THEN
+            IF(I_004001.EQ.0) I_004001=I
+         ELSEIF(KTDEXP(I).EQ.004002) THEN
+            IF(I_004002.EQ.0) I_004002=I
+         ELSEIF(KTDEXP(I).EQ.004003) THEN
+            IF(I_004003.EQ.0) I_004003=I
+         ELSEIF(KTDEXP(I).EQ.004004) THEN
+            IF(I_004004.EQ.0) I_004004=I
+         ELSEIF(KTDEXP(I).EQ.004005) THEN
+            IF(I_004005.EQ.0) I_004005=I
+         END IF
+         END DO
+c
+         KSEC1( 9)=NINT(VALUE(I_004001))
+         KSEC1(10)=NINT(VALUE(I_004002))
+         KSEC1(11)=NINT(VALUE(I_004003))
+         KSEC1(12)=NINT(VALUE(I_004004))
+         KSEC1(13)=NINT(VALUE(I_004005))
+c
+         KSEC1(14)=0         ! Bufr master table
+         KSEC1(15)=KSEC1(17) ! Bufr master table version number
+         KSEC1(16)=KSEC1(16) ! Originating sub-centre
+         KSEC1(17)=KSEC1( 7) ! International sub-category
+         KSEC1( 7)=0
+         KSEC1(18)=0         ! Second
+c
+         
+      END IF
+c
+      KSEC3(4)=192                    ! No compression
+c
+      KBUFL=JBUFL
+C
+C
+C*          6.2 ENCODE DATA INTO BUFR MESSAGE.
+C               ------------------------------
+ 620  CONTINUE
+C
+c              Modify descriptor list for delayed 
+c              replication factor
+c
+      J=0
+      DO I=1,KTDLEN
+      IIF=KTDLST(I)/100000
+      IF(IIF.EQ.1) THEN
+         II=KTDLST(I)/1000
+         IY=KTDLST(I)-II*1000
+         IF(IY.EQ.0) THEN
+           J=J+1
+           KTDLST1(J)=KTDLST(I)
+           J=J+1
+           KTDLST1(J)=031002
+         ELSE
+           j=j+1
+           KTDlst1(j)=KTDlst(i)
+         END IF
+      ELSE
+         J=J+1
+         KTDLST1(J)=KTDLST(I)
+      END IF
+      END DO
+c
+      KTDLEN=J
+c 
+      KERR=0
+c     
+      CALL BUFREN( KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+     1             KTDLEN,KTDLST1,KDLEN,KDATA,KEL,   
+     2             KVALS,VALUE,CVAL,KBUFL,KBUFR,KERR)
+C
+      IF(KERR.gt.0) THEN
+         print*,'error is ',kerr
+         PRINT*,'ERROR DURING ENCODING.'
+         CALL EXIT(2)
+      END IF
+C
+C           6.3 WRITE PACKED BUFR MESSAGE INTO FILE.
+C               ------------------------------------
+ 630  CONTINUE
+C
+      ILEN=KBUFL*NBYTPW
+C     
+      IERR=0
+      CALL PBWRITE(IUNIT1,KBUFR,ILEN,IERR)
+      if(ierr.lt.0) then
+         print*,'Error writing into target file.'
+         CALL EXIT(2)
+      END IF
+C
+      GO TO 300
+C     -----------------------------------------------------------------
+C
+      END
diff --git a/examples/crex/crextdexp.F b/examples/crex/crextdexp.F
new file mode 100755
index 0000000..917f340
--- /dev/null
+++ b/examples/crex/crextdexp.F
@@ -0,0 +1,167 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM CREXEXP
+C
+C**** *CREXEXP*
+C
+C
+C     PURPOSE.
+C     --------
+C         Expands list of CREX data descriptors.
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       07/01/2004.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSEC1=40,JSEC3=4)
+      PARAMETER (KDLEN=200,KELEM=4000)
+C 
+      DIMENSION KSEC1(JSEC1) 
+C
+      DIMENSION KDATA(KDLEN)
+C
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*6  CREXKTDLST(KELEM)
+      CHARACTER*6  CREXKTDEXP(KELEM)
+C
+      REAL*8 RVIND
+C                                                                       
+C
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+C
+      RVIND=1.7E38
+C
+C     INITIALIZE DELAYED REPLICATION FACTORS 
+C
+      DO I=1,KDLEN
+      KDATA(I)=1
+      END DO
+C
+C     SET DATA DECSRIPTORS
+C
+      N=1
+      CREXKTDLST( N)="D01090"
+      N=N+1
+      CREXKTDLST( N)="D02031"
+      N=N+1
+      CREXKTDLST( N)="D02032"
+      N=N+1
+      CREXKTDLST( N)="D02033"
+      N=N+1
+      CREXKTDLST( N)="D02004"
+      N=N+1
+      CREXKTDLST( N)="R01000"
+      N=N+1
+      CREXKTDLST( N)="D02005"
+      N=N+1
+      CREXKTDLST( N)="D02038"
+      N=N+1
+      CREXKTDLST( N)="D02044"
+      N=N+1
+      CREXKTDLST( N)="R01002"
+      N=N+1
+      CREXKTDLST( N)="D02039"
+      N=N+1
+      CREXKTDLST( N)="R02002"
+      N=N+1
+      CREXKTDLST( N)="B04024"
+      N=N+1
+      CREXKTDLST( N)="B13011"
+      N=N+1
+      CREXKTDLST( N)="B07032"
+      N=N+1
+      CREXKTDLST( N)="B04024"
+      N=N+1
+      CREXKTDLST( N)="B12111"
+      N=N+1
+      CREXKTDLST( N)="B04024"
+      N=N+1
+      CREXKTDLST( N)="B12112"
+      N=N+1
+      CREXKTDLST( N)="B07032"
+      N=N+1
+      CREXKTDLST( N)="B02002"
+      N=N+1
+      CREXKTDLST( N)="B08021"
+      N=N+1
+      CREXKTDLST( N)="B04025"
+      N=N+1
+      CREXKTDLST( N)="B11001"
+      N=N+1
+      CREXKTDLST( N)="B11002"
+      N=N+1
+      CREXKTDLST( N)="B08021"
+
+      KTDLEN=N
+C
+C     SECTION 1 CONTENT
+C
+      KSEC1(2)=2     ! CREX EDITION NUMBER
+      KSEC1(3)=98    ! Originating Centre ( oooo)
+      KSEC1(4)=0     ! Update sequence number (uu)
+      KSEC1(5)=1     ! Number of subsets ( sss)
+      KSEC1(6)=0     ! CREX data category (nnn)
+      KSEC1(7)=1     ! International data sub-category (mmm)
+      KSEC1(8)=1     ! Version number of local table used
+      KSEC1(9)=2004  ! Year
+      KSEC1(10)=11   ! Month
+      KSEC1(11)=29   ! Daay
+      KSEC1(12)=12   ! Hour
+      KSEC1(13)=00   ! Minute
+      KSEC1(14)=0    ! CREX Master table (tt)
+      KSEC1(15)=3    ! Version number of Master table used (vv)
+      KSEC1(16)=0    ! Originating sub-centre (ppp)
+      KSEC1(17)=12   ! Bufr master table version number
+      KSEC1(18)=0    ! Bufr version number of local table used
+C
+C     SECTION 3 CONTENT
+C
+      K=1
+      CALL CREXDES(K,KSEC1,KTDLEN,CREXKTDLST,KDLEN,KDATA,KELEM,
+     1            KTDEXL,CREXKTDEXP,CNAMES,CUNITS,KERR)
+C
+      END
diff --git a/examples/crex/decode_crex.F b/examples/crex/decode_crex.F
new file mode 100755
index 0000000..3462a90
--- /dev/null
+++ b/examples/crex/decode_crex.F
@@ -0,0 +1,280 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM DECODE_CREX
+C
+C**** *DECODE_CREX*
+C
+C
+C     PURPOSE.
+C     --------
+C         DECODE CREX CODED DATA
+C
+C
+C**   INTERFACE.
+C     ----------
+C
+C          NONE.
+C
+C     METHOD.
+C     -------
+C
+C          NONE.
+C
+C
+C     EXTERNALS.
+C     ----------
+C
+C          CREXEX    
+C          CREXSEL 
+C          CREXPRS0 
+C          CREXPRT
+C          PBOPEN
+C          PBCLOSE 
+C          PBCREX
+C          GETARG    
+C         
+C         
+C         
+C
+C     REFERENCE.
+C     ----------
+C
+C          NONE.
+C
+C     AUTHOR.
+C     -------
+C
+C          M. DRAGOSAVAC    *ECMWF*       15/09/2003.
+C
+C
+C     MODIFICATIONS.
+C     --------------
+C
+C          NONE.
+C
+C
+      IMPLICIT LOGICAL(L,O,G), CHARACTER*8(C,H,Y)
+C
+      PARAMETER(JSUP =   9,JSEC0=   3,JSEC1= 40,JSEC2=4096,JSEC3=    4,
+     1          JSEC4=   2,JELEM=40000,JSUBS=400,JCVAL=150 ,JBUFL=80000,
+#ifdef JBPW_64
+     2          JBPW =  64,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#else
+     2          JBPW =  32,JTAB =3000,JCTAB=120,JCTST=1800,JCTEXT=1200,
+#endif
+     3          JWORK=360000,JKEY=46,JBYTE=80000)
+C
+      PARAMETER (KELEM=8000)
+      PARAMETER (KVALS=360000)
+C 
+      DIMENSION KBUFF(JBUFL)
+      DIMENSION KSUP(JSUP)  ,KSEC0(JSEC0),KSEC1(JSEC1)
+      DIMENSION KSEC3(JSEC3)
+C
+      REAL*8 VALUES(KVALS)
+      REAL*8 RVIND
+      REAL*8 EPS
+C
+      DIMENSION KTDLST(JELEM),KTDEXP(JELEM)
+      DIMENSION KDATA(200)
+C
+      CHARACTER*256 CF,CARG(4)
+      CHARACTER*64 CNAMES(KELEM)
+      CHARACTER*24 CUNITS(KELEM)
+      CHARACTER*80 CVALS(KVALS)
+      CHARACTER*80 YENC
+      CHARACTER*320000 YBUFF
+C
+      EQUIVALENCE(YBUFF,KBUFF(1))
+C                                                                       
+C     ------------------------------------------------------------------
+C*          1. INITIALIZE CONSTANTS AND VARIABLES.
+C              -----------------------------------
+ 100  CONTINUE
+C
+      NBYTPW=JBPW/8
+      RVIND=1.7D38
+      NVIND=2147483647
+      IOBS=0
+      EPS=1.D-8
+      N=0
+      OO=.FALSE.
+      CF=' '
+C
+C     INPUT FILE NAME
+C
+C     GET INPUT AND OUTPUT FILE NAME.
+C
+      NARG=IARGC()
+C
+      IF(NARG.NE.2) THEN
+         PRINT*,'USAGE -- decode_crex -i infile ' 
+         STOP
+      END IF
+C
+      DO 101 J=1,NARG
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+C
+      IF(CARG(1).NE.'-I'.AND.CARG(1).NE.'-i'.OR.
+     1   CARG(2).EQ.' ') THEN
+         PRINT*,'USAGE -- decode_crex -i inpfile '
+         STOP
+      END IF
+
+C
+      CF=CARG(2)
+      II=INDEX(CF,' ')
+      II=II-1
+C
+C*          1.2 OPEN FILE CONTAINING CREX DATA.
+C               -------------------------------
+ 120  CONTINUE
+C
+      IRET=0 
+      CALL PBOPEN(IUNIT,CF(1:II),'R',IRET)
+      IF(IRET.EQ.-1) STOP 'OPEN FAILED ON INPUT FILE'
+      IF(IRET.EQ.-2) STOP 'INVALID FILE NAME'
+      IF(IRET.EQ.-3) STOP 'INVALID OPEN MODE SPECIFIED'
+C
+C     ----------------------------------------------------------------- 
+C*          2. SET REQUEST FOR EXPANSION.
+C              --------------------------
+ 200  CONTINUE
+C
+      OPRT=.FALSE.
+      OENC=.FALSE.
+      WRITE(*,'(A,$)') ' DO YOU WANT TO PRINT( Y/N ) : '
+      READ (*,'(A)') YENC
+      IF(YENC(1:1).EQ.'Y'.OR.YENC(1:1).EQ.'y') THEN
+         OPRT=.TRUE.
+      END IF
+C
+ 201  CONTINUE
+C
+      WRITE(*,'(A,$)') ' DO YOU WANT TO PRINT SECTION 0-3( Y/N ) : '
+      READ (*,'(A,$)') YENC
+      OSEC3=.FALSE.
+      IF(YENC(1:1).EQ.'Y'.OR.YENC(1:1).EQ.'y') OSEC3=.TRUE.
+C
+ 210  CONTINUE
+C
+C
+C     -----------------------------------------------------------------
+C*          3.  READ CREX MESSAGE.
+C               ------------------
+ 300  CONTINUE
+C
+      IERR=0
+      IRET=0
+C
+      YBUFF(1:15000)=' '
+      CALL PBCREX(IUNIT,KBUFF,JBUFL,KBUFL,IRET)
+      IF(IRET.LT.0) THEN
+         IF(IRET.EQ.-1) THEN
+            PRINT*,'NUMBER OF CREX MESSAGES PROCESSED ',N
+            PRINT*,'NUMBER OF CREX OBSERVATIONS       ',IOBS
+            STOP 'END OF FILE '
+         END IF
+         IF(IRET.EQ.-2) STOP 'ERROR IN HANDLING THE FILE'
+         IF(IRET.EQ.-3) STOP 'ERROR DURING READ CREX FILE.'
+      END IF
+C
+      N=N+1
+      PRINT*,'----------------------------------',N
+      print*,YBUFF(1:KBUFL)
+C
+C     -----------------------------------------------------------------
+C*          4. EXPAND CREX MESSAGE.
+C              --------------------
+ 400  CONTINUE
+C
+     
+      IERR=0
+      CALL CREXEX(KBUFL,YBUFF,KSUP,KSEC0 ,KSEC1,KSEC3 ,
+     1            KELEM,CNAMES,CUNITS,KVALS,VALUES,CVALS,IERR)
+C
+      IF(IERR.NE.0) THEN
+         PRINT*,'CREX ERROR ', IERR
+         GO TO 300
+      END IF
+C
+C
+      IOBS=IOBS+KSEC3(3)
+C
+      ISUBSET=1
+      CALL CREXSEL2(ISUBSET,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1              CNAMES,CUNITS,KERR)
+      IF(KERR.NE.0) THEN
+         PRINT*,'CREXSEL: ERROR.'
+         CALL EXIT(2)
+      END IF
+C
+C*          4.1 PRINT CONTENT OF EXPANDED DATA.
+C               -------------------------------
+ 410  CONTINUE
+C
+      IF(.NOT.OPRT) GO TO 300
+      IF(.NOT.OSEC3) GO TO 450
+C
+C*          4.2 PRINT SECTION ZERO OF CREX MESSAGE.
+C               -----------------------------------
+ 420  CONTINUE
+C
+      CALL CREXPRS0(KSEC0)
+C
+C*          4.3 PRINT SECTION ONE OF CREX MESSAGE.
+C               -----------------------------------
+ 430  CONTINUE
+C
+      ISUBSET=1
+      CALL CREXSEL2(ISUBSET,KELEM,KTDLEN,KTDLST,KTDEXL,KTDEXP,
+     1              CNAMES,CUNITS,KERR)
+      IF(KERR.NE.0) CALL EXIT(2)
+C
+      CALL CREXPRS1(KSEC1,KSEC3,KTDLEN,KTDLST,KTDEXL,
+     1              KTDEXP,KELEM,CNAMES)
+C
+C
+C
+C*          4.5 PRINT SECTION 2 OF CREX MESSAGE.
+C               -----------------------------------
+ 450  CONTINUE
+C
+C
+C*         4.6 PRINT SECTION 2 (DATA).
+C              -----------------------
+ 460  CONTINUE
+C
+C          IN THE CASE OF MANY SUBSETS DEFINE RANGE OF SUBSETS
+C
+      IF(.NOT.OO) THEN
+      WRITE(*,'(A,$)') ' STARTING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I4)')   IST
+      WRITE(*,'(A,$)') ' ENDING SUBSET TO BE PRINTED : '
+      READ(*,'(BN,I4)')   IEND
+      OO=.FALSE.
+      END IF
+C
+C              PRINT DATA
+C
+      ICODE=0
+      CALL CREXPRT(ICODE,IST,IEND,KELEM,CNAMES,CUNITS,CVALS,
+     1             KVALS,VALUES,KSUP,KSEC1,IERR)
+C
+C
+      GO TO 300
+C
+    
+C     -----------------------------------------------------------------
+ 900  CONTINUE
+C
+      END
diff --git a/examples/crex/test.sh b/examples/crex/test.sh
new file mode 100755
index 0000000..6f0674f
--- /dev/null
+++ b/examples/crex/test.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+cd ../../
+path=`pwd`
+
+
+CREX_TABLES=$path/crextables/
+export CREX_TABLES
+
+cd examples/crex
+
+./decode_crex -i ../../data/temp.crex
diff --git a/examples/fft/Makefile b/examples/fft/Makefile
new file mode 100755
index 0000000..05c56cc
--- /dev/null
+++ b/examples/fft/Makefile
@@ -0,0 +1,26 @@
+#
+#                                 Makefile for example programs
+#
+PLACE = ../../
+LIB = emos
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+TARGDIR  = ./
+#
+#
+TARGETS  = all clean
+EXECS    = fft
+#
+#
+all :$(EXECS)
+
+fft: fft.o 
+	$(FC) $(FFLAGS) -o $@ fft.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean   :
+	@for name in $(EXECS); do\
+	(rm -f $$name *.o ); \
+	done 
diff --git a/examples/fft/Makefile.in b/examples/fft/Makefile.in
new file mode 100755
index 0000000..bb0212c
--- /dev/null
+++ b/examples/fft/Makefile.in
@@ -0,0 +1,29 @@
+#
+#                                 Makefile for example programs
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+#
+PLACE = ../../
+LIB = emos
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+TARGDIR  = ./
+#
+TARGETS  = all clean
+EXECS    = fft
+#
+#
+all :$(EXECS)
+
+fft: fft.o 
+	$(FC) $(FFLAGS) -o $@ fft.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean   :
+	@for name in $(EXECS); do\
+	(rm -f $$name *.o ); \
+	done 
diff --git a/examples/fft/fft.f b/examples/fft/fft.f
new file mode 100755
index 0000000..b832a7a
--- /dev/null
+++ b/examples/fft/fft.f
@@ -0,0 +1,30 @@
+      program fft
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+      parameter (n=2*2*3*5,m=20)
+      dimension a((n+2)*m),trigs(n),work(m*(n+1))
+      integer ifax(10)
+      call set99(trigs,ifax,n)
+      do 11 i=1,(n+2)*m
+      a(i)=0
+11    continue
+      do 1 j=1,m
+      do 1 i=1,n
+      a((j-1)*(n+2)+i)=j
+1     continue
+c     write (2,*)(a(i),i=1,n)
+c      t1=secnds(real(0.))
+c     write(*,*)t1
+      call fft99(a,work,trigs,ifax,1,n+2,n,m,-1)
+c      t2=secnds(real(t1))
+c      write(*,*)t2
+      write (*,2)(a(i),i=1,n)
+ 2     format(4(f20.12,2x))
+      end
diff --git a/examples/gribex/Makefile b/examples/gribex/Makefile
new file mode 100755
index 0000000..8a576fd
--- /dev/null
+++ b/examples/gribex/Makefile
@@ -0,0 +1,26 @@
+#
+#                                 Makefile for example programs
+#
+LIBPATH = ../../
+#
+include ../../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../../options/options_$(ARCH)
+#
+TARGETS = all clean
+EXECS   = agrdemo find_t 
+#
+#
+all: $(EXECS)
+
+agrdemo: agrdemo.o
+	$(FC) $(FFLAGS) -o $@ agrdemo.o -L$(LIBPATH) -lemos$(R64)
+
+find_t: find_t.o
+	$(FC) $(FFLAGS) -o $@ find_t.o -L$(LIBPATH) -lemos$(R64)
+
+
+clean:
+	@for name in $(EXECS) ; do\
+	(rm -f $$name $$name.o $$name.f); \
+	done
diff --git a/examples/gribex/Makefile.in b/examples/gribex/Makefile.in
new file mode 100755
index 0000000..68e51db
--- /dev/null
+++ b/examples/gribex/Makefile.in
@@ -0,0 +1,30 @@
+#
+#                                 Makefile for example programs
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+#
+LIBPATH = ../../
+#
+include ../../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../../options/options_$(ARCH)
+#
+TARGETS = all clean
+EXECS   = agrdemo find_t 
+#
+#
+all: $(EXECS)
+
+agrdemo: agrdemo.o
+	$(FC) $(FFLAGS) -o $@ agrdemo.o -L$(LIBPATH) -lemos$(R64)
+
+find_t: find_t.o
+	$(FC) $(FFLAGS) -o $@ find_t.o -L$(LIBPATH) -lemos$(R64)
+
+
+clean:
+	@for name in $(EXECS) ; do\
+	(rm -f $$name $$name.o $$name.f); \
+	done
diff --git a/examples/gribex/README b/examples/gribex/README
new file mode 100755
index 0000000..3238363
--- /dev/null
+++ b/examples/gribex/README
@@ -0,0 +1,36 @@
+
+   This directory contains example for the GRIB decoding and how to handle
+a Unix file containing GRIB edition 1 products in an indexed fashion.
+
+   GRIB data are in ../data directory.
+
+   make
+
+   will compile both examples
+
+   Before you run you have to set two environment variables:
+   ECMWF_LOCAL_TABLE_PATH and LOCAL_DEFINITION_TEMPLATES
+
+   or just run:
+
+   ./test.sh
+
+agrdemo.F :
+
+Executable version of agrdemo.F can be run:
+ 
+./agrdemo -i ../data/latlon.grib
+
+   It will print a listing of the Grib header records together
+with a few of the data values.
+   Also, you can run ./agrdemo for different sort of grib data:
+gaussian.grib , spectral.grib , latlon.grib
+
+find_t.F :
+
+ This program uses PBGPARM to locate temperature fields in a file of GRIB
+products and writes them to a target file.
+
+./find_t -i ../data/850ght.grib -o outputfile
+
+Program can be easy modified to select the geopotencial field instead
diff --git a/examples/gribex/agrdemo.F b/examples/gribex/agrdemo.F
new file mode 100755
index 0000000..e47f33b
--- /dev/null
+++ b/examples/gribex/agrdemo.F
@@ -0,0 +1,265 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM GRDEMO
+C
+      IMPLICIT NONE
+C
+C**** GRDEMO - Program to demonstrate use of GRIBEX routine.
+C
+C     Purpose.
+C     --------
+C
+C     Demonstrates use of GRIBEX routine to unpack
+C     GRIB coded data.
+C
+C**   Interface.
+C     ----------
+C
+C     Method.
+C     -------
+C
+C     Prints sections 0, 1, 2, 3 and 4 of GRIB message.
+C
+C     Externals.
+C     ----------
+C
+C     GRIBEX
+C     GRPRS0
+C     GRPRS1
+C     GRPRS2
+C     GRPRS3
+C     GRPRS4
+C     PBOPEN
+C     PBGRIB
+C     PBCLOSE
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB definition.
+C     WMO Publication No. 9, Volume B, for grid catalogue numbers.
+C
+C     Modifications
+C     -------------
+C
+C     K. Fielding     ECMWF     Dec 2000
+C     Set missing value for bit controlled fields.
+C
+C     Comments.
+C     ---------
+C
+C     GRIBEX provides a number of packing/unpacking options.
+C     See documentation for details.
+C
+C
+C     -----------------------------------------------------------------
+C
+C     Arrays are dimensioned to accommodate T213/N160 data volumes.
+C     JPBYTE is number of bytes per REAL
+C
+      INTEGER JPACK, JPBYTE
+C
+      PARAMETER (JPACK = 280000)
+      PARAMETER (JPBYTE = 4)
+C
+C     Array for integer parameters from section 0 of GRIB message.
+C
+      INTEGER ISEC0 (2)
+C
+C     Array for integer parameters from section 1 of GRIB message.
+C
+      INTEGER ISEC1 (1024)
+C
+C     Array for integer parameters from section 2 of GRIB message.
+C
+      INTEGER ISEC2 (1024)
+C
+C     Array for integer parameters from section 3 of GRIB message.
+C
+      INTEGER ISEC3 (2)
+C
+C     Array for integer parameters from section 4 of GRIB message.
+C
+      INTEGER ISEC4 (512)
+C
+C     Array for real parameters from section 2 of GRIB message.
+C
+      REAL ZSEC2 (512)
+C
+C     Array for real parameters from section 3 of GRIB message.
+C
+      REAL ZSEC3 (2)
+C
+C     Array for real parameters from section 4 of GRIB message.
+C     This is the binary data section and the array to hold
+C     the unpacked data may need to be 4 times as long as that
+C     for the packed data.
+C
+      REAL ZSEC4 (JPACK * 4)
+C
+C     Array to read in packed data.
+C
+      INTEGER INBUFF (JPACK)
+C
+C     GRIBEX routine has a number of encoding/decoding options.
+C
+      CHARACTER*256 YDATAFILE
+      CHARACTER*2 INPUT
+      CHARACTER*1 YOPER
+      INTEGER IFILE, NUMERR, IPBLEN, IWORD, IFILEN, IRET, IARGC, NARGS
+      INTEGER JCOUNT, LENOUT
+      INTEGER JLAT, JLONG, JSTART, JEND
+      REAL ZFIRST, ZLAST, ZSTEP, ZLAT
+      REAL ZMAX
+C
+C     Pick up file names from command line.
+C
+      NARGS = IARGC()
+      IF( NARGS.LT.2 ) THEN
+         print*,'Usage: agrdemo -i inputfile'
+         STOP
+      END IF
+
+      CALL GETARG(1,INPUT)
+
+      IF(INPUT.EQ.'-i') THEN
+         CALL GETARG(2,YDATAFILE)
+      ELSE
+         print*,'Usage: agrdemo -i inputfile' 
+         STOP
+      END IF
+
+C     Clear error counter.
+C
+      NUMERR = 0
+C
+C     Lengths of INBUFF and PSEC4
+C
+      IPBLEN = JPACK * JPBYTE
+C
+      IFILEN = INDEX(YDATAFILE,' ') - 1
+C
+      CALL PBOPEN (IFILE, YDATAFILE (1: IFILEN), 'R', IRET)
+C
+      IF ( IRET .NE. 0 ) THEN
+        WRITE (*, *) ' Return code from PBOPEN = ', IRET
+        CALL PBCLOSE(IFILE, IRET)
+        STOP 'Fault in PBOPEN'
+      ENDIF
+C
+C     Loop through GRIB products in file.
+      JCOUNT = 0
+C
+   50 CONTINUE
+      JCOUNT = JCOUNT + 1
+C
+C     Read packed field into INBUFF.
+      CALL PBGRIB (IFILE, INBUFF, IPBLEN, LENOUT, IRET )
+C
+      IF ( IRET .LT. 0 ) THEN
+        WRITE (*, *) ' Return code from pbgrib = ', IRET
+        IF ( IRET .EQ. -1) THEN
+          WRITE  (*, *) ' End of file. Number of products =', (JCOUNT-1)
+          CALL PBCLOSE (IFILE, IRET)
+          WRITE (*,*) ' GRDEMO : Number of decoding errors = ', NUMERR
+          STOP 'EOF'
+        ELSE
+          WRITE (*, *) ' kret = ',IRET,' after ', JCOUNT,' products.'
+          CALL PBCLOSE (IFILE, IRET)
+          STOP 'Fault in PBGRIB'
+        ENDIF
+      ENDIF
+C
+C     'D' function to unpack entire GRIB message.
+C
+      YOPER = 'D'
+      WRITE (*,*) ' GRDEMO : Function code = ', YOPER
+C
+      IRET = 1
+      LENOUT = LENOUT / JPBYTE
+C
+C     Set missing data values
+C
+      ISEC3 (2) = -99999
+      ZSEC3 (2) = -99999.0
+C
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X             ZSEC4, IPBLEN, INBUFF, LENOUT, IWORD, YOPER, IRET)
+C
+C     Check return code.
+C
+      WRITE (*,*) ' GRDEMO : GRIBEX return code = ', IRET
+      IF (IRET .EQ. - 6) WRITE (*,*) ' GRDEMO : Pseudo-grib data found.'
+      IF (IRET .GT. 0) THEN
+        NUMERR = NUMERR + 1
+        GO TO 50
+      ENDIF
+C
+C     Print section 0 , 1 , 2 and 3 (if present) and 4.
+C     Section 1 is the product definition section.
+C     Section 2 is the grid definition section.
+C     Section 3 is the bit-map section.
+C     Section 4 is the data section.
+C
+      CALL GRPRS0 (ISEC0)
+      CALL GRPRS1 (ISEC0, ISEC1)
+C
+      IF (ISEC1 (5) .EQ. 0 .OR. ISEC1 (5) .EQ. 64) THEN
+        WRITE (*,*) ' GRDEMO : No section 2 in GRIB message.'
+      ELSE
+        CALL GRPRS2 (ISEC0, ISEC2, ZSEC2)
+      ENDIF
+C
+      IF (ISEC1 (5) .EQ. 0 .OR. ISEC1 (5) .EQ. 128) THEN
+        WRITE (*,*) ' GRDEMO : No section 3 in GRIB message.'
+      ELSE
+        CALL GRPRS3 (ISEC0, ISEC3, ZSEC3)
+      ENDIF
+C
+      CALL GRPRS4 (ISEC0, ISEC4, ZSEC4)
+C
+C     Sample code to print maximum and minimum value in data.
+C
+C     ZMAX = ZSEC4 (1)
+C     ZMIN = ZSEC4 (1)
+C
+C     DO JLAT = 2, ISEC4 (1)
+C       ZMAX = MAX (ZMAX, ZSEC4 (JLAT) )
+C       ZMIN = MIN (ZMIN, ZSEC4 (JLAT) )
+C     ENDDO
+C     WRITE (*, *)
+C     WRITE (*, *) 'Maximum value in field is ', ZMAX
+C     WRITE (*, *) 'Minimum value in field is ', ZMIN
+C     WRITE (*, *)
+C
+C     Sample code to print all values along lines of
+C     latitude for a lat/long grid only.
+C
+C     ZFIRST = REAL (ISEC2 (5) ) / 1000.0
+C     ZLAST = REAL (ISEC2 (8) ) / 1000.0
+C     ZSTEP = REAL (ISEC2 (9) ) / 1000.0
+C     WRITE (*, *) 'Longitudes from ', ZFIRST, ' to ', ZLAST,
+C    1  ' with stride ', ZSTEP
+C
+C     DO JLAT = 1, ISEC2 (3)
+C       ZLAT = REAL (ISEC2 (4) - (JLAT - 1) * ISEC2 (10) ) / 1000.0
+C       JSTART = (JLAT - 1) * ISEC2 (2) + 1
+C       JEND = JLAT * ISEC2 (2)
+C       WRITE (*, *)
+C       WRITE (*, *) 'Values at latitude ', ZLAT
+C       WRITE (*, *)
+C       WRITE(*, '(1H , 5E16.5)' )
+C    1    (ZSEC4 (JLONG), JLONG = JSTART, JEND)
+C     ENDDO
+C
+      GO TO 50
+C
+      END
diff --git a/examples/gribex/find_t.F b/examples/gribex/find_t.F
new file mode 100755
index 0000000..ad9c722
--- /dev/null
+++ b/examples/gribex/find_t.F
@@ -0,0 +1,101 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM FIND_T
+      IMPLICIT NONE
+C
+      INTEGER JPACK, JPBYTES
+      PARAMETER (JPACK = 300000)
+      PARAMETER (JPBYTES = 4)
+C
+      INTEGER INBUFF
+      DIMENSION INBUFF(JPACK)
+      INTEGER IRET, NARGS, N, J, ILENB, LENOUT, NTEMPS
+      INTEGER IVALUE, NUMBER, ISIZE, IPARAM, ITEMP, IARGC
+C
+      INTEGER  PBGTOTL, PBGPUT, PBGGET, PBGLENG, PBGPARM
+      EXTERNAL PBGTOTL, PBGPUT, PBGGET, PBGLENG, PBGPARM
+      EXTERNAL GETENV
+C
+      CHARACTER*128 INFILE, OUTFILE, CARG(4)
+C
+C **********************************************************************
+C
+C     Pick up file names from command line.
+C
+      NARGS = IARGC()
+	  IF( NARGS.LT.4 ) THEN
+         print*,'Usage: find_t -i inputfile -o outputfile'
+         STOP
+      END IF
+
+      DO 101 J=1,NARGS
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+
+      DO 102 J=1,NARGS,2
+        IF(CARG(J).EQ.'-i') THEN
+           INFILE=CARG(J+1)
+        ELSEIF(CARG(J).EQ.'-o') THEN
+           OUTFILE=CARG(J+1)
+        ELSE
+            print*,'Usage: find_t -i inputfile -o outputfile'
+            STOP
+        END IF
+ 102  CONTINUE
+C
+C     Count number of GRIBs in the file
+C
+      NUMBER = PBGTOTL(INFILE)
+      WRITE(*,*) 'Number of GRIBs in the file = ', NUMBER
+      IF( NUMBER.EQ.0 ) STOP 'No Gribs found'
+C
+C     Search for temperature fields.
+C     (Temperature is code 130 in table 128.)
+C
+      NTEMPS = 0
+      ITEMP = (128*1000) + 130
+      ILENB = JPACK * JPBYTES
+C
+      DO N = 1, NUMBER
+C
+        IPARAM = PBGPARM(INFILE,N)
+C
+C       Handle the GRIB product if it is a temperature field
+C
+        IF( IPARAM.EQ.ITEMP ) THEN
+C
+C         Check buffer is big enough for GRIB field.
+C
+          ISIZE = PBGLENG(INFILE,N)
+          IF( ISIZE.GT.ILENB ) THEN
+            WRITE(*,*) 'Field size (bytes)  = ', ISIZE
+            WRITE(*,*) 'Buffer size (bytes) = ', ILENB
+            STOP 'Buffer too small for field'
+          ENDIF
+C
+C         Read temperature field and write it to the output file.
+C
+          NTEMPS = NTEMPS + 1
+          LENOUT = PBGGET(INFILE, INBUFF, ILENB, N)
+          IF( LENOUT.LT.0 ) STOP 'Problem reading temperature field'
+C
+          IRET = PBGPUT(OUTFILE, INBUFF, LENOUT)
+          IF( IRET.LT.LENOUT ) STOP 'Problem writing temperature field'
+C
+        ENDIF
+C
+      ENDDO
+C
+      WRITE(*,*) 'Number of temperature fields copied = ', NTEMPS
+      IF( NTEMPS.EQ.0 ) WRITE(*,*) 'No output file created'
+C
+      STOP
+      END
diff --git a/examples/gribex/test.sh b/examples/gribex/test.sh
new file mode 100755
index 0000000..02fa7aa
--- /dev/null
+++ b/examples/gribex/test.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cd ../../
+path=`pwd`
+
+ECMWF_LOCAL_TABLE_PATH=$path/gribtables
+export ECMWF_LOCAL_TABLE_PATH
+
+LOCAL_DEFINITION_TEMPLATES=$path/gribtemplates
+export LOCAL_DEFINITION_TEMPLATES
+
+cd examples/gribex
+
+./agrdemo -i ../../data/latlon.grib
diff --git a/examples/interpolation/Makefile b/examples/interpolation/Makefile
new file mode 100755
index 0000000..6bc5264
--- /dev/null
+++ b/examples/interpolation/Makefile
@@ -0,0 +1,24 @@
+#
+#                                 Makefile for example programs
+#
+PLACE = ../../
+LIB = emos
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+#
+TARGETS = all clean
+EXECS   = interpolation_example
+#
+#
+all: $(EXECS)
+
+interpolation_example: interpolation_example.o
+	$(FC) $(FFLAGS) -o $@ interpolation_example.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean:
+	@for name in $(EXECS) ; do\
+	(rm -f $$name $$name.o $$name.f); \
+	done
diff --git a/examples/interpolation/Makefile.in b/examples/interpolation/Makefile.in
new file mode 100755
index 0000000..12efcf0
--- /dev/null
+++ b/examples/interpolation/Makefile.in
@@ -0,0 +1,28 @@
+#
+#                                 Makefile for example programs
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+#
+LIB = emos
+PLACE = ../../
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+#
+TARGETS = all clean
+EXECS   = interpolation_example
+#
+#
+all: $(EXECS)
+
+interpolation_example: interpolation_example.o
+	$(FC) $(FFLAGS) -o $@ interpolation_example.o -L$(PLACE) -l$(LIB)$(R64)
+
+clean:
+	@for name in $(EXECS) ; do\
+	(rm -f $$name $$name.o $$name.f); \
+	done
diff --git a/examples/interpolation/interpolation_example.F b/examples/interpolation/interpolation_example.F
new file mode 100755
index 0000000..cc38a3f
--- /dev/null
+++ b/examples/interpolation/interpolation_example.F
@@ -0,0 +1,142 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM SAMPLE1
+C
+      IMPLICIT NONE
+      INTEGER IPROD
+      INTEGER INTV
+      REAL REALV
+      CHARACTER*20 CHARV
+      DIMENSION INTV(4), REALV(4), CHARV(4)
+C
+      INTEGER JPGRIB, JPBYTES
+C
+      PARAMETER (JPGRIB = 2000000)
+C
+C     JPBYTES is the size in bytes on an 'INTEGER'
+C     Set JPBYTES = 8 on a 64-bit machine.
+C
+      PARAMETER (JPBYTES = 4)
+C
+      INTEGER INGRIB, NEWFLD
+      DIMENSION INGRIB(JPGRIB), NEWFLD(JPGRIB)
+C
+      REAL ZNFELDI, ZNFELDO
+      DIMENSION ZNFELDI(1), ZNFELDO(1)
+C
+      INTEGER IUNIT1, IUNIT2, IREC, INLEN, NEWLEN, IRET, NARGS
+      INTEGER*4 J
+C
+C     Externals
+      INTEGER INTOUT, INTF, IARGC
+
+      CHARACTER*128 INFILE, OUTFILE, CARG(4)
+C
+C **********************************************************************
+C
+C     Pick up file names from command line.
+C
+      NARGS = IARGC()
+      IF( NARGS.LT.4 ) THEN
+        print*,'Usage: interpolation_example -i inputfile -o outputfile'
+        STOP
+      END IF
+
+      DO 101 J=1,NARGS
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+
+      DO 102 J=1,NARGS,2
+        IF(CARG(J).EQ.'-i') THEN
+           INFILE=CARG(J+1)
+        ELSEIF(CARG(J).EQ.'-o') THEN
+           OUTFILE=CARG(J+1)
+        ELSE
+        print*,'Usage: interpolation_example -i inputfile -o outputfile'
+        STOP
+        END IF
+ 102  CONTINUE
+
+C     Define the packing accuracy for the new field(s).
+C
+      INTV(1) = 24
+      IRET = INTOUT('accuracy', INTV, REALV, CHARV)
+      IF ( IRET.NE.0 ) THEN
+        WRITE(*,*) ' First INTOUT failed.'
+        STOP
+      ENDIF
+C
+C     Define the grid interval for the new field(s).
+C
+cs      REALV(1) = 1.5
+cs      REALV(2) = 1.5
+cs      IRET = INTOUT('grid', INTV, REALV, CHARV)
+      INTV(1) = 640
+      IRET = INTOUT('reduced', INTV, REALV, CHARV)
+      IF ( IRET.NE.0 ) THEN
+        WRITE(*,*) ' Third INTOUT failed.'
+        STOP
+      ENDIF
+
+C
+C     Open input and output files.
+C
+      CALL PBOPEN(IUNIT1, INFILE, 'r', IRET)
+      IF ( IRET.NE.0 ) STOP ' PBOPEN failed'
+      CALL PBOPEN(IUNIT2, OUTFILE, 'w', IRET)
+      IF ( IRET.NE.0 ) STOP ' PBOPEN failed'
+      IPROD = 0
+C
+C     Start of loop through input GRIB-coded fields
+C
+ 200  CONTINUE
+        IPROD = IPROD + 1
+C
+C       Read next product.
+C
+        CALL PBGRIB(IUNIT1, INGRIB, JPGRIB*JPBYTES, IREC, IRET)
+        IF ( IRET.EQ.-1 ) GOTO 900
+        IF ( IRET.NE.0 ) STOP ' PBGRIB failed'
+C
+C       Interpolate.
+C
+        WRITE(*,*) ' Interpolate product number ', IPROD
+        NEWLEN = JPGRIB
+        INLEN  = IREC/JPBYTES
+        IRET = INTF(INGRIB,INLEN,ZNFELDI,NEWFLD,NEWLEN,ZNFELDO)
+        IF ( IRET.NE.0 ) THEN
+          WRITE(*,*) ' INTF failed.'
+          STOP
+        ENDIF
+C
+C       Write the new product to file.
+C
+       CALL PBWRITE( IUNIT2, NEWFLD, NEWLEN*JPBYTES, IRET)
+        IF ( IRET.LT.(NEWLEN*JPBYTES) ) STOP ' PBWRITE failed'
+C
+C       Loop back for next product.
+C
+      GOTO 200
+C
+C     Closedown.
+C
+ 900  CONTINUE
+C
+      IPROD = IPROD - 1
+      WRITE(*,*) ' All done after ', IPROD, ' products.'
+C
+C     Close input and output files.
+C 
+      CALL PBCLOSE(IUNIT1, IRET)
+      CALL PBCLOSE(IUNIT2, IRET)
+C
+      STOP
+      END
diff --git a/examples/interpolation/test.sh b/examples/interpolation/test.sh
new file mode 100755
index 0000000..46f9afa
--- /dev/null
+++ b/examples/interpolation/test.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+cd ../../
+path=`pwd`
+
+export HIRLAM_LSM_PATH=$path/land_sea_mask
+ECMWF_LOCAL_TABLE_PATH=$path/gribtables
+export ECMWF_LOCAL_TABLE_PATH
+
+LOCAL_DEFINITION_TEMPLATES=$path/gribtemplates
+export LOCAL_DEFINITION_TEMPLATES
+
+MARS_LSM_PATH=$path/land_sea_mask
+export MARS_LSM_PATH
+
+cd examples/interpolation
+
+./interpolation_example -i ../../data/latlon.grib -o output.grib
diff --git a/examples/interpolation_grib_api/Makefile b/examples/interpolation_grib_api/Makefile
new file mode 100755
index 0000000..8ac2b46
--- /dev/null
+++ b/examples/interpolation_grib_api/Makefile
@@ -0,0 +1,27 @@
+#
+#                                 Makefile for example programs
+#
+GRIB_API=libgrib_api.a
+JASPER=/usr/lib/libjasper.a
+PLACE = ../../
+LIBEMOS = $(PLACE)$(LIB)$(R64)
+LIB = emos
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+#
+TARGETS = all clean
+EXECS   = interpolation_example
+#
+#
+all: $(EXECS)
+
+interpolation_example: interpolation_example.o $(LIBEMOS)
+	$(FC) $(FFLAGS) -o $@ interpolation_example.o $(LIBEMOS) $(GRIB_API) $(JASPER)
+
+clean:
+	@for name in $(EXECS) ; do\
+	(rm -f $$name $$name.o $$name.f); \
+	done
diff --git a/examples/interpolation_grib_api/Makefile.in b/examples/interpolation_grib_api/Makefile.in
new file mode 100755
index 0000000..de42173
--- /dev/null
+++ b/examples/interpolation_grib_api/Makefile.in
@@ -0,0 +1,34 @@
+#
+#                                 Makefile for example programs
+GRIB_API_DIR=glue
+JASPER_DIR=jasp
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+#
+GRIB_API=$(GRIB_API_DIR)/lib/libgrib_api.a
+#JASPER=/usr/lib/libjasper.a
+JASPER=$(JASPER_DIR)
+LIB = libemos$(R64).a
+PLACE = ../../
+LIBEMOS = $(PLACE)$(LIB)
+#
+include $(PLACE)config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include $(PLACE)options/options_$(ARCH)
+#
+#
+TARGETS = all clean
+EXECS   = interpolation_example
+#
+#
+all: $(EXECS)
+
+interpolation_example: interpolation_example.o $(LIBEMOS)
+	$(FC) $(FFLAGS) -o $@ interpolation_example.o $(LIBEMOS) $(GRIB_API) $(JASPER)
+
+clean:
+	@for name in $(EXECS) ; do\
+	(rm -f $$name $$name.o $$name.f); \
+	done
diff --git a/examples/interpolation_grib_api/interpolation_example.F b/examples/interpolation_grib_api/interpolation_example.F
new file mode 100755
index 0000000..1f2b77c
--- /dev/null
+++ b/examples/interpolation_grib_api/interpolation_example.F
@@ -0,0 +1,151 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       PROGRAM SAMPLE1
+C
+      IMPLICIT NONE
+      INTEGER IPROD
+      INTEGER INTV
+      REAL REALV
+      CHARACTER*20 CHARV
+      DIMENSION INTV(4), REALV(4), CHARV(4)
+C
+      INTEGER JPGRIB, JPBYTES
+C
+      PARAMETER (JPGRIB = 2000000)
+C
+C     JPBYTES is the size in bytes on an 'INTEGER'
+C     Set JPBYTES = 8 on a 64-bit machine.
+C
+      PARAMETER (JPBYTES = 4)
+C
+      INTEGER INGRIB, NEWFLD
+      DIMENSION INGRIB(JPGRIB), NEWFLD(JPGRIB)
+C
+      REAL ZNFELDI, ZNFELDO
+      DIMENSION ZNFELDI(1), ZNFELDO(1)
+C
+      INTEGER IUNIT1, IUNIT2, IREC, INLEN, NEWLEN, IRET, NARGS
+      INTEGER*4 J
+C
+C     Externals
+      INTEGER INTOUT, INTF2, IARGC
+
+      CHARACTER*128 INFILE, OUTFILE, CARG(4)
+C
+C **********************************************************************
+C
+C     Pick up file names from command line.
+C
+      NARGS = IARGC()
+      IF( NARGS.LT.4 ) THEN
+        print*,'Usage: interpolation_example -i inputfile -o outputfile'
+        STOP
+      END IF
+
+      DO 101 J=1,NARGS
+      CALL GETARG(J,CARG(J))
+ 101  CONTINUE
+
+      DO 102 J=1,NARGS,2
+        IF(CARG(J).EQ.'-i') THEN
+           INFILE=CARG(J+1)
+        ELSEIF(CARG(J).EQ.'-o') THEN
+           OUTFILE=CARG(J+1)
+        ELSE
+        print*,'Usage: interpolation_example -i inputfile -o outputfile'
+        STOP
+        END IF
+ 102  CONTINUE
+
+C     Define the packing accuracy for the new field(s).
+C
+      INTV(1) = 24
+      IRET = INTOUT('accuracy', INTV, REALV, CHARV)
+      IF ( IRET.NE.0 ) THEN
+        WRITE(*,*) ' First INTOUT failed.'
+        STOP
+      ENDIF
+C
+C     Define the geographical area for the new field(s).
+C
+      REALV(1) =  60.0
+      REALV(2) = -10.0
+      REALV(3) =  40.0
+      REALV(4) =  15.0
+      IRET = INTOUT('area', INTV, REALV, CHARV)
+      IF ( IRET.NE.0 ) THEN
+        WRITE(*,*) ' Second INTOUT failed.'
+        STOP
+      ENDIF
+C
+C     Define the grid interval for the new field(s).
+C
+      REALV(1) = 1.5
+      REALV(2) = 1.5
+      IRET = INTOUT('grid', INTV, REALV, CHARV)
+      IF ( IRET.NE.0 ) THEN
+        WRITE(*,*) ' Third INTOUT failed.'
+        STOP
+      ENDIF
+C
+C     Open input and output files.
+C
+      CALL PBOPEN(IUNIT1, INFILE, 'r', IRET)
+      IF ( IRET.NE.0 ) STOP ' PBOPEN failed'
+      CALL PBOPEN(IUNIT2, OUTFILE, 'w', IRET)
+      IF ( IRET.NE.0 ) STOP ' PBOPEN failed'
+      IPROD = 0
+C
+C     Start of loop through input GRIB-coded fields
+C
+ 200  CONTINUE
+        IPROD = IPROD + 1
+C
+C       Read next product.
+C
+        CALL PBGRIB(IUNIT1, INGRIB, JPGRIB*JPBYTES, IREC, IRET)
+        IF ( IRET.EQ.-1 ) GOTO 900
+        IF ( IRET.NE.0 ) STOP ' PBGRIB failed'
+C
+C       Interpolate.
+C
+        WRITE(*,*) ' Interpolate product number ', IPROD
+        NEWLEN = JPGRIB
+        INLEN  = IREC
+        IRET = INTF2(INGRIB,INLEN,NEWFLD,NEWLEN)
+        IF ( IRET.NE.0 ) THEN
+          WRITE(*,*) ' INTF failed.'
+          STOP
+        ENDIF
+C
+C       Write the new product to file.
+C
+       CALL PBWRITE( IUNIT2, NEWFLD, NEWLEN*JPBYTES, IRET)
+        IF ( IRET.LT.(NEWLEN*JPBYTES) ) STOP ' PBWRITE failed'
+C
+C       Loop back for next product.
+C
+      GOTO 200
+C
+C     Closedown.
+C
+ 900  CONTINUE
+C
+      IPROD = IPROD - 1
+      WRITE(*,*) ' All done after ', IPROD, ' products.'
+C
+C     Close input and output files.
+C 
+      CALL PBCLOSE(IUNIT1, IRET)
+      CALL PBCLOSE(IUNIT2, IRET)
+C
+      STOP
+      END
diff --git a/examples/interpolation_grib_api/test.sh b/examples/interpolation_grib_api/test.sh
new file mode 100755
index 0000000..e486f33
--- /dev/null
+++ b/examples/interpolation_grib_api/test.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+cd ../../
+path=`pwd`
+
+export HIRLAM_LSM_PATH=$path/land_sea_mask
+ECMWF_LOCAL_TABLE_PATH=$path/gribtables
+export ECMWF_LOCAL_TABLE_PATH
+
+LOCAL_DEFINITION_TEMPLATES=$path/gribtemplates
+export LOCAL_DEFINITION_TEMPLATES
+
+MARS_LSM_PATH=$path/land_sea_mask
+export MARS_LSM_PATH
+
+cd examples/interpolation_grib_api
+
+./interpolation_example -i ../../data/tigge.grib2 -o output.grib
diff --git a/fft/Makefile b/fft/Makefile
new file mode 100755
index 0000000..3067e86
--- /dev/null
+++ b/fft/Makefile
@@ -0,0 +1,30 @@
+#
+#                                 Makefile for libemos/bufrdc
+#
+LIBRARY      = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+	$(LIBRARY) : $(LIBRARY)($(OBJECTS))
+#$(LIBRARY): $(OBJECTS)
+	#$(AR) $(ARFLAGS) $@ $?
+	#$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/fft/Makefile.in b/fft/Makefile.in
new file mode 100755
index 0000000..3ef42e4
--- /dev/null
+++ b/fft/Makefile.in
@@ -0,0 +1,34 @@
+#
+#                                 Makefile for bufrdc
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+LIB = depl
+CNAME = comp
+
+LIBRARY = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/fft/Makefile.shared b/fft/Makefile.shared
new file mode 100755
index 0000000..8581025
--- /dev/null
+++ b/fft/Makefile.shared
@@ -0,0 +1,30 @@
+#
+#                                 Makefile for libemos/bufrdc
+#
+LIBRARY      = ../lib$(LIB)$(R64).so
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+PROFILE=$(SHLIB)
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(LD) $(DYNLINKFLAGS) $? -o $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/fft/fax.f b/fft/fax.f
new file mode 100755
index 0000000..20ecfd4
--- /dev/null
+++ b/fft/fax.f
@@ -0,0 +1,78 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE FAX(IFAX,N,MODE)
+      DIMENSION IFAX(10)
+      COMMON /QQQQFFT/ IXXX
+C
+C     MARK INITIALISATION AS 'OLD' TYPE
+C
+      IXXX=0
+C
+      NN=N
+      IF (IABS(MODE).EQ.1) GO TO 10
+      IF (IABS(MODE).EQ.8) GO TO 10
+      NN=N/2
+      IF ((NN+NN).EQ.N) GO TO 10
+      IFAX(1)=-99
+      RETURN
+   10 K=1
+C     TEST FOR FACTORS OF 4
+   20 IF (MOD(NN,4).NE.0) GO TO 30
+      K=K+1
+      IFAX(K)=4
+      NN=NN/4
+      IF (NN.EQ.1) GO TO 80
+      GO TO 20
+C     TEST FOR EXTRA FACTOR OF 2
+   30 IF (MOD(NN,2).NE.0) GO TO 40
+      K=K+1
+      IFAX(K)=2
+      NN=NN/2
+      IF (NN.EQ.1) GO TO 80
+C     TEST FOR FACTORS OF 3
+   40 IF (MOD(NN,3).NE.0) GO TO 50
+      K=K+1
+      IFAX(K)=3
+      NN=NN/3
+      IF (NN.EQ.1) GO TO 80
+      GO TO 40
+C     NOW FIND REMAINING FACTORS
+   50 L=5
+      INC=2
+C     INC ALTERNATELY TAKES ON VALUES 2 AND 4
+   60 IF (MOD(NN,L).NE.0) GO TO 70
+      K=K+1
+      IFAX(K)=L
+      NN=NN/L
+      IF (NN.EQ.1) GO TO 80
+      GO TO 60
+   70 L=L+INC
+      INC=6-INC
+      GO TO 60
+   80 IFAX(1)=K-1
+C     IFAX(1) CONTAINS NUMBER OF FACTORS
+C     IFAX(1) CONTAINS NUMBER OF FACTORS
+      NFAX=IFAX(1)
+C     SORT FACTORS INTO ASCENDING ORDER
+      IF (NFAX.EQ.1) GO TO 110
+      DO 100 II=2,NFAX
+      ISTOP=NFAX+2-II
+      DO 90 I=2,ISTOP
+      IF (IFAX(I+1).GE.IFAX(I)) GO TO 90
+      ITEM=IFAX(I)
+      IFAX(I)=IFAX(I+1)
+      IFAX(I+1)=ITEM
+   90 CONTINUE
+  100 CONTINUE
+  110 CONTINUE
+      IFAX(10)=0
+      RETURN
+      END
diff --git a/fft/fft99.f b/fft/fft99.f
new file mode 100755
index 0000000..081c0a4
--- /dev/null
+++ b/fft/fft99.f
@@ -0,0 +1,218 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE FFT99(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+      DIMENSION A(N),WORK(N),TRIGS(N),IFAX(*)
+C
+C     SUBROUTINE 'FFT99' - MULTIPLE FAST REAL PERIODIC TRANSFORM
+C     SUPERSEDES PREVIOUS ROUTINE 'FFT99'
+C
+C     REAL TRANSFORM OF LENGTH N PERFORMED BY REMOVING REDUNDANT
+C     OPERATIONS FROM COMPLEX TRANSFORM OF LENGTH N
+C
+C     A IS THE ARRAY CONTAINING INPUT & OUTPUT DATA
+C     WORK IS AN AREA OF SIZE (N+1)*MIN(LOT,64)
+C     TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES
+C     IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N
+C     INC IS THE INCREMENT WITHIN EACH DATA 'VECTOR'
+C         (E.G. INC=1 FOR CONSECUTIVELY STORED DATA)
+C     JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR
+C     N IS THE LENGTH OF THE DATA VECTORS
+C     LOT IS THE NUMBER OF DATA VECTORS
+C     ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT
+C           = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL
+C
+C     ORDERING OF COEFFICIENTS:
+C         A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2)
+C         WHERE B(0)=B(N/2)=0; (N+2) LOCATIONS REQUIRED
+C
+C     ORDERING OF DATA:
+C         X(N-1),X(0),X(1),X(2),...,X(N-1),X(0)
+C         I.E. EXPLICIT CYCLIC CONTINUITY; (N+2) LOCATIONS REQUIRED
+C
+C     VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS
+C     IN PARALLEL
+C
+C     N MUST BE COMPOSED OF FACTORS 2,3 & 5 BUT DOES NOT HAVE TO BE EVEN
+C
+C     DEFINITION OF TRANSFORMS:
+C     -------------------------
+C
+C     ISIGN=+1: X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N))
+C         WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K)
+C
+C     ISIGN=-1: A(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N))
+C               B(K)=-(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N))
+C
+      IF(IFAX(10).NE.N) CALL SET99(TRIGS,IFAX,N)
+      NFAX=IFAX(1)
+      NX=N+1
+      IF (MOD(N,2).EQ.1) NX=N
+      NBLOX=1+(LOT-1)/64
+      NVEX=LOT-(NBLOX-1)*64
+      IF (ISIGN.EQ.-1) GO TO 300
+C
+C     ISIGN=+1, SPECTRAL TO GRIDPOINT TRANSFORM
+C     -----------------------------------------
+  100 CONTINUE
+      ISTART=1
+      DO 220 NB=1,NBLOX
+      IA=ISTART
+      I=ISTART
+      DO 110 J=1,NVEX
+      A(I+INC)=0.5*A(I)
+      I=I+JUMP
+  110 CONTINUE
+      IF (MOD(N,2).EQ.1) GO TO 130
+      I=ISTART+N*INC
+      DO 120 J=1,NVEX
+      A(I)=0.5*A(I)
+      I=I+JUMP
+  120 CONTINUE
+  130 CONTINUE
+      IA=ISTART+INC
+      LA=1
+      IGO=+1
+C
+      DO 160 K=1,NFAX
+      IFAC=IFAX(K+1)
+      IERR=-1
+      IF (IGO.EQ.-1) GO TO 140
+      CALL RPASSM(A(IA),A(IA+LA*INC),WORK(1),WORK(IFAC*LA+1),TRIGS,
+     *    INC,1,JUMP,NX,NVEX,N,IFAC,LA,IERR)
+      GO TO 150
+  140 CONTINUE
+      CALL RPASSM(WORK(1),WORK(LA+1),A(IA),A(IA+IFAC*LA*INC),TRIGS,
+     *    1,INC,NX,JUMP,NVEX,N,IFAC,LA,IERR)
+  150 CONTINUE
+      IF (IERR.NE.0) GO TO 500
+      LA=IFAC*LA
+      IGO=-IGO
+      IA=ISTART+INC
+  160 CONTINUE
+C
+C     IF NECESSARY, COPY RESULTS BACK TO A
+C     ------------------------------------
+      IF (MOD(NFAX,2).EQ.0) GO TO 190
+      IBASE=1
+      JBASE=IA
+      DO 180 JJ=1,NVEX
+      I=IBASE
+      J=JBASE
+      DO 170 II=1,N
+      A(J)=WORK(I)
+      I=I+1
+      J=J+INC
+  170 CONTINUE
+      IBASE=IBASE+NX
+      JBASE=JBASE+JUMP
+  180 CONTINUE
+  190 CONTINUE
+C
+C     FILL IN CYCLIC BOUNDARY VALUES
+C     ------------------------------
+      IX=ISTART
+      IZ=ISTART+N*INC
+CDIR$ IVDEP
+      DO 200 J=1,NVEX
+      A(IX)=A(IZ)
+      A(IZ+INC)=A(IX+INC)
+      IX=IX+JUMP
+      IZ=IZ+JUMP
+  200 CONTINUE
+C
+      ISTART=ISTART+NVEX*JUMP
+      NVEX=64
+  220 CONTINUE
+      RETURN
+C
+C     ISIGN=-1, GRIDPOINT TO SPECTRAL TRANSFORM
+C     -----------------------------------------
+  300 CONTINUE
+      ISTART=1
+      DO 410 NB=1,NBLOX
+      IA=ISTART+INC
+      LA=N
+      IGO=+1
+C
+      DO 340 K=1,NFAX
+      IFAC=IFAX(NFAX+2-K)
+      LA=LA/IFAC
+      IERR=-1
+      IF (IGO.EQ.-1) GO TO 320
+      CALL QPASSM(A(IA),A(IA+IFAC*LA*INC),WORK(1),WORK(LA+1),TRIGS,
+     *    INC,1,JUMP,NX,NVEX,N,IFAC,LA,IERR)
+      GO TO 330
+  320 CONTINUE
+      CALL QPASSM(WORK(1),WORK(IFAC*LA+1),A(IA),A(IA+LA*INC),TRIGS,
+     *    1,INC,NX,JUMP,NVEX,N,IFAC,LA,IERR)
+  330 CONTINUE
+      IF (IERR.NE.0) GO TO 500
+      IGO=-IGO
+      IA=ISTART+INC
+  340 CONTINUE
+C
+C     IF NECESSARY, COPY RESULTS BACK TO A
+C     ------------------------------------
+      IF (MOD(NFAX,2).EQ.0) GO TO 370
+      IBASE=1
+      JBASE=IA
+      DO 360 JJ=1,NVEX
+      I=IBASE
+      J=JBASE
+      DO 350 II=1,N
+      A(J)=WORK(I)
+      I=I+1
+      J=J+INC
+  350 CONTINUE
+      IBASE=IBASE+NX
+      JBASE=JBASE+JUMP
+  360 CONTINUE
+  370 CONTINUE
+C
+C     SHIFT A(0) & FILL IN ZERO IMAG PARTS
+C     ------------------------------------
+      IX=ISTART
+      DO 380 J=1,NVEX
+      A(IX)=A(IX+INC)
+      A(IX+INC)=0.0
+      IX=IX+JUMP
+  380 CONTINUE
+      IF (MOD(N,2).EQ.1) GO TO 400
+      IZ=ISTART+(N+1)*INC
+      DO 390 J=1,NVEX
+      A(IZ)=0.0
+      IZ=IZ+JUMP
+  390 CONTINUE
+  400 CONTINUE
+C
+      ISTART=ISTART+NVEX*JUMP
+      NVEX=64
+  410 CONTINUE
+      RETURN
+C
+C     ERROR MESSAGES
+C     --------------
+  500 CONTINUE
+      GO TO (510,530,550) IERR
+  510 CONTINUE
+      WRITE(6,520) NVEX
+  520 FORMAT('1VECTOR LENGTH =',I4,', GREATER THAN 64')
+      GO TO 570
+  530 CONTINUE
+      WRITE(6,540) IFAC
+  540 FORMAT( '1FACTOR =',I3,', NOT CATERED FOR')
+      GO TO 570
+  550 CONTINUE
+      WRITE(6,560) IFAC
+  560 FORMAT('1FACTOR =',I3,', ONLY CATERED FOR IF LA*IFAC=N')
+  570 CONTINUE
+      RETURN
+      END
diff --git a/fft/fft991.f b/fft/fft991.f
new file mode 100755
index 0000000..073f333
--- /dev/null
+++ b/fft/fft991.f
@@ -0,0 +1,218 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE FFT991(A,WORK,TRIGS,IFAX,INC,JUMP,N,ILOT,ISIGN)
+      REAL A(*),WORK(*),
+     *  TRIGS(*)
+      INTEGER IFAX(*)
+C
+C     SUBROUTINE 'FFT991' - MULTIPLE FAST REAL PERIODIC TRANSFORM
+C     SUPERSEDES PREVIOUS ROUTINE 'FFT991'
+C
+C     REAL TRANSFORM OF LENGTH N PERFORMED BY REMOVING REDUNDANT
+C     OPERATIONS FROM COMPLEX TRANSFORM OF LENGTH N
+C
+C     A IS THE ARRAY CONTAINING INPUT & OUTPUT DATA
+C     WORK IS AN AREA OF SIZE (N+1)*MIN(ILOT,JP_LOT)
+C     TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES
+C     IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N
+C     INC IS THE INCREMENT WITHIN EACH DATA 'VECTOR'
+C         (E.G. INC=1 FOR CONSECUTIVELY STORED DATA)
+C     JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR
+C     N IS THE LENGTH OF THE DATA VECTORS
+C     ILOT IS THE NUMBER OF DATA VECTORS
+C     ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT
+C           = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL
+C
+C     ORDERING OF COEFFICIENTS:
+C         A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2)
+C         WHERE B(0)=B(N/2)=0; (N+2) LOCATIONS REQUIRED
+C
+C     ORDERING OF DATA:
+C         X(0),X(1),X(2),...,X(N-1), 0 , 0 ; (N+2) LOCATIONS REQUIRED
+C
+C     VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS
+C     IN PARALLEL
+C
+C     N MUST BE COMPOSED OF FACTORS 2,3 & 5 BUT DOES NOT HAVE TO BE EVEN
+C
+C     DEFINITION OF TRANSFORMS:
+C     -------------------------
+C
+C     ISIGN=+1: X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N))
+C         WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K)
+C
+C     ISIGN=-1: A(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N))
+C               B(K)=-(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N))
+C
+      IF(IFAX(10).NE.N) CALL SET99(TRIGS,IFAX,N)
+      NFAX=IFAX(1)
+      NX=N+1
+      IF (MOD(N,2).EQ.1) NX=N
+cfse  NBLOX=1+(ILOT-1)/64
+cfse  NVEX=ILOT-(NBLOX-1)*64
+      NBLOX=1+(ILOT-1)/512
+      NVEX=ILOT-(NBLOX-1)*512
+      IF (ISIGN.EQ.-1) GO TO 300
+C
+C     ISIGN=+1, SPECTRAL TO GRIDPOINT TRANSFORM
+C     -----------------------------------------
+  100 CONTINUE
+      ISTART=1
+      DO 220 NB=1,NBLOX
+      IA=ISTART
+      I=ISTART
+*vocl loop,novrec
+      DO 110 J=1,NVEX
+      A(I+INC)=0.5*A(I)
+      I=I+JUMP
+  110 CONTINUE
+      IF (MOD(N,2).EQ.1) GO TO 130
+      I=ISTART+N*INC
+*vocl loop,novrec
+      DO 120 J=1,NVEX
+      A(I)=0.5*A(I)
+      I=I+JUMP
+  120 CONTINUE
+  130 CONTINUE
+      IA=ISTART+INC
+      ILA=1
+      IGO=+1
+C
+      DO 160 K=1,NFAX
+      IFAC=IFAX(K+1)
+      IERR=-1
+      IF (IGO.EQ.-1) GO TO 140
+      CALL RPASSM(A(IA),A(IA+ILA*INC),WORK(1),WORK(IFAC*ILA+1),TRIGS,
+     *    INC,1,JUMP,NX,NVEX,N,IFAC,ILA,IERR)
+      GO TO 150
+  140 CONTINUE
+      CALL RPASSM(WORK(1),WORK(ILA+1),A(IA),A(IA+IFAC*ILA*INC),TRIGS,
+     *    1,INC,NX,JUMP,NVEX,N,IFAC,ILA,IERR)
+  150 CONTINUE
+      IF (IERR.NE.0) GO TO 500
+      ILA=IFAC*ILA
+      IGO=-IGO
+      IA=ISTART
+  160 CONTINUE
+C
+C     IF NECESSARY, COPY RESULTS BACK TO A
+C     ------------------------------------
+      IF (MOD(NFAX,2).EQ.0) GO TO 190
+      IBASE=1
+      JBASE=IA
+      DO 180 JJ=1,NVEX
+      I=IBASE
+      J=JBASE
+      DO 170 II=1,N
+      A(J)=WORK(I)
+      I=I+1
+      J=J+INC
+  170 CONTINUE
+      IBASE=IBASE+NX
+      JBASE=JBASE+JUMP
+  180 CONTINUE
+  190 CONTINUE
+C
+C     FILL IN ZEROS AT END
+C     --------------------
+      IX=ISTART+N*INC
+*vocl loop,novrec
+      DO 210 J=1,NVEX
+      A(IX)=0.0
+      A(IX+INC)=0.0
+      IX=IX+JUMP
+  210 CONTINUE
+C
+      ISTART=ISTART+NVEX*JUMP
+cfse  NVEX=64
+      NVEX=512
+  220 CONTINUE
+      RETURN
+C
+C     ISIGN=-1, GRIDPOINT TO SPECTRAL TRANSFORM
+C     -----------------------------------------
+  300 CONTINUE
+      ISTART=1
+      DO 410 NB=1,NBLOX
+      IA=ISTART
+      ILA=N
+      IGO=+1
+C
+      DO 340 K=1,NFAX
+      IFAC=IFAX(NFAX+2-K)
+      ILA=ILA/IFAC
+      IERR=-1
+      IF (IGO.EQ.-1) GO TO 320
+      CALL QPASSM(A(IA),A(IA+IFAC*ILA*INC),WORK(1),WORK(ILA+1),TRIGS,
+     *    INC,1,JUMP,NX,NVEX,N,IFAC,ILA,IERR)
+      GO TO 330
+  320 CONTINUE
+      CALL QPASSM(WORK(1),WORK(IFAC*ILA+1),A(IA),A(IA+ILA*INC),TRIGS,
+     *    1,INC,NX,JUMP,NVEX,N,IFAC,ILA,IERR)
+  330 CONTINUE
+      IF (IERR.NE.0) GO TO 500
+      IGO=-IGO
+      IA=ISTART+INC
+  340 CONTINUE
+C
+C     IF NECESSARY, COPY RESULTS BACK TO A
+C     ------------------------------------
+      IF (MOD(NFAX,2).EQ.0) GO TO 370
+      IBASE=1
+      JBASE=IA
+      DO 360 JJ=1,NVEX
+      I=IBASE
+      J=JBASE
+      DO 350 II=1,N
+      A(J)=WORK(I)
+      I=I+1
+      J=J+INC
+  350 CONTINUE
+      IBASE=IBASE+NX
+      JBASE=JBASE+JUMP
+  360 CONTINUE
+  370 CONTINUE
+C
+C     SHIFT A(0) & FILL IN ZERO IMAG PARTS
+C     ------------------------------------
+      IX=ISTART
+      DO 380 J=1,NVEX
+      A(IX)=A(IX+INC)
+      A(IX+INC)=0.0
+      IX=IX+JUMP
+  380 CONTINUE
+      IF (MOD(N,2).EQ.1) GO TO 400
+      IZ=ISTART+(N+1)*INC
+      DO 390 J=1,NVEX
+      A(IZ)=0.0
+      IZ=IZ+JUMP
+  390 CONTINUE
+  400 CONTINUE
+C
+      ISTART=ISTART+NVEX*JUMP
+cfse  NVEX=64
+      NVEX=512
+  410 CONTINUE
+      RETURN
+C
+C     ERROR MESSAGES
+C     --------------
+  500 CONTINUE
+      IF(IERR.EQ.1) THEN
+  520 FORMAT('VECTOR LENGTH =',I4,', GREATER THAN 64')
+      ELSEIF(IERR.EQ.2) THEN
+      WRITE(6,540) IFAC
+  540 FORMAT( 'FACTOR =',I3,', NOT CATERED FOR')
+      ELSE
+      WRITE(6,560) IFAC
+  560 FORMAT('FACTOR =',I3,', ONLY CATERED FOR IF ILA*IFAC=N')
+      ENDIF
+      END
diff --git a/fft/fftrig.f b/fft/fftrig.f
new file mode 100755
index 0000000..3349fa9
--- /dev/null
+++ b/fft/fftrig.f
@@ -0,0 +1,57 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE FFTRIG(TRIGS,N,MODE)
+      DIMENSION TRIGS(N)
+      COMMON /QQQQFFT/ IXXX
+C
+C     MARK INITIALISATION AS 'OLD' TYPE
+C
+      IXXX=0
+C
+      PI=2.0*ASIN(1.0)
+      IMODE=IABS(MODE)
+      NN=N
+      IF (IMODE.GT.1.AND.IMODE.LT.6) NN=N/2
+      DEL=(PI+PI)/FLOAT(NN)
+      L=NN+NN
+      DO 10 I=1,L,2
+      ANGLE=0.5*FLOAT(I-1)*DEL
+      TRIGS(I)=COS(ANGLE)
+      TRIGS(I+1)=SIN(ANGLE)
+   10 CONTINUE
+      IF (IMODE.EQ.1) RETURN
+      IF (IMODE.EQ.8) RETURN
+      DEL=0.5*DEL
+      NH=(NN+1)/2
+      L=NH+NH
+      LA=NN+NN
+      DO 20 I=1,L,2
+      ANGLE=0.5*FLOAT(I-1)*DEL
+      TRIGS(LA+I)=COS(ANGLE)
+      TRIGS(LA+I+1)=SIN(ANGLE)
+   20 CONTINUE
+      IF (IMODE.LE.3) RETURN
+      DEL=0.5*DEL
+      LA=LA+NN
+      IF (MODE.EQ.5) GO TO 40
+      DO 30 I=2,NN
+      ANGLE=FLOAT(I-1)*DEL
+      TRIGS(LA+I)=2.0*SIN(ANGLE)
+   30 CONTINUE
+      RETURN
+   40 CONTINUE
+      DEL=0.5*DEL
+      DO 50 I=2,N
+      ANGLE=FLOAT(I-1)*DEL
+      TRIGS(LA+I)=SIN(ANGLE)
+   50 CONTINUE
+      RETURN
+      END
diff --git a/fft/gpfa.f b/fft/gpfa.f
new file mode 100755
index 0000000..df52ff8
--- /dev/null
+++ b/fft/gpfa.f
@@ -0,0 +1,98 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE GPFA(A,B,TRIGS,INC,JUMP,N,LOT,ISIGN)
+*
+*        SUBROUTINE 'GPFA'
+*        SELF-SORTING IN-PLACE GENERALIZED PRIME FACTOR (COMPLEX) FFT
+*
+*        CALL GPFA(A,B,TRIGS,INC,JUMP,N,LOT,ISIGN)
+*
+*        A IS FIRST REAL INPUT/OUTPUT VECTOR
+*        B IS FIRST IMAGINARY INPUT/OUTPUT VECTOR
+*        TRIGS IS A TABLE OF TWIDDLE FACTORS, PRECALCULATED
+*              BY CALLING SUBROUTINE 'SETGPFA'
+*        INC IS THE INCREMENT WITHIN EACH DATA VECTOR
+*        JUMP IS THE INCREMENT BETWEEN DATA VECTORS
+*        N IS THE LENGTH OF THE TRANSFORMS:
+*          -----------------------------------
+*            N = (2**IP) * (3**IQ) * (5**IR)
+*          -----------------------------------
+*        LOT IS THE NUMBER OF TRANSFORMS
+*        ISIGN = +1 FOR FORWARD TRANSFORM
+*              = -1 FOR INVERSE TRANSFORM
+*
+*        WRITTEN BY CLIVE TEMPERTON ECMWF 1990
+*
+*----------------------------------------------------------------------
+*
+*        DEFINITION OF TRANSFORM
+*        -----------------------
+*
+*        X(J) = SUM(K=0,...,N-1)(C(K)*EXP(ISIGN*2*I*J*K*PI/N))
+*
+*---------------------------------------------------------------------
+*
+*        FOR A MATHEMATICAL DEVELOPMENT OF THE ALGORITHM USED,
+*        SEE:
+*
+*        C TEMPERTON : "A GENERALIZED PRIME FACTOR FFT ALGORITHM
+*          FOR ANY N = (2**P)(3**Q)(5**R)",
+*          SIAM J. SCI. STAT. COMP., MAY 1992.
+*
+*----------------------------------------------------------------------
+*
+      DIMENSION A(*), B(*), TRIGS(*)
+      DIMENSION NJ(3)
+*
+*     DECOMPOSE N INTO FACTORS 2,3,5
+*     ------------------------------
+      NN = N
+      IFAC = 2
+*
+      DO 30 LL = 1 , 3
+      KK = 0
+   10 CONTINUE
+      IF (MOD(NN,IFAC).NE.0) GO TO 20
+      KK = KK + 1
+      NN = NN / IFAC
+      GO TO 10
+   20 CONTINUE
+      NJ(LL) = KK
+      IFAC = IFAC + LL
+   30 CONTINUE
+*
+      IF (NN.NE.1) THEN
+         WRITE(6,40) N
+   40    FORMAT(' *** WARNING!!!',I10,' IS NOT A LEGAL VALUE OF N ***')
+         RETURN
+      ENDIF
+*
+      IP = NJ(1)
+      IQ = NJ(2)
+      IR = NJ(3)
+*
+*     COMPUTE THE TRANSFORM
+*     ---------------------
+      I = 1
+      IF (IP.GT.0) THEN
+         CALL GPFA2(A,B,TRIGS,INC,JUMP,N,IP,LOT,ISIGN)
+         I = I + 2 * ( 2**IP)
+      ENDIF
+      IF (IQ.GT.0) THEN
+         CALL GPFA3(A,B,TRIGS(I),INC,JUMP,N,IQ,LOT,ISIGN)
+         I = I + 2 * (3**IQ)
+      ENDIF
+      IF (IR.GT.0) THEN
+         CALL GPFA5(A,B,TRIGS(I),INC,JUMP,N,IR,LOT,ISIGN)
+      ENDIF
+*
+      RETURN
+      END
diff --git a/fft/gpfa2.F b/fft/gpfa2.F
new file mode 100755
index 0000000..e621d9c
--- /dev/null
+++ b/fft/gpfa2.F
@@ -0,0 +1,834 @@
+      subroutine gpfa2(a,b,trigs,inc,jump,n,mm,lot,isign)
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+*     fortran version of *gpfa2* -
+*     radix-2 section of self-sorting, in-place, generalized pfa
+*     central radix-2 and radix-8 passes included
+*      so that transform length can be any power of 2
+*
+*-------------------------------------------------------------------
+*
+      dimension a(*), b(*), trigs(*)
+      data lvr/128/
+*
+*     ***************************************************************
+*     *                                                             *
+*     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. *
+*     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE *
+*     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      *
+*     *                                                             *
+*     ***************************************************************
+*
+      n2 = 2**mm
+      inq = n/n2
+      jstepx = (n2-n) * inc
+      ninc = n * inc
+      ink = inc * inq
+*
+      m2 = 0
+      m8 = 0
+      if (mod(mm,2).eq.0) then
+         m = mm/2
+      else if (mod(mm,4).eq.1) then
+         m = (mm-1)/2
+         m2 = 1
+      else if (mod(mm,4).eq.3) then
+         m = (mm-3)/2
+         m8 = 1
+      endif
+      mh = (m+1)/2
+*
+      nblox = 1 + (lot-1)/lvr
+      left = lot
+      s = float(isign)
+      istart = 1
+*
+*  loop on blocks of lvr transforms
+*  --------------------------------
+      do 500 nb = 1 , nblox
+*
+      if (left.le.lvr) then
+         nvex = left
+      else if (left.lt.(2*lvr)) then
+         nvex = left/2
+         nvex = nvex + mod(nvex,2)
+      else
+         nvex = lvr
+      endif
+      left = left - nvex
+*
+      la = 1
+*
+*  loop on type I radix-4 passes
+*  -----------------------------
+      mu = mod(inq,4)
+      if (isign.eq.-1) mu = 4 - mu
+      ss = 1.0
+      if (mu.eq.3) ss = -1.0
+*
+      if (mh.eq.0) go to 200
+*
+      do 160 ipass = 1 , mh
+      jstep = (n*inc) / (4*la)
+      jstepl = jstep - ninc
+*
+*  k = 0 loop (no twiddle factors)
+*  -------------------------------
+      do 120 jjj = 0 , (n-1)*inc , 4*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 115 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 110 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j) )
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(ja+j) = t0 + t1
+      a(jc+j) = t0 - t1
+      b(ja+j) = u0 + u1
+      b(jc+j) = u0 - u1
+      a(jb+j) = t2 - u3
+      a(jd+j) = t2 + u3
+      b(jb+j) = u2 + t3
+      b(jd+j) = u2 - t3
+      j = j + jump
+  110 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  115 continue
+  120 continue
+*
+*  finished if n2 = 4
+*  ------------------
+      if (n2.eq.4) go to 490
+      kk = 2 * la
+*
+*  loop on nonzero k
+*  -----------------
+      do 150 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+*
+*  loop along transform
+*  --------------------
+      do 140 jjj = k , (n-1)*inc , 4*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 135 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 130 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j ) )
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(ja+j) = t0 + t1
+      b(ja+j) = u0 + u1
+      a(jb+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jc+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jc+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jd+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jd+j) = si3*(t2+u3) + co3*(u2-t3)
+      j = j + jump
+  130 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  135 continue
+  140 continue
+*-----( end of loop along transforms )
+      kk = kk + 2*la
+  150 continue
+*-----( end of loop on nonzero k )
+      la = 4*la
+  160 continue
+*-----( end of loop on type I radix-4 passes)
+*
+*  central radix-2 pass
+*  --------------------
+  200 continue
+      if (m2.eq.0) go to 300
+*
+      jstep = (n*inc) / (2*la)
+      jstepl = jstep - ninc
+*
+*  k=0 loop (no twiddle factors)
+*  -----------------------------
+      do 220 jjj = 0 , (n-1)*inc , 2*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 215 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 210 l = 1 , nvex
+      t0 = a(ja+j) - a(jb+j)
+      a(ja+j) = a(ja+j) + a(jb+j)
+      a(jb+j) = t0
+      u0 = b(ja+j) - b(jb+j)
+      b(ja+j) = b(ja+j) + b(jb+j)
+      b(jb+j) = u0
+      j = j + jump
+  210 continue
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  215 continue
+  220 continue
+*
+*  finished if n2=2
+*  ----------------
+      if (n2.eq.2) go to 490
+*
+      kk = 2 * la
+*
+*  loop on nonzero k
+*  -----------------
+      do 260 k = ink , jstep - ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+*
+*  loop along transforms
+*  ---------------------
+      do 250 jjj = k , (n-1)*inc , 2*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 245 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+      if (kk.eq.n2/2) then
+cdir$ ivdep,shortloop
+      do 230 l = 1 , nvex
+      t0 = ss * ( a(ja+j) - a(jb+j) )
+      a(ja+j) = a(ja+j) + a(jb+j)
+      a(jb+j) = ss * ( b(jb+j) - b(ja+j) )
+      b(ja+j) = b(ja+j) + b(jb+j)
+      b(jb+j) = t0
+      j = j + jump
+  230 continue
+*
+      else
+*
+cdir$ ivdep,shortloop
+      do 240 l = 1 , nvex
+      t0 = a(ja+j) - a(jb+j)
+      a(ja+j) = a(ja+j) + a(jb+j)
+      u0 = b(ja+j) - b(jb+j)
+      b(ja+j) = b(ja+j) + b(jb+j)
+      a(jb+j) = co1*t0 - si1*u0
+      b(jb+j) = si1*t0 + co1*u0
+      j = j + jump
+  240 continue
+*
+      endif
+*
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  245 continue
+  250 continue
+*-----(end of loop along transforms)
+      kk = kk + 2 * la
+  260 continue
+*-----(end of loop on nonzero k)
+*-----(end of radix-2 pass)
+*
+      la = 2 * la
+      go to 400
+*
+*  central radix-8 pass
+*  --------------------
+  300 continue
+      if (m8.eq.0) go to 400
+      jstep = (n*inc) / (8*la)
+      jstepl = jstep - ninc
+      mu = mod(inq,8)
+      if (isign.eq.-1) mu = 8 - mu
+      c1 = 1.0
+      if (mu.eq.3.or.mu.eq.7) c1 = -1.0
+      c2 = sqrt(0.5)
+      if (mu.eq.3.or.mu.eq.5) c2 = -c2
+      c3 = c1 * c2
+*
+*  stage 1
+*  -------
+      do 320 k = 0 , jstep - ink , ink
+      do 315 jjj = k , (n-1)*inc , 8*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 312 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      j = 0
+cdir$ ivdep,shortloop
+      do 310 l = 1 , nvex
+      t0 = a(ja+j) - a(je+j)
+      a(ja+j) = a(ja+j) + a(je+j)
+      t1 = c1 * ( a(jc+j) - a(jg+j) )
+      a(je+j) = a(jc+j) + a(jg+j)
+      t2 = a(jb+j) - a(jf+j)
+      a(jc+j) = a(jb+j) + a(jf+j)
+      t3 = a(jd+j) - a(jh+j)
+      a(jg+j) = a(jd+j) + a(jh+j)
+      a(jb+j) = t0
+      a(jf+j) = t1
+      a(jd+j) = c2 * ( t2 - t3 )
+      a(jh+j) = c3 * ( t2 + t3 )
+      u0 = b(ja+j) - b(je+j)
+      b(ja+j) = b(ja+j) + b(je+j)
+      u1 = c1 * ( b(jc+j) - b(jg+j) )
+      b(je+j) = b(jc+j) + b(jg+j)
+      u2 = b(jb+j) - b(jf+j)
+      b(jc+j) = b(jb+j) + b(jf+j)
+      u3 = b(jd+j) - b(jh+j)
+      b(jg+j) = b(jd+j) + b(jh+j)
+      b(jb+j) = u0
+      b(jf+j) = u1
+      b(jd+j) = c2 * ( u2 - u3 )
+      b(jh+j) = c3 * ( u2 + u3 )
+      j = j + jump
+  310 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  312 continue
+  315 continue
+  320 continue
+*
+*  stage 2
+*  -------
+*
+*  k=0 (no twiddle factors)
+*  ------------------------
+      do 330 jjj = 0 , (n-1)*inc , 8*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 328 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      j = 0
+cdir$ ivdep,shortloop
+      do 325 l = 1 , nvex
+      t0 = a(ja+j) + a(je+j)
+      t2 = a(ja+j) - a(je+j)
+      t1 = a(jc+j) + a(jg+j)
+      t3 = c1 * ( a(jc+j) - a(jg+j) )
+      u0 = b(ja+j) + b(je+j)
+      u2 = b(ja+j) - b(je+j)
+      u1 = b(jc+j) + b(jg+j)
+      u3 = c1 * ( b(jc+j) - b(jg+j ) )
+      a(ja+j) = t0 + t1
+      a(je+j) = t0 - t1
+      b(ja+j) = u0 + u1
+      b(je+j) = u0 - u1
+      a(jc+j) = t2 - u3
+      a(jg+j) = t2 + u3
+      b(jc+j) = u2 + t3
+      b(jg+j) = u2 - t3
+      t0 = a(jb+j) + a(jd+j)
+      t2 = a(jb+j) - a(jd+j)
+      t1 = a(jf+j) - a(jh+j)
+      t3 = a(jf+j) + a(jh+j)
+      u0 = b(jb+j) + b(jd+j)
+      u2 = b(jb+j) - b(jd+j)
+      u1 = b(jf+j) - b(jh+j)
+      u3 = b(jf+j) + b(jh+j)
+      a(jb+j) = t0 - u3
+      a(jh+j) = t0 + u3
+      b(jb+j) = u0 + t3
+      b(jh+j) = u0 - t3
+      a(jd+j) = t2 + u1
+      a(jf+j) = t2 - u1
+      b(jd+j) = u2 - t1
+      b(jf+j) = u2 + t1
+      j = j + jump
+  325 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  328 continue
+  330 continue
+*
+      if (n2.eq.8) go to 490
+*
+*  loop on nonzero k
+*  -----------------
+      kk = 2 * la
+*
+      do 350 k = ink , jstep - ink , ink
+*
+      co1 = trigs(kk+1)
+      si1 = s * trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s * trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s * trigs(3*kk+2)
+      co4 = trigs(4*kk+1)
+      si4 = s * trigs(4*kk+2)
+      co5 = trigs(5*kk+1)
+      si5 = s * trigs(5*kk+2)
+      co6 = trigs(6*kk+1)
+      si6 = s * trigs(6*kk+2)
+      co7 = trigs(7*kk+1)
+      si7 = s * trigs(7*kk+2)
+*
+      do 345 jjj = k , (n-1)*inc , 8*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 342 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      j = 0
+cdir$ ivdep,shortloop
+      do 340 l = 1 , nvex
+      t0 = a(ja+j) + a(je+j)
+      t2 = a(ja+j) - a(je+j)
+      t1 = a(jc+j) + a(jg+j)
+      t3 = c1 * ( a(jc+j) - a(jg+j) )
+      u0 = b(ja+j) + b(je+j)
+      u2 = b(ja+j) - b(je+j)
+      u1 = b(jc+j) + b(jg+j)
+      u3 = c1 * ( b(jc+j) - b(jg+j ) )
+      a(ja+j) = t0 + t1
+      b(ja+j) = u0 + u1
+      a(je+j) = co4*(t0-t1) - si4*(u0-u1)
+      b(je+j) = si4*(t0-t1) + co4*(u0-u1)
+      a(jc+j) = co2*(t2-u3) - si2*(u2+t3)
+      b(jc+j) = si2*(t2-u3) + co2*(u2+t3)
+      a(jg+j) = co6*(t2+u3) - si6*(u2-t3)
+      b(jg+j) = si6*(t2+u3) + co6*(u2-t3)
+      t0 = a(jb+j) + a(jd+j)
+      t2 = a(jb+j) - a(jd+j)
+      t1 = a(jf+j) - a(jh+j)
+      t3 = a(jf+j) + a(jh+j)
+      u0 = b(jb+j) + b(jd+j)
+      u2 = b(jb+j) - b(jd+j)
+      u1 = b(jf+j) - b(jh+j)
+      u3 = b(jf+j) + b(jh+j)
+      a(jb+j) = co1*(t0-u3) - si1*(u0+t3)
+      b(jb+j) = si1*(t0-u3) + co1*(u0+t3)
+      a(jh+j) = co7*(t0+u3) - si7*(u0-t3)
+      b(jh+j) = si7*(t0+u3) + co7*(u0-t3)
+      a(jd+j) = co3*(t2+u1) - si3*(u2-t1)
+      b(jd+j) = si3*(t2+u1) + co3*(u2-t1)
+      a(jf+j) = co5*(t2-u1) - si5*(u2+t1)
+      b(jf+j) = si5*(t2-u1) + co5*(u2+t1)
+      j = j + jump
+  340 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  342 continue
+  345 continue
+      kk = kk + 2 * la
+  350 continue
+*
+      la = 8 * la
+*
+*  loop on type II radix-4 passes
+*  ------------------------------
+  400 continue
+      mu = mod(inq,4)
+      if (isign.eq.-1) mu = 4 - mu
+      ss = 1.0
+      if (mu.eq.3) ss = -1.0
+*
+      do 480 ipass = mh+1 , m
+      jstep = (n*inc) / (4*la)
+      jstepl = jstep - ninc
+      laincl = la * ink - ninc
+*
+*  k=0 loop (no twiddle factors)
+*  -----------------------------
+      do 430 ll = 0 , (la-1)*ink , 4*jstep
+*
+      do 420 jjj = ll , (n-1)*inc , 4*la*ink
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 415 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = ja + laincl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = je + laincl
+      if (ji.lt.istart) ji = ji + ninc
+      jj = ji + jstepl
+      if (jj.lt.istart) jj = jj + ninc
+      jk = jj + jstepl
+      if (jk.lt.istart) jk = jk + ninc
+      jl = jk + jstepl
+      if (jl.lt.istart) jl = jl + ninc
+      jm = ji + laincl
+      if (jm.lt.istart) jm = jm + ninc
+      jn = jm + jstepl
+      if (jn.lt.istart) jn = jn + ninc
+      jo = jn + jstepl
+      if (jo.lt.istart) jo = jo + ninc
+      jp = jo + jstepl
+      if (jp.lt.istart) jp = jp + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 410 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j) )
+      a(jc+j) = a(ji+j)
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(jb+j) = a(je+j)
+      a(ja+j) = t0 + t1
+      a(ji+j) = t0 - t1
+      b(ja+j) = u0 + u1
+      b(jc+j) = u0 - u1
+      b(jd+j) = b(jm+j)
+      a(je+j) = t2 - u3
+      a(jd+j) = t2 + u3
+      b(jb+j) = u2 + t3
+      b(jm+j) = u2 - t3
+*----------------------
+      t0 = a(jb+j) + a(jg+j)
+      t2 = a(jb+j) - a(jg+j)
+      t1 = a(jf+j) + a(jh+j)
+      t3 = ss * ( a(jf+j) - a(jh+j) )
+      a(jg+j) = a(jj+j)
+      u0 = b(je+j) + b(jg+j)
+      u2 = b(je+j) - b(jg+j)
+      u1 = b(jf+j) + b(jh+j)
+      u3 = ss * ( b(jf+j) - b(jh+j) )
+      b(je+j) = b(jb+j)
+      a(jb+j) = t0 + t1
+      a(jj+j) = t0 - t1
+      b(jg+j) = b(jj+j)
+      b(jb+j) = u0 + u1
+      b(jj+j) = u0 - u1
+      a(jf+j) = t2 - u3
+      a(jh+j) = t2 + u3
+      b(jf+j) = u2 + t3
+      b(jh+j) = u2 - t3
+*----------------------
+      t0 = a(jc+j) + a(jk+j)
+      t2 = a(jc+j) - a(jk+j)
+      t1 = a(jg+j) + a(jl+j)
+      t3 = ss * ( a(jg+j) - a(jl+j) )
+      u0 = b(ji+j) + b(jk+j)
+      u2 = b(ji+j) - b(jk+j)
+      a(jl+j) = a(jo+j)
+      u1 = b(jg+j) + b(jl+j)
+      u3 = ss * ( b(jg+j) - b(jl+j) )
+      b(ji+j) = b(jc+j)
+      a(jc+j) = t0 + t1
+      a(jk+j) = t0 - t1
+      b(jl+j) = b(jo+j)
+      b(jc+j) = u0 + u1
+      b(jk+j) = u0 - u1
+      a(jg+j) = t2 - u3
+      a(jo+j) = t2 + u3
+      b(jg+j) = u2 + t3
+      b(jo+j) = u2 - t3
+*----------------------
+      t0 = a(jm+j) + a(jl+j)
+      t2 = a(jm+j) - a(jl+j)
+      t1 = a(jn+j) + a(jp+j)
+      t3 = ss * ( a(jn+j) - a(jp+j) )
+      a(jm+j) = a(jd+j)
+      u0 = b(jd+j) + b(jl+j)
+      u2 = b(jd+j) - b(jl+j)
+      u1 = b(jn+j) + b(jp+j)
+      u3 = ss * ( b(jn+j) - b(jp+j) )
+      a(jn+j) = a(jh+j)
+      a(jd+j) = t0 + t1
+      a(jl+j) = t0 - t1
+      b(jd+j) = u0 + u1
+      b(jl+j) = u0 - u1
+      b(jn+j) = b(jh+j)
+      a(jh+j) = t2 - u3
+      a(jp+j) = t2 + u3
+      b(jh+j) = u2 + t3
+      b(jp+j) = u2 - t3
+      j = j + jump
+  410 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  415 continue
+  420 continue
+  430 continue
+*-----( end of double loop for k=0 )
+*
+*  finished if last pass
+*  ---------------------
+      if (ipass.eq.m) go to 490
+*
+      kk = 2*la
+*
+*     loop on nonzero k
+*     -----------------
+      do 470 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+*
+*  double loop along first transform in block
+*  ------------------------------------------
+      do 460 ll = k , (la-1)*ink , 4*jstep
+*
+      do 450 jjj = ll , (n-1)*inc , 4*la*ink
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 445 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = ja + laincl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = je + laincl
+      if (ji.lt.istart) ji = ji + ninc
+      jj = ji + jstepl
+      if (jj.lt.istart) jj = jj + ninc
+      jk = jj + jstepl
+      if (jk.lt.istart) jk = jk + ninc
+      jl = jk + jstepl
+      if (jl.lt.istart) jl = jl + ninc
+      jm = ji + laincl
+      if (jm.lt.istart) jm = jm + ninc
+      jn = jm + jstepl
+      if (jn.lt.istart) jn = jn + ninc
+      jo = jn + jstepl
+      if (jo.lt.istart) jo = jo + ninc
+      jp = jo + jstepl
+      if (jp.lt.istart) jp = jp + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 440 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j) )
+      a(jc+j) = a(ji+j)
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(jb+j) = a(je+j)
+      a(ja+j) = t0 + t1
+      b(ja+j) = u0 + u1
+      a(je+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)
+      b(jd+j) = b(jm+j)
+      a(ji+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jc+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jd+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jm+j) = si3*(t2+u3) + co3*(u2-t3)
+*----------------------------------------
+      t0 = a(jb+j) + a(jg+j)
+      t2 = a(jb+j) - a(jg+j)
+      t1 = a(jf+j) + a(jh+j)
+      t3 = ss * ( a(jf+j) - a(jh+j) )
+      a(jg+j) = a(jj+j)
+      u0 = b(je+j) + b(jg+j)
+      u2 = b(je+j) - b(jg+j)
+      u1 = b(jf+j) + b(jh+j)
+      u3 = ss * ( b(jf+j) - b(jh+j) )
+      b(je+j) = b(jb+j)
+      a(jb+j) = t0 + t1
+      b(jb+j) = u0 + u1
+      b(jg+j) = b(jj+j)
+      a(jf+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jf+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jj+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jj+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jh+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jh+j) = si3*(t2+u3) + co3*(u2-t3)
+*----------------------------------------
+      t0 = a(jc+j) + a(jk+j)
+      t2 = a(jc+j) - a(jk+j)
+      t1 = a(jg+j) + a(jl+j)
+      t3 = ss * ( a(jg+j) - a(jl+j) )
+      u0 = b(ji+j) + b(jk+j)
+      u2 = b(ji+j) - b(jk+j)
+      a(jl+j) = a(jo+j)
+      u1 = b(jg+j) + b(jl+j)
+      u3 = ss * ( b(jg+j) - b(jl+j) )
+      b(ji+j) = b(jc+j)
+      a(jc+j) = t0 + t1
+      b(jc+j) = u0 + u1
+      b(jl+j) = b(jo+j)
+      a(jg+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jg+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jk+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jk+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jo+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jo+j) = si3*(t2+u3) + co3*(u2-t3)
+*----------------------------------------
+      t0 = a(jm+j) + a(jl+j)
+      t2 = a(jm+j) - a(jl+j)
+      t1 = a(jn+j) + a(jp+j)
+      t3 = ss * ( a(jn+j) - a(jp+j) )
+      a(jm+j) = a(jd+j)
+      u0 = b(jd+j) + b(jl+j)
+      u2 = b(jd+j) - b(jl+j)
+      a(jn+j) = a(jh+j)
+      u1 = b(jn+j) + b(jp+j)
+      u3 = ss * ( b(jn+j) - b(jp+j) )
+      b(jn+j) = b(jh+j)
+      a(jd+j) = t0 + t1
+      b(jd+j) = u0 + u1
+      a(jh+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jh+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jl+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jl+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jp+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jp+j) = si3*(t2+u3) + co3*(u2-t3)
+      j = j + jump
+  440 continue
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  445 continue
+  450 continue
+  460 continue
+*-----( end of double loop for this k )
+      kk = kk + 2*la
+  470 continue
+*-----( end of loop over values of k )
+      la = 4*la
+  480 continue
+*-----( end of loop on type II radix-4 passes )
+*-----( nvex transforms completed)
+  490 continue
+      istart = istart + nvex * jump
+  500 continue
+*-----( end of loop on blocks of transforms )
+*
+      return
+      end
diff --git a/fft/gpfa2.f b/fft/gpfa2.f
new file mode 100755
index 0000000..3804d1b
--- /dev/null
+++ b/fft/gpfa2.f
@@ -0,0 +1,835 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      subroutine gpfa2(a,b,trigs,inc,jump,n,mm,lot,isign)
+*     fortran version of *gpfa2* -
+*     radix-2 section of self-sorting, in-place, generalized pfa
+*     central radix-2 and radix-8 passes included
+*      so that transform length can be any power of 2
+*
+*-------------------------------------------------------------------
+*
+      dimension a(*), b(*), trigs(*)
+      data lvr/128/
+*
+*     ***************************************************************
+*     *                                                             *
+*     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. *
+*     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE *
+*     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      *
+*     *                                                             *
+*     ***************************************************************
+*
+      n2 = 2**mm
+      inq = n/n2
+      jstepx = (n2-n) * inc
+      ninc = n * inc
+      ink = inc * inq
+*
+      m2 = 0
+      m8 = 0
+      if (mod(mm,2).eq.0) then
+         m = mm/2
+      else if (mod(mm,4).eq.1) then
+         m = (mm-1)/2
+         m2 = 1
+      else if (mod(mm,4).eq.3) then
+         m = (mm-3)/2
+         m8 = 1
+      endif
+      mh = (m+1)/2
+*
+      nblox = 1 + (lot-1)/lvr
+      left = lot
+      s = float(isign)
+      istart = 1
+*
+*  loop on blocks of lvr transforms
+*  --------------------------------
+      do 500 nb = 1 , nblox
+*
+      if (left.le.lvr) then
+         nvex = left
+      else if (left.lt.(2*lvr)) then
+         nvex = left/2
+         nvex = nvex + mod(nvex,2)
+      else
+         nvex = lvr
+      endif
+      left = left - nvex
+*
+      la = 1
+*
+*  loop on type I radix-4 passes
+*  -----------------------------
+      mu = mod(inq,4)
+      if (isign.eq.-1) mu = 4 - mu
+      ss = 1.0
+      if (mu.eq.3) ss = -1.0
+*
+      if (mh.eq.0) go to 200
+*
+      do 160 ipass = 1 , mh
+      jstep = (n*inc) / (4*la)
+      jstepl = jstep - ninc
+*
+*  k = 0 loop (no twiddle factors)
+*  -------------------------------
+      do 120 jjj = 0 , (n-1)*inc , 4*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 115 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 110 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j) )
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(ja+j) = t0 + t1
+      a(jc+j) = t0 - t1
+      b(ja+j) = u0 + u1
+      b(jc+j) = u0 - u1
+      a(jb+j) = t2 - u3
+      a(jd+j) = t2 + u3
+      b(jb+j) = u2 + t3
+      b(jd+j) = u2 - t3
+      j = j + jump
+  110 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  115 continue
+  120 continue
+*
+*  finished if n2 = 4
+*  ------------------
+      if (n2.eq.4) go to 490
+      kk = 2 * la
+*
+*  loop on nonzero k
+*  -----------------
+      do 150 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+*
+*  loop along transform
+*  --------------------
+      do 140 jjj = k , (n-1)*inc , 4*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 135 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 130 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j ) )
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(ja+j) = t0 + t1
+      b(ja+j) = u0 + u1
+      a(jb+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jc+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jc+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jd+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jd+j) = si3*(t2+u3) + co3*(u2-t3)
+      j = j + jump
+  130 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  135 continue
+  140 continue
+*-----( end of loop along transforms )
+      kk = kk + 2*la
+  150 continue
+*-----( end of loop on nonzero k )
+      la = 4*la
+  160 continue
+*-----( end of loop on type I radix-4 passes)
+*
+*  central radix-2 pass
+*  --------------------
+  200 continue
+      if (m2.eq.0) go to 300
+*
+      jstep = (n*inc) / (2*la)
+      jstepl = jstep - ninc
+*
+*  k=0 loop (no twiddle factors)
+*  -----------------------------
+      do 220 jjj = 0 , (n-1)*inc , 2*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 215 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 210 l = 1 , nvex
+      t0 = a(ja+j) - a(jb+j)
+      a(ja+j) = a(ja+j) + a(jb+j)
+      a(jb+j) = t0
+      u0 = b(ja+j) - b(jb+j)
+      b(ja+j) = b(ja+j) + b(jb+j)
+      b(jb+j) = u0
+      j = j + jump
+  210 continue
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  215 continue
+  220 continue
+*
+*  finished if n2=2
+*  ----------------
+      if (n2.eq.2) go to 490
+*
+      kk = 2 * la
+*
+*  loop on nonzero k
+*  -----------------
+      do 260 k = ink , jstep - ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+*
+*  loop along transforms
+*  ---------------------
+      do 250 jjj = k , (n-1)*inc , 2*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 245 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+      if (kk.eq.n2/2) then
+cdir$ ivdep,shortloop
+      do 230 l = 1 , nvex
+      t0 = ss * ( a(ja+j) - a(jb+j) )
+      a(ja+j) = a(ja+j) + a(jb+j)
+      a(jb+j) = ss * ( b(jb+j) - b(ja+j) )
+      b(ja+j) = b(ja+j) + b(jb+j)
+      b(jb+j) = t0
+      j = j + jump
+  230 continue
+*
+      else
+*
+cdir$ ivdep,shortloop
+      do 240 l = 1 , nvex
+      t0 = a(ja+j) - a(jb+j)
+      a(ja+j) = a(ja+j) + a(jb+j)
+      u0 = b(ja+j) - b(jb+j)
+      b(ja+j) = b(ja+j) + b(jb+j)
+      a(jb+j) = co1*t0 - si1*u0
+      b(jb+j) = si1*t0 + co1*u0
+      j = j + jump
+  240 continue
+*
+      endif
+*
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  245 continue
+  250 continue
+*-----(end of loop along transforms)
+      kk = kk + 2 * la
+  260 continue
+*-----(end of loop on nonzero k)
+*-----(end of radix-2 pass)
+*
+      la = 2 * la
+      go to 400
+*
+*  central radix-8 pass
+*  --------------------
+  300 continue
+      if (m8.eq.0) go to 400
+      jstep = (n*inc) / (8*la)
+      jstepl = jstep - ninc
+      mu = mod(inq,8)
+      if (isign.eq.-1) mu = 8 - mu
+      c1 = 1.0
+      if (mu.eq.3.or.mu.eq.7) c1 = -1.0
+      c2 = sqrt(0.5)
+      if (mu.eq.3.or.mu.eq.5) c2 = -c2
+      c3 = c1 * c2
+*
+*  stage 1
+*  -------
+      do 320 k = 0 , jstep - ink , ink
+      do 315 jjj = k , (n-1)*inc , 8*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 312 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      j = 0
+cdir$ ivdep,shortloop
+      do 310 l = 1 , nvex
+      t0 = a(ja+j) - a(je+j)
+      a(ja+j) = a(ja+j) + a(je+j)
+      t1 = c1 * ( a(jc+j) - a(jg+j) )
+      a(je+j) = a(jc+j) + a(jg+j)
+      t2 = a(jb+j) - a(jf+j)
+      a(jc+j) = a(jb+j) + a(jf+j)
+      t3 = a(jd+j) - a(jh+j)
+      a(jg+j) = a(jd+j) + a(jh+j)
+      a(jb+j) = t0
+      a(jf+j) = t1
+      a(jd+j) = c2 * ( t2 - t3 )
+      a(jh+j) = c3 * ( t2 + t3 )
+      u0 = b(ja+j) - b(je+j)
+      b(ja+j) = b(ja+j) + b(je+j)
+      u1 = c1 * ( b(jc+j) - b(jg+j) )
+      b(je+j) = b(jc+j) + b(jg+j)
+      u2 = b(jb+j) - b(jf+j)
+      b(jc+j) = b(jb+j) + b(jf+j)
+      u3 = b(jd+j) - b(jh+j)
+      b(jg+j) = b(jd+j) + b(jh+j)
+      b(jb+j) = u0
+      b(jf+j) = u1
+      b(jd+j) = c2 * ( u2 - u3 )
+      b(jh+j) = c3 * ( u2 + u3 )
+      j = j + jump
+  310 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  312 continue
+  315 continue
+  320 continue
+*
+*  stage 2
+*  -------
+*
+*  k=0 (no twiddle factors)
+*  ------------------------
+      do 330 jjj = 0 , (n-1)*inc , 8*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 328 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      j = 0
+cdir$ ivdep,shortloop
+      do 325 l = 1 , nvex
+      t0 = a(ja+j) + a(je+j)
+      t2 = a(ja+j) - a(je+j)
+      t1 = a(jc+j) + a(jg+j)
+      t3 = c1 * ( a(jc+j) - a(jg+j) )
+      u0 = b(ja+j) + b(je+j)
+      u2 = b(ja+j) - b(je+j)
+      u1 = b(jc+j) + b(jg+j)
+      u3 = c1 * ( b(jc+j) - b(jg+j ) )
+      a(ja+j) = t0 + t1
+      a(je+j) = t0 - t1
+      b(ja+j) = u0 + u1
+      b(je+j) = u0 - u1
+      a(jc+j) = t2 - u3
+      a(jg+j) = t2 + u3
+      b(jc+j) = u2 + t3
+      b(jg+j) = u2 - t3
+      t0 = a(jb+j) + a(jd+j)
+      t2 = a(jb+j) - a(jd+j)
+      t1 = a(jf+j) - a(jh+j)
+      t3 = a(jf+j) + a(jh+j)
+      u0 = b(jb+j) + b(jd+j)
+      u2 = b(jb+j) - b(jd+j)
+      u1 = b(jf+j) - b(jh+j)
+      u3 = b(jf+j) + b(jh+j)
+      a(jb+j) = t0 - u3
+      a(jh+j) = t0 + u3
+      b(jb+j) = u0 + t3
+      b(jh+j) = u0 - t3
+      a(jd+j) = t2 + u1
+      a(jf+j) = t2 - u1
+      b(jd+j) = u2 - t1
+      b(jf+j) = u2 + t1
+      j = j + jump
+  325 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  328 continue
+  330 continue
+*
+      if (n2.eq.8) go to 490
+*
+*  loop on nonzero k
+*  -----------------
+      kk = 2 * la
+*
+      do 350 k = ink , jstep - ink , ink
+*
+      co1 = trigs(kk+1)
+      si1 = s * trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s * trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s * trigs(3*kk+2)
+      co4 = trigs(4*kk+1)
+      si4 = s * trigs(4*kk+2)
+      co5 = trigs(5*kk+1)
+      si5 = s * trigs(5*kk+2)
+      co6 = trigs(6*kk+1)
+      si6 = s * trigs(6*kk+2)
+      co7 = trigs(7*kk+1)
+      si7 = s * trigs(7*kk+2)
+*
+      do 345 jjj = k , (n-1)*inc , 8*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 342 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      j = 0
+cdir$ ivdep,shortloop
+      do 340 l = 1 , nvex
+      t0 = a(ja+j) + a(je+j)
+      t2 = a(ja+j) - a(je+j)
+      t1 = a(jc+j) + a(jg+j)
+      t3 = c1 * ( a(jc+j) - a(jg+j) )
+      u0 = b(ja+j) + b(je+j)
+      u2 = b(ja+j) - b(je+j)
+      u1 = b(jc+j) + b(jg+j)
+      u3 = c1 * ( b(jc+j) - b(jg+j ) )
+      a(ja+j) = t0 + t1
+      b(ja+j) = u0 + u1
+      a(je+j) = co4*(t0-t1) - si4*(u0-u1)
+      b(je+j) = si4*(t0-t1) + co4*(u0-u1)
+      a(jc+j) = co2*(t2-u3) - si2*(u2+t3)
+      b(jc+j) = si2*(t2-u3) + co2*(u2+t3)
+      a(jg+j) = co6*(t2+u3) - si6*(u2-t3)
+      b(jg+j) = si6*(t2+u3) + co6*(u2-t3)
+      t0 = a(jb+j) + a(jd+j)
+      t2 = a(jb+j) - a(jd+j)
+      t1 = a(jf+j) - a(jh+j)
+      t3 = a(jf+j) + a(jh+j)
+      u0 = b(jb+j) + b(jd+j)
+      u2 = b(jb+j) - b(jd+j)
+      u1 = b(jf+j) - b(jh+j)
+      u3 = b(jf+j) + b(jh+j)
+      a(jb+j) = co1*(t0-u3) - si1*(u0+t3)
+      b(jb+j) = si1*(t0-u3) + co1*(u0+t3)
+      a(jh+j) = co7*(t0+u3) - si7*(u0-t3)
+      b(jh+j) = si7*(t0+u3) + co7*(u0-t3)
+      a(jd+j) = co3*(t2+u1) - si3*(u2-t1)
+      b(jd+j) = si3*(t2+u1) + co3*(u2-t1)
+      a(jf+j) = co5*(t2-u1) - si5*(u2+t1)
+      b(jf+j) = si5*(t2-u1) + co5*(u2+t1)
+      j = j + jump
+  340 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  342 continue
+  345 continue
+      kk = kk + 2 * la
+  350 continue
+*
+      la = 8 * la
+*
+*  loop on type II radix-4 passes
+*  ------------------------------
+  400 continue
+      mu = mod(inq,4)
+      if (isign.eq.-1) mu = 4 - mu
+      ss = 1.0
+      if (mu.eq.3) ss = -1.0
+*
+      do 480 ipass = mh+1 , m
+      jstep = (n*inc) / (4*la)
+      jstepl = jstep - ninc
+      laincl = la * ink - ninc
+*
+*  k=0 loop (no twiddle factors)
+*  -----------------------------
+      do 430 ll = 0 , (la-1)*ink , 4*jstep
+*
+      do 420 jjj = ll , (n-1)*inc , 4*la*ink
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 415 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = ja + laincl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = je + laincl
+      if (ji.lt.istart) ji = ji + ninc
+      jj = ji + jstepl
+      if (jj.lt.istart) jj = jj + ninc
+      jk = jj + jstepl
+      if (jk.lt.istart) jk = jk + ninc
+      jl = jk + jstepl
+      if (jl.lt.istart) jl = jl + ninc
+      jm = ji + laincl
+      if (jm.lt.istart) jm = jm + ninc
+      jn = jm + jstepl
+      if (jn.lt.istart) jn = jn + ninc
+      jo = jn + jstepl
+      if (jo.lt.istart) jo = jo + ninc
+      jp = jo + jstepl
+      if (jp.lt.istart) jp = jp + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 410 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j) )
+      a(jc+j) = a(ji+j)
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(jb+j) = a(je+j)
+      a(ja+j) = t0 + t1
+      a(ji+j) = t0 - t1
+      b(ja+j) = u0 + u1
+      b(jc+j) = u0 - u1
+      b(jd+j) = b(jm+j)
+      a(je+j) = t2 - u3
+      a(jd+j) = t2 + u3
+      b(jb+j) = u2 + t3
+      b(jm+j) = u2 - t3
+*----------------------
+      t0 = a(jb+j) + a(jg+j)
+      t2 = a(jb+j) - a(jg+j)
+      t1 = a(jf+j) + a(jh+j)
+      t3 = ss * ( a(jf+j) - a(jh+j) )
+      a(jg+j) = a(jj+j)
+      u0 = b(je+j) + b(jg+j)
+      u2 = b(je+j) - b(jg+j)
+      u1 = b(jf+j) + b(jh+j)
+      u3 = ss * ( b(jf+j) - b(jh+j) )
+      b(je+j) = b(jb+j)
+      a(jb+j) = t0 + t1
+      a(jj+j) = t0 - t1
+      b(jg+j) = b(jj+j)
+      b(jb+j) = u0 + u1
+      b(jj+j) = u0 - u1
+      a(jf+j) = t2 - u3
+      a(jh+j) = t2 + u3
+      b(jf+j) = u2 + t3
+      b(jh+j) = u2 - t3
+*----------------------
+      t0 = a(jc+j) + a(jk+j)
+      t2 = a(jc+j) - a(jk+j)
+      t1 = a(jg+j) + a(jl+j)
+      t3 = ss * ( a(jg+j) - a(jl+j) )
+      u0 = b(ji+j) + b(jk+j)
+      u2 = b(ji+j) - b(jk+j)
+      a(jl+j) = a(jo+j)
+      u1 = b(jg+j) + b(jl+j)
+      u3 = ss * ( b(jg+j) - b(jl+j) )
+      b(ji+j) = b(jc+j)
+      a(jc+j) = t0 + t1
+      a(jk+j) = t0 - t1
+      b(jl+j) = b(jo+j)
+      b(jc+j) = u0 + u1
+      b(jk+j) = u0 - u1
+      a(jg+j) = t2 - u3
+      a(jo+j) = t2 + u3
+      b(jg+j) = u2 + t3
+      b(jo+j) = u2 - t3
+*----------------------
+      t0 = a(jm+j) + a(jl+j)
+      t2 = a(jm+j) - a(jl+j)
+      t1 = a(jn+j) + a(jp+j)
+      t3 = ss * ( a(jn+j) - a(jp+j) )
+      a(jm+j) = a(jd+j)
+      u0 = b(jd+j) + b(jl+j)
+      u2 = b(jd+j) - b(jl+j)
+      u1 = b(jn+j) + b(jp+j)
+      u3 = ss * ( b(jn+j) - b(jp+j) )
+      a(jn+j) = a(jh+j)
+      a(jd+j) = t0 + t1
+      a(jl+j) = t0 - t1
+      b(jd+j) = u0 + u1
+      b(jl+j) = u0 - u1
+      b(jn+j) = b(jh+j)
+      a(jh+j) = t2 - u3
+      a(jp+j) = t2 + u3
+      b(jh+j) = u2 + t3
+      b(jp+j) = u2 - t3
+      j = j + jump
+  410 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  415 continue
+  420 continue
+  430 continue
+*-----( end of double loop for k=0 )
+*
+*  finished if last pass
+*  ---------------------
+      if (ipass.eq.m) go to 490
+*
+      kk = 2*la
+*
+*     loop on nonzero k
+*     -----------------
+      do 470 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+*
+*  double loop along first transform in block
+*  ------------------------------------------
+      do 460 ll = k , (la-1)*ink , 4*jstep
+*
+      do 450 jjj = ll , (n-1)*inc , 4*la*ink
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 445 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = ja + laincl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = je + laincl
+      if (ji.lt.istart) ji = ji + ninc
+      jj = ji + jstepl
+      if (jj.lt.istart) jj = jj + ninc
+      jk = jj + jstepl
+      if (jk.lt.istart) jk = jk + ninc
+      jl = jk + jstepl
+      if (jl.lt.istart) jl = jl + ninc
+      jm = ji + laincl
+      if (jm.lt.istart) jm = jm + ninc
+      jn = jm + jstepl
+      if (jn.lt.istart) jn = jn + ninc
+      jo = jn + jstepl
+      if (jo.lt.istart) jo = jo + ninc
+      jp = jo + jstepl
+      if (jp.lt.istart) jp = jp + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 440 l = 1 , nvex
+      t0 = a(ja+j) + a(jc+j)
+      t2 = a(ja+j) - a(jc+j)
+      t1 = a(jb+j) + a(jd+j)
+      t3 = ss * ( a(jb+j) - a(jd+j) )
+      a(jc+j) = a(ji+j)
+      u0 = b(ja+j) + b(jc+j)
+      u2 = b(ja+j) - b(jc+j)
+      u1 = b(jb+j) + b(jd+j)
+      u3 = ss * ( b(jb+j) - b(jd+j) )
+      a(jb+j) = a(je+j)
+      a(ja+j) = t0 + t1
+      b(ja+j) = u0 + u1
+      a(je+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)
+      b(jd+j) = b(jm+j)
+      a(ji+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jc+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jd+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jm+j) = si3*(t2+u3) + co3*(u2-t3)
+*----------------------------------------
+      t0 = a(jb+j) + a(jg+j)
+      t2 = a(jb+j) - a(jg+j)
+      t1 = a(jf+j) + a(jh+j)
+      t3 = ss * ( a(jf+j) - a(jh+j) )
+      a(jg+j) = a(jj+j)
+      u0 = b(je+j) + b(jg+j)
+      u2 = b(je+j) - b(jg+j)
+      u1 = b(jf+j) + b(jh+j)
+      u3 = ss * ( b(jf+j) - b(jh+j) )
+      b(je+j) = b(jb+j)
+      a(jb+j) = t0 + t1
+      b(jb+j) = u0 + u1
+      b(jg+j) = b(jj+j)
+      a(jf+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jf+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jj+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jj+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jh+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jh+j) = si3*(t2+u3) + co3*(u2-t3)
+*----------------------------------------
+      t0 = a(jc+j) + a(jk+j)
+      t2 = a(jc+j) - a(jk+j)
+      t1 = a(jg+j) + a(jl+j)
+      t3 = ss * ( a(jg+j) - a(jl+j) )
+      u0 = b(ji+j) + b(jk+j)
+      u2 = b(ji+j) - b(jk+j)
+      a(jl+j) = a(jo+j)
+      u1 = b(jg+j) + b(jl+j)
+      u3 = ss * ( b(jg+j) - b(jl+j) )
+      b(ji+j) = b(jc+j)
+      a(jc+j) = t0 + t1
+      b(jc+j) = u0 + u1
+      b(jl+j) = b(jo+j)
+      a(jg+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jg+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jk+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jk+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jo+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jo+j) = si3*(t2+u3) + co3*(u2-t3)
+*----------------------------------------
+      t0 = a(jm+j) + a(jl+j)
+      t2 = a(jm+j) - a(jl+j)
+      t1 = a(jn+j) + a(jp+j)
+      t3 = ss * ( a(jn+j) - a(jp+j) )
+      a(jm+j) = a(jd+j)
+      u0 = b(jd+j) + b(jl+j)
+      u2 = b(jd+j) - b(jl+j)
+      a(jn+j) = a(jh+j)
+      u1 = b(jn+j) + b(jp+j)
+      u3 = ss * ( b(jn+j) - b(jp+j) )
+      b(jn+j) = b(jh+j)
+      a(jd+j) = t0 + t1
+      b(jd+j) = u0 + u1
+      a(jh+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jh+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jl+j) = co2*(t0-t1) - si2*(u0-u1)
+      b(jl+j) = si2*(t0-t1) + co2*(u0-u1)
+      a(jp+j) = co3*(t2+u3) - si3*(u2-t3)
+      b(jp+j) = si3*(t2+u3) + co3*(u2-t3)
+      j = j + jump
+  440 continue
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  445 continue
+  450 continue
+  460 continue
+*-----( end of double loop for this k )
+      kk = kk + 2*la
+  470 continue
+*-----( end of loop over values of k )
+      la = 4*la
+  480 continue
+*-----( end of loop on type II radix-4 passes )
+*-----( nvex transforms completed)
+  490 continue
+      istart = istart + nvex * jump
+  500 continue
+*-----( end of loop on blocks of transforms )
+*
+      return
+      end
diff --git a/fft/gpfa3.F b/fft/gpfa3.F
new file mode 100755
index 0000000..67e31dd
--- /dev/null
+++ b/fft/gpfa3.F
@@ -0,0 +1,375 @@
+      subroutine gpfa3(a,b,trigs,inc,jump,n,mm,lot,isign)
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+*     fortran version of *gpfa3* -
+*     radix-3 section of self-sorting, in-place
+*        generalized PFA
+*
+*-------------------------------------------------------------------
+*
+      dimension a(*), b(*), trigs(*)
+      data sin60/0.866025403784437/
+      data lvr/128/
+*
+*     ***************************************************************
+*     *                                                             *
+*     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. *
+*     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE *
+*     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      *
+*     *                                                             *
+*     ***************************************************************
+*
+      n3 = 3**mm
+      inq = n/n3
+      jstepx = (n3-n) * inc
+      ninc = n * inc
+      ink = inc * inq
+      mu = mod(inq,3)
+      if (isign.eq.-1) mu = 3-mu
+      m = mm
+      mh = (m+1)/2
+      s = float(isign)
+      c1 = sin60
+      if (mu.eq.2) c1 = -c1
+*
+      nblox = 1 + (lot-1)/lvr
+      left = lot
+      s = float(isign)
+      istart = 1
+*
+*  loop on blocks of lvr transforms
+*  --------------------------------
+      do 500 nb = 1 , nblox
+*
+      if (left.le.lvr) then
+         nvex = left
+      else if (left.lt.(2*lvr)) then
+         nvex = left/2
+         nvex = nvex + mod(nvex,2)
+      else
+         nvex = lvr
+      endif
+      left = left - nvex
+*
+      la = 1
+*
+*  loop on type I radix-3 passes
+*  -----------------------------
+      do 160 ipass = 1 , mh
+      jstep = (n*inc) / (3*la)
+      jstepl = jstep - ninc
+*
+*  k = 0 loop (no twiddle factors)
+*  -------------------------------
+      do 120 jjj = 0 , (n-1)*inc , 3*jstep
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 115 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep, shortloop
+      do 110 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jb+j) = t2 - u3
+      b(jb+j) = u2 + t3
+      a(jc+j) = t2 + u3
+      b(jc+j) = u2 - t3
+      j = j + jump
+  110 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  115 continue
+  120 continue
+*
+*  finished if n3 = 3
+*  ------------------
+      if (n3.eq.3) go to 490
+      kk = 2 * la
+*
+*  loop on nonzero k
+*  -----------------
+      do 150 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+*
+*  loop along transform
+*  --------------------
+      do 140 jjj = k , (n-1)*inc , 3*jstep
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 135 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 130 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jb+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jc+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(jc+j) = si2*(t2+u3) + co2*(u2-t3)
+      j = j + jump
+  130 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  135 continue
+  140 continue
+*-----( end of loop along transforms )
+      kk = kk + 2*la
+  150 continue
+*-----( end of loop on nonzero k )
+      la = 3*la
+  160 continue
+*-----( end of loop on type I radix-3 passes)
+*
+*  loop on type II radix-3 passes
+*  ------------------------------
+  400 continue
+*
+      do 480 ipass = mh+1 , m
+      jstep = (n*inc) / (3*la)
+      jstepl = jstep - ninc
+      laincl = la*ink - ninc
+*
+*  k=0 loop (no twiddle factors)
+*  -----------------------------
+      do 430 ll = 0 , (la-1)*ink , 3*jstep
+*
+      do 420 jjj = ll , (n-1)*inc , 3*la*ink
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 415 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = ja + laincl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jd + laincl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = jh + jstepl
+      if (ji.lt.istart) ji = ji + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep, shortloop
+      do 410 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      a(jb+j) = a(jd+j)
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      b(jb+j) = b(jd+j)
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jd+j) = t2 - u3
+      b(jd+j) = u2 + t3
+      a(jc+j) = t2 + u3
+      b(jc+j) = u2 - t3
+*----------------------
+      t1 = a(je+j) + a(jf+j)
+      t2 = a(jb+j) - 0.5 * t1
+      t3 = c1 * ( a(je+j) - a(jf+j) )
+      a(jf+j) = a(jh+j)
+      u1 = b(je+j) + b(jf+j)
+      u2 = b(jb+j) - 0.5 * u1
+      u3 = c1 * ( b(je+j) - b(jf+j) )
+      b(jf+j) = b(jh+j)
+      a(jb+j) = a(jb+j) + t1
+      b(jb+j) = b(jb+j) + u1
+      a(je+j) = t2 - u3
+      b(je+j) = u2 + t3
+      a(jh+j) = t2 + u3
+      b(jh+j) = u2 - t3
+*----------------------
+      t1 = a(jf+j) + a(ji+j)
+      t2 = a(jg+j) - 0.5 * t1
+      t3 = c1 * ( a(jf+j) - a(ji+j) )
+      t1 = a(jg+j) + t1
+      a(jg+j) = a(jc+j)
+      u1 = b(jf+j) + b(ji+j)
+      u2 = b(jg+j) - 0.5 * u1
+      u3 = c1 * ( b(jf+j) - b(ji+j) )
+      u1 = b(jg+j) + u1
+      b(jg+j) = b(jc+j)
+      a(jc+j) = t1
+      b(jc+j) = u1
+      a(jf+j) = t2 - u3
+      b(jf+j) = u2 + t3
+      a(ji+j) = t2 + u3
+      b(ji+j) = u2 - t3
+      j = j + jump
+  410 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  415 continue
+  420 continue
+  430 continue
+*-----( end of double loop for k=0 )
+*
+*  finished if last pass
+*  ---------------------
+      if (ipass.eq.m) go to 490
+*
+      kk = 2*la
+*
+*     loop on nonzero k
+*     -----------------
+      do 470 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+*
+*  double loop along first transform in block
+*  ------------------------------------------
+      do 460 ll = k , (la-1)*ink , 3*jstep
+*
+      do 450 jjj = ll , (n-1)*inc , 3*la*ink
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 445 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = ja + laincl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jd + laincl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = jh + jstepl
+      if (ji.lt.istart) ji = ji + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep, shortloop
+      do 440 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      a(jb+j) = a(jd+j)
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      b(jb+j) = b(jd+j)
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jd+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jd+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jc+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(jc+j) = si2*(t2+u3) + co2*(u2-t3)
+*----------------------
+      t1 = a(je+j) + a(jf+j)
+      t2 = a(jb+j) - 0.5 * t1
+      t3 = c1 * ( a(je+j) - a(jf+j) )
+      a(jf+j) = a(jh+j)
+      u1 = b(je+j) + b(jf+j)
+      u2 = b(jb+j) - 0.5 * u1
+      u3 = c1 * ( b(je+j) - b(jf+j) )
+      b(jf+j) = b(jh+j)
+      a(jb+j) = a(jb+j) + t1
+      b(jb+j) = b(jb+j) + u1
+      a(je+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(je+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jh+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(jh+j) = si2*(t2+u3) + co2*(u2-t3)
+*----------------------
+      t1 = a(jf+j) + a(ji+j)
+      t2 = a(jg+j) - 0.5 * t1
+      t3 = c1 * ( a(jf+j) - a(ji+j) )
+      t1 = a(jg+j) + t1
+      a(jg+j) = a(jc+j)
+      u1 = b(jf+j) + b(ji+j)
+      u2 = b(jg+j) - 0.5 * u1
+      u3 = c1 * ( b(jf+j) - b(ji+j) )
+      u1 = b(jg+j) + u1
+      b(jg+j) = b(jc+j)
+      a(jc+j) = t1
+      b(jc+j) = u1
+      a(jf+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jf+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(ji+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(ji+j) = si2*(t2+u3) + co2*(u2-t3)
+      j = j + jump
+  440 continue
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  445 continue
+  450 continue
+  460 continue
+*-----( end of double loop for this k )
+      kk = kk + 2*la
+  470 continue
+*-----( end of loop over values of k )
+      la = 3*la
+  480 continue
+*-----( end of loop on type II radix-3 passes )
+*-----( nvex transforms completed)
+  490 continue
+      istart = istart + nvex * jump
+  500 continue
+*-----( end of loop on blocks of transforms )
+*
+      return
+      end
diff --git a/fft/gpfa3.f b/fft/gpfa3.f
new file mode 100755
index 0000000..5c2b571
--- /dev/null
+++ b/fft/gpfa3.f
@@ -0,0 +1,376 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      subroutine gpfa3(a,b,trigs,inc,jump,n,mm,lot,isign)
+*     fortran version of *gpfa3* -
+*     radix-3 section of self-sorting, in-place
+*        generalized PFA
+*
+*-------------------------------------------------------------------
+*
+      dimension a(*), b(*), trigs(*)
+      data sin60/0.866025403784437/
+      data lvr/128/
+*
+*     ***************************************************************
+*     *                                                             *
+*     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. *
+*     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE *
+*     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      *
+*     *                                                             *
+*     ***************************************************************
+*
+      n3 = 3**mm
+      inq = n/n3
+      jstepx = (n3-n) * inc
+      ninc = n * inc
+      ink = inc * inq
+      mu = mod(inq,3)
+      if (isign.eq.-1) mu = 3-mu
+      m = mm
+      mh = (m+1)/2
+      s = float(isign)
+      c1 = sin60
+      if (mu.eq.2) c1 = -c1
+*
+      nblox = 1 + (lot-1)/lvr
+      left = lot
+      s = float(isign)
+      istart = 1
+*
+*  loop on blocks of lvr transforms
+*  --------------------------------
+      do 500 nb = 1 , nblox
+*
+      if (left.le.lvr) then
+         nvex = left
+      else if (left.lt.(2*lvr)) then
+         nvex = left/2
+         nvex = nvex + mod(nvex,2)
+      else
+         nvex = lvr
+      endif
+      left = left - nvex
+*
+      la = 1
+*
+*  loop on type I radix-3 passes
+*  -----------------------------
+      do 160 ipass = 1 , mh
+      jstep = (n*inc) / (3*la)
+      jstepl = jstep - ninc
+*
+*  k = 0 loop (no twiddle factors)
+*  -------------------------------
+      do 120 jjj = 0 , (n-1)*inc , 3*jstep
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 115 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep, shortloop
+      do 110 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jb+j) = t2 - u3
+      b(jb+j) = u2 + t3
+      a(jc+j) = t2 + u3
+      b(jc+j) = u2 - t3
+      j = j + jump
+  110 continue
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  115 continue
+  120 continue
+*
+*  finished if n3 = 3
+*  ------------------
+      if (n3.eq.3) go to 490
+      kk = 2 * la
+*
+*  loop on nonzero k
+*  -----------------
+      do 150 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+*
+*  loop along transform
+*  --------------------
+      do 140 jjj = k , (n-1)*inc , 3*jstep
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 135 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep,shortloop
+      do 130 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jb+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jc+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(jc+j) = si2*(t2+u3) + co2*(u2-t3)
+      j = j + jump
+  130 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  135 continue
+  140 continue
+*-----( end of loop along transforms )
+      kk = kk + 2*la
+  150 continue
+*-----( end of loop on nonzero k )
+      la = 3*la
+  160 continue
+*-----( end of loop on type I radix-3 passes)
+*
+*  loop on type II radix-3 passes
+*  ------------------------------
+  400 continue
+*
+      do 480 ipass = mh+1 , m
+      jstep = (n*inc) / (3*la)
+      jstepl = jstep - ninc
+      laincl = la*ink - ninc
+*
+*  k=0 loop (no twiddle factors)
+*  -----------------------------
+      do 430 ll = 0 , (la-1)*ink , 3*jstep
+*
+      do 420 jjj = ll , (n-1)*inc , 3*la*ink
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 415 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = ja + laincl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jd + laincl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = jh + jstepl
+      if (ji.lt.istart) ji = ji + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep, shortloop
+      do 410 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      a(jb+j) = a(jd+j)
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      b(jb+j) = b(jd+j)
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jd+j) = t2 - u3
+      b(jd+j) = u2 + t3
+      a(jc+j) = t2 + u3
+      b(jc+j) = u2 - t3
+*----------------------
+      t1 = a(je+j) + a(jf+j)
+      t2 = a(jb+j) - 0.5 * t1
+      t3 = c1 * ( a(je+j) - a(jf+j) )
+      a(jf+j) = a(jh+j)
+      u1 = b(je+j) + b(jf+j)
+      u2 = b(jb+j) - 0.5 * u1
+      u3 = c1 * ( b(je+j) - b(jf+j) )
+      b(jf+j) = b(jh+j)
+      a(jb+j) = a(jb+j) + t1
+      b(jb+j) = b(jb+j) + u1
+      a(je+j) = t2 - u3
+      b(je+j) = u2 + t3
+      a(jh+j) = t2 + u3
+      b(jh+j) = u2 - t3
+*----------------------
+      t1 = a(jf+j) + a(ji+j)
+      t2 = a(jg+j) - 0.5 * t1
+      t3 = c1 * ( a(jf+j) - a(ji+j) )
+      t1 = a(jg+j) + t1
+      a(jg+j) = a(jc+j)
+      u1 = b(jf+j) + b(ji+j)
+      u2 = b(jg+j) - 0.5 * u1
+      u3 = c1 * ( b(jf+j) - b(ji+j) )
+      u1 = b(jg+j) + u1
+      b(jg+j) = b(jc+j)
+      a(jc+j) = t1
+      b(jc+j) = u1
+      a(jf+j) = t2 - u3
+      b(jf+j) = u2 + t3
+      a(ji+j) = t2 + u3
+      b(ji+j) = u2 - t3
+      j = j + jump
+  410 continue
+*-----( end of loop across transforms )
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  415 continue
+  420 continue
+  430 continue
+*-----( end of double loop for k=0 )
+*
+*  finished if last pass
+*  ---------------------
+      if (ipass.eq.m) go to 490
+*
+      kk = 2*la
+*
+*     loop on nonzero k
+*     -----------------
+      do 470 k = ink , jstep-ink , ink
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+*
+*  double loop along first transform in block
+*  ------------------------------------------
+      do 460 ll = k , (la-1)*ink , 3*jstep
+*
+      do 450 jjj = ll , (n-1)*inc , 3*la*ink
+      ja = istart + jjj
+*
+*  "transverse" loop
+*  -----------------
+      do 445 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = ja + laincl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = je + jstepl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jd + laincl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = jh + jstepl
+      if (ji.lt.istart) ji = ji + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+cdir$ ivdep, shortloop
+      do 440 l = 1 , nvex
+      t1 = a(jb+j) + a(jc+j)
+      t2 = a(ja+j) - 0.5 * t1
+      t3 = c1 * ( a(jb+j) - a(jc+j) )
+      a(jb+j) = a(jd+j)
+      u1 = b(jb+j) + b(jc+j)
+      u2 = b(ja+j) - 0.5 * u1
+      u3 = c1 * ( b(jb+j) - b(jc+j) )
+      b(jb+j) = b(jd+j)
+      a(ja+j) = a(ja+j) + t1
+      b(ja+j) = b(ja+j) + u1
+      a(jd+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jd+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jc+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(jc+j) = si2*(t2+u3) + co2*(u2-t3)
+*----------------------
+      t1 = a(je+j) + a(jf+j)
+      t2 = a(jb+j) - 0.5 * t1
+      t3 = c1 * ( a(je+j) - a(jf+j) )
+      a(jf+j) = a(jh+j)
+      u1 = b(je+j) + b(jf+j)
+      u2 = b(jb+j) - 0.5 * u1
+      u3 = c1 * ( b(je+j) - b(jf+j) )
+      b(jf+j) = b(jh+j)
+      a(jb+j) = a(jb+j) + t1
+      b(jb+j) = b(jb+j) + u1
+      a(je+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(je+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(jh+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(jh+j) = si2*(t2+u3) + co2*(u2-t3)
+*----------------------
+      t1 = a(jf+j) + a(ji+j)
+      t2 = a(jg+j) - 0.5 * t1
+      t3 = c1 * ( a(jf+j) - a(ji+j) )
+      t1 = a(jg+j) + t1
+      a(jg+j) = a(jc+j)
+      u1 = b(jf+j) + b(ji+j)
+      u2 = b(jg+j) - 0.5 * u1
+      u3 = c1 * ( b(jf+j) - b(ji+j) )
+      u1 = b(jg+j) + u1
+      b(jg+j) = b(jc+j)
+      a(jc+j) = t1
+      b(jc+j) = u1
+      a(jf+j) = co1*(t2-u3) - si1*(u2+t3)
+      b(jf+j) = si1*(t2-u3) + co1*(u2+t3)
+      a(ji+j) = co2*(t2+u3) - si2*(u2-t3)
+      b(ji+j) = si2*(t2+u3) + co2*(u2-t3)
+      j = j + jump
+  440 continue
+*-----(end of loop across transforms)
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  445 continue
+  450 continue
+  460 continue
+*-----( end of double loop for this k )
+      kk = kk + 2*la
+  470 continue
+*-----( end of loop over values of k )
+      la = 3*la
+  480 continue
+*-----( end of loop on type II radix-3 passes )
+*-----( nvex transforms completed)
+  490 continue
+      istart = istart + nvex * jump
+  500 continue
+*-----( end of loop on blocks of transforms )
+*
+      return
+      end
diff --git a/fft/gpfa5.F b/fft/gpfa5.F
new file mode 100755
index 0000000..6e951ef
--- /dev/null
+++ b/fft/gpfa5.F
@@ -0,0 +1,719 @@
+      subroutine gpfa5(a,b,trigs,inc,jump,n,mm,lot,isign)
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+*     fortran version of *gpfa5* -
+*     radix-5 section of self-sorting, in-place,
+*        generalized pfa
+*
+*-------------------------------------------------------------------
+*
+      dimension a(*), b(*), trigs(*)
+      data sin36/0.587785252292473/, sin72/0.951056516295154/,
+     *      qrt5/0.559016994374947/
+      data lvr/128/
+*
+*     ***************************************************************
+*     *                                                             *
+*     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. *
+*     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE *
+*     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      *
+*     *                                                             *
+*     ***************************************************************
+*
+      n5 = 5 ** mm
+      inq = n / n5
+      jstepx = (n5-n) * inc
+      ninc = n * inc
+      ink = inc * inq
+      mu = mod(inq,5)
+      if (isign.eq.-1) mu = 5 - mu
+*
+      m = mm
+      mh = (m+1)/2
+      s = float(isign)
+      c1 = qrt5
+      c2 = sin72
+      c3 = sin36
+      if (mu.eq.2.or.mu.eq.3) then
+         c1 = -c1
+         c2 = sin36
+         c3 = sin72
+      endif
+      if (mu.eq.3.or.mu.eq.4) c2 = -c2
+      if (mu.eq.2.or.mu.eq.4) c3 = -c3
+*
+      nblox = 1 + (lot-1)/lvr
+      left = lot
+      s = float(isign)
+      istart = 1
+*
+*  loop on blocks of lvr transforms
+*  --------------------------------
+      do 500 nb = 1 , nblox
+*
+      if (left.le.lvr) then
+         nvex = left
+      else if (left.lt.(2*lvr)) then
+         nvex = left/2
+         nvex = nvex + mod(nvex,2)
+      else
+         nvex = lvr
+      endif
+      left = left - nvex
+*
+      la = 1
+*
+*  loop on type I radix-5 passes
+*  -----------------------------
+      do 160 ipass = 1 , mh
+      jstep = (n*inc) / (5*la)
+      jstepl = jstep - ninc
+      kk = 0
+*
+*  loop on k
+*  ---------
+      do 150 k = 0 , jstep-ink , ink
+*
+      if (k.gt.0) then
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+      co4 = trigs(4*kk+1)
+      si4 = s*trigs(4*kk+2)
+      endif
+*
+*  loop along transform
+*  --------------------
+      do 140 jjj = k , (n-1)*inc , 5*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 135 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+      if (k.eq.0) then
+*
+#ifdef _CRAY
+cdir$ ivdep,shortloop
+#endif
+      do 110 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jb+j) = t8 - u11
+      b(jb+j) = u8 + t11
+      a(je+j) = t8 + u11
+      b(je+j) = u8 - t11
+      a(jc+j) = t9 - u10
+      b(jc+j) = u9 + t10
+      a(jd+j) = t9 + u10
+      b(jd+j) = u9 - t10
+      j = j + jump
+  110 continue
+*
+      else
+*
+#ifdef _CRAY
+cdir$ ivdep,shortloop
+#endif
+      do 130 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jb+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jb+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(je+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(je+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jc+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jc+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jd+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jd+j) = si3*(t9+u10) + co3*(u9-t10)
+      j = j + jump
+  130 continue
+*
+      endif
+*
+*-----( end of loop across transforms )
+*
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  135 continue
+  140 continue
+*-----( end of loop along transforms )
+      kk = kk + 2*la
+  150 continue
+*-----( end of loop on nonzero k )
+      la = 5*la
+  160 continue
+*-----( end of loop on type I radix-5 passes)
+*
+      if (n.eq.5) go to 490
+*
+*  loop on type II radix-5 passes
+*  ------------------------------
+  400 continue
+*
+      do 480 ipass = mh+1 , m
+      jstep = (n*inc) / (5*la)
+      jstepl = jstep - ninc
+      laincl = la * ink - ninc
+      kk = 0
+*
+*     loop on k
+*     ---------
+      do 470 k = 0 , jstep-ink , ink
+*
+      if (k.gt.0) then
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+      co4 = trigs(4*kk+1)
+      si4 = s*trigs(4*kk+2)
+      endif
+*
+*  double loop along first transform in block
+*  ------------------------------------------
+      do 460 ll = k , (la-1)*ink , 5*jstep
+*
+      do 450 jjj = ll , (n-1)*inc , 5*la*ink
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 445 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = ja + laincl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = jh + jstepl
+      if (ji.lt.istart) ji = ji + ninc
+      jj = ji + jstepl
+      if (jj.lt.istart) jj = jj + ninc
+      jk = jf + laincl
+      if (jk.lt.istart) jk = jk + ninc
+      jl = jk + jstepl
+      if (jl.lt.istart) jl = jl + ninc
+      jm = jl + jstepl
+      if (jm.lt.istart) jm = jm + ninc
+      jn = jm + jstepl
+      if (jn.lt.istart) jn = jn + ninc
+      jo = jn + jstepl
+      if (jo.lt.istart) jo = jo + ninc
+      jp = jk + laincl
+      if (jp.lt.istart) jp = jp + ninc
+      jq = jp + jstepl
+      if (jq.lt.istart) jq = jq + ninc
+      jr = jq + jstepl
+      if (jr.lt.istart) jr = jr + ninc
+      js = jr + jstepl
+      if (js.lt.istart) js = js + ninc
+      jt = js + jstepl
+      if (jt.lt.istart) jt = jt + ninc
+      ju = jp + laincl
+      if (ju.lt.istart) ju = ju + ninc
+      jv = ju + jstepl
+      if (jv.lt.istart) jv = jv + ninc
+      jw = jv + jstepl
+      if (jw.lt.istart) jw = jw + ninc
+      jx = jw + jstepl
+      if (jx.lt.istart) jx = jx + ninc
+      jy = jx + jstepl
+      if (jy.lt.istart) jy = jy + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+      if (k.eq.0) then
+*
+#ifdef _CRAY
+cdir$ ivdep,shortloop
+#endif
+      do 410 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      a(jb+j) = a(jf+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jc+j) = a(jk+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      b(jb+j) = b(jf+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jc+j) = b(jk+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jf+j) = t8 - u11
+      b(jf+j) = u8 + t11
+      a(je+j) = t8 + u11
+      b(je+j) = u8 - t11
+      a(jk+j) = t9 - u10
+      b(jk+j) = u9 + t10
+      a(jd+j) = t9 + u10
+      b(jd+j) = u9 - t10
+*----------------------
+      t1 = a(jg+j) + a(jj+j)
+      t2 = a(jh+j) + a(ji+j)
+      t3 = a(jg+j) - a(jj+j)
+      t4 = a(jh+j) - a(ji+j)
+      a(jh+j) = a(jl+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jb+j) - 0.25 * t5
+      a(jb+j) = a(jb+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ji+j) = a(jq+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jg+j) + b(jj+j)
+      u2 = b(jh+j) + b(ji+j)
+      u3 = b(jg+j) - b(jj+j)
+      u4 = b(jh+j) - b(ji+j)
+      b(jh+j) = b(jl+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jb+j) - 0.25 * u5
+      b(jb+j) = b(jb+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ji+j) = b(jq+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jg+j) = t8 - u11
+      b(jg+j) = u8 + t11
+      a(jj+j) = t8 + u11
+      b(jj+j) = u8 - t11
+      a(jl+j) = t9 - u10
+      b(jl+j) = u9 + t10
+      a(jq+j) = t9 + u10
+      b(jq+j) = u9 - t10
+*----------------------
+      t1 = a(jh+j) + a(jo+j)
+      t2 = a(jm+j) + a(jn+j)
+      t3 = a(jh+j) - a(jo+j)
+      t4 = a(jm+j) - a(jn+j)
+      a(jn+j) = a(jr+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jc+j) - 0.25 * t5
+      a(jc+j) = a(jc+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jo+j) = a(jw+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jh+j) + b(jo+j)
+      u2 = b(jm+j) + b(jn+j)
+      u3 = b(jh+j) - b(jo+j)
+      u4 = b(jm+j) - b(jn+j)
+      b(jn+j) = b(jr+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jc+j) - 0.25 * u5
+      b(jc+j) = b(jc+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jo+j) = b(jw+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jh+j) = t8 - u11
+      b(jh+j) = u8 + t11
+      a(jw+j) = t8 + u11
+      b(jw+j) = u8 - t11
+      a(jm+j) = t9 - u10
+      b(jm+j) = u9 + t10
+      a(jr+j) = t9 + u10
+      b(jr+j) = u9 - t10
+*----------------------
+      t1 = a(ji+j) + a(jt+j)
+      t2 = a(jn+j) + a(js+j)
+      t3 = a(ji+j) - a(jt+j)
+      t4 = a(jn+j) - a(js+j)
+      a(jt+j) = a(jx+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jp+j) - 0.25 * t5
+      ax = a(jp+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jp+j) = a(jd+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(jd+j) = ax
+      u1 = b(ji+j) + b(jt+j)
+      u2 = b(jn+j) + b(js+j)
+      u3 = b(ji+j) - b(jt+j)
+      u4 = b(jn+j) - b(js+j)
+      b(jt+j) = b(jx+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jp+j) - 0.25 * u5
+      bx = b(jp+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jp+j) = b(jd+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(jd+j) = bx
+      a(ji+j) = t8 - u11
+      b(ji+j) = u8 + t11
+      a(jx+j) = t8 + u11
+      b(jx+j) = u8 - t11
+      a(jn+j) = t9 - u10
+      b(jn+j) = u9 + t10
+      a(js+j) = t9 + u10
+      b(js+j) = u9 - t10
+*----------------------
+      t1 = a(jv+j) + a(jy+j)
+      t2 = a(jo+j) + a(jt+j)
+      t3 = a(jv+j) - a(jy+j)
+      t4 = a(jo+j) - a(jt+j)
+      a(jv+j) = a(jj+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ju+j) - 0.25 * t5
+      ax = a(ju+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ju+j) = a(je+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(je+j) = ax
+      u1 = b(jv+j) + b(jy+j)
+      u2 = b(jo+j) + b(jt+j)
+      u3 = b(jv+j) - b(jy+j)
+      u4 = b(jo+j) - b(jt+j)
+      b(jv+j) = b(jj+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ju+j) - 0.25 * u5
+      bx = b(ju+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ju+j) = b(je+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(je+j) = bx
+      a(jj+j) = t8 - u11
+      b(jj+j) = u8 + t11
+      a(jy+j) = t8 + u11
+      b(jy+j) = u8 - t11
+      a(jo+j) = t9 - u10
+      b(jo+j) = u9 + t10
+      a(jt+j) = t9 + u10
+      b(jt+j) = u9 - t10
+      j = j + jump
+  410 continue
+*
+      else
+*
+#ifdef _CRAY
+cdir$ ivdep,shortloop
+#endif
+      do 440 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      a(jb+j) = a(jf+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jc+j) = a(jk+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      b(jb+j) = b(jf+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jc+j) = b(jk+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jf+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jf+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(je+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(je+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jk+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jk+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jd+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jd+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(jg+j) + a(jj+j)
+      t2 = a(jh+j) + a(ji+j)
+      t3 = a(jg+j) - a(jj+j)
+      t4 = a(jh+j) - a(ji+j)
+      a(jh+j) = a(jl+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jb+j) - 0.25 * t5
+      a(jb+j) = a(jb+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ji+j) = a(jq+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jg+j) + b(jj+j)
+      u2 = b(jh+j) + b(ji+j)
+      u3 = b(jg+j) - b(jj+j)
+      u4 = b(jh+j) - b(ji+j)
+      b(jh+j) = b(jl+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jb+j) - 0.25 * u5
+      b(jb+j) = b(jb+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ji+j) = b(jq+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jg+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jg+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jj+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jj+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jl+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jl+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jq+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jq+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(jh+j) + a(jo+j)
+      t2 = a(jm+j) + a(jn+j)
+      t3 = a(jh+j) - a(jo+j)
+      t4 = a(jm+j) - a(jn+j)
+      a(jn+j) = a(jr+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jc+j) - 0.25 * t5
+      a(jc+j) = a(jc+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jo+j) = a(jw+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jh+j) + b(jo+j)
+      u2 = b(jm+j) + b(jn+j)
+      u3 = b(jh+j) - b(jo+j)
+      u4 = b(jm+j) - b(jn+j)
+      b(jn+j) = b(jr+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jc+j) - 0.25 * u5
+      b(jc+j) = b(jc+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jo+j) = b(jw+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jh+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jh+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jw+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jw+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jm+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jm+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jr+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jr+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(ji+j) + a(jt+j)
+      t2 = a(jn+j) + a(js+j)
+      t3 = a(ji+j) - a(jt+j)
+      t4 = a(jn+j) - a(js+j)
+      a(jt+j) = a(jx+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jp+j) - 0.25 * t5
+      ax = a(jp+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jp+j) = a(jd+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(jd+j) = ax
+      u1 = b(ji+j) + b(jt+j)
+      u2 = b(jn+j) + b(js+j)
+      u3 = b(ji+j) - b(jt+j)
+      u4 = b(jn+j) - b(js+j)
+      b(jt+j) = b(jx+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jp+j) - 0.25 * u5
+      bx = b(jp+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jp+j) = b(jd+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(jd+j) = bx
+      a(ji+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(ji+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jx+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jx+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jn+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jn+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(js+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(js+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(jv+j) + a(jy+j)
+      t2 = a(jo+j) + a(jt+j)
+      t3 = a(jv+j) - a(jy+j)
+      t4 = a(jo+j) - a(jt+j)
+      a(jv+j) = a(jj+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ju+j) - 0.25 * t5
+      ax = a(ju+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ju+j) = a(je+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(je+j) = ax
+      u1 = b(jv+j) + b(jy+j)
+      u2 = b(jo+j) + b(jt+j)
+      u3 = b(jv+j) - b(jy+j)
+      u4 = b(jo+j) - b(jt+j)
+      b(jv+j) = b(jj+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ju+j) - 0.25 * u5
+      bx = b(ju+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ju+j) = b(je+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(je+j) = bx
+      a(jj+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jj+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jy+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jy+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jo+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jo+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jt+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jt+j) = si3*(t9+u10) + co3*(u9-t10)
+      j = j + jump
+  440 continue
+*
+      endif
+*
+*-----(end of loop across transforms)
+*
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  445 continue
+  450 continue
+  460 continue
+*-----( end of double loop for this k )
+      kk = kk + 2*la
+  470 continue
+*-----( end of loop over values of k )
+      la = 5*la
+  480 continue
+*-----( end of loop on type II radix-5 passes )
+*-----( nvex transforms completed)
+  490 continue
+      istart = istart + nvex * jump
+  500 continue
+*-----( end of loop on blocks of transforms )
+*
+      return
+      end
diff --git a/fft/gpfa5.f b/fft/gpfa5.f
new file mode 100755
index 0000000..8c43f48
--- /dev/null
+++ b/fft/gpfa5.f
@@ -0,0 +1,708 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      subroutine gpfa5(a,b,trigs,inc,jump,n,mm,lot,isign)
+*     fortran version of *gpfa5* -
+*     radix-5 section of self-sorting, in-place,
+*        generalized pfa
+*
+*-------------------------------------------------------------------
+*
+      dimension a(*), b(*), trigs(*)
+      data sin36/0.587785252292473/, sin72/0.951056516295154/,
+     *      qrt5/0.559016994374947/
+      data lvr/128/
+*
+*     ***************************************************************
+*     *                                                             *
+*     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. *
+*     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE *
+*     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      *
+*     *                                                             *
+*     ***************************************************************
+*
+      n5 = 5 ** mm
+      inq = n / n5
+      jstepx = (n5-n) * inc
+      ninc = n * inc
+      ink = inc * inq
+      mu = mod(inq,5)
+      if (isign.eq.-1) mu = 5 - mu
+*
+      m = mm
+      mh = (m+1)/2
+      s = float(isign)
+      c1 = qrt5
+      c2 = sin72
+      c3 = sin36
+      if (mu.eq.2.or.mu.eq.3) then
+         c1 = -c1
+         c2 = sin36
+         c3 = sin72
+      endif
+      if (mu.eq.3.or.mu.eq.4) c2 = -c2
+      if (mu.eq.2.or.mu.eq.4) c3 = -c3
+*
+      nblox = 1 + (lot-1)/lvr
+      left = lot
+      s = float(isign)
+      istart = 1
+*
+*  loop on blocks of lvr transforms
+*  --------------------------------
+      do 500 nb = 1 , nblox
+*
+      if (left.le.lvr) then
+         nvex = left
+      else if (left.lt.(2*lvr)) then
+         nvex = left/2
+         nvex = nvex + mod(nvex,2)
+      else
+         nvex = lvr
+      endif
+      left = left - nvex
+*
+      la = 1
+*
+*  loop on type I radix-5 passes
+*  -----------------------------
+      do 160 ipass = 1 , mh
+      jstep = (n*inc) / (5*la)
+      jstepl = jstep - ninc
+      kk = 0
+*
+*  loop on k
+*  ---------
+      do 150 k = 0 , jstep-ink , ink
+*
+      if (k.gt.0) then
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+      co4 = trigs(4*kk+1)
+      si4 = s*trigs(4*kk+2)
+      endif
+*
+*  loop along transform
+*  --------------------
+      do 140 jjj = k , (n-1)*inc , 5*jstep
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 135 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+      if (k.eq.0) then
+*
+      do 110 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jb+j) = t8 - u11
+      b(jb+j) = u8 + t11
+      a(je+j) = t8 + u11
+      b(je+j) = u8 - t11
+      a(jc+j) = t9 - u10
+      b(jc+j) = u9 + t10
+      a(jd+j) = t9 + u10
+      b(jd+j) = u9 - t10
+      j = j + jump
+  110 continue
+*
+      else
+*
+      do 130 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jb+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jb+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(je+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(je+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jc+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jc+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jd+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jd+j) = si3*(t9+u10) + co3*(u9-t10)
+      j = j + jump
+  130 continue
+*
+      endif
+*
+*-----( end of loop across transforms )
+*
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  135 continue
+  140 continue
+*-----( end of loop along transforms )
+      kk = kk + 2*la
+  150 continue
+*-----( end of loop on nonzero k )
+      la = 5*la
+  160 continue
+*-----( end of loop on type I radix-5 passes)
+*
+      if (n.eq.5) go to 490
+*
+*  loop on type II radix-5 passes
+*  ------------------------------
+  400 continue
+*
+      do 480 ipass = mh+1 , m
+      jstep = (n*inc) / (5*la)
+      jstepl = jstep - ninc
+      laincl = la * ink - ninc
+      kk = 0
+*
+*     loop on k
+*     ---------
+      do 470 k = 0 , jstep-ink , ink
+*
+      if (k.gt.0) then
+      co1 = trigs(kk+1)
+      si1 = s*trigs(kk+2)
+      co2 = trigs(2*kk+1)
+      si2 = s*trigs(2*kk+2)
+      co3 = trigs(3*kk+1)
+      si3 = s*trigs(3*kk+2)
+      co4 = trigs(4*kk+1)
+      si4 = s*trigs(4*kk+2)
+      endif
+*
+*  double loop along first transform in block
+*  ------------------------------------------
+      do 460 ll = k , (la-1)*ink , 5*jstep
+*
+      do 450 jjj = ll , (n-1)*inc , 5*la*ink
+      ja = istart + jjj
+*
+*     "transverse" loop
+*     -----------------
+      do 445 nu = 1 , inq
+      jb = ja + jstepl
+      if (jb.lt.istart) jb = jb + ninc
+      jc = jb + jstepl
+      if (jc.lt.istart) jc = jc + ninc
+      jd = jc + jstepl
+      if (jd.lt.istart) jd = jd + ninc
+      je = jd + jstepl
+      if (je.lt.istart) je = je + ninc
+      jf = ja + laincl
+      if (jf.lt.istart) jf = jf + ninc
+      jg = jf + jstepl
+      if (jg.lt.istart) jg = jg + ninc
+      jh = jg + jstepl
+      if (jh.lt.istart) jh = jh + ninc
+      ji = jh + jstepl
+      if (ji.lt.istart) ji = ji + ninc
+      jj = ji + jstepl
+      if (jj.lt.istart) jj = jj + ninc
+      jk = jf + laincl
+      if (jk.lt.istart) jk = jk + ninc
+      jl = jk + jstepl
+      if (jl.lt.istart) jl = jl + ninc
+      jm = jl + jstepl
+      if (jm.lt.istart) jm = jm + ninc
+      jn = jm + jstepl
+      if (jn.lt.istart) jn = jn + ninc
+      jo = jn + jstepl
+      if (jo.lt.istart) jo = jo + ninc
+      jp = jk + laincl
+      if (jp.lt.istart) jp = jp + ninc
+      jq = jp + jstepl
+      if (jq.lt.istart) jq = jq + ninc
+      jr = jq + jstepl
+      if (jr.lt.istart) jr = jr + ninc
+      js = jr + jstepl
+      if (js.lt.istart) js = js + ninc
+      jt = js + jstepl
+      if (jt.lt.istart) jt = jt + ninc
+      ju = jp + laincl
+      if (ju.lt.istart) ju = ju + ninc
+      jv = ju + jstepl
+      if (jv.lt.istart) jv = jv + ninc
+      jw = jv + jstepl
+      if (jw.lt.istart) jw = jw + ninc
+      jx = jw + jstepl
+      if (jx.lt.istart) jx = jx + ninc
+      jy = jx + jstepl
+      if (jy.lt.istart) jy = jy + ninc
+      j = 0
+*
+*  loop across transforms
+*  ----------------------
+      if (k.eq.0) then
+*
+      do 410 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      a(jb+j) = a(jf+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jc+j) = a(jk+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      b(jb+j) = b(jf+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jc+j) = b(jk+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jf+j) = t8 - u11
+      b(jf+j) = u8 + t11
+      a(je+j) = t8 + u11
+      b(je+j) = u8 - t11
+      a(jk+j) = t9 - u10
+      b(jk+j) = u9 + t10
+      a(jd+j) = t9 + u10
+      b(jd+j) = u9 - t10
+*----------------------
+      t1 = a(jg+j) + a(jj+j)
+      t2 = a(jh+j) + a(ji+j)
+      t3 = a(jg+j) - a(jj+j)
+      t4 = a(jh+j) - a(ji+j)
+      a(jh+j) = a(jl+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jb+j) - 0.25 * t5
+      a(jb+j) = a(jb+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ji+j) = a(jq+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jg+j) + b(jj+j)
+      u2 = b(jh+j) + b(ji+j)
+      u3 = b(jg+j) - b(jj+j)
+      u4 = b(jh+j) - b(ji+j)
+      b(jh+j) = b(jl+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jb+j) - 0.25 * u5
+      b(jb+j) = b(jb+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ji+j) = b(jq+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jg+j) = t8 - u11
+      b(jg+j) = u8 + t11
+      a(jj+j) = t8 + u11
+      b(jj+j) = u8 - t11
+      a(jl+j) = t9 - u10
+      b(jl+j) = u9 + t10
+      a(jq+j) = t9 + u10
+      b(jq+j) = u9 - t10
+*----------------------
+      t1 = a(jh+j) + a(jo+j)
+      t2 = a(jm+j) + a(jn+j)
+      t3 = a(jh+j) - a(jo+j)
+      t4 = a(jm+j) - a(jn+j)
+      a(jn+j) = a(jr+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jc+j) - 0.25 * t5
+      a(jc+j) = a(jc+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jo+j) = a(jw+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jh+j) + b(jo+j)
+      u2 = b(jm+j) + b(jn+j)
+      u3 = b(jh+j) - b(jo+j)
+      u4 = b(jm+j) - b(jn+j)
+      b(jn+j) = b(jr+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jc+j) - 0.25 * u5
+      b(jc+j) = b(jc+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jo+j) = b(jw+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jh+j) = t8 - u11
+      b(jh+j) = u8 + t11
+      a(jw+j) = t8 + u11
+      b(jw+j) = u8 - t11
+      a(jm+j) = t9 - u10
+      b(jm+j) = u9 + t10
+      a(jr+j) = t9 + u10
+      b(jr+j) = u9 - t10
+*----------------------
+      t1 = a(ji+j) + a(jt+j)
+      t2 = a(jn+j) + a(js+j)
+      t3 = a(ji+j) - a(jt+j)
+      t4 = a(jn+j) - a(js+j)
+      a(jt+j) = a(jx+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jp+j) - 0.25 * t5
+      ax = a(jp+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jp+j) = a(jd+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(jd+j) = ax
+      u1 = b(ji+j) + b(jt+j)
+      u2 = b(jn+j) + b(js+j)
+      u3 = b(ji+j) - b(jt+j)
+      u4 = b(jn+j) - b(js+j)
+      b(jt+j) = b(jx+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jp+j) - 0.25 * u5
+      bx = b(jp+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jp+j) = b(jd+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(jd+j) = bx
+      a(ji+j) = t8 - u11
+      b(ji+j) = u8 + t11
+      a(jx+j) = t8 + u11
+      b(jx+j) = u8 - t11
+      a(jn+j) = t9 - u10
+      b(jn+j) = u9 + t10
+      a(js+j) = t9 + u10
+      b(js+j) = u9 - t10
+*----------------------
+      t1 = a(jv+j) + a(jy+j)
+      t2 = a(jo+j) + a(jt+j)
+      t3 = a(jv+j) - a(jy+j)
+      t4 = a(jo+j) - a(jt+j)
+      a(jv+j) = a(jj+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ju+j) - 0.25 * t5
+      ax = a(ju+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ju+j) = a(je+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(je+j) = ax
+      u1 = b(jv+j) + b(jy+j)
+      u2 = b(jo+j) + b(jt+j)
+      u3 = b(jv+j) - b(jy+j)
+      u4 = b(jo+j) - b(jt+j)
+      b(jv+j) = b(jj+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ju+j) - 0.25 * u5
+      bx = b(ju+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ju+j) = b(je+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(je+j) = bx
+      a(jj+j) = t8 - u11
+      b(jj+j) = u8 + t11
+      a(jy+j) = t8 + u11
+      b(jy+j) = u8 - t11
+      a(jo+j) = t9 - u10
+      b(jo+j) = u9 + t10
+      a(jt+j) = t9 + u10
+      b(jt+j) = u9 - t10
+      j = j + jump
+  410 continue
+*
+      else
+*
+      do 440 l = 1 , nvex
+      t1 = a(jb+j) + a(je+j)
+      t2 = a(jc+j) + a(jd+j)
+      t3 = a(jb+j) - a(je+j)
+      t4 = a(jc+j) - a(jd+j)
+      a(jb+j) = a(jf+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ja+j) - 0.25 * t5
+      a(ja+j) = a(ja+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jc+j) = a(jk+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jb+j) + b(je+j)
+      u2 = b(jc+j) + b(jd+j)
+      u3 = b(jb+j) - b(je+j)
+      u4 = b(jc+j) - b(jd+j)
+      b(jb+j) = b(jf+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ja+j) - 0.25 * u5
+      b(ja+j) = b(ja+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jc+j) = b(jk+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jf+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jf+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(je+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(je+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jk+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jk+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jd+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jd+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(jg+j) + a(jj+j)
+      t2 = a(jh+j) + a(ji+j)
+      t3 = a(jg+j) - a(jj+j)
+      t4 = a(jh+j) - a(ji+j)
+      a(jh+j) = a(jl+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jb+j) - 0.25 * t5
+      a(jb+j) = a(jb+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ji+j) = a(jq+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jg+j) + b(jj+j)
+      u2 = b(jh+j) + b(ji+j)
+      u3 = b(jg+j) - b(jj+j)
+      u4 = b(jh+j) - b(ji+j)
+      b(jh+j) = b(jl+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jb+j) - 0.25 * u5
+      b(jb+j) = b(jb+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ji+j) = b(jq+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jg+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jg+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jj+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jj+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jl+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jl+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jq+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jq+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(jh+j) + a(jo+j)
+      t2 = a(jm+j) + a(jn+j)
+      t3 = a(jh+j) - a(jo+j)
+      t4 = a(jm+j) - a(jn+j)
+      a(jn+j) = a(jr+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jc+j) - 0.25 * t5
+      a(jc+j) = a(jc+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jo+j) = a(jw+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      u1 = b(jh+j) + b(jo+j)
+      u2 = b(jm+j) + b(jn+j)
+      u3 = b(jh+j) - b(jo+j)
+      u4 = b(jm+j) - b(jn+j)
+      b(jn+j) = b(jr+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jc+j) - 0.25 * u5
+      b(jc+j) = b(jc+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jo+j) = b(jw+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      a(jh+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jh+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jw+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jw+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jm+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jm+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jr+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jr+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(ji+j) + a(jt+j)
+      t2 = a(jn+j) + a(js+j)
+      t3 = a(ji+j) - a(jt+j)
+      t4 = a(jn+j) - a(js+j)
+      a(jt+j) = a(jx+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(jp+j) - 0.25 * t5
+      ax = a(jp+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(jp+j) = a(jd+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(jd+j) = ax
+      u1 = b(ji+j) + b(jt+j)
+      u2 = b(jn+j) + b(js+j)
+      u3 = b(ji+j) - b(jt+j)
+      u4 = b(jn+j) - b(js+j)
+      b(jt+j) = b(jx+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(jp+j) - 0.25 * u5
+      bx = b(jp+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(jp+j) = b(jd+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(jd+j) = bx
+      a(ji+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(ji+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jx+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jx+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jn+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jn+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(js+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(js+j) = si3*(t9+u10) + co3*(u9-t10)
+*----------------------
+      t1 = a(jv+j) + a(jy+j)
+      t2 = a(jo+j) + a(jt+j)
+      t3 = a(jv+j) - a(jy+j)
+      t4 = a(jo+j) - a(jt+j)
+      a(jv+j) = a(jj+j)
+      t5 = t1 + t2
+      t6 = c1 * ( t1 - t2 )
+      t7 = a(ju+j) - 0.25 * t5
+      ax = a(ju+j) + t5
+      t8 = t7 + t6
+      t9 = t7 - t6
+      a(ju+j) = a(je+j)
+      t10 = c3 * t3 - c2 * t4
+      t11 = c2 * t3 + c3 * t4
+      a(je+j) = ax
+      u1 = b(jv+j) + b(jy+j)
+      u2 = b(jo+j) + b(jt+j)
+      u3 = b(jv+j) - b(jy+j)
+      u4 = b(jo+j) - b(jt+j)
+      b(jv+j) = b(jj+j)
+      u5 = u1 + u2
+      u6 = c1 * ( u1 - u2 )
+      u7 = b(ju+j) - 0.25 * u5
+      bx = b(ju+j) + u5
+      u8 = u7 + u6
+      u9 = u7 - u6
+      b(ju+j) = b(je+j)
+      u10 = c3 * u3 - c2 * u4
+      u11 = c2 * u3 + c3 * u4
+      b(je+j) = bx
+      a(jj+j) = co1*(t8-u11) - si1*(u8+t11)
+      b(jj+j) = si1*(t8-u11) + co1*(u8+t11)
+      a(jy+j) = co4*(t8+u11) - si4*(u8-t11)
+      b(jy+j) = si4*(t8+u11) + co4*(u8-t11)
+      a(jo+j) = co2*(t9-u10) - si2*(u9+t10)
+      b(jo+j) = si2*(t9-u10) + co2*(u9+t10)
+      a(jt+j) = co3*(t9+u10) - si3*(u9-t10)
+      b(jt+j) = si3*(t9+u10) + co3*(u9-t10)
+      j = j + jump
+  440 continue
+*
+      endif
+*
+*-----(end of loop across transforms)
+*
+      ja = ja + jstepx
+      if (ja.lt.istart) ja = ja + ninc
+  445 continue
+  450 continue
+  460 continue
+*-----( end of double loop for this k )
+      kk = kk + 2*la
+  470 continue
+*-----( end of loop over values of k )
+      la = 5*la
+  480 continue
+*-----( end of loop on type II radix-5 passes )
+*-----( nvex transforms completed)
+  490 continue
+      istart = istart + nvex * jump
+  500 continue
+*-----( end of loop on blocks of transforms )
+*
+      return
+      end
diff --git a/fft/qpassf.f b/fft/qpassf.f
new file mode 100755
index 0000000..8ee711f
--- /dev/null
+++ b/fft/qpassf.f
@@ -0,0 +1,920 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+C     SUBROUTINE 'QPASSF' - PERFORMS ONE PASS THROUGH DATA AS PART      
+C     OF MULTIPLE REAL FFT (FOURIER ANALYSIS) ROUTINE                   
+C                                                                       
+C     A IS FIRST REAL INPUT VECTOR                                      
+C         EQUIVALENCE B(1) WITH A(IFAC*LA*INC1+1)                       
+C     C IS FIRST REAL OUTPUT VECTOR                                     
+C         EQUIVALENCE D(1) WITH C(LA*INC2+1)                            
+C     TRIGS IS A PRECALCULATED LIST OF SINES & COSINES                  
+C     INC1 IS THE ADDRESSING INCREMENT FOR A                            
+C     INC2 IS THE ADDRESSING INCREMENT FOR C                            
+C     INC3 IS THE INCREMENT BETWEEN INPUT VECTORS A                     
+C     INC4 IS THE INCREMENT BETWEEN OUTPUT VECTORS C                    
+C     LOT IS THE NUMBER OF VECTORS                                      
+C     N IS THE LENGTH OF THE VECTORS                                    
+C     IFAC IS THE CURRENT FACTOR OF N                                   
+C     LA = N/(PRODUCT OF FACTORS USED SO FAR)                           
+C     IERR IS AN ERROR INDICATOR:                                       
+C              0 - PASS COMPLETED WITHOUT ERROR                         
+C              2 - IFAC NOT CATERED FOR                                 
+C              3 - IFAC ONLY CATERED FOR IF LA=N/IFAC                   
+C     LIPL=.T. => RESULTS ARE RETURNED TO INPUT ARRAY
+C              (ONLY VALID IF LA=N/IFAC, I.E. ON FIRST PASS)
+C                                                                       
+C-----------------------------------------------------------------------
+C                                                                       
+      SUBROUTINE QPASSF(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,LOT,N,IFAC,   
+     *    LA,IERR,LIPL)                                                      
+      DIMENSION A(N),B(N),C(N),D(N),TRIGS(N)                            
+      LOGICAL LIPL
+C                                                                       
+      DATA SIN36/0.587785252292473/,SIN72/0.951056516295154/,           
+     *    QRT5/0.559016994374947/,SIN60/0.866025403784437/              
+C                                                                       
+      M=N/IFAC                                                          
+      IINK=LA*INC1                                                      
+      JINK=LA*INC2                                                      
+      IJUMP=(IFAC-1)*IINK                                               
+      KSTOP=(N-IFAC)/(2*IFAC)                                           
+C                                                                       
+      IBASE=0                                                           
+      JBASE=0                                                           
+      IBAD=0
+C
+!     Increase the vector length by fusing the loops if the
+!     data layout is appropriate:
+      IF (INC1.EQ.LOT.AND.INC2.EQ.LOT.AND.INC3.EQ.1.AND.INC4.EQ.1) THEN
+        ILA=1
+        ILOT=LA*LOT
+        INC11=LA*LOT
+      ELSE
+        ILA=LA
+        ILOT=LOT
+        INC11=INC1
+      ENDIF
+
+C
+      IF (IFAC.EQ.2) THEN
+C                                                                       
+C     CODING FOR FACTOR 2                                               
+C     -------------------                                               
+  200 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+IINK                                                        
+      JA=1                                                              
+      JB=JA+(2*M-LA)*INC2                                               
+C                                                                       
+      IF (LA.NE.M) THEN                                                
+C                                                                       
+      DO 220 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 210 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+A(IB+I)                                           
+      C(JB+J)=A(IA+I)-A(IB+I)                                           
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  210 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  220 CONTINUE                                                          
+      JA=JA+JINK                                                        
+      JINK=2*JINK                                                       
+      JB=JB-JINK                                                        
+      IBASE=IBASE+IJUMP                                                 
+      IJUMP=2*IJUMP+IINK                                                
+C
+      IF (JA.LT.JB) THEN                                                
+      DO 250 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      JBASE=0                                                           
+      DO 240 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 230 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+(C1*A(IB+I)+S1*B(IB+I))                           
+      C(JB+J)=A(IA+I)-(C1*A(IB+I)+S1*B(IB+I))                           
+      D(JA+J)=(C1*B(IB+I)-S1*A(IB+I))+B(IA+I)                           
+      D(JB+J)=(C1*B(IB+I)-S1*A(IB+I))-B(IA+I)                           
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  230 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  240 CONTINUE                                                          
+      IBASE=IBASE+IJUMP                                                 
+      JA=JA+JINK                                                        
+      JB=JB-JINK                                                        
+  250 CONTINUE                                                          
+      ENDIF
+C
+      IF (JA.EQ.JB) THEN                                                
+      JBASE=0                                                           
+      DO 280 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 270 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)                                                   
+      D(JA+J)=-A(IB+I)                                                  
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  270 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  280 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE                !!! Case LA=M                                 
+      Z=1.0/FLOAT(N)                                                    
+      IF (LIPL) THEN
+        DO 294 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC                                                   
+        DO 292 IJK=1,ILOT                                                  
+        T1=Z*(A(IA+I)-A(IB+I))                                       
+        A(IA+I)=Z*(A(IA+I)+A(IB+I))                                       
+        A(IB+I)=T1
+        I=I+INC3                                                          
+  292   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+  294   CONTINUE                                                          
+      ELSE
+        DO 298 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC                                                   
+        DO 296 IJK=1,ILOT                                                  
+        C(JA+J)=Z*(A(IA+I)+A(IB+I))                                       
+        C(JB+J)=Z*(A(IA+I)-A(IB+I))                                       
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  296   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+        JBASE=JBASE+INC2                                                  
+  298   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.3) THEN
+C                                                                       
+C     CODING FOR FACTOR 3                                               
+C     -------------------                                               
+  300 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+IINK                                                        
+      IC=IB+IINK                                                        
+      JA=1                                                              
+      JB=JA+(2*M-LA)*INC2                                               
+      JC=JB                                                             
+C                                                                       
+      IF (LA.NE.M) THEN                                                 
+C                                                                       
+      DO 320 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 310 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))                                 
+      C(JB+J)=A(IA+I)-0.5*(A(IB+I)+A(IC+I))                             
+      D(JB+J)=SIN60*(A(IC+I)-A(IB+I))                                   
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  310 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  320 CONTINUE                                                          
+      JA=JA+JINK                                                        
+      JINK=2*JINK                                                       
+      JB=JB+JINK                                                        
+      JC=JC-JINK                                                        
+      IBASE=IBASE+IJUMP                                                 
+      IJUMP=2*IJUMP+IINK                                                
+C
+      IF (JA.LT.JC) THEN                                                
+      DO 350 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      JBASE=0                                                           
+      DO 340 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 330 IJK=1,ILOT                                                  
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C2*A(IC+I)+S2*B(IC+I))                
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C2*B(IC+I)-S2*A(IC+I))                
+      A2=A(IA+I)-0.5*A1                                                 
+      B2=B(IA+I)-0.5*B1                                                 
+      A3=SIN60*((C1*A(IB+I)+S1*B(IB+I))-(C2*A(IC+I)+S2*B(IC+I)))        
+      B3=SIN60*((C1*B(IB+I)-S1*A(IB+I))-(C2*B(IC+I)-S2*A(IC+I)))        
+      C(JA+J)=A(IA+I)+A1                                                
+      D(JA+J)=B(IA+I)+B1                                                
+      C(JB+J)=A2+B3                                                     
+      D(JB+J)=B2-A3                                                     
+      C(JC+J)=A2-B3                                                     
+      D(JC+J)=-(B2+A3)                                                  
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  330 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  340 CONTINUE                                                          
+      IBASE=IBASE+IJUMP                                                 
+      JA=JA+JINK                                                        
+      JB=JB+JINK                                                        
+      JC=JC-JINK                                                        
+  350 CONTINUE                                                          
+      ENDIF
+C
+      IF (JA.EQ.JC) THEN                                                
+      JBASE=0                                                           
+      DO 380 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 370 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+0.5*(A(IB+I)-A(IC+I))                             
+      D(JA+J)=-SIN60*(A(IB+I)+A(IC+I))                                  
+      C(JB+J)=A(IA+I)-(A(IB+I)-A(IC+I))                                 
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  370 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  380 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE                 !!! Case LA=M                                
+      Z=1.0/FLOAT(N)                                                    
+      ZSIN60=Z*SIN60                                                    
+      IF (LIPL) THEN
+        DO 394 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC                                                   
+        DO 392 IJK=1,ILOT                                                  
+        T1=Z*(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))                         
+        T2=ZSIN60*(A(IC+I)-A(IB+I))                                  
+        A(IA+I)=Z*(A(IA+I)+(A(IB+I)+A(IC+I)))                             
+        A(IB+I)=T1
+        A(IC+I)=T2
+        I=I+INC3                                                          
+  392   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+  394   CONTINUE                                                          
+      ELSE
+        DO 398 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC                                                   
+        DO 396 IJK=1,ILOT                                                  
+        C(JA+J)=Z*(A(IA+I)+(A(IB+I)+A(IC+I)))                             
+        C(JB+J)=Z*(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))                         
+        D(JB+J)=ZSIN60*(A(IC+I)-A(IB+I))                                  
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  396   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+        JBASE=JBASE+INC2                                                  
+  398   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.4) THEN
+C                                                                       
+C     CODING FOR FACTOR 4                                               
+C     -------------------                                               
+  400 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+IINK                                                        
+      IC=IB+IINK                                                        
+      ID=IC+IINK                                                        
+      JA=1                                                              
+      JB=JA+(2*M-LA)*INC2                                               
+      JC=JB+2*M*INC2                                                    
+      JD=JB                                                             
+C                                                                       
+      IF (LA.NE.M) THEN                                                 
+C                                                                       
+      DO 420 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 410 IJK=1,ILOT                                                  
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))                       
+      C(JC+J)=(A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I))                       
+      C(JB+J)=A(IA+I)-A(IC+I)                                           
+      D(JB+J)=A(ID+I)-A(IB+I)                                           
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  410 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  420 CONTINUE                                                          
+      JA=JA+JINK                                                        
+      JINK=2*JINK                                                       
+      JB=JB+JINK                                                        
+      JC=JC-JINK                                                        
+      JD=JD-JINK                                                        
+      IBASE=IBASE+IJUMP                                                 
+      IJUMP=2*IJUMP+IINK                                                
+C
+      IF (JB.LT.JC) THEN                                                
+      DO 450 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      KD=KC+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      C3=TRIGS(KD+1)                                                    
+      S3=TRIGS(KD+2)                                                    
+      JBASE=0                                                           
+      DO 440 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 430 IJK=1,ILOT                                                  
+      A0=A(IA+I)+(C2*A(IC+I)+S2*B(IC+I))                                
+      A2=A(IA+I)-(C2*A(IC+I)+S2*B(IC+I))                                
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C3*A(ID+I)+S3*B(ID+I))                
+      A3=(C1*A(IB+I)+S1*B(IB+I))-(C3*A(ID+I)+S3*B(ID+I))                
+      B0=B(IA+I)+(C2*B(IC+I)-S2*A(IC+I))                                
+      B2=B(IA+I)-(C2*B(IC+I)-S2*A(IC+I))                                
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C3*B(ID+I)-S3*A(ID+I))                
+      B3=(C1*B(IB+I)-S1*A(IB+I))-(C3*B(ID+I)-S3*A(ID+I))                
+      C(JA+J)=A0+A1                                                     
+      C(JC+J)=A0-A1                                                     
+      D(JA+J)=B0+B1                                                     
+      D(JC+J)=B1-B0                                                     
+      C(JB+J)=A2+B3                                                     
+      C(JD+J)=A2-B3                                                     
+      D(JB+J)=B2-A3                                                     
+      D(JD+J)=-(B2+A3)                                                  
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  430 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  440 CONTINUE                                                          
+      IBASE=IBASE+IJUMP                                                 
+      JA=JA+JINK                                                        
+      JB=JB+JINK                                                        
+      JC=JC-JINK                                                        
+      JD=JD-JINK                                                        
+  450 CONTINUE                                                          
+      ENDIF
+C
+      IF (JB.EQ.JC) THEN                                                
+      SIN45=SQRT(0.5)                                                   
+      JBASE=0                                                           
+      DO 480 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 470 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+SIN45*(A(IB+I)-A(ID+I))                           
+      C(JB+J)=A(IA+I)-SIN45*(A(IB+I)-A(ID+I))                           
+      D(JA+J)=-A(IC+I)-SIN45*(A(IB+I)+A(ID+I))                          
+      D(JB+J)=A(IC+I)-SIN45*(A(IB+I)+A(ID+I))                           
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  470 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  480 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE              !!! Case LA=M                                   
+      Z=1.0/FLOAT(N)                                                    
+      IF (LIPL) THEN
+        DO 494 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC                                                   
+        DO 492 IJK=1,ILOT                                                  
+        T1=Z*(A(IA+I)-A(IC+I))                                       
+        T3=Z*(A(ID+I)-A(IB+I))                                       
+        T2=Z*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))                   
+        A(IA+I)=Z*((A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I)))                   
+        A(IB+I)=T1
+        A(IC+I)=T2
+        A(ID+I)=T3
+        I=I+INC3                                                          
+  492   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+  494   CONTINUE                                                          
+      ELSE
+        DO 498 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC                                                   
+        DO 496 IJK=1,ILOT                                                  
+        C(JA+J)=Z*((A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I)))                   
+        C(JC+J)=Z*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))                   
+        C(JB+J)=Z*(A(IA+I)-A(IC+I))                                       
+        D(JB+J)=Z*(A(ID+I)-A(IB+I))                                       
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  496   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+        JBASE=JBASE+INC2                                                  
+  498   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.5) THEN
+C                                                                       
+C     CODING FOR FACTOR 5                                               
+C     -------------------                                               
+  500 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+IINK                                                        
+      IC=IB+IINK                                                        
+      ID=IC+IINK                                                        
+      IE=ID+IINK                                                        
+      JA=1                                                              
+      JB=JA+(2*M-LA)*INC2                                               
+      JC=JB+2*M*INC2                                                    
+      JD=JC                                                             
+      JE=JB                                                             
+C                                                                       
+      IF (LA.NE.M) THEN                                                 
+C                                                                       
+      DO 520 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 510 IJK=1,ILOT                                                  
+      A1=A(IB+I)+A(IE+I)                                                
+      A3=A(IB+I)-A(IE+I)                                                
+      A2=A(IC+I)+A(ID+I)                                                
+      A4=A(IC+I)-A(ID+I)                                                
+      A5=A(IA+I)-0.25*(A1+A2)                                           
+      A6=QRT5*(A1-A2)                                                   
+      C(JA+J)=A(IA+I)+(A1+A2)                                           
+      C(JB+J)=A5+A6                                                     
+      C(JC+J)=A5-A6                                                     
+      D(JB+J)=-SIN72*A3-SIN36*A4                                        
+      D(JC+J)=-SIN36*A3+SIN72*A4                                        
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  510 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  520 CONTINUE                                                          
+      JA=JA+JINK                                                        
+      JINK=2*JINK                                                       
+      JB=JB+JINK                                                        
+      JC=JC+JINK                                                        
+      JD=JD-JINK                                                        
+      JE=JE-JINK                                                        
+      IBASE=IBASE+IJUMP                                                 
+      IJUMP=2*IJUMP+IINK                                                
+C
+      IF (JB.LT.JD) THEN                                                
+      DO 550 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      KD=KC+KB                                                          
+      KE=KD+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      C3=TRIGS(KD+1)                                                    
+      S3=TRIGS(KD+2)                                                    
+      C4=TRIGS(KE+1)                                                    
+      S4=TRIGS(KE+2)                                                    
+      JBASE=0                                                           
+      DO 540 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 530 IJK=1,ILOT                                                  
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C4*A(IE+I)+S4*B(IE+I))                
+      A3=(C1*A(IB+I)+S1*B(IB+I))-(C4*A(IE+I)+S4*B(IE+I))                
+      A2=(C2*A(IC+I)+S2*B(IC+I))+(C3*A(ID+I)+S3*B(ID+I))                
+      A4=(C2*A(IC+I)+S2*B(IC+I))-(C3*A(ID+I)+S3*B(ID+I))                
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C4*B(IE+I)-S4*A(IE+I))                
+      B3=(C1*B(IB+I)-S1*A(IB+I))-(C4*B(IE+I)-S4*A(IE+I))                
+      B2=(C2*B(IC+I)-S2*A(IC+I))+(C3*B(ID+I)-S3*A(ID+I))                
+      B4=(C2*B(IC+I)-S2*A(IC+I))-(C3*B(ID+I)-S3*A(ID+I))                
+      A5=A(IA+I)-0.25*(A1+A2)                                           
+      A6=QRT5*(A1-A2)                                                   
+      B5=B(IA+I)-0.25*(B1+B2)                                           
+      B6=QRT5*(B1-B2)                                                   
+      A10=A5+A6                                                         
+      A20=A5-A6                                                         
+      B10=B5+B6                                                         
+      B20=B5-B6                                                         
+      A11=SIN72*B3+SIN36*B4                                             
+      A21=SIN36*B3-SIN72*B4                                             
+      B11=SIN72*A3+SIN36*A4                                             
+      B21=SIN36*A3-SIN72*A4                                             
+      C(JA+J)=A(IA+I)+(A1+A2)                                           
+      C(JB+J)=A10+A11                                                   
+      C(JE+J)=A10-A11                                                   
+      C(JC+J)=A20+A21                                                   
+      C(JD+J)=A20-A21                                                   
+      D(JA+J)=B(IA+I)+(B1+B2)                                           
+      D(JB+J)=B10-B11                                                   
+      D(JE+J)=-(B10+B11)                                                
+      D(JC+J)=B20-B21                                                   
+      D(JD+J)=-(B20+B21)                                                
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  530 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  540 CONTINUE                                                          
+      IBASE=IBASE+IJUMP                                                 
+      JA=JA+JINK                                                        
+      JB=JB+JINK                                                        
+      JC=JC+JINK                                                        
+      JD=JD-JINK                                                        
+      JE=JE-JINK                                                        
+  550 CONTINUE                                                          
+      ENDIF
+C
+      IF (JB.EQ.JD) THEN                                                
+      JBASE=0                                                           
+      DO 580 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 570 IJK=1,ILOT                                                  
+      A1=A(IB+I)+A(IE+I)                                                
+      A3=A(IB+I)-A(IE+I)                                                
+      A2=A(IC+I)+A(ID+I)                                                
+      A4=A(IC+I)-A(ID+I)                                                
+      A5=A(IA+I)+0.25*(A3-A4)                                           
+      A6=QRT5*(A3+A4)                                                   
+      C(JA+J)=A5+A6                                                     
+      C(JB+J)=A5-A6                                                     
+      C(JC+J)=A(IA+I)-(A3-A4)                                           
+      D(JA+J)=-SIN36*A1-SIN72*A2                                        
+      D(JB+J)=-SIN72*A1+SIN36*A2                                        
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  570 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  580 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE                !!! Case LA=M                                 
+      Z=1.0/FLOAT(N)                                                    
+      ZQRT5=Z*QRT5                                                      
+      ZSIN36=Z*SIN36                                                    
+      ZSIN72=Z*SIN72                                                    
+      IF (LIPL) THEN
+        DO 594 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC                                                   
+        DO 592 IJK=1,ILOT                                                  
+        A1=A(IB+I)+A(IE+I)                                                
+        A3=A(IB+I)-A(IE+I)                                                
+        A2=A(IC+I)+A(ID+I)                                                
+        A4=A(IC+I)-A(ID+I)                                                
+        A5=Z*(A(IA+I)-0.25*(A1+A2))                                       
+        A6=ZQRT5*(A1-A2)                                                  
+        A(IA+I)=Z*(A(IA+I)+(A1+A2))                                       
+        A(IB+I)=A5+A6                                                     
+        A(ID+I)=A5-A6                                                     
+        A(IC+I)=-ZSIN72*A3-ZSIN36*A4                                      
+        A(IE+I)=-ZSIN36*A3+ZSIN72*A4                                      
+        I=I+INC3                                                          
+  592   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+  594   CONTINUE                                                          
+      ELSE
+        DO 598 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC                                                   
+        DO 596 IJK=1,ILOT                                                  
+        A1=A(IB+I)+A(IE+I)                                                
+        A3=A(IB+I)-A(IE+I)                                                
+        A2=A(IC+I)+A(ID+I)                                                
+        A4=A(IC+I)-A(ID+I)                                                
+        A5=Z*(A(IA+I)-0.25*(A1+A2))                                       
+        A6=ZQRT5*(A1-A2)                                                  
+        C(JA+J)=Z*(A(IA+I)+(A1+A2))                                       
+        C(JB+J)=A5+A6                                                     
+        C(JC+J)=A5-A6                                                     
+        D(JB+J)=-ZSIN72*A3-ZSIN36*A4                                      
+        D(JC+J)=-ZSIN36*A3+ZSIN72*A4                                      
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  596   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+        JBASE=JBASE+INC2                                                  
+  598   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.6) THEN
+C                                                                       
+C     CODING FOR FACTOR 6                                               
+C     -------------------                                               
+  600 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+IINK                                                        
+      IC=IB+IINK                                                        
+      ID=IC+IINK                                                        
+      IE=ID+IINK                                                        
+      IF=IE+IINK                                                        
+      JA=1                                                              
+      JB=JA+(2*M-LA)*INC2                                               
+      JC=JB+2*M*INC2                                                    
+      JD=JC+2*M*INC2                                                    
+      JE=JC                                                             
+      JF=JB                                                             
+C                                                                       
+      IF (LA.NE.M) THEN                                                 
+C                                                                       
+      DO 620 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 610 IJK=1,ILOT                                                  
+      A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))                           
+      C(JA+J)=(A(IA+I)+A(ID+I))+A11                                     
+      C(JC+J)=(A(IA+I)+A(ID+I)-0.5*A11)                                 
+      D(JC+J)=SIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))               
+      A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))                           
+      C(JB+J)=(A(IA+I)-A(ID+I))-0.5*A11                                 
+      D(JB+J)=SIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))               
+      C(JD+J)=(A(IA+I)-A(ID+I))+A11                                     
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  610 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  620 CONTINUE                                                          
+      JA=JA+JINK                                                        
+      JINK=2*JINK                                                       
+      JB=JB+JINK                                                        
+      JC=JC+JINK                                                        
+      JD=JD-JINK                                                        
+      JE=JE-JINK                                                        
+      JF=JF-JINK                                                        
+      IBASE=IBASE+IJUMP                                                 
+      IJUMP=2*IJUMP+IINK                                                
+C
+      IF (JC.LT.JD) THEN                                                
+      DO 650 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      KD=KC+KB                                                          
+      KE=KD+KB                                                          
+      KF=KE+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      C3=TRIGS(KD+1)                                                    
+      S3=TRIGS(KD+2)                                                    
+      C4=TRIGS(KE+1)                                                    
+      S4=TRIGS(KE+2)                                                    
+      C5=TRIGS(KF+1)                                                    
+      S5=TRIGS(KF+2)                                                    
+      JBASE=0                                                           
+      DO 640 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 630 IJK=1,ILOT                                                  
+      A1=C1*A(IB+I)+S1*B(IB+I)                                          
+      B1=C1*B(IB+I)-S1*A(IB+I)                                          
+      A2=C2*A(IC+I)+S2*B(IC+I)                                          
+      B2=C2*B(IC+I)-S2*A(IC+I)                                          
+      A3=C3*A(ID+I)+S3*B(ID+I)                                          
+      B3=C3*B(ID+I)-S3*A(ID+I)                                          
+      A4=C4*A(IE+I)+S4*B(IE+I)                                          
+      B4=C4*B(IE+I)-S4*A(IE+I)                                          
+      A5=C5*A(IF+I)+S5*B(IF+I)                                          
+      B5=C5*B(IF+I)-S5*A(IF+I)                                          
+      A11=(A2+A5)+(A1+A4)                                               
+      A20=(A(IA+I)+A3)-0.5*A11                                          
+      A21=SIN60*((A2+A5)-(A1+A4))                                       
+      B11=(B2+B5)+(B1+B4)                                               
+      B20=(B(IA+I)+B3)-0.5*B11                                          
+      B21=SIN60*((B2+B5)-(B1+B4))                                       
+      C(JA+J)=(A(IA+I)+A3)+A11                                          
+      D(JA+J)=(B(IA+I)+B3)+B11                                          
+      C(JC+J)=A20-B21                                                   
+      D(JC+J)=A21+B20                                                   
+      C(JE+J)=A20+B21                                                   
+      D(JE+J)=A21-B20                                                   
+      A11=(A2-A5)+(A4-A1)                                               
+      A20=(A(IA+I)-A3)-0.5*A11                                          
+      A21=SIN60*((A4-A1)-(A2-A5))                                       
+      B11=(B5-B2)-(B4-B1)                                               
+      B20=(B3-B(IA+I))-0.5*B11                                          
+      B21=SIN60*((B5-B2)+(B4-B1))                                       
+      C(JB+J)=A20-B21                                                   
+      D(JB+J)=A21-B20                                                   
+      C(JD+J)=A11+(A(IA+I)-A3)                                          
+      D(JD+J)=B11+(B3-B(IA+I))                                          
+      C(JF+J)=A20+B21                                                   
+      D(JF+J)=A21+B20                                                   
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  630 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  640 CONTINUE                                                          
+      IBASE=IBASE+IJUMP                                                 
+      JA=JA+JINK                                                        
+      JB=JB+JINK                                                        
+      JC=JC+JINK                                                        
+      JD=JD-JINK                                                        
+      JE=JE-JINK                                                        
+      JF=JF-JINK                                                        
+  650 CONTINUE                                                          
+      ENDIF
+C
+      IF (JC.EQ.JD) THEN                                                
+      JBASE=0                                                           
+      DO 680 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 670 IJK=1,ILOT                                                  
+      C(JA+J)=(A(IA+I)+0.5*(A(IC+I)-A(IE+I)))+ SIN60*(A(IB+I)-A(IF+I))  
+      D(JA+J)=-(A(ID+I)+0.5*(A(IB+I)+A(IF+I)))-SIN60*(A(IC+I)+A(IE+I))  
+      C(JB+J)=A(IA+I)-(A(IC+I)-A(IE+I))                                 
+      D(JB+J)=A(ID+I)-(A(IB+I)+A(IF+I))                                 
+      C(JC+J)=(A(IA+I)+0.5*(A(IC+I)-A(IE+I)))-SIN60*(A(IB+I)-A(IF+I))   
+      D(JC+J)=-(A(ID+I)+0.5*(A(IB+I)+A(IF+I)))+SIN60*(A(IC+I)+A(IE+I))  
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  670 CONTINUE                                                          
+      IBASE=IBASE+INC11                                                  
+      JBASE=JBASE+INC2                                                  
+  680 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE                !!! Case LA=M                                 
+      Z=1.0/FLOAT(N)                                                    
+      ZSIN60=Z*SIN60                                                    
+      IF (LIPL) THEN
+        DO 694 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC                                                   
+        DO 692 IJK=1,ILOT                                                  
+        A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))                           
+        T1=Z*((A(IA+I)-A(ID+I))-0.5*A11)                             
+        T5=Z*((A(IA+I)-A(ID+I))+A11)                                 
+        T2=ZSIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))              
+        T4=ZSIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))              
+        A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))                           
+        T3=Z*((A(IA+I)+A(ID+I))-0.5*A11)                             
+        A(IA+I)=Z*((A(IA+I)+A(ID+I))+A11)                                 
+        A(IB+I)=T1
+        A(IC+I)=T2
+        A(ID+I)=T3
+        A(IE+I)=T4
+        A(IF+I)=T5
+        I=I+INC3                                                          
+  692   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+  694   CONTINUE                                                          
+      ELSE
+        DO 698 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC                                                   
+        DO 696 IJK=1,ILOT                                                  
+        A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))                           
+        C(JA+J)=Z*((A(IA+I)+A(ID+I))+A11)                                 
+        C(JC+J)=Z*((A(IA+I)+A(ID+I))-0.5*A11)                             
+        D(JC+J)=ZSIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))              
+        A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))                           
+        C(JB+J)=Z*((A(IA+I)-A(ID+I))-0.5*A11)                             
+        D(JB+J)=ZSIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))              
+        C(JD+J)=Z*((A(IA+I)-A(ID+I))+A11)                                 
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  696   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+        JBASE=JBASE+INC2                                                  
+  698   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.8) THEN
+C                                                                       
+C     CODING FOR FACTOR 8                                               
+C     -------------------                                               
+  800 CONTINUE                                                          
+      IF (LA.NE.M) THEN                                            
+        IBAD=3                                                            
+      ELSE
+      IA=1                                                              
+      IB=IA+IINK                                                        
+      IC=IB+IINK                                                        
+      ID=IC+IINK                                                        
+      IE=ID+IINK                                                        
+      IF=IE+IINK                                                        
+      IG=IF+IINK                                                        
+      IH=IG+IINK                                                        
+      JA=1                                                              
+      JB=JA+LA*INC2                                                     
+      JC=JB+2*M*INC2                                                    
+      JD=JC+2*M*INC2                                                    
+      JE=JD+2*M*INC2                                                    
+      Z=1.0/FLOAT(N)                                                    
+      ZSIN45=Z*SQRT(0.5)                                                
+C                                                                       
+      IF (LIPL) THEN
+        DO 820 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC                                                   
+        DO 810 IJK=1,ILOT                                                  
+        T3=Z*((A(IA+I)+A(IE+I))-(A(IC+I)+A(IG+I)))                   
+        T4=Z*((A(ID+I)+A(IH+I))-(A(IB+I)+A(IF+I)))                   
+        T1=Z*(A(IA+I)-A(IE+I))                                       
+     *    +ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))                 
+        T5=Z*(A(IA+I)-A(IE+I))                                       
+     *    -ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))                 
+        T2=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))              
+     *    +Z*(A(IG+I)-A(IC+I))                                          
+        T6=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))              
+     *    -Z*(A(IG+I)-A(IC+I))                                          
+        T7=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))-                 
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))                        
+        A(IA+I)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))+                 
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))                        
+        A(IB+I)=T1
+        A(IC+I)=T2
+        A(ID+I)=T3
+        A(IE+I)=T4
+        A(IF+I)=T5
+        A(IG+I)=T6
+        A(IH+I)=T7
+        I=I+INC3                                                          
+  810   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+  820   CONTINUE                                                          
+      ELSE
+        DO 840 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC                                                   
+        DO 830 IJK=1,ILOT                                                  
+        C(JA+J)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))+                 
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))                        
+        C(JE+J)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))-                 
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))                        
+        C(JC+J)=Z*((A(IA+I)+A(IE+I))-(A(IC+I)+A(IG+I)))                   
+        D(JC+J)=Z*((A(ID+I)+A(IH+I))-(A(IB+I)+A(IF+I)))                   
+        C(JB+J)=Z*(A(IA+I)-A(IE+I))                                       
+     *    +ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))                 
+        C(JD+J)=Z*(A(IA+I)-A(IE+I))                                       
+     *    -ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))                 
+        D(JB+J)=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))              
+     *    +Z*(A(IG+I)-A(IC+I))                                          
+        D(JD+J)=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))              
+     *    -Z*(A(IG+I)-A(IC+I))                                          
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  830   CONTINUE                                                          
+        IBASE=IBASE+INC11                                                  
+        JBASE=JBASE+INC2                                                  
+  840   CONTINUE                                                          
+      ENDIF
+C
+      ENDIF
+C
+      ELSE
+C
+        IBAD=2        !!! Illegal factor
+C
+      ENDIF
+C                                                                       
+C     RETURN                                                            
+C     ------                                                            
+  900 CONTINUE                                                          
+      IERR=IBAD                                                         
+      RETURN                                                            
+      END                                                               
diff --git a/fft/qpassm.f b/fft/qpassm.f
new file mode 100755
index 0000000..c716d06
--- /dev/null
+++ b/fft/qpassm.f
@@ -0,0 +1,779 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE QPASSM(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,ILOT,N,IFAC,
+     *    ILA,IERR)
+      REAL A(*),B(*),C(*),D(*),TRIGS(*)
+C
+C     SUBROUTINE 'QPASSM' - PERFORMS ONE PASS THROUGH DATA AS PART
+C     OF MULTIPLE REAL FFT (FOURIER ANALYSIS) ROUTINE
+C
+C     A IS FIRST REAL INPUT VECTOR
+C         EQUIVALENCE B(1) WITH A(IFAC*ILA*INC1+1)
+C     C IS FIRST REAL OUTPUT VECTOR
+C         EQUIVALENCE D(1) WITH C(ILA*INC2+1)
+C     TRIGS IS A PRECALCULATED LIST OF SINES & COSINES
+C     INC1 IS THE ADDRESSING INCREMENT FOR A
+C     INC2 IS THE ADDRESSING INCREMENT FOR C
+C     INC3 IS THE INCREMENT BETWEEN INPUT VECTORS A
+C     INC4 IS THE INCREMENT BETWEEN OUTPUT VECTORS C
+C     ILOT IS THE NUMBER OF VECTORS
+C     N IS THE LENGTH OF THE VECTORS
+C     IFAC IS THE CURRENT FACTOR OF N
+C     ILA = N/(PRODUCT OF FACTORS USED SO FAR)
+C     IERR IS AN ERROR INDICATOR:
+C              0 - PASS COMPLETED WITHOUT ERROR
+C              1 - ILOT GREATER THAN 64
+C              2 - IFAC NOT CATERED FOR
+C              3 - IFAC ONLY CATERED FOR IF ILA=N/IFAC
+C
+C-----------------------------------------------------------------------
+C
+      SAVE SIN36, SIN72, QRT5, SIN60
+C
+      DATA SIN36/0.587785252292473/,SIN72/0.951056516295154/,
+     *    QRT5/0.559016994374947/,SIN60/0.866025403784437/
+C
+      M=N/IFAC
+      IINK=ILA*INC1
+      JINK=ILA*INC2
+      IJUMP=(IFAC-1)*IINK
+      KSTOP=(N-IFAC)/(2*IFAC)
+C
+      IBAD=1
+      IF (ILOT.GT.512) GO TO 910
+      IBASE=0
+      JBASE=0
+      IGO=IFAC-1
+      IF (IGO.EQ.7) IGO=6
+      IBAD=2
+      IF (IGO.LT.1.OR.IGO.GT.6) GO TO 910
+      GO TO (200,300,400,500,600,800),IGO
+C
+C     CODING FOR FACTOR 2
+C     -------------------
+  200 CONTINUE
+      IA=1
+      IB=IA+IINK
+      JA=1
+      JB=JA+(2*M-ILA)*INC2
+C
+      IF (ILA.EQ.M) GO TO 290
+C
+      DO 220 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 210 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=A(IA+I)-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  210 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  220 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JA.EQ.JB) GO TO 260
+      DO 250 K=ILA,KSTOP,ILA
+      KB=K+K
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      JBASE=0
+      DO 240 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 230 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+(C1*A(IB+I)+S1*B(IB+I))
+      C(JB+J)=A(IA+I)-(C1*A(IB+I)+S1*B(IB+I))
+      D(JA+J)=(C1*B(IB+I)-S1*A(IB+I))+B(IA+I)
+      D(JB+J)=(C1*B(IB+I)-S1*A(IB+I))-B(IA+I)
+      I=I+INC3
+      J=J+INC4
+  230 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  240 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB-JINK
+  250 CONTINUE
+      IF (JA.GT.JB) GO TO 900
+  260 CONTINUE
+      JBASE=0
+      DO 280 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 270 IJK=1,ILOT
+      C(JA+J)=A(IA+I)
+      D(JA+J)=-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  270 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  280 CONTINUE
+      GO TO 900
+C
+  290 CONTINUE
+      Z=1.0/FLOAT(N)
+      DO 294 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 292 IJK=1,ILOT
+      C(JA+J)=Z*(A(IA+I)+A(IB+I))
+      C(JB+J)=Z*(A(IA+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  292 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  294 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 3
+C     -------------------
+  300 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      JA=1
+      JB=JA+(2*M-ILA)*INC2
+      JC=JB
+C
+      IF (ILA.EQ.M) GO TO 390
+C
+      DO 320 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 310 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      C(JB+J)=A(IA+I)-0.5*(A(IB+I)+A(IC+I))
+      D(JB+J)=SIN60*(A(IC+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  310 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  320 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JA.EQ.JC) GO TO 360
+      DO 350 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      JBASE=0
+      DO 340 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 330 IJK=1,ILOT
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C2*A(IC+I)+S2*B(IC+I))
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C2*B(IC+I)-S2*A(IC+I))
+      A2=A(IA+I)-0.5*A1
+      B2=B(IA+I)-0.5*B1
+      A3=SIN60*((C1*A(IB+I)+S1*B(IB+I))-(C2*A(IC+I)+S2*B(IC+I)))
+      B3=SIN60*((C1*B(IB+I)-S1*A(IB+I))-(C2*B(IC+I)-S2*A(IC+I)))
+      C(JA+J)=A(IA+I)+A1
+      D(JA+J)=B(IA+I)+B1
+      C(JB+J)=A2+B3
+      D(JB+J)=B2-A3
+      C(JC+J)=A2-B3
+      D(JC+J)=-(B2+A3)
+      I=I+INC3
+      J=J+INC4
+  330 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  340 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC-JINK
+  350 CONTINUE
+      IF (JA.GT.JC) GO TO 900
+  360 CONTINUE
+      JBASE=0
+      DO 380 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 370 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+0.5*(A(IB+I)-A(IC+I))
+      D(JA+J)=-SIN60*(A(IB+I)+A(IC+I))
+      C(JB+J)=A(IA+I)-(A(IB+I)-A(IC+I))
+      I=I+INC3
+      J=J+INC4
+  370 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  380 CONTINUE
+      GO TO 900
+C
+  390 CONTINUE
+      Z=1.0/FLOAT(N)
+      ZSIN60=Z*SIN60
+      DO 394 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 392 IJK=1,ILOT
+      C(JA+J)=Z*(A(IA+I)+(A(IB+I)+A(IC+I)))
+      C(JB+J)=Z*(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))
+      D(JB+J)=ZSIN60*(A(IC+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  392 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  394 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 4
+C     -------------------
+  400 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      JA=1
+      JB=JA+(2*M-ILA)*INC2
+      JC=JB+2*M*INC2
+      JD=JB
+C
+      IF (ILA.EQ.M) GO TO 490
+C
+      DO 420 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 410 IJK=1,ILOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))
+      C(JC+J)=(A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I))
+      C(JB+J)=A(IA+I)-A(IC+I)
+      D(JB+J)=A(ID+I)-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  410 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  420 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC-JINK
+      JD=JD-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JB.EQ.JC) GO TO 460
+      DO 450 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      JBASE=0
+      DO 440 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 430 IJK=1,ILOT
+      A0=A(IA+I)+(C2*A(IC+I)+S2*B(IC+I))
+      A2=A(IA+I)-(C2*A(IC+I)+S2*B(IC+I))
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C3*A(ID+I)+S3*B(ID+I))
+      A3=(C1*A(IB+I)+S1*B(IB+I))-(C3*A(ID+I)+S3*B(ID+I))
+      B0=B(IA+I)+(C2*B(IC+I)-S2*A(IC+I))
+      B2=B(IA+I)-(C2*B(IC+I)-S2*A(IC+I))
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C3*B(ID+I)-S3*A(ID+I))
+      B3=(C1*B(IB+I)-S1*A(IB+I))-(C3*B(ID+I)-S3*A(ID+I))
+      C(JA+J)=A0+A1
+      C(JC+J)=A0-A1
+      D(JA+J)=B0+B1
+      D(JC+J)=B1-B0
+      C(JB+J)=A2+B3
+      C(JD+J)=A2-B3
+      D(JB+J)=B2-A3
+      D(JD+J)=-(B2+A3)
+      I=I+INC3
+      J=J+INC4
+  430 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  440 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC-JINK
+      JD=JD-JINK
+  450 CONTINUE
+      IF (JB.GT.JC) GO TO 900
+  460 CONTINUE
+      SIN45=SQRT(0.5)
+      JBASE=0
+      DO 480 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 470 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+SIN45*(A(IB+I)-A(ID+I))
+      C(JB+J)=A(IA+I)-SIN45*(A(IB+I)-A(ID+I))
+      D(JA+J)=-A(IC+I)-SIN45*(A(IB+I)+A(ID+I))
+      D(JB+J)=A(IC+I)-SIN45*(A(IB+I)+A(ID+I))
+      I=I+INC3
+      J=J+INC4
+  470 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  480 CONTINUE
+      GO TO 900
+C
+  490 CONTINUE
+      Z=1.0/FLOAT(N)
+      DO 494 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 492 IJK=1,ILOT
+      C(JA+J)=Z*((A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I)))
+      C(JC+J)=Z*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+      C(JB+J)=Z*(A(IA+I)-A(IC+I))
+      D(JB+J)=Z*(A(ID+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  492 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  494 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 5
+C     -------------------
+  500 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      IE=ID+IINK
+      JA=1
+      JB=JA+(2*M-ILA)*INC2
+      JC=JB+2*M*INC2
+      JD=JC
+      JE=JB
+C
+      IF (ILA.EQ.M) GO TO 590
+C
+      DO 520 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 510 IJK=1,ILOT
+      A1=A(IB+I)+A(IE+I)
+      A3=A(IB+I)-A(IE+I)
+      A2=A(IC+I)+A(ID+I)
+      A4=A(IC+I)-A(ID+I)
+      A5=A(IA+I)-0.25*(A1+A2)
+      A6=QRT5*(A1-A2)
+      C(JA+J)=A(IA+I)+(A1+A2)
+      C(JB+J)=A5+A6
+      C(JC+J)=A5-A6
+      D(JB+J)=-SIN72*A3-SIN36*A4
+      D(JC+J)=-SIN36*A3+SIN72*A4
+      I=I+INC3
+      J=J+INC4
+  510 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  520 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JB.EQ.JD) GO TO 560
+      DO 550 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      JBASE=0
+      DO 540 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 530 IJK=1,ILOT
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C4*A(IE+I)+S4*B(IE+I))
+      A3=(C1*A(IB+I)+S1*B(IB+I))-(C4*A(IE+I)+S4*B(IE+I))
+      A2=(C2*A(IC+I)+S2*B(IC+I))+(C3*A(ID+I)+S3*B(ID+I))
+      A4=(C2*A(IC+I)+S2*B(IC+I))-(C3*A(ID+I)+S3*B(ID+I))
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C4*B(IE+I)-S4*A(IE+I))
+      B3=(C1*B(IB+I)-S1*A(IB+I))-(C4*B(IE+I)-S4*A(IE+I))
+      B2=(C2*B(IC+I)-S2*A(IC+I))+(C3*B(ID+I)-S3*A(ID+I))
+      B4=(C2*B(IC+I)-S2*A(IC+I))-(C3*B(ID+I)-S3*A(ID+I))
+      A5=A(IA+I)-0.25*(A1+A2)
+      A6=QRT5*(A1-A2)
+      B5=B(IA+I)-0.25*(B1+B2)
+      B6=QRT5*(B1-B2)
+      A10=A5+A6
+      A20=A5-A6
+      B10=B5+B6
+      B20=B5-B6
+      A11=SIN72*B3+SIN36*B4
+      A21=SIN36*B3-SIN72*B4
+      B11=SIN72*A3+SIN36*A4
+      B21=SIN36*A3-SIN72*A4
+      C(JA+J)=A(IA+I)+(A1+A2)
+      C(JB+J)=A10+A11
+      C(JE+J)=A10-A11
+      C(JC+J)=A20+A21
+      C(JD+J)=A20-A21
+      D(JA+J)=B(IA+I)+(B1+B2)
+      D(JB+J)=B10-B11
+      D(JE+J)=-(B10+B11)
+      D(JC+J)=B20-B21
+      D(JD+J)=-(B20+B21)
+      I=I+INC3
+      J=J+INC4
+  530 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  540 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+  550 CONTINUE
+      IF (JB.GT.JD) GO TO 900
+  560 CONTINUE
+      JBASE=0
+      DO 580 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 570 IJK=1,ILOT
+      A1=A(IB+I)+A(IE+I)
+      A3=A(IB+I)-A(IE+I)
+      A2=A(IC+I)+A(ID+I)
+      A4=A(IC+I)-A(ID+I)
+      A5=A(IA+I)+0.25*(A3-A4)
+      A6=QRT5*(A3+A4)
+      C(JA+J)=A5+A6
+      C(JB+J)=A5-A6
+      C(JC+J)=A(IA+I)-(A3-A4)
+      D(JA+J)=-SIN36*A1-SIN72*A2
+      D(JB+J)=-SIN72*A1+SIN36*A2
+      I=I+INC3
+      J=J+INC4
+  570 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  580 CONTINUE
+      GO TO 900
+C
+  590 CONTINUE
+      Z=1.0/FLOAT(N)
+      ZQRT5=Z*QRT5
+      ZSIN36=Z*SIN36
+      ZSIN72=Z*SIN72
+      DO 594 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 592 IJK=1,ILOT
+      A1=A(IB+I)+A(IE+I)
+      A3=A(IB+I)-A(IE+I)
+      A2=A(IC+I)+A(ID+I)
+      A4=A(IC+I)-A(ID+I)
+      A5=Z*(A(IA+I)-0.25*(A1+A2))
+      A6=ZQRT5*(A1-A2)
+      C(JA+J)=Z*(A(IA+I)+(A1+A2))
+      C(JB+J)=A5+A6
+      C(JC+J)=A5-A6
+      D(JB+J)=-ZSIN72*A3-ZSIN36*A4
+      D(JC+J)=-ZSIN36*A3+ZSIN72*A4
+      I=I+INC3
+      J=J+INC4
+  592 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  594 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 6
+C     -------------------
+  600 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      IE=ID+IINK
+      IF=IE+IINK
+      JA=1
+      JB=JA+(2*M-ILA)*INC2
+      JC=JB+2*M*INC2
+      JD=JC+2*M*INC2
+      JE=JC
+      JF=JB
+C
+      IF (ILA.EQ.M) GO TO 690
+C
+      DO 620 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 610 IJK=1,ILOT
+      A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))
+      C(JA+J)=(A(IA+I)+A(ID+I))+A11
+      C(JC+J)=(A(IA+I)+A(ID+I)-0.5*A11)
+      D(JC+J)=SIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))
+      A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))
+      C(JB+J)=(A(IA+I)-A(ID+I))-0.5*A11
+      D(JB+J)=SIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))
+      C(JD+J)=(A(IA+I)-A(ID+I))+A11
+      I=I+INC3
+      J=J+INC4
+  610 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  620 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+      JF=JF-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JC.EQ.JD) GO TO 660
+      DO 650 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      KF=KE+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      C5=TRIGS(KF+1)
+      S5=TRIGS(KF+2)
+      JBASE=0
+      DO 640 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 630 IJK=1,ILOT
+      A1=C1*A(IB+I)+S1*B(IB+I)
+      B1=C1*B(IB+I)-S1*A(IB+I)
+      A2=C2*A(IC+I)+S2*B(IC+I)
+      B2=C2*B(IC+I)-S2*A(IC+I)
+      A3=C3*A(ID+I)+S3*B(ID+I)
+      B3=C3*B(ID+I)-S3*A(ID+I)
+      A4=C4*A(IE+I)+S4*B(IE+I)
+      B4=C4*B(IE+I)-S4*A(IE+I)
+      A5=C5*A(IF+I)+S5*B(IF+I)
+      B5=C5*B(IF+I)-S5*A(IF+I)
+      A11=(A2+A5)+(A1+A4)
+      A20=(A(IA+I)+A3)-0.5*A11
+      A21=SIN60*((A2+A5)-(A1+A4))
+      B11=(B2+B5)+(B1+B4)
+      B20=(B(IA+I)+B3)-0.5*B11
+      B21=SIN60*((B2+B5)-(B1+B4))
+      C(JA+J)=(A(IA+I)+A3)+A11
+      D(JA+J)=(B(IA+I)+B3)+B11
+      C(JC+J)=A20-B21
+      D(JC+J)=A21+B20
+      C(JE+J)=A20+B21
+      D(JE+J)=A21-B20
+      A11=(A2-A5)+(A4-A1)
+      A20=(A(IA+I)-A3)-0.5*A11
+      A21=SIN60*((A4-A1)-(A2-A5))
+      B11=(B5-B2)-(B4-B1)
+      B20=(B3-B(IA+I))-0.5*B11
+      B21=SIN60*((B5-B2)+(B4-B1))
+      C(JB+J)=A20-B21
+      D(JB+J)=A21-B20
+      C(JD+J)=A11+(A(IA+I)-A3)
+      D(JD+J)=B11+(B3-B(IA+I))
+      C(JF+J)=A20+B21
+      D(JF+J)=A21+B20
+      I=I+INC3
+      J=J+INC4
+  630 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  640 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+      JF=JF-JINK
+  650 CONTINUE
+      IF (JC.GT.JD) GO TO 900
+  660 CONTINUE
+      JBASE=0
+      DO 680 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 670 IJK=1,ILOT
+      C(JA+J)=(A(IA+I)+0.5*(A(IC+I)-A(IE+I)))+ SIN60*(A(IB+I)-A(IF+I))
+      D(JA+J)=-(A(ID+I)+0.5*(A(IB+I)+A(IF+I)))-SIN60*(A(IC+I)+A(IE+I))
+      C(JB+J)=A(IA+I)-(A(IC+I)-A(IE+I))
+      D(JB+J)=A(ID+I)-(A(IB+I)+A(IF+I))
+      C(JC+J)=(A(IA+I)+0.5*(A(IC+I)-A(IE+I)))-SIN60*(A(IB+I)-A(IF+I))
+      D(JC+J)=-(A(ID+I)+0.5*(A(IB+I)+A(IF+I)))+SIN60*(A(IC+I)+A(IE+I))
+      I=I+INC3
+      J=J+INC4
+  670 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  680 CONTINUE
+      GO TO 900
+C
+  690 CONTINUE
+      Z=1.0/FLOAT(N)
+      ZSIN60=Z*SIN60
+      DO 694 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 692 IJK=1,ILOT
+      A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))
+      C(JA+J)=Z*((A(IA+I)+A(ID+I))+A11)
+      C(JC+J)=Z*((A(IA+I)+A(ID+I))-0.5*A11)
+      D(JC+J)=ZSIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))
+      A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))
+      C(JB+J)=Z*((A(IA+I)-A(ID+I))-0.5*A11)
+      D(JB+J)=ZSIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))
+      C(JD+J)=Z*((A(IA+I)-A(ID+I))+A11)
+      I=I+INC3
+      J=J+INC4
+  692 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  694 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 8
+C     -------------------
+  800 CONTINUE
+      IBAD=3
+      IF (ILA.NE.M) GO TO 910
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      IE=ID+IINK
+      IF=IE+IINK
+      IG=IF+IINK
+      IH=IG+IINK
+      JA=1
+      JB=JA+ILA*INC2
+      JC=JB+2*M*INC2
+      JD=JC+2*M*INC2
+      JE=JD+2*M*INC2
+      Z=1.0/FLOAT(N)
+      ZSIN45=Z*SQRT(0.5)
+C
+      DO 820 JL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 810 IJK=1,ILOT
+      C(JA+J)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))+
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))
+      C(JE+J)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))-
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))
+      C(JC+J)=Z*((A(IA+I)+A(IE+I))-(A(IC+I)+A(IG+I)))
+      D(JC+J)=Z*((A(ID+I)+A(IH+I))-(A(IB+I)+A(IF+I)))
+      C(JB+J)=Z*(A(IA+I)-A(IE+I))
+     *    +ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))
+      C(JD+J)=Z*(A(IA+I)-A(IE+I))
+     *    -ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))
+      D(JB+J)=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))
+     *    +Z*(A(IG+I)-A(IC+I))
+      D(JD+J)=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))
+     *    -Z*(A(IG+I)-A(IC+I))
+      I=I+INC3
+      J=J+INC4
+  810 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  820 CONTINUE
+C
+C     RETURN
+C     ------
+  900 CONTINUE
+      IBAD=0
+  910 CONTINUE
+      IERR=IBAD
+      RETURN
+      END
diff --git a/fft/rpassf.f b/fft/rpassf.f
new file mode 100755
index 0000000..32ea34e
--- /dev/null
+++ b/fft/rpassf.f
@@ -0,0 +1,910 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+C     SUBROUTINE 'RPASSF' - PERFORMS ONE PASS THROUGH DATA AS PART      
+C     OF MULTIPLE REAL FFT (FOURIER SYNTHESIS) ROUTINE                  
+C                                                                       
+C     A IS FIRST REAL INPUT VECTOR                                      
+C         EQUIVALENCE B(1) WITH A (LA*INC1+1)                           
+C     C IS FIRST REAL OUTPUT VECTOR                                     
+C         EQUIVALENCE D(1) WITH C(IFAC*LA*INC2+1)                       
+C     TRIGS IS A PRECALCULATED LIST OF SINES & COSINES                  
+C     INC1 IS THE ADDRESSING INCREMENT FOR A                            
+C     INC2 IS THE ADDRESSING INCREMENT FOR C                            
+C     INC3 IS THE INCREMENT BETWEEN INPUT VECTORS A                     
+C     INC4 IS THE INCREMENT BETWEEN OUTPUT VECTORS C                    
+C     LOT IS THE NUMBER OF VECTORS                                      
+C     N IS THE LENGTH OF THE VECTORS                                    
+C     IFAC IS THE CURRENT FACTOR OF N                                   
+C     LA IS THE PRODUCT OF PREVIOUS FACTORS                             
+C     IERR IS AN ERROR INDICATOR:                                       
+C              0 - PASS COMPLETED WITHOUT ERROR                         
+C              2 - IFAC NOT CATERED FOR                                 
+C              3 - IFAC ONLY CATERED FOR IF LA=N/IFAC                   
+C     LIPL=.T. => RESULTS ARE RETURNED TO INPUT ARRAY
+C              (ONLY VALID IF LA=N/IFAC, I.E. ON LAST PASS)
+C                                                                       
+C-----------------------------------------------------------------------
+C                                                                       
+      SUBROUTINE RPASSF(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,LOT,N,IFAC,   
+     *    LA,IERR,LIPL)                                                      
+      DIMENSION A(N),B(N),C(N),D(N),TRIGS(N)                            
+      LOGICAL LIPL
+C                                                                       
+      DATA SIN36/0.587785252292473/,SIN72/0.951056516295154/,           
+     *    QRT5/0.559016994374947/,SIN60/0.866025403784437/              
+C                                                                       
+      M=N/IFAC                                                          
+      IINK=LA*INC1                                                      
+      JINK=LA*INC2                                                      
+      JUMP=(IFAC-1)*JINK                                                
+      KSTOP=(N-IFAC)/(2*IFAC)                                           
+C                                                                       
+      IBASE=0                                                           
+      JBASE=0                                                           
+      IBAD=0                                                            
+C
+!     Increase the vector length by fusing the loops if the
+!     data layout is appropriate:
+      IF (INC1.EQ.LOT.AND.INC2.EQ.LOT.AND.INC3.EQ.1.AND.INC4.EQ.1) THEN
+        ILA=1
+        ILOT=LA*LOT
+        INC21=LA*LOT
+      ELSE
+        ILA=LA
+        ILOT=LOT
+        INC21=INC2
+      ENDIF
+C
+      IF (IFAC.EQ.2) THEN
+C                                                                       
+C     CODING FOR FACTOR 2                                               
+C     -------------------                                               
+  200 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+(2*M-LA)*INC1                                               
+      JA=1                                                              
+      JB=JA+JINK                                                        
+C                                                                       
+      IF (LA.NE.M) THEN                                            
+C                                                                       
+      DO 220 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 210 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+A(IB+I)                                           
+      C(JB+J)=A(IA+I)-A(IB+I)                                           
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  210 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  220 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IINK=2*IINK                                                       
+      IB=IB-IINK                                                        
+      IBASE=0                                                           
+      JBASE=JBASE+JUMP                                                  
+      JUMP=2*JUMP+JINK                                                  
+C
+      IF (IA.LT.IB) THEN                                           
+      DO 250 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      IBASE=0                                                           
+      DO 240 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 230 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+A(IB+I)                                           
+      D(JA+J)=B(IA+I)-B(IB+I)                                           
+      C(JB+J)=C1*(A(IA+I)-A(IB+I))-S1*(B(IA+I)+B(IB+I))                 
+      D(JB+J)=S1*(A(IA+I)-A(IB+I))+C1*(B(IA+I)+B(IB+I))                 
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  230 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  240 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IB=IB-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+  250 CONTINUE                                                          
+      ENDIF
+C
+      IF (IA.EQ.IB) THEN                                           
+      IBASE=0                                                           
+      DO 280 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 270 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)                                                   
+      C(JB+J)=-B(IA+I)                                                  
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  270 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  280 CONTINUE                                                          
+      ENDIF                                                         
+C                                                                       
+      ELSE                !!! Case LA=M                                 
+      IF (LIPL) THEN
+        DO 294 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC
+        DO 292 IJK=1,ILOT                                                  
+        T1=2.0*(A(IA+I)-A(IB+I))                                     
+        A(IA+I)=2.0*(A(IA+I)+A(IB+I))                                     
+        A(IB+I)=T1
+        I=I+INC3                                                          
+  292   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+  294   CONTINUE                                                          
+      ELSE
+        DO 298 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC
+        DO 296 IJK=1,ILOT                                                  
+        C(JA+J)=2.0*(A(IA+I)+A(IB+I))                                     
+        C(JB+J)=2.0*(A(IA+I)-A(IB+I))                                     
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  296   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+        JBASE=JBASE+INC21                                                  
+  298   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.3) THEN
+C                                                                       
+C     CODING FOR FACTOR 3                                               
+C     -------------------                                               
+  300 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+(2*M-LA)*INC1                                               
+      IC=IB                                                             
+      JA=1                                                              
+      JB=JA+JINK                                                        
+      JC=JB+JINK                                                        
+C                                                                       
+      IF (LA.NE.M) THEN                                            
+C                                                                       
+      DO 320 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 310 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+A(IB+I)                                           
+      C(JB+J)=(A(IA+I)-0.5*A(IB+I))-(SIN60*(B(IB+I)))                   
+      C(JC+J)=(A(IA+I)-0.5*A(IB+I))+(SIN60*(B(IB+I)))                   
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  310 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  320 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IINK=2*IINK                                                       
+      IB=IB+IINK                                                        
+      IC=IC-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+      JUMP=2*JUMP+JINK                                                  
+C
+      IF (IA.LT.IC) THEN                                           
+      DO 350 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      IBASE=0                                                           
+      DO 340 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 330 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))                                 
+      D(JA+J)=B(IA+I)+(B(IB+I)-B(IC+I))                                 
+      C(JB+J)=                                                          
+     *    C1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)+B(IC+I))))
+     *   -S1*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))))
+      D(JB+J)=                                                          
+     *    S1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)+B(IC+I))))
+     *   +C1*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))))
+      C(JC+J)=                                                          
+     *    C2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)+B(IC+I))))
+     *   -S2*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))))
+      D(JC+J)=                                                          
+     *    S2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)+B(IC+I))))
+     *   +C2*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))))
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  330 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  340 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IB=IB+IINK                                                        
+      IC=IC-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+  350 CONTINUE                                                          
+      ENDIF
+C
+      IF (IA.EQ.IC) THEN                                           
+      IBASE=0                                                           
+      DO 380 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 370 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+A(IB+I)                                           
+      C(JB+J)=(0.5*A(IA+I)-A(IB+I))-(SIN60*B(IA+I))                     
+      C(JC+J)=-(0.5*A(IA+I)-A(IB+I))-(SIN60*B(IA+I))                    
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  370 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  380 CONTINUE                                                          
+      ENDIF                                                         
+C                                                                       
+      ELSE                !!! Case LA=M                                 
+      SSIN60=2.0*SIN60                                                  
+      IF (LIPL) THEN
+        DO 394 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC
+        DO 392 IJK=1,ILOT                                                  
+        T1=(2.0*A(IA+I)-A(IB+I))-(SSIN60*B(IB+I))                    
+        T2=(2.0*A(IA+I)-A(IB+I))+(SSIN60*B(IB+I))                    
+        A(IA+I)=2.0*(A(IA+I)+A(IB+I))                                     
+        A(IB+I)=T1
+        B(IB+I)=T2
+        I=I+INC3                                                          
+  392   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+  394   CONTINUE                                                          
+      ELSE
+        DO 398 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC
+        DO 396 IJK=1,ILOT                                                  
+        C(JA+J)=2.0*(A(IA+I)+A(IB+I))                                     
+        C(JB+J)=(2.0*A(IA+I)-A(IB+I))-(SSIN60*B(IB+I))                    
+        C(JC+J)=(2.0*A(IA+I)-A(IB+I))+(SSIN60*B(IB+I))                    
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  396   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+        JBASE=JBASE+INC21                                                  
+  398   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.4) THEN
+C                                                                       
+C     CODING FOR FACTOR 4                                               
+C     -------------------                                               
+  400 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+(2*M-LA)*INC1                                               
+      IC=IB+2*M*INC1                                                    
+      ID=IB                                                             
+      JA=1                                                              
+      JB=JA+JINK                                                        
+      JC=JB+JINK                                                        
+      JD=JC+JINK                                                        
+C                                                                       
+      IF (LA.NE.M) THEN                                            
+C                                                                       
+      DO 420 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 410 IJK=1,ILOT                                                  
+      C(JA+J)=(A(IA+I)+A(IC+I))+A(IB+I)                                 
+      C(JB+J)=(A(IA+I)-A(IC+I))-B(IB+I)                                 
+      C(JC+J)=(A(IA+I)+A(IC+I))-A(IB+I)                                 
+      C(JD+J)=(A(IA+I)-A(IC+I))+B(IB+I)                                 
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  410 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  420 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IINK=2*IINK                                                       
+      IB=IB+IINK                                                        
+      IC=IC-IINK                                                        
+      ID=ID-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+      JUMP=2*JUMP+JINK                                                  
+C
+      IF (IB.LT.IC) THEN                                           
+      DO 450 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      KD=KC+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      C3=TRIGS(KD+1)                                                    
+      S3=TRIGS(KD+2)                                                    
+      IBASE=0                                                           
+      DO 440 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 430 IJK=1,ILOT                                                  
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))                       
+      D(JA+J)=(B(IA+I)-B(IC+I))+(B(IB+I)-B(ID+I))                       
+      C(JC+J)=                                                          
+     *    C2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))                      
+     *   -S2*((B(IA+I)-B(IC+I))-(B(IB+I)-B(ID+I)))                      
+      D(JC+J)=                                                          
+     *    S2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))                      
+     *   +C2*((B(IA+I)-B(IC+I))-(B(IB+I)-B(ID+I)))                      
+      C(JB+J)=                                                          
+     *    C1*((A(IA+I)-A(IC+I))-(B(IB+I)+B(ID+I)))                      
+     *   -S1*((B(IA+I)+B(IC+I))+(A(IB+I)-A(ID+I)))                      
+      D(JB+J)=                                                          
+     *    S1*((A(IA+I)-A(IC+I))-(B(IB+I)+B(ID+I)))                      
+     *   +C1*((B(IA+I)+B(IC+I))+(A(IB+I)-A(ID+I)))                      
+      C(JD+J)=                                                          
+     *    C3*((A(IA+I)-A(IC+I))+(B(IB+I)+B(ID+I)))                      
+     *   -S3*((B(IA+I)+B(IC+I))-(A(IB+I)-A(ID+I)))                      
+      D(JD+J)=                                                          
+     *    S3*((A(IA+I)-A(IC+I))+(B(IB+I)+B(ID+I)))                      
+     *   +C3*((B(IA+I)+B(IC+I))-(A(IB+I)-A(ID+I)))                      
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  430 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  440 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IB=IB+IINK                                                        
+      IC=IC-IINK                                                        
+      ID=ID-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+  450 CONTINUE                                                          
+      ENDIF
+C
+      IF (IB.EQ.IC) THEN                                           
+      IBASE=0                                                           
+      SIN45=SQRT(0.5)                                                   
+      DO 480 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 470 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+A(IB+I)                                           
+      C(JB+J)=SIN45*((A(IA+I)-A(IB+I))-(B(IA+I)+B(IB+I)))               
+      C(JC+J)=B(IB+I)-B(IA+I)                                           
+      C(JD+J)=-SIN45*((A(IA+I)-A(IB+I))+(B(IA+I)+B(IB+I)))              
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  470 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  480 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE                !!! Case LA=M                                 
+      IF (LIPL) THEN
+        DO 494 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC
+        DO 492 IJK=1,ILOT                                                  
+        T1=2.0*((A(IA+I)-A(IC+I))-B(IB+I))                           
+        T2=2.0*((A(IA+I)+A(IC+I))-A(IB+I))                           
+        T3=2.0*((A(IA+I)-A(IC+I))+B(IB+I))                           
+        A(IA+I)=2.0*((A(IA+I)+A(IC+I))+A(IB+I))                           
+        A(IB+I)=T1
+        B(IB+I)=T2
+        A(IC+I)=T3
+        I=I+INC3                                                          
+  492   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+  494   CONTINUE                                                          
+      ELSE
+        DO 498 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC
+        DO 496 IJK=1,ILOT                                                  
+        C(JA+J)=2.0*((A(IA+I)+A(IC+I))+A(IB+I))                           
+        C(JB+J)=2.0*((A(IA+I)-A(IC+I))-B(IB+I))                           
+        C(JC+J)=2.0*((A(IA+I)+A(IC+I))-A(IB+I))                           
+        C(JD+J)=2.0*((A(IA+I)-A(IC+I))+B(IB+I))                           
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  496   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+        JBASE=JBASE+INC21                                                  
+  498   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.5) THEN
+C                                                                       
+C     CODING FOR FACTOR 5                                               
+C     -------------------                                               
+  500 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+(2*M-LA)*INC1                                               
+      IC=IB+2*M*INC1                                                    
+      ID=IC                                                             
+      IE=IB                                                             
+      JA=1                                                              
+      JB=JA+JINK                                                        
+      JC=JB+JINK                                                        
+      JD=JC+JINK                                                        
+      JE=JD+JINK                                                        
+C                                                                       
+      IF (LA.NE.M) THEN                                                 
+C                                                                       
+      DO 520 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 510 IJK=1,ILOT                                                  
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))                                 
+      C(JB+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))+QRT5*(A(IB+I)-A(IC+I))) 
+     *    -(SIN72*B(IB+I)+SIN36*B(IC+I))                                
+      C(JC+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))-QRT5*(A(IB+I)-A(IC+I))) 
+     *    -(SIN36*B(IB+I)-SIN72*B(IC+I))                                
+      C(JD+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))-QRT5*(A(IB+I)-A(IC+I))) 
+     *    +(SIN36*B(IB+I)-SIN72*B(IC+I))                                
+      C(JE+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))+QRT5*(A(IB+I)-A(IC+I))) 
+     *    +(SIN72*B(IB+I)+SIN36*B(IC+I))                                
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  510 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  520 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IINK=2*IINK                                                       
+      IB=IB+IINK                                                        
+      IC=IC+IINK                                                        
+      ID=ID-IINK                                                        
+      IE=IE-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+      JUMP=2*JUMP+JINK                                                  
+C
+      IF (IB.LT.ID) THEN                                                
+      DO 550 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      KD=KC+KB                                                          
+      KE=KD+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      C3=TRIGS(KD+1)                                                    
+      S3=TRIGS(KD+2)                                                    
+      C4=TRIGS(KE+1)                                                    
+      S4=TRIGS(KE+2)                                                    
+      IBASE=0                                                           
+      DO 540 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 530 IJK=1,ILOT                                                  
+C                                                                       
+      A10=(A(IA+I)-0.25*((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))))          
+     *    +QRT5*((A(IB+I)+A(IE+I))-(A(IC+I)+A(ID+I)))                   
+      A20=(A(IA+I)-0.25*((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))))          
+     *    -QRT5*((A(IB+I)+A(IE+I))-(A(IC+I)+A(ID+I)))                   
+      B10=(B(IA+I)-0.25*((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I))))          
+     *    +QRT5*((B(IB+I)-B(IE+I))-(B(IC+I)-B(ID+I)))                   
+      B20=(B(IA+I)-0.25*((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I))))          
+     *    -QRT5*((B(IB+I)-B(IE+I))-(B(IC+I)-B(ID+I)))                   
+      A11=SIN72*(B(IB+I)+B(IE+I))+SIN36*(B(IC+I)+B(ID+I))               
+      A21=SIN36*(B(IB+I)+B(IE+I))-SIN72*(B(IC+I)+B(ID+I))               
+      B11=SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))               
+      B21=SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))               
+C                                                                       
+      C(JA+J)=A(IA+I)+((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I)))             
+      D(JA+J)=B(IA+I)+((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I)))             
+      C(JB+J)=C1*(A10-A11)-S1*(B10+B11)                                 
+      D(JB+J)=S1*(A10-A11)+C1*(B10+B11)                                 
+      C(JE+J)=C4*(A10+A11)-S4*(B10-B11)                                 
+      D(JE+J)=S4*(A10+A11)+C4*(B10-B11)                                 
+      C(JC+J)=C2*(A20-A21)-S2*(B20+B21)                                 
+      D(JC+J)=S2*(A20-A21)+C2*(B20+B21)                                 
+      C(JD+J)=C3*(A20+A21)-S3*(B20-B21)                                 
+      D(JD+J)=S3*(A20+A21)+C3*(B20-B21)                                 
+C                                                                       
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  530 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  540 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IB=IB+IINK                                                        
+      IC=IC+IINK                                                        
+      ID=ID-IINK                                                        
+      IE=IE-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+  550 CONTINUE                                                          
+      ENDIF
+C
+      IF (IB.EQ.ID) THEN                                                
+      IBASE=0                                                           
+      DO 580 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 570 IJK=1,ILOT                                                  
+      C(JA+J)=(A(IA+I)+A(IB+I))+A(IC+I)                                 
+      C(JB+J)=(QRT5*(A(IA+I)-A(IB+I))+(0.25*(A(IA+I)+A(IB+I))-A(IC+I))) 
+     *    -(SIN36*B(IA+I)+SIN72*B(IB+I))                                
+      C(JE+J)=-(QRT5*(A(IA+I)-A(IB+I))+(0.25*(A(IA+I)+A(IB+I))-A(IC+I)))
+     *    -(SIN36*B(IA+I)+SIN72*B(IB+I))                                
+      C(JC+J)=(QRT5*(A(IA+I)-A(IB+I))-(0.25*(A(IA+I)+A(IB+I))-A(IC+I))) 
+     *    -(SIN72*B(IA+I)-SIN36*B(IB+I))                                
+      C(JD+J)=-(QRT5*(A(IA+I)-A(IB+I))-(0.25*(A(IA+I)+A(IB+I))-A(IC+I)))
+     *    -(SIN72*B(IA+I)-SIN36*B(IB+I))                                
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  570 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  580 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE               !!! Case LA=M                                  
+      QQRT5=2.0*QRT5                                                    
+      SSIN36=2.0*SIN36                                                  
+      SSIN72=2.0*SIN72                                                  
+      IF (LIPL) THEN
+        DO 594 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC
+        DO 592 IJK=1,ILOT                                                  
+        T1=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    +QQRT5*(A(IB+I)-A(IC+I)))-(SSIN72*B(IB+I)+SSIN36*B(IC+I))     
+        T2=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    -QQRT5*(A(IB+I)-A(IC+I)))-(SSIN36*B(IB+I)-SSIN72*B(IC+I))     
+        T3=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    -QQRT5*(A(IB+I)-A(IC+I)))+(SSIN36*B(IB+I)-SSIN72*B(IC+I))     
+        T4=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    +QQRT5*(A(IB+I)-A(IC+I)))+(SSIN72*B(IB+I)+SSIN36*B(IC+I))     
+        A(IA+I)=2.0*(A(IA+I)+(A(IB+I)+A(IC+I)))                           
+        A(IB+I)=T1
+        B(IB+I)=T2
+        A(IC+I)=T3
+        B(IC+I)=T4
+        I=I+INC3                                                          
+  592   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+  594   CONTINUE                                                          
+      ELSE
+        DO 598 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC
+        DO 596 IJK=1,ILOT                                                  
+        C(JA+J)=2.0*(A(IA+I)+(A(IB+I)+A(IC+I)))                           
+        C(JB+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    +QQRT5*(A(IB+I)-A(IC+I)))-(SSIN72*B(IB+I)+SSIN36*B(IC+I))     
+        C(JC+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    -QQRT5*(A(IB+I)-A(IC+I)))-(SSIN36*B(IB+I)-SSIN72*B(IC+I))     
+        C(JD+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    -QQRT5*(A(IB+I)-A(IC+I)))+(SSIN36*B(IB+I)-SSIN72*B(IC+I))     
+        C(JE+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))                     
+     *    +QQRT5*(A(IB+I)-A(IC+I)))+(SSIN72*B(IB+I)+SSIN36*B(IC+I))     
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  596   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+        JBASE=JBASE+INC21                                                  
+  598   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.6) THEN
+C                                                                       
+C     CODING FOR FACTOR 6                                               
+C     -------------------                                               
+  600 CONTINUE                                                          
+      IA=1                                                              
+      IB=IA+(2*M-LA)*INC1                                               
+      IC=IB+2*M*INC1                                                    
+      ID=IC+2*M*INC1                                                    
+      IE=IC                                                             
+      IF=IB                                                             
+      JA=1                                                              
+      JB=JA+JINK                                                        
+      JC=JB+JINK                                                        
+      JD=JC+JINK                                                        
+      JE=JD+JINK                                                        
+      JF=JE+JINK                                                        
+C                                                                       
+      IF (LA.NE.M) THEN                                                 
+C                                                                       
+      DO 620 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 610 IJK=1,ILOT                                                  
+      C(JA+J)=(A(IA+I)+A(ID+I))+(A(IB+I)+A(IC+I))                       
+      C(JD+J)=(A(IA+I)-A(ID+I))-(A(IB+I)-A(IC+I))                       
+      C(JB+J)=((A(IA+I)-A(ID+I))+0.5*(A(IB+I)-A(IC+I)))                 
+     *    -(SIN60*(B(IB+I)+B(IC+I)))                                    
+      C(JF+J)=((A(IA+I)-A(ID+I))+0.5*(A(IB+I)-A(IC+I)))                 
+     *    +(SIN60*(B(IB+I)+B(IC+I)))                                    
+      C(JC+J)=((A(IA+I)+A(ID+I))-0.5*(A(IB+I)+A(IC+I)))                 
+     *    -(SIN60*(B(IB+I)-B(IC+I)))                                    
+      C(JE+J)=((A(IA+I)+A(ID+I))-0.5*(A(IB+I)+A(IC+I)))                 
+     *    +(SIN60*(B(IB+I)-B(IC+I)))                                    
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  610 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  620 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IINK=2*IINK                                                       
+      IB=IB+IINK                                                        
+      IC=IC+IINK                                                        
+      ID=ID-IINK                                                        
+      IE=IE-IINK                                                        
+      IF=IF-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+      JUMP=2*JUMP+JINK                                                  
+C
+      IF (IC.LT.ID) THEN                                                
+      DO 650 K=LA,KSTOP,LA                                              
+      KB=K+K                                                            
+      KC=KB+KB                                                          
+      KD=KC+KB                                                          
+      KE=KD+KB                                                          
+      KF=KE+KB                                                          
+      C1=TRIGS(KB+1)                                                    
+      S1=TRIGS(KB+2)                                                    
+      C2=TRIGS(KC+1)                                                    
+      S2=TRIGS(KC+2)                                                    
+      C3=TRIGS(KD+1)                                                    
+      S3=TRIGS(KD+2)                                                    
+      C4=TRIGS(KE+1)                                                    
+      S4=TRIGS(KE+2)                                                    
+      C5=TRIGS(KF+1)                                                    
+      S5=TRIGS(KF+2)                                                    
+      IBASE=0                                                           
+      DO 640 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 630 IJK=1,ILOT                                                  
+C                                                                       
+      A11= (A(IE+I)+A(IB+I))+(A(IC+I)+A(IF+I))                          
+      A20=(A(IA+I)+A(ID+I))-0.5*A11                                     
+      A21=SIN60*((A(IE+I)+A(IB+I))-(A(IC+I)+A(IF+I)))                   
+      B11= (B(IB+I)-B(IE+I))+(B(IC+I)-B(IF+I))                          
+      B20=(B(IA+I)-B(ID+I))-0.5*B11                                     
+      B21=SIN60*((B(IB+I)-B(IE+I))-(B(IC+I)-B(IF+I)))                   
+C                                                                       
+      C(JA+J)=(A(IA+I)+A(ID+I))+A11                                     
+      D(JA+J)=(B(IA+I)-B(ID+I))+B11                                     
+      C(JC+J)=C2*(A20-B21)-S2*(B20+A21)                                 
+      D(JC+J)=S2*(A20-B21)+C2*(B20+A21)                                 
+      C(JE+J)=C4*(A20+B21)-S4*(B20-A21)                                 
+      D(JE+J)=S4*(A20+B21)+C4*(B20-A21)                                 
+C                                                                       
+      A11=(A(IE+I)-A(IB+I))+(A(IC+I)-A(IF+I))                           
+      B11=(B(IE+I)+B(IB+I))-(B(IC+I)+B(IF+I))                           
+      A20=(A(IA+I)-A(ID+I))-0.5*A11                                     
+      A21=SIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))                   
+      B20=(B(IA+I)+B(ID+I))+0.5*B11                                     
+      B21=SIN60*((B(IE+I)+B(IB+I))+(B(IC+I)+B(IF+I)))                   
+C                                                                       
+      C(JD+J)=                                                          
+     *  C3*((A(IA+I)-A(ID+I))+A11)-S3*((B(IA+I)+B(ID+I))-B11)           
+      D(JD+J)=                                                          
+     *  S3*((A(IA+I)-A(ID+I))+A11)+C3*((B(IA+I)+B(ID+I))-B11)           
+      C(JB+J)=C1*(A20-B21)-S1*(B20-A21)                                 
+      D(JB+J)=S1*(A20-B21)+C1*(B20-A21)                                 
+      C(JF+J)=C5*(A20+B21)-S5*(B20+A21)                                 
+      D(JF+J)=S5*(A20+B21)+C5*(B20+A21)                                 
+C                                                                       
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  630 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  640 CONTINUE                                                          
+      IA=IA+IINK                                                        
+      IB=IB+IINK                                                        
+      IC=IC+IINK                                                        
+      ID=ID-IINK                                                        
+      IE=IE-IINK                                                        
+      IF=IF-IINK                                                        
+      JBASE=JBASE+JUMP                                                  
+  650 CONTINUE                                                          
+      ENDIF
+C
+      IF (IC.EQ.ID) THEN                                                
+      IBASE=0                                                           
+      DO 680 L=1,ILA                                                     
+      I=IBASE                                                           
+      J=JBASE                                                           
+!OCL NOVREC                                                   
+      DO 670 IJK=1,ILOT                                                  
+      C(JA+J)=A(IB+I)+(A(IA+I)+A(IC+I))                                 
+      C(JD+J)=B(IB+I)-(B(IA+I)+B(IC+I))                                 
+      C(JB+J)=(SIN60*(A(IA+I)-A(IC+I)))-(0.5*(B(IA+I)+B(IC+I))+B(IB+I)) 
+      C(JF+J)=-(SIN60*(A(IA+I)-A(IC+I)))-(0.5*(B(IA+I)+B(IC+I))+B(IB+I))
+      C(JC+J)=SIN60*(B(IC+I)-B(IA+I))+(0.5*(A(IA+I)+A(IC+I))-A(IB+I))   
+      C(JE+J)=SIN60*(B(IC+I)-B(IA+I))-(0.5*(A(IA+I)+A(IC+I))-A(IB+I))   
+      I=I+INC3                                                          
+      J=J+INC4                                                          
+  670 CONTINUE                                                          
+      IBASE=IBASE+INC1                                                  
+      JBASE=JBASE+INC21                                                  
+  680 CONTINUE                                                          
+      ENDIF                                                             
+C                                                                       
+      ELSE                 !!! Case LA=M                                
+      SSIN60=2.0*SIN60                                                  
+      IF (LIPL) THEN
+        DO 694 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC
+        DO 692 IJK=1,ILOT                                                  
+        T1=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))                 
+     *    -(SSIN60*(B(IB+I)+B(IC+I)))                                   
+        T5=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))                 
+     *    +(SSIN60*(B(IB+I)+B(IC+I)))                                   
+        T2=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))                 
+     *    -(SSIN60*(B(IB+I)-B(IC+I)))                                   
+        T4=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))                 
+     *    +(SSIN60*(B(IB+I)-B(IC+I)))                                   
+        T3=(2.0*(A(IA+I)-A(ID+I)))-(2.0*(A(IB+I)-A(IC+I)))           
+        A(IA+I)=(2.0*(A(IA+I)+A(ID+I)))+(2.0*(A(IB+I)+A(IC+I)))           
+        A(IB+I)=T1
+        B(IB+I)=T2
+        A(IC+I)=T3
+        B(IC+I)=T4
+        A(ID+I)=T5
+        I=I+INC3                                                          
+  692   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+  694   CONTINUE                                                          
+      ELSE
+        DO 698 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC
+        DO 696 IJK=1,ILOT                                                  
+        C(JA+J)=(2.0*(A(IA+I)+A(ID+I)))+(2.0*(A(IB+I)+A(IC+I)))           
+        C(JD+J)=(2.0*(A(IA+I)-A(ID+I)))-(2.0*(A(IB+I)-A(IC+I)))           
+        C(JB+J)=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))                 
+     *    -(SSIN60*(B(IB+I)+B(IC+I)))                                   
+        C(JF+J)=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))                 
+     *    +(SSIN60*(B(IB+I)+B(IC+I)))                                   
+        C(JC+J)=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))                 
+     *    -(SSIN60*(B(IB+I)-B(IC+I)))                                   
+        C(JE+J)=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))                 
+     *    +(SSIN60*(B(IB+I)-B(IC+I)))                                   
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  696   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+        JBASE=JBASE+INC21                                                  
+  698   CONTINUE                                                          
+      ENDIF
+      ENDIF
+C
+      ELSEIF (IFAC.EQ.8) THEN
+C                                                                       
+C     CODING FOR FACTOR 8                                               
+C     -------------------                                               
+  800 CONTINUE                                                          
+      IF (LA.NE.M) THEN                                            
+        IBAD=3
+      ELSE
+      IA=1                                                              
+      IB=IA+LA*INC1                                                     
+      IC=IB+2*LA*INC1                                                   
+      ID=IC+2*LA*INC1                                                   
+      IE=ID+2*LA*INC1                                                   
+      JA=1                                                              
+      JB=JA+JINK                                                        
+      JC=JB+JINK                                                        
+      JD=JC+JINK                                                        
+      JE=JD+JINK                                                        
+      JF=JE+JINK                                                        
+      JG=JF+JINK                                                        
+      JH=JG+JINK                                                        
+      SSIN45=SQRT(2.0)                                                  
+C                                                                       
+      IF (LIPL) THEN
+        DO 820 L=1,ILA                                                     
+        I=IBASE                                                           
+!OCL NOVREC
+        DO 810 IJK=1,ILOT                                                  
+        T2=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))-(B(IB+I)-B(ID+I)))       
+        T6=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))+(B(IB+I)-B(ID+I)))       
+        T1=2.0*((A(IA+I)-A(IE+I))-B(IC+I))                           
+     *    +SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))                 
+        T5=2.0*((A(IA+I)-A(IE+I))-B(IC+I))                           
+     *    -SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))                 
+        T3=2.0*((A(IA+I)-A(IE+I))+B(IC+I))                           
+     *    -SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))                 
+        T7=2.0*((A(IA+I)-A(IE+I))+B(IC+I))                           
+     *    +SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))                 
+        T4=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))-(A(IB+I)+A(ID+I)))       
+        A(IA+I)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))+(A(IB+I)+A(ID+I)))       
+        A(IB+I)=T1
+        B(IB+I)=T2
+        A(IC+I)=T3
+        B(IC+I)=T4
+        A(ID+I)=T5
+        B(ID+I)=T6
+        A(IE+I)=T7  
+        I=I+INC3                                                          
+  810   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+  820   CONTINUE                                                          
+      ELSE
+        DO 840 L=1,ILA                                                     
+        I=IBASE                                                           
+        J=JBASE                                                           
+!OCL NOVREC
+        DO 830 IJK=1,ILOT                                                  
+        C(JA+J)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))+(A(IB+I)+A(ID+I)))       
+        C(JE+J)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))-(A(IB+I)+A(ID+I)))       
+        C(JC+J)=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))-(B(IB+I)-B(ID+I)))       
+        C(JG+J)=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))+(B(IB+I)-B(ID+I)))       
+        C(JB+J)=2.0*((A(IA+I)-A(IE+I))-B(IC+I))                           
+     *    +SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))                 
+        C(JF+J)=2.0*((A(IA+I)-A(IE+I))-B(IC+I))                           
+     *    -SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))                 
+        C(JD+J)=2.0*((A(IA+I)-A(IE+I))+B(IC+I))                           
+     *    -SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))                 
+        C(JH+J)=2.0*((A(IA+I)-A(IE+I))+B(IC+I))                           
+     *    +SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))                 
+        I=I+INC3                                                          
+        J=J+INC4                                                          
+  830   CONTINUE                                                          
+        IBASE=IBASE+INC1                                                  
+        JBASE=JBASE+INC21                                                  
+  840   CONTINUE                                                          
+      ENDIF
+C
+      ENDIF
+C
+      ELSE
+C
+      IBAD=2       !!! Illegal factor
+C
+      ENDIF
+C                                                                       
+C     RETURN                                                            
+C     ------                                                            
+  900 CONTINUE                                                          
+      IERR=IBAD                                                         
+      RETURN                                                            
+      END                                                               
diff --git a/fft/rpassm.f b/fft/rpassm.f
new file mode 100755
index 0000000..5596973
--- /dev/null
+++ b/fft/rpassm.f
@@ -0,0 +1,790 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE RPASSM(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,ILOT,N,IFAC,
+     *    ILA,IERR)
+      REAL A(*),B(*),C(*),D(*),TRIGS(*)
+C
+C     SUBROUTINE 'RPASSM' - PERFORMS ONE PASS THROUGH DATA AS PART
+C     OF MULTIPLE REAL FFT (FOURIER SYNTHESIS) ROUTINE
+C
+C     A IS FIRST REAL INPUT VECTOR
+C         EQUIVALENCE B(1) WITH A (ILA*INC1+1)
+C     C IS FIRST REAL OUTPUT VECTOR
+C         EQUIVALENCE D(1) WITH C(IFAC*ILA*INC2+1)
+C     TRIGS IS A PRECALCULATED LIST OF SINES & COSINES
+C     INC1 IS THE ADDRESSING INCREMENT FOR A
+C     INC2 IS THE ADDRESSING INCREMENT FOR C
+C     INC3 IS THE INCREMENT BETWEEN INPUT VECTORS A
+C     INC4 IS THE INCREMENT BETWEEN OUTPUT VECTORS C
+C     ILOT IS THE NUMBER OF VECTORS
+C     N IS THE LENGTH OF THE VECTORS
+C     IFAC IS THE CURRENT FACTOR OF N
+C     ILA IS THE PRODUCT OF PREVIOUS FACTORS
+C     IERR IS AN ERROR INDICATOR:
+C              0 - PASS COMPLETED WITHOUT ERROR
+C              1 - ILOT GREATER THAN 64
+C              2 - IFAC NOT CATERED FOR
+C              3 - IFAC ONLY CATERED FOR IF ILA=N/IFAC
+C
+C-----------------------------------------------------------------------
+C
+      REAL A10(512),A11(512),
+     *     A20(512),A21(512),
+     *     B10(512),B11(512),B20(512),B21(512)
+C
+      SAVE SIN36, SIN72, QRT5, SIN60
+C
+      DATA SIN36/0.587785252292473/,SIN72/0.951056516295154/,
+     *    QRT5/0.559016994374947/,SIN60/0.866025403784437/
+C
+      M=N/IFAC
+      IINK=ILA*INC1
+      JINK=ILA*INC2
+      JUMP=(IFAC-1)*JINK
+      KSTOP=(N-IFAC)/(2*IFAC)
+C
+      IBAD=1
+      IF (ILOT.GT.512) GO TO 910
+      IBASE=0
+      JBASE=0
+      IGO=IFAC-1
+      IF (IGO.EQ.7) IGO=6
+      IBAD=2
+      IF (IGO.LT.1.OR.IGO.GT.6) GO TO 910
+      GO TO (200,300,400,500,600,800),IGO
+C
+C     CODING FOR FACTOR 2
+C     -------------------
+  200 CONTINUE
+      IA=1
+      IB=IA+(2*M-ILA)*INC1
+      JA=1
+      JB=JA+JINK
+C
+      IF (ILA.EQ.M) GO TO 290
+C
+      DO 220 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 210 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=A(IA+I)-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  210 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  220 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB-IINK
+      IBASE=0
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IA.EQ.IB) GO TO 260
+      DO 250 K=ILA,KSTOP,ILA
+      KB=K+K
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      IBASE=0
+      DO 240 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 230 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      D(JA+J)=B(IA+I)-B(IB+I)
+      C(JB+J)=C1*(A(IA+I)-A(IB+I))-S1*(B(IA+I)+B(IB+I))
+      D(JB+J)=S1*(A(IA+I)-A(IB+I))+C1*(B(IA+I)+B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  230 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  240 CONTINUE
+      IA=IA+IINK
+      IB=IB-IINK
+      JBASE=JBASE+JUMP
+  250 CONTINUE
+      IF (IA.GT.IB) GO TO 900
+  260 CONTINUE
+      IBASE=0
+      DO 280 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 270 IJK=1,ILOT
+      C(JA+J)=A(IA+I)
+      C(JB+J)=-B(IA+I)
+      I=I+INC3
+      J=J+INC4
+  270 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  280 CONTINUE
+      GO TO 900
+C
+  290 CONTINUE
+      DO 294 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 292 IJK=1,ILOT
+      C(JA+J)=2.0*(A(IA+I)+A(IB+I))
+      C(JB+J)=2.0*(A(IA+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  292 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  294 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 3
+C     -------------------
+  300 CONTINUE
+      IA=1
+      IB=IA+(2*M-ILA)*INC1
+      IC=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+C
+      IF (ILA.EQ.M) GO TO 390
+C
+      DO 320 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 310 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=(A(IA+I)-0.5*A(IB+I))-(SIN60*(B(IB+I)))
+      C(JC+J)=(A(IA+I)-0.5*A(IB+I))+(SIN60*(B(IB+I)))
+      I=I+INC3
+      J=J+INC4
+  310 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  320 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IA.EQ.IC) GO TO 360
+      DO 350 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      IBASE=0
+      DO 340 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 330 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      D(JA+J)=B(IA+I)+(B(IB+I)-B(IC+I))
+      C(JB+J)=
+     *    C1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)+B(IC+
+     *  I))))
+     *   -S1*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))+(SIN60*(A(IB+I)-A(IC+
+     *  I))))
+      D(JB+J)=
+     *    S1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)+B(IC+
+     *  I))))
+     *   +C1*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))+(SIN60*(A(IB+I)-A(IC+
+     *  I))))
+      C(JC+J)=
+     *    C2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)+B(IC+
+     *  I))))
+     *   -S2*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))-(SIN60*(A(IB+I)-A(IC+
+     *  I))))
+      D(JC+J)=
+     *    S2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)+B(IC+
+     *  I))))
+     *   +C2*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))-(SIN60*(A(IB+I)-A(IC+
+     *  I))))
+      I=I+INC3
+      J=J+INC4
+  330 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  340 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      JBASE=JBASE+JUMP
+  350 CONTINUE
+      IF (IA.GT.IC) GO TO 900
+  360 CONTINUE
+      IBASE=0
+      DO 380 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 370 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=(0.5*A(IA+I)-A(IB+I))-(SIN60*B(IA+I))
+      C(JC+J)=-(0.5*A(IA+I)-A(IB+I))-(SIN60*B(IA+I))
+      I=I+INC3
+      J=J+INC4
+  370 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  380 CONTINUE
+      GO TO 900
+C
+  390 CONTINUE
+      SSIN60=2.0*SIN60
+      DO 394 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 392 IJK=1,ILOT
+      C(JA+J)=2.0*(A(IA+I)+A(IB+I))
+      C(JB+J)=(2.0*A(IA+I)-A(IB+I))-(SSIN60*B(IB+I))
+      C(JC+J)=(2.0*A(IA+I)-A(IB+I))+(SSIN60*B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  392 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  394 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 4
+C     -------------------
+  400 CONTINUE
+      IA=1
+      IB=IA+(2*M-ILA)*INC1
+      IC=IB+2*M*INC1
+      ID=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+C
+      IF (ILA.EQ.M) GO TO 490
+C
+      DO 420 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 410 IJK=1,ILOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+A(IB+I)
+      C(JB+J)=(A(IA+I)-A(IC+I))-B(IB+I)
+      C(JC+J)=(A(IA+I)+A(IC+I))-A(IB+I)
+      C(JD+J)=(A(IA+I)-A(IC+I))+B(IB+I)
+      I=I+INC3
+      J=J+INC4
+  410 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  420 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      ID=ID-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IB.EQ.IC) GO TO 460
+      DO 450 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      IBASE=0
+      DO 440 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 430 IJK=1,ILOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))
+      D(JA+J)=(B(IA+I)-B(IC+I))+(B(IB+I)-B(ID+I))
+      C(JC+J)=
+     *    C2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+     *   -S2*((B(IA+I)-B(IC+I))-(B(IB+I)-B(ID+I)))
+      D(JC+J)=
+     *    S2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+     *   +C2*((B(IA+I)-B(IC+I))-(B(IB+I)-B(ID+I)))
+      C(JB+J)=
+     *    C1*((A(IA+I)-A(IC+I))-(B(IB+I)+B(ID+I)))
+     *   -S1*((B(IA+I)+B(IC+I))+(A(IB+I)-A(ID+I)))
+      D(JB+J)=
+     *    S1*((A(IA+I)-A(IC+I))-(B(IB+I)+B(ID+I)))
+     *   +C1*((B(IA+I)+B(IC+I))+(A(IB+I)-A(ID+I)))
+      C(JD+J)=
+     *    C3*((A(IA+I)-A(IC+I))+(B(IB+I)+B(ID+I)))
+     *   -S3*((B(IA+I)+B(IC+I))-(A(IB+I)-A(ID+I)))
+      D(JD+J)=
+     *    S3*((A(IA+I)-A(IC+I))+(B(IB+I)+B(ID+I)))
+     *   +C3*((B(IA+I)+B(IC+I))-(A(IB+I)-A(ID+I)))
+      I=I+INC3
+      J=J+INC4
+  430 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  440 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      ID=ID-IINK
+      JBASE=JBASE+JUMP
+  450 CONTINUE
+      IF (IB.GT.IC) GO TO 900
+  460 CONTINUE
+      IBASE=0
+      SIN45=SQRT(0.5)
+      DO 480 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 470 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=SIN45*((A(IA+I)-A(IB+I))-(B(IA+I)+B(IB+I)))
+      C(JC+J)=B(IB+I)-B(IA+I)
+      C(JD+J)=-SIN45*((A(IA+I)-A(IB+I))+(B(IA+I)+B(IB+I)))
+      I=I+INC3
+      J=J+INC4
+  470 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  480 CONTINUE
+      GO TO 900
+C
+  490 CONTINUE
+      DO 494 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 492 IJK=1,ILOT
+      C(JA+J)=2.0*((A(IA+I)+A(IC+I))+A(IB+I))
+      C(JB+J)=2.0*((A(IA+I)-A(IC+I))-B(IB+I))
+      C(JC+J)=2.0*((A(IA+I)+A(IC+I))-A(IB+I))
+      C(JD+J)=2.0*((A(IA+I)-A(IC+I))+B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  492 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  494 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 5
+C     -------------------
+  500 CONTINUE
+      IA=1
+      IB=IA+(2*M-ILA)*INC1
+      IC=IB+2*M*INC1
+      ID=IC
+      IE=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+      JE=JD+JINK
+C
+      IF (ILA.EQ.M) GO TO 590
+C
+      DO 520 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 510 IJK=1,ILOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      C(JB+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))+QRT5*(A(IB+I)-A(IC+
+     *  I)))
+     *    -(SIN72*B(IB+I)+SIN36*B(IC+I))
+      C(JC+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))-QRT5*(A(IB+I)-A(IC+
+     *  I)))
+     *    -(SIN36*B(IB+I)-SIN72*B(IC+I))
+      C(JD+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))-QRT5*(A(IB+I)-A(IC+
+     *  I)))
+     *    +(SIN36*B(IB+I)-SIN72*B(IC+I))
+      C(JE+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))+QRT5*(A(IB+I)-A(IC+
+     *  I)))
+     *    +(SIN72*B(IB+I)+SIN36*B(IC+I))
+      I=I+INC3
+      J=J+INC4
+  510 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  520 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IB.EQ.ID) GO TO 560
+      DO 550 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      IBASE=0
+      DO 540 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 530 IJK=1,ILOT
+C
+      A10(IJK)=(A(IA+I)-0.25*((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))))
+     *    +QRT5*((A(IB+I)+A(IE+I))-(A(IC+I)+A(ID+I)))
+      A20(IJK)=(A(IA+I)-0.25*((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))))
+     *    -QRT5*((A(IB+I)+A(IE+I))-(A(IC+I)+A(ID+I)))
+      B10(IJK)=(B(IA+I)-0.25*((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I))))
+     *    +QRT5*((B(IB+I)-B(IE+I))-(B(IC+I)-B(ID+I)))
+      B20(IJK)=(B(IA+I)-0.25*((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I))))
+     *    -QRT5*((B(IB+I)-B(IE+I))-(B(IC+I)-B(ID+I)))
+      A11(IJK)=SIN72*(B(IB+I)+B(IE+I))+SIN36*(B(IC+I)+B(ID+I))
+      A21(IJK)=SIN36*(B(IB+I)+B(IE+I))-SIN72*(B(IC+I)+B(ID+I))
+      B11(IJK)=SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))
+      B21(IJK)=SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))
+C
+      C(JA+J)=A(IA+I)+((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I)))
+      D(JA+J)=B(IA+I)+((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I)))
+      C(JB+J)=C1*(A10(IJK)-A11(IJK))-S1*(B10(IJK)+B11(IJK))
+      D(JB+J)=S1*(A10(IJK)-A11(IJK))+C1*(B10(IJK)+B11(IJK))
+      C(JE+J)=C4*(A10(IJK)+A11(IJK))-S4*(B10(IJK)-B11(IJK))
+      D(JE+J)=S4*(A10(IJK)+A11(IJK))+C4*(B10(IJK)-B11(IJK))
+      C(JC+J)=C2*(A20(IJK)-A21(IJK))-S2*(B20(IJK)+B21(IJK))
+      D(JC+J)=S2*(A20(IJK)-A21(IJK))+C2*(B20(IJK)+B21(IJK))
+      C(JD+J)=C3*(A20(IJK)+A21(IJK))-S3*(B20(IJK)-B21(IJK))
+      D(JD+J)=S3*(A20(IJK)+A21(IJK))+C3*(B20(IJK)-B21(IJK))
+C
+      I=I+INC3
+      J=J+INC4
+  530 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  540 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      JBASE=JBASE+JUMP
+  550 CONTINUE
+      IF (IB.GT.ID) GO TO 900
+  560 CONTINUE
+      IBASE=0
+      DO 580 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 570 IJK=1,ILOT
+      C(JA+J)=(A(IA+I)+A(IB+I))+A(IC+I)
+      C(JB+J)=(QRT5*(A(IA+I)-A(IB+I))+(0.25*(A(IA+I)+A(IB+I))-A(IC+
+     *  I)))
+     *    -(SIN36*B(IA+I)+SIN72*B(IB+I))
+      C(JE+J)=-(QRT5*(A(IA+I)-A(IB+I))+(0.25*(A(IA+I)+A(IB+I))-A(IC+
+     *  I)))
+     *    -(SIN36*B(IA+I)+SIN72*B(IB+I))
+      C(JC+J)=(QRT5*(A(IA+I)-A(IB+I))-(0.25*(A(IA+I)+A(IB+I))-A(IC+
+     *  I)))
+     *    -(SIN72*B(IA+I)-SIN36*B(IB+I))
+      C(JD+J)=-(QRT5*(A(IA+I)-A(IB+I))-(0.25*(A(IA+I)+A(IB+I))-A(IC+
+     *  I)))
+     *    -(SIN72*B(IA+I)-SIN36*B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  570 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  580 CONTINUE
+      GO TO 900
+C
+  590 CONTINUE
+      QQRT5=2.0*QRT5
+      SSIN36=2.0*SIN36
+      SSIN72=2.0*SIN72
+      DO 594 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 592 IJK=1,ILOT
+      C(JA+J)=2.0*(A(IA+I)+(A(IB+I)+A(IC+I)))
+      C(JB+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    +QQRT5*(A(IB+I)-A(IC+I)))-(SSIN72*B(IB+I)+SSIN36*B(IC+I))
+      C(JC+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    -QQRT5*(A(IB+I)-A(IC+I)))-(SSIN36*B(IB+I)-SSIN72*B(IC+I))
+      C(JD+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    -QQRT5*(A(IB+I)-A(IC+I)))+(SSIN36*B(IB+I)-SSIN72*B(IC+I))
+      C(JE+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    +QQRT5*(A(IB+I)-A(IC+I)))+(SSIN72*B(IB+I)+SSIN36*B(IC+I))
+      I=I+INC3
+      J=J+INC4
+  592 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  594 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 6
+C     -------------------
+  600 CONTINUE
+      IA=1
+      IB=IA+(2*M-ILA)*INC1
+      IC=IB+2*M*INC1
+      ID=IC+2*M*INC1
+      IE=IC
+      IF=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+      JE=JD+JINK
+      JF=JE+JINK
+C
+      IF (ILA.EQ.M) GO TO 690
+C
+      DO 620 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 610 IJK=1,ILOT
+      C(JA+J)=(A(IA+I)+A(ID+I))+(A(IB+I)+A(IC+I))
+      C(JD+J)=(A(IA+I)-A(ID+I))-(A(IB+I)-A(IC+I))
+      C(JB+J)=((A(IA+I)-A(ID+I))+0.5*(A(IB+I)-A(IC+I)))
+     *    -(SIN60*(B(IB+I)+B(IC+I)))
+      C(JF+J)=((A(IA+I)-A(ID+I))+0.5*(A(IB+I)-A(IC+I)))
+     *    +(SIN60*(B(IB+I)+B(IC+I)))
+      C(JC+J)=((A(IA+I)+A(ID+I))-0.5*(A(IB+I)+A(IC+I)))
+     *    -(SIN60*(B(IB+I)-B(IC+I)))
+      C(JE+J)=((A(IA+I)+A(ID+I))-0.5*(A(IB+I)+A(IC+I)))
+     *    +(SIN60*(B(IB+I)-B(IC+I)))
+      I=I+INC3
+      J=J+INC4
+  610 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  620 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      IF=IF-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IC.EQ.ID) GO TO 660
+      DO 650 K=ILA,KSTOP,ILA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      KF=KE+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      C5=TRIGS(KF+1)
+      S5=TRIGS(KF+2)
+      IBASE=0
+      DO 640 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 630 IJK=1,ILOT
+C
+      A11(IJK)= (A(IE+I)+A(IB+I))+(A(IC+I)+A(IF+I))
+      A20(IJK)=(A(IA+I)+A(ID+I))-0.5*A11(IJK)
+      A21(IJK)=SIN60*((A(IE+I)+A(IB+I))-(A(IC+I)+A(IF+I)))
+      B11(IJK)= (B(IB+I)-B(IE+I))+(B(IC+I)-B(IF+I))
+      B20(IJK)=(B(IA+I)-B(ID+I))-0.5*B11(IJK)
+      B21(IJK)=SIN60*((B(IB+I)-B(IE+I))-(B(IC+I)-B(IF+I)))
+C
+      C(JA+J)=(A(IA+I)+A(ID+I))+A11(IJK)
+      D(JA+J)=(B(IA+I)-B(ID+I))+B11(IJK)
+      C(JC+J)=C2*(A20(IJK)-B21(IJK))-S2*(B20(IJK)+A21(IJK))
+      D(JC+J)=S2*(A20(IJK)-B21(IJK))+C2*(B20(IJK)+A21(IJK))
+      C(JE+J)=C4*(A20(IJK)+B21(IJK))-S4*(B20(IJK)-A21(IJK))
+      D(JE+J)=S4*(A20(IJK)+B21(IJK))+C4*(B20(IJK)-A21(IJK))
+C
+      A11(IJK)=(A(IE+I)-A(IB+I))+(A(IC+I)-A(IF+I))
+      B11(IJK)=(B(IE+I)+B(IB+I))-(B(IC+I)+B(IF+I))
+      A20(IJK)=(A(IA+I)-A(ID+I))-0.5*A11(IJK)
+      A21(IJK)=SIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))
+      B20(IJK)=(B(IA+I)+B(ID+I))+0.5*B11(IJK)
+      B21(IJK)=SIN60*((B(IE+I)+B(IB+I))+(B(IC+I)+B(IF+I)))
+C
+      C(JD+J)=
+     *  C3*((A(IA+I)-A(ID+I))+A11(IJK))-S3*((B(IA+I)+B(ID+I))-B11(IJK))
+      D(JD+J)=
+     *  S3*((A(IA+I)-A(ID+I))+A11(IJK))+C3*((B(IA+I)+B(ID+I))-B11(IJK))
+      C(JB+J)=C1*(A20(IJK)-B21(IJK))-S1*(B20(IJK)-A21(IJK))
+      D(JB+J)=S1*(A20(IJK)-B21(IJK))+C1*(B20(IJK)-A21(IJK))
+      C(JF+J)=C5*(A20(IJK)+B21(IJK))-S5*(B20(IJK)+A21(IJK))
+      D(JF+J)=S5*(A20(IJK)+B21(IJK))+C5*(B20(IJK)+A21(IJK))
+C
+      I=I+INC3
+      J=J+INC4
+  630 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  640 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      IF=IF-IINK
+      JBASE=JBASE+JUMP
+  650 CONTINUE
+      IF (IC.GT.ID) GO TO 900
+  660 CONTINUE
+      IBASE=0
+      DO 680 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 670 IJK=1,ILOT
+      C(JA+J)=A(IB+I)+(A(IA+I)+A(IC+I))
+      C(JD+J)=B(IB+I)-(B(IA+I)+B(IC+I))
+      C(JB+J)=(SIN60*(A(IA+I)-A(IC+I)))-(0.5*(B(IA+I)+B(IC+I))+B(IB+
+     *  I))
+      C(JF+J)=-(SIN60*(A(IA+I)-A(IC+I)))-(0.5*(B(IA+I)+B(IC+I))+B(IB+
+     *  I))
+      C(JC+J)=SIN60*(B(IC+I)-B(IA+I))+(0.5*(A(IA+I)+A(IC+I))-A(IB+I))
+      C(JE+J)=SIN60*(B(IC+I)-B(IA+I))-(0.5*(A(IA+I)+A(IC+I))-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  670 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  680 CONTINUE
+      GO TO 900
+C
+  690 CONTINUE
+      SSIN60=2.0*SIN60
+      DO 694 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 692 IJK=1,ILOT
+      C(JA+J)=(2.0*(A(IA+I)+A(ID+I)))+(2.0*(A(IB+I)+A(IC+I)))
+      C(JD+J)=(2.0*(A(IA+I)-A(ID+I)))-(2.0*(A(IB+I)-A(IC+I)))
+      C(JB+J)=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))
+     *    -(SSIN60*(B(IB+I)+B(IC+I)))
+      C(JF+J)=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))
+     *    +(SSIN60*(B(IB+I)+B(IC+I)))
+      C(JC+J)=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))
+     *    -(SSIN60*(B(IB+I)-B(IC+I)))
+      C(JE+J)=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))
+     *    +(SSIN60*(B(IB+I)-B(IC+I)))
+      I=I+INC3
+      J=J+INC4
+  692 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  694 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 8
+C     -------------------
+  800 CONTINUE
+      IBAD=3
+      IF (ILA.NE.M) GO TO 910
+      IA=1
+      IB=IA+ILA*INC1
+      IC=IB+2*ILA*INC1
+      ID=IC+2*ILA*INC1
+      IE=ID+2*ILA*INC1
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+      JE=JD+JINK
+      JF=JE+JINK
+      JG=JF+JINK
+      JH=JG+JINK
+      SSIN45=SQRT(2.0)
+C
+      DO 820 IL=1,ILA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+*VOCL LOOP,NOVREC
+      DO 810 IJK=1,ILOT
+      C(JA+J)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))+(A(IB+I)+A(ID+I)))
+      C(JE+J)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))-(A(IB+I)+A(ID+I)))
+      C(JC+J)=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))-(B(IB+I)-B(ID+I)))
+      C(JG+J)=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))+(B(IB+I)-B(ID+I)))
+      C(JB+J)=2.0*((A(IA+I)-A(IE+I))-B(IC+I))
+     *    +SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))
+      C(JF+J)=2.0*((A(IA+I)-A(IE+I))-B(IC+I))
+     *    -SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))
+      C(JD+J)=2.0*((A(IA+I)-A(IE+I))+B(IC+I))
+     *    -SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))
+      C(JH+J)=2.0*((A(IA+I)-A(IE+I))+B(IC+I))
+     *    +SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))
+      I=I+INC3
+      J=J+INC4
+  810 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  820 CONTINUE
+C
+C     RETURN
+C     ------
+  900 CONTINUE
+      IBAD=0
+  910 CONTINUE
+      IERR=IBAD
+      RETURN
+      END
diff --git a/fft/set99.f b/fft/set99.f
new file mode 100755
index 0000000..4475ae0
--- /dev/null
+++ b/fft/set99.f
@@ -0,0 +1,65 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE SET99(TRIGS,IFAX,N)
+      DIMENSION TRIGS(N),IFAX(*),JFAX(10),LFAX(7)
+C
+C     SUBROUTINE 'SET99' - COMPUTES FACTORS OF N & TRIGONOMETRIC
+C     FUNCTIONS REQUIRED BY FFT99 & FFT991
+C
+      DATA LFAX/6,8,5,4,3,2,1/
+      IXXX=1
+C
+      DEL=4.0*ASIN(1.0)/FLOAT(N)
+      NIL=0
+      NHL=(N/2)-1
+      DO 10 K=NIL,NHL
+      ANGLE=FLOAT(K)*DEL
+      TRIGS(2*K+1)=COS(ANGLE)
+      TRIGS(2*K+2)=SIN(ANGLE)
+   10 CONTINUE
+C
+C     FIND FACTORS OF N (8,6,5,4,3,2; ONLY ONE 8 ALLOWED)
+C     LOOK FOR SIXES FIRST, STORE FACTORS IN DESCENDING ORDER
+      NU=N
+      IFAC=6
+      K=0
+      L=1
+   20 CONTINUE
+      IF (MOD(NU,IFAC).NE.0) GO TO 30
+      K=K+1
+      JFAX(K)=IFAC
+      IF (IFAC.NE.8) GO TO 25
+      IF (K.EQ.1) GO TO 25
+      JFAX(1)=8
+      JFAX(K)=6
+   25 CONTINUE
+      NU=NU/IFAC
+      IF (NU.EQ.1) GO TO 50
+      IF (IFAC.NE.8) GO TO 20
+   30 CONTINUE
+      L=L+1
+      IFAC=LFAX(L)
+      IF (IFAC.GT.1) GO TO 20
+C
+      WRITE(6,40) N
+   40 FORMAT('1N =',I4,' - CONTAINS ILLEGAL FACTORS')
+      RETURN
+C
+C     NOW REVERSE ORDER OF FACTORS
+   50 CONTINUE
+      NFAX=K
+      IFAX(1)=NFAX
+      DO 60 I=1,NFAX
+      IFAX(NFAX+2-I)=JFAX(I)
+   60 CONTINUE
+      IFAX(10)=N
+      RETURN
+      END
diff --git a/fft/setgpfa.f b/fft/setgpfa.f
new file mode 100755
index 0000000..acf9dcf
--- /dev/null
+++ b/fft/setgpfa.f
@@ -0,0 +1,72 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE SETGPFA(TRIGS,N)
+*
+      DIMENSION TRIGS(*)
+      DIMENSION NJ(3)
+*
+*     DECOMPOSE N INTO FACTORS 2,3,5
+*     ------------------------------
+      NN = N
+      IFAC = 2
+*
+      DO 30 LL = 1 , 3
+      KK = 0
+   10 CONTINUE
+      IF (MOD(NN,IFAC).NE.0) GO TO 20
+      KK = KK + 1
+      NN = NN / IFAC
+      GO TO 10
+   20 CONTINUE
+      NJ(LL) = KK
+      IFAC = IFAC + LL
+   30 CONTINUE
+*
+      IF (NN.NE.1) THEN
+         WRITE(6,40) N
+   40    FORMAT(' *** WARNING!!!',I10,' IS NOT A LEGAL VALUE OF N ***')
+         RETURN
+      ENDIF
+*
+      IP = NJ(1)
+      IQ = NJ(2)
+      IR = NJ(3)
+*
+*     COMPUTE LIST OF ROTATED TWIDDLE FACTORS
+*     ---------------------------------------
+      NJ(1) = 2**IP
+      NJ(2) = 3**IQ
+      NJ(3) = 5**IR
+*
+      TWOPI = 4.0 * ASIN(1.0)
+      I = 1
+*
+      DO 60 LL = 1 , 3
+      NI = NJ(LL)
+      IF (NI.EQ.1) GO TO 60
+*
+      DEL = TWOPI / FLOAT(NI)
+      IROT = N / NI
+      KINK = MOD(IROT,NI)
+      KK = 0
+*
+      DO 50 K = 1 , NI
+      ANGLE = FLOAT(KK) * DEL
+      TRIGS(I) = COS(ANGLE)
+      TRIGS(I+1) = SIN(ANGLE)
+      I = I + 2
+      KK = KK + KINK
+      IF (KK.GT.NI) KK = KK - NI
+   50 CONTINUE
+   60 CONTINUE
+*
+      RETURN
+      END
diff --git a/fft/sources b/fft/sources
new file mode 100755
index 0000000..e634f85
--- /dev/null
+++ b/fft/sources
@@ -0,0 +1,20 @@
+#
+#   Sources for fft
+#
+
+SOURCES.f =   \
+   fax.f      \
+   fft99.f    \
+   fft991.f   \
+   fftrig.f   \
+   gpfa.f     \
+   gpfa2.f    \
+   gpfa3.f    \
+   gpfa5.f    \
+   rpassf.f   \
+   rpassm.f   \
+   qpassf.f   \
+   qpassm.f   \
+   set99.f    \
+   syminv.f   \
+   setgpfa.f
diff --git a/fft/syminv.f b/fft/syminv.f
new file mode 100755
index 0000000..bfc6a30
--- /dev/null
+++ b/fft/syminv.f
@@ -0,0 +1,111 @@
+c Copyright 1981-2012 ECMWF.
+c
+c This software is licensed under the terms of the Apache Licence 
+c Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+c
+c In applying this licence, ECMWF does not waive the privileges and immunities 
+c granted to it by virtue of its status as an intergovernmental organisation 
+c nor does it submit to any jurisdiction.
+c
+
+      SUBROUTINE SYMINV(A,NDIM,N,COND,V,DEPS)
+      DIMENSION A(NDIM,NDIM),V(NDIM)
+C     INVERT IN PLACE THE LOWER TRIANGLE OF A (I.E. A(I,J) I.GE.J)
+C     A IS A SYMMETRIC POSITIVE DEFINITE MATRIX
+C     THE UPPER TRIANGLE OF A (IE. A(I,J) I.LT.J) IS NOT USED OR ALTERED
+C
+C     THIS VERSION IS OPTIMIZED FOR THE CDC FTN COMPILER.
+C     IT REQUIRES THE FUNCTION 'NUMARG' FROM  'ECLIB'
+C
+      IF(N.LT.1)RETURN
+        EPS=0.
+c       IF(NUMARG().EQ.6) EPS=DEPS
+      NDIA=NDIM+1
+      IMX=ISAMAX(N,A(1,1),NDIA)
+      ZMX=A(IMX,IMX)*FLOAT(N*N)
+C     SECTION 1 & 2 COMBINED IN THIS VERSION
+C**** 1. ROOT FREE CHOLESKY DECOMPOSITION  A =L D L(TRANSPOSE)
+      J=1
+      IF(A(1,1).LE.EPS)GOTO91
+      V(1)=1./A(1,1)
+      IF(N.EQ.1)GOTO20
+      X=A(2,1)*V(1)
+      A(2,2)=A(2,2)-X*A(2,1)
+      A(2,1)=X
+      IF(A(2,2).LE.EPS)GOTO91
+      V(2)=1./A(2,2)
+      IF(N.EQ.2)GOTO20
+      DO 14 I=3,N
+      DO 12 J=3,I
+      S=A(I,J-1)
+      DO 11 K=3,J
+ 11   S=S-A(I,K-2)*A(J-1,K-2)
+      A(I,J-1)=S
+ 12   CONTINUE
+      S=A(I,I)
+      DO 13 J=2,I
+      X=A(I,J-1)*V(J-1)
+      S=S-X*A(I,J-1)
+ 13   A(I,J-1)=X
+      A(I,I)=S
+C         CHECK FOR POSITIVE-DEFINITENESS AND INVERT DIAGONAL MATRIX D.
+      IF(A(I,I).LE.EPS)GOTO91
+      V(I)=1./A(I,I)
+ 14   CONTINUE
+C
+C**** 2.  COPY INVERSE OF D WHICH HAS ALREADY BEEN CALCULATED.
+ 20   DO 21 J=1,N
+ 21   A(J,J)=V(J)
+      IF(N.EQ.1) GO TO 50
+C
+C**** 3.  INVERSION OF L
+ 30   A(2,1)=-A(2,1)
+      NM1=N-1
+      IF(N.EQ.2)GOTO40
+      DO 33 I=2,NM1
+      DO 32 J=2,I
+      S=A(I+1,J-1)
+      DO 31 K=J,I
+ 31   S=S+A(I+1,K)*A(K,J-1)
+ 32   A(I+1,J-1)=-S
+ 33   A(I+1,I)=-A(I+1,I)
+C
+C**** 4.  INV A = INV L(TRANSPOSE) * INV D * INV L
+ 40   DO 44 J=2,N
+      S=A(J-1,J-1)
+      DO 41 I=J,N
+      X=A(I,I)*A(I,J-1)
+      S=S+A(I,J-1)*X
+ 41   A(I,J-1)=X
+      A(J-1,J-1)=S
+      IF(J.EQ.N) GO TO 50
+      DO 43 I=J,NM1
+      S=A(I,J-1)
+      DO 42 K=I,NM1
+ 42   S=S+A(K+1,I)*A(K+1,J-1)
+      A(I,J-1)=S
+ 43   CONTINUE
+ 44   CONTINUE
+C
+ 50   IMX=ISAMAX(N,A(1,1),NDIA)
+      COND=1./ABS(A(IMX,IMX)*ZMX)
+      RETURN
+C
+ 91   COND=-FLOAT(J)
+      RETURN
+      END
+      INTEGER FUNCTION ISAMAX(N,A,M)
+C
+C     FIND THE LARGEST ABSOLUTE ELEMENT OF A , SPACED M WORDS APART
+C
+      DIMENSION A(*)
+C
+      LARGE=1
+      IF(N.LE.1) GO TO 9
+      INDEX=1+M
+      DO 1 I=2,N
+      IF(ABS(A(INDEX)).GE.ABS(A(LARGE))) LARGE=I
+1     INDEX=INDEX+M
+9     ISAMAX=LARGE
+      RETURN
+      END
diff --git a/grib_api_merging/Makefile b/grib_api_merging/Makefile
new file mode 100755
index 0000000..b857d36
--- /dev/null
+++ b/grib_api_merging/Makefile
@@ -0,0 +1,32 @@
+#
+#
+LIBRARY      = ../lib$(LIB)$(R64).a
+
+GRIB_API_RELEASE = 1.9.8
+GRIB_API_PATH = /usr/local/lib/metaps/lib/grib_api/$(GRIB_API_RELEASE)
+GRIB_API_INC = -I$(GRIB_API_PATH)/include
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.o    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.o)
+#
+#
+.PRECIOUS: $(LIBRARY) 
+
+all: $(LIBRARY)
+
+$(OBJECTS.o): $(SOURCES.c)
+	$(CC) $(CFLAGS) $(GRIB_API_INC) -c $(SOURCES.c)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/grib_api_merging/Makefile.in b/grib_api_merging/Makefile.in
new file mode 100755
index 0000000..56b88de
--- /dev/null
+++ b/grib_api_merging/Makefile.in
@@ -0,0 +1,40 @@
+#
+#                                 Makefile for libemos/pbio
+GRIB_API_DIR = glue
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+LIB = depl
+
+LIBRARY      = ../lib$(LIB)$(R64).a
+
+#GRIB_API_PATH = /usr/local/lib/metaps/lib/grib_api/exp
+GRIB_API_PATH = $(GRIB_API_DIR)
+GRIB_API_INC = -I$(GRIB_API_PATH)/include
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+#
+TARGETS      = all clean
+#
+include sources
+#
+OBJECTS.o    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.o)
+#
+#
+.PRECIOUS: $(LIBRARY) 
+
+all: $(LIBRARY)
+
+$(OBJECTS.o): $(SOURCES.c)
+	$(CC) $(CFLAGS) $(GRIB_API_INC) -c $(SOURCES.c)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+clean:
+	\rm -f $(OBJECTS)
diff --git a/grib_api_merging/copy_spec_from_ksec.c b/grib_api_merging/copy_spec_from_ksec.c
new file mode 100755
index 0000000..ed38f80
--- /dev/null
+++ b/grib_api_merging/copy_spec_from_ksec.c
@@ -0,0 +1,249 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include "grib_api.h"
+#include "emos.h"
+#include <assert.h>
+
+#define ISECTION_2  5000
+#define ISECTION_4  512
+
+extern int mars_interpolation;
+
+#define SET_EXTRA_LONG(x,y)     do { assert(packing_spec->extra_settings_count<80); packing_spec->extra_settings[packing_spec->extra_settings_count].name = #x; packing_spec->extra_settings[packing_spec->extra_settings_count].type = GRIB_TYPE_LONG;   packing_spec->extra_settings[packing_spec->extra_settings_count].long_value = y; packing_spec->extra_settings_count++; } while(0)
+#define SET_EXTRA_DOUBLE(x,y)   do { assert(packing_spec->extra_settings_count<80); packing_spec->extra_settings[packing_spec->extra_settings_count].name = #x; packing_spec->extra_settings[packing_spec->extra_settings_count].type = GRIB_TYPE_DOUBLE; packing_spec->extra_settings[packing_spec->extra_settings_count].double_value = y; packing_spec->extra_settings_count++; } while(0)
+
+
+int copy_spec_from_ksec(grib_util_grid_spec* spec,grib_util_packing_spec* packing_spec) {
+	int err=0;
+
+	fortint isec1[ISECTION_1] = {0,};
+	fortint isec2[ISECTION_2] = {0,};
+	fortint isec3[ISECTION_3] = {0,};
+	fortint isec4[ISECTION_4] = {0,};
+
+	fortfloat zsec3[ISECTION_3] = {0,};
+
+	long    rg_def[ISECTION_2] = {0,};
+	char *intf2_debug = getenv("INTF2_DEBUG");
+
+	if((err = int2_gasetup( isec1, isec2, isec3, isec4,zsec3 )) != 0)
+	{
+		return err;
+	}
+
+	memset(spec,         0, sizeof(grib_util_grid_spec));
+	memset(packing_spec, 0, sizeof(grib_util_packing_spec));
+
+	switch (isec4[3]) {
+		case 1:
+			packing_spec->packing_type = GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX;
+			break;
+		case 2:
+			packing_spec->packing_type = GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE;
+			packing_spec->packing = GRIB_UTIL_PACKING_USE_PROVIDED;
+			break;
+		case 3:
+			packing_spec->packing_type = GRIB_UTIL_PACKING_TYPE_JPEG;
+			break;
+		case 4:
+			packing_spec->packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE;
+			break;
+		case 7:
+			packing_spec->packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER;
+			break;
+		default :
+			printf("invalid isec4[3] = %d\n",isec4[3]);
+			abort();
+	}
+	packing_spec->bitsPerValue     = isec4[1];
+
+	/* TODO: get that from emoslib */
+	if(intf2_debug){
+		printf("YYYYYYYYYY  packing: %d    -----  bitsPerValue: %d \n", isec4[3],isec4[1]);
+		printf("missing value XXXXXXXXXX %f\n", zsec3[1]);
+	}
+
+	spec->missingValue = zsec3[1];
+
+
+	if(intf2_debug){
+		printf("missing value XXXXXXXXXX %f \n", spec->missingValue);
+		printf("SIZES double=%d  fortfloat=%d\n", sizeof(double), sizeof(fortfloat));
+		printf("is BITMAP present %d\n", isec1[4]);
+	}
+
+	switch(isec2[0]) {
+
+		case 0:
+			spec->grid_type                         = GRIB_UTIL_GRID_SPEC_REGULAR_LL;
+			spec->Nj = isec2[2];
+			spec->Ni = isec2[1];
+			spec->iDirectionIncrementInDegrees = isec2[8]/1000.0;
+			spec->jDirectionIncrementInDegrees = isec2[9]/1000.0;
+
+			spec->latitudeOfFirstGridPointInDegrees      = isec2[3]/1000.0;
+			spec->longitudeOfFirstGridPointInDegrees     = isec2[4]/1000.0;
+			spec->latitudeOfLastGridPointInDegrees       = isec2[6]/1000.0;
+			spec->longitudeOfLastGridPointInDegrees      = isec2[7]/1000.0;
+
+			if (isec1[4]==192 || isec1[4]==64) 
+				spec->bitmapPresent=1;
+			else 
+				spec->bitmapPresent=0;
+
+			break;
+
+		case 10:
+			spec->grid_type                         = GRIB_UTIL_GRID_SPEC_ROTATED_LL;
+			spec->Nj = isec2[2];
+			spec->Ni = isec2[1];
+			spec->iDirectionIncrementInDegrees = isec2[8]/1000.0;
+			spec->jDirectionIncrementInDegrees = isec2[9]/1000.0;
+
+			spec->latitudeOfFirstGridPointInDegrees      = isec2[3]/1000.0;
+			spec->longitudeOfFirstGridPointInDegrees     = isec2[4]/1000.0;
+			spec->latitudeOfLastGridPointInDegrees       = isec2[6]/1000.0;
+			spec->longitudeOfLastGridPointInDegrees      = isec2[7]/1000.0;
+
+			spec->uvRelativeToGrid= isec2[18]==8 ? 1 : 0;
+			spec->latitudeOfSouthernPoleInDegrees    = isec2[12]/1000.0;
+			spec->longitudeOfSouthernPoleInDegrees   = isec2[13]/1000.0;
+
+			if (isec1[4]==192 || isec1[4]==64) 
+				spec->bitmapPresent=1;
+			else 
+				spec->bitmapPresent=0;
+
+			break;
+
+		case 4:
+			spec->grid_type                                       = GRIB_UTIL_GRID_SPEC_REGULAR_GG;
+			spec->Nj 					 		              	 = isec2[2];
+			spec->Ni								              	 = isec2[1];
+			spec->N												 = isec2[9];
+			spec->iDirectionIncrementInDegrees               	= isec2[8]/1000.0;
+			if(isec2[16]) {
+				spec->grid_type = GRIB_UTIL_GRID_SPEC_REDUCED_GG;
+			}
+
+			spec->latitudeOfFirstGridPointInDegrees      = isec2[3]/1000.0;
+			spec->longitudeOfFirstGridPointInDegrees     = isec2[4]/1000.0;
+			spec->latitudeOfLastGridPointInDegrees       = isec2[6]/1000.0;
+			spec->longitudeOfLastGridPointInDegrees      = isec2[7]/1000.0;
+
+			if (isec1[4]==192 || isec1[4]==64) 
+				spec->bitmapPresent=1;
+			else 
+				spec->bitmapPresent=0;
+
+            
+			/* grib_api to set global area in full precision for gaussian grid */
+			packing_spec->extra_settings_count=1;
+			packing_spec->extra_settings[0].type = GRIB_TYPE_LONG;
+			packing_spec->extra_settings[0].name = "global";
+			packing_spec->extra_settings[0].long_value = int2_global();
+
+			break;
+
+		case 14:
+			spec->grid_type                                  = GRIB_UTIL_GRID_SPEC_ROTATED_GG;
+			spec->Nj							                = isec2[2];
+			spec->Ni							                = isec2[1];
+			spec->N 											= isec2[9];
+			spec->iDirectionIncrementInDegrees               = isec2[8]/1000.0;
+			if(isec2[16]) {
+				/* There is no rotated-reduced, is there ? */
+				abort();
+			}
+
+			spec->latitudeOfFirstGridPointInDegrees      = isec2[3]/1000.0;
+			spec->longitudeOfFirstGridPointInDegrees     = isec2[4]/1000.0;
+			spec->latitudeOfLastGridPointInDegrees       = isec2[6]/1000.0;
+			spec->longitudeOfLastGridPointInDegrees      = isec2[7]/1000.0;
+
+			spec->latitudeOfSouthernPoleInDegrees    = isec2[12]/1000.0;
+			spec->longitudeOfSouthernPoleInDegrees   = isec2[13]/1000.0;
+
+			if (isec1[4]==192 || isec1[4]==64) 
+				spec->bitmapPresent=1;
+			else 
+				spec->bitmapPresent=0;
+
+			break;
+
+
+		case 50:
+			spec->grid_type = GRIB_UTIL_GRID_SPEC_SH;
+			spec->truncation = isec2[1]; /* truncationJ */
+			packing_spec->truncateLaplacian=1;
+
+			break;
+
+		case 26:
+			spec->grid_type = GRIB_UTIL_GRID_SPEC_REDUCED_LL;
+			break;
+
+		default:
+			fprintf(stdout,"INTF2: ERROR - unknown repres: %d\n", isec2[0]);
+			return -2;
+			break;
+	}
+
+	/* ocean special case */
+    if (isec1[36]==4) {
+		/* Bitmap always present for ocean */
+
+        if (isec1[59] == 3 && isec1[60] == 4)
+            SET_EXTRA_LONG(dataRepresentationType , 0);
+        else
+            SET_EXTRA_LONG(dataRepresentationType , 192);
+
+
+        SET_EXTRA_LONG(coordinate4OfFirstGridPoint,isec1[61]);
+        SET_EXTRA_LONG(coordinate3OfFirstGridPoint,isec1[62]);
+        SET_EXTRA_LONG(coordinate4OfLastGridPoint,isec1[63]);
+        SET_EXTRA_LONG(coordinate3OfLastGridPoint,isec1[64]);
+        SET_EXTRA_LONG(iIncrement,isec1[65]);
+        SET_EXTRA_LONG(jIncrement,isec1[66]);
+        SET_EXTRA_LONG(flagForNormalOrStaggeredGrid,isec1[68]);
+        SET_EXTRA_LONG(flagForIrregularGridCoordinateList,0);
+        SET_EXTRA_LONG(numberInTheGridCoordinateList,0);
+        SET_EXTRA_LONG(flagShowingPostAuxiliaryArrayInUse,0);
+        SET_EXTRA_LONG(flagShowingPostAuxiliaryArrayInUse,1);
+        SET_EXTRA_LONG(sizeOfPostAuxiliaryArrayPlusOne,0);
+
+    }
+
+#define D(a) if(intf2_debug) printf("YYYYYYYYYYYY %s -> %g\n", #a, (double)spec->a);
+	
+
+	D(grid_type);
+	D(Ni);
+	D(Nj);
+	D(iDirectionIncrementInDegrees);
+	D(jDirectionIncrementInDegrees);
+	D(longitudeOfFirstGridPointInDegrees);
+	D(longitudeOfLastGridPointInDegrees);
+	D(latitudeOfFirstGridPointInDegrees);
+	D(latitudeOfLastGridPointInDegrees);
+	D(latitudeOfSouthernPoleInDegrees);
+	D(longitudeOfSouthernPoleInDegrees);
+	D(N);
+	D(bitmapPresent);
+	D(missingValue);
+	D(pl_size);
+	D(truncation);
+
+
+	return 0;
+}
diff --git a/grib_api_merging/describe_input_field.c b/grib_api_merging/describe_input_field.c
new file mode 100755
index 0000000..97bd33d
--- /dev/null
+++ b/grib_api_merging/describe_input_field.c
@@ -0,0 +1,726 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include "grib_api.h"
+#include "emos.h"
+
+static long levTypeInt(char* typeOfLevel) {
+  if (!typeOfLevel || strlen(typeOfLevel) == 0)           return 255;
+  if (!strcmp(typeOfLevel,"missing"))                     return 255;
+  if (!strcmp(typeOfLevel,"surface"))                     return 1;
+  if (!strcmp(typeOfLevel,"cloudBase"))                   return 2;
+  if (!strcmp(typeOfLevel,"cloudTop"))                    return 3;
+  if (!strcmp(typeOfLevel,"isothermZero"))                return 4;
+  if (!strcmp(typeOfLevel,"adiabaticCondensation"))       return 5;
+  if (!strcmp(typeOfLevel,"maxWind"))                     return 6;
+  if (!strcmp(typeOfLevel,"tropopause"))                  return 7;
+  if (!strcmp(typeOfLevel,"nominalTop"))                  return 8;
+  if (!strcmp(typeOfLevel,"seaBottom"))                   return 9;
+
+  if (!strcmp(typeOfLevel,"isobaricInhPa"))               return 100;
+  if (!strcmp(typeOfLevel,"isobaricLayer"))               return 101;
+  if (!strcmp(typeOfLevel,"meanSea"))                     return 102;
+  if (!strcmp(typeOfLevel,"heightAboveSea"))               return 103;
+  if (!strcmp(typeOfLevel,"heightAboveSeaLayer"))          return 104;
+  if (!strcmp(typeOfLevel,"heightAboveGround"))            return 105;
+  if (!strcmp(typeOfLevel,"heightAboveGroundLayer"))       return 106;
+  if (!strcmp(typeOfLevel,"sigma"))                       return 107;
+  if (!strcmp(typeOfLevel,"sigmaLayer"))                  return 108;
+  if (!strcmp(typeOfLevel,"hybrid"))                      return 109;
+  if (!strcmp(typeOfLevel,"hybridLayer"))                 return 110;
+
+  if (!strcmp(typeOfLevel,"depthBelowLand"))              return 111;
+  if (!strcmp(typeOfLevel,"depthBelowLandLayer"))         return 112;
+  if (!strcmp(typeOfLevel,"theta"))                       return 113;
+  if (!strcmp(typeOfLevel,"thetaLayer"))                  return 114;
+  if (!strcmp(typeOfLevel,"pressureFromGround"))          return 115;
+  if (!strcmp(typeOfLevel,"pressureFromGroundLayer"))     return 116;
+  if (!strcmp(typeOfLevel,"potentialVorticity"))          return 117;
+  if (!strcmp(typeOfLevel,"isobaricLayerHighPrecision"))  return 121;
+
+  if (!strcmp(typeOfLevel,"heightAboveGroundHighPrecision"))  return 125;
+
+  if (!strcmp(typeOfLevel,"sigmaLayerHighPrecision"))     return 128;
+  if (!strcmp(typeOfLevel,"isobaricLayerMixedPrecision")) return 141;
+  if (!strcmp(typeOfLevel,"depthBelowSea"))               return 160;
+
+  if (!strcmp(typeOfLevel,"entireAtmosphere"))            return 200;
+  if (!strcmp(typeOfLevel,"entireOcean"))                 return 201;
+
+  if (!strcmp(typeOfLevel,"isobaricInPa"))                return 210;
+  if (!strcmp(typeOfLevel,"oceanWave"))                   return 211;
+  if (!strcmp(typeOfLevel,"oceanMixedLayer"))             return 212;
+
+
+	fprintf(stderr,"levTypeInt: Level type NOT recognized %s\n",typeOfLevel);
+  return 255;
+}
+
+long describe_input_field(grib_handle* handle, long outputRepresentation){
+
+	char *text = "";
+	char *charv = "";
+	size_t size;
+
+	long   rll_def[3000];
+	long   rg_def[3000];
+	fortint   intv[3000];
+	fortfloat realv[4];
+
+	char grid_type[80];
+	int err = 0;
+	int i = 0;
+
+	const void* temp;
+	double missingValue;
+	long   level = 0, levelType, parameter, accuracy, scanningMode, table,date;
+	long bitmapPresent = 0;
+	char *intf2_debug = getenv("INTF2_DEBUG");
+	char *intf2_write = getenv("INTF2_WRITE_TO_FILE");
+	long localNumber = 0;
+	char typeOfLevel[50]={0,};
+	size_t typeOfLevelLen=50;
+	long niwe = 0, nins = 0;
+	long matrixOfValues = 0;
+	long centre = 0;
+
+
+
+	size = sizeof(grid_type);
+	if(err = grib_get_string(handle,"typeOfGrid",grid_type,&size))
+	{
+		fprintf(stderr,"Cannot get gridType %s\n",grib_get_error_message(err));
+	}
+
+	if(intf2_debug)
+	{
+		printf("DESCRIBE_INPUT_FIELD:**************************** \n"); 
+		printf("DESCRIBE_INPUT_FIELD: Input Grid Type - %s \n",grid_type);
+	}
+
+
+	/************************************************************/
+	/* Describe input unpacked field for INTF */
+
+	/* General features */
+
+	if(err = int2_intin("form",intv,realv,"unpacked"))
+	{
+		fprintf(stderr,"Form setup INTIN failed %d\n",err);
+	}
+
+	/* Get Local Definition */
+	err = grib_get_long(handle,"localDefinitionNumber",&localNumber);
+	if (err == GRIB_SUCCESS)
+	{
+    		intv[0] = localNumber;
+			if(err = int2_intin("local",intv,realv,text))
+			{
+				fprintf(stderr,"localDefinitionNumber setup INTIN failed %d\n",err);
+			}
+	}
+
+	if (localNumber == 4)
+	{
+		    /* OCEAN */
+			long gridCoordinate[1000];
+			size_t o_length = 0;
+			long oo_length = 0, vertCooDef = 0;
+			long coordinate3Flag,coordinate4Flag,coordinate4OfFirstGridPoint,coordinate3OfFirstGridPoint;
+			long coordinate4OfLastGridPoint,coordinate3OfLastGridPoint,iIncrement,jIncrement,flagForIrregularGridCoordinateList,flagForNormalOrStaggeredGrid;
+			if(intf2_debug)
+			{
+				printf("DESCRIBE_INPUT_FIELD:******* OCEAN FIELD ********* \n"); 
+			}
+		 /* starts with KSEC1(60) */
+			if(err = grib_get_long(handle,"coordinate3Flag",&coordinate3Flag))
+				fprintf(stderr,"Cannot get coordinate3Flag %s\n",grib_get_error_message(err));
+            intv[0] = coordinate3Flag;
+			if(err = grib_get_long(handle,"coordinate4Flag",&coordinate4Flag))
+				fprintf(stderr,"Cannot get coordinate4Flag %s\n",grib_get_error_message(err));
+            intv[1] = coordinate4Flag;
+			if(err = grib_get_long(handle,"coordinate4OfFirstGridPoint",&coordinate4OfFirstGridPoint))
+				fprintf(stderr,"Cannot get coordinate4OfFirstGridPoint %s\n",grib_get_error_message(err));
+            intv[2] = coordinate4OfFirstGridPoint;
+			if(err = grib_get_long(handle,"coordinate3OfFirstGridPoint",&coordinate3OfFirstGridPoint))
+				fprintf(stderr,"Cannot get coordinate3OfFirstGridPoint %s\n",grib_get_error_message(err));
+            intv[3] = coordinate3OfFirstGridPoint;
+			if(err = grib_get_long(handle,"coordinate4OfLastGridPoint",&coordinate4OfLastGridPoint))
+				fprintf(stderr,"Cannot get coordinate4OfLastGridPoint %s\n",grib_get_error_message(err));
+            intv[4] = coordinate4OfLastGridPoint;
+			if(err = grib_get_long(handle,"coordinate3OfLastGridPoint",&coordinate3OfLastGridPoint))
+				fprintf(stderr,"Cannot get coordinate3OfLastGridPoint %s\n",grib_get_error_message(err));
+            intv[5] = coordinate3OfLastGridPoint;
+			if(err = grib_get_long(handle,"iIncrement",&iIncrement))
+				fprintf(stderr,"Cannot get iIncrement %s\n",grib_get_error_message(err));
+			if(intf2_debug)
+			{
+				printf("DESCRIBE_INPUT_FIELD:******* north = %d, east = %d , south = %d, west = %d ********* \n", coordinate4OfFirstGridPoint,coordinate3OfFirstGridPoint,coordinate4OfLastGridPoint,coordinate3OfLastGridPoint); 
+			}
+            intv[6] = iIncrement;
+			if(err = grib_get_long(handle,"jIncrement",&jIncrement))
+				fprintf(stderr,"Cannot get jIncrement %s\n",grib_get_error_message(err));
+            intv[7] = jIncrement;
+			if(err = grib_get_long(handle,"flagForIrregularGridCoordinateList",&flagForIrregularGridCoordinateList))
+				fprintf(stderr,"Cannot get flagForIrregularGridCoordinateList %s\n",grib_get_error_message(err));
+            intv[8] = flagForIrregularGridCoordinateList;
+			if(err = grib_get_long(handle,"flagForNormalOrStaggeredGrid",&flagForNormalOrStaggeredGrid))
+				fprintf(stderr,"Cannot get flagForNormalOrStaggeredGrid %s\n",grib_get_error_message(err));
+            intv[9] = flagForNormalOrStaggeredGrid;
+
+			if(err = grib_get_long(handle,"numberInTheGridCoordinateList",&oo_length))
+				fprintf(stderr,"Cannot get numberInTheGridCoordinateList %s\n",grib_get_error_message(err));
+            intv[10] = oo_length;
+			if(err = grib_get_long(handle,"verticalCoordinateDefinition",&vertCooDef))
+				fprintf(stderr,"Cannot get verticalCoordinateDefinition %s\n",grib_get_error_message(err));
+            intv[11] = vertCooDef;
+
+			/* INTIN for ocean */
+            if(err = int2_intin("ocean",intv,realv,text))
+            {
+                  fprintf(stderr,"Ocean setup INTIN failed %d\n",err);
+            }
+
+		/* if (coordinate3Flag != 3 || coordinate4Flag != 4) { */
+		/* if (coordinate3Flag == 3 && coordinate4Flag == 4) { */
+		/* Tim and Sinisa  */
+			if(err = grib_get_size(handle,"gridCoordinate",&o_length))
+			{
+			    fprintf(stderr,"Cannot get size of pl %s\n",grib_get_error_message(err));
+			}
+
+        /* Just for Horizontal (lat/long) field interpolation */
+			if(err = grib_get_long_array(handle,"gridCoordinate",gridCoordinate,&o_length))
+				fprintf(stderr,"Cannot get gridCoordinate %s\n",grib_get_error_message(err));
+
+			if(intf2_debug)
+				printf("DESCRIBE_INPUT_FIELD:  o_length %d \n", o_length);
+
+			for( i = 0; i< o_length ; i++)
+			{
+				intv[i] = gridCoordinate[i];
+				/* printf("DESCRIBE_INPUT_FIELD: ocean horizontal  %d :  %d  \n", i,intv[i]); */
+			}
+			/* INTIN for ocean gridCoordinate */
+            if(err = int2_intin("coord_ocean",intv,realv,text))
+            {
+                  fprintf(stderr,"Ocean setup INTIN failed %d\n",err);
+            }
+		/* } */
+    		err = grib_get_double(handle,"missingValue",&missingValue);
+
+			if (err != GRIB_SUCCESS && err != GRIB_NOT_FOUND) {
+				fprintf(stderr,"Missing value for OCEAN %s\n",grib_get_error_message(err));
+			}
+			if(intf2_debug)
+             	printf("DESCRIBE_INPUT_FIELD: OCEAN Field Missing Value %f \n",missingValue);
+            if(err == GRIB_SUCCESS)
+             {
+               realv[0] = missingValue;
+               text = "yes";
+               if(err = int2_intin("missingvalue",intv,realv,text))
+               {
+                     fprintf(stderr,"Missing Value setup INTIN failed %f\n",err);
+               }
+             }
+	}
+
+
+	/* get Date */
+	if(err = grib_get_long(handle,"dataDate",&date))
+	{
+		fprintf(stderr,"Cannot get date %s\n",grib_get_error_message(err));
+	}
+	intv[0] = date;
+	if(err = int2_intin("date",intv,realv,text))
+	{
+		fprintf(stderr,"Date setup INTIN failed %d\n",err);
+	}
+
+	/* get Level Type */
+	if((err = grib_get_string(handle,"typeOfLevel",typeOfLevel,&typeOfLevelLen))!= GRIB_SUCCESS)
+	{
+		fprintf(stderr,"Cannot get Level Type %s\n",grib_get_error_message(err));
+		return err;
+	}
+
+	levelType=levTypeInt(typeOfLevel);
+	intv[0] = levelType;
+	if(err = int2_intin("levtype",intv,realv,text))
+	{
+		fprintf(stderr,"Level Type setup INTIN failed %d\n",err);
+	}
+	/* printf("Level Type setup INTIN  %d\n",levelType); */
+		/* get Level */
+	if(levelType != 255){
+		if((err = grib_get_long(handle,"level",&level))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get Level %s\n",grib_get_error_message(err));
+			return err;
+		}
+
+		intv[0] = level;
+		if(err = int2_intin("level",intv,realv,text))
+		{
+			fprintf(stderr,"Level setup INTIN failed %d\n",err);
+		}
+	}
+	/* } */
+
+	/* LSM */
+	if( levelType == 100 || levelType == 108 || levelType == 109 || levelType == 255){
+		text = "no";
+	}
+    else
+		text = "yes";
+	if(err = int2_intin("lsmset",intv,realv,text))
+	{
+		fprintf(stderr,"LSM setup INTIN failed %d\n",err);
+	}
+
+	/* get Parameter Number */
+	/* if(err = grib_get_long(handle,"param",&parameter)) */
+	 if(err = grib_get_long(handle,"paramId",&parameter))
+	{
+		if(getenv("INTF2_IGNORE_PARAM") != 0)
+		{
+			parameter = 1;
+			table = 1;
+		}
+		else
+			fprintf(stderr,"Cannot Parameter %s\n",grib_get_error_message(err));
+	}
+	if(intf2_debug)
+	{
+		printf("DESCRIBE_INPUT_FIELD: Parameter - %d \n",parameter);
+	}
+
+	if(parameter > 1000)
+	{
+		table     = parameter / 1000;
+		parameter = parameter % 1000;
+	}
+	else
+		table = 128;
+
+	intv[0] = table;
+	if(err = int2_intin("table",intv,realv,text))
+	{
+		fprintf(stderr,"Table Number setup INTIN failed %d\n",err);
+	}
+
+	intv[0] = parameter;
+	if(err = int2_intin("parameter",intv,realv,text))
+	{
+		fprintf(stderr,"Parameter Number setup INTIN failed %d\n",err);
+	}
+
+    /* If bitmap Present  */
+    if((err = grib_get_long(handle,"bitmapPresent",&bitmapPresent))!= GRIB_SUCCESS)
+     {
+        fprintf(stderr,"Cannot get bitmapPresent  %s\n",grib_get_error_message(err));
+		return err;
+     }
+    /*  There are exeptions for a few centres  */
+    if(err = grib_get_long(handle,"centre",&centre))
+     {
+           fprintf(stderr,"Cannot get centre  %s\n",grib_get_error_message(err));
+     }
+	 if(levelType == 100 && parameter == 129)
+	 		bitmapPresent = 0;
+
+		/* if(table == 128 && (parameter == 31 || parameter == 130)){ */
+/* Live emoslib to use its own values
+Can Not set allways external missing value in case bitmap is Present because of some inconsistensy in LIBEMOS
+*/
+	if(bitmapPresent) {
+		   /* Try to play in a same style as Libemos
+	        missingValue = -2147483647.0;
+   			err = grib_set_double(handle,"missingValue",missingValue);
+			*/
+
+   			err = grib_get_double(handle,"missingValue",&missingValue);
+
+			if (err != GRIB_SUCCESS && err != GRIB_NOT_FOUND) {
+				fprintf(stderr,"Missing value %s\n",grib_get_error_message(err));
+			}
+			if(intf2_debug)
+       	    	printf("DESCRIBE_INPUT_FIELD: BITMAP PRESENT Missing Value %f \n",missingValue);
+   			if(err == GRIB_SUCCESS) {
+   				realv[0] = missingValue;
+   				text = "yes";
+   				if(err = int2_intin("missingval",intv,realv,text)) {
+    	    		fprintf(stderr,"Missing Value setup INTIN failed %f\n",err);
+     			}
+     		}
+   }
+
+
+	/* Default Accuracy */
+	if((err = grib_get_long(handle,"bitsPerValue",&accuracy))!= GRIB_SUCCESS)
+	{
+		fprintf(stderr,"Cannot get accuracy %s\n",grib_get_error_message(err));
+		return err;
+	}
+	intv[0] = accuracy;
+	if(err = int2_intin("accuracy",intv,realv,text))
+	{
+		fprintf(stderr,"Accuracy setup INTIN failed %d\n",err);
+	}
+		if(intf2_debug)
+	    {
+		    printf("DESCRIBE_INPUT_FIELD: Input Accuracy  %d  \n",accuracy);
+	    }
+
+
+	/* Particular Input fields */
+
+	/* Spherical harmonics */
+	if(strcmp(grid_type,"sh") == 0)
+	{
+		long truncation;
+		/* get Truncation */
+		if((err = grib_get_long(handle,"pentagonalResolutionParameterJ",&truncation))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get Truncation %s\n",grib_get_error_message(err));
+			return err;
+		}
+		intv[0] = truncation;
+		if(err = int2_intin("truncation",intv,realv,text))
+		{
+			fprintf(stderr,"Truncation  setup INTIN failed %d\n",err);
+		}
+		if(outputRepresentation)
+		{
+			if(err = int2_intout("truncation",intv,realv,text))
+			{
+				fprintf(stderr,"Truncation  setup INTOUT failed %d\n",err);
+			}
+		}
+	}
+
+
+	/* Gaussian grid */
+	if(strcmp(grid_type,"regular_gg") == 0  || strcmp(grid_type,"reduced_gg") == 0)
+	{
+		long  gaussianType, gaussianNumber ;
+
+
+		/* Gaussian Grid Number */
+		if((err = grib_get_long(handle,"numberOfParallelsBetweenAPoleAndTheEquator",&gaussianNumber))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get gaussian Number %s\n",grib_get_error_message(err));
+			return err;
+		}
+		intv[0] = gaussianNumber;
+
+		/* Regular or Reduced */
+		if(strcmp(grid_type,"reduced_gg") == 0)
+		{
+			size_t rg_length = 0;
+			if(err = int2_intin("reduced",intv,realv,text))
+			{
+				fprintf(stderr,"Reduced Gaussian setup failed %d\n",err);
+			}
+			if(outputRepresentation) {
+				if(err = int2_intout("reduced",intv,realv,text)) {
+					fprintf(stderr,"Reduced Gaussian setup failed %d\n",err);
+				}
+			}  
+			if(err = grib_get_size(handle,"pl",&rg_length)) {
+			    fprintf(stderr,"reduced_gg Cannot get size of pl %s\n",grib_get_error_message(err));
+			}
+			if(intf2_debug) {
+				printf("DESCRIBE_INPUT_FIELD: Reduced Gaussian north-south number of points %d\n",rg_length);
+			}
+
+			if(err = grib_get_long_array(handle,"pl",rg_def,&rg_length)) {
+				fprintf(stderr,"Cannot get pl %s\n",grib_get_error_message(err));
+			}
+			for( i = 0; i< rg_length ; i++) {
+				intv[i] = rg_def[i];
+			}
+			if(err = int2_intin("ga_pnts",intv,realv,text)) {
+				fprintf(stderr,"Reduced Gaussian setup failed %d\n",err);
+			}
+		}
+		else
+		{
+			if(err = int2_intin("regular",intv,realv,text)) {
+				fprintf(stderr,"Regular Gaussian setup failed %d\n",err);
+			}
+			if(outputRepresentation) {
+				if(err = int2_intout("regular",intv,realv,text)) {
+					fprintf(stderr,"Regular Gaussian setup failed %d\n",err);
+				}
+			}
+		}
+
+	}
+	/* Shall missing value to be used */
+	/* missingval because can not be applied in Emos lib everywhere... */
+
+	/* Pick up area if the field is lat-lon or gaussian, scanning mode and number of points ns we */
+	if(strcmp(grid_type,"regular_ll") == 0 || strcmp(grid_type,"regular_gg") == 0  || strcmp(grid_type,"reduced_gg") == 0 ||  strcmp(grid_type,"reduced_ll") == 0)
+	{
+		double latitudeOfFirstGridPoint, longitudeOfFirstGridPoint, latitudeOfLastGridPoint, longitudeOfLastGridPoint;
+		if((err = grib_get_double(handle,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPoint))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get latitudeOfFirstGridPointInDegrees  %s\n",grib_get_error_message(err));
+			return err;
+		}
+		if((err = grib_get_double(handle,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPoint))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get longitudeOfFirstGridPointInDegrees  %s\n",grib_get_error_message(err));
+			return err;
+		}
+		if((err = grib_get_double(handle,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPoint))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get latitudeOfLastGridPointInDegrees  %s\n",grib_get_error_message(err));
+			return err;
+		}
+		if((err = grib_get_double(handle,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPoint))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get longitudeOfLastGridPointInDegrees  %s\n",grib_get_error_message(err));
+			return err;
+		}
+
+		realv[0] = latitudeOfFirstGridPoint;
+		realv[1] = longitudeOfFirstGridPoint;
+		realv[2] = latitudeOfLastGridPoint;
+		realv[3] = longitudeOfLastGridPoint;
+	    if(intf2_debug)
+	    {
+		    printf("DESCRIBE_INPUT_FIELD: Input AREA    %f  %f  %f  %f  \n",latitudeOfFirstGridPoint,longitudeOfFirstGridPoint,latitudeOfLastGridPoint,longitudeOfLastGridPoint);
+	    }
+
+		if(err = int2_intin("area",intv,realv,text))
+		{
+			fprintf(stderr,"Area setup INTIN failed %d\n",err);
+		}
+	    /* Scanning mode */
+	    if((err = grib_get_long(handle,"jScansPositively",&scanningMode))!= GRIB_SUCCESS)
+	    {
+		   fprintf(stderr,"Cannot get scanning mode %s\n",grib_get_error_message(err));
+		   return err;
+	    }
+	    if(scanningMode)
+		scanningMode = 64;
+	    if(intf2_debug)
+	    {
+		    printf("DESCRIBE_INPUT_FIELD: Input Scanning Mode -  %d \n",scanningMode);
+	    }
+	    intv[0] = scanningMode;
+	    if(err = int2_intin("scan",intv,realv,text))
+	    {
+		    fprintf(stderr,"Scanning mode setup INTIN failed %d\n",err);
+	    }
+		/* number Of Points Along A Parallel */
+		if((err = grib_get_long(handle,"numberOfPointsAlongAParallel",&niwe))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get numberOfPointsAlongAParallel %s\n",grib_get_error_message(err));
+			return err;
+		}
+		intv[0] = niwe;
+		/* number Of Points Along A Meridian */
+		if((err = grib_get_long(handle,"numberOfPointsAlongAMeridian",&nins))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get numberOfPointsAlongAMeridian %s\n",grib_get_error_message(err));
+			return err;
+		}
+		intv[1] = nins;
+		if(err = int2_intin("npts",intv,realv,text))
+		{
+			fprintf(stderr,"Number of points INTIN failed %d\n",err);
+		}
+
+	}
+
+	/* Lat-Lon grid */
+	if(strcmp(grid_type,"regular_ll") == 0  || strcmp(grid_type,"reduced_ll") == 0)
+	{
+		double iDirectionIncrement = 0, jDirectionIncrement = 0;
+		size_t rll_length = 0;
+
+		if(intf2_debug) {
+			printf("DESCRIBE_INPUT_FIELD: Input Field -  %s \n",grid_type);
+		}
+		/* I Direction Increment */
+		if((err = grib_get_double(handle,"iDirectionIncrementInDegrees",&iDirectionIncrement))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get iDirectionIncrementInDegrees %s\n",grib_get_error_message(err));
+			return err;
+		}
+		/* J Direction Increment */
+		if((err = grib_get_double(handle,"jDirectionIncrementInDegrees",&jDirectionIncrement))!= GRIB_SUCCESS)
+		{
+			fprintf(stderr,"Cannot get jDirectionIncrementInDegrees %s\n",grib_get_error_message(err));
+			return err;
+		}
+
+		realv[0] = iDirectionIncrement;
+		realv[1] = jDirectionIncrement;
+
+		if(strcmp(grid_type,"regular_ll") == 0) {
+			if(err = int2_intin("grid",intv,realv,text))
+			{
+				fprintf(stderr,"Grid setup INTIN failed %d\n",err);
+			}
+			/* Set output representation if it is not set */
+			if(outputRepresentation)
+			{
+				if(err = int2_intout("grid",intv,realv,text))
+				{
+					fprintf(stderr,"Grid setup INTOUT failed %d\n",err);
+				}
+			}
+		}
+		if(strcmp(grid_type,"reduced_ll") == 0) {
+			if(outputRepresentation) {
+				if(err = int2_intout("red_latlon",intv,realv,text)) {
+					fprintf(stderr,"intout Reduced latlon - wave setup failed %d\n",err);
+				}
+			}
+		}
+
+		/* number Of Points Along A Parallel */
+		/* number Of Points Along A Meridian */
+		/*
+		if(err = grib_get_long(handle,"numberOfPointsAlongAParallel",&niwe))
+		{
+			fprintf(stderr,"Cannot get numberOfPointsAlongAParallel %s\n",grib_get_error_message(err));
+		}
+		intv[0] = niwe;
+		if(err = grib_get_long(handle,"numberOfPointsAlongAMeridian",&nins))
+		{
+			fprintf(stderr,"Cannot get numberOfPointsAlongAMeridian %s\n",grib_get_error_message(err));
+		}
+		intv[1] = nins;
+		if(err = int2_intin("npts",intv,realv,text))
+		{
+			fprintf(stderr,"Number of points INTIN failed %d\n",err);
+		}
+		*/
+
+		/* If Reduced */
+        /* Force wave processing for certain paramaters */
+		if(strcmp(grid_type,"reduced_ll") == 0 || table == 140 || (table == 131 && (parameter == 232 || parameter == 229)))
+		{
+		  if(strcmp(grid_type,"reduced_ll") == 0) {
+			if(err = grib_get_size(handle,"pl",&rll_length)) {
+			    fprintf(stderr,"Cannot get size of pl %s\n",grib_get_error_message(err));
+			}
+			if(intf2_debug) {
+				printf("DESCRIBE_INPUT_FIELD: Number of points NS from reduced_ll definition %d\n",rll_length);
+			}
+
+			if(err = grib_get_long_array(handle,"pl",rll_def,&rll_length)) {
+				fprintf(stderr,"Cannot get pl %s\n",grib_get_error_message(err));
+			}
+			intv[0] = rll_length;
+			if(err = int2_intin("redu_ll",intv,realv,text)) {
+				fprintf(stderr,"Reduced LatLon setup failed %d\n",err);
+			}
+			for( i = 0; i< rll_length ; i++) {
+				intv[i] = rll_def[i];
+			}
+			if(err = int2_intin("l_npts",intv,realv,text)) {
+				fprintf(stderr,"Reduced LatLon setup failed %d\n",err);
+			}
+		  }
+    		err = grib_get_long(handle,"matrixOfValues",&matrixOfValues);
+			if (err == GRIB_SUCCESS) {
+       			intv[0] = matrixOfValues;
+       			if(err = int2_intin("matrix",intv,realv,text)) {
+           			  fprintf(stderr,"Matrix Value setup INTIN failed %f\n",err);
+       			}
+			}
+
+    		err = grib_get_double(handle,"missingValue",&missingValue);
+
+			if (err != GRIB_SUCCESS && err != GRIB_NOT_FOUND) {
+				fprintf(stderr,"Missing value %s\n",grib_get_error_message(err));
+			}
+			if(intf2_debug)
+             	printf("DESCRIBE_INPUT_FIELD: Wave field Missing Value %f \n",missingValue);
+    		if(err == GRIB_SUCCESS) {
+       			realv[0] = missingValue;
+       			text = "yes";
+       			if(err = int2_intin("missingvalue",intv,realv,text)) {
+           			  fprintf(stderr,"Missing Value setup INTIN failed %f\n",err);
+       			}
+     		}
+		}
+
+	}
+
+	/************************************************************/
+	/* Describe output unpacked field for INTF */
+
+
+	/* Set INTOUT to get unpack field from INTF */
+	if(err = int2_intout("form",intv,realv,"unpacked"))
+	{
+		fprintf(stderr,"Form setup INTOUT failed %d\n",err);
+	}
+
+
+	/* Level Type */
+	intv[0] = levelType;
+	if(err = int2_intout("levtype",intv,realv,text))
+	{
+		fprintf(stderr,"Level Type setup INTOUT failed %d\n",err);
+	}
+	/*
+	*/
+	/* if(levelType != 1){ */
+		/* Level */
+		intv[0] = level;
+		if(err = int2_intout("level",intv,realv,text))
+		{
+			fprintf(stderr,"Level setup INTOUT failed %d\n",err);
+		}
+	/* } */
+
+	  
+	/* Table */
+	/* Parameter */
+	intv[0] = table;
+	if(err = int2_intout("table",intv,realv,text))
+	{
+		fprintf(stderr,"Table Number setup INTOUT failed %d\n",err);
+	}
+
+	intv[0] = parameter;
+	if(err = int2_intout("parameter",intv,realv,text))
+	{
+		fprintf(stderr,"Parameter Number setup INTOUT failed %d\n",err);
+	}
+	/*
+	*/
+
+	/* Default Accuracy */
+	/*
+	intv[0] = accuracy;
+	if(intf2_debug)
+	{
+		printf("DESCRIBE_INPUT_FIELD: Input Accuracy -  %d \n",accuracy);
+	}
+	if(err = int2_intout("accuracy",intv,realv,text))
+	{
+		fprintf(stderr,"Accuracy setup INTOUT failed %d\n",err);
+	}
+	*/
+
+	return err;
+
+}
diff --git a/grib_api_merging/emos.c b/grib_api_merging/emos.c
new file mode 100755
index 0000000..9d6a9b8
--- /dev/null
+++ b/grib_api_merging/emos.c
@@ -0,0 +1,139 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "emos.h"
+
+#ifdef FORTRAN_UPPERCASE
+#define outrep_  OUTREP
+#define gettru_  GETTRU
+#define setrep_  SETREP
+#define chkout_  CHKOUT
+#define global_  GLOBAL
+#define intf_    INTF
+#define intout_  INTOUT
+#define intin_   INTIN
+#define gasetup_ GASETUP
+#define intuvs_  INTUVS
+#define intvecy_ INTVECY
+#define estima_  ESTIMA
+#endif
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define outrep_  outrep
+#define gettru_  gettru
+#define setrep_  setrep
+#define chkout_  chkout
+#define global_  global
+#define intf_    intf
+#define intout_  intout
+#define intin_   intin
+#define gasetup_ gasetup
+#define intuvs_  intuvs
+#define intvecy_ intvecy
+#define estima_  estima
+#endif
+
+
+fortint outrep_();
+fortint estima_();
+fortint gettru_();
+fortint setrep_(fortint*);
+fortint chkout_();
+fortint global_();
+fortint intf_(const char*, fortint*, fortfloat[], const char*, fortint*, fortfloat[]);
+fortint intout_(const char*, fortint[], fortfloat[], const char*, fortint, fortint);
+fortint intin_(const char*, fortint[], fortfloat[], const char*, fortint, fortint);
+fortint gasetup_( fortint isec1[], fortint isec2[], fortint isec3[], fortint isec4[], fortfloat zsec3[]);
+fortint intuvs_(fortfloat[], fortfloat[], fortint*, fortfloat[], fortfloat[], fortint*);
+fortint intuvu_(fortfloat[], fortfloat[], fortint*, fortfloat[], fortfloat[], fortint*);
+fortint intvecy_(fortfloat[], fortfloat[], fortint*, fortfloat[], fortfloat[], fortint*);
+/* fortint intvecy_(fortfloat[], fortfloat[], fortint*, fortfloat[], fortfloat[], fortint*); */
+
+fortint int2_estima()
+{
+	return estima_();
+}
+
+fortint int2_global()
+{
+	return global_();
+}
+
+fortint int2_chkout()
+{
+	return chkout_();
+}
+
+fortint int2_setrep(fortint output_flag)
+{
+	return setrep_(&output_flag);
+}
+
+fortint int2_gettru()
+{
+	return gettru_();
+}
+
+fortint int2_outrep()
+{
+	return outrep_();
+}
+
+fortint int2_intf( fortfloat in_array[], fortint in_array_length, fortfloat *out_array, fortint *out_array_length)
+{
+	char  in_grib[1];
+	char  out_grib[500000];
+
+	return intf_(in_grib, &in_array_length, in_array, out_grib, out_array_length, out_array);
+}
+
+fortint int2_intout(const char* param,fortint iv[],fortfloat dv[],const char* cv)
+{
+	char *intf2_debug = getenv("INTF2_DEBUG");
+
+	if(!cv) cv = "";
+	if(intf2_debug)
+	{
+	     printf("int2_intout: %s\n",param);
+    }
+	return intout_(param,iv,dv,cv,strlen(param),strlen(cv));
+}
+
+fortint int2_intin(const char* param,fortint iv[],fortfloat dv[],const char* cv)
+{
+	if(!cv) cv = "";
+	return intin_(param,iv,dv,cv,strlen(param),strlen(cv));
+}
+
+fortint int2_gasetup( fortint isec1[], fortint isec2[], fortint isec3[], fortint isec4[], fortfloat zsec3[])
+{
+	return gasetup_( isec1, isec2, isec3, isec4, zsec3 );
+}
+
+fortint int2_intuvy(fortfloat vort_in[],fortfloat div_in[] , fortint in_array_length, fortfloat *vort_out, fortfloat *div_out, fortint *out_array_length)
+{
+    return intuvy_( vort_in, div_in , &in_array_length, vort_out, div_out, out_array_length);
+}
+
+fortint int2_intuvu(fortfloat vort_in[],fortfloat div_in[] , fortint in_array_length, fortfloat *vort_out, fortfloat *div_out, fortint *out_array_length)
+{
+    return intuvu_( vort_in, div_in , &in_array_length, vort_out, div_out, out_array_length);
+}
+
+fortint int2_intvecy(fortfloat u_in[],fortfloat v_in[] , fortint in_array_length, fortfloat *u_out, fortfloat *v_out, fortint *out_array_length)
+{
+    return intvecy_( u_in, v_in , &in_array_length, u_out, v_out, out_array_length);
+}
+
diff --git a/grib_api_merging/emos.h b/grib_api_merging/emos.h
new file mode 100755
index 0000000..95964e5
--- /dev/null
+++ b/grib_api_merging/emos.h
@@ -0,0 +1,21 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#include "fortint.h"
+#define     ISECTION_0  2
+#define     ISECTION_1  1024     /* beware of  for ocean data */
+#define     ISECTION_2  5000
+#define     ISECTION_3  3
+#define     ISECTION_4  512
+
+#define     RSECTION_2  512
+#define     RSECTION_3  2
+#define     RSECTION_4  1
+
diff --git a/grib_api_merging/example.c b/grib_api_merging/example.c
new file mode 100755
index 0000000..4de06b3
--- /dev/null
+++ b/grib_api_merging/example.c
@@ -0,0 +1,184 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <assert.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "grib_api.h"
+#include "emos.h"
+
+char outgrib[1000000];
+char buffer[1024*1024*10];
+
+fortint intf2(char* grib_in, fortint* length_in, char* grib_out, fortint* length_out);
+
+#define intout intout_
+
+long edition = 2;
+
+int main(int argc, char** argv) {
+
+	int err = 0;
+
+	size_t length = sizeof(buffer);
+	long outlen = sizeof(outgrib);
+	/* size_t outlen = sizeof(outgrib); */
+
+	size_t mesg_len;
+	const void* mesg;
+
+	FILE* in  = NULL;
+	FILE* out = NULL;
+
+	grib_handle *h = NULL;
+
+	fortint   intv[4] = {0,};
+	double realv[4] = {0,};
+	char*  text = "dissemination";
+	long version;
+	double resol;
+	int count = 1;
+
+    if( argc < 3 )
+	{
+	  printf("\n Usage: ./example inputgrib outputgrib resol \n");
+	  exit(1);
+	}
+
+	in = fopen(argv[1],"r");
+	if(!in)
+	{
+		perror( argv[1] );
+		exit(10);
+	}
+
+	out = fopen(argv[2],"w");
+	if(!out) {
+		perror(argv[2]);
+		exit(10);
+	}
+
+	resol = atof(argv[3]);
+
+	version = grib_get_api_version();
+
+
+	/* printf("--- grib_api version %d \n",version); */
+
+
+	while((err = readany(in,buffer,&length)) == 0)
+	{
+		printf(" ===================  %d  ==============================  \n", count++);
+
+		/* INTOUT settings */
+
+/* Area */
+		/* north */
+		   /* realv[0] =  69.5; */
+		/* west */
+		   /* realv[1] = 345.5; */
+		/* south */
+		   /* realv[2] =  34.5; */
+		/* east */
+		   /* realv[3] =  34.5; */
+/*
+			if(err = int2_intout("area", intv, realv, text))
+			{
+			     fprintf(stderr,"Area setup INTOUT failed %d\n",err);
+			     return err;
+			}
+*/
+
+/* Lat-Lon resolution */
+		   realv[0] = resol;
+		   realv[1] = resol;
+		
+		   if( err = int2_intout("grid",intv,realv,text))
+		   {
+			   fprintf(stderr,"Grid setup INTOUT failed %d\n",err);
+			   exit(err);
+		   }
+/* Accuracy */
+			/*
+           intv[0] = 16;
+           if(err = int2_intout("accuracy",intv,realv,text))
+           {
+               fprintf(stderr,"Reduced Gaussian setup failed %d\n",err);
+			   return err;
+           }
+
+			*/
+/* Reduced gaussian */
+		   /*
+           intv[0] = 200;
+           if(err = int2_intout("reduced",intv,realv,text))
+           {
+               fprintf(stderr,"Reduced Gaussian setup failed %d\n",err);
+			   return err;
+           }
+		   */
+/* Regular gaussian */
+		   /*
+           intv[0] = 200;
+           if(err = int2_intout("regular",intv,realv,text))
+           {
+               fprintf(stderr,"Regular Gaussian setup failed %d\n",err);
+			   return err;
+           }
+		   */
+/* Spectral */
+		   /*
+           intv[0] = 63;
+           if(err = int2_intout("truncation",intv,realv,text))
+           {
+               fprintf(stderr,"Spherical setup failed %d\n",err);
+			   return err;
+           }
+		  */
+/* Rotation */
+		/*
+		   realv[0] =  0.0;
+		   realv[1] = 80.0;
+		   if( err = int2_intout("rotation",intv,realv,text))
+		   {
+			   fprintf(stderr,"Rotation setup INTOUT failed %d\n",err);
+			   exit(err);
+		   }
+		*/
+
+		if(err = intf2(buffer,&length,outgrib,&outlen))
+		{
+			fprintf(stderr,"INTF2 failed %d\n",err);
+			exit(err);
+		}
+
+		if(fwrite(outgrib,1,outlen,out) != outlen)
+		{
+			perror(argv[4]);
+			exit(1);
+		}
+	}
+		if(fclose(in))
+		{
+			perror(argv[3]);
+			exit(1);
+		}
+
+		if(fclose(out))
+		{
+			perror(argv[4]);
+			exit(1);
+		}
+
+	return 0;
+}
+
diff --git a/grib_api_merging/fortint.h b/grib_api_merging/fortint.h
new file mode 100755
index 0000000..15092e1
--- /dev/null
+++ b/grib_api_merging/fortint.h
@@ -0,0 +1,30 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FORTINT_H
+#define FORTINT_H
+
+#ifdef INTEGER_IS_INT
+#define fortint int
+#else
+#if defined hpR64 || defined hpiaR64
+#define fortint long long
+#else
+#define fortint long
+#endif
+#endif
+
+#ifdef REAL_8
+typedef double fortfloat;
+#else
+typedef float fortfloat; /* fortran single precision float */
+#endif
+
+#endif /* end of  FORTINT_H */
diff --git a/grib_api_merging/intf2.c b/grib_api_merging/intf2.c
new file mode 100755
index 0000000..d82af17
--- /dev/null
+++ b/grib_api_merging/intf2.c
@@ -0,0 +1,301 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include "grib_api.h"
+#include "emos.h"
+
+fortint intf2_(char* grib_in, fortint* length_in, char* grib_out, fortint* length_out)
+{
+	fortint isec1[ISECTION_1] = {0,};
+	fortint isec2[ISECTION_2] = {0,};
+	fortint isec3[ISECTION_3] = {0,};
+	fortint isec4[ISECTION_4] = {0,};
+
+	static double *values_in = NULL;
+	static double *values_out = NULL;
+	static size_t values_in_len = 0;
+	static size_t values_out_len = 0;
+	double *values =NULL;
+
+	static float *values_in1 = NULL;
+	static float *values_out1 = NULL;
+	static size_t values_in_len1 = 0;
+	static size_t values_out_len1 = 0;
+
+	size_t ii = 0;
+	size_t inlen;
+	size_t len=0;
+	size_t outlen = *length_out;
+	size_t outlen_grib_message = 0;
+
+	fortint out_length = 0;
+
+	long long_length_in = *length_in;
+	fortint fortint_inlen = *length_in;
+	fortint fortint_outlen = outlen;
+
+	grib_handle *handle = 0;
+	grib_handle *outh   = 0;
+	grib_handle *finalh = 0;
+
+    fortint err1 = 0, mars_interpolation = 0;
+	int err = 0 , what = 0;
+	int  resetOutput = 0;
+	long nins, niwe;
+	long acc = 0;
+	long bitmapPresent = 0;
+
+	size_t size;
+
+	const void* temp;
+	char *intf2_debug = getenv("INTF2_DEBUG");
+	char *intf2_write = getenv("INTF2_WRITE_TO_FILE");
+	int jpeg = 0;
+	int set_spec_flags=0;
+	grib_util_grid_spec     spec={0,}; 
+	grib_util_packing_spec packing_spec={0,}; 
+
+	mars_interpolation = int2_chkout();
+
+	if(!mars_interpolation)
+	{
+		*length_out = 0;	
+		if(intf2_debug){
+			printf("INTF2: There is NOT users settings \n");
+			printf("INTF2: No Interpolation carried out \n");
+		}
+		return err;
+	}
+
+	fortint outputRepresentation = int2_outrep();
+
+	if(intf2_debug)
+	{
+		if(outputRepresentation	)
+			printf("INTF2:  Output Representation is NOT set by user\n");
+	}
+
+	handle = grib_handle_new_from_message(0,grib_in,long_length_in);
+	if(handle == 0) {
+		err = -1;
+		fprintf(stdout,"INTF2: Cannot create Handle %ld\n",err);
+		/* intlog2("INTF2: Cannot create Handle"); */
+		goto cleanup;
+	}
+
+	if( err = grib_get_size(handle,"values",&inlen))
+	{
+		fprintf(stdout,"INTF2: Cannot get size %s\n",grib_get_error_message(err));
+		return err;
+	}
+
+	if(inlen > values_in_len)
+	{
+		if(values_in) free(values_in);
+		values_in = (double*)malloc(sizeof(double)*inlen);
+		values_in_len = inlen;
+
+		if(!values_in)
+		{
+			err = -1;
+			fprintf(stdout,"INTF2: Cannot allocate %ld\n",inlen);
+			goto cleanup;
+		}
+	}
+
+   /* If bitmap Present  */
+    if((err = grib_get_long(handle,"bitmapPresent",&bitmapPresent))!= GRIB_SUCCESS)
+     {
+        fprintf(stderr,"Cannot get bitmapPresent  %s\n",grib_get_error_message(err));
+        return err;
+     }
+
+	/* if bitmap present Set missing value which correspond WAVE in Emos  */
+	if(bitmapPresent)
+	{
+		/* if(err = grib_set_double(handle,"missingValue",12345.0)) */
+		if(err = grib_set_double(handle,"missingValue",-9999999.0))
+		{
+			fprintf(stdout,"INTF2: Cannot set Missing Value %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+	}
+
+	/* Get decoded values */
+	if(err = grib_get_double_array(handle,"values",values_in,&inlen))
+	{
+		fprintf(stdout,"INTF2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+
+	/* Descibe input field and initial settings for output field */
+	if(err = describe_input_field(handle,outputRepresentation))
+	{
+		fprintf(stdout,"INTF2 describe_input_field failed : %d\n",err);
+		goto cleanup;
+	}
+
+
+	/*=============  INTF ====================================*/
+
+	if(outputRepresentation){
+		out_length = inlen;
+	}
+	else{
+		out_length = int2_estima();
+		if(!out_length){
+			fprintf(stdout,"INTF2: Estimate for length of output array is 0 \n");
+			err = -1;
+			goto cleanup;
+		}
+	}
+	if(out_length > values_out_len)
+	{
+		if(values_out) free(values_out);
+		values_out = (double*)malloc(sizeof(double)*out_length);
+		values_out_len = out_length;
+
+		if(!values_out)
+		{
+			fprintf(stdout,"INTF2: Cannot allocate values_out %ld\n",out_length);
+			err = -1;
+			goto cleanup;
+		}
+	}
+
+	fortint_inlen = inlen;
+	fortint_outlen = outlen;
+
+
+#ifdef REAL_8
+	if(err = int2_intf(values_in,fortint_inlen,values_out,&fortint_outlen))
+	{
+		fprintf(stdout,"INTF failed %d\n",err);
+		goto cleanup;
+	}
+#else
+	if(inlen > values_in_len1)
+	{
+		if(values_in1) free(values_in1);
+		values_in1 = (float*)malloc(sizeof(float)*inlen);
+		values_in_len1 = inlen;
+
+		if(!values_in1)
+		{
+			err = -1;
+			fprintf(stdout,"INTF2: Cannot allocate values_in1 %ld\n",inlen);
+			goto cleanup;
+		}
+	}
+	if(out_length > values_out_len1)
+	{
+		if(values_out1) free(values_out1);
+		values_out1 = (float*)malloc(sizeof(float)*out_length);
+		values_out_len1 = out_length;
+
+		if(!values_out1)
+		{
+			fprintf(stdout,"INTF2: Cannot allocate values_out1 %ld\n",out_length);
+			err = -1;
+			goto cleanup;
+		}
+	}
+	for( ii = 0 ; ii < fortint_inlen; ii++){
+		values_in1[ii] = values_in[ii];
+	}
+	if(err = int2_intf(values_in1,fortint_inlen,values_out1,&fortint_outlen))
+	{
+		fprintf(stdout,"INTF failed %d\n",err);
+		goto cleanup;
+	}
+	for( ii = 0 ; ii < fortint_outlen; ii++){
+		values_out[ii] = values_out1[ii];
+	}
+#endif
+	outlen = fortint_outlen;
+
+	if(intf2_debug) {
+		printf("INTF2: Outlen: %d  \n",outlen);
+	}
+		
+	err=copy_spec_from_ksec(&spec,&packing_spec);
+	if (err) {
+		fprintf(stdout,"INTF2: ERROR - copy_grid_spec_from_ksec unable to copy spec: %d\n", err);
+		goto cleanup;
+	}
+
+	packing_spec.accuracy=GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES;
+	packing_spec.packing=GRIB_UTIL_PACKING_USE_PROVIDED;
+
+	if(outlen == 0) { 
+		set_spec_flags |= GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING;
+		/* Sinisa and Enrico 7/3/11 comments this line */
+		/* packing_spec.packing=0; */
+		len=inlen;
+		values=values_in;
+		if(intf2_debug )
+			printf("INTF2: Outlen = 0 No Interpolation carried out \n");
+	} else {
+		len=outlen;
+		values=values_out;
+	}
+
+	finalh = grib_util_set_spec(handle,&spec, &packing_spec, set_spec_flags,values, len, &err);
+	if(!finalh)  {
+		fprintf(stdout,"INTF2: ERROR - grib_util_set_spec: %d\n", err);
+		if(!err) err = 1;
+		goto cleanup;
+	}
+
+    if (outlen == 0){
+		if(err == -1) {
+			/* -1 coming from grib_util when there is not packing */
+			err = 0;
+			*length_out = 0;
+			if(intf2_debug)
+				printf("INTF2: No Interpolation carried out, nothing repacked \n");
+			goto cleanup;
+		}
+	}
+
+	err = grib_get_message(finalh,&temp,&outlen_grib_message);
+
+	if(outlen_grib_message > *length_out) {
+		fprintf(stdout,"INTF2: ERROR - INTF2  OUTLEN is too large: %d %d\n", outlen, *length_out);
+		err = 1;
+		goto cleanup;
+	}
+
+	memcpy(grib_out,temp,outlen_grib_message);
+
+	*length_out = outlen_grib_message;
+
+	/* goto cleanup; */
+	if(intf2_debug && (set_spec_flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING)){
+		printf("INTF2: No Interpolation carried out but data repacked \n");
+	}
+
+
+cleanup:
+	if(resetOutput = int2_setrep(outputRepresentation)) printf("INTF2: Output Representation reset failed:  %d \n",resetOutput);
+	if(handle)     {grib_handle_delete(handle);handle=NULL;}
+	if(outh)       {grib_handle_delete(outh);outh=NULL;}
+	if(outlen!=0 && finalh)     grib_handle_delete(finalh);
+
+	return err;
+}
+
+fortint intf2(char* grib_in, fortint* length_in, char* grib_out, fortint* length_out)
+{
+	return intf2_(grib_in,length_in,grib_out,length_out);
+}
diff --git a/grib_api_merging/intuvp2.c b/grib_api_merging/intuvp2.c
new file mode 100755
index 0000000..6722bfd
--- /dev/null
+++ b/grib_api_merging/intuvp2.c
@@ -0,0 +1,435 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include "grib_api.h"
+#include "emos.h"
+
+
+fortint intuvp2_(char* vort_grib_in, char* div_grib_in, fortint* length_in, char* vort_grib_out, char* div_grib_out, fortint* length_out)
+{
+
+	static double *vort_values_in = NULL;
+	static double *div_values_in  = NULL;
+	static double *vort_values_out = NULL;
+	static double *div_values_out  = NULL;
+	static size_t values_in_len = 0;
+	static size_t values_out_len = 0;
+
+
+	static float *vort_values_in1 = NULL;
+	static float *div_values_in1  = NULL;
+	static float *vort_values_out1 = NULL;
+	static float *div_values_out1  = NULL;
+	static size_t values_in_len1 = 0;
+	static size_t values_out_len1 = 0;
+
+	grib_handle* hu = NULL;
+	grib_handle* hv = NULL;
+
+	size_t inlen;
+	size_t outlen  = *length_out;
+	size_t outlen1  = *length_out;
+
+	long long_inlen  = *length_in;
+	fortint fortint_inlen  = *length_in;
+	fortint fortint_outlen = outlen;
+
+	int jpeg = 0, resetOutput = 0, what = 0;
+	long ii = 0;
+
+	char *text = "";
+	fortint   intv[4];
+	fortfloat realv[4];
+	long truncation;
+	grib_handle *handle1 = NULL, *handle2 = NULL;
+	grib_handle *outh_u = NULL, *outh_v = NULL;
+	int err = 0;
+	int grib_err = 0;
+	long accuracy = 0;
+
+    fortint out_length = 0;
+
+	const void* temp1;
+	const void* temp2;
+	char *intf2_debug ;
+	char *intf2_write ;
+	fortint outputRepresentation;
+	int gribex_compatibility;
+	grib_util_grid_spec spec={0,};
+	grib_util_packing_spec packing_spec={0,};
+
+	gribex_compatibility=grib_get_gribex_mode(0);
+
+	intf2_debug = getenv("INTF2_DEBUG");
+	intf2_write = getenv("INTF2_WRITE_TO_FILE");
+
+	outputRepresentation = int2_outrep();
+
+	if(outputRepresentation)
+		if(intf2_debug) {
+			printf("INTUVP2: Output Representation is Not set by user\n");
+		}
+
+	handle1 = grib_handle_new_from_message_copy(0,vort_grib_in,long_inlen);
+	if(!handle1) {
+		err = -1;
+		goto cleanup;
+	}
+
+	handle2 = grib_handle_new_from_message_copy(0,div_grib_in,long_inlen);
+	if(!handle2) {
+		err = -1;
+		goto cleanup;
+	}
+
+	/*----------------------------------*/
+	if( err = grib_get_size(handle1,"values",&inlen))
+	{
+		fprintf(stderr,"INTUVP2: Cannot get size for vorticity %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	if(intf2_debug) { printf("INTUVP2: inlen for vorticity: %d  \n",inlen); }
+
+    if(inlen > values_in_len)
+    {
+        if(vort_values_in) free(vort_values_in);
+        vort_values_in = (double*)malloc(sizeof(double)*inlen);
+        values_in_len = inlen;
+
+        if(!vort_values_in)
+        {
+            err = -1;
+            fprintf(stdout,"INTUVP2: Cannot allocate vort_values_in %ld\n",inlen);
+            goto cleanup;
+        }
+
+        if(div_values_in) free(div_values_in);
+		div_values_in = (double*)malloc(sizeof(double)*inlen);
+		if(!div_values_in)
+		{
+			err = -1;
+			fprintf(stderr,"INTUVP2: Cannot allocate input array for divergency %d\n",inlen);
+			goto cleanup;
+		}
+    }
+
+/*
+	if( err = grib_get_size(handle2,"values",&inlen))
+	{
+		fprintf(stderr,"INTUVP2: Cannot get size for divergency %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+*/
+	if(intf2_debug) { printf("INTUVP2: inlen for divergency: %d  \n",inlen); }
+
+
+	/* Default Accuracy */
+	if((err = grib_get_long(handle1,"bitsPerValue",&accuracy))!= GRIB_SUCCESS)
+	{
+		fprintf(stderr,"INTUVP2: Cannot get accuracy %s\n",grib_get_error_message(err));
+		return err;
+	}
+	intv[0] = accuracy;
+	if(err = int2_intin("accuracy",intv,realv,text))
+	{
+		fprintf(stderr,"INTUVP2: Accuracy setup INTIN failed %d\n",err);
+	}
+	if(intf2_debug)
+	{
+		printf("INTUVP2: Input Accuracy  %d  \n",accuracy);
+	}
+
+	/*----------------------------------*/
+
+	/* Get decoded values vorticity */
+	if(err = grib_get_double_array(handle1,"values",vort_values_in,&inlen))
+	{
+		fprintf(stderr,"INTUVP2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	/* Get decoded values divergency */
+	if(err = grib_get_double_array(handle2,"values",div_values_in,&inlen))
+	{
+		fprintf(stderr,"INTUVP2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+	/*----------------------------------*/
+
+	/* get Truncation */
+	if(err = grib_get_long(handle1,"J", &truncation))
+	{
+		fprintf(stderr,"INTUVP2: Cannot get Truncation %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+	intv[0] = truncation;
+	if(err = int2_intin("truncation",intv,realv,text))
+	{
+		fprintf(stderr,"INTUVP2: Truncation  setup INTIN failed %d\n",err);
+		goto cleanup;
+	}
+	if(outputRepresentation)
+	{
+		if(err = int2_intout("truncation",intv,realv,text))
+		{
+			fprintf(stderr,"INTUVP2: Truncation  setup INTOUT failed %d\n",err);
+			goto cleanup;
+		}
+	}
+
+	/*=============  INTUVY ====================================*/
+   if(outputRepresentation){
+        out_length = inlen;
+    }
+    else{
+        out_length = int2_estima();
+        if(!out_length){
+            fprintf(stdout,"INTUVP2: Estimate for length of output array is 0 \n");
+            err = -1;
+            goto cleanup;
+        }
+    }
+
+	if(out_length > values_out_len)
+    {
+        if(vort_values_out) free(vort_values_out);
+        vort_values_out = (double*)malloc(sizeof(double)*out_length);
+        values_out_len = out_length;
+
+        if(!vort_values_out)
+        {
+            fprintf(stdout,"INTUVP2: Cannot allocate vort_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+        if(div_values_out) free(div_values_out);
+        div_values_out = (double*)malloc(sizeof(double)*out_length);
+
+        if(!div_values_out)
+        {
+            fprintf(stdout,"INTUVP2: Cannot allocate div_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+    }
+
+
+	fortint_inlen = inlen;
+	fortint_outlen = outlen;
+#ifdef REAL_8
+	if(err = int2_intuvu(vort_values_in, div_values_in, fortint_inlen, vort_values_out, div_values_out, &fortint_outlen))
+	{
+		fprintf(stderr,"INTUVP2 failed %d\n",err);
+		goto cleanup;
+	}
+#else
+    if(inlen > values_in_len1)
+    {
+        if(vort_values_in1) free(vort_values_in1);
+        vort_values_in1 = (float*)malloc(sizeof(float)*inlen);
+        values_in_len1 = inlen;
+
+        if(!vort_values_in1)
+        {
+            err = -1;
+            fprintf(stdout,"INTUVP2: Cannot allocate vort_values_in %ld\n",inlen);
+            goto cleanup;
+        }
+
+        if(div_values_in1) free(div_values_in1);
+		div_values_in1 = (float*)malloc(sizeof(float)*inlen);
+		if(!div_values_in1)
+		{
+			err = -1;
+			fprintf(stderr,"INTUVP2: Cannot allocate input array for divergency %d\n",inlen);
+			goto cleanup;
+		}
+    }
+	if(out_length > values_out_len1)
+    {
+        if(vort_values_out1) free(vort_values_out1);
+        vort_values_out1 = (float*)malloc(sizeof(float)*out_length);
+        values_out_len1 = out_length;
+
+        if(!vort_values_out1)
+        {
+            fprintf(stdout,"INTUVP2: Cannot allocate vort_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+        if(div_values_out1) free(div_values_out1);
+        div_values_out1 = (float*)malloc(sizeof(float)*out_length);
+
+        if(!div_values_out1)
+        {
+            fprintf(stdout,"INTUVP2: Cannot allocate div_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+    }
+    for( ii = 0 ; ii < fortint_inlen; ii++){
+            vort_values_in1[ii] = vort_values_in[ii];
+   }
+    for( ii = 0 ; ii < fortint_inlen; ii++){
+            div_values_in1[ii] = div_values_in[ii];
+   }
+	if(err = int2_intuvu(vort_values_in1, div_values_in1, fortint_inlen, vort_values_out1, div_values_out1, &fortint_outlen))
+	{
+		fprintf(stderr,"INTUVP2 failed %d\n",err);
+		goto cleanup;
+	}
+    for( ii = 0 ; ii < fortint_outlen; ii++){
+            vort_values_in[ii] = vort_values_in1[ii];
+   }
+    for( ii = 0 ; ii < fortint_outlen; ii++){
+            div_values_in[ii] = div_values_in1[ii];
+   }
+#endif
+
+	*length_out = fortint_outlen;
+	outlen     = fortint_outlen;
+
+	if(intf2_debug)
+	{
+		int i;
+		printf("INTUVP2: outlen: %d  \n",outlen);
+		for(i=0; i<10 ; i++)
+		{
+			printf("INTUVP2: output data values U -  %d -  %f \n",i,vort_values_out[i]);
+			printf("INTUVP2: output data values V -  %d -  %f \n",i,div_values_out[i]);
+		}
+	}
+
+	if(outlen)
+	{
+		err=copy_spec_from_ksec(&spec,&packing_spec);
+
+	    packing_spec.accuracy=GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES;
+        packing_spec.packing=GRIB_UTIL_PACKING_USE_PROVIDED;
+
+		if (err) {
+		          fprintf(stdout,"INTUVP2: ERROR - copy_grid_spec_from_ksec unable to copy spec: %d\n", err);
+		          goto cleanup;
+		}
+		if (spec.grid_type==GRIB_UTIL_GRID_SPEC_SH) {
+				if (0 && gribex_compatibility) {
+					double laplacianOperator=0;
+					long P=0;
+					grib_get_long(handle2,"P",&P);
+					if(err = grib_get_double(handle2,"laplacianOperator",&laplacianOperator))
+					{
+						fprintf(stderr,"INTUVP2: Cannot Get P %s\n",grib_get_error_message(err));
+						goto cleanup;
+					}
+					/*
+					if(err = grib_set_long(handle2,"computeLaplacianOperator",0))
+					{
+						fprintf(stderr,"INTUVP2: Cannot Set computeLaplacianOperator %s\n",grib_get_error_message(err));
+						goto cleanup;
+					}
+					if(err = grib_set_long(handle1,"computeLaplacianOperator",0))
+					{
+						fprintf(stderr,"INTUVP2: Cannot Set computeLaplacianOperator %s\n",grib_get_error_message(err));
+						goto cleanup;
+					}
+					if(err = grib_set_long(handle1,"P",P))
+					{
+						fprintf(stderr,"INTUVP2: Cannot Set P %s\n",grib_get_error_message(err));
+						goto cleanup;
+					}
+					if(err = grib_set_long(handle2,"P",P))
+					{
+						fprintf(stderr,"INTUVP2: Cannot Set P %s\n",grib_get_error_message(err));
+						goto cleanup;
+					}
+					*/
+					packing_spec.computeLaplacianOperator=0;
+					packing_spec.truncateLaplacian=1;
+					packing_spec.laplacianOperator=laplacianOperator;
+				} else {
+					packing_spec.computeLaplacianOperator=1;
+				}
+		}
+
+		hu = grib_util_set_spec(handle1,&spec, &packing_spec, 0,vort_values_out, outlen, &err);
+		if(!hu)  {
+		           fprintf(stdout,"INTUVP2: ERROR - grib_util_set_spec: %d\n", err);
+		           if(!err) err = 1;
+		           goto cleanup;
+		}
+
+		hv = grib_util_set_spec(handle2,&spec, &packing_spec, 0,div_values_out, outlen, &err);
+		if(!hv)  {
+		           fprintf(stdout,"INTUVP2: ERROR - grib_util_set_spec: %d\n", err);
+		           if(!err) err = 1;
+		           goto cleanup;
+		}
+
+		/* U velocity*/
+		if(err = grib_set_long(hu,"paramId",131))
+		{
+			fprintf(stderr,"INTUVP2: Cannot Set V %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+
+		grib_get_message(hu,&temp1,&outlen);
+		if(temp1) {
+			if(intf2_debug) {
+				printf("INTUVP2: outlen u-comp -> %d \n", outlen);
+			}
+			memcpy(vort_grib_out,temp1,outlen);
+		}
+		else
+			fprintf(stderr,"INTUVP2: Error u-comp \n");
+		outlen = *length_out;
+
+		/* V velocity*/
+		if(err = grib_set_long(hv,"paramId",132))
+		{
+			fprintf(stderr,"INTUVP2: Cannot Set V %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		grib_get_message(hv,&temp2,&outlen);
+		if(temp2) {
+			if(intf2_debug) {
+				printf("INTUVP2: outlen v-comp -> %d \n", outlen);
+			}
+			memcpy(div_grib_out,temp2,outlen);
+		}
+		else
+			fprintf(stderr,"INTUVP2: Error v-comp \n");
+		*length_out = outlen;
+
+		goto cleanup;
+
+	}
+	else {
+		fprintf(stderr,"INTUVP2: ERROR - INTUVP2  OUTLEN is: %d\n", outlen);
+		err = 1;
+	}
+
+cleanup:
+
+	if(resetOutput = int2_setrep(outputRepresentation)) printf("INTUVP2: Output Representation reset failed:  %d \n",resetOutput); 
+	if(hu && (hu != handle1))     grib_handle_delete(hu);
+	if(hv && (hv != handle2))     grib_handle_delete(hv);
+	if(handle1)     {grib_handle_delete(handle1);handle1=0;};
+	if(handle2)     {grib_handle_delete(handle2);handle2=0;};
+
+	return err;
+}
+
+fortint intuvp2(char* vort_grib_in, char* div_grib_in, fortint* length_in, char* vort_grib_out, char* div_grib_out, fortint* length_out)
+{
+	return intuvp2_(vort_grib_in,div_grib_in,length_in,vort_grib_out,div_grib_out,length_out);
+}
diff --git a/grib_api_merging/intuvs2.c b/grib_api_merging/intuvs2.c
new file mode 100755
index 0000000..1142ca6
--- /dev/null
+++ b/grib_api_merging/intuvs2.c
@@ -0,0 +1,489 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include "grib_api.h"
+#include "emos.h"
+
+
+fortint intuvs2_(char* vort_grib_in, char* div_grib_in, fortint* length_in, char* vort_grib_out, char* div_grib_out, fortint* length_out)
+{
+
+	 static double *vort_values_in = NULL;
+	 static double *div_values_in  = NULL;
+	 static double *vort_values_out = NULL;
+	 static double *div_values_out  = NULL;
+	 static size_t values_in_len = 0;
+	 static size_t values_out_len = 0;
+
+    static float *vort_values_in1 = NULL;
+    static float *div_values_in1  = NULL;
+    static float *vort_values_out1 = NULL;
+    static float *div_values_out1  = NULL;
+    static size_t values_in_len1 = 0;
+    static size_t values_out_len1 = 0;
+
+    long ii = 0;
+	long long_inlen  = *length_in;
+	size_t inlen;
+	size_t outlen  = *length_out;
+	fortint out_length  = 0;
+
+	fortint fortint_inlen  = *length_in;
+	fortint fortint_outlen = outlen;
+
+	int jpeg = 0, resetOutput = 0;;
+
+	char *text = "";
+	char *complex_switch = getenv("COMPLIANT_UV_SPECTRAL_COMPLEX");
+	fortint   intv[4];
+	fortfloat realv[4];
+	long truncation, inputTrunc;
+	grib_handle *handle1, *handle2;
+	int err = 0;
+	long edition = 1;
+
+	const void* temp1;
+	const void* temp2;
+	char *intf2_debug = getenv("INTF2_DEBUG");
+
+	char packing_type[]="spectral_complex";
+	size_t  size_pack=sizeof(packing_type);
+
+	fortint outputRepresentation = int2_outrep();
+
+	if(outputRepresentation)
+		if(intf2_debug) {
+			printf("INTUVS2: Output Representation is Not set by user\n");
+		}
+
+	handle1 = grib_handle_new_from_message_copy(0,vort_grib_in,long_inlen);
+	if(!handle1) {
+		err = -1;
+		goto cleanup;
+	}
+
+	handle2 = grib_handle_new_from_message_copy(0,div_grib_in,long_inlen);
+	if(!handle2) {
+		err = -1;
+		goto cleanup;
+	}
+
+ 	if(err =grib_get_long(handle1,"pentagonalResolutionParameterJ",&inputTrunc))
+	{
+			fprintf(stderr,"INTUVS2: Cannot get Truncation %s\n",grib_get_error_message(err));
+			goto cleanup;
+	}
+/*----------------------------------*/
+	if( err = grib_get_size(handle1,"values",&inlen))
+	{
+		fprintf(stderr,"INTUVS2: Cannot get size for vorticity %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	if(intf2_debug) {
+		printf("INTUVS2: inlen for vorticity: %d  \n",inlen);
+	}
+
+    if(inlen > values_in_len)
+    {
+        if(vort_values_in) free(vort_values_in);
+        vort_values_in = (double*)malloc(sizeof(double)*inlen);
+        values_in_len = inlen;
+
+        if(!vort_values_in)
+        {
+            err = -1;
+            fprintf(stdout,"INTUVS2: Cannot allocate vort_values_in %ld\n",inlen);
+            goto cleanup;
+        }
+
+        if(div_values_in) free(div_values_in);
+        div_values_in = (double*)malloc(sizeof(double)*inlen);
+        if(!div_values_in)
+        {
+            err = -1;
+            fprintf(stderr,"INTUVS2: Cannot allocate input array for divergency %d\n",inlen);
+            goto cleanup;
+        }
+    }
+
+/*
+	if( err = grib_get_size(handle2,"values",&inlen))
+	{
+		fprintf(stderr,"INTUVS2: Cannot get size for divergency %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+*/
+	/* get edition */
+	if(err = grib_get_long(handle1,"edition", &edition))
+	{
+		fprintf(stderr,"INTUVS2: Cannot get Edition %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	if(intf2_debug) {
+		printf("INTUVS2: inlen for divergency: %d  \n",inlen);
+	}
+
+/*----------------------------------*/
+
+	/* Get decoded values vorticity */
+	if(err = grib_get_double_array(handle1,"values",vort_values_in,&inlen))
+	{
+		fprintf(stderr,"INTUVS2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	/* Get decoded values divergency */
+	if(err = grib_get_double_array(handle2,"values",div_values_in,&inlen))
+	{
+		fprintf(stderr,"INTUVS2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+/*----------------------------------*/
+
+	/* get Truncation */
+		if(err = grib_get_long(handle1,"pentagonalResolutionParameterJ", &truncation))
+		{
+			fprintf(stderr,"INTUVS2: Cannot get Truncation %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		intv[0] = truncation;
+		if(err = int2_intin("truncation",intv,realv,text))
+		{
+			fprintf(stderr,"INTUVS2: Truncation  setup INTIN failed %d\n",err);
+			goto cleanup;
+		}
+		if(outputRepresentation)
+		{
+			if(err = int2_intout("truncation",intv,realv,text))
+			{
+				fprintf(stderr,"INTUVS2: Truncation  setup INTOUT failed %d\n",err);
+				goto cleanup;
+			}
+		}
+
+	/*=============  INTUVY ====================================*/
+        out_length = inlen;
+
+    if(out_length > values_out_len)
+    {
+        if(vort_values_out) free(vort_values_out);
+        vort_values_out = (double*)malloc(sizeof(double)*out_length);
+        values_out_len = out_length;
+
+        if(!vort_values_out)
+        {
+            fprintf(stdout,"INTUVS2: Cannot allocate vort_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+        if(div_values_out) free(div_values_out);
+        div_values_out = (double*)malloc(sizeof(double)*out_length);
+
+        if(!div_values_out)
+        {
+            fprintf(stdout,"INTUVS2: Cannot allocate div_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+    }
+
+	fortint_inlen = inlen;
+	fortint_outlen = outlen;
+
+#ifdef REAL_8
+	if(err = int2_intuvy(vort_values_in, div_values_in, fortint_inlen, vort_values_out, div_values_out, &fortint_outlen))
+	{
+		fprintf(stderr,"INTUVS failed %d\n",err);
+		goto cleanup;
+	}
+#else
+    if(inlen > values_in_len1)
+    {
+        if(vort_values_in1) free(vort_values_in1);
+        vort_values_in1 = (float*)malloc(sizeof(float)*inlen);
+        values_in_len1 = inlen;
+
+        if(!vort_values_in1)
+        {
+            err = -1;
+            fprintf(stdout,"INTUVS2: Cannot allocate vort_values_in %ld\n",inlen);
+            goto cleanup;
+        }
+
+        if(div_values_in1) free(div_values_in1);
+        div_values_in1 = (float*)malloc(sizeof(float)*inlen);
+        if(!div_values_in1)
+        {
+            err = -1;
+            fprintf(stderr,"INTUVS2: Cannot allocate input array for divergency %d\n",inlen);
+            goto cleanup;
+        }
+    }
+    if(out_length > values_out_len1)
+    {
+        if(vort_values_out1) free(vort_values_out1);
+        vort_values_out1 = (float*)malloc(sizeof(float)*out_length);
+        values_out_len1 = out_length;
+
+        if(!vort_values_out1)
+        {
+            fprintf(stdout,"INTUVS2: Cannot allocate vort_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+        if(div_values_out1) free(div_values_out1);
+        div_values_out1 = (float*)malloc(sizeof(float)*out_length);
+
+        if(!div_values_out1)
+        {
+            fprintf(stdout,"INTUVS2: Cannot allocate div_values_out %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+    }
+    for( ii = 0 ; ii < fortint_inlen; ii++){
+            vort_values_in1[ii] = vort_values_in[ii];
+   }
+    for( ii = 0 ; ii < fortint_inlen; ii++){
+            div_values_in1[ii] = div_values_in[ii];
+   }
+    if(err = int2_intuvu(vort_values_in1, div_values_in1, fortint_inlen, vort_values_out1, div_values_out1, &fortint_outlen))
+    {
+        fprintf(stderr,"INTUVS2 failed %d\n",err);
+        goto cleanup;
+    }
+    for( ii = 0 ; ii < fortint_outlen; ii++){
+            vort_values_in[ii] = vort_values_in1[ii];
+   }
+    for( ii = 0 ; ii < fortint_outlen; ii++){
+            div_values_in[ii] = div_values_in1[ii];
+   }
+
+#endif
+
+	*length_out = fortint_outlen;
+	 outlen     = fortint_outlen;
+
+	if(intf2_debug)
+	{
+		int i;
+		printf("INTUVS2: outlen: %d  \n",outlen);
+		for(i=0; i<10 ; i++)
+		{
+			printf("INTUVS2: output data values U -  %d -  %f \n",i,vort_values_out[i]);
+			printf("INTUVS2: output data values V -  %d -  %f \n",i,div_values_out[i]);
+		}
+	}
+
+	if(outlen)
+	{
+		int trunc = 0;
+
+       /* U velocity*/
+		if(err =grib_set_string(handle1,"packingType",packing_type,&size_pack))
+		{
+            fprintf(stderr,"INTUVS2: Cannot Set packing  %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		if(!outputRepresentation)
+		{
+			trunc = int2_gettru();
+			if(trunc > inputTrunc){
+				printf("INTUVS2: Automatic resolution too high: %d \n Resolution reset to input resolution: %d\n",trunc,inputTrunc);
+				trunc = inputTrunc;
+			}
+			else
+			if(intf2_debug)
+			        printf("INTUVS2:  trunc -  %d \n",trunc);
+
+			/* Set Truncation */
+		 	if(err =grib_set_long(handle1,"pentagonalResolutionParameterJ",trunc))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterJ %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle1,"pentagonalResolutionParameterK",trunc))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterK %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle1,"pentagonalResolutionParameterM",trunc))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterM %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+        }
+		if(complex_switch){
+		 	if(err =grib_set_long(handle1,"JS",20))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterJ %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle1,"KS",20))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterK %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle1,"MS",20))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterM %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		}
+
+        if(err = grib_set_long(handle1,"paramId",131))
+        {
+            fprintf(stderr,"INTUVS2: Cannot Set U parameter %s\n",grib_get_error_message(err));
+			goto cleanup;
+        }
+		 if(err =grib_set_long(handle1,"computeLaplacianOperator",1))
+		{
+            fprintf(stderr,"INTUVS2: Cannot Set computeLaplacianOperator %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		 if(err =grib_set_long(handle1,"truncateLaplacian",1))
+		{
+            fprintf(stderr,"INTUVS2: Cannot Set computeLaplacianOperator %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+
+		if(edition == 1){
+		 	if(err =grib_set_long(handle1,"representationMode",2))
+			{
+           	    fprintf(stderr,"INTUVS2: Cannot Set representationMode %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		}
+
+		if(err = grib_set_double_array(handle1,"values",vort_values_out,outlen))
+		{
+			fprintf(stderr,"INTUVS2: Error seting the double array vorticity : %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		grib_get_message(handle1,&temp1,&outlen);
+		if(temp1) {
+			if(intf2_debug) {
+				printf("INTUVS2: outlen vorticity -> %d \n", outlen);
+			}
+			memcpy(vort_grib_out,temp1,outlen);
+		}
+		else
+			fprintf(stderr,"INTUVS2: Error memcpy  divergency \n");
+		*length_out = outlen;
+
+
+       /* V velocity*/
+		if(err =grib_set_string(handle2,"packingType",packing_type,&size_pack))
+		{
+            fprintf(stderr,"INTUVS2: Cannot Set packing  %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		if(!outputRepresentation)
+		{
+		 	if(err =grib_set_long(handle2,"pentagonalResolutionParameterJ",trunc))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterJ %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle2,"pentagonalResolutionParameterK",trunc))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterK %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle2,"pentagonalResolutionParameterM",trunc))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterM %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+        }
+		if(complex_switch){
+		 	if(err =grib_set_long(handle2,"JS",20))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterJ %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle2,"KS",20))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterK %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		 	if(err =grib_set_long(handle2,"MS",20))
+			{
+           		 fprintf(stderr,"INTUVS2: Cannot Set pentagonalResolutionParameterM %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		}
+
+        if(err = grib_set_long(handle2,"paramId",132))
+        {
+            fprintf(stderr,"INTUVS2: Cannot Set V %s\n",grib_get_error_message(err));
+			goto cleanup;
+        }
+		if(err =grib_set_long(handle2,"computeLaplacianOperator",1))
+		{
+            fprintf(stderr,"INTUVS2: Cannot Set computeLaplacianOperator  %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		 if(err =grib_set_long(handle2,"truncateLaplacian",1))
+		{
+            fprintf(stderr,"INTUVS2: Cannot Set computeLaplacianOperator %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+		if(edition == 1){
+		 	if(err =grib_set_long(handle2,"representationMode",2))
+			{
+           	    fprintf(stderr,"INTUVS2: Cannot Set representationMode %s\n",grib_get_error_message(err));
+				goto cleanup;
+			}
+		}
+
+	 	outlen  = fortint_outlen;
+		if(err = grib_set_double_array(handle2,"values",div_values_out,outlen))
+		{
+			fprintf(stderr,"INTUVS2: Error seting the double array divergency : %s\n",grib_get_error_message(err));
+			goto cleanup;
+		}
+
+		grib_get_message(handle2,&temp2,&outlen);
+		if(temp2) {
+			if(intf2_debug) {
+				printf("INTUVS2: outlen divergency -> %d \n", outlen);
+			}
+			memcpy(div_grib_out,temp2,*length_out);
+		}
+		else
+			fprintf(stderr,"INTUVS2: Error memcpy  divergency \n");
+		*length_out = outlen;
+
+		goto cleanup;
+
+	}
+	else {
+			fprintf(stderr,"INTUVS2: ERROR - INTUVS2  OUTLEN is: %d\n", outlen);
+			err = 1;
+	}
+
+cleanup:
+
+    if(resetOutput = int2_setrep(outputRepresentation)) printf("INTUVS2: Output Representation reset failed:  %d \n",resetOutput); 
+	if(handle1)     grib_handle_delete(handle1);
+	if(handle2)     grib_handle_delete(handle2);
+
+	return err;
+}
+
+fortint intuvs2(char* vort_grib_in, char* div_grib_in, fortint* length_in, char* vort_grib_out, char* div_grib_out, fortint* length_out)
+{
+	return intuvs2_(vort_grib_in,div_grib_in,length_in,vort_grib_out,div_grib_out,length_out);
+}
diff --git a/grib_api_merging/intvect2.c b/grib_api_merging/intvect2.c
new file mode 100755
index 0000000..fce7be4
--- /dev/null
+++ b/grib_api_merging/intvect2.c
@@ -0,0 +1,415 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include "grib_api.h"
+#include "emos.h"
+
+fortint intvect2_(char* u_grib_in, char* v_grib_in, fortint* length_in, char* u_grib_out, char* v_grib_out, fortint* length_out)
+{
+
+	static double *u_values_in = NULL;
+	static double *v_values_in = NULL;
+	static double *u_values_out = NULL;
+	static double *v_values_out = NULL;
+     static size_t values_in_len = 0;
+     static size_t values_out_len = 0;
+
+     fortint out_length = 0;
+
+	static float *u_values_in1 = NULL;
+	static float *v_values_in1 = NULL;
+	static float *u_values_out1 = NULL;
+	static float *v_values_out1 = NULL;
+     static size_t values_in_len1 = 0;
+     static size_t values_out_len1 = 0;
+
+    grib_handle* hu = NULL;
+    grib_handle* hv = NULL;
+
+	long long_inlen  = *length_in;
+	long ii = 0;
+
+
+	size_t inlen;
+	size_t outlen = *length_out;
+	size_t outlen1 = *length_out;
+
+	fortint fortint_inlen  = *length_in;
+	fortint fortint_outlen = outlen;
+
+	grib_handle *handle1 = NULL, *handle2 = NULL;
+	grib_handle *outh_u = NULL, *outh_v = NULL;
+	int err = 0;
+	int grib_err = 0;
+
+	long accuracy = 0;
+
+	fortint   intv[4];
+	fortfloat realv[4];
+	char *text = "";
+
+	const void* temp1;
+	const void* temp2;
+
+	char *intf2_debug;
+	char *intf2_write ;
+
+	fortint outputRepresentation;
+    int gribex_compatibility;
+    grib_util_grid_spec spec={0,};
+    grib_util_packing_spec packing_spec={0,};
+
+    gribex_compatibility=grib_get_gribex_mode(0);
+
+	intf2_debug = getenv("INTF2_DEBUG");
+	intf2_write = getenv("INTF2_WRITE_TO_FILE");
+
+	outputRepresentation = int2_outrep();
+
+	if(outputRepresentation)
+        if(intf2_debug) {
+            printf("INTVECT2: Output Representation is Not set by user\n");
+        }
+		
+
+	handle1 = grib_handle_new_from_message_copy(0,u_grib_in,long_inlen);
+	if(!handle1) {
+		err = -1;
+		goto cleanup;
+	}
+
+	handle2 = grib_handle_new_from_message_copy(0,v_grib_in,long_inlen);
+	if(!handle2) {
+		err = -1;
+		goto cleanup;
+	}
+	/* -------------------------------------------- */
+
+	if( err = grib_get_size(handle1,"values",&inlen))
+	{
+		fprintf(stderr,"INTVECT2: Cannot get size for U %s\n",grib_get_error_message(err));
+		return err;
+	}
+	if(intf2_debug) { printf("INTVECT2: inlen for U: %d  \n",inlen); }
+
+
+	if( err = grib_get_size(handle2,"values",&inlen))
+	{
+		fprintf(stderr,"INTVECT2: Cannot get size for V  %s\n",grib_get_error_message(err));
+		return err;
+	}
+
+	if(intf2_debug) { printf("INTVECT2: inlen for V: %d  \n",inlen); }
+
+    if(inlen > values_in_len)
+    {
+		if(u_values_in) free(u_values_in);
+		u_values_in = (double*)malloc(sizeof(double)*inlen);
+		values_in_len = inlen;
+		if(!u_values_in)
+		{
+			err = -1;
+			fprintf(stderr,"INTVECT2: Cannot allocate  input array for U %d\n",inlen);
+			goto cleanup;
+		}
+		if(v_values_in) free(v_values_in);
+		v_values_in = (double*)malloc(sizeof(double)*inlen);
+		if(!v_values_in)
+		{
+			err = -1;
+			fprintf(stderr,"INTVECT2: Cannot allocate input array for V %d\n",inlen);
+			goto cleanup;
+		}
+	}
+	/* -------------------------------------------- */
+
+
+    /* Default Accuracy */
+/*
+    if((err = grib_get_long(handle1,"bitsPerValue",&accuracy))!= GRIB_SUCCESS)
+    {
+        fprintf(stderr,"INTVECT2: Cannot get accuracy %s\n",grib_get_error_message(err));
+        return err;
+    }
+    intv[0] = accuracy;
+    if(err = int2_intin("accuracy",intv,realv,text))
+    {
+        fprintf(stderr,"INTVECT2: Accuracy setup INTIN failed %d\n",err);
+    }
+    if(intf2_debug)
+    {
+        printf("INTVECT2: Input Accuracy  %d  \n",accuracy);
+    }
+
+*/
+	/* -------------------------------------------- */
+	/* Get decoded U values */
+	if(err = grib_get_double_array(handle1,"values",u_values_in,&inlen))
+	{
+		fprintf(stderr,"INTVECT2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	if(err = describe_input_field(handle1,outputRepresentation))
+	{
+		fprintf(stderr,"INTVECT2: describe_input_field failed : %d\n",err);
+		goto cleanup;
+	}
+
+	/* Get decoded V values */
+	if(err = grib_get_double_array(handle2,"values",v_values_in,&inlen))
+	{
+		fprintf(stderr,"INTVECT2: Cannot get decoded values %s\n",grib_get_error_message(err));
+		goto cleanup;
+	}
+
+	if(err = describe_input_field(handle2,outputRepresentation))
+	{
+		fprintf(stderr,"INTVECT2 describe_input_field failed : %d\n",err);
+		goto cleanup;
+	}
+
+
+	/*=============  INTVECY ====================================*/
+    if(outputRepresentation){
+        out_length = inlen;
+    }
+    else{
+        out_length = int2_estima();
+        if(!out_length){
+            fprintf(stdout,"INTVECT2: Estimate for length of output array is 0 \n");
+            err = -1;
+            goto cleanup;
+        }
+    }
+	
+	if(out_length > values_out_len)
+	{
+
+		if(intf2_debug)
+		{
+			printf("INTVECT2:----------------- length for malloc %d\n",out_length);
+		}
+		if(u_values_out) free(u_values_out);
+		u_values_out = (double*)malloc(sizeof(double)*out_length);
+		values_out_len = out_length;
+
+		if(!u_values_out)
+		{
+			fprintf(stderr,"INTVECT2: Cannot allocate u_values_out %d\n",out_length);
+			err = -1;
+			goto cleanup;
+		}
+
+		if(v_values_out) free(v_values_out);
+		v_values_out = (double*)malloc(sizeof(double)*out_length);
+
+		if(!v_values_out)
+		{
+			fprintf(stderr,"INTVECT2: Cannot allocate v_values_out %d\n",out_length);
+			err = -1;
+			goto cleanup;
+		}
+	}
+
+	fortint_inlen = inlen;
+	fortint_outlen = outlen;
+#ifdef REAL_8
+	if(err = int2_intvecy(u_values_in,v_values_in,fortint_inlen,u_values_out,v_values_out,&fortint_outlen))
+	{
+		fprintf(stderr,"INTVECT2 failed %d\n",err);
+		goto cleanup;
+	}
+#else
+    if(inlen > values_in_len1)
+    {
+        if(u_values_in1) free(u_values_in1);
+        u_values_in1 = (float*)malloc(sizeof(float)*inlen);
+        values_in_len1 = inlen;
+
+        if(!u_values_in1)
+        {
+            err = -1;
+            fprintf(stdout,"INTVECT2: Cannot allocate u_values_in1 %ld\n",inlen);
+            goto cleanup;
+        }
+
+        if(v_values_in1) free(v_values_in1);
+        v_values_in1 = (float*)malloc(sizeof(float)*inlen);
+        if(!v_values_in1)
+        {
+            err = -1;
+            fprintf(stderr,"INTVECT2: Cannot allocate input array for v_values_in1 %d\n",inlen);
+            goto cleanup;
+        }
+    }
+    if(out_length > values_out_len1)
+    {
+        if(u_values_out1) free(u_values_out1);
+        u_values_out1 = (float*)malloc(sizeof(float)*out_length);
+        values_out_len1 = out_length;
+
+        if(!u_values_out1)
+        {
+            fprintf(stdout,"INTVECT2: Cannot allocate u_values_out1 %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+        if(v_values_out1) free(v_values_out1);
+        v_values_out1 = (float*)malloc(sizeof(float)*out_length);
+
+        if(!v_values_out1)
+        {
+            fprintf(stdout,"INTVECT2: Cannot allocate v_values_out1 %ld\n",out_length);
+            err = -1;
+            goto cleanup;
+        }
+    }
+
+    for( ii = 0 ; ii < fortint_inlen; ii++){
+	        u_values_in1[ii] = u_values_in[ii];
+   }
+    for( ii = 0 ; ii < fortint_inlen; ii++){
+	        v_values_in1[ii] = v_values_in[ii];
+   }
+
+	if(err = int2_intvecy(u_values_in1,v_values_in1,fortint_inlen,u_values_out1,v_values_out1,&fortint_outlen))
+	{
+		fprintf(stderr,"INTVECT2 failed %d\n",err);
+		goto cleanup;
+	}
+    for( ii = 0 ; ii < fortint_outlen; ii++){
+	        u_values_out[ii] = u_values_out1[ii];
+   }
+    for( ii = 0 ; ii < fortint_outlen; ii++){
+	        v_values_out[ii] = v_values_out1[ii];
+   }
+#endif
+	*length_out = fortint_outlen;
+	outlen = fortint_outlen;
+
+	if(intf2_debug)
+	{
+		printf("INTVECT2: outlen: %d  \n",outlen);
+	}
+
+	if(outlen)
+	{
+
+		if(intf2_debug) {
+			int i;
+			for(i = 0; i < 10 ; i++){
+				printf("INTVECT2: output data values -  %d -  %f \n",i,u_values_out[i]);
+				printf("INTVECT2: output data values -  %d -  %f \n",i,v_values_out[i]);
+			}
+		}
+        err=copy_spec_from_ksec(&spec,&packing_spec);
+        if (err) {
+                  fprintf(stdout,"INTVECT2: ERROR - copy_grid_spec_from_ksec unable to copy spec: %d\n", err);
+                  goto cleanup;
+        }
+
+        packing_spec.accuracy=GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES;
+        packing_spec.packing=GRIB_UTIL_PACKING_USE_PROVIDED;
+/*
+		if(err = set_grid_data_description(handle1,&jpeg,edition))
+		{
+			fprintf(stderr,"INTVECT2 set_grid_data_description failed : %d\n",err);
+			goto cleanup;
+		}
+        if(err = grib_set_long(handle1,"uvRelativeToGrid",1))
+        {
+            fprintf(stderr,"INTVECT2: Cannot Set uvRelativeToGrid %s\n",grib_get_error_message(err));
+			goto cleanup;
+        }
+
+		if(err = set_grid_data_description(handle2,&jpeg,edition))
+		{
+			fprintf(stderr,"INTVECT2 set_grid_data_description failed : %d\n",err);
+			goto cleanup;
+		}
+        if(err = grib_set_long(handle2,"uvRelativeToGrid",1))
+        {
+            fprintf(stderr,"INTVECT2: Cannot Set uvRelativeToGrid %s\n",grib_get_error_message(err));
+			goto cleanup;
+        }
+*/
+        hu = grib_util_set_spec(handle1,&spec, &packing_spec, 0, u_values_out, outlen, &err);
+        if(!hu)  {
+                   fprintf(stdout,"INTVECT2: ERROR - grib_util_set_spec: %d\n", err);
+                   if(!err) err = 1;
+                   goto cleanup;
+        }
+        if(err = grib_set_long(hu,"uvRelativeToGrid",1))
+        {
+            fprintf(stderr,"INTVECT2: Cannot Set uvRelativeToGrid %s\n",grib_get_error_message(err));
+			goto cleanup;
+        }
+
+        hv = grib_util_set_spec(handle2,&spec, &packing_spec, 0, v_values_out, outlen, &err);
+        if(!hv)  {
+                   fprintf(stdout,"INTVECT2: ERROR - grib_util_set_spec: %d\n", err);
+                   if(!err) err = 1;
+                   goto cleanup;
+        }
+        if(err = grib_set_long(hv,"uvRelativeToGrid",1))
+        {
+            fprintf(stderr,"INTVECT2: Cannot Set uvRelativeToGrid %s\n",grib_get_error_message(err));
+			goto cleanup;
+        }
+
+        grib_get_message(hu,&temp1,&outlen);
+        if(temp1) {
+            if(intf2_debug) {
+                printf("INTVECT2: outlen u-comp -> %d \n", outlen);
+            }
+            memcpy(u_grib_out,temp1,outlen);
+        }
+        else
+            fprintf(stderr,"INTUVP2: Error u-comp \n");
+        outlen = *length_out;
+
+        grib_get_message(hv,&temp2,&outlen);
+        if(temp2) {
+            if(intf2_debug) {
+                printf("INTUVP2: outlen v-comp -> %d \n", outlen);
+            }
+            memcpy(v_grib_out,temp2,outlen);
+        }
+        else
+            fprintf(stderr,"INTUVP2: Error v-comp \n");
+        *length_out = outlen;
+
+        goto cleanup;
+
+	
+
+	}
+	else {
+			fprintf(stderr,"INTVECT2: ERROR - INTVECT2  OUTLEN is: %d\n", outlen);
+			err = 1;
+	}
+
+cleanup:
+
+	if(hu && (hu != handle1))     grib_handle_delete(hu);
+	if(hv && (hv != handle2))     grib_handle_delete(hv);
+	if(handle1)     grib_handle_delete(handle1);
+	if(handle2)     grib_handle_delete(handle2);
+
+	return err;
+}
+
+fortint intvect2(char* u_grib_in, char* v_grib_in, fortint* length_in, char* u_grib_out, char* v_grib_out, fortint* length_out )
+{
+	return intvect2_(u_grib_in,v_grib_in,length_in,u_grib_out,v_grib_out,length_out);
+}
diff --git a/grib_api_merging/sources b/grib_api_merging/sources
new file mode 100755
index 0000000..a75864e
--- /dev/null
+++ b/grib_api_merging/sources
@@ -0,0 +1,12 @@
+#
+#   Sources for libemos/pbio for linux
+#
+
+SOURCES.c    = \
+	copy_spec_from_ksec.c \
+	emos.c \
+	intuvp2.c \
+	intvect2.c \
+	describe_input_field.c  \
+	intf2.c \
+	intuvs2.c
diff --git a/gribex/0-INDEX-0 b/gribex/0-INDEX-0
new file mode 100755
index 0000000..67762de
--- /dev/null
+++ b/gribex/0-INDEX-0
@@ -0,0 +1,265 @@
+0-INDEX-0	mac	This index file
+Makefile	mac	libemos Makefile for this directory
+README		mac	Description of this directory
+ECMWFdefinitions.c	mac	Handle ECMWF local definitions in C
+ECMWFdefinitions.h	mac	Headers for ECMWFdefinitions.c
+abortx.F	mah	Terminates execution of program.
+analsw.F	mah	Gets name/content of variables in mars model record.
+blckcr.F	mah	Converts an unblocked dataset into a blocked dataset.
+bt_cray.F	mac	Bit handling routines special to CRAY
+bt_cyber.F	mac	Bit handling routines special to CYBER
+bt_ibm.F	mac	Bit handling routines special to IBM
+bt_ibm_bal.bal	mac	Bit handling routines special to IBM(BAL additions)
+bt_sun.F	mac	Bit handling routines special to SUN
+bt_sun_c.c	mac	Bit handling routines special to SUN(C additions)
+bt_vax.F	mac	Bit handling routines special to VAX
+bt_vax_mar.mar	mac	Bit handling routines special to VAX(MACRO additions)
+bufrin.F	mac	Mimics original BUFRIN, calls PBBUFR to get BUFR prods.
+c2bitw.F	mac	Computes bit width of a positive integer value.
+c2cwid.F	mac	Try/perform constant width encoding. 2nd-order packing.
+c2dosd.F	mac	Diagnose/apply order of spatial differencing.
+c2gene.F	mac	Try/perform general encoding of 2nd-order packing.
+c2ordr.F	mac	2nd-order packing management routine for encoding.
+c2pack.F	mac	Bit string encoding for 2nd-order packing.
+c2pkvw.F	mac	2nd-order values packing for variable width 2op methods.
+c2rnge.F	mac	Range diagnostic for spatial differencing.
+c2rows.F	mac	Try/perform row by row encoding (2nd-order packing).
+calcop.F	mac	Calculate P scale factor for complex packing.
+ccf1cr.F	mah	Create requested nodes in CFS for MARS archiving.
+cheknum.F	mah	Checks that string correctly represents a number.
+chktab2.F	mac	Checks whether parameter appears in ECMWF local table 2.
+cgsloop.c	mac	C routines to complete vectorisation on Fujitsu.
+cmpck.F		mac	Reorder subset of coeffs before packing
+codegb.F	mah	Code array of floating point values in WMO GRIB code.
+codegc.F	mah	Code array of floating point values in WMO GRIB code.
+codegr.F	mah	Code array of floats in GRIB - with ECMWF extensions.
+codeps.F	mah	Packs data into machine-independent pseudo-GRIB format
+comars.h	mah	MARS common areas containing job environment info.
+comcomm.h	mah	Definition of network communications block to MARS/IBM.
+comgrb.h	mah	Common area for values used in GRIB encoding/decoding.
+config.gribex.CRAY	mac	Configuration file for make of libemos on CRAY
+config.gribex.sgimips	mac	Configuration file for make of libemos on SGI
+config.gribex.sun4	mac	Configuration file for make of libemos on SUN
+confp.F		mah	Convert float from machine format to GRIB format.
+confpa.F	mac	Version of confp used by codeps.
+confp2.F	mah	Convert float from machine format to GRIB format.
+confp3.F	mah	Convert float from machine format to GRIB format.
+csect4.F	mac	Code section 4 GRIB for complex packing.
+csgnbt.c	mac	Code GRIB signed value. (C version)
+csgnbt.F	mac	Code GRIB signed value.
+d2ordr.F	mac	2nd-order packing management routine for decoding.
+d2rosd.F	mac	Rebuild field values from spatial differencing.
+decext.F	mah	Extract values from GRIB coded data. 
+decfp.F		mah	Decode GRIB code format to floating point number.
+decfp2.F	mah	Convert GRIB format float to machine format.
+decogb.F	mah	Interface between oldnew DECOGB/GRIBEX GRIB decoding 
+decogc.F	mah	Decode WMO GRIB coded data.
+decogd.F	mah	Decode WMO GRIB coded data.
+decogr.F	mah	Decode WMO GRIB coded data.
+decops.F	mah	Decode pseudo-GRIB coded data.
+decops2.F	mah	Decode pseudo-GRIB coded data with year as 4-digit YYYY.
+delsp.F		mah	Delete spaces around valid MARS directive separators.
+dggsec2.F	mac	Decode GRIB section 2 for gaussian grids.
+dlasec2.F	mac	Decode GRIB section 2 for lambert conformal grids.
+dllsec2.F	mac	Decode GRIB section 2 for lat/lon grids.
+dmesec2.F	mac	Decode GRIB section 2 for Mercator grids.
+docsec2.F	mac	Decode GRIB section 2 for ECMWF ocean grids.
+dpssec2.F	mac	Decode GRIB section 2 for polar stereographic grids.
+dshsec2.F	mac	Decode GRIB section 2 for spherical harmonic fields.
+dsvsec2.F	mac	Decode GRIB section 2 for space view fields.
+dsect4.F	mac	Decode section 4 GRIB for complex packing.
+dsect4a.F	mac	As dsect4 but with modified number of arguments.
+dsgnbt.c	mac	Decode GRIB signed value. (C version)
+dsgnbt.F	mac	Decode GRIB signed value.
+dswmrs.F	mah	Routine to decode a MARS model switch.
+ecdef1.F	mac	Handle ECMWF section 1 local definition 1.
+ecdef1.h	mac	Header for ECMWF section 1 local definition 1.
+ecdef2.F	mac	Handle ECMWF section 1 local definition 2.
+ecdef2.h	mac	Header for ECMWF section 1 local definition 2.
+ecdef3.F	mac	Handle ECMWF section 1 local definition 3.
+ecdef3.h	mac	Header for ECMWF section 1 local definition 3.
+ecdef4.F	mac	Handle ECMWF section 1 local definition 4.
+ecdef4.h	mac	Header for ECMWF section 1 local definition 4.
+ecdef5.F	mac	Handle ECMWF section 1 local definition 5.
+ecdef5.h	mac	Header for ECMWF section 1 local definition 5.
+ecdef6.F	mac	Handle ECMWF section 1 local definition 6.
+ecdef6.h	mac	Header for ECMWF section 1 local definition 6.
+ecdef7.F	mac	Handle ECMWF section 1 local definition 7.
+ecdef7.h	mac	Header for ECMWF section 1 local definition 7.
+ecdef8.F	mac	Handle ECMWF section 1 local definition 8.
+ecdef8.h	mac	Header for ECMWF section 1 local definition 8.
+ecdef9.F	mac	Handle ECMWF section 1 local definition 9.
+ecdef9.h	mac	Header for ECMWF section 1 local definition 9.
+ecdef10.F	mac	Handle ECMWF section 1 local definition 10.
+ecdef10.h	mac	Header for ECMWF section 1 local definition 10.
+ecdef11.F	mac	Handle ECMWF section 1 local definition 11.
+ecdef11.h	mac	Header for ECMWF section 1 local definition 11.
+ecdef12.F	mac	Handle ECMWF section 1 local definition 12.
+ecdef12.h	mac	Header for ECMWF section 1 local definition 12.
+ecdef13.F	mac	Handle ECMWF section 1 local definition 13.
+ecdef13.h	mac	Header for ECMWF section 1 local definition 13.
+ecdef14.h	mac	Header for ECMWF section 1 local definition 14.
+ecdef14.F	mac	Handle ECMWF section 1 local definition 14.
+ecdef15.h	mac	Header for ECMWF section 1 local definition 15.
+ecdef15.F	mac	Handle ECMWF section 1 local definition 15.
+ecdef16.h	mac	Header for ECMWF section 1 local definition 16.
+ecdef16.F	mac	Handle ECMWF section 1 local definition 16.
+ecdef17.h	mac	Header for ECMWF section 1 local definition 17.
+ecdef17.F	mac	Handle ECMWF section 1 local definition 17.
+ecdef18.h	mac	Header for ECMWF section 1 local definition 18.
+ecdef18.F	mac	Handle ECMWF section 1 local definition 18.
+ecdef19.h	mac	Header for ECMWF section 1 local definition 19.
+ecdef19.F	mac	Handle ECMWF section 1 local definition 19.
+ecdef20.h	mac	Header for ECMWF section 1 local definition 20.
+ecdef21.h	mac	Header for ECMWF section 1 local definition 21.
+ecdef50.h	mac	Header for ECMWF section 1 local definition 50.
+ecdef50.F	mac	Handle ECMWF section 1 local definition 50.
+ecdf191.h	mac	Header for ECMWF section 1 local definition 191.
+ecdf191.F	mac	Handle ECMWF section 1 local definition 191.
+ecloc1.F	mah	GRIB coding/decoding of ECMWF local use of Section 1.
+eggsec2.F	mac	Encode GRIB section 2 for gaussian grids.
+elasec2.F	mac	Encode GRIB section 2 for lambert conformal grids.
+ellsec2.F	mac	Encode GRIB section 2 for lat/lon grids.
+emesec2.F	mac	Encode GRIB section 2 for Mercator grids.
+emoslibVersion.c mac	Creates a global variable which is visible using 'nm'.
+emoscyc.F	mac	Returns CYCLE for EMOS, INT, BUFR, GRIB and PBIO
+emosnum.F	mac	Returns current EMOSLIB version number.
+eocsec2.F	mac	Encode GRIB section 2 for ECMWF ocean grids.
+eocsec2.h	mac	Header describing GRIB section 2 for ECMWF ocean grids.
+epssec2.F	mac	Encode GRIB section 2 for polar stereographic grids.
+eshsec2.F	mac	Encode GRIB section 2 for spherical harmonic fields.
+esvsec2.F	mac	Encode GRIB section 2 for space view fields.
+exscal.F	mah	Vectorise calculation of values.
+extmap.F	mah	Extraction of bit maps for routine GRIBEX.
+findLocalDefinitionFile.c	mac	Find templates for local definitions
+fortranInterface.c	mac	Routines ELDEFS,DLDEFS,LDEFPRT,ISEC1L,LDEFNUM
+ftn1cr.F	mah	Gives FORTRAN unit number not currently in use.
+gbitmap.F	mac	Reads a bitmap from a file.
+gbyte.F		mah	Extract a single bit field. Cray routine.
+gbytes.F	mah	Extract a number of bit fields. Cray routine.
+gdecode.c	mac	C version of GRIB decoding
+gdecode.h	mac	Header for C version of GRIB decoding
+gdecode1.c	mac	C version of GRIB decoding local definition 1
+gdecode2.c	mac	C version of GRIB decoding local definition 2
+gdecodeStruct.h	mac	Structures for C version of GRIB decoding
+genbin.F	mah	Produces binary version of input decimal number
+gendir.F	mah	Generate directive lines for MARS.
+getchd.F	mah	Get characters from unpacked GRIB/pseudo-GRIB from MARS
+getfb2.F	mah	Extract real values from section 2 of GRIB code.
+getfpd.F	mah	Extract data from unpacked GRIB record.
+getib1.F	mah	Get values from section 1 of GRIB code.
+getib2.F	mah	Extract integer values from section 2 of GRIB record.
+getib3.F	mah	Get block 3 values from GRIB/pseudo-GRIB from MARS.
+getind.F	mah	Get integer data from unpacked GRIB/pseudo-GRIB data.
+getlgd.F        mah     Get logical data from record of GRIB/pseudo-GRIB data.
+getsys.F	mah	Get system info.(?)
+getusr.F	mah	Get user info.(?)
+getsetValues.[hc]	mac	User API for encoding/decoding GRIB
+grbcom.h	mac	Common holding various default or user supplied values.
+grchk1.F	mah	Check Section 1 GRIB params against GRIB Edition 1
+grchk2.F	mah	Check Section 2 GRIB params against GRIB Edition 1.
+grchk3.F	mah	Check Section 3 GRIB params against GRIB Edition 1.
+grchk4.F	mah	Check Section 4 GRIB params against GRIB Edition 1.
+grib_int_t.h	mac	Headers for handling local definitions using templates.
+gribex.h	mac	Header comments for gribex.F
+gribex.F	mah	Coding and decoding of GRIB format data.
+gribin.F	mac	Mimics original GRIBIN, calls PBGRIB to get GRIB prods.
+gribnum.F	mac	Returns GRIB_CYCLE number
+groutpt.F	mac	Set output stream if defined by environment variable.
+grprs.h		mac	Common blocks holding values for printing.
+grpr190.c	mac	Displays internal local defb ytes in definition 190
+grprs0.F	mah	Print information from Section 0 of GRIB code.
+grprs1.F	mah	Print information from Section 1 of GRIB code.
+grprs1b.F	mac	Simplified version of grprs1.F used by grpr190.c
+grprs2.F	mah	Print information from Section 2 of GRIB code.
+grprs3.F	mah	Print information from Section 3 of GRIB code.
+grprs4.F	mah	Print information from Section 4 of GRIB code.
+grprs4w.F	mac	Print the wave coordinate information in section 4.
+grsdef.F	mah	Default handling of GRIBEX global settings.
+grsdbg.F	mah	Debug print switch setting for routine GRIBEX.
+grsmax.F	mah	Set user defined maximum value for routine GRIBEX.
+grsmok.F	mah	Set/unset exhaustive switch for option 'K' of GRIBEX.
+grsmkp.F	mah	Set/unset flag which forces GRIBEX to calculate P factor
+grsn2o.F	mah	Set/unset use of non-local 2nd-order methods for GRIBEX.
+grsref.F	mah	Set user defined reference value for routine GRIBEX.
+grsrnd.F	mah	Set GRIB code rounding/no rounding for routine GRIBEX.
+grsubc.F	mah	Set/unset use of sub-centre for ECMWF fields encoding.
+grsvck.F	mah	Set GRIB code parameter value check for routine GRIBEX.
+grsx2o.F	mah	Set/unset use of extended 2nd-order methods for GRIBEX.
+gsbite.F	mah	Vectorising extract/insert of bits from/to bitstream.
+gscale.F	mac	Apply/remove field scaling factor for complex packing.
+handleLocalDefinitions.c  mac  Encode/decode local definitions from templates
+handleLocalDefinitions.h  mac  Encode/decode local definitions from templates
+inscal.F	mah	Vectorise calculation of increments.
+insmp1.F	mah	Insertion of primary bit map for routine GRIBEX.
+insmp2.F	mah	Insertion of secondary bit maps for routine GRIBEX.
+inxbit.F	mah	Insert/extract bits consecutively in/from a given array
+inxmap.F	mah	Bit map handling for routine GRIBEX.
+jabort.c	mac	Abort routine for HP.
+kwchk1.F	mac	Check sect 1 of Washington ensemble products.
+kwloc1.F	mac	Decode sect 1 of Washington ensemble products.
+kwprs1.F	mac	print sect 1 of Washington ensemble products.
+l2u1cr.F	mah	Convert character string to upper case.
+ldc1cr.F	mah	List nodes and files for a given research experiment.
+lnbfcr.F	mah	Calculate length of BUFR message on Cray.
+lngbcr.F	mah	Calculate or extract length of GRIB field on Cray.
+local2.F	mac	Looks up the description of a param in a local table 2
+local2k.F	mac	Looks up the description of a param in a local table 2
+local2c.c	mac	Looks up the description of a param in a local table 2
+make.dep	mac	Make dependencies file.
+maxmin.F	mah	Get maximum/minimum from array of floats.
+maxmn2.F	mah	Get max/min from array of floats, ignoring missing data
+maxmni.F	mah	Get maximum/minimum from array of integers.
+mksign.c	mac	Put sign in given position to create negative value
+modval.F	mah	Makes one value a multiple of another.
+mvbytes.c	mac	Pack/unpack bytes in ECMWF local definitions
+mxmncr.F	mah	Find the maximum and minimum elements of an array.
+offset.F	mah	Calculates word/bit offset of start of next bit-field
+orefdat.c	mac	Returns ECMWF local definition 4 reference date index.
+packcf.F	mac	Reformat(IBM) and store leading subset, complex packing.
+parval.F	mah	Extract next parameter and value pair.
+prtbin.F	mah	Binary to decimal conversion.
+prtbk1.F	mah	Print product definition block (block 1) of GRIB data.
+prtbk2.F	mah	Print product definition block (block 2) of GRIB data.
+prtbl1.F	mah	Print product definition block (block 1) of GRIB data.
+prtbl2.F	mah	Print GRID definition block (block 2) of GRIB data.
+ptquasi.F	mac	Print quasi-regular grids from GRIB products.
+qu2reg.F	mah	Convert quasi-regular grid data to regular
+qu2reg2.F	mah	Convert quasi-regular grid data to regular (version 2)
+qu2reg3.F	mah	Convert quasi-regular grid data to regular (version 3)
+reclen.F	mah	Calculates record length. Gives param, level, level type
+ref2grb		mac	Code and check reference value in IBM format
+remsp.F		mah	Remove leading spaces from character string.
+repchr.F	mah	Replace one character by another.
+revero.F	mac	Reverse order of even rank rows for 2nd-order packing.
+rorint.F	mah	Converts real arrays to integer and vice versa.
+rowina.F	mah	Interpolation of row of values.
+rowina2.F	mah	Interpolation of row of values. (version 2)
+rowina3.F	mah	Interpolation of row of values.(version 3 - J.Clochard))
+rtb.F		mah	Count characters in a string, excluding trailing spaces
+sbyte.F		mah	Insert a single bit field. Cray routine.
+sbytes.F	mah	Insert a number of bit fields. Cray routine.
+scm0.F		mah	Apply SCM0 limiter to derivative estimates.
+search.F	mah	Search for given character string.
+sencode.c	mac	C version of GRIB encoding
+sencode.h	mac	Header for C version of GRIB encoding
+sencode1.c	mac	C version of GRIB encoding local definition 1
+sencode2.c	mac	C version of GRIB encoding local definition 2
+setpar.F	mac	Set largest negative number and number of bits per word
+sfbits.h	mah	Statement functions to manipulate bits in 64-bit words
+sources.XXX	mac	Source files to be compiled for platform XXX.
+sort.F		mah	Sorts array in ascending field code-number & writes out
+sortf.F		mah	Sorts fields in a file in ascending order.
+swap4.c		mac	Swaps characters in experiment version (little-endian)
+tab2fil.F	mah	Builds file name for code table 2 checks/printouts.
+u2l1cr.F	mah	Convert string to all lower case.
+unbkin.F	mah	Standard read for COS unblocked or UNICOS binary files
+unbkout.F	mah	Standard write for COS files or UNICOS binary files.
+unblock.F	mah	Converts CRAY blocked dataset of GRIB to unblocked.
+uncmpck.F	mac	Reorder subset of coeffs after packing
+unpkcf.F	mac	Unformat(IBM) and move leading subset, complex packing.
+usesgn.c	mac	Use specified sign bit to make number positive/negative
+valpina.c       mac     Find real index of point in feild described by a bitmap.
+vod2uv.F	mah	Calculate U and V components from vorticity/divergence
+xgrdemo.F	mac	Sample program showing use of GRIBEX and PB routines.
+yyyy2cy.F	mac	Return WMO defined century and year from YYYY date.
diff --git a/gribex/ECMWFdefinitions.c b/gribex/ECMWFdefinitions.c
new file mode 100755
index 0000000..66d6f66
--- /dev/null
+++ b/gribex/ECMWFdefinitions.c
@@ -0,0 +1,3721 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <memory.h>
+
+#include "ECMWFdefinitions.h"
+
+void encodeMarsPart(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes fixed part of ECMWF local definition 1 (from byte 41 onwards)
+// into gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition1.html
+*/
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  *p++ = ONEBYTE(n);n++;          /* DEFINITION */
+  *p++ = ONEBYTE(n);n++;          /* CLASS */
+  *p++ = ONEBYTE(n);n++;          /* TYPE */
+
+  MOVE2BYTES(p,n);                /* STREAM */
+  p+=2;
+  n++;
+#ifdef INTEGER_8
+  memcpy(p,((char *)n+4),4);      /* EXPVER */
+#else
+  memcpy(p,(char *)n,4);          /* EXPVER */
+#endif
+  p += 4;
+  n++;
+
+  return;
+}
+
+void decodeMarsPart(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes fixed part of ECMWF local definition 1 (from byte 41 onwards)
+// from gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition1.html
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  *n++ = ONEBYTEINT(p); p++;      /* DEFINITION */
+  *n++ = ONEBYTEINT(p); p++;      /* CLASS */
+  *n++ = ONEBYTEINT(p); p++;      /* TYPE */
+  *n++ = TWOBYTEINT(p); p += 2;   /* STREAM */
+#ifdef INTEGER_8
+  memcpy(((char *)n+4),p,4);      /* EXPVER */
+#else
+  memcpy((char *)n,p,4);          /* EXPVER */
+#endif
+  n++; p+= 4;
+
+  return;
+}
+
+
+fortint e_def_1_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 1 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition1.html
+//
+// Returns the number of bytes (octets) in local definition 1 after
+// byte 40.
+*/
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = (unsigned char) 0;       /* UNUSED */
+
+/*
+// Definition 1 has a fixed length section 1 (52 bytes)
+*/
+  return (fortint) (52-40);
+}
+
+fortint e_def_1(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_1_(inputArray,gribSection1);
+}
+
+fortint d_def_1_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 1 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition1.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;      /* TOTAL */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_1(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_1_(outputArray,gribSection1);
+}
+
+fortint e_def_2_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 2 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition2.html
+//
+// Returns the number of bytes (octets) in local definition 2 after
+// byte 40.
+*/
+int loop, N;
+fortint value;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = (unsigned char) 0;       /* UNUSED */
+  *p++ = ONEBYTE(n);n++;          /* METHOD */
+
+  MOVE2BYTES(p,n);                /* STARTSTEP */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* ENDSTEP */
+  p += 2;
+  n++;
+/*
+// When coding values, set sign bit to 1, if value is negative.
+*/
+  value = *n++;                   /* NORTH */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  value = *n++;                   /* WEST */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  value = *n++;                   /* SOUTH */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  value = *n++;                   /* EAST */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  *p++ = ONEBYTE(n);n++;          /* FORECAST */
+  *p++ = ONEBYTE(n);n++;          /* CONTROL */
+
+  N = *n;                         /* NUMBERINCLUSTER */
+  *p++ = ONEBYTE(n++);
+
+  for( loop = 0; loop < N; loop++)   /* LIST */
+    *p++ = ONEBYTE(n++);
+/*
+// Definition 2 has a fixed length section 1 (328 bytes)
+*/
+  for( loop = N; loop < (328-72); loop++)
+    *p++ = (unsigned char) 0;
+
+  return (fortint) (328-40);
+}
+
+fortint e_def_2(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_2_(inputArray,gribSection1);
+}
+
+fortint d_def_2_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 2 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition2.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N;
+fortint value;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;      /* TOTAL */
+  p++;                           /* UNUSED */
+  *n++ = ONEBYTEINT(p);p++;      /* METHOD */
+
+  *n++ = TWOBYTEINT(p);          /* STARTSTEP */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* ENDSTEP */
+  p += 2;
+/*
+// When decoding values, if sign bit is 1, value is negative.
+*/
+  value = THREEBYTEINT(p);       /* NORTH */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  value = THREEBYTEINT(p);       /* WEST */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  value = THREEBYTEINT(p);       /* SOUTH */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  value = THREEBYTEINT(p);       /* EAST */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  *n++ = ONEBYTEINT(p);p++;      /* FORECAST */
+  *n++ = ONEBYTEINT(p);p++;      /* CONTROL */
+
+  N = ONEBYTEINT(p);
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBERINCLUSTER */
+
+  for( loop = 0; loop < N; loop++) /* LIST */
+    *n++ = ONEBYTEINT(p++);
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_2(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_2_(outputArray,gribSection1);
+}
+
+fortint e_def_3_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 3 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition3.html
+//
+// Returns the number of bytes (octets) in local definition 3 after
+// byte 40.
+*/
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* BAND */
+  *p++ = ONEBYTE(n);n++;          /* FUNCTION */
+  *p++ = (unsigned char) 0;       /* RESERVED */
+
+  return (fortint) (p-gribSection1);
+}
+
+fortint e_def_3(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_3_(inputArray,gribSection1);
+}
+
+fortint d_def_3_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 3 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition3.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* BAND */
+  *n++ = ONEBYTEINT(p);p++;      /* FUNCTION */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_3(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_3_(outputArray,gribSection1);
+}
+
+void encodeNonMarsPartOfDefinition4(
+  fortint** nPointer,
+  unsigned char** pPointer) {
+fortint* n = *nPointer;
+unsigned char* p = *pPointer;
+int loop;
+int N, M, I, J, K;
+int zero = 0;
+fortint value;
+
+/*
+//  Coordinate structure definition
+*/
+  *p++ = ONEBYTE(n);n++;          /* SPACEUNITFLAG */
+  *p++ = ONEBYTE(n);n++;          /* VERTCOORDDEFN */
+  *p++ = ONEBYTE(n);n++;          /* HORIZCOORDDEFN */
+  *p++ = ONEBYTE(n);n++;          /* TIMEUNITFLAG */
+  *p++ = ONEBYTE(n);n++;          /* TIMECOORDDEFN */
+/*
+// Mixed coordinates
+// For positions, set sign bit to 1, if value is negative
+*/
+  *p++ = ONEBYTE(n);n++;          /* MIXEDCOORDFLAG */
+  *p++ = ONEBYTE(n);n++;          /* COORD1FLAG */
+  *p++ = ONEBYTE(n);n++;          /* AVERAGINGFLAG1 */
+
+  value = *n++;                   /* POSITION1LEVEL1 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* POSITION1LEVEL2 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  *p++ = ONEBYTE(n);n++;          /* COORD2FLAG */
+  *p++ = ONEBYTE(n);n++;          /* AVERAGINGFLAG2 */
+
+  value = *n++;                   /* POSITION2LEVEL1 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* POSITION2LEVEL2 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+/*
+// Data grid definitions
+// For coordinates and increments, set sign bit to 1, if value is negative
+*/
+  *p++ = ONEBYTE(n);n++;          /* COORD3FLAG */
+  *p++ = ONEBYTE(n);n++;          /* COORD4FLAG */
+
+  value = *n++;                   /* COORD4FIRSTPT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* COORD3FIRSTPT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* COORD4LASTPT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* COORD3LASTPT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* I_INCREMENT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* J_INCREMENT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  *p++ = ONEBYTE(n);n++;          /* FLAGIRREGGRIDLIST */
+  *p++ = ONEBYTE(n);n++;          /* FLAGOTHERGRIDLIST */
+/*
+// Auxiliary information
+*/
+  *p++ = ONEBYTE(n);n++;          /* FLAGOTHERINFO */
+
+  N = *n;                         /* NUMBERHORIZCOORDS */
+  *p++ = ONEBYTE(n++);
+
+  M = *n;                         /* NUMBERMIXEDCOORDS */
+  MOVE2BYTES(p,n);
+  p += 2;
+  n++;
+
+  I = *n;                         /* NUMBERGRIDCOORDS */
+  MOVE2BYTES(p,n);
+  p += 2;
+  n++;
+
+  J = *n;                         /* NUMBERAUXILIARY */
+  MOVE2BYTES(p,n);
+  p += 2;
+  n++;
+/*
+// Horizontal coordinate definition 
+// For coordinates, set sign bit to 1, if value is negative
+*/
+  for( loop = 0; loop < N; loop++) {     /* AUXILIARY ARRAY */
+    value = *n++;  
+    if( value < 0 ) value = 0x80000000 | (-value);
+    MOVE4BYTES(p,&value);
+    p += 4;
+  }
+/*
+// Mixed coordinate definition
+// For coordinates, set sign bit to 1, if value is negative
+*/
+  for( loop = 0; loop < M; loop++) {
+    value = *n++;  
+    if( value < 0 ) value = 0x80000000 | (-value);
+    MOVE4BYTES(p,&value);
+    p += 4;
+  }
+/*
+// Grid coordinate list
+// For coordinates, set sign bit to 1, if value is negative
+*/
+  for( loop = 0; loop < I; loop++) {
+    value = *n++;
+    if( value < 0 ) value = 0x80000000 | (-value);
+    MOVE4BYTES(p,&value);
+    p += 4;
+  }
+/*
+// Auxiliary array
+*/
+  for( loop = 0; loop < J; loop++) {
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+/*
+// Post-auxiliary array
+*/
+  K = *n;
+  MOVE4BYTES(p,n);
+  p += 4;
+  n++;
+  for( loop = 1; loop < K; loop++) {
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+
+  *nPointer = n;
+  *pPointer = p;
+  return;
+}
+
+fortint e_def_4_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 4 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition4.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 4.
+//
+// Returns the number of bytes (octets) in local definition 4 after
+// byte 40.
+*/
+fortint byteLength, streamNumber, zero = 0;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  streamNumber = *(n-2);
+  if( streamNumber == 1090 ) {
+    MOVE2BYTES(p,n);              /* NUMBER in 2 bytes for stream 1090 */
+    p += 2;
+    n +=2;                        /* ZERO */
+  }
+  else {
+    *p++ = ONEBYTE(n);n++;        /* NUMBER */
+    *p++ = zero; n++;             /* ZERO */
+  }
+  *p++ = (unsigned char) 1;       /* POST-AUXILIARY FLAG */
+  *p++ = ONEBYTE(n);n++;          /* SYSTEM */
+  *p++ = ONEBYTE(n);n++;          /* METHOD */
+
+  encodeNonMarsPartOfDefinition4(&n, &p);
+
+  byteLength = 40 + (fortint) (p-gribSection1);
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_4( fortint * inputArray,
+                 unsigned char * gribSection1,
+                 fortint * bitPointer) {
+  return e_def_4_(inputArray,gribSection1,bitPointer);
+}
+
+void decodeNonMarsPartOfDefinition4(
+  fortint postAuxiliaryArrayFlag,
+  fortint** nPointer,
+  unsigned char** pPointer) {
+fortint* n = *nPointer;
+unsigned char* p = *pPointer;
+int loop;
+int N, M, I, J, K;
+fortint value;
+
+/*
+//  Coordinate structure definition
+*/
+  *n++ = ONEBYTEINT(p);p++;       /* SPACEUNITFLAG */
+  *n++ = ONEBYTEINT(p);p++;       /* VERTCOORDDEFN */
+  *n++ = ONEBYTEINT(p);p++;       /* HORIZCOORDDEFN */
+  *n++ = ONEBYTEINT(p);p++;       /* TIMEUNITFLAG */
+  *n++ = ONEBYTEINT(p);p++;       /* TIMECOORDDEFN */
+/*
+// Mixed Coordinates
+// For positions, if sign bit is 1, value is negative
+*/
+  *n++ = ONEBYTEINT(p);p++;       /* MIXEDCOORDFLAG */
+  *n++ = ONEBYTEINT(p);p++;       /* COORD1FLAG */
+  *n++ = ONEBYTEINT(p);p++;       /* AVERAGINGFLAG1 */
+
+  value = FOURBYTEINT(p);         /* POSITION1LEVEL1 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* POSITION1LEVEL2 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  *n++ = ONEBYTEINT(p);p++;       /* COORD2FLAG */
+  *n++ = ONEBYTEINT(p);p++;       /* AVERAGINGFLAG2 */
+
+  value = FOURBYTEINT(p);         /* POSITION2LEVEL1 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* POSITION2LEVEL2 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+/*
+//  Data grid definitions
+// For coordinates and increments, if sign bit is 1, value is negative
+*/
+  *n++ = ONEBYTEINT(p);p++;       /* COORD3FLAG */
+  *n++ = ONEBYTEINT(p);p++;       /* COORD4FLAG */
+
+  value = FOURBYTEINT(p);         /* COORD4FIRSTPT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* COORD3FIRSTPT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* COORD4LASTPT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* COORD3LASTPT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* I_INCREMENT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* J_INCREMENT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  *n++ = ONEBYTEINT(p);p++;       /* FLAGIRREGGRIDLIST */
+  *n++ = ONEBYTEINT(p);p++;       /* FLAGOTHERGRIDLIST */
+/*
+// Auxiliary information
+*/
+  *n++ = ONEBYTEINT(p);p++;       /* FLAGOTHERINFO */
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBERHORIZCOORDS */
+  N = *(n-1);
+
+  *n++ = TWOBYTEINT(p);           /* NUMBERMIXEDCOORDS */
+  M = *(n-1);
+  p += 2;
+
+  *n++ = TWOBYTEINT(p);           /* NUMBERGRIDCOORDS */
+  I = *(n-1);
+  p += 2;
+
+  *n++ = TWOBYTEINT(p);           /* NUMBERAUXILIARY */
+  J = *(n-1);
+  p += 2;
+/*
+// Horizontal coordinate definition 
+// For coordinates, if sign bit is 1, value is negative
+*/
+  for( loop = 0; loop < N; loop++) {
+    value = FOURBYTEINT(p); p += 4;
+    if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+    *n++ = value;
+  }
+/*
+// Mixed coordinate definition
+// For coordinates, if sign bit is 1, value is negative
+*/
+  for( loop = 0; loop < M; loop++) {
+    value = FOURBYTEINT(p); p += 4;
+    if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+    *n++ = value;
+  }
+/*
+// Grid coordinate list
+// For coordinates, set sign bit to 1, if value is negative
+*/
+  for( loop = 0; loop < I; loop++) {
+    value = FOURBYTEINT(p); p += 4;
+    if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+    *n++ = value;
+  }
+/*
+// Auxiliary array
+*/
+  for( loop = 0; loop < J; loop++) {
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+  }
+/*
+// Post-auxiliary array KSEC1 element 
+*/
+  if( postAuxiliaryArrayFlag ) {
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+    K = *(n-1);
+    for( loop = 1; loop < K; loop++) {
+      *n++ = FOURBYTEINT(p);
+       p += 4;
+    }
+  }
+
+  *nPointer = n;
+  *pPointer = p;
+  return;
+}
+
+
+fortint d_def_4_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 4 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition4.html
+//
+// *bitPointer is updated by the number of bits in local definition 4.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint byteLength, streamNumber, postAuxiliaryArrayFlag;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  streamNumber = *(n-2);
+  if( streamNumber == 1090 ) {
+    *n++ = TWOBYTEINT(p);         /* NUMBER in 2 bytes for stream 1090 */
+    p +=2;
+    *n++ = 0;                     /* ZERO */
+  }
+  else {
+    *n++ = ONEBYTEINT(p);p++;     /* NUMBER */
+    *n++ = 0; p++;                /* ZERO */
+  }
+  postAuxiliaryArrayFlag = ONEBYTEINT(p);p++; /* FLAG */
+
+  *n++ = ONEBYTEINT(p);p++;       /* SYSTEM */
+  *n++ = ONEBYTEINT(p);p++;       /* METHOD */
+
+  decodeNonMarsPartOfDefinition4(postAuxiliaryArrayFlag, &n, &p);
+
+  byteLength = 40 + (fortint) (p - gribSection1);
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_4( fortint * outputArray,
+                 unsigned char * gribSection1,
+                 fortint * bitPointer) {
+  return d_def_4_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_5_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 5 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition5.html
+//
+// Returns the number of bytes (octets) in local definition 5 after
+// byte 40.
+*/
+fortint value;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+fortint indicator;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+/*
+// When decoding scale, if sign bit is 1, value is negative.
+*/
+  value = *n++;                   /* SCALE */
+  if( value < 0 ) value = 0x80 | (-value);
+  *p++ = ONEBYTE(&value);
+
+  indicator = *n;
+  *p++ = ONEBYTE(n);n++;          /* INDICATOR */
+/*
+// When decoding upper/lower thresholds, if stored value is not 0xffff,
+// if sign bit is 1, value is negative.
+*/
+  value = *n++;                   /* LOWER */
+  if( indicator != 2 )  {
+    if( value < 0 ) value = 0x8000 | (-value);
+  }
+  else
+    value = 0xffff;
+  MOVE2BYTES(p,&value);
+  p += 2;
+
+  value = *n++;                   /* UPPER */
+  if( indicator != 1 )  {
+    if( value < 0 ) value = 0x8000 | (-value);
+  }
+  else
+    value = 0xffff;
+  MOVE2BYTES(p,&value);
+  p += 2;
+
+  *p++ = (unsigned char) 0;       /* SPARE */
+/*
+// Definition 5 has a fixed length section 1 (58 bytes)
+*/
+  return (fortint) (58-40);
+}
+
+fortint e_def_5(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_5_(inputArray,gribSection1);
+}
+
+fortint d_def_5_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 5 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition5.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint value;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+fortint indicator;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;      /* TOTAL */
+/*
+// When decoding scale, if sign bit is 1, value is negative.
+*/
+  value = ONEBYTEINT(p);p++;     /* SCALE */
+  if( value & 0x80 ) value = - (value & 0x7f);
+  *n++ = value;
+
+  *n++ = ONEBYTEINT(p);p++;      /* INDICATOR */
+  indicator = *(n-1);
+/*
+// When decoding upper/lower thresholds, if stored value is not 0xffff,
+// if sign bit is 1, value is negative.
+*/
+  value = TWOBYTEINT(p);         /* LOWER */
+  p += 2;
+  if( indicator != 2 ) {
+    if( value & 0x8000 ) value = - (value & 0x7fff);
+  }
+  else
+    value = 0xffff;
+  *n++ = value;
+
+  value = TWOBYTEINT(p);         /* UPPER */
+  p += 2;
+  if( indicator != 1 ) {
+    if( value & 0x8000 ) value = - (value & 0x7fff);
+  }
+  else
+    value = 0xffff;
+  *n++ = value;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_5(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_5_(outputArray,gribSection1);
+}
+
+fortint e_def_6_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 6 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition6.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 6.
+//
+// Returns the number of bytes (octets) in local definition 6 after
+// byte 40.
+*/
+int loop, N;
+fortint byteLength;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+fortint date;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = (unsigned char) 0;       /* ZERO1 */
+  n++;
+  *p++ = (unsigned char) 0;       /* ZERO2 */
+  n++;
+
+  date = *n++;                    /* DATEOFSST */
+  if( date > 19000000 ) date -= 19000000;
+  MOVE3BYTES(p,&date);
+  p += 3;
+
+  *p++ = ONEBYTE(n);n++;          /* TYPEOFSST */
+
+  N = *n;                         /* COUNTOFICE */
+  *p++ = ONEBYTE(n++);
+
+  for( loop = 0; loop < N; loop++) {
+    date = *n++;                  /* ICEDATE */
+    if( date > 19000000 ) date -= 19000000;
+    MOVE3BYTES(p,&date);
+    p += 3;
+    *p++ = ONEBYTE(n);n++;        /* SATELLITE */
+  }
+ 
+  byteLength = 40 + (fortint) (p-gribSection1);
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_6( fortint * inputArray,
+                 unsigned char * gribSection1,
+                 fortint * bitPointer) {
+  return e_def_6_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_6_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 6 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition6.html
+//
+// *bitPointer is updated by the number of bits in local definition 6.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N, byteLength;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+fortint date;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = (fortint) 0;  p++;       /* ZERO1 */
+  *n++ = (fortint) 0;  p++;       /* ZERO2 */
+
+  date = THREEBYTEINT(p);         /* Date of SST field used */
+  p += 3;
+  if( (date < 19000000) && (date > 100 ) ) date += 19000000;
+  *n++ = date;
+
+  *n++ = ONEBYTEINT(p);p++;       /* TYPEOFSST */
+  *n++ = ONEBYTEINT(p);p++;       /* COUNTOFICE */
+
+  N = *(n-1);
+  for( loop = 0; loop < N; loop++) {
+    date = THREEBYTEINT(p);       /* ICEDATE */
+    p += 3;
+    if( (date < 19000000) && (date > 100 ) ) date += 19000000;
+    *n++ = date;
+    *n++ = ONEBYTEINT(p);p++;     /* SATELLITE */
+  }
+
+  byteLength = 40 + (fortint) (p - gribSection1);
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_6( fortint * outputArray,
+                 unsigned char * gribSection1,
+                 fortint * bitPointer) {
+  return d_def_6_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_7_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 7 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition7.html
+//
+// Returns the number of bytes (octets) in local definition 7 after
+// byte 40.
+*/
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = ONEBYTE(n);n++;          /* DOMAIN */
+  *p++ = ONEBYTE(n);n++;          /* DIAGNOSTICNUMBER */
+  *p++ = (unsigned char) 0;       /* SPARE */
+/*
+// Definition 7 has a fixed length section 1 (54 bytes)
+*/
+  return (fortint) (54-40);
+}
+
+fortint e_def_7(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_7_(inputArray,gribSection1);
+}
+
+fortint d_def_7_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 7 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition7.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;      /* TOTAL */
+  *n++ = ONEBYTEINT(p);p++;      /* DOMAIN */
+  *n++ = ONEBYTEINT(p);p++;      /* DIAGNOSTICNUMBER */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_7(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_7_(outputArray,gribSection1);
+}
+
+fortint e_def_8_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 8 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition8.html
+//
+// Returns the number of bytes (octets) in local definition 8 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* INTERVAL */
+
+  for( loop = 0; loop < 12; loop++) {
+    *p++ = ONEBYTE(n);            /* UNSIGNED INTEGER */
+    n++;
+  }
+/*
+// Definition 8 has a fixed length section 1 (62 bytes)
+*/
+  return (fortint) (62-40);
+}
+
+fortint e_def_8(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_8_(inputArray,gribSection1);
+}
+
+fortint d_def_8_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 8 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition8.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* INTERVAL */
+
+  for( loop = 0; loop < 12; loop++) {
+     *n++ = ONEBYTEINT(p);       /* UNSIGNED INTEGER */
+     p++;
+  }
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_8(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_8_(outputArray,gribSection1);
+}
+
+fortint e_def_9_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 9 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition9.html
+//
+// Returns the number of bytes (octets) in local definition 9 after
+// byte 40.
+*/
+fortint value;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* NUMBER */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* ITERATIONCOUNT */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* VECTORCOUNT */
+  p += 2;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* INITIALNORM */
+  *p++ = ONEBYTE(n);n++;          /* FINALNORM */
+
+  MOVE4BYTES(p,n);                /* VECTORCOUNT */
+  p += 4;
+  n++;
+/*
+// When coding values, set sign bit to 1, if value is negative.
+*/
+  value = *n++;                   /* NORTHWESTLAT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* NORTHWESTLON */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* SOUTHEASTLAT */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* SOUTHEASTLON */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  MOVE4BYTES(p,n);                /* ACCURACY */
+  p += 4;
+  n++;
+
+  MOVE2BYTES(p,n);                /* NUMBEREVOLVED */
+  p += 2;
+  n++;
+
+  value = *n++;                   /* RITZNUMBER1 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* RITZNUMBER2 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  *p++ = (unsigned char) 0;       /* SPARE */
+/*
+// Definition 9 has a fixed length section 1 (92 bytes)
+*/
+
+  return (fortint) (92-40);
+}
+
+fortint e_def_9(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_9_(inputArray,gribSection1);
+}
+
+fortint d_def_9_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 9 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition9.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint value;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);           /* NUMBER */
+  p += 2;
+  *n++ = TWOBYTEINT(p);           /* ITERATIONCOUNT */
+  p += 2;
+  *n++ = TWOBYTEINT(p);           /* VECTORCOUNT */
+  p += 2;
+
+  *n++ = ONEBYTEINT(p);p++;       /* INITIALNORM */
+  *n++ = ONEBYTEINT(p);p++;       /* FINALNORM */
+
+  *n++ = FOURBYTEINT(p);          /* FACTOR */
+  p += 4;
+
+/*
+// When decoding values, if sign bit is 1, value is negative.
+*/
+  value = FOURBYTEINT(p);         /* NORTHWESTLAT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* NORTHWESTLON */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* SOUTHEASTLAT */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* SOUTHEASTLON */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  *n++ = FOURBYTEINT(p);          /* ACCURACY */
+  p += 4;
+
+  *n++ = TWOBYTEINT(p);           /* NUMBEREVOLVED */
+  p += 2;
+
+  value = FOURBYTEINT(p);         /* RITZNUMBER1 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);         /* RITZNUMBER2 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_9(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_9_(outputArray,gribSection1);
+}
+
+fortint e_def_10_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 10 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition10.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 10.
+//
+// Returns the number of bytes (octets) in local definition 10 after
+// byte 40.
+*/
+int loop, N;
+fortint value, byteLength;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = ONEBYTE(n);n++;          /* CENTRALDEFINITION */
+  *p++ = ONEBYTE(n);n++;          /* PARAMETER */
+  *p++ = ONEBYTE(n);n++;          /* LEVELTYPE */
+
+/*
+// When coding values, set sign bit to 1, if value is negative.
+*/
+  value = *n++;                   /* NORTH */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  value = *n++;                   /* WEST */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  value = *n++;                   /* SOUTH */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  value = *n++;                   /* EAST */
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(p,&value);
+  p += 3;
+
+  *p++ = ONEBYTE(n);n++;          /* OPERFORECASTTUBE */
+  *p++ = ONEBYTE(n);n++;          /* CONTROLFORECASTTUBE */
+
+  MOVE2BYTES(p,n);                /* HEIGHT */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* STEP */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* RADIUS */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* ENSEMBLEDEVIATION */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* DISTANCEEXTREME */
+  p += 2;
+  n++;
+
+  N = *n;                         /* NUMBERINTUBE */
+  *p++ = ONEBYTE(n++);
+
+  for( loop = 0; loop < N; loop++)  /* ENSEMBLE FORECAST NUMBERS */
+    *p++ = ONEBYTE(n++);
+/*
+// Definition 10 has a fixed length section 1 (334 bytes)
+*/
+  for( loop = N; loop < (334-39); loop++)
+    *p++ = (unsigned char) 0;
+
+  byteLength = 334;
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_10( fortint * inputArray,
+                  unsigned char * gribSection1,
+                  fortint * bitPointer) {
+  return e_def_10_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_10_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 10 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition10.html
+//
+// *bitPointer is updated by the number of bits in local definition 10.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N, byteLength;
+fortint value;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;       /* TOTAL */
+  *n++ = ONEBYTEINT(p);p++;       /* CENTRALDEFINITION */
+  *n++ = ONEBYTEINT(p);p++;       /* PARAMETER */
+  *n++ = ONEBYTEINT(p);p++;       /* LEVELTYPE */
+/*
+// When decoding values, if sign bit is 1, value is negative.
+*/
+  value = THREEBYTEINT(p);        /* NORTH */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  value = THREEBYTEINT(p);        /* WEST */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  value = THREEBYTEINT(p);        /* SOUTH */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  value = THREEBYTEINT(p);        /* EAST */
+  p += 3;
+  if( value & 0x800000 ) value = - (value & 0x7fffff);
+  *n++ = value;
+
+  *n++ = ONEBYTEINT(p);p++;       /* OPERFORECASTTUBE */
+  *n++ = ONEBYTEINT(p);p++;       /* CONTROLFORECASTTUBE */
+
+  *n++ = TWOBYTEINT(p);           /* HEIGHT */
+  p += 2;
+  *n++ = TWOBYTEINT(p);           /* STEP */
+  p += 2;
+  *n++ = TWOBYTEINT(p);           /* RADIUS */
+  p += 2;
+  *n++ = TWOBYTEINT(p);           /* ENSEMBLEDEVIATION */
+  p += 2;
+  *n++ = TWOBYTEINT(p);           /* DISTANCEEXTREME */
+  p += 2;
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBERINTUBE */
+  N = *(n-1);
+
+  for( loop = 0; loop < N; loop++)    /* ENSEMBLE FORECAST NUMBERS */
+    *n++ = ONEBYTEINT(p++);
+/*
+// Definition 10 has a fixed length section 1 (334 bytes)
+*/
+  byteLength = 334;
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_10( fortint * outputArray,
+                  unsigned char * gribSection1,
+                  fortint * bitPointer) {
+  return d_def_10_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_11_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 11 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition11.html
+//
+// Returns the number of bytes (octets) in local definition 11 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* ANALYSISCLASS */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSISTYPE */
+
+  MOVE2BYTES(p,n);                /* ANALYSISSTREAM */
+  p += 2;
+  n++;
+
+  MOVE4BYTES(p,n);                /* ANALYSISEXPVER */
+  p += 4;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* ANALYSIS_YY */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSIS_MM */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSIS_DD */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSIS_HH */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSIS_MIN */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSISCENTURY */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSISORIGIN */
+  *p++ = ONEBYTE(n);n++;          /* ANALYSISSUBCENTRE */
+
+
+  for( loop = 0; loop < 7; loop++)   /* SPARE */
+    *p++ = (unsigned char) 0;
+/*
+// Definition 11 has a fixed length section 1 (72 bytes)
+*/
+  return (fortint) (72-40);
+}
+
+fortint e_def_11(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_11_(inputArray,gribSection1);
+}
+
+fortint d_def_11_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 11 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition11.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSISCLASS */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSISTYPE */
+
+  *n++ = TWOBYTEINT(p);          /* ANALYSISSTREAM */
+  p += 2;
+  *n++ = FOURBYTEINT(p);         /* ANALYSISEXPVER */
+  p += 4;
+
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSIS_YY */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSIS_MM */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSIS_DD */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSIS_HH */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSIS_MIN */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSISCENTURY */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSISORIGIN */
+  *n++ = ONEBYTEINT(p);p++;      /* ANALYSISSUBCENTRE */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_11(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_11_(outputArray,gribSection1);
+}
+
+fortint e_def_13_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 13 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition13.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 13.
+//
+// Returns the number of bytes (octets) in local definition 13 after
+// byte 40.
+*/
+int loop, ND, NF;
+fortint byteLength;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = ONEBYTE(n);n++;          /* DIRECTION */
+  *p++ = ONEBYTE(n);n++;          /* FREQUENCY */
+
+  ND = *n;                        /* NUMBERDIRECTIONS */
+  *p++ = ONEBYTE(n++);
+
+  NF = *n;                        /* NUMBERFREQUENCIES */
+  *p++ = ONEBYTE(n++);
+
+  MOVE4BYTES(p,n);                /* SCALEDIRECTIONS */
+  p += 4;
+  n++;
+  MOVE4BYTES(p,n);                /* SCALEFREQUENCIES */
+  p += 4;
+  n++;
+/*
+// Set flag for new style coding and include system and method
+// Note the offsets for system/method; n is not updated till later!
+// Modified flag=2 to add:
+//   reference date
+//   climate date from
+//   climate date to.
+*/
+  *p++ = (unsigned char) 2;       /* FLAG */
+
+  MOVE2BYTES(p,(n+ND+NF));        /* SYSTEM */
+  p += 2;
+
+  MOVE2BYTES(p,(n+ND+NF+1));      /* METHOD */
+  p += 2;
+
+  MOVE4BYTES(p,(n+ND+NF+2));      /* REFERENCE DATE */
+  p += 4;
+
+  MOVE4BYTES(p,(n+ND+NF+3));      /* CLIMATE DATE FROM */
+  p += 4;
+
+  MOVE4BYTES(p,(n+ND+NF+4));      /* CLIMATE DATE TO */
+  p += 4;
+
+  for( loop = 0; loop < 20; loop++)     /* SPARE */
+    *p++ = (unsigned char) 0;
+
+  for( loop = 0; loop < ND; loop++) {   /* DIRECTIONS */
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+ 
+  for( loop = 0; loop < NF; loop++) {   /* FREQUENCIES */
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+
+  n += 5;                        /* for system, method, reference date and
+                                    two climate dates */
+ 
+  byteLength = 100 + ND*4 + NF*4;
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_13( fortint * inputArray,
+                  unsigned char * gribSection1,
+                  fortint * bitPointer) {
+  return e_def_13_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_13_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 13 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition13.html
+//
+// *bitPointer is updated by the number of bits in local definition 13.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, ND, NF, byteLength, flag;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;       /* TOTAL */
+  *n++ = ONEBYTEINT(p);p++;       /* DIRECTION */
+  *n++ = ONEBYTEINT(p);p++;       /* FREQUENCY */
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBERDIRECTIONS */
+  ND = *(n-1);
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBERFREQUENCIES */
+  NF = *(n-1);
+
+  *n++ = FOURBYTEINT(p);          /* SCALEDIRECTIONS */
+  p += 4;
+  *n++ = FOURBYTEINT(p);          /* SCALEFREQUENCIES */
+  p += 4;
+/*
+// Handle system and method if flag = 1 or 2
+// Modified flag=2 added:
+//   reference date
+//   climate date from
+//   climate date to.
+*/
+  flag = ONEBYTEINT(p++);          /* FLAG */
+  if( flag == 1 ) {
+    *(n+ND+NF) = TWOBYTEINT(p);    /* SYSTEM */
+    p += 2;
+    *(n+ND+NF+1) = TWOBYTEINT(p);  /* METHOD */
+
+    p += 34;                       /* SPARE */
+  }
+  else if( flag == 2 ) {
+    *(n+ND+NF) = TWOBYTEINT(p);    /* SYSTEM */
+    p += 2;
+    *(n+ND+NF+1) = TWOBYTEINT(p);  /* METHOD */
+    p += 2;
+    *(n+ND+NF+2) = FOURBYTEINT(p); /* REFERENCE DATE */
+    p += 4;
+    *(n+ND+NF+3) = FOURBYTEINT(p); /* CLIMATE DATE FROM */
+    p += 4;
+    *(n+ND+NF+4) = FOURBYTEINT(p); /* CLIMATE DATE TO */
+
+    p += 24;                       /* SPARE */
+  }
+  else
+    p += 36;                       /* SPARE */
+
+  for( loop = 0; loop < ND; loop++) { /* DIRECTIONS */
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+  }
+
+  for( loop = 0; loop < NF; loop++) { /* FREQUENCIES */
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+  }
+/*
+// Adjust for system and method if 'new-style' flag is set
+*/
+  if( flag == 1 ) n += 2;
+  if( flag == 2 ) n += 5;
+
+  byteLength = 100 + ND*4 + NF*4;
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_13( fortint * outputArray,
+                  unsigned char * gribSection1,
+                  fortint * bitPointer) {
+  return d_def_13_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_14_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 14 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition14.html
+//
+// Returns the number of bytes (octets) in local definition 14 after
+// byte 40.
+*/
+int loop, N;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = ONEBYTE(n);n++;          /* CHANNELNUMBER */
+
+  MOVE4BYTES(p,n);                /* SCALEFACTOR */
+  p += 4;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBERFREQUENCIES */
+  N = *(n-1);
+
+  for( loop = 0; loop < 3; loop++)  /* SPARE */
+    *p++ = (unsigned char) 0;
+
+  for( loop = 0; loop < N; loop++) {   /* FREQUENCIES */
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+/*
+// Definition 14 has a fixed length section 1 (1080 bytes)
+*/
+  for( loop = 0; loop < (1080-60-N*4); loop++)
+    *p++ = (unsigned char) 0;
+
+  return (fortint) (1080-40);
+}
+
+fortint e_def_14(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_14_(inputArray,gribSection1);
+}
+
+fortint d_def_14_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 14 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition14.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;      /* TOTAL */
+  *n++ = ONEBYTEINT(p);p++;      /* CHANNELNUMBER */
+
+  *n++ = FOURBYTEINT(p);         /* SCALEFACTOR */
+  p += 4;
+
+  *n++ = ONEBYTEINT(p);p++;      /* NUMBERFREQUENCIES */
+  N = *(n-1);
+
+  p += 3;                        /* SPARE */
+
+  for( loop = 0; loop < N; loop++) {   /* FREQUENCIES */
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+  }
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_14(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_14_(outputArray,gribSection1);
+}
+
+fortint e_def_15_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 15 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition15.html
+//
+// Returns the number of bytes (octets) in local definition 15 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* NUMBER */
+  p += 2;
+  n++;
+
+  MOVE2BYTES((p+4),n);            /* TOTAL: bytes are out-of-sequence */
+  n++;
+
+  MOVE2BYTES(p,n);                /* SYSTEM */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* METHOD */
+  p += 4;                         /* to skip TOTAL as well as METHOD */
+  n++;
+/*
+// Definition 15 has a fixed length section 1 (60 bytes)
+*/
+  for( loop = 0; loop < 3; loop++)   /* SPARE */
+    *p++ = (unsigned char) 0;
+
+  return (fortint) (60-40);
+}
+
+fortint e_def_15(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_15_(inputArray,gribSection1);
+}
+
+fortint d_def_15_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 15 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition15.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);          /* NUMBER */
+  p += 2;
+
+  *n++ = TWOBYTEINT((p+4));      /* TOTAL: bytes are out-of-sequence */
+
+  *n++ = TWOBYTEINT(p);          /* SYSTEM */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* METHOD */
+  p += 2;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_15(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_15_(outputArray,gribSection1);
+}
+
+fortint e_def_16_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 16 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition16.html
+//
+// Returns the number of bytes (octets) in local definition 16 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* NUMBER */
+  p += 2;
+  n++;
+
+  n++;                            /* ZERO */
+
+  MOVE2BYTES(p,n);                /* SYSTEM */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* METHOD */
+  p += 2;
+  n++;
+  MOVE4BYTES(p,n);                /* MONTH */
+  p += 4;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* PERIOD */
+
+  MOVE2BYTES(p,n);                /* Forecast month */
+  p += 2;
+  n++;
+
+  for( loop = 63; loop <= 80; loop++ )
+    *p++ = (unsigned char) 0;
+
+  return (fortint) (80);
+}
+
+fortint e_def_16(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_16_(inputArray,gribSection1);
+}
+
+fortint d_def_16_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 16 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition16.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);          /* NUMBER */
+  p += 2;
+
+  *n++ = 0;                      /* ZERO */
+
+  *n++ = TWOBYTEINT(p);          /* SYSTEM */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* METHOD */
+  p += 2;
+  *n++ = FOURBYTEINT(p);         /* MONTH */
+  p += 4;
+  *n++ = ONEBYTEINT(p);          /* PERIOD */
+  p++;
+  *n++ = TWOBYTEINT(p);          /* Forecast month */
+  p += 2;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_16(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_16_(outputArray,gribSection1);
+}
+
+fortint e_def_17_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 17 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition17.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 17.
+//
+// Returns the number of bytes (octets) in local definition 17 after
+// byte 40.
+*/
+int loop, N, M;
+fortint byteLength;
+fortint zero = 0;
+fortint date;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = (unsigned char) 0;       /* ZERO1 */
+  n++;
+  *p++ = (unsigned char) 0;       /* ZERO2 */
+  n++;
+
+  date = *n++;                    /* DATEOFSST */
+  if( date > 19000000 ) date -= 19000000;
+  MOVE3BYTES(p,&date);
+  p += 3;
+
+  *p++ = ONEBYTE(n);n++;          /* TYPEOFSST */
+  *p++ = ONEBYTE(n);n++;          /* COUNTOFICE */
+  N = *(n-1);
+
+  for( loop = 0; loop < N; loop++) {   /* ICE data */
+    date = *n++;                  /* Date of ICE field */
+    if( date > 19000000 ) date -= 19000000;
+    MOVE3BYTES(p,&date);
+    p += 3;
+    *p++ = ONEBYTE(n);n++;             /* Satellite number */
+  }
+/*
+// The ICE data entries are padded with zeroes to make upto a multiple
+// of 10 slots
+*/
+  M = ((N+9)/10)*10;
+  if( M == 0 ) M = 10;
+  for( loop = N; loop < M; loop++) {
+    MOVE4BYTES(p,&zero);
+    p += 4;
+  }
+ 
+  byteLength = 40 + 16 + M*4;
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_17( fortint * inputArray,
+                  unsigned char * gribSection1,
+                  fortint * bitPointer) {
+  return e_def_17_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_17_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 17 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition17.html
+//
+// *bitPointer is updated by the number of bits in local definition 17.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N, M, byteLength;
+fortint date;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = (fortint) 0;  p++;       /* ZERO1 */
+  *n++ = (fortint) 0;  p++;       /* ZERO2 */
+
+  date = THREEBYTEINT(p);         /* DATEOFSST */
+  p += 3;
+  if( (date < 19000000) && (date > 100 ) ) date += 19000000;
+  *n++ = date;
+
+  *n++ = ONEBYTEINT(p);p++;       /* TYPEOFSST */
+  *n++ = ONEBYTEINT(p);p++;       /* COUNTOFICE */
+  N = *(n-1);
+
+  for( loop = 0; loop < N; loop++) {    /* ICE data */
+    date = THREEBYTEINT(p);             /* Date of ICE field */
+    p += 3;
+    if( (date < 19000000) && (date > 100 ) ) date += 19000000;
+    *n++ = date;
+
+    *n++ = ONEBYTEINT(p);p++;           /* Satellite number */
+  }
+
+  M = ((N+9)/10)*10;
+  if( M == 0 ) M = 10;
+  byteLength = 40 + 16 + M*4;
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_17( fortint * outputArray,
+                  unsigned char * gribSection1,
+                  fortint * bitPointer) {
+  return d_def_17_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_18_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 18 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition18.html
+//
+// Returns the number of bytes (octets) in local definition 18 after
+// byte 40.
+*/
+int loop, N;
+fortint zero = 0, fourBlanks = 0x20202020;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = ONEBYTE(n);n++;          /* ORIGIN */
+
+  MOVE4BYTES(p,n);                /* MODEL */
+  p += 4;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* CONSENSUS_COUNT */
+  N = *(n-1);
+
+  MOVE3BYTES(p,&zero);            /* SPARE */
+  p += 3;
+
+  for( loop = 0; loop < N; loop++) {   /* WMO identifiers */
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+/*
+// Definition 2 has a fixed length section 1 (120 bytes)
+*/
+  for( loop = 0; loop < (15-N); loop++) {   /* PADDING */
+    MOVE4BYTES(p,&fourBlanks);
+    p += 4;
+  }
+
+  return (fortint) (120 - 40);
+}
+
+fortint e_def_18(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_18_(inputArray,gribSection1);
+}
+
+fortint d_def_18_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 18 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition18.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N;
+unsigned char fourBlanks[5] = "    ";
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;       /* TOTAL */
+  *n++ = ONEBYTEINT(p);p++;       /* ORIGIN */
+
+  *n++ = FOURBYTEINT(p);          /* MODEL */
+  p += 4;
+
+  *n++ = ONEBYTEINT(p);p++;       /* CONSENSUS_COUNT */
+  N = *(n-1);
+
+  p += 3;                         /* SPARE */
+
+  for( loop = 0; loop < N; loop++) {    /* WMO identifiers */
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+  }
+/*
+// Definition 2 has a fixed length section 1 (120 bytes)
+*/
+  for( loop = 0; loop < (15-N); loop++)
+    *n++ = FOURBYTEINT(fourBlanks);       /* PADDING */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_18(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_18_(outputArray,gribSection1);
+}
+
+fortint e_def_19_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 19 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition19.html
+//
+// Returns the number of bytes (octets) in local definition 19 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = (unsigned char) 0;n++;   /* ZERO */
+  *p++ = ONEBYTE(n);n++;          /* ENSEMBLESIZE */
+  *p++ = ONEBYTE(n);n++;          /* POWEROFTEN */
+
+  MOVE4BYTES(p,n);                /* WEIGHT */
+  p += 4;
+  n++;
+  MOVE3BYTES(p,n);                /* FIRSTMONTH1 */
+  p += 3;
+  n++;
+  MOVE3BYTES(p,n);                /* LASTMONTH1 */
+  p += 3;
+  n++;
+  MOVE3BYTES(p,n);                /* FIRSTMONTH2 */
+  p += 3;
+  n++;
+  MOVE3BYTES(p,n);                /* LASTMONTH2 */
+  p += 3;
+  n++;
+  *p++ = ONEBYTE(n);n++;          /* EFI order */
+/*
+// Definition 19 has a fixed length section 1 (80 bytes)
+*/
+   for( loop = 0; loop < 11; loop++)
+     *p++ = (unsigned char) 0;         /* PADDING */
+
+  return (fortint) (80-40);
+}
+
+fortint e_def_19(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_19_(inputArray,gribSection1);
+}
+
+fortint d_def_19_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 19 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition19.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = (fortint) 0;  p++;       /* ZERO */
+  *n++ = ONEBYTEINT(p);p++;       /* ENSEMBLESIZE */
+  *n++ = ONEBYTEINT(p);p++;       /* POWEROFTEN */
+
+  *n++ = FOURBYTEINT(p);          /* WEIGHT */
+  p += 4;
+  *n++ = THREEBYTEINT(p);         /* FIRSTMONTH1 */
+  p += 3;
+  *n++ = THREEBYTEINT(p);         /* LASTMONTH1 */
+  p += 3;
+  *n++ = THREEBYTEINT(p);         /* FIRSTMONTH2 */
+  p += 3;
+  *n++ = THREEBYTEINT(p);         /* LASTMONTH2 */
+  p += 3;
+  *n++ = ONEBYTEINT(p);p++;       /* EFI order */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_19(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_19_(outputArray,gribSection1);
+}
+
+fortint e_def_20_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 20 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition20.html
+//
+// Returns the number of bytes (octets) in local definition 20 after
+// byte 40.
+*/
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* ITERATION */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL NUMBER OF ITERATIONS */
+  *p++ = (unsigned char) 0;       /* UNUSED */
+
+/*
+// Definition 20 has a fixed length section 1 (52 bytes)
+*/
+  return (fortint) (52-40);
+}
+
+fortint e_def_20(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_20_(inputArray,gribSection1);
+}
+
+fortint d_def_20_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 20 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition20.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* ITERATION */
+  *n++ = ONEBYTEINT(p);p++;      /* TOTAL NUMBER OF ITERATIONS */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_20(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_20_(outputArray,gribSection1);
+}
+
+fortint e_def_21_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 21 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition21.
+html
+//
+// Returns the number of bytes (octets) in local definition 21 after
+// byte 40.
+*/
+fortint value;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* Forecast or singular vector number */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* Number of iterations */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* Number of singular vectors computed */
+  p += 2;
+  n++;
+  *p++ = ONEBYTE(n);n++;          /* Norm used at initial time */
+  *p++ = ONEBYTE(n);n++;          /* Norm used at final time */
+
+  MOVE4BYTES(p,n);                /* Lat-long multiplication factor */
+  p += 4;
+  n++;
+/*
+// When coding values, set sign bit to 1, if value is negative.
+*/
+  value = *n++;                   /* North-west latitude */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* North-west longitude */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* South-east latitude */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* South-east longitude */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  MOVE4BYTES(p,n);                /* Accuracy */
+  p += 4;
+  n++;
+
+  MOVE2BYTES(p,n);                /* Number of singular vectors evolved */
+  p += 2;
+  n++;
+
+  value = *n++;                   /* Ritz number 1 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  value = *n++;                   /* Ritz number 2 */
+  if( value < 0 ) value = 0x80000000 | (-value);
+  MOVE4BYTES(p,&value);
+  p += 4;
+
+  *p++ = ONEBYTE(n);n++;          /* Observation offset period */
+  *p++ = ONEBYTE(n);n++;          /* Forecast lead time */
+  *p++ = ONEBYTE(n);n++;          /* WMO id of data originating centre */
+
+  MOVE2BYTES(p,n);                /* Method number */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* Total number of forecasts in ensemble */
+  p += 2;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* Shape of verification region */
+  *p++ = (unsigned char) 0;       /* Reserved. Set to zero */
+  n++;
+
+
+/*
+// Definition 21 has a fixed length section 1 (100 bytes)
+*/
+  return (fortint) (100-40);
+} 
+
+fortint e_def_21(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_21_(inputArray,gribSection1);
+}
+
+fortint d_def_21_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 21 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition21.
+html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint value;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);          /* Forecast or singular vector number */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* Number of iterations */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* Number of singular vectors computed */
+  p += 2;
+  *n++ = ONEBYTEINT(p);p++;      /* Norm used at initial time */
+  *n++ = ONEBYTEINT(p);p++;      /* Norm used at final time */
+
+  *n++ = FOURBYTEINT(p);         /* Lat-long multiplication factor */
+  p += 4;
+
+  value = FOURBYTEINT(p);        /* North-west latitude */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);        /* North-west longitude */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);        /* South-east latitude */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);        /* South-east longitude */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  *n++ = FOURBYTEINT(p);         /* Accuracy */
+  p += 4;
+  *n++ = TWOBYTEINT(p);          /* Number of singular vectors evolved */
+  p += 2;
+
+  value = FOURBYTEINT(p);        /* Ritz number 1 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  value = FOURBYTEINT(p);        /* Ritz number 2 */
+  p += 4;
+  if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+  *n++ = value;
+
+  *n++ = ONEBYTEINT(p);p++;      /* Observation offset period */
+  *n++ = ONEBYTEINT(p);p++;      /* Forecast lead time */
+  *n++ = ONEBYTEINT(p);p++;      /* WMO id of data originating centre */
+
+  *n++ = TWOBYTEINT(p);          /* Method number */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* Total number of forecasts in ensemble */
+  p += 2;
+
+  *n++ = ONEBYTEINT(p);p++;      /* Shape of verification region */
+
+  p++;                           /* Reserved. Set to zero */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_21(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_21_(outputArray,gribSection1);
+}
+
+fortint e_def_22_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 22 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition22.html
+//
+// Returns the number of bytes (octets) in local definition 22 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* NUMBER */
+  p += 2;
+  n++;
+
+  MOVE2BYTES(p,n);                /* TOTAL */
+  p += 2;
+  n++;
+
+  MOVE2BYTES(p,n);                /* SYSTEM */
+  p += 2;
+  n++;
+
+  MOVE2BYTES(p,n);                /* METHOD */
+  p += 2;
+  n++;
+
+  MOVE4BYTES(p,n);                /* REFERENCE DATE */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* CLIMATE DATE (FROM) */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* CLIMATE DATE (TO) */
+  p += 4;
+  n++;
+
+  return (fortint) (69);
+}
+
+fortint e_def_22(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_22_(inputArray,gribSection1);
+}
+
+fortint d_def_22_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 22 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition22.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);          /* NUMBER */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* TOTAL */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* SYSTEM */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* METHOD */
+  p += 2;
+  *n++ = FOURBYTEINT(p);         /* REFERENCE DATE */
+  p += 4;
+  *n++ = FOURBYTEINT(p);         /* CLIMATE DATE (FROM) */
+  p += 4;
+  *n++ = FOURBYTEINT(p);         /* CLIMATE DATE (TO) */
+  p += 4;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_22(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_22_(outputArray,gribSection1);
+}
+
+fortint e_def_23_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 23 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition23.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 4.
+//
+// Returns the number of bytes (octets) in local definition 23 after
+// byte 40.
+*/
+fortint byteLength;
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+fortint zero = 0;
+unsigned char* total;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* NUMBER */
+  p += 2;
+  n++;
+
+  total = p + 29;
+  MOVE2BYTES(total,n);            /* TOTAL */
+  n++;
+
+  MOVE2BYTES(p,n);                /* SYSTEM */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* METHOD */
+  p += 2;
+  n++;
+  MOVE4BYTES(p,n);                /* MONTH */
+  p += 4;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* PERIOD */
+
+  MOVE2BYTES(p,n);                /* FORECAST MONTH */
+  p += 2;
+  n++;
+
+  MOVE4BYTES(p,n);                /* REFERENCE DATE */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* CLIMATE DATE (FROM) */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* CLIMATE DATE (TO) */
+  p += 4;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* THRESHOLD UNITS */
+
+  *p++ = ONEBYTE(n);n++;          /* THRESHOLD INDICATOR */
+
+  MOVE2BYTES(p,n);                /* LOWER THRESHOLD VALUE */
+  p += 2;
+  n++;
+  MOVE2BYTES(p,n);                /* UPPER THRESHOLD VALUE */
+  p += 2;
+  n++;
+
+/*
+// Skip the total (already packed above)
+*/
+  p +=2;
+
+  MOVE2BYTES(p,&zero);             /* SPARE (SET TO ZERO) */
+  p += 2;
+  n += 4;
+
+  byteLength = 40 + (fortint) (p-gribSection1);
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_23(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+
+  return e_def_23_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_23_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 23 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition23.html
+//
+// *bitPointer is updated by the number of bits in local definition 4.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint byteLength;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+unsigned char* total;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);          /* NUMBER */
+  p += 2;
+
+  total = p + 29;
+  *n++ = TWOBYTEINT(total);      /* TOTAL */
+
+  *n++ = TWOBYTEINT(p);          /* SYSTEM */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* METHOD */
+  p += 2;
+  *n++ = FOURBYTEINT(p);         /* MONTH */
+  p += 4;
+  *n++ = ONEBYTEINT(p);          /* PERIOD */
+  p++;
+  *n++ = TWOBYTEINT(p);          /* FORECAST MONTH */
+  p += 2;
+  *n++ = FOURBYTEINT(p);         /* REFERENCE DATE */
+  p += 4;
+  *n++ = FOURBYTEINT(p);         /* CLIMATE DATE (FROM) */
+  p += 4;
+  *n++ = FOURBYTEINT(p);         /* CLIMATE DATE (TO) */
+  p += 4;
+  *n++ = ONEBYTEINT(p);          /* THRESHOLD UNITS */
+  p++;
+  *n++ = ONEBYTEINT(p);          /* THRESHOLD INDICATOR */
+  p++;
+  *n++ = TWOBYTEINT(p);          /* LOWER THRESHOLD */
+  p += 2;
+  *n++ = TWOBYTEINT(p);          /* UPPER THRESHOLD */
+  p += 2;
+
+  *n++ = 0;                      /* SPARE (SET TO ZERO) */
+  *n++ = 0;
+  *n++ = 0;
+  *n++ = 0;
+  p += 4;
+
+  byteLength = 40 + (fortint) (p - gribSection1);
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_23(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+
+  return d_def_23_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_24_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 24 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition24.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 4.
+//
+// Returns the number of bytes (octets) in local definition 24 after
+// byte 40.
+*/
+fortint byteLength;
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+fortint zero = 0;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  MOVE2BYTES(p,n);                /* Satellite identifier */
+  p += 2;
+  n++;
+
+  MOVE2BYTES(p,n);                /* Instrument identifier */
+  p += 2;
+  n++;
+
+  MOVE2BYTES(p,n);                /* Channel number */
+  p += 2;
+  n++;
+
+  *p++ = ONEBYTE(n);n++;          /* Function code */
+
+  byteLength = 40 + (fortint) (p-gribSection1);
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_24(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+
+  return e_def_24_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_24_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 24 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition24.html
+//
+// *bitPointer is updated by the number of bits in local definition 4.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint byteLength;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+unsigned char* total;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = TWOBYTEINT(p);          /* Satellite identifier */
+  p += 2;
+
+  *n++ = TWOBYTEINT(p);          /* Instrument identifier */
+  p += 2;
+
+  *n++ = TWOBYTEINT(p);          /* Channel number */
+  p += 2;
+
+  *n++ = ONEBYTEINT(p);          /* Function code */
+  p++;
+
+  byteLength = 40 + (fortint) (p - gribSection1);
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_24(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+
+  return d_def_24_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_25_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 25 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition25.html
+//
+// Returns the number of bytes (octets) in local definition 25 after
+// byte 40.
+*/
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* component index */
+  *p++ = ONEBYTE(n);n++;          /* number of components */
+  *p++ = ONEBYTE(n);n++;          /* model error type */
+
+  return (fortint) (p-gribSection1);
+}
+
+fortint e_def_25(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_25_(inputArray,gribSection1);
+}
+
+fortint d_def_25_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 25 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition25.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;      /* component index */
+  *n++ = ONEBYTEINT(p);p++;      /* number of components */
+  *n++ = ONEBYTEINT(p);p++;      /* model error type */
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_25(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_25_(outputArray,gribSection1);
+}
+
+fortint e_def_50_(fortint * inputArray, unsigned char * gribSection1) {
+/*
+// Encodes ECMWF local definition 50 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition50.html
+//
+// Returns the number of bytes (octets) in local definition 50 after
+// byte 40.
+*/
+int loop;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = ONEBYTE(n);n++;          /* NUMBER */
+  *p++ = ONEBYTE(n);n++;          /* TOTAL */
+  *p++ = ONEBYTE(n);n++;          /* MODEL */
+
+  MOVE4BYTES(p,n);                /* NORTHWESTLAT */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* NORTHWESTLON */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* SOUTHWESTLAT */
+  p += 4;
+  n++;
+
+  MOVE4BYTES(p,n);                /* SOUTHWESTLON */
+  p += 4;
+  n++;
+/*
+// ECMWF additions
+*/
+  *p++ = ONEBYTE(n);n++;          /* ORIGINALPARAM */
+  *p++ = ONEBYTE(n);n++;          /* ORIGINALTABLE */
+
+  for( loop = 70; loop < 116; loop++ )
+    *p++ = (unsigned char) 0;     /* PADDING */
+  n += 10;
+/*
+// Optional data
+*/
+  for( loop = 0; loop < 46; loop++) {   /* Optional data */
+    MOVE4BYTES(p,n);
+    p += 4;
+    n++;
+  }
+/*
+// Definition 50 has a fixed length section 1 (300 bytes)
+*/
+  return (fortint) (300-40);
+}
+
+fortint e_def_50(fortint * inputArray, unsigned char * gribSection1) {
+  return e_def_50_(inputArray,gribSection1);
+}
+
+fortint d_def_50_(fortint * outputArray, unsigned char * gribSection1) {
+/*
+// Decodes ECMWF local definition 50 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition50.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBER */
+  *n++ = ONEBYTEINT(p);p++;       /* TOTAL */
+  *n++ = ONEBYTEINT(p);p++;       /* MODEL */
+
+  *n++ = FOURBYTEINT(p);          /* NORTHWESTLAT */
+  p += 4;
+  *n++ = FOURBYTEINT(p);          /* NORTHWESTLON */
+  p += 4;
+  *n++ = FOURBYTEINT(p);          /* SOUTHWESTLAT */
+  p += 4;
+  *n++ = FOURBYTEINT(p);          /* SOUTHWESTLON */
+  p += 4;
+/*
+// ECMWF additions
+*/
+  *n++ = ONEBYTEINT(p);p++;       /* ORIGINALPARAM */
+  *n++ = ONEBYTEINT(p);p++;       /* ORIGINALTABLE */
+
+  for( loop = 0; loop < 10; loop++ )
+    *n++ = 0;
+
+  p += 46;
+/*
+// Optional data
+*/
+  for( loop = 0; loop < 46; loop++) {
+    *n++ = FOURBYTEINT(p);
+    p += 4;
+  }
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_50(fortint * outputArray, unsigned char * gribSection1) {
+  return d_def_50_(outputArray,gribSection1);
+}
+
+fortint e_def_190_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 190 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition190.html
+//
+// collectedLocalDefinitionBytes is an array containing the ready-prepared
+// collected local definition bytes of the multiple ECMWF local definitions.
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 190.
+//
+// Returns the number of bytes (octets) in local definition 190 after
+// byte 40.
+*/
+int loop, N;
+fortint byteLength;
+fortint totalBytes = 0;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = (unsigned char) 0;       /* ZERO1 */
+  n++;
+  *p++ = (unsigned char) 0;       /* ZERO2 */
+  n++;
+  *p++ = ONEBYTE(n);n++;          /* NUMBEROFDEFS */
+  N = *(n-1);
+
+  for( loop = 0; loop < N; loop++) {
+    *p++ = ONEBYTE(n);n++;          /* ECMWF local definition number */
+    totalBytes += *n;
+    MOVE2BYTES(p,n);                /* Count of bytes */
+    p += 2;
+    n++;
+  }
+/*
+// Transfer the ready-prepared collected local definition bytes
+*/
+  memcpy(p,collectedLocalDefinitionBytes,totalBytes);
+ 
+  byteLength = 40 + 12 + N*3 + totalBytes;
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_190( fortint * inputArray,
+                   unsigned char * gribSection1,
+                   fortint * collectedLocalDefinitionBytes,
+                   fortint * bitPointer) {
+  return e_def_190_(inputArray,gribSection1,collectedLocalDefinitionBytes,
+                    bitPointer);
+}
+
+fortint d_def_190_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 190 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition190.html
+//
+// *bitPointer is updated by the number of bits in local definition 190.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, N, byteLength;
+fortint totalBytes = 0;
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = (fortint) 0;  p++;       /* ZERO1 */
+  *n++ = (fortint) 0;  p++;       /* ZERO2 */
+  *n++ = ONEBYTEINT(p);p++;       /* NUMBEROFDEFS */
+  N = *(n-1);
+
+  for( loop = 0; loop < N; loop++) {
+    *n++ = ONEBYTEINT(p);p++;       /* ECMWF local definition number */
+    *n++ = TWOBYTEINT(p);           /* Count of bytes */
+    p += 2;
+    totalBytes += *(n-1);
+  }
+/*
+// Transfer the collected local definition bytes
+*/
+  memcpy(collectedLocalDefinitionBytes,p,totalBytes);
+
+  byteLength = 40 + 12 + N*3 + totalBytes;
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) ((totalBytes+sizeof(fortint)-1)/sizeof(fortint) +
+                     n - outputArray);
+}
+
+fortint d_def_190( fortint * outputArray,
+                   unsigned char * gribSection1,
+                   fortint * collectedLocalDefinitionBytes,
+                   fortint * bitPointer) {
+  return d_def_190_(outputArray,gribSection1,collectedLocalDefinitionBytes,
+                    bitPointer);
+}
+
+fortint e_def_191_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Encodes ECMWF local definition 191 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition191.html
+//
+// If *bitPointer is not equal to zero, the length of the GRIB section
+// 1 is stored in 3 bytes starting at (gribSection1-40).
+// *bitPointer is updated by the number of bits in local definition 191.
+//
+// Returns the number of bytes (octets) in local definition 191 after
+// byte 40.
+*/
+int loop, i, I, N, M, size = sizeof(fortint);
+fortint byteLength;
+fortint * n = inputArray;
+unsigned char * p = gribSection1;
+
+  encodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *p++ = (unsigned char) 0;       /* ZERO1 */
+  n++;
+  *p++ = (unsigned char) 0;       /* ZERO2 */
+  n++;
+  *p++ = ONEBYTE(n);n++;          /* MAJOR */
+  *p++ = ONEBYTE(n);n++;          /* MINOR */
+  *p++ = ONEBYTE(n);n++;          /* ORIGINALSUBCENTRE */
+
+  for( loop = 0; loop < 4; loop++)
+    *p++ = (unsigned char) 0;
+
+  n += 4;
+
+  MOVE2BYTES(p,n);                /* NUMBEROFBYTES */
+  p += 2;
+  n++;
+  N = *(n-1);
+
+  I = (N+size-1)/size;
+  for( loop = 0; loop < I; loop++) {     /* Data descriptor bytes */
+    unsigned char * np = (unsigned char *) n;
+    for( i = 0; i < size; i++ ) {
+      *p++ = *np++;
+    }
+    n++;
+  }
+/*
+// The data entries are padded with zeroes to make upto a multiple of (60+80*M)
+*/
+  M = 60;
+  do { M += 80; } while( M < (60 + N) );
+
+  for( loop = N; loop < M; loop++) *p++ = (unsigned char) 0;
+ 
+  byteLength = M;
+  if( *bitPointer ) {
+    MOVE3BYTES(gribSection1-40,&byteLength);
+    *bitPointer += (byteLength-40)*8;
+  }
+
+  return (fortint) byteLength;
+}
+
+fortint e_def_191( fortint * inputArray,
+                   unsigned char * gribSection1,
+                   fortint * bitPointer) {
+  return e_def_191_(inputArray,gribSection1,bitPointer);
+}
+
+fortint d_def_191_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer) {
+/*
+// Decodes ECMWF local definition 191 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition191.html
+//
+// *bitPointer is updated by the number of bits in local definition 191.
+//
+// Returns the number of array elements inserted in outputArray
+*/
+int loop, i, I, N, M, byteLength, size = sizeof(fortint);
+fortint * n = outputArray;
+unsigned char * p = gribSection1;
+
+  decodeMarsPart(n,p);
+  p += 9;
+  n += 5;
+
+  *n++ = (fortint) 0;  p++;       /* ZERO */
+  *n++ = (fortint) 0;  p++;       /* ZERO */
+  *n++ = ONEBYTEINT(p);p++;       /* MAJOR */
+  *n++ = ONEBYTEINT(p);p++;       /* MINOR */
+  *n++ = ONEBYTEINT(p);p++;       /* ORIGINALSUBCENTRE */
+
+  for( loop = 0; loop < 4; loop++ ) {
+    *n++ = (fortint) 0;
+    p++;                          /* ZEROES */
+  }
+
+  *n++ = TWOBYTEINT(p);           /* NUMBEROFBYTES */
+  N = *(n-1);
+  p += 2;
+
+  I = (N+size-1)/size;
+  for( loop = 0; loop < I; loop++) {     /* Data descriptor bytes */
+    unsigned char * np = (unsigned char *) n;
+    for( i = 0; i < size; i++ ) {
+      *np++ = *p++;
+    }
+    n++;
+  }
+/*
+// The data entries are padded with zeroes to make upto a multiple of (60+80*M)
+*/
+  M = 60;
+  do { M += 80; } while( M < (60 + N) );
+
+  byteLength = M;
+
+  if( *bitPointer ) *bitPointer += (byteLength-40)*8;
+
+  return (fortint) (n - outputArray);
+}
+
+fortint d_def_191( fortint * outputArray,
+                   unsigned char * gribSection1,
+                   fortint * bitPointer) {
+  return d_def_191_(outputArray,gribSection1,bitPointer);
+}
+
+fortint e_def_x_(
+  fortint * definitionNumber,
+  fortint * inputArray,
+  unsigned char * gribSection1 ) {
+/*
+// Calls the encoding routine for the ECMWF local definition.
+*/
+int number = (int) *definitionNumber;
+fortint zero = 0;
+
+  switch( number ) {
+
+    case 1:
+      return e_def_1_(inputArray,gribSection1);
+
+    case 2:
+      return e_def_2_(inputArray,gribSection1);
+
+    case 3:
+      return e_def_3_(inputArray,gribSection1);
+
+    case 4:
+      return e_def_4_(inputArray,gribSection1,&zero) - 40;
+
+    case 5:
+      return e_def_5_(inputArray,gribSection1);
+
+    case 6:
+      return e_def_6_(inputArray,gribSection1,&zero) - 40;
+
+    case 7:
+      return e_def_7_(inputArray,gribSection1);
+
+    case 8:
+      return e_def_8_(inputArray,gribSection1);
+
+    case 9:
+      return e_def_9_(inputArray,gribSection1);
+
+    case 10:
+      return e_def_10_(inputArray,gribSection1,&zero) - 40;
+
+    case 11:
+      return e_def_11_(inputArray,gribSection1);
+
+    case 13:
+      return e_def_13_(inputArray,gribSection1,&zero) - 40;
+
+    case 14:
+      return e_def_14_(inputArray,gribSection1);
+
+    case 15:
+      return e_def_15_(inputArray,gribSection1);
+
+    case 16:
+      return e_def_16_(inputArray,gribSection1);
+
+    case 17:
+      return e_def_17_(inputArray,gribSection1,&zero) - 40;
+
+    case 18:
+      return e_def_18_(inputArray,gribSection1);
+
+    case 19:
+      return e_def_19_(inputArray,gribSection1);
+
+    case 20:
+      return e_def_20_(inputArray,gribSection1);
+
+    case 21:
+      return e_def_21_(inputArray,gribSection1);
+
+    case 22:
+      return e_def_22_(inputArray,gribSection1);
+
+    case 23:
+      return e_def_23_(inputArray,gribSection1,&zero) - 40;
+
+    case 24:
+      return e_def_24_(inputArray,gribSection1,&zero) - 40;
+
+    case 50:
+      return e_def_50_(inputArray,gribSection1);
+
+    case 191:
+      return e_def_191_(inputArray,gribSection1,&zero);
+
+    default:
+      return (fortint) -1;
+  }
+}
+
+fortint e_def_x( fortint * definitionNumber,
+                 fortint * outputArray,
+                 unsigned char * gribSection1 ) {
+  return e_def_x_(definitionNumber,outputArray,gribSection1);
+}
+
+fortint d_def_x_(
+  fortint * definitionNumber,
+  fortint * outputArray,
+  unsigned char * gribSection1 ) {
+/*
+// Calls the encoding routine for the ECMWF local definition.
+*/
+int number = (int) *definitionNumber;
+fortint zero = 0;
+
+  switch( number ) {
+
+    case 1:
+      return d_def_1_(outputArray,gribSection1);
+
+    case 2:
+      return d_def_2_(outputArray,gribSection1);
+
+    case 3:
+      return d_def_3_(outputArray,gribSection1);
+
+    case 4:
+      return d_def_4_(outputArray,gribSection1,&zero);
+
+    case 5:
+      return d_def_5_(outputArray,gribSection1);
+
+    case 6:
+      return d_def_6_(outputArray,gribSection1,&zero);
+
+    case 7:
+      return d_def_7_(outputArray,gribSection1);
+
+    case 8:
+      return d_def_8_(outputArray,gribSection1);
+
+    case 9:
+      return d_def_9_(outputArray,gribSection1);
+
+    case 10:
+      return d_def_10_(outputArray,gribSection1,&zero);
+
+    case 11:
+      return d_def_11_(outputArray,gribSection1);
+
+    case 13:
+      return d_def_13_(outputArray,gribSection1,&zero);
+
+    case 14:
+      return d_def_14_(outputArray,gribSection1);
+
+    case 15:
+      return d_def_15_(outputArray,gribSection1);
+
+    case 16:
+      return d_def_16_(outputArray,gribSection1);
+
+    case 17:
+      return d_def_17_(outputArray,gribSection1,&zero);
+
+    case 18:
+      return d_def_18_(outputArray,gribSection1);
+
+    case 19:
+      return d_def_19_(outputArray,gribSection1);
+
+    case 20:
+      return d_def_20_(outputArray,gribSection1);
+
+    case 21:
+      return d_def_21_(outputArray,gribSection1);
+
+    case 22:
+      return d_def_22_(outputArray,gribSection1);
+
+    case 23:
+      return d_def_23_(outputArray,gribSection1,&zero);
+
+    case 24:
+      return d_def_24_(outputArray,gribSection1,&zero);
+
+    case 50:
+      return d_def_50_(outputArray,gribSection1);
+
+    case 191:
+      return d_def_191_(outputArray,gribSection1,&zero);
+
+    default:
+      return (fortint) -1;
+  }
+}
+
+fortint d_def_x( fortint * definitionNumber,
+                 fortint * outputArray,
+                 unsigned char * gribSection1 ) {
+  return d_def_x_(definitionNumber,outputArray,gribSection1);
+}
+
+fortint e_190_x_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes) {
+/*
+// Encodes ECMWF local definition 190 (from byte 41 onwards) into
+// gribSection1 using integer array values in inputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition190.html
+//
+// collectedLocalDefinitionBytes is an array containing the ready-prepared
+// collected local definition bytes of the multiple ECMWF local definitions.
+//
+// Returns the number of bytes (octets) in local definition 190 after
+// byte 40.
+*/
+fortint zero = 0;
+
+  return e_def_190_(inputArray,gribSection1,collectedLocalDefinitionBytes,&zero);
+
+}
+
+fortint e_190_x( fortint * inputArray,
+                 unsigned char * gribSection1,
+                 fortint * collectedLocalDefinitionBytes) {
+  return e_190_x_(inputArray,gribSection1,collectedLocalDefinitionBytes);
+}
+
+fortint d_190_x_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes) {
+/*
+// Decodes ECMWF local definition 190 (from byte 41 onwards) from
+// gribSection1 into integer array values in outputArray.
+//
+// inputArray[0] corresponds to KSEC1(37) in the description at
+// http://www.ecmwf.int/publications/manuals/libraries/gribex/localDefinition190.html
+//
+// Returns the number of array elements inserted in outputArray
+*/
+fortint zero = 0;
+
+ return d_def_190_(outputArray,gribSection1,collectedLocalDefinitionBytes,&zero);
+
+}
+
+fortint d_190_x( fortint * outputArray,
+                 unsigned char * gribSection1,
+                 fortint * collectedLocalDefinitionBytes) {
+  return d_190_x_(outputArray,gribSection1,collectedLocalDefinitionBytes);
+}
+
+fortint jmemove_(
+  fortint * destination,
+  fortint * destinationOffset,
+  fortint * source,
+  fortint * sourceOffset,
+  fortint * length ) {
+unsigned char* Destination = (unsigned char*)destination + (*destinationOffset);
+unsigned char* Source = (unsigned char*)source + (*sourceOffset);
+size_t n = (size_t) (*length);
+void * result;
+
+  result = memmove(Destination, Source, n);
+  if( result == NULL )
+    return (fortint) -1;
+  else
+    return (fortint) ((*destinationOffset)+ (*length));
+}
+
+fortint jmemove( fortint * destination,
+                 fortint * destinationOffset,
+                 fortint * source,
+                 fortint * sourceOffset,
+                 fortint * length ) {
+  return jmemove_(destination,destinationOffset,source,sourceOffset,length);
+}
diff --git a/gribex/ECMWFdefinitions.h b/gribex/ECMWFdefinitions.h
new file mode 100755
index 0000000..f4074e3
--- /dev/null
+++ b/gribex/ECMWFdefinitions.h
@@ -0,0 +1,353 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef ECMWFDEFNS_H
+#define ECMWFDEFNS_H
+
+#include "fortint.h"
+
+void encodeMarsPart(fortint * inputArray, unsigned char * gribSection1);
+
+void decodeMarsPart(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_1(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_1(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_2(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_2(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_3(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_3(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_4(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_4(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_5(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_5(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_6(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_6(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_7(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_7(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_8(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_8(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_9(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_9(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_10(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_10(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_11(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_11(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_13(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_13(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_14(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_14(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_15(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_15(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_16(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_16(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_17(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_17(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_18(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_18(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_19(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_19(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_20(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_20(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_21(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_21(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_22(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_22(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_23(
+fortint * inputArray, unsigned char * gribSection1, fortint * bitPointer);
+
+fortint d_def_23(
+fortint * outputArray, unsigned char * gribSection1, fortint * bitPointer);
+
+fortint e_def_50(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_50(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_190(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes,
+  fortint * bitPointer);
+
+fortint d_def_190(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes,
+  fortint * bitPointer);
+
+fortint e_def_191(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_191(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_x(
+  fortint * definitionNumber,
+  fortint * outputArray,
+  unsigned char * gribSection1 );
+
+fortint d_def_x(
+  fortint * definitionNumber,
+  fortint * outputArray,
+  unsigned char * gribSection1 );
+
+fortint jmemove(
+  fortint * destination,
+  fortint * destinationOffset,
+  fortint * source,
+  fortint * sourceOffset,
+  fortint * length );
+
+fortint e_def_1_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_1_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_2_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_2_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_3_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_3_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_4_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_4_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_5_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_5_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_6_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_6_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_7_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_7_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_8_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_8_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_9_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_9_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_10_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_10_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_11_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_11_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_13_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_13_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_14_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_14_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_15_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_15_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_16_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_16_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_17_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_17_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_18_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_18_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_19_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_19_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_20_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_20_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_21_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_21_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_50_(fortint * inputArray, unsigned char * gribSection1);
+
+fortint d_def_50_(fortint * outputArray, unsigned char * gribSection1);
+
+fortint e_def_190_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes,
+  fortint * bitPointer);
+
+fortint d_def_190_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * collectedLocalDefinitionBytes,
+  fortint * bitPointer);
+
+fortint e_def_191_(
+  fortint * inputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint d_def_191_(
+  fortint * outputArray,
+  unsigned char * gribSection1,
+  fortint * bitPointer);
+
+fortint e_def_x(
+  fortint * definitionNumber,
+  fortint * outputArray,
+  unsigned char * gribSection1 );
+
+fortint d_def_x(
+  fortint * definitionNumber,
+  fortint * outputArray,
+  unsigned char * gribSection1 );
+
+fortint jmemove_(
+  fortint * destination,
+  fortint * destinationOffset,
+  fortint * source,
+  fortint * sourceOffset,
+  fortint * length );
+
+#define ONEBYTEINT(a)   (fortint) ( *(a) )
+#define TWOBYTEINT(a)   (fortint) ( (*(a))<<8 | (*((a)+1))<<0 )
+#define THREEBYTEINT(a) (fortint) (TWOBYTEINT((a))<<8 | (*((a)+2))<<0 )
+#define FOURBYTEINT(a)  (fortint) (THREEBYTEINT((a))<<8 | (*((a)+3))<<0 )
+
+#define ONEBYTE(n)      ((*(n)>> 0) & 0xFF)
+#define MOVE1BYTE(p,n)  ( *(p)     = ((*(n)>> 0) & 0xFF) ) 
+#define MOVE2BYTES(p,n) ( *(p)     = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>> 0) & 0xFF) )
+#define MOVE3BYTES(p,n) ( *(p)     = ((*(n)>>16) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+2) = ((*(n)>> 0) & 0xFF) )
+#define MOVE4BYTES(p,n) ( *(p)     = ((*(n)>>24) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>>16) & 0xFF) ) , \
+                        ( *((p)+2) = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+3) = ((*(n)>> 0) & 0xFF) )
+
+#endif /* End of ECMWFDEFNS_H */
diff --git a/gribex/Makefile b/gribex/Makefile
new file mode 100755
index 0000000..7d07075
--- /dev/null
+++ b/gribex/Makefile
@@ -0,0 +1,31 @@
+#
+#                                 Makefile for libemos/gribex
+#
+LIBRARY      = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c) 
+#
+#
+.PRECIOUS: $(LIBRARY) 
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) *.f
+
diff --git a/gribex/Makefile.in b/gribex/Makefile.in
new file mode 100755
index 0000000..45629b1
--- /dev/null
+++ b/gribex/Makefile.in
@@ -0,0 +1,37 @@
+#
+#                                 Makefile for gribex
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+LIB = depl
+CNAME = comp
+
+LIBRARY  = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c) 
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) *.f
+
diff --git a/gribex/Makefile.shared b/gribex/Makefile.shared
new file mode 100755
index 0000000..2f65824
--- /dev/null
+++ b/gribex/Makefile.shared
@@ -0,0 +1,32 @@
+#
+#                                 Makefile for libemos/gribex
+#
+LIBRARY      = ../lib$(LIB)$(R64).so
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+PROFILE=$(SHLIB)
+
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c) 
+#
+#
+.PRECIOUS: $(LIBRARY) 
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(CC) $(DYNLINKFLAGS) $? -o $@
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) *.f
+
diff --git a/gribex/README b/gribex/README
new file mode 100755
index 0000000..4cf7a12
--- /dev/null
+++ b/gribex/README
@@ -0,0 +1,5 @@
+This directory contains a mixture of software, most of which was in the GRIB 
+decoding and encoding update library.  The software in this directory is used 
+to make part of the libemos library.
+
+John Chambers 30th July 1993.
diff --git a/gribex/abortx.F b/gribex/abortx.F
new file mode 100755
index 0000000..af79387
--- /dev/null
+++ b/gribex/abortx.F
@@ -0,0 +1,153 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ABORTX (HNAME)
+C
+C---->
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C     Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ABORTX (HNAME)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HNAME      - Name of calling routine.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C     Method.
+C     -------
+C
+C     Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+#ifdef VAX
+C     EXIT
+#endif
+#if (defined IBM) && (!defined rs6000)
+C     SYSABN
+#endif
+#ifdef CRAY
+C     ABORT
+#endif
+#if defined(sun) || defined (sgi) || (defined rs6000)
+C     ABORT
+#endif
+#ifdef CYBER
+C     ABORT
+#endif
+#ifdef __uxp__
+C     ABORT
+#endif
+#ifdef __hpux
+C     JABORT
+#endif
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Comments.
+C     ---------
+C
+#ifdef VAX
+C     VAX version of routine.
+#endif
+#if (defined IBM) && (!defined rs6000)
+C     IBM version of routine.
+#endif
+#ifdef CRAY
+C     Cray version of routine.
+#endif
+#if defined(sun) || defined (sgi)
+C     SUN/SGI version of routine.
+#endif
+#ifdef CYBER
+C     Cyber version of routine.
+#endif
+#ifdef __uxp__
+C     Fujitsu version of routine.
+#endif
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE(GRPRSM,9001) HNAME
+C
+#ifdef VAX
+      CALL EXIT (-1)
+#endif
+#if (defined IBM) && (!defined rs6000)
+      CALL SYSABN (1)
+#endif
+#ifdef CRAY
+      CALL ABORT
+#endif
+#ifdef CYBER
+      CALL ABORT ('US',0,' ')
+#endif
+#if defined(__uxp__)
+      CALL ABORT
+#endif
+#if defined(sun) || defined (sgi) || (defined rs6000)
+      CALL ABORT
+#endif
+#ifdef __hpux
+      CALL JABORT
+#endif
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
diff --git a/gribex/analsw.F b/gribex/analsw.F
new file mode 100755
index 0000000..174b44a
--- /dev/null
+++ b/gribex/analsw.F
@@ -0,0 +1,397 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE ANALSW(IBLOCKS,LOGICS,ILENGL,INTEGS,ILENGI,
+     S                  REALSW,ILENGR)
+C---->
+C
+C     G.K.SAKELLARIDES  ECMWF        15/10/85.
+C
+C     PURPOSE.
+C     --------
+C
+C          TO GET AS OUTPUT THE NAME AND CONTENT OF VARIABLES WHICH
+C          APPEAR IN THE DECODED MARS MODEL SWITCH RECORD
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *ALALSW(IBLOCKS,LOGICS,ILENGL,INTEGS,ILENGI,REALSW,
+C                        ILENGR)
+C        WHERE:
+C              INPUT PARAMETERS
+C              1.*IBLOCKS* INTEGER ARRAY OF LENGTH 29 CONTAINING
+C                          THE FOLLOWING INFORMATIONS OF BLOCK1.
+C              2.*LOGICS* LOGICAL ARRAY  WHICH CONTAINS THE LOGICALS.
+C              3.*ILENGL* ACTUAL LENGTH OF LOGICALS
+C              4.*INSOUT* INTEGER ARRAY WHICH CONTAINS THE INTEGER
+C              5.*ILENGI* ACTUAL LENGTH OF INTEGER
+C              6.*REALSW* REAL ARRAY WHICH CONTAINS THE REALS.
+C              7.*ILENGR* ACTUAL LENGTH OF REALS
+C
+C     EXTERNALS.
+C     ----------
+C
+C         *NONE*
+C----<
+C
+      CHARACTER *45,Y1(26),YL(26)
+      CHARACTER *12,YY
+      CHARACTER *45,YI1(6),YI2,YI3(14),YI4,YI5,YI6(10),YI7,YI8,YI9
+      CHARACTER *45,YR1(2),YR2,YR3(53),YR4,YR5,YR6,YR7,YR8(26)
+      DIMENSION INTEGS(*),REALSW(*),IBLOCKS(*)
+      LOGICAL LOGICS(*)
+      DATA YY/'   POSITION='/
+      DATA (Y1(I),I=1,14)
+     D       /'               G                            =',
+     D        '               R                            =',
+     D        '               I                            =',
+     D        '               B                            =',
+     D        'IDENTIFICATION OF CENTRE.                   =',
+     D        'MODEL IDENTIFICATION                        =',
+     D        'GRID DEFINITION                             =',
+     D        'FLAG (CODE TABLE 1)                         =',
+     D        'PARAM. INDICATING THE MARS MODEL SWITCH REC.=',
+     D        'TYPE OF LEVEL (CODE TABLE 3)                =',
+     D        'VALUE 1 OF LEVEL (CODE TABLE 3)             =',
+     D        'VALUE 2 OF LEVEL (CODE TABLE 3)             =',
+     D        'YEAR    OF INITIAL DATA                     =',
+     D        'MONTH   OF INITIAL DATA                     ='/
+      DATA (Y1(I),I=15,26)
+     D       /'DAY     OF INITIAL DATA                     =',
+     D        'HOUR    OF INITIAL DATA                     =',
+     D        'MINUTE  OF INITIAL DATA                     =',
+     D        'TIME UNIT (CODE TABLE 4)                    =',
+     D        'TIME RANGE 1                                =',
+     D        'TIME RANGE 2                                =',
+     D        'TIME RANGE FLAG (CODE TABLE 5)              =',
+     D        'LENGTH OF DATA BLOCK (OCTET)                =',
+     D        'STARTING ADDRESS OF LOGICAL SECTION(OCTET)  =',
+     D        'STARTING ADDRESS OF INTEGER SECTION(OCTET)  =',
+     D        'STARTING ADDRESS OF REAL    SECTION(OCTET)  =',
+     D        'LENGTH           OF REAL    SECTION(OCTET)  ='/
+      DATA (YL(I),I=1,15)
+     D       /'LZLS       LOGICAL FROM COMMON *COMDIZ*     =',
+     D        'LSIMDT     LOGICAL FROM COMMON *COMDSW*     =',
+     D        'LSIMZQ     LOGICAL FROM COMMON *COMDSW*     =',
+     D        'LVTMPC1    LOGICAL FROM COMMON *COMDSW*     =',
+     D        'LVTMPC2    LOGICAL FROM COMMON *COMDSW*     =',
+     D        'LLDIFF     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLROSS     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLPROJ     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLZA       LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLPSRS     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLTEND     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLDIAB     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LLFILT     LOGICAL FROM COMMON *COMNMI*     =',
+     D        'LPHYS      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LVDIFF     LOGICAL FROM COMMON *COMPSW*     ='/
+      DATA (YL(I),I=16,26)
+     D       /'LKUO       LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LCOND      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LQNEGAT    LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LSURF      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LSCV       LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LKUO0      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LESFT      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LEVAP      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LSNRN      LOGICAL FROM COMMON *COMPSW*     =',
+     D        'LRAD       LOGICAL FROM COMMON *COMRSW*     =',
+     D        'LDIUR      LOGICAL FROM COMMON *COMRSW*     ='/
+      DATA YI1/'NCYCLE     INTEGER FROM COMMON *COMDOC*     =',
+     D         'NVERS      INTEGER FROM COMMON *COMDOC*     =',
+     D         'NM         INTEGER FROM COMMON *COMCTL*     =',
+     D         'NN         INTEGER FROM COMMON *COMCTL*     =',
+     D         'NK         INTEGER FROM COMMON *COMCTL*     =',
+     D         'NGL        INTEGER FROM COMMON *COMCTL*     ='/
+      DATA YI2/'NLON( )    INTEGER FROM COMMON *COMCTL*     ='/
+      DATA YI3/'NLEV       INTEGER FROM COMMON *COMCTL*     =',
+     D         'NVCLEV     INTEGER FROM COMMON *COMCTL*     =',
+     D         'NUMZLS     INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NFRZLS     INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDTSCVL    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDTSCVS    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDQSCVL    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDQSCVS    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDUSCVL    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDUSCVS    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDVSCVL    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDVSCVS    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDESCVL    INTEGER FROM COMMON *COMDIZ*     =',
+     D         'NDESCVS    INTEGER FROM COMMON *COMDIZ*     ='/
+      DATA YI4/'NLANDP( )  INTEGER FROM COMMON *COMDIZ*     ='/
+      DATA YI5/'NSEAP( )   INTEGER FROM COMMON *COMDIZ*     ='/
+      DATA YI6/'NMASKA     INTEGER FROM COMMON *COMMSK*     =',
+     D         'NMASKV     INTEGER FROM COMMON *COMMSK*     =',
+     D         'NFRMSK     INTEGER FROM COMMON *COMMSK*     =',
+     D         'NFRMSKP    INTEGER FROM COMMON *COMMSK*     =',
+     D         'NRSLT      INTEGER FROM COMMON *COMMSK*     =',
+     D         'NITNINI    INTEGER FROM COMMON *COMNMI*     =',
+     D         'NDIFFST    INTEGER FROM COMMON *COMNMI*     =',
+     D         'NVM        INTEGER FROM COMMON *COMNMI*     =',
+     D         'NRADFR     INTEGER FROM COMMON *COMRSW*     =',
+     D         'NRINT      INTEGER FROM COMMON *COMRSW*     ='/
+      DATA YI7/'NTRM( )    INTEGER FROM COMMON *COMTRU*     ='/
+      DATA YI8/'NTRN( )    INTEGER FROM COMMON *COMTRU*     ='/
+      DATA YI9/'NTRK( )    INTEGER FROM COMMON *COMTRU*     ='/
+      DATA YR1/'DTIME      REAL    FROM COMMON *COMCTL*     =',
+     D         'EPS        REAL    FROM COMMON *COMCTL*     ='/
+      DATA YR2/'VCT( )     REAL    FROM COMMON *COMCTL*     ='/
+      DATA (YR3(I),I=1,15)
+     D        /'CDIATS     REAL    FROM COMMON *COMDIA*     =',
+     D         'CDIATD     REAL    FROM COMMON *COMDIA*     =',
+     D         'CDIAWD     REAL    FROM COMMON *COMDIA*     =',
+     D         'GPEO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GKEO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GQMO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GTSO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GTDO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GWSO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GWDO       REAL    FROM COMMON *COMDIA*     =',
+     D         'GSNO       REAL    FROM COMMON *COMDIA*     =',
+     D         'DSRADO     REAL    FROM COMMON *COMDIA*     =',
+     D         'DTRADO     REAL    FROM COMMON *COMDIA*     =',
+     D         'DSRADS     REAL    FROM COMMON *COMDIA*     =',
+     D         'DTRADS     REAL    FROM COMMON *COMDIA*     ='/
+      DATA (YR3(I),I=16,30)
+     D        /'DVDIS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DHFS       REAL    FROM COMMON *COMDIA*     =',
+     D         'DEVAP      REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVFR      REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVQAC     REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVMOI     REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVGR      REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVGS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVMS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVER      REAL    FROM COMMON *COMDIA*     =',
+     D         'DCVES      REAL    FROM COMMON *COMDIA*     =',
+     D         'DLSGR      REAL    FROM COMMON *COMDIA*     =',
+     D         'DLSGS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DLSMS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DLSER      REAL    FROM COMMON *COMDIA*     ='/
+      DATA (YR3(I),I=31,45)
+     D        /'DLSES      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSSRAD     REAL    FROM COMMON *COMDIA*     =',
+     D         'DSTRAD     REAL    FROM COMMON *COMDIA*     =',
+     D         'DSHFL      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSDTFL     REAL    FROM COMMON *COMDIA*     =',
+     D         'DSLSR      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSLSS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSCVR      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSCVS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSEVW      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSEVI      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSDWFL     REAL    FROM COMMON *COMDIA*     =',
+     D         'DSSNMT     REAL    FROM COMMON *COMDIA*     =',
+     D         'DDCTFL     REAL    FROM COMMON *COMDIA*     =',
+     D         'DDCWFL     REAL    FROM COMMON *COMDIA*     ='/
+      DATA (YR3(I),I=46,53)
+     D        /'DSROS      REAL    FROM COMMON *COMDIA*     =',
+     D         'DSROD      REAL    FROM COMMON *COMDIA*     =',
+     D         'DADCON     REAL    FROM COMMON *COMDIA*     =',
+     D         'DIFVO      REAL    FROM COMMON *COMHDI*     =',
+     D         'DIFD       REAL    FROM COMMON *COMHDI*     =',
+     D         'DIFT       REAL    FROM COMMON *COMHDI*     =',
+     D         'DIFQ       REAL    FROM COMMON *COMHDI*     =',
+     D         'CDRAG      REAL    FROM COMMON *COMHDI*     ='/
+      DATA YR4/'ALATN( )   REAL    FROM COMMON *COMMSK*     ='/
+      DATA YR5/'ALATS( )   REAL    FROM COMMON *COMMSK*     ='/
+      DATA YR6/'ALONE( )   REAL    FROM COMMON *COMMSK*     ='/
+      DATA YR7/'ALONW( )   REAL    FROM COMMON *COMMSK*     ='/
+      DATA (YR8(I),I=1,15)
+     D        /'DTINIT )   REAL    FROM COMMON *COMNMI*     =',
+     D         'DTDIFF )   REAL    FROM COMMON *COMNMI*     =',
+     D         'PHYFIL     REAL    FROM COMMON *COMNMI*     =',
+     D         'WSMAX      REAL    FROM COMMON *COMPSW*     =',
+     D         'BETADT     REAL    FROM COMMON *COMSIM*     =',
+     D         'BETAZQ     REAL    FROM COMMON *COMSIM*     =',
+     D         'APR        REAL    FROM COMMON *COMSIM*     =',
+     D         'TR         REAL    FROM COMMON *COMSIM*     =',
+     D         'VCRIT      REAL    FROM COMMON *COMSIM*     =',
+     D         'HDAMP      REAL    FROM COMMON *COMSIM*     =',
+     D         'GVO        REAL    FROM COMMON *COMSTA*     =',
+     D         'GD         REAL    FROM COMMON *COMSTA*     =',
+     D         'GQ         REAL    FROM COMMON *COMSTA*     =',
+     D         'GT         REAL    FROM COMMON *COMSTA*     =',
+     D         'GPS        REAL    FROM COMMON *COMSTA*     ='/
+      DATA (YR8(I),I=16,26)
+     D        /'GKE        REAL    FROM COMMON *COMSTA*     =',
+     D         'GPE        REAL    FROM COMMON *COMSTA*     =',
+     D         'GTE        REAL    FROM COMMON *COMSTA*     =',
+     D         'GLQ        REAL    FROM COMMON *COMSTA*     =',
+     D         'GTPE       REAL    FROM COMMON *COMSTA*     =',
+     D         'GQM        REAL    FROM COMMON *COMSTA*     =',
+     D         'GTS        REAL    FROM COMMON *COMSTA*     =',
+     D         'GTD        REAL    FROM COMMON *COMSTA*     =',
+     D         'GWS        REAL    FROM COMMON *COMSTA*     =',
+     D         'GWD        REAL    FROM COMMON *COMSTA*     =',
+     D         'GSN        REAL    FROM COMMON *COMSTA*     ='/
+C
+C*               1. LOCAL VARIABLES
+C
+  100 CONTINUE
+      INGL=INTEGS(6)
+      INVCLEV=INTEGS(6+INGL+2)
+      INLEV=INTEGS(6+INGL+1)
+C      INDEX FOR INTEGERS
+      J1A=1
+      J1T=6
+      J2A=J1T+1
+      J2T=J2A+INGL-1
+      J3A=J2T+1
+      J3T=J3A+14-1
+      J4A=J3T+1
+      J4T=J4A+INGL-1
+      J5A=J4T+1
+      J5T=J5A+INGL-1
+      J6A=J5T+1
+      J6T=J6A+10-1
+      J7A=J6T+1
+      J7T=J7A+INLEV-1
+      J8A=J7T+1
+      J8T=J8A+INLEV-1
+      J9A=J8T+1
+      J9T=J9A+INLEV-1
+C        INDEX FOR REALS
+      I1A=1
+      I1T=I1A+2-1
+      I2A=I1T+1
+      I2T=I2A+2*INVCLEV-1
+      I3A=I2T+1
+      I3T=I3A+53-1
+      I4A=I3T+1
+      I4T=I4A+32-1
+      I5A=I4T+1
+      I5T=I5A+32-1
+      I6A=I5T+1
+      I6T=I6A+32-1
+      I7A=I6T+1
+      I7T=I7A+32-1
+      I8A=I7T+1
+      I8T=I8A+26-1
+      PRINT*,' J9T=',J9T,'INTL=',ILENGI,'I8T=',I8T,'REAL=',ILENGR
+      IF (I8T.NE.ILENGR) THEN
+         GO TO 900
+      ENDIF
+C
+C*               2.BLOCK 0 AND 1
+C
+  200 CONTINUE
+      IMET=0
+      WRITE(*,1100)
+      DO 210 I=1,29
+      IF (I.EQ.22.OR.I.EQ.23.OR.I.EQ.24) THEN
+         GO TO 210
+      ENDIF
+      IMET=IMET+1
+      WRITE(*,'(1X,A,I6,1X,A,I4)') Y1(IMET),IBLOCKS(I),YY,I
+  210 CONTINUE
+C
+C*               3.LOGICALS
+C
+  300 CONTINUE
+      WRITE(*,1200)
+      DO 310 I=1,ILENGL
+      WRITE(*,'(1X,A,L6,1X,A,I4)') YL(I),LOGICS(I),YY,I
+  310 CONTINUE
+C
+C*               4.INTEGER
+C
+  400 CONTINUE
+      WRITE(*,1300)
+      DO 410 I=J1A,J1T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI1(I),INTEGS(I),YY,I
+  410 CONTINUE
+      DO 420 I=J2A,J2T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI2,INTEGS(I),YY,I
+  420 CONTINUE
+      META3=0
+      DO 430 I=J3A,J3T
+      META3=META3+1
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI3(META3),INTEGS(I),YY,I
+  430 CONTINUE
+      DO 440 I=J4A,J4T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI4,INTEGS(I),YY,I
+  440 CONTINUE
+      DO 450 I=J5A,J5T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI5,INTEGS(I),YY,I
+  450 CONTINUE
+      META6=0
+      DO 460 I=J6A,J6T
+      META6=META6+1
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI6(META6),INTEGS(I),YY,I
+  460 CONTINUE
+      DO 470 I=J7A,J7T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI7,INTEGS(I),YY,I
+  470 CONTINUE
+      DO 480 I=J8A,J8T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI8,INTEGS(I),YY,I
+  480 CONTINUE
+      DO 490 I=J9A,J9T
+      WRITE(*,'(1X,A,I6,1X,A,I4)') YI9,INTEGS(I),YY,I
+  490 CONTINUE
+C
+C*               5. REALS
+C
+  500 CONTINUE
+      WRITE(*,1400)
+      DO 510 I=I1A,I1T
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR1(I),REALSW(I),YY,I
+  510 CONTINUE
+      DO 520 I=I2A,I2T
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR2,REALSW(I),YY,I
+  520 CONTINUE
+      METR3=0
+      DO 530 I=I3A,I3T
+      METR3=METR3+1
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR3(METR3),REALSW(I),YY,I
+  530 CONTINUE
+      DO 540 I=I4A,I4T
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR4,REALSW(I),YY,I
+  540 CONTINUE
+      DO 550 I=I5A,I5T
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR5,REALSW(I),YY,I
+  550 CONTINUE
+      DO 560 I=I6A,I6T
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR6,REALSW(I),YY,I
+  560 CONTINUE
+      DO 570 I=I7A,I7T
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR7,REALSW(I),YY,I
+  570 CONTINUE
+      METR8=0
+      DO 580 I=I8A,I8T
+      METR8=METR8+1
+      WRITE(*,'(1X,A,G12.6,1X,A,I4)') YR8(METR8),REALSW(I),YY,I
+  580 CONTINUE
+C
+C*                6. RETURN
+C
+  600 CONTINUE
+C
+      RETURN
+C
+C
+C*                9.ERRORS
+C
+  900 CONTINUE
+      WRITE(*,9901)
+      WRITE(*,'(A)') 'ERROR IN THE LENGTH OF REALS'
+      CALL ENDRUN
+      STOP
+ 9901 FORMAT('ERROR IN SUBROUTINE ANALSW')
+C
+C*
+C
+ 1100 FORMAT('1',20X,'VARIABLES OF BLOCK 0 AND 1')
+ 1200 FORMAT('1',20X,'LOGICAL')
+ 1300 FORMAT('1',20X,'INTEGER')
+ 1400 FORMAT('1',20X,'REAL   ')
+      END
diff --git a/gribex/blckcr.F b/gribex/blckcr.F
new file mode 100755
index 0000000..e152d5c
--- /dev/null
+++ b/gribex/blckcr.F
@@ -0,0 +1,165 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#ifdef CRAY
+      SUBROUTINE BLCKCR (UN1,UN2,BUF,IRET)
+C
+C---->
+C**********************************************************************
+C*                                                                    *
+C*    NAME      : BLCKCR
+C*                                                                    *
+C*    FUNCTION  : CONVERTS AN UNBLOCKED DATASET                       *
+C*                INTO A BLOCKED DATASET                              *
+C*                                                                    *
+C*    INPUT     : UN1   = INPUT  LUN                                  *
+C*                UN2   = OUTPUT LUN                                  *
+C*                BUF   = WORK AREA
+C*                                                                    *
+C*    OUTPUT    : IRET  = -100   BUFFER IN  ERROR                     *
+C*                      = -200   BUFFER OUT ERROR                     *
+C*                      > 0      NO. OF RECORDS WRITTEN               *
+C*                      < 0      ERRORS REPORTED BY SUBROUTINES       *
+C*                                                                    *
+C*    GENERAL   : BLCKCR  CALLS  RECLEN                               *
+C*                               OFFSET                               *
+C*                               MODVAL                               *
+C*                                                                    *
+C*    AUTHOR    : B.V. GURETZKY     V.E.  DAY                         *
+C*                                                                    *
+C*    MODIFIED  : J. HENNESSY       26.11.85                          *
+C*                      "           24.06.86
+C*                      "           19.08.86
+C*                                                                    *
+C**********************************************************************
+C----<
+C
+      IMPLICIT INTEGER (B,U)
+      DIMENSION BUF(*)
+C
+C     NO. OF BITS PER CRAY WORD
+      DATA NBIT /64/
+C
+C     BLOCK LENGTH FOR CRAY FILES (ICB) = 512
+      DATA ICB /512/
+C
+C
+      IRET = 0
+      IRES = 0
+      INT1 = 0
+      IOFF = 0
+      IPR  = 1
+
+C     READ FIRST BLOCK AND GET LENGTH OF FIRST DATA RECORD.
+C
+      BUFFER IN (UN1,0) (BUF(1),BUF(ICB))
+      IF (UNIT(UN1)) 100,5500,10000
+C
+  100 CALL RECLEN (BUF(1),LEN,NBIT,ICODE,INDIC,LEVEL,KERR)
+      IF (KERR.NE.0)
+     C   THEN
+             IRET = KERR
+             RETURN
+         ENDIF
+C
+C     PRINT RECORD LENGTH , IF REQUIRED.
+C
+      IF (IPR.EQ.1) WRITE (*,9111) LEN
+ 9111 FORMAT (1H ,'BLCKCR : RECORD LENGTH (BYTES) = ',I9)
+C     MAKE LENGTH MULTIPLE OF ICB
+C
+      LENW = LEN / 8
+      CALL MODVAL (LENW,IE,ICB)
+      IB = ICB
+C
+      DO 5000 J = 1,10000
+C
+C        READ ENOUGH BLOCKS TO INCLUDE REMAINDER OF CURRENT
+C        DATA RECORD.
+C
+         IF (IPR.EQ.1) WRITE (*,9112) IB , IE
+ 9112 FORMAT (1H ,'BLCKCR : IB = ',I8,'   IE = ',I8)
+         IF (IB.NE.IE)
+     C      THEN
+                BUFFER IN (UN1,0) (BUF(IB+1),BUF(IE))
+                IOSTAT = UNIT(UN1)
+                IF (IPR.EQ.1) WRITE (*,7878) IOSTAT
+ 7878           FORMAT (1H ,'IOSTAT = ',I4)
+                IF (UNIT(UN1)) 1000,5500,10000
+            ENDIF
+C
+C        WRITE FIELD IN UNBLOCKED FORMAT
+C
+ 1000    BUFFER OUT (UN2,0) (BUF(1),BUF(LENW))
+         IOSTAT = UNIT(UN2)
+         IF (IOSTAT.GT.0) GO TO 10100
+         IRET = IRET + 1
+C
+C        MOVE REMAINDER OF BLOCK TO FRONT OF BUFFER.
+C
+         INTER = IE - LENW
+         DO 2000 K = 1,INTER
+            BUF(K) = BUF(LENW+K)
+ 2000    CONTINUE
+         IB = INTER
+C
+C        READ NEXT BLOCK TO CHECK LENGTH OF NEXT RECORD
+C        AND END-OF-FILE
+C
+         IF (INTER.LT.ICB)
+     C      THEN
+                BUFFER IN (UN1,0) (BUF(INTER+1),BUF(INTER+ICB))
+                IF (UNIT(UN1)) 3000,2500,10000
+ 2500           CONTINUE
+                BUFFER IN (UN1,0) (BUF(INTER+1),BUF(INTER+ICB))
+                IF (UNIT(UN1)) 3000,5500,10000
+ 3000           CONTINUE
+                IB = IB + ICB
+            ENDIF
+C
+C        GET  LENGTH FOR NEXT RECORD.
+C
+         CALL RECLEN (BUF(1),LEN,NBIT,ICODE,INDIC,LEVEL,KERR)
+         IF (KERR.NE.0)
+     C      THEN
+                IRET = KERR
+                RETURN
+            ENDIF
+C
+         LENW = LEN / 8
+C
+C        MAKE LENGTH MULTIPLE OF ICB
+C
+         INT = LENW - IB
+         CALL MODVAL (INT,IE,ICB)
+C
+C        READ OF SHORT RECORDS MAY BE COMPLETE.
+C
+         IF (INT.LT.0) IE = 0
+         IE = IB + IE
+
+ 5000 CONTINUE
+
+ 5500 CONTINUE
+
+      RETURN
+C
+10000 CONTINUE
+      IRET               = -100
+      WRITE (*,*) ' BLCKCR : BUFFER IN ERROR'
+      RETURN
+C
+10100 CONTINUE
+      IRET               = -200
+      WRITE (*,*) ' BLCKCR : BUFFER OUT ERROR'
+      RETURN
+C
+      END
+#endif
diff --git a/gribex/bt_cray.F b/gribex/bt_cray.F
new file mode 100755
index 0000000..0aa325c
--- /dev/null
+++ b/gribex/bt_cray.F
@@ -0,0 +1,1153 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C---->
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C           GSBITE
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           Cray version of routine.
+C           This routine should only be used on the Cray as it
+C           contains a call to GSBITE, a vectorising version of
+C           GBYTE(S) and SBYTE(S).
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+      INTEGER IMASK
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+      DIMENSION IMASK(65)
+C
+      CHARACTER*1 HFUNC
+C
+C     Values in IMASK are set in the first call to routine GSBITE, and
+C     are used in subsequent calls.
+C
+      SAVE IMASK
+C
+C     Force routine GSBITE to calculate bit-masks first time through.
+C
+      DATA IMASK(2) /0/
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (KNUM.GE.8)
+     C   THEN
+C
+C            Cray vectorising routine GSBITE performs the same
+C            functions as SBYTE(S) and GBYTE(S).
+C
+             CALL GSBITE (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM,
+     C                    KBIT,IMASK,HFUNC)
+         ELSE
+C
+C            Cray scalar faster.
+C
+             IF (HFUNC.EQ.'C')
+     C          THEN
+                    CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+                ELSE
+                    CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+                ENDIF
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           ABORT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cray version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL ABORT
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cray version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 64
+      KNEG = -9223372036854775807
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+      SUBROUTINE GSBITE (KS,KD,KSKST,KSIZE,KSKBTW,K,KBPW,KMASK,HADIR)
+C
+C**** GSBITE - Extraction/insertion of bits from/to bitstream on Cray.
+C
+C     Purpose.
+C     --------
+C
+C           Vectorising extraction/insertion of bits from/to bitstream.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GSBITE (KS,KD,KSKST,KSIZE,KSKBTW,K,KBPW,KMASK,HADIR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KS      - If HADIR='D', input bit stream, else output
+C                         bit stream.
+C               KD      - If HADIR='D', output words, else input words.
+C               KSKST   - Number of bits skipped at beginning of KS.
+C               KSIZE   - Number of bits to be extracted to one word
+C                         of KD.
+C               KSKBTW  - Number of bits skipped between two words to
+C                         be extracted.
+C               K       - Number of words to be extracted into KD. If
+C                         less than or equal to 0 only calculate KBPW
+C                         and KMASK.
+C               KBPW    - Number of bits per word in KS,calculated if 0.
+C               KMASK   - Masks for bit patterns, calculated if
+C                         KMASK(2) is 0.
+C               HADIR   - Direction of conversion: 'D' for decoding, ie
+C                         extract words KD(1...K) from bits
+C                         KS(KSKST+1....)
+C                         If not 'D', encode, i.e. pack words
+C                         KD(1....K) into bits
+C                         KS(KSKST+1.....KSKST+K*(KSIZE+KSKBTW))
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KS,KD   - See above.
+C               KSKST   - Updated to number of bits used, i.e. to
+C                         KSKST+K*(KSIZE+KSKBTW)
+C               KBPW    - If 0 on input, number of bits in each word
+C                         of KS.
+C               KMASK   - If KMASK(2) was 0 on input, bit pattern masks.
+C
+C     Method.
+C     -------
+C
+C           Vector loop is over repeatedly occurring bit patterns.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           This routine is for the Cray only.
+C           Variable names do not conform to the standard.
+C
+C     Author.
+C     -------
+C
+C           G.J.Cats 08 Dec 87
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy     ECMWF     09.09.91
+C           Introductory comments changed to conform to standard.
+C
+C     ------------------------------------------------------------------
+C
+      DIMENSION KS(*),KD(*),KMASK(*)
+      CHARACTER*1 HADIR
+C
+C     STATEMENT FUNCTIONS TO MANIPULATE BITS IN WORDS OF 64 BITS
+C
+C     DATA ONES/7777777777777777B/
+C     DATA OOOS/0B/
+C
+C     1.  SINGLE BIT MANIPULATIONS
+C
+C     1.1 SET BIT KBIT IN WORD PW
+C
+      IBSET(KW,KBIT)=OR(KW,SHIFT(1B,KBIT))
+C
+C     2.  WORD MANIPULATIONS, BIT BY BIT
+C
+C     2.1 ARE WORDS PW1 AND PW2 EQUAL?
+C
+C      LOGICAL NLEQAL
+C     NLEQAL(PW1,PW2)=(PW1.XOR.PW2).EQ.0B
+C
+C     2.2 BITWISE AND AND OR
+C
+      IAND(K1,K2)=AND(K1,K2)
+      IOR (K1,K2)= OR(K1,K2)
+C
+C     2.3 BITWISE NEGATION
+C
+      NOT(K)=COMPL(K)
+C
+C     2.4 SHIFT (LEFT FOR KSH POSITIVE, RIGHT FOR KSH NEGATIVE
+C
+      ISHFT(K,KSH)=CVMGP(SHIFTL(K,KSH),SHIFTR(K,-KSH),KSH)
+C
+C     3.  SPECIAL PURPOSE
+C
+C     3.1 TAKE 4 LAST BITS OF KW, PUT THEM IN PW AT POS K*4-1
+C
+C     SETLEV(PW,KW,K)=OR(AND(PW,SHIFT(0B.EQV.17B,K*4-4)),
+C    +SHIFT(AND(17B,KW),K*4-4))
+C
+C     3.2 EXTRACT FIELD [K*4-1:4] FROM PW
+C
+C     MGTLEV(PW,K)=AND(17B,SHIFT(PW,68-K*4))
+C
+C     1.  COMPLETE KBPW AND KMASK, RETURN IF 0 WORDS ARE TO BE EXTRACTED
+C
+      IF(KBPW.EQ.0)THEN
+         IS=KS(1)
+         KS(1)=1
+ 1101    CONTINUE
+         IF(KS(1).NE.0)THEN
+            KBPW=KBPW+1
+            KS(1)=ISHFT(KS(1),1)
+            GOTO 1101
+         ENDIF
+         KS(1)=IS
+      ENDIF
+      IF(KMASK(2).EQ.0)THEN
+         KMASK(KBPW+1)=0
+         DO 1110 J=KBPW,1,-1
+         KMASK(J)=IBSET(KMASK(J+1),KBPW-J)
+ 1110    CONTINUE
+      ENDIF
+      IF(K.LE.0)RETURN
+C
+C     2.  PRESET KD TO 0 IF KD IS OUTPUT I.E. WHEN DECODING
+C
+      IF(HADIR.EQ.'D')THEN
+         DO 2101 J=1,K
+         KD(J)=0
+ 2101    CONTINUE
+      ENDIF
+C
+C     3.  CALCULATE SEVERAL PARAMETERS FOR LOOPING (FOR EFFICIENCY, THE
+C         CODE OF SECTIONS 3.3 AND 3.4 FOR K=1 IS SEPARATED INTO 3.2)
+C
+C     3.1 NUMBER OF BITS USED PER WORD, INITIAL NR OF SKIPPED BITS
+C
+      ISTEP=KSIZE+KSKBTW
+      ISKWS=KSKST
+C
+C     3.2 VECTOR LOOP LENGTH AND STEP SIZE IN KD IF K=1;KS STEP IRRELVNT
+C
+      IF(K.EQ.1)THEN
+         ILL=1
+         IBDL=2
+         ISTD=1
+      ELSE
+C
+C     3.3 STEP SIZES IN KS,KD: INVERSE OF LARGEST FACTOR OF ISTEP,KBPW
+C
+         ILCF=KBPW
+         ISHF=ISTEP
+ 331     CONTINUE
+         IF(ILCF.EQ.ISHF)GOTO 332
+         IF(ILCF.EQ.1)GOTO 332
+         IF(ILCF.GT.ISHF)THEN
+            ILCF=ILCF-ISHF
+         ELSE
+            ISHF=ISHF-ILCF
+         ENDIF
+         GOTO 331
+ 332     CONTINUE
+         ISTD=KBPW/ILCF
+         ISTS=ISTEP/ILCF
+C
+C     3.4 VECTOR LOOP LENGTH AND SWITCH-OVER POINT FOR SMALLER LOOP
+C
+         ILL=(K-1)/ISTD+1
+         IBDL=K-(ILL-1)*ISTD
+      ENDIF
+C
+C     4.  LOOP OVER FIRST ISTD WORDS OF KD (TRAILS THE VECTOR LOOP)
+C
+      DO 790 JBD=1,ISTD
+C
+C     4.1 LAST BIT IN KS TO BE TREATED
+C
+      IENBS=ISKWS+KSIZE
+C
+C     4.2 NR OF WORDS OF KS TO BE SKIPPED, NR OF BITS IN THOSE AND THIS
+C
+      ISKW=ISKWS/KBPW
+      ISTA=ISKW*KBPW
+      ISKB=ISKWS-ISTA
+C
+C     4.3 MASK AND LEFT SHIFT FOR THE REMAINING BITS
+C
+      IMASK=KMASK(ISKB+1)
+      ISH=KSIZE+ISKB
+C
+C     4.4 POSITION OF CURRENT WORD OF KS
+C
+      IBS=ISKW+1
+C
+C     5.  LOOP OVER WORDS OF KS CONTRIBUTING TO ONE WORD OF KD
+C
+ 500  CONTINUE
+C
+C     5.1 UPDATE SHIFT AND LAST BIT IN CURRENT WORD
+C
+      ISH=ISH-KBPW
+      IEND=ISTA+KBPW
+C
+C     5.2 IS LAST BIT OF CURRENT WORD OUTSIDE RANGE TO BE EXTRACTED
+C
+      IF(IEND.GT.IENBS)THEN
+         ISH=IENBS-IEND
+         IMASK=IAND(IMASK,NOT(KMASK(KBPW+ISH+1)))
+      ENDIF
+C
+C     5.3 INITIAL OFFSETS FOR VECTOR ELEMENTS IN VECTOR LOOP
+C
+      IOS=0
+      IOD=0
+C
+C     6.  VECTOR LOOP IS OVER REPEATEDLY OCCURRING BITPATTERNS/MASKS
+C
+      IF(HADIR.EQ.'D')THEN
+CDIR$ IVDEP
+         DO 611 JI=1,ILL
+         KD(JBD+IOD)=IOR(KD(JBD+IOD),ISHFT(IAND(IMASK,KS(IBS+IOS)),ISH))
+         IOD=IOD+ISTD
+         IOS=IOS+ISTS
+ 611     CONTINUE
+      ELSE
+CDIR$ IVDEP
+         DO 612 JI=1,ILL
+         KS(IBS+IOS)=IOR(
+     +   IAND(      KS(IBS+IOS),      NOT(IMASK)),
+     +   IAND(ISHFT(KD(JBD+IOD),-ISH),    IMASK ))
+         IOD=IOD+ISTD
+         IOS=IOS+ISTS
+ 612     CONTINUE
+      ENDIF
+C
+C     7.  END LOOPS
+C
+C     7.1 PREPARE FOR END OF LOOP OVER WORDS OF KS WITIHN ONE KD WORD
+C
+      ISTA=ISTA+KBPW
+C
+C     7.2 NEXT WORD OF KD IF EXTRACTION NOT COMPLETED
+C
+      IF(ISTA.LT.IENBS)THEN
+         IMASK=KMASK(1)
+         IBS=IBS+1
+         GOTO 500
+      ENDIF
+C
+C     7.8 PREPARE FOR END OF LOOP OVER FIRST WORDS OF KD
+C
+      IF(JBD.EQ.IBDL)ILL=ILL-1
+      ISKWS=ISKWS+ISTEP
+C
+C     7.9 END LOOP OVER FIRST WORDS OF KD
+C
+ 790  CONTINUE
+C
+C     8.  FINISHED: UPDATE KSKST AND RETURN
+C
+      KSKST=KSKST+K*ISTEP
+C
+      RETURN
+      END
+      SUBROUTINE GBYTE  (SOURCE,DEST,IOFSET,IBYTSZ)
+C
+C**** GBYTE  - Extract a single bit field. Cray routine.
+C
+C*    FUNCTION: GET A SINGLE BIT FIELD FROM SOURCE INTO DEST
+C*
+C*    INPUT   : SOURCE(1)= WORD CONTAINING START OF BIT FIELD
+C*              DEST     = TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST CONTAINS FIELD RIGHT JUSTIFIED
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+      PARAMETER(NBPW=64)
+      INTEGER SOURCE(1),DEST
+      INTEGER SH1
+      SH1=IOFSET+IBYTSZ-NBPW
+
+      IF(SH1.GT.0) GO TO 2
+
+
+C     BYTES DO NOT SPAN WORDS
+
+
+      SH1=NBPW+SH1
+
+
+      DEST=AND(
+     1          SHIFT(SOURCE(1),SH1),
+     2          SHIFT(MASK(IBYTSZ),IBYTSZ)
+     3        )
+
+      RETURN
+
+C     BYTE SPANS WORDS
+
+2     CONTINUE
+
+
+      DEST=OR(
+     1        SHIFT(
+     2              AND(SOURCE(1),COMPL(MASK(IOFSET)))
+     3              ,SH1),
+     4        SHIFT(
+     5              AND(SOURCE(2),MASK(SH1))
+     6              ,SH1)
+     7       )
+
+
+
+      RETURN
+      END
+      SUBROUTINE GBYTES (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** GBYTES - Extract a number of bit fields. Cray routine.
+C
+C S CONTAINS A BIT STRING OF INDEFINITE LENGTH. GBYTES WILL
+C EXTRACT NBYTES BITSTRINGS, IBSIZ BITS LONG, AND STORE THEM
+C RIGHT JUSTIFIED 0 FILL, INTO SUCCESSIVE WORDS OF D. THE
+C SUCCESSIVE BITSTRINGS START AT BIT POSITIONS
+C     ISKIP1+1+(IBYTE-1)*(IBSIZ+ISKIP2)
+C IN THE BIT STRING S. I.E. SKIP ISKIP1 BITS AT THE START,
+C AND ISKIP2 BITS BETWEEN THE EXTRACTED STRINGS.
+C BIT ISKP+1 IN A STRING IS FOUND IN WORD IS=1+ISKIP/NBPW IN S,
+C WHERE NBPW IS THE NUMBER OF BITS PER WORD. THE STARTING BIT
+C IS FOUND BY SKIPPING MOD(ISKP,NBPW) BITS IN THAT WORD.
+C KWOFF IS AN OPTIONAL 7TH PARAMETER, WHICH DEFAULTS TO 0
+C IF PRESENT KWOFF BITS ARE TOTALLY IGNORED AT THE START OF A WORD
+C THUS IF A PACKED CYBER BIT STRING IS TRANSFERRED TO THE
+C CRAY, WITH EACH 60 BIT CYBER WORD PLACED AT THE RIGHT END OF
+C A 64 BIT CRAY WORD, A BYTE SEQUENCE WHICH WAS ORIGINALLY
+C LOCATED WITH START POINTS IN ARITHMETIC PROGRESSION ON THE
+C CYBER, WILL NO LONGER HAVE THIS PROPERTY ON THE CRAY. BY
+C USING THE ROUTINE WITH KWOFF=4, THE ELEMENTS OF THE BYTE
+C SEQUENCE CAN BE EXTRACTED ON THE CRAY, USING THE SAME SKIPS
+C AS WERE USED ON THE CYBER.
+C
+      PARAMETER(NBPW=64)
+      DIMENSION S(2) , D(NBYTES)
+      INTEGER SH1
+      IGNORE = 0
+      IF(NUMARG().GT.6) IGNORE = KWOFF
+      IS=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION DETERMINED, THE
+C DESIRED EXTRACTION CAN BE DONE BY
+C***     CALL GBYTE(S(IS),D(IBYTE),ISKIP,IBSIZ)
+C BUT SINCE THE CODE IS SHORT IT IS INSERTED IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+C BYTE COMES FROM 1 WORD OF S
+         D(IBYTE) = AND( SHIFT(S(IS),SH1),SHIFT(MASK(IBSIZ),IBSIZ))
+         GO TO 65
+   50    CONTINUE
+         SH1 =SH1-NBPW
+C BYTE COMES FROM 2 WORDS OF S.
+         D(IBYTE) = OR(SHIFT(AND(S(IS),COMPL(MASK(ISKIP))),SH1)
+     1                           ,
+     2                SHIFT(AND(SHIFT(S(IS+1),IGNORE),MASK(SH1)),SH1)
+     3                 )
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP =ISKIP-NBPW
+         IS = IS+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75 CONTINUE
+      RETURN
+      END
+      SUBROUTINE SBYTE  (DEST,SOURCE,IOFSET,IBYTSZ)
+C
+C**** SBYTE  - Insert a single bit field. Cray routine.
+C
+C*    FUNCTION: STORE A SINGLE BIT FIELD FROM SOURCE INTO DEST
+C*
+C*    INPUT   : SOURCE   = WORD CONTAINING  BIT FIELD RIGHT JUSTIFIED
+C*              DEST(1)  = 1ST TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS ; .LE.WORD SIZE .....
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST(1) AND EVENTUALLY DEST(2) CONTAIN FIELD
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+      PARAMETER(NBPW=64)
+      INTEGER SOURCE,DEST(1)
+      INTEGER SH1,SH2,SH3
+      SH1=IOFSET+IBYTSZ
+      IF(SH1.GT.NBPW) GO TO 2
+
+      SH2=NBPW-SH1
+      IF(SH2.LT.0) SH2=NBPW-SH2
+
+C     BYTE  DOES NOT SPAN WORDS
+
+
+      DEST(1)=SHIFT(
+     1              OR(
+     2                 AND(SHIFT(DEST(1),SH1),
+     3                     SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ) )
+     4                 ,
+     5                 AND(SOURCE,
+     6                     COMPL(SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ)) )
+     7                 )
+     8              ,SH2)
+
+
+
+      RETURN
+
+2     CONTINUE
+
+C     BYTE SPANS 2 WORDS
+
+      SH3=2*NBPW-SH1
+
+
+      DEST(1)=OR(
+     1           AND(DEST(1),MASK(IOFSET))
+     2           ,
+     3           AND(SHIFT(SOURCE,SH3) , COMPL(MASK(IOFSET)) )
+     4           )
+
+      DEST(2)=OR(
+     1           AND(DEST(2) , COMPL(MASK(SH1-NBPW)) )
+     2           ,
+     3           SHIFT( AND(SOURCE , COMPL(MASK(SH3)) ) ,SH3)
+     4           )
+
+
+
+      RETURN
+      END
+      SUBROUTINE SBYTES (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** SBYTES - Insert a number of bit fields. Cray routine.
+C
+C REVERSES THE ACTION OF GBYTES, TAKING FIELDS FROM S AND
+C INSERTING THEM INTO A BIT STRING IN D. SEE GBYTES.
+C AUTHOR D. ROBERTSON  AUG,1981
+C
+      PARAMETER(NBPW=64)
+      DIMENSION D(2) , S(NBYTES)
+      INTEGER SH1,SH2,SH3
+      IGNORE = 0
+      IF(NUMARG().GT.6) IGNORE = KWOFF
+      ID=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION KNOWN, THE
+C DESIRED INSERTION CAN BE DONE BY
+C**      CALL SBYTE(D(ID),S(IBYTE),ISKIP,IBSIZ)
+C BUT THE CODE IS SHORT ENOUGH TO GO IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+         SH2 = NBPW-SH1
+         IF(SH2.LT.0) SH2 = NBPW-SH2
+C BYTE GOES INTO 1 WORD OF D.
+         D(ID) = SHIFT(OR(AND(SHIFT(D(ID),SH1),MASK(NBPW-IBSIZ)),
+     1                   AND(S(IBYTE),SHIFT(MASK(IBSIZ),IBSIZ))),SH2)
+         GO TO 65
+   50    CONTINUE
+C BYTE GOES INTO 2 WORDS OF D.
+         SH3 = 2*NBPW-SH1
+         D(ID)=OR(AND(D(ID),MASK(ISKIP)),
+     1               AND(SHIFT(S(IBYTE),SH3),COMPL(MASK(ISKIP))))
+         D(ID+1)=OR(AND(D(ID+1),SHIFT(COMPL(MASK(SH1-NBPW)),NBPW-IGNORE)
+     1                 ),
+     2              SHIFT(AND(S(IBYTE),COMPL(MASK(SH3))),SH3-IGNORE))
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP = ISKIP - NBPW
+         ID = ID+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75    CONTINUE
+      RETURN
+      END
diff --git a/gribex/bt_cyber.F b/gribex/bt_cyber.F
new file mode 100755
index 0000000..0cc488d
--- /dev/null
+++ b/gribex/bt_cyber.F
@@ -0,0 +1,837 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C---->
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES6
+C           GBYTES6
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           Cyber version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES6 (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES6 (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           ABORT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cyber version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL ABORT ('US',0,' ')
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cyber version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 64
+      KNEG = -9223372036854775807
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+      SUBROUTINE GBYTE(SOURCE,DEST,IOFSET,IBYTSZ)
+C
+C**** GBYTE - Get a single bit field from SOURCE into DEST on Cyber.
+C
+C*    INPUT   : SOURCE(1)= WORD CONTAINING START OF BIT FIELD
+C*              DEST     = TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST CONTAINS FIELD RIGHT JUSTIFIED
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+C*****
+      INTEGER SOURCE(1),DEST
+      INTEGER SH1
+
+
+      NBPW=64
+      SH1=IOFSET+IBYTSZ-NBPW
+
+      IF(SH1.GT.0) GO TO 2
+
+
+C     BYTES DO NOT SPAN WORDS
+
+
+      SH1=NBPW+SH1
+
+
+      DEST=AND(
+     1          SHIFT(SOURCE(1),SH1),
+     2          SHIFT(MASK(IBYTSZ),IBYTSZ)
+     3        )
+
+      RETURN
+
+C     BYTE SPANS WORDS
+
+2     CONTINUE
+
+
+      DEST=OR(
+     1        SHIFT(
+     2              AND(SOURCE(1),COMPL(MASK(IOFSET)))
+     3              ,SH1),
+     4        SHIFT(
+     5              AND(SOURCE(2),MASK(SH1))
+     6              ,SH1)
+     7       )
+
+
+
+      RETURN
+      END
+      SUBROUTINE GBYTES(S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** GBYTES - Cyber version.
+C
+C S CONTAINS A BIT STRING OF INDEFINITE LENGTH. GBYTES WILL
+C EXTRACT NBYTES BITSTRINGS, IBSIZ BITS LONG, AND STORE THEM
+C RIGHT JUSTIFIED 0 FILL, INTO SUCCESSIVE WORDS OF D. THE
+C SUCCESSIVE BITSTRINGS START AT BIT POSITIONS
+C     ISKIP1+1+(IBYTE-1)*(IBSIZ+ISKIP2)
+C IN THE BIT STRING S. I.E. SKIP ISKIP1 BITS AT THE START,
+C AND ISKIP2 BITS BETWEEN THE EXTRACTED STRINGS.
+C BIT ISKP+1 IN A STRING IS FOUND IN WORD IS=1+ISKIP/NBPW IN S,
+C WHERE NBPW IS THE NUMBER OF BITS PER WORD. THE STARTING BIT
+C IS FOUND BY SKIPPING MOD(ISKP,NBPW) BITS IN THAT WORD.
+C KWOFF IS AN OPTIONAL 7TH PARAMETER, WHICH DEFAULTS TO 0
+C IF PRESENT KWOFF BITS ARE TOTALLY IGNORED AT THE START OF A WORD
+C THUS IF A PACKED CYBER BIT STRING IS TRANSFERRED TO THE
+C CRAY, WITH EACH 60 BIT CYBER WORD PLACED AT THE RIGHT END OF
+C A 64 BIT CRAY WORD, A BYTE SEQUENCE WHICH WAS ORIGINALLY
+C LOCATED WITH START POINTS IN ARITHMETIC PROGRESSION ON THE
+C CYBER, WILL NO LONGER HAVE THIS PROPERTY ON THE CRAY. BY
+C USING THE ROUTINE WITH KWOFF=4, THE ELEMENTS OF THE BYTE
+C SEQUENCE CAN BE EXTRACTED ON THE CRAY, USING THE SAME SKIPS
+C AS WERE USED ON THE CYBER.
+      DIMENSION S(2) , D(NBYTES)
+      INTEGER SH1
+      ENTRY GBYTES7 (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+      IGNORE = KWOFF
+      GO TO 10
+      ENTRY GBYTES6 (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES)
+      IGNORE = 0
+   10 CONTINUE
+      NBPW=64
+      IS=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION DETERMINED, THE
+C DESIRED EXTRACTION CAN BE DONE BY
+C***     CALL GBYTE(S(IS),D(IBYTE),ISKIP,IBSIZ)
+C BUT SINCE THE CODE IS SHORT IT IS INSERTED IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+C BYTE COMES FROM 1 WORD OF S
+         D(IBYTE) = AND( SHIFT(S(IS),SH1),SHIFT(MASK(IBSIZ),IBSIZ))
+         GO TO 65
+   50    CONTINUE
+         SH1 =SH1-NBPW
+C BYTE COMES FROM 2 WORDS OF S.
+         D(IBYTE) = OR(SHIFT(AND(S(IS),COMPL(MASK(ISKIP))),SH1)
+     1                           ,
+     2                SHIFT(AND(SHIFT(S(IS+1),IGNORE),MASK(SH1)),SH1)
+     3                 )
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP =ISKIP-NBPW
+         IS = IS+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75 CONTINUE
+      RETURN
+      END
+      SUBROUTINE SBYTE(DEST,SOURCE,IOFSET,IBYTSZ)
+C
+C**** GBYTE - Store a single bit field from SOURCE into DEST on Cyber.
+C
+C*    INPUT   : SOURCE   = WORD CONTAINING  BIT FIELD RIGHT JUSTIFIED
+C*              DEST(1)  = 1ST TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS ; .LE.WORD SIZE .....
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST(1) AND EVENTUALLY DEST(2) CONTAIN FIELD
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+C*****
+      INTEGER SOURCE,DEST(1)
+      INTEGER SH1,SH2,SH3
+
+
+      NBPW=64
+      SH1=IOFSET+IBYTSZ
+      IF(SH1.GT.NBPW) GO TO 2
+
+      SH2=NBPW-SH1
+      IF(SH2.LT.0) SH2=NBPW-SH2
+
+C     BYTE  DOES NOT SPAN WORDS
+
+
+      DEST(1)=SHIFT(
+     1              OR(
+     2                 AND(SHIFT(DEST(1),SH1),
+     3                     SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ) )
+     4                 ,
+     5                 AND(SOURCE,
+     6                     COMPL(SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ)) )
+     7                 )
+     8              ,SH2)
+
+
+
+      RETURN
+
+2     CONTINUE
+
+C     BYTE SPANS 2 WORDS
+
+      SH3=2*NBPW-SH1
+
+
+      DEST(1)=OR(
+     1           AND(DEST(1),MASK(IOFSET))
+     2           ,
+     3           AND(SHIFT(SOURCE,SH3) , COMPL(MASK(IOFSET)) )
+     4           )
+
+      DEST(2)=OR(
+     1           AND(DEST(2) , COMPL(MASK(SH1-NBPW)) )
+     2           ,
+     3           SHIFT( AND(SOURCE , COMPL(MASK(SH3)) ) ,SH3)
+     4           )
+
+
+
+      RETURN
+      END
+      SUBROUTINE SBYTES(D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** SBYTES - Cyber version.
+C
+C REVERSES THE ACTION OF GBYTES, TAKING FIELDS FROM S AND
+C INSERTING THEM INTO A BIT STRING IN D. SEE GBYTES.
+C AUTHOR D. ROBERTSON  AUG,1981
+      DIMENSION D(2) , S(NBYTES)
+      INTEGER SH1,SH2,SH3
+      ENTRY SBYTES7 (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+      IGNORE = KWOFF
+      GO TO 10
+      ENTRY SBYTES6 (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES)
+      IGNORE = 0
+   10 CONTINUE
+      NBPW=64
+      ID=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION KNOWN, THE
+C DESIRED INSERTION CAN BE DONE BY
+C**      CALL SBYTE(D(ID),S(IBYTE),ISKIP,IBSIZ)
+C BUT THE CODE IS SHORT ENOUGH TO GO IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+         SH2 = NBPW-SH1
+         IF(SH2.LT.0) SH2 = NBPW-SH2
+C BYTE GOES INTO 1 WORD OF D.
+         D(ID) = SHIFT(OR(AND(SHIFT(D(ID),SH1),MASK(NBPW-IBSIZ)),
+     1                   AND(S(IBYTE),SHIFT(MASK(IBSIZ),IBSIZ))),SH2)
+         GO TO 65
+   50    CONTINUE
+C BYTE GOES INTO 2 WORDS OF D.
+         SH3 = 2*NBPW-SH1
+         D(ID)=OR(AND(D(ID),MASK(ISKIP)),
+     1               AND(SHIFT(S(IBYTE),SH3),COMPL(MASK(ISKIP))))
+         D(ID+1)=OR(AND(D(ID+1),SHIFT(COMPL(MASK(SH1-NBPW)),NBPW-IGNORE)
+     1                 ),
+     2              SHIFT(AND(S(IBYTE),COMPL(MASK(SH3))),SH3-IGNORE))
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP = ISKIP - NBPW
+         ID = ID+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75    CONTINUE
+      RETURN
+      END
diff --git a/gribex/bt_ibm.F b/gribex/bt_ibm.F
new file mode 100755
index 0000000..7293cc6
--- /dev/null
+++ b/gribex/bt_ibm.F
@@ -0,0 +1,602 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C---->
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           IBM version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           SYSABN
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           IBM version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL SYSABN (1)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           IBM version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 32
+      KNEG = -2147483647
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
diff --git a/gribex/bt_ibm_bal.bal b/gribex/bt_ibm_bal.bal
new file mode 100755
index 0000000..b2b5962
--- /dev/null
+++ b/gribex/bt_ibm_bal.bal
@@ -0,0 +1,279 @@
+*
+*  IBM Assembler version of GBYTE(S) and SBYTE(S).
+*
+*        ****  DOCUMENTATION  ****
+*    WRITTEN BY JORDAN HASTINGS AND DENNIS JOSEPH
+*               NCAR, BOULDER, COLORADO
+*
+*  THE FOLLOWING ROUTINES ALLOW FORTRAN ACCESS TO BIT STRINGS (BYTE
+*  OF ARBITRARY LENGTH AND POSITION, PERHAPS CROSSING WORD BOUNDARIES,
+*  IN THE MANNER SPECIFIED BELOW:
+*
+*     CALL GBYTE (PCKD,UNPK,INOFST,NBIT)
+*     CALL GBYTES(PCKD,UNPK,INOFST,NBIT, NSKIP,ITER)
+*
+*        PCKD:     THE FULLWORD IN MEMORY FROM WHICH UNPACKING IS TO
+*                  BEGIN; SUCCESSIVE FULLWORDS WILL BE FETCHED AS
+*                  REQUIRED.
+*        UNPK:     THE FULLWORD IN MEMORY INTO WHICH THE INITIAL BYTE
+*                  OF UNPACKED DATA IS TO BE STORED; SUBSEQUENT BYTES
+*                  WILL BE STORED INTO SUCCESSIVE FULLWORDS AS
+*                  REQUIRED.
+*        INOFST:   A FULLWORD INTEGER SPECIFYING THE INITAL OFFSET
+*                  IN BITS OF THE FIRST BYTE, COUNTED FROM THE
+*                  LEFTMOST BIT IN PCKD.
+*        NBITS:    A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
+*                  IN EACH BYTE TO BE UNPACKED.  LEGAL BYTE WIDTHS
+*                  ARE IN THE RANGE 1 - 32; BYTES OF WIDTH .LT. 32
+*                  WILL BE RIGHT JUSTIFIED IN THE LOW-ORDER POSITIONS
+*                  OF THE UNPK FULLWORDS, WITH HIGH-ORDER ZERO FILL.
+*        NSKIP:    A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
+*                  TO SKIP BETWEEN SUCCESSIVE BYTES.  ALL NON-NEGATIVE
+*                  SKIP COUNTS ARE LEGAL.
+*        ITER:     A FULLWORD INTEGER SPECIFYING THE TOTAL NUMBER OF
+*                  BYTES TO BE UNPACKED, AS CONTROLLED BY INOFST,
+*                  NBIT AND NSKIP ABOVE.   ALL NON-NEGATIVE ITERATION
+*                  COUNTS ARE LEGAL.
+*
+*            NOTES ...
+*              1)  A MULTIPLE-BYTE ACCESS (GBYTES) WITH ITER=0 (BUT
+*                  NOT 1)  IS EXACTLY EQUIVALENT TO A SINGLE-BYTE
+*                  ACCESS (GBYTE).
+*              2)  AN ERROR DETECTED IN THE CALLING SEQUENCE OF
+*                  EITHER GBYTE OR GBYTES SUPPRESSES BYTE ACCESS,
+*                  AND SETS THE FIRST ELEMENT OF UNPK = X'FFFFFFFF'
+*
+GBYT     TITLE 'IBM S/360 VERSION OF NCAR CDC/6600 BIT MANIPULATION'
+*
+*        ****  REGISTER USAGE  ****
+ZERO     EQU   X'0'                CONSTANT ZERO
+PCKD     EQU   X'1'                ADDR OF PACKED ARY ELEMENT
+UNPK     EQU   X'2'                ADDR OF UNPACKED ARY ELEMENT
+OFST     EQU   X'3'                INITIAL BIT OFFSET
+NBIT     EQU   X'4'                BYTE LENGTH IN BITS (.LE.32)
+NSKP     EQU   X'5'                ITERATIVE BIT SKIP
+ITER     EQU   X'6'                ITERATION COUNT (.GE.0)
+BITR     EQU   X'7'                BITS REMAINING IN HIWD
+BITS     EQU   X'8'                BITS TO SHIFT (OFST OR NSKP)
+WORK     EQU   X'9'                WORK REGISTER
+HIWD     EQU   X'A'                HI-ORDER WORD (EVEN REGISTER
+LOWD     EQU   X'B'                LO-ORDER WORD (ODD REGISTER)
+BYTE     EQU   X'C'                RESULTANT BYTE
+*        EQU   X'D'                SAVE AREA ADDR (NOT MODIFIED)
+*        EQU   X'E'                RETURN ADDR (NOT MODIFIED)
+BASE     EQU   X'F'                BASE ADDR REGISTER
+NBFW     EQU   4                   NUMBER OF BYTES/FULL WORD
+*
+*
+*        ****  CODE  ****
+*
+GBYTES   CSECT ,                   PRIME ENTRY POINT
+         ENTRY GBYTE               ALTERNATE ENTRY POINT
+*
+         USING GBYTES,BASE         ENTRY PT ADR ESTB IN R15 BY CALLER
+         SAVE      (0,12)          SAVE CALLING PROG REGISTERS (MACRO)
+         LM    NSKP,ITER,4*NBFW(1) PICK UP NSKIP, ITER PARM ADDRESSES
+         L     NSKP,0(,NSKP)       PICK UP BIT SKIP COUNT
+         L     ITER,0(,ITER)       PICK UP ITERATION COUNT
+         B     INIT                JUMP INTO CODE PROPER
+*
+GBYTE    DS    0H                  FORCE HALFWD ALLIGNMENT
+         USING GBYTE,BASE          ALT ENTRY ADDR ESTB IN R15 BY CALLER
+         SAVE      (0,12)          SAVE CALLING PROG REGISTERS (MACRO)
+         SR    ITER,ITER           MAKE ITERATION COUNT ZERO
+*
+INIT     BALR  BASE,0              RE-ESTABLISH ADDRESSABILITY
+         USING *,BASE
+         LM    PCKD,NBIT,0(1)      PICK UP ARY AND PARAMETER ADDRESSES
+      L         LOWD,0(,OFST)       COMPUTE FIRST PCKD WORD AND OFFSET
+      LA        WORK,32
+      SR        HIWD,HIWD
+      DR        HIWD,WORK
+      LR        OFST,HIWD        SET OFFSET TO REMAINDER
+      SLA       LOWD,2
+      AR        PCKD,LOWD          INCR PCKD ADDRESS BY WHOLE WORDS
+         L     HIWD,0(,PCKD)       PICK UP FIRST WORD OF PACKED ARY
+         LH    BITR,=H'32'         AFTER HIWD FETCH FULL 32 BITS REMAIN
+         L     NBIT,0(,NBIT)       PICK UP NO. OF BITS/BYTE TO UNPACK
+         SR    ZERO,ZERO           ZERO OUT REG 0
+         LR    WORK,BITR           MAKE WORK=32
+         CR    ITER,ZERO           TEST FOR ZERO ITERATION COUNT
+         BH    INIT1               IF NOT, CONTINUE WITH INITIALIZATION
+INIT0    CR    OFST,BITR           ELSE, TEST INITIAL OFFSET IN RANGE
+         BNL   FAIL                      IF NOT .LT. 32, FAIL
+         LH    ITER,=H'1'          FORCE EXACTLY 1 ITERATION
+         B     INIT2
+INIT1    AR    NSKP,NBIT           ADD NBIT TO NSKP FOR MULT ACCESS
+INIT2    LA    PCKD,NBFW(PCKD)     INCR PACKED ARY POINTER
+         L     LOWD,0(,PCKD)       PICK UP SECOND WD OF PACKED ARRAY
+         SR    WORK,NBIT           COMPLEMENT NBITS (MODULO 32)
+         CR    WORK,ZERO           TEST NBITS IN RANGE
+         BL    FAIL                IF NOT,.LE.32, FAIL
+         STH   WORK,STORE+4        ELSE USE TO SET UP BYTE SHIFT COUNT
+*                                    OF SRL (RX) INSTR IN STORE SEQ
+         LR    BITS,OFST           MAKE BITS TO SHIFT = INITIAL OFFSET
+         LR    WORK,BITR           MAKE WORK=32, AGAIN
+*
+TEST     CR    BITS,BITR           COMPARE BITS TO SHIFT WITH REMAINING
+         BL    SHIFT               IF BITS.LT.BITR, PROCEED WITH SHIFT
+         BH    SPLIT               IF BITS.GT.BITR, ITER OVER SPLIT WDS
+*        BE    COPY                ELSE, IF BITS.EQ.BITR, RECOPY HIWD
+*
+COPY     L     HIWD,0(,PCKD)       RELOAD HIWD FROM MEM WITH PREV LOWD
+         LA    PCKD,NBFW(PCKD)     INCR PACKED ARY POINTER
+         L     LOWD,0(,PCKD)         AND PICK UP NEXT PACKED LOWD
+         LR    BITR,WORK             RESET BITR TO 32
+         B     STORE               PROCEED WITH STORE OPERATIONS
+*
+SPLIT    STH   BITR,*+6            SET UP BITR AS SLDL SHIFT COUNT
+         SLDL  HIWD,*-*            SHIFT LEFT DOUBLE LOGICAL, HIWD/LOWD
+         SR    BITS,BITR           DECR BITS TO SHIFT BY SHIFTED BITR
+         B     SPLIT1              BYPASS FAST FULLWORD SKIPS
+         LR    OFST,BITS           COPY BITS REMAINING TO SHIFT TO OFST
+*                                  (DESTROYING INITAL OFFSET PARM)
+         SRA   OFST,5              DIVIDE BY 32 TO GET WORDS TO SHIFT
+*        CR    OFST,ZERO             SIMULTANEOUSLY SETTING COND CODE
+*                                  IF REMAINING SHIFT .LT. 1 WORD
+         BNH   SPLIT1              FETCH NEXT SEQUENTIAL LOWD IMMED
+         SLA   OFST,2              ELSE, MULTIPLY WDS BY 4 TO GET BYTES
+         AR    PCKD,OFST           INCR PACKED ARRAY POINTER
+         L     HIWD,0(,PCKD)         AND LOAD NEW HIWD
+         SLA   OFST,3              MULTIPY BYTES BY 8 TO GET BITS
+         SR    BITS,OFST             AND DECR BITS REMAINING TO SHIFT
+SPLIT1   LA    PCKD,NBFW(PCKD)     INCR PACKED ARY PTR
+         L     LOWD,0(,PCKD)         AND PICK UP NEXT PACKED LOWD
+         LR    BITR,WORK             RESET BITR TO 32
+         B     TEST                ITERATE AS NECESSARY
+*
+SHIFT    STH   BITS,*+6            SET UP BITS AS SLDL SHIFT COUNT
+         SLDL  HIWD,*-*            SHIFT LEFT DOUBLE LOGICAL, HIWD/LOWD
+         SR    BITR,BITS           DECR BITS REMAINING BY BITS SHIFTED
+*
+STORE    LR    BYTE,HIWD           COPY HIWD TO BYTE
+         SRL   BYTE,*-*            SHIFT RIGHT(WITH HI-ORDER ZERO FILL)
+*                                    *-* SHIFT COUNT SET UP AT INIT2
+STORE1   ST    BYTE,0(,UNPK)       FILL BYTE INTO UNPACKED ARY
+         LA    UNPK,NBFW(UNPK)       AND INCR UNPACKED ARY POINTER
+         LR    BITS,NSKP           RESTORE BITS = (NSKP+NBIT)
+         BCT   ITER,TEST           DECR ITER COUNT, CONTINUE TILL ZERO
+*
+*
+EXIT     RETURN    (0,12)          RESTORE CALLING PROG REGS (MACRO)
+*
+FAIL     LH    BYTE,=X'FFFF'       MAKE BYTE A FULL WD OF 1'S
+         ST    BYTE,0(,UNPK)         AND FILL INTO UNPACKED ARRAY
+         B     EXIT
+*
+         LTORG
+         END
+R0       EQU   X'0'
+R1       EQU   X'1'
+R2       EQU   X'2'
+R3       EQU   X'3'
+R4       EQU   X'4'
+R5       EQU   X'5'
+R6       EQU   X'6'
+R7       EQU   X'7'
+R8       EQU   X'8'
+R9       EQU   X'9'
+R10      EQU   X'A'
+R11      EQU   X'B'
+R12      EQU   X'C'
+R13      EQU   X'D'
+R14      EQU   X'E'
+R15      EQU   X'F'
+SBYTES   CSECT ,
+*
+* SBYTE/SBYTES - GENERAL BIT PACKING ROUTINES.
+*        SEE NCAR - TN/93, JANUARY 1974.
+*        D. JOSEPH           OCTOBER, 1981.
+*
+         ENTRY SBYTE
+         USING SBYTES,R15
+         SAVE                (0,12)
+         STM   R13,R14,REG13      SAVE REGISTER 13 AND 14 LOCAL.
+         LM    R11,R12,16(R1)     GET SKIP AND ITERATION COUNT.
+         L     R11,0(R11)
+         L     R12,0(R12)
+         B     START
+SBYTE    DS    0H
+         USING SBYTE,R15
+         SAVE                (0,12)
+         STM   R13,R14,REG13      SAVE REGISTER 13 AND 14 LOCAL.
+         SR    R12,R12            ZERO ITERATION COUNT.
+START    BALR  R15,R0             RE-ESTABLISH ADDRESSABILITY.
+         USING *,R15
+         LM    R7,R10,0(R1)       GET REMAINING ARG ADDRESSES.
+         LA    R1,1              SET CONSTANT ONE.
+         L     R10,0(R10)         GET BYTE SIZE.
+         LA    R0,1               MAKE MASK.
+         SLL   R0,31
+         SR    R10,R1
+         STH   R10,MASK+2
+         AR    R10,R1
+         LA    R6,32              MAKE CONSTANT 32.
+         L     R14,COMP           LOAD COMPLEMENT MASK.
+MASK     SRA   R0,*-*
+         LR    R13,R0             SAVE MASK.
+         SLL   R12,2              NUM OF ITERATIONS * FOUR.
+         AR    R12,R8             SET ITERATION LIMIT.
+         L     R4,0(R9)           APPLY INITIAL OFFSET.
+         LA    R1,96
+         CR    R4,R1              CHECK FOR LARGE OFFSET.
+         BL    NODIV
+         LR    R5,R4
+         SR    R4,R4
+         DR    R4,R6              USE DIVIDE FOR LARGE OFFSET
+         SLL   R5,2               CHANGE WORD COUNT TO BYTE COUNT.
+         AR    R7,R5
+NODIV    EQU   *
+         LA    R5,4               LOAD CONSTANT FOUR.
+RELOAD   CR    R4,R6              FIND WORD AND OFFSET.
+         BL    ILOAD              START IF OFFSET < 32.
+         SR    R4,R6
+         AR    R7,R5
+         B     RELOAD
+ILOAD    L     R9,0(R7)        GET STORE WORD.
+BEGIN    STH   R4,PMASK+2         POSITION MASK IN DOUBLE WORD.
+         SR    R1,R1
+PMASK    SRDL  R0,*-*
+         L     R3,0(R8)           LOAD BYTE FOR STORE.
+         LA    R2,64
+         SR    R2,R10             POSITION BYTE.
+         SR    R2,R4
+         STH   R2,SHIFTB+2
+         SR    R2,R2
+SHIFTB   SLDL  R2,*-*             SHIFT BYTE TO STORE.
+         NR    R2,R0              MASK ON CURRENT MASK.
+         XR    R0,R14             COMPLEMENT MASK.
+         NR    R9,R0              OPEN HOLE FOR BYTE.
+         OR    R9,R2              INSERT BYTE.
+         AR    R4,R10             ADD BYTE SIZE.
+         CR    R4,R6
+         BNH   NOPART             BRANCH IF NO PARTIAL BYTE.
+         ST    R9,0(R7)        STORE CURRENT WORD.
+         SR    R4,R6
+         AR    R7,R5             ADD FOUR TO WORD ADDRESS.
+         L     R9,0(R7)        LOAD NEXT WORD.
+         NR    R3,R1              ISOLATE PARTIAL BYTE.
+         XR    R1,R14             COMPLEMENT MASK.
+         NR    R9,R1              OPEN HOLE FOR PARTIAL BYTE.
+         OR    R9,R3              INSERT PARTIAL BYTE.
+NOPART   AR    R8,R5             COUNT BYTE.
+         CR    R8,R12             CHECK IF DONE.
+         BNL   DONE
+         AR    R4,R11             ADD SKIP AMOUNT.
+         LR    R0,R13             RELOAD MASK
+         CR    R4,R6
+         BL    BEGIN              BRANCH IF IN SAME WORD.
+         ST    R9,0(R7)           STORE CURRENT WORD.
+         B     RELOAD             GO TO GET NEW WORD.
+DONE     ST    R9,0(R7)        STORE LAST WORD.
+         LM    R13,R14,REG13      RESTORE REGISTER 13 AND 14.
+         RETURN       (0,12)
+HMASK    DS    D                  ARE FOR CURRENT MASK.
+REG13    DS    F
+REG14    DS    F
+COMP     DC    X'FFFFFFFF'        COMPLEMENT MASK.
+         LTORG
+         END
diff --git a/gribex/bt_sun.F b/gribex/bt_sun.F
new file mode 100755
index 0000000..cb6fcde
--- /dev/null
+++ b/gribex/bt_sun.F
@@ -0,0 +1,602 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C---->
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           SUN version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           ABORT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           SUN version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL ABORT
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           SUN version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 32
+      KNEG = -2147483647
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
diff --git a/gribex/bt_sun_c.c b/gribex/bt_sun_c.c
new file mode 100755
index 0000000..ef4d680
--- /dev/null
+++ b/gribex/bt_sun_c.c
@@ -0,0 +1,119 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+
+
+/* Tools for storage/retrieval of arbitrary size bytes from 32 bit words
+    (note - this version is not currently (6/30/88) described in the
+    gbytes document)
+ Modified by Arne Jorgensen 12-April-1991 (SUN routine)
+
+    gbytes(p,u,q,b,s,n)
+    gbyte (p,u,q,b)
+    sbytes(p,u,q,b,s,n)
+    sbyte (p,u,q,b)
+
+             q >= 0     number of bits to be skipped preceding first
+                        byte in p
+      0 <    b < sword  byte size
+             s >= 0     number of bits to be skipped between bytes
+             n >= 0     number of bytes to be packed/unpacked
+
+    gbytes unpacks n b bit bytes from p into u, starting by skipping
+         q bits in p, then skipping s bits between bytes.
+    gbyte unpacks one such byte.
+    sbytes   packs n b bit bytes from u into p, starting by skipping
+         q bits in p, then skipping s bits between bytes.
+    sbyte  packs one such byte. */
+#define SWORD 32                            /* Word size in bits */
+#define MASK 0xffffffff                    /* Mask of sword bits */
+#define G1BYTE(p,q,b) ((b==32 ? MASK : ~(MASK<<b)) & (p>>(SWORD-(q+b))))
+                                    /* Get 1 word contained byte */
+# define MASK1(q,b) (b==32 ? MASK : (~(MASK<<b)<<(SWORD-(q+b))))
+                                           /* Mask of sword bits */
+gsbytes(p,u,q,b,s,n,gsbyte)   /* Common code for gbytes, sbytes */
+long p[],u[],*q,*b,*s,*n;
+int (*gsbyte)();
+{       long jp,jq,ju;
+        jp = 0;
+        jq = *q;
+        for (ju = 0; ju < *n; ++ju) {
+                 (*gsbyte)(&p[jp],&u[ju],&jq,b);
+                 jq += *b + *s;
+                 jp += jq/SWORD;
+                 jq %= SWORD;
+        }
+}
+gbytes_(p,u,q,b,s,n)
+long p[],u[],*q,*b,*s,*n;
+{
+        int gbyte_();
+        gsbytes(p,u,q,b,s,n,gbyte_);
+}
+gbyte_(p,u,q,b)
+long p[],*u,*q,*b;
+{
+        long qb,j,lb,jq,jb;
+
+        jq = *q;
+        jb = *b;
+        if (jq >= SWORD) {
+                 j = jq/SWORD; /* number of words offset */
+                 jq %= SWORD;  /* odd bits of offset     */
+        }
+        else {
+                 j=0;
+        }
+        qb = jq + jb;
+        if (qb > SWORD) {
+                 qb = SWORD - jq;
+                 jb -= qb;
+                 lb = (G1BYTE(p[j],jq,qb)) << jb;
+                 jq = 0;
+                 j++;  /* increment to next word */
+        }
+        else lb = 0;
+        *u = lb + (G1BYTE(p[j],jq,jb));
+}
+sbytes_(p,u,q,b,s,n)
+long p[],u[],*q,*b,*s,*n;
+{
+        int sbyte_();
+        gsbytes(p,u,q,b,s,n,sbyte_);
+}
+sbyte_(p,u,q,b)
+long p[],*u,*q,*b;
+{
+        long qb,j,jq,jb,rb;
+
+        jq = *q;
+        jb = *b;
+        if (jq >= SWORD) {
+                 j = jq / SWORD;    /* number of words offset */
+                 jq %= SWORD;       /* odd bit offset         */
+        }
+        else {
+                 j = 0;
+        }
+        qb = jq + jb;
+        if (qb > SWORD) {
+                 qb = SWORD - jq;
+                 jq = SWORD - jb;
+                 jb -= qb;
+                 p[j] = ((p[j] >> qb) << qb) + (G1BYTE(*u,jq,qb));
+                 jq = 0;
+                 j++;  /* point to next word */
+        }
+        rb = G1BYTE(*u,SWORD-jb,jb);
+        p[j] = (p[j] & ~MASK1(jq,jb)) + (rb << SWORD-(jb+jq));
+}
+
diff --git a/gribex/bt_vax.F b/gribex/bt_vax.F
new file mode 100755
index 0000000..668e676
--- /dev/null
+++ b/gribex/bt_vax.F
@@ -0,0 +1,992 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C---->
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           VAX version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           EXIT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           VAX version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL EXIT (-1)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           VAX version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 32
+      KNEG = -2147483648
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+      SUBROUTINE GBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C
+C**** GBITS - VAX routine.
+C
+      DIMENSION NPACK(*),ISAM(*)
+      PARAMETER (LENWRD=32)
+C
+C     ++++++++++
+C     CALL GBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     STARTS UNPACKING BITS AT BIT OFFSET IBIT IN ARRAY
+C     NPACK.  IT TAKES NBITS AND STORES THEM IN THE LONGWORD
+C     ARRAY STARTING AT ISAM.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE NEXT FIELD OF NBITS IS UNPACKED INTO THE
+C     NEXT ISAM.  THIS IS DONE A TOTAL OF ITER TIMES.
+C
+C     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+C     IT IS SIMILAR TO NCAR'S GBYTE BUT IT WORKS WITH
+C     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+C     ----------
+C
+      ISW = 1
+      GO TO 8
+C
+C
+      ENTRY SBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C
+C     ++++++++++
+C     CALL SBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     THIS ROUTINE TAKES THE FIRST LONGWORD LOCATED AT
+C     ISAM AND STORES IT INTO THE NBITS OF NPACK STARTING AT
+C     BIT OFFSET IBIT.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE PROCESS IS REPEATED A TOTAL OF ITER TIMES.
+C
+C     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+C     IT IS SIMILAR TO NCAR'S SBYTE BUT IT WORKS WITH
+C     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+C     ----------
+      ISW = 2
+      GO TO 8
+C
+C     ++++++++++
+      ENTRY G_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     CALL G_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     STARTS UNPACKING BITS AT BIT OFFSET IBIT IN ARRAY
+C     NPACK.  IT TAKES NBITS AND STORES THEM IN THE LONGWORD
+C     ARRAY STARTING AT ISAM.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE NEXT FIELD OF NBITS IS UNPACKED INTO THE
+C     NEXT ISAM.  THIS IS DONE A TOTAL OF ITER TIMES.
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+      ISW = 3
+      GO TO 8
+C
+C     ++++++++++
+      ENTRY S_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     CALL S_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     THIS ROUTINE TAKES THE FIRST LONGWORD LOCATED AT
+C     ISAM AND STORES IT INTO THE NBITS OF NPACK STARTING AT
+C     BIT OFFSET IBIT.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE PROCESS IS REPEATED A TOTAL OF ITER TIMES.
+C
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+      ISW = 4
+      GOTO 8
+C
+C     ++++++++++
+      ENTRY GBYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C        THIS ROUTINE IS JUST A REPEATED CALL TO G_BYTE
+C        WHERE SUCCESSIVE CALLS SKIP NSKIP BITS
+C        AND THE LOOP COUNT IS ITER
+      ISW = 5
+      GOTO 8
+C
+C     ++++++++++
+      ENTRY SBYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C        THIS ROUTINE IS JUST A REPEATED CALL TO S_BYTE
+C        WHERE SUCCESSIVE CALLS SKIP NSKIP BITS
+C        AND THE LOOP COUNT IS ITER
+      ISW = 6
+      GO TO 8
+C
+C     ++++++++++
+      ENTRY GBILS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     GBIL(S)/SBIL(S) ENTRIES ALLOW DIRECT MAINTENANCE OF LEFT TO RIGHT
+C     BIT STRINGS IN DEC ENVIRONMENT (VAX). THE MODIFICATION RETAINS FUL
+C     COMPATIBILITY WITH ORIGINAL ENTRIES, HOWEVER, VERIFICATION BEYOND
+C     GBIL(S)/SBIL(S) WAS VIA GBITS/SBITS ONLY (NOT GBYTES/SBYTES).
+C
+C     MODIFICATION PROGRAMMED BY A.D.STROUD, COMPASS SYSTEMS, INC.
+C     NOVEMBER 1987 UNDER TOGA GRAND FUNDING DURING SOFTWARE DEVELOPMENT
+C     FOR WMO PROPOSED STANDARD FM 94 BUFR ON THE VAX STATION II AT THE
+C     OAG/NOS/NOAA, MONTEREY, CA.
+C
+C     FOR GBIL(S)/SBIL(S) THE FOLLOWING PARAMETER USAGE APPLIES
+C
+C     NPACK   - LEFT MOST(HIGHEST INDEXED) LONGWORD IN PACKED BIT STRING
+C               ARRAY SPACE INFERRED BY IBIT(IN LIEU OF LOWEST INDEX FOR
+C               NON-DEC, NOTE - SECOND 32 BIT SUBSTRING IN BIT STRING IS
+C               NPACK(0), THIRD 32 BIT SUBSTRING IS NPACK(-1), ETC.,...)
+C
+C     ISAM    - ARRAY HOLDING/TO HOLD UNPACKED ELEMENT(S) (RJZF) FOR
+C               SBIL(S)/GBIL(S), RESPECTIVELY.
+C
+C     IBIT    - INITIAL LEFT TO RIGHT BIT SKIP WITHIN THE NPACK BIT STRI
+C               (INCLUDING LEFTMOST BIT OF NPACK, INTERPRET BIT SKIP THE
+C                SAME AS IN NON-DEC ENVIRONMENT)
+C
+C     NBITS   - FIXED BIT WIDTH OF EACH ELEMENT TO BE UNPACKED.
+C
+C     NSKIP   - FIXED LEFT TO RIGHT BIT SKIP WIDTH BETWEEN ELEMENTS.
+C
+C     ITER    - NUMBER OF ELEMENTS TO UNPACK(IMPLIED MINIMUM DIMENSIONAL
+C               OF ISAM ARRAY).
+C
+C     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     EXAMPLE
+C
+C  1) PARAMETER (N4=1000 , NB=4000, NL=1000)
+C  2) INTEGER I4(N4),UNPACK(99)
+C  3) BYTE IB(NB)
+C  4) EQUIVALENCE (I4(1),IB(1))
+C
+C  5) READ(LUI,'(4000A1)') (IB(I),I=NB,1,-1)
+C                FORMATTED READ OF ARBITRARY BITSTRING FROM NON-DEC
+C                SITE, OR FROM DEC FILE AS WRITTEN AT 9) BELOW.
+C
+C  6) CALL GBILS(I4(NL),UNPK,67,22,47,95)
+C                AFTER INITIALLY SKIPPING 67 BITS TO A POINT BEYOND THE
+C                LEFTMOST THREE BITS OF I4(NL-2), GBILS ACQUIRES 95
+C                SUBSTRING ELEMENTS OF THE WIDTH 22 BITS(EACH RIGHT JUST
+C                WITH HIGH ORDER ZERO FILL) INTO THE RESPECTIVE FIRST
+C                95 ARRAY ELEMENTS OF UNPK. SEPARATED BY 47 BITS IN SOUR
+C                BITSTRING ARRAY I4, THE EXTRACTED DUPLICATE SUBSTRING
+C                ELEMENTS ARE NOW EFFECTIVELY SEPARATED FROM EACH OTHER
+C                BY 10 ZERO BITS IN OBJECT BITSTRING ARRAY UNPK.
+C
+C 7) UNPK(J)=... (J=1,95)
+C
+C 8) CALL SBILS(I4(NL),UNPK,67,22,47,95)
+C                AFTER INITIALLY SKIPPING 67 BITS TO A POINT BEYOND THE
+C                LEFTMOST THREE BITS OF I4(NL-2), SBILS STORES IN SUCCES
+C                SIVE BITS THE FIRST OF 95 MODIFIED UNPK RIGHTMOST 22 BI
+C                WIDTH SUBSTRING ELEMENTS. AFTER SKIPPING 47 BITS BEYOND
+C                THE RIGHTMOST OF THE FIRST 22 BITS STORED, THE SECOND 2
+C                BIT ELEMENT IS STORED, ETC. THE ORIGINAL SUBSTRING
+C                ELEMENTS HAVE BEEN REPLACED BY MODIFIED SUBSRING ELEMEN
+C                IN SITU WITHIN THE BITSTRING ARRAY I4 WITHOUT MODIFYING
+C                ANY OTHER BITS.
+C
+C 9) WRITE(LUO,'(4000A1)') (IB(I),I=NB,1,-1)
+C                FILE FOR NON-DEC OR FOR READ 5) ABOVE.
+C
+C
+C
+      ISW = 7
+      GO TO 6
+C
+C     ++++++++++
+      ENTRY SBILS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C
+      ISW = 8
+      GO TO 6
+C
+C     ++++++++++
+      ENTRY GBIL(NPACK,ISAM,IBIT,NBITS)
+C     ++++++++++
+C
+      ISW = 9
+      GO TO 5
+C
+C     ++++++++++
+      ENTRY SBIL(NPACK,ISAM,IBIT,NBITS)
+C     ++++++++++
+C
+      ISW=10
+ 5    ITER1= 1
+      NSKIP1=-NBITS
+      GO TO 7
+C
+ 6    NSKIP1=-NSKIP-NBITS
+C
+ 7    JOFF=-IBIT-NBITS
+      IF(ISW.LT.9) GO TO 9
+      GO TO 10
+C
+ 8    NSKIP1=NSKIP+NBITS
+      JOFF=IBIT
+C
+ 9    ITER1=ITER
+C
+C
+ 10   DO 30 I = 1 , ITER1
+C
+         IF(JOFF.GT.0) IBASE=JOFF/LENWRD+1
+         IF(JOFF.LE.0) IBASE=(JOFF+1)/LENWRD+1
+         IOFF=MOD(JOFF,LENWRD)
+         IF(JOFF.LE.0) IOFF=MOD(IOFF+LENWRD,LENWRD)
+C
+         GO TO(11,12,13,14,15,16,11,12,11,12) ISW
+C
+11       CALL GBIT(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+12       CALL SBIT(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+13       CALL G_BYTe(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+14       CALL S_BYTE(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+15       CALL GBYTE(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GOTO 20
+16       CALL SBYTE(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GOTO 20
+20       JOFF = JOFF + NSKIP1
+30    CONTINUE
+      RETURN
+      END
+      SUBROUTINE GBYTE(NPACK,ISAM,IBIT,NBITS)
+C
+C**** GBYTE - VAX routine.
+C
+C     ++++++++++
+C     CALL GBYTE(NPACK,ISAM,IBIT,NBITS)
+C     STARTS UNPACKING BITS AT BIT OFFSET IBIT IN ARRAY
+C     NPACK.  IT TAKES NBITS AND STORES THEM IN THE LONGWORD
+C     ARRAY STARTING AT ISAM.
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+C
+C     GBYTE AND SBYTE ARE SPECIAL ROUTINES TO DO THE SAME
+C     THINGS AS THEIR COUNTERPARTS ON THE MESA.
+C     THEY DIFFER FROM THE BITS ROUTINES IN THAT BITS
+C     ARE COUNTED FROM THE TOP OF THE WORD RATHER THAN
+C     THE BOTTOM.  THIS MEANS THAT THE BITS THEY SPECIFY JUMP AROUND
+C     WHEN CROSSING BYTE BOUNDARIES.  THERE IS NO ASSUMPTION
+C     MADE ABOUT THE WORDSIZE OF THE MACHINE THEY WERE WRITTEN
+C     ON.  HOWEVER THE MAXIMUM NUMBER OF BITS EXTRACTED MUST BE
+C     LESS THAN OR EQUAL TO 32.
+C
+      BYTE NPACK(8)
+      INTEGER T
+      EXTERNAL SS$_ABORT
+      IDBIT(I) = 7 - MOD(I,8)
+      ISW = 3
+      ISAM = 0
+      GO TO 10
+      ENTRY SBYTE(NPACK,ISAM,IBIT,NBITS)
+C     ++++++++++
+C     CALL SBYTE(NPACK,ISAM,IBIT,NBITS)
+C     THIS ROUTINE TAKES THE FIRST LONGWORD LOCATED AT
+C     ISAM AND STORES IT INTO THE NBITS OF NPACK STARTING AT
+C     BIT OFFSET IBIT.
+C
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+      ISW = 4
+10    IBASE = IBIT/8
+C     IBASE POINTS TO THE FIRST BYTE INVOLVED
+      IOFF = IBIT - 8*IBASE
+C     IOFF IS THE BIT OFFSET WITHIN FIRST BYTE
+      M = (IOFF+NBITS-1)/8 + 1
+C     M IS THE NUMBER OF BYTES (INCLUDING PARTIALS) INVOLVED
+C     IF(M.GT.5)THEN
+      IF(NBITS.GT.32)THEN
+         TYPE *,'ILLEGAL VALUE FOR NBITS IN S/GBYTE(S) CALL'
+         CALL SYS$EXIT(SS$_ABORT)
+      END IF
+      NN = 0
+C     NN IS THE NUMBER OF BITS TRANSFERRED
+      DO 20 I = M , 1 , -1
+C     LOOP ON BYTES
+         IS = IDBIT(0)
+C        CALC FIRST BIT WITHIN BYTE
+         IE = IDBIT(7)
+C        CALC LAST BIT WITHIN BYTE
+         IF(I.EQ.1)IS = IDBIT(IOFF)
+C        FIRST BIT VARIES FOR FIRST BYTE
+         IF(I.EQ.M)IE = IDBIT(IOFF+NBITS-1)
+C        LAST BIT VARIES FOR LAST BYTE
+         N = IS - IE + 1
+C        CALC NUMBER OF BITS WITHIN BYTE TO XFER
+         IF(ISW.EQ.4)GO TO 12
+         CALL GBIT(NPACK(IBASE+I),T,IE,N)
+C        EXTRACT BITS FROM SOURCE
+         CALL SBIT(ISAM,T,NN,N)
+C        AND LOAD INTO DESTINATION
+         GO TO 15
+12       CALL GBIT(ISAM,T,NN,N)
+C        EXTRACT BITS FROM SOURCE
+         CALL SBIT(NPACK(IBASE+I),T,IE,N)
+C        AND LOAD INTO DESTINATION
+15       NN = NN + N
+C        UPDATE BITS XFERRED
+20    CONTINUE
+      RETURN
+      END
+      SUBROUTINE G_BYTE(NPACK,ISAM,IBIT,NBITS)
+C
+C**** G_BYTE - VAX routine.
+C
+C     G_BYTE AND S_BYTE ARE SPECIAL ROUTINES TO DO THE SAME
+C     THINGS AS THEIR COUNTERPARTS ON THE MESA.
+C     THEY DIFFER FROM THE BITS ROUTINES IN THAT BITS
+C     ARE COUNTED FROM THE TOP OF THE WORD RATHER THAN
+C     THE BOTTOM.  THIS MEANS THAT THE BITS THEY SPECIFY JUMP AROUND
+C     WHEN CROSSING BYTE BOUNDARIES.  THERE IS NO ASSUMPTION
+C     MADE ABOUT THE WORDSIZE OF THE MACHINE THEY WERE WRITTEN
+C     ON.  HOWEVER THE MAXIMUM NUMBER OF BITS EXTRACTED MUST BE
+C     LESS THAN OR EQUAL TO 32.
+C
+      BYTE NPACK(8)
+      INTEGER T
+      EXTERNAL SS$_ABORT
+      IDBIT(I) = 7 - MOD(I,8)
+      ISW = 3
+      ISAM = 0
+      GO TO 10
+      ENTRY S_BYTE(NPACK,ISAM,IBIT,NBITS)
+      ISW = 4
+10    IBASE = IBIT/8
+C     IBASE POINTS TO THE FIRST BYTE INVOLVED
+      IOFF = IBIT - 8*IBASE
+C     IOFF IS THE BIT OFFSET WITHIN FIRST BYTE
+      M = (IOFF+NBITS-1)/8 + 1
+C     M IS THE NUMBER OF BYTES (INCLUDING PARTIALS) INVOLVED
+C     IF(M.GT.5)THEN
+      IF(NBITS.GT.32)THEN
+         TYPE *,'ILLEGAL VALUE FOR NBITS IN S/G_BYTE(S) CALL'
+         CALL SYS$EXIT(SS$_ABORT)
+      END IF
+      NN = 0
+C     NN IS THE NUMBER OF BITS TRANSFERRED
+      DO 20 I = M , 1 , -1
+C     LOOP ON BYTES
+         IBB = IBASE + I - 1
+         IBC = IBB/4
+         IBD = 4*IBC+3-MOD(IBB,4) + 1
+C        CALCULATE UNSHIFTED BYTE
+         IS = IDBIT(0)
+C        CALC FIRST BIT WITHIN BYTE
+         IE = IDBIT(7)
+C        CALC LAST BIT WITHIN BYTE
+         IF(I.EQ.1)IS = IDBIT(IOFF)
+C        FIRST BIT VARIES FOR FIRST BYTE
+         IF(I.EQ.M)IE = IDBIT(IOFF+NBITS-1)
+C        LAST BIT VARIES FOR LAST BYTE
+         N = IS - IE + 1
+C        CALC NUMBER OF BITS WITHIN BYTE TO XFER
+         IF(ISW.EQ.4)GO TO 12
+C        CALL GBIT(NPACK(IBASE+I),T,IE,N)
+         CALL GBIT(NPACK(IBD),T,IE,N)
+C        EXTRACT BITS FROM SOURCE
+         CALL SBIT(ISAM,T,NN,N)
+C        AND LOAD INTO DESTINATION
+         GO TO 15
+12       CALL GBIT(ISAM,T,NN,N)
+C        EXTRACT BITS FROM SOURCE
+C        CALL SBIT(NPACK(IBASE+I),T,IE,N)
+         CALL SBIT(NPACK(IBD),T,IE,N)
+C        AND LOAD INTO DESTINATION
+15       NN = NN + N
+C        UPDATE BITS XFERRED
+20    CONTINUE
+      RETURN
+      END
diff --git a/gribex/bt_vax_mar.mar b/gribex/bt_vax_mar.mar
new file mode 100755
index 0000000..aee718b
--- /dev/null
+++ b/gribex/bt_vax_mar.mar
@@ -0,0 +1,29 @@
+      .TITLE   SGBIT
+;     ++++++++++
+;     CALL GBIT(NPACK,ISAM,IBIT,NBITS)
+;     UNPACKS THE BIT PATTERN LOCATED AT A BIT OFFSET
+;     OF IBIT IN NPACK OF LENGTH NBITS INTO ISAM.
+;
+;     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+;     IT IS SIMILAR TO NCAR'S GBYTE BUT IT WORKS WITH
+;     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+;     ----------
+      .PSECT    MACRO_CODE PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT,NOVEC
+      .ENTRY   GBIT,0
+      EXTZV @12(AP), at 16(AP), at 4(AP), at 8(AP)  ;ISN'T THIS NEAT ?
+      RET
+;
+;
+;     ++++++++++
+;     CALL SBIT(NPACK,ISAM,IBIT,NBITS)
+;     PACKS THE VALUE IN ISAM INTO NPACK
+;     WITH NBITS OFFSET BY IBIT.
+;
+;     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+;     IT IS SIMILAR TO NCAR'S SBYTE BUT IT WORKS WITH
+;     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+;     ----------
+      .ENTRY   SBIT,0
+      INSV  @8(AP), at 12(AP), at 16(AP), at 4(AP)  ;ISN'T THIS NEAT ?
+      RET
+      .END
diff --git a/gribex/btcray.special b/gribex/btcray.special
new file mode 100755
index 0000000..0da7a18
--- /dev/null
+++ b/gribex/btcray.special
@@ -0,0 +1,1141 @@
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C           GSBITE
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           Cray version of routine.
+C           This routine should only be used on the Cray as it
+C           contains a call to GSBITE, a vectorising version of
+C           GBYTE(S) and SBYTE(S).
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+      INTEGER IMASK
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+      DIMENSION IMASK(65)
+C
+      CHARACTER*1 HFUNC
+C
+C     Values in IMASK are set in the first call to routine GSBITE, and
+C     are used in subsequent calls.
+C
+      SAVE IMASK
+C
+C     Force routine GSBITE to calculate bit-masks first time through.
+C
+      DATA IMASK(2) /0/
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (KNUM.GE.8)
+     C   THEN
+C
+C            Cray vectorising routine GSBITE performs the same
+C            functions as SBYTE(S) and GBYTE(S).
+C
+             CALL GSBITE (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM,
+     C                    KBIT,IMASK,HFUNC)
+         ELSE
+C
+C            Cray scalar faster.
+C
+             IF (HFUNC.EQ.'C')
+     C          THEN
+                    CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+                ELSE
+                    CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+                ENDIF
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           ABORT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cray version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL ABORT
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cray version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 64
+      KNEG = -9223372036854775807
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+      SUBROUTINE GSBITE (KS,KD,KSKST,KSIZE,KSKBTW,K,KBPW,KMASK,HADIR)
+C
+C**** GSBITE - Extraction/insertion of bits from/to bitstream on Cray.
+C
+C     Purpose.
+C     --------
+C
+C           Vectorising extraction/insertion of bits from/to bitstream.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GSBITE (KS,KD,KSKST,KSIZE,KSKBTW,K,KBPW,KMASK,HADIR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KS      - If HADIR='D', input bit stream, else output
+C                         bit stream.
+C               KD      - If HADIR='D', output words, else input words.
+C               KSKST   - Number of bits skipped at beginning of KS.
+C               KSIZE   - Number of bits to be extracted to one word
+C                         of KD.
+C               KSKBTW  - Number of bits skipped between two words to
+C                         be extracted.
+C               K       - Number of words to be extracted into KD. If
+C                         less than or equal to 0 only calculate KBPW
+C                         and KMASK.
+C               KBPW    - Number of bits per word in KS,calculated if 0.
+C               KMASK   - Masks for bit patterns, calculated if
+C                         KMASK(2) is 0.
+C               HADIR   - Direction of conversion: 'D' for decoding, ie
+C                         extract words KD(1...K) from bits
+C                         KS(KSKST+1....)
+C                         If not 'D', encode, i.e. pack words
+C                         KD(1....K) into bits
+C                         KS(KSKST+1.....KSKST+K*(KSIZE+KSKBTW))
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KS,KD   - See above.
+C               KSKST   - Updated to number of bits used, i.e. to
+C                         KSKST+K*(KSIZE+KSKBTW)
+C               KBPW    - If 0 on input, number of bits in each word
+C                         of KS.
+C               KMASK   - If KMASK(2) was 0 on input, bit pattern masks.
+C
+C     Method.
+C     -------
+C
+C           Vector loop is over repeatedly occurring bit patterns.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           This routine is for the Cray only.
+C           Variable names do not conform to the standard.
+C
+C     Author.
+C     -------
+C
+C           G.J.Cats 08 Dec 87
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy     ECMWF     09.09.91
+C           Introductory comments changed to conform to standard.
+C
+C     ------------------------------------------------------------------
+C
+      DIMENSION KS(*),KD(*),KMASK(*)
+      CHARACTER*1 HADIR
+C
+C     STATEMENT FUNCTIONS TO MANIPULATE BITS IN WORDS OF 64 BITS
+C
+C     DATA ONES/7777777777777777B/
+C     DATA OOOS/0B/
+C
+C     1.  SINGLE BIT MANIPULATIONS
+C
+C     1.1 SET BIT KBIT IN WORD PW
+C
+      IBSET(KW,KBIT)=OR(KW,SHIFT(1B,KBIT))
+C
+C     2.  WORD MANIPULATIONS, BIT BY BIT
+C
+C     2.1 ARE WORDS PW1 AND PW2 EQUAL?
+C
+C      LOGICAL NLEQAL
+C     NLEQAL(PW1,PW2)=(PW1.XOR.PW2).EQ.0B
+C
+C     2.2 BITWISE AND AND OR
+C
+      IAND(K1,K2)=AND(K1,K2)
+      IOR (K1,K2)= OR(K1,K2)
+C
+C     2.3 BITWISE NEGATION
+C
+      NOT(K)=COMPL(K)
+C
+C     2.4 SHIFT (LEFT FOR KSH POSITIVE, RIGHT FOR KSH NEGATIVE
+C
+      ISHFT(K,KSH)=CVMGP(SHIFTL(K,KSH),SHIFTR(K,-KSH),KSH)
+C
+C     3.  SPECIAL PURPOSE
+C
+C     3.1 TAKE 4 LAST BITS OF KW, PUT THEM IN PW AT POS K*4-1
+C
+C     SETLEV(PW,KW,K)=OR(AND(PW,SHIFT(0B.EQV.17B,K*4-4)),
+C    +SHIFT(AND(17B,KW),K*4-4))
+C
+C     3.2 EXTRACT FIELD [K*4-1:4] FROM PW
+C
+C     MGTLEV(PW,K)=AND(17B,SHIFT(PW,68-K*4))
+C
+C     1.  COMPLETE KBPW AND KMASK, RETURN IF 0 WORDS ARE TO BE EXTRACTED
+C
+      IF(KBPW.EQ.0)THEN
+         IS=KS(1)
+         KS(1)=1
+ 1101    CONTINUE
+         IF(KS(1).NE.0)THEN
+            KBPW=KBPW+1
+            KS(1)=ISHFT(KS(1),1)
+            GOTO 1101
+         ENDIF
+         KS(1)=IS
+      ENDIF
+      IF(KMASK(2).EQ.0)THEN
+         KMASK(KBPW+1)=0
+         DO 1110 J=KBPW,1,-1
+         KMASK(J)=IBSET(KMASK(J+1),KBPW-J)
+ 1110    CONTINUE
+      ENDIF
+      IF(K.LE.0)RETURN
+C
+C     2.  PRESET KD TO 0 IF KD IS OUTPUT I.E. WHEN DECODING
+C
+      IF(HADIR.EQ.'D')THEN
+         DO 2101 J=1,K
+         KD(J)=0
+ 2101    CONTINUE
+      ENDIF
+C
+C     3.  CALCULATE SEVERAL PARAMETERS FOR LOOPING (FOR EFFICIENCY, THE
+C         CODE OF SECTIONS 3.3 AND 3.4 FOR K=1 IS SEPARATED INTO 3.2)
+C
+C     3.1 NUMBER OF BITS USED PER WORD, INITIAL NR OF SKIPPED BITS
+C
+      ISTEP=KSIZE+KSKBTW
+      ISKWS=KSKST
+C
+C     3.2 VECTOR LOOP LENGTH AND STEP SIZE IN KD IF K=1;KS STEP IRRELVNT
+C
+      IF(K.EQ.1)THEN
+         ILL=1
+         IBDL=2
+         ISTD=1
+      ELSE
+C
+C     3.3 STEP SIZES IN KS,KD: INVERSE OF LARGEST FACTOR OF ISTEP,KBPW
+C
+         ILCF=KBPW
+         ISHF=ISTEP
+ 331     CONTINUE
+         IF(ILCF.EQ.ISHF)GOTO 332
+         IF(ILCF.EQ.1)GOTO 332
+         IF(ILCF.GT.ISHF)THEN
+            ILCF=ILCF-ISHF
+         ELSE
+            ISHF=ISHF-ILCF
+         ENDIF
+         GOTO 331
+ 332     CONTINUE
+         ISTD=KBPW/ILCF
+         ISTS=ISTEP/ILCF
+C
+C     3.4 VECTOR LOOP LENGTH AND SWITCH-OVER POINT FOR SMALLER LOOP
+C
+         ILL=(K-1)/ISTD+1
+         IBDL=K-(ILL-1)*ISTD
+      ENDIF
+C
+C     4.  LOOP OVER FIRST ISTD WORDS OF KD (TRAILS THE VECTOR LOOP)
+C
+      DO 790 JBD=1,ISTD
+C
+C     4.1 LAST BIT IN KS TO BE TREATED
+C
+      IENBS=ISKWS+KSIZE
+C
+C     4.2 NR OF WORDS OF KS TO BE SKIPPED, NR OF BITS IN THOSE AND THIS
+C
+      ISKW=ISKWS/KBPW
+      ISTA=ISKW*KBPW
+      ISKB=ISKWS-ISTA
+C
+C     4.3 MASK AND LEFT SHIFT FOR THE REMAINING BITS
+C
+      IMASK=KMASK(ISKB+1)
+      ISH=KSIZE+ISKB
+C
+C     4.4 POSITION OF CURRENT WORD OF KS
+C
+      IBS=ISKW+1
+C
+C     5.  LOOP OVER WORDS OF KS CONTRIBUTING TO ONE WORD OF KD
+C
+ 500  CONTINUE
+C
+C     5.1 UPDATE SHIFT AND LAST BIT IN CURRENT WORD
+C
+      ISH=ISH-KBPW
+      IEND=ISTA+KBPW
+C
+C     5.2 IS LAST BIT OF CURRENT WORD OUTSIDE RANGE TO BE EXTRACTED
+C
+      IF(IEND.GT.IENBS)THEN
+         ISH=IENBS-IEND
+         IMASK=IAND(IMASK,NOT(KMASK(KBPW+ISH+1)))
+      ENDIF
+C
+C     5.3 INITIAL OFFSETS FOR VECTOR ELEMENTS IN VECTOR LOOP
+C
+      IOS=0
+      IOD=0
+C
+C     6.  VECTOR LOOP IS OVER REPEATEDLY OCCURRING BITPATTERNS/MASKS
+C
+      IF(HADIR.EQ.'D')THEN
+CDIR$ IVDEP
+         DO 611 JI=1,ILL
+         KD(JBD+IOD)=IOR(KD(JBD+IOD),ISHFT(IAND(IMASK,KS(IBS+IOS)),ISH))
+         IOD=IOD+ISTD
+         IOS=IOS+ISTS
+ 611     CONTINUE
+      ELSE
+CDIR$ IVDEP
+         DO 612 JI=1,ILL
+         KS(IBS+IOS)=IOR(
+     +   IAND(      KS(IBS+IOS),      NOT(IMASK)),
+     +   IAND(ISHFT(KD(JBD+IOD),-ISH),    IMASK ))
+         IOD=IOD+ISTD
+         IOS=IOS+ISTS
+ 612     CONTINUE
+      ENDIF
+C
+C     7.  END LOOPS
+C
+C     7.1 PREPARE FOR END OF LOOP OVER WORDS OF KS WITIHN ONE KD WORD
+C
+      ISTA=ISTA+KBPW
+C
+C     7.2 NEXT WORD OF KD IF EXTRACTION NOT COMPLETED
+C
+      IF(ISTA.LT.IENBS)THEN
+         IMASK=KMASK(1)
+         IBS=IBS+1
+         GOTO 500
+      ENDIF
+C
+C     7.8 PREPARE FOR END OF LOOP OVER FIRST WORDS OF KD
+C
+      IF(JBD.EQ.IBDL)ILL=ILL-1
+      ISKWS=ISKWS+ISTEP
+C
+C     7.9 END LOOP OVER FIRST WORDS OF KD
+C
+ 790  CONTINUE
+C
+C     8.  FINISHED: UPDATE KSKST AND RETURN
+C
+      KSKST=KSKST+K*ISTEP
+C
+      RETURN
+      END
+      SUBROUTINE GBYTE  (SOURCE,DEST,IOFSET,IBYTSZ)
+C
+C**** GBYTE  - Extract a single bit field. Cray routine.
+C
+C*    FUNCTION: GET A SINGLE BIT FIELD FROM SOURCE INTO DEST
+C*
+C*    INPUT   : SOURCE(1)= WORD CONTAINING START OF BIT FIELD
+C*              DEST     = TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST CONTAINS FIELD RIGHT JUSTIFIED
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+      PARAMETER(NBPW=64)
+      INTEGER SOURCE(1),DEST
+      INTEGER SH1
+      SH1=IOFSET+IBYTSZ-NBPW
+
+      IF(SH1.GT.0) GO TO 2
+
+
+C     BYTES DO NOT SPAN WORDS
+
+
+      SH1=NBPW+SH1
+
+
+      DEST=AND(
+     1          SHIFT(SOURCE(1),SH1),
+     2          SHIFT(MASK(IBYTSZ),IBYTSZ)
+     3        )
+
+      RETURN
+
+C     BYTE SPANS WORDS
+
+2     CONTINUE
+
+
+      DEST=OR(
+     1        SHIFT(
+     2              AND(SOURCE(1),COMPL(MASK(IOFSET)))
+     3              ,SH1),
+     4        SHIFT(
+     5              AND(SOURCE(2),MASK(SH1))
+     6              ,SH1)
+     7       )
+
+
+
+      RETURN
+      END
+      SUBROUTINE GBYTES (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** GBYTES - Extract a number of bit fields. Cray routine.
+C
+C S CONTAINS A BIT STRING OF INDEFINITE LENGTH. GBYTES WILL
+C EXTRACT NBYTES BITSTRINGS, IBSIZ BITS LONG, AND STORE THEM
+C RIGHT JUSTIFIED 0 FILL, INTO SUCCESSIVE WORDS OF D. THE
+C SUCCESSIVE BITSTRINGS START AT BIT POSITIONS
+C     ISKIP1+1+(IBYTE-1)*(IBSIZ+ISKIP2)
+C IN THE BIT STRING S. I.E. SKIP ISKIP1 BITS AT THE START,
+C AND ISKIP2 BITS BETWEEN THE EXTRACTED STRINGS.
+C BIT ISKP+1 IN A STRING IS FOUND IN WORD IS=1+ISKIP/NBPW IN S,
+C WHERE NBPW IS THE NUMBER OF BITS PER WORD. THE STARTING BIT
+C IS FOUND BY SKIPPING MOD(ISKP,NBPW) BITS IN THAT WORD.
+C KWOFF IS AN OPTIONAL 7TH PARAMETER, WHICH DEFAULTS TO 0
+C IF PRESENT KWOFF BITS ARE TOTALLY IGNORED AT THE START OF A WORD
+C THUS IF A PACKED CYBER BIT STRING IS TRANSFERRED TO THE
+C CRAY, WITH EACH 60 BIT CYBER WORD PLACED AT THE RIGHT END OF
+C A 64 BIT CRAY WORD, A BYTE SEQUENCE WHICH WAS ORIGINALLY
+C LOCATED WITH START POINTS IN ARITHMETIC PROGRESSION ON THE
+C CYBER, WILL NO LONGER HAVE THIS PROPERTY ON THE CRAY. BY
+C USING THE ROUTINE WITH KWOFF=4, THE ELEMENTS OF THE BYTE
+C SEQUENCE CAN BE EXTRACTED ON THE CRAY, USING THE SAME SKIPS
+C AS WERE USED ON THE CYBER.
+C
+      PARAMETER(NBPW=64)
+      DIMENSION S(2) , D(NBYTES)
+      INTEGER SH1
+      IGNORE = 0
+      IF(NUMARG().GT.6) IGNORE = KWOFF
+      IS=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION DETERMINED, THE
+C DESIRED EXTRACTION CAN BE DONE BY
+C***     CALL GBYTE(S(IS),D(IBYTE),ISKIP,IBSIZ)
+C BUT SINCE THE CODE IS SHORT IT IS INSERTED IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+C BYTE COMES FROM 1 WORD OF S
+         D(IBYTE) = AND( SHIFT(S(IS),SH1),SHIFT(MASK(IBSIZ),IBSIZ))
+         GO TO 65
+   50    CONTINUE
+         SH1 =SH1-NBPW
+C BYTE COMES FROM 2 WORDS OF S.
+         D(IBYTE) = OR(SHIFT(AND(S(IS),COMPL(MASK(ISKIP))),SH1)
+     1                           ,
+     2                SHIFT(AND(SHIFT(S(IS+1),IGNORE),MASK(SH1)),SH1)
+     3                 )
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP =ISKIP-NBPW
+         IS = IS+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75 CONTINUE
+      RETURN
+      END
+      SUBROUTINE SBYTE  (DEST,SOURCE,IOFSET,IBYTSZ)
+C
+C**** SBYTE  - Insert a single bit field. Cray routine.
+C
+C*    FUNCTION: STORE A SINGLE BIT FIELD FROM SOURCE INTO DEST
+C*
+C*    INPUT   : SOURCE   = WORD CONTAINING  BIT FIELD RIGHT JUSTIFIED
+C*              DEST(1)  = 1ST TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS ; .LE.WORD SIZE .....
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST(1) AND EVENTUALLY DEST(2) CONTAIN FIELD
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+      PARAMETER(NBPW=64)
+      INTEGER SOURCE,DEST(1)
+      INTEGER SH1,SH2,SH3
+      SH1=IOFSET+IBYTSZ
+      IF(SH1.GT.NBPW) GO TO 2
+
+      SH2=NBPW-SH1
+      IF(SH2.LT.0) SH2=NBPW-SH2
+
+C     BYTE  DOES NOT SPAN WORDS
+
+
+      DEST(1)=SHIFT(
+     1              OR(
+     2                 AND(SHIFT(DEST(1),SH1),
+     3                     SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ) )
+     4                 ,
+     5                 AND(SOURCE,
+     6                     COMPL(SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ)) )
+     7                 )
+     8              ,SH2)
+
+
+
+      RETURN
+
+2     CONTINUE
+
+C     BYTE SPANS 2 WORDS
+
+      SH3=2*NBPW-SH1
+
+
+      DEST(1)=OR(
+     1           AND(DEST(1),MASK(IOFSET))
+     2           ,
+     3           AND(SHIFT(SOURCE,SH3) , COMPL(MASK(IOFSET)) )
+     4           )
+
+      DEST(2)=OR(
+     1           AND(DEST(2) , COMPL(MASK(SH1-NBPW)) )
+     2           ,
+     3           SHIFT( AND(SOURCE , COMPL(MASK(SH3)) ) ,SH3)
+     4           )
+
+
+
+      RETURN
+      END
+      SUBROUTINE SBYTES (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** SBYTES - Insert a number of bit fields. Cray routine.
+C
+C REVERSES THE ACTION OF GBYTES, TAKING FIELDS FROM S AND
+C INSERTING THEM INTO A BIT STRING IN D. SEE GBYTES.
+C AUTHOR D. ROBERTSON  AUG,1981
+C
+      PARAMETER(NBPW=64)
+      DIMENSION D(2) , S(NBYTES)
+      INTEGER SH1,SH2,SH3
+      IGNORE = 0
+      IF(NUMARG().GT.6) IGNORE = KWOFF
+      ID=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION KNOWN, THE
+C DESIRED INSERTION CAN BE DONE BY
+C**      CALL SBYTE(D(ID),S(IBYTE),ISKIP,IBSIZ)
+C BUT THE CODE IS SHORT ENOUGH TO GO IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+         SH2 = NBPW-SH1
+         IF(SH2.LT.0) SH2 = NBPW-SH2
+C BYTE GOES INTO 1 WORD OF D.
+         D(ID) = SHIFT(OR(AND(SHIFT(D(ID),SH1),MASK(NBPW-IBSIZ)),
+     1                   AND(S(IBYTE),SHIFT(MASK(IBSIZ),IBSIZ))),SH2)
+         GO TO 65
+   50    CONTINUE
+C BYTE GOES INTO 2 WORDS OF D.
+         SH3 = 2*NBPW-SH1
+         D(ID)=OR(AND(D(ID),MASK(ISKIP)),
+     1               AND(SHIFT(S(IBYTE),SH3),COMPL(MASK(ISKIP))))
+         D(ID+1)=OR(AND(D(ID+1),SHIFT(COMPL(MASK(SH1-NBPW)),NBPW-IGNORE)
+     1                 ),
+     2              SHIFT(AND(S(IBYTE),COMPL(MASK(SH3))),SH3-IGNORE))
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP = ISKIP - NBPW
+         ID = ID+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75    CONTINUE
+      RETURN
+      END
diff --git a/gribex/btcyber.special b/gribex/btcyber.special
new file mode 100755
index 0000000..b8238c4
--- /dev/null
+++ b/gribex/btcyber.special
@@ -0,0 +1,825 @@
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES6
+C           GBYTES6
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           Cyber version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES6 (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES6 (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           ABORT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cyber version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL ABORT ('US',0,' ')
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Cyber version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 64
+      KNEG = -9223372036854775807
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+      SUBROUTINE GBYTE(SOURCE,DEST,IOFSET,IBYTSZ)
+C
+C**** GBYTE - Get a single bit field from SOURCE into DEST on Cyber.
+C
+C*    INPUT   : SOURCE(1)= WORD CONTAINING START OF BIT FIELD
+C*              DEST     = TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST CONTAINS FIELD RIGHT JUSTIFIED
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+C*****
+      INTEGER SOURCE(1),DEST
+      INTEGER SH1
+
+
+      NBPW=64
+      SH1=IOFSET+IBYTSZ-NBPW
+
+      IF(SH1.GT.0) GO TO 2
+
+
+C     BYTES DO NOT SPAN WORDS
+
+
+      SH1=NBPW+SH1
+
+
+      DEST=AND(
+     1          SHIFT(SOURCE(1),SH1),
+     2          SHIFT(MASK(IBYTSZ),IBYTSZ)
+     3        )
+
+      RETURN
+
+C     BYTE SPANS WORDS
+
+2     CONTINUE
+
+
+      DEST=OR(
+     1        SHIFT(
+     2              AND(SOURCE(1),COMPL(MASK(IOFSET)))
+     3              ,SH1),
+     4        SHIFT(
+     5              AND(SOURCE(2),MASK(SH1))
+     6              ,SH1)
+     7       )
+
+
+
+      RETURN
+      END
+      SUBROUTINE GBYTES(S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** GBYTES - Cyber version.
+C
+C S CONTAINS A BIT STRING OF INDEFINITE LENGTH. GBYTES WILL
+C EXTRACT NBYTES BITSTRINGS, IBSIZ BITS LONG, AND STORE THEM
+C RIGHT JUSTIFIED 0 FILL, INTO SUCCESSIVE WORDS OF D. THE
+C SUCCESSIVE BITSTRINGS START AT BIT POSITIONS
+C     ISKIP1+1+(IBYTE-1)*(IBSIZ+ISKIP2)
+C IN THE BIT STRING S. I.E. SKIP ISKIP1 BITS AT THE START,
+C AND ISKIP2 BITS BETWEEN THE EXTRACTED STRINGS.
+C BIT ISKP+1 IN A STRING IS FOUND IN WORD IS=1+ISKIP/NBPW IN S,
+C WHERE NBPW IS THE NUMBER OF BITS PER WORD. THE STARTING BIT
+C IS FOUND BY SKIPPING MOD(ISKP,NBPW) BITS IN THAT WORD.
+C KWOFF IS AN OPTIONAL 7TH PARAMETER, WHICH DEFAULTS TO 0
+C IF PRESENT KWOFF BITS ARE TOTALLY IGNORED AT THE START OF A WORD
+C THUS IF A PACKED CYBER BIT STRING IS TRANSFERRED TO THE
+C CRAY, WITH EACH 60 BIT CYBER WORD PLACED AT THE RIGHT END OF
+C A 64 BIT CRAY WORD, A BYTE SEQUENCE WHICH WAS ORIGINALLY
+C LOCATED WITH START POINTS IN ARITHMETIC PROGRESSION ON THE
+C CYBER, WILL NO LONGER HAVE THIS PROPERTY ON THE CRAY. BY
+C USING THE ROUTINE WITH KWOFF=4, THE ELEMENTS OF THE BYTE
+C SEQUENCE CAN BE EXTRACTED ON THE CRAY, USING THE SAME SKIPS
+C AS WERE USED ON THE CYBER.
+      DIMENSION S(2) , D(NBYTES)
+      INTEGER SH1
+      ENTRY GBYTES7 (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+      IGNORE = KWOFF
+      GO TO 10
+      ENTRY GBYTES6 (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES)
+      IGNORE = 0
+   10 CONTINUE
+      NBPW=64
+      IS=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION DETERMINED, THE
+C DESIRED EXTRACTION CAN BE DONE BY
+C***     CALL GBYTE(S(IS),D(IBYTE),ISKIP,IBSIZ)
+C BUT SINCE THE CODE IS SHORT IT IS INSERTED IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+C BYTE COMES FROM 1 WORD OF S
+         D(IBYTE) = AND( SHIFT(S(IS),SH1),SHIFT(MASK(IBSIZ),IBSIZ))
+         GO TO 65
+   50    CONTINUE
+         SH1 =SH1-NBPW
+C BYTE COMES FROM 2 WORDS OF S.
+         D(IBYTE) = OR(SHIFT(AND(S(IS),COMPL(MASK(ISKIP))),SH1)
+     1                           ,
+     2                SHIFT(AND(SHIFT(S(IS+1),IGNORE),MASK(SH1)),SH1)
+     3                 )
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP =ISKIP-NBPW
+         IS = IS+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75 CONTINUE
+      RETURN
+      END
+      SUBROUTINE SBYTE(DEST,SOURCE,IOFSET,IBYTSZ)
+C
+C**** GBYTE - Store a single bit field from SOURCE into DEST on Cyber.
+C
+C*    INPUT   : SOURCE   = WORD CONTAINING  BIT FIELD RIGHT JUSTIFIED
+C*              DEST(1)  = 1ST TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS ; .LE.WORD SIZE .....
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST(1) AND EVENTUALLY DEST(2) CONTAIN FIELD
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+C*****
+      INTEGER SOURCE,DEST(1)
+      INTEGER SH1,SH2,SH3
+
+
+      NBPW=64
+      SH1=IOFSET+IBYTSZ
+      IF(SH1.GT.NBPW) GO TO 2
+
+      SH2=NBPW-SH1
+      IF(SH2.LT.0) SH2=NBPW-SH2
+
+C     BYTE  DOES NOT SPAN WORDS
+
+
+      DEST(1)=SHIFT(
+     1              OR(
+     2                 AND(SHIFT(DEST(1),SH1),
+     3                     SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ) )
+     4                 ,
+     5                 AND(SOURCE,
+     6                     COMPL(SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ)) )
+     7                 )
+     8              ,SH2)
+
+
+
+      RETURN
+
+2     CONTINUE
+
+C     BYTE SPANS 2 WORDS
+
+      SH3=2*NBPW-SH1
+
+
+      DEST(1)=OR(
+     1           AND(DEST(1),MASK(IOFSET))
+     2           ,
+     3           AND(SHIFT(SOURCE,SH3) , COMPL(MASK(IOFSET)) )
+     4           )
+
+      DEST(2)=OR(
+     1           AND(DEST(2) , COMPL(MASK(SH1-NBPW)) )
+     2           ,
+     3           SHIFT( AND(SOURCE , COMPL(MASK(SH3)) ) ,SH3)
+     4           )
+
+
+
+      RETURN
+      END
+      SUBROUTINE SBYTES(D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C**** SBYTES - Cyber version.
+C
+C REVERSES THE ACTION OF GBYTES, TAKING FIELDS FROM S AND
+C INSERTING THEM INTO A BIT STRING IN D. SEE GBYTES.
+C AUTHOR D. ROBERTSON  AUG,1981
+      DIMENSION D(2) , S(NBYTES)
+      INTEGER SH1,SH2,SH3
+      ENTRY SBYTES7 (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+      IGNORE = KWOFF
+      GO TO 10
+      ENTRY SBYTES6 (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES)
+      IGNORE = 0
+   10 CONTINUE
+      NBPW=64
+      ID=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION KNOWN, THE
+C DESIRED INSERTION CAN BE DONE BY
+C**      CALL SBYTE(D(ID),S(IBYTE),ISKIP,IBSIZ)
+C BUT THE CODE IS SHORT ENOUGH TO GO IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+         SH2 = NBPW-SH1
+         IF(SH2.LT.0) SH2 = NBPW-SH2
+C BYTE GOES INTO 1 WORD OF D.
+         D(ID) = SHIFT(OR(AND(SHIFT(D(ID),SH1),MASK(NBPW-IBSIZ)),
+     1                   AND(S(IBYTE),SHIFT(MASK(IBSIZ),IBSIZ))),SH2)
+         GO TO 65
+   50    CONTINUE
+C BYTE GOES INTO 2 WORDS OF D.
+         SH3 = 2*NBPW-SH1
+         D(ID)=OR(AND(D(ID),MASK(ISKIP)),
+     1               AND(SHIFT(S(IBYTE),SH3),COMPL(MASK(ISKIP))))
+         D(ID+1)=OR(AND(D(ID+1),SHIFT(COMPL(MASK(SH1-NBPW)),NBPW-IGNORE)
+     1                 ),
+     2              SHIFT(AND(S(IBYTE),COMPL(MASK(SH3))),SH3-IGNORE))
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP = ISKIP - NBPW
+         ID = ID+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75    CONTINUE
+      RETURN
+      END
diff --git a/gribex/btibm.special b/gribex/btibm.special
new file mode 100755
index 0000000..209c15c
--- /dev/null
+++ b/gribex/btibm.special
@@ -0,0 +1,869 @@
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           IBM version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           SYSABN
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           IBM version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL SYSABN (1)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           IBM version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 32
+      KNEG = -2147483647
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+*
+*  IBM Assembler version of GBYTE(S) and SBYTE(S).
+*
+*        ****  DOCUMENTATION  ****
+*    WRITTEN BY JORDAN HASTINGS AND DENNIS JOSEPH
+*               NCAR, BOULDER, COLORADO
+*
+*  THE FOLLOWING ROUTINES ALLOW FORTRAN ACCESS TO BIT STRINGS (BYTE
+*  OF ARBITRARY LENGTH AND POSITION, PERHAPS CROSSING WORD BOUNDARIES,
+*  IN THE MANNER SPECIFIED BELOW:
+*
+*     CALL GBYTE (PCKD,UNPK,INOFST,NBIT)
+*     CALL GBYTES(PCKD,UNPK,INOFST,NBIT, NSKIP,ITER)
+*
+*        PCKD:     THE FULLWORD IN MEMORY FROM WHICH UNPACKING IS TO
+*                  BEGIN; SUCCESSIVE FULLWORDS WILL BE FETCHED AS
+*                  REQUIRED.
+*        UNPK:     THE FULLWORD IN MEMORY INTO WHICH THE INITIAL BYTE
+*                  OF UNPACKED DATA IS TO BE STORED; SUBSEQUENT BYTES
+*                  WILL BE STORED INTO SUCCESSIVE FULLWORDS AS
+*                  REQUIRED.
+*        INOFST:   A FULLWORD INTEGER SPECIFYING THE INITAL OFFSET
+*                  IN BITS OF THE FIRST BYTE, COUNTED FROM THE
+*                  LEFTMOST BIT IN PCKD.
+*        NBITS:    A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
+*                  IN EACH BYTE TO BE UNPACKED.  LEGAL BYTE WIDTHS
+*                  ARE IN THE RANGE 1 - 32; BYTES OF WIDTH .LT. 32
+*                  WILL BE RIGHT JUSTIFIED IN THE LOW-ORDER POSITIONS
+*                  OF THE UNPK FULLWORDS, WITH HIGH-ORDER ZERO FILL.
+*        NSKIP:    A FULLWORD INTEGER SPECIFYING THE NUMBER OF BITS
+*                  TO SKIP BETWEEN SUCCESSIVE BYTES.  ALL NON-NEGATIVE
+*                  SKIP COUNTS ARE LEGAL.
+*        ITER:     A FULLWORD INTEGER SPECIFYING THE TOTAL NUMBER OF
+*                  BYTES TO BE UNPACKED, AS CONTROLLED BY INOFST,
+*                  NBIT AND NSKIP ABOVE.   ALL NON-NEGATIVE ITERATION
+*                  COUNTS ARE LEGAL.
+*
+*            NOTES ...
+*              1)  A MULTIPLE-BYTE ACCESS (GBYTES) WITH ITER=0 (BUT
+*                  NOT 1)  IS EXACTLY EQUIVALENT TO A SINGLE-BYTE
+*                  ACCESS (GBYTE).
+*              2)  AN ERROR DETECTED IN THE CALLING SEQUENCE OF
+*                  EITHER GBYTE OR GBYTES SUPPRESSES BYTE ACCESS,
+*                  AND SETS THE FIRST ELEMENT OF UNPK = X'FFFFFFFF'
+*
+GBYT     TITLE 'IBM S/360 VERSION OF NCAR CDC/6600 BIT MANIPULATION'
+*
+*        ****  REGISTER USAGE  ****
+ZERO     EQU   X'0'                CONSTANT ZERO
+PCKD     EQU   X'1'                ADDR OF PACKED ARY ELEMENT
+UNPK     EQU   X'2'                ADDR OF UNPACKED ARY ELEMENT
+OFST     EQU   X'3'                INITIAL BIT OFFSET
+NBIT     EQU   X'4'                BYTE LENGTH IN BITS (.LE.32)
+NSKP     EQU   X'5'                ITERATIVE BIT SKIP
+ITER     EQU   X'6'                ITERATION COUNT (.GE.0)
+BITR     EQU   X'7'                BITS REMAINING IN HIWD
+BITS     EQU   X'8'                BITS TO SHIFT (OFST OR NSKP)
+WORK     EQU   X'9'                WORK REGISTER
+HIWD     EQU   X'A'                HI-ORDER WORD (EVEN REGISTER
+LOWD     EQU   X'B'                LO-ORDER WORD (ODD REGISTER)
+BYTE     EQU   X'C'                RESULTANT BYTE
+*        EQU   X'D'                SAVE AREA ADDR (NOT MODIFIED)
+*        EQU   X'E'                RETURN ADDR (NOT MODIFIED)
+BASE     EQU   X'F'                BASE ADDR REGISTER
+NBFW     EQU   4                   NUMBER OF BYTES/FULL WORD
+*
+*
+*        ****  CODE  ****
+*
+GBYTES   CSECT ,                   PRIME ENTRY POINT
+         ENTRY GBYTE               ALTERNATE ENTRY POINT
+*
+         USING GBYTES,BASE         ENTRY PT ADR ESTB IN R15 BY CALLER
+         SAVE      (0,12)          SAVE CALLING PROG REGISTERS (MACRO)
+         LM    NSKP,ITER,4*NBFW(1) PICK UP NSKIP, ITER PARM ADDRESSES
+         L     NSKP,0(,NSKP)       PICK UP BIT SKIP COUNT
+         L     ITER,0(,ITER)       PICK UP ITERATION COUNT
+         B     INIT                JUMP INTO CODE PROPER
+*
+GBYTE    DS    0H                  FORCE HALFWD ALLIGNMENT
+         USING GBYTE,BASE          ALT ENTRY ADDR ESTB IN R15 BY CALLER
+         SAVE      (0,12)          SAVE CALLING PROG REGISTERS (MACRO)
+         SR    ITER,ITER           MAKE ITERATION COUNT ZERO
+*
+INIT     BALR  BASE,0              RE-ESTABLISH ADDRESSABILITY
+         USING *,BASE
+         LM    PCKD,NBIT,0(1)      PICK UP ARY AND PARAMETER ADDRESSES
+      L         LOWD,0(,OFST)       COMPUTE FIRST PCKD WORD AND OFFSET
+      LA        WORK,32
+      SR        HIWD,HIWD
+      DR        HIWD,WORK
+      LR        OFST,HIWD        SET OFFSET TO REMAINDER
+      SLA       LOWD,2
+      AR        PCKD,LOWD          INCR PCKD ADDRESS BY WHOLE WORDS
+         L     HIWD,0(,PCKD)       PICK UP FIRST WORD OF PACKED ARY
+         LH    BITR,=H'32'         AFTER HIWD FETCH FULL 32 BITS REMAIN
+         L     NBIT,0(,NBIT)       PICK UP NO. OF BITS/BYTE TO UNPACK
+         SR    ZERO,ZERO           ZERO OUT REG 0
+         LR    WORK,BITR           MAKE WORK=32
+         CR    ITER,ZERO           TEST FOR ZERO ITERATION COUNT
+         BH    INIT1               IF NOT, CONTINUE WITH INITIALIZATION
+INIT0    CR    OFST,BITR           ELSE, TEST INITIAL OFFSET IN RANGE
+         BNL   FAIL                      IF NOT .LT. 32, FAIL
+         LH    ITER,=H'1'          FORCE EXACTLY 1 ITERATION
+         B     INIT2
+INIT1    AR    NSKP,NBIT           ADD NBIT TO NSKP FOR MULT ACCESS
+INIT2    LA    PCKD,NBFW(PCKD)     INCR PACKED ARY POINTER
+         L     LOWD,0(,PCKD)       PICK UP SECOND WD OF PACKED ARRAY
+         SR    WORK,NBIT           COMPLEMENT NBITS (MODULO 32)
+         CR    WORK,ZERO           TEST NBITS IN RANGE
+         BL    FAIL                IF NOT,.LE.32, FAIL
+         STH   WORK,STORE+4        ELSE USE TO SET UP BYTE SHIFT COUNT
+*                                    OF SRL (RX) INSTR IN STORE SEQ
+         LR    BITS,OFST           MAKE BITS TO SHIFT = INITIAL OFFSET
+         LR    WORK,BITR           MAKE WORK=32, AGAIN
+*
+TEST     CR    BITS,BITR           COMPARE BITS TO SHIFT WITH REMAINING
+         BL    SHIFT               IF BITS.LT.BITR, PROCEED WITH SHIFT
+         BH    SPLIT               IF BITS.GT.BITR, ITER OVER SPLIT WDS
+*        BE    COPY                ELSE, IF BITS.EQ.BITR, RECOPY HIWD
+*
+COPY     L     HIWD,0(,PCKD)       RELOAD HIWD FROM MEM WITH PREV LOWD
+         LA    PCKD,NBFW(PCKD)     INCR PACKED ARY POINTER
+         L     LOWD,0(,PCKD)         AND PICK UP NEXT PACKED LOWD
+         LR    BITR,WORK             RESET BITR TO 32
+         B     STORE               PROCEED WITH STORE OPERATIONS
+*
+SPLIT    STH   BITR,*+6            SET UP BITR AS SLDL SHIFT COUNT
+         SLDL  HIWD,*-*            SHIFT LEFT DOUBLE LOGICAL, HIWD/LOWD
+         SR    BITS,BITR           DECR BITS TO SHIFT BY SHIFTED BITR
+         B     SPLIT1              BYPASS FAST FULLWORD SKIPS
+         LR    OFST,BITS           COPY BITS REMAINING TO SHIFT TO OFST
+*                                  (DESTROYING INITAL OFFSET PARM)
+         SRA   OFST,5              DIVIDE BY 32 TO GET WORDS TO SHIFT
+*        CR    OFST,ZERO             SIMULTANEOUSLY SETTING COND CODE
+*                                  IF REMAINING SHIFT .LT. 1 WORD
+         BNH   SPLIT1              FETCH NEXT SEQUENTIAL LOWD IMMED
+         SLA   OFST,2              ELSE, MULTIPLY WDS BY 4 TO GET BYTES
+         AR    PCKD,OFST           INCR PACKED ARRAY POINTER
+         L     HIWD,0(,PCKD)         AND LOAD NEW HIWD
+         SLA   OFST,3              MULTIPY BYTES BY 8 TO GET BITS
+         SR    BITS,OFST             AND DECR BITS REMAINING TO SHIFT
+SPLIT1   LA    PCKD,NBFW(PCKD)     INCR PACKED ARY PTR
+         L     LOWD,0(,PCKD)         AND PICK UP NEXT PACKED LOWD
+         LR    BITR,WORK             RESET BITR TO 32
+         B     TEST                ITERATE AS NECESSARY
+*
+SHIFT    STH   BITS,*+6            SET UP BITS AS SLDL SHIFT COUNT
+         SLDL  HIWD,*-*            SHIFT LEFT DOUBLE LOGICAL, HIWD/LOWD
+         SR    BITR,BITS           DECR BITS REMAINING BY BITS SHIFTED
+*
+STORE    LR    BYTE,HIWD           COPY HIWD TO BYTE
+         SRL   BYTE,*-*            SHIFT RIGHT(WITH HI-ORDER ZERO FILL)
+*                                    *-* SHIFT COUNT SET UP AT INIT2
+STORE1   ST    BYTE,0(,UNPK)       FILL BYTE INTO UNPACKED ARY
+         LA    UNPK,NBFW(UNPK)       AND INCR UNPACKED ARY POINTER
+         LR    BITS,NSKP           RESTORE BITS = (NSKP+NBIT)
+         BCT   ITER,TEST           DECR ITER COUNT, CONTINUE TILL ZERO
+*
+*
+EXIT     RETURN    (0,12)          RESTORE CALLING PROG REGS (MACRO)
+*
+FAIL     LH    BYTE,=X'FFFF'       MAKE BYTE A FULL WD OF 1'S
+         ST    BYTE,0(,UNPK)         AND FILL INTO UNPACKED ARRAY
+         B     EXIT
+*
+         LTORG
+         END
+R0       EQU   X'0'
+R1       EQU   X'1'
+R2       EQU   X'2'
+R3       EQU   X'3'
+R4       EQU   X'4'
+R5       EQU   X'5'
+R6       EQU   X'6'
+R7       EQU   X'7'
+R8       EQU   X'8'
+R9       EQU   X'9'
+R10      EQU   X'A'
+R11      EQU   X'B'
+R12      EQU   X'C'
+R13      EQU   X'D'
+R14      EQU   X'E'
+R15      EQU   X'F'
+SBYTES   CSECT ,
+*
+* SBYTE/SBYTES - GENERAL BIT PACKING ROUTINES.
+*        SEE NCAR - TN/93, JANUARY 1974.
+*        D. JOSEPH           OCTOBER, 1981.
+*
+         ENTRY SBYTE
+         USING SBYTES,R15
+         SAVE                (0,12)
+         STM   R13,R14,REG13      SAVE REGISTER 13 AND 14 LOCAL.
+         LM    R11,R12,16(R1)     GET SKIP AND ITERATION COUNT.
+         L     R11,0(R11)
+         L     R12,0(R12)
+         B     START
+SBYTE    DS    0H
+         USING SBYTE,R15
+         SAVE                (0,12)
+         STM   R13,R14,REG13      SAVE REGISTER 13 AND 14 LOCAL.
+         SR    R12,R12            ZERO ITERATION COUNT.
+START    BALR  R15,R0             RE-ESTABLISH ADDRESSABILITY.
+         USING *,R15
+         LM    R7,R10,0(R1)       GET REMAINING ARG ADDRESSES.
+         LA    R1,1              SET CONSTANT ONE.
+         L     R10,0(R10)         GET BYTE SIZE.
+         LA    R0,1               MAKE MASK.
+         SLL   R0,31
+         SR    R10,R1
+         STH   R10,MASK+2
+         AR    R10,R1
+         LA    R6,32              MAKE CONSTANT 32.
+         L     R14,COMP           LOAD COMPLEMENT MASK.
+MASK     SRA   R0,*-*
+         LR    R13,R0             SAVE MASK.
+         SLL   R12,2              NUM OF ITERATIONS * FOUR.
+         AR    R12,R8             SET ITERATION LIMIT.
+         L     R4,0(R9)           APPLY INITIAL OFFSET.
+         LA    R1,96
+         CR    R4,R1              CHECK FOR LARGE OFFSET.
+         BL    NODIV
+         LR    R5,R4
+         SR    R4,R4
+         DR    R4,R6              USE DIVIDE FOR LARGE OFFSET
+         SLL   R5,2               CHANGE WORD COUNT TO BYTE COUNT.
+         AR    R7,R5
+NODIV    EQU   *
+         LA    R5,4               LOAD CONSTANT FOUR.
+RELOAD   CR    R4,R6              FIND WORD AND OFFSET.
+         BL    ILOAD              START IF OFFSET < 32.
+         SR    R4,R6
+         AR    R7,R5
+         B     RELOAD
+ILOAD    L     R9,0(R7)        GET STORE WORD.
+BEGIN    STH   R4,PMASK+2         POSITION MASK IN DOUBLE WORD.
+         SR    R1,R1
+PMASK    SRDL  R0,*-*
+         L     R3,0(R8)           LOAD BYTE FOR STORE.
+         LA    R2,64
+         SR    R2,R10             POSITION BYTE.
+         SR    R2,R4
+         STH   R2,SHIFTB+2
+         SR    R2,R2
+SHIFTB   SLDL  R2,*-*             SHIFT BYTE TO STORE.
+         NR    R2,R0              MASK ON CURRENT MASK.
+         XR    R0,R14             COMPLEMENT MASK.
+         NR    R9,R0              OPEN HOLE FOR BYTE.
+         OR    R9,R2              INSERT BYTE.
+         AR    R4,R10             ADD BYTE SIZE.
+         CR    R4,R6
+         BNH   NOPART             BRANCH IF NO PARTIAL BYTE.
+         ST    R9,0(R7)        STORE CURRENT WORD.
+         SR    R4,R6
+         AR    R7,R5             ADD FOUR TO WORD ADDRESS.
+         L     R9,0(R7)        LOAD NEXT WORD.
+         NR    R3,R1              ISOLATE PARTIAL BYTE.
+         XR    R1,R14             COMPLEMENT MASK.
+         NR    R9,R1              OPEN HOLE FOR PARTIAL BYTE.
+         OR    R9,R3              INSERT PARTIAL BYTE.
+NOPART   AR    R8,R5             COUNT BYTE.
+         CR    R8,R12             CHECK IF DONE.
+         BNL   DONE
+         AR    R4,R11             ADD SKIP AMOUNT.
+         LR    R0,R13             RELOAD MASK
+         CR    R4,R6
+         BL    BEGIN              BRANCH IF IN SAME WORD.
+         ST    R9,0(R7)           STORE CURRENT WORD.
+         B     RELOAD             GO TO GET NEW WORD.
+DONE     ST    R9,0(R7)        STORE LAST WORD.
+         LM    R13,R14,REG13      RESTORE REGISTER 13 AND 14.
+         RETURN       (0,12)
+HMASK    DS    D                  ARE FOR CURRENT MASK.
+REG13    DS    F
+REG14    DS    F
+COMP     DC    X'FFFFFFFF'        COMPLEMENT MASK.
+         LTORG
+         END
diff --git a/gribex/btsun.special b/gribex/btsun.special
new file mode 100755
index 0000000..1da37e1
--- /dev/null
+++ b/gribex/btsun.special
@@ -0,0 +1,698 @@
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           SUN version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           ABORT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           SUN version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL ABORT
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           SUN version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 32
+      KNEG = -2147483647
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+#include <stdio.h>
+
+
+/* Tools for storage/retrieval of arbitrary size bytes from 32 bit words
+    (note - this version is not currently (6/30/88) described in the
+    gbytes document)
+ Modified by Arne Jorgensen 12-April-1991 (SUN routine)
+
+    gbytes(p,u,q,b,s,n)
+    gbyte (p,u,q,b)
+    sbytes(p,u,q,b,s,n)
+    sbyte (p,u,q,b)
+
+             q >= 0     number of bits to be skipped preceding first
+                        byte in p
+      0 <    b < sword  byte size
+             s >= 0     number of bits to be skipped between bytes
+             n >= 0     number of bytes to be packed/unpacked
+
+    gbytes unpacks n b bit bytes from p into u, starting by skipping
+         q bits in p, then skipping s bits between bytes.
+    gbyte unpacks one such byte.
+    sbytes   packs n b bit bytes from u into p, starting by skipping
+         q bits in p, then skipping s bits between bytes.
+    sbyte  packs one such byte. */
+#define SWORD 32                            /* Word size in bits */
+#define MASK 0xffffffff                    /* Mask of sword bits */
+#define G1BYTE(p,q,b) ((b==32 ? MASK : ~(MASK<<b)) & (p>>(SWORD-(q+b))))
+                                    /* Get 1 word contained byte */
+# define MASK1(q,b) (b==32 ? MASK : (~(MASK<<b)<<(SWORD-(q+b))))
+                                           /* Mask of sword bits */
+gsbytes(p,u,q,b,s,n,gsbyte)   /* Common code for gbytes, sbytes */
+long p[],u[],*q,*b,*s,*n;
+int (*gsbyte)();
+{       long jp,jq,ju;
+        jp = 0;
+        jq = *q;
+        for (ju = 0; ju < *n; ++ju) {
+                 (*gsbyte)(&p[jp],&u[ju],&jq,b);
+                 jq += *b + *s;
+                 jp += jq/SWORD;
+                 jq %= SWORD;
+        }
+}
+gbytes_(p,u,q,b,s,n)
+long p[],u[],*q,*b,*s,*n;
+{
+        int gbyte_();
+        gsbytes(p,u,q,b,s,n,gbyte_);
+}
+gbyte_(p,u,q,b)
+long p[],*u,*q,*b;
+{
+        long qb,j,lb,jq,jb;
+
+        jq = *q;
+        jb = *b;
+        if (jq >= SWORD) {
+                 j = jq/SWORD; /* number of words offset */
+                 jq %= SWORD;  /* odd bits of offset     */
+        }
+        else {
+                 j=0;
+        }
+        qb = jq + jb;
+        if (qb > SWORD) {
+                 qb = SWORD - jq;
+                 jb -= qb;
+                 lb = (G1BYTE(p[j],jq,qb)) << jb;
+                 jq = 0;
+                 j++;  /* increment to next word */
+        }
+        else lb = 0;
+        *u = lb + (G1BYTE(p[j],jq,jb));
+}
+sbytes_(p,u,q,b,s,n)
+long p[],u[],*q,*b,*s,*n;
+{
+        int sbyte_();
+        gsbytes(p,u,q,b,s,n,sbyte_);
+}
+sbyte_(p,u,q,b)
+long p[],*u,*q,*b;
+{
+        long qb,j,jq,jb,rb;
+
+        jq = *q;
+        jb = *b;
+        if (jq >= SWORD) {
+                 j = jq / SWORD;    /* number of words offset */
+                 jq %= SWORD;       /* odd bit offset         */
+        }
+        else {
+                 j = 0;
+        }
+        qb = jq + jb;
+        if (qb > SWORD) {
+                 qb = SWORD - jq;
+                 jq = SWORD - jb;
+                 jb -= qb;
+                 p[j] = ((p[j] >> qb) << qb) + (G1BYTE(*u,jq,qb));
+                 jq = 0;
+                 j++;  /* point to next word */
+        }
+        rb = G1BYTE(*u,SWORD-jb,jb);
+        p[j] = (p[j] & ~MASK1(jq,jb)) + (rb << SWORD-(jb+jq));
+}
+
diff --git a/gribex/btvax.special b/gribex/btvax.special
new file mode 100755
index 0000000..670dc4a
--- /dev/null
+++ b/gribex/btvax.special
@@ -0,0 +1,1009 @@
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C           Take rightmost KBLEN bits from KNUM words of KPARM
+C           and insert them consecutively in KGRIB, starting at
+C           bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+C    C                   KBLEN,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array containing bitstream.
+C               KLENG      - Length (words) of this array.
+C               KNSPT      - Bit number after which insertion or
+C                            extraction starts.
+C               KPARM      - Array from which bits are taken for
+C                            insertion in the bitstream or to which
+C                            bits are extracted from the bitstream.
+C               KBIT       - Number of bits in computer word.
+C               KNUM       - Number of bit fields inserted/extracted.
+C               KBLEN      - Number of bits per bit field.
+C               HFUNC      - Requested function.
+C                            'C' to insert bits in bitstream,
+C                            'D' to extract bits from bitstream.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KNSPT      - Bit number of last bit inserted/extracted.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Insertion/extraction exceeded
+C                                array boundary.
+C
+C     Method.
+C     -------
+C
+C           Word and offset pointer calculated before calling
+C           insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C           SBYTES
+C           GBYTES
+C
+C     Reference.
+C     ----------
+C
+C           ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+C           VAX version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.11.91
+C           Parameter KMACH removed from list of input parameters.
+C
+C           J. Hennessy      ECMWF      12.10.92
+C           Dimension of IMASK changed from 64 to 65.
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER IND
+      INTEGER INUM
+      INTEGER IOFF
+      INTEGER IPR
+      INTEGER IWORD
+C
+      INTEGER KBIT
+      INTEGER KBLEN
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KNSPT
+      INTEGER KNUM
+      INTEGER KPARM
+      INTEGER KRET
+C
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+C
+      CHARACTER*1 HFUNC
+C
+C
+C     Debug print switch.
+C
+      DATA IPR /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'INXBIT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9009) KLENG
+             WRITE (*,9002) KNSPT
+             WRITE (*,9004) KBIT
+             WRITE (*,9005) HFUNC
+         ENDIF
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 2.'
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+      IF (IPR.EQ.1) WRITE (*,9003) IWORD , IOFF
+C
+C     Insert/extract bits.
+C
+      IF (HFUNC.EQ.'C')
+     C   THEN
+             CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ELSE
+             CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+         ENDIF
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (IPR.EQ.1) WRITE (*,*) 'INXBIT : Section 3.'
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) IND , KLENG
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (IPR.EQ.1)
+     C   THEN
+             INUM = KNUM
+             IF (INUM.GT.360)
+     C          THEN
+                    INUM = 360
+                    WRITE (*,9007) INUM
+                ENDIF
+             DO 901 J901=1,INUM
+               IF (HFUNC.EQ.'C')
+     C             THEN
+                       WRITE (*,9006) KPARM(J901)
+                   ELSE
+                       WRITE (*,9008) KPARM(J901)
+                   ENDIF
+  901        CONTINUE
+             WRITE (*,*) 'INXBIT : Section 9.'
+             WRITE (*,*) '         Output values set -'
+             WRITE (*,9002) KNSPT
+         ENDIF
+C
+C
+ 9001 FORMAT (1H ,'INXBIT : Word ',I8,' is outside array bounds ',I8)
+C
+ 9002 FORMAT (1H ,'         KNSPT  = ',I8)
+C
+ 9003 FORMAT (1H ,'INXBIT : Word is',I8,', bit offset is ',I2)
+C
+ 9004 FORMAT (1H ,'         KBIT   = ',I8)
+C
+ 9005 FORMAT (1H ,'         HFUNC  = ',A)
+C
+ 9006 FORMAT (1H ,'         Inserted value = ',I20)
+C
+ 9007 FORMAT (1H ,'         First ',I9,' values.')
+C
+ 9008 FORMAT (1H ,'         Extracted value = ',I20)
+C
+ 9009 FORMAT (1H ,'         KLENG  = ',I20)
+C
+      RETURN
+C
+      END
+      SUBROUTINE ABORTX (HNAME)
+C
+C**** ABORTX - Terminates execution of program.
+C
+C     Purpose.
+C     --------
+C
+C           Terminates execution of program.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ABORTX (HNAME)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               HNAME      - Name of calling routine.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Prints message and terminates.
+C
+C     Externals.
+C     ----------
+C
+C           EXIT
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           VAX version of routine.
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      13.11.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      CHARACTER*(*) HNAME
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print message and terminate.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9001) HNAME
+C
+      CALL EXIT (-1)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'ABORTX : Routine ',A,' has requested program',
+     C               ' termination.')
+C
+      RETURN
+C
+      END
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C           Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL SETPAR (KBIT,KNEG,KPR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KPR        - Debug print switch.
+C                            1 , print out.
+C                            0 , No print out.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KBIT       - Number of bits in computer word.
+C
+C               KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C           Values are assigned.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           VAX version of routine.
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)  WRITE (*,*) ' SETPAR : Section 1.'
+C
+      KBIT = 32
+      KNEG = -2147483648
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) ' SETPAR : Section 9.'
+             WRITE (*,*) '          Output values set -'
+             WRITE (*,9001) KBIT
+             WRITE (*,9002) KNEG
+         ENDIF
+C
+ 9001 FORMAT (1H ,'          KBIT = ',I3)
+C
+ 9002 FORMAT (1H ,'          KNEG = ',I22)
+C
+      RETURN
+C
+      END
+      SUBROUTINE GBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C
+C**** GBITS - VAX routine.
+C
+      DIMENSION NPACK(*),ISAM(*)
+      PARAMETER (LENWRD=32)
+C
+C     ++++++++++
+C     CALL GBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     STARTS UNPACKING BITS AT BIT OFFSET IBIT IN ARRAY
+C     NPACK.  IT TAKES NBITS AND STORES THEM IN THE LONGWORD
+C     ARRAY STARTING AT ISAM.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE NEXT FIELD OF NBITS IS UNPACKED INTO THE
+C     NEXT ISAM.  THIS IS DONE A TOTAL OF ITER TIMES.
+C
+C     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+C     IT IS SIMILAR TO NCAR'S GBYTE BUT IT WORKS WITH
+C     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+C     ----------
+C
+      ISW = 1
+      GO TO 8
+C
+C
+      ENTRY SBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C
+C     ++++++++++
+C     CALL SBITS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     THIS ROUTINE TAKES THE FIRST LONGWORD LOCATED AT
+C     ISAM AND STORES IT INTO THE NBITS OF NPACK STARTING AT
+C     BIT OFFSET IBIT.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE PROCESS IS REPEATED A TOTAL OF ITER TIMES.
+C
+C     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+C     IT IS SIMILAR TO NCAR'S SBYTE BUT IT WORKS WITH
+C     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+C     ----------
+      ISW = 2
+      GO TO 8
+C
+C     ++++++++++
+      ENTRY G_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     CALL G_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     STARTS UNPACKING BITS AT BIT OFFSET IBIT IN ARRAY
+C     NPACK.  IT TAKES NBITS AND STORES THEM IN THE LONGWORD
+C     ARRAY STARTING AT ISAM.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE NEXT FIELD OF NBITS IS UNPACKED INTO THE
+C     NEXT ISAM.  THIS IS DONE A TOTAL OF ITER TIMES.
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+      ISW = 3
+      GO TO 8
+C
+C     ++++++++++
+      ENTRY S_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     CALL S_BYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     THIS ROUTINE TAKES THE FIRST LONGWORD LOCATED AT
+C     ISAM AND STORES IT INTO THE NBITS OF NPACK STARTING AT
+C     BIT OFFSET IBIT.  THEN NSKIP BITS ARE SKIPPED IN
+C     NPACK AND THE PROCESS IS REPEATED A TOTAL OF ITER TIMES.
+C
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+      ISW = 4
+      GOTO 8
+C
+C     ++++++++++
+      ENTRY GBYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C        THIS ROUTINE IS JUST A REPEATED CALL TO G_BYTE
+C        WHERE SUCCESSIVE CALLS SKIP NSKIP BITS
+C        AND THE LOOP COUNT IS ITER
+      ISW = 5
+      GOTO 8
+C
+C     ++++++++++
+      ENTRY SBYTES(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C        THIS ROUTINE IS JUST A REPEATED CALL TO S_BYTE
+C        WHERE SUCCESSIVE CALLS SKIP NSKIP BITS
+C        AND THE LOOP COUNT IS ITER
+      ISW = 6
+      GO TO 8
+C
+C     ++++++++++
+      ENTRY GBILS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C     GBIL(S)/SBIL(S) ENTRIES ALLOW DIRECT MAINTENANCE OF LEFT TO RIGHT
+C     BIT STRINGS IN DEC ENVIRONMENT (VAX). THE MODIFICATION RETAINS FUL
+C     COMPATIBILITY WITH ORIGINAL ENTRIES, HOWEVER, VERIFICATION BEYOND
+C     GBIL(S)/SBIL(S) WAS VIA GBITS/SBITS ONLY (NOT GBYTES/SBYTES).
+C
+C     MODIFICATION PROGRAMMED BY A.D.STROUD, COMPASS SYSTEMS, INC.
+C     NOVEMBER 1987 UNDER TOGA GRAND FUNDING DURING SOFTWARE DEVELOPMENT
+C     FOR WMO PROPOSED STANDARD FM 94 BUFR ON THE VAX STATION II AT THE
+C     OAG/NOS/NOAA, MONTEREY, CA.
+C
+C     FOR GBIL(S)/SBIL(S) THE FOLLOWING PARAMETER USAGE APPLIES
+C
+C     NPACK   - LEFT MOST(HIGHEST INDEXED) LONGWORD IN PACKED BIT STRING
+C               ARRAY SPACE INFERRED BY IBIT(IN LIEU OF LOWEST INDEX FOR
+C               NON-DEC, NOTE - SECOND 32 BIT SUBSTRING IN BIT STRING IS
+C               NPACK(0), THIRD 32 BIT SUBSTRING IS NPACK(-1), ETC.,...)
+C
+C     ISAM    - ARRAY HOLDING/TO HOLD UNPACKED ELEMENT(S) (RJZF) FOR
+C               SBIL(S)/GBIL(S), RESPECTIVELY.
+C
+C     IBIT    - INITIAL LEFT TO RIGHT BIT SKIP WITHIN THE NPACK BIT STRI
+C               (INCLUDING LEFTMOST BIT OF NPACK, INTERPRET BIT SKIP THE
+C                SAME AS IN NON-DEC ENVIRONMENT)
+C
+C     NBITS   - FIXED BIT WIDTH OF EACH ELEMENT TO BE UNPACKED.
+C
+C     NSKIP   - FIXED LEFT TO RIGHT BIT SKIP WIDTH BETWEEN ELEMENTS.
+C
+C     ITER    - NUMBER OF ELEMENTS TO UNPACK(IMPLIED MINIMUM DIMENSIONAL
+C               OF ISAM ARRAY).
+C
+C     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     EXAMPLE
+C
+C  1) PARAMETER (N4=1000 , NB=4000, NL=1000)
+C  2) INTEGER I4(N4),UNPACK(99)
+C  3) BYTE IB(NB)
+C  4) EQUIVALENCE (I4(1),IB(1))
+C
+C  5) READ(LUI,'(4000A1)') (IB(I),I=NB,1,-1)
+C                FORMATTED READ OF ARBITRARY BITSTRING FROM NON-DEC
+C                SITE, OR FROM DEC FILE AS WRITTEN AT 9) BELOW.
+C
+C  6) CALL GBILS(I4(NL),UNPK,67,22,47,95)
+C                AFTER INITIALLY SKIPPING 67 BITS TO A POINT BEYOND THE
+C                LEFTMOST THREE BITS OF I4(NL-2), GBILS ACQUIRES 95
+C                SUBSTRING ELEMENTS OF THE WIDTH 22 BITS(EACH RIGHT JUST
+C                WITH HIGH ORDER ZERO FILL) INTO THE RESPECTIVE FIRST
+C                95 ARRAY ELEMENTS OF UNPK. SEPARATED BY 47 BITS IN SOUR
+C                BITSTRING ARRAY I4, THE EXTRACTED DUPLICATE SUBSTRING
+C                ELEMENTS ARE NOW EFFECTIVELY SEPARATED FROM EACH OTHER
+C                BY 10 ZERO BITS IN OBJECT BITSTRING ARRAY UNPK.
+C
+C 7) UNPK(J)=... (J=1,95)
+C
+C 8) CALL SBILS(I4(NL),UNPK,67,22,47,95)
+C                AFTER INITIALLY SKIPPING 67 BITS TO A POINT BEYOND THE
+C                LEFTMOST THREE BITS OF I4(NL-2), SBILS STORES IN SUCCES
+C                SIVE BITS THE FIRST OF 95 MODIFIED UNPK RIGHTMOST 22 BI
+C                WIDTH SUBSTRING ELEMENTS. AFTER SKIPPING 47 BITS BEYOND
+C                THE RIGHTMOST OF THE FIRST 22 BITS STORED, THE SECOND 2
+C                BIT ELEMENT IS STORED, ETC. THE ORIGINAL SUBSTRING
+C                ELEMENTS HAVE BEEN REPLACED BY MODIFIED SUBSRING ELEMEN
+C                IN SITU WITHIN THE BITSTRING ARRAY I4 WITHOUT MODIFYING
+C                ANY OTHER BITS.
+C
+C 9) WRITE(LUO,'(4000A1)') (IB(I),I=NB,1,-1)
+C                FILE FOR NON-DEC OR FOR READ 5) ABOVE.
+C
+C
+C
+      ISW = 7
+      GO TO 6
+C
+C     ++++++++++
+      ENTRY SBILS(NPACK,ISAM,IBIT,NBITS,NSKIP,ITER)
+C     ++++++++++
+C
+C
+      ISW = 8
+      GO TO 6
+C
+C     ++++++++++
+      ENTRY GBIL(NPACK,ISAM,IBIT,NBITS)
+C     ++++++++++
+C
+      ISW = 9
+      GO TO 5
+C
+C     ++++++++++
+      ENTRY SBIL(NPACK,ISAM,IBIT,NBITS)
+C     ++++++++++
+C
+      ISW=10
+ 5    ITER1= 1
+      NSKIP1=-NBITS
+      GO TO 7
+C
+ 6    NSKIP1=-NSKIP-NBITS
+C
+ 7    JOFF=-IBIT-NBITS
+      IF(ISW.LT.9) GO TO 9
+      GO TO 10
+C
+ 8    NSKIP1=NSKIP+NBITS
+      JOFF=IBIT
+C
+ 9    ITER1=ITER
+C
+C
+ 10   DO 30 I = 1 , ITER1
+C
+         IF(JOFF.GT.0) IBASE=JOFF/LENWRD+1
+         IF(JOFF.LE.0) IBASE=(JOFF+1)/LENWRD+1
+         IOFF=MOD(JOFF,LENWRD)
+         IF(JOFF.LE.0) IOFF=MOD(IOFF+LENWRD,LENWRD)
+C
+         GO TO(11,12,13,14,15,16,11,12,11,12) ISW
+C
+11       CALL GBIT(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+12       CALL SBIT(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+13       CALL G_BYTe(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+14       CALL S_BYTE(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GO TO 20
+15       CALL GBYTE(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GOTO 20
+16       CALL SBYTE(NPACK(IBASE),ISAM(I),IOFF,NBITS)
+         GOTO 20
+20       JOFF = JOFF + NSKIP1
+30    CONTINUE
+      RETURN
+      END
+      SUBROUTINE GBYTE(NPACK,ISAM,IBIT,NBITS)
+C
+C**** GBYTE - VAX routine.
+C
+C     ++++++++++
+C     CALL GBYTE(NPACK,ISAM,IBIT,NBITS)
+C     STARTS UNPACKING BITS AT BIT OFFSET IBIT IN ARRAY
+C     NPACK.  IT TAKES NBITS AND STORES THEM IN THE LONGWORD
+C     ARRAY STARTING AT ISAM.
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+C
+C     GBYTE AND SBYTE ARE SPECIAL ROUTINES TO DO THE SAME
+C     THINGS AS THEIR COUNTERPARTS ON THE MESA.
+C     THEY DIFFER FROM THE BITS ROUTINES IN THAT BITS
+C     ARE COUNTED FROM THE TOP OF THE WORD RATHER THAN
+C     THE BOTTOM.  THIS MEANS THAT THE BITS THEY SPECIFY JUMP AROUND
+C     WHEN CROSSING BYTE BOUNDARIES.  THERE IS NO ASSUMPTION
+C     MADE ABOUT THE WORDSIZE OF THE MACHINE THEY WERE WRITTEN
+C     ON.  HOWEVER THE MAXIMUM NUMBER OF BITS EXTRACTED MUST BE
+C     LESS THAN OR EQUAL TO 32.
+C
+      BYTE NPACK(8)
+      INTEGER T
+      EXTERNAL SS$_ABORT
+      IDBIT(I) = 7 - MOD(I,8)
+      ISW = 3
+      ISAM = 0
+      GO TO 10
+      ENTRY SBYTE(NPACK,ISAM,IBIT,NBITS)
+C     ++++++++++
+C     CALL SBYTE(NPACK,ISAM,IBIT,NBITS)
+C     THIS ROUTINE TAKES THE FIRST LONGWORD LOCATED AT
+C     ISAM AND STORES IT INTO THE NBITS OF NPACK STARTING AT
+C     BIT OFFSET IBIT.
+C
+C
+C     THIS ROUTINE DEALS WITH BITS AND BYTES IN THE ORDER
+C     THEY ARE NUMBERED ON THE MESA (IE BIGENDIAN).
+C     ----------
+      ISW = 4
+10    IBASE = IBIT/8
+C     IBASE POINTS TO THE FIRST BYTE INVOLVED
+      IOFF = IBIT - 8*IBASE
+C     IOFF IS THE BIT OFFSET WITHIN FIRST BYTE
+      M = (IOFF+NBITS-1)/8 + 1
+C     M IS THE NUMBER OF BYTES (INCLUDING PARTIALS) INVOLVED
+C     IF(M.GT.5)THEN
+      IF(NBITS.GT.32)THEN
+         TYPE *,'ILLEGAL VALUE FOR NBITS IN S/GBYTE(S) CALL'
+         CALL SYS$EXIT(SS$_ABORT)
+      END IF
+      NN = 0
+C     NN IS THE NUMBER OF BITS TRANSFERRED
+      DO 20 I = M , 1 , -1
+C     LOOP ON BYTES
+         IS = IDBIT(0)
+C        CALC FIRST BIT WITHIN BYTE
+         IE = IDBIT(7)
+C        CALC LAST BIT WITHIN BYTE
+         IF(I.EQ.1)IS = IDBIT(IOFF)
+C        FIRST BIT VARIES FOR FIRST BYTE
+         IF(I.EQ.M)IE = IDBIT(IOFF+NBITS-1)
+C        LAST BIT VARIES FOR LAST BYTE
+         N = IS - IE + 1
+C        CALC NUMBER OF BITS WITHIN BYTE TO XFER
+         IF(ISW.EQ.4)GO TO 12
+         CALL GBIT(NPACK(IBASE+I),T,IE,N)
+C        EXTRACT BITS FROM SOURCE
+         CALL SBIT(ISAM,T,NN,N)
+C        AND LOAD INTO DESTINATION
+         GO TO 15
+12       CALL GBIT(ISAM,T,NN,N)
+C        EXTRACT BITS FROM SOURCE
+         CALL SBIT(NPACK(IBASE+I),T,IE,N)
+C        AND LOAD INTO DESTINATION
+15       NN = NN + N
+C        UPDATE BITS XFERRED
+20    CONTINUE
+      RETURN
+      END
+      SUBROUTINE G_BYTE(NPACK,ISAM,IBIT,NBITS)
+C
+C**** G_BYTE - VAX routine.
+C
+C     G_BYTE AND S_BYTE ARE SPECIAL ROUTINES TO DO THE SAME
+C     THINGS AS THEIR COUNTERPARTS ON THE MESA.
+C     THEY DIFFER FROM THE BITS ROUTINES IN THAT BITS
+C     ARE COUNTED FROM THE TOP OF THE WORD RATHER THAN
+C     THE BOTTOM.  THIS MEANS THAT THE BITS THEY SPECIFY JUMP AROUND
+C     WHEN CROSSING BYTE BOUNDARIES.  THERE IS NO ASSUMPTION
+C     MADE ABOUT THE WORDSIZE OF THE MACHINE THEY WERE WRITTEN
+C     ON.  HOWEVER THE MAXIMUM NUMBER OF BITS EXTRACTED MUST BE
+C     LESS THAN OR EQUAL TO 32.
+C
+      BYTE NPACK(8)
+      INTEGER T
+      EXTERNAL SS$_ABORT
+      IDBIT(I) = 7 - MOD(I,8)
+      ISW = 3
+      ISAM = 0
+      GO TO 10
+      ENTRY S_BYTE(NPACK,ISAM,IBIT,NBITS)
+      ISW = 4
+10    IBASE = IBIT/8
+C     IBASE POINTS TO THE FIRST BYTE INVOLVED
+      IOFF = IBIT - 8*IBASE
+C     IOFF IS THE BIT OFFSET WITHIN FIRST BYTE
+      M = (IOFF+NBITS-1)/8 + 1
+C     M IS THE NUMBER OF BYTES (INCLUDING PARTIALS) INVOLVED
+C     IF(M.GT.5)THEN
+      IF(NBITS.GT.32)THEN
+         TYPE *,'ILLEGAL VALUE FOR NBITS IN S/G_BYTE(S) CALL'
+         CALL SYS$EXIT(SS$_ABORT)
+      END IF
+      NN = 0
+C     NN IS THE NUMBER OF BITS TRANSFERRED
+      DO 20 I = M , 1 , -1
+C     LOOP ON BYTES
+         IBB = IBASE + I - 1
+         IBC = IBB/4
+         IBD = 4*IBC+3-MOD(IBB,4) + 1
+C        CALCULATE UNSHIFTED BYTE
+         IS = IDBIT(0)
+C        CALC FIRST BIT WITHIN BYTE
+         IE = IDBIT(7)
+C        CALC LAST BIT WITHIN BYTE
+         IF(I.EQ.1)IS = IDBIT(IOFF)
+C        FIRST BIT VARIES FOR FIRST BYTE
+         IF(I.EQ.M)IE = IDBIT(IOFF+NBITS-1)
+C        LAST BIT VARIES FOR LAST BYTE
+         N = IS - IE + 1
+C        CALC NUMBER OF BITS WITHIN BYTE TO XFER
+         IF(ISW.EQ.4)GO TO 12
+C        CALL GBIT(NPACK(IBASE+I),T,IE,N)
+         CALL GBIT(NPACK(IBD),T,IE,N)
+C        EXTRACT BITS FROM SOURCE
+         CALL SBIT(ISAM,T,NN,N)
+C        AND LOAD INTO DESTINATION
+         GO TO 15
+12       CALL GBIT(ISAM,T,NN,N)
+C        EXTRACT BITS FROM SOURCE
+C        CALL SBIT(NPACK(IBASE+I),T,IE,N)
+         CALL SBIT(NPACK(IBD),T,IE,N)
+C        AND LOAD INTO DESTINATION
+15       NN = NN + N
+C        UPDATE BITS XFERRED
+20    CONTINUE
+      RETURN
+      END
+      .TITLE   SGBIT
+;     ++++++++++
+;     CALL GBIT(NPACK,ISAM,IBIT,NBITS)
+;     UNPACKS THE BIT PATTERN LOCATED AT A BIT OFFSET
+;     OF IBIT IN NPACK OF LENGTH NBITS INTO ISAM.
+;
+;     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+;     IT IS SIMILAR TO NCAR'S GBYTE BUT IT WORKS WITH
+;     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+;     ----------
+      .PSECT    MACRO_CODE PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT,NOVEC
+      .ENTRY   GBIT,0
+      EXTZV @12(AP), at 16(AP), at 4(AP), at 8(AP)  ;ISN'T THIS NEAT ?
+      RET
+;
+;
+;     ++++++++++
+;     CALL SBIT(NPACK,ISAM,IBIT,NBITS)
+;     PACKS THE VALUE IN ISAM INTO NPACK
+;     WITH NBITS OFFSET BY IBIT.
+;
+;     THIS ROUTINE EXTRACTS BITS FROM VAX WORDS.
+;     IT IS SIMILAR TO NCAR'S SBYTE BUT IT WORKS WITH
+;     THE NATURAL UNDERLYING STRUCTURE OF THE VAX.
+;     ----------
+      .ENTRY   SBIT,0
+      INSV  @8(AP), at 12(AP), at 16(AP), at 4(AP)  ;ISN'T THIS NEAT ?
+      RET
+      .END
diff --git a/gribex/bufrin.F b/gribex/bufrin.F
new file mode 100755
index 0000000..0aea204
--- /dev/null
+++ b/gribex/bufrin.F
@@ -0,0 +1,40 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+	subroutine bufrin(kunit,karray,kinlen,koutlen,keof,kret)
+C---->
+C
+C	This subroutine mimics the behaviour of the original BUFRIN 
+C	but makes a call to PBBUFR to retrieve BUFR products.
+C
+C----<
+	integer icalls
+	data icalls/0/
+C
+C First time through, print a warning message
+	if (icalls .eq. 0) then
+	  icalls = icalls + 1
+	  write(*,*) ' *********************************************'
+	  write(*,*) ' *********************************************'
+	  write(*,*) ' You are using an obsolete subroutine (BUFRIN)'
+	  write(*,*) ' for retrieving BUFR products.'
+	  write(*,*) ' Please change to using PBBUFR.'
+	  write(*,*) ' *********************************************'
+	  write(*,*) ' *********************************************'
+	endif
+C
+	call pbbufr(kunit,karray,kinlen,koutlen,kret)
+	if ( kret .eq. -3) then
+	  write(*,*) ' Buffer not big enough for BUFR product'
+	  kret = -5
+	endif
+C
+	return
+	end
diff --git a/gribex/c2bitw.F b/gribex/c2bitw.F
new file mode 100755
index 0000000..8440c91
--- /dev/null
+++ b/gribex/c2bitw.F
@@ -0,0 +1,126 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2BITW ( KVALUE, KXBITS, KPOWER, KMXPWR )
+C
+C---->
+C**** C2BITW
+C
+C     Purpose.
+C     --------
+C
+C     Compute BIT Width necessary to encode a positive integer value.
+C
+C**   Interface.
+C     ----------
+C
+C     IWIDTH = C2BITW ( KVALUE, KXBITS, KPOWER, KMXPWR )
+C
+C     Function return value is the requested bit width.
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KVALUE     - Positive integer value.
+C     KXBITS     - MaXimum number of BITS estimated.
+C     KPOWER     - Auxilary array, containing precomputed powers of 2-1.
+C     KMXPWR     - Maximum number of bits allowed.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     Loop down on possible bit width values.
+C
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - February 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     None.
+C
+C----<
+C
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KVALUE, KXBITS, KMXPWR
+      INTEGER KPOWER (0:KMXPWR)
+C
+C     Local variables.
+C
+      INTEGER IRETFN, J
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Direct computing.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      DO 101 J=MIN (KXBITS,KMXPWR)-1,0,-1
+C
+      IF (KVALUE.GT.KPOWER(J)) THEN
+        IRETFN=J+1
+        GOTO 102
+      ENDIF
+C
+  101 CONTINUE
+C
+      IRETFN=0
+C
+  102 CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      C2BITW = IRETFN
+C
+C
+      RETURN
+C
+      END
diff --git a/gribex/c2cwid.F b/gribex/c2cwid.F
new file mode 100755
index 0000000..a09c29d
--- /dev/null
+++ b/gribex/c2cwid.F
@@ -0,0 +1,629 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2CWID ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,
+     X                          KNSPT,  KBITS,  OCOMGR, OLONLY, KLEN4,
+     X                          KFIROV, KLEN,   KREFGR, KLENGR, KLWORK,
+     X                          KSTART, KPOWER, KMXPWR, KNBIFO, KNCMIN,
+     X                          KLWORX, KIWORK, ODEBUG, OPTLEN )
+C
+C---->
+C**** C2CWID
+C
+C     Purpose.
+C     --------
+C
+C     Performs "constant width packing" method for section 4 of GRIB,
+C     and/or computes only length of section 4, with/without coding,
+C     with this method.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = C2CWID ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,  KNSPT,
+C    X                KBITS,  OCOMGR, OLONLY, KLEN4,  KFIROV, KLEN,
+C    X                KREFGR, KLENGR, KLWORK, KSTART, KPOWER, KMXPWR,
+C    X                KNBIFO, KNCMIN, KLWORX, KIWORK, ODEBUG, OPTLEN )
+C
+C
+C     Input Parameters for all options.
+C     --------------------------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     OCOMGR     - True if COMputing of GRoup arrays is requested.
+C     OLONLY     - True if Length ONLY is requested (no coding).
+C     KLEN       - Exact number of grid-points to handle.
+C     KLWORK     - First dimension of work arrays.
+C     KPOWER     - Auxilary array, containing precomputed powers of 2-1.
+C     KMXPWR     - Maximum number of bits per original scaled value.
+C     KNCMIN     - Minimum increment to use when determining groups.
+C     ODEBUG     - True for some debug printout.
+C     OPTLEN     - OPTimise LENgth of section 4 (if OCOMGR is true).
+C
+C
+C     Output Parameters for all options.
+C     ---------------------------------
+C
+C     KSEC4      - Array of GRIB section 4 integer descriptors:
+C                  KSEC4(11) when OCOMGR and OPTLEN are true;
+C                  other indexes when OLONLY is false.
+C     KLEN4      - Length of section 4.
+C     KLWORX     - Maximum work space used.
+C
+C     Output Parameters when OLONLY is false.
+C     --------------------------------------
+C
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product (updated).
+C
+C     Output Parameters when OCOMGR is true,
+C      Input Parameters when OCOMGR is false.
+C     --------------------------------------
+C
+C     KFIROV     - Number of FIrst-Order Values (and groups) determined.
+C     KREFGR     - Work array, first-order values for each group.
+C     KLENGR     - Work array, effective length of each group.
+C     KNBIFO     - Number of BIts for coding First-Order values.
+C     KIWORK     - Second index into work arrays corresponding to
+C                  optimal or computed case.
+C
+C     Output Parameters when OCOMGR is true,
+C      Input parameter in all cases.
+C     --------------------------------------
+C
+C     KDATA      - Used as work array by C2PACK.
+C
+C     Input Parameter when OCOMGR is false.
+C     -------------------------------------
+C
+C     KSTART     - First index value of precomputed work arrays KREFGR
+C                  and KLENGR.
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes.
+C
+C     If requested through OCOMGR, a first scan computes work arrays,
+C     bit number for coding first-order values and length of section 4.
+C
+C     If requested, coding is applied in a second scan, using
+C     descriptors computed in the first scan, possibly in a previous
+C     call.
+C
+C     When OPTLEN is true, an iterative process is performed in the
+C     first scan, to choose an optimal width leading to minimum length
+C     of message (through its section 4).
+C
+C     Externals.
+C     ----------
+C
+C     C2BITW    - Computes bit width of a positive integer value.
+C     C2PACK    - Encodes descriptors and data.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 
+C               in the GRIB product.
+C     On exit,  KNSPT points to the first unused bit of section 4,
+C               (or to the first bit of section 5, if unused bit count
+C                is zero) in the GRIB product.
+C
+C     KDATA is overwritten when coding is requested.
+C     This is coherent with GRIBEX.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, April 1998.
+C     Use C2BITW function for bit width computations, out of
+C     the splitting algorithm itself.
+C     When optimisation is required, use -KSEC4(11) as initial and
+C     maximum width for iterative search of optimal width.
+C
+C     J. Clochard, September 1998.
+C     Suppress KSEC1/KSEC2/KSEC3 dummy-arguments.
+C         "    KSEC1, add KWORK/KPOWER/KMXPWR argument in C2PACK call.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KLEN4, KNCMIN, KLWORX, KIWORK
+      INTEGER KLEN, KLWORK, KMXPWR, KNBIFO, KFIROV, KSTART
+      INTEGER KDATA (KLENP), KSEC4 (*), KGRIB (KLENG), KREFGR (KLWORK,2)
+      INTEGER KPOWER (0:KMXPWR), KLENGR (KLWORK,2)
+C
+      LOGICAL OLONLY, OCOMGR, ODEBUG, OPTLEN
+C
+C     Local variables.
+C
+      INTEGER INBITN, ICOUNT, INBITX, INBIFO, ILDSTA
+      INTEGER IGROUP, INCR, ISIZEG, INBIT, INCMIR, IPOWER, ICWORK
+      INTEGER J, IDMAX, IDMIN, ISOMAX, ICRITR, ICRITO, INCRBI
+      INTEGER IRETFN, IBITGW, IFOMAX, INCMIN, INBITO, IDMAXG, IDMING
+      INTEGER INBIFX, INBICW, IOFF, IFIROV, ISTART, ILWORK
+C
+      INTEGER C2PACK, C2BITW
+      EXTERNAL C2PACK, C2BITW
+C
+      INTRINSIC ABS
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial checks.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) OCOMGR, OPTLEN, OLONLY, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IRETFN = 0
+      ICOUNT=0
+      ILDSTA=21
+      IBITGW=8
+      INBITO=KSEC4(2)
+      KLWORX=0
+C
+      IF (.NOT.OCOMGR) THEN
+C
+        IF (OLONLY) THEN
+          IRETFN = 21110
+          WRITE(GRPRSM,FMT=9110)
+          GOTO 900
+        ELSE
+          INBIFO=KNBIFO
+          INBICW=KSEC4(11)
+          IFIROV=KFIROV
+          KLWORX=KFIROV
+          ISTART=KSTART
+          GOTO 300
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Computing of references and lengths of groups.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IFIROV=(KLWORK+1)
+      INBIFO=INBITO
+      INBICW=INBITO
+      INCMIN=MIN (MAX (KNCMIN,1),1+KLEN/2)
+      ISIZEG=1 + INT ( SQRT ( REAL (KLEN-1) ) /5. )
+      ISIZEG=MAX (ISIZEG,INCMIN)
+      ICWORK=1
+      ISTART=1
+C
+C     Initial value for criterion to minimize in iterative process.
+C     Over-estimated (expressed in bits instead of octets).
+C
+      ICRITO=8+IFIROV*(INBIFO+1)-1+8+(KLEN+1)*(INBICW+1)-1
+C
+      IF (OPTLEN) THEN
+C
+C     In this case, no predetermined number of bits is assigned.
+C     An iterative process will compute a number of bits leading to
+C     a (relative) minimum length of coded message.
+C
+        INBITX=ABS (KSEC4(11))
+        INBITN=0
+        INBIT=MAX (INBITX-1,INBITN)
+        INCRBI=-MIN ( 3 , MAX (1,(INBIT-INBITN)/3) )
+      ELSE
+C
+C     Width (number of bits for second-order values) is KSEC4(11).
+C
+        INBITX=KSEC4(11)
+        INBITN=KSEC4(11)
+        INBIT=KSEC4(11)
+        INCRBI=-1
+      ENDIF
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9200) INBITO, (KSEC4(J),J=1,13),
+     X                          INCMIN, ISIZEG
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C     -----------------------------------------------------------------
+C                     Start of iterative process.
+C     -----------------------------------------------------------------
+C
+  210 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9210) INBITX, INBITN, INBIT, INCRBI
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      ICOUNT=0
+      IGROUP=0
+      IFOMAX=0
+      IPOWER=KPOWER(INBIT)
+C
+C     -----------------------------------------------------------------
+C                  Determination of an initial group.
+C     -----------------------------------------------------------------
+C
+  220 CONTINUE
+C
+      ISIZEG=MIN (ISIZEG,KLEN-ICOUNT)
+C
+C     Extrema computed in-line for better efficiency.
+C
+      IDMAX=KDATA(ICOUNT+1)
+      IDMIN=KDATA(ICOUNT+1)
+C
+      DO 221 J=2,ISIZEG
+      IDMAX=MAX (IDMAX,KDATA(ICOUNT+J))
+      IDMIN=MIN (IDMIN,KDATA(ICOUNT+J))
+  221 CONTINUE
+C
+      ISOMAX=IDMAX-IDMIN
+C     PRINT *,'c2cwid - ICOUNT=',ICOUNT,', ISIZEG=',ISIZEG,
+C    S        ', IDMIN=',IDMIN,', IDMAX=',IDMAX,', ISOMAX=',ISOMAX
+C
+      IF (ISOMAX.GT.IPOWER) THEN
+C
+C     Initial segment does not fit within INBIT bits, reduce and retry.
+C
+        ISIZEG=ISIZEG/2
+        GOTO 220
+      ELSEIF (ISIZEG.LT.INCMIN.AND.IGROUP.NE.0) THEN
+C
+C     Initial group size very small. Try to join previous group...
+C
+        IDMAXG=MAX (IDMAX,IDMAXG)
+        IDMING=MIN (IDMIN,IDMING)
+        ISOMAX=IDMAXG-IDMING
+C
+        IF (ISOMAX.LE.IPOWER) THEN
+C
+C     ... succesfully.
+C
+          KLENGR(IGROUP,ICWORK)=KLENGR(IGROUP,ICWORK)+ISIZEG
+          ICOUNT=ICOUNT+ISIZEG
+          GOTO 241
+        ENDIF
+C
+      ENDIF
+C
+      IDMAXG=IDMAX
+      IDMING=IDMIN
+      IOFF=ICOUNT+ISIZEG
+      INCR=MIN (ISIZEG,KLEN-IOFF)
+C
+      IF (INCR.EQ.0) THEN
+        GOTO 240
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C                Try to add increments to initial group.
+C     -----------------------------------------------------------------
+C
+  230 CONTINUE
+C
+      IDMAX=IDMAXG
+      IDMIN=IDMING
+C
+#ifdef FUJITSU
+!OCL SCALAR
+#endif
+      DO 231 J=1,INCR
+      IDMAX=MAX (IDMAX,KDATA(IOFF+J))
+      IDMIN=MIN (IDMIN,KDATA(IOFF+J))
+  231 CONTINUE
+#ifdef FUJITSU
+!OCL VECTOR
+#endif
+C
+      ISOMAX=IDMAX-IDMIN
+C     PRINT *,'c2cwid - IOFF=',IOFF,', ISIZEG=',ISIZEG,
+C    S      ', INCR=',INCR,', ISOMAX=',ISOMAX,', IGROUP+1=',IGROUP+1
+C
+C     If end of data very near, relax constraint on minimum increment.
+C
+      INCMIR=MAX ( 1, MIN (KLEN-IOFF,INCMIN) )
+C
+      IF (ISOMAX.LE.IPOWER) THEN
+C
+C     Incremental group added to current group.
+C
+        IDMAXG=IDMAX
+        IDMING=IDMIN
+        IOFF=IOFF+INCR
+        INCR=MIN (ISIZEG,KLEN-IOFF)
+C
+        IF (INCR.NE.0) THEN
+          GOTO 230
+        ENDIF
+C
+      ELSEIF (INCR.GT.INCMIR) THEN
+C
+C     Incremental group does not fit, try a smaller one.
+C
+        INCR=MAX (INCR/2,INCMIR)
+        GOTO 230
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C     No incremental group may be added. Current group is closed.
+C     -----------------------------------------------------------------
+C
+  240 CONTINUE
+C
+      IGROUP=IGROUP+1
+      KLENGR(IGROUP,ICWORK)=IOFF-ICOUNT
+      ICOUNT=IOFF
+      ISOMAX=IDMAXG-IDMING
+C
+C     Maximum use of width for second-order values: the maximum value
+C     of group will be encoded with the biggest value fitting in
+C     INBIT bits, and keeping reference value positive or zero.
+C
+C     The goal is to get the lowest reference value, thus trying
+C     (desperately) to save bit(s) to encode the first-order values.
+C
+  241 CONTINUE
+C
+      KREFGR(IGROUP,ICWORK)=MAX (0,IDMING-(IPOWER-ISOMAX))
+      IFOMAX=MAX (IFOMAX,KREFGR(IGROUP,ICWORK))
+#ifdef ebug2o
+C
+      IF (.NOT.OLONLY) THEN
+        PRINT *,'c2cwid - group',IGROUP,KLENGR(IGROUP,ICWORK),INBIT
+     X         ,' (...)',IDMING,ISOMAX,KREFGR(IGROUP,ICWORK),ICOUNT
+      ENDIF
+#endif
+C
+      IF (ICOUNT.EQ.KLEN) THEN
+        GOTO 250
+      ELSEIF (IGROUP.LT.KLWORK) THEN
+        ISIZEG=MAX (INCMIN,ISIZEG,KLENGR(IGROUP,ICWORK)/2)
+        GOTO 220
+      ELSE
+C
+C     Out of work space. A message is issued, except in iterative
+C     process, if the estimated length is already bigger than
+C     previously computed.
+C
+        KLWORX=MAX (KLWORX,IGROUP)
+        ICRITR=(8+(IGROUP+1)*INBIFO-1)/8+(8+KLEN*INBIT-1)/8
+C
+        IF (ICRITR.LT.ICRITO) THEN
+          WRITE(GRPRSM,FMT=9240) KLWORK, INBIT
+        ENDIF
+C
+        IF (INBIT.LT.INBITX.AND.INBIT.GT.INBITN) THEN
+C
+C     Other bit value(s) may still be tried.
+C
+          ICRITR=ICRITO+1
+          GOTO 260
+        ELSEIF (INBICW.NE.INBITO) THEN
+C
+C     A constant width has been successfully computed before.
+C     It will be used as the best computable result.
+C
+          GOTO 270
+        ELSE
+          IRETFN = 21240
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+  250 CONTINUE
+C
+      KLWORX=MAX (KLWORX,IGROUP)
+C
+C     Number of bits necessary to code first-order values.
+C
+      INBIFX = C2BITW ( IFOMAX, INBITO, KPOWER, KMXPWR )
+C
+      ICRITR=(8+IGROUP*INBIFX-1)/8+(8+KLEN*INBIT-1)/8
+C
+  260 CONTINUE      
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9260) INBIT, INBIFX, IGROUP, ICRITR
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      IF (ICRITR.LT.ICRITO) THEN
+C
+C     INBIT may be retained, at least temporarily, for constant width.
+C
+        INBICW=INBIT
+        IFIROV=IGROUP
+        INBIFO=INBIFX
+        KIWORK=ICWORK
+        ICWORK=1+MOD (ICWORK,2)
+        ICRITO=ICRITR
+C
+        IF (INBIT.GT.INBITN) THEN
+C
+C     Decrease INBIT for next trial.
+C
+          IF (INCRBI.LT.0) THEN
+            INCRBI=MAX ( INCRBI , MIN (-1,(INBITN-INBIT)/3) )
+          ELSE
+            INCRBI=MAX ( MIN (-1,1-INCRBI) , INBITN-INBIT )
+          ENDIF
+C
+          INBITX=INBIT-1
+          INBIT=INBIT+INCRBI
+          GOTO 210
+        ENDIF
+C
+      ENDIF
+C
+      IF (INBIT.LT.INBITX) THEN
+C
+C             INBIT not suitable, increase it and retry.
+C
+        INBITN=INBIT+1
+        INCRBI=MIN ( MAX (ABS(1-INCRBI),1) , INBITX-INBIT )
+        INBIT=INBIT+INCRBI
+        GOTO 210
+C
+      ENDIF
+C
+C     Work done, and/or no better length than previously.
+C
+  270 CONTINUE      
+C
+C     Compute full length of section 4 of GRIB.
+C 
+      KLEN4=ILDSTA + 1 + (8+KLEN-1)/8 + ICRITO
+      KLEN4=2*((2+KLEN4-1)/2)
+      KNBIFO=INBIFO
+      KFIROV=IFIROV
+C
+      IF (OPTLEN) THEN
+        KSEC4(11)=INBICW
+      ENDIF
+C
+      IF (OLONLY) THEN
+C
+C       Length has been computed, go back without any coding.
+C
+        GOTO 900
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3. Definition of fixed-length descriptors and coding.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     The first 10 octets have already been coded in GRIBEX, or will
+C     be in a further step of GRIBEX:
+C     Length of section, flags+unused bit count, binary scale factor,
+C     reference value.
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9300) 
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C     Enforce right values for extended flags.
+C
+      KSEC4( 9)=32
+      KSEC4(10)=0
+      KSEC4(12)=0
+C
+C     Extra descriptors.
+C
+      KSEC4(18)=KFIROV
+      KSEC4(20)=IBITGW
+      ILWORK=KLWORK-ISTART+1
+C
+C     KREFGR alone in call corresponds to a formal argument of function
+C     C2PACK, which has to be there but is not used for constant width
+C     packing.
+C
+      IRETFN = C2PACK ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,  KNSPT,
+     X                  KBITS,  KLEN,   KREFGR(ISTART,KIWORK),
+     X                  KLENGR(ISTART,KIWORK),          KREFGR,
+     X                  KREFGR, ILWORK, KPOWER, KMXPWR, KNBIFO, ODEBUG )
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      C2CWID = IRETFN
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, OCOMGR, OPTLEN, OLONLY, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' C2CWID: Function start, OCOMGR = ',L1,
+     X        ', OPTLEN = ',L1,', OLONLY = ',L1,', KNSPT =',I10,'.')
+C
+ 9110 FORMAT (' C2CWID: Routine called, but has nothing to do.')
+C
+ 9200 FORMAT (' C2CWID: Computing work arrays, INBITO =',I3,'.',/,
+     X        ' C2CWID: KSEC4(1:13)=',I9,I3,I4,3I3,I2,4I3,2I2,'.',/,
+     X        ' C2CWID: INCMIN =',I3,', ISIZEG =',I6,'.')
+C
+ 9210 FORMAT (' C2CWID: INBITX =',I3,', INBITN =',I3,', INBIT =',I3,
+     X        ', INCRBI =',I3,'.')
+C
+ 9240 FORMAT (' C2CWID: Groups number exceeds work space (',I8,
+     X        '), giving up for INBIT =',I3,'.')
+C
+ 9260 FORMAT (' C2CWID: INBIT =',I3,', INBIFX =',I3,', IGROUP =',I8,
+     X        ', ICRITR =',I9,'.')
+C
+ 9300 FORMAT (' C2CWID: Coding phase - calling C2PACK.')
+C
+ 9900 FORMAT (' C2CWID: Function return code=',I6,
+     X        ', OCOMGR/OPTLEN/OLONLY/KNSPT=',3L1,I10,'.')
+C
+      END
diff --git a/gribex/c2dosd.F b/gribex/c2dosd.F
new file mode 100755
index 0000000..2177a56
--- /dev/null
+++ b/gribex/c2dosd.F
@@ -0,0 +1,666 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2DOSD ( KDATA,  KLENP,  KSEC4,  OCOMSD, KLEN,  
+     X                          KWORK,  KLWORK, KPOWER, KMXPWR, KPCWID,
+     X                          KXCWID, KMINPK, KLWORX, KBIAS,  KWIDSD,
+     X                          KWIDOR, OCBIAS, ODEBUG )
+C
+C---->
+C**** C2DOSD
+C
+C     Purpose.
+C     --------
+C
+C     Depending on actual arguments, Diagnose Order of Spatial
+C     Differences, and/or when requested and order is not null,
+C     computes spatial differences for GRIB second-order extended
+C     packing.
+C
+C**   Interface.
+C     ----------
+C
+C     IORDER = C2DOSD ( KDATA,  KLENP,  KSEC4,  OCOMSD, KLEN,   KWORK,
+C    X                  KLWORK, KPOWER, KMXPWR, KPCWID, KXCWID, KMINPK,
+C    X                  KLWORX, KBIAS,  KWIDSD, KWIDOR, OCBIAS, ODEBUG )
+C
+C     Function result value is the order of spatial differencing
+C     (diagnosed or imposed).
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C     OCOMSD     - True for COMputing Spatial Differences.
+C     KLEN       - Exact number of grid-points to handle.
+C     KLWORK     - Length of work array KWORK.
+C     KPOWER     - Auxilary array, precomputed (powers of 2)-1.
+C     KMXPWR     - Maximum number of bits allowed.
+C     KPCWID     - Auxilary array, precomputed widths.
+C     KXCWID     - Maximum width associated to KPCWID.
+C     KMINPK     - Initial (minimum) length of groups.
+C     KBIAS      - BIAS of spatial differences (if OCBIAS is .FALSE.).
+C     OCBIAS     - True for Computation of BIAS.
+C     ODEBUG     - True for some debug printout.
+C
+C
+C     Output Parameters (effective only if function value is non zero).
+C     ------------------
+C
+C     KDATA      - Array of normalized values (transformed).
+C     KWORK      - Work array.
+C     KLWORX     - Upper index used within KWORK array.
+C     KBIAS      - BIAS of spatial differences.
+C     KWIDSD     - WIDth of Spatial Differencing specific descriptors.
+C     KWIDOR     - WIDth of field, after possible transformation.
+C
+C
+C     Method.
+C     -------
+C
+C     If requested (KSEC4(14) or KSEC4(15) equal to -1), first
+C     compute "best" order of spatial differencing (up to 3) to be
+C     applied to KDATA. Estimation is made through comparison of
+C     average ranges of original field and of spatial differencing,
+C     starting from order 1.
+C
+C     If requested through OCOMSD and when order is non zero, computes
+C     spatial differences on KDATA (keeping the first IORDER values
+C     from original field, for encoding).
+C
+C
+C     Externals.
+C     ----------
+C
+C     MAXMNI    - Computes extrema of integer array.
+C     C2RNGE    - Computes range diagnostics.
+C     C2BITW    - Computes bit width of a positive integer value.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     Best order is considered reached when average range is found
+C     greater than previously diagnosed. This feature is derived from
+C     practice, and reduces CPU costs.
+C
+C     Work array use when diagnostic is requested:
+C
+C     -if OCOMSD is true and if KLWORK is greater than (or equal to)
+C      (2*KLEN-3), there is no recomputation from KDATA itself;
+C
+C     -if KLWORK is greater than (or equal to) (KLEN-1), then KWORK
+C      is used recursively;
+C
+C     -otherwise, KDATA has to be used in slices and computation is
+C      more expensive.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - April 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, June 1999.
+C     Use precomputed array to determine widths . Dummy-arguments
+C     KPCWID and KXCWID added . Assumption is made that KXCWID
+C     is at least (KMXPWR+1)/2 . KPCWID/KXCWID added in C2RNGE calls .
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPORDR
+C
+C       Maximum order of spatial differencing allowed.
+C
+      PARAMETER ( JPORDR=3 )
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLWORX, KLEN, KLWORK, KMXPWR, KMINPK, KBIAS, KWIDOR
+      INTEGER KWIDSD, KXCWID
+      INTEGER KDATA (KLENP), KSEC4 (*), KPOWER (0:KMXPWR), KPCWID (0:*)
+      INTEGER KWORK (KLWORK)
+C
+      LOGICAL OCOMSD, ODEBUG, OCBIAS
+C
+C     Local variables.
+C
+      INTEGER IBASE, IOFFWK, IREFER, J, INPACK, IMIN, IMAX, IXORDR
+      INTEGER INBIFO, ILEN, IMAXAB, IWIDAB, IDIAGN, IOFFWP, ILWORX
+      INTEGER JORDER, IORDER, IAUX1, IAUX2, IAUX3, IRANGE, IBITGW
+      INTEGER INPACW, INBSEQ, JSEQ, ILWORK, IAUXIL, INPACS, IXBITS
+C
+      INTEGER IDIAGO ( 0:JPORDR ), IMINAB (JPORDR), INBIAB (JPORDR)
+C
+      INTEGER C2BITW, C2RNGE
+      EXTERNAL C2BITW, C2RNGE
+C
+      INTRINSIC ABS
+C
+      LOGICAL L1PASS, LCBIAS, LIBIAS
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial checks.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) OCOMSD, OCBIAS
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IXORDR=MIN (JPORDR,KLEN)
+      IXBITS=KSEC4(2)
+      ILWORX=0
+      IBASE=0
+      L1PASS=OCOMSD.AND.KLWORK.GE.(KLEN-1)
+      LIBIAS=.FALSE.
+C
+      IF (KSEC4(14).NE.-1.AND.KSEC4(15).NE.-1) THEN
+C
+C         Order of spatial differencing explicitly specified.
+C
+        IORDER=MIN ( IXORDR, KSEC4(14)+KSEC4(15) )
+        LCBIAS=OCBIAS
+        L1PASS=.FALSE.
+        GOTO 400
+C
+      ELSEIF (OCOMSD.AND.KLWORK.GE.2*KLEN-3) THEN
+C
+        IBASE=KLEN-1
+C
+      ENDIF
+C
+      LCBIAS=.FALSE.
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Computes average range of original normalized values.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      INPACK=KLEN/KMINPK
+      IDIAGN=0
+      IWIDAB=0
+      IREFER=0
+C
+      IOFFWK = C2RNGE ( INPACK, KMINPK, KSEC4(2), KDATA,  IDIAGN,
+     X                  IWIDAB, IREFER, KPOWER,   KMXPWR, KPCWID,
+     X                  KXCWID )
+C
+      INBIFO = C2BITW ( IREFER, KSEC4(2), KPOWER, KMXPWR )
+C
+      IBITGW = C2BITW ( IWIDAB, KSEC4(2), KPOWER, KMXPWR )
+C
+C     IDIAGN=(IDIAGN+7)/8
+      IDIAGN=(IDIAGN+7)/8+(INPACK*IBITGW+7)/8+(INPACK*INBIFO+7)/8
+C     IDIAGN=(IDIAGN+7)/8+(INPACK*IBITGW+7)/8
+      IDIAGO(0)=IDIAGN
+      IORDER=0
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        PRINT *, 'IDIAGO(0) = ', IDIAGN, INPACK, IBITGW, INBIFO
+C
+        WRITE(GRPRSM,FMT=9211) 'original values', KMINPK, IDIAGO(0)
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C
+C     -----------------------------------------------------------------
+C*    Section 3 . Computes average range of spatial differences.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IOFFWP=0
+      INPACW=KLWORK/KMINPK
+      ILWORK=INPACW*KMINPK
+C
+C           Loop on order of spatial differencing.
+C
+      DO 329 JORDER=1,IXORDR
+C
+C           Compute spatial differences.
+C
+      ILEN=KLEN-JORDER
+      INPACK=ILEN/KMINPK
+      IDIAGO(JORDER)=0
+      IWIDAB=0
+      IREFER=-KPOWER(KMXPWR)
+      IOFFWK=MOD (JORDER-1,2)*IBASE
+      IXBITS=MIN(IXBITS+1,KMXPWR)
+C
+      IF (L1PASS) THEN
+C
+        IF (JORDER.EQ.1) THEN
+C
+          DO 301 J=1,ILEN
+          KWORK(IOFFWK+J)=KDATA(J+1)-KDATA(J)
+  301     CONTINUE
+C
+        ELSE
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+          DO 302 J=1,ILEN
+          KWORK(IOFFWK+J)=KWORK(IOFFWP+J+1)-KWORK(IOFFWP+J)
+  302     CONTINUE
+C
+        ENDIF
+C
+        IOFFWP=IOFFWK
+        ILWORX = MAX ( ILWORX, IOFFWK+ILEN )
+C
+        CALL MAXMNI (KWORK(IOFFWK+1),ILEN,IMAXAB,IMINAB(JORDER))
+C
+C         Check that extrema difference would not lead to overflow.
+C
+        IRANGE=IMAXAB/2-IMINAB(JORDER)/2
+C
+        IF (IRANGE.GT.KPOWER(KMXPWR-1)) THEN
+          IORDER=JORDER-1
+          WRITE(GRPRSM,FMT=9301) JORDER, IORDER
+          GOTO 330
+        ENDIF
+C
+        IAUXIL = C2RNGE ( INPACK, KMINPK, IXBITS, KWORK(IOFFWK+1),
+     X                    IDIAGO(JORDER), IWIDAB, IREFER, KPOWER,
+     X                    KMXPWR, KPCWID, KXCWID )
+C
+      ELSE
+C
+C       Work array too short. Data array processed into slices.
+C
+        INBSEQ=1+(ILEN-1)/ILWORK
+        IMAXAB=-KPOWER(KMXPWR)
+        IMINAB(JORDER)=KPOWER(KMXPWR)
+C
+        DO 314 JSEQ=1,INBSEQ
+C
+        IAUXIL=MIN (ILWORK,ILEN-(JSEQ-1)*ILWORK)
+        INPACS=MIN (INPACW,INPACK-(JSEQ-1)*INPACW)
+C
+        IF (JORDER.EQ.1) THEN
+C
+          DO 311 J=1,IAUXIL
+          KWORK(J)=KDATA(IOFFWK+J+1)-KDATA(IOFFWK+J)
+  311     CONTINUE
+C
+        ELSEIF (JORDER.EQ.2) THEN
+C
+          DO 312 J=1,IAUXIL
+          IAUX1=KDATA(IOFFWK+J+1)-KDATA(IOFFWK+J  )
+          IAUX2=KDATA(IOFFWK+J+2)-KDATA(IOFFWK+J+1)
+          KWORK(J)=IAUX2-IAUX1
+  312     CONTINUE
+C
+        ELSE
+C
+          DO 313 J=1,IAUXIL
+          IAUX1=KDATA(IOFFWK+J+1)-KDATA(IOFFWK+J  )
+          IAUX2=KDATA(IOFFWK+J+2)-KDATA(IOFFWK+J+1)
+          IAUX3=KDATA(IOFFWK+J+3)-KDATA(IOFFWK+J+2)
+          KWORK(J)=(IAUX3-IAUX2)-(IAUX2-IAUX1)
+  313     CONTINUE
+C
+        ENDIF
+C
+        ILWORX = MAX ( ILWORX, IAUXIL )
+C
+        CALL MAXMNI (KWORK,IAUXIL,IMAX,IMIN)
+        IMAXAB=MAX (IMAXAB,IMAX)
+        IMINAB(JORDER)=MIN (IMINAB(JORDER),IMIN)
+C
+C         Check that extrema difference would not lead to overflow.
+C
+        IRANGE=IMAXAB/2-IMINAB(JORDER)/2
+C
+        IF (IRANGE.GT.KPOWER(KMXPWR-1)) THEN
+          IORDER=JORDER-1
+          WRITE(GRPRSM,FMT=9301) JORDER, IORDER
+          GOTO 330
+        ELSEIF (INPACS.GT.0) THEN
+C
+          IAUXIL = C2RNGE ( INPACS,         KMINPK, IXBITS, KWORK,
+     S                      IDIAGO(JORDER), IWIDAB, IREFER,
+     S                      KPOWER,         KMXPWR, KPCWID, KXCWID )
+          IOFFWK=IOFFWK+IAUXIL
+C
+        ENDIF
+C
+  314   CONTINUE
+C
+      ENDIF
+C
+      IRANGE=IMAXAB-IMINAB(JORDER)
+C
+      INBIAB(JORDER) = C2BITW ( IRANGE, KSEC4(2)+JORDER,
+     X                          KPOWER, KMXPWR )
+C
+      INBIFO = C2BITW ( IREFER, IXBITS, KPOWER, KMXPWR )
+C
+      IBITGW = C2BITW ( IWIDAB, IXBITS, KPOWER, KMXPWR )
+C
+      IXBITS=INBIAB(JORDER)
+C
+C     IDIAGO(JORDER)=(IDIAGO(JORDER)+7)/8
+      IDIAGO(JORDER)=(IDIAGO(JORDER)+7)/8+(INPACK*IBITGW+7)/8
+     S               +(INPACK*INBIFO+7)/8
+C     IDIAGO(JORDER)=(IDIAGO(JORDER)+7)/8+(INPACK*IBITGW+7)/8
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        PRINT *, 'JORDER=', JORDER, ', IDIAGO(.) = ', IDIAGO(JORDER),
+     S           INPACK, IBITGW, INBIFO
+C
+        WRITE(GRPRSM,FMT=9211) 'spatial differences', KMINPK,
+     S                            IDIAGO(JORDER)
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C
+      IF (IDIAGO(JORDER).LT.IDIAGN) THEN
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9312) 'in favour', JORDER
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        IDIAGN=IDIAGO(JORDER)
+        IORDER=JORDER
+C
+      ELSE
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9312) '*NOT* in favour', JORDER
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        GOTO 330
+C
+      ENDIF
+C
+  329 CONTINUE
+C
+  330 CONTINUE
+C
+      LIBIAS=.TRUE.
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+C
+        DO 331 J=IORDER+2,JPORDR
+        IDIAGO(J)=0
+  331   CONTINUE
+C
+        WRITE(GRPRSM,FMT=9331) IORDER, IDIAGO
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+C     -----------------------------------------------------------------
+C*    Section 4 . Computes spatial differences back into KDATA.
+C     -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF (IORDER.EQ.0) THEN
+C
+C         Prognosis is that spatial differencing is not worth.
+C         Nothing more to do then.
+C
+        GOTO 900
+C
+      ELSEIF (.NOT.OCOMSD) THEN
+C
+C         Computing of spatial differences not requested.
+C
+        GOTO 500
+C
+      ELSEIF (IBASE.NE.0.OR.(IORDER.EQ.IXORDR.AND.L1PASS)) THEN
+C
+C         Required data have been computed above, and are still
+C         available.
+C
+        IOFFWK=MOD(IORDER-1,2)*IBASE
+#ifdef ebug2o
+        PRINT *,'c2dosd - Execution of loop 401, IORDER= ',IORDER,
+     X          ', IOFFWK= ',IOFFWK
+#endif
+C
+        DO 401 J=1,KLEN-IORDER
+        KDATA(IORDER+J)=KWORK(IOFFWK+J)-IMINAB(IORDER)
+  401   CONTINUE
+C
+      ELSEIF (LCBIAS) THEN
+C
+C               Spatial differences first computed without bias.
+C
+        IF (IORDER.EQ.1) THEN
+#ifdef ebug2o
+C
+          PRINT *,'c2dosd - Execution of loop 402, IORDER= ',IORDER
+#endif
+C
+          DO 402 J=KLEN,2,-1
+          KDATA(J)=KDATA(J)-KDATA(J-1)
+  402     CONTINUE
+C
+        ELSEIF (IORDER.EQ.2) THEN
+#ifdef ebug2o
+C
+          PRINT *,'c2dosd - Execution of loop 403, IORDER= ',IORDER
+#endif
+C
+          DO 403 J=KLEN,3,-1
+          IAUX1=KDATA(J-1)-KDATA(J-2)
+          IAUX2=KDATA(J  )-KDATA(J-1)
+          KDATA(J)=IAUX2-IAUX1
+  403     CONTINUE
+C
+        ELSE
+#ifdef ebug2o
+C
+          PRINT *,'c2dosd - Execution of loop 404, IORDER= ',IORDER
+#endif
+C
+          DO 404 J=KLEN,4,-1
+          IAUX1=KDATA(J-2)-KDATA(J-3)
+          IAUX2=KDATA(J-1)-KDATA(J-2)
+          IAUX3=KDATA(J  )-KDATA(J-1)
+          KDATA(J)=(IAUX3-IAUX2)-(IAUX2-IAUX1)
+  404     CONTINUE
+C
+        ENDIF
+C
+C             Now compute and remove bias.
+C
+        ILEN=KLEN-IORDER
+        CALL MAXMNI (KDATA(IORDER+1),ILEN,IMAXAB,IMINAB(IORDER))
+#ifdef ebug2o
+C
+        PRINT *,'c2dosd - Execution of loop 405, IORDER= ',IORDER,
+     X           ', Computed bias= ',IMINAB(IORDER)
+#endif
+C
+        DO 405 J=IORDER+1,KLEN
+        KDATA(J)=KDATA(J)-IMINAB(IORDER)
+  405   CONTINUE
+C
+C             Compute width of spatial differences.
+C
+        IRANGE=IMAXAB-IMINAB(IORDER)
+C
+        INBIAB(IORDER) = C2BITW ( IRANGE, KSEC4(2)+IORDER,
+     X                            KPOWER, KMXPWR )
+C
+      ELSEIF (IORDER.EQ.1) THEN
+C
+C         Explicit computing for 1st-order spatial differences.
+C
+#ifdef ebug2o
+        PRINT *,'c2dosd - Execution of loop 412, IORDER= ',IORDER,
+     X           ', Bias= ',KBIAS
+C
+#endif
+        DO 412 J=KLEN,2,-1
+        KDATA(J)=KDATA(J)-KDATA(J-1)-KBIAS
+  412   CONTINUE
+C
+      ELSEIF (IORDER.EQ.2) THEN
+C
+C         Explicit computing for 2nd-order spatial differences.
+C
+#ifdef ebug2o
+        PRINT *,'c2dosd - Execution of loop 413, IORDER= ',IORDER,
+     X           ', Bias= ',KBIAS
+C
+#endif
+        DO 413 J=KLEN,3,-1
+        IAUX1=KDATA(J-1)-KDATA(J-2)
+        IAUX2=KDATA(J  )-KDATA(J-1)
+        KDATA(J)=IAUX2-IAUX1-KBIAS
+  413   CONTINUE
+C
+      ELSE
+C
+C         Explicit computing for 3rd-order spatial differences.
+C
+#ifdef ebug2o
+        PRINT *,'c2dosd - Execution of loop 414, IORDER= ',IORDER,
+     X           ', Bias= ',KBIAS
+C
+#endif
+        DO 414 J=KLEN,4,-1
+        IAUX1=KDATA(J-2)-KDATA(J-3)
+        IAUX2=KDATA(J-1)-KDATA(J-2)
+        IAUX3=KDATA(J  )-KDATA(J-1)
+        KDATA(J)=(IAUX3-IAUX2)-(IAUX2-IAUX1)-KBIAS
+  414   CONTINUE
+C
+      ENDIF
+C
+C       Note that the IORDER first values of KDATA are kept unchanged.
+C       These "integration constants" will be packed separately.
+C
+C     -----------------------------------------------------------------
+C*    Section 5 . Computes additional descriptors.
+C     -----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+      IF (LCBIAS.OR.LIBIAS) THEN
+C
+        KBIAS=IMINAB(IORDER)
+        KWIDOR=INBIAB(IORDER)
+C
+C          Extra descriptors specific to spatial differencing are
+C          the IORDER first values of "original" field, the bias
+C          of spatial differences, and the width for all of them.
+C
+        CALL MAXMNI (KDATA,IORDER,IMAX,IMIN)
+        IAUX1 = C2BITW ( IMAX, KMXPWR, KPOWER, KMXPWR )
+        IAUX2=IABS (KBIAS)
+        IAUX3 = C2BITW ( IAUX2, KMXPWR, KPOWER, KMXPWR )
+        KWIDSD=MAX (IAUX1,1+IAUX3)
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9420) IORDER, KWIDOR, KWIDSD,
+     X                            (KDATA(J),J=1,IORDER), KBIAS
+#ifndef ebug2o
+        ENDIF
+#endif
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      KLWORX=ILWORX
+C
+      C2DOSD = IORDER
+C
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IORDER
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' C2DOSD: Function start, OCOMSD = ',L1,', OCBIAS = ',
+     X        L1,'.')
+C
+ 9211 FORMAT (' C2DOSD: Approx. s4 length, ',A,',',I3,
+     X        '-length groups:',I9,'.')
+C
+ 9301 FORMAT (' C2DOSD: integer overflow for JORDER =',I2,
+     X        '. IORDER set to',I2,'.')
+C
+ 9312 FORMAT (' C2DOSD: Range diagnostic is ',A,
+     X        ' of spatial differences, order',I2,'.')
+ 9331 FORMAT (' C2DOSD: Selected order:',I2,', range diagnostics:',
+     X        4I8,'.')
+C
+ 9420 FORMAT (' C2DOSD: KWIDSD/KWIDOR/KDATA(1:',I1,')/KBIAS=',2I3,5I11)
+C
+ 9900 FORMAT (' C2DOSD: Function return code =',I3,'.')
+C
+      END
diff --git a/gribex/c2gene.F b/gribex/c2gene.F
new file mode 100755
index 0000000..3a39242
--- /dev/null
+++ b/gribex/c2gene.F
@@ -0,0 +1,931 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2GENE ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,
+     X                          KNSPT,  KBITS,  OCOMGR, OLONLY, KLEN4,
+     X                          KFIROV, KLEN,   KREFGR, KLENGR, KBITGR,
+     X                          KWORK,  KLWORK, KSTART, KPOWER, KMXPWR,
+     X                          KPCWID, KXCWID, KNBIFO, KNCMIN, KMINPK,
+     X                          KLWORX, ODEBUG )
+C
+C---->
+C**** C2GENE
+C
+C     Purpose.
+C     --------
+C
+C     Performs a general second-order packing method for section 4
+C     of GRIB, and/or computes only length of section 4, with/without
+C     coding, with this method.
+C
+C     "General" means with explicit descriptors to describe groups
+C     position and width (not row-by-row, nor constant-width).
+C
+C     When extended 2nd-order packing is enabled, then KSEC4(12:15)
+C     values determin if extensions are concerned. Extensions are:
+C
+C     - general extended 2nd-order packing, which is the same as WMO
+C      except for documentation of descriptors (held more economically);
+C
+C     - boustrophedonic ordering, which is held outside of the routine
+C       (field re-ordering, swapping values in even rank rows).
+C
+C     - spatial differencing, which is held mostly outside of the
+C       routine (apply general extended 2nd-order compression algorithm,
+C       with or without boustrophedonic ordering, to values obtained
+C       through computation of differences between adjacent values,
+C       repeated to order wished).
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = C2GENE ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,  KNSPT,
+C    X                KBITS,  OCOMGR, OLONLY, KLEN4,  KFIROV, KLEN,
+C    X                KREFGR, KLENGR, KBITGR, KWORK,  KLWORK, KSTART,
+C    X                KPOWER, KMXPWR, KPCWID, KXCWID, KNBIFO, KNCMIN,
+C    X                KMINPK, KLWORX, ODEBUG )
+C
+C
+C     Input Parameters for all options.
+C     --------------------------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C                  KSEC4(12) indicates type of general 2nd-order packing
+C                  (applies only to descriptors): 
+C                   0 => standard WMO descriptors
+C                   8 => extended     descriptors
+C                  KSEC4(13) indicates if boustrophedonic ordering
+C                  (values swapped in rows of even rank) is selected:
+C                   0 => standard        ordering
+C                   4 => boustrophedonic ordering
+C                  KSEC4(14:15) indicates if spatial differencing is on:
+C                   0:0 => no spatial differencing
+C                   0:1,2:0,2:1 => spatial differencing applied at order
+C                                  equal to KSEC4(14)+KSEC4(15)
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     OCOMGR     - True if COMputing of GRoup arrays is requested.
+C     OLONLY     - True if Length ONLY is requested (no coding).
+C     KLEN       - Exact number of grid-points to handle.
+C     KLWORK     - Length of work arrays.
+C     KPOWER     - Auxilary array, precomputed (powers of 2)-1.
+C     KMXPWR     - Maximum number of bits per original scaled value.
+C     KPCWID     - Auxilary array, precomputed widths.
+C     KXCWID     - Maximum width associated to KPCWID.
+C     KNCMIN     - Minimum increment to use when determining groups.
+C     KMINPK     - Initial (minimum) length of groups.
+C     ODEBUG     - True for some debug printout.
+C
+C
+C     Output Parameters for all options.
+C     ---------------------------------
+C
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C                  (updated, except when both OCOMGR is false
+C                   and OLONLY it true)
+C     KLEN4      - Length of section 4.
+C     KLWORX     - Maximum work space used.
+C
+C     Output Parameters when OLONLY is false.
+C     --------------------------------------
+C
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product (updated).
+C     KWORK      - Used as work array by C2PACK.
+C
+C     Output Parameters when OCOMGR is true,
+C      Input Parameters when OCOMGR is false.
+C     --------------------------------------
+C
+C     KREFGR     - Work array, first-order values for each row.
+C     KLENGR     - Work array, effective length of each row.
+C     KBITGR     - Work array, bit number ("width") of each row.
+C     KNBIFO     - Number of BIts for coding First-Order values.
+C
+C     Output Parameters when OCOMGR is true,
+C      Input parameter in all cases.
+C     --------------------------------------
+C
+C     KDATA      - Used as work array by C2PACK.
+C
+C     Input Parameter when OCOMGR is false.
+C     -------------------------------------
+C
+C     KSTART     - First index value of precomputed work arrays KREFGR,
+C                  KLENGR and KBITGR.
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes.
+C
+C     If requested through OCOMGR, a first scan computes work arrays,
+C     bit number for coding first-order values and length of section 4.
+C
+C     If requested, coding is applied in a second scan, using
+C     descriptors computed in the first scan, possibly in a previous
+C     call.
+C
+C     Algorithm used to determine groups is derived from Harry R. Glahn
+C     (U.S. Met Service), from a working paper submitted to WMO SGDR&C
+C     in 1995.
+C
+C     If extended 2nd-order packing is enabled, then call with OCOMGR
+C     to .FALSE. and OLONLY to .TRUE. is enabled, to support aggressive
+C     packing without having to recompute work arrays, which would be
+C     the same for general WMO and extended packings (for the same
+C     option of field ordering: either both boustrophedonic
+C     or both not).
+C
+C     Externals.
+C     ----------
+C
+C     MAXMNI    - Computes extrema of integer array.
+C     C2BITW    - Computes bit width of a positive integer value.
+C     C2PACK    - Encodes descriptors and data.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 
+C               in the GRIB product.
+C     On exit,  KNSPT points to the first unused bit of section 4,
+C               (or to the first bit of section 5, if unused bit count
+C                is zero) in the GRIB product.
+C
+C     KDATA is overwritten when coding is requested.
+C     This is coherent with GRIBEX.
+C
+C     Boustrophedonic ordering, if selected, is formally transparent to
+C     the current routine. Pre-processing is held at calling routine
+C     level (C2ORDR), coding at C2PACK level.
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, April 1998.
+C     Use C2BITW function for bit width computations, out of
+C     the splitting algorithm itself.
+C     Introduce spatial differencing.
+C
+C     J. Clochard, July 1998.
+C     Set KLWORX to KLWORK when out of work space in direct algorithm.
+C
+C     J. Clochard, September 1998.
+C     Update comments.
+C     Adjust KLWORX within splitting algorithm.
+C     Limit index range used in KWORK for "small" initial groups number.
+C     Suppress KSEC1/KSEC2/KSEC3 dummy-arguments.
+C         "    KSEC1, add KWORK/KPOWER/KMXPWR argument in C2PACK call.
+C
+C     J. Clochard, June 1999.
+C     Use precomputed array to determine widths . Dummy-arguments
+C     KPCWID and KXCWID added . Assumption is made that KXCWID
+C     is at least (KMXPWR+1)/2 .
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KLEN4, KNCMIN, KLWORX, KXCWID
+      INTEGER KLEN, KLWORK, KMXPWR, KNBIFO, KFIROV, KMINPK, KSTART
+C
+      INTEGER KDATA (KLENP), KSEC4 (*), KPCWID (0:*)
+      INTEGER KGRIB (KLENG), KREFGR (KLWORK), KLENGR (KLWORK)
+      INTEGER KBITGR (KLWORK), KPOWER (0:KMXPWR), KWORK (KLWORK)
+C
+      LOGICAL OLONLY, OCOMGR, ODEBUG
+C
+C     Local variables.
+C
+      INTEGER IRETFN, ICOUNT, INBIFO, ILDSTA, IDMAX, IDMIN, IXLDST
+      INTEGER IGROUP, ISIZEG, IPOWER, INBITO, ILENSO, IXLEN4, IXGRBD
+      INTEGER IOFF, J, IFIROV, INCMIN, IBITGW, IMAXAB, IMINAB, IMINPK
+      INTEGER IMAXA, IMINA, ISOMAX, INBITA, IMAXC, IMINC, IXBIGW, ILCWID
+      INTEGER IMAXAC, IMINAC, IMAXB, IMINB, ISIZEA, ISIZEB, ISIZEC
+      INTEGER IXFIRO, ISTART, ILWORK, ILEN
+      INTEGER IBITGS, ILENGS, ILDSTG, INDNEW, ILEN4O, IORDER, IWIDSD
+      INTEGER IBIAS
+      INTEGER IAUXIL, IGRADD, ILEN4S, IGROUS, J2, ILASTG, INGRAD, IPOSGR
+C
+      INTEGER C2PACK, C2BITW
+      EXTERNAL C2PACK, C2BITW
+C
+      LOGICAL LB2A
+      LOGICAL LGENXT
+C
+      REAL ZGAIN
+C
+C     Function computing lenth of section 4 (in octets), using as
+C     arguments length of static descriptors, number of 1st-order
+C     values, width of widthes, and length (bits) of descriptors
+C     for groups bounds.
+C
+C     Length must always be an even number of octets.
+C
+      IXLEN4 ( IXLDST, IXFIRO, IXBIGW, IXGRBD ) =       2 * ( (
+     X   IXLDST + (8+IXFIRO*IXBIGW-1)/8 + (8+IXGRBD-1)/8
+     X          + (8+IXFIRO*INBIFO-1)/8 + (8+ILENSO-1)/8
+     X                                                        +1 ) / 2 )
+C
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial checks.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      LGENXT=KSEC4(12).NE.0
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) OCOMGR, OLONLY, KNSPT
+C
+        IF (LGENXT) THEN 
+          WRITE(GRPRSM,FMT=9101) 'general extended'
+        ELSE
+          WRITE(GRPRSM,FMT=9101) 'general WMO standard'
+        ENDIF
+C
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IRETFN = 0
+      ILCWID = KPOWER(KXCWID)+1
+      IORDER=KSEC4(14)+KSEC4(15)
+      ICOUNT=IORDER
+      ILEN=KLEN-IORDER
+      IWIDSD=KSEC4(11)
+      IBIAS=KSEC4(16)
+      ILDSTA=21
+      INBITO=KSEC4(2)
+      KLWORX=0
+C
+      IF (.NOT.OCOMGR) THEN
+C
+        INBIFO=KNBIFO
+        IFIROV=KFIROV
+        KLWORX=KFIROV
+        ISTART=KSTART
+        IBITGW=KSEC4(20)
+C
+        IF (LGENXT) THEN
+          IBITGS=KSEC4(17)
+        ENDIF
+C
+        IF (OLONLY) THEN
+          ILENSO=KSEC4(19)
+          GOTO 260
+        ENDIF
+        GOTO 300
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Computing of group characteristics.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IGROUP=0
+      INCMIN=MIN (MAX (KNCMIN,1),1+ILEN/4)
+      IMINPK=MIN (MAX (KMINPK,2*INCMIN),1+ILEN/2)
+      ISIZEG=IMINPK
+      ISTART=1
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9200) INBITO, (KSEC4(J),J=1,15),
+     X                          INCMIN, ISIZEG
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C
+C     -----------------------------------------------------------------
+C               Determination of an "initial" group, called A.
+C     -----------------------------------------------------------------
+C
+  210 CONTINUE
+C
+      ISIZEA=MIN (ISIZEG,KLEN-ICOUNT)
+C
+C     Extrema computed in-line for better efficiency.
+C
+      IMAXA=KDATA(ICOUNT+1)
+      IMINA=KDATA(ICOUNT+1)
+C
+      DO 211 J=2,ISIZEA
+      IMAXA=MAX (IMAXA,KDATA(ICOUNT+J))
+      IMINA=MIN (IMINA,KDATA(ICOUNT+J))
+  211 CONTINUE
+C
+  212 CONTINUE
+C
+      LB2A=.FALSE.
+      ISOMAX=IMAXA-IMINA
+C
+      IF (ISOMAX.LT.ILCWID) THEN
+        INBITA=KPCWID(ISOMAX)
+      ELSE
+        INBITA=KXCWID+KPCWID(ISOMAX/ILCWID)
+      ENDIF
+C
+      IPOWER=KPOWER(INBITA)
+C
+      IOFF=ICOUNT+ISIZEA
+#ifdef ebug2o
+      PRINT *,'c2gene - ICOUNT/ISIZEA/IMINA/IMAXA/INBITA/IPOWER=',
+     X                  ICOUNT,ISIZEA,IMINA,IMAXA,INBITA,IPOWER
+#endif
+C
+      IF (IOFF.EQ.KLEN) THEN
+C
+C       Just finished. Group A is closed.
+C
+        GOTO 240
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C               Try to add an increment C to initial group A.
+C     -----------------------------------------------------------------
+C
+  220 CONTINUE
+C
+      IF (KLEN-(IOFF+INCMIN).LE.ISIZEG/2) THEN
+C
+C          Avoid too small group at the end.
+C
+        INCMIN=KLEN-IOFF
+      ENDIF
+C
+      IMAXC=KDATA(IOFF+1)
+      IMINC=KDATA(IOFF+1)
+C
+#ifdef CRAY
+CDIR$ NOVECTOR
+#endif
+#ifdef FUJITSU
+!OCL SCALAR
+#endif
+      DO 221 J=2,INCMIN
+      IMAXC=MAX (IMAXC,KDATA(IOFF+J))
+      IMINC=MIN (IMINC,KDATA(IOFF+J))
+  221 CONTINUE
+#ifdef CRAY
+CDIR$ VECTOR
+#endif
+#ifdef FUJITSU
+!OCL VECTOR
+#endif
+C
+      IMAXAC=MAX (IMAXA,IMAXC)
+      IMINAC=MIN (IMINA,IMINC)
+      ISOMAX=IMAXAC-IMINAC
+#ifdef ebug2o
+      PRINT *,'c2gene - IOFF/INCMIN/IMINC/IMAXC/IMINAC/IMAXAC=',
+     X                  IOFF,INCMIN,IMINC,IMAXC,IMINAC,IMAXAC
+#endif
+C
+      IF (ISOMAX.GT.IPOWER) THEN
+C
+C       Added to A, increment C would not fit in same width as A.
+C       Group A is closed.
+C
+        GOTO 240
+C
+      ELSEIF ((IOFF+INCMIN).EQ.KLEN) THEN
+C
+C       Group C is added to group A. Finished.
+C
+        ISIZEA=ISIZEA+INCMIN
+        IMAXA=IMAXAC
+        IMINA=IMINAC
+        GOTO 240
+C
+      ENDIF
+C
+C       Increment C would fit, if added to A.
+C
+C       See width of group B, following group A, with its length
+C       determined in the same way as A.
+C
+      ISIZEB=MIN (ISIZEG,KLEN-IOFF)
+      IMAXB=IMAXC
+      IMINB=IMINC
+C
+      DO 222 J=INCMIN+1,ISIZEB
+      IMAXB=MAX (IMAXB,KDATA(IOFF+J))
+      IMINB=MIN (IMINB,KDATA(IOFF+J))
+  222 CONTINUE
+C
+      ISOMAX=IMAXB-IMINB
+      IMAXAB=MAX (IMAXA,IMAXB)
+      IMINAB=MIN (IMINA,IMINB)
+#ifdef ebug2o
+      PRINT *,'c2gene - IMINB/IMAXB/IMINAB/IMAXAB=',
+     X                  IMINB,IMAXB,IMINAB,IMAXAB
+#endif
+C
+      IF (ISOMAX.LE.IPOWER/2.AND.IPOWER.GT.0) THEN
+C
+C       Group B has a smaller width than A.
+C
+C       Group A is closed, B replaces A, reminds that new initial group
+C       characteristics (with the exception of width) have already been
+C       computed.
+C
+        LB2A=.TRUE.
+        GOTO 240
+C
+      ELSEIF ((IMAXAB-IMINAB).LE.IPOWER) THEN
+C
+C       Group B just fits with A, and is added to A as an extended
+C       C group.
+C
+        ISIZEC=ISIZEB
+        IMAXAC=IMAXAB
+        IMINAC=IMINAB
+C
+      ELSE
+C
+C       Group B has a width at least equal to A, and would not fit
+C       if added to A.
+C
+C       Group C is added to group A, and another C-type group
+C       has to be checked.
+C
+        ISIZEC=INCMIN
+C
+      ENDIF
+C
+C       Incremental group (C or B) added to A.
+C
+      ISIZEA=ISIZEA+ISIZEC
+      IMAXA=IMAXAC
+      IMINA=IMINAC
+      IOFF=IOFF+ISIZEC
+C
+      IF (IOFF.LT.KLEN) THEN
+C
+C       Another C-type group has to be checked...
+C
+        GOTO 220
+C
+      ENDIF
+C
+C       ...otherwise, finished.
+C
+C     -----------------------------------------------------------------
+C     No incremental group may be added. Current A group is closed.
+C     -----------------------------------------------------------------
+C
+  240 CONTINUE
+C
+      IGROUP=IGROUP+1
+      KLENGR(IGROUP)=ISIZEA
+      ICOUNT=ICOUNT+ISIZEA
+      KBITGR(IGROUP)=INBITA
+      ISOMAX=IMAXA-IMINA
+C
+C     Maximum use of width for second-order values: the maximum value
+C     of group will be encoded with the biggest value fitting within
+C     INBITA bits, and keeping reference value positive or zero.
+C
+C     The goal is to get the lowest reference value, thus trying
+C     (desperately) to save bit(s) to encode the first-order values.
+C
+      KREFGR(IGROUP)=MAX (0,IMINA-(IPOWER-ISOMAX))
+#ifdef ebug2o
+      PRINT *,'c2gene - IGROUP/ISIZEA/INBITA/IMINA/IMAXA/refer=',
+     X                  IGROUP,ISIZEA,INBITA,IMINA,IMAXA,KREFGR(IGROUP)
+#endif
+C
+      IF (ICOUNT.EQ.KLEN) THEN
+C
+C       Work finished.
+C
+        GOTO 250
+C
+      ELSEIF (IGROUP.GE.KLWORK) THEN
+C
+C     Out of work space.
+C
+        IRETFN = 21240
+        WRITE(GRPRSM,FMT=9240) KLWORK
+        KLWORX=KLWORK
+        GOTO 900
+C
+      ELSEIF (LB2A) THEN
+C
+C       Transforms B group into A group.
+C
+        ISIZEA=ISIZEB
+        IMAXA=IMAXB
+        IMINA=IMINB
+C
+C       Go back, starting by width computing.
+C
+        GOTO 212
+C
+      ELSE
+C
+C       Another A group must be determined.
+C
+        GOTO 210
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C     Groups have been determined. Computes associated descriptors.
+C     -----------------------------------------------------------------
+C
+  250 CONTINUE
+C
+      KLWORX=IGROUP
+      IFIROV=IGROUP
+C
+C     Number of bits necessary to code first-order values.
+C
+      CALL MAXMNI (KREFGR,IFIROV,IDMAX,IDMIN)
+      INBIFO = C2BITW ( IDMAX,  INBITO, KPOWER, KMXPWR )
+C
+C     Length (bits) of second-order values.
+C
+      ILENSO=0
+C
+      DO 253 J=1,IFIROV
+      ILENSO=ILENSO+KLENGR(J)*KBITGR(J)
+  253 CONTINUE
+C
+C     -----------------------------------------------------------------
+C     Descriptors that are computed even if OCOMGR is false.
+C     -----------------------------------------------------------------
+C
+  260 CONTINUE      
+C
+      IF (LGENXT) THEN
+C
+C       Compute group width (width of widths), that may be here
+C       different than 8.
+C 
+        CALL MAXMNI (KBITGR,IFIROV,ISOMAX,IAUXIL)
+        IBITGW = C2BITW ( ISOMAX, INBITO, KPOWER, KMXPWR )
+C
+C       Compute width of lengths.
+C 
+        CALL MAXMNI (KLENGR,IFIROV,IDMAX,IDMIN)
+        IBITGS = C2BITW ( IDMAX,  KMXPWR, KPOWER, KMXPWR )
+C
+        KSEC4(17)=IBITGS
+C
+        IF (IORDER.EQ.0) THEN
+          ILDSTG=ILDSTA+4
+        ELSE
+          ILDSTG=ILDSTA+5+(8+IWIDSD*(IORDER+1)-1)/8
+        ENDIF
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9260) IAUXIL, ISOMAX, IBITGW, IDMIN, IDMAX,
+     X                            IBITGS
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+      ELSE
+C
+C      Define group width (width of widths).
+C
+        IBITGW=8
+C
+      ENDIF
+C
+      KSEC4(20)=IBITGW
+C
+      IF (OCOMGR) THEN
+C
+        KSEC4(19)=ILENSO
+        KNBIFO=INBIFO
+        KFIROV=IFIROV
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C     Compute full length of section 4 of GRIB.
+C     -----------------------------------------------------------------
+C 
+      IF (LGENXT) THEN
+C
+        ILENGS=IFIROV*IBITGS
+        KLEN4=IXLEN4 ( ILDSTG, IFIROV, IBITGW, ILENGS )
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9270) KLEN4
+          ILEN4O=KLEN4
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+C     -----------------------------------------------------------------
+C        Try to reduce size of lengthes descriptors, splitting groups
+C        that require exactly IBITGS bits for their lengthes.
+C     -----------------------------------------------------------------
+C
+        IAUXIL=MIN (KLWORK/2,IFIROV)
+C
+  270   CONTINUE
+C
+        IGROUP=0
+        IGRADD=0
+        IDMAX=KPOWER(IBITGS-1)+1
+C
+        DO 271 J=1,IFIROV
+C
+        IF (KLENGR(J).GE.IDMAX) THEN
+C
+          IF (IGROUP.GE.IAUXIL) THEN
+C
+C           Out of work space. No (further) splitting performed.
+C
+            KLWORX=MAX (KLWORX,IAUXIL+IGROUP)
+            GOTO 280
+C
+          ELSE
+C
+C           Compute number of sub-groups that would replace current
+C           group, with a length requiring one bit less for encoding.
+C           (2, except when original length=2**IBITGS-1, where 3
+C            sub-groups are necessary)
+C
+C
+            IGROUP=IGROUP+1
+            KWORK(IGROUP)=J
+            KWORK(IAUXIL+IGROUP)=1+(KLENGR(J)+1)/IDMAX
+            IGRADD=IGRADD+KWORK(IAUXIL+IGROUP)
+C  
+          ENDIF
+C
+        ENDIF
+C
+  271   CONTINUE
+C
+        IGRADD=IGRADD-IGROUP
+        IGROUS=IFIROV+IGRADD
+        ILENGS=IGROUS*(IBITGS-1)
+        ILEN4S=IXLEN4 ( ILDSTG, IGROUS, IBITGW, ILENGS )
+        KLWORX=MAX (KLWORX,IAUXIL+IGROUP)
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9271) IFIROV, IGRADD, ILEN4S
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        IF (IGROUS.LE.KLWORK.AND.ILEN4S.LT.KLEN4) THEN
+C
+C         Splitting performed, leading to better compression ratio
+C         with some shorter groups.
+C
+          ILASTG=IFIROV
+C
+          DO 275 J=IGROUP,1,-1
+C
+          IPOSGR=KWORK(J)
+          INGRAD=KWORK(IAUXIL+J)
+C
+C         Push up groups above current group to split.
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+          DO 273 J2=ILASTG,IPOSGR+1,-1
+C
+          KREFGR(J2+IGRADD)=KREFGR(J2)
+          KBITGR(J2+IGRADD)=KBITGR(J2)
+          KLENGR(J2+IGRADD)=KLENGR(J2)
+C
+  273     CONTINUE
+C
+#ifdef ebug2o
+          PRINT *,'c2gene - after loop 273: ',IPOSGR+1+IGRADD
+#endif
+C
+C         Split current group.
+C
+#ifdef CRAY
+CDIR$ NOVECTOR
+#endif
+#ifdef FUJITSU
+!OCL SCALAR
+#endif
+          DO 274 J2=INGRAD,1,-1
+C
+          INDNEW=J2-INGRAD+IGRADD+IPOSGR
+#ifdef ebug2o
+          PRINT *,INDNEW
+#endif
+          KREFGR(INDNEW)=KREFGR(IPOSGR)
+          KBITGR(INDNEW)=KBITGR(IPOSGR)
+          KLENGR(INDNEW)=(KLENGR(IPOSGR)+INGRAD-J2)/INGRAD
+C
+  274     CONTINUE
+#ifdef CRAY
+CDIR$ VECTOR
+#endif
+#ifdef FUJITSU
+!OCL VECTOR
+#endif
+C
+#ifdef ebug2o
+          PRINT *,'c2gene - J/IPOSGR/INGRAD/ILASTG/IGRADD/len=',
+     X             J, IPOSGR, INGRAD, ILASTG, IGRADD,
+     X        (KLENGR(J2-INGRAD+IGRADD+IPOSGR),J2=1,INGRAD)
+#endif
+C
+          IGRADD=IGRADD-(INGRAD-1)
+          ILASTG=IPOSGR-1
+C
+  275     CONTINUE
+C
+#ifndef ebug2o
+          IF (ODEBUG) THEN
+#endif
+            WRITE(GRPRSM,FMT=9272) IGROUS, IBITGS-1
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+C
+C         Update descriptors.
+C
+          IBITGS=IBITGS-1
+          IFIROV=IGROUS
+          KLWORX=MAX (KLWORX,IGROUS)
+          KSEC4(17)=IBITGS
+          KFIROV=IFIROV
+          KLEN4=ILEN4S
+C
+C         Loop back to try another splitting.
+C
+          GOTO 270
+C
+        ELSEIF (KLEN4.NE.ILEN4O) THEN
+C
+#ifndef ebug2o
+          IF (ODEBUG) THEN
+#endif
+            ZGAIN=REAL (100*(ILEN4O-KLEN4)) / REAL (ILEN4O)
+            WRITE(GRPRSM,FMT=9273) ZGAIN
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+        ENDIF
+C
+      ELSE
+C
+        KLEN4=IXLEN4 ( ILDSTA, IFIROV, IBITGW, KLEN )
+C
+      ENDIF
+C
+  280 CONTINUE
+C
+      IF (OLONLY) THEN
+C
+C       Length has been computed, go back without any coding.
+C
+        GOTO 900
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3. Definition of fixed-length descriptors, and coding.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     The first 10 octets have already been coded in GRIBEX, or will
+C     be in a further step of GRIBEX:
+C     Length of section, flags+unused bit count, binary scale factor,
+C     reference value.
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9300) 
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C     Enforce right values for extended flags.
+C
+      IF (LGENXT) THEN
+        KSEC4( 9)=0
+        KSEC4(12)=8
+      ELSE
+        KSEC4( 9)=32
+        KSEC4(12)=0
+      ENDIF      
+C
+      KSEC4(10)=16
+C
+C     Extra descriptors.
+C
+      KSEC4(18)=KFIROV
+      KSEC4(20)=IBITGW
+      ILWORK=KLWORK-ISTART+1
+C
+      IRETFN = C2PACK ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,  KNSPT,
+     X                  KBITS,  KLEN,   KREFGR(ISTART), KLENGR(ISTART),
+     X                  KBITGR(ISTART), KWORK, ILWORK,  KPOWER, KMXPWR,
+     X                  KNBIFO, ODEBUG )
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      C2GENE = IRETFN
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, OCOMGR, OLONLY, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' C2GENE: Function start, OCOMGR = ',L1,
+     X        ', OLONLY = ',L1,', KNSPT =',I10,'.')
+ 9101 FORMAT (' C2GENE: Type of 2nd order packing requested: ',A,'.')
+C
+ 9200 FORMAT (' C2GENE: Computing work arrays, INBITO =',I3,'.',/,
+     X        ' C2GENE: KSEC4(1:15)=',I9,I3,I4,3I3,I2,4I3,4I2,'.',/,
+     X        ' C2GENE: INCMIN =',I3,', ISIZEG =',I6,'.')
+C
+ 9240 FORMAT (' C2GENE: Groups number exceeds work space (',I8,') .')
+C
+ 9260 FORMAT (' C2GENE: Min, Max, Width of widths/lengths =',2(I3,','),
+     X        I2,' /',2(I8,','),I3,'.')
+C
+ 9270 FORMAT (' C2GENE: Length of section 4 for general extended case:'
+     X        ,I9,'.')
+ 9271 FORMAT (' C2GENE: Group splitting test, from',I8,' groups',SP,
+     X        I7,SS,', s4 length',I9,'.')
+ 9272 FORMAT (' C2GENE: Group splitting performed,',I8,
+     X        ' groups, new width of lengths =',I3,'.')
+ 9273 FORMAT (' C2GENE: Relative gain of group splitting on section 4 ',
+     X        'length:',F5.1,' %.')
+C
+ 9300 FORMAT (' C2GENE: Coding phase - calling C2PACK.')
+C
+ 9900 FORMAT (' C2GENE: Function return code=',I6,
+     X        ', OCOMGR/OLONLY/KNSPT=',2L1,I10,'.')
+C
+      END
diff --git a/gribex/c2ordr.F b/gribex/c2ordr.F
new file mode 100755
index 0000000..b354b12
--- /dev/null
+++ b/gribex/c2ordr.F
@@ -0,0 +1,1527 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       INTEGER FUNCTION C2ORDR ( KDATA, KLENP, KSEC1, KSEC2, KSEC3, 
+     X                          KSEC4, KGRIB, KLENG, KNSPT, KBITS,
+     X                          HOPER, KBMAP, KVALS, PREF,  PMAX,
+     X                          KLEN,  KDEBUG )
+C
+C---->
+C**** C2ORDR
+C
+C     Purpose.
+C     --------
+C
+C     Encode GRIB section 4 for complex packing of grid-point
+C     values ("second-order packing").
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = C2ORDR ( KDATA, KLENP, KSEC1, KSEC2, KSEC3, KSEC4,
+C    X                KGRIB, KLENG, KNSPT, KBITS, HOPER, KBMAP,
+C    X                KVALS, PREF,  PMAX , KLEN,  KDEBUG )
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC1      - Array of GRIB section 1 integer descriptors.
+C     KSEC2      - Array of GRIB section 2 integer descriptors.
+C     KSEC3      - Array of GRIB section 3 integer descriptors.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     HOPER      - Requested function:
+C                  'C' for coding, following input descriptors,
+C                  'K' for "aggressive pacKing" (choose a solution
+C                  that leads to minimum size).
+C     KBMAP      - Bit pointer for start of explicit primary bit-map
+C                  (if any).
+C     KVALS      - Number of bits in primary bit-map.
+C     PREF       - Reference of field.
+C     PMAX       - Maximum value of field.
+C     KLEN       - Exact number of points to handle.
+C     KDEBUG     - >0 for some debug printout.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KDATA      - Used (indirectly) as work array.
+C     KSEC4      - Array of GRIB section 4 integer descriptors
+C                  (updated).
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product
+C                  (updated).
+C
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes, and also CSECT4 structure.
+C
+C
+C     If ordinary packing is requested (HOPER='C'), then the relevant
+C     method described through KSEC4 descriptors is applied:
+C
+C     1) Row by row: KSEC4(9)=0, KSEC4(10)=16 and KSEC4(12)=0;
+C
+C     2) Constant width: KSEC4(9)=32, KSEC4(10)=0, KSEC4(12)=0,
+C        width in KSEC4(11) -see "Comments" paragraph below, at the end.
+C
+C     3) General WMO 2nd-order: KSEC4(9)=32, KSEC4(10)=16, KSEC4(12)=0.
+C
+C     4) General extended  "  : KSEC4(9)=32, KSEC4(10)=16, KSEC4(12)=8.
+C
+C     For constant width and general methods, boustrophedonic ordering
+C     is requested by KSEC4(13)=4, provided extensions have been
+C     alllowed (disabled by default), and is explicitly inhibited
+C     by KSEC4(13)=0.
+C     Boustrophedonic ordering has no interest for row by row packing.
+C     If explicitly requested a warning message is issued and option
+C     set to off.
+C
+C     For the general extended method, a spatial differencing may be
+C     requested through KSEC4(14) and/or KSEC4(15) different from zero:
+C
+C     -explicitly: KSEC4(14)=0 or 2, KSEC4(15)=0 or 1, order being then
+C                  IORDER=KSEC4(14)+KSEC4(15) ;
+C
+C     -implicitly: KSEC4(14)=-1 and/or KSEC4(15)=-1; in such a case
+C                  a diagnostic is performed to estimate which order
+C                  should lead to minimaum size.
+C
+C
+C     If aggressive packing (HOPER='K') is selected:
+C
+C     1) in a first scan, all allowed sub-functions (see Comments
+C        below) are called to compute the length of section 4 they
+C        would give, but no coding occurs;
+C
+C     2) in a second phase the most efficient method is applied.
+C
+C        If no "complex" method is efficient -or applicable-, then a
+C        simple packing is performed.
+C
+C        If the field is constant, a simple packing  with 0 as number
+C        of bits (and no data) is applied, without having to perform
+C        the steps mentioned above.
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT    - Insert bits into GRIB product.
+C     CONFP3    - Convert to IBM floating point format.
+C
+C     C2ROWS    - Row by row packing.
+C     C2CWID    - Constant width packing.
+C     C2GENE    - General WMO second-order packing.
+C                + general extended second-order packing.
+C     REVERO    - Reverse order of even rank rows.
+C     C2DOSD    - Diagnose/compute order of spatial differencing.
+C     D2ROSD    - Rebuild original values from spatial differencing.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 
+C               in the GRIB product.
+C     On exit,  KNSPT points to the first unused bit of section 4,
+C               (or to the first bit of section 5, if unused bit count
+C                is zero) in the GRIB product.
+C
+C     KDATA is overwritten. This is coherent with GRIBEX coding.
+C
+C     When aggressive packing is selected (HOPER='K') :
+C
+C     1) If exhaustive second-order packing is on, then all possible
+C        methods are attempted; note this may lead to expensive CPU
+C        cost. Constant width packing will use iterative search of
+C        optimal width, starting from (KSEC4(2)-1), regardless of
+C        KSEC4(11) value.
+C
+C        Notes:
+C
+C        -if extensions switch is not set (disabled by default), then
+C         none of the extensions on methods will be promoted;
+C
+C        -if extensions switch is on, boustrophedonic ordering is then
+C         used in conjunction with relevant methods (all 2nd-order but
+C         row by row), provided there is a section 2 and no implicit
+C         primary bit-map;
+C
+C        -if both extensions and non-local switches are on (both are
+C         disabled by default), estimation of best order of spatial
+C         differencing is activated for general extended packing.
+C
+C     2) If exhaustive second-order packing is off (default), then
+C        only explicitly requested methods are tried. More precisely:
+C
+C        -row by row packing (cheapest method, but least effective)
+C         is always attempted, except without a section 2
+C         or with an implicit primary bit-map;
+C
+C        -constant width packing is attempted if KSEC4(10)=0 in input;
+C         (with iterative search of optimal width only if KSEC4(11) is
+C          negative, using -KSEC4(11) as initial and maximum width)
+C
+C        -general 2nd-order packing is attempted if KSEC4(9)=32 in
+C         input, or if there is no section 2 or in case of an implicit
+C         primary bit-map.
+C
+C        -general extended second-order packing is attempted if
+C         extensions switch has been set and KSEC4(12)=8 in input.
+C
+C        Boustrophedonic ordering is attempted if extensions switch
+C        has been set and if KSEC4(13)=4 in input,
+C        systematically in conjunction with relevant selected
+C        method(s), and provided there is a section 2.
+C
+C        Spatial differencing is activated for general extended method
+C        if this last method is selected (see above), if non-local
+C        switch has been set, and if KSEC4(14) and/or KSEC4(15) is not
+C        null. Tuning of order is as described earlier for HOPER='C'.
+C
+C     Iterative method used in C2CWID to find an optimal width (that
+C     minimise length of section 4) may also be used with HOPER='C',
+C     using a negative value for KSEC4(11) in input; -KSEC4(11) is then
+C     used as initial and maximum width.
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, April 1998.
+C     Update comments.
+C     For constant width packing, interpret KSEC4(11) negative as
+C     request for optimal width search, starting from -KSEC4(11) .
+C     When both aggressive mode (HOPER='K') is requested and exhaustive
+C     use of 2nd-order packing methods is set, initial width is set to
+C     (KSEC4(2)-1) .
+C     Fix double computing of work arrays for General WMO 2nd-order,
+C     when General extended method is not requested.
+C     Introduce spatial differencing.
+C     Simplify management of boustrophedonic ordering.
+C
+C     J. Clochard, August 1998.
+C     Raise JPMXGR from 131071 to 220000 to enable proper processing
+C     of satellite images for general method.
+C     (i.e. METEOSAT full-disk products, 2500x2500)
+C
+C     J. Clochard, September 1998.
+C     Suppress KSEC1/KSEC2/KSEC3 arguments in C2CWID/C2GENE calls.
+C     Suppress KSEC1/KSEC3 arguments in C2ROWS call.
+C     Fix definition of LGENXT to be able to select both general methods
+C     in non-exhaustive use of 2nd-order methods.
+C     Fix to enforce re-computation of work arrays when general extended
+C     method is not worth and spatial differencing is used.
+C     Inhibit boustrophedonic ordering also for aggressive packing,
+C     when there is no section 2 and/or an implicit bit-map.
+C     If dynamical estimation of spatial differencing leads to greater
+C     message length than general WMO 2nd-order, retry general exten-
+C     ded method without spatial differencing.
+C     Adjustment of granularity parameters for general methods and small
+C     grids.
+C
+C     J. Clochard, June 1999.
+C     Simple packing method always available as backup, even in explicit
+C     encoding cases (HOPER='C') . 
+C     Use precomputed array to determine widths . Arguments IPCWID and
+C     JPXWID added in C2GENE/C2DOSD/C2ROWS calls .
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET, JPMXGR, JPXPWR, JPMXGF, JPMETH, JPVSE4, JPWORK
+      INTEGER JPORDR, JPXWID, JPCWID
+C
+C     Number of possible packing methods.
+C
+      PARAMETER ( JPMETH=4, JPORDR=3 )
+      PARAMETER ( JP16SET= 2**16-1 )
+C                            `---> 65535    =   FFFF(hex)
+#ifdef JBPW_64
+      PARAMETER ( JPMXGR= 220000, JPXPWR=47, JPVSE4=20 )
+#else
+      PARAMETER ( JPMXGR= 220000, JPXPWR=31, JPVSE4=20 )
+#endif
+      PARAMETER ( JPXWID=(JPXPWR+1)/2 )
+      PARAMETER ( JPCWID=2**JPXWID )
+C
+C     Size of work array. Must be at least JPMXGF*4 .
+C
+      PARAMETER ( JPWORK=JPMXGR*4 )
+#ifndef wmogrp2o
+      PARAMETER ( JPMXGF= JPMXGR )
+#else
+C
+C     Limit maximum number of groups/first-order values to WMO
+C     standard upper limit (descriptor is 16-bit wide).
+C
+      PARAMETER ( JPMXGF=
+     X          ( JPMXGR*(JP16SET/JPMXGR) + JP16SET*(JPMXGR/JP16SET) )
+     X           /     ( (JP16SET/JPMXGR) + (JPMXGR/JP16SET) )       )
+#endif
+C
+C     Subroutine arguments.
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KBMAP, KVALS, KLEN, KDEBUG
+      INTEGER KDATA (KLENP), KSEC1 (*), KSEC2 (*), KSEC3 (*), KSEC4 (*)
+      INTEGER KGRIB (KLENG)
+C
+      CHARACTER HOPER * (*)
+C
+      REAL PREF, PMAX
+C
+C     Global variables.
+C
+#include "grbcom.h"
+C
+C     Local variables.
+C
+      INTEGER IRET, INROWS, J, IROWMK, INSPTA, ILOWMK, IHIGMK, IRETFN
+      INTEGER ILSIMP, IL4OPT, ILMETH, IZERO, ICWORK, IROWBF, ICWIMK, J2
+      INTEGER ICWIBF, ICWIFO, IHWM, INCMIN, IOFF, IROWL4, ICWIL4
+      INTEGER IGENMK, IGENBF, IGENFO, IGENL4, IMINPK, IMETHO, JMETHO
+      INTEGER IMTROW, IMTCWI, IMTGEN, IMTMIN, IMTMAX, ILREFR
+C
+      INTEGER IWORK (JPWORK), IPOWER (0:JPXPWR), ISEC4 (JPVSE4,JPMETH)
+      INTEGER IPCWID (0:JPCWID-1)
+C
+      INTEGER C2ROWS, C2CWID, C2GENE
+      EXTERNAL C2ROWS, C2CWID, C2GENE
+C
+      CHARACTER YOPER*1, YMETHO*30, YREFER*30
+C
+      LOGICAL LROW, LQUASI, LCTWID, LSECBI, LPRIBI, LAGGPK, LSIMPK
+      LOGICAL L1CALL, LSECT2, LLONLY, LCOMGR, LFIRST, LGEN2O, LDEBUG
+      LOGICAL LOPTLN, LGPREC
+      LOGICAL LGENXT, LBOUST, LREVER, LPRCLN, LNLOCP, LNLOCF, LDYNOR
+      LOGICAL LCOMSD, LCBIAS, LVECTD
+C
+      INTEGER IWIDSD, INDCLN, IGXTMK, IGXTBF, IGXTFO, IGXTL4, IBOUST
+      INTEGER IMTGXT, IORDER, ILWORX, IBIAS, IXBITS
+C
+      INTEGER REVERO, C2DOSD, D2ROSD
+      EXTERNAL REVERO, C2DOSD, D2ROSD
+C
+      INTRINSIC ABS
+C
+      REAL ZGAIN
+C
+      SAVE L1CALL, IPOWER, IMTROW, IMTCWI, IMTGEN, IPCWID
+      SAVE IMTGXT
+C
+C     Function used to adress 4 sub-parts of array IWORK, using
+C     first and last argument to specify sub-part.
+C     (4 work arrays are joined together to enable use of a single big
+C      work array)
+C
+      INTEGER IXIND, IABCDE, IFGHIJ, IKLMNO
+C
+      IXIND ( IABCDE, IFGHIJ, IKLMNO ) =
+C
+     X        IFGHIJ + JPMXGF * ( IKLMNO - 1 + 2 * ( IABCDE - 1 ) )
+C
+      DATA L1CALL / .TRUE. /
+      DATA IMTROW / 1 /
+      DATA IMTCWI / 2 /
+      DATA IMTGEN / 3 /
+      DATA IMTGXT / 4 /
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial checks.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (L1CALL) THEN
+C
+        DO 111 J=0,JPXPWR-1
+C
+          IPOWER(J)=2**J-1
+C
+  111   CONTINUE
+#ifdef JBPW_64
+        IPOWER(JPXPWR)=140737488355327
+#else
+        IPOWER(JPXPWR)=2147483647
+#endif
+C
+        IPCWID(0)=0
+        IOFF=1
+C
+        DO 113 J=1,JPXWID
+C
+          DO 112 J2=0,IPOWER(J-1)
+C
+            IPCWID(IOFF+J2)=J
+C
+  112     CONTINUE
+C
+          IOFF=IOFF+IPOWER(J-1)+1
+C
+  113   CONTINUE
+C
+        L1CALL=.FALSE.
+C
+      ENDIF
+C
+      IRETFN = 0
+      IMETHO=0
+      INSPTA=KNSPT
+      LAGGPK=HOPER.EQ.'K'
+      ILSIMP=11+(1+(KLEN*KSEC4(2)-1)/8)
+      ILSIMP=2*(1+(ILSIMP-1)/2)
+      IL4OPT=ILSIMP
+      LSIMPK=LAGGPK
+      LDEBUG=KDEBUG.GE.1
+      IMINPK=MIN ( 15, MAX ( 2, NINT ( SQRT ( REAL (KLEN/3) ) ) ) )
+C     IMINPK=12
+      INCMIN=MIN (  3, 1 + KLEN/1000 )
+C     INCMIN=1
+C
+      LSECT2=KSEC1(5).GE.128
+      LPRIBI=MOD (KSEC1(5),128).GE.64
+#ifndef ebug2o
+C
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) HOPER(:1), KNSPT, KSEC4(2), LSECT2,
+     X                          LPRIBI
+        YREFER='simple packing'
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      LSECBI=KSEC4(9).NE.0
+      LROW=.NOT.LSECBI.AND.KSEC4(12).EQ.0
+      LGENXT=(.NOT.LSECBI.OR.LAGGPK).AND.KSEC4(12).NE.0
+      LBOUST=KSEC4(13).NE.0
+      IORDER=IABS (KSEC4(14))+IABS (KSEC4(15))
+      LNLOCP=IORDER.NE.0
+      LREVER=.FALSE.
+      LGPREC=.FALSE.
+#if (defined CRAY) || (defined FUJITSU)
+      LVECTD=.TRUE.
+#else
+      LVECTD=.FALSE.
+#endif
+      LQUASI=KSEC2(17).EQ.1
+      LCTWID=KSEC4(10).EQ.0
+      LGEN2O=LSECBI.AND.(.NOT.LCTWID.OR.LAGGPK)
+C
+      IF (KSEC4(8).NE.0) THEN
+        IRETFN = 18110
+        WRITE(GRPRSM,FMT=9110)
+        GO TO 900
+      ELSEIF (LROW.OR.LAGGPK) THEN
+C
+        IF (.NOT.LSECT2) THEN
+C
+          IF (LAGGPK) THEN
+            LROW=.FALSE.
+            LGEN2O=.TRUE.
+          ELSE
+            IRETFN = 18120
+            WRITE(GRPRSM,FMT=9120) 'Row by row packing'
+            GO TO 900
+          ENDIF
+C
+        ELSEIF (LPRIBI.AND.KSEC3(1).NE.0) THEN
+C
+          IF (LAGGPK) THEN
+            LROW=.FALSE.
+            LGEN2O=.TRUE.
+          ELSE
+            IRETFN = 18130
+            WRITE(GRPRSM,FMT=9130)
+     S       'Row by row', 'implicit primary bit-map'
+            GO TO 900
+          ENDIF
+C
+        ELSE
+C
+          LROW=LROW.OR.LAGGPK
+C
+        ENDIF
+C
+      ENDIF
+C
+      IF (LCTWID) THEN
+C
+        IF (LROW.AND..NOT.LAGGPK) THEN
+          IRETFN = 18135
+          WRITE(GRPRSM,FMT=9130)
+     S       'Row by row', 'constant width'
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      LCTWID=LCTWID.OR.(LAGGPK.AND.NUM2OK.EQ.1)
+      LGEN2O=LGEN2O.OR.(LAGGPK.AND.NUM2OK.EQ.1)
+C
+      IF (KSEC4(12).NE.0.AND.NEXT2O.EQ.1.AND..NOT.LAGGPK) THEN
+C
+C            General extended second-order packing explicitly requested.
+C
+        IF (KSEC4(12).NE.8) THEN
+          IRETFN = 18140
+          WRITE(GRPRSM,FMT=9140) 12, 8
+          GO TO 900
+        ELSEIF (LSECBI) THEN
+          IRETFN = 18145
+          WRITE(GRPRSM,FMT=9150) 'no secondary bit-map'
+          GO TO 900
+        ELSEIF (LCTWID) THEN
+          IRETFN = 18150
+          WRITE(GRPRSM,FMT=9150) 'variable group widthes'
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      LGENXT=NEXT2O.EQ.1.AND.(LGENXT.OR.(LAGGPK.AND.NUM2OK.EQ.1))
+C
+      IF (KSEC4(13).NE.0.AND.NEXT2O.EQ.1.AND..NOT.LAGGPK) THEN
+C
+C               Boustrophedonic ordering explicitly requested.
+C
+        IF (KSEC4(13).NE.4) THEN
+          IRETFN = 18151
+          WRITE(GRPRSM,FMT=9140) 13, 4
+          GO TO 900
+        ELSEIF (.NOT.LSECT2) THEN
+          IRETFN = 18152
+          WRITE(GRPRSM,FMT=9120) 'Boustrophedonic ordering'
+          GO TO 900
+        ELSEIF (LROW) THEN
+          WRITE(GRPRSM,FMT=9153)
+          KSEC4(13)=0
+          LBOUST=.FALSE.
+        ELSEIF (LPRIBI.AND.KSEC3(1).NE.0) THEN
+          IRETFN = 18154
+          WRITE(GRPRSM,FMT=9130)
+     S       'Boustrophedonic ordering', 'implicit primary bit-map'
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      LBOUST=NEXT2O.EQ.1.AND.(LBOUST.OR.(LAGGPK.AND.NUM2OK.EQ.1)).AND.
+     S   LSECT2.AND.(.NOT.LPRIBI.OR.KSEC3(1).EQ.0)
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+#endif
+        PRINT *,'C2ORDR: LBOUST/LNLOCP/LAGGPK=',
+     S                 LBOUST, LNLOCP, LAGGPK
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      IF (LNLOCP.AND.NEXT2O.EQ.1.AND.NLOC2O.EQ.1.AND..NOT.LAGGPK) THEN
+C
+C               Spatial differencing explicitly requested.
+C
+        IF (KSEC4(14).NE.2.AND.KSEC4(14).NE.0.AND.KSEC4(14).NE.-1) THEN
+          IRETFN = 18154
+          WRITE(GRPRSM,FMT=9155) 14, 2
+          GO TO 900
+        ELSEIF (ABS (KSEC4(15)).NE.1.AND.KSEC4(15).NE.0) THEN
+          IRETFN = 18155
+          WRITE(GRPRSM,FMT=9155) 15, 1
+          GO TO 900
+        ELSEIF (.NOT.LGENXT) THEN
+          WRITE(GRPRSM,FMT=9156)
+          KSEC4(14)=0
+          KSEC4(15)=0
+          IORDER=0
+          LNLOCP=.FALSE.
+        ENDIF
+C
+      ENDIF
+C
+      LNLOCF=NEXT2O.EQ.1.AND.NLOC2O.EQ.1.AND.
+     S      (LNLOCP.OR.(LGENXT.AND.LAGGPK.AND.NUM2OK.EQ.1))
+C
+      IF (LNLOCF.AND..NOT.LNLOCP) THEN
+C
+C       Spatial differencing implicitly requested.
+C       Activation of iterative search for best order.
+C
+        KSEC4(14)=-1
+        KSEC4(15)=-1
+      ENDIF
+C
+      LNLOCP=LNLOCF
+C
+      IF (.NOT.LNLOCP) THEN
+        IORDER=0
+      ENDIF
+C
+      IF (KSEC4(2).GT.JPXPWR) THEN
+C
+        IRETFN = 18160
+        WRITE(GRPRSM,FMT=9160) KSEC4(2), JPXPWR
+        GO TO 900
+C
+      ELSEIF (LCTWID) THEN
+C
+        IF (ABS (KSEC4(11)).GE.KSEC4(2)) THEN
+C
+          IF (LAGGPK) THEN
+            KSEC4(11)=-(KSEC4(2)-1)
+          ELSE
+            IRETFN = 18170
+            WRITE(GRPRSM,FMT=9170) KSEC4(11), KSEC4(2)-1
+            GO TO 900
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+      IF (PMAX.LE.PREF.AND.LAGGPK) THEN
+C
+C       Field is constant... code it with zero as bit-number,
+C                            and nothing else!              
+C
+C     Enforce right values for flags.
+C
+        KSEC4(4)=0
+        KSEC4(6)=0
+C
+C*    Octet 11 : Number of bits containing each first-order value.
+C     One 8 bit field.
+C
+#ifndef ebug2o
+        IF (LDEBUG) THEN
+C
+#endif
+          WRITE(GRPRSM,FMT=9175) PMAX
+          IL4OPT=12
+          YREFER='direct method'
+C
+C              Switch off LSIMPK to enable printout of gain.
+C
+          LSIMPK=.FALSE.
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        IZERO=0        
+        YOPER='C'
+        KNSPT=KNSPT+10*8
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS, 8,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 18180
+          WRITE(GRPRSM,FMT=9001) 'bit number'
+        ENDIF
+C
+        GO TO 900
+C
+      ENDIF
+C
+      IF (LSECT2) THEN
+C
+        IF (MOD (KSEC2(11),64).LT.32) THEN
+          INROWS=KSEC2(3)
+        ELSE
+          INROWS=KSEC2(2)
+        ENDIF
+C
+#ifndef ebug2o
+        IF (LDEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9180) INROWS, KLEN, LQUASI
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        IF (.NOT.LPRIBI.AND.KLEN.NE.KSEC4(1)) THEN
+          IRETFN = 18185
+          WRITE(GRPRSM,FMT=9185) KLEN, KSEC4(1)
+          GO TO 900
+        ELSEIF (LPRIBI.AND.(KLEN.LE.0.OR.KLEN.GT.KSEC4(1))) THEN
+          IRETFN = 18187
+          WRITE(GRPRSM,FMT=9187) KLEN, KSEC4(1)
+          GO TO 900
+        ELSEIF (LROW.AND.INROWS.GT.JPMXGF) THEN
+C
+          IF (LAGGPK) THEN
+            LROW=.FALSE.
+          ELSE
+            IRETFN = 18190
+            WRITE(GRPRSM,FMT=9190) INROWS, JPMXGF
+            GO TO 900
+          ENDIF
+#ifndef wmogrp2o
+C
+        ELSEIF (LPRIBI.AND.KSEC3(1).NE.0.AND.KLEN.GT.JP16SET) THEN
+C
+C     Such a case would lead to no possibility to recover the right
+C     number of grid points when decoding through D2ORDR routine.
+C
+          IRETFN = 18192
+          WRITE(GRPRSM,FMT=9192) JP16SET
+          GO TO 900
+#endif
+C
+        ENDIF
+C
+      ENDIF
+C
+      IF (.NOT.(LROW.OR.LCTWID.OR.LGEN2O.OR.LGENXT.OR.LSIMPK)) THEN
+        WRITE(GRPRSM,FMT=9195)
+        LSIMPK=.TRUE.
+        GO TO 600
+      ENDIF
+C
+      LLONLY=LAGGPK
+      ILOWMK=JPMXGF+1
+      IHIGMK=0
+      IROWMK=0
+      ICWIMK=1
+      IGENMK=1
+      IGXTMK=1
+      LFIRST=.TRUE.
+
+C          Copy KSEC4 for all possible methods. 
+C
+      IF (LROW) THEN
+        IMTMIN=IMTROW
+        IMTMAX=IMTROW
+      ELSE
+        IMTMIN=JPMETH
+        IMTMAX=1
+      ENDIF
+C
+      IF (LCTWID) THEN
+        IMTMIN=MIN (IMTCWI,IMTMIN)
+        IMTMAX=MAX (IMTCWI,IMTMAX)
+      ENDIF
+C
+      IF (LGEN2O) THEN
+        IMTMIN=MIN (IMTGEN,IMTMIN)
+        IMTMAX=MAX (IMTGEN,IMTMAX)
+      ENDIF
+C
+      IF (LGENXT) THEN
+        IMTMIN=MIN (IMTGXT,IMTMIN)
+        IMTMAX=MAX (IMTGXT,IMTMAX)
+      ENDIF
+C
+      DO 122 JMETHO=IMTMIN,IMTMAX
+C
+      DO 121 J=1,JPVSE4
+      ISEC4(J,JMETHO)=KSEC4(J)
+  121 CONTINUE
+C
+  122 CONTINUE
+C
+      IF (LBOUST.AND.IMTMIN.EQ.IMTROW.AND.IMTMAX.EQ.IMTROW) THEN
+C
+C         This might be the case in aggressive packing mode.
+C
+        WRITE(GRPRSM,FMT=9153)
+        KSEC4(13)=0
+        LBOUST=.FALSE.
+      ENDIF
+C
+      IF (LBOUST) THEN
+C
+        IBOUST=4
+C
+C         Reverse field ordering for even rank rows.
+C
+C         This is done before trying any method or sub-method,
+C         for better prognosis of non-local packing interest
+C         (if requested). It allows also more simple source code.
+C
+C         There is no influence on trial of row by row packing,
+C         because work arrays computed through C2ROWS with LLONLY set
+C         to .TRUE. do not depend on field ordering within each row.
+C
+C         The only case where field ordering might have to be restored
+C         would be in aggressive packing mode, if either row by row
+C         or simple packing was found more efficient than all the other
+C         2nd-order methods selected/allowed... Probability of such a
+C         case is low, but source code enables it.
+C
+C         Apart from that, the only side effect of this anticipated call
+C         to REVERO is, when row by row packing is enabled
+C         (as in exhaustive mode), to compute twice the lengths of rows.
+C         This is considered as a cheap overhead.
+C
+        LPRCLN=.FALSE.
+C
+        IRETFN = REVERO ( KDATA,  KLENP,  KSEC2,  KGRIB,  KLENG,
+     X                    KBITS,  KBMAP,  KVALS,  LPRIBI, LQUASI,
+     X                    INROWS, KLEN,   IWORK(IXIND (2,1,2)),
+     X                    JPMXGF, LDEBUG, LPRCLN, IWORK(IXIND (2,1,1)) )
+C
+        IF (IRETFN.NE.0) THEN
+          GO TO 900
+        ENDIF
+C
+        LREVER=.TRUE.
+C
+      ELSE
+C
+        IBOUST=0
+C
+      ENDIF
+C
+      DO 123 JMETHO=IMTMIN,IMTMAX
+      ISEC4(13,JMETHO)=IBOUST
+  123 CONTINUE
+C
+      LDYNOR=LNLOCP.AND.(KSEC4(14).EQ.-1.OR.KSEC4(15).EQ.-1)
+C
+      IF (LDYNOR) THEN
+C
+C         Estimate interest of non-local packing use, and order
+C         associated to.
+C
+C         In non-agressive mode (HOPER='C'), field is also transformed.
+C
+        LCOMSD=.NOT.LAGGPK
+        LCBIAS=.TRUE.
+        IORDER = C2DOSD ( KDATA,  KLENP,  KSEC4,  LCOMSD, KLEN,
+     X                    IWORK,  JPWORK, IPOWER, JPXPWR, IPCWID,
+     X                    JPXWID, IMINPK, ILWORX, IBIAS,  IWIDSD,
+     X                    IXBITS, LCBIAS, LDEBUG )
+        LCBIAS=.FALSE.    
+C
+      ELSE
+C
+        LCOMSD=.FALSE.
+        LCBIAS=.TRUE.
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Row by row packing method applied, or tried.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9200) LROW, LCTWID, LGEN2O, LGENXT, LBOUST,
+     X                          IORDER, LSIMPK
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      IF (LROW) THEN
+C
+C       Upper part of work sub-arrays IWORK(IXIND (1,.,1)),
+C       IWORK(IXIND (2,.,1)), IWORK(IXIND (1,.,2))
+C       -reference values, effective row lengths, row widths- is used;
+C       useful for aggressive packing, if row by row packing turns
+C       to be selected as the appropriate method to apply, and if total
+C       work space needed by the other methods do not overlap.
+C
+        IMETHO=IMTROW
+        IROWMK=JPMXGF-INROWS+1
+        ILOWMK=IROWMK
+        LCOMGR=LFIRST.OR.IROWMK.LE.IHIGMK
+C
+        IF (LREVER.AND..NOT.LFIRST) THEN
+C
+C         Restore initial field ordering.
+C
+          LPRCLN=.NOT.LCOMGR
+C
+          IRETFN = REVERO ( KDATA,  KLENP,  KSEC2,  KGRIB,  KLENG,
+     X                      KBITS,  KBMAP,  KVALS,  LPRIBI, LQUASI,
+     X                      INROWS, KLEN,   IWORK(IXIND (2,1,2)),
+     X                      JPMXGF, LDEBUG, LPRCLN,
+     X                      IWORK(IXIND (2,IROWMK,1)) )
+C
+          IF (IRETFN.NE.0) THEN
+            GO TO 900
+          ENDIF
+C
+          LREVER=.FALSE.
+C
+        ENDIF
+C
+C         Enforce no extension at all, and especially 
+C         no boustrophedonic ordering for row by row (useless).
+C
+        DO 201 J=12,15
+        ISEC4(J,IMETHO)=0
+  201   CONTINUE
+C
+        IRET = C2ROWS ( KDATA,  KLENP,  KSEC2,  ISEC4(1,IMETHO),KGRIB,
+     X                  KLENG,  KNSPT,  KBITS,  LCOMGR, LLONLY, IROWL4,
+     X                  KBMAP,  KVALS,  LPRIBI, LQUASI, INROWS, KLEN,
+     X                  IWORK(IXIND (1,IROWMK,1)),
+     X                  IWORK(IXIND (2,IROWMK,1)),
+     X                  IWORK(IXIND (1,IROWMK,2)),
+     X                  IWORK(IXIND (2,1,2)),   JPMXGF, IPOWER, JPXPWR,
+     X                  IPCWID, JPXWID, IROWBF, LDEBUG )
+C
+        IF (LLONLY) THEN
+C
+#ifndef ebug2o
+          IF (LDEBUG) THEN
+#endif
+            WRITE(GRPRSM,FMT=9210) IRET, IROWBF, IROWL4, IL4OPT
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+          IF (IRET.NE.0.OR.IROWL4.GE.IL4OPT) THEN
+            LROW=.FALSE.
+C
+            IF (IRET.NE.0.AND.LBOUST) THEN
+C
+C               Reset IROWMK to avoid possible misuse of length array
+C               in REVERO.
+C
+              IROWMK=0
+            ENDIF
+C
+          ELSE
+            IL4OPT=IROWL4
+            LSIMPK=.FALSE.
+          ENDIF
+C
+        ELSEIF (IRET.NE.0) THEN
+C
+          IRETFN = IRET
+          GO TO 900
+C
+        ENDIF
+C
+#ifdef ebug2o
+        IF (.NOT.LLONLY) THEN
+#else
+        IF (LDEBUG.AND..NOT.LLONLY) THEN
+#endif
+C
+          YMETHO='Row by row'
+          IL4OPT=IROWL4
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3 . Constant width packing method applied, or tried.
+C     -----------------------------------------------------------------
+C
+      IF (LCTWID) THEN
+C
+        IMETHO=IMTCWI
+        ILOWMK=MIN (ICWIMK,ILOWMK)
+        LCOMGR=LFIRST.OR.ICWIMK.LE.IHIGMK
+C
+        IF (LCOMGR) THEN
+          ICWIMK=1
+          ICWORK=1
+        ENDIF
+C
+        IF (LLONLY.AND.NUM2OK.EQ.1) THEN
+C
+C           Modulates width use, regardless of KSEC4(11).
+C
+          IF (LGENXT) THEN
+C
+C     Experience shows that the only cases where constant width packing
+C     may compress data better than general extended method are for a
+C     null width.
+C
+            ISEC4(11,IMETHO)=0
+          ELSE
+            ISEC4(11,IMETHO)=-(ISEC4(2,IMETHO)-1)
+          ENDIF
+C
+        ENDIF
+C
+        LOPTLN=LFIRST.AND.ISEC4(11,IMETHO).LT.0
+C
+C         Enforce no extension flag, except boustrophedonic ordering.
+C
+        ISEC4(12,IMETHO)=0
+        ISEC4(14,IMETHO)=0
+        ISEC4(15,IMETHO)=0
+C
+        IRET = C2CWID ( KDATA,  KLENP,  ISEC4(1,IMETHO),KGRIB,  KLENG,
+     X                  KNSPT,  KBITS,  LCOMGR, LLONLY, ICWIL4, ICWIFO,
+     X                  KLEN,   IWORK(IXIND(1,1,1)),
+     X                  IWORK(IXIND(2,1,1)),    JPMXGF, ICWIMK, IPOWER,
+     X                  JPXPWR, ICWIBF, INCMIN, IHWM,   ICWORK, LDEBUG,
+     X                  LOPTLN )
+C
+        IF (LLONLY) THEN
+C
+#ifndef ebug2o
+          IF (LDEBUG) THEN
+#endif
+            WRITE(GRPRSM,FMT=9310) IRET, ICWIBF, ICWIL4, IL4OPT,
+     X                              ICWIFO, IHWM, ICWORK
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+          IF (IRET.NE.0.OR.ICWIL4.GE.IL4OPT) THEN
+            LCTWID=.FALSE.
+            IHIGMK=MAX (IHIGMK,IHWM)
+          ELSE
+C
+C     Constant width packing better than simple packing,
+C     and possibly row by row.
+C
+            IL4OPT=ICWIL4
+            LSIMPK=.FALSE.
+            LROW=.FALSE.
+C
+            IF (LGEN2O.OR.LGENXT) THEN
+C
+C     Push up useful work arrays, trying to keep data if further
+C     method(s) tried are not better.
+C
+              IOFF=JPMXGF-ICWIFO
+              ICWIMK=IOFF+1
+              IHIGMK=0
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 311 J=ICWIFO,1,-1
+              IWORK(IXIND (1,IOFF+J,ICWORK))=IWORK(IXIND (1,J,ICWORK))
+              IWORK(IXIND (2,IOFF+J,ICWORK))=IWORK(IXIND (2,J,ICWORK))
+  311         CONTINUE
+C
+            ENDIF
+C
+          ENDIF
+C
+        ELSEIF (IRET.NE.0) THEN
+C
+          IRETFN = IRET
+          GO TO 900
+C
+        ENDIF
+C
+#ifdef ebug2o
+        IF (.NOT.LLONLY) THEN
+#else
+        IF (LDEBUG.AND..NOT.LLONLY) THEN
+#endif
+C
+          WRITE (UNIT=YMETHO,FMT=9320) ISEC4(11,IMETHO)
+          IL4OPT=ICWIL4
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 4 . General 2nd-order packing method applied, or tried.
+C     -----------------------------------------------------------------
+C
+      IF (LGEN2O) THEN
+C
+        IMETHO=IMTGEN
+        ILOWMK=MIN (IGENMK,ILOWMK)
+        LCOMGR=.NOT.LGPREC
+C
+        IF (LCOMGR) THEN
+          IGENMK=1
+        ENDIF
+C
+C         Enforce no extension flag, except boustrophedonic ordering.
+C
+        ISEC4(12,IMETHO)=0
+        ISEC4(14,IMETHO)=0
+        ISEC4(15,IMETHO)=0
+C
+        IRET = C2GENE ( KDATA,  KLENP,  ISEC4(1,IMETHO),KGRIB,  KLENG,
+     X                  KNSPT,  KBITS,  LCOMGR, LLONLY, IGENL4, IGENFO,
+     X                  KLEN,   IWORK(IXIND (1,1,1)),
+     X                  IWORK(IXIND (2,1,1)),   IWORK(IXIND (1,1,2)),
+     X                  IWORK(IXIND (2,1,2)),   JPMXGF, IGENMK, IPOWER,
+     X                  JPXPWR, IPCWID, JPXWID, IGENBF, INCMIN, IMINPK,
+     X                  IHWM,   LDEBUG )
+C
+        IF (LLONLY) THEN
+C
+#ifndef ebug2o
+          IF (LDEBUG) THEN
+#endif
+            WRITE(GRPRSM,FMT=9410) IRET, IGENBF, IGENL4, IL4OPT,
+     X                              IGENFO, IHWM
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+          IF (IRET.NE.0.OR.IGENL4.GE.IL4OPT) THEN
+            LGEN2O=.FALSE.
+          ELSE
+C
+C     General 2nd-order packing better than simple packing,
+C     and possibly row by row and/or constant width.
+C
+            IL4OPT=IGENL4
+            LSIMPK=.FALSE.
+            LROW=.FALSE.
+            LCTWID=.FALSE.
+C
+          ENDIF
+C
+          IHIGMK=MAX (IHIGMK,IHWM)
+          LGPREC=IRET.EQ.0
+C
+          IF (LGPREC.AND.LGENXT) THEN
+C
+C              Duplicate descriptors for further use by
+C              general extended packing trial.
+C
+            IGXTBF=IGENBF
+            IGXTFO=IGENFO
+            IGXTMK=IGENMK
+C
+          ENDIF
+C
+        ELSEIF (IRET.NE.0) THEN
+C
+          IRETFN = IRET
+          GO TO 900
+C
+        ENDIF
+C
+#ifdef ebug2o
+        IF (.NOT.LLONLY) THEN
+#else
+        IF (LDEBUG.AND..NOT.LLONLY) THEN
+#endif
+C
+          YMETHO='General second-order'
+          IL4OPT=IGENL4
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 5 . General extended 2nd-order packing method applied,
+C                 or tried.
+C     -----------------------------------------------------------------
+C
+      IF (LGENXT) THEN
+C
+        IMETHO=IMTGXT
+        ILOWMK=MIN (IGXTMK,ILOWMK)
+        LCOMGR=.NOT.LGPREC.OR.(LFIRST.AND.LNLOCP)
+C
+  510   CONTINUE
+C
+        IF (LCOMGR) THEN
+          IGXTMK=1
+        ELSEIF (LFIRST) THEN
+C
+C         Inherit total length of second-order values from general WMO
+C         second-order packing, performed just previously.
+C
+          ISEC4(19,IMETHO)=ISEC4(19,IMTGEN)
+        ENDIF
+C
+        ISEC4(12,IMETHO)=8
+        ISEC4(14,IMETHO)=2*(IORDER/2)
+        ISEC4(15,IMETHO)=MOD (IORDER,2)
+C
+        IF (IORDER.NE.0.AND..NOT.LCOMSD) THEN
+C
+C           Spatial differencing has to be applied to field.
+C
+          LCOMSD=.TRUE.
+          IORDER = C2DOSD ( KDATA,  KLENP,  ISEC4(1,IMETHO), LCOMSD,
+     S                      KLEN,   IWORK,  JPWORK, IPOWER,  JPXPWR,
+     S                      IPCWID, JPXWID, IMINPK, ILWORX,  IBIAS,
+     S                      IWIDSD, IXBITS, LCBIAS, LDEBUG )     
+C
+C           Reset ISEC4, because C2DOSD may have reset IORDER.
+C
+          ISEC4(14,IMETHO)=2*(IORDER/2)
+          ISEC4(15,IMETHO)=MOD (IORDER,2)
+C
+        ENDIF
+C
+        IF (IORDER.NE.0) THEN
+          ISEC4( 2,IMETHO)=IXBITS
+          ISEC4(11,IMETHO)=IWIDSD
+          ISEC4(16,IMETHO)=IBIAS
+        ENDIF
+C
+        IRET = C2GENE ( KDATA,  KLENP,  ISEC4(1,IMETHO),KGRIB,  KLENG,
+     X                  KNSPT,  KBITS,  LCOMGR, LLONLY, IGXTL4, IGXTFO,
+     X                  KLEN,   IWORK(IXIND (1,1,1)),
+     X                  IWORK(IXIND (2,1,1)),   IWORK(IXIND (1,1,2)),
+     X                  IWORK(IXIND (2,1,2)),   JPMXGF, IGXTMK, IPOWER,
+     X                  JPXPWR, IPCWID, JPXWID, IGXTBF, INCMIN, IMINPK,
+     X                  IHWM,   LDEBUG )
+C
+        IF (LLONLY) THEN
+C
+#ifndef ebug2o
+          IF (LDEBUG) THEN
+#endif
+            WRITE(GRPRSM,FMT=9510) IRET, IGXTBF, IGXTL4, IL4OPT,
+     X                              IGXTFO, IHWM, IORDER
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+          IF (IRET.NE.0.OR.IGXTL4.GE.IL4OPT) THEN
+C
+C             Current method is not successful, and has to be discarded.
+C
+            LGENXT=.FALSE.
+C
+            IF (IRET.NE.0.OR..NOT.LGEN2O) THEN
+              LGPREC=.FALSE.
+            ELSE
+              LGPREC=IGXTFO.EQ.IGENFO.AND.IORDER.EQ.0
+            ENDIF
+C
+            IF (LCOMSD.AND.IORDER.NE.0) THEN
+C
+C              Spatial differencing has to be reversed.
+C
+              IRETFN = D2ROSD ( KDATA,  KLEN,   IORDER, IPOWER, JPXPWR,
+     S                          IBIAS,  LVECTD, LDEBUG )     
+C
+              IF (IRETFN.NE.0) THEN
+                GO TO 900
+              ENDIF
+C
+              LCOMSD=.FALSE.
+C
+              IF (LGEN2O.AND.LDYNOR) THEN
+C
+C    General WMO 2nd-order packing was also selected/promoted, and is
+C    the best method. This indicates moreless wrong diagnostic for
+C    spatial differencing order.
+C    Retry then general extended packing without spatial differencing,
+C    that in almost all cases behaves better than general WMO method.
+C
+#ifndef ebug2o
+                IF (LDEBUG) THEN
+#endif
+                  WRITE(GRPRSM,FMT=9520) IORDER
+#ifndef ebug2o
+                ENDIF
+C
+                IORDER=0
+                LGENXT=.TRUE.
+                LGPREC=.FALSE.
+                LCOMGR=.TRUE.
+                ISEC4(2,IMETHO)=KSEC4(2)
+                GOTO 510
+C
+              ENDIF
+C
+            ENDIF
+C
+          ELSE
+C
+C     General extended 2nd-order packing better than simple packing,
+C     and possibly other methods.
+C
+            IL4OPT=IGXTL4
+            LSIMPK=.FALSE.
+            LROW=.FALSE.
+            LCTWID=.FALSE.
+            LGEN2O=.FALSE.
+            LGPREC=.TRUE.
+C
+          ENDIF
+C
+          IHIGMK=MAX (IHIGMK,IHWM)
+C
+        ELSEIF (IRET.NE.0) THEN
+C
+          IRETFN = IRET
+          GO TO 900
+C
+        ENDIF
+C
+#ifdef ebug2o
+        IF (.NOT.LLONLY) THEN
+#else
+        IF (LDEBUG.AND..NOT.LLONLY) THEN
+#endif
+C
+          YMETHO='Gen.extend.2nd-order'
+          IL4OPT=IGXTL4
+C
+        ENDIF
+C
+      ENDIF
+#endif
+C
+C     -----------------------------------------------------------------
+C*    Section 6 . Effective in case of aggressive packing only.
+C     -----------------------------------------------------------------
+C
+  600 CONTINUE
+C
+      IF (LSIMPK) THEN
+C
+C       Simple packing by default: complex packing not efficient,
+C                                  or not applicable.
+C
+C     The first 10 octets have already been coded by GRIBEX, or will
+C     be in a further step of GRIBEX:
+C     Length of section, flags+unused bit count, binary scale factor,
+C     reference value.
+C
+C     Enforce right values for flags.
+C
+        KSEC4(4)=0
+        KSEC4(6)=0
+        IMETHO=0
+        YMETHO='Simple'
+C
+C*    Octet 11 : Number of bits containing each first-order value.
+C     One 8 bit field.
+C
+        YOPER='C'
+        KNSPT=KNSPT+10*8
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(2),1,KBITS, 8,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 18610
+          WRITE(GRPRSM,FMT=9001) 'bit number'
+          GO TO 900
+        ENDIF
+C
+        IF (LREVER) THEN
+C
+C         Restore initial field ordering.
+C
+          LPRCLN=(LFIRST.AND.LROW).OR.IROWMK.GT.IHIGMK
+          INDCLN=MAX (IROWMK,1)
+C
+          IRETFN = REVERO ( KDATA,  KLENP,  KSEC2,  KGRIB,  KLENG,
+     X                      KBITS,  KBMAP,  KVALS,  LPRIBI, LQUASI,
+     X                      INROWS, KLEN,   IWORK(IXIND (2,1,2)),
+     X                      JPMXGF, LDEBUG, LPRCLN,
+     X                      IWORK(IXIND (2,INDCLN,1)) )
+C
+          IF (IRETFN.NE.0) THEN
+            GO TO 900
+          ENDIF
+C
+          LREVER=.NOT.LREVER
+        ENDIF
+C
+C*    Octet 12 - onwards: Data.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KDATA,KLEN,KBITS,KSEC4(2),
+     X              YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 18620
+          WRITE(GRPRSM,FMT=9001) 'normalized data'
+          GO TO 900
+        ENDIF
+C
+      ELSEIF (LLONLY) THEN
+C
+C       Loop back to apply the most efficient second-order method,
+C       as previously diagnosed. And hoping work arrays have not
+C       been overwritten, to avoid computing them again.
+C
+        LLONLY=.FALSE.
+        LFIRST=.FALSE.
+        GOTO 200
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 7 . Debugging printout.
+C     -----------------------------------------------------------------
+C
+  700 CONTINUE
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+C
+#endif
+        ILMETH=INDEX (YMETHO//'  ','  ')-1
+        WRITE(GRPRSM,FMT=9710) HOPER(:1), YMETHO(:ILMETH), IL4OPT
+C
+        IF (.NOT.LSIMPK) THEN
+C
+          IF (LBOUST.AND..NOT.LROW) THEN
+            WRITE(GRPRSM,FMT=9720)
+          ENDIF
+C
+          IF (LGENXT.AND.IORDER.NE.0) THEN
+            WRITE(GRPRSM,FMT=9730) IORDER
+          ENDIF
+C
+          ZGAIN=REAL (100*(ILSIMP-IL4OPT)) / REAL (ILSIMP)
+          ILREFR=INDEX (YREFER//'  ','  ')-1
+          WRITE(GRPRSM,FMT=9002) YREFER(:ILREFR), ZGAIN
+C
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     If second-order method was effectively and successfully used,
+C     copy back information of section 4 descriptors to KSEC4.
+C
+      IF (IRETFN.NE.0.AND.IMETHO.NE.0) THEN
+C
+        DO 901 J=1,JPVSE4
+        KSEC4(J)=ISEC4(J,IMETHO)
+  901   CONTINUE
+C
+      ENDIF
+C
+      C2ORDR = IRETFN
+#ifndef ebug2o
+C
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, HOPER(:1), KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9001 FORMAT (' C2ORDR: Problem inserting ',A,'.')
+C
+ 9002 FORMAT (' C2ORDR: Gain on section 4 length against ',A,':',
+     X        F5.1,' %.')
+C
+ 9100 FORMAT (' C2ORDR: Function start, HOPER = ',A1,', KNSPT =',I10,
+     X  '.',/,' C2ORDR: Original number of bits =',I3,'.',/,
+     X        ' C2ORDR: Presence of sections 2 and 3 = ',L1,' and ',
+     X        L1,'.')
+C
+ 9110 FORMAT (' C2ORDR: Matrix of values invalid here.')
+C
+ 9120 FORMAT (' C2ORDR: ',A,' only supported with a section 2.')
+ 9130 FORMAT (' C2ORDR: ',A,'/',A,': not supported.')
+ 9131 FORMAT (' C2ORDR: Approx. s4 length, ',A,',',I3,
+     X        '-length groups:',I9,'.')
+ 9132 FORMAT (' C2ORDR: Range diagnostic is ',A,
+     X        ' of spatial differences, order',I2,'.')
+ 9133 FORMAT (' C2ORDR: Selected order:',I2,', range diagnostics:',
+     X        4I8,'.')
+ 9140 FORMAT (' C2ORDR: KSEC4(',I2,') must be 0 or ',I2,'.')
+ 9150 FORMAT (' C2ORDR: General extended packing implies ',A,'.')
+ 9153 FORMAT (' C2ORDR: Boustrophedonic ordering ignored with ',
+     X        'row by row packing.')
+ 9155 FORMAT (' C2ORDR: KSEC4(',I2,') must be 0, -1 or ',I2,'.')
+ 9156 FORMAT (' C2ORDR: Spatial differencing ignored without ',
+     X        'general extended 2nd-order packing.')
+ 9160 FORMAT (' C2ORDR: Bits number =',I3,' - maximum allowed =',I3,
+     X        '.')
+ 9170 FORMAT (' C2ORDR: Constant width =',I3,
+     X        ' - out of range [-/+',I2,'(=KSEC4(2)-1)].')
+ 9175 FORMAT (' C2ORDR: Constant field, value = ',F30.20,'.')
+ 9180 FORMAT (' C2ORDR: INROWS =',I6,', KLEN =',I9,', LQUASI = ',L1,
+     X        '.')
+ 9185 FORMAT (' C2ORDR: Inconsistency: total g.p. number =',I9,
+     X        ' expected =',I9,'.')
+ 9187 FORMAT (' C2ORDR: ',I9,' bits set in primary bit-map -',
+     X        ' not in range [1,KSEC4(1)=',I9,'].')
+ 9190 FORMAT (' C2ORDR: Too much rows:',I6,' exceeds work space:',I6,
+     X        '.')
+#ifndef wmogrp2o
+ 9192 FORMAT (' C2ORDR: Implicit 1ary bit-map/g.p. number >',I6,
+     X        ': unsupported.')
+#endif
+ 9195 FORMAT (' C2ORDR: No packing method selected or applicable.',
+     X        ' C2ORDR: Simple packing applied as backup.')
+C
+ 9200 FORMAT (' C2ORDR: LROW=',L1,', LCTWID=',L1,', LGEN2O=',L1,
+     X        ', LGENXT=',L1,', LBOUST=',L1,', IORDER=',I1,
+     X        ', LSIMPK=',L1,'.')
+C
+ 9210 FORMAT (' C2ORDR: (row by row) IRET, IROWBF, IROWL4, IL4OPT=',
+     X        I6,I3,I9,I9,'.')
+C
+ 9310 FORMAT (' C2ORDR: (cons.width) IRET, ICWIBF, ICWIL4, IL4OPT=',
+     X        I6,I3,I9,I9,'.',/,
+     X        ' C2ORDR:              ICWIFO, IHWM, ICWORK=',2I8,I2,'.')
+C
+ 9320 FORMAT ('Constant width (',I2,')')
+C
+ 9410 FORMAT (' C2ORDR: (general 2o) IRET, IGENBF, IGENL4, IL4OPT=',
+     X        I6,I3,I9,I9,'.',/,
+     X        ' C2ORDR:              IGENFO, IHWM=',2I8,'.')
+C
+ 9510 FORMAT (' C2ORDR: (gen.extend) IRET, IGXTBF, IGXTL4, IL4OPT=',
+     X        I6,I3,I9,I9,'.',/,
+     X        ' C2ORDR:              IGXTFO, IHWM, IORDER=',2I8,I2,'.')
+ 9520 FORMAT (' C2ORDR: Non-optimal spatial differencing at order',I2,
+     X        ', general 2o is better...',/,
+     X' C2ORDR: .. retrying gen.extend. without spatial differencing.')
+C
+ 9710 FORMAT (' C2ORDR: HOPER = ',A1,' - ',A,
+     X        ' packing applied, IL4OPT =',I9,'.')
+ 9720 FORMAT (' C2ORDR: Boustrophedonic ordering has been used.')
+ 9730 FORMAT (' C2ORDR: Spatial differencing applied, order is',I2,'.')
+C
+ 9900 FORMAT (' C2ORDR: Function return code =',I6,' HOPER = ',A,
+     X        ', KNSPT =',I10,'.')
+C
+      END
diff --git a/gribex/c2pack.F b/gribex/c2pack.F
new file mode 100755
index 0000000..b008383
--- /dev/null
+++ b/gribex/c2pack.F
@@ -0,0 +1,761 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2PACK ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,
+     X                          KNSPT,  KBITS,  KLEN,   KREFGR, KLENGR,
+     X                          KBITGR, KWORK,  KLWORK, KPOWER, KMXPWR,
+     X                          KNBIFO, ODEBUG )
+C
+C---->
+C**** C2PACK
+C
+C     Purpose.
+C     --------
+C
+C     Packs end of GRIB section 4 (except final padding)
+C     for second-order packing methods, and computes some descriptors.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = C2PACK ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,  KNSPT,
+C    X                KBITS,  KLEN,   KREFGR, KLENGR, KBITGR, KWORK,
+C    X                KLWORK, KPOWER, KMXPWR, KNBIFO, ODEBUG )
+C
+C
+C     Input Parameters.
+C     ----------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     KLEN       - Exact number of grid-points to handle.
+C     KREFGR     - Work array, first-order values for each group.
+C     KLENGR     - Work array, effective length of each group.
+C     KBITGR     - Work array, bit number ("width") of each group.
+C     KLWORK     - Length of work arrays.
+C     KPOWER     - Auxilary array, containing precomputed powers of 2-1.
+C     KMXPWR     - Maximum number of bits per original scaled value.
+C     KNBIFO     - Number of BIts for coding First-Order values.
+C     ODEBUG     - True for some debug printout.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KDATA      - Used as work array for second-order values,
+C                  and secondary bit-map (if any).
+C     KSEC4      - Array of GRIB section 4 integer descriptors
+C                  (completed).
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product (updated).
+C     KREFGR     - Work array, re-used for variable width methods.
+C     KBITGR     - Work array, re-used for variable width methods.
+C     KWORK      - Work array, used for variable width methods.
+C
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes.
+C
+C     Externals.
+C     ----------
+C
+C     C2PKVW    - Packs 2nd-order values for variable width methods.
+C     INXBIT    - Insert bits into GRIB product.
+C     PRTBIN    - Transform integer value in printable "binary" format.
+C     CSGNBT    - Codes an integer value and its sign bit.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 
+C               in the GRIB product.
+C     On exit,  KNSPT points to the first unused bit of section 4,
+C               (or to the first bit of section 5, if unused bit count
+C                is zero) in the GRIB product.
+C
+C     KDATA is overwritten. This is coherent with GRIBEX coding.
+C
+C         Detailed use of KSEC4 as input/output argument
+C         ----------------------------------------------
+C
+C     KSEC4(4) set to 64 to indicate complex packing.
+C     KSEC4(6)  "   " 16  "    "     presence of extended flags.
+C
+C     KSEC4(9) used to know secondary bit-map use (0=no,32=yes).
+C     KSEC4(10)  "   "   "  constant/variable width (0=constant,16=var).
+C     KSEC4(11)  "   "   "  for width value, if constant.
+C     KSEC4(11) used to know width of spatial differencing descriptors.
+C     KSEC4(11) set to width of lengths for general extended method,
+C               for consistency with D2ORDR routine.
+C     KSEC4(12) used to know general extended packing (0=no,8=yes).
+C     KSEC4(13)   "   "   "  boustrophedonic ordering (0=no,4=yes).
+C     KSEC4(14) (0 or 2) and KSEC4(15) (0 or 1) used to know spatial
+C               differencing through their sum (0=no,1/2/3=order used).
+C     KSEC4(16) used to know bias for spatial differencing.
+C     KSEC4(17)   "   "   "  width of lengths for general extended
+C                            method.
+C     KSEC4(16) set to pointer to first-order values.
+C     KSEC4(17)  "   "    "    "  2nd-order     "   .
+C     KSEC4(18) set to number of first-order values.
+C     KSEC4(19)  "   "    "   "  2nd-order     "   .
+C     KSEC4(20) used to know width of groups.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, April 1998.
+C     Update comments.
+C     Introduce spatial differencing.
+C
+C     J. Clochard, September 1998.
+C     Optimisation of bit-string encoding for variable width methods,
+C     through routine C2PKVW.
+C     Suppress dummy-argument KSEC1, and add KWORK/KPOWER/KMXPWR 
+C     in calling syntax.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+C
+      PARAMETER ( JP16SET= 2**16-1 )
+C                            `---> 65535    =   FFFF(hex)
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KLEN, KLWORK, KNBIFO, KMXPWR
+      INTEGER KDATA (KLENP), KSEC4 (*), KGRIB (KLENG)
+      INTEGER KREFGR (KLWORK), KLENGR (KLWORK), KBITGR (KLWORK)
+      INTEGER KWORK (KLWORK), KPOWER (0:KMXPWR)
+C
+      LOGICAL ODEBUG
+C
+C     Local variables.
+C
+      INTEGER ICOUNT, ILDSTA, IZERO, JGROUP, ILNGTH, IFILL, INSPTB
+      INTEGER IRET, J, ILVARB, IBITGW, IREFER, IFLAGX, INSPTA
+      INTEGER IPTRFO, IPTRSO, IFIROV, ISECOV, IRETFN, IAUXIL
+#ifndef wmogrp2o
+      INTEGER IEXTRA
+#endif
+      INTEGER IBITGS, IPTRGS, IORDER, IWIDSD, IBIAS, ILVARX
+C
+      INTEGER IWORK (3)
+C
+      INTEGER C2PKVW
+      EXTERNAL C2PKVW
+C
+      CHARACTER YOPER*1
+C
+      LOGICAL LROW, LCTWID, LSECBI, LVECTP
+      LOGICAL LGENXT
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Initialisations.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IRETFN = 0
+      IZERO=0
+      ILDSTA=21
+      INSPTA=KNSPT
+      YOPER='C'
+      LSECBI=KSEC4(9).NE.0
+#if (defined CRAY) || (defined FUJITSU)
+      LVECTP=.TRUE.
+#else
+      LVECTP=.FALSE.
+#endif
+      LROW=.NOT.LSECBI.AND.KSEC4(12).EQ.0
+      LGENXT=.NOT.LSECBI.AND.KSEC4(12).NE.0
+      IORDER=KSEC4(14)+KSEC4(15)
+      LCTWID=KSEC4(10).EQ.0
+      IFIROV=KSEC4(18)
+      IBITGW=KSEC4(20)
+C
+C     Enforce right values for flags, for further use by GRIBEX.
+C
+      KSEC4(4)=64
+      KSEC4(6)=16
+C
+C     Compute length of "variable-length" descriptors.
+C
+      IF (LROW) THEN
+        ILVARB=8*((8+IFIROV*IBITGW-1)/8)
+      ELSEIF (LCTWID) THEN
+        ILVARB=8+KLEN
+      ELSEIF (LGENXT) THEN
+        IBITGS=KSEC4(17)
+C
+        IF (IORDER.EQ.0) THEN
+          ILVARX=4
+        ELSE
+          IWIDSD=KSEC4(11)
+          IBIAS=KSEC4(16)
+          ILVARX=5+(8+IWIDSD*(IORDER+1)-1)/8
+        ENDIF
+C
+        ILVARB=8*(ILVARX+(8+IFIROV*IBITGW-1)/8)+IFIROV*IBITGS
+C
+C       IBITGS stored back in KSEC4(11), for consistency with D2ORDR.
+C
+        KSEC4(11)=IBITGS
+      ELSE
+        ILVARB=8*((8+IFIROV*IBITGW-1)/8)+KLEN
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Coding of fixed-length descriptors.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     The first 10 octets have already been coded in GRIBEX, or will
+C     be in a further step of GRIBEX:
+C     Length of section, flags+unused bit count, binary scale factor,
+C     reference value.
+C
+C*    Octet 11 : Number of bits containing each first-order value.
+C     One 8 bit field.
+C
+      KNSPT=KNSPT+10*8
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KNBIFO,1,KBITS, 8,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 20210
+        WRITE(GRPRSM,FMT=9001) 'bit number of first-order values'
+        GO TO 900
+      ENDIF
+C
+C     Octets 12 - 13: Octet number of the start of first-order packed 
+C                     data.
+C     One 16-bit field.
+C
+      IPTRFO=1+ILDSTA+(8+ILVARB-1)/8
+      KSEC4(16)=IPTRFO
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(16),1,KBITS,16,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 20220
+        WRITE(GRPRSM,FMT=9001) 'pointer to first-order packed data'
+        GO TO 900
+      ENDIF
+C
+C     Octet 14: Extended flags.
+C     One 8-bit field.
+C
+      IFLAGX=KSEC4(9)+KSEC4(10)+KSEC4(12)+KSEC4(13)+KSEC4(14)+KSEC4(15)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IFLAGX,1,KBITS, 8,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 20230
+        WRITE(GRPRSM,FMT=9001) 'extended flags'
+        GO TO 900
+      ENDIF
+C
+C     Octets 15 - 20: Octet number of the start of second-order packed 
+C                     data, Number of first-order packed data,
+C                     Number of second-order packed data.
+C     Three 16-bit fields.
+C
+      IPTRSO=IPTRFO+(8+IFIROV*KNBIFO-1)/8
+      ISECOV=KLEN-IORDER
+C
+      KSEC4(17)=IPTRSO
+      KSEC4(18)=IFIROV
+      KSEC4(19)=ISECOV
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(17),3,KBITS,16,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 20240
+        WRITE(GRPRSM,FMT=9001) 'standard second-order descriptors'
+        GO TO 900
+      ENDIF
+C
+#ifndef wmogrp2o
+C     Octet 21: Reserved by WMO, so should be zero in standard case.
+C               Could be used for extra bits of group number.
+C     One 8-bit field.
+C
+      IEXTRA=IFIROV/(JP16SET+1)
+C
+      IF (IEXTRA.NE.0) THEN
+        CALL PRTBIN (IEXTRA,8,IAUXIL,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IAUXIL=IEXTRA
+        ENDIF
+C
+        WRITE(GRPRSM,FMT=9255) IFIROV, JP16SET, IEXTRA, IAUXIL
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IEXTRA,1,KBITS, 8,YOPER,IRET)
+#else
+C     Octet 21: Reserved by WMO. Set to zero.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS, 8,YOPER,IRET)
+#endif
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 20250
+        WRITE(GRPRSM,FMT=9001) 'reserved octet (section 4, 21st)'
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3. Coding of variable-length descriptors.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        CALL PRTBIN (IFLAGX,8,IAUXIL,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IAUXIL=IFLAGX
+        ENDIF
+C
+        WRITE(GRPRSM,FMT=9300) KNBIFO, IAUXIL, IFIROV, ISECOV, IPTRFO,
+     X                          IPTRSO
+        WRITE(GRPRSM,FMT=9310) 'fixed', KNSPT
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C
+      IF (LCTWID) THEN
+C
+C     Octet 22: Common width of groups.
+C     One 8-bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(11),1,KBITS,8,YOPER,IRET)
+C
+      ELSEIF (LGENXT) THEN
+C
+C     Octets 22 - 23: Width of widths, Width of lengths.
+C     Two 8-bit fields.
+C
+        IWORK(1)=IBITGW
+        IWORK(2)=IBITGS
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IWORK,2,KBITS,8,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 20310
+          WRITE(GRPRSM,FMT=9001)
+     X            'Extended descriptors, 1st-order values'
+          GO TO 900
+        ENDIF
+C
+C     Octets 24-25: Octet number of the start of group sizes (lengths).
+C     One 16-bit field.
+C
+        IPTRGS = 1 + ILDSTA + ILVARX + (8+IFIROV*IBITGW-1)/8
+#ifdef ebug2o
+        PRINT *,'c2pack - IBITGW =',IBITGW,', IBITGS =',IBITGS,
+     X          ', IPTRGS =',IPTRGS
+#endif
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IPTRGS,1,KBITS,16,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 20315
+          WRITE(GRPRSM,FMT=9001) 'General extended group size pointer'
+          GO TO 900
+        ELSEIF (IORDER.NE.0) THEN
+C
+C     Octet 26: Width of spatial differencing specific descriptors.
+C     One 8-bit field.
+C
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IWIDSD,1,KBITS,8,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 20316
+            WRITE(GRPRSM,FMT=9001)
+     X           'Width of spatial differencing descriptors'
+            GO TO 900
+          ELSEIF (IWIDSD.NE.0) THEN
+C
+C     Octet 27-onwards: first IORDER original values and diff. bias.
+C     (IORDER+1) fields of IWIDSD bits.
+C
+C              Temporarily use KDATA(IORDER+1) for bias and its sign.
+C
+            IAUXIL=IORDER+1
+            IFILL=KDATA(IAUXIL)
+            CALL CSGNBT(KDATA(IAUXIL),IBIAS,IWIDSD,IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 20317
+              WRITE(GRPRSM,FMT=9317) IRET
+              GO TO 900
+            ENDIF
+C
+            CALL INXBIT(KGRIB,KLENG,KNSPT,KDATA,IAUXIL,KBITS,IWIDSD,
+     X                  YOPER,IRET)
+C
+            KDATA(IAUXIL)=IFILL
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 20318
+              WRITE(GRPRSM,FMT=9001)
+     X           'First field value(s) (spatial differencing case)'
+              GO TO 900
+            ELSEIF (MOD (KNSPT,8).NE.0) THEN
+C
+C     Fill up with binary zeros till next octet boundary.
+C
+              IFILL=8*((8+KNSPT-1)/8)-KNSPT
+              CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,IFILL,
+     X                    YOPER,IRET)
+C
+              IF (IRET.NE.0) THEN
+                IRETFN = 20319
+                WRITE(GRPRSM,FMT=9001)
+     X             'padding after spatial differencing descriptors'
+                GO TO 900
+              ENDIF
+C
+            ENDIF
+C
+          ENDIF
+C
+        ENDIF
+C
+C     Octets XX - XX+(IPTRGS-1): Group widths.
+C     IFIROV fields of IBITGW bits.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KBITGR,IFIROV,KBITS,IBITGW,
+     X              YOPER,IRET)
+      ELSE
+C
+C     Octets 22 - 21+IFIROV: Group widths.
+C     IFIROV fields of IBITGW bits.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KBITGR,IFIROV,KBITS,IBITGW,
+     X              YOPER,IRET)
+      ENDIF
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 20320
+        WRITE(GRPRSM,FMT=9001) 'inserting group width(s)'
+        GO TO 900
+      ELSEIF (MOD (KNSPT,8).NE.0) THEN
+C
+C     Fill up with binary zeros till next octet boundary.
+C
+        IFILL=8*((8+KNSPT-1)/8)-KNSPT
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,IFILL,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 20330
+          WRITE(GRPRSM,FMT=9001) 'padding after group width(s)'
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      IF (LSECBI) THEN
+C
+C     Secondary bit-map will be inserted later, after second-order
+C     values processing, to use KDATA as work array. Retain pointer.
+C
+        INSPTB=KNSPT
+        KNSPT=KNSPT+KLEN
+C
+        IF (MOD (KNSPT,8).NE.0) THEN
+C
+C     Fill up with binary zeros till next octet boundary.
+C
+          IFILL=8*((8+KNSPT-1)/8)-KNSPT
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,IFILL,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 20340
+            WRITE(GRPRSM,FMT=9001) 'padding after secondary bit-map'
+            GO TO 900
+          ENDIF
+C
+        ENDIF
+C
+      ELSEIF (LGENXT) THEN
+C
+C     Octets IPTRGS - (IPTRFO-1): General extended group sizes(lengths).
+C     IFIROV fields of IBITGS bits.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KLENGR,IFIROV,KBITS,IBITGS,
+     X              YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 20350
+          WRITE(GRPRSM,FMT=9001) 'General extended group sizes'
+          GO TO 900
+        ELSEIF (MOD (KNSPT,8).NE.0) THEN
+C
+C     Fill up with binary zeros till next octet boundary.
+C
+          IFILL=8*((8+KNSPT-1)/8)-KNSPT
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,IFILL,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 20360
+            WRITE(GRPRSM,FMT=9001)
+     X            'padding after General extended group sizes'
+            GO TO 900
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+      IF (KNBIFO.NE.0) THEN
+C
+C     Octets IPTRFO - (IPTRSO-1): First-order values (reference values
+C                                                    of groups).
+C     IFIROV fields of KNBIFO bits.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KREFGR,IFIROV,KBITS,KNBIFO,
+     X              YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 20370
+          WRITE(GRPRSM,FMT=9001)
+     X         'first-order values (reference values of groups)'
+          GO TO 900
+        ELSEIF (MOD (KNSPT,8).NE.0) THEN
+C
+C     Fill up with binary zeros till next octet boundary.
+C
+          IFILL=8*((8+KNSPT-1)/8)-KNSPT
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,IFILL,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 20380
+            WRITE(GRPRSM,FMT=9001) 'padding after first-order values'
+     S//' of groups.'
+            GO TO 900
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 4. Coding of data (second-order values).
+C     -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Octets IPTRSO - onwards: Second-order values (deviations from
+C                                                  groups references).
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9310) 'variable', KNSPT
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      ICOUNT=IORDER
+C
+      IF (LCTWID) THEN
+C
+C                      Constant width packing.
+C
+        IF (KSEC4(11).NE.0) THEN
+C
+          DO 412 JGROUP=1,IFIROV
+C
+          ILNGTH=KLENGR(JGROUP)
+          IREFER=KREFGR(JGROUP)
+C
+          DO 411 J=1,ILNGTH
+          KDATA(ICOUNT+J)=KDATA(ICOUNT+J)-IREFER
+  411     CONTINUE
+C
+          ICOUNT=ICOUNT+ILNGTH
+C
+  412     CONTINUE
+C
+C       Effective coding of second-order values, once for all groups.
+C
+          CALL INXBIT(KGRIB,KLENG,KNSPT,KDATA,KLEN,KBITS,
+     X                KSEC4(11),YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 20410
+            WRITE(GRPRSM,FMT=9001)
+     X   'second-order values (deviations from 1st-order values)'
+            GO TO 900
+          ENDIF
+C
+        ELSE
+          ICOUNT=KLEN
+        ENDIF
+C
+      ELSE
+C
+C             Packing method(s) with variable width.
+C
+        IRETFN = C2PKVW ( KDATA,  KLENP,  KGRIB,  KLENG,  KNSPT,
+     X                    KBITS,  KLEN,   KREFGR, KLENGR, KBITGR,
+     X                    KWORK,  KLWORK, IFIROV, ICOUNT, KPOWER,
+     X                    KMXPWR, LROW,   LVECTP, ODEBUG )
+C
+        IF (IRETFN.NE.0) THEN
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+      IF (ICOUNT.NE.KLEN) THEN
+        IRETFN = 20420
+        WRITE(GRPRSM,FMT=9420) ICOUNT, KLEN
+        GO TO 900
+      ENDIF      
+C
+C     KNSPT pointer is intentionally left as is:
+C     GRIBEX will use its value back to compute unused bit count...
+C     ...no adjustment to nearest octet boundary here, then.
+C
+C     -----------------------------------------------------------------
+C*    Section 5. Compute and code secondary bit-map, if any.
+C     -----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+      IF (LSECBI) THEN
+C
+#ifndef ebug2o
+        IF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9510) 'Coding secondary bit-map', INSPTB
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+C
+        DO 511 J=1,KLEN
+        KDATA(J)=0
+  511   CONTINUE
+C
+        ICOUNT=0
+C
+        DO 512 JGROUP=1,IFIROV
+C
+        ILNGTH=KLENGR(JGROUP)
+        KDATA(ICOUNT+1)=1
+        ICOUNT=ICOUNT+ILNGTH
+C
+  512   CONTINUE        
+C
+C       Effective coding of secondary bit-map, once for all groups.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPTB,KDATA,KLEN,KBITS,
+     X              1,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 20510
+          WRITE(GRPRSM,FMT=9001) 'secondary bit-map'
+          GO TO 900
+#ifdef ebug2o
+        ELSE
+#else
+        ELSEIF (ODEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9510) 'Secondary bit-map encoded', INSPTB
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      C2PACK = IRETFN
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9001 FORMAT (' C2PACK: Problem inserting ',A,'.')
+C
+ 9100 FORMAT (' C2PACK: Function start, KNSPT =',I10,'.')
+#ifndef wmogrp2o
+C
+ 9255 FORMAT (' C2PACK: Group number',I8,' exceeds',I6,'.',/,TR10,
+     X        'extra bits stored in 21st octet of section 4 (',I3,
+     X        '=>',I8.8,').')
+#endif
+C
+ 9300 FORMAT (' C2PACK: KNBIFO =',I3,', IFLAGX =',I9.8,
+     X        ', IFIROV =',I8,', ISECOV =',I8,'.',/,
+     X        ' C2PACK: IPTRFO =',I8,', IPTRSO =',I8,'.')
+ 9310 FORMAT (' C2PACK: KNSPT after "',A,'-length" descriptors =',
+     X        I10,'.')
+ 9317 FORMAT (
+     X' C2PACK: Bias sign management problem, CSGNBT return is',I5,'.')
+C
+ 9420 FORMAT (' C2PACK: Mismatch: sum of group lengths =',I8,
+     X        ', expected = ',I8,'.')
+C
+ 9510 FORMAT (' C2PACK: ',A,', bit pointer =',I10,'.')
+C
+ 9900 FORMAT (' C2PACK: Function return code =',I6,', KNSPT =',I10,'.')
+C
+      END
diff --git a/gribex/c2pkvw.F b/gribex/c2pkvw.F
new file mode 100755
index 0000000..7042bda
--- /dev/null
+++ b/gribex/c2pkvw.F
@@ -0,0 +1,613 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2PKVW ( KDATA,  KLENP,  KGRIB,  KLENG,  KNSPT,
+     X                          KBITS,  KLEN,   KREFGR, KLENGR, KBITGR,
+     X                          KWORK,  KLWORK, KFIROV, KCOUNT, KPOWER,
+     X                          KMXPWR, OROW,   OVECTA, ODEBUG )
+C
+C---->
+C**** C2PKVW
+C
+C     Purpose.
+C     --------
+C
+C     Computes and packs second-order values for variable width methods
+C     of second-order packing.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = C2PKVW ( KDATA,  KLENP,  KGRIB,  KLENG,  KNSPT,  KBITS,
+C    X                KLEN,   KREFGR, KLENGR, KBITGR, KWORK,  KLWORK,
+C    X                KGRIB,  KCOUNT, KPOWER, KMXPWR, OROW,   OVECTA,
+C    X                ODEBUG )
+C
+C
+C     Input Parameters.
+C     ----------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     KLEN       - Exact number of grid-points to handle.
+C     KREFGR     - Work array, first-order values for each group.
+C     KLENGR     - Work array, effective length of each group.
+C     KBITGR     - Work array, bit number ("width") of each group.
+C     KLWORK     - Length of work arrays.
+C     KFIROV     - Number of FIRst-Order Values.
+C     KCOUNT     - Initial index into KDATA.
+C     KPOWER     - Auxilary array, containing precomputed powers of 2-1.
+C     KMXPWR     - Maximum number of bits per original scaled value.
+C     OROW       - True if row by row packing is active packing method.
+C     OVECTA     - True if vector-oriented algorithm has to be used.
+C     ODEBUG     - True for some debug printout.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KDATA      - Used as work array for second-order values.
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product (updated).
+C     KREFGR     - Work array, re-used internally.
+C     KBITGR     - Work array, re-used internally.
+C     KWORK      - Work array.
+C     KCOUNT     - Final index into KDATA.
+C
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes.
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT    - Insert bits into GRIB product.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C
+C     KDATA is overwritten. This is coherent with GRIBEX coding.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - September 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KLEN, KLWORK, KFIROV, KCOUNT
+      INTEGER KMXPWR
+      INTEGER KDATA (KLENP), KGRIB (KLENG), KPOWER (0:KMXPWR)
+      INTEGER KREFGR (KLWORK), KLENGR (KLWORK), KBITGR (KLWORK)
+      INTEGER KWORK (KLWORK)
+C
+      LOGICAL OROW, OVECTA, ODEBUG
+C
+C     Local variables.
+C
+      INTEGER ICOUNT, JGROUP, ILNGTH, IRET, J, IWIDTH, IREFER, IOFF
+      INTEGER IRETFN, IPRWID, JTIMES, ILNGTS, IDATA,  ICOUNB, IBLOCK
+      INTEGER JBLOCK, IFIRST, ILBITS, IBIT,   IWIDPR, INTERM, IPOWER
+C
+      CHARACTER YOPER*1
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Initialisations.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IRETFN=0
+      YOPER='C'
+      ICOUNT=KCOUNT
+C
+C     -----------------------------------------------------------------
+C*    Section 2. Blocks groups of same width, compute 2nd-order values.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C         Determin blocks of neighbour groups of same width to be
+C         "packed" together for coding, and compute 2nd-order values.
+C
+C         In both cases any constant groups are not taken into account.
+C
+      ILNGTS=0
+      ICOUNB=0
+      IBLOCK=0
+C
+C         Find first non-constant group.
+C
+      DO 201 J=1,KFIROV
+C
+        IF (KBITGR(J).NE.0) THEN
+          IFIRST=J
+          GOTO 202
+        ENDIF
+C
+        ICOUNT=ICOUNT+KLENGR(J)
+C
+  201 CONTINUE
+C
+C         All groups are constant (constant field, at least piecewise).
+C         In such a case there are no second-order values to code.
+C
+      IFIRST=KFIROV+1
+      ICOUNT=KLEN
+C
+  202 CONTINUE
+C
+      IPRWID=KBITGR(MIN (IFIRST,KFIROV))
+C
+      DO 204 JGROUP=IFIRST,KFIROV
+C
+        IWIDTH=KBITGR(JGROUP)
+        ILNGTH=KLENGR(JGROUP)
+        IREFER=KREFGR(JGROUP)
+C
+        IF (IWIDTH.NE.0) THEN
+C
+C              Compute second-order values for current group.
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+          DO 203 J=1,ILNGTH
+C
+            KDATA(ICOUNB+J)=KDATA(ICOUNT+J)-IREFER
+C
+  203     CONTINUE
+C
+          IF (IWIDTH.NE.IPRWID) THEN
+C
+C             Current group may not be blocked with previous one(s).
+C
+            IF (ILNGTS.NE.0) THEN
+C
+C               Closes current block.
+C
+              IBLOCK=IBLOCK+1
+              KBITGR(IBLOCK)=IPRWID
+              KWORK(IBLOCK)=ILNGTS
+              ILNGTS=0
+C
+            ENDIF
+C
+            IPRWID=IWIDTH
+C
+          ENDIF
+C
+          ICOUNB=ICOUNB+ILNGTH
+          ILNGTS=ILNGTS+ILNGTH
+C
+        ENDIF
+C
+        ICOUNT=ICOUNT+ILNGTH
+C
+  204 CONTINUE
+C
+      IF (IPRWID.NE.0.AND.ILNGTS.NE.0) THEN
+C
+C           Closing last block of group(s).
+C
+        IBLOCK=IBLOCK+1
+        KBITGR(IBLOCK)=IPRWID
+        KWORK(IBLOCK)=ILNGTS
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3. Packs second-order values.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      ILBITS=0
+      ICOUNB=0
+      ILNGTS=0
+C
+      IF (OROW.OR..NOT.OVECTA) THEN
+C
+C           For such a case, granularity is large enough to make one
+C           INXBIT call per block of group(s).
+C
+        DO 311 JBLOCK=1,IBLOCK
+C
+          ILNGTH=KWORK(JBLOCK)
+          IWIDTH=KBITGR(JBLOCK)
+#ifdef ebug2o
+          PRINT *,'c2pkvw - block',JBLOCK,
+     X              ' KNSPT/IWIDTH/ICOUNB/ILNGTH = ',
+     X                KNSPT, IWIDTH, ICOUNB, ILNGTH
+#endif
+          CALL INXBIT(KGRIB,KLENG,KNSPT,KDATA(ICOUNB+1),ILNGTH,KBITS,
+     X                IWIDTH,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 24310
+            WRITE(GRPRSM,FMT=9310) 'block', JBLOCK, ILNGTH, IWIDTH
+            GO TO 900
+          ENDIF
+C
+          ICOUNB=ICOUNB+ILNGTH
+C
+  311   CONTINUE
+C
+      ELSE
+C
+C       Granularity is generally small. Except for very big groups,
+C       split 2nd-order values into individual bits, blocked into
+C       KREFGR work array, that is flushed when full.
+C
+C
+        DO 399 JBLOCK=1,IBLOCK
+C
+          ILNGTH=KWORK(JBLOCK)
+          IWIDTH=KBITGR(JBLOCK)
+C
+          IF ((ILBITS+ILNGTH*IWIDTH).GT.KLWORK.AND.ILBITS.NE.0) THEN
+C
+C             Work array of split bits has to be flushed. Pack it.
+C
+#ifdef ebug2o
+            PRINT *,'c2pkvw - blocks..',JBLOCK-1,
+     X              ' KNSPT/ILBITS = ',
+     X                KNSPT, ILBITS
+#endif
+            CALL INXBIT(KGRIB,KLENG,KNSPT,KREFGR,ILBITS,KBITS,
+     X                  1,YOPER,IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 24320
+              WRITE(GRPRSM,FMT=9320) JBLOCK-1, ILBITS
+              GO TO 900
+            ENDIF
+C
+            ILBITS=0
+C
+          ENDIF
+C
+          IF ((ILNGTH*IWIDTH).GT.KLWORK) THEN
+C
+C             Current block is too large to fit into KREFGR.
+C             Pack it straightforward, without intermediate splitting.
+C
+#ifdef ebug2o
+            PRINT *,'c2pkvw - BLOCK',JBLOCK,
+     X              ' KNSPT/IWIDTH/ICOUNB/ILNGTH = ',
+     X                KNSPT, IWIDTH, ICOUNB, ILNGTH
+#endif
+            CALL INXBIT(KGRIB,KLENG,KNSPT,KDATA(ICOUNB+1),ILNGTH,KBITS,
+     X                  IWIDTH,YOPER,IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 24320
+              WRITE(GRPRSM,FMT=9310) 'BLOCK', JBLOCK, ILNGTH, IWIDTH
+              GO TO 900
+            ENDIF          
+C
+          ELSE
+C
+C             Split current block into individual bits, stored into
+C             array KREFGR (one bit per index value).
+C
+C             Start processing by "full" packets of 7-bit wide.
+C             (even if 7-bit wide, last packet is processed separately).
+C
+            INTERM=(IWIDTH-1)/7
+            IWIDPR=0
+C
+            DO 322 JTIMES=1,INTERM
+C
+              IOFF=ILBITS+IWIDPR
+              IWIDPR=IWIDPR+7
+              IPOWER=KPOWER(IWIDTH-IWIDPR)+1
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 321 J=1,ILNGTH
+C
+                IDATA=KDATA(ICOUNB+J)/IPOWER
+                KDATA(ICOUNB+J)=KDATA(ICOUNB+J)-IPOWER*IDATA
+                IBIT=IDATA/64
+                KREFGR(IOFF+1)=IBIT
+                IDATA=IDATA-64*IBIT
+                IBIT=IDATA/32
+                KREFGR(IOFF+2)=IBIT
+                IDATA=IDATA-32*IBIT
+                IBIT=IDATA/16
+                KREFGR(IOFF+3)=IBIT
+                IDATA=IDATA-16*IBIT
+                IBIT=IDATA/8
+                KREFGR(IOFF+4)=IBIT
+                IDATA=IDATA-8*IBIT
+                IBIT=IDATA/4
+                KREFGR(IOFF+5)=IBIT
+                IDATA=IDATA-4*IBIT
+                IBIT=IDATA/2
+                KREFGR(IOFF+6)=IBIT
+                KREFGR(IOFF+7)=IDATA-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  321         CONTINUE
+C
+  322       CONTINUE
+C
+C             Now process last packet of bits (least significant ones).
+C             No more use to restore KDATA.
+C
+            IOFF=ILBITS+IWIDPR
+            IPRWID=IWIDTH-IWIDPR
+C
+            IF (IPRWID.EQ.7) THEN
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 323 J=1,ILNGTH
+C
+                IBIT=KDATA(ICOUNB+J)/64
+                KREFGR(IOFF+1)=IBIT
+                IDATA=KDATA(ICOUNB+J)-64*IBIT
+                IBIT=IDATA/32
+                KREFGR(IOFF+2)=IBIT
+                IDATA=IDATA-32*IBIT
+                IBIT=IDATA/16
+                KREFGR(IOFF+3)=IBIT
+                IDATA=IDATA-16*IBIT
+                IBIT=IDATA/8
+                KREFGR(IOFF+4)=IBIT
+                IDATA=IDATA-8*IBIT
+                IBIT=IDATA/4
+                KREFGR(IOFF+5)=IBIT
+                IDATA=IDATA-4*IBIT
+                IBIT=IDATA/2
+                KREFGR(IOFF+6)=IBIT
+                KREFGR(IOFF+7)=IDATA-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  323         CONTINUE
+C
+            ELSEIF (IPRWID.EQ.6) THEN
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 324 J=1,ILNGTH
+C
+                IBIT=KDATA(ICOUNB+J)/32
+                KREFGR(IOFF+1)=IBIT
+                IDATA=KDATA(ICOUNB+J)-32*IBIT
+                IBIT=IDATA/16
+                KREFGR(IOFF+2)=IBIT
+                IDATA=IDATA-16*IBIT
+                IBIT=IDATA/8
+                KREFGR(IOFF+3)=IBIT
+                IDATA=IDATA-8*IBIT
+                IBIT=IDATA/4
+                KREFGR(IOFF+4)=IBIT
+                IDATA=IDATA-4*IBIT
+                IBIT=IDATA/2
+                KREFGR(IOFF+5)=IBIT
+                KREFGR(IOFF+6)=IDATA-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  324         CONTINUE
+C
+            ELSEIF (IPRWID.EQ.5) THEN
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 325 J=1,ILNGTH
+C
+                IBIT=KDATA(ICOUNB+J)/16
+                KREFGR(IOFF+1)=IBIT
+                IDATA=KDATA(ICOUNB+J)-16*IBIT
+                IBIT=IDATA/8
+                KREFGR(IOFF+2)=IBIT
+                IDATA=IDATA-8*IBIT
+                IBIT=IDATA/4
+                KREFGR(IOFF+3)=IBIT
+                IDATA=IDATA-4*IBIT
+                IBIT=IDATA/2
+                KREFGR(IOFF+4)=IBIT
+                KREFGR(IOFF+5)=IDATA-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  325         CONTINUE
+C
+            ELSEIF (IPRWID.EQ.4) THEN
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 326 J=1,ILNGTH
+C
+                IBIT=KDATA(ICOUNB+J)/8
+                KREFGR(IOFF+1)=IBIT
+                IDATA=KDATA(ICOUNB+J)-8*IBIT
+                IBIT=IDATA/4
+                KREFGR(IOFF+2)=IBIT
+                IDATA=IDATA-4*IBIT
+                IBIT=IDATA/2
+                KREFGR(IOFF+3)=IBIT
+                KREFGR(IOFF+4)=IDATA-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  326         CONTINUE
+C
+            ELSEIF (IPRWID.EQ.3) THEN
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 327 J=1,ILNGTH
+C
+                IBIT=KDATA(ICOUNB+J)/4
+                KREFGR(IOFF+1)=IBIT
+                IDATA=KDATA(ICOUNB+J)-4*IBIT
+                IBIT=IDATA/2
+                KREFGR(IOFF+2)=IBIT
+                KREFGR(IOFF+3)=IDATA-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  327         CONTINUE
+C
+            ELSEIF (IPRWID.EQ.2) THEN
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 328 J=1,ILNGTH
+C
+                IBIT=KDATA(ICOUNB+J)/2
+                KREFGR(IOFF+1)=IBIT
+                KREFGR(IOFF+2)=KDATA(ICOUNB+J)-2*IBIT
+                IOFF=IOFF+IWIDTH
+C
+  328         CONTINUE
+C
+            ELSE
+C
+              DO 329 J=1,ILNGTH
+C
+                KREFGR(IOFF+1)=KDATA(ICOUNB+J)
+                IOFF=IOFF+IWIDTH
+C
+  329         CONTINUE
+C
+            ENDIF
+C
+            ILBITS=ILBITS+ILNGTH*IWIDTH
+C
+          ENDIF
+C
+          ICOUNB=ICOUNB+ILNGTH
+C
+  399   CONTINUE
+C
+        IF (ILBITS.NE.0) THEN
+C
+C             Last flush for work array of split bits. Pack it.
+C
+#ifdef ebug2o
+          PRINT *,'c2pkvw - blocks..',IBLOCK,
+     X            ' KNSPT/ILBITS = ',
+     X              KNSPT, ILBITS
+#endif
+          CALL INXBIT(KGRIB,KLENG,KNSPT,KREFGR,ILBITS,KBITS,
+     X                1,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 24320
+            WRITE(GRPRSM,FMT=9320) IBLOCK, ILBITS
+            GO TO 900
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      KCOUNT=ICOUNT
+      C2PKVW = IRETFN
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' C2PKVW: Function start, KNSPT =',I10,'.')
+C
+ 9310 FORMAT (' C2PKVW: Problem inserting 2nd-order values, ',A,I7,
+     S        ',',I6,'*',I2,' bits.')
+C
+ 9320 FORMAT (' C2PKVW: Problem inserting 2nd-order values, blocks..',
+     S        I7,',',I9,' bits.')
+C
+ 9900 FORMAT (' C2PKVW: Function return code =',I6,', KNSPT =',I10,'.')
+C
+      END
diff --git a/gribex/c2rnge.F b/gribex/c2rnge.F
new file mode 100755
index 0000000..9667595
--- /dev/null
+++ b/gribex/c2rnge.F
@@ -0,0 +1,161 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2RNGE ( KNPACK, KPKLEN, KXBITS, KDATA,  KDIAGO,
+     X                          KWIDTH, KREFER, KPOWER, KMXPWR, KPCWID,
+     X                          KXCWID )
+C
+C---->
+C**** C2RNGE
+C
+C     Purpose.
+C     --------
+C
+C     Utility to assist computing of range diagnostics for spatial
+C     differencing.
+C
+C**   Interface.
+C     ----------
+C
+C     IOFF = C2RNGE ( KNPACK, KPKLEN, KXBITS, KDATA, KDIAGO, KWIDTH,
+C    X                KREFER, KPOWER, KMXPWR, KPCWID, KXCWID )
+C
+C     Function result value is the number of values processed within
+C     KDATA during call.
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KNPACK     - Number of packets to process.
+C     KPKLEN     - Length of packets.
+C     KXBITS     - MaXimum number of BITS estimated.
+C     KDATA      - Array containing values to process.
+C     KDIAGO     - Diagnostic of cumulated ranges.
+C     KWIDTH     - Width of packets.
+C     KREFER     - Reference value.
+C     KPOWER     - Auxilary array, precomputed (powers of 2)-1.
+C     KMXPWR     - Maximum number of bits per original scaled value.
+C     KPCWID     - Auxilary array, precomputed widths.
+C     KXCWID     - Maximum width associated to KPCWID.
+C
+C
+C     Output Parameters (updates).
+C     ------------------
+C
+C     KDIAGO     - Diagnostic of cumulated ranges.
+C     KWIDTH     - Width of packets.
+C     KREFER     - Reference value.
+C
+C
+C     Method.
+C     -------
+C
+C     Loop on packets for range diagnostics.
+C
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - February 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, June 1999.
+C     Use precomputed array to determine widths . Dummy-arguments
+C     KPCWID and KXCWID added . Assumption is made that KXCWID
+C     is at least (KMXPWR+1)/2 .
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KNPACK, KPKLEN, KXBITS, KDIAGO, KWIDTH, KREFER, KMXPWR
+      INTEGER KXCWID
+      INTEGER KPOWER (0:KMXPWR), KDATA (*), KPCWID (0:*)
+C
+C     Local variables.
+C
+      INTEGER IOFF, J, J2, IMAX, IMIN, IRANGE, IPOWER, IWIDTH, ILCWID
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Direct computing.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IOFF = 0
+      ILCWID = KPOWER(KXCWID)+1
+C
+      DO 104 J2=1,KNPACK
+C
+      IMAX=KDATA(IOFF+1)
+      IMIN=KDATA(IOFF+1)
+C
+      DO 101 J=2,KPKLEN
+      IMAX=MAX (IMAX,KDATA(IOFF+J))
+      IMIN=MIN (IMIN,KDATA(IOFF+J))
+  101 CONTINUE
+C
+      IRANGE=IMAX-IMIN
+C
+      IF (IRANGE.LT.ILCWID) THEN
+        IWIDTH=KPCWID(IRANGE)
+      ELSE
+        IWIDTH=KXCWID+KPCWID(IRANGE/ILCWID)
+      ENDIF
+C
+      IPOWER=KPOWER(IWIDTH)
+C
+      KDIAGO=KDIAGO+KPKLEN*IWIDTH
+      KWIDTH=MAX (KWIDTH,IWIDTH)
+      KREFER=MAX (KREFER,IMIN-(IPOWER-IRANGE))
+      IOFF=IOFF+KPKLEN
+C
+  104 CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      C2RNGE = IOFF
+C
+      RETURN
+C
+      END
diff --git a/gribex/c2rows.F b/gribex/c2rows.F
new file mode 100755
index 0000000..ae39c4d
--- /dev/null
+++ b/gribex/c2rows.F
@@ -0,0 +1,464 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION C2ROWS ( KDATA,  KLENP,  KSEC2,  KSEC4,  KGRIB,
+     X                          KLENG,  KNSPT,  KBITS,  OCOMGR, OLONLY,
+     X                          KLEN4,  KBMAP,  KVALS,  OPRIBI, OQUASI,
+     X                          KNROWS, KLEN,   KREFGR, KLENGR, KBITGR,
+     X                          KWORK,  KLWORK, KPOWER, KMXPWR, KPCWID,
+     X                          KXCWID, KNBIFO, ODEBUG )
+C
+C---->
+C**** C2ROWS
+C
+C     Purpose.
+C     --------
+C
+C     Performs "row by row packing" method for section 4 of GRIB,
+C     and/or computes only length of section 4, with/without coding,
+C     with this method.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = C2ROWS ( KDATA,  KLENP,  KSEC2,  KSEC4,  KGRIB,  KLENG,
+C    X                KNSPT,  KBITS,  OCOMGR, OLONLY, KLEN4,  KBMAP,
+C    X                KVALS,  OPRIBI, OQUASI, KNROWS, KLEN,   KREFGR,
+C    X                KLENGR, KBITGR, KWORK,  KLWORK, KPOWER, KMXPWR,
+C    X                KPCWID, KXCWID, KNBIFO, ODEBUG )
+C
+C
+C     Input Parameters for all options.
+C     --------------------------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC2      - Array of GRIB section 2 integer descriptors.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C     KGRIB      - Array containing GRIB product (for bit-map).
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     OCOMGR     - True if COMputing of GRoup arrays is requested.
+C     OLONLY     - True if Length ONLY is requested (no coding).
+C     KBMAP      - Bit pointer for start of explicit primary Bit-MAP
+C                  (if any).
+C     KVALS      - Number of bits in primary bit-map.
+C     OPRIBI     - True if a PRImary BIt-map is present.
+C     OQUASI     - True if the grid is QUASI-regular.
+C     KNROWS     - Number of ROWS (or lines) in the grid.
+C     KLEN       - Exact number of grid-points to handle.
+C     KLWORK     - Length of work array KWORK.
+C     KPOWER     - Auxilary array, containing precomputed powers of 2-1.
+C     KMXPWR     - Maximum number of bits per original scaled value.
+C     KPCWID     - Auxilary array, precomputed widths.
+C     KXCWID     - Maximum width associated to KPCWID.
+C     ODEBUG     - True for some debug printout.
+C
+C
+C     Output Parameters for all options.
+C     ---------------------------------
+C
+C     KLEN4      - Length of section 4.
+C
+C     Output Parameters when OLONLY is false.
+C     --------------------------------------
+C
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C                  (for second-order descriptors)
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product (updated).
+C     KWORK      - Used as work array by C2PACK.
+C
+C     Output Parameters when OCOMGR is true.
+C     -------------------------------------
+C
+C     KWORK      - Work array, used to unpack a primary bit-map, if any.
+C
+C     Output Parameters when OCOMGR is true,
+C      Input Parameters when OCOMGR is false.
+C     --------------------------------------
+C
+C     KREFGR     - Work array, first-order values for each row.
+C     KLENGR     - Work array, effective length of each row.
+C     KBITGR     - Work array, bit number ("width") of each row.
+C     KNBIFO     - Number of BIts for coding First-Order values.
+C
+C     Output Parameters when OCOMGR is true,
+C      Input parameter in all cases.
+C     --------------------------------------
+C
+C     KDATA      - Used as work array by C2PACK.
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes.
+C
+C     If requested through OCOMGR, a first scan computes work arrays,
+C     bit number for coding first-order values and length of section 4.
+C
+C     If requested, coding is applied in a second scan, using
+C     descriptors computed in the first scan, possibly in a previous
+C     call.
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT    - Extract bits from GRIB product.
+C     MAXMNI    - Computes extrema of integer array.
+C     C2BITW    - Computes bit width of a positive integer value.
+C     C2PACK    - Encodes descriptors and data.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 
+C               in the GRIB product.
+C     On exit,  KNSPT points to the first unused bit of section 4,
+C               (or to the first bit of section 5, if unused bit count
+C                is zero) in the GRIB product.
+C
+C     KDATA is overwritten when coding is requested.
+C     This is coherent with GRIBEX.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, February 1998.
+C     Use C2BITW function for bit width computations.
+C
+C     J. Clochard, September 1998.
+C     Suppress KSEC1/KSEC3 dummy-arguments.
+C         "    KSEC1, add KWORK/KPOWER/KMXPWR argument in C2PACK call.
+C
+C     J. Clochard, June 1999.
+C     Use precomputed array to determine widths . Dummy-arguments
+C     KPCWID and KXCWID added . Assumption is made that KXCWID
+C     is at least (KMXPWR+1)/2 .
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KBMAP, KVALS, KLEN4, KNROWS
+      INTEGER KLEN, KLWORK, KMXPWR, KNBIFO, KXCWID
+      INTEGER KDATA (KLENP), KSEC2 (*), KSEC4 (*), KPCWID (0:*)
+      INTEGER KGRIB (KLENG), KREFGR (KNROWS), KLENGR (KNROWS)
+      INTEGER KBITGR (KNROWS), KWORK (KLWORK), KPOWER (0:KMXPWR)
+C
+      LOGICAL OPRIBI, OQUASI, OLONLY, OCOMGR, ODEBUG
+C
+C     Local variables.
+C
+      INTEGER IREFLN, ICOUNT, INBITI, INBIFO, ILENSO, ILDSTA, IZERO
+      INTEGER ILNGTX, ILNGTH, IPTRBM, INBSEQ, JROW, JSEQ, IPTOFF
+      INTEGER IPTNBR, IRET, J, IDMAX, IDMIN, ISOMAX, ILCWID
+      INTEGER IRETFN, IBITGW, IFOMAX
+C
+      INTEGER C2PACK, C2BITW
+      EXTERNAL C2PACK, C2BITW
+C
+      CHARACTER YOPER*1
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial checks.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) OCOMGR, OLONLY, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IRETFN = 0
+      ILCWID = KPOWER(KXCWID)+1
+      IREFLN=22
+      ICOUNT=0
+      INBITI=KSEC4(2)
+      IFOMAX=0
+      ILENSO=0
+      ILDSTA=21
+      IZERO=0
+      IBITGW=8
+      ILNGTX=KSEC4(1)/KNROWS
+C
+      IF (OPRIBI) THEN
+        IPTRBM=KBMAP
+      ENDIF
+C
+      IF (.NOT.OCOMGR) THEN
+C
+        IF (OLONLY) THEN
+          IRETFN = 19110
+          WRITE(GRPRSM,FMT=9110)
+          GOTO 900
+        ELSE
+          INBIFO=KNBIFO
+          GOTO 300
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Compute effective length, reference, width of rows.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9200)
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C
+      YOPER='D'
+C
+      DO 230 JROW=1,KNROWS
+C
+      IF (OQUASI) THEN
+        ILNGTX=KSEC2(IREFLN+JROW)
+      ENDIF
+C
+      IF (OPRIBI.AND.ILNGTX.NE.0) THEN
+C
+C         Row by row packing, but an (explicit) bit-map is included.
+C         The number of values in current row has to be computed.
+C
+        ILNGTH=0
+        INBSEQ=1+(ILNGTX-1)/KLWORK
+C
+        DO 212 JSEQ=1,INBSEQ
+        IPTOFF=(JSEQ-1)*KLWORK
+        IPTNBR=MIN (KLWORK,ILNGTX-IPTOFF)
+        CALL INXBIT (KGRIB,KLENG,IPTRBM,KWORK,IPTNBR,KBITS,1,
+     X               YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 19210
+          WRITE(GRPRSM,FMT=9210) JROW, IPTOFF+1, IPTOFF+IPTNBR
+          GOTO 900
+        ENDIF
+C
+        DO 211 J=1,IPTNBR
+        ILNGTH=ILNGTH+KWORK(J)
+  211   CONTINUE
+C
+  212   CONTINUE
+C
+      ELSE
+C
+        ILNGTH=ILNGTX
+C
+      ENDIF
+C
+      KLENGR(JROW)=ILNGTH
+C
+      IF (ILNGTH.NE.0) THEN
+C
+C     Width of row (number of bits necessary to code second-order
+C                   values).
+C
+        CALL MAXMNI (KDATA(ICOUNT+1),ILNGTH,IDMAX,IDMIN)
+C
+        ISOMAX=IDMAX-IDMIN
+C
+        IF (ISOMAX.LT.ILCWID) THEN
+          KBITGR(JROW)=KPCWID(ISOMAX)
+        ELSE
+          KBITGR(JROW)=KXCWID+KPCWID(ISOMAX/ILCWID)
+        ENDIF
+#ifdef row1sc2o
+C
+C     Take the minimum value of row as reference value.
+C     Consistant with Bracknell's encoder approach.
+C
+        KREFGR(JROW)=IDMIN
+#else
+C
+C     Maximum use of width for second-order values: the maximum value
+C     of row will be encoded with the biggest value fitting in
+C     KBITGR(JROW) bits, and keeping reference value positive or zero.
+C
+C     The goal is to get the lowest reference value, thus trying to
+C     save bit(s) to encode the first-order values.
+C
+        IF (KBITGR(JROW).NE.0) THEN
+          KREFGR(JROW)=MAX (0,IDMIN-(KPOWER(KBITGR(JROW))-ISOMAX))
+        ELSE
+          KREFGR(JROW)=IDMIN
+        ENDIF
+#endif
+C
+        IFOMAX=MAX (IFOMAX,KREFGR(JROW))
+        ICOUNT=ICOUNT+ILNGTH
+        ILENSO=ILENSO+ILNGTH*KBITGR(JROW)
+C
+      ELSE
+C
+        KREFGR(JROW)=0
+        KBITGR(JROW)=0
+C
+      ENDIF
+C
+#ifdef ebug2o
+      PRINT *,'c2rows - group', JROW, ILNGTH, KBITGR(JROW), ' (',
+     X KNSPT+8*(ILDSTA+(8+KNROWS*(IBITGW+KSEC4(2))-1)/8)+ILENSO, ')',
+     X IDMIN, ISOMAX, KREFGR(JROW), ICOUNT
+#endif
+C
+  230 CONTINUE
+C
+      IF (ICOUNT.NE.KLEN) THEN
+        IRETFN = 19220
+        WRITE(GRPRSM,FMT=9220) ICOUNT, KLEN
+        GOTO 900
+      ENDIF      
+C
+C     Number of bits necessary to code first-order values.
+C
+      INBIFO = C2BITW ( IFOMAX, INBITI, KPOWER, KMXPWR )
+C
+#ifdef row1sc2o
+C     To obtain an equivalent to a 1-scan coding, as Bracknell
+C     coder seems to do. Such a method is more direct, does not
+C     require work arrays, but is less efficient: row references are
+C     coded with the same number of bits as specified for packing.
+C
+      INBIFO=KSEC4(2)
+#endif
+C
+C     Compute length of descriptors, and of full section 4 of GRIB.
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9250) (KSEC4(J),J=1,10), INBIFO
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      KLEN4 = ILDSTA + (8+KNROWS*IBITGW-1)/8 + (8+KNROWS*INBIFO-1)/8
+     X               + (8+ILENSO-1)/8
+      KLEN4=2*((2+KLEN4-1)/2)
+      KNBIFO=INBIFO
+C
+      IF (OLONLY) THEN
+C
+C       Length has been computed, go back without any coding.
+C
+        GOTO 900
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3. Definition of fixed-length descriptors and coding.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     The first 10 octets have already been coded in GRIBEX, or will
+C     be in a further step of GRIBEX:
+C     Length of section, flags+unused bit count, binary scale factor,
+C     reference value.
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9300) 
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+C     Enforce right values for extended flags.
+C
+      KSEC4( 9)=0
+      KSEC4(10)=16
+      KSEC4(12)=0
+      KSEC4(13)=0
+C
+C     Extra descriptors.
+C
+      KSEC4(18)=KNROWS
+      KSEC4(20)=IBITGW
+C
+      IRETFN = C2PACK ( KDATA,  KLENP,  KSEC4,  KGRIB,  KLENG,  KNSPT,
+     X                  KBITS,  KLEN,   KREFGR, KLENGR, KBITGR, KWORK,
+     X                  KLWORK, KPOWER, KMXPWR, KNBIFO, ODEBUG )
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      C2ROWS = IRETFN
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, OCOMGR, OLONLY, KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' C2ROWS: Function start, OCOMGR = ',L1,
+     X        ', OLONLY = ',L1,', KNSPT =',I10,'.')
+C
+ 9110 FORMAT (' C2ROWS: Routine called, but has nothing to do.')
+C
+ 9200 FORMAT (' C2ROWS: Computing work arrays.')
+C
+ 9210 FORMAT (' C2ROWS: Problem unpacking primary bit-map,row',I6,
+     X        ' points ',I8,'..',I8,'.')
+C
+ 9220 FORMAT (' C2ROWS: Inconsistency: computed g.p. number =',I8,
+     X        ', expected =',I8,'.')
+C
+ 9250 FORMAT (' C2ROWS: KSEC4(1:10) =',I9,I3,I4,3I3,I2,3I3,
+     X        ', INBIFO =',I3,'.')
+C
+ 9300 FORMAT (' C2ROWS: Coding phase - calling C2PACK.')
+C
+ 9900 FORMAT (' C2ROWS: Function return code =',I6,', OCOMGR= ',L1,
+     X        ', OLONLY= ',L1,', KNSPT =',I10,'.')
+C
+      END
diff --git a/gribex/calcop.F b/gribex/calcop.F
new file mode 100755
index 0000000..e828c2c
--- /dev/null
+++ b/gribex/calcop.F
@@ -0,0 +1,292 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION CALCOP( PSPEC, KTRUNC, KSUBSP)
+C
+C---->
+C**** *CALCOP*  - linear fit of spectrum to (n*(n+1))**P
+C
+C     Purpose.
+C     --------
+C 
+C     GRIB allows for "complex packing" of spectral coeficients.
+C     This means that a sub-spectrum is not packed and, for the rest,
+C     a multiplying factor is applied before packing.  The factor is
+C     (n*(n+1))**p, where n is the total wave-number.
+C
+C     This routine returns an optimal P based on the field itself.
+C     
+C
+C**   Interface.
+C     ----------
+C     
+C     IP = CALCOP( PSPEC, KTRUNC, KSUBSP)
+C
+C
+C     Input arguments.
+C     ----------------
+C
+C     PSPEC   - spectral field
+C     KTRUNC  - spectral truncation of field
+C     KSUBSP  - truncation of "non-packed" sub-spectrum
+C
+C
+C     Output arguments.
+C     -----------------
+C
+C     The function return value is the integer value of P*1000.
+C     The value is constrained to be in the range (-10000, +10000).
+C                                
+C
+C     Method.
+C     -------
+C     
+C     Consider F(n,m) = (n*(n+1))**(-P) * G(n,m), where F(n,m) is the
+C     original spectral field and n the total wavenumber.  The aim
+C     is to minimize G in a 1 norm with respect to P.  This can only
+C     partially be achieved.
+C
+C     What we do is to to compute H(n), where
+C         H(n) = max(F(n,m))    with respect to m.
+C
+C     We then perform a least square fit for the equation
+C         log(H(n)) = beta0+beta1*log(n*(n+1)).
+C
+C     To ensure a better fit for the lower end of the spectrum, we
+C     apply an (arbitrary) weighting function before fitting
+C          W(n) = 1.0 / (n-KSUBSP+1)
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C     
+C     Seber, G.A.F. (1979). Linear Regression Analyses.
+C     John Wiley and Sons
+C
+C     ECMWF Research Department documentation of the IFS
+C
+C
+C     Author.
+C     -------
+C
+C     Mats Hamrud     ECMWF      5th May 1994
+C
+C
+C     Modifications.
+C     --------------
+C
+C     John Chambers   ECMWF      6th Sept 1994
+C     Add original field truncation as a parameter.
+C     Use GRIB ordering of spherical harmonic coefficients in input.
+C
+C     John Chambers   ECMWF      21st Nov 1994
+C     Use double precision intrinsics on VAX
+C
+C     Lubia Vinhas    ECMWF      9th Oct 1996
+C     Intrinsic function MAX in ALPHA platform needs
+C
+C----<
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      INTEGER JPTMAX
+      PARAMETER ( JPTMAX = 2047 )
+C                  
+C     JPTMAX is current maximum truncation value for input field
+C
+C     Subroutine arguments
+      REAL PSPEC
+      DIMENSION PSPEC(*)
+      INTEGER KTRUNC, KSUBSP
+C
+C     Local arguments
+      INTEGER ISMIN, ISMAX, INDEX, JN, JM
+#ifdef CRAY
+      REAL ZEPS, ZZ, ZXMW, ZYMW, ZWSUM, ZX, ZY, ZSUM1, ZSUM2
+      REAL ZP
+      REAL ZBETA1
+      REAL ZW(0:(JPTMAX+1)), ZNORM(0:(JPTMAX+1))
+#else
+      DOUBLE PRECISION ZEPS, ZZ, ZXMW, ZYMW, ZWSUM, ZX, ZY, ZSUM1, ZSUM2
+      DOUBLE PRECISION ZP
+      DOUBLE PRECISION ZBETA1
+      DOUBLE PRECISION ZW(0:(JPTMAX+1)), ZNORM(0:(JPTMAX+1))
+#endif
+C      
+C     ------------------------------------------------------------------
+C*    Section 1. Do initial setup and calulate the (arbitrary) weights.
+C     ------------------------------------------------------------------
+C
+ 100  CONTINUE
+C
+C     Check internal arrays can handle the truncation
+C
+      IF( KTRUNC.GT.JPTMAX ) THEN
+        WRITE(GRPRSM,*)
+     X    'CALCOP: Cannot use the given truncation ', KTRUNC
+        WRITE(GRPRSM,*) 'CALCOP: Maximum handled is ', JPTMAX
+        CALCOP = -99999
+        RETURN
+      ENDIF
+C
+      ISMIN = KSUBSP+1
+      ISMAX = KTRUNC+1
+      ZEPS  = 1.0E-15
+C
+C     Set up the weights.
+#ifdef IBM
+      ZZ = DBLE(ISMAX-ISMIN+1)
+#else
+      ZZ = REAL(ISMAX-ISMIN+1)
+#endif
+      DO 110 JN = ISMIN, ISMAX      
+#ifdef IBM
+        ZW(JN) = ZZ / DBLE(JN-ISMIN+1)
+#else
+        ZW(JN) = ZZ / REAL(JN-ISMIN+1)
+#endif
+ 110  CONTINUE
+C      
+C     ------------------------------------------------------------------
+C*    Section 2. Compute norms.
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+C     Initialise array to zero.
+      DO 210 JN = ISMIN, ISMAX
+        ZNORM(JN) = 0.0
+ 210  CONTINUE
+C
+C     Form norms.
+C     Handle values 2 at a time (real and imaginary parts)
+C
+C     First the rows affected by the subset
+      INDEX = -1
+      DO 230 JM = 0 , KSUBSP-1
+        DO 220 JN = JM , KTRUNC
+          INDEX = INDEX + 2
+          IF ( JN .GE. KSUBSP ) THEN
+#if defined (VAX) || defined (IBM) || defined (__alpha) || defined hpR64 || defined hpiaR64
+            ZNORM(JN) = MAX(ZNORM(JN), DBLE(ABS(PSPEC(INDEX))))
+            ZNORM(JN) = MAX(ZNORM(JN), DBLE(ABS(PSPEC(INDEX+1))))
+#else
+            ZNORM(JN) = MAX(ZNORM(JN), ABS(PSPEC(INDEX)))
+            ZNORM(JN) = MAX(ZNORM(JN), ABS(PSPEC(INDEX+1)))
+#endif
+          ENDIF
+  220   CONTINUE
+  230 CONTINUE
+C
+C     Next the rows not affected by the subset
+      DO 250 JM = KSUBSP , KTRUNC
+        DO 240 JN = JM , KTRUNC
+          INDEX = INDEX + 2
+#if defined (VAX) || defined (IBM) || defined (__alpha) || defined hpR64 || defined hpiaR64
+          ZNORM(JN) = DMAX1(ZNORM(JN), DBLE(ABS(PSPEC(INDEX))))
+          ZNORM(JN) = DMAX1(ZNORM(JN), DBLE(ABS(PSPEC(INDEX+1))))
+#else
+          ZNORM(JN) = MAX(ZNORM(JN), ABS(PSPEC(INDEX)))
+          ZNORM(JN) = MAX(ZNORM(JN), ABS(PSPEC(INDEX+1)))
+#endif
+  240   CONTINUE
+  250 CONTINUE
+C
+C     Ensure the norms have a value which is not too small in case of
+C     problems with math functions (e.g. LOG).
+C
+      DO 290 JN = ISMIN, ISMAX
+#if defined (VAX) || defined (IBM) || defined hpR64 || defined hpiaR64
+        ZNORM(JN) = DMAX1(ZNORM(JN), ZEPS)
+#else
+        ZNORM(JN) = MAX(ZNORM(JN), ZEPS)
+#endif
+        IF(ZNORM(JN).EQ.ZEPS) ZW(JN) = 100.*ZEPS
+ 290  CONTINUE     
+C      
+C     ------------------------------------------------------------------
+C*    Section 3. Do linear fit to find the slope (ZBETA1).
+C     ------------------------------------------------------------------
+C
+ 300  CONTINUE
+C
+      ZXMW  = 0.0
+      ZYMW  = 0.0
+      ZWSUM = 0.0
+C
+C     Sum the weighted X and Ys.
+      DO 310 JN = ISMIN, ISMAX
+#ifdef IBM
+        ZX    = LOG(DBLE(JN*(JN+1)))
+#else
+        ZX    = LOG(REAL(JN*(JN+1)))
+#endif
+        ZY    = LOG(ZNORM(JN))
+        ZXMW  = ZXMW+ZX*ZW(JN)
+        ZYMW  = ZYMW+ZY*ZW(JN)
+        ZWSUM = ZWSUM+ZW(JN)
+ 310  CONTINUE
+C
+C     Form mean weighted X and Y.
+      ZXMW  = ZXMW / ZWSUM
+      ZYMW  = ZYMW / ZWSUM
+      ZSUM1 = 0.0
+      ZSUM2 = 0.0
+C
+C     Perform a least square fit for the equation
+      DO 320 JN = ISMIN, ISMAX
+#ifdef IBM
+        ZX    = LOG(DBLE(JN*(JN+1)))
+#else
+        ZX    = LOG(REAL(JN*(JN+1)))
+#endif
+        ZY    = LOG(ZNORM(JN))
+        ZSUM1 = ZSUM1+ZW(JN)*(ZY-ZYMW)*(ZX-ZXMW)
+        ZSUM2 = ZSUM2+ZW(JN)*(ZX-ZXMW)**2
+ 320  CONTINUE
+C 
+C     Calculate the slope.
+      ZBETA1 = ZSUM1 / ZSUM2     
+C      
+C     ------------------------------------------------------------------
+C*    Section 9. Closedown.
+C     ------------------------------------------------------------------
+C
+ 900  CONTINUE
+C
+      ZP = -ZBETA1
+#ifdef CRAY
+      ZP = MAX(-9.999, MIN(9.999, ZP))
+#endif
+#if defined (VAX) || defined (IBM) || defined hpR64 || defined hpiaR64
+      ZP = DMAX1(-9.999D0, DMIN1(9.999D0, ZP))
+#endif
+#if !defined(VAX) && !defined(CRAY) && !defined(IBM)
+      ZP = MAX(-9.999D0, MIN(9.999D0, ZP))
+#endif
+C
+#ifdef IBM
+      CALCOP = IDINT( ZP * 1000.0 )
+#else
+      CALCOP = INT( ZP * 1000.0 )
+#endif
+C
+      RETURN
+      END
diff --git a/gribex/ccf1cr.F b/gribex/ccf1cr.F
new file mode 100755
index 0000000..88c76cb
--- /dev/null
+++ b/gribex/ccf1cr.F
@@ -0,0 +1,537 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CCF1CR (HEXP,HSTR,HDIS,HTYP,HREP,HLEV,HARE,HPER,HFIR,
+     C      HOWN,HBAK,HCLS,HFAM,HRUT,KPR,KRET)
+C
+C
+C---->
+C**** CCF1CR
+C
+C     PURPOSE.
+C     --------
+C
+C           CREATE REQUESTED NODES IN CFS FOR MARS ARCHIVING.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL CCF1CR (HEXP,HSTR,HDIS,HTYP,HREP,HLEV,HARE,HPER,HFIR,
+C    C      HOWN,HBAK,HCLS,HFAM,HRUT,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               HEXP       - 4 CHARACTER EXPERIMENT IDENTIFIER.
+C
+C               HSTR       - ARCHIVE STREAM.
+C                            FOR RESEARCH.
+C                               DA - DAILY ARCHIVE.
+C                            FOR OPERATIONS.
+C                               DA - DAILY ARCHIVE.
+C                               CH - CHERNOBYL ARCHIVE.
+C                               TG - TOGA ARCHIVE.
+C                               MO - MONTHLY.
+C
+C               HDIS       - NEW , NEW ENTRY REQUIRED.
+C                            OLD , DELETE OLD ENTRY BEFORE MAKING
+C                                  NEW ONE.
+C
+C               HTYP       - AN , ANALYSIS.
+C                            IA , INITIALISED ANALYSIS.
+C                            FG , FIRST GUESS.
+C                            FC , FORECAST.
+C                            EA , ERRORS IN ANALYSIS.
+C                            CL , CLIMATOLOGY.
+C
+C
+C               HREP       - SH , SPHERICAL HARMONICS.
+C                            GG , GAUSSIAN GRID.
+C                            LL , LAT/LONG GRID.
+C
+C               HLEV       - M , MODEL LEVELS.
+C                            P , PRESSURE LEVELS.
+C                            S , SURFACE.
+C
+C               HARE       - G , GLOBAL DATA.
+C
+C               HPER       - S , SHORT RETENTION PERIOD.
+C                            M , MEDIUM RETENTION PERIOD.
+C                            P , PERMANENT RETENTION.
+C
+C               HFIR       - DATE OF FIRST ARCHIVE (YYMMDD).
+C
+C               HOWN       - OWNER'S PASSWORD. 6 CHARACTERS FOR
+C                            RESEARCH EXPERIMENTS, 5 FOR OPERATIONS.
+C
+C               HBAK       - 0 , NO BACKUP NODES REQUIRED.
+C                            1 , 1 BACKUP OF NODES REQUIRED.
+C
+C               HCLS       - RD , RESEARCH DEPARTMENT.
+C                            OD , OPERATIONS DEPARTMENT.
+C
+C               HFAM       - N, NO FAMILY ATTRIBUTE IN NODES.
+C                            Y , FAMILY ATTRIBUTES IN NODES.
+C
+C               HRUT       - ROOT NODE TO BE USED.
+C                            FOR RESEARCH
+C                               P , PRODUCTION ROOT MARSR.
+C                               T , TEST ROOT MATSR.
+C                            FOR OPERATIONS
+C                               P , PRODUCTION ROOT MARST.
+C                               O , OLD PRODUCTION ROOT MARSO.
+C                               T , TEST ROOT MATST.
+C
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               KRET       - ERROR RETURN CODE.
+C                            0   , NO ERROR ENCOUNTERED.
+C                            1   , ERROR IN REMOVING OLD NODES.
+C                            2   , ERROR IN CREATING NEW NODES.
+C                            3   , ERROR IN ADDING VALIDATION ENTRIES.
+C                            4   , ERROR IN ADDING FAMILY ATTRIBUTE.
+C                            5   , ERROR IN PASSWORD.
+C                            6   , ATTEMPT TO DELETE OPERATIONAL NODE.
+C                            7   , EXPERIMENT IDENTIFIER NOT FOUR
+C                                  CHARACTERS.
+C                            8   , DATE OF FIRST ARCHIVE NOT 6 DIGITS.
+C
+C     METHOD.
+C     -------
+C
+C           ROOT NODES ARE ASSUMED TO EXIST. CACHE NODES CREATED
+C           AUTOMATICALLY, BACKUP NODES IF REQUIRED.
+C           DELETION OF OPERATIONAL NODES IS PROHIBITED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           ECFILE
+C
+C     REFERENCE.
+C     ----------
+C
+C           MARS DESIGN NOTE 30. FILE 460 24.03.88.
+C
+C     COMMENTS.
+C     ---------
+C
+C           ROUTINE CONTAINS SECTIONS 0 TO 4 AND SECTION 9.
+C           ADDITION OF FAMILY ATTRIBUTE NOT POSSIBLE IN FIRST VERSION.
+C
+C     AUTHOR.
+C     -------
+C
+C           J. HENNESSY      ECMWF      28:06:89.
+C
+C     MODIFICATIONS
+C     --------------
+C
+C           NONE.
+C
+C----<
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+C
+      CHARACTER*4  HEXP
+      CHARACTER*2  HSTR
+      CHARACTER*4  HDIS
+      CHARACTER*4  HTYP
+      CHARACTER*4  HREP
+      CHARACTER*4  HLEV
+      CHARACTER*4  HARE
+      CHARACTER*1  HPER
+      CHARACTER*6  HFIR
+      CHARACTER*6  HOWN
+      CHARACTER*1  HBAK
+      CHARACTER*2  HCLS
+      CHARACTER*1  HFAM
+      CHARACTER*1  HRUT
+C
+      CHARACTER*36 YLINE
+C
+      CHARACTER*160 YREQ
+C
+      CHARACTER*6  YNODE1
+      CHARACTER*3  YNODE2
+      CHARACTER*5  YNODE3
+      CHARACTER*5  YNODE4
+      CHARACTER*5  YNODE5
+C
+      DIMENSION IREASON(3)
+C
+      DIMENSION YLINE(3)
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK PARAMETERS.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'CCF1CR : SECTION 1.'
+C
+      KRET = 0
+C
+C*    CHECK THAT EXPERIMENT OR STREAM IDENTIFIER IS 4 CHARACTERS LONG.
+C
+      I = INDEX (HEXP,' ')
+      IF (I.NE.0)
+     C   THEN
+             KRET = 7
+             WRITE (*,9006) HEXP
+             GO TO 9000
+         ENDIF
+C
+C*    CHECK THAT FIRST ARCHIVE DATE CONSISTS OF 6 DIGITS.
+C
+      I = INDEX (HFIR,' ')
+      IF (I.NE.0)
+     C   THEN
+             KRET = 8
+             WRITE (*,9007) HFIR
+             GO TO 9000
+         ENDIF
+C
+C
+C*    FOR COMPATIBILITY WITH PREVIOUS USER INTERFACE A FEW DEFAULT
+C     VALUES HAVE TO BE SET UP, WHEN NONE ARE PROVIDED.
+C
+      IF (HCLS.EQ.'  ') HCLS = 'RD'
+      IF (HFAM.EQ.' ')  HFAM = 'N'
+      IF (HCLS.EQ.'RD') HFAM = 'N'
+      IF (HCLS.EQ.'RD') HSTR = 'DA'
+      IF (HRUT.EQ.' ')  HRUT = 'P'
+C
+C
+C     CHECK THAT OWNER'S PASSWORD IS CORRECT LENGTH ( 5 FOR OPERATIONS
+C     6 FOR RESEARCH).
+C
+      IL = INDEX (HOWN,' ')
+      IF (IL.EQ.6) IL = 5
+      IF (IL.EQ.0) IL = 6
+      IF (IL.EQ.5.AND.HCLS.NE.'OD') KRET = 5
+      IF (IL.EQ.6.AND.HCLS.NE.'RD') KRET = 5
+      IF (KRET.EQ.5)
+     C   THEN
+             WRITE (*,9008) HOWN
+             GO TO 9000
+         ENDIF
+C
+C*    RESEARCH ARCHIVE IS DAILY ARCHIVE ONLY. OPERATIONAL ARCHIVES
+C     HAVE SEVERAL STREAMS, WHICH ARE USED TO MAKE UP CFS PATHNAME,
+C     IN THE SAME NODE AS THE RESEARCH EXPERIMENT IDENTIFIER.
+C
+      IF (HCLS.EQ.'OD')
+     C   THEN
+             HEXP = 'OPER'
+             IF (HSTR.EQ.'CH') HEXP = 'CHER'
+             IF (HSTR.EQ.'TG') HEXP = 'TOGA'
+         ENDIF
+C
+C*    SET UP VALUES FOR FIRST 5 NODES EG MARSR/FC/EXPV/SPGS/1989.
+C
+C     NODE 1.
+C
+      IF (HCLS.EQ.'RD'.AND.HRUT.EQ.'P') YNODE1 = '/MARSR'
+      IF (HCLS.EQ.'RD'.AND.HRUT.EQ.'T') YNODE1 = '/MATSR'
+C
+      IF (HCLS.EQ.'OD'.AND.HRUT.EQ.'T') YNODE1 = '/MATST'
+      IF (HCLS.EQ.'OD'.AND.HRUT.EQ.'O') YNODE1 = '/MARSO'
+      IF (HCLS.EQ.'OD'.AND.HRUT.EQ.'P') YNODE1 = '/MARST'
+C
+C     NODE 2.
+C
+      YNODE2 = '/'//HTYP(1:2)
+C
+C     NODE 3.
+C
+      YNODE3 = '/'//HEXP
+C
+C     NODE 4.
+C
+      YNODE4 = '/'//HREP(1:1)//HLEV(1:1)//HARE(1:1)//HPER
+C
+C     NODE 5.
+C
+      YNODE5 = '/19'//HFIR(1:2)
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . REMOVE ANY EXISTING NODES AND FILES, IF REQUIRED.
+C     ----------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'CCF1CR : SECTION 2.'
+C
+      IF (HDIS(1:1).EQ.'O')
+     C   THEN
+C
+C*           REMOVAL OF OPERATIONAL NODES AND FILES NOT ALLOWED.
+C
+             IF (HCLS.EQ.'OD'.AND.(HRUT.EQ.'P'.OR.HRUT.EQ.'O'))
+     C          THEN
+                    KRET = 6
+                    WRITE (*,9004)
+                    GO TO 9000
+                ENDIF
+C
+             YTEMP = 'REMOVE'
+             CALL LDC1CR (YTEMP,HOWN(1:IL),HEXP,HTYP,HCLS,HSTR,HRUT,
+     C                     KPR,IRC)
+C
+C            IGNORE RETURN CODE FOR EXPERIMENT DOES NOT EXIST.
+C
+             IF (IRC.GT.1)
+     C          THEN
+                    KRET = 1
+                    WRITE (*,9005)
+                    GO TO 9000
+                ENDIF
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 3 . CREATE NODE (AND BACKUP NODES IF REQUIRED).
+C     ----------------------------------------------------------------
+C
+ 3000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'CCF1CR : SECTION 3.'
+C
+      DO 3900 J3900 = 1 , 4
+C
+C*    IF FIRST TIME THROUGH SET UP /ROOT/TYPE NODES.
+C
+      IF (J3900.EQ.1)
+     C   THEN
+             YLINE(1) = YNODE1//YNODE2//','
+             YLINE(2) = '/CACHE'//YNODE1//YNODE2//','
+             YLINE(3) = '/MARSBACKUP'//YNODE1//YNODE2//','
+         ENDIF
+C
+C*    IF SECOND TIME THROUGH SET UP /ROOT/TYPE/EXPVER NODES.
+C
+      IF (J3900.EQ.2)
+     C   THEN
+             YLINE(1) = YNODE1//YNODE2//YNODE3//','
+             YLINE(2) = '/CACHE'//YNODE1//YNODE2//YNODE3//','
+             YLINE(3) = '/MARSBACKUP'//YNODE1//YNODE2//YNODE3//','
+         ENDIF
+C
+C*    IF THIRD TIME THROUGH SET UP /ROOT/TYPE/EXPVER/DESCRIPTOR NODES.
+C
+      IF (J3900.EQ.3)
+     C   THEN
+             YLINE(1) = YNODE1//YNODE2//YNODE3//YNODE4//','
+             YLINE(2) = '/CACHE'//YNODE1//YNODE2//YNODE3//YNODE4//','
+             YLINE(3) = '/MARSBACKUP'//YNODE1//YNODE2//YNODE3//YNODE4
+     C                     //','
+         ENDIF
+C
+C*    IF FOURTH TIME THROUGH SET UP /ROOT/TYPE/EXPVER/DESCRIPTOR/YEAR
+C     NODES.
+C
+      IF (J3900.EQ.4)
+     C   THEN
+             YLINE(1) = YNODE1//YNODE2//YNODE3//YNODE4//YNODE5//','
+             YLINE(2) = '/CACHE'//YNODE1//YNODE2//YNODE3//YNODE4
+     C                     //YNODE5//','
+             YLINE(3) = '/MARSBACKUP'//YNODE1//YNODE2//YNODE3//YNODE4
+     C                     //YNODE5//','
+         ENDIF
+C
+C
+      J = 0
+C
+ 3100 CONTINUE
+C
+      J = J + 1
+      I = INDEX (YLINE(J),',')
+      YREQ = 'FN=ADD,NA,PATH='//YLINE(J)(1:I)//'UVAL=UV1/WMB/'
+     C          //HOWN(1:IL)//'/S.'
+      IF (KPR.EQ.1) WRITE (*,9003) YREQ
+      CALL ECFILE (IERR,IREASON,YREQ)
+C
+C     TRAP RETURN CODES FOR NODE ALREADY EXISTS.
+C
+      IF (IERR .EQ. 9.
+     C   AND.IREASON(1).EQ.1.
+     C   AND.IREASON(2).EQ.2.
+     C   AND.IREASON(3).EQ.12) GO TO 3300
+C
+      IF (IERR.NE.0)
+     C   THEN
+             WRITE (*,9001) IERR , IREASON
+             WRITE (*,9003) YREQ
+             KRET = 2
+             GO TO 9000
+         ENDIF
+C
+C     ADD VALIDATION ENTRY.
+C
+      YREQ = 'FN=MODIFY,PW='//HOWN(1:IL)//',NA,PATH='//YLINE(J)(1:I)//
+     C             'AVAL=PUB/IR/-/S.'
+      IF (KPR.EQ.1) WRITE (*,9003) YREQ
+      CALL ECFILE (IERR,IREASON,YREQ)
+C
+C     TRAP RETURN CODES FOR ENTRY ALREADY EXISTS.
+C
+      IF (IERR .EQ. 9.
+     C   AND.IREASON(1).EQ.1.
+     C   AND.IREASON(2).EQ.115.
+     C   AND.IREASON(3).EQ.5) GO TO 3300
+C
+      IF (IERR.NE.0)
+     C   THEN
+             WRITE (*,9002) IERR , IREASON
+             WRITE (*,9003) YREQ
+             KRET = 3
+             GO TO 9000
+         ENDIF
+C
+ 3300 CONTINUE
+C
+C     CREATE CACHE NODES.
+C
+      IF (J.LT.2) GO TO 3100
+C
+C     CREAT BACKUP NODES IF REQUIRED.
+C
+      IF (HBAK.EQ.'1'.AND.J.EQ.2) GO TO 3100
+C
+ 3900 CONTINUE
+C
+C    ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 4 . ADD FAMILY ATTRIBUTES.
+C    ----------------------------------------------------------------
+C
+ 4000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'CCF1CR : SECTION 4.'
+C
+      IF (HFAM.EQ.'Y')
+     C   THEN
+             KRET = 4
+             WRITE (*,*) 'CCF1CR : FAMILY ATTRIBUTES NOT IMPLEMENTED.'
+             GO TO 9000
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'CCF1CR : SECTION 9.'
+C
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'CCF1CR : NODE CREATION ERROR. FAILURE CODE = ',I3,
+     C            ' , REASON CODES = ',3I6,' .')
+C
+ 9002 FORMAT (1H ,'CCF1CR : VALIDATION ENTRY. FAILURE CODE = ',I3,
+     C            ' , REASON CODES = ',3I6,' .')
+C
+ 9003 FORMAT (1H ,A)
+C
+ 9004 FORMAT (1H ,'CCF1CR : OPERATIONAL NODE DELETION ILLEGAL.')
+C
+ 9005 FORMAT (1H ,'CCF1CR : DELETION OF OLD NODES/FILES FAILED.')
+C
+ 9006 FORMAT (1H ,'CCF1CR : EXPERIMENT IDENTIFIER NOT 4 CHARACTERS - ',
+     C             A)
+C
+ 9007 FORMAT (1H ,'CCF1CR : FIRST ARCHIVE DATE NOT 6 DIGITS - ',A)
+C
+ 9008 FORMAT (1H ,'CCF1CR : OWNER (PASSWORD) INVALID - ',A)
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/cgsloop.c b/gribex/cgsloop.c
new file mode 100755
index 0000000..6044f35
--- /dev/null
+++ b/gribex/cgsloop.c
@@ -0,0 +1,124 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/**************************************************************************
+.TITLE    ECMWF Utility
+.NAME     GRIBEX
+.SECTION  L
+.AUTHOR   Otto Pesonen
+.DATE     05-JUN-1996 / 05-JUN-1996 / OP
+.VERSION  1.0
+.LANGUAGE ANSI-C
+.FILE     cgsloop.c
+.OS       FUJITSU
+*
+*  Vector loops of gsbite.f coded in C
+*
+*  C has unsigned datatypes
+*
+************************************o*************************************/
+
+#include <stdio.h>
+
+#pragma global noalias
+#pragma global novrec
+
+gsdecode_(
+  unsigned int *in,
+  unsigned int *out,
+  int *ist_, int *ost_, int *len_, unsigned int *mask_, int *ish_)
+{
+  int oidx = 0;
+  int iidx = 0;
+
+           int ist  = *ist_;
+           int ost  = *ost_; 
+           int len  = *len_;
+  unsigned int mask = *mask_;
+           int ish  = *ish_;
+
+  int factor;
+
+  if( ish < 0 )
+  { 
+    ish = (-ish);
+
+    factor = 1<<ish;
+
+#pragma loop novrec
+    for( ; len ; len-- )
+    {
+      out[oidx] = out[oidx] | (in[iidx] & mask) / factor;
+      oidx +=  ost;
+      iidx +=  ist;
+    }
+  }
+  else
+  {
+    factor = 1<<ish;
+
+#pragma loop novrec
+    for( ; len ; len-- )
+    {
+      out[oidx] = out[oidx] | (in[iidx] & mask) * factor;
+      oidx +=  ost;
+      iidx +=  ist;
+    }
+  }
+}
+
+gsencode_(
+  unsigned int *in,
+  unsigned int *out,
+  int *ist_, int *ost_, int *len_, unsigned int *mask_, int *ish_)
+{
+  int oidx = 0;
+  int iidx = 0;
+
+           int ist  = *ist_;
+           int ost  = *ost_; 
+           int len  = *len_;
+  unsigned int mask = *mask_;
+           int ish  = *ish_;
+
+  int factor;
+
+  ish = (-ish);
+
+  if( ish < 0 )
+  { 
+    ish = (-ish);
+
+    factor = 1<<ish;
+#pragma loop novrec
+    for( ; len ; len-- )
+    {
+      out[oidx] = ((in[iidx] / factor) & mask) |
+                  (out[oidx] & (~mask)) ;
+      oidx +=  ost;
+      iidx +=  ist;
+    }
+  }
+  else
+  {
+    factor = 1<<ish;
+
+#pragma loop novrec
+    for( ; len ; len-- )
+    {
+      out[oidx] = ((in[iidx] * factor) & mask) |
+                  (out[oidx] & (~mask)) ;
+      oidx +=  ost;
+      iidx +=  ist;
+    }
+  }
+}
+
diff --git a/gribex/cheknum.F b/gribex/cheknum.F
new file mode 100755
index 0000000..8fd7b6b
--- /dev/null
+++ b/gribex/cheknum.F
@@ -0,0 +1,65 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CHEKNUM (VALU,LVAL,NUM)
+C
+C---->
+C*
+C*    NAME      : CHEKNUM
+C*
+C*    FUNCTION  : CHECKS THAT A CHARACTER STRING CORRECTLY
+C*                REPRESENTS A NUMBER.
+C*
+C*    INPUT     : VALU = CHARACTER STRING TO BE CHECKED
+C*                LVAL = NUMBER OF CHARACTERS IN THIS STRING
+C*
+C*    OUTPUT    : NUM  = 0, IF STRING REPRESENTS A NUMBER.
+C*                       1, IF INVALID CHARACTER FOUND.
+C*
+C*       JOHN HENNESSY, ECMWF, 16TH APRIL 1985
+C
+C----<
+C     ---------------------------------------------------------------
+C
+      IMPLICIT INTEGER (A-Z)
+C
+      CHARACTER*(*) VALU
+      NUM = 0
+C
+C     CHECK ONE CHARACTER STRING FOR VALID DIGIT.
+C
+      IF (VALU(1:1).LT.'0'.OR.VALU(1:1).GT.'9') NUM=1
+      IF (LVAL.EQ.1)  RETURN
+C
+C     CHECK FOR SIGN OR DECIMAL POINT AS FIRST CHARACTER IN STRING.
+C
+      IF (VALU(1:1).EQ.'+') NUM = 0
+      IF (VALU(1:1).EQ.'-') NUM = 0
+      IF (VALU(1:1).EQ.'.') NUM = 0
+      IF (NUM.EQ.1) RETURN
+C
+      TOTAL = 1
+      POINT = 0
+      IF (VALU(1:1).EQ.'.') POINT = 1
+C
+      DO 100 I=2,LVAL
+         IF (VALU(I:I).EQ.'.') POINT = POINT + 1
+         IF (VALU(I:I).GE.'0'.AND.VALU(I:I).LE.'9')
+     C      TOTAL = TOTAL + 1
+  100 CONTINUE
+C
+      TOTAL = TOTAL + POINT
+      IF (VALU(1:1).EQ.'.') TOTAL = TOTAL - 1
+      IF (TOTAL.NE.LVAL) NUM = 1
+      IF (POINT.GT.1) NUM = 1
+C
+      RETURN
+      END
diff --git a/gribex/chktab2.F b/gribex/chktab2.F
new file mode 100755
index 0000000..1044fd6
--- /dev/null
+++ b/gribex/chktab2.F
@@ -0,0 +1,257 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION CHKTAB2 ( KSEC1,
+     X                           HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C---->
+C**** CHKTAB2
+C
+C     Purpose
+C     -------
+C
+C     Checks whether or not a parameter appears in a given code
+C     table 2 for WMO code FM 92-X Ext. GRIB (WMO standard, ECMWF local,
+C     or even local from another centre).
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = CHKTAB2(KSEC1, HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C     Input
+C     -----
+C
+C     KSEC1  - Section 1 values for a GRIB product.
+C
+C
+C     Output
+C     ------
+C
+C     HFIRST  - First line of descriptor:  MARS mnemonic
+C     HSECOND - Second line of descriptor: Parameter description
+C     HTHIRD  - Third line of descriptor:  Units for the parameter
+C     HFOURTH - Fourth line of descriptor: Description of units
+C
+C     Function return value is:
+C            0 - Parameter found in table
+C        20001 - No match found for the parameter number in the given table.
+C        20002 - Error opening the file holding the given table.
+C        20003 - Error finding an unused fortran unit number for reading table.
+C
+C
+C     Method
+C     ------
+C
+C     Use TAB2FIL to determine file name for code table.
+C
+C     Entry for each parameter in table has the format (without quotes):
+C        "......................"         Separator
+C        "051"                            Paramter number
+C        "MX2T24"                         MARS mnemonic
+C        "Max 2m temp"                    Parameter description
+C        "K"                              Units for the parameter
+C        "During previous 24 hours"       Further description
+C
+C     There is a termination "......................" line in the file
+C     and there may be lines of comment before the first parameter entry.
+C
+C     The current parameter definition file is kept open between calls.
+C
+C
+C     Externals
+C     ---------
+C     TAB2FIL - Builds code table 2 file name.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     March 1999
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Argument KSEC1 instead of KPARAM and KTABLE for replacement of
+C     LOCAL2K, and code tables management.
+C     Use TAB2FIL function for file name building.
+C
+C     _______________________________________________________
+C----<
+C
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMAXTB, JPDITB
+      PARAMETER ( JPROUTINE = 20000, JPMAXTB = 10, JPDITB = 256 )
+C
+C     Function arguments
+C
+      INTEGER KSEC1 (*)
+C
+      CHARACTER*(*) HFIRST, HSECOND, HTHIRD, HFOURTH
+C
+C     Local variables
+C
+      LOGICAL LNEWTAB
+      INTEGER TABLE2(JPDITB,JPMAXTB), INDTAB, NUMTAB, LOOP, NEXT
+      INTEGER IPR, IRET, ISTATUS, ITABLE, IPARAM, ICENTR
+C
+      CHARACTER*81 YFIRST(2:JPDITB,JPMAXTB), YSECOND(2:JPDITB,JPMAXTB)
+      CHARACTER*81 YTHIRD(2:JPDITB,JPMAXTB), YFOURTH(2:JPDITB,JPMAXTB)
+      CHARACTER*256 YFILE, YDUMMY
+C
+      INTEGER NUNIT
+C
+      SAVE NUNIT, NUMTAB, TABLE2, YFIRST, YSECOND, YTHIRD, YFOURTH
+C
+C     External functions
+C
+      INTEGER TAB2FIL
+      EXTERNAL TAB2FIL
+C
+      DATA NUMTAB/0/
+C
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     See if a new table is requested.
+C
+      ITABLE = KSEC1(1)
+      IF( KSEC1(22).EQ.98 ) THEN
+        ICENTR = 98
+      ELSE
+        ICENTR = KSEC1(2)
+      ENDIF
+      IPARAM = KSEC1(6)
+C
+      IF( MAX( ITABLE, IPARAM) .GT. 127 ) THEN
+        ITABLE = 1000*ICENTR + ITABLE
+      ENDIF
+C
+      LNEWTAB = .TRUE.
+C     print *, 'CHKTAB2: TABLE2(1,:)=', TABLE2(1,:NUMTAB)
+      DO LOOP = 1, NUMTAB
+        IF( ITABLE.EQ.TABLE2(1,LOOP) ) THEN
+          LNEWTAB = .FALSE.
+          INDTAB = LOOP
+          GOTO 300
+        ENDIF
+      ENDDO
+C
+C     Read values in the new table.
+C
+      IF( LNEWTAB ) THEN
+        NUMTAB = NUMTAB + 1
+        IF( NUMTAB.GT.JPMAXTB ) NUMTAB = 1
+        INDTAB = NUMTAB
+        TABLE2(1,INDTAB) = ITABLE
+C
+        DO LOOP = 2, JPDITB
+          TABLE2(LOOP,INDTAB) = 0
+        ENDDO
+C
+C       Find an unused fortran unit number
+C
+        IPR = 0
+        CALL FTN1CR(NUNIT, IPR, IRET)
+        IF( IRET.NE.0 ) THEN
+          NUMTAB = NUMTAB - 1
+          CHKTAB2 = JPROUTINE + 3
+          RETURN
+        ENDIF
+C
+C       Build filename
+C
+        IRET = TAB2FIL( KSEC1(1), IPARAM, ICENTR, YFILE )
+C
+C       Open file
+C
+        OPEN(UNIT=NUNIT, FILE=YFILE, ERR=910, IOSTAT=ISTATUS,
+     X       STATUS='OLD',FORM='FORMATTED')
+        REWIND(UNIT=NUNIT)
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Fill the new parameter table.
+C ------------------------------------------------------------------
+C
+  200   CONTINUE
+        NEXT = 1
+C
+C       Skip lines until '......................' separator found
+C
+  210   CONTINUE
+        READ(NUNIT,'(A)',END=230) YDUMMY
+        IF( YDUMMY(1:22).EQ.'......................') GOTO 225
+        GOTO 210
+C
+C       Loop through file
+C
+  220   CONTINUE
+          READ(NUNIT,'(A)',END=230) YDUMMY
+  225     CONTINUE
+          NEXT = NEXT + 1
+          READ(NUNIT,'(I3.3)',END=230) TABLE2(NEXT,INDTAB)
+          READ(NUNIT,'(A)',END=230) YFIRST(NEXT,INDTAB)
+          READ(NUNIT,'(A)',END=230) YSECOND(NEXT,INDTAB)
+          READ(NUNIT,'(A)',END=230) YTHIRD(NEXT,INDTAB)
+          READ(NUNIT,'(A)',END=230) YFOURTH(NEXT,INDTAB)
+        GOTO 220
+C
+ 230    CONTINUE
+C
+        CLOSE(UNIT=NUNIT)
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Search for parameter in the table.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      CHKTAB2 = JPROUTINE + 1
+C
+      DO LOOP = 2,JPDITB
+        IF( IPARAM.EQ.TABLE2(LOOP,INDTAB) ) THEN
+          HFIRST = YFIRST(LOOP,INDTAB)
+          HSECOND = YSECOND(LOOP,INDTAB)
+          HTHIRD = YTHIRD(LOOP,INDTAB)
+          HFOURTH = YFOURTH(LOOP,INDTAB)
+          CHKTAB2 = 0
+          RETURN
+        ENDIF
+      ENDDO
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+C     Drop through if not found.
+C
+      RETURN   
+C
+C     Error opening table file
+C
+ 910  CONTINUE
+      TABLE2(1,NUMTAB) = -1
+      NUMTAB = NUMTAB - 1
+      CHKTAB2 = JPROUTINE + 2
+      RETURN
+      END
diff --git a/gribex/cmpck.F b/gribex/cmpck.F
new file mode 100755
index 0000000..e8a1eab
--- /dev/null
+++ b/gribex/cmpck.F
@@ -0,0 +1,140 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CMPCK(PSPEC,KTRUNC,KTRUNCNP)
+C
+C---->
+C**** CMPCK
+C
+C     Purpose.
+C     --------
+C
+C     Puts spectral coefficients in contiguous locations.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL CMPCK(PSPEC,KTRUNC,KTRUNCNP)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PSPEC      - Array of spectral coefficients.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KTRUNCNP   - Truncation of the subset of spherical harmonic
+C                  coefficients to be ignored.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     PSPEC      - Array of spectral coefficients rearranged.
+C
+C
+C     Method.
+C     -------
+C
+C                            <subset>|
+C
+C     Given numbers:         cccccccc|CCCCCC
+C                              cccccc|CCCCCC
+C                                cccc|CCCCCC
+C                                  cc|CCCCCC
+C                                    |CCCCCC
+C                                       CCCC
+C                                         CC
+C
+C    Removes the subset and makes the CCCCCC...C values contiguous
+C    in array PSPEC.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     M.Hamrut         ECMWF      09:05:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KTRUNCNP
+      REAL PSPEC
+      DIMENSION PSPEC((KTRUNC+1)*(KTRUNC+2))
+C
+C     Local variables.
+      INTEGER IUC, IC, JM, JN, IL2, IL1, ILEN
+C
+C
+C     -----------------------------------------------------------------
+C*    Section 1. Move only the required values (overwriting).
+C     -----------------------------------------------------------------
+C
+      IUC=0
+      IC =0
+C
+C     Loop through rows.
+      DO 102 JM=0,KTRUNC
+C
+C       In each row calculate value to start with.
+C       For early rows there are some value to skip (in the subset
+C       being ignored).
+        IL2=MAX(JM,KTRUNCNP+1)
+        IL1=IL2-1
+        IUC=IUC+MAX((IL1-JM+1)*2,0)
+        ILEN=2*(KTRUNC-IL2+1)
+C
+C       Move values for the row.
+CDIR$ IVDEP      
+!OCL NOVREC
+        DO 104 JN=1,ILEN
+          IUC = IUC+1
+          IC  = IC+1
+          PSPEC(IC) = PSPEC(IUC)
+ 104    CONTINUE     
+ 102  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return.
+C     -----------------------------------------------------------------
+C
+ 900  CONTINUE
+      RETURN
+      END        
diff --git a/gribex/cnbits.F b/gribex/cnbits.F
new file mode 100755
index 0000000..3d93e77
--- /dev/null
+++ b/gribex/cnbits.F
@@ -0,0 +1,127 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      INTEGER FUNCTION CNBITS( VALUES, LAT, LONG )
+C
+C---->
+C**** CNBITS
+C
+C     Purpose.
+C     --------
+C
+C     Calculate the number of bits needed to code a range of
+C     field values.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL CNBITS( VALUES, LAT, LONG )
+C
+C
+C     Input
+C     -----
+C
+C     VALUES   -  array of real numbers
+C     LAT      -  first dimension of the array
+C                 (e.g. number of points along a meridian )
+C     LONG     -  second dimension of the array
+C                 (e.g. number of points along a parallel )
+C
+C
+C     Output
+C     ------
+C
+C     CNBITS return value is required number of bits.
+C
+C
+C     Method.
+C     -------
+C
+C     Finds power of 2 required to scan the range of values.
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers           ECMWF      8 Nove 1994
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C   
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C                                                                
+      IMPLICIT NONE
+C
+C     Arguments
+      INTEGER LAT,LONG
+      REAL VALUES( LAT, LONG)
+C
+C     Local variables
+      INTEGER ILAT,ILON
+      REAL RMAXV, RMINV, RANGE
+C   
+C     ----------------------------------------------------------------
+C*    Section 1 . Find maximum and minimum for the given values
+C     ----------------------------------------------------------------
+C                                                                
+ 100  CONTINUE
+      CNBITS = 0
+C
+C     Find maximum and minimum for the given values
+      RMINV = 0.0
+      RMAXV = 0.0
+C
+      DO 120 ILAT = 1, LAT
+        DO 110 ILON = 1, LONG
+          IF ( RMINV .GT. (VALUES( ILAT, ILON)) )
+     X      RMINV = (VALUES( ILAT, ILON))
+          IF ( RMAXV .LT. (VALUES( ILAT, ILON)) )
+     X      RMAXV = (VALUES( ILAT, ILON))
+  110   CONTINUE
+  120 CONTINUE
+C
+      RANGE = ABS( RMAXV - RMINV )
+C
+C     Calculate the number of bits needed to span the number range
+      IF ( RANGE .EQ. 0.0 ) THEN
+        CNBITS = 1
+      ELSE
+        CNBITS = INT ( (ALOG( RANGE )/ALOG(2.0)) ) + 1
+      ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/codegb.F b/gribex/codegb.F
new file mode 100755
index 0000000..0de0d0d
--- /dev/null
+++ b/gribex/codegb.F
@@ -0,0 +1,1430 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CODEGB (FPDATA,ILENF,IBITS,NBIT,IB1PAR,
+     C              IB2PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C              IROUND,IERR)
+C
+C---->
+C*
+C*     NAME     : CODEGB
+C*
+C*     FUNCTION : CODE ARRAY OF FLOATING POINT VALUES
+C*                IN WMO GRIB CODE.
+C*
+C*     INPUT    : PARAMETERS FOR BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*                IB1PAR - INTEGER ARRAY (DIMENSION 18) OF PRODUCT
+C*                         DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1 ).
+C*                  5       PARAMETER IDENTIFIER (CODE TABLE 2).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVEL (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*                 18       NUMBER AVERAGED.
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS.
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*                PARAMETERS FOR BLOCK 2 , GRID DEFINITION BLOCK.
+C*                -----------------------------------------------
+C*                IB2PAR - INTEGER ARRAY (DIMENSION 11) CONTAINING GRID
+C*                         DEFINITION INFORMATION.
+C*                         USE VARIES WITH REPRESENTATION TYPE.
+C*
+C*                WORD      LAT/LONG GRID
+C*                ----      -------------
+C*                 1        DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                 2        NO. OF POINTS ALONG A LATITUDE
+C*                 3        NO. OF POINTS ALONG A MERIDIAN
+C*                 4        LATITUDE OF ORIGIN (SOUTH - IVE).
+C*                 5        LONGITUDE OF ORIGIN (WEST - IVE).
+C*                 6        RESOLUTION FLAG. (CODE TABLE 7)
+C*                 7        LATITUDE OF EXTREME POINT (SOUTH - IVE).
+C*                 8        LONGITUDE OF EXTREME POINT (WEST - IVE).
+C*                 9        LATITUDE INCREMENT
+C*                10        LONGITUDE INCREMENT
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      GAUSSIAN GRID
+C*                ----      -------------
+C*                1-9       AS FOR LAT/LONGITUDE GRID.
+C*                10        THE NUMBER OF LATITUDE LINES BETWEEN A POLE
+C*                          AND THE EQUATOR.
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      SPHERICAL HARMONICS
+C*                ----      -------------------
+C*                  1       DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                  2       J - PENTAGONAL RESOLUTION PARAMETER
+C*                  3       K - PENTAGONAL RESOLUTION PARAMETER
+C*                  4       M - PENTAGONAL RESOLUTION PARAMETER
+C*                  5       REPRESENTATION TYPE (CODE TABLE 9)
+C*                  6       REPRESENTATION MODE (CODE TABLE 10)
+C*                7-11      NOT USED
+C*
+C*
+C*                USE FOR OTHER DATA REPRESENTATION TYPES IS
+C*                TO BE DEFINED LATER.
+C*
+C*                FVERT  - REAL ARRAY OF VERTICAL COORDINATE PARAMETERS
+C*                ILENV  - LENGTH OF THIS ARRAY (NUMBER OF COORDINATE
+C*                         PARAMETERS).
+C*
+C*                USED FOR HYBRID LEVELS ONLY.
+C*
+C*
+C*                PARAMETERS FOR BLOCK 3 , BIT-MAP DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                TO BE DEFINED LATER.
+C*
+C*                PARAMETERS FOR BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*
+C*                          ****
+C*                              VALUES IN THIS ARRAY ARE OVERWRITTEN
+C*                              BY THE SUBROUTINE.
+C*                                                              ****
+C*
+C*                ILENF   - LENGTH OF THIS ARRAY (NUMBER OF DATA
+C*                          VALUES TO BE CODED)
+C*                IBITS   - NUMBER OF BITS FOR CODED DATA VALUES.
+C*
+C*                          TO INDICATE MISSING DATA VALUES, ILENF IS
+C*                          MADE NEGATIVE AND ALL DATA VALUES SET TO 0.
+C*
+C*                OTHER PARAMETERS
+C*                ----------------
+C*
+C*                NBIT    - NUMBER OF BITS IN COMPUTER WORD.
+C*
+C*                IGRIB   - ARRAY TO RECEIVE DATA IN GRIB CODE.
+C*                ILENG   - LENGTH OF THIS ARRAY.
+C*
+C*                IROUND  - 0 , NO ROUNDING.
+C*                          1 , ROUND TO NEAREST 120 OCTETS.
+C*
+C*    OUTPUT    : IGRIB   - DATA CODED IN GRIB CODE.
+C*                IWORD   - NUMBER OF WORDS OCCUPIED BY CODED DATA.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                           0, NO ERROR.
+C*
+C*                          -1, NUMBER OF BITS PER DATA VALUE EXCEEDS
+C*                              WORD LENGTH, OR MAXIMUM ALLOWED.
+C*                          -2, OUTPUT ARRAY TOO SMALL TO HOLD CODED
+C*                              DATA VALUES.
+C*                          -3, CURRENTLY UNDEFINED OPTION SELECTED.
+C*                          -4, MISSING DATA FIELD CONTAINS NON-ZERO.
+C*
+C*                           1, INVALID ORIGINATING CENTRE.
+C*                           2, INVALID MODEL IDENTIFICATION.
+C*                           3, INVALID GRID DEFINITION.
+C*                           4, INVALID BLOCK INDICATOR FLAG
+C*                           5, INVALID PARAMETER IDENTIFIER.
+C*                           6, INVALID LEVEL TYPE INDICATOR.
+C*                           7, ERROR IN DESCRIPTION OF LEVELS.
+C*                           8, DATE/TIME ERROR.
+C*                           9, INVALID TIME UNIT OR RANGE.
+C*                          10, INVALID DATA REPRESENTATION TYPE.
+C*                          11, INVALID EXTREME POINT/INCREMENT FLAG.
+C*                          12, INVALID SCANNING MODE FLAGS.
+C*
+C*    JOHN HENNESSY , ECMWF , NOVEMBER 1985
+C*
+C     Modifications.
+C     -------------
+C
+C          J. Hennessy ECMWF 08:10:90
+C          Use temporary array IDATB to enable loop vectorisation.
+C          Add M. Hamrud's modifications to us a vectorising version of
+C          SBYTES.
+C
+C          J. Hennessy ECMWF 29:11:90
+C          Pad last bytes in the word after 7777 correctly with
+C          binary zeroes.
+C
+C          J. Hennessy ECMWF 19:11:92
+C          Dimension of IDATB increased to 300000.
+C
+C----<
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+      DIMENSION FPDATA(*),ILAT(2)
+c--      DIMENSION IDATB(ILENF)
+      DIMENSION IDATB(300000)
+      DIMENSION IMASK(100)
+      DIMENSION IGRIB(ILENG),IBLOCK(24)
+c--      DIMENSION FVERT(ILENV),IB1PAR(18),IB2PAR(11)
+      DIMENSION FVERT(ILENV),IB1PAR(*),IB2PAR(*)
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /60/
+C
+C     CLEAR ERROR INDICATOR.
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    CHECK FOR MISSING DATA INDICATORS.
+C*
+C********************************************************************
+C
+C
+      IMISS = 0
+      IF (ILENF.LT.0)
+     C   THEN
+             KLENF = - ILENF
+             IMISS = 1
+             DO 50 I=1,KLENF
+                IF (FPDATA(I).NE.0.)
+     C             THEN
+                       IERR = -4
+                       WRITE (*,9012)
+ 9012                  FORMAT (1H ,'NON-ZERO VALUE IN MISSING DATA',
+     C                          ' FIELD.')
+                       RETURN
+                   ENDIF
+   50        CONTINUE
+         ELSE
+             KLENF = ILENF
+         ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    CHECK NUMBER OF BITS PER DATA FIELD.
+C*
+C********************************************************************
+C
+C
+      IF (IBITS.GT.NBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              IERR = -1
+              WRITE (*,9000) IBITS,NBIT,IMAX
+ 9000         FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C                'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C                ' PERMITTED VALUE, ',I3)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 0 - INDICATOR BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    THE LETTERS G R I B ARE INSERTED IN THE
+C*    FIRST 4 ELEMENTS OF 'IBLOCK'.
+C***
+C
+      IBLOCK(1) = 71
+      IBLOCK(2) = 82
+      IBLOCK(3) = 73
+      IBLOCK(4) = 66
+C
+      IWORD = 1
+      IBYTE = 8
+      NVAL  = 4
+      IOFF  = 0
+C
+C     PACK 4 8-BIT FIELDS IN BLOCK 0 OF CODED ARRAY.
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    LENGTH OF BLOCK 1 (IN OCTETS) IN FIRST 3 OCTETS.
+C***
+C
+      IBLOCK(1) = 0
+      IBLOCK(2) = 0
+      IBLOCK(3) = 24
+C
+C
+C
+C
+C***
+C*    FOURTH OCTET RESERVED AND SET TO 0.
+C***
+C
+      IBLOCK(4) = 0
+C
+C
+C
+C
+C
+C
+C***
+C*    IDENTIFICATION OF CENTRE
+C***
+      IBLOCK(5) = IB1PAR(1)
+      IF (IB1PAR(1).LT.1.OR.IB1PAR(1).GT.98)
+     C   THEN
+             IERR = 1
+             WRITE (*,9001) IB1PAR(1)
+ 9001        FORMAT (1H ,'INVALID ORIGINATING CENTRE ',I3)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    MODEL IDENTIFICATION
+C***
+C
+      IBLOCK(6) = IB1PAR(2)
+      IF (IB1PAR(2).LT.1.OR.IB1PAR(2).GT.255)
+     C   THEN
+             IERR = 2
+             WRITE (*,9002) IB1PAR(2)
+ 9002        FORMAT (1H ,'INVALID MODEL IDENTIFICATION ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GRID DEFINITION
+C***
+C
+      IBLOCK(7) = IB1PAR(3)
+      IF (IB1PAR(3).LT.1.OR.IB1PAR(3).GT.255)
+     C   THEN
+             IERR = 3
+             WRITE (*,9003) IB1PAR(3)
+ 9003        FORMAT (1H ,'INVALID GRID IDENTIFICATION ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OPTIONAL BLOCK INDICATOR FLAGS ( CODE TABLE 1 ).
+C***
+C
+C     BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C         NONE             00000000               0
+C          2               10000000             128
+C          3               01000000              64
+C         2 AND 3          11000000             192
+C
+      IBLOCK(8) = IB1PAR(4)
+C
+C     SHIFT 2-BIT FLAG FIELD RIGHT BY 6 BITS TO FACILITATE CHECKING
+C
+      KTEMP = IB1PAR(4) / 64
+C
+      IF (KTEMP.LT.0.OR.KTEMP.GT.3)    IERR = 4
+C
+C     CHECK IF GRID SPECIFIED IS UNCATALOGUED.
+C
+      IF (IB1PAR(3).EQ.255.AND.IB1PAR(4).EQ.0)  IERR = 4
+      IF (IB1PAR(3).EQ.255.AND.IB1PAR(4).EQ.64) IERR = 4
+C
+      IF (IERR.NE.0)
+     C   THEN
+             CALL PRTBIN (IB1PAR(4),8,KTEMP,ERR)
+             WRITE (*,9004) KTEMP
+ 9004        FORMAT (1H ,'INVALID BLOCK INDICATOR FLAG ',I8.8)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C***
+C*    PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C***
+C
+      IBLOCK(9) = IB1PAR(5)
+      IF (IB1PAR(5).LT.0.OR.IB1PAR(5).GT.255)
+     C   THEN
+             IERR = 5
+             WRITE (*,9005) IB1PAR(5)
+ 9005        FORMAT (1H ,'INVALID PARAMETER ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C***
+C*    INDICATOR OF LEVEL TYPE ( CODE TABLE 3 ).
+C***
+C
+      IBLOCK(10) = IB1PAR(6)
+C
+C*    CODE FIGURES FOR LEVEL TYPE RANGE FROM 0 - 110, WITH 200
+C     BEING USED FOR PSEUDO-LEVELS.
+C
+      IF (IB1PAR(6).LT.0.OR.IB1PAR(6).GT.110) IERR = 6
+      IF (IB1PAR(6).EQ.200) IERR = 0
+      IF (IERR.EQ.6)
+     C   THEN
+             WRITE (*,9006) IB1PAR(6)
+ 9006        FORMAT (1H ,'INVALID LEVEL TYPE ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C
+C
+C     FOR CERTAIN SPECIAL LEVELS NO FURTHER DESCRIPTION IS
+C     NECESSARY, AND THE FIELDS ARE SET TO 0.
+C
+      IF (IB1PAR(6).LT.100.OR.IB1PAR(6).EQ.102)
+     C    THEN
+              IB1PAR(7) = 0
+              IB1PAR(8) = 0
+          ENDIF
+C
+      IBLOCK(11) = IB1PAR(7)
+      IBLOCK(12) = IB1PAR(8)
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS.
+C
+      IF (IB1PAR(6).EQ.100.OR.IB1PAR(6).EQ.103.OR.IB1PAR(6).EQ.105.
+     C    OR.IB1PAR(6).EQ.107.OR.IB1PAR(6).EQ.109)
+     C    THEN
+C             8 LOW ORDER BITS IN IBLOCK(12)
+C             HIGH ORDER BITS IN IBLOCK(11)
+C
+              IBLOCK(12) = IBLOCK(11)
+              IBLOCK(11) = IBLOCK(11) / 256
+              IBLOCK(12) = IBLOCK(12) - IBLOCK(11) * 256
+C
+C             CHECK MAXIMUM POSSIBLE IN 16 BITS.
+C
+              IF (IB1PAR(7).GT.65535) IERR = 7
+          ELSE
+              IF (IB1PAR(7).GT.255.OR.IB1PAR(8).GT.255) IERR = 7
+          ENDIF
+C
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9007) IB1PAR(7),IB1PAR(8)
+ 9007         FORMAT (1H ,'LEVEL DESCRIPTION ERROR ',I8,3X,I8)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    DATE AND TIME. CHECK VALID RANGES AND MISSING DATA VALUES.
+C***
+C
+      IBLOCK(13) = IB1PAR(9)
+      IERY = 0
+      IF (IB1PAR(9).LT.0.OR.IB1PAR(9).GT.99) IERY = 1
+      IF (IB1PAR(9).EQ.255) IERY = 0
+      IBLOCK(14) = IB1PAR(10)
+      IERM = 0
+      IF (IB1PAR(10).LT.1.OR.IB1PAR(10).GT.12) IERM = 1
+      IF (IB1PAR(10).EQ.255) IERM = 0
+      IBLOCK(15) = IB1PAR(11)
+      IERD = 0
+      IF (IB1PAR(11).LT.1.OR.IB1PAR(11).GT.31) IERD = 1
+      IF (IB1PAR(11).EQ.255) IERD = 0
+      IBLOCK(16) = IB1PAR(12)
+      IERH = 0
+      IF (IB1PAR(12).LT.0.OR.IB1PAR(12).GT.23) IERH = 1
+      IF (IB1PAR(12).EQ.255) IERH = 0
+      IBLOCK(17) = IB1PAR(13)
+      IERN = 0
+      IF (IB1PAR(13).LT.0.OR.IB1PAR(13).GT.59) IERN = 1
+      IF (IB1PAR(13).EQ.255) IERN = 0
+C
+      IERR = IERY + IERM + IERD + IERH + IERN
+C
+      IF (IERR.NE.0)
+     C    THEN
+              IERR = 8
+              WRITE (*,9008) IB1PAR(9),IB1PAR(10),IB1PAR(11),IB1PAR(12),
+     C                       IB1PAR(13)
+ 9008         FORMAT (1H ,'INVALID DATE/TIME ',3I2,' / ',2I2)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    UNIT OF TIME - ( CODE TABLE 4 ).
+C*    TIME RANGE(S) AND TIME RANGE INDICATOR ( CODE TABLE 5 ).
+C***
+C
+C     TIME UNIT.
+C
+      IBLOCK(18) = IB1PAR(14)
+      IF (IB1PAR(14).LT.0.OR.IB1PAR(14).GT.7) IERR = 9
+C
+C*    TIME UNIT CODES ARE IN THE RANGE 0 - 7, WITH 254 USED FOR SECONDS.
+C
+      IF (IB1PAR(14).EQ.254) IERR = 0
+C
+C     THERE CAN BE ONE OR TWO TIME RANGES, EACH IN 1 OCTECT OR
+C     ONE TIME RANGE IN 2 OCTECTS.
+C
+      IF (IB1PAR(17).EQ.0.OR.IB1PAR(17).EQ.1
+     C .OR.IB1PAR(17).EQ.10)   IB1PAR(16)  = 0
+C
+C     CROSS CHECK RANGE VALUES AND FLAG VALUES.
+C
+      IF (IB1PAR(15).GT.65535.OR.IB1PAR(15).LT.0)   IERR = 9
+      IF (IB1PAR(15).GT.255.AND.IB1PAR(17).NE.10)   IERR = 9
+      IF (IB1PAR(16).GT.255.OR.IB1PAR(16).LT.0)     IERR = 9
+      IF (IB1PAR(17).LT.0.OR.IB1PAR(17).GT.10)      IERR = 9
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9009) IB1PAR(14),IB1PAR(15),IB1PAR(16),IB1PAR(17)
+ 9009         FORMAT (1H ,'TIME UNIT/TIME 1/TIME 2/INDICATOR ERROR - ',
+     C                I8,2X,'/',I8,2X,'/',I8,2X,'/',I8)
+              RETURN
+          ENDIF
+C
+      IBLOCK(19) = IB1PAR(15)
+      IBLOCK(20) = IB1PAR(16)
+C
+C     ONE TIME RANGE OCCUPYING BOTH OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+C            8 LOW ORDER BITS IN IBLOCK(20)
+C            HIGH ORDER BITS IN IBLOCK(19)
+C
+             IBLOCK(20) = IBLOCK(19)
+             IBLOCK(19) = IBLOCK(19) / 256
+             IBLOCK(20) = IBLOCK(20) - IBLOCK(19) * 256
+         ENDIF
+C
+C     TIME RANGE INDICATOR
+C
+      IBLOCK(21) = IB1PAR(17)
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    NUMBER AVERAGED.
+C***
+C
+      IBLOCK(22) = 0
+      IBLOCK(23) = 0
+C
+C
+C     CHECK CONSISTENCY INDICATOR AND NUMBER FIELD.
+C
+      IF (IB1PAR(17).EQ.3.AND.IB1PAR(18).EQ.0)
+     C   THEN
+             IERR = 12
+             WRITE (*,9013) IB1PAR(17),IB1PAR(18)
+ 9013        FORMAT (1H ,'INDICATOR/NUMBER AVERAGED ERROR - ',
+     C                I8,2X,'/',I8)
+             RETURN
+         ENDIF
+C
+C     VALUE IN TWO OCTETS.
+C
+      IBLOCK(22) = IB1PAR(18)
+C
+C     8 LOW ORDER BITS IN IBLOCK(23)
+C     HIGH ORDER BITS IN IBLOCK(22)
+C
+      IBLOCK(23) = IBLOCK(22)
+      IBLOCK(22) = IBLOCK(22) / 256
+      IBLOCK(23) = IBLOCK(23) - IBLOCK(22) * 256
+C
+C
+C
+C
+C
+C
+C***
+C*    RESERVED ELEMENT.
+C***
+C
+      IBLOCK(24) = 0
+C
+C
+C
+C
+C
+C
+C
+C***
+C*
+C*    PACK 24 8-BIT FIELDS OF BLOCK 1 IN CODED ARRAY.
+C*
+C***
+C
+      IBYTE = 8
+      NVAL = 24
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 2 - GRID DESCRIPTION BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C
+C***
+C*    SET ARRAY IBLOCK TO 0 . IT IS USED TO ZERO FILL RESERVED OCTETS.
+C***
+C
+      DO 100 I=1,24
+         IBLOCK(I) = 0
+  100 CONTINUE
+C
+C
+C
+C
+C***
+C*    LAT/LONGITUDE GRID, GAUSSIAN GRID AND SPHERICAL HARMONICS
+C*    ARE THE ONLY DATA REPRESENTATIONS HANDLED.
+C***
+C
+      IF (IB1PAR(4).EQ.128.OR.IB1PAR(4).EQ.192)
+     C   THEN
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4.AND.IB2PAR(1).NE.50)
+     C          THEN
+                     WRITE (*,*)'GRID DESCRIPTION BLOCK NOT YET DEFINED'
+                     IERR = -3
+                     RETURN
+                ENDIF
+C
+C
+C
+C
+C***
+C*       LENGTH OF GRID DESCRIPTION BLOCK.
+C***
+C
+C        LENGTH IS 32 OCTETS FOR LAT/LONG, GAUSSIAN AND SPHERICAL
+C        HARMONICS . FOR ANY DATA  ON HYBRID LEVELS THE
+C        VERTICAL COORDINATES ARE ADDED.
+C
+         I = 32
+         IF (IB1PAR(6).GT.108) I = I + ILENV * 4
+C
+         CALL SBYTE (IGRIB(IWORD),I,IOFF,24)
+         CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*       NUMBER OF UNUSED BITS AT END OF BLOCK.
+C*       CURRENT DEFINITION IMPLIES 0.
+C***
+C
+         CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C***
+C*       NEXT OCTET IS RESERVED.
+C***
+C
+         CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C***
+C*       DATA REPRESENTATION TYPE.
+C***
+C
+         IF (IB2PAR(1).LT.0.OR.IB2PAR(1).GT.4) IERR = 10
+         IF (IB2PAR(1).EQ.50) IERR = 0
+         IF (IERR.NE.0)
+     C      THEN
+                IERR = 10
+                WRITE (*,9010) IB2PAR(1)
+ 9010           FORMAT (1H ,'INVALID DATA REPRESENTATION TYPE - ',I3)
+                RETURN
+            ENDIF
+         CALL SBYTE (IGRIB(IWORD),IB2PAR(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*       LAT/LONG OR GAUSSIAN GRID.
+C***
+C
+         IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C    THEN
+C
+C            NUMBER OF LAT/LONG POINTS.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONG OF ORIGIN.
+C            SIGN BIT SET TO 1 IF VALUES ARE NEGATIVE.
+C
+             DO 200 I=1,2
+                ILAT(I) = IB2PAR(I+3)
+                ISIGN   = 0
+                IF (ILAT(I).LT.0)
+     C            THEN
+                      ISIGN   = 8388608
+                      ILAT(I) = - ILAT(I)
+                  ENDIF
+                ILAT(I) = ILAT(I) + ISIGN
+  200        CONTINUE
+C
+             CALL SBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+             CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            RESOLUTION FLAG.
+C
+C            INCREMENTS       BINARY CODE     DECIMAL VALUE
+C
+C             NOT GIVEN        00000000              0
+C              GIVEN           10000000            128
+C
+C
+C            SHIFT 1 BIT FLAG FIELD TO LOW ORDER BIT
+C
+             KTEMP = IB2PAR(6) / 128
+C
+C            CHECK ON VALID RESOLUTION FLAG FIELD IS IGNORED IF
+C            TYPE OF LEVEL IS GIVEN AS 200 - USED BY ECMWF FOR
+C            PACKING DIAGNOSTIC FIELDS IN PSEUDO GRIB.
+C
+             IF (KTEMP.LT.0.OR.KTEMP.GT.1.AND.IB1PAR(6).NE.200)
+     C          THEN
+                    CALL PRTBIN (IB2PAR(6),8,KTEMP,ERR)
+                    WRITE (*,9011) KTEMP
+ 9011               FORMAT (1H ,'INVALID RESOLUTION FLAG ',I8.8)
+                    IERR = 11
+                    RETURN
+                ENDIF
+C
+C            SET TO ALL 1-BITS UNUSED INCREMENT FIELDS.
+C
+             IF (IB2PAR(6).EQ.0)
+     C          THEN
+C                   1111111111111111 BINARY = 65535 DECIMAL
+                    IB2PAR(9)  = 65535
+                    IB2PAR(10) = 65535
+                ENDIF
+C
+             CALL SBYTE (IGRIB(IWORD),IB2PAR(6),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONG OF EXTREME POINT.
+C
+C            SIGN BIT SET TO 1 IF VALUES ARE NEGATIVE.
+C
+             DO 300 I=1,2
+                ILAT(I) = IB2PAR(I+6)
+                ISIGN   = 0
+                IF (ILAT(I).LT.0)
+     C            THEN
+                      ISIGN   = 8388608
+                      ILAT(I) = - ILAT(I)
+                  ENDIF
+                ILAT(I) = ILAT(I) + ISIGN
+  300        CONTINUE
+C
+             CALL SBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+             CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C            DIRECTION INCREMENTS / NUMBER OF LATITUDE LINES.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(9),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            SCANNING MODE FLAGS.
+C
+C            VALID VALUES       VALUE / 32
+C             BINARY             DECIMAL
+C
+C              00000000               0
+C              10000000               4
+C              01000000               2
+C              11000000               6
+C              00100000               1
+C              10100000               5
+C              01100000               3
+C              11100000               7
+C
+C            SHIFT 3 BIT FLAG FIELD TO LOW ORDER BITS.
+C
+             KTEMP = IB2PAR(11) / 32
+C
+C            CHECK ON VALID SCANNING MODE FLAG FIELD IS IGNORED IF
+C            TYPE OF LEVEL IS GIVEN AS 200 - USED BY ECMWF FOR
+C            PACKING DIAGNOSTIC FIELDS IN PSEUDO GRIB.
+C
+             IF (KTEMP.LT.0.OR.KTEMP.GT.7.AND.IB1PAR(6).NE.200)
+C
+     C          THEN
+                    CALL PRTBIN (IB2PAR(11),8,KTEMP,ERR)
+                    WRITE (*,9014) KTEMP
+ 9014               FORMAT (1H ,'INVALID SCANNING MODE FLAGS ',I8.8)
+                    IERR = 12
+                    RETURN
+                ENDIF
+C
+             CALL SBYTE (IGRIB(IWORD),IB2PAR(11),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            4 RESERVED OCTETS.
+C
+             CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+             CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*       SPHERICAL HARMONIC DATA.
+C***
+C
+         IF (IB2PAR(1).EQ.50)
+     C    THEN
+C
+C            PENTAGONAL RESOLUTION PARAMETERS.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,3)
+             CALL OFFSET (IOFF,3,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            REPRESENTATION TYPE AND MODE.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(5),IOFF,8,0,2)
+             CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            18 RESERVED OCTETS.
+C
+             CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,18)
+             CALL OFFSET (IOFF,18,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+          ENDIF
+C
+C
+C
+C
+C***
+C*       ADD VERTICAL COORDINATE PARAMETERS FOR HYBRID LEVELS.
+C***
+C
+         IF (IB1PAR(6).GT.108)
+     C    THEN
+             DO 400 I=1,ILENV
+                 CALL CONFP (FVERT(I),IEXP,IMANT)
+                 CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+                 CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                 IF (IERR.NE.0) RETURN
+                 CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+                 CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+                 IF (IERR.NE.0) RETURN
+  400        CONTINUE
+C
+          ENDIF
+C
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 3 (IF REQUIRED) - BIT MAP BLOCK.
+C*
+C********************************************************************
+C
+      IF (IB1PAR(4).EQ.64.OR.IB1PAR(4).EQ.192)
+     C     THEN
+               WRITE (*,*)'BIT MAP BLOCK NOT YET DEFINED'
+               IERR = -3
+               RETURN
+           ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C***
+C*    RETAIN POINTERS TO WORD AND BIT POSITION OF BINARY DATA
+C*    BLOCK LENGTH FIELD. ENTER LENGTH AS 0.
+C***
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C***
+C
+C     FLAG IS 1000 FOR SPHERICAL HARMONICS, 0000 FOR LAT/LONG
+C     OR GAUSSIAN GRID.
+C
+      IREP = 0
+      IF (IB2PAR(1).EQ.50) IREP = 1
+C
+C     FLAG FIELD IS IREP SHIFTED LEFT BY 7 BITS
+C
+      IFLAG = IREP * 128
+C
+      CALL SBYTE (IGRIB(IWORD),IFLAG,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    FIND MAXIMUM AND MINIMUM VALUES IN DATA ARRAY. FOR
+C*    DATA IN SPHERICAL HARMONIC FORM THE FIRST WORD CONTAINS
+C*    THE REAL (0,0)COEFFICIENT, WHICH IS TREATED SEPARATELY.
+C***
+C
+C
+      ILEN = KLENF - IREP
+C--      CALL MXMN (FPDATA(IREP+1),ILEN,FMAX,FMIN)
+      CALL MAXMIN (FPDATA(IREP+1),ILEN,FMAX,FMIN)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    SCALE FACTOR.
+C***
+C
+C     CALCULATE SCALE FACTOR
+C
+      S = (FMAX-FMIN)/(2**(IBITS+1)-1)
+      IF (S.NE.0.) S = ALOG(S)/ALOG(2.) + 2.
+      ISCALE = MIN(INT(S),INT(S+SIGN(1.,S)))
+C
+C
+C
+C
+C     SET SIGN BIT (BIT 16) AND PUT SCALE FACTOR INTO REMAINING
+C     15 BITS OF CODED 16 BIT FIELD.
+C
+      JSCALE = ISCALE
+      ISIGN = 0
+      IF (JSCALE.LT.0)
+     C    THEN
+              ISIGN  = 32768
+              JSCALE = - JSCALE
+          ENDIF
+      JSCALE = JSCALE + ISIGN
+C
+      ZSCALE = 2.**ISCALE
+C
+C     FOR MISSING DATA SCALE FACTOR IS SET TO ALL 1-BITS.
+C
+      IF (IMISS.EQ.1) JSCALE = 65535
+C
+      CALL SBYTE (IGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    MINIMUM (REFERENCE) VALUE.
+C***
+C
+C     CONVERT MINIMUM VALUE (FMIN) TO GRIB FORMAT (IEXP,IMANT)
+C
+      CALL CONFP (FMIN,IEXP,IMANT)
+C
+C     EXPONENT AND MANTISSA SET TO ALL 1-BITS FOR MISSING DATA.
+C
+      IF (IMISS.EQ.1)
+     C   THEN
+             IEXP  = 255
+             IMANT = 16777215
+         ENDIF
+      CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+      CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    NUMBER OF BITS IN EACH DATA VALUE.
+C***
+C
+      CALL SBYTE (IGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    IF SPHERICAL HARMONICS DATA, NEXT 4 OCTETS ARE DIFFERENT FORMAT.
+C***
+C
+      IF (IREP.EQ.1)
+     C    THEN
+C
+C            STORE REAL (0,0) COEFFICIENT IN FLOATING
+C            POINT FORM.
+C
+             CALL CONFP (FPDATA(1),IEXP,IMANT)
+C
+             CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C***
+C*    SCALE AND STORE DATA VALUES.
+C***
+C
+      DO 600 I = IREP+1 , KLENF
+C--         JGRIB     = NINT ( (FPDATA(I)-FMIN) / ZSCALE )
+C--         FPDATA(I) = ZGRIB
+         IDATB(I) = NINT ( (FPDATA(I)-FMIN) / ZSCALE )
+  600 CONTINUE
+C
+      ILENFM = KLENF - IREP
+      IMASK(2) = 0
+      IOFFX    = IOFF
+      CALL GSBITE (IGRIB(IWORD),IDATB(IREP+1),IOFFX,IBITS,0,ILENFM,
+     C              NBIT,IMASK,'C')
+C--      CALL SBYTES (IGRIB(IWORD),FPDATA(IREP+1),IOFF,IBITS,0,ILENFM)
+      CALL OFFSET (IOFF,ILENFM,IWORD,IBITS,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    ENTER LENGTH OF BINARY DATA BLOCK, HAVING ENSURED THAT
+C*    THE LENGTH IS AN EVEN NUMBER OF OCTETS.
+C***
+C
+C     LENGTH OF BINARY DATA BLOCK IN BITS.
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+      L = LBIN / 16
+      L = LBIN - ( L*16 )
+C
+C     FILL UNUSED PORTION OF LAST 2 OCTETS WITH BINARY ZEROES.
+C
+      LNIL = 0
+      IF (L.NE.0)
+     C    THEN
+              LNIL = 16 - L
+              CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,LNIL)
+              CALL OFFSET (IOFF,1,IWORD,LNIL,NBIT,ILENG,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+C     ENTER LENGTH - IN OCTETS - OF DATA BLOCK.
+C
+      LBIN = LBIN / 8
+      CALL SBYTE (IGRIB(IPW),LBIN,IPB,24)
+      CALL OFFSET (IPB,1,IPW,24,NBIT,ILENG,IERR)
+C
+C     ENTER NUMBER OF UNUSED BITS IN FLAG/BIT COUNT FIELD.
+C
+      IFLAG = IFLAG + LNIL
+      CALL SBYTE (IGRIB(IPW),IFLAG,IPB,8)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C
+C***
+C*    ADD 7 7 7 7 TO CODED DATA.
+C***
+C
+      IBLOCK(1) = 55
+      IBLOCK(2) = 55
+      IBLOCK(3) = 55
+      IBLOCK(4) = 55
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+      CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C***
+C*    SET ANY UNUSED PART OF LAST WORD TO BINARY ZEROES.
+C***
+C
+      IF (IOFF.NE.0)
+     C   THEN
+             KBITS = NBIT - IOFF
+	     IBLOCK(1) = 0
+             CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,KBITS)
+         ELSE
+             IWORD = IWORD - 1
+         ENDIF
+C
+C
+C
+C***
+C*    ROUND TO 120 OCTETS, IF REQUIRED.
+C***
+C
+      IF (IROUND.EQ.1)
+     C   THEN
+             NUMBIT = IWORD * NBIT
+             I = NUMBIT / 960
+             I = I * 960
+             I = NUMBIT - I
+             IF (I.NE.0) I = (960 - I) / NBIT
+C
+             DO 700 J=IWORD+1,IWORD+I
+                IGRIB(J) = 0
+  700        CONTINUE
+C
+             IWORD = IWORD + I
+         ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/codegc.F b/gribex/codegc.F
new file mode 100755
index 0000000..15f7993
--- /dev/null
+++ b/gribex/codegc.F
@@ -0,0 +1,1446 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CODEGC (FPDATA,ILENF,IBITS,NBIT,IB1PAR,IB2PAR,IB3PAR,
+     C                   IBLEN,IBMAP,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C                   IROUND,IERR)
+C
+C
+C---->
+C*
+C*     NAME     : CODEGC
+C*
+C*     FUNCTION : CODE ARRAY OF FLOATING POINT VALUES
+C*                IN WMO GRIB CODE.
+C*
+C*     INPUT    : PARAMETERS FOR BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*                IB1PAR - INTEGER ARRAY (DIMENSION 18) OF PRODUCT
+C*                         DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1 ).
+C*                  5       PARAMETER IDENTIFIER (CODE TABLE 2).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVEL (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*                 18       NUMBER AVERAGED.
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS.
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*                PARAMETERS FOR BLOCK 2 , GRID DEFINITION BLOCK.
+C*                -----------------------------------------------
+C*                IB2PAR - INTEGER ARRAY (DIMENSION 11) CONTAINING GRID
+C*                         DEFINITION INFORMATION.
+C*                         USE VARIES WITH REPRESENTATION TYPE.
+C*
+C*                WORD      LAT/LONG GRID
+C*                ----      -------------
+C*                 1        DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                 2        NO. OF POINTS ALONG A LATITUDE
+C*                 3        NO. OF POINTS ALONG A MERIDIAN
+C*                 4        LATITUDE OF ORIGIN (SOUTH - IVE).
+C*                 5        LONGITUDE OF ORIGIN (WEST - IVE).
+C*                 6        RESOLUTION FLAG. (CODE TABLE 7)
+C*                 7        LATITUDE OF EXTREME POINT (SOUTH - IVE).
+C*                 8        LONGITUDE OF EXTREME POINT (WEST - IVE).
+C*                 9        LATITUDE INCREMENT
+C*                10        LONGITUDE INCREMENT
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      GAUSSIAN GRID
+C*                ----      -------------
+C*                1-9       AS FOR LAT/LONGITUDE GRID.
+C*                10        THE NUMBER OF LATITUDE LINES BETWEEN A POLE
+C*                          AND THE EQUATOR.
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      SPHERICAL HARMONICS
+C*                ----      -------------------
+C*                  1       DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                  2       J - PENTAGONAL RESOLUTION PARAMETER
+C*                  3       K - PENTAGONAL RESOLUTION PARAMETER
+C*                  4       M - PENTAGONAL RESOLUTION PARAMETER
+C*                  5       REPRESENTATION TYPE (CODE TABLE 9)
+C*                  6       REPRESENTATION MODE (CODE TABLE 10)
+C*                7-11      NOT USED
+C*
+C*
+C*                USE FOR OTHER DATA REPRESENTATION TYPES IS
+C*                TO BE DEFINED LATER.
+C*
+C*                FVERT  - REAL ARRAY OF VERTICAL COORDINATE PARAMETERS
+C*                ILENV  - LENGTH OF THIS ARRAY (NUMBER OF COORDINATE
+C*                         PARAMETERS).
+C*
+C*                USED FOR HYBRID LEVELS ONLY.
+C*
+C*
+C*                PARAMETERS FOR BLOCK 3 , BIT-MAP DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                TO BE DEFINED LATER.
+C*
+C*                PARAMETERS FOR BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*
+C*                          ****
+C*                              VALUES IN THIS ARRAY ARE OVERWRITTEN
+C*                              BY THE SUBROUTINE.
+C*                                                              ****
+C*
+C*                ILENF   - LENGTH OF THIS ARRAY (NUMBER OF DATA
+C*                          VALUES TO BE CODED)
+C*                IBITS   - NUMBER OF BITS FOR CODED DATA VALUES.
+C*
+C*                          TO INDICATE MISSING DATA VALUES, ILENF IS
+C*                          MADE NEGATIVE AND ALL DATA VALUES SET TO 0.
+C*
+C*                OTHER PARAMETERS
+C*                ----------------
+C*
+C*                NBIT    - NUMBER OF BITS IN COMPUTER WORD.
+C*
+C*                IGRIB   - ARRAY TO RECEIVE DATA IN GRIB CODE.
+C*                ILENG   - LENGTH OF THIS ARRAY.
+C*
+C*                IROUND  - 0 , NO ROUNDING.
+C*                          1 , ROUND TO NEAREST 120 OCTETS.
+C*
+C*    OUTPUT    : IGRIB   - DATA CODED IN GRIB CODE.
+C*                IWORD   - NUMBER OF WORDS OCCUPIED BY CODED DATA.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                           0, NO ERROR.
+C*
+C*                          -1, NUMBER OF BITS PER DATA VALUE EXCEEDS
+C*                              WORD LENGTH, OR MAXIMUM ALLOWED.
+C*                          -2, OUTPUT ARRAY TOO SMALL TO HOLD CODED
+C*                              DATA VALUES.
+C*                          -3, CURRENTLY UNDEFINED OPTION SELECTED.
+C*                          -4, MISSING DATA FIELD CONTAINS NON-ZERO.
+C*
+C*                           1, INVALID ORIGINATING CENTRE.
+C*                           2, INVALID MODEL IDENTIFICATION.
+C*                           3, INVALID GRID DEFINITION.
+C*                           4, INVALID BLOCK INDICATOR FLAG
+C*                           5, INVALID PARAMETER IDENTIFIER.
+C*                           6, INVALID LEVEL TYPE INDICATOR.
+C*                           7, ERROR IN DESCRIPTION OF LEVELS.
+C*                           8, DATE/TIME ERROR.
+C*                           9, INVALID TIME UNIT OR RANGE.
+C*                          10, INVALID DATA REPRESENTATION TYPE.
+C*                          11, INVALID EXTREME POINT/INCREMENT FLAG.
+C*                          12, INVALID SCANNING MODE FLAGS.
+C*
+C*    JOHN HENNESSY , ECMWF , NOVEMBER 1985
+C*
+C*
+C----<
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+      DIMENSION FPDATA(ILENF),ILAT(2)
+      DIMENSION IGRIB(ILENG),IBLOCK(24),IBMAP(IBLEN)
+      DIMENSION FVERT(ILENV),IB1PAR(18),IB2PAR(11),IB3PAR(2)
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /32/
+C
+C     CLEAR ERROR INDICATOR.
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    CHECK FOR MISSING DATA INDICATORS.
+C*
+C********************************************************************
+C
+C
+      IMISS = 0
+      IF (ILENF.LT.0)
+     C   THEN
+             KLENF = - ILENF
+             IMISS = 1
+             DO 50 I=1,KLENF
+                IF (FPDATA(I).NE.0.)
+     C             THEN
+                       IERR = -4
+                       WRITE (*,9012)
+ 9012                  FORMAT (1H ,'NON-ZERO VALUE IN MISSING DATA',
+     C                          ' FIELD.')
+                       RETURN
+                   ENDIF
+   50        CONTINUE
+         ELSE
+             KLENF = ILENF
+         ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    CHECK NUMBER OF BITS PER DATA FIELD.
+C*
+C********************************************************************
+C
+C
+      IF (IBITS.GT.NBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              IERR = -1
+              WRITE (*,9000) IBITS,NBIT,IMAX
+ 9000         FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C                'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C                ' PERMITTED VALUE, ',I3)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 0 - INDICATOR BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    THE LETTERS G R I B ARE INSERTED IN THE
+C*    FIRST 4 ELEMENTS OF 'IBLOCK'.
+C***
+C
+      IBLOCK(1) = 71
+      IBLOCK(2) = 82
+      IBLOCK(3) = 73
+      IBLOCK(4) = 66
+C
+      IWORD = 1
+      IBYTE = 8
+      NVAL  = 4
+      IOFF  = 0
+C
+C     PACK 4 8-BIT FIELDS IN BLOCK 0 OF CODED ARRAY.
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    LENGTH OF BLOCK 1 (IN OCTETS) IN FIRST 3 OCTETS.
+C***
+C
+      IBLOCK(1) = 0
+      IBLOCK(2) = 0
+      IBLOCK(3) = 24
+C
+C
+C
+C
+C***
+C*    FOURTH OCTET RESERVED AND SET TO 0.
+C***
+C
+      IBLOCK(4) = 0
+C
+C
+C
+C
+C
+C
+C***
+C*    IDENTIFICATION OF CENTRE
+C***
+      IBLOCK(5) = IB1PAR(1)
+      IF (IB1PAR(1).LT.1.OR.IB1PAR(1).GT.98)
+     C   THEN
+             IERR = 1
+             WRITE (*,9001) IB1PAR(1)
+ 9001        FORMAT (1H ,'INVALID ORIGINATING CENTRE ',I3)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    MODEL IDENTIFICATION
+C***
+C
+      IBLOCK(6) = IB1PAR(2)
+      IF (IB1PAR(2).LT.1.OR.IB1PAR(2).GT.255)
+     C   THEN
+             IERR = 2
+             WRITE (*,9002) IB1PAR(2)
+ 9002        FORMAT (1H ,'INVALID MODEL IDENTIFICATION ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GRID DEFINITION
+C***
+C
+      IBLOCK(7) = IB1PAR(3)
+      IF (IB1PAR(3).LT.1.OR.IB1PAR(3).GT.255)
+     C   THEN
+             IERR = 3
+             WRITE (*,9003) IB1PAR(3)
+ 9003        FORMAT (1H ,'INVALID GRID IDENTIFICATION ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OPTIONAL BLOCK INDICATOR FLAGS ( CODE TABLE 1 ).
+C***
+C
+C     BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C         NONE             00000000               0
+C          2               10000000             128
+C          3               01000000              64
+C         2 AND 3          11000000             192
+C
+      IBLOCK(8) = IB1PAR(4)
+C
+C     SHIFT 2-BIT FLAG FIELD RIGHT BY 6 BITS TO FACILITATE CHECKING
+C
+      KTEMP = IB1PAR(4) / 64
+C
+      IF (KTEMP.LT.0.OR.KTEMP.GT.3)    IERR = 4
+C
+C     CHECK IF GRID SPECIFIED IS UNCATALOGUED.
+C
+      IF (IB1PAR(3).EQ.255.AND.IB1PAR(4).EQ.0)  IERR = 4
+      IF (IB1PAR(3).EQ.255.AND.IB1PAR(4).EQ.64) IERR = 4
+C
+      IF (IERR.NE.0)
+     C   THEN
+             CALL PRTBIN (IB1PAR(4),8,KTEMP,ERR)
+             WRITE (*,9004) KTEMP
+ 9004        FORMAT (1H ,'INVALID BLOCK INDICATOR FLAG ',I8.8)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C***
+C*    PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C***
+C
+      IBLOCK(9) = IB1PAR(5)
+      IF (IB1PAR(5).LT.0.OR.IB1PAR(5).GT.255)
+     C   THEN
+             IERR = 5
+             WRITE (*,9005) IB1PAR(5)
+ 9005        FORMAT (1H ,'INVALID PARAMETER ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C***
+C*    INDICATOR OF LEVEL TYPE ( CODE TABLE 3 ).
+C***
+C
+      IBLOCK(10) = IB1PAR(6)
+C
+C*    CODE FIGURES FOR LEVEL TYPE RANGE FROM 0 - 110, WITH 200
+C     BEING USED FOR PSEUDO-LEVELS.
+C
+      IF (IB1PAR(6).LT.0.OR.IB1PAR(6).GT.110) IERR = 6
+      IF (IB1PAR(6).EQ.200) IERR = 0
+      IF (IERR.EQ.6)
+     C   THEN
+             WRITE (*,9006) IB1PAR(6)
+ 9006        FORMAT (1H ,'INVALID LEVEL TYPE ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C
+C
+C     FOR CERTAIN SPECIAL LEVELS NO FURTHER DESCRIPTION IS
+C     NECESSARY, AND THE FIELDS ARE SET TO 0.
+C
+      IF (IB1PAR(6).LT.100.OR.IB1PAR(6).EQ.102)
+     C    THEN
+              IB1PAR(7) = 0
+              IB1PAR(8) = 0
+          ENDIF
+C
+      IBLOCK(11) = IB1PAR(7)
+      IBLOCK(12) = IB1PAR(8)
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS.
+C
+      IF (IB1PAR(6).EQ.100.OR.IB1PAR(6).EQ.103.OR.IB1PAR(6).EQ.105.
+     C    OR.IB1PAR(6).EQ.107.OR.IB1PAR(6).EQ.109)
+     C    THEN
+C             8 LOW ORDER BITS IN IBLOCK(12)
+C             HIGH ORDER BITS IN IBLOCK(11)
+C
+              IBLOCK(12) = IBLOCK(11)
+              IBLOCK(11) = IBLOCK(11) / 256
+              IBLOCK(12) = IBLOCK(12) - IBLOCK(11) * 256
+C
+C             CHECK MAXIMUM POSSIBLE IN 16 BITS.
+C
+              IF (IB1PAR(7).GT.65535) IERR = 7
+          ELSE
+              IF (IB1PAR(7).GT.255.OR.IB1PAR(8).GT.255) IERR = 7
+          ENDIF
+C
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9007) IB1PAR(7),IB1PAR(8)
+ 9007         FORMAT (1H ,'LEVEL DESCRIPTION ERROR ',I8,3X,I8)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    DATE AND TIME. CHECK VALID RANGES AND MISSING DATA VALUES.
+C***
+C
+      IBLOCK(13) = IB1PAR(9)
+      IERY = 0
+      IF (IB1PAR(9).LT.0.OR.IB1PAR(9).GT.99) IERY = 1
+      IF (IB1PAR(9).EQ.255) IERY = 0
+      IBLOCK(14) = IB1PAR(10)
+      IERM = 0
+      IF (IB1PAR(10).LT.1.OR.IB1PAR(10).GT.12) IERM = 1
+      IF (IB1PAR(10).EQ.255) IERM = 0
+      IBLOCK(15) = IB1PAR(11)
+      IERD = 0
+      IF (IB1PAR(11).LT.1.OR.IB1PAR(11).GT.31) IERD = 1
+      IF (IB1PAR(11).EQ.255) IERD = 0
+      IBLOCK(16) = IB1PAR(12)
+      IERH = 0
+      IF (IB1PAR(12).LT.0.OR.IB1PAR(12).GT.23) IERH = 1
+      IF (IB1PAR(12).EQ.255) IERH = 0
+      IBLOCK(17) = IB1PAR(13)
+      IERN = 0
+      IF (IB1PAR(13).LT.0.OR.IB1PAR(13).GT.59) IERN = 1
+      IF (IB1PAR(13).EQ.255) IERN = 0
+C
+      IERR = IERY + IERM + IERD + IERH + IERN
+C
+      IF (IERR.NE.0)
+     C    THEN
+              IERR = 8
+              WRITE (*,9008) IB1PAR(9),IB1PAR(10),IB1PAR(11),IB1PAR(12),
+     C                       IB1PAR(13)
+ 9008         FORMAT (1H ,'INVALID DATE/TIME ',3I2,' / ',2I2)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    UNIT OF TIME - ( CODE TABLE 4 ).
+C*    TIME RANGE(S) AND TIME RANGE INDICATOR ( CODE TABLE 5 ).
+C***
+C
+C     TIME UNIT.
+C
+      IBLOCK(18) = IB1PAR(14)
+      IF (IB1PAR(14).LT.0.OR.IB1PAR(14).GT.7) IERR = 9
+C
+C*    TIME UNIT CODES ARE IN THE RANGE 0 - 7, WITH 254 USED FOR SECONDS.
+C
+      IF (IB1PAR(14).EQ.254) IERR = 0
+C
+C     THERE CAN BE ONE OR TWO TIME RANGES, EACH IN 1 OCTECT OR
+C     ONE TIME RANGE IN 2 OCTECTS.
+C
+      IF (IB1PAR(17).EQ.0.OR.IB1PAR(17).EQ.1
+     C .OR.IB1PAR(17).EQ.10)   IB1PAR(16)  = 0
+C
+C     CROSS CHECK RANGE VALUES AND FLAG VALUES.
+C
+      IF (IB1PAR(15).GT.65535.OR.IB1PAR(15).LT.0)   IERR = 9
+      IF (IB1PAR(15).GT.255.AND.IB1PAR(17).NE.10)   IERR = 9
+      IF (IB1PAR(16).GT.255.OR.IB1PAR(16).LT.0)     IERR = 9
+      IF (IB1PAR(17).LT.0.OR.IB1PAR(17).GT.10)      IERR = 9
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9009) IB1PAR(14),IB1PAR(15),IB1PAR(16),IB1PAR(17)
+ 9009         FORMAT (1H ,'TIME UNIT/TIME 1/TIME 2/INDICATOR ERROR - ',
+     C                I8,2X,'/',I8,2X,'/',I8,2X,'/',I8)
+              RETURN
+          ENDIF
+C
+      IBLOCK(19) = IB1PAR(15)
+      IBLOCK(20) = IB1PAR(16)
+C
+C     ONE TIME RANGE OCCUPYING BOTH OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+C            8 LOW ORDER BITS IN IBLOCK(20)
+C            HIGH ORDER BITS IN IBLOCK(19)
+C
+             IBLOCK(20) = IBLOCK(19)
+             IBLOCK(19) = IBLOCK(19) / 256
+             IBLOCK(20) = IBLOCK(20) - IBLOCK(19) * 256
+         ENDIF
+C
+C     TIME RANGE INDICATOR
+C
+      IBLOCK(21) = IB1PAR(17)
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    NUMBER AVERAGED.
+C***
+C
+      IBLOCK(22) = 0
+      IBLOCK(23) = 0
+C
+C
+C     CHECK CONSISTENCY INDICATOR AND NUMBER FIELD.
+C
+      IF (IB1PAR(17).EQ.3.AND.IB1PAR(18).EQ.0)
+     C   THEN
+             IERR = 12
+             WRITE (*,9013) IB1PAR(17),IB1PAR(18)
+ 9013        FORMAT (1H ,'INDICATOR/NUMBER AVERAGED ERROR - ',
+     C                I8,2X,'/',I8)
+             RETURN
+         ENDIF
+C
+C     VALUE IN TWO OCTETS.
+C
+      IBLOCK(22) = IB1PAR(18)
+C
+C     8 LOW ORDER BITS IN IBLOCK(23)
+C     HIGH ORDER BITS IN IBLOCK(22)
+C
+      IBLOCK(23) = IBLOCK(22)
+      IBLOCK(22) = IBLOCK(22) / 256
+      IBLOCK(23) = IBLOCK(23) - IBLOCK(22) * 256
+C
+C
+C
+C
+C
+C
+C***
+C*    RESERVED ELEMENT.
+C***
+C
+      IBLOCK(24) = 0
+C
+C
+C
+C
+C
+C
+C
+C***
+C*
+C*    PACK 24 8-BIT FIELDS OF BLOCK 1 IN CODED ARRAY.
+C*
+C***
+C
+      IBYTE = 8
+      NVAL = 24
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 2 - GRID DESCRIPTION BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C
+C***
+C*    SET ARRAY IBLOCK TO 0 . IT IS USED TO ZERO FILL RESERVED OCTETS.
+C***
+C
+      DO 100 I=1,24
+         IBLOCK(I) = 0
+  100 CONTINUE
+C
+C
+C
+C
+C***
+C*    LAT/LONGITUDE GRID, GAUSSIAN GRID AND SPHERICAL HARMONICS
+C*    ARE THE ONLY DATA REPRESENTATIONS HANDLED.
+C***
+C
+      IF (IB1PAR(4).EQ.128.OR.IB1PAR(4).EQ.192)
+     C   THEN
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4.AND.IB2PAR(1).NE.50)
+     C          THEN
+                     WRITE (*,*)'GRID DESCRIPTION BLOCK NOT YET DEFINED'
+                     IERR = -3
+                     RETURN
+                ENDIF
+C
+C
+C
+C
+C***
+C*       LENGTH OF GRID DESCRIPTION BLOCK.
+C***
+C
+C        LENGTH IS 32 OCTETS FOR LAT/LONG, GAUSSIAN AND SPHERICAL
+C        HARMONICS . FOR ANY DATA  ON HYBRID LEVELS THE
+C        VERTICAL COORDINATES ARE ADDED.
+C
+         I = 32
+         IF (IB1PAR(6).GT.108) I = I + ILENV * 4
+C
+         CALL SBYTE (IGRIB(IWORD),I,IOFF,24)
+         CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*       NUMBER OF UNUSED BITS AT END OF BLOCK.
+C*       CURRENT DEFINITION IMPLIES 0.
+C***
+C
+         CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C***
+C*       NEXT OCTET IS RESERVED.
+C***
+C
+         CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C***
+C*       DATA REPRESENTATION TYPE.
+C***
+C
+         IF (IB2PAR(1).LT.0.OR.IB2PAR(1).GT.4) IERR = 10
+         IF (IB2PAR(1).EQ.50) IERR = 0
+         IF (IERR.NE.0)
+     C      THEN
+                IERR = 10
+                WRITE (*,9010) IB2PAR(1)
+ 9010           FORMAT (1H ,'INVALID DATA REPRESENTATION TYPE - ',I3)
+                RETURN
+            ENDIF
+         CALL SBYTE (IGRIB(IWORD),IB2PAR(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*       LAT/LONG OR GAUSSIAN GRID.
+C***
+C
+         IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C    THEN
+C
+C            NUMBER OF LAT/LONG POINTS.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONG OF ORIGIN.
+C            SIGN BIT SET TO 1 IF VALUES ARE NEGATIVE.
+C
+             DO 200 I=1,2
+                ILAT(I) = IB2PAR(I+3)
+                ISIGN   = 0
+                IF (ILAT(I).LT.0)
+     C            THEN
+                      ISIGN   = 8388608
+                      ILAT(I) = - ILAT(I)
+                  ENDIF
+                ILAT(I) = ILAT(I) + ISIGN
+  200        CONTINUE
+C
+             CALL SBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+             CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            RESOLUTION FLAG.
+C
+C            INCREMENTS       BINARY CODE     DECIMAL VALUE
+C
+C             NOT GIVEN        00000000              0
+C              GIVEN           10000000            128
+C
+C
+C            SHIFT 1 BIT FLAG FIELD TO LOW ORDER BIT
+C
+             KTEMP = IB2PAR(6) / 128
+C
+             IF (KTEMP.LE.0.OR.KTEMP.GT.1)
+     C          THEN
+                    CALL PRTBIN (IB2PAR(6),8,KTEMP,ERR)
+                    WRITE (*,9011) KTEMP
+ 9011               FORMAT (1H ,'INVALID RESOLUTION FLAG ',I8.8)
+                    IERR = 11
+                    RETURN
+                ENDIF
+C
+C            SET TO ALL 1-BITS UNUSED INCREMENT FIELDS.
+C
+             IF (IB2PAR(6).EQ.0)
+     C          THEN
+C                   1111111111111111 BINARY = 65535 DECIMAL
+                    IB2PAR(9)  = 65535
+                    IB2PAR(10) = 65535
+                ENDIF
+C
+             CALL SBYTE (IGRIB(IWORD),IB2PAR(6),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONG OF EXTREME POINT.
+C
+C            SIGN BIT SET TO 1 IF VALUES ARE NEGATIVE.
+C
+             DO 300 I=1,2
+                ILAT(I) = IB2PAR(I+6)
+                ISIGN   = 0
+                IF (ILAT(I).LT.0)
+     C            THEN
+                      ISIGN   = 8388608
+                      ILAT(I) = - ILAT(I)
+                  ENDIF
+                ILAT(I) = ILAT(I) + ISIGN
+  300        CONTINUE
+C
+             CALL SBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+             CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C            DIRECTION INCREMENTS / NUMBER OF LATITUDE LINES.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(9),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            SCANNING MODE FLAGS.
+C
+C            VALID VALUES       VALUE / 32
+C             BINARY             DECIMAL
+C
+C              00000000               0
+C              10000000               4
+C              01000000               2
+C              11000000               6
+C              00100000               1
+C              10100000               5
+C              01100000               3
+C              11100000               7
+C
+C            SHIFT 3 BIT FLAG FIELD TO LOW ORDER BITS.
+C
+             KTEMP = IB2PAR(11) / 32
+C
+             IF (KTEMP.LT.0.OR.KTEMP.GT.7)
+     C          THEN
+                    CALL PRTBIN (IB2PAR(11),8,KTEMP,ERR)
+                    WRITE (*,9014) KTEMP
+ 9014               FORMAT (1H ,'INVALID SCANNING MODE FLAGS ',I8.8)
+                    IERR = 12
+                    RETURN
+                ENDIF
+C
+             CALL SBYTE (IGRIB(IWORD),IB2PAR(11),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            4 RESERVED OCTETS.
+C
+             CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+             CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*       SPHERICAL HARMONIC DATA.
+C***
+C
+         IF (IB2PAR(1).EQ.50)
+     C    THEN
+C
+C            PENTAGONAL RESOLUTION PARAMETERS.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,3)
+             CALL OFFSET (IOFF,3,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            REPRESENTATION TYPE AND MODE.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(5),IOFF,8,0,2)
+             CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            18 RESERVED OCTETS.
+C
+             CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,18)
+             CALL OFFSET (IOFF,18,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+          ENDIF
+C
+C
+C
+C
+C***
+C*       ADD VERTICAL COORDINATE PARAMETERS FOR HYBRID LEVELS.
+C***
+C
+         IF (IB1PAR(6).GT.108)
+     C    THEN
+             DO 400 I=1,ILENV
+                 CALL CONFP (FVERT(I),IEXP,IMANT)
+                 CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+                 CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                 IF (IERR.NE.0) RETURN
+                 CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+                 CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+                 IF (IERR.NE.0) RETURN
+  400        CONTINUE
+C
+          ENDIF
+C
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 3 (IF REQUIRED) - BIT MAP BLOCK.
+C*
+C********************************************************************
+C
+      IF (IB1PAR(4).EQ.64.OR.IB1PAR(4).EQ.192)
+     C     THEN
+C***
+C*            SET UP  LENGTH OG BLOCK 3.
+C***
+              NUB=0
+              NGRD=IB2PAR(2)*IB2PAR(3)
+              NOCT=NGRD/8
+              IBOF=NGRD-NOCT*8
+C
+              IF(IBOF.NE.0) THEN
+                               NUB=8-IBOF
+                               NOCT=NOCT+1
+                            END IF
+C
+              IF(MOD(NOCT,2).NE.0) THEN
+                                      NUB=NUB+8
+                                      NOCT=NOCT+1
+                                   END IF
+C
+              ILEN3=NOCT+6
+C
+              CALL SBYTE(IGRIB(IWORD),ILEN3,IOFF,24)
+              CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+              IF(IERR.NE.0) RETURN
+C
+C*            SET UP NUMBER OF UNUSED BITS AT THE END OF BLOCK.
+C
+              CALL SBYTE(IGRIB(IWORD),NUB,IOFF,8)
+              CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+              IF(IERR.NE.0) RETURN
+C
+C*            SET OCTET 5-6 OCTET (NUMERIC).
+C
+              CALL SBYTE(IGRIB(IWORD),0,IOFF,16)
+              CALL OFFSET(IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+              IF(IERR.NE.0) RETURN
+C
+C*            SET UP BIT MAP.
+C
+              DO 310 J=1,IBLEN
+C
+              CALL SBYTE(IGRIB(IWORD),IBMAP(J),IOFF,1)
+              CALL OFFSET(IOFF,1,IWORD,1,NBIT,ILENG,IERR)
+              IF(IERR.NE.0) RETURN
+C
+ 310  CONTINUE
+C
+C*            SET UP UNUSED BITS.
+C
+              CALL SBYTES(IGRIB(IWORD),0,IOFF,1,0,NUB)
+              CALL OFFSET(IOFF,NUB,IWORD,1,NBIT,ILENG,IERR)
+              IF(IERR.NE.0) RETURN
+           ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C***
+C*    RETAIN POINTERS TO WORD AND BIT POSITION OF BINARY DATA
+C*    BLOCK LENGTH FIELD. ENTER LENGTH AS 0.
+C***
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C***
+C
+C     FLAG IS 1000 FOR SPHERICAL HARMONICS, 0000 FOR LAT/LONG
+C     OR GAUSSIAN GRID.
+C
+      IREP = 0
+      IF (IB2PAR(1).EQ.50) IREP = 1
+C
+C     FLAG FIELD IS IREP SHIFTED LEFT BY 7 BITS
+C
+      IFLAG = IREP * 128
+C
+      CALL SBYTE (IGRIB(IWORD),IFLAG,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    FIND MAXIMUM AND MINIMUM VALUES IN DATA ARRAY. FOR
+C*    DATA IN SPHERICAL HARMONIC FORM THE FIRST WORD CONTAINS
+C*    THE REAL (0,0)COEFFICIENT, WHICH IS TREATED SEPARATELY.
+C***
+C
+C
+      ILEN = KLENF - IREP
+      CALL MXMN (FPDATA(IREP+1),ILEN,FMAX,FMIN)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    SCALE FACTOR.
+C***
+C
+C     CALCULATE SCALE FACTOR
+C
+      S = (FMAX-FMIN)/(2**(IBITS+1)-1)
+      IF (S.NE.0.) S = ALOG(S)/ALOG(2.) + 2.
+      ISCALE = MIN(INT(S),INT(S+SIGN(1.,S)))
+C
+C
+C
+C
+C     SET SIGN BIT (BIT 16) AND PUT SCALE FACTOR INTO REMAINING
+C     15 BITS OF CODED 16 BIT FIELD.
+C
+      JSCALE = ISCALE
+      ISIGN = 0
+      IF (JSCALE.LT.0)
+     C    THEN
+              ISIGN  = 32768
+              JSCALE = - JSCALE
+          ENDIF
+      JSCALE = JSCALE + ISIGN
+C
+      ZSCALE = 2.**ISCALE
+C
+C     FOR MISSING DATA SCALE FACTOR IS SET TO ALL 1-BITS.
+C
+      IF (IMISS.EQ.1) JSCALE = 65535
+C
+      CALL SBYTE (IGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    MINIMUM (REFERENCE) VALUE.
+C***
+C
+C     CONVERT MINIMUM VALUE (FMIN) TO GRIB FORMAT (IEXP,IMANT)
+C
+      CALL CONFP (FMIN,IEXP,IMANT)
+C
+C     EXPONENT AND MANTISSA SET TO ALL 1-BITS FOR MISSING DATA.
+C
+      IF (IMISS.EQ.1)
+     C   THEN
+             IEXP  = 255
+             IMANT = 16777215
+         ENDIF
+      CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+      CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    NUMBER OF BITS IN EACH DATA VALUE.
+C***
+C
+      CALL SBYTE (IGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    IF SPHERICAL HARMONICS DATA, NEXT 4 OCTETS ARE DIFFERENT FORMAT.
+C***
+C
+      IF (IREP.EQ.1)
+     C    THEN
+C
+C            STORE REAL (0,0) COEFFICIENT IN FLOATING
+C            POINT FORM.
+C
+             CALL CONFP (FPDATA(1),IEXP,IMANT)
+C
+             CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C***
+C*    SCALE AND STORE DATA VALUES.
+C***
+C
+      DO 600 I = IREP+1 , KLENF
+         JGRIB     = NINT ( (FPDATA(I)-FMIN) / ZSCALE )
+         FPDATA(I) = ZGRIB
+  600 CONTINUE
+C
+      ILENFM = KLENF - IREP
+      CALL SBYTES (IGRIB(IWORD),FPDATA(IREP+1),IOFF,IBITS,0,ILENFM)
+      CALL OFFSET (IOFF,ILENFM,IWORD,IBITS,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    ENTER LENGTH OF BINARY DATA BLOCK, HAVING ENSURED THAT
+C*    THE LENGTH IS AN EVEN NUMBER OF OCTETS.
+C***
+C
+C     LENGTH OF BINARY DATA BLOCK IN BITS.
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+      L = LBIN / 16
+      L = LBIN - ( L*16 )
+C
+C     FILL UNUSED PORTION OF LAST 2 OCTETS WITH BINARY ZEROES.
+C
+      LNIL = 0
+      IF (L.NE.0)
+     C    THEN
+              LNIL = 16 - L
+              CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,LNIL)
+              CALL OFFSET (IOFF,1,IWORD,LNIL,NBIT,ILENG,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+C     ENTER LENGTH - IN OCTETS - OF DATA BLOCK.
+C
+      LBIN = LBIN / 8
+      CALL SBYTE (IGRIB(IPW),LBIN,IPB,24)
+      CALL OFFSET (IPB,1,IPW,24,NBIT,ILENG,IERR)
+C
+C     ENTER NUMBER OF UNUSED BITS IN FLAG/BIT COUNT FIELD.
+C
+      IFLAG = IFLAG + LNIL
+      CALL SBYTE (IGRIB(IPW),IFLAG,IPB,8)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C
+C***
+C*    ADD 7 7 7 7 TO CODED DATA.
+C***
+C
+      IBLOCK(1) = 55
+      IBLOCK(2) = 55
+      IBLOCK(3) = 55
+      IBLOCK(4) = 55
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+      CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C***
+C*    SET ANY UNUSED PART OF LAST WORD TO BINARY ZEROES.
+C***
+C
+      IF (IOFF.NE.0)
+     C   THEN
+             KBITS = NBIT - IOFF
+             CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,KBITS)
+         ELSE
+             IWORD = IWORD - 1
+         ENDIF
+C
+C
+C
+C***
+C*    ROUND TO 120 OCTETS, IF REQUIRED.
+C***
+C
+      IF (IROUND.EQ.1)
+     C   THEN
+             NUMBIT = IWORD * NBIT
+             I = NUMBIT / 960
+             I = I * 960
+             I = NUMBIT - I
+             IF (I.NE.0) I = (960 - I) / NBIT
+C
+             DO 700 J=IWORD+1,IWORD+I
+                IGRIB(J) = 0
+  700        CONTINUE
+C
+             IWORD = IWORD + I
+         ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/codegr.F b/gribex/codegr.F
new file mode 100755
index 0000000..9dc2a98
--- /dev/null
+++ b/gribex/codegr.F
@@ -0,0 +1,1240 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CODEGR (FPDATA,ILENF,IBITS,NBIT,IB1PAR,
+     C              IB2PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C              IROUND,IERR)
+C
+C
+C---->
+C*
+C*     NAME     : CODEGR
+C*
+C*     FUNCTION : CODE ARRAY OF FLOATING POINT VALUES IN WMO GRIB
+C*                CODE - WITH ECMWF EXTENSIONS.
+C*
+C*     INPUT    : PARAMETERS FOR BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*                IB1PAR - INTEGER ARRAY (DIMENSION 17) OF PRODUCT
+C*                         DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1 ).
+C*                  5       PARAMETER IDENTIFIER (CODE TABLE 2).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVEL (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS.
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*                PARAMETERS FOR BLOCK 2 , GRID DEFINITION BLOCK.
+C*                -----------------------------------------------
+C*                IB2PAR - INTEGER ARRAY (DIMENSION 11) CONTAINING GRID
+C*                         DEFINITION INFORMATION.
+C*                         USE VARIES WITH REPRESENTATION TYPE.
+C*
+C*                WORD      LAT/LONG GRID
+C*                ----      -------------
+C*                 1        DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                 2        NO. OF POINTS ALONG A LATITUDE
+C*                 3        NO. OF POINTS ALONG A MERIDIAN
+C*                 4        LATITUDE OF ORIGIN (SOUTH - IVE).
+C*                 5        LONGITUDE OF ORIGIN (WEST - IVE).
+C*                 6        EXTREME POINT/INCREMENTS FLAG.(CODE TABLE 7)
+C*                 7        LATITUDE OF EXTREME POINT (SOUTH - IVE).
+C*                 8        LONGITUDE OF EXTREME POINT (WEST - IVE).
+C*                 9        LATITUDE INCREMENT
+C*                10        LONGITUDE INCREMENT
+C*                11        SCANNING MODE (CODE TABLE 8)
+C*
+C*                WORD      GAUSSIAN GRID
+C*                ----      -------------
+C*                1-9       AS FOR LAT/LONGITUDE GRID.
+C*                10        THE NUMBER OF LATITUDE LINES BETWEEN A POLE
+C*                          AND THE EQUATOR.
+C*                11        SCANNING MODE (CODE TABLE 8)
+C*
+C*                WORD      SPHERICAL HARMONICS
+C*                ----      -------------------
+C*                  1       DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                  2       J - PENTAGONAL RESOLUTION PARAMETER
+C*                  3       K - PENTAGONAL RESOLUTION PARAMETER
+C*                  4       M - PENTAGONAL RESOLUTION PARAMETER
+C*                  5       REPRESENTATION TYPE (CODE TABLE 9)
+C*                  6       REPRESENTATION MODE (CODE TABLE 10)
+C*                7-11      NOT USED
+C*
+C*
+C*                USE FOR OTHER DATA REPRESENTATION TYPES IS
+C*                TO BE DEFINED LATER.
+C*
+C*                FVERT  - REAL ARRAY OF VERTICAL COORDINATE PARAMETERS
+C*                ILENV  - LENGTH OF THIS ARRAY (NUMBER OF COORDINATE
+C*                         PARAMETERS).
+C*
+C*                USED FOR HYBRID LEVELS ONLY.
+C*
+C*
+C*                PARAMETERS FOR BLOCK 3 , BIT-MAP DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                TO BE DEFINED LATER.
+C*
+C*                PARAMETERS FOR BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*                ILENF   - LENGTH OF THIS ARRAY (NUMBER OF DATA
+C*                          VALUES TO BE CODED)
+C*                IBITS   - NUMBER OF BITS FOR CODED DATA VALUES.
+C*
+C*                          TO INDICATE MISSING DATA VALUES, ILENF IS
+C*                          MADE NEGATIVE AND ALL DATA VALUES SET TO 0.
+C*
+C*                OTHER PARAMETERS
+C*                ----------------
+C*
+C*                NBIT    - NUMBER OF BITS IN COMPUTER WORD.
+C*
+C*                IGRIB   - ARRAY TO RECEIVE DATA IN GRIB CODE.
+C*                ILENG   - LENGTH OF THIS ARRAY.
+C*
+C*                IROUND  - 0 , NO ROUNDING.
+C*                          1 , ROUND TO NEAREST 120 OCTETS.
+C*
+C*    OUTPUT    : IGRIB   - DATA CODED IN GRIB CODE.
+C*                IWORD   - NUMBER OF WORDS OCCUPIED BY CODED DATA.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                           0, NO ERROR.
+C*
+C*                          -1, NUMBER OF BITS PER DATA VALUE EXCEEDS
+C*                              WORD LENGTH, OR MAXIMUM ALLOWED.
+C*                          -2, OUTPUT ARRAY TOO SMALL TO HOLD CODED
+C*                              DATA VALUES.
+C*                          -3, CURRENTLY UNDEFINED OPTION SELECTED.
+C*                          -4, MISSING DATA FIELD CONTAINS NON-ZERO.
+C*
+C*                           1, INVALID ORIGINATING CENTRE.
+C*                           2, INVALID MODEL IDENTIFICATION.
+C*                           3, INVALID GRID DEFINITION.
+C*                           4, INVALID BLOCK INDICATOR FLAG
+C*                           5, INVALID PARAMETER IDENTIFIER.
+C*                           6, INVALID LEVEL TYPE INDICATOR.
+C*                           7, ERROR IN DESCRIPTION OF LEVELS.
+C*                           8, DATE/TIME ERROR.
+C*                           9, INVALID TIME UNIT OR RANGE.
+C*                          10, INVALID DATA REPRESENTATION TYPE.
+C*                          11, INVALID EXTREME POINT/INCREMENT FLAG.
+C*
+C*    JOHN HENNESSY , ECMWF , 15TH APRIL 1985
+C*
+C*
+C----<
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+      DIMENSION FPDATA(*),ILAT(2)
+      DIMENSION IGRIB(ILENG),IBLOCK(24)
+      DIMENSION FVERT(ILENV),IB1PAR(17),IB2PAR(11)
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /60/
+C
+C     CLEAR ERROR INDICATOR.
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    CHECK FOR MISSING DATA INDICATORS.
+C*
+C********************************************************************
+C
+C
+      IMISS = 0
+      IF (ILENF.LT.0)
+     C   THEN
+             KLENF = - ILENF
+             IMISS = 1
+             DO 50 I=1,KLENF
+                IF (FPDATA(I).NE.0.)
+     C             THEN
+                       IERR = -4
+                       WRITE (*,9012)
+ 9012                  FORMAT (1H ,'NON-ZERO VALUE IN MISSING DATA',
+     C                          ' FIELD.')
+                       RETURN
+                   ENDIF
+   50        CONTINUE
+         ELSE
+             KLENF = ILENF
+         ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    CHECK NUMBER OF BITS PER DATA FIELD.
+C*
+C********************************************************************
+C
+C
+      IF (IBITS.GT.NBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              IERR = -1
+              WRITE (*,9000) IBITS,NBIT,IMAX
+ 9000         FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C                'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C                ' PERMITTED VALUE, ',I3)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    THE LETTERS G R I B ARE INSERTED IN THE
+C*    FIRST 4 ELEMENTS OF 'IBLOCK'.
+C***
+C
+      IBLOCK(1) = 71
+      IBLOCK(2) = 82
+      IBLOCK(3) = 73
+      IBLOCK(4) = 66
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    IDENTIFICATION OF CENTRE
+C***
+      IBLOCK(5) = IB1PAR(1)
+      IF (IB1PAR(1).LT.1.OR.IB1PAR(1).GT.98)
+     C   THEN
+             IERR = 1
+             WRITE (*,9001) IB1PAR(1)
+ 9001        FORMAT (1H ,'INVALID ORIGINATING CENTRE ',I3)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    MODEL IDENTIFICATION
+C***
+C
+      IBLOCK(6) = IB1PAR(2)
+      IF (IB1PAR(2).LT.1.OR.IB1PAR(2).GT.255)
+     C   THEN
+             IERR = 2
+             WRITE (*,9002) IB1PAR(2)
+ 9002        FORMAT (1H ,'INVALID MODEL IDENTIFICATION ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GRID DEFINITION
+C***
+C
+      IBLOCK(7) = IB1PAR(3)
+      IF (IB1PAR(3).LT.1.OR.IB1PAR(3).GT.255)
+     C   THEN
+             IERR = 3
+             WRITE (*,9003) IB1PAR(3)
+ 9003        FORMAT (1H ,'INVALID GRID IDENTIFICATION ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OPTIONAL BLOCK INDICATOR FLAG ( CODE TABLE 1 ).
+C***
+C
+      IBLOCK(8) = IB1PAR(4)
+      IF (IB1PAR(4).LT.0.OR.IB1PAR(4).GT.3)    IERR = 4
+C
+C     CHECK IF GRID SPECIFIED IS UNCATALOGUED.
+C
+      IF (IB1PAR(3).EQ.255.AND.IB1PAR(4).EQ.0) IERR = 4
+      IF (IB1PAR(3).EQ.255.AND.IB1PAR(4).EQ.2) IERR = 4
+C
+      IF (IERR.NE.0)
+     C   THEN
+             WRITE (*,9004) IB1PAR(4)
+ 9004        FORMAT (1H ,'INVALID BLOCK INDICATOR ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C***
+C*    PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C***
+C
+      IBLOCK(9) = IB1PAR(5)
+      IF (IB1PAR(5).LT.0.OR.IB1PAR(5).GT.255)
+     C   THEN
+             IERR = 5
+             WRITE (*,9005) IB1PAR(5)
+ 9005        FORMAT (1H ,'INVALID PARAMETER ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C***
+C*    INDICATOR OF LEVEL TYPE ( CODE TABLE 3 ).
+C***
+C
+      IBLOCK(10) = IB1PAR(6)
+      IF (IB1PAR(6).LT.0.OR.IB1PAR(6).GT.110)
+     C   THEN
+             IERR = 6
+             WRITE (*,9006) IB1PAR(6)
+ 9006        FORMAT (1H ,'INVALID LEVEL TYPE ',I4)
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C
+C
+C     FOR CERTAIN SPECIAL LEVELS NO FURTHER DESCRIPTION IS
+C     NECESSARY, AND THE FIELDS ARE SET TO 0.
+C
+      IF (IB1PAR(6).LT.100.OR.IB1PAR(6).EQ.102)
+     C    THEN
+              IB1PAR(7) = 0
+              IB1PAR(8) = 0
+          ENDIF
+C
+      IBLOCK(11) = IB1PAR(7)
+      IBLOCK(12) = IB1PAR(8)
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS.
+C
+      IF (IB1PAR(6).EQ.100.OR.IB1PAR(6).EQ.103.OR.IB1PAR(6).EQ.105.
+     C    OR.IB1PAR(6).EQ.107.OR.IB1PAR(6).EQ.109)
+     C    THEN
+              IBLOCK(12) = IBLOCK(11)
+              IBLOCK(11) = IBLOCK(11) / 32
+              IBLOCK(12) = IBLOCK(12) - IBLOCK(11) * 32
+              IF (IB1PAR(7).GT.65535) IERR = 7
+          ELSE
+              IF (IB1PAR(7).GT.255.OR.IB1PAR(8).GT.255) IERR = 7
+          ENDIF
+C
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9007) IB1PAR(7),IB1PAR(8)
+ 9007         FORMAT (1H ,'LEVEL DESCRIPTION ERROR ',I8,3X,I8)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    DATE AND TIME
+C***
+C
+      IBLOCK(13) = IB1PAR(9)
+      IF (IB1PAR(9).LT.0.OR.IB1PAR(9).GT.99)   IERR = 8
+      IBLOCK(14) = IB1PAR(10)
+      IF (IB1PAR(10).LT.1.OR.IB1PAR(10).GT.12) IERR = 8
+      IBLOCK(15) = IB1PAR(11)
+      IF (IB1PAR(11).LT.1.OR.IB1PAR(11).GT.31) IERR = 8
+      IBLOCK(16) = IB1PAR(12)
+      IF (IB1PAR(12).LT.0.OR.IB1PAR(12).GT.23) IERR = 8
+      IBLOCK(17) = IB1PAR(13)
+      IF (IB1PAR(13).LT.0.OR.IB1PAR(13).GT.59) IERR = 8
+C
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9008) IB1PAR(9),IB1PAR(10),IB1PAR(11),IB1PAR(12),
+     C                       IB1PAR(13)
+ 9008         FORMAT (1H ,'INVALID DATE/TIME ',3I2,' / ',2I2)
+              RETURN
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    UNIT OF TIME , TIME RANGE(S) AND TIME RANGE FLAG ( CODE TABLE 5 ).
+C***
+C
+C     TIME UNIT.
+C
+      IBLOCK(18) = IB1PAR(14)
+      IF (IB1PAR(14).LT.0.OR.IB1PAR(14).GT.90) IERR = 9
+C
+C     THERE CAN BE ONE OR TWO TIME RANGES, EACH IN 1 OCTECT OR
+C     ONE TIME RANGE IN 2 OCTECTS.
+C
+      IF (IB1PAR(17).EQ.0.OR.IB1PAR(17).EQ.10)   IB1PAR(16)  = 0
+C
+C     CROSS CHECK RANGE VALUES AND FLAG VALUES.
+C
+      IF (IB1PAR(15).GT.65535.OR.IB1PAR(15).LT.0)   IERR = 9
+      IF (IB1PAR(15).GT.255.AND.IB1PAR(17).NE.10)   IERR = 9
+      IF (IB1PAR(16).GT.255.OR.IB1PAR(16).LT.0)     IERR = 9
+      IF (IB1PAR(17).LT.0.OR.IB1PAR(17).GT.10)      IERR = 9
+      IF (IERR.NE.0)
+     C    THEN
+              WRITE (*,9009) IB1PAR(14),IB1PAR(15),IB1PAR(16),IB1PAR(17)
+ 9009         FORMAT (1H ,'TIME UNIT/RANGE1/RANGE2/FLAG ERROR - ',
+     C                I8,2X,'/',I8,2X,'/',I8,2X,'/',I8)
+              RETURN
+          ENDIF
+C
+      IBLOCK(19) = IB1PAR(15)
+      IBLOCK(20) = IB1PAR(16)
+C
+C     ONE TIME RANGE OCCUPYING BOTH OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+             IBLOCK(20) = IBLOCK(19)
+             IBLOCK(19) = IBLOCK(19) / 32
+             IBLOCK(20) = IBLOCK(20) - IBLOCK(19) * 32
+         ENDIF
+C
+C     TIME RANGE FLAG
+C
+      IBLOCK(21) = IB1PAR(17)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    RESERVED ELEMENTS.
+C***
+C
+      IBLOCK(22) = 0
+      IBLOCK(23) = 0
+      IBLOCK(24) = 0
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    PACK 24 8-BIT FIELDS OF BLOCK 1 IN CODED ARRAY.
+C*
+C********************************************************************
+C
+      IWORD = 1
+      IBYTE = 8
+      NVAL = 24
+      IOFF = 0
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 2 - GRID DESCRIPTION BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C
+C***
+C*    SET ARRAY IBLOCK TO 0 . IT IS USED TO ZERO FILL RESERVED OCTETS.
+C***
+C
+      DO 100 I=1,24
+         IBLOCK(I) = 0
+  100 CONTINUE
+C
+C
+C
+C
+C***
+C*    LAT/LONGITUDE GRID, GAUSSIAN GRID AND SPHERICAL HARMONICS
+C*    ARE THE ONLY DATA REPRESENTATIONS HANDLED.
+C***
+C
+      IF (IB1PAR(4).EQ.1.OR.IB1PAR(4).EQ.3)
+     C   THEN
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4.AND.IB2PAR(1).NE.50)
+     C          THEN
+                     WRITE (*,*)'GRID DESCRIPTION BLOCK NOT YET DEFINED'
+                     IERR = -3
+                     RETURN
+                ENDIF
+C
+C
+C
+C
+C***
+C*       LENGTH OF GRID DESCRIPTION BLOCK.
+C***
+C
+C        LENGTH IS 32 OCTETS FOR LAT/LONG, GAUSSIAN AND SPHERICAL
+C        HARMONICS . FOR ANY DATA  ON HYBRID LEVELS THE
+C        VERTICAL COORDINATES ARE ADDED.
+C
+         I = 32
+         IF (IB1PAR(6).GT.108) I = I + ILENV * 4
+C
+         CALL SBYTE (IGRIB(IWORD),I,IOFF,24)
+         CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*       NUMBER OF UNUSED BITS AT END OF BLOCK.
+C*       CURRENT DEFINITION IMPLIES 0.
+C***
+C
+         CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C***
+C*       NEXT OCTET IS RESERVED.
+C***
+C
+         CALL SBYTE (IGRIB(IWORD),IBLOCK(I),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C***
+C*       DATA REPRESENTATION TYPE.
+C***
+C
+         IF (IB2PAR(1).LT.0.OR.IB2PAR(1).GT.4) IERR = 10
+         IF (IB2PAR(1).EQ.50) IERR = 0
+         IF (IERR.NE.0)
+     C      THEN
+                IERR = 10
+                WRITE (*,9010) IB2PAR(1)
+ 9010           FORMAT (1H ,'INVALID DATA REPRESENTATION TYPE - ',I3)
+                RETURN
+            ENDIF
+         CALL SBYTE (IGRIB(IWORD),IB2PAR(1),IOFF,8)
+         CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+         IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*       LAT/LONG OR GAUSSIAN GRID.
+C***
+C
+         IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C    THEN
+C
+C            NUMBER OF LAT/LONG POINTS.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONG OF ORIGIN.
+C            SIGN BIT SET TO 1 IF VALUES ARE NEGATIVE.
+C
+             DO 200 I=1,2
+                ILAT(I) = IB2PAR(I+3)
+                ISIGN   = 0
+                IF (ILAT(I).LT.0)
+     C            THEN
+                      ISIGN   = 8388608
+                      ILAT(I) = - ILAT(I)
+                  ENDIF
+                ILAT(I) = ILAT(I) + ISIGN
+  200        CONTINUE
+C
+             CALL SBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+             CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            EXTREME POINT / INCREMENTS FLAG.
+C            SET TO 0 UNUSED EXTREME POINT/ INCREMENT FIELDS.
+C
+             IF (IB2PAR(6).LE.1.OR.IB2PAR(6).GT.3)
+     C          THEN
+                    WRITE (*,9011) IB2PAR(6)
+ 9011               FORMAT (1H ,'INVALID EXTREME POINT / INCREMENT',
+     C                          ' FLAG - ',I3)
+                    IERR = 11
+                    RETURN
+                ENDIF
+C
+             IF (IB2PAR(6).EQ.1)
+     C          THEN
+                    IB2PAR(7) = 0
+                    IB2PAR(8) = 0
+                ENDIF
+C
+             IF (IB2PAR(6).EQ.2)
+     C          THEN
+                    IB2PAR(9)  = 0
+                    IB2PAR(10) = 0
+                ENDIF
+C
+             CALL SBYTE (IGRIB(IWORD),IB2PAR(6),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONG OF EXTREME POINT.
+C
+C            SIGN BIT SET TO 1 IF VALUES ARE NEGATIVE.
+C
+             DO 300 I=1,2
+                ILAT(I) = IB2PAR(I+6)
+                ISIGN   = 0
+                IF (ILAT(I).LT.0)
+     C            THEN
+                      ISIGN   = 8388608
+                      ILAT(I) = - ILAT(I)
+                  ENDIF
+                ILAT(I) = ILAT(I) + ISIGN
+  300        CONTINUE
+C
+             CALL SBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+             CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C            DIRECTION INCREMENTS / NUMBER OF LATITUDE LINES.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(9),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            SCANNING MODE.
+C
+             CALL SBYTE (IGRIB(IWORD),IB2PAR(11),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            4 RESERVED OCTETS.
+C
+             CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+             CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*       SPHERICAL HARMONIC DATA.
+C***
+C
+         IF (IB2PAR(1).EQ.50)
+     C    THEN
+C
+C            PENTAGONAL RESOLUTION PARAMETERS.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,3)
+             CALL OFFSET (IOFF,3,IWORD,16,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            REPRESENTATION TYPE AND MODE.
+C
+             CALL SBYTES (IGRIB(IWORD),IB2PAR(5),IOFF,8,0,2)
+             CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            18 RESERVED OCTETS.
+C
+             CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,18)
+             CALL OFFSET (IOFF,18,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+          ENDIF
+C
+C
+C
+C
+C***
+C*       ADD VERTICAL COORDINATE PARAMETERS FOR HYBRID LEVELS.
+C***
+C
+         IF (IB1PAR(6).GT.108)
+     C    THEN
+             DO 400 I=1,ILENV
+                 CALL CONFP (FVERT(I),IEXP,IMANT)
+                 CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+                 CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                 IF (IERR.NE.0) RETURN
+                 CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+                 CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+                 IF (IERR.NE.0) RETURN
+  400        CONTINUE
+C
+          ENDIF
+C
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 3 (IF REQUIRED) - BIT MAP BLOCK.
+C*
+C********************************************************************
+C
+      IF (IB1PAR(4).EQ.2.OR.IB1PAR(4).EQ.3)
+     C     THEN
+               WRITE (*,*)'BIT MAP BLOCK NOT YET DEFINED'
+               IERR = -3
+               RETURN
+           ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C***
+C*    RETAIN POINTERS TO WORD AND BIT POSITION OF BINARY DATA
+C*    BLOCK LENGTH FIELD. ENTER LENGTH AS 0.
+C***
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL SBYTE (IGRIB(IWORD),IBLOCK(1),IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C***
+C
+C     FLAG IS 1 FOR SPHERICAL HARMONICS, 0 FOR LAT/LONG OR GAUSSIAN.
+C
+      IREP = 0
+      IF (IB2PAR(1).EQ.50) IREP = 1
+      IFLAG = IREP * 16
+C
+      CALL SBYTE (IGRIB(IWORD),IFLAG,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    FIND MAXIMUM AND MINIMUM VALUES IN DATA ARRAY. FOR
+C*    DATA IN SPHERICAL HARMONIC FORM THE FIRST WORD CONTAINS
+C*    THE REAL (0,0)COEFFICIENT, WHICH IS TREATED SEPARATELY.
+C***
+C
+C
+      ILEN = KLENF - IREP
+      CALL MXMN (FPDATA(IREP+1),ILEN,FMAX,FMIN)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    SCALE FACTOR.
+C***
+C
+C     CALCULATE SCALE FACTOR
+C
+      S = (FMAX-FMIN)/(2**(IBITS+1)-1)
+      IF (S.NE.0.) S = ALOG(S)/ALOG(2.) + 2.
+      ISCALE = MIN(INT(S),INT(S+SIGN(1.,S)))
+C
+C
+C
+C
+C     SET SIGN BIT (BIT 16) AND PUT SCALE FACTOR INTO REMAINING
+C     15 BITS OF CODED 16 BIT FIELD.
+C
+      JSCALE = ISCALE
+      ISIGN = 0
+      IF (JSCALE.LT.0)
+     C    THEN
+              ISIGN  = 32768
+              JSCALE = - JSCALE
+          ENDIF
+      JSCALE = JSCALE + ISIGN
+C
+      ZSCALE = 2.**ISCALE
+C
+C     FOR MISSING DATA SCALE FACTOR IS SET TO ALL 1-BITS.
+C
+      IF (IMISS.EQ.1) JSCALE = 65535
+C
+      CALL SBYTE (IGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    MINIMUM (REFERENCE) VALUE.
+C***
+C
+C     CONVERT MINIMUM VALUE (FMIN) TO GRIB FORMAT (IEXP,IMANT)
+C
+      CALL CONFP (FMIN,IEXP,IMANT)
+C
+C     EXPONENT AND MANTISSA SET TO ALL 1-BITS FOR MISSING DATA.
+C
+      IF (IMISS.EQ.1)
+     C   THEN
+             IEXP  = 255
+             IMANT = 16777215
+         ENDIF
+      CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+      CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    NUMBER OF BITS IN EACH DATA VALUE.
+C***
+C
+      CALL SBYTE (IGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    IF SPHERICAL HARMONICS DATA, NEXT 4 OCTETS ARE DIFFERENT FORMAT.
+C***
+C
+      IF (IREP.EQ.1)
+     C    THEN
+C
+C            STORE REAL (0,0) COEFFICIENT IN FLOATING
+C            POINT FORM.
+C
+             CALL CONFP (FPDATA(1),IEXP,IMANT)
+C
+             CALL SBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             CALL SBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C***
+C*    SCALE AND STORE DATA VALUES.
+C***
+C
+      DO 600 I = IREP+1 , KLENF
+         JGRIB     = NINT ( (FPDATA(I)-FMIN) / ZSCALE )
+         FPDATA(I) = ZGRIB
+  600 CONTINUE
+C
+      ILENFM = KLENF - IREP
+      CALL SBYTES (IGRIB(IWORD),FPDATA(IREP+1),IOFF,IBITS,0,ILENFM)
+      CALL OFFSET (IOFF,ILENFM,IWORD,IBITS,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    ENTER LENGTH OF BINARY DATA BLOCK, HAVING ENSURED THAT
+C*    THE LENGTH IS AN EVEN NUMBER OF OCTETS.
+C***
+C
+C     LENGTH OF BINARY DATA BLOCK IN BITS.
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+      L = LBIN / 16
+      L = LBIN - ( L*16 )
+C
+C     FILL UNUSED PORTION OF LAST 2 OCTETS WITH BINARY ZEROES.
+C
+      LNIL = 0
+      IF (L.NE.0)
+     C    THEN
+              LNIL = 16 - L
+              CALL SBYTE (IGRIB(IWORD),IFILL,IOFF,LNIL)
+              CALL OFFSET (IOFF,1,IWORD,LNIL,NBIT,ILENG,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+C     ENTER LENGTH - IN OCTETS - OF DATA BLOCK.
+C
+      LBIN = LBIN / 8
+      CALL SBYTE (IGRIB(IPW),LBIN,IPB,24)
+      CALL OFFSET (IPB,1,IPW,24,NBIT,ILENG,IERR)
+C
+C     ENTER NUMBER OF UNUSED BITS IN FLAG/BIT COUNT FIELD.
+C
+      IFLAG = IFLAG + LNIL
+      CALL SBYTE (IGRIB(IPW),IFLAG,IPB,8)
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C
+C***
+C*    ADD 7 7 7 7 TO CODED DATA.
+C***
+C
+      IBLOCK(1) = 55
+      IBLOCK(2) = 55
+      IBLOCK(3) = 55
+      IBLOCK(4) = 55
+C
+      CALL SBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+      CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C***
+C*    SET ANY UNUSED PART OF LAST WORD TO BINARY ZEROES.
+C***
+C
+      IF (IOFF.NE.0)
+     C   THEN
+             KBITS = NBIT - IOFF
+             CALL SBYTE (IGRIB(IWORD),IFILL,IOFF,KBITS)
+         ELSE
+             IWORD = IWORD - 1
+         ENDIF
+C
+C
+C
+C***
+C*    ROUND TO 120 OCTETS, IF REQUIRED.
+C***
+C
+      IF (IROUND.EQ.1)
+     C   THEN
+             NUMBIT = IWORD * NBIT
+             I = NUMBIT / 960
+             I = I * 960
+             I = NUMBIT - I
+             IF (I.NE.0) I = (960 - I) / NBIT
+C
+             DO 700 J=IWORD+1,IWORD+I
+                IGRIB(J) = 0
+  700        CONTINUE
+C
+             IWORD = IWORD + I
+         ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/codeps.F b/gribex/codeps.F
new file mode 100755
index 0000000..5d51c1e
--- /dev/null
+++ b/gribex/codeps.F
@@ -0,0 +1,848 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CODEPS( NAME,CHDATA,ILENCH,FPDATA,ILENFP,INDATA,ILENIN,
+     X                   NBYTE,LGDATA,ILENLG,IB1PAR,IPSCOD,ILENPS,
+     X                   IRSERV,NBIT,IWORD,IROUND,IERR)
+C
+C---->
+C**** CODEPS - Pack pseudo-grib product.
+C
+C     Purpose.
+C     --------
+C
+C     Packs character data and arrays of floating point, integer
+C     and logical values in machine-independent pseudo-grib format.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL CODEPS( NAME,CHDATA,ILENCH,FPDATA,ILENFP,INDATA,ILENIN,
+C    X                   NBYTE,LGDATA,ILENLG,IB1PAR,IPSCOD,ILENPS,
+C    X                   IRSERV,NBIT,IWORD,IROUND,IERR)
+C 
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     NAME    - 4 Letters (Code name for section 0).
+C     CHDATA  - Character string (letters and figures only) (section 4).
+C     ILENCH  - Length of this string (Maximum length is 600).
+C               To indicate missing data ILENCH is made
+C               negative and string is all spaces.
+C     FPDATA  - Array of floating point values (section 4).
+C     ILENFP  - Length of this array (number of data values to be coded)
+C               To indicate missing data values, ILENFP is made
+C               negative and all data values are set to 0.
+C     INDATA  - Array of integer values (section 4).
+C     ILENIN  - Length of this array (number of data values to be coded)
+C               To indicate missing data values, ILENIN is made
+C               negative and all data values are set to 0.
+C     NBYTE   - Number of bytes (8-bit) needed for integers.
+C     LGDATA  - Array of logical values (section 4).
+C     ILENLG  - Length of this array (number of data values to be coded)
+C               To indicate missing data values, ILENLG is made
+C               negative and all data values are set .false.
+C     IB1PAR  - Integer array of data definition information (section 1)
+C     ILENPS  - Length of array IPSCOD in bytes.
+C     IRSERV  - Number of bytes reserved in data section for future use.
+C     NBIT    - Number of bits per computer word.
+C     IROUND  - 0 , no rounding.
+C               1 , round to nearest 120 octets.
+C
+C     Output Parameters.
+C     -----------------
+C
+C     IPSCOD  - Data coded in pseudo-grib code.
+C     ILENPS  - Length of this array.
+C     IWORD   - Number of words occupied by coded data.
+C     IERR    - Error indicator.
+C                0, no error.
+C               -1, number of bytes per integer exceeds
+C                   word length, or maximum allowed, is 0
+C                   or negative.
+C               -2, output array too small to hold coded
+C                   data values.
+C               -3, currently undefined option selected.
+C               -4, missing data field contains non-zero.
+C                   ( space for missing character data,
+C                   and .false. for logicals.)
+C               -5, integer larger than field width has
+C                   been encountered.
+C               -6, character data contains other than
+C                   letters, figures or spaces.
+C                1, invalid originating centre.
+C                2, invalid model identification.
+C                3, invalid grid identification.
+C                4, invalid section indicator flag
+C                5, invalid parameter identifier.
+C                6, invalid level type.
+C                7, level description error.
+C                8, date/time error.
+C                9, invalid time unit or range.
+C               10, indicator/number averaged error.
+C 
+C 
+C     Externals.
+C     ----------
+C
+C     SBYTE
+C     SBYTES
+C     CONFPA
+C     PRTBIN
+C     OFFSET
+C 
+C
+C     Comments.
+C     ---------
+C
+C     Section 1 , data definition section (IB1PAR).
+C 
+C     Word      Contents
+C     ----      --------
+C       1       Originating centre identifier.
+C       2       Model identification.
+C       3       Grid definition.
+C       4       Flag (table 1)
+C       5       Parameter identifier (code table 2).
+C       6       Type of level (code table 3).
+C      7-8      Value(s) of levels (code table 3).
+C       9       Year of data
+C      10       Month of data
+C      11       Day of data
+C      12       Hour of data
+C      13       Minute of data
+C      14       Time unit (code table 4).
+C      15       Time range one
+C      16       Time range two
+C      17       Time range flag (code table 5).
+C      18       Number averaged.
+C 
+C     Code tables are those for WMO GRIB code.
+C 
+C     Value(s) of level can occupy 2 words.
+C     For a layer the first word defines the top
+C     and the second the bottom of the layer.
+C     For a single level, only the first word is used.
+C 
+C     Elements not used or inapplicable should be set to 255.
+C 
+C 
+C     Author.
+C     -------
+C
+C     J.Hennessy   05.02.86
+C 
+C
+C     Modifications.
+C     --------------
+C
+C     J.Hennessy   06.06.86
+C                  19.08.86
+C                  21.08.86
+C 
+C     J.Hennessy   17.09.90
+C     Lower case letters as well as the characters
+C     _ - . , added.
+C
+C     J.D.Chambers    ECMWF    13.09.94
+C     Inhibit abort if NOABORT = 1, use grbcom.h
+C
+C     J.D.Chambers    ECMWF    12.08.96
+C     Call CONFP3 instead of CONFP.
+C
+C     J.D.Chambers    ECMWF    April 1998
+C     Call CONFPA instead of CONFP3.
+C     (Vectorization improvement from D.Dent).
+C 
+C----<
+C********************************************************************
+C
+      IMPLICIT NONE
+C
+C     Parameters
+      INTEGER NTYPE, NCHAR
+      PARAMETER (NTYPE=2)
+      PARAMETER (NCHAR=67)
+C
+C     Subroutine arguments
+      CHARACTER*4 NAME
+      CHARACTER*(*) CHDATA
+      INTEGER ILENCH, ILENFP, INDATA, ILENIN, NBYTE, ILENLG, IB1PAR
+      INTEGER IPSCOD, ILENPS, IRSERV, NBIT, IWORD, IROUND, IERR
+      REAL FPDATA
+      LOGICAL     LGDATA
+      DIMENSION FPDATA(*), INDATA(*), LGDATA(*)
+      DIMENSION IPSCOD(*), IB1PAR(*)
+C
+C     Local variables
+      CHARACTER*1 CHAR
+      DIMENSION CHAR(NCHAR)
+      INTEGER IBLOCK
+      DIMENSION IBLOCK(24)
+      INTEGER IASCII
+      DIMENSION IASCII(NCHAR)
+      CHARACTER*4 VNAME
+      DIMENSION VNAME(NTYPE)
+      INTEGER JPAR, JLEN
+      DIMENSION JPAR(NTYPE),JLEN(NTYPE)
+C
+C
+      DATA IASCII /65 ,66 ,67 ,68 ,69 ,70 ,71 ,72 ,73 ,74 ,75 ,76 ,77 ,
+     X             78 ,79 ,80 ,81 ,82 ,83 ,84 ,85 ,86 ,87 ,88 ,89 ,90 ,
+     X             48 ,49 ,50 ,51 ,52 ,53 ,54 ,55 ,56 ,57 ,32 ,
+     X             97 ,98 ,99 ,100,101,102,103,104,105,106,107,108,109,
+     X             110,111,112,113,114,115,116,117,118,119,120,121,122,
+     X             95 ,46 ,44 ,45  /
+C
+      DATA CHAR   /'A','B','C','D','E','F','G','H','I','J','K','L','M',
+     X             'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+     X             '0','1','2','3','4','5','6','7','8','9',' ' ,
+     X             'a','b','c','d','e','f','g','h','i','j','k','l','m',
+     X             'n','o','p','q','r','s','t','u','v','w','x','y','z',
+     X             '_','.',',','-' /
+C
+      DATA VNAME  /'BUDG','TIDE'/
+C
+      DATA JLEN   / 6000 , 25320/
+C
+      DATA JPAR   / 128  , 127  /
+C
+C     SET MAXIMUM NUMBER OF BITS FOR INTEGER FIELDS.
+      INTEGER ICMISS, KLENCH, I, IFMISS, KLENFP, IIMISS, KLENIN
+      INTEGER ILMISS, KLENLG, IBITS, IBYTE, NVAL, IOFF, KTEMP
+      INTEGER KERR, IPW, IPB, IEXP, IMANT, NEGSIN, MAXINT, ISIGN
+      INTEGER NTRUE, J, LBIN, L, LNIL, KBITS, NUMBIT, N
+C
+#include "grbcom.h"
+C
+C
+C     Clear error indicator.
+      IERR = 0
+C
+C
+C********************************************************************
+C 
+C     Check for missing data indicators.
+C 
+C********************************************************************
+C
+C     Character data.
+C
+      ICMISS = 0
+      IF (ILENCH.LT.0) THEN
+        KLENCH = -ILENCH
+        ICMISS = 1
+        DO 50 I=1,KLENCH
+          IF (CHDATA(I:I).NE.' ') THEN
+            IERR = -4
+            WRITE(*,*) 'CODEPS: Invalid value in missing data field.'
+            RETURN
+          ENDIF
+   50   CONTINUE
+      ELSE
+        KLENCH = ILENCH
+      ENDIF
+C
+C     Floating point numbers.
+C
+      IFMISS = 0
+      IF (ILENFP.LT.0) THEN
+        KLENFP = - ILENFP
+        IFMISS = 1
+        DO 100 I=1,KLENFP
+          IF (FPDATA(I).NE.0.) THEN
+            IERR = -4
+            WRITE(*,*) 'CODEPS: Invalid value in missing data field.'
+            RETURN
+          ENDIF
+  100   CONTINUE
+      ELSE
+        KLENFP = ILENFP
+      ENDIF
+C
+C     Integers.
+C
+      IIMISS = 0
+      IF (ILENIN.LT.0) THEN
+        KLENIN = - ILENIN
+        IIMISS = 1
+        DO 200 I=1,KLENIN
+          IF (INDATA(I).NE.0) THEN
+            IERR = -4
+            WRITE(*,*) 'CODEPS: Invalid value in missing data field.'
+            RETURN
+          ENDIF
+  200   CONTINUE
+      ELSE
+        KLENIN = ILENIN
+      ENDIF
+C
+C     Logicals.
+C
+      ILMISS = 0
+      IF (ILENLG.LT.0) THEN
+        KLENLG = - ILENLG
+        ILMISS = 1
+        DO 300 I=1,KLENLG
+          IF (LGDATA(I).NEQV..FALSE.) THEN
+            IERR = -4
+            WRITE(*,*) 'CODEPS: Invalid value in missing data field.'
+            RETURN
+          ENDIF
+  300   CONTINUE
+      ELSE
+        KLENLG = ILENLG
+      ENDIF
+C
+C
+C
+C********************************************************************
+C 
+C     Check number of bytes for integer numbers.
+C 
+C********************************************************************
+C
+      IBITS = NBYTE * 8
+C
+      IF (IBITS.GT.NBIT) THEN
+        WRITE(*,*) 'CODEPS: Number of bits per data value ', IBITS
+        WRITE(*,*) '        exceeds word length ', NBIT
+        IERR = -1
+        RETURN
+      ENDIF
+C
+      IF (IBITS.LE.0) THEN
+        WRITE(*,*) 'CODEPS: Maximum permitted value ', IBITS
+        WRITE(*,*) '        should be positive.'
+        IERR = -1
+        RETURN
+      ENDIF
+C
+C
+C********************************************************************
+C 
+C     Section 0 - INDICATOR Section.
+C 
+C********************************************************************
+C
+C
+C     The letters of the code name are inserted in the
+C     first 4 elements of 'IBLOCK'.
+      DO 400 I=1,36
+         IF (NAME(1:1).EQ.CHAR(I)) IBLOCK(1) = IASCII(I)
+         IF (NAME(2:2).EQ.CHAR(I)) IBLOCK(2) = IASCII(I)
+         IF (NAME(3:3).EQ.CHAR(I)) IBLOCK(3) = IASCII(I)
+         IF (NAME(4:4).EQ.CHAR(I)) IBLOCK(4) = IASCII(I)
+  400 CONTINUE
+C
+C     Pack 4 8-bit fields in section 0 of coded array.
+      IWORD = 1
+      IBYTE = 8
+      NVAL  = 4
+      IOFF  = 0
+      CALL SBYTES(IPSCOD(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET(IOFF,NVAL,IWORD,IBYTE,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C********************************************************************
+C 
+C     Section 1 - PRODUCT DEFINITION Section.
+C 
+C********************************************************************
+C
+C
+C     Length of section 1 (in octets) in first 3 octets.
+      IBLOCK(1) = 0
+      IBLOCK(2) = 0
+      IBLOCK(3) = 24
+C
+C     Fourth octet reserved and set to 0.
+      IBLOCK(4) = 0
+C
+C     Identification of centre
+      IBLOCK(5) = IB1PAR(1)
+      IF (IB1PAR(1).LT.1.OR.IB1PAR(1).GT.98) THEN
+        IERR = 1
+        WRITE(*,*) 'CODEPS: Invalid originating centre ', IB1PAR(1)
+        RETURN
+      ENDIF
+C
+C     Model identification
+      IBLOCK(6) = IB1PAR(2)
+      IF (IB1PAR(2).LT.1.OR.IB1PAR(2).GT.255) THEN
+        IERR = 2
+        WRITE(*,*) 'CODEPS: Invalid model identification ', IB1PAR(2)
+        RETURN
+      ENDIF
+C
+C     Grid definition
+      IBLOCK(7) = IB1PAR(3)
+      IF (IB1PAR(3).LT.1.OR.IB1PAR(3).GT.255) THEN
+        IERR = 3
+        WRITE(*,*) 'CODEPS: Invalid grid definition ', IB1PAR(3)
+        RETURN
+      ENDIF
+C
+C     Optional section indicator flags ( code table 1 ).
+C
+C     Sections included  Binary value      Decimal value
+C
+C         NONE             00000000               0
+C          2               10000000             128
+C          3               01000000              64
+C         2 AND 3          11000000             192
+C
+      IBLOCK(8) = IB1PAR(4)
+C
+C     Shift 2-bit flag field right by 6 bits to facilitate checking
+      KTEMP = IB1PAR(4) / 64
+      IF (KTEMP.NE.0) IERR = 4
+      IF (IERR.NE.0) THEN
+        CALL PRTBIN(IB1PAR(4),8,KTEMP,KERR)
+        WRITE(*,*) 'CODEPS: Invalid section indicator flag ', KTEMP
+        WRITE(*,*) 'CODEPS: Return code from PRTBIN = ', KERR
+        RETURN
+      ENDIF
+C
+C     Parameter identifier ( code table 2 ).
+      IBLOCK(9) = IB1PAR(5)
+      IF (IB1PAR(5).LT.0.OR.IB1PAR(5).GT.255) THEN
+        IERR = 5
+        WRITE(*,*) 'CODEPS: Invalid parameter ', IB1PAR(5)
+        RETURN
+      ENDIF
+C
+C     Indicator of level type ( code table 3 ).
+      IBLOCK(10) = IB1PAR(6)
+      IF (IB1PAR(6).LT.0.OR.IB1PAR(6).GT.255) THEN
+        IERR = 6
+        WRITE(*,*) 'CODEPS: Invalid level type ', IB1PAR(6)
+        RETURN
+      ENDIF
+C
+C     Description of level or layer ( code table 3 ).
+C
+C     For certain special levels no further description is
+C     necessary, and the fields are set to 0.
+C
+      IF (((IB1PAR(6).LT.100).AND.(IB1PAR(6).NE.20)).OR.
+     X     (IB1PAR(6).EQ.102) .OR.
+     X     (IB1PAR(6).EQ.200) .OR.
+     X     (IB1PAR(6).EQ.201)) THEN
+        IB1PAR(7) = 0
+        IB1PAR(8) = 0
+      ENDIF
+C
+      IBLOCK(11) = IB1PAR(7)
+      IBLOCK(12) = IB1PAR(8)
+C
+C     Certain level types require that the description occupy
+C     both 8 bit fields.
+C
+      IF ((IB1PAR(6).EQ. 20).OR.
+     X    (IB1PAR(6).EQ.100).OR.
+     X    (IB1PAR(6).EQ.103).OR.
+     X    (IB1PAR(6).EQ.105).OR.
+     X    (IB1PAR(6).EQ.107).OR.
+     X    (IB1PAR(6).EQ.109).OR.
+     X    (IB1PAR(6).EQ.111).OR.
+     X    (IB1PAR(6).EQ.113).OR.
+     X    (IB1PAR(6).EQ.115).OR.
+     X    (IB1PAR(6).EQ.117).OR.
+     X    (IB1PAR(6).EQ.125).OR.
+     X    (IB1PAR(6).EQ.160) ) THEN
+C
+C       8 low order bits in IBLOCK(12)
+C       High order bits in IBLOCK(11)
+        IBLOCK(12) = IBLOCK(11)
+        IBLOCK(11) = IBLOCK(11) / 256
+        IBLOCK(12) = IBLOCK(12) - IBLOCK(11) * 256
+C
+C       Check maximum possible in 16 bits not exceeded.
+        IF (IB1PAR(7).GT.65535) IERR = 7
+      ELSE
+        IF (IB1PAR(7).GT.255.OR.IB1PAR(8).GT.255) IERR = 7
+      ENDIF
+C
+      IF (IERR.NE.0) THEN
+        WRITE(*,*) 'CODEPS: Level description error ', IB1PAR(7),
+     X                                                  IB1PAR(8)
+        RETURN
+      ENDIF
+C
+C     Date and time
+C     (Allow: YYYY format, years 1900 upto 2154
+C      or       YY format, years   00 upto  254)
+C
+      IF( IB1PAR(9).GT.1900 ) THEN
+        IBLOCK(13) = IB1PAR(9) - 1900
+      ELSE
+        IBLOCK(13) = IB1PAR(9)
+      ENDIF
+      IF (IBLOCK(13).LT.0.OR.IBLOCK(13).GT.254) IERR = 8
+C
+      IBLOCK(14) = IB1PAR(10)
+      IF (IB1PAR(10).LT.1.OR.IB1PAR(10).GT.12) IERR = 8
+      IBLOCK(15) = IB1PAR(11)
+      IF (IB1PAR(11).LT.1.OR.IB1PAR(11).GT.31) IERR = 8
+      IBLOCK(16) = IB1PAR(12)
+      IF (IB1PAR(12).LT.0.OR.IB1PAR(12).GT.23) IERR = 8
+      IBLOCK(17) = IB1PAR(13)
+      IF (IB1PAR(13).LT.0.OR.IB1PAR(13).GT.59) IERR = 8
+C
+      IF (IERR.NE.0) THEN
+        WRITE(*,9010) IB1PAR(9),IB1PAR(10),IB1PAR(11),IB1PAR(12),
+     X                       IB1PAR(13)
+ 9010   FORMAT('CODEPS: Invalid date/time ',I4.4,2I2.2,' / ',2I2.2)
+        RETURN
+      ENDIF
+C
+C     Unit of time - ( code table 4 ).
+C     Time range(s) and time range indicator ( code table 5 ).
+C
+C     Time unit.
+      IBLOCK(18) = IB1PAR(14)
+      IF (IB1PAR(14).LT.0.OR.IB1PAR(14).GT.7) IERR = 9
+C
+C     There can be one or two time ranges, each in 1 octect or
+C     one time range in 2 octects.
+      IF (IB1PAR(17).EQ.0.OR.
+     X    IB1PAR(17).EQ.1.OR.
+     X    IB1PAR(17).EQ.10)   IB1PAR(16)  = 0
+C
+C     Cross check range values and flag values.
+      IF (IB1PAR(15).GT.65535.OR.IB1PAR(15).LT.0)   IERR = 9
+      IF (IB1PAR(15).GT.255.AND.IB1PAR(17).NE.10)   IERR = 9
+      IF (IB1PAR(16).GT.255.OR.IB1PAR(16).LT.0)     IERR = 9
+      IF (IB1PAR(17).LT.0.OR.IB1PAR(17).GT.10)      IERR = 9
+      IF (IERR.NE.0) THEN
+        WRITE(*,9011) IB1PAR(14),IB1PAR(15),IB1PAR(16),IB1PAR(17)
+ 9011   FORMAT(1H ,'CODEPS: Time unit/Time 1/Time 2/indicator error - ',
+     X                I8,2X,'/',I8,2X,'/',I8,2X,'/',I8)
+        RETURN
+      ENDIF
+C
+      IBLOCK(19) = IB1PAR(15)
+      IBLOCK(20) = IB1PAR(16)
+C
+C     One time range occupying both octets.
+      IF (IB1PAR(17).EQ.10) THEN
+C
+C       8 low order bits in IBLOCK(20)
+C       High order bits in IBLOCK(19)
+        IBLOCK(20) = IBLOCK(19)
+        IBLOCK(19) = IBLOCK(19) / 256
+        IBLOCK(20) = IBLOCK(20) - IBLOCK(19) * 256
+      ENDIF
+C
+C     Time range indicator
+      IBLOCK(21) = IB1PAR(17)
+C
+C     Number averaged.
+      IBLOCK(22) = 0
+      IBLOCK(23) = 0
+C
+C     Check consistency of indicator and number averaged fields.
+      IF (IB1PAR(17).EQ.3.AND.IB1PAR(18).EQ.0) THEN
+        IERR = 10
+        WRITE(*,9012) IB1PAR(17),IB1PAR(18)
+ 9012   FORMAT(1H ,'CODEPS: Indicator/number averaged error - ',
+     C                I8,2X,'/',I8)
+        RETURN
+      ENDIF
+C
+C     Value in two octets.
+      IBLOCK(22) = IB1PAR(18)
+C
+C     8 low order bits in IBLOCK(23)
+C     High order bits in IBLOCK(22)
+      IBLOCK(23) = IBLOCK(22)
+      IBLOCK(22) = IBLOCK(22) / 256
+      IBLOCK(23) = IBLOCK(23) - IBLOCK(22) * 256
+C
+C     Reserved element.
+      IBLOCK(24) = 0
+C
+C     Pack 24 8-bit fields of section 1 in coded array.
+      IBYTE = 8
+      NVAL = 24
+      CALL SBYTES(IPSCOD(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET(IOFF,NVAL,IWORD,IBYTE,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Set array IBLOCK to 0 . it is used to zero fill reserved octets.
+      DO 500 I=1,24
+         IBLOCK(I) = 0
+  500 CONTINUE
+C
+C
+C********************************************************************
+C 
+C     Section 4 - BINARY DATA Section.
+C 
+C********************************************************************
+C
+C
+C     Octets 1-3 - length of data section (in octets).
+C 
+C     Retain pointers to word and bit position of binary data
+C     section length field. enter length as 0.
+C
+      IPW = IWORD
+      IPB = IOFF
+      CALL SBYTE(IPSCOD(IWORD),IBLOCK(1),IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octet 4 is reserved.
+      CALL SBYTE(IPSCOD(IWORD),IBLOCK(1),IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octet 5 - missing data flag.
+C
+C     1---  missing character data
+C     -1--  missing floating point data
+C     --1-  missing integer data
+C     ---1  missing logical data
+C
+      KTEMP = ICMISS*8 + IFMISS*4 + IIMISS*2 + ILMISS
+      CALL SBYTE(IPSCOD(IWORD),KTEMP,IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octet 6 - number of bytes per integer.
+      CALL SBYTE(IPSCOD(IWORD),NBYTE,IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 7-8 reserved.
+      CALL SBYTES(IPSCOD(IWORD),IBLOCK(1),IOFF,8,0,2)
+      CALL OFFSET(IOFF,2,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 9-11 - number of characters in character data.
+      CALL SBYTE(IPSCOD(IWORD),KLENCH,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 12-14 - number of floating point values
+      CALL SBYTE(IPSCOD(IWORD),KLENFP,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 15-17 - number of integer values
+      CALL SBYTE(IPSCOD(IWORD),KLENIN,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 18-20 - number of logicals
+      CALL SBYTE(IPSCOD(IWORD),KLENLG,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 21-23 - number of bytes in data section reserved.
+      CALL SBYTE(IPSCOD(IWORD),IRSERV,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octets 24-32 are reserved.
+      CALL SBYTES(IPSCOD(IWORD),IBLOCK(1),IOFF,8,0,9)
+      CALL OFFSET(IOFF,9,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Octet 33-   floating point numbers.
+C
+C     Convert values to pseudo-grib format (IEXP,IMANT)
+C
+      IF (KLENFP.NE.0)
+     X  CALL CONFPA(FPDATA,KLENFP,IOFF,IPSCOD(IWORD),IWORD,ILENPS,NBIT)
+C
+C     Integer values
+C
+      IF (KLENIN.NE.0) THEN
+C
+C       Set up mask for negative numbers.
+        NEGSIN = 2 ** (IBITS-1)
+C
+C       Maximum size integer in given field width.
+        MAXINT = NEGSIN - 1
+C
+        DO 700 I=1,KLENIN
+          KTEMP = INDATA(I)
+C
+C         Handle negative numbers.
+          ISIGN = 0
+          IF (KTEMP.LT.0) THEN
+            KTEMP = - KTEMP
+            ISIGN = NEGSIN
+          ENDIF
+C
+C         Check size of numbers.
+          IF (KTEMP.GT.MAXINT) THEN
+            IERR = -5
+            WRITE(*,*) 'CODEPS: Integer larger than field specified'
+            RETURN
+          ENDIF
+C
+C         Include sign bit.
+          KTEMP = KTEMP + ISIGN
+          CALL SBYTE(IPSCOD(IWORD),KTEMP,IOFF,IBITS)
+          CALL OFFSET(IOFF,1,IWORD,IBITS,NBIT,ILENPS,IERR)
+          IF (IERR.NE.0) RETURN
+C
+  700   CONTINUE
+C
+      ENDIF
+C
+C     Logical values
+C
+      IF (KLENLG.NE.0) THEN
+        DO 800 I=1,KLENLG
+          NTRUE = 0
+          IF (LGDATA(I).EQV..TRUE.) NTRUE = 1
+          CALL SBYTE(IPSCOD(IWORD),NTRUE,IOFF,8)
+          CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+          IF (IERR.NE.0) RETURN
+  800   CONTINUE
+C
+      ENDIF
+C
+C     Character data.
+C
+      IF (KLENCH.NE.0) THEN
+        DO 850 I=1,KLENCH
+          DO 825 J=1,NCHAR
+            IF (CHDATA(I:I).EQ.CHAR(J)) THEN
+              KTEMP = IASCII(J)
+              CALL SBYTE(IPSCOD(IWORD),KTEMP,IOFF,8)
+              CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+              IF (IERR.NE.0) RETURN
+              GO TO 850
+            ENDIF
+  825     CONTINUE
+          IERR = -6
+          WRITE(*,*) 'CODEPS: Character data contains other than '
+          WRITE(*,*) '         _ - . , letters, figures or spaces.'
+          RETURN
+  850   CONTINUE
+      ENDIF
+C
+C     Reserved bytes
+C
+      IF (IRSERV.NE.0) THEN
+        DO 900 I=1,IRSERV
+          CALL SBYTE(IPSCOD(IWORD),IBLOCK(1),IOFF,8)
+          CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+          IF (IERR.NE.0) RETURN
+  900   CONTINUE
+C
+      ENDIF
+C
+C     Enter length of binary data section, having ensured that
+C     the length is an even number of octets.
+C
+C     Length of binary data section in bits.
+C
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+      L = LBIN / 16
+      L = LBIN - ( L*16 )
+C
+C     Fill unused portion of last 2 octets with binary zeroes.
+      LNIL = 0
+      IF (L.NE.0) THEN
+        LNIL = 16 - L
+        CALL SBYTE(IPSCOD(IWORD),IBLOCK(1),IOFF,LNIL)
+        CALL OFFSET(IOFF,1,IWORD,LNIL,NBIT,ILENPS,IERR)
+        IF (IERR.NE.0) RETURN
+      ENDIF
+      LBIN = (IWORD-IPW) * NBIT + IOFF - IPB
+C
+C     Enter length - in octets - of data section.
+      LBIN = LBIN / 8
+      CALL SBYTE(IPSCOD(IPW),LBIN,IPB,24)
+      CALL OFFSET(IPB,1,IPW,24,NBIT,ILENPS,IERR)
+C
+C********************************************************************
+C 
+C     Section 5 - END Section.
+C 
+C********************************************************************
+C
+C
+C     Add 7 7 7 7 to coded data.
+      IBLOCK(1) = 55
+      IBLOCK(2) = 55
+      IBLOCK(3) = 55
+      IBLOCK(4) = 55
+      CALL SBYTES(IPSCOD(IWORD),IBLOCK(1),IOFF,8,0,4)
+      CALL OFFSET(IOFF,4,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     Set any unused part of last word to binary zeroes.
+      IF (IOFF.NE.0) THEN
+        KBITS = NBIT - IOFF
+        CALL SBYTE(IPSCOD(IWORD),IBLOCK(1),IOFF,KBITS)
+      ELSE
+        IWORD = IWORD - 1
+      ENDIF
+C
+C     Round to 120 octets, if required.
+      IF (IROUND.EQ.1) THEN
+        NUMBIT = IWORD * NBIT
+        I = NUMBIT / 960
+        I = I * 960
+        I = NUMBIT - I
+        IF (I.NE.0) I = (960 - I) / NBIT
+        DO 1000 J=IWORD+1,IWORD+I
+          IPSCOD(J) = 0
+ 1000   CONTINUE
+C
+        IWORD = IWORD + I
+      ENDIF
+C
+C     Check consistency of record name, parameter number and
+C     record length.
+C 
+C     This may cause problems in the future if old
+C     versions of the budget value records are unpacked
+C     and then repacked.
+C
+C     Diagnostic records can have different lengths.
+C
+      IF (NAME.EQ.'DIAG') GO TO 9999
+C
+      N = (NBIT * IWORD) / 8
+      KERR = 0
+      DO 1100 I=1,NTYPE
+        IF (VNAME(I).EQ.NAME) THEN
+          IF (N.NE.JLEN(I)) KERR = 1
+          IF (IB1PAR(5).NE.JPAR(I)) KERR = 1
+          IF (KERR.NE.0) THEN
+            WRITE(*,9013) N , IB1PAR(5)
+ 9013       FORMAT(1H ,'CODEPS: Illegal record length = ',I6,
+     X      ' octets, or invalid parameter no. = ', I6,'.')
+C
+            IF( NOABORT .EQ. 0 ) CALL ABORT
+          ENDIF
+          GO TO 9999
+        ENDIF
+C
+ 1100 CONTINUE
+C
+      WRITE(*,*) 'CODEPS: Invalid record name supplied - ', NAME
+      IF( NOABORT .EQ. 0 ) CALL ABORT
+C
+C
+ 9999 RETURN
+      END
diff --git a/gribex/comars.h b/gribex/comars.h
new file mode 100755
index 0000000..af74213
--- /dev/null
+++ b/gribex/comars.h
@@ -0,0 +1,165 @@
+
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C*    MARS common areas containing job environment information,
+C     parameter settings etc.
+C
+C     NFTNOS - 12 Fortran unit numbers used by MARS.
+C              NFTNOS(1) is MARSLOG file. Cracked MARS directives.
+C              NFTNOS(2) is MARSPAR file. MARS directives in
+C                        network transmission format.
+C              NFTNOS(5) is unit 5 , standard input.
+C              NFTNOS(6) is unit 6 , standard output.
+C              NFTNOS(7) is MARSDEF or MARSDEFNEXT, language
+C                        definition, operational or test.
+C              Set by routine JENVXX.
+C     NUMREQ - Total number of requests.
+C     NUMFIL - Numbers of different files to be accessed.
+C              NUMFIL(1) , Total number of files to accessed.
+C              NUMFIL(2) , Number of IBM disk files to accessed.
+C              NUMFIL(3) , Number of IBM MSS files to be accessed.
+C              NUMFIL(4) , Number of IBM tape files to be accessed.
+C              NUMFIL(5) , Number of worker machine files to accessed.
+C     NCNDAY - Century day.
+C              Set by routine JENVXX.
+C     NJMODE - Mode in which MARS job is running.
+C              -1, Quit issued.
+C              0 , Checkout directives only.
+C              1 , Connected mode (normal mode retains connection
+C                  with IBM at all times).
+C              2 , Disconnected mode (send requests to IBM and
+C                  terminate).
+C                  Not yet implemented.
+C     NJOBSQ - Unique number identifying job or process.
+C              Set by routine JENVXX.
+C     NUMBIT - Number of bits in computer word.
+C              Set by routine JENVXX.
+C     NDBUGS - Debug print switch for IBM.
+C              0 , No debug printout.     .
+C              8 , Debug print on IBM.
+C              Set by routine JENVXX.
+C     NDBUGL - Debug level indicator for worker machine.
+C              0 , No debug print.
+C              4 , Trace through subroutine sections and
+C                  values of parameters on entry as well as
+C                  other print statements used when actually
+C                  debugging.
+C              Set by routine JENVXX.
+C     NJBCAT - Category assigned to job by MARS.
+C              0 , Archive request.
+C              1 , Manage request.
+C              2 , Checkout request.
+C              3 , Costonly request.
+C              4 , Retrieval from online Operational database on the
+C                  worker machine.
+C              5 , Retrieve guaranteed online (on IBM ) data.
+C              6 , Retrieve online (on IBM ) data.
+C                  Not yet implemented. Treated as category 7.
+C              7 , Retrieve off-line (on IBM ) data.
+C              8 , Retrieval of research department data from
+C                  online Research database on worker machine.
+C     NPRITY - Priority assigned to job by MARS.
+C              1 , High.
+C              2 , Normal.
+C              3 , Low.
+C     NIAORB - 0 , Current job is an active mode job.
+C              1 , Current job is in interactive edit mode.
+C              Set by routine JENVXX.
+C
+      INTEGER NFTNOS
+      INTEGER NCNDAY
+      INTEGER NJMODE
+      INTEGER NJOBSQ
+      INTEGER NUMBIT
+      INTEGER NDBUGS
+      INTEGER NDBUGL
+      INTEGER NJBCAT
+      INTEGER NPRITY
+      INTEGER NIAORB
+      INTEGER NFLTYP
+      INTEGER NUMFIL
+      INTEGER NUMREQ
+C
+      DIMENSION NFTNOS(12)
+      DIMENSION NUMFIL(5)
+C
+      COMMON /INTGCOM/ NFTNOS , NCNDAY , NJMODE , NJOBSQ , NUMBIT ,
+     C                 NDBUGS , NDBUGL , NJBCAT , NPRITY , NIAORB ,
+     C                 NFLTYP , NUMFIL , NUMREQ
+C
+C     COPSYS - Name of computer operating system.
+C              UNICOS
+C              COS
+C              NOS/VE
+C              VMS
+C              MVS/XA
+C              Set by routine calling MARSXX.
+C     CWMACH - Name of machine on which MARS is running.
+C              IBM display uses only first three characters, so these
+C              are made unique.
+C              CRAY    Cray XMP
+C              Y16     Cray YMP 16
+C              Y08     Cray YMP 8
+C              Y04     Cray YMP 4
+C              CYBER
+C              VAX
+C              IBM
+C              Set by routine JENVXX.
+C     CCDATE - Date at start of job in yymmdd format.
+C              Set by routine JENVXX.
+C     CCTIME - Time at start of job in hhmmss format.
+C              Set by routine JENVXX.
+C     CJNAME - Name of job or process.
+C              Set by routine JENVXX.
+C     CACCNT - Account under which job is running.
+C     CWMARS - Connect to test or operational MARS/IBM.
+C              MATS , Test version.
+C              MARS , Operational version.
+C              Set by routine JENVXX.
+C     CWLANG - Use test or operational version of MARS language.
+C              MARSDEF - Operational version.
+C              MATSDEF - Test version.
+C              Set by routine JENVCO for COS version.
+C     CWLAPA - Use test or operational version of MARS language.
+C              .../.../marsdef - Operational version.
+C              .../.../matsdef - Test version.
+C              Set by routine JENVUN for UNICOS version.
+C     CWTMDR - Temporary file directory.
+C              Set by JENVUN.
+C     CWUSER - User name.
+C              Set by JENVUN.
+C     CUSFDB - FDB Usage indicator.
+C              NEVER , Never attempt to access FDB.
+C              ALWAYS, Always attempt to access FDB.
+C              DEFAULT, Analyse request before deciding usage.
+C              Set by JENVUN.
+C     CWEDNO - GRIB Code Edition indicator.
+C              OFF , use current edition.
+C              ON  , use edition 0.
+C
+      CHARACTER*8   COPSYS
+      CHARACTER*8   CWMACH
+      CHARACTER*3   CWUSER
+      CHARACTER*6   CCDATE
+      CHARACTER*6   CCTIME
+      CHARACTER*4   CWMARS
+      CHARACTER*7   CWLANG
+      CHARACTER*7   CUSFDB
+      CHARACTER*48  CWLAPA
+      CHARACTER*48  CWTMDR
+      CHARACTER*16  CJNAME
+      CHARACTER*16  CACCNT
+      CHARACTER*3   CWEDNO
+C
+      COMMON /CHARCOM/ COPSYS , CWMACH , CCDATE , CCTIME , CJNAME ,
+     C                 CACCNT , CWMARS , CWLANG , CWLAPA , CWTMDR ,
+     C                 CWUSER , CUSFDB , CWEDNO
+C
diff --git a/gribex/comcomm.h b/gribex/comcomm.h
new file mode 100755
index 0000000..c2d892f
--- /dev/null
+++ b/gribex/comcomm.h
@@ -0,0 +1,86 @@
+
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C
+C     Definition of network communications block used when
+C     talking to MARS/IBM.
+C
+      PARAMETER (JPPHLN=80)
+      PARAMETER (JPSHLN=30)
+      PARAMETER (JPMXTR=99)
+      PARAMETER (JPALEN=400)
+      PARAMETER (JPCLEN=80)
+      PARAMETER (JPDLEN=1520)
+c----      PARAMETER (JPDLEN=960)
+      PARAMETER (JPMAXV=30)
+C
+      CHARACTER*(JPCLEN) YBLOCK
+      CHARACTER*(JPDLEN) YBUFF
+      CHARACTER*(JPDLEN) YTEMP
+C
+      CHARACTER*1  YSTATU
+      CHARACTER*1  YACTCL
+      CHARACTER*1  YACMOD
+      CHARACTER*1  YDEBUG
+      CHARACTER*1  YNOTRY
+      CHARACTER*5  YREQNO
+      CHARACTER*2  YHDRLN
+      CHARACTER*2  YNOHDR
+      CHARACTER*2  YNSHDR
+      CHARACTER*2  YSUBER
+      CHARACTER*2  YVERSN
+      CHARACTER*4  YUSEID
+      CHARACTER*4  YCOMID
+      CHARACTER*4  YREASN
+      CHARACTER*4  YRETCD
+      CHARACTER*5  YMESLN
+      CHARACTER*6  YSBTIM
+      CHARACTER*6  YSBDAT
+      CHARACTER*6  YRCTIM
+      CHARACTER*6  YJOBSQ
+      CHARACTER*7  YSENID
+      CHARACTER*7  YRECID
+      CHARACTER*7  YUSJOB
+      CHARACTER*8  YUSACC
+      CHARACTER*8  YACTON
+      CHARACTER*10 YINT
+      CHARACTER*10 YRESRV
+      CHARACTER*96 YNAMWK
+      CHARACTER*8  YFIDWK
+      CHARACTER*96 YNMIBM
+C
+      DIMENSION YBLOCK(JPALEN)
+C
+      EQUIVALENCE (YBLOCK(1)( 1:2 ) , YHDRLN)
+      EQUIVALENCE (YBLOCK(1)( 3:6 ) , YUSEID)
+      EQUIVALENCE (YBLOCK(1)( 7:10) , YCOMID)
+      EQUIVALENCE (YBLOCK(1)(11:17) , YSENID)
+      EQUIVALENCE (YBLOCK(1)(18:24) , YRECID)
+      EQUIVALENCE (YBLOCK(1)(25:30) , YSBDAT)
+      EQUIVALENCE (YBLOCK(1)(31:36) , YSBTIM)
+      EQUIVALENCE (YBLOCK(1)(37:42) , YJOBSQ)
+      EQUIVALENCE (YBLOCK(1)(43:48) , YRCTIM)
+      EQUIVALENCE (YBLOCK(1)(49:50) , YNOHDR)
+      EQUIVALENCE (YBLOCK(1)(51:52) , YNSHDR)
+      EQUIVALENCE (YBLOCK(1)(53:54) , YSUBER)
+      EQUIVALENCE (YBLOCK(1)(55:55) , YSTATU)
+      EQUIVALENCE (YBLOCK(1)(56:56) , YACTCL)
+      EQUIVALENCE (YBLOCK(1)(57:61) , YMESLN)
+      EQUIVALENCE (YBLOCK(1)(62:62) , YACMOD)
+      EQUIVALENCE (YBLOCK(1)(63:70) , YUSACC)
+      EQUIVALENCE (YBLOCK(1)(71:77) , YUSJOB)
+      EQUIVALENCE (YBLOCK(1)(78:78) , YDEBUG)
+      EQUIVALENCE (YBLOCK(1)(79:80) , YVERSN)
+C
+      EQUIVALENCE (YBLOCK(2)( 3:10) , YACTON)
+      EQUIVALENCE (YBLOCK(2)(21:24) , YRETCD)
+      EQUIVALENCE (YBLOCK(2)(25:28) , YREASN)
+C
diff --git a/gribex/comgrb.h b/gribex/comgrb.h
new file mode 100755
index 0000000..db68f40
--- /dev/null
+++ b/gribex/comgrb.h
@@ -0,0 +1,13 @@
+
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C*    Common area to hold values used in GRIB encoding
+C     and decoding.
+C
diff --git a/gribex/confp.F b/gribex/confp.F
new file mode 100755
index 0000000..795bd38
--- /dev/null
+++ b/gribex/confp.F
@@ -0,0 +1,96 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CONFP (FVAL,IEXP,IMANT)
+C
+C
+C
+C
+C
+C---->
+C********************************************************************
+C*
+C*    NAME      : CONFP
+C*
+C*    FUNCTION  : CONVERT FLOATING POINT NUMBER FROM MACHINE
+C*                REPRESENTATION TO GRIB REPRESENTATION.
+C*
+C*    INPUT     : FVAL  - FLOATING POINT NUMBER TO BE CONVERTED.
+C*
+C*    OUTPUT    : IEXP  - 8 BIT SIGNED EXPONENT
+C*                IMANT - 24 BIT MANTISSA
+C*                FVAL  - UNCHANGED.
+C*
+C*    JOHN HENNESSY , ECMWF , 15TH APRIL 1985
+C*
+C********************************************************************
+C----<
+C
+C
+      IF (FVAL.EQ.0.0)
+     C   THEN
+             IEXP = 128
+             IMANT = 0
+             RETURN
+         ENDIF
+C
+C
+      EPS = 1.0E-12
+      REF = FVAL
+C
+C     SIGN OF VALUE
+C
+      ISIGN = 0
+      IF (REF.LE.0.)
+     C   THEN
+             ISIGN = 128
+             REF = - REF
+         ENDIF
+C
+C
+C
+C
+C
+C     EXPONENT
+C
+      IF (REF.EQ.0.0)
+     C   THEN
+            IEXP = 0
+         ELSE
+            IEXP = INT(ALOG(REF)*(1.0/ALOG(16.0))+64.0+1.0+EPS)
+         ENDIF
+C
+      IF (IEXP.LT.0  ) IEXP = 0
+      IF (IEXP.GT.127) IEXP = 127
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C     MANTISSA
+C
+      IMANT = NINT (REF/16.0**(IEXP-70))
+C
+C     ADD SIGN BIT TO EXPONENT.
+C
+      IEXP = IEXP + ISIGN
+C
+C
+C
+C
+      RETURN
+C
+      END
diff --git a/gribex/confp2.F b/gribex/confp2.F
new file mode 100755
index 0000000..141e5f9
--- /dev/null
+++ b/gribex/confp2.F
@@ -0,0 +1,186 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE CONFP2 (PVAL,KEXP,KMANT,KBITS)
+C
+C---->
+C**** CONFP2 - Convert floating point number to GRIb representation.
+C
+C     Purpose.
+C     --------
+C
+C           Convert floating point number from machine
+C           representation to GRIB representation.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL CONFP2 (PVAL,KEXP,KMANT,KBITS)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               PVAL    - Floating point number to be converted.
+C
+C               KBITS   - Number of bits in computer word.
+C
+C               Output Parameters.
+C               -----------------
+C
+C               KEXP    - 8 Bit signed exponent.
+C
+C               KMANT   - 24 Bit mantissa.
+C
+C     Method.
+C     -------
+C
+C           Floating point number represented as 8 bit exponent
+C           and 24 bit mantissa in integer values.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           WMO Manual on Codes re GRIB representation.
+C
+C     Comments.
+C     ---------
+C
+C           Rewritten from CONFP, to include number of bits per
+C           computer word, to unite slightly different versions of
+C           CONFP.
+C
+C           Routine contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           John Hennessy   ECMWF   19.03.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     -----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L , O , G )
+      IMPLICIT CHARACTER*8 ( C , H , Y )
+      IMPLICIT INTEGER     ( I , J , K , M , N )
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Convert value of 0.0.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (PVAL.EQ.0.0)
+     C   THEN
+             KEXP  = 0
+             KMANT = 0
+             GO TO 900
+         ENDIF
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Convert other values.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      ZEPS = 1.0E-12
+      IF (KBITS.EQ.32) ZEPS = 1.0E-8
+      ZREF = PVAL
+C
+C     Sign of value.
+C
+      ISIGN = 0
+      IF (ZREF.LT.0.)
+     C   THEN
+             ISIGN = 128
+             ZREF  = - ZREF
+         ENDIF
+C
+C     Exponent.
+C
+      KEXP = INT(ALOG(ZREF)*(1.0/ALOG(16.0))+64.0+1.0+ZEPS)
+C
+      IF (KEXP.LT.0  ) KEXP = 0
+      IF (KEXP.GT.127) KEXP = 127
+C
+C     Mantissa.
+C
+      KMANT = INT (ZREF/16.0**(KEXP-70))
+C
+C     Add sign bit to exponent.
+C
+      KEXP = KEXP + ISIGN
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/confp3.F b/gribex/confp3.F
new file mode 100755
index 0000000..66396bb
--- /dev/null
+++ b/gribex/confp3.F
@@ -0,0 +1,308 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CONFP3(PVAL,KEXP,KMANT,KBITS,KROUND)
+C
+C---->
+C**** CONFP3 - Convert floating point number to GRIB representation.
+C
+C     Purpose.
+C     --------
+C
+C     Convert floating point number from machine
+C     representation to GRIB representation.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL CONFP3(PVAL,KEXP,KMANT,KBITS,KROUND)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PVAL    - Floating point number to be converted.
+C     KBITS   - Number of bits in computer word.
+C     KROUND  - Conversion type.
+C               0 , Closest number in GRIB format less than
+C                   original number.
+C               1 , Closest number in GRIB format to the
+C                   original number (equal to, greater than or
+C                   less than original number).
+C               10 , as for 0 but with debug printout.
+C               11 , as for 1 but with debug printout.
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KEXP    - 8 Bit signed exponent.
+C     KMANT   - 24 Bit mantissa.
+C
+C     Method.
+C     -------
+C
+C     Floating point number represented as 8 bit signed
+C     exponent and 24 bit mantissa in integer values.
+C
+C     Externals.
+C     ----------
+C
+C     DECFP2
+C     ABORTX
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB representation.
+C
+C     Comments.
+C     ---------
+C
+C     Routine aborts if an invalid conversion type parameter
+C     is used or if a 24 bit mantissa is not produced.
+C
+C
+C     Author.
+C     -------
+C
+C     John Hennessy   ECMWF   18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     John Hennessy   ECMWF   24.09.91
+C     Corrections made to descriptions of input parameter KROUND.
+C     Changes to comments and format statements.
+C
+C     J.D.Chambers    ECMWF    13.09.94
+C     Inhibit abort if NOABORT = 1, use grbcom.h
+C
+C
+C     J.D.Chambers    ECMWF    21.11.94
+C     Use JNINT for VAX
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Set initial values.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments
+C
+      REAL PVAL
+      INTEGER KEXP,KMANT,KBITS,KROUND
+C
+C     Local variables
+C
+      INTEGER IEXP, IPR, IROUND, ISIGN
+      REAL ZEPS, ZREF, ZVAL
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Initialise
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Debug print switch.
+C
+      IF( KROUND.GE.10) THEN
+	IPR    = 1
+	IROUND = KROUND - 10
+      ELSE
+	IPR    = 0
+	IROUND = KROUND
+      ENDIF
+C
+C     Check conversion type parameter.
+C
+      IF( IROUND.NE.0.AND.IROUND.NE.1) THEN
+	WRITE(GRPRSM,*) 'CONFP3: Invalid conversion type = ', KROUND
+C
+	IF( NOABORT.EQ.0 ) CALL ABORTX('CONFP3')
+C
+C       If not aborting, arbitrarily set rounding to 'up'.
+C
+        IROUND = 1
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Convert value of zero.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( PVAL.EQ.0.0 ) THEN
+        KEXP  = 0
+        KMANT = 0
+	IEXP  = 0
+	ISIGN = 0
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3 . Convert other values.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      ZEPS = 1.0E-12
+      IF( KBITS.EQ.32) ZEPS = 1.0E-8
+      ZREF = PVAL
+C
+C     Sign of value.
+C
+      ISIGN = 0
+      IF( ZREF.LT.0.) THEN
+        ISIGN = 128
+        ZREF  = - ZREF
+      ENDIF
+C
+C     Exponent.
+C
+#ifdef CRAY
+      IEXP = INT(ALOG(ZREF)*(1.0/ALOG(16.0))+64.0+1.0+ZEPS)
+#else
+      IEXP = INT(LOG(ZREF)*(1.0/LOG(16.0))+64.0+1.0+ZEPS)
+#endif
+C
+      IF( IEXP.LT.0  ) IEXP = 0
+      IF( IEXP.GT.127) IEXP = 127
+C
+C     Mantissa.
+C
+      IF( IROUND.EQ.0 ) THEN
+C
+C       Closest number in GRIB format less than original number.
+C       Truncate for positive numbers.
+C       Round up for negative numbers.
+C
+	IF( ISIGN.EQ.0 ) THEN
+          KMANT = INT(ZREF/16.0**(IEXP-70))
+        ELSE
+#ifdef VAX
+          KMANT = JNINT(ZREF/16.0**(IEXP-70)+0.5)
+#else
+          KMANT = NINT(ZREF/16.0**(IEXP-70)+0.5)
+#endif
+	ENDIF
+C
+      ELSE
+C
+C       Closest number in GRIB format to the original number
+C       (equal to, greater than or less than original number).
+C
+#ifdef VAX
+        KMANT = JNINT(ZREF/16.0**(IEXP-70))
+#else
+        KMANT = NINT(ZREF/16.0**(IEXP-70))
+#endif
+      ENDIF
+C
+C     Check that mantissa value does not exceed 24 bits.
+C     If it does, adjust the exponent upwards and recalculate
+C     the mantissa.
+C     (Nb. 16777215 = 2**24 - 1)
+C
+      IF( KMANT.GT.16777215) THEN
+C
+  350   CONTINUE
+C
+	IEXP = IEXP + 1
+C
+C       Check for exponent overflow during adjustment
+C
+        IF( IEXP.GT.127 ) THEN
+          WRITE(GRPRSM,*) 'CONFP3: Exponent overflow'
+	  WRITE(GRPRSM,9002) PVAL
+	  WRITE(GRPRSM,9003) ISIGN, IEXP, KMANT
+C
+          IF( NOABORT.EQ.0 ) CALL ABORTX('CONFP3')
+C
+C         If not aborting, arbitrarily set value to zero
+C
+          WRITE(GRPRSM,*) 'CONFP3: Value arbitrarily set to zero.'
+          KEXP  = 0
+          KMANT = 0
+          IEXP  = 0
+          ISIGN = 0
+          GOTO 900
+C
+        ENDIF
+C
+        IF( IROUND.EQ.0) THEN
+C
+C         Closest number in GRIB format less than original number.
+C         Truncate for positive numbers.
+C         Round up for negative numbers.
+C
+          IF( ISIGN.EQ.0 ) THEN
+            KMANT = INT(ZREF/16.0**(IEXP-70))
+          ELSE
+#ifdef VAX
+            KMANT = JNINT(ZREF/16.0**(IEXP-70)+0.5)
+#else
+            KMANT = NINT(ZREF/16.0**(IEXP-70)+0.5)
+#endif
+          ENDIF
+C
+        ELSE
+C
+C         Closest number in GRIB format to the original number
+C         (equal to, greater or less than original number).
+C
+#ifdef VAX
+          KMANT = JNINT(ZREF/16.0**(IEXP-70))
+#else
+          KMANT = NINT(ZREF/16.0**(IEXP-70))
+#endif
+	ENDIF
+C
+C       Repeat calculation (with modified exponent) if still have
+C       mantissa overflow.
+C
+        IF( KMANT.GT.16777215) GOTO 350
+C
+      ENDIF
+C
+C     Add sign bit to exponent.
+C
+      KEXP = IEXP + ISIGN
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Print generated values if required.
+C
+      IF( IPR.EQ.1 ) THEN
+	WRITE(GRPRSM,9006) KROUND
+	WRITE(GRPRSM,9002) PVAL
+	CALL DECFP2(ZVAL,KEXP,KMANT)
+	WRITE(GRPRSM,9007) ZVAL
+	WRITE(GRPRSM,9003) ISIGN, IEXP, KMANT
+      ENDIF
+C
+      RETURN
+C
+C
+ 9002 FORMAT(1H ,'CONFP3: Original number = ',F30.20)
+ 9003 FORMAT(1H ,'CONFP3: Sign = ',I3,', Exponent = ',I3,
+     X            ', Mantissa = ',I12)
+ 9006 FORMAT(1H ,'CONFP3: Conversion type parameter = ',I4)
+ 9007 FORMAT(1H ,'CONFP3: Converted to      ',F30.20)
+C
+      END
diff --git a/gribex/confpa.F b/gribex/confpa.F
new file mode 100755
index 0000000..30f7576
--- /dev/null
+++ b/gribex/confpa.F
@@ -0,0 +1,91 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CONFPA(FVAL,KLENFP,KOFF,KPACKED,KWORD,KLENPS,KBIT)
+C
+C---->
+C********************************************************************
+C*
+C*    NAME      : CONFPA
+C*
+C*    FUNCTION  : CONVERT FLOATING POINT NUMBER FROM MACHINE
+C*                REPRESENTATION TO GRIB REPRESENTATION.
+C*
+C*    INPUT     : FVAL  - FLOATING POINT NUMBERS TO BE CONVERTED.
+C*                KLENFP  : LENGTH OF FVAL
+C*              : KOFF  - OFFSET IN BITS TO FIRST PACKED FIELD IN KPACKED.
+C*                KBIT    : NUMBER OF BITS IN OUTPUT WORD
+C*                KLENPS  : LENGTH OF KPACKED
+C*
+C*    OUTPUT    : KPACKED : PACKED OUTPUT FIELD
+C*
+C*    JOHN HENNESSY , ECMWF , 15TH APRIL 1985
+C*    DAVID DENT    , ECMWF , 18TH NOVEMBER 1997
+C*
+C*    LIMITATION of this VECTOR version:
+C*    assumes KOFF=0 and INTEGER word length is 32
+C*
+C********************************************************************
+C----<
+C
+      REAL FVAL(KLENFP)
+      INTEGER KPACKED(KLENPS)
+C
+      EPS = 1.0E-12
+      IOUT=1
+C
+C        convert array of real numbers
+C
+      DO 210 JL=1,KLENFP
+        IF (FVAL(JL).EQ.0.0) THEN
+          JEXP  = 128
+          JMANT = 0
+        ELSE
+C
+          REF = FVAL(JL)
+C
+C     SIGN OF VALUE
+C
+          ISIGN = 0
+          IF (REF.LE.0.) THEN
+            ISIGN = 128
+            REF = - REF
+          ENDIF
+C
+C     EXPONENT
+C
+          IF (REF.EQ.0.0) THEN
+            JEXP = 0
+          ELSE
+            JEXP = INT(ALOG(REF)*(1.0/ALOG(16.0))+64.0+1.0+EPS)
+          ENDIF
+C
+          IF (JEXP.LT.0  ) JEXP = 0
+          IF (JEXP.GT.127) JEXP = 127
+C
+C     MANTISSA
+C
+          JMANT = NINT (REF/16.0**(JEXP-70))
+C
+C     ADD SIGN BIT TO EXPONENT.
+C
+          JEXP = JEXP + ISIGN
+C
+        ENDIF
+C
+        KPACKED(IOUT)=IOR(ISHFT(JEXP,24),JMANT)
+        IOUT=IOUT+1
+  210 CONTINUE
+C
+      KWORD=KWORD+(KLENFP*32/KBIT)
+C
+      RETURN
+C
+      END
diff --git a/gribex/csect4.F b/gribex/csect4.F
new file mode 100755
index 0000000..5493850
--- /dev/null
+++ b/gribex/csect4.F
@@ -0,0 +1,533 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#if (defined IBM_POWER4)
+ at PROCESS ALIAS(NOPTEOVRLP)
+#endif
+      INTEGER FUNCTION CSECT4( PDATA, KTRUNC, KSEC1, KSEC4,
+     X                         KGRIB, KLENG, KNSPT, KBITS, KPACK)
+C
+C---->
+C**** CSECT4
+C
+C     Purpose.
+C     --------
+C
+C     Code GRIB section 4 for complex packing of spherical harmonics.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = CSECT4( PDATA, KTRUNC, KSEC1, KSEC4,
+C    X               KGRIB, KLENG, KNSPT, KBITS, KPACK)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PDATA      - Array of floating point values.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KSEC1      - Array of GRIB section 1 values
+C     KSEC4      - Array of GRIB section 4 values
+C     KLENG      - Length of GRIB product array
+C     KNSPT      - Bit pointer for next value in GRIB product
+C     KBITS      - Number of bits per computer word.
+C     KPACK      - Number of bits per packed value.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product(updated)
+C
+C
+C     Method.
+C     -------
+C
+C                            <subset>|
+C
+C     Given numbers:         cccccccc|cccccc
+C                              cccccc|cccccc
+C                                cccc|cccccc
+C                                  cc|cccccc
+C                                    |cccccc
+C                                       cccc
+C                                         cc
+C
+C
+C     Externals.
+C     ----------
+C
+C     GSCALE    - Apply power sclaing to values to be packed.
+C     PACKCF    - Store unscaled coefficients in GRIB product.
+C     CMPCK     - Make the values to be packed contiguous in memory.
+C     MAXMIN    - Find max/min values of array.
+C     INXBIT    - Insert bits into GRIB product.
+C     REF2GRB   - Convert reference value to IBM floating point format.
+C     CONFP3    - Convert to IBM floating point format.
+C     DECFP     - Decode from IBM floating point format.
+C     CALCOP    - Calculate the P scale factor for a field
+C     JMALLOC   - Routine to acquire memory
+C     JFREE     - Routine to release memory
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 in the GRIB
+C               product.
+C     On exit,  KNSPT points to the first bit of section 5 in the GRIB
+C               product.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      06:05:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J.Clochard, Meteo France, for ECMWF - January 1998.
+C     Use of external JFREE instead of FREE.
+C     
+C     P.J.Towers       ECMWF      18.07.02
+C     Optimised for IBM Power4.
+C         -Added @PROCESS ALIAS(NOPTEOVRLP) directive 
+C         -Replaced Nint(x) by Int(x+0.5)
+C         -Replaced division by scale by multiplication by reciprocal
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP15BIT, JP87SET, JPBYTES
+#ifdef REAL_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER ( JP15BIT= 2**15 )
+C                            `---> 32768    =   8000(hex)
+      PARAMETER ( JP87SET= 192 )
+C                            `--->          =     C0(hex)
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KSEC1, KSEC4, KGRIB, KLENG, KNSPT, KBITS, KPACK
+      REAL PDATA
+      DIMENSION PDATA(*), KGRIB(*), KSEC1(*), KSEC4(*)
+C
+C     Local variables.
+C
+      INTEGER J110,NREST,NLOOPS,ILOOP,LOOP,ILENF,IPOWER,ISUBSET,ISTATUS
+      INTEGER IRET, IRETA, IRETB, IEXP, IMANT, ITEMP
+      INTEGER INSPT1, INSPTA, INSPTB, ILEN, ISCALE, ISIGN
+      INTEGER ILEN4, INIL, IL, IFLAG, ISIZE
+C
+#ifndef USE_NO_POINTERS
+#ifdef POINTER_64
+      INTEGER*8 IPIVAL
+#endif
+      POINTER (IPIVAL, IVAL)
+      INTEGER IVAL(1)
+      SAVE IPIVAL, ISIZE
+#else
+      INTEGER IVAL(1000)
+#endif
+C
+      REAL ZCHANGE, ZMAX, ZREF, ZMIN, ZSCALE,ZRECIP
+#if defined(CRAY) || defined(IBM) || defined(CYBER) || defined(hpiaR32)
+      REAL    ZS
+#else
+      DOUBLE PRECISION    ZS
+#endif
+C
+#include "grbcom.h"
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER PACKCF, GSCALE, CALCOP, REF2GRB
+      EXTERNAL PACKCF, GSCALE, CALCOP, REF2GRB, JMALLOC
+C
+      DATA ISIZE/0/
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Change units of data values , if required.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      CSECT4 = 0
+#ifndef USE_NO_POINTERS
+C
+C     Allocate memory (first time only)
+C
+      IF( ISIZE.LT.((KTRUNC+1)*(KTRUNC+2)*JPBYTES) ) THEN
+        IF( ISIZE.NE.0 ) CALL JFREE(IPIVAL)
+        ISIZE = (KTRUNC+1)*(KTRUNC+2)*JPBYTES
+        IPIVAL = JMALLOC(ISIZE)
+#ifdef hpR64
+        IPIVAL = IPIVAL/(1024*1024*1024*4)
+#endif
+        IF( IPIVAL.EQ.0 ) THEN
+          WRITE(GRPRSM,*) 'CSECT4: Memory allocation failed.'
+          WRITE(GRPRSM,*) 'CSECT4: Number of bytes required = ', ISIZE
+          CSECT4 = 16112
+          GOTO 900
+        ENDIF
+      ENDIF
+#endif
+C
+C     Preserve bit position of start of section 4.
+      INSPT1 = KNSPT
+C
+C     Apply decimal scaling if required.
+      IF (KSEC1(23).NE.0) THEN
+        ZCHANGE = 10.0**KSEC1(23)
+        ILENF = (KTRUNC+1) * (KTRUNC+2)
+        DO 110 J110 = 1 , ILENF
+          PDATA(J110) = PDATA(J110) * ZCHANGE
+  110   CONTINUE
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2.  Check given truncations.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      ISUBSET = KSEC4(18)
+      IF ( ISUBSET .GT. KTRUNC ) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Invalid subset truncation given'
+        WRITE(GRPRSM,*) 'CSECT4: ISUBSET, KTRUNC =', ISUBSET, KTRUNC
+        CSECT4 = 16000
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3 . Apply power scaling to field.
+C     -----------------------------------------------------------------
+
+  300 CONTINUE
+C
+C     If user supplied the P factor, use it ..
+      IF ( NONOFF .EQ. 0 ) THEN
+        IPOWER  = KSEC4(17)
+C
+C     .. otherwise calculate the P factor for the field ..
+      ELSE
+        IPOWER  = CALCOP( PDATA, KTRUNC, ISUBSET)
+        IF( IPOWER.LT.-10000 ) THEN
+          CSECT4 = 16001
+          GOTO 900
+        ENDIF
+        KSEC4(17) = IPOWER
+      ENDIF
+C     .. and scale the field.
+      IRET = GSCALE( PDATA, KTRUNC, ISUBSET, IPOWER, 'I')
+      IF ( IRET .NE. 0 ) THEN
+        CSECT4 = 16002
+        GOTO 900
+      ENDIF
+C
+C
+C     -----------------------------------------------------------------
+C*    Section 4 . Store subset of coefficients (IBM style).
+C     -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Adjust pointer to avoid first 18 octets -> filled in later.
+      INSPTA = KNSPT
+      KNSPT = KNSPT + 18*8
+      IRET = PACKCF( PDATA,KTRUNC,ISUBSET,KGRIB,KLENG,KNSPT,KBITS)
+      IF ( IRET .NE. 0 ) THEN
+        CSECT4 = 16003
+        GOTO 900
+      ENDIF
+C
+C     Reset bit pointer to start of section 4.
+      INSPTB = KNSPT
+      KNSPT = INSPTA
+C
+C     -----------------------------------------------------------------
+C*    Section 5 . Find the max and min for the values to be scaled.
+C     -----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C     Rearrange the values to be packed so they are contiguous.
+      CALL CMPCK( PDATA, KTRUNC, ISUBSET)
+C
+C     Find the max and min for the contiguous values
+      ILEN = (KTRUNC+1)*(KTRUNC+2) - (ISUBSET+1)*(ISUBSET+2)
+      CALL MAXMIN( PDATA, ILEN, ZMAX, ZMIN)
+C
+C     Calculate the scale and reference value
+      ZREF = ZMIN
+      ZS = (ZMAX-ZREF) / (2**(KSEC4(2)+1)-1)
+#ifdef CRAY
+      IF (ZS.NE.0.0) ZS = ALOG(ZS) / ALOG(2.0) + 2.0
+#else
+      IF (ZS.NE.0.0) ZS = LOG(ZS) / LOG(2.0) + 2.0
+#endif
+#if defined hpR32 || defined (__alpha) || defined hpR64 || defined hpiaR64
+      ISCALE = MIN (INT(ZS),INT(ZS+DSIGN(1.0D0,ZS)))
+#elif defined linux
+      ISCALE = MIN (INT(ZS),INT(ZS+SIGN(1.D0,ZS)))
+#else
+      ISCALE = MIN (INT(ZS),INT(ZS+SIGN(1.,ZS)))
+#endif
+      ZSCALE = 2.0**ISCALE
+C 
+C     Set scale factor sign bit.
+      IF (ISCALE.LT.0) THEN
+        ISCALE = -ISCALE
+        ISIGN  = JP15BIT
+        ISCALE = ISCALE + ISIGN
+      ENDIF
+C
+C*    Octets 5 - 6 : Scale factor.
+C     One 16 bit field.
+C
+C     Adjust bit pointer over first 4 octets and insert scale factor.
+      KNSPT = KNSPT + 4*8
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ISCALE,1,KBITS, 16,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing scale factor.'
+        CSECT4 = 16004
+        GO TO 900
+      ENDIF
+C
+C*    Octets 7 - 10 : Reference value.
+C     One 8 bit and one 24 bit field.
+C
+C     Convert floating point to GRIB representation.
+      ISTATUS = REF2GRB(ZREF, IEXP, IMANT, KBITS)
+      IF( ISTATUS.NE.0 ) THEN
+        WRITE(GRPRSM,*) 'CSECT4: REF2GRB reference value problem'
+        WRITE(GRPRSM,*) 'CSECT4: for parameter ', KSEC1(6)
+        WRITE(GRPRSM,*) 'CSECT4: level type ', KSEC1(7)
+        WRITE(GRPRSM,*) 'CSECT4: level ', KSEC1(8), KSEC1(9)
+      ENDIF
+C
+C     Insert reference value exponent and mantissa.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IEXP,1,KBITS, 8,'C',IRETA)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IMANT,1,KBITS, 24,'C',IRETB)
+      IRET = IRETA + IRETB
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing reference value.'
+        CSECT4 = 16005
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 6 . Store octets 11 to 18.
+C     -----------------------------------------------------------------
+C
+  600 CONTINUE
+C
+C*    Octet 11 : Number of bits containing each packed value.
+C     One 8 bit field.
+C
+C     Insert number of bits for each packed value.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(2),1,KBITS, 8,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing number of bits/value.'
+        CSECT4 = 16006
+        GO TO 900
+      ENDIF
+C
+C     Octets 12 - 13: Octet number of the start of packed data
+C     One 16-bit field.
+C
+C     Insert octet number of the start of packed data.
+      KSEC4(16) = KNSPT/8 + 7 + 4*(ISUBSET+1)*(ISUBSET+2)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(16),1,KBITS,16,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing start of packed data.'
+        CSECT4 = 16007
+        GO TO 900
+      ENDIF
+C
+C     Octets 14 - 15: Scaling factor; power of Laplacian operator
+C                     applied to field before packing.
+C     One 16-bit field.
+C
+C     Set sign bit if value is negative.
+      IF (KSEC4(17).LT.0) THEN
+        ITEMP = - KSEC4(17)
+        ITEMP = ITEMP + JP15BIT
+      ELSE
+        ITEMP = KSEC4(17)
+      ENDIF
+C 
+C     Insert scaling power.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ITEMP,1,KBITS,16,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing scaling power.'
+        CSECT4 = 16008
+        GO TO 900
+      ENDIF
+C
+C     Octets 16 - 18: Pentagonal resolution parameters J,K,M
+C                     specifying truncation of subset of data
+C                     represented unpacked.
+C     Three 8-bit fields.
+C
+C     Insert pentagonal resolution parameters.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(18),3,KBITS, 8,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*)
+     X    'CSECT4: Problem packing pentagonal resolution params.'
+        CSECT4 = 16009
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 7 . Adjust, scale and pack the binary values.
+C     -----------------------------------------------------------------
+C
+  700 CONTINUE
+#ifndef USE_NO_POINTERS
+      ZRECIP=1.0/ZSCALE
+C
+      DO LOOP = 1 , ILEN
+#ifdef VAX
+        IVAL(LOOP)   = JNINT( (PDATA(LOOP) - ZREF) / ZSCALE )
+#else
+        IVAL(LOOP)   =  INT( (PDATA(LOOP) - ZREF ) * ZRECIP + 0.5 )
+#endif
+      ENDDO
+C
+C     Adjust bit pointer to end of stored subset of coefficients and
+C     store packed binary values in GRIB product -> updates bit pointer.
+C
+      KNSPT = INSPTB
+      CALL INXBIT (KGRIB,KLENG,KNSPT,IVAL,ILEN, KBITS,KPACK, 'C',IRET)
+      IF ( IRET .NE. 0 ) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing bits'
+        CSECT4 = 16010
+        GOTO 900
+      ENDIF
+#else
+      NLOOPS = ILEN / 1000
+      NREST  = ILEN - (NLOOPS)*1000
+      KNSPT  = INSPTB
+C
+      DO ILOOP = 1, NLOOPS
+        DO LOOP = 1 , 1000
+#ifdef VAX
+          IVAL(LOOP) = JNINT((PDATA((ILOOP-1)*1000+LOOP)-ZREF)/ZSCALE)
+#else
+          IVAL(LOOP) =  NINT((PDATA((ILOOP-1)*1000+LOOP)-ZREF)/ZSCALE)
+#endif
+        ENDDO
+C
+C       Adjust bit pointer to end of stored subset of coefficients and
+C       store packed binary values in GRIB product -> updates bit pointer.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IVAL,1000,KBITS,KPACK,'C',IRET)
+        IF( IRET.NE.0 ) THEN
+          WRITE(GRPRSM,*) 'CSECT4: Problem packing bits'
+          CSECT4 = 16010
+          GOTO 900
+        ENDIF
+      ENDDO
+C
+      DO LOOP = 1, NREST
+#ifdef VAX
+        IVAL(LOOP) = JNINT((PDATA((NLOOPS*1000)+LOOP)-ZREF)/ZSCALE)
+#else
+        IVAL(LOOP) =  NINT((PDATA((NLOOPS*1000)+LOOP)-ZREF)/ZSCALE)
+#endif
+      ENDDO
+C
+C       Adjust bit pointer to end of stored subset of coefficients and
+C       store packed binary values in GRIB product -> updates bit pointer.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,IVAL,NREST,KBITS,KPACK,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing bits'
+        CSECT4 = 16010
+        GOTO 900
+      ENDIF
+#endif
+C
+C     -----------------------------------------------------------------
+C*    Section 8 . Fill in first 4 octets of section 4.
+C     -----------------------------------------------------------------
+C
+  800 CONTINUE
+C 
+C     Adjust length of section 4 (in bits) to a multiple of 16.
+      ILEN4 = KNSPT - INSPT1
+      IL    = ILEN4 / 16
+      IL    = ILEN4 - ( IL * 16 )
+      INIL  = 0
+      IF (IL.NE.0) INIL = 16 - IL
+      KNSPT = KNSPT + INIL
+      ILEN4 = ILEN4 + INIL
+C 
+C     Set length of section 4 to octets.
+      ILEN4 = ILEN4 / 8
+C
+C     Octets 1 - 3: Length of section.
+C     One 24-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT1,ILEN4,1,KBITS,24,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing length of section.'
+        CSECT4 = 16010
+        GO TO 900
+      ENDIF
+C
+C     Octet 4:
+C     One 4-bit field -> flag, spherical harmonics/complex/float point
+C     One 4-bit field -> number of unused bits at end of section 4.
+C
+      IFLAG = JP87SET + INIL
+      CALL INXBIT(KGRIB,KLENG,INSPT1,IFLAG,1,KBITS,8,'C',IRET)
+      IF (IRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'CSECT4: Problem packing flag.'
+        CSECT4 = 16011
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/csgnbt.F b/gribex/csgnbt.F
new file mode 100755
index 0000000..1fb7152
--- /dev/null
+++ b/gribex/csgnbt.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CSGNBT( KOUT, KIN, KPOS, KRET)
+C---->
+C
+C     Set the sign bit in position KPOS of word KOUT, and
+C     set the rest of bits (KPOS-1) -> using +ve value of 
+C     KIN.
+C
+C     On return, KRET = 0 if all OK.
+C
+C----<
+      IMPLICIT NONE
+      INTEGER KOUT, KIN, KPOS, KRET
+
+      INTEGER JPBITS
+#ifdef INTEGER_8
+      PARAMETER ( JPBITS = 64 )
+#else
+      PARAMETER ( JPBITS = 32 )
+#endif
+      INTEGER ISBIT, IVALUE, INSPT, IRETA, IRETB
+
+      IF ( KIN .LT. 0 ) THEN
+        IVALUE = -KIN
+        ISBIT = 1
+      ELSE
+        IVALUE = KIN
+        ISBIT = 0
+      ENDIF
+
+#if defined (VAX) || defined (__alpha)
+C
+C     VAX bit handling with VAX specific intrinsics
+      KOUT = JISHFT( ISBIT, KPOS-1)
+      KOUT = KOUT + IVALUE
+#else
+C
+C     Bit handling using INXBIT
+      INSPT = 0
+      CALL INXBIT( KOUT, 1, INSPT, ISBIT, 1, JPBITS,
+     X             (JPBITS-KPOS+1), 'C', IRETA)
+      CALL INXBIT( KOUT, 1, INSPT, IVALUE, 1, JPBITS,
+     X             (KPOS-1), 'C', IRETB)
+      KRET = IRETA+IRETB
+      IF ( KRET .NE. 0 ) THEN
+        WRITE(*,*) ' CSGNBT - Problem packing bits in value'
+        GOTO 900
+      ENDIF
+#endif
+
+  900 CONTINUE
+
+      RETURN
+      END
diff --git a/gribex/csgnbt.c b/gribex/csgnbt.c
new file mode 100755
index 0000000..0e36815
--- /dev/null
+++ b/gribex/csgnbt.c
@@ -0,0 +1,40 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "fortint.h"
+
+void csgnbt_(
+  fortint * kout,
+  fortint * kin,
+  fortint * kpos,
+  fortint * kret) {
+
+fortint value = *kin;
+unsigned fortint sign = (value < 0 ) ? (1 << ((*kpos)-1)) : 0;
+unsigned fortint mask = ~(-1 << ((*kpos)-1));
+
+  if( value < 0 )
+    *kout = ((-value) & mask) | sign;
+  else
+    *kout = (value & mask);
+
+  *kret = 0;
+  return;
+}
+
+void csgnbt(
+  fortint * kout,
+  fortint * kin,
+  fortint * kpos,
+  fortint * kret) {
+
+  csgnbt_(kout,kin,kpos,kret);
+}
diff --git a/gribex/d2ordr.F b/gribex/d2ordr.F
new file mode 100755
index 0000000..dbf2728
--- /dev/null
+++ b/gribex/d2ordr.F
@@ -0,0 +1,1760 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       INTEGER FUNCTION D2ORDR ( KDATA, KLENP, KSEC1, KSEC2, KSEC3, 
+     X                          KSEC4, KGRIB, KLENG, KNSPT, KBITS,
+     X                          HOPER, KLEN4, KNIL,  PREF , PSCALE,
+     X                          KBMAP, KVALS, KDEBUG )
+C
+C---->
+C**** D2ORDR
+C
+C     Purpose.
+C     --------
+C
+C     Decode GRIB section 4 for complex packing of grid-point
+C     values ("second-order packing").
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = D2ORDR ( KDATA, KLENP, KSEC1, KSEC2, KSEC3, KSEC4,
+C    X                KGRIB, KLENG, KNSPT, KBITS, HOPER, KLEN4,
+C    X                KNIL,  PREF, PSCALE, KBMAP, KVALS, KDEBUG )
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KLENP      - Length of array KDATA.
+C     KSEC1      - Array of GRIB section 1 integer descriptors.
+C     KSEC2      - Array of GRIB section 2 integer descriptors.
+C     KSEC3      - Array of GRIB section 3 integer descriptors.
+C     KSEC4      - Array of GRIB section 4 integer descriptors.
+C                  (preset to zero, and already decoded for (3:6)
+C     KGRIB      - GRIB product array.
+C     KLENG      - Length of GRIB product array.
+C     KNSPT      - Bit pointer for next value in GRIB product.
+C     KBITS      - Number of bits per computer word.
+C     HOPER      - Requested function:
+C                  'D' or 'R' to decode the whole field,
+C                  'X' to decode only a few gridpoints (as described
+C                   in KSEC4(34:42),
+C                  'J' to decode only section 4 descriptors.
+C     KLEN4      - Length (octets) of section 4.
+C     KNIL       - Unused bit count at end of section 4.
+C     KBMAP      - Bit pointer for start of explicit primary bit-map
+C                  (if any).
+C     KVALS      - Number of bits in primary bit-map.
+C     KDEBUG     - >0 for some debug printout.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KDATA      - Array of normalized values.
+C     KSEC4      - Array of GRIB section 4 values (completed).
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product (updated).
+C     PREF       - Reference value of field.
+C     PSCALE     - Scale factor (ready to use) of field.
+C
+C
+C     Method.
+C     -------
+C
+C     Follows WMO Manual of Codes, and also DSECT4 structure.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT    - Extract bits from GRIB product.
+C     DECFP2    - Decode from IBM floating point format.
+C     PRTBIN    - Print binary value in character format.
+C     C2BITW    - Computes bit width of a positive integer value.
+C     DSGNBT    - Decodes an integer value and its sign bit.
+C     MAXMNI    - Computes extrema of integer array.
+C     D2ROSD    - Rebuild original values from spatial differencing.
+C     REVERO    - Reverse order of values in even rank rows.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4
+C               in the GRIB product.
+C     On exit,  KNSPT points to the first unused bit of section 4,
+C               (or to the first bit of section 5, if unused bit count
+C                is zero) in the GRIB product.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, April 1998.
+C     Update comments, and add more consistency with C2ORDR source code.
+C     Inhibit REVERO call for function 'X'.
+C     Introduce spatial differencing.
+C
+C     J. Clochard, September 1998.
+C     Optimize management of primary bit-map in row by row packing case.
+C     Fixes behaviour for HOPER='J' (KDATA must not be used)
+C     and HOPER='X' (KDATA minimum length is KSEC4(34), not full-length.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP15BIT, JP16SET, JPWS1O, JPXMAX, JPXPWR, JPWS2O
+C
+      PARAMETER ( JP15BIT= 2**15 )
+C                            `---> 32768    =   8000(hex)
+      PARAMETER ( JP16SET= 2**16-1 )
+C                            `---> 65535    =   FFFF(hex)
+C     JPWS1O ===> Size of group work arrays.
+C     JPXMAX ===> Maximum number of points for 'X' function.
+C     JPXPWR ===>    "      "    "  bits number per value/descriptor.
+C     JPWS2O ===> Size of work array IWORK2
+C                 (must be strictly bigger than JPWS1O).
+C
+C     IWORK2 array is used to unpack:
+C     -group sizes, in case of general extended packing
+C                   (JPWS1O last values);
+C     -secondary bit-map, if any;
+C     -primary bit-map, in case of row by row packing.
+C
+C     These cases are exclusive.
+C
+#ifdef JBPW_64
+      PARAMETER ( JPWS1O= 5000, JPWS2O= 20000, JPXMAX= 4, JPXPWR= 47 )
+#else
+      PARAMETER ( JPWS1O= 5000, JPWS2O= 20000, JPXMAX= 4, JPXPWR= 31 )
+#endif
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KLENG, KNSPT, KBITS, KLEN4, KNIL, KBMAP, KVALS
+      INTEGER KDEBUG
+      INTEGER KDATA (KLENP), KSEC1 (*), KSEC2 (*), KSEC4 (*), KGRIB (*)
+      INTEGER KSEC3 (*)
+C
+      CHARACTER HOPER * (*)
+C
+      REAL PREF, PSCALE
+C
+C     Local variables.
+C
+      INTEGER IRET, IRETA, IRETB, IEXP, IMANT, IFLAGX, IAUXIL, INDKS4
+      INTEGER IFIROV, ISECOV, ISCALE, IPTRSO, ILEN, INROWS, J, IRETFN
+      INTEGER IPTRFO, IWIDTH, IPTRBM, ILAUXS, IPTRB0, ILNGTH, IRANG
+      INTEGER IBITGW, IAUXIS, INBSEQ, JSEQ, IGROFF, IGRNBR, JGROUP
+      INTEGER IREFLN, ICOUNT, IMAXVN, INPEXT, INCR, IEXTOR, IVALS
+      INTEGER ISKIP, JEXT, IEXT, ICNEXT, INSPTA, IPTRGW, INVALS, ICOUNG
+      INTEGER INDROW, INDCOL, IVALSC, IPTRFN, IPTRSN, IVALK4, IREFER
+      INTEGER IPRWID, ICOUNS, ILNGTS, INDEXX, INDEXY, JROW, ISEQ
+#ifdef ebug2o
+      INTEGER IMAXVC
+#endif
+      INTEGER IBITGS, IPTRGS, IORDER, IWIDSD, IBIAS
+#ifndef wmogrp2o
+      INTEGER IEXTRA
+#endif
+C
+      INTEGER IWIDGR (JPWS1O), IWORK2 (JPWS2O), IFIRST (JPWS1O)
+      INTEGER IRGEXT (JPXMAX+1), INDXOR (JPXMAX), ILENGR (JPWS1O)
+      INTEGER IPOWER (0:JPXPWR)
+      INTEGER IWORK (3)
+C
+      CHARACTER YOPER*1
+C
+      LOGICAL LROW, LQUASI, LCTWID, LSECBI, LPRIBI, LDEBUG, L1CALL
+      LOGICAL LGENXT, LBOUST, LPRCLN, LVECTD
+C
+      INTEGER REVERO, D2ROSD
+      EXTERNAL REVERO, D2ROSD
+      INTEGER C2BITW
+      EXTERNAL C2BITW
+C
+      SAVE L1CALL, IPOWER
+C
+      DATA L1CALL / .TRUE. /
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Decode octets 5 to 13.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRETFN = 0
+      YOPER='D'
+      INSPTA=KNSPT
+      LDEBUG=KDEBUG.GE.1
+C
+      IF (L1CALL) THEN
+C
+        DO 111 J=0,JPXPWR-1
+        IPOWER(J)=2**J-1
+  111   CONTINUE
+#ifdef JBPW_64
+        IPOWER(JPXPWR)=140737488355327
+#else
+        IPOWER(JPXPWR)=2147483647
+#endif
+C
+        L1CALL=.FALSE.
+C
+      ENDIF
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) HOPER(:1),KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      KNSPT=KNSPT+4*8
+C
+C*    Octets 5 - 6 : Scale factor.
+C     One 16 bit field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,ISCALE,1,KBITS, 16,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17110
+        WRITE(GRPRSM,FMT=9001) 'scale factor'
+        GO TO 900
+      ENDIF
+C
+C     Make negative if sign bit set
+      IF ( ISCALE .GT. JP15BIT ) THEN
+        ISCALE = ISCALE - JP15BIT
+        ISCALE = -ISCALE
+      ENDIF
+      PSCALE = 2.0**ISCALE
+#ifdef ebug2o
+      WRITE(GRPRSM,FMT='('' D2ORDR - Binary scale factor ='',
+     X       I20,TR1,F30.20,''.'')') ISCALE,PSCALE
+#endif
+C
+C*    Octets 7 - 10 : Reference value.
+C     One 8 bit and one 24 bit field.
+C
+C     Extract reference value exponent and mantissa.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IEXP,1,KBITS, 8,YOPER,IRETA)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IMANT,1,KBITS, 24,YOPER,IRETB)
+      IRET = IRETA + IRETB
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17120
+        WRITE(GRPRSM,FMT=9001) 'reference value'
+        GO TO 900
+      ENDIF
+C
+C     Decode the reference value
+      CALL DECFP2 (PREF,IEXP,IMANT)
+C
+C*    Octet 11 : Number of bits containing each first-order value.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(2),1,KBITS, 8,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17130
+        WRITE(GRPRSM,FMT=9001) 'bit number of first-order values'
+        GO TO 900
+      ELSEIF (KSEC4(2).GT.JPXPWR) THEN
+        IRETFN = 17131
+        WRITE(GRPRSM,FMT=9002) 'Bit number (of first-order values)',
+     X                          JPXPWR
+        GO TO 900
+#ifdef ebug2o
+      ELSE
+#else
+      ELSEIF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9135) KSEC4(2)
+      ENDIF
+C
+C     Octets 12 - 13: Octet number of the start of first-order packed 
+C                     data.
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IPTRFO,1,KBITS,16,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17140
+        WRITE(GRPRSM,FMT=9001) 'pointer to first-order packed data'
+        GO TO 900
+#ifdef ebug2o
+      ELSE
+#else
+      ELSEIF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9150) PREF, IPTRFO, KNSPT
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Decode octets 14 to 21.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 14: Extended flags.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IFLAGX,1,KBITS, 8,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17210
+        WRITE(GRPRSM,FMT=9001) 'extended flags'
+        GO TO 900
+#ifdef ebug2o
+      ELSE
+#else
+      ELSEIF (LDEBUG) THEN
+#endif
+        CALL PRTBIN (IFLAGX,8,IAUXIL,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IAUXIL=IFLAGX
+        ENDIF
+C
+        WRITE(GRPRSM,FMT=9210) IAUXIL, KNSPT
+      ENDIF
+C
+C         R------- only bit 1 is reserved.
+C         -0------ single datum at each grid point.
+C         -1------ matrix of values at each grid point.
+C         --0----- no secondary bit map.
+C         --1----- secondary bit map present.
+C         ---0---- second order values have constant width.
+C         ---1---- second order values have different widths.
+C         ----0--- no general extended second order packing.
+C         ----1--- general extended second order packing used.
+C         -----0-- standard field ordering in section 4.
+C         -----1-- boustrophedonic ordering in section 4.
+C         ------00 no spatial differencing used.
+C         ------01 1st-order spatial differencing used.
+C         ------10 2nd-order    "         "         " .
+C         ------11 3rd-order    "         "         " .
+C
+      IF (IFLAGX.GE.128) THEN
+        IRETFN = 17220
+        WRITE(GRPRSM,FMT=9220)
+        GO TO 900
+      ENDIF
+C
+      IAUXIL = 64
+      INDKS4 = 6
+C
+      IVALK4 = 8
+C
+      DO 201 J = 2, IVALK4
+C
+      IF (J.EQ.5) THEN
+        INDKS4 = INDKS4 + 1
+      ENDIF
+C      
+      IF (IFLAGX.GE.IAUXIL) THEN
+        KSEC4(INDKS4+J) = IAUXIL
+        IFLAGX = IFLAGX - IAUXIL
+      ENDIF
+C
+      IAUXIL=IAUXIL/2
+  201 CONTINUE
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9225) (KSEC4(J),J=3,10)
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IF (IFLAGX.NE.0) THEN
+        IRETFN = 17230
+        WRITE(GRPRSM,FMT=9230)
+        GO TO 900
+      ELSEIF (KSEC4(8).NE.0) THEN
+        IRETFN = 17240
+        WRITE(GRPRSM,FMT=9240)
+        GO TO 900
+      ENDIF
+C
+      LPRIBI=MOD (KSEC1(5),128).GE.64
+      LSECBI=KSEC4(9).NE.0
+      LROW=.NOT.LSECBI.AND.KSEC4(12).EQ.0
+      LGENXT=.NOT.LSECBI.AND.KSEC4(12).NE.0
+      LBOUST=KSEC4(13).NE.0
+      IORDER=KSEC4(14)+KSEC4(15)
+C
+      IF (IORDER.NE.0) THEN
+C
+        IF (HOPER.EQ.'X') THEN
+          IRETFN = 17244
+          WRITE(GRPRSM,FMT=9244) HOPER(:1)
+          GO TO 900
+        ELSEIF (.NOT.LGENXT) THEN
+          IRETFN = 17245
+          WRITE(GRPRSM,FMT=9245)
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      LQUASI=KSEC2(17).EQ.1
+      LCTWID=KSEC4(10).EQ.0
+C
+C     Octets 15 - 20: Octet number of the start of second-order packed 
+C                     data, Number of first-order packed data,
+C                     Number of second-order packed data.
+C     Three 16-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(17),3,KBITS,16,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17250
+        WRITE(GRPRSM,FMT=9001) 'standard second-order descriptors'
+        GO TO 900
+      ENDIF
+C
+      IPTRSO=KSEC4(17)
+      IFIROV=KSEC4(18)
+      ISECOV=KSEC4(19)
+C
+#ifndef wmogrp2o
+C     Octet 21: Reserved by WMO, so should be zero in standard case.
+C               Could be used for extra bits of group number.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IEXTRA,1,KBITS, 8,YOPER,IRET)
+C
+      IF (IRET.NE.0) THEN
+        IRETFN = 17255
+        WRITE(GRPRSM,FMT=9001) '21st octet of section 4'
+        GO TO 900
+      ELSEIF (IEXTRA.NE.0) THEN
+        IFIROV=IFIROV+(JP16SET+1)*IEXTRA
+        CALL PRTBIN (IEXTRA,8,IAUXIL,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IAUXIL=IEXTRA
+        ENDIF
+C
+        WRITE(GRPRSM,FMT=9255) IAUXIL, IEXTRA, IFIROV
+      ENDIF
+C
+      KSEC4(18)=IFIROV
+C
+#else
+C     Octet 21: Reserved by WMO.
+C     One 8-bit field. Skipped.
+C
+      KNSPT = KNSPT + 8
+C
+#endif
+      IF (KSEC1(5).GE.128) THEN
+C
+C     Cross checks between descriptors decoded above,
+C     and section 2 descriptors previously decoded.
+C
+        IF (MOD (KSEC2(11),64).LT.32) THEN
+          INROWS=KSEC2(3)
+        ELSE
+          INROWS=KSEC2(2)
+        ENDIF
+C
+        IF (LROW.AND.((LPRIBI.AND.INROWS.LT.IFIROV).OR.
+     X                (.NOT.LPRIBI.AND.INROWS.NE.IFIROV))) THEN
+          IRETFN = 17260
+          WRITE(GRPRSM,FMT=9260)
+          GO TO 900
+        ELSEIF (LQUASI) THEN
+          IREFLN=22
+          ILEN=0
+C
+          DO 211 J=1,INROWS
+          ILEN=ILEN+KSEC2(IREFLN+J)
+  211     CONTINUE
+C
+        ELSE
+          ILEN=KSEC2(2)*KSEC2(3)
+          ILNGTH=ILEN/INROWS
+        ENDIF
+C
+        IF (LPRIBI.AND.ISECOV.GT.ILEN.AND.HOPER.NE.'J') THEN
+          IRETFN = 17265
+          WRITE(GRPRSM,FMT=9270) 'too big'
+          GO TO 900
+        ELSEIF (.NOT.LPRIBI) THEN
+C
+          IF (ILEN.LE.JP16SET.AND.(IORDER+ISECOV).NE.ILEN) THEN
+            IRETFN = 17270
+            WRITE(GRPRSM,FMT=9270) 'from section 2'
+            GO TO 900
+          ELSEIF (ILEN.GT.JP16SET) THEN
+C
+C           Two octets not wide enough for ISECOV - adjust.
+C
+            ISECOV=ILEN-IORDER
+            KSEC4(19)=ISECOV
+          ENDIF
+C
+        ELSEIF (KVALS.NE.ILEN) THEN
+          IRETFN = 17275
+          WRITE(GRPRSM,FMT=9275)
+          GO TO 900
+        ENDIF
+C
+      ELSE
+C
+C     No section 2 in the present message.
+C
+        IF (LROW) THEN
+          IRETFN = 17277
+          WRITE(GRPRSM,FMT=9277) 'Row by row packing'
+          GO TO 900
+        ELSEIF (HOPER.EQ.'X') THEN
+          IRETFN = 17278
+          WRITE(GRPRSM,FMT=9277) 'HOPER=''X'' function'
+          GO TO 900
+        ELSEIF (LBOUST) THEN
+          IRETFN = 17279
+          WRITE(GRPRSM,FMT=9277) 'Boustrophedonic ordering'
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      IF (LPRIBI) THEN
+C
+        IF (KSEC3(1).EQ.0) THEN
+C
+C         Explicit primary bit-map included.
+C         Computation of effective number of points.
+C
+          INBSEQ=1+(KVALS-1)/JPWS2O
+          INVALS=0
+          ISEQ=0
+C
+          IF (LROW.AND.HOPER.NE.'J') THEN
+C
+C           In row by row case, it is also necessary for decoding field
+C           values to compute real length of rows. Do it now, as far as
+C           permitted through ILENGR work array size.
+C
+            IAUXIS=0
+            ILAUXS=MIN (JPWS2O,KVALS)
+            IPTRBM=KBMAP
+            ISEQ=1
+            CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,YOPER,
+     X                  IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 17280
+              WRITE(GRPRSM,FMT=9001) 'primary bit-map, row by row case'
+              GO TO 900
+            ENDIF
+C
+            DO 223 JROW=1,MIN (INROWS,JPWS1O)
+C
+C             Full length of row (unmasked).
+C
+            IF (LQUASI) THEN
+              ILNGTH=KSEC2(IREFLN+JROW)
+            ELSE
+              ILNGTH=ILEN/INROWS
+            ENDIF
+C
+            IVALS=ILNGTH
+            ILNGTH=0
+            IVALSC=IVALS
+C
+  221       CONTINUE
+C
+            DO 222 J=1,MIN (IVALSC,ILAUXS-IAUXIS)
+            ILNGTH=ILNGTH+IWORK2(IAUXIS+J)
+  222       CONTINUE
+C
+            IF (IVALSC.LE.ILAUXS-IAUXIS) THEN
+C
+              IAUXIS=IAUXIS+IVALSC
+C
+            ELSEIF (IPTRBM.LT.KBMAP+KVALS) THEN
+C
+              IVALSC=IVALSC-(ILAUXS-IAUXIS)
+              ILAUXS=MIN(KBMAP+KVALS-IPTRBM,JPWS2O)
+              IAUXIS=0
+              ISEQ=ISEQ+1
+              CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,
+     X                    YOPER,IRET)
+C
+              IF (IRET.NE.0) THEN
+                IRETFN = 17280
+                WRITE(GRPRSM,FMT=9001)
+     X                   'primary bit-map, row by row case'
+                GO TO 900
+              ENDIF
+C
+              GOTO 221
+C
+            ELSE
+C
+              IRETFN = 17560
+              WRITE(GRPRSM,FMT=9560)
+              GO TO 900
+C
+            ENDIF
+C
+            ILENGR(JROW)=ILNGTH
+            INVALS=INVALS+ILNGTH
+C
+  223       CONTINUE
+C
+C             End-up current sequence (active only if bit-map has not
+C             been fully processed)...
+C
+            DO 224 J=IAUXIS+1,ILAUXS
+            INVALS=INVALS+IWORK2(J)
+  224       CONTINUE
+C
+            IAUXIL=(ISEQ-1)*JPWS2O+IAUXIS
+C
+          ENDIF
+C
+C             Staightforward computing.
+C
+          DO 228 JSEQ=ISEQ+1,INBSEQ
+          IAUXIS=(JSEQ-1)*JPWS2O
+          ILAUXS=MIN (JPWS2O,KVALS-IAUXIS)
+          IPTRBM=KBMAP+IAUXIS
+          CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,YOPER,
+     X                IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 17280
+            WRITE(GRPRSM,FMT=9001) 'primary bit-map'
+            GO TO 900
+          ENDIF
+C
+          DO 227 J=1,ILAUXS
+          INVALS=INVALS+IWORK2(J)
+  227     CONTINUE
+C
+  228     CONTINUE
+C
+          IF (LROW.AND.HOPER.NE.'J') THEN
+C
+            IF (INROWS.GT.JPWS1O) THEN
+C
+C           ... it is necessary to (re)read primary bit-map, adjusting
+C           pointer to start of (JPWS1O+1)th row.
+C
+              IAUXIS=0
+              ILAUXS=MIN (JPWS2O,KVALS-IAUXIL)
+              IPTRBM=KBMAP+IAUXIL
+              CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,
+     X                    YOPER,IRET)
+C
+              IF (IRET.NE.0) THEN
+                IRETFN = 17280
+                WRITE(GRPRSM,FMT=9001)
+     X               'primary bit-map, row by row case'
+                GO TO 900
+              ENDIF
+C
+            ENDIF
+C
+          ENDIF
+C
+          IF (INVALS.GT.JP16SET) THEN
+C
+C       Two octets might be not wide enough for ISECOV. Adjust.
+C
+            ISECOV=INVALS-IORDER
+          ENDIF
+C
+        ELSEIF (LROW) THEN
+C
+          IRETFN = 17281
+          WRITE(GRPRSM,FMT=9281) 'Row by row'
+          GO TO 900
+C
+        ELSEIF (LBOUST) THEN
+C
+          IRETFN = 17282
+          WRITE(GRPRSM,FMT=9281) 'Boustrophedonic ordering'
+          GO TO 900
+C
+        ENDIF
+C
+C         WARNING:
+C         -------
+C       Whenever an implicit primary bit-map is included, it is then
+C       assumed that ISECOV contains the right number of grid-points
+C       really included in section 4. This is valid only if this
+C       effective number of points is lower than (or equal to) JP16SET.
+
+      ENDIF
+C
+      IF (IORDER+ISECOV.GT.KLENP.AND.HOPER.NE.'J'.AND.HOPER.NE.'X') THEN
+        IRETFN = 17290
+        WRITE(GRPRSM,FMT=9290) IORDER+ISECOV,KLENP
+        GO TO 900
+      ELSEIF (HOPER.EQ.'X'.AND.KLENP.LE.IORDER) THEN
+        IRETFN = 17291
+        WRITE(GRPRSM,FMT=9291) IORDER+1
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3 . Decode last octet(s) (22...) before loop on groups.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (KSEC4(12).NE.0) THEN
+C
+C               General extended second-order packing used.
+C
+        IF (LSECBI) THEN
+          IRETFN = 17310
+          WRITE(GRPRSM,FMT=9310) 'no secondary bit-map'
+          GO TO 900
+        ELSEIF (LCTWID) THEN
+          IRETFN = 17320
+          WRITE(GRPRSM,FMT=9310) 'variable group widths'
+          GO TO 900
+        ENDIF
+C
+C     Octets 22 - 23: Width of widths, Width of lengths.
+C     Two 8-bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IWORK,2,KBITS,8,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 17330
+          WRITE(GRPRSM,FMT=9001) 'general extended descriptors, widths'
+          GO TO 900
+        ENDIF
+C
+        IBITGW=IWORK(1)
+        IBITGS=IWORK(2)
+C
+        IF (MAX (IBITGW,IBITGS).GT.JPXPWR) THEN
+          IRETFN = 17340
+          WRITE(GRPRSM,FMT=9002)
+     X         'general extended width of (group and/or size)',
+     X                            JPXPWR
+          GO TO 900
+        ENDIF
+C
+        KSEC4(11)=IBITGS
+C
+C     Octets 24-25: Octet number of the start of group sizes (lengths).
+C     One 16-bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IPTRGS,1,KBITS,16,YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 17345
+          WRITE(GRPRSM,FMT=9001) 'general extended group size pointer'
+          GO TO 900
+        ENDIF
+C
+        IPTRSN=1+(8+(KNSPT-INSPTA)+IFIROV*IBITGW-1)/8
+C
+        IF (IPTRSN.GT.JP16SET) THEN
+C
+C           Two octets not wide enough for IPTRGS - adjust.
+C
+          IPTRGS=IPTRSN
+        ENDIF
+C
+        IF (IORDER.NE.0.AND.HOPER.NE.'J') THEN
+C
+C     Octet 26: Width of spatial differencing specific descriptors.
+C     One 8-bit field.
+C
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IWIDSD,1,KBITS,8,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 17346
+            WRITE(GRPRSM,FMT=9001)
+     X           'Width of spatial differencing descriptors'
+            GO TO 900
+          ELSEIF (IWIDSD.NE.0) THEN
+C
+C     Octet 27-onwards: first IORDER original values and diff. bias.
+C     (IORDER+1) fields of IWIDSD bits.
+C
+            IAUXIL=IORDER+1
+            CALL INXBIT(KGRIB,KLENG,KNSPT,KDATA,IAUXIL,KBITS,IWIDSD,
+     X                  YOPER,IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 17347
+              WRITE(GRPRSM,FMT=9001)
+     X           'First field value(s) (spatial differencing case)'
+              GO TO 900
+            ENDIF
+C
+C              Decode bias and its sign.
+C
+            CALL DSGNBT(IBIAS,KDATA(IAUXIL),IWIDSD,IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 17348
+              WRITE(GRPRSM,FMT=9348) IRET
+              GO TO 900
+            ENDIF
+C
+C                 Adjust pointer to next octet boundary.
+C
+            KNSPT=8*((8+KNSPT-1)/8)
+C
+          ELSE
+C
+C                 Spatial differencing descriptors are all zero.
+C
+            DO 311 J=1,IORDER
+            KDATA(J)=0
+  311       CONTINUE
+C
+            IBIAS=0
+C
+          ENDIF
+C
+        ENDIF
+C
+      ELSE
+C
+        IBITGW=8
+C
+        IF (LCTWID) THEN
+C
+C     Octet 22: Single value for width of second-order values.
+C     One 8-bit field.
+C
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IWIDTH,1,KBITS,8,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 17350
+            WRITE(GRPRSM,FMT=9001) 'constant width of 2nd-order values'
+            GO TO 900
+          ELSEIF (IWIDTH.GT.JPXPWR) THEN
+            IRETFN = 17351
+            WRITE(GRPRSM,FMT=9002) 'Constant width', JPXPWR
+            GO TO 900
+          ENDIF
+C
+          KSEC4(11)=IWIDTH
+C
+        ENDIF
+C
+        IF (LSECBI) THEN
+C
+C     Secondary bit-map present. Initialize pointer, and decode
+C     start of secondary bit-map (if field decoding is requested).
+C
+          IF (LCTWID) THEN
+            IPTRBM=23
+          ELSE
+            IPTRBM=22+IFIROV
+          ENDIF
+C
+          IPTRBM=(IPTRBM-1)*8+INSPTA
+          IPTRB0=IPTRBM
+C
+          IF (HOPER.NE.'J') THEN
+C
+            ILAUXS=MIN(ISECOV,JPWS2O)
+            IAUXIS=1
+            CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,YOPER,
+     X                  IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 17360
+              WRITE(GRPRSM,FMT=9001) 'start of secondary bit-map'
+              GO TO 900
+            ELSEIF (IWORK2(1).NE.1) THEN
+              IRETFN = 17365
+              WRITE(GRPRSM,FMT=9365)
+              GO TO 900
+            ENDIF
+C
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+C     Compute minimum values for pointers. If it leads to value(s)
+C     not fitting in 2 octets, then assume these are the right
+C     value(s) to use.
+C
+      IPTRGW=KNSPT
+      IPTRFN=1+(8+IPTRGW-INSPTA-1)/8
+C
+      IF (LCTWID) THEN
+        IPTRFN=IPTRFN+(8+ISECOV-1)/8
+      ELSEIF (LROW) THEN
+        IPTRFN=IPTRFN+(8+IFIROV*IBITGW-1)/8
+      ELSEIF (LGENXT) THEN
+        IPTRFN=IPTRFN+(8+IFIROV*IBITGW-1)/8+(8+IFIROV*IBITGS-1)/8
+      ELSE
+        IPTRFN=IPTRFN+(8+IFIROV*IBITGW-1)/8+(8+ISECOV-1)/8
+      ENDIF
+C
+      IF (IPTRFN.GT.JP16SET) THEN
+        IPTRFO=IPTRFN
+      ENDIF
+C
+      KSEC4(16)=IPTRFO
+      IPTRSN=IPTRFO+(8+IFIROV*KSEC4(2)-1)/8
+C
+      IF (IPTRSN.GT.JP16SET) THEN
+        IPTRSO=IPTRSN
+        KSEC4(17)=IPTRSO
+      ENDIF
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+#endif
+C
+        IF (LROW) THEN
+          WRITE(GRPRSM,FMT=9381) 'row by row'
+        ELSEIF (LCTWID) THEN
+          WRITE(GRPRSM,FMT=9382) KSEC4(11)
+        ELSEIF (LGENXT) THEN
+          WRITE(GRPRSM,FMT=9381) 'general extended'
+        ELSE
+          WRITE(GRPRSM,FMT=9381) 'WMO general 2nd-order'
+        ENDIF
+C
+        IF (LBOUST) THEN
+          WRITE(GRPRSM,FMT=9383)
+        ENDIF
+C
+        IF (IORDER.NE.0) THEN
+          WRITE(GRPRSM,FMT=9384) IORDER, IBIAS
+        ENDIF
+C
+        WRITE(GRPRSM,FMT=9385) IFIROV, ISECOV, IPTRFO, IPTRSO
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      KSEC4(20)=IBITGW
+      IPTRFO=(IPTRFO-1)*8+INSPTA
+      IPTRSO=(IPTRSO-1)*8+INSPTA
+C
+C     Cross checks betweens pointers.
+C
+      IF (LGENXT) THEN
+C
+        IPTRGS=(IPTRGS-1)*8+INSPTA
+C
+        IF (IPTRGW+IFIROV*IBITGW.GT.IPTRGS) THEN
+          IRETFN = 17391
+          WRITE(GRPRSM,FMT=9391)
+          GO TO 900
+        ELSEIF (IPTRGS+IFIROV*IBITGS.GT.IPTRFO) THEN
+          IRETFN = 17392
+          WRITE(GRPRSM,FMT=9393)
+     X           'general extended group size/1st-order values'
+          GO TO 900
+        ENDIF
+C
+      ELSEIF (LSECBI) THEN
+C
+        IF (IPTRB0+ISECOV.GT.IPTRFO) THEN
+          IRETFN = 17393
+          WRITE(GRPRSM,FMT=9393) '2ndary bit-map/1st-order values'
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      IF (IPTRFO+IFIROV*KSEC4(2).GT.IPTRSO) THEN
+        IRETFN = 17394
+        WRITE(GRPRSM,FMT=9393) 'First-order/Second-order'
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 4 . Additional preprocessing for function 'X'.
+C     -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF (HOPER.EQ.'X') THEN
+C
+C     First, perform some checks.
+C
+        INDEXX=34
+        INDEXY=42
+C
+#ifndef ebug2o
+        IF (LDEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9401) INDEXX, INDEXY,
+     X                            (KSEC4(J),J=INDEXX,INDEXY)
+#ifndef ebug2o
+        ENDIF
+#endif
+C
+        INPEXT=KSEC4(INDEXX)
+C
+        IF (LPRIBI) THEN
+          IRETFN = 17410
+          WRITE(GRPRSM,FMT=9410) 'not valid with a (primary) bit-map'
+          GO TO 900
+        ELSEIF (KSEC2(1).GE.40.OR.
+     X          (MOD(KSEC2(1),10).NE.0.AND.MOD(KSEC2(1),10).NE.4)) THEN
+          IRETFN = 17411
+          WRITE(GRPRSM,FMT=9410)
+     X              'valid only with lat/long or gaussian field'
+          GO TO 900
+        ELSEIF (INPEXT.LT.1.OR.INPEXT.GT.JPXMAX) THEN
+          IRETFN = 17412
+          WRITE(GRPRSM,FMT=9412) JPXMAX,' points.'
+          GO TO 900
+        ELSEIF (INPEXT.GT.KLENP) THEN
+          IRETFN = 17413
+          WRITE(GRPRSM,FMT=9413) INPEXT
+          GO TO 900
+        ENDIF
+C
+C       Take into account third bit of scanning modes to know 
+C       which dimension is latitude.
+C
+C       INCR=0 means that longitude is the most rapidly varying.
+C
+        INCR=MOD (KSEC2(11),64)/32
+C
+C       Now compute 1-dimensional "addresses" in whole field.
+C
+        DO 422 JEXT=1,INPEXT
+        INDROW=KSEC4(INDEXX+2*JEXT-1+INCR)
+        INDCOL=KSEC4(INDEXX+2*JEXT  -INCR)
+C
+        IF (INDROW.LT.1.OR.INDROW.GT.INROWS) THEN
+          IRETFN = 17421
+          WRITE(GRPRSM,FMT=9421) JEXT, INCR+1, INROWS
+          GO TO 900
+        ELSEIF(LQUASI) THEN
+          ISKIP=0
+C
+          DO 421 J=1,INDROW-1
+          ISKIP=ISKIP+KSEC2(IREFLN+J)
+  421     CONTINUE
+C
+          ILNGTH=KSEC2(IREFLN+INDROW)
+C
+        ELSE
+          ISKIP=(INDROW-1)*ILNGTH
+        ENDIF
+C
+        IF (INDCOL.LT.1.OR.INDCOL.GT.ILNGTH) THEN
+          IRETFN = 17422
+          WRITE(GRPRSM,FMT=9421) JEXT, 2-INCR, ILNGTH
+          GO TO 900
+        ENDIF
+C
+#ifndef ebug2o
+        IF (LDEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9422) JEXT, INDROW, INDCOL, ISKIP, ILNGTH
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        IF (LBOUST.AND.MOD(INDROW,2).EQ.0) THEN
+          INDCOL=ILNGTH+1-INDCOL
+        ENDIF
+C
+        IRGEXT(JEXT)=ISKIP+INDCOL
+        INDXOR(JEXT)=JEXT
+  422   CONTINUE
+C
+C     Finally, sort "addresses" in ascending order.
+C
+        DO 432 JEXT=1,INPEXT-1
+C
+        DO 431 J=JEXT+1,INPEXT
+C
+        IF (IRGEXT(J).LT.IRGEXT(JEXT)) THEN
+          IAUXIL=IRGEXT(J)
+          IRGEXT(J)=IRGEXT(JEXT)
+          IRGEXT(JEXT)=IAUXIL
+          IAUXIL=INDXOR(J)
+          INDXOR(J)=INDXOR(JEXT)
+          INDXOR(JEXT)=IAUXIL
+        ENDIF
+C
+  431   CONTINUE
+C
+  432   CONTINUE
+C
+        IRGEXT(INPEXT+1)=0
+#ifndef ebug2o
+C
+        IF (LDEBUG) THEN
+#endif
+          PRINT *,' D2ORDR: IRGEXT = ',IRGEXT,', INDXOR = ',INDXOR,'.'
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+      ELSE
+        INPEXT=0
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 5 . Decode values, group by group.
+C     -----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C     Finished if function 'J' is requested.
+C
+      IF (HOPER.EQ.'J') THEN
+        KSEC4(1)=IORDER+ISECOV
+        GO TO 900
+      ENDIF
+C
+      ICOUNT=IORDER
+      ICOUNS=IORDER
+      ICOUNG=IORDER
+      IEXT=1
+      INBSEQ=1+(IFIROV-1)/JPWS1O
+C
+      IF (KSEC4(2).EQ.0) THEN
+C
+C       In this case, no first-order values are provided: they are
+C       all equal to 0 (group references equal to field reference).
+C
+        DO 501 J=1,MIN (IFIROV,JPWS1O)
+        IFIRST(J)=0
+  501   CONTINUE
+C
+      ENDIF
+C
+      IF (LCTWID.AND.HOPER.NE.'X') THEN
+C
+C       Constant width packing. Second-order values will be
+C       decoded once per sequence.
+C
+        IPRWID=KSEC4(11)
+C
+        DO 502 J=1,MIN (IFIROV,JPWS1O)
+        IWIDGR(J)=IPRWID
+  502   CONTINUE
+C
+      ENDIF
+C
+C                 Groups treated as sequences, as large as possible
+C                 with respect to group work arrays size (JPWS1O). 
+C
+      DO 591 JSEQ=1,INBSEQ
+C
+      IGROFF=(JSEQ-1)*JPWS1O
+      IGRNBR=MIN (JPWS1O,IFIROV-IGROFF)
+C
+      IF (LGENXT) THEN
+        CALL INXBIT(KGRIB,KLENG,IPTRGS,IWORK2,IGRNBR,KBITS,IBITGS,YOPER,
+     X              IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 17510
+          WRITE(GRPRSM,FMT=9510) 'sizes', IGROFF+1, IGROFF+IGRNBR
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      IF (.NOT.LCTWID) THEN
+        CALL INXBIT(KGRIB,KLENG,IPTRGW,IWIDGR,IGRNBR,KBITS,IBITGW,YOPER,
+     X              IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 17520
+          WRITE(GRPRSM,FMT=9510) 'widths', IGROFF+1, IGROFF+IGRNBR
+          GO TO 900
+        ENDIF
+C
+        IPRWID=IWIDGR(1)
+C
+      ENDIF
+C
+      IF (KSEC4(2).NE.0) THEN
+C
+        CALL INXBIT(KGRIB,KLENG,IPTRFO,IFIRST,IGRNBR,KBITS,KSEC4(2),
+     X              YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 17530
+          WRITE(GRPRSM,FMT=9510) '1st-order values', IGROFF+1,
+     X         IGROFF+IGRNBR
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      ILNGTS=0
+C
+C     Loop over groups in a given sequence.
+C
+      DO 551 JGROUP=1,IGRNBR
+C
+C     Define length of current group: ILNGTH.
+C
+      IF (LGENXT) THEN
+        ILNGTH=IWORK2(JGROUP)
+      ELSEIF (LSECBI) THEN
+C
+        ILNGTH=0
+C
+  520   CONTINUE
+C
+        DO 521 J=IAUXIS+1,ILAUXS
+C
+        IF (IWORK2(J).EQ.1) THEN
+          IRANG=J
+          GOTO 522
+        ENDIF
+C
+  521   CONTINUE
+C
+        ILNGTH=ILNGTH+ILAUXS-IAUXIS
+C
+        IF (IPTRBM.LT.IPTRB0+ISECOV) THEN
+          ILAUXS=MIN(IPTRB0+ISECOV-IPTRBM,JPWS2O)
+          IAUXIS=0
+          CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,YOPER,
+     X                IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 17540
+            WRITE(GRPRSM,FMT=9001) 'secondary bit-map'
+            GO TO 900
+          ENDIF
+C
+          GOTO 520
+        ELSE
+C
+C           It was the last group.
+C
+          ILNGTH=ILNGTH+1
+          GOTO 523
+        ENDIF
+C
+  522   CONTINUE
+C
+        ILNGTH=ILNGTH+IRANG-IAUXIS
+        IAUXIS=IRANG
+C
+  523   CONTINUE
+C
+      ELSE
+C
+C        ... that's row by row packing...
+C
+C            (re)definition of row length.
+C
+        IF (LQUASI) THEN
+          IREFLN=IREFLN+1
+          ILNGTH=KSEC2(IREFLN)
+        ELSE
+          ILNGTH=ILEN/INROWS
+        ENDIF
+C       
+        IF (LPRIBI) THEN
+C
+C         Row by row packing, but an explicit bit-map is included.
+C         The number of values in current row has to be known.
+C
+          IVALS=ILNGTH
+C
+          IF (JSEQ.EQ.1) THEN
+C
+C            Rows of first sequence has been pre-computed in Section 2.
+C
+            ILNGTH=ILENGR(JGROUP)
+C
+          ELSE
+C
+            ILNGTH=0
+            IVALSC=IVALS
+C
+  530       CONTINUE
+C
+            DO 531 J=1,MIN (IVALSC,ILAUXS-IAUXIS)
+            ILNGTH=ILNGTH+IWORK2(IAUXIS+J)
+  531       CONTINUE
+C
+            IF (IVALSC.LE.ILAUXS-IAUXIS) THEN
+C
+              IAUXIS=IAUXIS+IVALSC
+C
+            ELSEIF (IPTRBM.LT.KBMAP+KVALS) THEN
+C
+              IVALSC=IVALSC-(ILAUXS-IAUXIS)
+              ILAUXS=MIN(KBMAP+KVALS-IPTRBM,JPWS2O)
+              IAUXIS=0
+#ifndef ebug2o
+C
+              IF (LDEBUG) THEN
+#endif
+                WRITE(GRPRSM,FMT=9540) IGROFF+JGROUP, IPTRBM, ILAUXS
+#ifndef ebug2o
+              ENDIF
+C
+#endif
+              CALL INXBIT(KGRIB,KLENG,IPTRBM,IWORK2,ILAUXS,KBITS,1,
+     X                    YOPER,IRET)
+C
+              IF (IRET.NE.0) THEN
+                IRETFN = 17550
+                WRITE(GRPRSM,FMT=9001)
+     X                    'primary bit-map in row by row case'
+                GO TO 900
+              ENDIF
+C
+              GOTO 530
+C
+            ELSE
+C
+              IRETFN = 17560
+              WRITE(GRPRSM,FMT=9560)
+              GO TO 900
+C
+            ENDIF
+C
+          ENDIF
+C
+#ifndef ebug2o
+          IF (LDEBUG) THEN
+#endif
+            WRITE(GRPRSM,FMT=9565) IGROFF+JGROUP, ILNGTH, IVALS
+#ifndef ebug2o
+          ENDIF
+C
+#endif
+        ENDIF
+C
+      ENDIF
+C
+      ICNEXT=ICOUNT+ILNGTH
+C
+      IF (ICNEXT.GT.(IORDER+ISECOV)) THEN
+        IRETFN = 17570
+        WRITE(GRPRSM,FMT=9570) ICNEXT, ISECOV
+        GO TO 900
+      ENDIF
+C
+      ILENGR(JGROUP)=ILNGTH
+C
+C         Go to next group if no point is included in current group.
+C         (may only occur for masked field in row by row case)
+C
+      IF (ILNGTH.EQ.0) THEN
+        IWIDGR(JGROUP)=0
+        IFIRST(JGROUP)=0
+        GOTO 551
+      ENDIF
+C
+C     If necessary, (re)define width of current group: IWIDTH.
+C
+      IWIDTH=IWIDGR(JGROUP)
+C
+  540 CONTINUE
+C
+C     All characteristics of current group are known, so proceed
+C     with second-order data.
+C
+C     Except for 'X' function, neighbour groups of same width are
+C     "unpacked" together, at least once per sequence.
+C
+      IF (HOPER.NE.'X') THEN
+C
+C         All values of current group will have to be processed.
+C
+        IF (IWIDTH.NE.IPRWID) THEN
+C
+C     Current group may not be unpacked together with previous one(s).
+C
+#ifdef ebug2o
+          PRINT *,'d2ordr - groups..',IGROFF+JGROUP-1,
+     X          ' IPTRSO/IPRWID/ICOUNS/ILNGTS= ',
+     X            IPTRSO, IPRWID, ICOUNS, ILNGTS
+#endif
+C
+          IF (IPRWID.NE.0.AND.ILNGTS.NE.0) THEN
+C
+C     Effective decoding of second-order values, for previous group(s).
+C
+            CALL INXBIT(KGRIB,KLENG,IPTRSO,KDATA(ICOUNS+1),
+     X                  ILNGTS,KBITS,IPRWID,YOPER,IRET)
+C
+            IF (IRET.NE.0) THEN
+              IRETFN = 17580
+              WRITE(GRPRSM,FMT=9580) 'groups..', IGROFF+JGROUP-1
+              GO TO 900
+            ENDIF
+C
+          ENDIF
+C
+          ICOUNS=ICOUNT
+          ILNGTS=0
+          IPRWID=IWIDTH
+C
+        ENDIF
+C
+        ILNGTS=ILNGTS+ILNGTH
+C
+      ELSEIF (IRGEXT(IEXT).GT.ICOUNT.AND.IRGEXT(IEXT).LE.ICNEXT) THEN
+C
+C     Function 'X' - Compute only a single "full" normalized value.
+C
+        IEXTOR=INDXOR(IEXT)
+C
+        IF (IWIDTH.NE.0) THEN
+          IAUXIL=IPTRSO+(IRGEXT(IEXT)-ICOUNT-1)*IWIDTH
+          CALL INXBIT(KGRIB,KLENG,IAUXIL,KDATA(IEXTOR),1,KBITS,
+     X                IWIDTH,YOPER,IRET)
+C
+          IF (IRET.NE.0) THEN
+            IRETFN = 17580
+            WRITE(GRPRSM,FMT=9580) 'group', IGROFF+JGROUP
+            GO TO 900
+          ENDIF
+C
+          KDATA(IEXTOR)=IFIRST(JGROUP)+KDATA(IEXTOR)
+        ELSE
+          KDATA(IEXTOR)=IFIRST(JGROUP)
+        ENDIF
+C
+        IEXT=IEXT+1
+#ifndef ebug2o
+C
+        IF (LDEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9585) IEXT, INPEXT
+#ifndef ebug2o
+        ENDIF
+#endif
+C
+C       Loop back, to allow for extraction of other point(s)
+C       within the current group.
+C
+        GOTO 540
+C
+      ELSE
+C
+C       Function 'X', but group contains no requested grid-point.
+C       Pointer adjusted for next group.
+C
+        IPTRSO=IPTRSO+ILNGTH*IWIDTH
+C
+      ENDIF
+C
+      ICOUNT=ICNEXT
+C
+  551 CONTINUE
+C
+      IF (HOPER.NE.'X') THEN
+C
+#ifdef ebug2o
+        PRINT *,'d2ordr - groups..',IGROFF+IGRNBR,
+     X          ' IPTRSO/IPRWID/ICOUNS/ILNGTS= ',
+     X            IPTRSO, IPRWID, ICOUNS, ILNGTS
+C
+#endif
+        IF (IPRWID.NE.0.AND.ILNGTS.NE.0) THEN
+C
+C         Effective decoding of second-order values, for last group(s)
+C         of the current sequence.
+C
+C         In case of constant width packing it means all groups
+C         of the current sequence.
+C
+          CALL INXBIT(KGRIB,KLENG,IPTRSO,KDATA(ICOUNS+1),
+     X                ILNGTS,KBITS,IPRWID,YOPER,IRET)
+C  
+          IF (IRET.NE.0) THEN
+            IRETFN = 17580
+            WRITE(GRPRSM,FMT=9580) 'groups..', IGROFF+IGRNBR
+            GO TO 900
+          ENDIF
+C
+        ENDIF
+C
+        ICOUNS=ICOUNT
+C
+C       Add first-order values to rebuild original normalized values.
+C
+        DO 563 JGROUP=1,IGRNBR
+C
+#ifdef ebug2o
+        IMAXVC=0
+#endif
+        IREFER=IFIRST(JGROUP)
+        ILNGTH=ILENGR(JGROUP)
+        IWIDTH=IWIDGR(JGROUP)
+C
+        IF (IWIDTH.NE.0) THEN
+C
+          DO 561 J=1,ILNGTH
+#ifdef ebug2o
+          IMAXVC=MAX(IMAXVC,KDATA(ICOUNG+J))
+#endif
+          KDATA(ICOUNG+J)=IREFER+KDATA(ICOUNG+J)
+  561     CONTINUE
+C
+        ELSE
+C
+C     Group with a constant value: no second order value included.
+C
+          DO 562 J=1,ILNGTH
+          KDATA(ICOUNG+J)=IREFER
+  562     CONTINUE
+C
+        ENDIF
+C
+        ICOUNG=ICOUNG+ILNGTH
+#ifdef ebug2o
+        PRINT *,'d2ordr - group ',IGROFF+JGROUP,ICOUNG,ILNGTH,IWIDTH,
+     X           IREFER,IMAXVC
+#endif
+C
+  563   CONTINUE
+C
+      ENDIF
+C
+  591 CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 6 . Last computations.
+C     -----------------------------------------------------------------
+C
+  600 CONTINUE
+C
+C          From this point and for the remaining part of the routine,
+C          ISECOV is the total number of grid-points.
+C
+      ISECOV=IORDER+ISECOV
+C
+      IF (IORDER.NE.0) THEN
+C
+C         Rebuild original field values from spatial differences.
+C
+#if (defined CRAY) || (defined FUJITSU)
+        LVECTD=.TRUE.
+#else
+        LVECTD=.FALSE.
+#endif
+C
+        IRETFN = D2ROSD ( KDATA,  ISECOV, IORDER, IPOWER, JPXPWR,
+     X                    IBIAS,  LVECTD, LDEBUG )
+C
+        IF (IRETFN.NE.0) THEN
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+      IF (HOPER.NE.'X') THEN
+C
+C       Recompute original bit number for the whole field.
+C
+        CALL MAXMNI (KDATA,ISECOV,IMAXVN,IAUXIL)
+C
+        KSEC4(2) = C2BITW ( IMAXVN, JPXPWR, IPOWER, JPXPWR )
+C
+#ifndef ebug2o
+        IF (LDEBUG) THEN
+#endif
+          WRITE(GRPRSM,FMT=9601) KSEC4(2)
+#ifndef ebug2o
+        ENDIF
+C
+#endif
+        IF (ICOUNT.NE.ISECOV) THEN
+          IRETFN = 17610
+          WRITE(GRPRSM,FMT=9610) ICOUNT, ISECOV
+          GO TO 900
+        ELSE
+          KSEC4(1)=ISECOV
+        ENDIF        
+C
+      ELSE
+        KSEC4(1)=MIN(IEXT,JPXMAX)
+      ENDIF
+C
+#ifndef ebug2o
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9602) KSEC4(1)
+#ifndef ebug2o
+      ENDIF
+C
+#endif
+      KNSPT=INSPTA+KLEN4*8-KNIL
+C
+      IF (IPTRSO.NE.KNSPT) THEN
+        IRETFN = 17620
+        WRITE(GRPRSM,FMT=9620) IPTRSO, KNSPT
+        GO TO 900
+      ENDIF        
+C
+      IF (LBOUST.AND.HOPER.NE.'X') THEN
+C
+C           Reverse ordering within even rank rows.
+C
+        LPRCLN=.FALSE.
+C
+        IRETFN = REVERO ( KDATA,  KLENP,  KSEC2,  KGRIB,  KLENG,
+     X                    KBITS,  KBMAP,  KVALS,  LPRIBI, LQUASI,
+     X                    INROWS, ISECOV, IFIRST, JPWS2O, LDEBUG,
+     X                    LPRCLN, IWORK2 )
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      D2ORDR = IRETFN
+#ifndef ebug2o
+C
+      IF (LDEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN, HOPER(:1), KNSPT
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9001 FORMAT (' D2ORDR: Problem extracting ',A,'.')
+C
+ 9002 FORMAT (' D2ORDR: ',A,' above',I3,'.')
+C
+ 9100 FORMAT (' D2ORDR: Function start, HOPER = ',A,', KNSPT =',I10,
+     X        '.')
+ 9135 FORMAT (' D2ORDR: Decoded number of bits (for 1st-order values)',
+     X        ' =',I3,'.')
+ 9150 FORMAT (' D2ORDR: PREF =',F30.20,', decoded IPTRFO =',I6,'.',/,
+     X        ' D2ORDR: KNSPT at end of "Section 1" =',I10,'.')
+ 9210 FORMAT (' D2ORDR: Extended flags =',I9.8,', KNSPT =',I10,'.')
+ 9220 FORMAT (' D2ORDR: First extended flag (reserved) set.')
+ 9225 FORMAT (' D2ORDR: KSEC4(3:10) =',I4,3I3,I2,3I3,'.')
+ 9230 FORMAT (' D2ORDR: Last extended flag(s) (reserved) set.')
+ 9240 FORMAT (' D2ORDR: Matrix of values invalid here.')
+ 9244 FORMAT (' D2ORDR: Function HOPER = "',A1,
+     X        '" not supported for spatial differencing.')
+ 9245 FORMAT (' D2ORDR: Spatial differencing implies general',
+     X                   ' extended 2nd-order packing.')
+#ifndef wmogrp2o
+ 9255 FORMAT (' D2ORDR: 21st octet of section 4 not zero:',I9.8,
+     X        '=>',I3,'.',/,TR10,
+     X        'interpreted as extra bits for group number:',I8,'.')
+#endif
+ 9260 FORMAT (' D2ORDR: Row by row packing: row/group numbers',
+     X        ' not consistent.')
+ 9270 FORMAT (' D2ORDR: Number of second-order values ',A,'.')
+ 9275 FORMAT (' D2ORDR: (Primary bit-map size/section 2 contents)',
+     X        ' mismatch.')
+ 9277 FORMAT (' D2ORDR: ',A,' only supported with a section 2.')
+ 9281 FORMAT (' D2ORDR: ',A,
+     S        '/Implicit primary bit-map: not supported.')
+ 9290 FORMAT (' D2ORDR: Grid-point number exceeds KDATA size:',I9,
+     X        ' >',I9,'.')
+ 9291 FORMAT (' D2ORDR: Function ''X'' - KDATA size must be at least',
+     X        I2,' for actual spatial differencing).')
+C
+ 9310 FORMAT (' D2ORDR: General extended packing implies ',A,'.')
+ 9348 FORMAT (
+     X' D2ORDR: Bias sign management problem, DSGNBT return is',I5,'.')
+ 9365 FORMAT (' D2ORDR: First bit of secondary bit-map is not set.')
+ 9381 FORMAT (' D2ORDR: Packing method is ',A,'.')
+ 9382 FORMAT (' D2ORDR: Packing method is constant width, on',I3,
+     X        ' bits.')
+ 9383 FORMAT (' D2ORDR: Boustrophedonic ordering used.')
+ 9384 FORMAT (' D2ORDR: Spatial differencing used, order is',I2,
+     X        ', bias =',I9,'.')
+ 9385 FORMAT (' D2ORDR: IFIROV, ISECOV, IPTRFO, IPTRSO =',2I8,2I10,
+     X        '.')
+ 9391 FORMAT (
+     X ' D2ORDR: Bad pointer to general extended group size info.')
+ 9393 FORMAT (' D2ORDR: (',A,')',' pointers mismatch.')
+C
+ 9401 FORMAT (' D2ORDR: ''X'' Function - KSEC4(',I2,':',I2,') = ',I3,
+     X        8I6,'.')
+ 9410 FORMAT (' D2ORDR: Function ''X'' ',A,'.')
+ 9412 FORMAT (' D2ORDR: Function ''X'' valid only for 1 to',I3,
+     X        ' points.')
+ 9413 FORMAT (' D2ORDR: Function ''X'' - KDATA size insufficient for',
+     X        I2,' points requested.')
+ 9421 FORMAT (' D2ORDR: Function ''X'', Point',I6,',',I2,
+     X        '-index not in range [1-',I6,'].')
+ 9422 FORMAT (' D2ORDR: JEXT, INDROW, INDCOL, ISKIP, ILNGTH =',
+     X        I3,2I6,I8,I6,'.')
+C
+ 9510 FORMAT (' D2ORDR: ',A,', groups',I6,'..',I6.6,'.')
+ 9540 FORMAT (' D2ORDR: mask, row',I6,', bit-map pointer =',I10,
+     X        ', size requested=',I8,'.')
+ 9560 FORMAT (' D2ORDR: Pointers problem for primary bit-map,',
+     X        ' row by row case.')
+ 9565 FORMAT (' D2ORDR: mask, row',I6,', length =',I6,' out of',I6,'.')
+ 9570 FORMAT (' D2ORDR: Grid-point number overflow:',I8,' >',I8,'.')
+ 9580 FORMAT (' D2ORDR: second-order values, ',A,I8,'.')
+ 9585 FORMAT (' D2ORDR: IEXT =',I3,', INPEXT =',I3,'.')
+C
+ 9601 FORMAT (
+     X  ' D2ORDR: Original number of bits -returned in KSEC4(2)-) =',
+     X  I3,'.')
+ 9602 FORMAT (' D2ORDR: Values decoded -returned in KSEC4(1)- =',
+     X        I8,'.')
+ 9610 FORMAT (' D2ORDR: Mismatch: sum of group lengths =',I8,
+     X        ', expected =',I8,'.')
+ 9620 FORMAT (' D2ORDR: Final bit pointer is',I10,', expected =',I10,
+     X        '.')
+C
+ 9900 FORMAT (' D2ORDR: Function return code =',I6,', HOPER = ',A,
+     X        ', KNSPT =',I10,'.')
+C      
+      END
diff --git a/gribex/d2rosd.F b/gribex/d2rosd.F
new file mode 100755
index 0000000..1bcab01
--- /dev/null
+++ b/gribex/d2rosd.F
@@ -0,0 +1,330 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION D2ROSD ( KDATA,  KLEN,   KORDER, KPOWER, KMXPWR,
+     X                          KBIAS,  OVECTA, ODEBUG )
+C
+C---->
+C**** D2ROSD
+C
+C     Purpose.
+C     --------
+C
+C     Rebuild Original field from Spatial Differences, when using
+C     non-local features of GRIB second-order extended packing.
+C
+C**   Interface.
+C     ----------
+C
+C     IRET = D2ROSD ( KDATA,  KLEN,  KPOWER, KMXPWR, OVECTA, ODEBUG )
+C
+C     Function result value is zero, except for non-valid order.
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KDATA      - Array of normalized values.
+C     KLEN       - Exact number of grid-points to handle.
+C     KPOWER     - Auxilary array, containing precomputed powers of 2-1.
+C     KMXPWR     - Maximum number of bits allowed.
+C     KBIAS      - BIAS of spatial differences.
+C     OVECTA     - True if vectorizing algorithm has to be used.
+C     ODEBUG     - True for some debug printout.
+C
+C
+C     Output Parameters (effective only if function value is non zero).
+C     ------------------
+C
+C     KDATA      - Array of normalized values (transformed).
+C
+C
+C     Method.
+C     -------
+C
+C     For vector systems, an external loop on order of spatial
+C     differencing is made, and inner recursive sum is made by a
+C     or by a vectorizing algorithm (that implies an overhead of
+C     LOG2(KLEN) in operations and memory accesses).
+C
+C     For scalar systems, a single scan is performed, with contents
+C     specific for each order.
+C
+C
+C     Externals.
+C     ----------
+C
+C     C2BITW    - Computes bit width of a positive integer value.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - April 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J. Clochard, September 1998.
+C     Optimisation for scalar systems (memory access reduced).
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPORDR
+C
+C       Maximum order of spatial differencing allowed.
+C
+      PARAMETER ( JPORDR=3 )
+C
+C     Subroutine arguments
+C
+      INTEGER KLEN, KMXPWR, KBIAS, KORDER
+      INTEGER KDATA (KLEN), KPOWER (0:KMXPWR)
+C
+      LOGICAL OVECTA, ODEBUG
+C
+C     Local variables.
+C
+      INTEGER IOFF, J, J2, JORDER, ILOG2N, IORIGI, ILEN, IRETFN, I1DIFF
+      INTEGER I2DIFF
+C
+      INTEGER C2BITW
+      EXTERNAL C2BITW
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial checks.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) KLEN, KORDER, KBIAS
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      IF (KORDER.LE.0.OR.KORDER.GT.JPORDR) THEN
+        IRETFN = 23110
+        WRITE(GRPRSM,FMT=9110) KORDER, JPORDR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Preprocessing of first values of field.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (OVECTA) THEN
+C
+C       For higher orders, and due to iterative outer loop on order,
+C       it is necessary that the 2nd value contains the first 1st-order
+C       difference (between the 2 first values), and so on.
+C
+        DO 202 JORDER = 2, KORDER
+C
+#ifdef CRAY
+CDIR$ NOVECTOR
+#endif
+#ifdef FUJITSU
+!OCL SCALAR
+#endif
+          DO 201 J = KORDER, JORDER, -1
+C
+            KDATA(J)=KDATA(J)-KDATA(J-1)
+C
+  201     CONTINUE
+#ifdef CRAY
+CDIR$ VECTOR
+#endif
+#ifdef FUJITSU
+!OCL VECTOR
+#endif
+C
+  202   CONTINUE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3 . Rebuild original field integer values.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (OVECTA) THEN
+C
+C                       Vectorizable algorithm.
+C                       ----------------------
+C
+        DO 315 JORDER = KORDER, 1, -1
+C
+          ILEN=KLEN-JORDER
+          ILOG2N=C2BITW ( ILEN-1, KMXPWR, KPOWER, KMXPWR )
+C
+          IF (JORDER.EQ.KORDER) THEN
+C
+C              Bias is added at first scan.
+C
+            DO 312 J2 = 1, ILOG2N
+C
+              IOFF=KPOWER(J2-1)+1
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 311 J = KLEN, IOFF+JORDER, -1
+C
+                KDATA(J)=KDATA(J)+(KDATA(J-IOFF)+KBIAS)
+C
+  311         CONTINUE
+C
+  312       CONTINUE
+C
+          ELSE
+C
+            DO 314 J2 = 1, ILOG2N
+C
+              IOFF=KPOWER(J2-1)+1
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+              DO 313 J = KLEN, IOFF+JORDER, -1
+C
+                KDATA(J)=KDATA(J)+KDATA(J-IOFF)
+C
+  313         CONTINUE
+C
+  314       CONTINUE
+C
+          ENDIF
+C
+  315   CONTINUE
+C
+      ELSE
+C
+C                       Recurrent (scalar) algorithm.
+C                       ----------------------------
+C
+C             Only one scan, with specific code for each order.
+C
+C         Initialize recursion.
+C
+        IORIGI=KDATA(KORDER)
+C
+        IF (KORDER.EQ.1) THEN
+C
+          DO 321 J = 2, KLEN
+C
+            IORIGI=IORIGI+(KDATA(J)+KBIAS)
+            KDATA(J)=IORIGI
+C
+  321     CONTINUE
+C
+        ELSEIF (KORDER.EQ.2) THEN
+C
+          I1DIFF=KDATA(2)-KDATA(1)
+C
+          DO 322 J = 3, KLEN
+C
+            I1DIFF=I1DIFF+(KDATA(J)+KBIAS)
+            IORIGI=IORIGI+I1DIFF
+            KDATA(J)=IORIGI
+C
+  322     CONTINUE
+C
+        ELSE
+C
+          I1DIFF=KDATA(3)-KDATA(2)
+          I2DIFF=I1DIFF-(KDATA(2)-KDATA(1))
+C
+          DO 323 J = 4, KLEN
+C
+            I2DIFF=I2DIFF+(KDATA(J)+KBIAS)
+            I1DIFF=I1DIFF+I2DIFF
+            IORIGI=IORIGI+I1DIFF
+            KDATA(J)=IORIGI
+C
+  323     CONTINUE
+C
+        ENDIF
+C
+#ifdef ebug2o
+        ILEN=MIN (KLEN,10)
+        PRINT *,'d2rosd - JORDER=',JORDER,',KDATA(1:',ILEN,')=',
+     S           (KDATA(J),J=1,ILEN)
+C
+#endif
+      ENDIF
+C
+      IRETFN=0
+C
+C     -----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      D2ROSD = IRETFN
+C
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' D2ROSD: Function start, KLEN =',I8,', KORDER =',I2,
+     X        ', KBIAS=',I9,'.')
+C
+ 9110 FORMAT (' D2ROSD: Order requested:',I5,', out of [1,',I1,'].')
+C
+ 9312 FORMAT (' D2ROSD: Range diagnostic is ',A,
+     X        ' of spatial differences, order',I2,'.')
+ 9331 FORMAT (' D2ROSD: Selected order:',I2,', range diagnostics:',
+     X        4I8,'.')
+C
+ 9900 FORMAT (' D2ROSD: Function return code =',I6,'.')
+C
+      END
diff --git a/gribex/decext.F b/gribex/decext.F
new file mode 100755
index 0000000..fb26fe3
--- /dev/null
+++ b/gribex/decext.F
@@ -0,0 +1,464 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECEXT (KBIT,PDATA,KDATA,KGRIB,KLENB,KI,KJ,KERR)
+C
+C---->
+C***** DECEXT - Extract values from GRIB coded data.
+C
+C     Purpose.
+C     --------
+C
+C           Return unpacked values for a series of grid points from an
+C           array of packed grib data, without unpacking all values.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL DECEXT (KBIT,PDATA,KDATA,KGRIB,KLENB,KI,KJ,KERR)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C                 KBIT    - Number of bits in computer word
+C
+C                 PDATA   - Array to receive unpacked values.
+C
+C                 KDATA   - Size of array PDATA (number of grid points
+C                           required).
+C
+C                 KGRIB   - Integer array containing data in grib code.
+C
+C                 KLENB   - Length of array KGRIB (in words).
+C
+C                 KI      - I indices of required grid points.
+C                           (dimensioned KDATA).
+C
+C                 KJ      - J indices of required grid points.
+C                           (dimensioned KDATA).
+C
+C
+C               Output parameters.
+C               ------------------
+C
+C                 PDATA(N) - Value of grid point KI(N),KJ(N)
+C
+C                 KERR     - 0 if no error.
+C                            -1 If not grid point field.
+C                            -2 If error in routine OFFSET.
+C
+C     Method.
+C     -------
+C
+C           The self defining fields of section 0 - 3 of the GRIB code
+C           are used to step down to the data part of section 4. The
+C           reference value and scale factor are extracted and converted
+C           The packed increments for the required
+C           grid points are extracted and the values calculated.
+C
+C     Externals.
+C     ----------
+C
+C           GBYTE
+C           GBYTES
+C           DECFP
+C           OFFSET
+C
+C     Reference.
+C     ----------
+C
+C           MARS User Guide for details of GRIB code and fields.
+C
+C     Comments.
+C     ---------
+C
+C           Subroutine contains section 0 - 2 , and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF     09/05/88
+C
+C     Modifications.
+C     --------------
+C
+C           None
+C
+C     ------------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L , O , G )
+      IMPLICIT CHARACTER*8 ( C , H , Y )
+      IMPLICIT INTEGER     ( I , J , K , M , N)
+C
+      DIMENSION KGRIB(KLENB)
+      DIMENSION PDATA(KDATA)
+      DIMENSION KI(KDATA)
+      DIMENSION KJ(KDATA)
+      DIMENSION IB1PAR(18)
+      DIMENSION IB2PAR(12)
+      DIMENSION IBLOCK(24)
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /60/
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SKIP DOWN THROUGH GRIB SECTION TO GET TO DATA SECTION.
+C     ------------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+C     BLOCK 0 - INDICATOR BLOCK.
+C
+C     SKIP 4 OCTETS CONTAINING ASCII G R I B .
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      IVAL  = 4
+C
+      CALL OFFSET (IOFF,IVAL,IWORD,IBYTE,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C     BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C
+C     EXTRACT FIRST 4 OCTETS OF BLOCK 1.
+C
+      IVAL  = 4
+C
+      CALL GBYTES (KGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,IVAL)
+      CALL OFFSET (IOFF,IVAL,IWORD,IBYTE,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C     IF THESE OCTETS DO NOT CONTAIN 0, 0, 24 AND 0 RESPECTIVELY
+C     THEN THE DATA IS IN THE OLD VERSION OF THE CODE.
+C
+      IF (IBLOCK(1).EQ.0.AND.IBLOCK(2).EQ.0.AND.IBLOCK(3).EQ.24.
+     C    AND.IBLOCK(4).EQ.0)
+     C      THEN
+                ISNEW = 1
+                IVAL = 20
+            ELSE
+                ISNEW = 0
+                IVAL = 16
+            ENDIF
+C
+C     EXTRACT NEXT 16 OR 20 OCTETS OF BLOCK 1 - NUMBER DEPENDS
+C     ON VERSION OF CODE.
+C
+      CALL GBYTES (KGRIB(IWORD),IBLOCK(5),IOFF,IBYTE,0,IVAL)
+      CALL OFFSET (IOFF,IVAL,IWORD,IBYTE,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C     TRANSFER PRODUCT DEFINITION INFORMATION.
+C
+      DO 1100 J1100=1,17
+         IB1PAR(J1100) = IBLOCK(J1100+4*ISNEW)
+ 1100 CONTINUE
+C
+C     BLOCK 2 - GRID DESCRIPTION BLOCK.
+C
+C     CHECK FLAG INDICATING IF BLOCK 2 IS INCLUDED IN CODE.
+C
+C     INC IS SET TO 1 , IF BLOCK 2 IS INCLUDED.
+C
+      INC = 0
+C
+C
+      IF (ISNEW.EQ.0)
+     C   THEN
+C            OLD VERSION OF CODE
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               00000001               1
+C                 3               00000010               2
+C             2 AND 3             00000011               3
+C
+             IF (IB1PAR(4).EQ.1.OR.IB1PAR(4).EQ.3) INC = 1
+         ELSE
+C            NEW VERSION
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               10000000             128
+C                 3               01000000              64
+C             2 AND 3             11000000             192
+C
+             IF (IB1PAR(4).EQ.128.OR.IB1PAR(4).EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C   THEN
+C
+C
+C            LENGTH OF GRID DESCRIPTION BLOCK.
+C
+             CALL GBYTE (KGRIB(IWORD),IBLK2,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+             ILENV = (IBLK2 - 32) / 4
+C
+C            NUMBER OF UNUSED BITS AND RESERVED BYTE SKIPPED.
+C
+             CALL OFFSET (IOFF,2,IWORD,8,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            DATA REPRESENTATION TYPE.
+C
+             CALL GBYTE (KGRIB(IWORD),IB2PAR(1),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            CHECK FOR GAUSSIAN OR LAT/LONG GRID.
+C
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4)
+     C          THEN
+                    KERR = -1
+                    GO TO 9000
+                ENDIF
+C
+C            NUMBER OF LATITUDE AND LONGITUDE POINTS.
+C
+             CALL GBYTES (KGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+             CALL OFFSET (IOFF,2,IWORD,16,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            LAT/LONG OF ORIGIN SKIPPED.
+C
+             CALL OFFSET (IOFF,2,IWORD,24,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            RESOLUTION FLAG SKIPPED.
+C
+             CALL OFFSET (IOFF,1,IWORD,8,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            LAT/LONG OF EXTREME POINT SKIPPED.
+C
+             CALL OFFSET (IOFF,2,IWORD,24,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            DIRECTION INCREMENTS/ NO. OF LATITUDE LINES SKIPPED.
+C
+             CALL OFFSET (IOFF,2,IWORD,16,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            SCANNING MODE FLAG SKIPPED.
+C
+             CALL OFFSET (IOFF,1,IWORD,8,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+C            4 RESERVED OCTETS SKIPPED.
+C
+             CALL OFFSET (IOFF,4,IWORD,8,KBIT,KLENB,KERR)
+             IF (KERR.NE.0) GO TO 9000
+C
+          ENDIF
+C
+C
+C
+C
+C     BLOCK 3 - BIT MAP BLOCK.
+C
+C     INC IS SET TO 1 , IF BLOCK 3 IS INCLUDED.
+C
+      INC = 0
+C
+C
+      IF (ISNEW.EQ.0)
+     C   THEN
+C            OLD VERSION OF CODE
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               00000001               1
+C                 3               00000010               2
+C             2 AND 3             00000011               3
+C
+             IF (IB1PAR(4).EQ.2.OR.IB1PAR(4).EQ.3) INC = 1
+         ELSE
+C            NEW VERSION
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               10000000             128
+C                 3               01000000              64
+C             2 AND 3             11000000             192
+C
+             IF (IB1PAR(4).EQ.64.OR.IB1PAR(4).EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C     THEN
+               CALL GBYTE (KGRIB(IWORD),IBLK3,IOFF,24)
+               CALL OFFSET (IOFF,IBLK3,IWORD,8,KBIT,KLENB,KERR)
+               IF (KERR.NE.0) GO TO 9000
+           ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2. EXTRACT PACKED INCREMENTS AND CALCULATE VALUES.
+C     ------------------------------------------------------------------
+C
+ 2000  CONTINUE
+C
+C     BLOCK 4 - BINARY DATA BLOCK.
+C     SKIP LENGTH OF BINARY DATA BLOCK.
+C
+      CALL OFFSET (IOFF,1,IWORD,24,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C
+C     4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C
+      CALL OFFSET (IOFF,1,IWORD,8,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C
+C     GET SCALE FACTOR
+C
+      CALL GBYTE (KGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+      ISCALE = JSCALE
+      IF (JSCALE.GE.32768)
+     C    THEN
+              ISCALE = ISCALE - 32768
+              ISCALE = - ISCALE
+          ENDIF
+C
+C
+C
+C
+C     GET REFERENCE VALUE (FMIN) IN GRIB FORMAT (IEXP,IMANT)
+C
+C
+      CALL GBYTE (KGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+      CALL GBYTE (KGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C
+C     CHECK FOR MISSING DATA INDICATORS.
+C
+      IMISS = 0
+      IF (JSCALE.EQ.65535.AND.IEXP.EQ.255.AND.IMANT.EQ.16777215)
+     C   IMISS = 1
+C
+C     CONVERT REFERENCE VALUE AND SCALE FACTOR.
+C
+      IF (IMISS.EQ.0)
+     C   THEN
+             CALL DECFP (FMIN,IEXP,IMANT)
+             ZSCALE = 2.**ISCALE
+         ENDIF
+C
+C
+C
+C
+C     GET NUMBER OF BITS IN EACH DATA VALUE.
+C
+      CALL GBYTE (KGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,KBIT,KLENB,KERR)
+      IF (KERR.NE.0) GO TO 9000
+C
+C
+C     CHECK NUMBER OF BITS PER DATA FIELD.
+C
+      IF (IBITS.GT.KBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              KERR = -1
+              WRITE (*,9001) IBITS,KBIT,IMAX
+              GO TO 9000
+          ENDIF
+C
+C
+C
+C
+C     DECODE DATA VALUES TO FLOATING POINT.
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      DO 2100 J2100 = 1,KDATA
+         IWORD = IPW
+         IOFF  = IPB
+         ILENF = (KI(J2100)-1) * IB2PAR(2) + KJ(J2100) - 1
+         CALL OFFSET (IOFF,ILENF,IWORD,IBITS,KBIT,KLENB,KERR)
+         IF (KERR.NE.0) GO TO 9000
+         CALL GBYTE (KGRIB(IWORD),IDATA,IOFF,IBITS)
+         PDATA(J2100)  = FMIN + IDATA * ZSCALE
+ 2100 CONTINUE
+C
+      IF (IMISS.EQ.0) GO TO 9000
+C
+      DO 2200 J2200 = 1,KDATA
+         PDATA(J2200)  = 0.0
+ 2200 CONTINUE
+C
+C
+C
+C*    SECTION 9. FORMAT STATEMENTS. RETURN.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+ 9001 FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C        'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C        ' PERMITTED VALUE, ',I3)
+      RETURN
+C
+      END
diff --git a/gribex/decfp.F b/gribex/decfp.F
new file mode 100755
index 0000000..230274e
--- /dev/null
+++ b/gribex/decfp.F
@@ -0,0 +1,59 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECFP (FVAL,IEXP,IMANT)
+C---->
+C
+C*
+C*    NAME      : DECFP
+C*
+C*    FUNCTION  : DECODE GRIB CODE REPRESENTATION TO
+C*                FLOATING POINT NUMBER.
+C*
+C*    INPUT     : IEXP  - 8 BIT SIGNED EXPONENT
+C*                IMANT - 24 BIT MANTISSA
+C*
+C*    OUTPUT    : FVAL  - FLOATING POINT NUMBER
+C*                IEXP  - UNCHANGED
+C*                IMANT - UNCHANGED
+C*
+C*    JOHN HENNESSY , ECMWF , 15TH APRIL 1985
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+C
+      IF (IEXP.EQ.128.AND.IMANT.EQ.0)
+     C   THEN
+             FVAL = 0.0
+             RETURN
+         ENDIF
+C
+C
+C
+C     SIGN OF VALUE
+C
+      JEXP  = IEXP
+      ISIGN = 1
+C
+      IF (JEXP.GE.128)
+     C     THEN
+               JEXP  = JEXP - 128
+               ISIGN = -1
+           END IF
+C
+C     DECODE VALUE.
+C
+      FVAL = ISIGN*2.**(-24)*IMANT*16.**(JEXP-64)
+C
+C
+      RETURN
+      END
diff --git a/gribex/decfp2.F b/gribex/decfp2.F
new file mode 100755
index 0000000..6ce07e2
--- /dev/null
+++ b/gribex/decfp2.F
@@ -0,0 +1,177 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DECFP2 (PVAL,KEXP,KMANT)
+C
+C---->
+C**** DECFP2 - GRIB representation to floating point representation.
+C
+C     Purpose.
+C     --------
+C
+C     Convert GRIB representation of a floating point
+C     number to machine representation.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL DECFP2 (PVAL,KEXP,KMANT)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KEXP    - 8 Bit signed exponent.
+C
+C     KMANT   - 24 Bit mantissa.
+C
+C     Output Parameters.
+C     -----------------
+C
+C     PVAL    - Floating point number represented
+C                         by KEXP and KMANT.
+C
+C
+C     Method.
+C     -------
+C
+C     Floating point number represented as 8 bit exponent
+C     and 24 bit mantissa in integer values converted to
+C     machine floating point format.
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB representation.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Rewritten from DECFP, to conform to programming standards.
+C     Sign bit on 0 value now ignored, if present.
+C     If using 32 bit reals, check power of 16 is not so small as to
+C     cause overflows (underflows!); this causes warning to be given
+C     on Fujitsus.
+C
+C
+C     Author.
+C     -------
+C
+C     John Hennessy   ECMWF   18.06.91
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers    ECMWF   1 Aug 1996
+C     Add check power that power of 16 is not so small as to cause
+C     overflows.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments
+C
+      REAL    PVAL
+      INTEGER KEXP, KMANT
+C
+C     Local variables.
+C
+      INTEGER IEXP, ISIGN
+      LOGICAL LDEBUG
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Convert value of 0.0. Ignore sign bit.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      LDEBUG = (NDBG.GT.1)
+C
+      IF( LDEBUG )
+     X  WRITE(GRPRSM,*) 'DECFP2: KEXP = ',KEXP,'. KMANT = ',KMANT
+C
+Cjdc  IF ( (KEXP.EQ.128.OR.KEXP.EQ.0).AND.KMANT.EQ.0) THEN
+      IF( ((KEXP.EQ.128).OR.
+     X     (KEXP.EQ.0)  .OR.
+     X     (KEXP.EQ.255)    )) THEN
+        PVAL = 0.0
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Convert other values.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Sign of value.
+C
+      IEXP  = KEXP
+      ISIGN = 1
+C
+C     Set sign of exponent
+C
+      IF (IEXP.GE.128) THEN
+        IEXP  = IEXP - 128
+        ISIGN = -1
+      END IF
+C
+C     Decode value.
+C
+#if (defined REAL_8) || (defined CRAY)
+      PVAL = ISIGN*2.**(-24)*KMANT*16.**(IEXP-64)
+C                  ---------
+C                      `---> this matchs/compensates for (IEXP-70)
+C                            in confp3.F (instead of (IEXP-64))
+#else
+C     If using 32 bit reals, check power of 16 is not so small as to
+C     cause overflows (underflows!); this causes warning to be given
+C     on Fujitsus.
+C
+      IF(IEXP.GT.32) THEN
+        PVAL = ISIGN*2.**(-24)*KMANT*16.**(IEXP-64)
+      ELSE
+        PVAL = 0.0
+      ENDIF
+#endif
+      IF( LDEBUG ) THEN
+        WRITE(GRPRSM,*) 'DECFP2: Values used for final calculation'
+        WRITE(GRPRSM,*)
+     X    'DECFP2: IEXP=',IEXP,'.ISIGN=',ISIGN,'.KMANT=',KMANT
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( LDEBUG ) WRITE(GRPRSM,*) 'DECFP2: Returned value = ', PVAL
+C
+      RETURN
+      END
diff --git a/gribex/decogb.F b/gribex/decogb.F
new file mode 100755
index 0000000..75841e1
--- /dev/null
+++ b/gribex/decogb.F
@@ -0,0 +1,390 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECOGB (FPDATA,ILENF,IBITS,NBIT,IB1PAR,
+     C              IB2PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C              JLENV,JLENF,IERR)
+C
+C---->
+C**** DECOGB - Interface using GRIBEX to decode GRIB format data.
+C
+C     Purpose.
+C     --------
+C
+C           Provides a compatible interface between the old (DECOGB)
+C           and new (GRIBEX) GRIB decoding software.
+C
+C           GRIB Code Edition Number 0 has been in use at ECMWF since
+C           the end of 1985. GRIB Code Edition Number 1 came into use
+C           with the introduction of the T213 model, which uses a
+C           quasi-regular Gaussian grid for surface fields.
+C
+C           This interface decodes GRIB Code Edition Number 1 in
+C           Edition 0 format and converts the quasi-regular Gaussian
+C           grid to a regular grid. When this conversion is done, no
+C           West/East increment is included in IB2PAR(9). The increment
+C           must be calculated ie ZEWINC = 360.0 / IB2PAR(2). For
+C           Gaussian N160 data the increment is .5625 and this
+C           cannot be accurately represented in the required units
+C           of millidegrees for IB2PAR(9).
+C
+C**   Interface.
+C     ---------
+C
+C           CALL DECOGB (FPDATA,ILENF,IBITS,NBIT,IB1PAR,
+C    C              IB2PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+C    C              JLENV,JLENF,IERR)
+C
+C               Input Parameters.
+C               -----------------
+C
+C                 NBIT    - Number of bits in computer word
+C
+C                 IGRIB   - Integer array containing data in grib code.
+C                 ILENG   - Length of array IGRIB.
+C
+C                 FVERT   - Real array to receive vertical coordinate
+C                           parameters.
+C                 ILENV   - Length of array FVERT.
+C
+C                 FPDATA  - Real array to receive decoded data values.
+C                 ILENF   - Length of array FPDATA.
+C
+C                           !!!!!  If this is 1 only
+C                           the product and grid definition sections
+C                           are decoded. !!!!!
+C
+C                 IB1PAR  - Integer array (dimension 18) to receive
+C                           product definition information.
+C
+C                 IB2PAR  - Integer array (dimension 11) to receive grid
+C                           definition information.
+C
+C               Output Parameters.
+C               -----------------
+C
+C                 Parameters from section 1 , product definition section
+C                 ------------------------------------------------------
+C
+C                 IB1PAR  - Integer array (dimension 18) of product
+C                           definition information.
+C
+C                 Word      Contents
+C                 ----      --------
+C                   1       Originating centre identifier.
+C                   2       Model identification.
+C                   3       Grid definition.
+C                   4       Flag ( Code Table 1)
+C                   5       Parameter identifier ( Code Table 2 ).
+C                   6       Type of level (Code Table 3).
+C                  7-8      Value(s) of levels (Code Table 3).
+C                   9       Year of data
+C                  10       Month of data
+C                  11       Day of data
+C                  12       Hour of data
+C                  13       Minute of data
+C                  14       Time unit (Code Table 4).
+C                  15       Time range one
+C                  16       Time range two
+C                  17       Time range flag (Code Table 5).
+C                  18       Number averaged.
+C
+C                           Value(s) of level can occupy 2 words.
+C                           For a layer the first word defines the top
+C                           and the second the bottom of the layer.
+C                           For a single level, only the first word is
+C                           used.
+C
+C                 Parameters from section 2 , grid definition section.
+C                 -----------------------------------------------
+C
+C                 IB2PAR - Integer array (dimension 11) containing grid
+C                          definition information.
+C                          Use varies with data representation type.
+C
+C                 Word      Latitude/longitude grid
+C                 ----      -----------------------
+C                  1        Data representation type (Code Table 6).
+C                  2        Number of points along a latitude
+C                  3        Number of points along a meridian.
+C                  4        Latitude of origin (South is negative).
+C                  5        Longitude of origin (West is negative).
+C                  6        Resolution flag. (Code Table 7)
+C                  7        Latitude of extreme point (South negative).
+C                  8        Longitude of extreme point (West negative).
+C                  9        West/East increment
+C                 10        North/South increment
+C                 11        Scanning mode flags (Code Table 8)
+C
+C                 Word      Gaussian grid
+C                 ----      -------------
+C                 1-9       As for latitude/longitude grid.
+C                 10        The number of latitude lines between a pole
+C                           and the equator.
+C                 11        Scanning mode flags (Code Table 8)
+C
+C                 Word      Spherical harmonics
+C                 ----      -------------------
+C                   1       Data representation type (Code Table 6)
+C                   2       J - pentagonal resolution parameter
+C                   3       K - pentagonal resolution parameter
+C                   4       M - pentagonal resolution parameter
+C                   5       Representation type (Code Table 9)
+C                   6       Representation mode (Code Table 10)
+C                 7-11      not used
+C
+C
+C                 Use for other data representation types is
+C
+C                 FVERT  - Real array of vertical coordinate parameters
+C                 JLENV  - Number of values in this array.
+C
+C                 Used for hybrid levels only.
+C
+C                 Parameters from section 3 , bit-map definition section
+C                 --------------------------------------------------
+C
+C                 Not handled by this routine.
+C
+C                 Parameters from section 4 , binary data section.
+C                 -------------------------------------------
+C
+C                 FPDATA  - Array of floating point values.
+C                 JLENF   - Number of values in this array.
+C                           JLENF is negative if missing data coded
+C
+C                 IBITS   - Number of bits for coded data values.
+C
+C                 IWORD   - Number of words decoded.
+C
+C                 IERR    - Error indicator.
+C
+C                           0, No error.
+C
+C                          -5, Bit-map not yet catered for.
+C
+C                          -6, Vertical coordinate parameter array
+C                              too small.
+C
+C                              Other error codes as for GRIBEX.
+C
+C     Method.
+C     -------
+C
+C           Subroutine GRIBEX, which can decode all editions of the
+C           GRIB code, is called for the actual decoding. Sections
+C           1 and 2 information is then put in Edition Number 0
+C           format, and any quasi-regular Gaussian grid transformed
+C           into a regular grid.
+C
+C     Externals.
+C     ----------
+C
+C           GRIBEX
+C           QU2REG
+C
+C     Reference.
+C     ----------
+C
+C           WMO Manual on Codes for GRIB code definition.
+C
+C     Comments.
+C     ---------
+C
+C           Parameter names do not conform to current programming
+C           conventions, but are the same as in the old DECOGB routine.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy     ECMWF     18.06.91
+C
+C     Modifications.
+C     -------------
+C
+C           J. Hennessy     ECMWF     19.06.91
+C           Fix to accommodate analysis section's incorrect
+C           use of old DECOGB.
+C
+C           J. Hennessy     ECMWF     26.06.91
+C           Check on size of vertical coordinate parameters array
+C           added. T213 model has 12 extra levels.
+C
+C     -----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      DIMENSION ISEC0(2)
+      DIMENSION ISEC1(32)
+      DIMENSION ISEC2(512)
+      DIMENSION ISEC3(2)
+      DIMENSION ISEC4(64)
+C
+      DIMENSION ZSEC2(128)
+      DIMENSION ZSEC3(2)
+C
+      CHARACTER*1 YOPER
+C
+      DIMENSION FPDATA(*)
+      DIMENSION FVERT(*)
+      DIMENSION IGRIB(*)
+      DIMENSION IB1PAR(18)
+      DIMENSION IB2PAR(11)
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1. Decode data and convert to Edition 0 format.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IERR = 0
+C
+C     Decode sections 1 and 2 or all sections, as required.
+C
+      YOPER = 'Z'
+C
+C     Fix for incorrect usage of old DECOGB by analysis section, who
+C     have always called DECOGB with ILENF equal to 0, when they
+C     should have used 1. They got away with it with the old DECOGB
+C     because sections 1 and 2 were decoded before the error in the
+C     parameter was discovered, and they never checked the return code.
+C
+      IF (ILENF.EQ.0) ILENF = 1
+C
+      IF (ILENF.EQ.1) YOPER = 'I'
+      IERX = 1
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     C             FPDATA,ILENF,IGRIB,ILENG,IWORD,YOPER,IERX)
+C
+      IERR = IERX
+C
+C     Bit map not catered for by DECOGB arguments.
+C
+      IF (IERR.EQ.-5) WRITE (*,9001)
+C
+C     Error encountered.
+C
+      IF (IERR.GT.0) GO TO 900
+C
+C     Transfer information to DECOGB arguments.
+C
+      JLENF = ISEC4(1)
+      IBITS = ISEC4(2)
+      JLENV = ISEC2(12)
+C
+C     Section 1.
+C
+      DO 110 J110 = 1,18
+	 IB1PAR(J110) = ISEC1(J110+1)
+  110 CONTINUE
+C
+C     Section 2.
+C
+      DO 111 J111 = 1,11
+	 IB2PAR(J111) = ISEC2(J111)
+  111 CONTINUE
+C
+C     Go to section 9, if pseudo-GRIB data.
+C
+      IF (IB1PAR(5).EQ.127.OR.IB1PAR(5).EQ.128)
+     C   THEN
+	     WRITE (*,9002) IB1PAR(5)
+	     GO TO 900
+         ENDIF
+C
+C     Check size of vertical coordinate parameter array.
+C
+      IF (JLENV.GT.ILENV)
+     C   THEN
+	     IERR = -6
+	     WRITE (*,9003) JLENV , ILENV
+	     GO TO 900
+         ENDIF
+C
+C     Vertical coordinate parameters, if any,
+C
+      DO 112 J112 = 1,JLENV
+	 FVERT(J112) = ZSEC2(J112+10)
+  112 CONTINUE
+C
+C     Go to section 9, if decoding of sections 1 and 2 only.
+C
+      IF (YOPER.EQ.'I')
+     C   THEN
+	     IF (ISEC2(1).NE.4) GO TO 900
+	     IF (ISEC2(17).EQ.1) IB2PAR(2) = 4 * ISEC2(10)
+	     GO TO 900
+         ENDIF
+C
+C     If quasi-regular Gaussian grid, convert to regular and
+C     adjust section 1 and 2 information accordingly.
+C
+      IF (ISEC2(1).NE.4) GO TO 900
+C
+      IF (ISEC2(17).EQ.1)
+     C   THEN
+	     INOLAT = ISEC2(10) * 2
+	     INOLNG = ISEC2(10) * 4
+	     CALL QU2REG (FPDATA,ISEC2(23),INOLAT,INOLNG,1)
+	     JLENF      = INOLAT * INOLNG
+	     IB2PAR(2)  = 4 * ISEC2(10)
+	 ENDIF
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9. Return to calling routine. Format statements.
+C     -----------------------------------------------------------------
+
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'DECOGB : Bit map not catered for.')
+C
+ 9002 FORMAT (1H ,'DECOGB : Pseudo-GRIB field number ',I3)
+C
+ 9003 FORMAT (1H ,'DECOGB : ',I3,' vertical coordinate parameters, ',
+     C                      'but array size is only ',I3,'.')
+C
+      RETURN
+C
+      END
diff --git a/gribex/decogc.F b/gribex/decogc.F
new file mode 100755
index 0000000..4246c51
--- /dev/null
+++ b/gribex/decogc.F
@@ -0,0 +1,912 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECOGC (FPDATA,ILENF,IBITS,NBIT,IB1PAR,IB2PAR,
+     C              IB3PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C              JLENV,JLENF,IBVAL,IBLEN,IBMAP,IERR)
+C
+C
+C
+C---->
+C*
+C*     NAME     : DECOGC
+C*
+C*     FUNCTION : DECODE WMO GRIB CODED DATA.
+C*
+C*     INPUT    : NBIT    - NUMBER OF BITS IN COMPUTER WORD
+C*
+C*                IGRIB   - INTEGER ARRAY CONTAINING DATA IN GRIB CODE.
+C*                ILENG   - LENGTH OF ARRAY IGRIB.
+C*
+C*                FVERT   - REAL ARRAY TO RECEIVE VERTICAL COORDINATE
+C*                          PARAMETERS.
+C*                ILENV   - LENGTH OF ARRAY FVERT.
+C*
+C*                FPDATA  - REAL ARRAY TO RECEIVE DECODED DATA VALUES.
+C*                ILENF   - LENGTH OF ARRAY FPDATA.
+C*
+C*                          *****  IF THIS IS 1 ONLY
+C*                          THE PRODUCT AND GRID DEFINITION BLOCKS
+C*                          ARE DECODED. *****
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) TO RECEIVE
+C*                          PRODUCT DEFINITION INFORMATION.
+C*
+C*                IB2PAR  - INTEGER ARRAY (DIMENSION 11) TO RECEIVE GRID
+C*                          DEFINITION INFORMATION.
+C*
+C*     OUTPUT   : PARAMETERS FROM BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) OF PRODUCT
+C*                          DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1)
+C*                  5       PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVELS (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*                 18       NUMBER AVERAGED.
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS..
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*                PARAMETERS FROM BLOCK 2 , GRID DEFINITION BLOCK.
+C*                -----------------------------------------------
+C*                IB2PAR - INTEGER ARRAY (DIMENSION 11) CONTAINING GRID
+C*                         DEFINITION INFORMATION.
+C*                         USE VARIES WITH DATA REPRESENTATION TYPE.
+C*
+C*                WORD      LAT/LONG GRID
+C*                ----      -------------
+C*                 1        DATA REPRESENTATION TYPE (CODE TABLE 6).
+C*                 2        NO. OF POINTS ALONG A LATITUDE
+C*                 3        NO. OF POINTS ALONG A MERIDIAN.
+C*                 4        LATITUDE OF ORIGIN (SOUTH - IVE).
+C*                 5        LONGITUDE OF ORIGIN (WEST - IVE).
+C*                 6        RESOLUTION FLAG. (CODE TABLE 7)
+C*                 7        LATITUDE OF EXTREME POINT (SOUTH - IVE).
+C*                 8        LONGITUDE OF EXTREME POINT (WEST - IVE).
+C*                 9        LATITUDE INCREMENT
+C*                10        LONGITUDE INCREMENT
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      GAUSSIAN GRID
+C*                ----      -------------
+C*                1-9       AS FOR LAT/LONGITUDE GRID.
+C*                10        THE NUMBER OF LATITUDE LINES BETWEEN A POLE
+C*                          AND THE EQUATOR.
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      SPHERICAL HARMONICS
+C*                ----      -------------------
+C*                  1       DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                  2       J - PENTAGONAL RESOLUTION PARAMETER
+C*                  3       K - PENTAGONAL RESOLUTION PARAMETER
+C*                  4       M - PENTAGONAL RESOLUTION PARAMETER
+C*                  5       REPRESENTATION TYPE (CODE TABLE 9)
+C*                  6       REPRESENTATION MODE (CODE TABLE 10)
+C*                7-11      NOT USED
+C*
+C*
+C*                USE FOR OTHER DATA REPRESENTATION TYPES IS
+C*
+C*                FVERT  - REAL ARRAY OF VERTICAL COORDINATE PARAMETERS
+C*                JLENV  - NUMBER OF VALUES IN THIS ARRAY.
+C*
+C*                USED FOR HYBRID LEVELS ONLY.
+C*
+C*                PARAMETERS FROM BLOCK 3 , BIT-MAP DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                IBMAP     -  ARRAY (DIMENSION IBLEN) CONTAINING BIT MA
+C*                IBLEN     -  NUMBER OF WORDS IN ARRAY IBMAP.
+C*                IBVAL     -  NUMBER OF VALUES ON THIS ARRAY.
+C*                IB3PAR(1) - CATALOG NUMBER OF BIT-MAP.
+C*
+C*
+C*                PARAMETERS FROM BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*                JLENF   - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENF IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                IBITS   - NUMBER OF BITS FOR CODED DATA VALUES.
+C*
+C*                IWORD   - NUMBER OF WORDS DECODED.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                          0, NO ERROR.
+C*
+C*                         -1, NUMBER OF BITS PER DATA VALUE EXCEEDS
+C*                             WORD LENGTH, OR MAXIMUM ALLOWED.
+C*                         -2, INPUT ARRAY HOLDS FEWER CODED VALUES
+C*                             THAN EXPECTED.
+C*                         -3, OUTPUT ARRAY TOO SMALL TO HOLD DECODED
+C*                             DATA VALUES.
+C*                         -4, CURRENTLY UNDEFINED OPTION SELECTED.
+C*
+C*                          1, NO BLOCK 5 FOUND.
+C*
+C*    GENERAL  : DECOGC CALLS GBYTE
+C*                            GBYTES
+C*                            OFFSET
+C*                            DECFP
+C*                            SBYTE
+C*
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+      DIMENSION FPDATA(ILENF),FVERT(ILENV)
+      DIMENSION IBLOCK(24),IGRIB(ILENG)
+      DIMENSION IB1PAR(18),IB2PAR(11),IB3PAR(2),ILAT(2)
+C
+      DIMENSION IBMAP(IBLEN)
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /64/
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 0 - INDICATOR BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT 4 OCTETS CONTAINING ASCII G R I B .
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      NVAL  = 4
+C
+      CALL GBYTES (IGRIB(1),IBLOCK(1),0,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT FIRST 4 OCTETS OF BLOCK 1.
+C
+      NVAL  = 4
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     IF THESE OCTETS DO NOT CONTAIN 0, 0, 24 AND 0 RESPECTIVELY
+C     THEN THE DATA IS IN THE OLD VERSION OF THE CODE.
+C
+      IF (IBLOCK(1).EQ.0.AND.IBLOCK(2).EQ.0.AND.IBLOCK(3).EQ.24.
+     C    AND.IBLOCK(4).EQ.0)
+     C      THEN
+                ISNEW = 1
+                NVAL = 20
+            ELSE
+                ISNEW = 0
+                NVAL = 16
+            ENDIF
+C
+C     EXTRACT NEXT 16 OR 20 OCTETS OF BLOCK 1 - NUMBER DEPENDS
+C     ON VERSION OF CODE.
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(5),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     TRANSFER PRODUCT DEFINITION INFORMATION TO OUTPUT ARRAY.
+C     EXCEPT FOR NUMBER AVERAGED.
+C
+      DO 100 I=1,17
+         IB1PAR(I) = IBLOCK(I+4*ISNEW)
+  100 CONTINUE
+C
+C
+C
+C
+C     NUMBER AVERAGED OCCUPIES 2 OCTETS.
+C
+      IB1PAR(18) = IBLOCK(18+4*ISNEW) * 256 + IBLOCK(19+4*ISNEW)
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS. PUT SINGLE VALUE IN FIRST LEVEL WORD.
+C
+      KTEMP = 32 + (ISNEW*224)
+      IF (IB1PAR(6).EQ.100.OR.IB1PAR(6).EQ.103.OR.IB1PAR(6).EQ.105.
+     C    OR.IB1PAR(6).EQ.107.OR.IB1PAR(6).EQ.109)
+     C    THEN
+              IB1PAR(7) = IB1PAR(7) * KTEMP + IB1PAR(8)
+              IB1PAR(8) = 0
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    TIME RANGE.
+C***
+C
+C     ONE TIME RANGE CAN OCCUPY TWO OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+             IB1PAR(15) = IB1PAR(15) * KTEMP + IB1PAR(16)
+             IB1PAR(16) = 0
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 2 - GRID DESCRIPTION BLOCK.
+C*
+C********************************************************************
+C
+C***
+C*    CHECK FLAG INDICATING IF BLOCK 2 IS INCLUDED IN CODE.
+C***
+C
+C     INC IS SET TO 1 , IF BLOCK 2 IS INCLUDED.
+C
+      INC = 0
+C
+C
+      IF (ISNEW.EQ.0)
+     C   THEN
+C            OLD VERSION OF CODE
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               00000001               1
+C                 3               00000010               2
+C             2 AND 3             00000011               3
+C
+             IF (IB1PAR(4).EQ.1.OR.IB1PAR(4).EQ.3) INC = 1
+         ELSE
+C            NEW VERSION
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               10000000             128
+C                 3               01000000              64
+C             2 AND 3             11000000             192
+C
+             IF (IB1PAR(4).EQ.128.OR.IB1PAR(4).EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C   THEN
+C
+C
+C***
+C*           LENGTH OF GRID DESCRIPTION BLOCK.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),LBLK,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LENGTH IS 32 OCTETS FOR LAT/LONG, GAUSSIAN AND SPHERICAL
+C            HARMONICS . FOR ANY DATA  ON HYBRID LEVELS THE
+C            VERTICAL COORDINATES ARE ADDED.
+C            GET NUMBER OF VERTICAL COORDINATE PARAMETERS, IF ANY.
+C
+             JLENV = (LBLK - 32) / 4
+             IF(ILENV.LT.JLENV)
+     C          THEN
+                    IERR = -3
+                    WRITE (*,9001) JLENV,ILENV
+ 9001               FORMAT (1H ,'NUMBER OF VERTICAL COORDINATES - ',I4,
+     C                          ', ARRAY SIZE IS - ',I4)
+                    RETURN
+                ENDIF
+C
+C
+C***
+C*           NUMBER OF UNUSED BITS AT END OF BLOCK.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),LNIL,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*           NEXT OCTET IS RESERVED.
+C***
+C
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*           DATA REPRESENTATION TYPE.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),IB2PAR(1),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONGITUDE GRID, GAUSSIAN GRID AND SPHERICAL HARMONICS
+C            ARE THE ONLY DATA REPRESENTATIONS HANDLED.
+C
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4.AND.IB2PAR(1).NE.50)
+     C          THEN
+                     WRITE (*,*)'GRID DESCRIPTION BLOCK NOT YET DEFINED'
+                     IERR = -4
+                     RETURN
+                ENDIF
+C
+C
+C
+C
+C***
+C*           LAT/LONG OR GAUSSIAN GRID.
+C***
+C
+             IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C         THEN
+C
+C                  NUMBER OF LAT/LONG POINTS.
+C
+                   CALL GBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  LAT/LONG OF ORIGIN.
+C
+                   CALL GBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  IF SIGN BIT SET TO 1 , VALUES ARE NEGATIVE.
+C
+                   DO 200 I=1,2
+                      IB2PAR(I+3) = ILAT(I)
+                      IF (ILAT(I).GT.8388608)
+     C                   THEN
+                             IB2PAR(I+3) = IB2PAR(I+3) - 8388608
+                             IB2PAR(I+3) = - IB2PAR(I+3)
+                         ENDIF
+  200             CONTINUE
+C
+C
+C                  RESOLUTION FLAG.
+C
+                   CALL GBYTE (IGRIB(IWORD),IB2PAR(6),IOFF,8)
+                   CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C
+C                  LAT/LONG OF EXTREME POINTS.
+C
+                   CALL GBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  IF SIGN BIT SET TO 1 , VALUES ARE NEGATIVE.
+C
+                   DO 300 I=1,2
+                      IB2PAR(I+6) = ILAT(I)
+                      IF (ILAT(I).GT.8388608)
+     C                   THEN
+                             IB2PAR(I+6) = IB2PAR(I+6) - 8388608
+                             IB2PAR(I+6) = - IB2PAR(I+6)
+                         ENDIF
+  300             CONTINUE
+C
+C                 DIRECTION INCREMENTS / NUMBER OF LATITUDE LINES.
+C
+                  CALL GBYTES (IGRIB(IWORD),IB2PAR(9),IOFF,16,0,2)
+                  CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+C                 SCANNING MODE FLAGS.
+C
+                  CALL GBYTE (IGRIB(IWORD),IB2PAR(11),IOFF,8)
+                  CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+C                 4 RESERVED OCTETS.
+C
+                  CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+              ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*            SPHERICAL HARMONIC DATA.
+C***
+C
+              IF (IB2PAR(1).EQ.50)
+     C           THEN
+C
+C                    PENTAGONAL RESOLUTION PARAMETERS.
+C
+                     CALL GBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,3)
+                     CALL OFFSET (IOFF,3,IWORD,16,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+C                    REPRESENTATION TYPE AND MODE.
+C
+                     CALL GBYTES (IGRIB(IWORD),IB2PAR(5),IOFF,8,0,2)
+                     CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+C                    18 RESERVED OCTETS.
+C
+                     CALL OFFSET (IOFF,18,IWORD,8,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+                 ENDIF
+C
+C
+C
+C
+C***
+C*               VERTICAL COORDINATE PARAMETERS FOR HYBRID LEVELS.
+C***
+C
+                 IF (JLENV.NE.0)
+     C              THEN
+                        DO 400 I=1,JLENV
+                           CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+                           CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                           IF (IERR.NE.0) RETURN
+                           CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+                           CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+                           IF (IERR.NE.0) RETURN
+                           CALL DECFP (FVERT(I),IEXP,IMANT)
+  400                   CONTINUE
+                    ENDIF
+C
+         ENDIF
+C
+C
+C     RETURN IF ONLY PRODUCT AND GRID DEFINITION BLOCKS REQUIRED.
+C
+      IF (ILENF.EQ.1) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 3 - BIT MAP BLOCK.
+C*
+C********************************************************************
+C
+C     INC IS SET TO 1 , IF BLOCK 3 IS INCLUDED.
+C
+      INC = 0
+C
+C
+      IF (ISNEW.EQ.0)
+     C   THEN
+C            OLD VERSION OF CODE
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               00000001               1
+C                 3               00000010               2
+C             2 AND 3             00000011               3
+C
+             IF (IB1PAR(4).EQ.2.OR.IB1PAR(4).EQ.3) INC = 1
+         ELSE
+C            NEW VERSION
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               10000000             128
+C                 3               01000000              64
+C             2 AND 3             11000000             192
+C
+             IF (IB1PAR(4).EQ.64.OR.IB1PAR(4).EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C     THEN
+C
+C
+C*            GET LENGTH OF THE BIT MAP BLOCK
+C
+C
+      CALL GBYTE (IGRIB(IWORD),IB3LEN,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF( IERR.NE.0 ) RETURN
+C
+C
+C*            GET NUMBER OF UNUSED BITS AT THE END OF THE BLOCK 3.
+C
+C
+      CALL GBYTE(IGRIB(IWORD),INUB,IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF( IERR.NE.0 ) RETURN
+C
+C*            CHECK IF BIT MAP FOLLOWS
+C
+      CALL GBYTE (IGRIB(IWORD),IBMF,IOFF,16)
+      CALL OFFSET(IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF( IERR.NE.0 ) RETURN
+C
+      IB3PAR(1)=IBMF
+C
+      IF( IBMF.EQ.0 )
+     1   THEN
+            IBVAL=(IB3LEN-6)*8-INUB
+            IWORDA=1
+            IOFFA=0
+            IBM6=IB3LEN-6
+C
+             DO 450 J=1,IBM6
+C
+             CALL GBYTE(IGRIB(IWORD),IO,IOFF,8)
+             CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF(IERR.NE.0) RETURN
+C
+             CALL SBYTE(IBMAP(IWORDA),IO,IOFFA,8)
+             CALL OFFSET(IOFFA,1,IWORDA,8,NBIT,IBLEN,IERR)
+C
+ 450         CONTINUE
+C
+           ENDIF
+C
+C
+C
+       END IF
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    GET LENGTH OF BINARY DATA BLOCK.
+C***
+C
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL GBYTE (IGRIB(IWORD),LBIN,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),IFLAG,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (ISNEW.EQ.0)
+     C    THEN
+C             OLD VERSION OF CODE
+C
+C             0000---- GRID POINT
+C             0001---- SPHERICAL HARMONICS
+C
+              IREP = IFLAG / 16
+              LNIL = IFLAG - IREP * 16
+C
+          ELSE
+C             NEW VERSION OF CODE
+C
+C             0000---- GRID POINT
+C             1000---- SPHERICAL HARMONICS
+C
+              IREP = IFLAG / 128
+              LNIL = IFLAG - IREP * 128
+C
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET SCALE FACTOR
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      ISCALE = JSCALE
+      IF (JSCALE.GE.32768)
+     C    THEN
+              ISCALE = ISCALE - 32768
+              ISCALE = - ISCALE
+          ENDIF
+C
+C
+C
+C
+C***
+C*    GET REFERENCE VALUE (FMIN) IN GRIB FORMAT (IEXP,IMANT)
+C***
+C
+C
+      CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+      CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C     CHECK FOR MISSING DATA INDICATORS.
+C
+      IMISS = 0
+      IF (JSCALE.EQ.65535.AND.IEXP.EQ.255.AND.IMANT.EQ.16777215)
+     C   IMISS = 1
+C
+C     CONVERT REFERENCE VALUE AND SCALE FACTOR.
+C
+      IF (IMISS.EQ.0)
+     C   THEN
+             CALL DECFP (FMIN,IEXP,IMANT)
+             ZSCALE = 2.**ISCALE
+         ENDIF
+C
+C
+C
+C
+C***
+C*    GET NUMBER OF BITS IN EACH DATA VALUE.
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C     CHECK NUMBER OF BITS PER DATA FIELD.
+C
+      IF (IBITS.GT.NBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              IERR = -1
+              WRITE (*,9002) IBITS,NBIT,IMAX
+ 9002         FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C                'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C                ' PERMITTED VALUE, ',I3)
+              RETURN
+          ENDIF
+C
+C***
+C*    IF DATA IS IN SPHERICAL HARMONIC FORM, NEXT 4 OCTETS
+C*    CONTAIN THE REAL (0,0) COEFFICIENT.
+C***
+C
+      IF (IREP.EQ.1)
+     C    THEN
+C
+C            GET REAL (0,0) COEFFICIENT IN GRIB FORMAT AND
+C            CONVERT TO FLOATING POINT.
+C
+             CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             IF (IMISS.EQ.1)
+     C          THEN
+                    FPDATA(1) = 0.0
+                ELSE
+                    CALL DECFP (FPDATA(1),IEXP,IMANT)
+                ENDIF
+          ENDIF
+C
+C
+C
+C
+C*****
+C*    DECODE DATA VALUES TO FLOATING POINT AND STORE IN FPDATA.
+C*****
+C
+C     FIRST CALCULATE THE NUMBER OF DATA VALUES.
+C
+      JLENF = LBIN - 11 - IREP * 4
+      JLENF = (JLENF * 8 - LNIL) / IBITS
+C
+C     CHECK LENGTH OF OUTPUT ARRAY.
+C
+      IF (JLENF+IREP.GT.ILENF)
+     C   THEN
+             IERR = -3
+             WRITE (*,9003) JLENF,ILENF
+ 9003        FORMAT (1H ,'NUMBER OF VALUES TO BE DECODED IS - ',I7,
+     C                    ', ARRAY SIZE - ',I7)
+             RETURN
+         ENDIF
+C
+      CALL GBYTES (IGRIB(IWORD),FPDATA(IREP+1),IOFF,IBITS,0,JLENF)
+      CALL OFFSET (IOFF,JLENF,IWORD,IBITS,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      DO 500 I= IREP+1,IREP+JLENF
+            IF (IMISS.EQ.1)
+     C         THEN
+                   FPDATA(1) = 0.0
+               ELSE
+                   ZGRIB     = FPDATA (I)
+                   FPDATA(I) = FMIN + JGRIB * ZSCALE
+               ENDIF
+  500 CONTINUE
+C
+C     INCLUDE (0,0) COEFFICIENT IN COUNT, IF SPHERICAL HARMONIC DATA.
+C
+      JLENF = IREP + JLENF
+C
+C
+C
+C
+C***
+C*    SKIP ANY ZERO FILL AT END OF DATA BLOCK.
+C***
+C
+      L = (IWORD-IPW) * NBIT + IOFF -IPB
+      L = LBIN * 8 - L
+      IF (L.NE.0)
+     C    THEN
+              CALL OFFSET (IOFF,1,IWORD,L,NBIT,ILENG,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C     CHECK 7 7 7 7 AT END OF CODED DATA.
+C
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+C
+C     55 IS THE VALUE OF ASCII CHARACTER '7'
+C
+      DO 600 I=1,4
+         IF (IBLOCK(I).NE.55) IERR = 1
+  600 CONTINUE
+C
+      IF (IERR.EQ.1) WRITE (*,*) ' NO 7777 GROUP FOUND '
+C
+C
+C
+C     SET NUMBER OF VALUES NEGATIVE, IF MISSING DATA VALUES.
+C
+      IF (IMISS.EQ.1) JLENF = - JLENF
+C
+      RETURN
+      END
diff --git a/gribex/decogd.F b/gribex/decogd.F
new file mode 100755
index 0000000..e612379
--- /dev/null
+++ b/gribex/decogd.F
@@ -0,0 +1,971 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECOGD (FPDATA,ILENF,IBITS,NBIT,IB1PAR,IB2PAR,
+     C              IB3PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C              JLENV,JLENF,RMISS,IERR)
+C
+C---->
+C*     NAME     : DECOGD
+C*
+C*     FUNCTION : DECODE WMO GRIB CODED DATA.
+C*
+C*     INPUT    : NBIT    - NUMBER OF BITS IN COMPUTER WORD
+C*
+C*                IGRIB   - INTEGER ARRAY CONTAINING DATA IN GRIB CODE.
+C*                ILENG   - LENGTH OF ARRAY IGRIB.
+C*
+C*                FVERT   - REAL ARRAY TO RECEIVE VERTICAL COORDINATE
+C*                          PARAMETERS.
+C*                ILENV   - LENGTH OF ARRAY FVERT.
+C*
+C*                FPDATA  - REAL ARRAY TO RECEIVE DECODED DATA VALUES.
+C*                ILENF   - LENGTH OF ARRAY FPDATA.
+C*
+C*                          *****  IF THIS IS 1 ONLY
+C*                          THE PRODUCT AND GRID DEFINITION BLOCKS
+C*                          ARE DECODED. *****
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) TO RECEIVE
+C*                          PRODUCT DEFINITION INFORMATION.
+C*
+C*                IB2PAR  - INTEGER ARRAY (DIMENSION 11) TO RECEIVE GRID
+C*                          DEFINITION INFORMATION.
+C*
+C*     OUTPUT   : PARAMETERS FROM BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) OF PRODUCT
+C*                          DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1)
+C*                  5       PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVELS (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*                 18       NUMBER AVERAGED.
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS..
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*                PARAMETERS FROM BLOCK 2 , GRID DEFINITION BLOCK.
+C*                -----------------------------------------------
+C*                IB2PAR - INTEGER ARRAY (DIMENSION 11) CONTAINING GRID
+C*                         DEFINITION INFORMATION.
+C*                         USE VARIES WITH DATA REPRESENTATION TYPE.
+C*
+C*                WORD      LAT/LONG GRID
+C*                ----      -------------
+C*                 1        DATA REPRESENTATION TYPE (CODE TABLE 6).
+C*                 2        NO. OF POINTS ALONG A LATITUDE
+C*                 3        NO. OF POINTS ALONG A MERIDIAN.
+C*                 4        LATITUDE OF ORIGIN (SOUTH - IVE).
+C*                 5        LONGITUDE OF ORIGIN (WEST - IVE).
+C*                 6        RESOLUTION FLAG. (CODE TABLE 7)
+C*                 7        LATITUDE OF EXTREME POINT (SOUTH - IVE).
+C*                 8        LONGITUDE OF EXTREME POINT (WEST - IVE).
+C*                 9        LATITUDE INCREMENT
+C*                10        LONGITUDE INCREMENT
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      GAUSSIAN GRID
+C*                ----      -------------
+C*                1-9       AS FOR LAT/LONGITUDE GRID.
+C*                10        THE NUMBER OF LATITUDE LINES BETWEEN A POLE
+C*                          AND THE EQUATOR.
+C*                11        SCANNING MODE FLAGS (CODE TABLE 8)
+C*
+C*                WORD      SPHERICAL HARMONICS
+C*                ----      -------------------
+C*                  1       DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                  2       J - PENTAGONAL RESOLUTION PARAMETER
+C*                  3       K - PENTAGONAL RESOLUTION PARAMETER
+C*                  4       M - PENTAGONAL RESOLUTION PARAMETER
+C*                  5       REPRESENTATION TYPE (CODE TABLE 9)
+C*                  6       REPRESENTATION MODE (CODE TABLE 10)
+C*                7-11      NOT USED
+C*
+C*
+C*                USE FOR OTHER DATA REPRESENTATION TYPES IS
+C*
+C*                FVERT  - REAL ARRAY OF VERTICAL COORDINATE PARAMETERS
+C*                JLENV  - NUMBER OF VALUES IN THIS ARRAY.
+C*
+C*                USED FOR HYBRID LEVELS ONLY.
+C*
+C*                PARAMETERS FROM BLOCK 3 , BIT-MAP DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                IBMAP     -  ARRAY (DIMENSION IBLEN) CONTAINING BIT MA
+C*                IBLEN     -  NUMBER OF WORDS IN ARRAY IBMAP.
+C*                IBVAL     -  NUMBER OF VALUES ON THIS ARRAY.
+C*                IERR      -  ERROR INDICATOR
+C*                             -5, MISSING PREDEFINED BIT MAP.
+C*
+C*
+C*                PARAMETERS FROM BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*                JLENF   - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENF IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                IBITS   - NUMBER OF BITS FOR CODED DATA VALUES.
+C*
+C*                IWORD   - NUMBER OF WORDS DECODED.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                          0, NO ERROR.
+C*
+C*                         -1, NUMBER OF BITS PER DATA VALUE EXCEEDS
+C*                             WORD LENGTH, OR MAXIMUM ALLOWED.
+C*                         -2, INPUT ARRAY HOLDS FEWER CODED VALUES
+C*                             THAN EXPECTED.
+C*                         -3, OUTPUT ARRAY TOO SMALL TO HOLD DECODED
+C*                             DATA VALUES.
+C*                         -4, CURRENTLY UNDEFINED OPTION SELECTED.
+C*
+C*                          1, NO BLOCK 5 FOUND.
+C*
+C*    GENERAL  : DECOGD CALLS GBYTE
+C*                            GBYTES
+C*                            OFFSET
+C*                            DECFP
+C*                            SBYTE
+C*
+C*   Modifications
+C*   -------------
+C
+C940309     J.D.Chambers     ECMWF      09:03:94
+C940309     Maximum size for bitmap array increased to 132000
+C940309     to allow for products 0.5 * 0.5 degrees, whole
+C940309     hemisphere (N or S).
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+      DIMENSION FPDATA(ILENF),FVERT(ILENV)
+      DIMENSION IBLOCK(24),IGRIB(ILENG)
+      DIMENSION IB1PAR(18),IB2PAR(11),IB3PAR(2),ILAT(2)
+C
+C940309 INTEGER*4 IBMAP(41472)
+      INTEGER*4 IBMAP(132000)
+C940309 DIMENSION FPDATAG(41472)
+      DIMENSION FPDATAG(132000)
+      CHARACTER*20 BITMAP
+      CHARACTER YCHAR
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /32/
+C
+      IERR = 0
+C
+      RMISS=1.7E38
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 0 - INDICATOR BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT 4 OCTETS CONTAINING ASCII G R I B .
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      NVAL  = 4
+C
+      CALL GBYTES (IGRIB(1),IBLOCK(1),0,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT FIRST 4 OCTETS OF BLOCK 1.
+C
+      NVAL  = 4
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     IF THESE OCTETS DO NOT CONTAIN 0, 0, 24 AND 0 RESPECTIVELY
+C     THEN THE DATA IS IN THE OLD VERSION OF THE CODE.
+C
+      IF (IBLOCK(1).EQ.0.AND.IBLOCK(2).EQ.0.AND.IBLOCK(3).EQ.24.
+     C    AND.IBLOCK(4).EQ.0)
+     C      THEN
+                ISNEW = 1
+                NVAL = 20
+            ELSE
+                ISNEW = 0
+                NVAL = 16
+            ENDIF
+C
+C     EXTRACT NEXT 16 OR 20 OCTETS OF BLOCK 1 - NUMBER DEPENDS
+C     ON VERSION OF CODE.
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(5),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     TRANSFER PRODUCT DEFINITION INFORMATION TO OUTPUT ARRAY.
+C     EXCEPT FOR NUMBER AVERAGED.
+C
+      DO 100 I=1,17
+         IB1PAR(I) = IBLOCK(I+4*ISNEW)
+  100 CONTINUE
+C
+C
+C
+C
+C     NUMBER AVERAGED OCCUPIES 2 OCTETS.
+C
+      IB1PAR(18) = IBLOCK(18+4*ISNEW) * 256 + IBLOCK(19+4*ISNEW)
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS. PUT SINGLE VALUE IN FIRST LEVEL WORD.
+C
+      KTEMP = 32 + (ISNEW*224)
+      IF (IB1PAR(6).EQ.100.OR.IB1PAR(6).EQ.103.OR.IB1PAR(6).EQ.105.
+     C    OR.IB1PAR(6).EQ.107.OR.IB1PAR(6).EQ.109)
+     C    THEN
+              IB1PAR(7) = IB1PAR(7) * KTEMP + IB1PAR(8)
+              IB1PAR(8) = 0
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    TIME RANGE.
+C***
+C
+C     ONE TIME RANGE CAN OCCUPY TWO OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+             IB1PAR(15) = IB1PAR(15) * KTEMP + IB1PAR(16)
+             IB1PAR(16) = 0
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 2 - GRID DESCRIPTION BLOCK.
+C*
+C********************************************************************
+C
+C***
+C*    CHECK FLAG INDICATING IF BLOCK 2 IS INCLUDED IN CODE.
+C***
+C
+C     INC IS SET TO 1 , IF BLOCK 2 IS INCLUDED.
+C
+      INC = 0
+C
+C
+      IF (ISNEW.EQ.0)
+     C   THEN
+C            OLD VERSION OF CODE
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               00000001               1
+C                 3               00000010               2
+C             2 AND 3             00000011               3
+C
+             IF (IB1PAR(4).EQ.1.OR.IB1PAR(4).EQ.3) INC = 1
+         ELSE
+C            NEW VERSION
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               10000000             128
+C                 3               01000000              64
+C             2 AND 3             11000000             192
+C
+             IF (IB1PAR(4).EQ.128.OR.IB1PAR(4).EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C   THEN
+C
+C
+C***
+C*           LENGTH OF GRID DESCRIPTION BLOCK.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),LBLK,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LENGTH IS 32 OCTETS FOR LAT/LONG, GAUSSIAN AND SPHERICAL
+C            HARMONICS . FOR ANY DATA  ON HYBRID LEVELS THE
+C            VERTICAL COORDINATES ARE ADDED.
+C            GET NUMBER OF VERTICAL COORDINATE PARAMETERS, IF ANY.
+C
+             JLENV = (LBLK - 32) / 4
+             IF(ILENV.LT.JLENV)
+     C          THEN
+                    IERR = -3
+                    WRITE (*,9001) JLENV,ILENV
+ 9001               FORMAT (1H ,'NUMBER OF VERTICAL COORDINATES - ',I4,
+     C                          ', ARRAY SIZE IS - ',I4)
+                    RETURN
+                ENDIF
+C
+C
+C***
+C*           NUMBER OF UNUSED BITS AT END OF BLOCK.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),LNIL,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*           NEXT OCTET IS RESERVED.
+C***
+C
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*           DATA REPRESENTATION TYPE.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),IB2PAR(1),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONGITUDE GRID, GAUSSIAN GRID AND SPHERICAL HARMONICS
+C            ARE THE ONLY DATA REPRESENTATIONS HANDLED.
+C
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4.AND.IB2PAR(1).NE.50)
+     C          THEN
+                     WRITE (*,*)'GRID DESCRIPTION BLOCK NOT YET DEFINED'
+                     IERR = -4
+                     RETURN
+                ENDIF
+C
+C
+C
+C
+C***
+C*           LAT/LONG OR GAUSSIAN GRID.
+C***
+C
+             IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C         THEN
+C
+C                  NUMBER OF LAT/LONG POINTS.
+C
+                   CALL GBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  LAT/LONG OF ORIGIN.
+C
+                   CALL GBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  IF SIGN BIT SET TO 1 , VALUES ARE NEGATIVE.
+C
+                   DO 200 I=1,2
+                      IB2PAR(I+3) = ILAT(I)
+                      IF (ILAT(I).GT.8388608)
+     C                   THEN
+                             IB2PAR(I+3) = IB2PAR(I+3) - 8388608
+                             IB2PAR(I+3) = - IB2PAR(I+3)
+                         ENDIF
+  200             CONTINUE
+C
+C
+C                  RESOLUTION FLAG.
+C
+                   CALL GBYTE (IGRIB(IWORD),IB2PAR(6),IOFF,8)
+                   CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C
+C                  LAT/LONG OF EXTREME POINTS.
+C
+                   CALL GBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  IF SIGN BIT SET TO 1 , VALUES ARE NEGATIVE.
+C
+                   DO 300 I=1,2
+                      IB2PAR(I+6) = ILAT(I)
+                      IF (ILAT(I).GT.8388608)
+     C                   THEN
+                             IB2PAR(I+6) = IB2PAR(I+6) - 8388608
+                             IB2PAR(I+6) = - IB2PAR(I+6)
+                         ENDIF
+  300             CONTINUE
+C
+C                 DIRECTION INCREMENTS / NUMBER OF LATITUDE LINES.
+C
+                  CALL GBYTES (IGRIB(IWORD),IB2PAR(9),IOFF,16,0,2)
+                  CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+C                 SCANNING MODE FLAGS.
+C
+                  CALL GBYTE (IGRIB(IWORD),IB2PAR(11),IOFF,8)
+                  CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+C                 4 RESERVED OCTETS.
+C
+                  CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+              ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*            SPHERICAL HARMONIC DATA.
+C***
+C
+              IF (IB2PAR(1).EQ.50)
+     C           THEN
+C
+C                    PENTAGONAL RESOLUTION PARAMETERS.
+C
+                     CALL GBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,3)
+                     CALL OFFSET (IOFF,3,IWORD,16,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+C                    REPRESENTATION TYPE AND MODE.
+C
+                     CALL GBYTES (IGRIB(IWORD),IB2PAR(5),IOFF,8,0,2)
+                     CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+C                    18 RESERVED OCTETS.
+C
+                     CALL OFFSET (IOFF,18,IWORD,8,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+                 ENDIF
+C
+C
+C
+C
+C***
+C*               VERTICAL COORDINATE PARAMETERS FOR HYBRID LEVELS.
+C***
+C
+                 IF (JLENV.NE.0)
+     C              THEN
+                        DO 400 I=1,JLENV
+                           CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+                           CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                           IF (IERR.NE.0) RETURN
+                           CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+                           CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+                           IF (IERR.NE.0) RETURN
+                           CALL DECFP (FVERT(I),IEXP,IMANT)
+  400                   CONTINUE
+                    ENDIF
+C
+         ENDIF
+C
+C
+C     RETURN IF ONLY PRODUCT AND GRID DEFINITION BLOCKS REQUIRED.
+C
+      IF (ILENF.EQ.1) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 3 - BIT MAP BLOCK.
+C*
+C********************************************************************
+C
+C     INC IS SET TO 1 , IF BLOCK 3 IS INCLUDED.
+C
+      INC = 0
+C
+C
+      IF (ISNEW.EQ.0)
+     C   THEN
+C            OLD VERSION OF CODE
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               00000001               1
+C                 3               00000010               2
+C             2 AND 3             00000011               3
+C
+             IF (IB1PAR(4).EQ.2.OR.IB1PAR(4).EQ.3) INC = 1
+         ELSE
+C            NEW VERSION
+C
+C            BLOCKS INCLUDED    BINARY VALUE      DECIMAL VALUE
+C
+C                NONE             00000000               0
+C                 2               10000000             128
+C                 3               01000000              64
+C             2 AND 3             11000000             192
+C
+             IF (IB1PAR(4).EQ.64.OR.IB1PAR(4).EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C     THEN
+C
+C
+C*            GET LENGTH OF THE BIT MAP BLOCK
+C
+C
+      CALL GBYTE (IGRIB(IWORD),IB3LEN,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF( IERR.NE.0 ) RETURN
+C
+C
+C*            GET NUMBER OF UNUSED BITS AT THE END OF THE BLOCK 3.
+C
+C
+      CALL GBYTE(IGRIB(IWORD),INUB,IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF( IERR.NE.0 ) RETURN
+C
+C*            CHECK IF BIT MAP FOLLOWS
+C
+      CALL GBYTE (IGRIB(IWORD),IBMF,IOFF,16)
+      CALL OFFSET(IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF( IERR.NE.0 ) RETURN
+C
+      IB3PAR(1)=IBMF
+C
+      IF( IBMF.EQ.0 )
+     1   THEN
+            IBVAL=(IB3LEN-6)*8-INUB
+C
+C940309     IF(IBVAL.GT.41472) THEN
+            IF(IBVAL.GT.132000) THEN
+               IERR=-3
+               WRITE(*,8888) IBVAL
+ 8888          FORMAT(1H ,'BIT MAP ARRAY TOO SMALL - IBVAL =',I12)
+               RETURN
+            END IF
+
+            DO 450 J=1,IBVAL
+C
+             CALL GBYTE(IGRIB(IWORD),IBMAP(J),IOFF,1)
+             CALL OFFSET(IOFF,1,IWORD,1,NBIT,ILENG,IERR)
+             IF(IERR.NE.0) RETURN
+C
+ 450         CONTINUE
+C
+             CALL OFFSET(IOFF,1,IWORD,INUB,NBIT,ILENG,IERR)
+C
+           ELSE
+C
+C*            GET PREDEFINED BIT MAP
+C
+              WRITE(YCHAR,'(I5)') IBMF
+C
+              BITMAP='BIT_MAP_'//YCHAR//'.DAT'
+C
+              OPEN(UNIT=10,IOSTAT=IOS,ERR=455,FILE=BITMAP,
+     1        FORM='UNFORMATTED',STATUS='OLD')
+C
+              READ(10) IBVAL,IBLEN,(IBMAP(I),I=1,IBLEN)
+C
+              CLOSE(10)
+C
+              GO TO 460
+C
+ 455          CONTINUE
+C
+              IERR=-5
+              WRITE(*,9906) IOS
+ 9906         FORMAT(1H ,'ERROR ON UNIT 10, ERROR NO. ',I6)
+              RETURN
+C
+ 460          CONTINUE
+C
+           ENDIF
+C
+C
+       END IF
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    GET LENGTH OF BINARY DATA BLOCK.
+C***
+C
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL GBYTE (IGRIB(IWORD),LBIN,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),IFLAG,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (ISNEW.EQ.0)
+     C    THEN
+C             OLD VERSION OF CODE
+C
+C             0000---- GRID POINT
+C             0001---- SPHERICAL HARMONICS
+C
+              IREP = IFLAG / 16
+              LNIL = IFLAG - IREP * 16
+C
+          ELSE
+C             NEW VERSION OF CODE
+C
+C             0000---- GRID POINT
+C             1000---- SPHERICAL HARMONICS
+C
+              IREP = IFLAG / 128
+              LNIL = IFLAG - IREP * 128
+C
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET SCALE FACTOR
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      ISCALE = JSCALE
+      IF (JSCALE.GE.32768)
+     C    THEN
+              ISCALE = ISCALE - 32768
+              ISCALE = - ISCALE
+          ENDIF
+C
+C
+C
+C
+C***
+C*    GET REFERENCE VALUE (FMIN) IN GRIB FORMAT (IEXP,IMANT)
+C***
+C
+C
+      CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+      CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C     CHECK FOR MISSING DATA INDICATORS.
+C
+      IMISS = 0
+      IF (JSCALE.EQ.65535.AND.IEXP.EQ.255.AND.IMANT.EQ.16777215)
+     C   IMISS = 1
+C
+C     CONVERT REFERENCE VALUE AND SCALE FACTOR.
+C
+      IF (IMISS.EQ.0)
+     C   THEN
+             CALL DECFP (FMIN,IEXP,IMANT)
+             ZSCALE = 2.**ISCALE
+         ENDIF
+C
+C
+C
+C
+C***
+C*    GET NUMBER OF BITS IN EACH DATA VALUE.
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C     CHECK NUMBER OF BITS PER DATA FIELD.
+C
+      IF (IBITS.GT.NBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              IERR = -1
+              WRITE (*,9002) IBITS,NBIT,IMAX
+ 9002         FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C                'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C                ' PERMITTED VALUE, ',I3)
+              RETURN
+          ENDIF
+C
+C***
+C*    IF DATA IS IN SPHERICAL HARMONIC FORM, NEXT 4 OCTETS
+C*    CONTAIN THE REAL (0,0) COEFFICIENT.
+C***
+C
+      IF (IREP.EQ.1)
+     C    THEN
+C
+C            GET REAL (0,0) COEFFICIENT IN GRIB FORMAT AND
+C            CONVERT TO FLOATING POINT.
+C
+             CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             IF (IMISS.EQ.1)
+     C          THEN
+                    FPDATA(1) = 0.0
+                ELSE
+                    CALL DECFP (FPDATA(1),IEXP,IMANT)
+                ENDIF
+          ENDIF
+C
+C
+C
+C
+C*****
+C*    DECODE DATA VALUES TO FLOATING POINT AND STORE IN FPDATA.
+C*****
+C
+C     FIRST CALCULATE THE NUMBER OF DATA VALUES.
+C
+      JLENF = LBIN - 11 - IREP * 4
+      JLENF = (JLENF * 8 - LNIL) / IBITS
+C
+C     CHECK LENGTH OF OUTPUT ARRAY.
+C
+      IF (JLENF+IREP.GT.ILENF)
+     C   THEN
+             IERR = -3
+             WRITE (*,9003) JLENF,ILENF
+ 9003        FORMAT (1H ,'NUMBER OF VALUES TO BE DECODED IS - ',I7,
+     C                    ', ARRAY SIZE - ',I7)
+             RETURN
+         ENDIF
+C
+      CALL GBYTES (IGRIB(IWORD),FPDATA(IREP+1),IOFF,IBITS,0,JLENF)
+      CALL OFFSET (IOFF,JLENF,IWORD,IBITS,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      DO 500 I= IREP+1,IREP+JLENF
+            IF (IMISS.EQ.1)
+     C         THEN
+                   FPDATA(1) = 0.0
+               ELSE
+                   ZGRIB     = FPDATA (I)
+                   FPDATA(I) = FMIN + JGRIB * ZSCALE
+               ENDIF
+  500 CONTINUE
+C
+C     INCLUDE (0,0) COEFFICIENT IN COUNT, IF SPHERICAL HARMONIC DATA.
+C
+      JLENF = IREP + JLENF
+C
+C
+C
+C
+C***
+C*    SKIP ANY ZERO FILL AT END OF DATA BLOCK.
+C***
+C
+      L = (IWORD-IPW) * NBIT + IOFF -IPB
+      L = LBIN * 8 - L
+      IF (L.NE.0)
+     C    THEN
+              CALL OFFSET (IOFF,1,IWORD,L,NBIT,ILENG,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C*         IF BIT MAP PRESENT FILL MISSING VALUES BY RMISS.
+C
+      IF(IB1PAR(4).EQ.64.OR.IB1PAR(4).EQ.192) THEN
+C
+         JI=0
+         DO 647 J=1,IBVAL
+         IF(IBMAP(J).EQ.0) THEN
+            FPDATAG(J)=RMISS
+         ELSE
+            JI=JI+1
+            FPDATAG(J)=FPDATA(JI)
+         END IF
+ 647     CONTINUE
+C
+	 JLENF = IBVAL
+         DO 649 I=1,JLENF
+         FPDATA(I)=FPDATAG(I)
+ 649     CONTINUE
+C
+      END IF
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C     CHECK 7 7 7 7 AT END OF CODED DATA.
+C
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+C
+C     55 IS THE VALUE OF ASCII CHARACTER '7'
+C
+      DO 600 I=1,4
+         IF (IBLOCK(I).NE.55) IERR = 1
+  600 CONTINUE
+C
+      IF (IERR.EQ.1) WRITE (*,*) ' NO 7777 GROUP FOUND '
+C
+C
+C
+C     SET NUMBER OF VALUES NEGATIVE, IF MISSING DATA VALUES.
+C
+      IF (IMISS.EQ.1) JLENF = - JLENF
+C
+      RETURN
+      END
diff --git a/gribex/decogr.F b/gribex/decogr.F
new file mode 100755
index 0000000..955cca1
--- /dev/null
+++ b/gribex/decogr.F
@@ -0,0 +1,720 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECOGR (FPDATA,ILENF,IBITS,NBIT,IB1PAR,
+     C              IB2PAR,FVERT,ILENV,IGRIB,ILENG,IWORD,
+     C              JLENV,JLENF,IERR)
+C
+C
+C---->
+C*
+C*     NAME     : DECOGR
+C*
+C*     FUNCTION : DECODE WMO GRIB CODED DATA.
+C*
+C*     INPUT    : NBIT    - NUMBER OF BITS IN COMPUTER WORD
+C*
+C*                IGRIB   - INTEGER ARRAY CONTAINING DATA IN GRIB CODE.
+C*                ILENG   - LENGTH OF ARRAY IGRIB.
+C*
+C*                FVERT   - REAL ARRAY TO RECEIVE VERTICAL COORDINATE
+C*                          PARAMETERS.
+C*                ILENV   - LENGTH OF ARRAY FVERT.
+C*
+C*                FPDATA  - REAL ARRAY TO RECEIVE DECODED DATA VALUES.
+C*                ILENF   - LENGTH OF ARRAY FPDATA
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 17) TO RECEIVE
+C*                          PRODUCT DEFINITION INFORMATION.
+C*
+C*                IB2PAR  - INTEGER ARRAY (DIMENSION 11) TO RECEIVE GRID
+C*                          DEFINITION INFORMATION.
+C*
+C*     OUTPUT   : PARAMETERS FROM BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*                IB1PAR - INTEGER ARRAY (DIMENSION 17) OF PRODUCT
+C*                         DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1)
+C*                  5       PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVELS (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS..
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*                PARAMETERS FROM BLOCK 2 , GRID DEFINITION BLOCK.
+C*                -----------------------------------------------
+C*                IB2PAR - INTEGER ARRAY (DIMENSION 11) CONTAINING GRID
+C*                         DEFINITION INFORMATION.
+C*                         USE VARIES WITH DATA REPRESENTATION TYPE.
+C*
+C*                WORD      LAT/LONG GRID
+C*                ----      -------------
+C*                 1        DATA REPRESENTATION TYPE (CODE TABLE 6).
+C*                 2        NO. OF POINTS ALONG A LATITUDE
+C*                 3        NO. OF POINTS ALONG A MERIDIAN.
+C*                 4        LATITUDE OF ORIGIN (SOUTH - IVE).
+C*                 5        LONGITUDE OF ORIGIN (WEST - IVE).
+C*                 6        EXTREME POINT/INCREMENTS FLAG.(CODE TABLE 7)
+C*                 7        LATITUDE OF EXTREME POINT (SOUTH - IVE).
+C*                 8        LONGITUDE OF EXTREME POINT (WEST - IVE).
+C*                 9        LATITUDE INCREMENT
+C*                10        LONGITUDE INCREMENT
+C*                11        SCANNING MODE (CODE TABLE 8)
+C*
+C*                WORD      GAUSSIAN GRID
+C*                ----      -------------
+C*                1-9       AS FOR LAT/LONGITUDE GRID.
+C*                10        THE NUMBER OF LATITUDE LINES BETWEEN A POLE
+C*                          AND THE EQUATOR.
+C*                11        SCANNING MODE (CODE TABLE 8)
+C*
+C*                WORD      SPHERICAL HARMONICS
+C*                ----      -------------------
+C*                  1       DATA REPRESENTATION TYPE (CODE TABLE 6)
+C*                  2       J - PENTAGONAL RESOLUTION PARAMETER
+C*                  3       K - PENTAGONAL RESOLUTION PARAMETER
+C*                  4       M - PENTAGONAL RESOLUTION PARAMETER
+C*                  5       REPRESENTATION TYPE (CODE TABLE 9)
+C*                  6       REPRESENTATION MODE (CODE TABLE 10)
+C*                7-11      NOT USED
+C*
+C*
+C*                USE FOR OTHER DATA REPRESENTATION TYPES IS
+C*
+C*                FVERT  - REAL ARRAY OF VERTICAL COORDINATE PARAMETERS
+C*                JLENV  - NUMBER OF VALUES IN THIS ARRAY.
+C*
+C*                USED FOR HYBRID LEVELS ONLY.
+C*
+C*                PARAMETERS FROM BLOCK 3 , BIT-MAP DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                TO BE DEFINED LATER.
+C*
+C*                PARAMETERS FROM BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*                JLENF   - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENF IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                IBITS   - NUMBER OF BITS FOR CODED DATA VALUES.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                          0, NO ERROR.
+C*
+C*                         -1, NUMBER OF BITS PER DATA VALUE EXCEEDS
+C*                             WORD LENGTH, OR MAXIMUM ALLOWED.
+C*                         -2, INPUT ARRAY HOLDS FEWER CODED VALUES
+C*                             THAN EXPECTED.
+C*                         -3, OUTPUT ARRAY TOO SMALL TO HOLD DECODED
+C*                             DATA VALUES.
+C*                         -4, CURRENTLY UNDEFINED OPTION SELECTED.
+C*
+C*                          1, NO BLOCK 5 FOUND.
+C*
+C*    JOHN HENNESSY , ECMWF , 15TH APRIL 1985
+C*
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+      DIMENSION FPDATA(ILENF),FVERT(ILENV)
+      DIMENSION IBLOCK(24),IGRIB(ILENG)
+      DIMENSION IB1PAR(17),IB2PAR(11),ILAT(2)
+C
+      EQUIVALENCE (ZGRIB,JGRIB)
+C
+C     SET MAXIMUM NUMBER OF BITS PER DATA FIELD.
+C
+      DATA IMAX /60/
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT OCTETS OF BLOCK 1.
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      NVAL  = 24
+C
+      CALL GBYTES (IGRIB(1),IBLOCK(1),0,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     TRANSFER PRODUCT DEFINITION INFORMATION TO OUTPUT ARRAY.
+C
+      DO 100 I=1,17
+         IB1PAR(I) = IBLOCK(I+4)
+  100 CONTINUE
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS. PUT SINGLE VALUE IN FIRST LEVEL WORD.
+C
+      IF (IB1PAR(6).EQ.100.OR.IB1PAR(6).EQ.103.OR.IB1PAR(6).EQ.105.
+     C    OR.IB1PAR(6).EQ.107.OR.IB1PAR(6).EQ.109)
+     C    THEN
+              IB1PAR(7) = IB1PAR(7) * 32 + IB1PAR(8)
+              IB1PAR(8) = 0
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    TIME RANGE.
+C***
+C
+C     ONE TIME RANGE CAN OCCUPY TWO OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+             IB1PAR(15) = IB1PAR(15) * 32 + IB1PAR(16)
+             IB1PAR(16) = 0
+         ENDIF
+C
+C***
+C*    RESERVED ELEMENTS.
+C***
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 2 - GRID DESCRIPTION BLOCK.
+C*
+C********************************************************************
+C
+C***
+C*    CHECK IF BLOCK 2 IS INCLUDED IN CODE.
+C***
+C
+      IF (IB1PAR(4).EQ.1.OR.IB1PAR(4).EQ.3)
+     C   THEN
+C
+C
+C***
+C*           LENGTH OF GRID DESCRIPTION BLOCK.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),LBLK,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LENGTH IS 32 OCTETS FOR LAT/LONG, GAUSSIAN AND SPHERICAL
+C            HARMONICS . FOR ANY DATA  ON HYBRID LEVELS THE
+C            VERTICAL COORDINATES ARE ADDED.
+C            GET NUMBER OF VERTICAL COORDINATE PARAMETERS, IF ANY.
+C
+             JLENV = (LBLK - 32) / 4
+             IF(ILENV.LT.JLENV)
+     C          THEN
+                    IERR = -3
+                    WRITE (*,9001) JLENV,ILENV
+ 9001               FORMAT (1H ,'NUMBER OF VERTICAL COORDINATES - ',I4,
+     C                          ', ARRAY SIZE IS - ',I4)
+                    RETURN
+                ENDIF
+C
+C
+C***
+C*           NUMBER OF UNUSED BITS AT END OF BLOCK.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),LNIL,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*           NEXT OCTET IS RESERVED.
+C***
+C
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*           DATA REPRESENTATION TYPE.
+C***
+C
+             CALL GBYTE (IGRIB(IWORD),IB2PAR(1),IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            LAT/LONGITUDE GRID, GAUSSIAN GRID AND SPHERICAL HARMONICS
+C            ARE THE ONLY DATA REPRESENTATIONS HANDLED.
+C
+             IF (IB2PAR(1).NE.0.AND.IB2PAR(1).NE.4.AND.IB2PAR(1).NE.50)
+     C          THEN
+                     WRITE (*,*)'GRID DESCRIPTION BLOCK NOT YET DEFINED'
+                     IERR = -4
+                     RETURN
+                ENDIF
+C
+C
+C
+C
+C***
+C*           LAT/LONG OR GAUSSIAN GRID.
+C***
+C
+             IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C         THEN
+C
+C                  NUMBER OF LAT/LONG POINTS.
+C
+                   CALL GBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  LAT/LONG OF ORIGIN.
+C
+                   CALL GBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  IF SIGN BIT SET TO 1 , VALUES ARE NEGATIVE.
+C
+                   DO 200 I=1,2
+                      IB2PAR(I+3) = ILAT(I)
+                      IF (ILAT(I).GT.8388608)
+     C                   THEN
+                             IB2PAR(I+3) = IB2PAR(I+3) - 8388608
+                             IB2PAR(I+3) = - IB2PAR(I+3)
+                         ENDIF
+  200             CONTINUE
+C
+C
+C                  EXTREME POINT / INCREMENT FLAG.
+C
+                   CALL GBYTE (IGRIB(IWORD),IB2PAR(6),IOFF,8)
+                   CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C
+C                  LAT/LONG OF EXTREME POINTS.
+C
+                   CALL GBYTES (IGRIB(IWORD),ILAT(1),IOFF,24,0,2)
+                   CALL OFFSET (IOFF,2,IWORD,24,NBIT,ILENG,IERR)
+                   IF (IERR.NE.0) RETURN
+C
+C                  IF SIGN BIT SET TO 1 , VALUES ARE NEGATIVE.
+C
+                   DO 300 I=1,2
+                      IB2PAR(I+6) = ILAT(I)
+                      IF (ILAT(I).GT.8388608)
+     C                   THEN
+                             IB2PAR(I+6) = IB2PAR(I+6) - 8388608
+                             IB2PAR(I+6) = - IB2PAR(I+6)
+                         ENDIF
+  300             CONTINUE
+C
+C                 DIRECTION INCREMENTS / NUMBER OF LATITUDE LINES.
+C
+                  CALL GBYTES (IGRIB(IWORD),IB2PAR(9),IOFF,16,0,2)
+                  CALL OFFSET (IOFF,2,IWORD,16,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+C                 SCANNING MODE.
+C
+                  CALL GBYTE (IGRIB(IWORD),IB2PAR(11),IOFF,8)
+                  CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+C                 4 RESERVED OCTETS.
+C
+                  CALL OFFSET (IOFF,4,IWORD,8,NBIT,ILENG,IERR)
+                  IF (IERR.NE.0) RETURN
+C
+              ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*            SPHERICAL HARMONIC DATA.
+C***
+C
+              IF (IB2PAR(1).EQ.50)
+     C           THEN
+C
+C                    PENTAGONAL RESOLUTION PARAMETERS.
+C
+                     CALL GBYTES (IGRIB(IWORD),IB2PAR(2),IOFF,16,0,3)
+                     CALL OFFSET (IOFF,3,IWORD,16,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+C                    REPRESENTATION TYPE AND MODE.
+C
+                     CALL GBYTES (IGRIB(IWORD),IB2PAR(5),IOFF,8,0,2)
+                     CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+C                    18 RESERVED OCTETS.
+C
+                     CALL OFFSET (IOFF,18,IWORD,8,NBIT,ILENG,IERR)
+                     IF (IERR.NE.0) RETURN
+C
+                 ENDIF
+C
+C
+C
+C
+C***
+C*               VERTICAL COORDINATE PARAMETERS FOR HYBRID LEVELS.
+C***
+C
+                 IF (JLENV.NE.0)
+     C              THEN
+                        DO 400 I=1,JLENV
+                           CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+                           CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+                           IF (IERR.NE.0) RETURN
+                           CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+                           CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+                           IF (IERR.NE.0) RETURN
+                           CALL DECFP (FVERT(I),IEXP,IMANT)
+  400                   CONTINUE
+                    ENDIF
+C
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 3 - BIT MAP BLOCK.
+C*
+C********************************************************************
+C
+      IF (IB1PAR(4).EQ.2.OR.IB1PAR(4).EQ.3)
+     C     THEN
+               WRITE (*,*)'BIT MAP BLOCK NOT YET DEFINED'
+               IERR = -4
+               RETURN
+           ENDIF
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    GET LENGTH OF BINARY DATA BLOCK.
+C***
+C
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL GBYTE (IGRIB(IWORD),LBIN,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C***
+C*    4 BIT FLAG / 4 BIT COUNT OF UNUSED BITS AT END OF BLOCK OCTET.
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),IFLAG,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IREP = IFLAG / 16
+      LNIL = IFLAG - IREP * 16
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET SCALE FACTOR
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),JSCALE,IOFF,16)
+      CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      ISCALE = JSCALE
+      IF (JSCALE.GE.32768)
+     C    THEN
+              ISCALE = ISCALE - 32768
+              ISCALE = - ISCALE
+          ENDIF
+C
+C
+C
+C
+C***
+C*    GET REFERENCE VALUE (FMIN) IN GRIB FORMAT (IEXP,IMANT)
+C***
+C
+C
+      CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+      CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C     CHECK FOR MISSING DATA INDICATORS.
+C
+      IMISS = 0
+      IF (JSCALE.EQ.65535.AND.IEXP.EQ.255.AND.IMANT.EQ.16777215)
+     C   IMISS = 1
+C
+C     CONVERT REFERENCE VALUE AND SCALE FACTOR.
+C
+      IF (IMISS.EQ.0)
+     C   THEN
+             CALL DECFP (FMIN,IEXP,IMANT)
+             ZSCALE = 2.**ISCALE
+         ENDIF
+C
+C
+C
+C
+C***
+C*    GET NUMBER OF BITS IN EACH DATA VALUE.
+C***
+C
+      CALL GBYTE (IGRIB(IWORD),IBITS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C     CHECK NUMBER OF BITS PER DATA FIELD.
+C
+      IF (IBITS.GT.NBIT.OR.IBITS.GT.IMAX)
+     C    THEN
+              IERR = -1
+              WRITE (*,9002) IBITS,NBIT,IMAX
+ 9002         FORMAT (1H ,'NUMBER OF BITS PER DATA VALUE, ',I3,
+     C                'EXCEEDS WORD LENGTH, ',I3,' OR MAXIMUM ',
+     C                ' PERMITTED VALUE, ',I3)
+              RETURN
+          ENDIF
+C
+C***
+C*    IF DATA IS IN SPHERICAL HARMONIC FORM, NEXT 4 OCTETS
+C*    CONTAIN THE REAL (0,0) COEFFICIENT.
+C***
+C
+      IF (IREP.EQ.1)
+     C    THEN
+C
+C            GET REAL (0,0) COEFFICIENT IN GRIB FORMAT AND
+C            CONVERT TO FLOATING POINT.
+C
+             CALL GBYTE (IGRIB(IWORD),IEXP,IOFF,8)
+             CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             CALL GBYTE (IGRIB(IWORD),IMANT,IOFF,24)
+             CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+             IF (IMISS.EQ.1)
+     C          THEN
+                    FPDATA(1) = 0.0
+                ELSE
+                    CALL DECFP (FPDATA(1),IEXP,IMANT)
+                ENDIF
+          ENDIF
+C
+C
+C
+C
+C*****
+C*    DECODE DATA VALUES TO FLOATING POINT AND STORE IN FPDATA.
+C*****
+C
+C     FIRST CALCULATE THE NUMBER OF DATA VALUES.
+C
+      JLENF = LBIN - 11 - IREP * 4
+      JLENF = (JLENF * 8 - LNIL) / IBITS
+C
+C     CHECK LENGTH OF OUTPUT ARRAY.
+C
+      IF (JLENF+IREP.GT.ILENF)
+     C   THEN
+             IERR = -3
+             WRITE (*,9003) JLENF,ILENF
+ 9003        FORMAT (1H ,'NUMBER OF VALUES TO BE DECODED IS - ',I7,
+     C                    ', ARRAY SIZE - ',I7)
+             RETURN
+         ENDIF
+C
+      CALL GBYTES (IGRIB(IWORD),FPDATA(IREP+1),IOFF,IBITS,0,JLENF)
+      CALL OFFSET (IOFF,JLENF,IWORD,IBITS,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      DO 500 I= IREP+1,IREP+JLENF
+            IF (IMISS.EQ.1)
+     C         THEN
+                   FPDATA(1) = 0.0
+               ELSE
+                   ZGRIB     = FPDATA (I)
+                   FPDATA(I) = FMIN + JGRIB * ZSCALE
+               ENDIF
+  500 CONTINUE
+C
+C     INCLUDE (0,0) COEFFICIENT IN COUNT, IF SPHERICAL HARMONIC DATA.
+C
+      JLENF = IREP + JLENF
+C
+C
+C
+C
+C***
+C*    SKIP ANY ZERO FILL AT END OF DATA BLOCK.
+C***
+C
+      L = (IWORD-IPW) * NBIT + IOFF -IPB
+      L = LBIN * 8 - L
+      IF (L.NE.0)
+     C    THEN
+              CALL OFFSET (IOFF,1,IWORD,L,NBIT,ILENG,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C     CHECK 7 7 7 7 AT END OF CODED DATA.
+C
+      IBLOCK(1) = 55
+      IBLOCK(2) = 55
+      IBLOCK(3) = 55
+      IBLOCK(4) = 55
+C
+      CALL GBYTES (IGRIB(IWORD),IBLOCK(1),IOFF,8,0,4)
+C
+      DO 600 I=1,4
+         IF (IBLOCK(I).NE.55) IERR = 1
+  600 CONTINUE
+C
+      IF (IERR.EQ.1) WRITE (*,*) ' NO 7777 GROUP FOUND '
+C
+C
+C
+C     SET NUMBER OF VALUES NEGATIVE, IF MISSING DATA VALUES.
+C
+      IF (IMISS.EQ.1) JLENF = - JLENF
+C
+      RETURN
+      END
diff --git a/gribex/decops.F b/gribex/decops.F
new file mode 100755
index 0000000..adcb8b7
--- /dev/null
+++ b/gribex/decops.F
@@ -0,0 +1,897 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECOPS (NAME,CHDATA,ILENCH,FPDATA,ILENFP,INDATA,ILENIN,
+     C                   NBYTE,LGDATA,ILENLG,IB1PAR,IPSCOD,ILENPS,
+     C                   JLENCH,JLENFP,JLENIN,JLENLG,IRSERV,NBIT,IWORD,
+     C                   IERR )
+C
+C---->
+C*
+C*     NAME     : DECOPS
+C*
+C*     FUNCTION : DECODE PSEUDO-GRIB CODED DATA.
+C*
+C*     INPUT    : NBIT     - NUMBER OF BITS IN COMPUTER WORD
+C*
+C*                IPSCOD   - INTEGER ARRAY OF DATA IN PSEUDO-GRIB CODE.
+C*                ILENPS   - LENGTH OF ARRAY IPSCOD.
+C*
+C*                CHDATA   - CHARACTER VARIABLE TO RECEIVE DECODED
+C*                           CHARACTER DATA.
+C*                ILENCH   - LENGTH OF THIS VARIABLE
+C*
+C*                FPDATA   - REAL ARRAY TO RECEIVE DECODED F.P. VALUES.
+C*                ILENFP   - LENGTH OF THIS ARRAY.
+C*
+C*                INDATA   - INTEGER ARRAY TO RECEIVE DECODED INTEGERS
+C*                ILENIN   - LENGTH OF THIS ARRAY.
+C*
+C*                LGDATA   - LOGICAL ARRAY TO RECEIVE DECODED LOGICALS
+C*                ILENLG   - LENGTH OF THIS ARRAY.
+C*
+C*                          IF ANY LENGTH (ILENCH,-FP,-IN,-LG) IS SET
+C*                          TO 1, ONLY BLOCK 0 AND BLOCK 1 ARE DECODED.
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) TO RECEIVE
+C*                          DATA DEFINITION INFORMATION.
+C*
+C*
+C*     OUTPUT   : PARAMETER FROM BLOCK 0
+C*                ----------------------
+C*
+C*                NAME    - CHARACTER VARIABLE, 4 LETTERS OF CODE NAME.
+C*
+C*
+C*                PARAMETERS FROM BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) OF DATA
+C*                          DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1)
+C*                  5       PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVELS (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*                 18       NUMBER AVERAGED.
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS..
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*
+C*
+C*                PARAMETERS FROM BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*
+C*                CHDATA   - UNPACKED CHARACTER DATA
+C*                JLENCH   - NUMBER OF CHARACTERS. NEGATIVE IF
+C*                           MISSING DATA CODED.
+C*
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*                JLENFP  - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENFP IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                INDATA  - ARRAY OF INTEGER VALUES.
+C*                JLENIN  - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENIN IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                LGDATA  - ARRAY OF LOGICAL VALUES.
+C*                JLENLG  - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENLG IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                NBYTE   - NUMBER OF BYTES FOR INTEGER VALUES.
+C*
+C*                IRSERV  - NUMBER OF BYTES IN DATA BLOCK RESERVED
+C*                          FOR FUTURE USE.
+C*
+C*
+C*                OTHER PARAMETERS.
+C*                ----------------
+C*
+C*                IWORD   - NUMBER OF WORDS DECODED.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                          0, NO ERROR.
+C*
+C*                         -2, INPUT ARRAY HOLDS FEWER CODED VALUES
+C*                             THAN EXPECTED.
+C*                         -3, OUTPUT ARRAY/VARIABLE TOO SMALL TO HOLD
+C*                             DECODED DATA VALUES.
+C*                         -4, CURRENTLY UNDEFINED OPTION SELECTED.
+C*
+C*                          1, NO BLOCK 5 FOUND.
+C*
+C*    GENERAL  : DECOPS CALLS GBYTE
+C*                            GBYTES
+C*                            OFFSET
+C*                            DECFP
+C*
+C*    AUTHOR   : J.HENNESSY  23.01.86
+C*
+C*    MODIFIED : J.HENNESSY  06.06.86
+C*                    "      21.08.86
+C*
+C*               J.Hennessy  17.09.90
+C*               Lower case letters as well as the characters
+C*               _ - . , added.
+C*
+C     ---------------------------------------------------------------
+C---->
+C
+C
+      PARAMETER (NCHAR=67)
+C
+C
+      LOGICAL     LGDATA
+      CHARACTER*4 NAME
+      CHARACTER*1 CHAR
+      CHARACTER*(*) CHDATA
+C
+C
+C
+      DIMENSION FPDATA(*),INDATA(*),LGDATA(*)
+      DIMENSION IPSCOD(ILENPS),IBLOCK(24),IB1PAR(18)
+      DIMENSION IASCII(NCHAR)
+      DIMENSION CHAR(NCHAR)
+C
+C
+      DATA IASCII /65 ,66 ,67 ,68 ,69 ,70 ,71 ,72 ,73 ,74 ,75 ,76 ,77 ,
+     C             78 ,79 ,80 ,81 ,82 ,83 ,84 ,85 ,86 ,87 ,88 ,89 ,90 ,
+     C             48 ,49 ,50 ,51 ,52 ,53 ,54 ,55 ,56 ,57 ,32 ,
+     C             97 ,98 ,99 ,100,101,102,103,104,105,106,107,108,109,
+     C             110,111,112,113,114,115,116,117,118,119,120,121,122,
+     C             95 ,46 ,44 , 45  /
+C
+      DATA CHAR   /'A','B','C','D','E','F','G','H','I','J','K','L','M',
+     C             'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+     C             '0','1','2','3','4','5','6','7','8','9',' ',
+     C             'a','b','c','d','e','f','g','h','i','j','k','l','m',
+     C             'n','o','p','q','r','s','t','u','v','w','x','y','z',
+     C              '_','.',',','-' /
+C
+C
+C
+C
+C
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 0 - INDICATOR BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT 4 OCTETS CONTAINING ASCII NAME.
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      NVAL  = 4
+C
+      CALL GBYTES (IPSCOD(1),IBLOCK(1),0,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      DO 100 I=1,36
+         IF (IBLOCK(1).EQ.IASCII(I)) NAME(1:1) = CHAR(I)
+         IF (IBLOCK(2).EQ.IASCII(I)) NAME(2:2) = CHAR(I)
+         IF (IBLOCK(3).EQ.IASCII(I)) NAME(3:3) = CHAR(I)
+         IF (IBLOCK(4).EQ.IASCII(I)) NAME(4:4) = CHAR(I)
+  100 CONTINUE
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT FIRST 4 OCTETS OF BLOCK 1.
+C
+      NVAL  = 4
+C
+      CALL GBYTES (IPSCOD(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     IF THESE OCTETS DO NOT CONTAIN 0, 0, 24 AND 0 RESPECTIVELY
+C     THEN THE DATA IS IN THE OLD VERSION OF THE CODE.
+C
+      IF (IBLOCK(1).EQ.0.AND.IBLOCK(2).EQ.0.AND.IBLOCK(3).EQ.24.
+     C    AND.IBLOCK(4).EQ.0)
+     C      THEN
+                ISNEW = 1
+                NVAL = 20
+            ELSE
+                ISNEW = 0
+                NVAL = 16
+            ENDIF
+C
+C     EXTRACT NEXT 16 OR 20 OCTETS OF BLOCK 1 - NUMBER DEPENDS
+C     ON VERSION OF CODE.
+C
+      CALL GBYTES (IPSCOD(IWORD),IBLOCK(5),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     TRANSFER PRODUCT DEFINITION INFORMATION TO OUTPUT ARRAY.
+C     EXCEPT FOR NUMBER AVERAGED.
+C
+      DO 200 I=1,17
+         IB1PAR(I) = IBLOCK(I+4*ISNEW)
+  200 CONTINUE
+C
+C
+      WRITE(*,*) ' '
+      WRITE(*,*) '     ******************************************'
+      WRITE(*,*) '     ******************************************'
+      WRITE(*,*) '     **                                      **'      
+      WRITE(*,*) '     ** DECOPS is not Year-2000 compliant;   **'
+      WRITE(*,*) '     ** dates are returned as 2 digits.      **'
+      WRITE(*,*) '     **                                      **'
+      WRITE(*,*) '     ** Please switch to using DECOPS2 which **'
+      WRITE(*,*) '     ** returns dates as 4 digits in the     **'
+      WRITE(*,*) '     ** range 1900 upwards.                  **'
+      WRITE(*,*) '     **                                      **'
+      WRITE(*,*) '     ** DECOPS will be set to abort after    **'
+      WRITE(*,*) '     ** January 1999.                        **'
+      WRITE(*,*) '     **                                      **'
+      WRITE(*,*) '     ******************************************'
+      WRITE(*,*) '     ******************************************'
+      WRITE(*,*) ' '
+C
+C
+C     NUMBER AVERAGED OCCUPIES 2 OCTETS.
+C
+      IB1PAR(18) = IBLOCK(18+4*ISNEW) * 256 + IBLOCK(19+4*ISNEW)
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS. PUT SINGLE VALUE IN FIRST LEVEL WORD.
+C
+      KTEMP = 32 + (ISNEW*224)
+      IF ((IB1PAR(6).EQ. 20).OR.
+     X    (IB1PAR(6).EQ.100).OR.
+     X    (IB1PAR(6).EQ.103).OR.
+     X    (IB1PAR(6).EQ.105).OR.
+     X    (IB1PAR(6).EQ.107).OR.
+     X    (IB1PAR(6).EQ.109).OR.
+     X    (IB1PAR(6).EQ.111).OR.
+     X    (IB1PAR(6).EQ.113).OR.
+     X    (IB1PAR(6).EQ.115).OR.
+     X    (IB1PAR(6).EQ.117).OR.
+     X    (IB1PAR(6).EQ.125).OR.
+     X    (IB1PAR(6).EQ.160) ) THEN
+              IB1PAR(7) = IB1PAR(7) * KTEMP + IB1PAR(8)
+              IB1PAR(8) = 0
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    TIME RANGE.
+C***
+C
+C     ONE TIME RANGE CAN OCCUPY TWO OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+             IB1PAR(15) = IB1PAR(15) * KTEMP + IB1PAR(16)
+             IB1PAR(16) = 0
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    CHECK IF DECODING OF ONLY BLOCKS 0 AND 1 HAS BEEN REQUESTED.
+C***
+C
+      IF (ILENFP.EQ.1.OR.ILENIN.EQ.1.OR.ILENLG.EQ.1) RETURN
+      IF (ILENCH.EQ.1) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    GET LENGTH OF BINARY DATA BLOCK.
+C***
+C
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL GBYTE (IPSCOD(IWORD),LBIN,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 4 IS RESERVED.
+C*    (IT IS USED IN OLDER VERSIONS OF BUDGET VALUE RECORDS AND
+C*    IT GIVES THE STARTING OCTET ADDRESS OF LOGICAL VALUES, A
+C*    FIXED VALUE OF 34 OR 38)
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),ISTLG,IOFF,8)
+      IOLDBV = 0
+      IF (ISTLG.EQ.34.OR.ISTLG.EQ.38) IOLDBV = 1
+C
+C
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 5 - MISSING DATA FLAG. (IN OLDER VERSIONS OF BUDGET VALUE
+C*    RECORD IT GIVES STARTING OCTET ADDRESS OF INTEGER VALUES)
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),IMISS,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (IOLDBV.EQ.1)
+     C   THEN
+             ISTIN = IMISS
+             IMISS = 0
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 6-7 IN OLDER VERSIONS OF BUDGET VALUE RECORDS GIVE
+C*    STARTING BYTE ADDRESS OF FLOATING POINT VALUES SECTION.
+C*    OCTETS 8-9 GIVING THE LENGTH OF THE FLOATING POINT DATA
+C*    SECTION IN OCTETS.
+C***
+C
+      IF (IOLDBV.EQ.1)
+     C   THEN
+             CALL GBYTE (IPSCOD(IWORD),ISTFP,IOFF,16)
+             CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENPS,IERR)
+             IF (IERR.NE.0) RETURN
+C
+             CALL GBYTE (IPSCOD(IWORD),LENFP,IOFF,16)
+             CALL OFFSET (IOFF,1,IWORD,16,NBIT,ILENPS,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            NUMBER OF FLOATING POINT VALUES.
+C            4 BYTES PER FLOATING POINT NUMBER.
+C
+             JLENFP = LENFP / 4
+C
+C            NUMBER OF LOGICAL VALUES.
+C
+             JLENLG = ISTIN - ISTLG
+C
+C            NUMBER OF INTEGER VALUES.
+C            2 OCTETS PER INTEGER.
+C
+             NBYTE = 2
+             IBITS = NBYTE * 8
+             JLENIN = ( ISTFP - ISTIN ) / NBYTE
+C
+C            NO CHARACTER DATA IN OLD FORMAT.
+C
+             JLENCH = 0
+C
+C            CHECK NUMBERS OF DATA ITEMS AGAINST DIMENSIONS
+C            OF TARGET ARRAYS.
+C
+             IF (JLENFP.GT.ILENFP)
+     C          THEN
+                    IERR = -3
+                    WRITE (*,9001) JLENFP
+                ENDIF
+C
+             IF (JLENLG.GT.ILENLG)
+     C          THEN
+                    IERR = -3
+                    WRITE (*,9002) JLENLG
+                ENDIF
+C
+             IF (JLENIN.GT.ILENIN)
+     C          THEN
+                    IERR = -3
+                    WRITE (*,9003) JLENIN
+                ENDIF
+C
+             IF (IERR.NE.0) RETURN
+C
+C            NOW WE GO AROUND THE HOUSES AS THIS OLD DATA
+C            HAS THE DIFFERENT DATA TYPES STORED IN A DIFFERENT
+C            ORDER.
+C
+C            LOGICAL VARIABLES FIRST.
+C
+             GO TO 450
+C
+         ENDIF
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 6 - NUMBER OF BYTES PER INTEGER.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),NBYTE,IOFF,8)
+      CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IBITS = NBYTE * 8
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 7-8 ARE RESERVED.
+C***
+C
+      CALL OFFSET (IOFF,2,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 9-11 - NUMBER OF CHARACTERS IN CHARACTER SECTION.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENCH,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENCH.GT.ILENCH)
+     C   THEN
+             IERR = -3
+             WRITE (*,9004) JLENCH
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 12-14 , NUMBER OF FLOATING POINT VALUES.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENFP,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENFP.GT.ILENFP)
+     C   THEN
+             IERR = -3
+             WRITE (*,9001) JLENFP
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 15-17 , NUMBER OF INTEGER VALUES.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENIN,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENIN.GT.ILENIN)
+     C   THEN
+             IERR = -3
+             WRITE (*,9003) JLENIN
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 18-20 , NUMBER OF LOGICALS.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENLG,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENLG.GT.ILENLG)
+     C   THEN
+             IERR = -3
+             WRITE (*,9002) JLENLG
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 21-23 , NUMBER OF RESERVED OCTETS.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),IRSERV,IOFF,24)
+      CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 24-32 ARE RESERVED
+C***
+C
+      CALL OFFSET (IOFF,9,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 33- ,GET FLOATING POINT NUMBERS AND CONVERT.
+C***
+C
+  250 CONTINUE
+C
+      IF (JLENFP.NE.0)
+     C   THEN
+C
+             DO 300 I=1,JLENFP
+                CALL GBYTE (IPSCOD(IWORD),IEXP,IOFF,8)
+                CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+                CALL GBYTE (IPSCOD(IWORD),IMANT,IOFF,24)
+                CALL OFFSET (IOFF,1,IWORD,24,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+                CALL DECFP (FPDATA(I),IEXP,IMANT)
+  300        CONTINUE
+C
+         ENDIF
+C
+C     NO CHARACTER DATA IN OLD BUDGET VALUE RECORDS.
+C
+      IF (IOLDBV.EQ.1) GO TO 550
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET INTEGER VALUES.
+C***
+C
+  350 CONTINUE
+C
+      IF (JLENIN.NE.0)
+     C   THEN
+C
+C            SET UP MASK FOR NEGATIVE NUMBERS
+C
+             NEGSIN = 2 ** (IBITS-1)
+C
+C            MAXIMUM SIZE INTEGER IN GIVEN FIELD WIDTH.
+C
+             MAXINT = NEGSIN - 1
+C
+             DO 400 I=1,JLENIN
+                CALL GBYTE (IPSCOD(IWORD),KTEMP,IOFF,IBITS)
+                CALL OFFSET (IOFF,1,IWORD,IBITS,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+C
+C               HANDLE NEGATIVE NUMBERS
+C
+                IF (KTEMP.GT.MAXINT)
+     C             THEN
+                       KTEMP = KTEMP - NEGSIN
+                       KTEMP = - KTEMP
+                   ENDIF
+C
+                INDATA(I) = KTEMP
+  400        CONTINUE
+C
+         ENDIF
+C
+C
+C     FOR OLDER BUDGET VALUES OUR LAST STOP IS FOR FLOATING POINT
+C     VALUES.
+C
+      IF (IOLDBV.EQ.1) GO TO 250
+C
+C
+C
+C***
+C*    GET LOGICALS AND CONVERT.
+C***
+C
+  450 CONTINUE
+C
+      IF (JLENLG.NE.0)
+     C   THEN
+C
+             DO 500 I=1,JLENLG
+                CALL GBYTE (IPSCOD(IWORD),KTEMP,IOFF,8)
+                CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+C
+                LGDATA(I) = .FALSE.
+                IF (KTEMP.EQ.1) LGDATA(I) = .TRUE.
+  500        CONTINUE
+C
+         ENDIF
+C
+C
+C     FOR OLD BUDGET VALUE VERSION WE JUMP AGAIN.
+C     NEXT STOP ON TOUR IS FOR INTEGER VALUES.
+C
+      IF (IOLDBV.EQ.1) GO TO 350
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET CHARACTER DATA.
+C***
+C
+      IF (JLENCH.NE.0)
+     C   THEN
+             DO 530 I=1,JLENCH
+                CALL GBYTE (IPSCOD(IWORD),KTEMP,IOFF,8)
+                CALL OFFSET (IOFF,1,IWORD,8,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+                DO 525 J=1,NCHAR
+                   IF (KTEMP.EQ.IASCII(J))
+     C                THEN
+                          CHDATA(I:I) = CHAR(J)
+                          GO TO 530
+                      ENDIF
+  525           CONTINUE
+                IERR = -6
+                WRITE (*,9016)
+ 9016           FORMAT (1H ,'DECOPS : Character data contains other ',
+     C                 'than _ - . , letters, figures or spaces.')
+                RETURN
+  530       CONTINUE
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    RESERVED BYTES IN DATA BLOCK.
+C***
+C
+      CALL OFFSET (IOFF,IRSERV,IWORD,8,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    SKIP ANY ZERO FILL AT END OF DATA BLOCK.
+C***
+C
+  550 CONTINUE
+C
+      L = (IWORD-IPW) * NBIT + IOFF -IPB
+      L = LBIN * 8 - L
+      IF (L.NE.0)
+     C    THEN
+              CALL OFFSET (IOFF,1,IWORD,L,NBIT,ILENPS,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C     CHECK 7 7 7 7 AT END OF CODED DATA.
+C
+C
+      CALL GBYTES (IPSCOD(IWORD),IBLOCK(1),IOFF,8,0,4)
+C
+C     55 IS THE VALUE OF ASCII CHARACTER '7'
+C
+      DO 600 I=1,4
+         IF (IBLOCK(I).NE.55) IERR = 1
+  600 CONTINUE
+C
+      IF (IERR.EQ.1) WRITE (*,*) ' NO 7777 GROUP FOUND '
+C
+C
+C
+C     SET NUMBER OF VALUES NEGATIVE, IF MISSING DATA VALUES.
+C
+      IF (IMISS.GE.8)
+     C   THEN
+             JLENCH = -JLENCH
+             IMISS  =  IMISS - 8
+         ENDIF
+C
+      IF (IMISS.GE.4)
+     C   THEN
+             JLENFP = -JLENFP
+             IMISS  =  IMISS - 4
+         ENDIF
+C
+      IF (IMISS.GE.2)
+     C   THEN
+             JLENIN = -JLENIN
+             IMISS  =  IMISS - 2
+         ENDIF
+C
+      IF (IMISS.EQ.1) JLENLG = -JLENLG
+C
+C
+      RETURN
+C
+ 9001 FORMAT (1H ,'DECOPS : Target real array must be at least ',
+     C             I10,' words long.')
+C
+ 9002 FORMAT (1H ,'DECOPS : Target logical array must be at least ',
+     C             I10,' words long.')
+C
+ 9003 FORMAT (1H ,'DECOPS : Target integer array must be at least ',
+     C             I10,' words long.')
+C
+ 9004 FORMAT (1H ,'DECOPS : Target character string must be at least ',
+     C             I10,' characters long.')
+C
+C
+      END
diff --git a/gribex/decops2.F b/gribex/decops2.F
new file mode 100755
index 0000000..1e43aec
--- /dev/null
+++ b/gribex/decops2.F
@@ -0,0 +1,891 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DECOPS2(NAME,CHDATA,ILENCH,FPDATA,ILENFP,INDATA,ILENIN,
+     C                   NBYTE,LGDATA,ILENLG,IB1PAR,IPSCOD,ILENPS,
+     C                   JLENCH,JLENFP,JLENIN,JLENLG,IRSERV,NBIT,IWORD,
+     C                   IERR )
+C
+C---->
+C*
+C*     NAME     : DECOPS2
+C*
+C*     FUNCTION : DECODE PSEUDO-GRIB CODED DATA.
+C*
+C*     INPUT    : NBIT     - NUMBER OF BITS IN COMPUTER WORD
+C*
+C*                IPSCOD   - INTEGER ARRAY OF DATA IN PSEUDO-GRIB CODE.
+C*                ILENPS   - LENGTH OF ARRAY IPSCOD.
+C*
+C*                CHDATA   - CHARACTER VARIABLE TO RECEIVE DECODED
+C*                           CHARACTER DATA.
+C*                ILENCH   - LENGTH OF THIS VARIABLE
+C*
+C*                FPDATA   - REAL ARRAY TO RECEIVE DECODED F.P. VALUES.
+C*                ILENFP   - LENGTH OF THIS ARRAY.
+C*
+C*                INDATA   - INTEGER ARRAY TO RECEIVE DECODED INTEGERS
+C*                ILENIN   - LENGTH OF THIS ARRAY.
+C*
+C*                LGDATA   - LOGICAL ARRAY TO RECEIVE DECODED LOGICALS
+C*                ILENLG   - LENGTH OF THIS ARRAY.
+C*
+C*                          IF ANY LENGTH (ILENCH,-FP,-IN,-LG) IS SET
+C*                          TO 1, ONLY BLOCK 0 AND BLOCK 1 ARE DECODED.
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) TO RECEIVE
+C*                          DATA DEFINITION INFORMATION.
+C*
+C*
+C*     OUTPUT   : PARAMETER FROM BLOCK 0
+C*                ----------------------
+C*
+C*                NAME    - CHARACTER VARIABLE, 4 LETTERS OF CODE NAME.
+C*
+C*
+C*                PARAMETERS FROM BLOCK 1 , PRODUCT DEFINITION BLOCK.
+C*                --------------------------------------------------
+C*
+C*                IB1PAR  - INTEGER ARRAY (DIMENSION 18) OF DATA
+C*                          DEFINITION INFORMATION.
+C*
+C*                WORD      CONTENTS
+C*                ----      --------
+C*                  1       ORIGINATING CENTRE IDENTIFIER.
+C*                  2       MODEL IDENTIFICATION.
+C*                  3       GRID DEFINITION.
+C*                  4       FLAG ( CODE TABLE 1)
+C*                  5       PARAMETER IDENTIFIER ( CODE TABLE 2 ).
+C*                  6       TYPE OF LEVEL (CODE TABLE 3).
+C*                 7-8      VALUE(S) OF LEVELS (CODE TABLE 3).
+C*                  9       YEAR OF DATA
+C*                 10       MONTH OF DATA
+C*                 11       DAY OF DATA
+C*                 12       HOUR OF DATA
+C*                 13       MINUTE OF DATA
+C*                 14       TIME UNIT (CODE TABLE 4).
+C*                 15       TIME RANGE ONE
+C*                 16       TIME RANGE TWO
+C*                 17       TIME RANGE FLAG (CODE TABLE 5).
+C*                 18       NUMBER AVERAGED.
+C*
+C*                          VALUE(S) OF LEVEL CAN OCCUPY 2 WORDS..
+C*                          FOR A LAYER THE FIRST WORD DEFINES THE TOP
+C*                          AND THE SECOND THE BOTTOM OF THE LAYER.
+C*                          FOR A SINGLE LEVEL, ONLY THE FIRST WORD IS
+C*                          USED.
+C*
+C*
+C*
+C*                PARAMETERS FROM BLOCK 4 , BINARY DATA BLOCK.
+C*                -------------------------------------------
+C*
+C*                CHDATA   - UNPACKED CHARACTER DATA
+C*                JLENCH   - NUMBER OF CHARACTERS. NEGATIVE IF
+C*                           MISSING DATA CODED.
+C*
+C*                FPDATA  - ARRAY OF FLOATING POINT VALUES.
+C*                JLENFP  - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENFP IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                INDATA  - ARRAY OF INTEGER VALUES.
+C*                JLENIN  - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENIN IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                LGDATA  - ARRAY OF LOGICAL VALUES.
+C*                JLENLG  - NUMBER OF VALUES IN THIS ARRAY.
+C*                          JLENLG IS NEGATIVE IF MISSING DATA CODED
+C*
+C*                NBYTE   - NUMBER OF BYTES FOR INTEGER VALUES.
+C*
+C*                IRSERV  - NUMBER OF BYTES IN DATA BLOCK RESERVED
+C*                          FOR FUTURE USE.
+C*
+C*
+C*                OTHER PARAMETERS.
+C*                ----------------
+C*
+C*                IWORD   - NUMBER OF WORDS DECODED.
+C*
+C*                IERR    - ERROR INDICATOR.
+C*
+C*                          0, NO ERROR.
+C*
+C*                         -2, INPUT ARRAY HOLDS FEWER CODED VALUES
+C*                             THAN EXPECTED.
+C*                         -3, OUTPUT ARRAY/VARIABLE TOO SMALL TO HOLD
+C*                             DECODED DATA VALUES.
+C*                         -4, CURRENTLY UNDEFINED OPTION SELECTED.
+C*
+C*                          1, NO BLOCK 5 FOUND.
+C*
+C*    GENERAL : DECOPS2 CALLS GBYTE
+C*                            GBYTES
+C*                            OFFSET2
+C*                            DECFP
+C*
+C*    AUTHOR   : J.HENNESSY  23.01.86
+C*
+C*    MODIFIED : J.HENNESSY  06.06.86
+C*                    "      21.08.86
+C*
+C*               J.Hennessy  17.09.90
+C*               Lower case letters as well as the characters
+C*               _ - . , added.
+C*
+C*               J.D.Chambers September 2001
+C*               Change calls to OFFSET2 from OFFSET
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+#include "grprs.h"
+C
+C
+      PARAMETER (NCHAR=67)
+C
+C
+      LOGICAL     LGDATA
+      CHARACTER*4 NAME
+      CHARACTER*1 CHAR
+      CHARACTER*(*) CHDATA
+C
+C
+C
+      DIMENSION FPDATA(*),INDATA(*),LGDATA(*)
+      DIMENSION IPSCOD(ILENPS),IBLOCK(24),IB1PAR(18)
+      DIMENSION IASCII(NCHAR)
+      DIMENSION CHAR(NCHAR)
+C
+C
+      DATA IASCII /65 ,66 ,67 ,68 ,69 ,70 ,71 ,72 ,73 ,74 ,75 ,76 ,77 ,
+     C             78 ,79 ,80 ,81 ,82 ,83 ,84 ,85 ,86 ,87 ,88 ,89 ,90 ,
+     C             48 ,49 ,50 ,51 ,52 ,53 ,54 ,55 ,56 ,57 ,32 ,
+     C             97 ,98 ,99 ,100,101,102,103,104,105,106,107,108,109,
+     C             110,111,112,113,114,115,116,117,118,119,120,121,122,
+     C             95 ,46 ,44 , 45  /
+C
+      DATA CHAR   /'A','B','C','D','E','F','G','H','I','J','K','L','M',
+     C             'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+     C             '0','1','2','3','4','5','6','7','8','9',' ',
+     C             'a','b','c','d','e','f','g','h','i','j','k','l','m',
+     C             'n','o','p','q','r','s','t','u','v','w','x','y','z',
+     C              '_','.',',','-' /
+C
+C
+C
+C
+C
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 0 - INDICATOR BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT 4 OCTETS CONTAINING ASCII NAME.
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      NVAL  = 4
+C
+      CALL GBYTES (IPSCOD(1),IBLOCK(1),0,IBYTE,0,NVAL)
+      CALL OFFSET2 (IOFF,32,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      DO 100 I=1,36
+         IF (IBLOCK(1).EQ.IASCII(I)) NAME(1:1) = CHAR(I)
+         IF (IBLOCK(2).EQ.IASCII(I)) NAME(2:2) = CHAR(I)
+         IF (IBLOCK(3).EQ.IASCII(I)) NAME(3:3) = CHAR(I)
+         IF (IBLOCK(4).EQ.IASCII(I)) NAME(4:4) = CHAR(I)
+  100 CONTINUE
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 1 - PRODUCT DEFINITION BLOCK.
+C*
+C********************************************************************
+C
+C
+C     EXTRACT FIRST 4 OCTETS OF BLOCK 1.
+C
+      NVAL  = 4
+C
+      CALL GBYTES (IPSCOD(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET2 (IOFF,32,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     IF THESE OCTETS DO NOT CONTAIN 0, 0, 24 AND 0 RESPECTIVELY
+C     THEN THE DATA IS IN THE OLD VERSION OF THE CODE.
+C
+      IF (IBLOCK(1).EQ.0.AND.IBLOCK(2).EQ.0.AND.IBLOCK(3).EQ.24.
+     C    AND.IBLOCK(4).EQ.0)
+     C      THEN
+                ISNEW = 1
+                NVAL = 20
+            ELSE
+                ISNEW = 0
+                NVAL = 16
+            ENDIF
+C
+C     EXTRACT NEXT 16 OR 20 OCTETS OF BLOCK 1 - NUMBER DEPENDS
+C     ON VERSION OF CODE.
+C
+      CALL GBYTES (IPSCOD(IWORD),IBLOCK(5),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET2 (IOFF,NVAL*IBYTE,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     TRANSFER PRODUCT DEFINITION INFORMATION TO OUTPUT ARRAY.
+C     EXCEPT FOR NUMBER AVERAGED.
+C
+      DO 200 I=1,17
+         IB1PAR(I) = IBLOCK(I+4*ISNEW)
+  200 CONTINUE
+C
+C     Fixup the date, allowing year in YYYY format
+C
+      IB1PAR(9) = IBLOCK(13) + 1900
+C
+C
+C     NUMBER AVERAGED OCCUPIES 2 OCTETS.
+C
+      IB1PAR(18) = IBLOCK(18+4*ISNEW) * 256 + IBLOCK(19+4*ISNEW)
+C
+C
+C
+C
+C
+C***
+C*    DESCRIPTION OF LEVEL OR LAYER ( CODE TABLE 3 ).
+C***
+C
+C     CERTAIN LEVEL TYPES REQUIRE THAT THE DESCRIPTION OCCUPY
+C     BOTH 8 BIT FIELDS. PUT SINGLE VALUE IN FIRST LEVEL WORD.
+C
+      KTEMP = 32 + (ISNEW*224)
+      IF ((IB1PAR(6).EQ. 20).OR.
+     X    (IB1PAR(6).EQ.100).OR.
+     X    (IB1PAR(6).EQ.103).OR.
+     X    (IB1PAR(6).EQ.105).OR.
+     X    (IB1PAR(6).EQ.107).OR.
+     X    (IB1PAR(6).EQ.109).OR.
+     X    (IB1PAR(6).EQ.111).OR.
+     X    (IB1PAR(6).EQ.113).OR.
+     X    (IB1PAR(6).EQ.115).OR.
+     X    (IB1PAR(6).EQ.117).OR.
+     X    (IB1PAR(6).EQ.125).OR.
+     X    (IB1PAR(6).EQ.160) ) THEN
+              IB1PAR(7) = IB1PAR(7) * KTEMP + IB1PAR(8)
+              IB1PAR(8) = 0
+          ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    TIME RANGE.
+C***
+C
+C     ONE TIME RANGE CAN OCCUPY TWO OCTETS.
+C
+      IF (IB1PAR(17).EQ.10)
+     C   THEN
+             IB1PAR(15) = IB1PAR(15) * KTEMP + IB1PAR(16)
+             IB1PAR(16) = 0
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    CHECK IF DECODING OF ONLY BLOCKS 0 AND 1 HAS BEEN REQUESTED.
+C***
+C
+      IF (ILENFP.EQ.1.OR.ILENIN.EQ.1.OR.ILENLG.EQ.1) RETURN
+      IF (ILENCH.EQ.1) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 4 - BINARY DATA BLOCK.
+C*
+C********************************************************************
+C
+C
+C
+C***
+C*    GET LENGTH OF BINARY DATA BLOCK.
+C***
+C
+C
+      IPW = IWORD
+      IPB = IOFF
+C
+      CALL GBYTE (IPSCOD(IWORD),LBIN,IOFF,24)
+      CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 4 IS RESERVED.
+C*    (IT IS USED IN OLDER VERSIONS OF BUDGET VALUE RECORDS AND
+C*    IT GIVES THE STARTING OCTET ADDRESS OF LOGICAL VALUES, A
+C*    FIXED VALUE OF 34 OR 38)
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),ISTLG,IOFF,8)
+      IOLDBV = 0
+      IF (ISTLG.EQ.34.OR.ISTLG.EQ.38) IOLDBV = 1
+C
+C
+      CALL OFFSET2 (IOFF,8,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 5 - MISSING DATA FLAG. (IN OLDER VERSIONS OF BUDGET VALUE
+C*    RECORD IT GIVES STARTING OCTET ADDRESS OF INTEGER VALUES)
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),IMISS,IOFF,8)
+      CALL OFFSET2 (IOFF,8,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (IOLDBV.EQ.1)
+     C   THEN
+             ISTIN = IMISS
+             IMISS = 0
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 6-7 IN OLDER VERSIONS OF BUDGET VALUE RECORDS GIVE
+C*    STARTING BYTE ADDRESS OF FLOATING POINT VALUES SECTION.
+C*    OCTETS 8-9 GIVING THE LENGTH OF THE FLOATING POINT DATA
+C*    SECTION IN OCTETS.
+C***
+C
+      IF (IOLDBV.EQ.1)
+     C   THEN
+             CALL GBYTE (IPSCOD(IWORD),ISTFP,IOFF,16)
+             CALL OFFSET2 (IOFF,16,IWORD,NBIT,ILENPS,IERR)
+             IF (IERR.NE.0) RETURN
+C
+             CALL GBYTE (IPSCOD(IWORD),LENFP,IOFF,16)
+             CALL OFFSET2 (IOFF,16,IWORD,NBIT,ILENPS,IERR)
+             IF (IERR.NE.0) RETURN
+C
+C            NUMBER OF FLOATING POINT VALUES.
+C            4 BYTES PER FLOATING POINT NUMBER.
+C
+             JLENFP = LENFP / 4
+C
+C            NUMBER OF LOGICAL VALUES.
+C
+             JLENLG = ISTIN - ISTLG
+C
+C            NUMBER OF INTEGER VALUES.
+C            2 OCTETS PER INTEGER.
+C
+             NBYTE = 2
+             IBITS = NBYTE * 8
+             JLENIN = ( ISTFP - ISTIN ) / NBYTE
+C
+C            NO CHARACTER DATA IN OLD FORMAT.
+C
+             JLENCH = 0
+C
+C            CHECK NUMBERS OF DATA ITEMS AGAINST DIMENSIONS
+C            OF TARGET ARRAYS.
+C
+             IF (JLENFP.GT.ILENFP)
+     C          THEN
+                    IERR = -3
+                    WRITE(GRPRSM,9001) JLENFP
+                ENDIF
+C
+             IF (JLENLG.GT.ILENLG)
+     C          THEN
+                    IERR = -3
+                    WRITE(GRPRSM,9002) JLENLG
+                ENDIF
+C
+             IF (JLENIN.GT.ILENIN)
+     C          THEN
+                    IERR = -3
+                    WRITE(GRPRSM,9003) JLENIN
+                ENDIF
+C
+             IF (IERR.NE.0) RETURN
+C
+C            NOW WE GO AROUND THE HOUSES AS THIS OLD DATA
+C            HAS THE DIFFERENT DATA TYPES STORED IN A DIFFERENT
+C            ORDER.
+C
+C            LOGICAL VARIABLES FIRST.
+C
+             GO TO 450
+C
+         ENDIF
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 6 - NUMBER OF BYTES PER INTEGER.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),NBYTE,IOFF,8)
+      CALL OFFSET2 (IOFF,8,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IBITS = NBYTE * 8
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 7-8 ARE RESERVED.
+C***
+C
+      CALL OFFSET2 (IOFF,16,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 9-11 - NUMBER OF CHARACTERS IN CHARACTER SECTION.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENCH,IOFF,24)
+      CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENCH.GT.ILENCH)
+     C   THEN
+             IERR = -3
+             WRITE(GRPRSM,9004) JLENCH
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 12-14 , NUMBER OF FLOATING POINT VALUES.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENFP,IOFF,24)
+      CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENFP.GT.ILENFP)
+     C   THEN
+             IERR = -3
+             WRITE(GRPRSM,9001) JLENFP
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 15-17 , NUMBER OF INTEGER VALUES.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENIN,IOFF,24)
+      CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENIN.GT.ILENIN)
+     C   THEN
+             IERR = -3
+             WRITE(GRPRSM,9003) JLENIN
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 18-20 , NUMBER OF LOGICALS.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),JLENLG,IOFF,24)
+      CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+      IF (JLENLG.GT.ILENLG)
+     C   THEN
+             IERR = -3
+             WRITE(GRPRSM,9002) JLENLG
+             RETURN
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 21-23 , NUMBER OF RESERVED OCTETS.
+C***
+C
+      CALL GBYTE (IPSCOD(IWORD),IRSERV,IOFF,24)
+      CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTETS 24-32 ARE RESERVED
+C***
+C
+      CALL OFFSET2 (IOFF,72,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    OCTET 33- ,GET FLOATING POINT NUMBERS AND CONVERT.
+C***
+C
+  250 CONTINUE
+C
+      IF (JLENFP.NE.0)
+     C   THEN
+C
+             DO 300 I=1,JLENFP
+                CALL GBYTE (IPSCOD(IWORD),IEXP,IOFF,8)
+                CALL OFFSET2 (IOFF,8,IWORD,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+                CALL GBYTE (IPSCOD(IWORD),IMANT,IOFF,24)
+                CALL OFFSET2 (IOFF,24,IWORD,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+                CALL DECFP (FPDATA(I),IEXP,IMANT)
+  300        CONTINUE
+C
+         ENDIF
+C
+C     NO CHARACTER DATA IN OLD BUDGET VALUE RECORDS.
+C
+      IF (IOLDBV.EQ.1) GO TO 550
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET INTEGER VALUES.
+C***
+C
+  350 CONTINUE
+C
+      IF (JLENIN.NE.0)
+     C   THEN
+C
+C            SET UP MASK FOR NEGATIVE NUMBERS
+C
+             NEGSIN = 2 ** (IBITS-1)
+C
+C            MAXIMUM SIZE INTEGER IN GIVEN FIELD WIDTH.
+C
+             MAXINT = NEGSIN - 1
+C
+             DO 400 I=1,JLENIN
+                CALL GBYTE (IPSCOD(IWORD),KTEMP,IOFF,IBITS)
+                CALL OFFSET2 (IOFF,IBITS,IWORD,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+C
+C               HANDLE NEGATIVE NUMBERS
+C
+                IF (KTEMP.GT.MAXINT)
+     C             THEN
+                       KTEMP = KTEMP - NEGSIN
+                       KTEMP = - KTEMP
+                   ENDIF
+                IF (KTEMP.LT.0) THEN
+                   KTEMP=KTEMP+MAXINT
+                   KTEMP=-(KTEMP+1)
+                ENDIF
+C
+                INDATA(I) = KTEMP
+  400        CONTINUE
+C
+         ENDIF
+C
+C
+C     FOR OLDER BUDGET VALUES OUR LAST STOP IS FOR FLOATING POINT
+C     VALUES.
+C
+      IF (IOLDBV.EQ.1) GO TO 250
+C
+C
+C
+C***
+C*    GET LOGICALS AND CONVERT.
+C***
+C
+  450 CONTINUE
+C
+      IF (JLENLG.NE.0)
+     C   THEN
+C
+             DO 500 I=1,JLENLG
+                CALL GBYTE (IPSCOD(IWORD),KTEMP,IOFF,8)
+                CALL OFFSET2 (IOFF,8,IWORD,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+C
+                LGDATA(I) = .FALSE.
+                IF (KTEMP.EQ.1) LGDATA(I) = .TRUE.
+  500        CONTINUE
+C
+         ENDIF
+C
+C
+C     FOR OLD BUDGET VALUE VERSION WE JUMP AGAIN.
+C     NEXT STOP ON TOUR IS FOR INTEGER VALUES.
+C
+      IF (IOLDBV.EQ.1) GO TO 350
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    GET CHARACTER DATA.
+C***
+C
+      IF (JLENCH.NE.0)
+     C   THEN
+             DO 530 I=1,JLENCH
+                CALL GBYTE (IPSCOD(IWORD),KTEMP,IOFF,8)
+                CALL OFFSET2 (IOFF,8,IWORD,NBIT,ILENPS,IERR)
+                IF (IERR.NE.0) RETURN
+                DO 525 J=1,NCHAR
+                   IF (KTEMP.EQ.IASCII(J))
+     C                THEN
+                          CHDATA(I:I) = CHAR(J)
+                          GO TO 530
+                      ENDIF
+  525           CONTINUE
+                IERR = -6
+                WRITE(GRPRSM,9016)
+ 9016           FORMAT (1H ,'DECOPS2: Character data contains other ',
+     C                 'than _ - . , letters, figures or spaces.')
+                RETURN
+  530       CONTINUE
+         ENDIF
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    RESERVED BYTES IN DATA BLOCK.
+C***
+C
+      CALL OFFSET2 (IOFF,IRSERV*8,IWORD,NBIT,ILENPS,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C***
+C*    SKIP ANY ZERO FILL AT END OF DATA BLOCK.
+C***
+C
+  550 CONTINUE
+C
+      L = (IWORD-IPW) * NBIT + IOFF -IPB
+      L = LBIN * 8 - L
+      IF (L.NE.0)
+     C    THEN
+              CALL OFFSET2 (IOFF,L,IWORD,NBIT,ILENPS,IERR)
+              IF (IERR.NE.0) RETURN
+          ENDIF
+C
+C
+C
+C
+C********************************************************************
+C*
+C*    BLOCK 5 - END BLOCK.
+C*
+C********************************************************************
+C
+C     CHECK 7 7 7 7 AT END OF CODED DATA.
+C
+C
+      CALL GBYTES (IPSCOD(IWORD),IBLOCK(1),IOFF,8,0,4)
+C
+C     55 IS THE VALUE OF ASCII CHARACTER '7'
+C
+      DO 600 I=1,4
+         IF (IBLOCK(I).NE.55) IERR = 1
+  600 CONTINUE
+C
+      IF (IERR.EQ.1) WRITE(GRPRSM,*) ' NO 7777 GROUP FOUND '
+C
+C
+C
+C     SET NUMBER OF VALUES NEGATIVE, IF MISSING DATA VALUES.
+C
+      IF (IMISS.GE.8)
+     C   THEN
+             JLENCH = -JLENCH
+             IMISS  =  IMISS - 8
+         ENDIF
+C
+      IF (IMISS.GE.4)
+     C   THEN
+             JLENFP = -JLENFP
+             IMISS  =  IMISS - 4
+         ENDIF
+C
+      IF (IMISS.GE.2)
+     C   THEN
+             JLENIN = -JLENIN
+             IMISS  =  IMISS - 2
+         ENDIF
+C
+      IF (IMISS.EQ.1) JLENLG = -JLENLG
+C
+C
+      RETURN
+C
+ 9001 FORMAT (1H ,'DECOPS2: Target real array must be at least ',
+     C             I10,' words long.')
+C
+ 9002 FORMAT (1H ,'DECOPS2: Target logical array must be at least ',
+     C             I10,' words long.')
+C
+ 9003 FORMAT (1H ,'DECOPS2: Target integer array must be at least ',
+     C             I10,' words long.')
+C
+ 9004 FORMAT (1H ,'DECOPS2: Target character string must be at least ',
+     C             I10,' characters long.')
+C
+C
+      END
diff --git a/gribex/delsp.F b/gribex/delsp.F
new file mode 100755
index 0000000..ce81692
--- /dev/null
+++ b/gribex/delsp.F
@@ -0,0 +1,306 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DELSP (HCHAR)
+C
+C---->
+C**** DELSP - Delete spaces around valid MARS directive separators.
+C
+C     Purpose.
+C     --------
+C
+C           Removes any spaces before and after any characters
+C           encountered in input string, which are valid separators
+C           in a MARS command line. These are / , = " .
+C           Any spaces between minus sign and number are also removed.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL DELSP (HCHAR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               HCHAR      - Character string to be modified.
+C
+C               Output parameters.
+C               ------------------
+C
+C               HCHAR      - Modified character string.
+C
+C     Method.
+C     -------
+C
+C           Uses index function to locate any spaces to be
+C           removed.
+C
+C     Externals.
+C     ----------
+C
+C           RTB
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Program contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      01.09:86.
+C
+C     Modifications
+C     --------------
+C
+C           J. Hennessy      ECMWF      30.03.87
+C           Prevent looping when string ends with a separator.
+C
+C           J. Hennessy      ECMWF      18.07.91
+C           Other separators added.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT  NONE
+C
+      CHARACTER*(*)      HCHAR
+C
+      INTEGER            I
+      INTEGER            IEND
+      INTEGER            RTB
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Remove any spaces before separators.
+C     ----------------------------------------------------------------
+C
+c--      WRITE (*,9000)
+c--      WRITE (*,9002) HCHAR
+C
+  100 CONTINUE
+C
+      I = INDEX (HCHAR(1:),' /')
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I:) = HCHAR(I+1:)
+             GO TO 100
+         ENDIF
+C
+  110 CONTINUE
+C
+      I = INDEX (HCHAR(1:),' ,')
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I:) = HCHAR(I+1:)
+             GO TO 110
+         ENDIF
+C
+  120 CONTINUE
+C
+      I = INDEX (HCHAR(1:),' =')
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I:) = HCHAR(I+1:)
+             GO TO 120
+         ENDIF
+C
+  130 CONTINUE
+C
+      I = INDEX (HCHAR(1:),' "')
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I:) = HCHAR(I+1:)
+             GO TO 130
+         ENDIF
+C
+  140 CONTINUE
+C
+      I = INDEX (HCHAR(1:),' .')
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I:) = HCHAR(I+1:)
+             GO TO 140
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Remove any spaces after separators.
+C     ----------------------------------------------------------------
+C
+      iend = rtb (hchar)
+  200 CONTINUE
+C
+      I = INDEX (HCHAR(1:),'/ ')
+C
+C*    Go to section 9 if string ends '/ '.
+C
+c++      IEND = RTB (HCHAR)
+      IF (IEND.EQ.I) GO TO 210
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I+1:) = HCHAR(I+2:)
+             iend = iend - 1
+             GO TO 200
+         ENDIF
+C
+  210 CONTINUE
+C
+      I = INDEX (HCHAR(1:),', ')
+C
+C*    Go to section 9 if string ends ', '.
+C
+      IEND = RTB (HCHAR)
+      IF (IEND.EQ.I) GO TO 220
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I+1:) = HCHAR(I+2:)
+             GO TO 210
+         ENDIF
+C
+  220 CONTINUE
+C
+      I = INDEX (HCHAR(1:),'= ')
+C
+C*    Go to section 9 if string ends '= '.
+C
+      IEND = RTB (HCHAR)
+      IF (IEND.EQ.I) GO TO 230
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I+1:) = HCHAR(I+2:)
+             GO TO 220
+         ENDIF
+C
+  230 CONTINUE
+C
+      I = INDEX (HCHAR(1:),'" ')
+C
+C*    Go to section 9 if string ends '" '.
+C
+      IEND = RTB (HCHAR)
+      IF (IEND.EQ.I) GO TO 240
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I+1:) = HCHAR(I+2:)
+             GO TO 230
+         ENDIF
+C
+  240 CONTINUE
+C
+      I = INDEX (HCHAR(1:),'. ')
+C
+C*    Go to section 9 if string ends '. '.
+C
+      IEND = RTB (HCHAR)
+      IF (IEND.EQ.I) GO TO 250
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I+1:) = HCHAR(I+2:)
+             GO TO 240
+         ENDIF
+C
+  250 CONTINUE
+C
+      I = INDEX (HCHAR(1:),'- ')
+C
+C*    Go to section 9 if string ends '- '.
+C
+      IEND = RTB (HCHAR)
+      IF (IEND.EQ.I) GO TO 260
+C
+      IF (I.NE.0)
+     C   THEN
+             HCHAR(I+1:) = HCHAR(I+2:)
+             GO TO 250
+         ENDIF
+C
+  260 CONTINUE
+C
+c--      WRITE (*,9001)
+c--      WRITE (*,9002) HCHAR
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9000 FORMAT (1H ,'DELSP : Input string :-')
+C
+ 9001 FORMAT (1H ,'DELSP : Output string :-')
+C
+ 9002 FORMAT (1H ,A)
+C
+      END
diff --git a/gribex/dggsec2.F b/gribex/dggsec2.F
new file mode 100755
index 0000000..90c6c10
--- /dev/null
+++ b/gribex/dggsec2.F
@@ -0,0 +1,272 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DGGSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,
+     X                         IMISNG)
+C
+C---->
+C**** DGGSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for gaussian grid fields..
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DGGSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     IMISNG  - Missing data value to be used.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DGGSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+C     For quasi-regular grids Ni is set to all 1 bits, as
+C     the number of points is different on different parallels.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DGGSEC2: number of pts along parallel or meridian.'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Change 1 bits to missing data value.
+C
+      IF( KSEC2(2).EQ.JP16SET ) KSEC2(2) = IMISNG
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DGGSEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      CALL DSGNBT( KSEC2(4), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(5), ILALO(2), 24, IRET)
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DGGSEC2: components flag.'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     All flag fields are already set to 0, so
+C
+      IF( IRESOL.EQ.0 ) GOTO 210
+C
+C     Fix up for flag which was different in Experimental edition.
+      IF( KSEC0(2).EQ.-1.AND.(IRESOL.EQ.1.OR.IRESOL.EQ.3))
+     X  IRESOL = 128
+C
+C     Set Resolution flag.
+      IF( IRESOL.GE.128) THEN
+        KSEC2(6) = 128
+        IRESOL   = IRESOL - 128
+      ENDIF
+C
+C     Set earth flag.
+      IF( IRESOL.GE.64) THEN
+        KSEC2(18) = 64
+        IRESOL    = IRESOL - 64
+      ENDIF
+C
+  210 CONTINUE
+C
+C     Set components flag.
+C
+      KSEC2(19) = IRESOL
+C
+C     Octets 18 - 20 : La2 - latitude of last grid point.
+C     Octets 21 - 23 : Lo2 - longitude of last grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DGGSEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      CALL DSGNBT( KSEC2(7), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(8), ILALO(2), 24, IRET)
+C
+C
+C     Octets 24 - 25 : Di - i direction increment.
+C     One 16 bit field.
+C
+C     For quasi-regular grids all Di bits are set to 1, as
+C     the increment is different on different parallels.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),1,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DGGSEC2: i direction increment.'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Change 1 bits to missing data value.
+C
+      IF( KSEC2(9).EQ.JP16SET) KSEC2(9) = IMISNG
+C
+C     Octets 26 - 27 : N- number of parallels between a Pole
+C     and the Equator.
+C     One 16 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(10),1,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DGGSEC2: no. of parallels between pole and Equator'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DGGSEC2 = IRET
+        WRITE(GRPRSM,*) 'DGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DGGSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'DGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 32 : Reserved.
+C     Two 16 bit fields.
+C
+C     Skip the 4 octets
+C
+      INSPT = INSPT + 32
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dlasec2.F b/gribex/dlasec2.F
new file mode 100755
index 0000000..9d8e20b
--- /dev/null
+++ b/gribex/dlasec2.F
@@ -0,0 +1,284 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DLASEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C---->
+C**** DLASEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for lambert conformal fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DLASEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DLASEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along X-axis.
+C     Octets 9 - 10 : Nj - number of points along Y-axis.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: number of points along X or Y axis.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If sign bit is 1, value is negative.
+C 
+      CALL DSGNBT( KSEC2(4), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(5), ILALO(2), 24, IRET)
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: components flag.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If all flag fields are already set to 0, bypass.
+C 
+      IF( IRESOL.EQ.0 ) GOTO 515
+C 
+C     Resolution flag is not applicable.
+C 
+      IF( IRESOL.GE.128) THEN
+        KSEC2(6) = 128
+        IRESOL   = IRESOL - 128
+      ENDIF
+C 
+C     Set earth flag.
+C 
+      IF( IRESOL.GE.64) THEN
+        KSEC2(18) = 64
+        IRESOL    = IRESOL - 64
+      ENDIF
+C 
+C     Set components flag.
+C
+      KSEC2(19) = IRESOL
+C 
+  515 CONTINUE
+C
+C     Octets 18 - 20 : LoV - orientation of the grid.
+C     One 24 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),1,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If sign bit is 1, value is negative.
+C 
+      CALL DSGNBT( KSEC2(7), ILALO(1), 24, IRET)
+C
+C     Octets 21 - 23 : Dx - X direction grid length.
+C     Octets 24 - 26 : Dy - Y direction grid length.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: X or Y axis grid length.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 27 : Projection centre flag.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: Projection centre flag.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: scanning mode flags.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental
+C            Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 31 : Latin 1.
+C     Octets 32 - 34 : Latin 2.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: Latin1 or Latin2 of secants points.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If sign bit is 1, value is negative.
+C
+      CALL DSGNBT( KSEC2(14), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(15), ILALO(2), 24, IRET)
+C
+C     Octets 35 - 37 : Latitude of the southern pole.
+C     Octets 38 - 40 : Longitude of the southern pole.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLASEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: latitude/longitude of southern pole.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If sign bit is 1, value is negative.
+C 
+      CALL DSGNBT( KSEC2(20), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(21), ILALO(2), 24, IRET)
+C
+C     Octets 41 - 42 : Reserved.
+C     One 16 bit fields.
+C
+C     Update bit pointer.
+C 
+      INSPT = INSPT + 16
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dllsec2.F b/gribex/dllsec2.F
new file mode 100755
index 0000000..c516b15
--- /dev/null
+++ b/gribex/dllsec2.F
@@ -0,0 +1,275 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DLLSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,
+     X                         IMISNG)
+C
+C---->
+C**** DLLSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DLLSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     IMISNG  - Missing data value to be used.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DLLSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+C     WARNING!!
+C     For quasi-regular grids, it is here assumed that Ni is variable,
+C     i.e. that the number of points along a parallel is variable but
+C     that the number of points along a meridian is fixed.
+C
+C     For quasi-regular grids Ni is set to all 1 bits, as
+C     the number of points is different on different parallels.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DLLSEC2: number of pts along parallel or meridian.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DLLSEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      CALL DSGNBT( KSEC2(4), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(5), ILALO(2), 24, IRET)
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DLLSEC2: components flag.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     All flag fields are already set to 0, so
+C
+      IF( IRESOL.EQ.0 ) GOTO 211
+C
+C     Fix up for flag which was different in Experimental edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.(IRESOL.EQ.1.OR.IRESOL.EQ.3)) IRESOL = 128
+C
+C     Set Resolution flag.
+C
+      IF( IRESOL.GE.128) THEN
+        KSEC2(6) = 128
+        IRESOL   = IRESOL - 128
+      ENDIF
+C
+C     Set earth flag.
+C
+      IF( IRESOL.GE.64) THEN
+          KSEC2(18) = 64
+          IRESOL    = IRESOL - 64
+      ENDIF
+C
+C     Set components flag.
+C
+      KSEC2(19) = IRESOL
+C
+  211 CONTINUE
+C
+C     Octets 18 - 20 : La2 - latitude of last grid point.
+C     Octets 21 - 23 : Lo2 - longitude of last grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DLLSEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      CALL DSGNBT( KSEC2(7), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(8), ILALO(2), 24, IRET)
+C
+C     Octets 24 - 25 : Di - i direction increment.
+C     One 16 bit field.
+C
+C     For quasi-regular grids all Di bits are set to 1, as
+C     the increment is different on different parallels.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),1,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DLLSEC2: i direction increment.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Change 1 bits to missing data value.
+C
+      IF( KSEC2(9).EQ.JP16SET) KSEC2(9) = IMISNG
+C
+C
+C     Octets 26 - 27 : Dj - j direction increment.
+C     One 16 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(10),1,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DLLSEC2: j direction increment.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Change 1 bits to missing data value.
+C
+      IF( KSEC2(10).EQ.JP16SET) KSEC2(10) = IMISNG
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DLLSEC2 = 1
+        WRITE(GRPRSM,*) 'DLLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DLLSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'DLLSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 32 : Reserved.
+C     Two 16 bit fields.
+C
+C     Update bit pointer.
+      INSPT = INSPT + 32
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dmesec2.F b/gribex/dmesec2.F
new file mode 100755
index 0000000..8f8682b
--- /dev/null
+++ b/gribex/dmesec2.F
@@ -0,0 +1,311 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DMESEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,KBITS,
+     X                         KMISNG)
+C
+C---->
+C**** DMESEC2
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for Mercator grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DMESEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,KBITS,KMISNG)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     KBITS   - Number of bits per element in KGRIB.
+C     KMISNG  - Missing data value to be used.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     /GRPRSCM/ for GRPRSM variable.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Extract bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J. Clochard, Meteo France, for ECMWF - October 2000.
+C     (derived from DLLSEC2)
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J. Clochard, June 2008.
+C     Use of GRPRSM instead of standard output in error/debug printouts.
+C     Doctorize all dummy-arguments (K for integers, O for logicals).
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JP16SET, JP24SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+      PARAMETER ( JP24SET = 2**24 - 1 ) 
+C                           ^---> 16777215 = FFFFFF(hex)
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,KBITS,KMISNG
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Global variables
+C
+#include "grprs.h"
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DMESEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+C     WARNING!!
+C     For quasi-regular grids, it is here assumed that Ni is variable,
+C     i.e. that the number of points along a parallel is variable but
+C     that the number of points along a meridian is fixed.
+C
+C     For quasi-regular grids Ni is set to all 1 bits, as
+C     the number of points is different on different parallels.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,KBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting number of pts '
+        WRITE(GRPRSM,*) 'DMESEC2: along parallel or meridian.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO,2,KBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*) 
+     X    'DMESEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      CALL DSGNBT( KSEC2(4), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(5), ILALO(2), 24, IRET)
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,KBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DMESEC2: resolution and components flag.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     All flag fields are already set to 0, so
+C
+      IF( IRESOL.EQ.0 ) GOTO 211
+C
+C     Fix up for flag which was different in Experimental edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.(IRESOL.EQ.1.OR.IRESOL.EQ.3)) IRESOL = 128
+C
+C     Set Resolution flag.
+C
+      IF( IRESOL.GE.128) THEN
+        KSEC2(6) = 128
+        IRESOL   = IRESOL - 128
+      ENDIF
+C
+C     Set earth flag.
+C
+      IF( IRESOL.GE.64) THEN
+          KSEC2(18) = 64
+          IRESOL    = IRESOL - 64
+      ENDIF
+C
+C     Set components flag.
+C
+      KSEC2(19) = IRESOL
+C
+  211 CONTINUE
+C
+C     Octets 18 - 20 : La2 - latitude of last grid point.
+C     Octets 21 - 23 : Lo2 - longitude of last grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO,2,KBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*)
+     X    'DMESEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      CALL DSGNBT( KSEC2(7), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(8), ILALO(2), 24, IRET)
+C
+C     Octets 24 - 26 : Latin - latitude(s) at which the Mercator
+C                      projection cylinder intersects the Earth.
+C     One 24 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO,1,KBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DMESEC2: latitude of intersection.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+      IF( ILALO(1).EQ.JP24SET) THEN
+C
+C     Change 1 bits to missing data value.
+        KSEC2(9) = KMISNG
+      ELSE
+C
+C     Take into account sign bit if any.
+        CALL DSGNBT( KSEC2(9), ILALO(1), 24, IRET)
+      ENDIF
+C
+C     Octet 27 : Reserved. Set to zero.
+C     One 8 bit field.
+C
+      KSEC2(10) = 0
+C
+C     Update bit pointer.
+      INSPT = INSPT + 8
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,KBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DMESEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 31 : Di - i direction increment.
+C     One 24 bit field.
+C
+C     For quasi-regular grids all Di bits are set to 1, as
+C     the increment is different on different parallels.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,KBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DMESEC2: i direction increment.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Change 1 bits to missing data value.
+C
+      IF( KSEC2(13).EQ.JP24SET) KSEC2(13) = KMISNG
+C
+C
+C     Octets 32 - 34 : Dj - j direction increment.
+C     One 24 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(14),1,KBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DMESEC2 = 1
+        WRITE(GRPRSM,*) 'DMESEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DMESEC2: j direction increment.'
+        WRITE(GRPRSM,*) 'DMESEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Change 1 bits to missing data value.
+C
+      IF( KSEC2(14).EQ.JP24SET) KSEC2(14) = KMISNG
+C
+C     Octets 35 - 42 : Reserved.
+C     Four 16 bit fields.
+C
+C     Update bit pointer.
+      INSPT = INSPT + 64
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/docsec2.F b/gribex/docsec2.F
new file mode 100755
index 0000000..5f44ea1
--- /dev/null
+++ b/gribex/docsec2.F
@@ -0,0 +1,157 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DOCSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C---->
+C**** DOCSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for ECMWF ocean fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DOCSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+#include "eocsec2.h"
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER IRET
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DOCSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DOCSEC2 = 1
+        WRITE(GRPRSM,*) 'DOCSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'DOCSEC2: number of pts along first or second axis.'
+        WRITE(GRPRSM,*) 'DOCSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 11 - 27 : Reserved.
+C
+C     Move pointer past reserved octets.
+      INSPT = INSPT + 8*17
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DOCSEC2 = 1
+        WRITE(GRPRSM,*) 'DOCSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'DOCSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'DOCSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 29 - 32 : Reserved.
+C
+C     Move pointer past reserved octets.
+      INSPT = INSPT + 8*4
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dpssec2.F b/gribex/dpssec2.F
new file mode 100755
index 0000000..17f4cce
--- /dev/null
+++ b/gribex/dpssec2.F
@@ -0,0 +1,261 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DPSSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C---->
+C**** DPSSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for polar stereographic fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DPSSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     March 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DPSSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along X-axis.
+C     Octets 9 - 10 : Nj - number of points along Y-axis.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DPSSEC2: number of points along X or Y axis.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*)
+     X    'DPSSEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If sign bit is 1, value is negative.
+C
+      CALL DSGNBT( KSEC2(4), ILALO(1), 24, IRET)
+      CALL DSGNBT( KSEC2(5), ILALO(2), 24, IRET)
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+C     Resolution flag ( KSEC2(6) ) is not applicable.
+C
+      KSEC2(6) = 0
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DPSSEC2: components flag.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     All flag fields are already set to 0, so
+C 
+      IF( IRESOL.EQ.0 ) GOTO 213
+C 
+C     Fix up for flag which was different in Experimental edition.
+C 
+      IF( KSEC0(2).EQ.-1.AND.(IRESOL.EQ.1.OR.IRESOL.EQ.3)) IRESOL = 128
+C 
+C     Resolution flag is not applicable.
+C
+      IF( IRESOL.GE.128 ) IRESOL = IRESOL - 128
+C 
+C     Set earth flag.
+C
+      IF( IRESOL.GE.64 ) THEN
+        KSEC2(18) = 64
+        IRESOL    = IRESOL - 64
+      ENDIF
+C 
+C     Set components flag.
+C
+      KSEC2(19) = IRESOL
+C 
+  213 CONTINUE
+C
+C     CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(6),1,IBITS, 8,'D',IRET)
+C     IF( IRET.NE.0 ) THEN
+C       DPSSEC2 = 1
+C       WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+C       WRITE(GRPRSM,*) 'DPSSEC2: components flag.'
+C       WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+C       GOTO 900
+C     ENDIF
+C
+C     Octets 18 - 20 : LoV - orientation of the grid.
+C     One 24 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),1,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*)
+     X    'DPSSEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     If sign bit is 1, value is negative.
+C
+      CALL DSGNBT( KSEC2(7), ILALO(1), 24, IRET)
+C
+C     Octets 21 - 23 : Dx - X direction grid length.
+C     Octets 24 - 26 : Dy - Y direction grid length.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DPSSEC2: X or Y axis grid length.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 27 : Projection centre flag.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DPSSEC2: Projection centre flag.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DPSSEC2 = 1
+        WRITE(GRPRSM,*) 'DPSSEC2: Error extracting'
+        WRITE(GRPRSM,*) 'DPSSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'DPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 32 : Reserved.
+C     Two 16 bit fields.
+C
+C     Update bit pointer.
+C
+      INSPT = INSPT + 32
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dsect4.F b/gribex/dsect4.F
new file mode 100755
index 0000000..a001625
--- /dev/null
+++ b/gribex/dsect4.F
@@ -0,0 +1,394 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DSECT4( PDATA, KTRUNC, KSEC1, KSEC4,
+     X                         KGRIB, KLENG, KNSPT, KBITS, KPACK)
+C
+C---->
+C**** DSECT4
+C
+C     Purpose.
+C     --------
+C
+C     Decode GRIB section 4 for complex packing of spherical harmonics.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = DSECT4( PDATA, KTRUNC, KSEC1, KSEC4,
+C    X               KGRIB, KLENG, KNSPT, KBITS, KPACK)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PDATA      - Array of floating point values.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KLENG      - Length of GRIB product array
+C     KNSPT      - Bit pointer for next value in GRIB product
+C     KBITS      - Number of bits per computer word.
+C     KPACK      - Number of bits per packed value.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KSEC1      - Array of GRIB section 1 values
+C     KSEC4      - Array of GRIB section 4 values
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product(updated)
+C
+C
+C     Method.
+C     -------
+C
+C                            <subset>|
+C
+C     Given numbers:         cccccccc|cccccc
+C                              cccccc|cccccc
+C                                cccc|cccccc
+C                                  cc|cccccc
+C                                    |cccccc
+C                                       cccc
+C                                         cc
+C
+C
+C     Externals.
+C     ----------
+C
+C     GSCALE    - Apply power scaling to values to be packed.
+C     UNPKCF    - Unpack unscaled coefficients from GRIB product.
+C     UNCMPCK   - Re-scatter the values being unpacked into array.
+C     INXBIT    - Extract bits from GRIB product.
+C     DECFP2    - Decode from IBM floating point format.
+C     JMALLOC   - Routine to acquire memory
+C     JFREE     - Routine to release memory
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 in the GRIB
+C               product.
+C     On exit,  KNSPT points to the first bit of section 5 in the GRIB
+C               product.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      06:05:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J.D.Chambers     ECMWF      13.09.95
+C     Put in check for 32-bit packing.
+C     (Removed May 1996)
+C
+C     J.Clochard, Meteo France, for ECMWF - January 1998.
+C     FLOAT function replaced by REAL.
+C     Fix comments.
+C     Use of external JFREE instead of FREE.
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Parameters
+      INTEGER JP15BIT, JP87SET, JPBYTES
+#ifdef REAL_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER ( JP15BIT= 2**15 )
+C                            `---> 32768    =   8000(hex)
+      PARAMETER ( JP87SET= 192 )
+C                            `--->          =     C0(hex)
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KSEC1, KSEC4, KGRIB, KLENG, KNSPT, KBITS, KPACK
+      REAL PDATA
+      DIMENSION PDATA(*), KGRIB(*), KSEC1(*), KSEC4(*)
+C
+C     Local variables.
+C
+      INTEGER J110, J310, IPOWER, ISUBSET
+      INTEGER IVAL, IRET, IRETA, IRETB, IEXP, IMANT
+      INTEGER INSPTA, ILEN, ISCALE
+      INTEGER ILEN4, IFLAG, ISIZE
+C
+#ifdef POINTER_64
+      INTEGER*8 IPIVAL
+#endif
+      POINTER (IPIVAL, IVAL)
+      DIMENSION IVAL(1)
+      SAVE IPIVAL, ISIZE
+C
+      REAL ZREF, ZSCALE
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER UNPKCF, GSCALE
+      EXTERNAL UNPKCF, GSCALE, JMALLOC
+C
+      DATA ISIZE/0/
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Decode octets 1 to 11.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      DSECT4 = 0
+C
+C     Allocate memory (first time only)
+      IF( ISIZE.LT.((KTRUNC+1)*(KTRUNC+2)*JPBYTES) ) THEN
+        IF( ISIZE.NE.0 ) CALL JFREE(IPIVAL)
+        ISIZE = (KTRUNC+1)*(KTRUNC+2)*JPBYTES
+        IPIVAL = JMALLOC(ISIZE)
+#ifdef hpR64
+        IPIVAL = IPIVAL/(1024*1024*1024*4)
+#endif
+        IF( IPIVAL.EQ.0 ) THEN
+          WRITE(*,*) 'DSECT4: Memory allocation failed.'
+          WRITE(*,*) 'DSECT4: Number of bytes required = ', ISIZE
+          DSECT4 = 16123
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Preserve bit position of start of section 4.
+      INSPTA = KNSPT
+C
+C     Fill in the number of values unpacked
+      KSEC4(1) = (KTRUNC+1)*(KTRUNC+2)
+C
+C     Octets 1 - 3: Length of section.
+C     One 24-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILEN4,1,KBITS,24,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16110
+        WRITE(*,*) 'DSECT4: Problem unpacking length of section.'
+        GO TO 900
+      ENDIF
+C
+C     Octet 4:
+C     One 4-bit field -> flag, spherical harmonics/complex/float point
+C     One 4-bit field -> number of unused bits at end of section 4.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IFLAG,1,KBITS,8,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16111
+        WRITE(*,*) 'DSECT4: Problem unpacking flag byte.'
+        GO TO 900
+      ENDIF
+C
+C     Check the flag
+      IF ( (IFLAG/16) .NE. 12 ) THEN
+        DSECT4 = 16112
+        WRITE(*,*) 'DSECT4: Flag wrong = ', IFLAG
+        GO TO 900
+      ELSE
+        KSEC4(3) = 128
+        KSEC4(4) = 64
+        DO 110 J110 = 5, 33
+          KSEC4(J110) = 0
+  110   CONTINUE
+      ENDIF
+C
+C*    Octets 5 - 6 : Scale factor.
+C     One 16 bit field.
+C
+C     Adjust bit pointer over first 4 octets and insert scale factor.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ISCALE,1,KBITS, 16,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16113
+        WRITE(*,*) 'DSECT4: Problem unpacking scale factor.'
+        GO TO 900
+      ENDIF
+C
+C     Make negative if sign bit set
+      IF ( ISCALE .GT. JP15BIT ) THEN
+        ISCALE = ISCALE - JP15BIT
+        ISCALE = -ISCALE
+      ENDIF
+      ZSCALE = 2.0**ISCALE
+C
+C*    Octets 7 - 10 : Reference value.
+C     One 8 bit and one 24 bit field.
+C
+C     Extract reference value exponent and mantissa.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IEXP,1,KBITS, 8,'D',IRETA)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IMANT,1,KBITS, 24,'D',IRETB)
+      IRET = IRETA + IRETB
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16114
+        WRITE(*,*) 'DSECT4: Problem unpacking reference value.'
+        GO TO 900
+      ENDIF
+C
+C     Decode the reference value
+      CALL DECFP2 (ZREF,IEXP,IMANT)
+C
+C*    Octet 11 : Number of bits containing each packed value.
+C     One 8 bit field.
+C
+C     Extract number of bits for each packed value.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(2),1,KBITS, 8,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16115
+        WRITE(*,*) 'DSECT4: Problem unpacking number of bits/value.'
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Decode octets 12 to 18.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octets 12 - 13: Octet number of the start of packed data
+C     One 16-bit field.
+C
+C     Extract octet number of the start of packed data.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(16),1,KBITS,16,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16116
+        WRITE(*,*) 'DSECT4: Problem unpacking start of packed data.'
+        GO TO 900
+      ENDIF
+C
+C     Octets 14 - 15: Scaling factor; power of Laplacian operator
+C                     applied to field before packing.
+C     One 16-bit field.
+C
+C     Extract scaling power.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IPOWER,1,KBITS,16,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16117
+        WRITE(*,*) 'DSECT4: Problem unpacking scaling power.'
+        GO TO 900
+      ENDIF
+C
+C     Set value negative if sign bit set.
+      IF (IPOWER.GT.JP15BIT) THEN
+        IPOWER = IPOWER - JP15BIT
+        IPOWER = -IPOWER
+      ENDIF
+      KSEC4(17) = IPOWER
+C
+C     Octets 16 - 18: Pentagonal resolution parameters J,K,M
+C                     specifying truncation of subset of data
+C                     represented unpacked.
+C     Three 8-bit fields.
+C
+C     Extract pentagonal resolution parameters.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(18),3,KBITS, 8,'D',IRET)
+      IF (IRET.NE.0) THEN
+        DSECT4 = 16118
+        WRITE(*,*)
+     X    'DSECT4: Problem unpacking pentagonal resolution params.'
+        GO TO 900
+      ENDIF
+      ISUBSET = KSEC4(18)
+      IF ( ISUBSET .GT. KTRUNC ) THEN
+        WRITE(*,*) 'DSECT4: Invalid subset truncation given'
+        WRITE(*,*) 'DSECT4: ISUBSET, KTRUNC =', ISUBSET, KTRUNC
+        DSECT4 = 16122
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3.  Extract and scale binary values from GRIB product.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Adjust bit pointer to end of stored subset of coefficients and
+C     extract binary values from GRIB product -> updates bit pointer.
+      KNSPT = 8*KSEC4(16)
+      ILEN = (KTRUNC+1)*(KTRUNC+2) - (ISUBSET+1)*(ISUBSET+2)
+      CALL INXBIT (KGRIB,KLENG,KNSPT,IVAL,ILEN, KBITS,KPACK, 'D',IRET)
+      IF ( IRET .NE. 0 ) THEN
+        WRITE(*,*) 'DSECT4: Problem unpacking bits'
+        DSECT4 = 16119
+        GOTO 900
+      ENDIF
+C
+      DO 310 J310 = 1 , ILEN
+         PDATA(J310)   = ( REAL(IVAL(J310)) *  ZSCALE ) + ZREF
+  310 CONTINUE
+C
+C     Move the coefficients to their correct (scattered) in the array.
+      CALL UNCMPCK( PDATA, KTRUNC, ISUBSET)
+C
+C
+C     -----------------------------------------------------------------
+C*    Section 4 . Unpack the subset of coefficients (stored IBM style).
+C     -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Adjust pointer to avoid first 18 octets.
+      KNSPT = INSPTA + 18*8
+C
+C     Move back into original locations in the array and convert from
+C     IBM format.
+      IRET = UNPKCF( PDATA,KTRUNC,ISUBSET,KGRIB,KLENG,KNSPT,KBITS)
+      IF ( IRET .NE. 0 ) THEN
+        WRITE(*,*) 'DSECT4: Problem unpacking subset of coeffs.'
+        DSECT4 = 16120
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 5 . Apply power scaling to field.
+C     -----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+      IRET = GSCALE( PDATA, KTRUNC, ISUBSET, IPOWER, 'O')
+      IF ( IRET .NE. 0 ) THEN
+        WRITE(*,*) 'DSECT4: Problem applying power scaling'
+        DSECT4 = 16121
+        GOTO 900
+      ENDIF
+C
+C     Set bit pointer on 7777 group - section 5
+      KNSPT = INSPTA + 8*ILEN4
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/dsect4a.F b/gribex/dsect4a.F
new file mode 100755
index 0000000..b5de645
--- /dev/null
+++ b/gribex/dsect4a.F
@@ -0,0 +1,533 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#if (defined IBM_POWER4)
+ at PROCESS ALIAS(NOPTEOVRLP)
+#endif
+      INTEGER FUNCTION DSECT4A( PDATA, KTRUNC, KSEC0, KSEC1, KSEC4,
+     X                          KGRIB, KLENG, KNSPT, KBITS, KPACK)
+C
+C---->
+C**** DSECT4A
+C
+C     Purpose.
+C     --------
+C
+C     Decode GRIB section 4 for complex packing of spherical harmonics.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = DSECT4A( PDATA, KTRUNC, KSEC0, KSEC1, KSEC4,
+C    X                KGRIB, KLENG,  KNSPT, KBITS, KPACK)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PDATA      - Array of floating point values.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KSEC0      - Array of GRIB section 0 values
+C     KLENG      - Length of GRIB product array
+C     KNSPT      - Bit pointer for next value in GRIB product
+C     KBITS      - Number of bits per computer word.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KSEC1      - Array of GRIB section 1 values
+C     KSEC4      - Array of GRIB section 4 values
+C     KGRIB      - Array containing GRIB product.
+C     KNSPT      - Bit pointer for next value in GRIB product(updated)
+C     KPACK      - Number of bits per packed value.
+C
+C
+C     Method.
+C     -------
+C
+C                            <subset>|
+C
+C     Given numbers:         cccccccc|cccccc
+C                              cccccc|cccccc
+C                                cccc|cccccc
+C                                  cc|cccccc
+C                                    |cccccc
+C                                       cccc
+C                                         cc
+C
+C
+C     Externals.
+C     ----------
+C
+C     GSCALE    - Apply power scaling to values to be packed.
+C     UNPKCF    - Unpack unscaled coefficients from GRIB product.
+C     UNCMPCK   - Re-scatter the values being unpacked into array.
+C     INXBIT    - Extract bits from GRIB product.
+C     DECFP2    - Decode from IBM floating point format.
+C     JMALLOC   - Routine to acquire memory
+C     JFREE     - Routine to release memory
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     On entry, KNSPT points to the first bit of section 4 in the GRIB
+C               product.
+C     On exit,  KNSPT points to the first bit of section 5 in the GRIB
+C               product.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      06:05:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J.D.Chambers     ECMWF      13.09.95
+C     Put in check for 32-bit packing.
+C     (Removed May 1996)
+C
+C     J.Clochard, Meteo France, for ECMWF - January 1998.
+C     FLOAT function replaced by REAL.
+C     Fix comments.
+C     Use of external JFREE instead of FREE.
+C
+C     J.Clochard, Meteo France, for ECMWF - September 1998.
+C     Fix KNSPT position at end of routine.
+C     Enable processing of GRIB edition 0 data.
+C     Dummy-argument KSEC0 added.
+C     KPACK changed as output argument.
+C
+C     P.J.Towers       ECMWF
+C     Optimised for IBM Power4
+C       -added @PROCESS ALIAS(NOPTEOVRLP) directive
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      INTEGER JP15BIT, JP87SET, JPBYTES
+#ifdef REAL_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER ( JP15BIT= 2**15 )
+C                            `---> 32768    =   8000(hex)
+      PARAMETER ( JP87SET= 192 )
+C                            `--->          =     C0(hex)
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KSEC1, KSEC4, KGRIB, KLENG, KNSPT, KBITS, KPACK
+      INTEGER KSEC0
+      REAL PDATA
+      DIMENSION PDATA(*), KGRIB(*), KSEC0(*), KSEC1(*), KSEC4(*)
+C
+C     Local variables.
+C
+      INTEGER J110, NREST, NLOOPS, ILOOP, LOOP, IPOWER, ISUBSET
+      INTEGER IRET, IRETA, IRETB, IEXP, IMANT
+      INTEGER INSPTA, ILEN, ISCALE
+      INTEGER ILEN4, IFLAG, ISIZE, IAUXIL, IOFF, ITEMP, J, INIL
+C
+      CHARACTER *1 YFUNC
+C
+#ifndef USE_NO_POINTERS
+#ifdef POINTER_64
+      INTEGER*8 IPIVAL
+#endif
+      POINTER (IPIVAL, IVAL)
+      INTEGER IVAL(1)
+      SAVE IPIVAL, ISIZE
+#else
+      INTEGER IVAL(1000)
+#endif
+C
+      REAL ZREF, ZSCALE
+C
+C     Externals
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER UNPKCF, GSCALE
+      EXTERNAL UNPKCF, GSCALE, JMALLOC
+C
+      DATA ISIZE/0/
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Decode octets 1 to 11.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      DSECT4A = 0
+      YFUNC='D'
+C
+      IF( KSEC0(2).GE.1 ) THEN
+        IAUXIL=2
+      ELSE
+        IAUXIL=1
+      ENDIF
+C
+      ITEMP = (KTRUNC+1)*(KTRUNC+IAUXIL)
+#ifndef USE_NO_POINTERS
+C
+C     Allocate memory (first time only)
+      IF( ISIZE.LT.(MAX(ITEMP,4*(KTRUNC+1))*JPBYTES) ) THEN
+        IF( ISIZE.NE.0 ) CALL JFREE(IPIVAL)
+        ISIZE = (KTRUNC+1)*(KTRUNC+IAUXIL)*JPBYTES
+        IPIVAL = JMALLOC(ISIZE)
+#ifdef hpR64
+        IPIVAL = IPIVAL/(1024*1024*1024*4)
+#endif
+        IF( IPIVAL.EQ.0 ) THEN
+          WRITE(GRPRSM,*) 'DSECT4A: Memory allocation failed.'
+          WRITE(GRPRSM,*) 'DSECT4A: Number of bytes required = ', ISIZE
+          DSECT4A = 16123
+          GOTO 900
+        ENDIF
+      ENDIF
+#endif
+C
+C     Preserve bit position of start of section 4.
+      INSPTA = KNSPT
+C
+C     Fill in the number of values unpacked
+      KSEC4(1) = ITEMP
+C
+C     Octets 1 - 3: Length of section.
+C     One 24-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILEN4,1,KBITS,24,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16110
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking length of section.'
+        GO TO 900
+      ENDIF
+C
+C     Octet 4:
+C     One 4-bit field -> flag, spherical harmonics/complex/float point
+C     One 4-bit field -> number of unused bits at end of section 4.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IFLAG,1,KBITS,8,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16111
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking flag byte.'
+        GO TO 900
+      ENDIF
+C
+C     Check the flag
+      IF( ( KSEC0(2) .GE. 1 .AND. (IFLAG/16) .NE. 12 ) .OR.
+     X    ( KSEC0(2) .LT. 1 .AND. (IFLAG/64) .NE.  3 )      ) THEN
+        DSECT4A = 16112
+        WRITE(GRPRSM,*) 'DSECT4A: Flag wrong = ', IFLAG
+        GO TO 900
+      ELSE
+        KSEC4(3) = 128
+        KSEC4(4) = 64
+        INIL = MOD(IFLAG,16)
+        DO 110 J110 = 5, 33
+          KSEC4(J110) = 0
+  110   CONTINUE
+      ENDIF
+C
+C*    Octets 5 - 6 : Scale factor.
+CIAU     One 16 bit field.
+C
+C     Adjust bit pointer over first 4 octets and insert scale factor.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ISCALE,1,KBITS, 16,YFUNC,IRET)
+      IF( IRET.NE.0) THEN
+        DSECT4A = 16113
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking scale factor.'
+        GO TO 900
+      ENDIF
+C
+C     Make negative if sign bit set
+C
+      IF( ISCALE .GT. JP15BIT ) THEN
+        ISCALE = ISCALE - JP15BIT
+        ISCALE = -ISCALE
+      ENDIF
+      ZSCALE = 2.0**ISCALE
+C
+C*    Octets 7 - 10 : Reference value.
+C     One 8 bit and one 24 bit field.
+C
+C     Extract reference value exponent and mantissa.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IEXP,1,KBITS, 8,YFUNC,IRETA)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IMANT,1,KBITS, 24,YFUNC,IRETB)
+      IRET = IRETA + IRETB
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16114
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking reference value.'
+        GO TO 900
+      ENDIF
+C
+C     Decode the reference value
+C
+      CALL DECFP2 (ZREF,IEXP,IMANT)
+C
+C*    Octet 11 : Number of bits containing each packed value.
+C     One 8 bit field.
+C
+C     Extract number of bits for each packed value.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(2),1,KBITS, 8,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16115
+        WRITE(GRPRSM,*)
+     X    'DSECT4A: Problem unpacking number of bits/value.'
+        GO TO 900
+      ENDIF
+C
+      KPACK=KSEC4(2)
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Decode octets 12 to 18.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octets 12 - 13: Octet number of the start of packed data
+C     One 16-bit field.
+C
+C     Extract octet number of the start of packed data.
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(16),1,KBITS,16,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16116
+        WRITE(GRPRSM,*)
+     X    'DSECT4A: Problem unpacking start of packed data.'
+        GO TO 900
+      ENDIF
+C
+C     Octets 14 - 15: Scaling factor; power of Laplacian operator
+C                     applied to field before packing.
+C     One 16-bit field.
+C
+C     Extract scaling power.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IPOWER,1,KBITS,16,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16117
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking scaling power.'
+        GO TO 900
+      ENDIF
+C
+C     Set value negative if sign bit set.
+C
+      IF( IPOWER.GT.JP15BIT ) THEN
+        IPOWER = IPOWER - JP15BIT
+        IPOWER = -IPOWER
+      ENDIF
+C
+C     Octets 16 - 18: Pentagonal resolution parameters J,K,M
+C                     specifying truncation of subset of data
+C                     represented unpacked.
+C     Three 8-bit fields.
+C
+C     Extract pentagonal resolution parameters.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC4(18),3,KBITS, 8,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        DSECT4A = 16118
+        WRITE(GRPRSM,*)
+     X    'DSECT4A: Problem unpacking pentagonal resolution params.'
+        GO TO 900
+      ENDIF
+      ISUBSET = KSEC4(18)
+      IF(  ISUBSET .GT. KTRUNC ) THEN
+        WRITE(GRPRSM,*) 'DSECT4A: Invalid subset truncation given'
+        WRITE(GRPRSM,*) 'DSECT4A: ISUBSET, KTRUNC =', ISUBSET, KTRUNC
+        DSECT4A = 16122
+        GOTO 900
+      ENDIF
+C
+      IF( KSEC0(2).GE.1 ) THEN
+        KSEC4(17) = IPOWER
+        IOFF=0
+      ELSE
+C
+C       In edition 0, power was an unscaled integer, byte "offset" used
+C       to be a pointer relative to start of section 4, content/ordering
+C       also used to be different.
+C
+        KSEC4(17) = 1000 * IPOWER
+        KSEC4(16) = INSPTA/8 + KSEC4(16) - 1
+        IOFF=(ISUBSET+1)**2
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 3.  Extract and scale binary values from GRIB product.
+C     -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Adjust bit pointer to end of stored subset of coefficients and
+C     extract binary values from GRIB product -> updates bit pointer.
+C
+      KNSPT = 8*KSEC4(16)
+      ILEN = KSEC4(1) - (ISUBSET+1)*(ISUBSET+IAUXIL)
+C
+#ifndef USE_NO_POINTERS
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IVAL,ILEN, KBITS,KPACK,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking bits'
+        DSECT4A = 16119
+        GOTO 900
+      ENDIF
+C       Check that length in the file is consistent with the position of pointer
+C	this might not happen for very large grib products (KLENG.ge.2097140)
+C	Here we cannot multiply the length because the most significant bit(negative values)
+C	is used to signify the lack of data - if not we update ILEN4
+      
+      IF (KSEC0(1).GT.8388607) THEN
+        IF (((KNSPT-INSPTA+INIL)/8).ne.ILEN4) THEN 
+      	ILEN4=((KNSPT-INSPTA+INIL)/8)
+	ENDIF
+      ENDIF
+C
+      DO LOOP = 1, ILEN
+         PDATA(IOFF+LOOP) = ( REAL(IVAL(LOOP)) *  ZSCALE ) + ZREF
+      ENDDO
+#else
+      NLOOPS = ILEN / 1000
+      NREST  = ILEN - (NLOOPS)*1000
+      KNSPT = 8*KSEC4(16)
+C
+      DO ILOOP = 1, NLOOPS
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IVAL,1000,KBITS,KPACK,YFUNC,IRET)
+        IF( IRET.NE.0 ) THEN
+          WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking bits'
+          DSECT4A = 16119
+          GOTO 900
+        ENDIF
+C
+        DO LOOP = 1, 1000
+           PDATA(IOFF+(ILOOP-1)*1000+LOOP) =
+     X       (REAL(IVAL(LOOP))* ZSCALE)+ZREF
+        ENDDO
+      ENDDO
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IVAL,NREST,KBITS,KPACK,YFUNC,IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking bits'
+        DSECT4A = 16119
+        GOTO 900
+      ENDIF
+C
+      DO LOOP = 1, NREST
+         PDATA(IOFF+NLOOPS*1000+LOOP) = (REAL(IVAL(LOOP))* ZSCALE)+ZREF
+      ENDDO
+#endif
+C
+      IF( KSEC0(2).GE.1 ) THEN
+C
+C     Move the coefficients to their correct (scattered) in the array.
+C
+        CALL UNCMPCK( PDATA, KTRUNC, ISUBSET)
+      ENDIF
+C
+C
+C     -----------------------------------------------------------------
+C*    Section 4 . Unpack the subset of coefficients (stored IBM style).
+C     -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Adjust pointer to avoid first 18 octets.
+C
+      KNSPT = INSPTA + 18*8
+C
+      IF( KSEC0(2).GE.1 ) THEN
+C
+C     Move back into original locations in the array and convert from
+C     IBM format.
+C
+        IRET = UNPKCF( PDATA,KTRUNC,ISUBSET,KGRIB,KLENG,KNSPT,KBITS)
+        IF(  IRET .NE. 0 ) THEN
+          WRITE(GRPRSM,*) 'DSECT4A: Problem unpacking subset of coeffs.'
+          DSECT4A = 16120
+          GOTO 900
+        ENDIF
+C
+      ELSE
+C
+C     Direct conversion from IBM format.
+C
+C*      Calculate word pointer and offset, and get all exponents and
+C       all mantissae (split in 3 parts).
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IVAL,IOFF*4,KBITS, 8,YFUNC,IRET)
+        IF(  IRET .NE. 0 ) THEN
+          WRITE(GRPRSM,*)
+     X      'DSECT4A: Problem extracting subset of coeffs.'
+          DSECT4A = 16120
+          GOTO 900
+        ENDIF
+C
+        DO 401 J = 1, IOFF
+C
+          IEXP = IVAL(4*J-3)
+          IMANT = IVAL(4*J) + 256 * ( IVAL(4*J-1) + 256 * IVAL(4*J-2) )
+          CALL DECFP2(PDATA(J),IEXP,IMANT)
+C
+  401   CONTINUE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 5 . Apply power scaling to field.
+C     -----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+      IF( KSEC0(2).GE.1 ) THEN
+C
+        IRET = GSCALE( PDATA, KTRUNC, ISUBSET, IPOWER, 'O')
+        IF(  IRET .NE. 0 ) THEN
+          WRITE(GRPRSM,*) 'DSECT4A: Problem applying power scaling'
+          DSECT4A = 16121
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+C     Set bit pointer to last useful of section 4, before padding
+C     if any (for consistency with GRIBEX).
+C
+      KNSPT = INSPTA + 8*ILEN4 - INIL
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/dsgnbt.F b/gribex/dsgnbt.F
new file mode 100755
index 0000000..12c3611
--- /dev/null
+++ b/gribex/dsgnbt.F
@@ -0,0 +1,65 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DSGNBT( KOUT, KIN, KPOS, KRET)
+C---->
+C
+C     Get the sign bit in position KPOS of word KIN, and
+C     set value of KOUT from the rest of bits (KPOS-1) ->
+C     with the correct sign.
+C
+C     On return, KRET = 0 if all OK.
+C
+C----<
+      IMPLICIT NONE
+      INTEGER KOUT, KIN, KPOS, KRET
+
+      INTEGER JPBITS
+#ifdef INTEGER_8
+      PARAMETER ( JPBITS = 64 )
+#else
+      PARAMETER ( JPBITS = 32 )
+#endif
+      INTEGER ISBIT, INSPT, IRETA, IRETB
+#if defined (VAX) || defined (__alpha)
+      INTEGER ITEMP, IMASK1,IMASK2
+#endif
+C
+#if defined (VAX) || defined (__alpha)
+C
+C     VAX bit handling using VAX specific intrinsics
+      ITEMP  = 1
+      IMASK1 = JISHFT( ITEMP, (KPOS-1))
+      ITEMP  = -1
+      ITEMP  = JISHFT( ITEMP, (KPOS-1) )
+      IMASK2 = JNOT( ITEMP )
+      ISBIT  = JIAND( KIN, IMASK1)
+      KOUT   = JIAND( KIN, IMASK2)
+#else
+C
+C     Bit handling using INXBIT
+      INSPT = 0
+      CALL INXBIT( KIN, 1, INSPT, ISBIT, 1, JPBITS,
+     X             (JPBITS-KPOS+1), 'D', IRETA)
+      CALL INXBIT( KIN, 1, INSPT, KOUT, 1, JPBITS,
+     X             (KPOS-1), 'D', IRETB)
+      KRET = IRETA+IRETB
+      IF ( KRET .NE. 0 ) THEN
+        WRITE(*,*) ' DSGNBT - Problem unpacking bits in value'
+        GOTO 900
+      ENDIF
+#endif
+
+      IF ( ISBIT .NE. 0 ) KOUT = -KOUT
+
+  900 CONTINUE
+
+      RETURN
+      END
diff --git a/gribex/dsgnbt.c b/gribex/dsgnbt.c
new file mode 100755
index 0000000..8a20637
--- /dev/null
+++ b/gribex/dsgnbt.c
@@ -0,0 +1,41 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "fortint.h"
+
+void dsgnbt_(
+  fortint * kout,
+  fortint * kin,
+  fortint * kpos,
+  fortint * kret) {
+
+fortint value = *kin;
+unsigned fortint sign = value & (1 << ((*kpos)-1));
+unsigned fortint mask = ~(-1 << ((*kpos)-1));
+fortint new = value & mask;
+
+  if( sign )
+    *kout = -new;
+  else
+    *kout = new;
+
+  *kret = 0;
+  return;
+}
+
+void dsgnbt(
+  fortint * kout,
+  fortint * kin,
+  fortint * kpos,
+  fortint * kret) {
+
+  dsgnbt_(kout,kin,kpos,kret);
+}
diff --git a/gribex/dshsec2.F b/gribex/dshsec2.F
new file mode 100755
index 0000000..85b57a2
--- /dev/null
+++ b/gribex/dshsec2.F
@@ -0,0 +1,154 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DSHSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C---->
+C**** DSHSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for spherical harmonic fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DSHSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER IRET
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DSHSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8   : J pentagonal resolution parameter.
+C     Octets 9 - 10  : K pentagonal resolution parameter.
+C     Octets 11 - 12 : M pentagonal resolution parameter.
+C     Three 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),3,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DSHSEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: J,K,M pentagonal resolution parameters.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 13 : Representation type.
+C     Octet 14 : Representation mode.
+C     Two 8 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(5),2,IBITS, 8,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DSHSEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: representation type or mode.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C
+C     Octets 15 - 32 : Reserved.
+C     Nine 16 bit fields.
+C
+C     Move pointer past reserved octets.
+      INSPT = INSPT + 144
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dsvsec2.F b/gribex/dsvsec2.F
new file mode 100755
index 0000000..6c6956c
--- /dev/null
+++ b/gribex/dsvsec2.F
@@ -0,0 +1,263 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DSVSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS,ILEN2)
+C
+C---->
+C**** DSVSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Decodes GRIB section 2 values for space view fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = DSVSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product unpacked so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product unpacked so far.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     ILEN2   - Length in bytes of section 2
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2   - Updated GRIB section 2 description.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Unpacks values given in KGRIB into KSEC2 and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     DSGNBT  - Get the sign bit and adjust value to +/-.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC2,IBITS,ILEN2
+      DIMENSION KGRIB(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DSVSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Unpack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C      Octets 7 - 8  : Nx - number of points along X-axis.
+C      Octets 9 - 10 : Ny - number of points along Y-axis.
+C      Two 16 bit fields.
+C 
+       CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'D',IRET)
+       IF( IRET.NE.0 ) THEN
+         DSVSEC2 = 1
+         WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+         WRITE(GRPRSM,*) 'DSVSEC2: number of points along X or Y axis.'
+         WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+         GO TO 900
+       ENDIF
+C 
+C      Octets 11 - 13 : Lap - latitude of sub-satellite point.
+C      Octets 14 - 16 : Lop - longitude of sub-satellite point.
+C      Two 24 bit fields.
+C 
+       CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'D',IRET)
+       IF( IRET.NE.0 ) THEN
+         DSVSEC2 = 1
+         WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+         WRITE(GRPRSM,*)
+     X     'DSVSEC2: latitude/longitude of sub-satellite pt.'
+         WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+         GO TO 900
+       ENDIF
+C 
+C      If sign bit is 1, value is negative.
+C 
+       CALL DSGNBT( KSEC2(4), ILALO(1), 24, IRET)
+       CALL DSGNBT( KSEC2(5), ILALO(2), 24, IRET)
+C 
+C      Octet 17 : Resolution and components flag.
+C      One 8 bit field.
+C 
+       CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'D',IRET)
+       IF( IRET.NE.0 ) THEN
+         DSVSEC2 = 1
+         WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+         WRITE(GRPRSM,*) 'DSVSEC2: components flag.'
+         WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+         GO TO 900
+       ENDIF
+C 
+C      All flag fields are already set to 0, so
+C
+       IF( IRESOL.EQ.0 ) GO TO 214
+C
+C      Resolution flag is not applicable.
+C
+       IF( IRESOL.GE.128) IRESOL = IRESOL - 128
+C
+C      Set earth flag.
+C
+       IF( IRESOL.GE.64) THEN
+         KSEC2(18) = 64
+         IRESOL    = IRESOL - 64
+       ENDIF
+C 
+C      Set components flag.
+C 
+       KSEC2(19) = IRESOL
+C 
+  214  CONTINUE
+C 
+C      Octets 18 - 20 : dx Apparent diameter of earth in grid
+C                       lengths in x direction.
+C      Octets 21 - 23 : dy Apparent diameter of earth in grid
+C                       lengths in y direction.
+C      Two 24 bit fields.
+C 
+       CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(7),2,IBITS, 24,'D',IRET)
+       IF( IRET.NE.0 ) THEN
+         DSVSEC2 = 1
+         WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+         WRITE(GRPRSM,*) 'DSVSEC2: number of points along X or Y axis.'
+         WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+         GO TO 900
+       ENDIF
+C 
+C      Octets 24 - 25 : Xp X-coordinate of sub-satellite point.
+C      Octets 26 - 27 : Yp Y-coordinate of sub-satellite point.
+C      Two 16 bit fields.
+C 
+       CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 16,'D',IRET)
+       IF( IRET.NE.0 ) THEN
+         DSVSEC2 = 1
+         WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+         WRITE(GRPRSM,*)
+     X     'DSVSEC2: X or Y coordinate of sub-satellite point.'
+         WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+         GO TO 900
+       ENDIF
+C 
+C      Octet 28 : Scanning mode flags.
+C      One 8 bit field.
+C 
+       CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'D',IRET)
+       IF( IRET.NE.0 ) THEN
+         DSVSEC2 = 1
+         WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+         WRITE(GRPRSM,*) 'DSVSEC2: scanning mode flags.'
+         WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+         GO TO 900
+       ENDIF
+C 
+C     Octets 29 - 31 : The orientation of the grid.
+C     Octets 32 - 34 : nr the altitude of the camera.
+C     Two 24 bit fields.
+C 
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),2,IBITS, 24,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DSVSEC2 = 1
+        WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+        WRITE(GRPRSM,*)
+     X     'DSVSEC2: orientation of the grid or camera angle.'
+        WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C 
+C     Octets 35 - 36 : Xo - X coordinate of origin of sector
+C                             image.
+C     Octets 37 - 38 : Yo - Y coordinate of origin of sector
+C                             image.
+C     Two 16 bit fields.
+C 
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(15),2,IBITS, 16,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        DSVSEC2 = 1
+        WRITE(GRPRSM,*) 'DSVSEC2: Error extracting'
+        WRITE(GRPRSM,*)
+     X     'DSVSEC2: X or Y coordinates of origin of sector.'
+        WRITE(GRPRSM,*) 'DSVSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 39 - 40 : Reserved (ECMWF).
+C     Octets 39 - 44 : Reserved (GRIB specification).
+C 
+C     Update bit pointer.
+C
+      INSPT = INSPT + (ILEN2 - 38) * 8
+C 
+C     _______________________________________________________
+C 
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C 
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/dswmrs.F b/gribex/dswmrs.F
new file mode 100755
index 0000000..141d1cf
--- /dev/null
+++ b/gribex/dswmrs.F
@@ -0,0 +1,246 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE DSWMRS(IBLOSW,LOGISW,ILLGTH,INSOUT,IILGTH,RESOUT,
+     S                  IRLGTH,MGRIBS,ILENSW,IBITMC,LPRINTS)
+C
+C---->
+C**** *DSWMRS* - ROUTINE TO DECODE A MARS MODEL SWITCH.
+C
+C     G.K.SAKELLARIDES  ECMWF        17/05/85.
+C     THE STRUCTURE IS SIMILAR TO J.HENNESSY'S SUBROUTINE *DECOGR*
+C
+C     PURPOSE.
+C     --------
+C
+C          TO DECODE A MODEL SWITCH MARS RECORD FROM MARS PACKED
+C          SWITCH RECORD AS WELL AS TO PRINT THE DECOTED RECORD
+C          IN CASE LPRINTS=.TRUE.
+C
+C**   INTERFACE.
+C     ----------
+C
+C         *CALL* *DSWMRS(IBLOSW,LOGISW,ILLGTH,INSOUT,IILGTH,RESOUT,
+C                       IRLGTH,MGRIBS,ILENSW,IBITMC)*
+C        WHERE:
+C              INPUT PARAMETERS
+C              1.*MGRIBS* ARRAY CONTAINING THE PACKED MARS MODEL SWITCH
+C              2.*ILENSW* THE LENGTH OF THE ARRAY MGRIBS (750 CRAY WORD)
+C              3.*IBITMC* NUMBER OF BITS PER COMPUTER WORD.
+C              4.*LPRINTS* .TRUE. IF AN OUTPUT OF THE DECOTED MARS
+C                           MODEL SWITCH RECORD IS REQUIRED.
+C              OUTPUT PARAMETERS
+C              1.*IBLOSW* INTEGER ARRAY OF LENGTH 29 CONTAINING
+C                          THE FOLLOWING INFORMATIONS OF BLOCK1.
+C  1.1                        G
+C  1.2                        R
+C  1.3                        I
+C  1.4                        B
+C  1.5         IDENTIFICATION OF CENTRE)
+C  1.6         MODEL IDENTIFICATION
+C  1.7         GRID DEFINITION
+C  1.8         FLAG (CODE TABLE 1)
+C  1.9         PARAM. INTICATING THE MARS MODEL SWITCH REC.
+C  1.10         TYPE OF LEVEL (CODE TABLE 3)
+C  1.11         VALUE 1 OF LEVEL (CODE TABLE 3)
+C  1.12         VALUE 2 OF LEVEL (CODE TABLE 3)
+C  1.13         YEAR    OF INITIAL DATA
+C  1.14         MONTH   OF INITIAL DATA
+C  1.15         DAY     OF INITIAL DATA
+C  1.16         HOUR    OF INITIAL DATA
+C  1.17         MINUTE  OF INITIAL DATA
+C  1.18         TIME UNIT (CODE TABLE 4)
+C  1.19         TIME RANGE 1
+C  1.20         TIME RANGE 2
+C  1.21         TIME RANGE FLAG (CODE TABLE 5)
+C  1.22-24      RESERVED
+C  1.26         STARTING ADDRESS OF LOGICAL SECTION(OCTET)
+C  1.27         STARTING ADDRESS OF INTEGER SECTION(OCTET)
+C  1.28         STARTING ADDRESS OF REAL    SECTION(OCTET)
+C  1.29         LENGTH           OF REAL    SECTION(OCTET)
+C              2.*LOGISW* INTEGER ARRAY OF SUFFICIENT LENGTH WHICH
+C                          CONTAINS THE LOGICALS.
+C              3.*ILLGTH* ACTUAL LENGTH OF LOGICALS
+C              4.*INSOUT* INTEGER ARRAY OF SUFFICIENT LENGTH WHICH
+C                         CONTAINS THE INTEGERS
+C              5.*IILGTH* ACTUAL LENGTH OF INTEGER
+C              6.*RESOUT* REAL ARRAY OF SUFFICIENT LENGTH WHICH
+C                         CONTAINS THE REALS
+C              7.*IRLGTH* ACTUAL LENGTH OF REALS
+C
+C     EXTERNALS.
+C     ----------
+C
+C         *GBYTES*   EXTRACT BIT FIELD
+C         *GBYTE *   EXTRACT BIT FIELD
+C         *OFFSET*  CALCULATES THE WORD AND BIT OFFSET OF THE START
+C                   OF THE NEXT BIT FIELD.
+C         *DECFP*   DECODE GRIB CODE REPRESENTATION TO FLOATING POINT
+C                   NUMBER.
+C
+C----<
+C
+      DIMENSION IBLOSW(*),INSOUT(*),RESOUT(*),MGRIBS(ILENSW)
+      DIMENSION ILSOUT(500)
+      DIMENSION IAA(4)
+      LOGICAL LOGISW(*),LPRINTS
+C
+C*              1. SET LOCAL VARIABLES
+C
+  100 CONTINUE
+      IERR=0
+      ILMGRIB=ILENSW
+      IBITCR=IBITMC
+C
+C*              1.5 VARIABLES OF BLOCK 1
+C
+      IWORD=1
+      IBYTE=8
+      IVAL=24
+      IOFF=0
+      CALL GBYTES(MGRIBS(IWORD),IBLOSW(1),IOFF,IBYTE,0,IVAL)
+      CALL OFFSET(IOFF,IVAL,IWORD,IBYTE,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0) GO TO 900
+C
+C*     LENTHG OF DATA BLOCK(OCTET)
+      CALL GBYTE(MGRIBS(IWORD),IBLOSW(25),IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+C
+C*     STARTING ADDRESS OF LOGICAL  AND INTEGER SECTION
+      IBYTE=8
+      IVAL=2
+      CALL GBYTES(MGRIBS(IWORD),IBLOSW(26),IOFF,IBYTE,0,IVAL)
+      CALL OFFSET(IOFF,IVAL,IWORD,IBYTE,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+C*     STARTING ADDRESS OF REAL SECTION
+      CALL GBYTE(MGRIBS(IWORD),IBLOSW(28),IOFF,16)
+      CALL OFFSET(IOFF,1,IWORD,16,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+C* LENGTH OF REAL SECTION
+      CALL GBYTE(MGRIBS(IWORD),IBLOSW(29),IOFF,16)
+      CALL OFFSET(IOFF,1,IWORD,16,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+C
+C*              3. BLOCK 4 DATA
+C                  ----
+C
+  300 CONTINUE
+C
+C*         3.1 LOGICALS
+C              DECODE LOGICALS FROM MARS FORMAT
+C
+  310 CONTINUE
+C*           FINDS LENGTH OF LOGICALS
+      ILLGTH=IBLOSW(27)-IBLOSW(26)
+      IBYTE=8
+      IVAL=ILLGTH
+      CALL GBYTES(MGRIBS(IWORD),ILSOUT(1),IOFF,IBYTE,0,IVAL)
+      CALL OFFSET(IOFF,IVAL,IWORD,IBYTE,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0) GO TO 900
+      DO 314 I=1,ILLGTH
+C--   LOGISW(I)=SHIFTL(ILSOUT(I),63)
+      IF (ILSOUT(I).EQ.1) LOGISW(I) = .TRUE.
+C--
+  314 CONTINUE
+C
+C*         3.2 INTEGERS
+C
+C*      LENGTH OF INTEGERS
+      IILGTH=(IBLOSW(28)-IBLOSW(27))/2
+      IBYTE=16
+      IVAL=IILGTH
+      CALL GBYTES(MGRIBS(IWORD),INSOUT(1),IOFF,IBYTE,0,IVAL)
+      CALL OFFSET(IOFF,IVAL,IWORD,IBYTE,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+C*         3.3 REALS
+C
+C*    LENGTH OF REAL SECTION
+      IRLGTH=IBLOSW(29)/4
+      DO 335 J=1,IRLGTH
+      CALL GBYTE(MGRIBS(IWORD),IEXP,IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+      CALL GBYTE(MGRIBS(IWORD),IMANT,IOFF,24)
+      CALL OFFSET(IOFF,1,IWORD,24,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+      CALL DECFP(RESOUT(J),IEXP,IMANT)
+  335 CONTINUE
+C
+C
+C*         3.4 UNUSED WORDS
+C
+  340 CONTINUE
+C*    USED OCTET
+      IUSED=33+ILLGTH+IILGTH*2+IRLGTH*4
+C*    UNUSED OCTET
+      IUNUSE=ILENSW*8-4-IUSED
+      DO 345 J=1,IUNUSE
+      CALL GBYTE(MGRIBS(IWORD),IEEE,IOFF,8)
+      CALL OFFSET(IOFF,1,IWORD,8,IBITCR,ILMGRIB,IERR)
+      IF (IERR.NE.0)GO TO 900
+  345 CONTINUE
+C
+C*                3.5 CORECT LENGTH OF INTEGER SECTION
+C
+  350 CONTINUE
+      INGL=INSOUT(6)
+      INLEV=INSOUT(6+INGL+1)
+      J1A=1
+      J1T=6
+      J2A=J1T+1
+      J2T=J2A+INGL-1
+      J3A=J2T+1
+      J3T=J3A+14-1
+      J4A=J3T+1
+      J4T=J4A+INGL-1
+      J5A=J4T+1
+      J5T=J5A+INGL-1
+      J6A=J5T+1
+      J6T=J6A+10-1
+      J7A=J6T+1
+      J7T=J7A+INLEV-1
+      J8A=J7T+1
+      J8T=J8A+INLEV-1
+      J9A=J8T+1
+      J9T=J9A+INLEV-1
+      IILGTH=J9T
+C
+C*          4. BLOCK 5
+C
+  400 CONTINUE
+      CALL GBYTES(MGRIBS(IWORD),IAA(1),IOFF,8,0,4)
+C
+C
+C*            5. OUTPUT
+C
+  500 CONTINUE
+      IF (LPRINTS) THEN
+C
+         CALL ANALSW(IBLOSW,LOGISW,ILLGTH,INSOUT,IILGTH,
+     S              RESOUT,IRLGTH)
+C
+      ENDIF
+C
+C*           6. RETURN
+C
+  600 CONTINUE
+      RETURN
+C
+C*             9. ERROR HANDLING
+C
+  900 CONTINUE
+      WRITE(*,9901)
+      WRITE(*,'(A)') 'ERROR IN OFFSET'
+      CALL ENDRUN
+      STOP
+ 9901 FORMAT('ERROR IN SUBROUTINE DSWMRS')
+      END
diff --git a/gribex/ecdef1.F b/gribex/ecdef1.F
new file mode 100755
index 0000000..9eca069
--- /dev/null
+++ b/gribex/ecdef1.F
@@ -0,0 +1,246 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF1( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF1
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 1.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF1( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 1.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 1.
+#include "ecdef1.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF       2nd February 1995
+C     Add ensemble mean/standard deviation usage of definition 1.
+C
+C     J.D.Chambers     ECMWF       Jan 2000
+C     Allow single 2-byte ensemble number for stream 1090 (ECMWF
+C     ensemble seasonal forecasts)
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IZERO
+C
+      LOGICAL LENCODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Handle definition 1.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KSEC1(40).EQ.1090 ) THEN
+C
+C       If seasonal forecast data ...
+C
+C       Octet 50-51 : Forecast number.
+C       One 16 bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+        IF( .NOT. LENCODE ) KSEC1(43) = 0
+C
+      ELSE IF (KSEC1(39).EQ.10.OR.
+     X         KSEC1(39).EQ.11.OR.
+     X         KSEC1(39).EQ.17.OR.
+     X         KSEC1(39).EQ.18.OR.
+     X         KSEC1(39).EQ.23) THEN
+C
+C       If type =
+C          10 = Control forecast
+C          11 = Perturbed forecast
+C          17 = Ensemble means
+C          18 = Ensemble standard deviations
+C          23 = Empirical distribution
+C
+C       Octet 50 : Forecast number.
+C       Octet 51 : Total number of Forecasts.
+C       Two 8 bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS,8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+      ELSE
+C
+C       Octet 50-51 : Reserved.
+C       Should be 0 !!
+C
+        IF ( LENCODE ) THEN
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,16,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,9004)
+          ENDIF
+        ELSE
+          CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS,8,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,9004)
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C     Octet 52 : Reserved.
+C     Set to 0.
+C
+      IF ( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ELSE
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) THEN
+        WRITE(GRPRSM,*) 'ECDEF1 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,9003) KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF1')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9003 FORMAT (1H ,'         KNSPT  = ',I12)
+C
+ 9004 FORMAT (' ECDEF1: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef1.h b/gribex/ecdef1.h
new file mode 100755
index 0000000..0f0aaaf
--- /dev/null
+++ b/gribex/ecdef1.h
@@ -0,0 +1,102 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 1.
+C                         Ensemble forecast data.
+C                   ----------------------------------
+C
+C
+C                    38    Class : 1 = Operations
+C                                  2 = Research
+C
+C                    39    Type  : 1 = First Guess
+C                                  2 = Analysis
+C                                  3 = Initialised analysis
+C                                  4 = OI analysis
+C                                  5 = 3 D variational analysis
+C                                  6 = 4 D variational analysis
+C                                  7 = 3 D variational gradients
+C                                  8 = 4 D variational gradients
+C                                  9 = Forecast
+C                                 10 = Control forecast
+C                                 11 = Perturbed forecast
+C                                 12 = Errors in first guess
+C                                 13 = Errors in analysis
+C                                 14 = Cluster means
+C                                 15 = Cluster standard deviations.
+C                                 20 = Climatology
+C                                 30 = Observations
+C                                 31 = Quality control
+C                                 32 = Difference statistics
+C                                 40 = Image data
+C
+C                    40  Stream : 1-1022 = Satellite data stream is the
+C                                          satellite number as per BUFR
+C                                          code table 0 01 007.
+C                                              50 = Meteosat 3
+C                                              51 = Meteosat 4
+C                                              52 = Meteosat 5
+C                                              53 = Meteosat 6
+C                                             201 = NOAA 9
+C                                             250 = GOES 6
+C                                             251 = GOES 7
+C                               1025 = Daily archive
+C                               1035 = Ensemble forecasts
+C                               1036 = Sensitivities
+C                               1041 = TOGA
+C                               1042 = Chernobyl
+C                               1043 = Monthly means of daily archive
+C                               1044 = Supplementary data
+C                               1045 = Wave
+C                               1046 = Ocean
+C                               1047 = FGGE
+C                               1050 = Bracknell (daily)
+C                               1051 = Washington (daily)
+C                               1052 = Offenbach (daily)
+C                               1053 = Paris (daily)
+C                               1054 = Tokyo (daily)
+C                               1055 = Montreal (daily)
+C                               1056 = Melbourne (daily)
+C                               1060 = Test
+C                               1070 = Monthly standard deviation and covariance
+C                               1071 = Monthly means of daily means
+C                               1080 = Wave monthly means of daily archive
+C                               1081 = Wave EPS
+C                               1090 = ECMWF ensemble seasonal forecasts
+C                               2231 = Meteo France climate centre
+C                               2232 = MPI climate centre
+C                               2233 = UKMO climate centre
+C                               2240 = ECMWF seasonal forecast
+C                               2241 = Meteo France seasonal forecast
+C                               2242 = EDF seasonal forecast
+C                               2243 = UKMO seasonal forecast
+C
+C                    41  Expver : Version number/experiment identifier.
+C                                 ( 4 Ascii characters, right justified)
+C
+C                    42  Number : Ensemble forecast number.
+C                                 Control forecast is number 0,
+C                                 perturbed forecasts 1-nn.
+C
+C                                 Set to 0 if not ensemble forecast.
+C
+C                    43  Total  : Total number of forecasts in ensemble.
+C                                 This number includes the control
+C                                 forecast.
+C
+C                                 Set to 0 if not ensemble forecast.
+C                                 Set to 0 if seasonal (ocean) data
+C                                 Set to 33 if ensemble mean/standard
+C                                 deviation.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef10.F b/gribex/ecdef10.F
new file mode 100755
index 0000000..4f7d1a0
--- /dev/null
+++ b/gribex/ecdef10.F
@@ -0,0 +1,307 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF10( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                    KPLEN, KPR, KRET)
+C
+C---->
+C**** ECDEF10
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 10.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF10( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPLEN      - Pointer to field containing length of Section 1
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 10.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C     CSGNBT  - code a signed value
+C     DSGNBT  - decode a signed value
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef10.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      February 1998
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, LENS1, N, INSPT
+      INTEGER ILALO
+      DIMENSION ILALO(4)
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle tube.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50: Tube number
+C     Octet 51: Total number of tubes
+C     Octet 52: Central cluster definition
+C     Octet 53: Indicator of parameter considered
+C     Octet 54: Indicator of type of level
+C     Five 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),5,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 42 - 46.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 54.'
+        ENDIF
+      ENDIF
+C
+C     Octets 55-57: Northern latitude of the domain of tubing
+C     Octets 58-60: Western longitude of the domain of tubing
+C     Octets 61-63: Southern latitude of the domain of tubing
+C     Octets 64-66: Eastern longitude of the domain of tubing
+C     Four 24-bit fields.
+C
+C     When coding values, set sign bit to 1, if value is negative.
+C
+      IF ( LENCODE ) THEN
+        CALL CSGNBT( ILALO(1), KSEC1(47), 24, KRET)
+        CALL CSGNBT( ILALO(2), KSEC1(48), 24, KRET)
+        CALL CSGNBT( ILALO(3), KSEC1(49), 24, KRET)
+        CALL CSGNBT( ILALO(4), KSEC1(50), 24, KRET)
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),4,KBITS,24,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 47 - 50.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 55 - 66.'
+        ENDIF
+      ENDIF
+C
+C     When decoding values, if sign bit is 1, value is
+C     negative.
+C
+      IF ( LDECODE ) THEN
+        CALL DSGNBT( KSEC1(47), ILALO(1), 24, KRET)
+        CALL DSGNBT( KSEC1(48), ILALO(2), 24, KRET)
+        CALL DSGNBT( KSEC1(49), ILALO(3), 24, KRET)
+        CALL DSGNBT( KSEC1(50), ILALO(4), 24, KRET)
+      ENDIF
+C
+C     Octet 67: Number of tube to which operational forecast belongs
+C     Octet 68: Number of tube to which control forecast belongs
+C     Two 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(51),2,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 51 - 52.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 67 - 68.'
+        ENDIF
+      ENDIF
+C
+C     Octets 69-70: Height/pressure of level considered
+C     Octets 71-72: Reference step considered
+C     Octets 73-74: Radius of central cluster
+C     Octets 75-76: Ensemble standard deviation
+C     Octets 77-78: Distance of the tube extreme to the ensemble mean
+C     Five 16-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(53),5,KBITS,16,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 53 - 57.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 69 - 78.'
+        ENDIF
+      ENDIF
+C
+C     Octet 79: Number of forecasts belonging to the tube
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(58),1,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 58.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octet 79.'
+        ENDIF
+      ENDIF
+C
+C*    The number of forecasts belonging to a cluster may vary,
+C     but section 1 is kept a fixed length.
+C
+      INSPT = KNSPT + 255*8
+C
+C     Octets 80-(79+N): List of N ensemble forecast numbers
+C     N 8-bit fields.
+C
+      N = KSEC1(58)
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(59),N,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*)
+     X  '      encoding section 1, element 59 onwards.'
+        ELSE
+          WRITE(GRPRSM,*)
+     X '      decoding section 1, octet 80 onwards.'
+        ENDIF
+      ENDIF
+C
+      KNSPT = INSPT
+C
+C     On encoding, record the length of section 1.
+C
+      IF( LENCODE ) THEN
+        LENS1 = 79 + 255
+        CALL INXBIT(KGRIB,KLENG,KPLEN,LENS1, 1,KBITS,24,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF10: Error reported by routine INXBIT:'
+          WRITE(GRPRSM,*) '         encoding length of section 1.'
+        ENDIF
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF10: Section 9.'
+        WRITE(GRPRSM,*) '        Output values set, KNSPT = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF10')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef10.h b/gribex/ecdef10.h
new file mode 100755
index 0000000..cfe8833
--- /dev/null
+++ b/gribex/ecdef10.h
@@ -0,0 +1,102 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 10.
+C     EPS tubes
+C     ---------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C     41        37        ECMWF local GRIB use definition identifier:
+C                         10 = EPS tubes
+C
+C     42        38        Class
+C                         1 = Operations
+C                         2 = Research
+C
+C     43        39        Type
+C                         24 = Tubes
+C
+C     44-45     40        Stream
+C                         1035 = Ensemble forecasts
+C
+C     46-49     41        Version number/experiment identifier.
+C                         (four ASCII characters, right justified)
+C
+C     50        42        Tube number (0=central cluster)
+C
+C     51        43        Total number of tubes (excluding central cluster)
+C
+C     52        44        Central cluster definition
+C                         1: radius = % of total variance
+C                         2: radius = predefined value
+C
+C     53        45        Indicator of parameter considered
+C                         (see code table 2 in section 1)
+C
+C     54        46        Indicator of type of level considered
+C                         (see WMO code table 3)
+C
+C     55-57     47        Northern latitude of the domain of tubing
+C
+C     58-60     48        Western longitude of the domain of tubing
+C
+C     61-63     49        Southern latitude of the domain of tubing
+C
+C     64-66     50        Eastern longitude of the domain of tubing
+C
+C     67        51        Number of tube to which the operational
+C                         forecast belongs(*)
+C                           0 = central cluster,
+C                         254 = does not belong to any tube
+C
+C     68        52        Number of tube to which the control
+C                         forecast belongs(*)
+C                           0 = central cluster,
+C                         254 = does not belong to any tube
+C
+C     69-70     53        Height/pressure of level considered
+C                         (see WMO code table 3)
+C
+C     71-72     54        Reference step considered
+C                         (same units of time as forecast timesteps)
+C
+C     73-74     55        Radius of central cluster
+C                         (in units of parameter defined in element 45)
+C
+C     75-76     56        Ensemble standard deviation
+C                         (in units of parameter defined in element 45)
+C
+C     77-78     57        Distance of the tube extreme to the ensemble mean
+C                         (in units of parameter defined in element 45). Not
+C                         applicable if this is the central cluster, in which
+C                         case the value is set = 65535, ie a missing value.
+C
+C     79        58        Number of forecasts belonging to the tube
+C                         or central cluster, including the control
+C                         forecast (N)
+C
+C     80-(79+N) 59-(58+N) List of N ensemble forecast numbers (**)
+C                         Order is important, first on the list is
+C                         the tube extreme
+C
+C     Notes:
+C     *   a forecast may belong to several tubes. In this case, the
+C         forecast is associated with the tube whose extreme is closest.
+C
+C     **  by order of decreasing distance to the ensemble mean.
+C
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef11.F b/gribex/ecdef11.F
new file mode 100755
index 0000000..f4b5c72
--- /dev/null
+++ b/gribex/ecdef11.F
@@ -0,0 +1,250 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF11( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF11
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 11.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF11( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 11.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C     CSGNBT  - code a signed value
+C     DSGNBT  - decode a signed value
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef11.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      February 1998
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, JLOOP
+C
+      LOGICAL LENCODE, LDECODE
+C
+      DATA IZERO/0/
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle data for analysis which used the supplementary
+C                 data
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50: Class of analysis
+C     Octet 51: Type of analysis
+C     Two 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF11: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 42 - 43.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 51.'
+        ENDIF
+      ENDIF
+C
+C     Octets 52-53: Stream of analysis
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS,16,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF11: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 44.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 52 - 53.'
+        ENDIF
+      ENDIF
+C
+C     Octets 54-57: Version number/experiment identifier of analysis
+C     One 32-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,32,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF11: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 45.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 54 - 57.'
+        ENDIF
+      ENDIF
+C
+C     Octet 58: Year of analysis
+C     Octet 59: Month of analysis
+C     Octet 60: Day of analysis
+C     Octet 61: Hour of analysis
+C     Octet 62: Minute of analysis
+C     Octet 63: Century of analysis
+C     Octet 64: Originating centre of analysis
+C     Octet 65: Sub-centre of analysis
+C     Eight 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),8,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF11: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 46 - 53.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 58 - 65.'
+        ENDIF
+      ENDIF
+C
+C     Octets 66-72: Spare - set to zero.
+C     Seven 8-bit fields.
+C
+      IF( LENCODE ) THEN
+        DO 210 JLOOP = 1, 7
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF11: Error reported by routine INXBIT:'
+              WRITE(GRPRSM,*)
+     X  '      encoding section 1, octets 66 - 72.'
+          ENDIF
+  210   CONTINUE
+      ELSE
+        KNSPT = KNSPT + (7*8)
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF11: Section 9.'
+        WRITE(GRPRSM,*) '        Output values set, KNSPT = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF11')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef11.h b/gribex/ecdef11.h
new file mode 100755
index 0000000..1324d89
--- /dev/null
+++ b/gribex/ecdef11.h
@@ -0,0 +1,63 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 11.
+C     Supplementary data used by the analysis
+C     ---------------------------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C     41        37        ECMWF local GRIB use definition identifier:
+C                         11 = Supplementary data used by the analysis
+C
+C     42        38        Class
+C
+C     43        39        Type
+C
+C     44-45     40        Stream
+C
+C     46-49     41        Version number/experiment identifier.
+C                         (four ASCII characters, right justified)
+C
+C     Followed by details of the analysis which used the supplementary data:
+C
+C     50        42        Class of analysis
+C
+C     51        43        Type of analysis
+C
+C     52-53     44        Stream of analysis
+C
+C     54-57     45        Version number/experiment identifier of analysis
+C                         (four ASCII characters, right justified)
+C
+C     58        46        Year of analysis (YY)
+C
+C     59        47        Month of analysis (MM)
+C
+C     60        48        Day of analysis (DD)
+C
+C     61        49        Hour of analysis (HH)
+C
+C     62        50        Minute of analysis (MM)
+C
+C     63        51        Century of analysis
+C
+C     64        52        Originating centre of analysis
+C
+C     65        53        Sub-centre of analysis
+C
+C     66-72     -         Spare (set to zero)
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef12.F b/gribex/ecdef12.F
new file mode 100755
index 0000000..c7948b2
--- /dev/null
+++ b/gribex/ecdef12.F
@@ -0,0 +1,297 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF12( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF12
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 12.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF12( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 10.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C     CSGNBT  - code a signed value
+C     DSGNBT  - decode a signed value
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef12.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      November 1998
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, LOOP
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      LDECODE = .NOT.LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle data for analysis which used the SST
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50-53: Start date of the period (YYYYMMDD)
+C     One 32-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,32,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 42.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 53.'
+        ENDIF
+      ENDIF
+C
+C     Octets 54-55: Start time of the period (HHMM)
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(43),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 43.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 54 - 55.'
+        ENDIF
+      ENDIF
+C
+C     Octet 56-59: Finish date of the period (YYYYMMDD)
+C     One 32-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS,32,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 44.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 56 - 59.'
+        ENDIF
+      ENDIF
+C
+C     Octets 60-61: Finish time of the period (HHMM)
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 45.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 60 - 61.'
+        ENDIF
+      ENDIF
+C
+C     Octet 62-65: Verifying date of the period (YYYYMMDD)
+C     One 32-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),1,KBITS,32,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 46.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 62 - 65.'
+        ENDIF
+      ENDIF
+C
+C     Octets 66-67: Verifying time of the period (HHMM)
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(47),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 47.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 66 - 67.'
+        ENDIF
+      ENDIF
+C
+C     Octet 68: Code showing method of meaning, averaging, etc
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(48),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 48.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octet 68.'
+        ENDIF
+      ENDIF
+C
+C     Octet 69-70: No (N) of different time intervals used to build data
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(49),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 49.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 69 - 70.'
+        ENDIF
+      ENDIF
+C
+C     Octets 71-70+(N*4): List of time intervals used
+C     N 32-bit fields.
+C
+      DO LOOP = 1, KSEC1(49)
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(49+LOOP),1,KBITS,32,
+     X              HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF12: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X   '      encoding section 1, elements 50 onwards.'
+          ELSE
+            WRITE(GRPRSM,*)
+     X   '      decoding section 1, octets 71 onwards.'
+          ENDIF
+        ENDIF
+      ENDDO
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF12: Section 9.'
+        WRITE(GRPRSM,*) '        Output values set, KNSPT = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) THEN
+        CALL ABORTX('ECDEF12')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef12.h b/gribex/ecdef12.h
new file mode 100755
index 0000000..733d080
--- /dev/null
+++ b/gribex/ecdef12.h
@@ -0,0 +1,123 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 12.
+C
+C     Mean, average, etc.
+C     -------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C     1-3                 Length of section 1 in octets (=70)
+C
+C     4         1         Version number of code table 2
+C
+C     5         2         Identification of originating centre
+C                         (98 = ECMWF)
+C
+C     6         3         Generating process identification number
+C
+C     7         4         Grid definition
+C
+C     8         5         Flag indicating whether sections 2/3 are present
+C
+C     9         6         Parameter indicator
+C
+C     10        7         Level indicator
+C
+C     11        8         Height/pressure level
+C
+C     12        9         Height/pressure level
+C
+C     13        10        Start date - Year (YY)
+C
+C     14        11        Start date - Month (MM)
+C
+C     15        12        Start date - Day (DD)
+C
+C     16        13        Start date - Hour (HH)
+C
+C     17        14        Start date - Minute (MM)
+C
+C     18        15        Time unit indicator (see WMO code table 4)
+C
+C     19        16        Time period P1
+C
+C     20        17        Time period P2
+C
+C     21        18        Time range indicator (see WMO code table 5)
+C
+C     22-23     19        Number included in the mean, average, etc.
+C
+C     24        20        Number missing from mean, average, etc.
+C
+C     25        21        Century of start date
+C
+C     26        22        Sub-centre identifier
+C
+C     27-28     23        Decimal scale factor
+C
+C               24        Flag to indicate ECMWF local usage follows
+C                         in section 1
+C
+C     29-40     25-36     Zero
+C
+C     41        37        ECMWF local GRIB use definition identifier:
+C                         12 = Mean, average, etc.
+C
+C     42        38        Class
+C
+C     43        39        Type
+C
+C     44-45     40        Stream
+C
+C     46-49     41        Version number/experiment identifier.
+C                         (four ASCII characters, right justified)
+C
+C     Description of the time period over which the mean/average/etc was
+C     constructed:
+C
+C     50-53     42        Start date of the period (YYYYMMDD)
+C
+C     54-55     43        Start time of the period (HHMM)
+C
+C     56-59     44        Finish date of the period (YYYYMMDD)
+C
+C     60-61     45        Finish time of the period (HHMM)
+C
+C     62-65     46        Verifying date of the period (YYYYMMDD)
+C
+C     66-67     47        Verifying time of the period (HHMM)
+C
+C     68        48        Code showing method of meaning, averaging, etc:
+C                          1  = by step of integration
+C                          2  = by postprocessing step
+C                          3  = monthly means of instantaneous values
+C                          4  = monthly means of daily means
+C                          5  = monthly means of forecast accumulations
+C                          :
+C                         255 = not used
+C
+C     69-70     49        Number (N) of different time intervals used to
+C                         build data.
+C                         N = 1 if a constant interval has been used.
+C                         Otherwise all intervals must be given in the
+C                         following list.
+C
+C     71-       50-       List of time intervals used (in order) in time
+C     70+(N*4)  49+N      units defined in octet 18
+C
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef13.F b/gribex/ecdef13.F
new file mode 100755
index 0000000..e933b3d
--- /dev/null
+++ b/gribex/ecdef13.F
@@ -0,0 +1,344 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF13( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                    KPLEN, KPR, KRET)
+C
+C---->
+C**** ECDEF13
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 13.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF13( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPLEN      - Pointer to field containing length of Section 1
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 13.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef13.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      April 1998
+C
+C
+C     Modifications.
+C     --------------
+C
+C     Add system and method numbers
+C     J.D.Chambers     ECMWF      May 2000
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, JLOP, LENS1, ND, NF, IFLAG
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle tube.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50: As for MARS labelling (zero or ensemble forecast number)
+C     Octet 51: As for MARS labelling (zero or total no. in ensembles)
+C     Octet 52: Direction number
+C     Octet 53: Frequency number
+C     Octet 54: Total number of directions (Nd)
+C     Octet 55: Total number of frequencies (Nf)
+C     Six 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),6,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 42 - 47.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 55.'
+        ENDIF
+      ENDIF
+C
+      ND = KSEC1(46)
+      NF = KSEC1(47)
+C
+C     Octets 56-59: Integer scaling factor applied to directions
+C     Octets 60-63: Integer scaling factor applied to frequencies
+C     Two 32-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(48),2,KBITS,32,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 48 - 49.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 56 - 63.'
+        ENDIF
+      ENDIF
+C
+C     Octet 64: Flag to indicate whether or not system
+C               and method number are present.
+C                 0 = not present (old style product)
+C                 1 = present
+C
+      IFLAG = 1
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IFLAG,1,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, system/method flag'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octet 64'
+        ENDIF
+      ENDIF
+C
+C     If the flag is set (new style product)
+C
+      IF( IFLAG.EQ.1 ) THEN
+C
+C     Octets 65-66: System number
+C     One 16-bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(50+ND+NF),
+     X              1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*) '      encoding section 1, system number'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 65 - 66'
+          ENDIF
+        ENDIF
+C
+C     Octets 67-68: Method number
+C     One 16-bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(51+ND+NF),
+     X              1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*) '      encoding section 1, method number'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 67 - 68'
+          ENDIF
+        ENDIF
+C
+      ELSE
+C
+C       (Old style)
+C       Octets 65-68: Spare (set to zero)
+C       Four 8-bit fields.
+C
+        IF( LENCODE ) THEN
+          DO JLOP = 65, 68
+            IZERO = 0
+            CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+            IF (KRET.NE.0) THEN
+              KRET = 2
+              WRITE(GRPRSM,*)
+     X  'ECDEF13: Error reported by routine INXBIT:'
+              WRITE(GRPRSM,*)
+     X  '      encoding section 1, octets 69 - 100.'
+            ENDIF
+          ENDDO
+        ELSE
+          KNSPT = KNSPT + 4*8
+        ENDIF
+      ENDIF
+C
+C     Octets 69-100: Spare (set to zero)
+C     Thirty-32 8-bit fields.
+C
+      IF( LENCODE ) THEN
+        DO 210 JLOP = 69, 100
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*) '      encoding section 1, octets 69 - 100.'
+          ENDIF
+  210   CONTINUE
+      ELSE
+        KNSPT = KNSPT + 32*8
+      ENDIF
+C
+C     Octet 101 onwards: List of Nd scaled directions
+C     Nd 32-bit fields.
+C
+      DO 220 JLOP = 50, (49+ND)
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(JLOP),1,KBITS,32,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X  '      encoding section 1, elements 50 onwards'
+          ELSE
+            WRITE(GRPRSM,*)
+     X  '      decoding section 1, octets 101 onwards.'
+          ENDIF
+        ENDIF
+  220 CONTINUE
+C
+C     Octets 101+Nd*4 onwards: List of Nf scaled frequencies
+C     Nf 32-bit fields.
+C
+      DO 230 JLOP = (50+ND), (49+ND+NF)
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(JLOP),1,KBITS,32,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X  '      encoding section 1, element (50+Nd) etc.'
+          ELSE
+            WRITE(GRPRSM,*)
+     X  '      decoding section 1, octets (101+Nd*4)->'
+          ENDIF
+        ENDIF
+  230 CONTINUE
+C
+C
+C     On encoding, record the length of section 1.
+C
+      IF( LENCODE ) THEN
+        LENS1 = 100 + (ND*4) + (NF*4)
+        CALL INXBIT(KGRIB,KLENG,KPLEN,LENS1, 1,KBITS,24,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF13: Error reported by routine INXBIT:'
+          WRITE(GRPRSM,*) '         encoding length of section 1.'
+        ENDIF
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF13: Section 9.'
+        WRITE(GRPRSM,*) '        Output values set, KNSPT = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF13')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef13.h b/gribex/ecdef13.h
new file mode 100755
index 0000000..2c3e4c2
--- /dev/null
+++ b/gribex/ecdef13.h
@@ -0,0 +1,88 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 13.
+C     Wave 2D spectra direction and frequency
+C     ---------------------------------------
+C
+C     Octet        KSEC1(n)
+C     -----        --------
+C
+C     41           37           ECMWF local GRIB use definition identifier:
+C                               13 = Wave 2D spectra direction and frequency
+C
+C     42           38           Class
+C                               1 = Operations
+C                               2 = Research
+C
+C     43           39           Type
+C
+C     44->45       40           Stream
+C                               1045 = Wave
+C
+C     46->49       41           Version number/experiment identifier.
+C                               (four ASCII characters, right justified)
+C
+C     50           42           As for MARS labelling
+C                               (eg set to zero, or
+C                                ensemble forecast number if appropriate)
+C
+C     51           43           As for MARS labelling
+C                               (eg set to zero, or
+C                                total number in ensembles if appropriate)
+C
+C     52           44           Direction number
+C
+C     53           45           Frequency number
+C
+C     54           46           Total number of directions (Nd)
+C
+C     55           47           Total number of frequencies (Nf)
+C
+C     56->59       48           Integer scaling factor applied to directions
+C                               in following list of direction definitions
+C                               (4-byte integer)
+C
+C     60->63       49           Integer scaling factor applied to frequencies
+C                               in following list of frequency definitions
+C                               (4-byte integer)
+C
+C     64            -           Flag to show whether or not system and method
+C                               number are present:
+C                                 0 = not present (old style product)
+C                                 1 = present
+C
+C     65->66      (50+Nd+Nf)    System number: the "scientific version" number.
+C                                 0 = RD experiment
+C                                 1 -> 65534 = operational version number
+C                                 65535 = missing
+C
+C     67->68      (51+Nd+Nf)    Method number: distinguishes scientifically
+C                               different forecast ensembles (eg different
+C                               calibration/bias correction)
+C                                 0 = control integration
+C                                    (ie without data assimilation)
+C                                 1 -> 65534 = operational version number
+C                                 65535 = missing
+C
+C     69->100                   Spare (set to zero)
+C
+C    101->         50->         List of Nd scaled directions
+C   (100+Nd*4)    (49+Nd)       (4-byte integers)
+C
+C   (101+Nd*4)->  (50+Nd)->     List of Nf scaled frequencies
+C (100+Nd*4+Nf*4) (49+Nd+Nf)    (4-byte integers)
+C
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef14.F b/gribex/ecdef14.F
new file mode 100755
index 0000000..c614a3c
--- /dev/null
+++ b/gribex/ecdef14.F
@@ -0,0 +1,277 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF14( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                    KPLEN, KPR, KRET)
+C
+C---->
+C**** ECDEF14
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 14.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF14( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPLEN      - Pointer to field containing length of Section 1
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 14.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef14.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      August 1998
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1 HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, JLOP, LENS1, NF, NLEFT
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle brightness temperature
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50: As for MARS labelling (zero or ensemble forecast number)
+C     Octet 51: As for MARS labelling (zero or total no. in ensembles)
+C     Octet 52: Channel number
+C     Three 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),3,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF14: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, elements 42 - 44.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 52.'
+        ENDIF
+      ENDIF
+C
+C     Octets 53-56: Integer scaling factor applied to frequencies
+C     One 32-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,32,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF14: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 45.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 53 - 56.'
+        ENDIF
+      ENDIF
+C
+C     Octet 57: Total number of frequencies (Nf)
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),1,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF14: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '      encoding section 1, element 46.'
+        ELSE
+          WRITE(GRPRSM,*) '      decoding section 1, octets 57.'
+        ENDIF
+      ENDIF
+C
+C     Octets 58-60: Spare (set to zero)
+C     Three 8-bit fields.
+C
+      IF( LENCODE ) THEN
+        DO 210 JLOP = 58, 60
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF14: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*) '      encoding section 1, octets 58 - 60.'
+          ENDIF
+  210   CONTINUE
+      ELSE
+        KNSPT = KNSPT + 3*8
+      ENDIF
+C
+C     Octet 61 onwards: List of Nf scaled directions
+C     Nf 32-bit fields.
+C
+      NF = KSEC1(46)
+      DO 220 JLOP = 47, (46+NF)
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(JLOP),1,KBITS,32,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF14: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X  '      encoding section 1, elements 47 onwards'
+          ELSE
+            WRITE(GRPRSM,*)
+     X  '      decoding section 1, octets 61 onwards.'
+          ENDIF
+        ENDIF
+  220 CONTINUE
+C
+C     Octets at end of header:Spare - set to zero.
+C     (255-NF) 32-bit fields.
+C
+      NLEFT = 255 - NF
+      IF( LENCODE ) THEN
+        DO 230 JLOP = 1, NLEFT
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,32,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF11: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*)
+     X  '      encoding section 1, spare octets at end.'
+          ENDIF
+  230   CONTINUE
+      ELSE
+        KNSPT = KNSPT + (NLEFT*32)
+      ENDIF
+C
+C     On encoding, record the length of section 1.
+C
+      IF( LENCODE ) THEN
+        LENS1 = 1080
+        CALL INXBIT(KGRIB,KLENG,KPLEN,LENS1, 1,KBITS,24,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF14: Error reported by routine INXBIT:'
+          WRITE(GRPRSM,*) '         encoding length of section 1.'
+        ENDIF
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF14: Section 9.'
+        WRITE(GRPRSM,*) '        Output values set, KNSPT = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF14')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef14.h b/gribex/ecdef14.h
new file mode 100755
index 0000000..f0729eb
--- /dev/null
+++ b/gribex/ecdef14.h
@@ -0,0 +1,63 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 14.
+C     Brightness temperature.
+C     -----------------------
+C
+C     Octet        KSEC1(n)
+C     -----        --------
+C
+C     41           37           ECMWF local GRIB use definition identifier:
+C                               14 = Brightness temperature.
+C
+C     42           38           Class
+C                               1 = Operations
+C                               2 = Research
+C
+C     43           39           Type
+C                               12 = estimate of forecast accuracy (ef)
+C                               13 = estimate of analysis accuracy (ea)
+C
+C     44->45       40           Stream
+C                               1025 = daily archive
+C
+C     46->49       41           Version number/experiment identifier.
+C                               (four ASCII characters, right justified)
+C
+C     50           42           As for MARS labelling
+C                               (eg set to zero, or
+C                                ensemble forecast number if appropriate)
+C
+C     51           43           As for MARS labelling
+C                               (eg set to zero, or
+C                                total number in ensembles if appropriate)
+C
+C     52           44           Channel number
+C
+C     53->56       45           Integer scaling factor applied to frequencies
+C                               in following list of frequency definitions
+C                               (4-byte integer)
+C
+C     57           46           Total number of frequencies (Nf)
+C
+C     58-60                     Spare (set to zero)
+C
+C     61->         47->         List of Nf scaled frequencies
+C     60+Nf*4      46+Nf        (4-byte integers)
+C
+C     61+Nf*4->                 Spare (set to zero)
+C     1080
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef15.F b/gribex/ecdef15.F
new file mode 100755
index 0000000..4ad9a1c
--- /dev/null
+++ b/gribex/ecdef15.F
@@ -0,0 +1,207 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF15(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KPR,KRET)
+C
+C---->
+C**** ECDEF15
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 15.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF15(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KPR,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC - Requested function.
+C             'C' to code data.
+C             'D' to decode data.
+C
+C     KSEC1 - Array containing Grib Section 1 data.
+C
+C     KGRIB - Array containing Grib coded data.
+C
+C     KLENG - Length (words) of KGRIB.
+C
+C     KNSPT - Bit number after which insertion/extraction starts.
+C
+C     KBITS - Number of bits in computer word.
+C
+C     KPR   - Debug print switch.
+C             0  , No printout.
+C             >0 , Debug printout.
+C
+C     KRET  - Response to error indicator.
+C             0        , Abort if error encountered.
+C             Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1 - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB - Array containing Grib coded data.(Updated)
+C
+C     KNSPT - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET  - Return code.
+C             0   , No error encountered.
+C             2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 15.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC15.F - simplified to handle just definition 15.
+C
+#include "ecdef15.h"
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      February 2000
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, LOOP
+      LOGICAL LENCODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Handle definition 15.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Octet 50-51 : Ensemble member number.
+C     One 16 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+      IF( .NOT. LENCODE ) KSEC1(43) = 0
+C
+C     Octet 52-53 : System number.
+C     One 16 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+C     Octet 54-55 : Method number.
+C     One 16 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+C     Octet 56-60 : Spare
+C     Five 8 bit fields.
+C
+      IZERO = 0
+      IF( LENCODE ) THEN
+        DO LOOP = 1, 5
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF( KRET.NE.0 ) THEN
+            KRET = 2
+            GOTO 990
+          ENDIF
+        ENDDO
+      ELSE
+        KNSPT = KNSPT + 40
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'ECDEF15: Output: KNSPT = ', KNSPT 
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) CALL ABORTX ('ECDEF15')
+C
+      RETURN
+C
+  990 CONTINUE
+      WRITE(GRPRSM,*) 'ECDEF15: Error reported by routine INXBIT.'
+      RETURN
+C
+      END
diff --git a/gribex/ecdef15.h b/gribex/ecdef15.h
new file mode 100755
index 0000000..47522de
--- /dev/null
+++ b/gribex/ecdef15.h
@@ -0,0 +1,70 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 15.
+C
+C                   Seasonal forecast atmosphere data.
+C                   ----------------------------------
+C
+C
+C                    38    Class : 1 = Operations
+C                                  2 = Research
+C
+C                    39    Type  : 1 = First Guess
+C                                  2 = Analysis
+C                                  3 = Initialised analysis
+C                                  4 = OI analysis
+C                                  5 = 3 D variational analysis
+C                                  6 = 4 D variational analysis
+C                                  7 = 3 D variational gradients
+C                                  8 = 4 D variational gradients
+C                                  9 = Forecast
+C                                 10 = Control forecast
+C                                 11 = Perturbed forecast
+C                                 12 = Errors in first guess
+C                                 13 = Errors in analysis
+C                                 14 = Cluster means
+C                                 15 = Cluster standard deviations.
+C                                 20 = Climatology
+C                                 30 = Observations
+C                                 31 = Quality control
+C                                 32 = Difference statistics
+C                                 40 = Image data
+C
+C                    40  Stream : 1090 = ECMWF seasonal forecasts
+C
+C                    41  Expver : Version number/experiment identifier.
+C                                 ( 4 Ascii characters, right justified)
+C
+C                    42  Number : Ensemble member number.
+C                                 Control forecast is number 0,
+C                                 perturbed forecasts 1-nn.
+C
+C                    43  Zero
+C
+C                    44  System number: the "scientific version" number.
+C
+C                        0 = RD experiment
+C                        1 - 65534 = operational version number
+C                        65535 = missing
+C
+C                    45  Method number: distinguishes scientifically different
+C                                       forecast ensembles (eg different
+C                                       calibration/bias correction)
+C
+C                        0 = control integration (ie without data assimilation)
+C                        1 - 65534 = operational version number
+C                        65535 = missing
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef16.F b/gribex/ecdef16.F
new file mode 100755
index 0000000..435b225
--- /dev/null
+++ b/gribex/ecdef16.F
@@ -0,0 +1,225 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF16(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KPR,KRET)
+C
+C---->
+C**** ECDEF16
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 16.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF16(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KPR,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC - Requested function.
+C             'C' to code data.
+C             'D' to decode data.
+C
+C     KSEC1 - Array containing Grib Section 1 data.
+C
+C     KGRIB - Array containing Grib coded data.
+C
+C     KLENG - Length (words) of KGRIB.
+C
+C     KNSPT - Bit number after which insertion/extraction starts.
+C
+C     KBITS - Number of bits in computer word.
+C
+C     KPR   - Debug print switch.
+C             0  , No printout.
+C             >0 , Debug printout.
+C
+C     KRET  - Response to error indicator.
+C             0        , Abort if error encountered.
+C             Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1 - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB - Array containing Grib coded data.(Updated)
+C
+C     KNSPT - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET  - Return code.
+C             0   , No error encountered.
+C             2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 16.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+#include "ecdef16.h"
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      February 2000
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, LOOP
+      LOGICAL LENCODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Handle definition 16.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Octet 50-51 : Ensemble member number.
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+      IF( .NOT. LENCODE ) KSEC1(43) = 0
+C
+C     Octet 52-53 : System number.
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+C     Octet 54-55 : Method number.
+C     One 16-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+C     Octet 56-59 : Verifying month (in format YYYYMM).
+C     One 32-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),1,KBITS,32,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+C     Octet 60 : Averaging period (eg 6-hour, 24-hour).
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(47),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        GOTO 990
+      ENDIF
+C
+C     Octet 61-80 : Spare
+C     Twenty 8-bit fields.
+C
+      IZERO = 0
+      IF( LENCODE ) THEN
+        DO LOOP = 1, 20
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF( KRET.NE.0 ) THEN
+            KRET = 2
+            GOTO 990
+          ENDIF
+        ENDDO
+      ELSE
+        KNSPT = KNSPT + 20*8
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'ECDEF16: Output: KNSPT = ', KNSPT 
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) CALL ABORTX ('ECDEF16')
+C
+      RETURN
+C
+  990 CONTINUE
+      WRITE(GRPRSM,*) 'ECDEF16: Error reported by routine INXBIT.'
+      RETURN
+C
+      END
diff --git a/gribex/ecdef16.h b/gribex/ecdef16.h
new file mode 100755
index 0000000..44747cf
--- /dev/null
+++ b/gribex/ecdef16.h
@@ -0,0 +1,66 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 16.
+C
+C     Seasonal forecast monthly mean data.
+C     ------------------------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C     41           37    16 = ECMWF seasonal forecast monthly mean data
+C
+C     42           38    Class : 1 = Operations
+C                                2 = Research
+C
+C     43           39    Type  : 80 = Forecast seasonal mean
+C                                81 = Forecast seasonal maximum
+C                                82 = Forecast seasonal minimum
+C                                83 = Forecast seasonal standard
+C                                     deviation
+C
+C     44-45        40    Stream : 1091 = ECMWF seasonal forecast
+C                                        monthly means
+C
+C     46-49        41    Expver : Version number/experiment identifier
+C                                 (4 Ascii characters, right justified)
+C
+C     50-51        42    Number : Ensemble member number.
+C                                 Control forecast is number 0,
+C                                 perturbed forecasts 1-nn.
+C
+C                  43    Zero (for compatibity with ensemble numering)
+C
+C     52-53        44    System number: the "scientific version" number.
+C                          0 = RD experiment
+C                          1 - 65534 = operational version number
+C                          65535 = missing
+C
+C     54-55        45    Method number:
+C                          distinguishes scientifically different
+C                          forecast ensembles
+C                          (eg different calibration/bias correction)
+C                          0 = control integration (without data
+C                              assimilation)
+C                          1 - 65534 = operational version number
+C                          65535 = missing
+C
+C     56-59        46    Verifying month (in format YYYYMM)
+C
+C     60           47    Averaging period (eg 6-hour, 24-hour)
+C
+C     61-80              Spare (set to zero)
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef17.F b/gribex/ecdef17.F
new file mode 100755
index 0000000..b0fd8d7
--- /dev/null
+++ b/gribex/ecdef17.F
@@ -0,0 +1,288 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF17(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C---->
+C**** ECDEF17
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 17.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF17(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC - Requested function.
+C              'C' to code data.
+C              'D' to decode data.
+C     KSEC1 - Array containing Grib Section 1 data.
+C     KGRIB - Array containing Grib coded data.
+C     KLENG - Length (words) of KGRIB.
+C     KNSPT - Bit number after which insertion/extraction starts.
+C     KBITS - Number of bits in computer word.
+C     KRET  - Response to error indicator.
+C              0        , Abort if error encountered.
+C              Non-zero , Return to calling routine
+C                         even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1 - Array containing Grib Section 1 data.(Updated)
+C     KGRIB - Array containing Grib coded data.(Updated)
+C     KNSPT - Number of bit after last one inserted/extracted.(Updated)
+C     KRET  - Return code.
+C              0   , No error encountered.
+C              2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 17.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ecdef6.F
+C
+#include "ecdef17.h"
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF       May 2000
+C
+C
+C     Modifications.
+C     --------------
+C
+C     Set space used for the list of SEA-ICE dates to a multiple of
+C     JPPAD to stabilise the length of section 1 of the GRIB header.
+C     (Usually the number of dates will be less than 10).
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPPAD
+      PARAMETER( JPPAD = 10 )
+C
+C     Subroutine arguments
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, ILOOP, LENS1, INDATE, INSPT, NSEAICE, NEXTRA
+      INTEGER IPLEN
+C
+      LOGICAL LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      INSPT = KNSPT
+C
+C     Set bit pointer to start of GRIB section 1
+C
+      IPLEN = 8*8
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle definition 6.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50-51 :Reserved.
+C     Should be 0 !!
+C
+      IF ( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO, 1,KBITS, 16,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ELSE
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ENDIF
+C
+C     Octet 52-54 : YYMMDD date of the SST field used.
+C
+      IF( LENCODE) THEN
+        INDATE = KSEC1(44)
+        IF( INDATE.GT.19000000 ) INDATE = INDATE - 19000000
+      ENDIF
+      CALL INXBIT(KGRIB,KLENG,KNSPT,INDATE,1,KBITS,24,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+      IF( .NOT. LENCODE) THEN
+        IF( (INDATE.LT.19000000).AND.(INDATE.GT.100) )
+     X    INDATE = INDATE + 19000000
+        KSEC1(44) = INDATE
+      ENDIF
+C
+C     Octet 55 : Type of SST field used.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45), 1,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octet 56 : Count of ICE fields used (n, say).
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46), 1,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octet 57->54+(n*4) : YYMMDD dates and satellite numbers of the
+C                          ICE fields used.
+C
+      NSEAICE = KSEC1(46)
+      DO ILOOP = 1, NSEAICE
+C
+C       YYMMDD date.
+C
+        IF( LENCODE) THEN
+          INDATE = KSEC1(45+(ILOOP*2))
+          IF( INDATE.GT.19000000 ) INDATE = INDATE - 19000000
+        ENDIF
+        CALL INXBIT(KGRIB,KLENG,KNSPT,INDATE,1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+        IF( .NOT. LENCODE) THEN
+          IF( (INDATE.LT.19000000).AND.(INDATE.GT.100) )
+     X      INDATE = INDATE + 19000000
+          KSEC1(45+(ILOOP*2)) = INDATE
+        ENDIF
+C
+C       Satellite number (ICE data).
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46+(ILOOP*2)),
+     X              1,KBITS, 8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+      ENDDO
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Handle padding of the ICE field slots.
+C     ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     If the number of ICE fields used is not a multiple of JPPAD,
+C     pad the ICE field slots upto a multiple of JPPAD.
+C
+      NEXTRA = JPPAD - MOD(NSEAICE,JPPAD)
+      NSEAICE = NSEAICE + NEXTRA
+      IF( LENCODE ) THEN
+        DO ILOOP = 1, NEXTRA
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,32,HFUNC,KRET)
+          IF( KRET.NE.0 ) THEN
+            KRET = 2
+            WRITE(GRPRSM,9004)
+          ENDIF
+        ENDDO
+C
+C       If encoding, set length of section 1.
+C
+        LENS1 = 56 + NSEAICE*4
+        CALL INXBIT(KGRIB,KLENG,IPLEN,LENS1, 1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF      
+C
+      ELSE
+C
+C       If decoding, use length of section 1 to step KNSPT pointer
+C       past section 1, past any padding slots if any.
+C
+        CALL INXBIT(KGRIB,KLENG,IPLEN,LENS1, 1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF      
+        KNSPT = INSPT - (49*8) + LENS1*8
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) THEN
+        CALL ABORTX ('ECDEF17')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9004 FORMAT (' ECDEF17: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef17.h b/gribex/ecdef17.h
new file mode 100755
index 0000000..1ce4bff
--- /dev/null
+++ b/gribex/ecdef17.h
@@ -0,0 +1,86 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 17.
+C                   Surface temperature or sea-ice data.
+C                   ------------------------------------
+C
+C                 GRIB code
+C     KSEC1(NN)   section 1
+C                 octet(s)
+C     ---------   ---------
+C
+C       37         41        ECMWF local GRIB use definition identifier
+C                            = 17
+C                            = surface temperature fields made from SST and
+C                            SSMI data with first-guess values inserted on
+C                            land points.
+C
+C       38         42        Class : 1 = Operations
+C
+C       39         43        Type  : 2 = Analysis
+C
+C       40         44-45     Stream : 1025 = Daily archive
+C
+C       41         46-49     Expver : Version number/experiment identifier.
+C                                   (4 Ascii characters, right justified)
+C
+C       42         50        Zero, for compatibility with MARS labelling.
+C
+C       43         51        Zero, for compatibility with MARS labelling.
+C
+C       44         52-54     Date of SST field used; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       45         55        Type of SST field used:
+C                            0 = climatology
+C                            1 = 1/1 degree sst data
+C                            2 = 2/2 degree sst data
+C
+C       46         56        Count of ICE fields used (n, say).
+C                            (NB. n maybe 0).
+C
+C       47         57-59     Date of first ICE field used; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C	48	   60	     First day satellite number (ICE data)
+C
+C       49         61-63     Date of second ICE field used ; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       50         64        Second day satellite number (ICE data)
+C
+C       51         65-67     Date of third ICE field used ; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       52         68        Third day satellite number (ICE data)
+C
+C
+C       ...
+C
+C       45+(n*2)   53+(n*4)  Date of nth field used; YYYYMMDD.
+C                ->55+(n*4)  (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       46+(n*2)   56+(n*4)  Nth  day satellite number (ICE data)
+C
+C       Slots for dates are allocated 10 at a time, so some slots may be
+C       empty (ie zero). Empty slots are not includedd in the count N.
+C
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef18.F b/gribex/ecdef18.F
new file mode 100755
index 0000000..8eaab60
--- /dev/null
+++ b/gribex/ecdef18.F
@@ -0,0 +1,255 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF18(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C---->
+C**** ECDEF18
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 18.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF18(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 18.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - Insert/extract bits to/from bit stream.
+C     ABORTX  - Abort processing.
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef18.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      February 2001
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, NUMBER, INUM, ILOOP, LOOP
+      CHARACTER*4 HBLANK
+C
+      LOGICAL LENCODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = HFUNC.EQ.'C'
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Handle definition 1.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Octet 50 : Ensemble forecast number
+C     Octet 51 : Total number of Forecasts.
+C     Octet 52 : Data origin
+C     Three 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),3,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF18: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '       encoding section 1, octets 50 to 52.'
+        ELSE
+          WRITE(GRPRSM,*) '       decoding section 1, octets 50 to 52.'
+        ENDIF
+      ENDIF
+C
+C     Octets 53 - 56 : Model identifier of forecast used
+C     4 Ascii characters, right justified
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,32,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF18: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '       encoding section 1, octets 53 to 56.'
+        ELSE
+          WRITE(GRPRSM,*) '       decoding section 1, octets 53 to 56.'
+        ENDIF
+      ENDIF
+C
+C     Octet 57 : Consensus count
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),1,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,*) 'ECDEF18: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(GRPRSM,*) '       encoding section 1, octet 57.'
+        ELSE
+          WRITE(GRPRSM,*) '       decoding section 1, octet 57.'
+        ENDIF
+      ENDIF
+C
+C     Octets 58 to 60 : Spare (set to zero)
+C 
+      DO LOOP = 1, 3
+        IF ( LENCODE ) THEN
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF18: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*)
+     X   '         encoding section 1, octets 58 to 60.'
+          ENDIF
+        ELSE
+          KNSPT = KNSPT + 8
+        ENDIF
+      ENDDO
+C
+C     Octets 61 to 120 : List of WMO centre identifiers for analyses used
+C     Upto fifteen fields. ( Each 4 Ascii characters, right justified)
+C
+      NUMBER = KSEC1(46)
+      DO LOOP = 1, NUMBER
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46+LOOP),1,
+     X              KBITS,32,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF18: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X   '       encoding section 1, list of WMO ids.'
+          ELSE
+            WRITE(GRPRSM,*)
+     X   '       decoding section 1, list of WMO ids.'
+          ENDIF
+        ENDIF
+      ENDDO
+C
+C     Handle unused entries (set to blanks)
+C
+      DO LOOP = NUMBER+1, 15
+        HBLANK = '    '
+        IF ( LENCODE ) THEN
+          CALL INXBIT(KGRIB,KLENG,KNSPT,HBLANK,1,KBITS,32,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF18: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*) '         encoding section 1, unused list.'
+          ENDIF
+        ELSE
+          KSEC1(46+LOOP) = 0
+          DO ILOOP = 1, 4
+            KSEC1(46+LOOP) = KSEC1(46+LOOP)*256 +
+     X                       ICHAR(HBLANK(ILOOP:ILOOP))
+          ENDDO
+          KNSPT = KNSPT + 32
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF18')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef18.h b/gribex/ecdef18.h
new file mode 100755
index 0000000..2c92cdb
--- /dev/null
+++ b/gribex/ecdef18.h
@@ -0,0 +1,69 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 18.
+C
+C     Multi-analysis ensemble data.
+C     -----------------------------
+C
+C    KSEC1
+C   element
+C   -------
+C
+C     37       ECMWF local GRIB use definition identifier
+C              18 = Multi-analysis ensemble data
+C
+C     38       Class  :  1 = Operations
+C                        2 = Research
+C
+C     39       Type   :  2 = Analysis
+C                        9 = Forecast
+C                       10 = Control forecast
+C
+C     40       Stream : 1037 = multi-analysis ensemble data (MAED)
+C                       1083 = multi-analysis wave data (MAWV)
+C
+C     41       Expver : Version number/experiment identifier.
+C                       ( 4 Ascii characters, right justified)
+C
+C     42       Number : Ensemble forecast number:
+C                       = 0 for a control forecast.
+C                       Not used for analysis (set to zero).
+C
+C     43       Total  : Total number of forecasts in ensemble.
+C                       (Set to 1 for analysis).
+C
+C     44       Data origin :
+C                       = WMO identifier of centre providing the analysis
+C                       = 255 for a consensus product
+C
+C     45       Model  : four-character identifier of forecast used
+C                       = "ECMF" for ECMWF IFS
+C                       = WMO centre CCCC identifier otherwise
+C                       ( 4 Ascii characters, right justified)
+C
+C     46       Consensus count : indicates the composition of the starting
+C                                analysis for a product (analysis, forecast, ..)
+C                       = 0 for a product from one centre
+C                           (ie not a consensus product)
+C                       = n for a consensus product, where n is the number of
+C                           analyses used in the consensus analysis.
+C                           (nb. This allows the case n = 1.)
+C
+C     47 - 61  List   : WMO centre CCCC identifiers for the analyses used,
+C                       eg "KWBC". ( 4 Ascii characters, right justified)
+C                       Unused list entries are set to four blanks.
+C                      
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef19.F b/gribex/ecdef19.F
new file mode 100755
index 0000000..2822af3
--- /dev/null
+++ b/gribex/ecdef19.F
@@ -0,0 +1,264 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF19(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C---->
+C**** ECDEF19
+C
+C     Purpose.
+C     --------
+C     GRIB coding/decoding of ECMWF local use definition 19.
+C
+C     Interface.
+C     ----------
+C     CALL ECDEF19(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C     HFUNC - Requested function.
+C              'C' to code data.
+C              'D' to decode data.
+C     KSEC1 - Array containing Grib Section 1 data.
+C     KGRIB - Array containing Grib coded data.
+C     KLENG - Length (words) of KGRIB.
+C     KNSPT - Bit number after which insertion/extraction starts.
+C     KBITS - Number of bits in computer word.
+C     KRET  - Response to error indicator.
+C              0        , Abort if error encountered.
+C              Non-zero , Return to calling routine
+C                         even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C     KSEC1 - Array containing Grib Section 1 data.(Updated)
+C     KGRIB - Array containing Grib coded data.(Updated)
+C     KNSPT - Number of bit after last one inserted/extracted.(Updated)
+C     KRET  - Return code.
+C              0   , No error encountered.
+C              2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 19.
+C
+C
+C     Externals.
+C     ----------
+C     INXBIT
+C     ABORTX
+C
+C
+C     Reference.
+C     ----------
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C     None
+C
+C
+#include "ecdef19.h"
+C
+C     Author.
+C     -------
+C     J.D.Chambers     ECMWF       October 2002
+C
+C
+C     Modifications.
+C     --------------
+C     None
+C
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, LENS1, INSPT, NCLIMON, NEXT
+      INTEGER IPLEN, ILOOPO, ILOOPI, IFULL
+C
+      LOGICAL LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      INSPT = KNSPT
+C
+C     Set bit pointer to start of GRIB section 1
+C
+      IPLEN = 8*8
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle fixed part of definition 19.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50 : Zero, for compatibility with MARS labelling
+C
+      IF ( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ELSE
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ENDIF
+C
+C     Octet 51 : Ensemble size
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(43),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octet 52 : Power of 10 used to scale climate weight = F, say
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octets 53-56 : Climate weight * 10**F, stored as an integer
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,32,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Handle climate month descriptions
+C     ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Octets 57-59 : First month used to build climate month 1, YYYYMM
+C     Octets 60-62 : Last month used to build climate month 1, YYYYMM
+C     Octets 63-65 : First month used to build climate month 2, YYYYMM
+C     Octets 66-68 : Last month used to build climate month 2, YYYYMM
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(47),1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(48),1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(49),1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+C     Handle padding for unused bytes
+C
+      IF( LENCODE ) THEN
+        DO ILOOPO = 69, 80
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF( KRET.NE.0 ) THEN
+            KRET = 2
+            WRITE(GRPRSM,9004)
+          ENDIF
+        ENDDO
+C
+      ELSE
+        KNSPT = KNSPT + 8*12
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 4 . Handle length of section 1
+C     ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      LENS1 = 80
+C
+      IF( LENCODE ) THEN
+        CALL INXBIT(KGRIB,KLENG,IPLEN,LENS1,1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF      
+C
+      ELSE
+C
+C       If decoding, use length of section 1 to step KNSPT pointer
+C       past section 1, past any padding slots if any.
+C
+        CALL INXBIT(KGRIB,KLENG,IPLEN,LENS1,1,KBITS,24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF      
+        KNSPT = 8*8 + LENS1*8
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) THEN
+        CALL ABORTX ('ECDEF19')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9004 FORMAT (' ECDEF19: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef19.h b/gribex/ecdef19.h
new file mode 100755
index 0000000..715b737
--- /dev/null
+++ b/gribex/ecdef19.h
@@ -0,0 +1,57 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C  ECMWF local GRIB use definition 19.
+C  EFI - Extreme forecast index
+C  ------------------------------------
+C
+C                 GRIB code
+C     KSEC1(NN)   section 1
+C                 octet(s)
+C     ---------   ---------
+C
+C       37         41       ECMWF local GRIB use definition identifier
+C                            = 19 = EFI, extreme forecast index
+C
+C       38         42       Class: 1 = Operations
+C
+C       39         43       Type : 27 = extreme forecast index
+C                                  28 = extreme forecast index control
+C
+C       40        44-45     Stream: 1035 = Ensemble Forecast
+C
+C       41        46-49     Expver: Version number/experiment identifier.
+C                                  (4 Ascii characters, right justified)
+C
+C       42         50       Zero, for compatibility with MARS labelling.
+C
+C       43         51       Ensemble size (0 - 255)
+C
+C       44         52       Power of 10 used to scale climate weight = F, say.
+C
+C       45        53-56     Weight * 10**F applied to climate month 1,
+C                           stored as an integer
+C
+C       46        57-59     First month used to build climate month 1, YYYYMM
+C
+C       47        60-62     Last month used to build climate month 1, YYYYMM
+C
+C       48        63-65     First month used to build climate month 2, YYYYMM
+C
+C       49        66-68     Last month used to build climate month 2, YYYYMM
+C
+C       -         69-80     Set to zero.
+C
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef2.F b/gribex/ecdef2.F
new file mode 100755
index 0000000..ab7ac65
--- /dev/null
+++ b/gribex/ecdef2.F
@@ -0,0 +1,299 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF2( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF2
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 2.
+C     (Extensions for clusters).
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF2( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 2.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 2.
+#include "ecdef2.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IZERO, INSPT
+C
+      INTEGER ILALO
+      DIMENSION ILALO(8)
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Extensions for clusters (definition 2).
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'ECDEF2 : Section 2.'
+C
+C*    Octet 50 : Cluster number.
+C     Octet 51 : Total number of clusters.
+C     Two 8 bit fields.
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 52 : Reserved
+C     Set to 0.
+C
+      IF ( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT, IZERO,1,KBITS,8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ELSE
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+C*    Octet 53 : Clustering method.
+C     One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octets 54-55 : Start timestep when clustering.
+C     Octets 56-57 : End timestep when clustering.
+C     Two 16 bit fields.
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(45),2,KBITS, 16,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octets 58-60 : Northern latitude of domain of clustering
+C     Octets 61-63 : Western longitude of domain of clustering
+C     Octets 64-66 : Southern latitude of domain of clustering
+C     Octets 67-69 : Eastern longitude of domain of clustering
+C     Four 24 bit fields.
+C
+C     When coding values, set sign bit to 1, if value is negative.
+C
+      IF ( LENCODE ) THEN
+        CALL CSGNBT( ILALO(1), KSEC1(47), 24, KRET)
+        CALL CSGNBT( ILALO(2), KSEC1(48), 24, KRET)
+        CALL CSGNBT( ILALO(3), KSEC1(49), 24, KRET)
+        CALL CSGNBT( ILALO(4), KSEC1(50), 24, KRET)
+      ENDIF
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,ILALO(1),4,KBITS, 24,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C     When decoding values, if sign bit is 1, value is
+C     negative.
+C
+      IF ( LDECODE ) THEN
+        CALL DSGNBT( KSEC1(47), ILALO(1), 24, KRET)
+        CALL DSGNBT( KSEC1(48), ILALO(2), 24, KRET)
+        CALL DSGNBT( KSEC1(49), ILALO(3), 24, KRET)
+        CALL DSGNBT( KSEC1(50), ILALO(4), 24, KRET)
+      ENDIF
+C
+C*    Octet 70 : Number of cluster to which operational forecast
+C                  belongs.
+C     Octet 71 : Number of cluster to which control forecast
+C                  belongs.
+C     Octet 72 : Number of forecasts belonging to the cluster.
+C     Three 8 bit fields.
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(51),3,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    The number of forecasts belonging to a cluster may vary,
+C     but section 1 is kept a fixed length.
+C
+      INSPT = KNSPT + 2048
+C
+C*    Octets 73-328 : List of N ensemble forecast numbers.
+C     KSEC1(53) 8 bit fields.
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(54),KSEC1(53),KBITS, 
+     X             8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+      KNSPT = INSPT
+C
+      GOTO 900
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF2 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,9003) KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF2')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9003 FORMAT (1H ,'         KNSPT  = ',I12)
+C
+ 9004 FORMAT (' ECDEF2: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef2.h b/gribex/ecdef2.h
new file mode 100755
index 0000000..3913701
--- /dev/null
+++ b/gribex/ecdef2.h
@@ -0,0 +1,53 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 2.
+C                  Cluster means and standard deviations.
+C                   ----------------------------------
+C
+C         Words 38-41 as for definition 1.
+C
+C                    42 Number : Cluster number.
+C
+C                    43 Total  : Total number of clusters.
+C
+C                    44 Clustering method :-
+C                               1 - Maximum linkage method
+C                               2 - Mixed method
+C                               3 - Small linkage method
+C
+C                    45 Start time step considered when clustering
+C                       (Same units of time as forecast timesteps)
+C
+C                    46 End time step considered when clustering
+C                       (Same units of time as forecast timesteps)
+C
+C                    47 Northern latitude of domain of clustering
+C                    48 Western longitude of domain of clustering
+C                    49 Southern latitude of domain of clustering
+C                    50 Eastern longitude of domain of clustering
+C                       (See Notes 1-4 below)
+C
+C                    51       : Number of cluster to which operational
+C                               forecast belongs.
+C
+C                    52       : Number of cluster to which control
+C                               forecast belongs.
+C
+C                    53   N   : Number of forecasts belonging to
+C                               the cluster , including the
+C                               control forecast.
+C
+C                 54-53+N     : List of N ensemble forecast numbers.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef21.h b/gribex/ecdef21.h
new file mode 100755
index 0000000..f953acb
--- /dev/null
+++ b/gribex/ecdef21.h
@@ -0,0 +1,114 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 21.
+C     Sensitive area predictions
+C     -----------------------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C     42        38        Class
+C
+C     43        39        Type
+C
+C     44-45     40        Stream
+C
+C     46-49     41        Expver
+C
+C     50-51     42        Forecast number or singular vector number. Zero for
+C                         analysis.
+C
+C
+C     If type = 60 (perturbed analysis):
+C
+C     52-93     43-57     Set to zero.
+C
+C
+C     For other types, the area definition (octets 58 to 77) should always be
+C     coded. Other octets from 53 to 93 may be coded as zeroes.
+C
+C     Allowed ranges are [-90,90] for latitudes and [0,360] for longitudes.
+C
+C
+C     52-53     43        Number of iterations.
+C
+C     54-55     44        Number of singular vectors computed.
+C
+C     56        45        Norm used at initial time.
+C
+C     57        46        Norm used at final time.
+C
+C     58-61     47        Multiplication factor to convert latitude/longitude
+C                         and accuracy from real to integer.
+C
+C     62-65     48        Latitude in degrees of north-west corner of forecast
+C                         verification area multiplied by KSEC1(47).
+C
+C     66-69     49        Longitude in degrees of north-west corner of forecast
+C                         verification area multiplied by KSEC1(47).
+C
+C     70-73     50        Latitude in degrees of south-east corner of forecast
+C                         verification area multiplied by KSEC1(47).
+C
+C     74-77     51        Longitude in degrees of south-east corner of forecast
+C                         verification area multiplied by KSEC1(47).
+C
+C     78-81     52        Accuracy multiplied by KSEC1(47).
+C
+C     82-83     53        Number of singular vectors evolved.
+C
+C     84-91     54-55     Ritz numbers.
+C                         Given ritz, then:
+C                           KSEC1(54) = NINT( LOG10(RITZ)-5 )
+C                           KSEC1(55) = NINT( RITZ/ EXP(LOG(10.0)*KSEC1(54) ) )
+C                         Thus:
+C                           RITZ = KSEC1(55)*EXP( LOG(10.0)*KSEC1(54) )
+C
+C     92        56        For all types, this is the period in hours between
+C                         the time when the targeted observations are taken
+C                         (the reference time in KSEC1(10:14)) and the forecast
+C                         verification time.
+C                         For singular vectors, this is the optimisation time.
+C
+C     93        57        Forecast lead time (hours)
+C                         For all types, this is the lead time of forecast(s)
+C                         on which sensitive area prediction is based. The lead
+C                         time is the time from the initialization of the
+C                         forecast to the reference time in KSEC1(10:14).
+C
+C     94        58        WMO identifier of the centre from which the data
+C                         originated
+C
+C     95-96     59        Method number
+C
+C     97-98     60        Total number of forecasts in ensemble (or zero if
+C                         not appropriate).
+C
+C     99        61        Shape of verification region:
+C                         0: lat-lon box as given by KSEC1(48-51)
+C                         1: circular region with centre at
+C                         latitude  = 0.5*(KSEC1(48)+KSEC1(50))/KSEC1(47) (deg)
+C                         longitude = 0.5*(KSEC1(49)+KSEC1(51))/KSEC1(47) (deg)
+C                         and with
+C                         radius = 0.5*(KSEC1(48)-KSEC1(50))/(KSEC1(47)*111.199)
+C                                = great-circle distance in km
+C
+C                         This is the largest circle fitting in a lat-lon box
+C                         defined by KSEC1(48-51).
+
+C
+C     100                 Reserved. Set to zero.
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef3.F b/gribex/ecdef3.F
new file mode 100755
index 0000000..0390112
--- /dev/null
+++ b/gribex/ecdef3.F
@@ -0,0 +1,195 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF3( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF3
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 3.
+C     (Satellite image data).
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF3( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                                       even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 3.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 3.
+#include "ecdef3.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IZERO
+C
+      LOGICAL LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+C
+C     ------------------------------------------------------------------
+C*    Section 2 .  Satellite image data, definition 3.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50 : band  number.
+C     Octet 51 : function code.
+C     Two 8 bit fields.
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octet 52 : Reserved.
+C     Set to 0.
+C
+      IF ( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ELSE
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF3 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,9003) KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF3')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9003 FORMAT (1H ,'         KNSPT  = ',I12)
+C
+ 9004 FORMAT (' ECDEF3: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef3.h b/gribex/ecdef3.h
new file mode 100755
index 0000000..b693c64
--- /dev/null
+++ b/gribex/ecdef3.h
@@ -0,0 +1,32 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 3.
+C                         Satellite image data.
+C                   ---------------------------------
+C
+C         Words 38-41 as for definition 1.
+C
+C                    42  Band  : 0 = first infrared band
+C                                1 = second infrared band
+C                               10 = first visible band
+C                               20 = water vapour
+C                            100+i = ith spectral band
+C
+C                    43 Function code : Interpretation of pixel value.
+C                                0 = value is pixel value
+C                                1 = value is temperatures in degrees K,
+C                                    and is 145 + pixel value.
+C                               255 = translation table follows
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef4.F b/gribex/ecdef4.F
new file mode 100755
index 0000000..c88e8c4
--- /dev/null
+++ b/gribex/ecdef4.F
@@ -0,0 +1,492 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF4( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPLEN, KPR, KRET)
+C
+C---->
+C**** ECDEF4
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use of definition 4.
+C     (Ocean extensions).
+C
+C**   Interface.
+C     ----------
+C
+C    CALL ECDEF4( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPLEN      - Pointer to field containing length of Section 1.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 4.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 4.
+#include "ecdef4.h"
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF       Jan 2000
+C     Allow single 2-byte ensemble number for stream 1090 (ECMWF
+C     ensemble seasonal forecasts)
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, ILENS1, INUM, LOOP, IP1, N
+      INTEGER ILALO
+      DIMENSION ILALO(8)
+      LOGICAL LENCODE, LDECODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 .  Ocean extensions, definition 4.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KSEC1(40).EQ.1090 ) THEN
+C
+C       If seasonal forecast data ...
+C
+C       Octet 50-51 : Forecast number.
+C       One 16 bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) GOTO 910
+C
+        IF( LDECODE ) KSEC1(43) = 0
+C
+      ELSE
+C
+C       Octet 50 : Ensemble forecast number
+C       Octet 51 : Total number of forecasts in ensemble
+C       Two 8-bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS, 8,HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+C
+      ENDIF
+C
+C     Octet 52 : Flag showing existence of a post-auxiliary array
+C     One 8-bit field.
+C
+      IF( LENCODE ) IP1 = 1
+      CALL INXBIT(KGRIB,KLENG,KNSPT, IP1,1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     -----------------------------------------------------------------|
+C*    Section 3 .  Coordinate structure definition.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Octet 53 : Fundamental spatial reference system (Planet flag)
+C     Octet 54 : Fundamental time reference
+C     Octet 55 : Space unit flag (applies only if lengths NOT
+C                otherwise labelled)
+C     Octet 56 : Vertical coordinate definition (z)
+C     Octet 57 : Horizontal coordinate definition (x,y)
+C     Octet 58 : Time unit flag
+C     Octet 59 : Time coordinate definition (t)
+C     Seven 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),7,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     -----------------------------------------------------------------|
+C*    Section 4 .  Mixed coordinates.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C*    Position definition.
+C     Octet 60 : Mixed coordinate field flag
+C     Octet 61 : Coordinate 1 flag  (usually time)
+C     Octet 62 : Averaging flag
+C     Three 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(51),3,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     Octets 63 - 66 : Position of level 1
+C     Octets 67 - 70 : Position of level 2
+C     Two 32-bit fields.
+C
+C     When coding data, set sign bit to 1, if value is negative.
+C
+      IF( LENCODE ) THEN
+        CALL CSGNBT( ILALO(1), KSEC1(54), 32, KRET)
+        CALL CSGNBT( ILALO(2), KSEC1(55), 32, KRET)
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),2,KBITS, 32,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     When decoding data, if sign bit is 1, value is negative.
+C
+      IF( LDECODE ) THEN
+        CALL DSGNBT( KSEC1(54), ILALO(1), 32, KRET)
+        CALL DSGNBT( KSEC1(55), ILALO(2), 32, KRET)
+      ENDIF
+C
+C     Octet 71 : Coordinate 2 flag  (usually z-coordinate)
+C     Octet 72 : Averaging flag
+C     Two 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(56),2,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     Octets 73 - 76 : Position of level 1
+C     Octets 77 - 80 : Position of level 2
+C     Two 32-bit fields.
+C
+C     When coding data, set sign bit to 1, if value is negative.
+C
+      IF( LENCODE ) THEN
+        CALL CSGNBT( ILALO(1), KSEC1(58), 32, KRET)
+        CALL CSGNBT( ILALO(2), KSEC1(59), 32, KRET)
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),2,KBITS, 32,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     When decoding data, if sign bit is 1, value is negative.
+C
+      IF( LDECODE ) THEN
+        CALL DSGNBT( KSEC1(58), ILALO(1), 32, KRET)
+        CALL DSGNBT( KSEC1(59), ILALO(2), 32, KRET)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5 .  Grid definition.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     Octets 81 : Coordinate 3 flag (x-axis, usually longitude)
+C     Octets 82 : Coordinate 4 flag (y-axis, usually latitude)
+C     Two 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(60),2,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     Octets  83 - 86  : Coordinate 4 of first grid point
+C     Octets  87 - 90  : Coordinate 3 of first grid point
+C     Octets  91 - 94  : Coordinate 4 of last grid point
+C     Octets  95 - 98  : Coordinate 3 of last grid point
+C     Octets  99 - 102 : i-increment
+C     Octets 103 - 106 : j-increment
+C     Six 32-bit fields.
+C
+C     When coding data, set sign bit to 1, if value is negative.
+C
+      IF( LENCODE ) THEN
+        CALL CSGNBT( ILALO(1), KSEC1(62), 32, KRET)
+        CALL CSGNBT( ILALO(2), KSEC1(63), 32, KRET)
+        CALL CSGNBT( ILALO(3), KSEC1(64), 32, KRET)
+        CALL CSGNBT( ILALO(4), KSEC1(65), 32, KRET)
+        CALL CSGNBT( ILALO(5), KSEC1(66), 32, KRET)
+        CALL CSGNBT( ILALO(6), KSEC1(67), 32, KRET)
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),6,KBITS, 32,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     When decoding data, if sign bit is 1, value is negative.
+C
+      IF( LDECODE ) THEN
+        CALL DSGNBT( KSEC1(62), ILALO(1), 32, KRET)
+        CALL DSGNBT( KSEC1(63), ILALO(2), 32, KRET)
+        CALL DSGNBT( KSEC1(64), ILALO(3), 32, KRET)
+        CALL DSGNBT( KSEC1(65), ILALO(4), 32, KRET)
+        CALL DSGNBT( KSEC1(66), ILALO(5), 32, KRET)
+        CALL DSGNBT( KSEC1(67), ILALO(6), 32, KRET)
+      ENDIF
+C
+C
+C     Octet 107 : Flag for irregular grid coordinate list
+C     Octet 108 : Flag for normal or staggered grid
+C     Two 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(68),2,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     -----------------------------------------------------------------|
+C*    Section 6 .  Auxiliary information.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+C     Octet 109 : Flag for any further information
+C     One 8-bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(70),1,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C*    Auxiliary information.
+C
+C     Octet 110 : Number of entries in horizontal coordinate
+C                 definition supplement.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(71),1,KBITS, 8,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     Octets 111 - 112 : Number of entries in mixed coordinate
+C                        definition.
+C     Octets 113 - 114 : Number of entries in grid coordinate list
+C     Octets 115 - 116 : Number of entries in auxiliary array
+C     Three 16-bit fields .
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(72),3,KBITS, 16,HFUNC,KRET)
+      IF( KRET.NE.0 ) GOTO 910
+C
+C     At this point length of Section 1 of Grib code is 116 octets.
+C
+      ILENS1 = 116
+      INUM   = 75
+C
+C     -----------------------------------------------------------------|
+C*    Section 7 .  (Optional) Supplements.
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+C     Horizontal coordinate supplement.
+C
+      DO LOOP = 1, KSEC1(71)
+C
+C       KSEC1(71) 32-bit fields.
+C
+C       When coding values, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) CALL CSGNBT( ILALO(1), KSEC1(INUM), 32, KRET)
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),1,KBITS,32, HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+C
+C       When decoding values, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) CALL DSGNBT( KSEC1(INUM), ILALO(1), 32, KRET)
+        ILENS1 = ILENS1 + 4
+        INUM   = INUM + 1
+C
+      ENDDO
+C
+C     Mixed coordinate definition.
+C
+      DO LOOP = 1, KSEC1(72)
+C
+C       KSEC1(72) 32-bit fields.
+C
+C       When coding values, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) CALL CSGNBT( ILALO(1), KSEC1(INUM), 32, KRET)
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),1,KBITS, 32,HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+C
+C       When decoding values, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) CALL DSGNBT( KSEC1(INUM), ILALO(1), 32, KRET)
+        ILENS1 = ILENS1 + 4
+        INUM   = INUM + 1
+C
+      ENDDO
+C
+C     Grid coordinate list.
+C
+      DO LOOP = 1, KSEC1(73)
+C
+C       KSEC1(73) 32-bit fields.
+C
+C       When coding values, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) CALL CSGNBT( ILALO(1), KSEC1(INUM), 32, KRET)
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),1,KBITS, 32,HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+C
+C       When decoding values, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) CALL DSGNBT( KSEC1(INUM), ILALO(1), 32, KRET)
+        ILENS1 = ILENS1 + 4
+        INUM   = INUM + 1
+C
+      ENDDO
+C
+C     Auxiliary array.
+C
+      IF( KSEC1(74).NE.0 ) THEN
+C
+C       KSEC1(74) 32-bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(INUM),KSEC1(74),KBITS,
+     X             32,HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+        ILENS1 = ILENS1 + 4 * KSEC1(74)
+        INUM   = INUM + KSEC1(74)
+      ENDIF
+C
+C     Post-auxiliary array.
+C
+      IF( IP1.EQ.1 ) THEN
+C
+C       Integer count, N say, followed by (N-1) 32-bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(INUM),1,KBITS,
+     X             32,HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+        N = KSEC1(INUM)
+        IF( N.GT.1 ) THEN
+          INUM   = INUM + 1
+C
+          CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(INUM),(N-1),KBITS,
+     X               32,HFUNC,KRET)
+          IF( KRET.NE.0 ) GOTO 910
+          ILENS1 = ILENS1 + 4 * N
+          INUM   = INUM + N - 1
+        ELSE
+          KSEC1(INUM) = 0
+          ILENS1 = ILENS1 + 4
+          KNSPT = KNSPT + 32
+        ENDIF
+      ELSE
+        KSEC1(INUM) = 0
+      ENDIF
+C
+C*    Insert length of section 1, if coding data.
+C     One 24-bit field.
+C
+      IF( LENCODE ) THEN
+        CALL INXBIT(KGRIB,KLENG,KPLEN,ILENS1,1,KBITS, 24,HFUNC,KRET)
+        IF( KRET.NE.0 ) GOTO 910
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 )
+     X  WRITE(GRPRSM,*) 'ECDEF4: Section 9. On output, KNSPT  = ',KNSPT
+C
+      RETURN
+C
+  910 CONTINUE
+      KRET = 2
+      WRITE(GRPRSM,*) 'ECDEF4: Error reported by routine INXBIT.'
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( IRET.EQ.0.AND.KRET.NE.0 ) THEN
+        CALL ABORTX ('ECDEF4')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef4.h b/gribex/ecdef4.h
new file mode 100755
index 0000000..853e478
--- /dev/null
+++ b/gribex/ecdef4.h
@@ -0,0 +1,271 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 4.
+C                          Ocean model data.
+C                   ----------------------------------
+C
+C   For use in storing ocean model data within the GRIB framework.
+C   T.Stockdale, 17 May 1993
+C
+C   Numbers given are words of KSEC1
+C
+C
+C   Standard ECMWF supplementary data (as per local use definition 1)
+C   for words 38-41 ie
+C
+C      38  Class  (ops/research)
+C      39  Type   (analysis/forecast/etc)
+C      40  Stream
+C      41  Expver (expt identifier)
+C
+C      42  Ensemble forecast number
+C      43  Total number of forecasts in ensemble
+C
+C   If stream = 1090 (ECMWF ensemble seasonal forecasts),
+C      42  Ensemble forecast number
+C      43  0
+C
+C   Data specific to ocean model requirements
+C
+C    ** A separate version of code table 2 is used for ocean data
+C       ECMWF local Code Table 2, Version Number 150 for FM92-VIII
+C
+C    ** Note that all coordinates in this local use GRIB definition are
+C       given as 4-byte integers in the following units:
+C
+C          Latitudes/longitudes:   microdegrees
+C          Distance (general):     metres   (default: can be changed)
+C          Time:                   seconds  (default: can be changed)
+C
+C          Depth below sea level:  millimetres  (positive downwards)
+C          Isopycnic level:        (potential density - 1000)*1.0E6
+C
+C    ** Permitted range of values is  -2.147E9 < i < 2.147E9 approx.
+C
+C    ** At several points in the definition, there is a potential need
+C       for a variable amount of supplementary data. This is indicated
+C       with '(+INFO)', and in such cases a supplementary data block is
+C       specified at the end of the local use section.
+C
+C
+C   1. Coordinate structure definition
+C
+C       The physical meaning of the (x,y,z,t) coordinate system is
+C       defined here.
+C
+C      44  Fundamental spatial reference system (Planet flag)
+C               0 = Earth  (centre/north pole/Greenwich)
+C             200 = Geocentric RA/dec
+C             201 = Heliocentric coordinates
+C             255 = Unspecified
+C
+C      45  Fundamental time reference
+C               0 = Reference time given in standard GRIB header
+C                  (use for forecasts to indicate start of prediction)
+C               1 = C.E. (ie 0 AD)
+C               2 = Julian Day number = 0.0
+C             100 = Zero at start of arbitrary expt
+C             255 = Unspecified
+C
+C      46  Space unit flag (applies only if lengths NOT otherwise
+C            labelled)
+C               0 = metres
+C           i<128 = 10**i metres
+C           i>128 = 10**(i-256) metres
+C
+C      47  Vertical coordinate definition (z)
+C               0 = z above origin
+C               1 = R from origin
+C               2 = h above mean sea level geopotential
+C               3 = h above ground surface
+C             160 = geopotential depth below mean sea level     (mm)
+C             161 = ocean isopycnic surface  (pot. dens.: see above)
+C
+C      48  Horizontal coordinate definition (x,y)
+C             0 = latitude/longitude           (microdegrees)
+C             1 = cartesian (fundamental origin)
+C             2 = cartesian (shifted,rotated origin)           (+INFO)
+C             3 = regular gaussian grid        (microdegrees)  (+INFO)
+C             4 = polar stereographic                          (+INFO)
+C             5 = spherical harmonic coefficients  (integers)  (+INFO)
+C
+C      49  Time unit flag
+C               0 = seconds
+C               1 = minutes
+C               2 = hours
+C               3 = days
+C               4 = years
+C         5<i<128 = 10**(i-4) years
+C           i>128 = 10**(i-256) seconds
+C
+C      50  Time coordinate definition (t)
+C             0 = real earth time (UTC)
+C             1 = ideal earth time (360 * 86400s days per year)
+C
+C   2. Position definition
+C
+C       A 2-dimensional field located in 4-dimensional space-time needs
+C       2 coordinates to define where the field is located, and 2
+C       coordinates internal to the field. The locating coordinates are
+C       specified first. Each coordinate is identified according to the
+C       following table, and should be in this order where possible:
+C
+C            1   t
+C            2   z
+C            3   x
+C            4   y
+C
+C       It is possible to specify mixed coordinates, to allow sections
+C       at angles to the coordinate system.
+C
+C      51  Mixed coordinate field flag
+C             0 = No mixed coordinates
+C             1 = x,y coordinates mixed (+INFO)
+C             2 = x,z coordinates mixed (+INFO)
+C             3 = y,z coordinates mixed (+INFO)
+C             4 = x,t coordinates mixed (+INFO)
+C             5 = y,t coordinates mixed (+INFO)
+C             6 = z,t coordinates mixed (+INFO)
+C
+C
+C       Now define the location of the 2-dimensional field:
+C
+C      52  Coordinate 1 flag  (usually time)
+C      53  Averaging flag
+C             0 = no averaging (data on/at level 1)
+C             1 = inclusive average between level 1 and 2
+C             2 = exclusive average between level 1 and 2
+C      54  Position of level 1   (4 byte integer)
+C      55  Position of level 2   (4 byte integer) (or zero if not used)
+C
+C      56  Coordinate 2 flag  (usually z-coordinate)
+C      57  Averaging flag
+C             0 = no averaging (data on/at level 1)
+C             1 = inclusive average between level 1 and 2
+C             2 = exclusive average between level 1 and 2
+C      58  Position of level 1   (4 byte integer)
+C      59  Position of level 2   (4 byte integer) (or zero if not used)
+C
+C       An inclusive average discards land points when calculating the
+C       average, and will produce a value where there is at least one
+C       valid ocean point. An exclusive average will only produce a
+C       value if all of the points being averaged are valid.
+C
+C
+C   3. Grid definition
+C
+C      60  Coordinate 3 flag (x-axis, usually longitude)
+C      61  Coordinate 4 flag (y-axis, usually latitude)
+C
+C      62  Coordinate 4 of first grid point     (4-byte integer)
+C      63  Coordinate 3 of first grid point     (4-byte integer)
+C      64  Coordinate 4 of last grid point      (4-byte integer)
+C      65  Coordinate 3 of last grid point      (4-byte integer)
+C      66  i-increment         (also stored as a 4-byte integer)
+C      67  j-increment         (also stored as a 4-byte integer)
+C
+C
+C      68  Flag for irregular grid coordinate list
+C             0 = none
+C             1 = x-axis values    (typically longitude)
+C             2 = y-axis values    (typically latitude)
+C             3 = First x-axis, then y-axis values given
+C      69  Flag for normal or staggered grid
+C             0 = normal grid (all rows have same x-coordinate system)
+C             1 = staggered grid (odd and even rows have different
+C                 x-coordinate systems, eg Arakawa E grid)
+C
+C   4. Further information
+C
+C      70  Flag for any further information
+C             0 = none
+C             1 = auxiliary array contains x-axis topographic
+C                 depths/heights
+C
+C   5. Auxiliary information
+C
+C      71  Number of entries in horizontal coordinate definition
+C           supplement (1 byte only)
+C      72  Number of entries in mixed coordinate definition  (2 bytes)
+C      73  Number of entries in grid coordinate list  (2 bytes)
+C      74  Number of entries in auxiliary array (2 bytes)
+C
+C                                                     [ 64 bytes fixed ]
+C
+C     A. Horizontal coordinate supplement  (4-byte integers)
+C
+C      A1-nn  Not yet defined
+C
+C     B. Mixed coordinate definition  (4-byte integers)
+C
+C         [  For the linear case, assume a transformation of the form
+C              x' =  alpha * (x - x0) + (1-alpha) * (y - y0)  ]
+C
+C      B1  Flag for regularity of x-y coordinate mixing
+C             0 = Mixing is regular and linear
+C             1 = Mixing is irregular, code given
+C        For regular, linear mixing:
+C           B2  Alpha  (*1E9)
+C           B3  X0
+C           B4  Y0
+C        Irregular mixing with code given:
+C           B2  )
+C           B3  ) Locally defined codes to define section
+C           B4  )
+C
+C     C. Grid coordinate list  (4-byte integers)
+C
+C      C1-nn  Coordinates of irregular x and y-axes. The x-axis is
+C             given first, then the second x-axis (if staggered grid),
+C             and then the y-axis. If the x-axis is regular but
+C             staggered, then the longitude of the first point of the
+C             second row should be specified as the first entry of this
+C             list.
+C
+C     D. Auxiliary array  (4-byte integers)
+C
+C      D1-nn  Auxiliary array values
+C
+C     E. Post-auxiliary array  (4-byte integers)
+C
+C      P0-n  Post-auxiliary array values
+C
+C      P0 - Count of items in post-auxiliary array
+C           ( = n+1, including the count)
+C      P1 - First item.
+C      P2 - Second item.
+C      "  - "
+C      Pn - nth item.
+C
+C
+C   Comments on the setting of other GRIB parameters:
+C
+C       The time and time-range data should be set properly in the main
+C       section, if possible.
+C
+C       The indicator of type of level should be set to 160 (depth below
+C       sea level) for all oceanographic data. The depth in metres
+C       should be set to the appropriate value if the field is a
+C       horizontal section, and to zero in all other cases.
+C
+C       It is assumed that the grid description section of the GRIB code
+C       is set for a latitude/longitude grid, with correct values for
+C       the number of points along parallels/meridians and the
+C       coordinates of the first and last data points in millidegrees
+C       (or the appropriate units from this section, divided by 1000).
+C       The coordinate increments should be given to the extent that
+C       the field is regular.
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef5.F b/gribex/ecdef5.F
new file mode 100755
index 0000000..99ff908
--- /dev/null
+++ b/gribex/ecdef5.F
@@ -0,0 +1,320 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF5( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                    KPR, KRET)
+C
+C---->
+C**** ECDEF5
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 5.
+C     (Extensions for forecast probabilities).
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF5( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 1.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 5.
+#include "ecdef5.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IZERO, I16BIT
+C
+      INTEGER ILALO
+      DIMENSION ILALO(8)
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     16-bits set to 1
+      DATA I16BIT/ 65535 /
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Extensions Forecast probabilities (definition 5).
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C*    Octet 50 : Forecast probability number
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 51 : Total number of forecast probabilities
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(43),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 52 : Threshold units decimal scale factor.
+C                One 8 bit field.
+C
+C     When coding data, set sign bit to 1 if value is negative:
+      IF ( LENCODE ) CALL CSGNBT( ILALO(1), KSEC1(44),  8, KRET)
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,ILALO(1),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C     When decoding, use sign bit ( =  1 if value is negative)
+      IF ( LDECODE ) CALL DSGNBT( KSEC1(44), ILALO(1),  8, KRET)
+C
+C     Octet 53 : Threshold indicator.
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C
+C*    Octet 54-55 : Lower threshold.
+C                   One 16 bit field.
+C
+C     Check if lower threshold is present ..
+      IF ( KSEC1(45) .NE. 2 ) THEN
+C
+C       When coding data, set sign bit to 1 if value is negative:
+        IF ( LENCODE ) CALL CSGNBT( ILALO(1), KSEC1(46), 16, KRET)
+C
+C       Insert/extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+          GO TO 900
+        ENDIF
+C
+C       When decoding, use sign bit ( =  1 if value is negative)
+        IF ( LDECODE ) CALL DSGNBT( KSEC1(46), ILALO(1), 16, KRET)
+C
+C     .. if not present, set value to 16 bits all set to 1
+      ELSE
+	  IF ( LENCODE ) THEN
+            I16BIT = 65535
+            CALL INXBIT(KGRIB,KLENG,KNSPT,I16BIT,1,KBITS,16,HFUNC,KRET)
+            IF (KRET.NE.0) THEN
+              KRET = 2
+              WRITE(GRPRSM,9004)
+              GO TO 900
+            ENDIF
+          ELSE
+            I16BIT = 65535
+            KSEC1(46) = I16BIT
+            KNSPT = KNSPT + 16
+          ENDIF
+      ENDIF
+C
+C     Octet 56-57 : Upper threshold.
+C                   One 16 bit field.
+C
+C     Check if upper threshold is present ..
+      IF ( KSEC1(45) .NE. 1 ) THEN
+C
+C       When coding data, set sign bit to 1 if value is negative:
+        IF ( LENCODE ) CALL CSGNBT( ILALO(1), KSEC1(47), 16, KRET)
+C
+C       Insert/extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO(1),1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+          GO TO 900
+        ENDIF
+C
+C       When decoding, use sign bit ( =  1 if value is negative)
+        IF ( LDECODE ) CALL DSGNBT( KSEC1(47), ILALO(1), 16, KRET)
+C
+      ELSE
+	IF ( LENCODE ) THEN
+          I16BIT = 65535
+          CALL INXBIT(KGRIB,KLENG,KNSPT,I16BIT,1,KBITS,16,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,9004)
+            GO TO 900
+          ENDIF
+	ELSE
+          I16BIT = 65535
+          KSEC1(47) = I16BIT
+          KNSPT = KNSPT + 16
+        ENDIF
+      ENDIF
+C
+C
+C     Octet 58 : Reserved - set to zero.
+C                One 8 bit field.
+C
+C     Insert/extract field.
+      IZERO = 0
+      CALL INXBIT (KGRIB,KLENG,KNSPT, IZERO ,1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF5 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,9003) KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF5')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9003 FORMAT (1H ,'         KNSPT  = ',I12)
+C
+ 9004 FORMAT (' ECDEF5: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef5.h b/gribex/ecdef5.h
new file mode 100755
index 0000000..5d50976
--- /dev/null
+++ b/gribex/ecdef5.h
@@ -0,0 +1,41 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 5.
+C                         Forecast probability data.
+C                   ----------------------------------
+C
+C
+C                    Words 38-41 as for definition 1.  
+C                    Word 39 = 16 to indicate forecast probabilities.
+C
+C                    42  Forecast probability number
+C
+C                    43  Total number of forecast probabilities
+C
+C                    44  Threshold units decimal scale factor:
+C                                 +/- power of 10 (or zero)
+C                                 top bit = 1 for negative values
+C
+C                    45  Threshold indicator:
+C                                 1 = only lower threshold present
+C                                 2 = only upper threshold present
+C                                 3 = both upper and lower thresholds
+C                                     present
+C
+C                    46  Lower threshold value
+C
+C                    47  Upper threshold value
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C       
diff --git a/gribex/ecdef50.F b/gribex/ecdef50.F
new file mode 100755
index 0000000..1b4ee16
--- /dev/null
+++ b/gribex/ecdef50.F
@@ -0,0 +1,230 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF50(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C---->
+C**** ECDEF50
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 50.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF50(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C
+C     Input
+C     -----
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C     KSEC1      - Array containing Grib Section 1 data.
+C     KGRIB      - Array containing Grib coded data.
+C     KLENG      - Length (words) of KGRIB.
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C     KBITS      - Number of bits in computer word.
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output
+C     ------
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 50.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C     CSGNBT  - code a signed value
+C     DSGNBT  - decode a signed value
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef50.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      December 2001
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, JLOOP, ITEMP, IRETA
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Handle the local extension
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Octet 50 : Number
+C     Octet 51 : Total
+C     Octet 52 : Model identifier
+C     Three 8 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),3,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDEF50: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, elements 42 - 44.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octets 50 - 52.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Octets 53-56: Latitude of North-west corner of area
+C     Octets 57-60: Longitude of North-west corner of area
+C     Octets 61-64: Latitude of South-east corner of area
+C     Octets 65-68: Longitude of South-east corner of area
+C     Four 32 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),4,KBITS,32,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDEF50: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, elements 45 - 48.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octets 53 - 68.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Octets 69-116 : Reserved for ECMWF additions.
+C     Octet 69 : Original parameter number
+C     Octet 70 : Original parameter table number
+C     Octets 71-116 : Reserved for ECMWF additions.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(49),2,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDEF50: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, elements 49 - 50.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octets 69 - 70.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      IF( LENCODE ) THEN
+        DO JLOOP = 71, 116
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF( KRET.NE.0 ) THEN
+            KRET = 2
+            WRITE(*,*) 'ECDEF50: Error reported by routine INXBIT:'
+            WRITE(*,*) '      encoding section 1, octets 71 - 116'
+            GOTO 900
+          ENDIF
+        ENDDO
+      ELSE
+        DO JLOOP = 51, 60
+          KSEC1(JLOOP) = 0
+        ENDDO
+        KNSPT = KNSPT + 46*8
+      ENDIF
+C
+C     Octets 117-300 : Optional data.
+C     Forty-six 32 bit fields.
+C
+      DO JLOOP = 61, 106
+        CALL INXBIT(
+     X    KGRIB,KLENG,KNSPT,KSEC1(JLOOP),1,KBITS,32,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDEF50: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(*,*) '      encoding section 1, elements 61 - 106.'
+          ELSE
+            WRITE(*,*) '      decoding section 1, octets 117 - 300.'
+          ENDIF
+          GOTO 900
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) THEN
+        CALL ABORTX('ECDEF50')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdef50.h b/gribex/ecdef50.h
new file mode 100755
index 0000000..a84f3a7
--- /dev/null
+++ b/gribex/ecdef50.h
@@ -0,0 +1,76 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 50.
+C     Member State data.
+C     ------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C       5          2      Originating centre (WMO identifier)
+C
+C      26         22      Sub-centre identifier (= 98)
+C
+C      **         24      Flag field to indicate local use in Section 1 (= 1)
+C
+C      41         37      ECMWF local GRIB use definition identifier (= 50)
+C
+C      42         38      Class
+C
+C      43         39      Type
+C
+C     44-45       40      Stream
+C
+C     46-49       41      Version number/experiment identifier.
+C                         (4 Ascii characters, right justified)
+C
+C      50         42      Number : Ensemble forecast number.
+C                                  Control forecast is number 0,
+C                                  perturbed forecasts 1-nn.
+C                         Set to 0 if not ensemble forecast.
+C
+C      51         43      Total  : Total number of forecasts in ensemble.
+C                                  This number includes the control forecast.
+C                         Set to 0 if not ensemble forecast.
+C
+C      52         44      Model identifier (in range 1 - 255)
+C
+C     53-56       45      Latitude of North-west corner of area (degrees*10^6)
+C
+C     57-60       46      Longitude of North-west corner of area (degrees*10^6)
+C
+C     61-64       47      Latitude of South-east corner of area (degrees*10^6)
+C
+C     65-68       48      Longitude of South-east corner of area (degrees*10^6)
+C
+C     -----------------------------------------------------------------|
+C
+C     69-116    49-60     Reserved for ECMWF additions.
+C
+C      69         49      Original parameter number
+C
+C      70         50      Original parameter table number
+C
+C     71-116    51-60     Set to zero
+C
+C     -----------------------------------------------------------------|
+C
+C     117-300   61-106    Optional data.
+C
+C     -----------------------------------------------------------------|
+C
+C     ** Not stored in GRIB message.
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef6.F b/gribex/ecdef6.F
new file mode 100755
index 0000000..839f36f
--- /dev/null
+++ b/gribex/ecdef6.F
@@ -0,0 +1,263 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF6( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPLEN, KPR, KRET)
+C
+C---->
+C**** ECDEF6
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 1.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF6( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN,
+C    X             KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPLEN      - Pointer to field containing length of Section 1.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 1.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 1.
+#include "ecdef6.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF       27th February 1996
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IZERO, ILOOP, LENS1, INDATE
+C
+      LOGICAL LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle definition 1.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Octet 50-51 :Reserved.
+C     Should be 0 !!
+C
+      IF ( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO, 1,KBITS, 16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ELSE
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),2,KBITS,8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+      ENDIF
+C
+C     Octet 52-54 : YYMMDD date of the SST field used.
+C
+      IF( LENCODE) THEN
+        INDATE = KSEC1(44)
+        IF( INDATE.GT.19000000 ) INDATE = INDATE - 19000000
+      ENDIF
+      CALL INXBIT(KGRIB,KLENG,KNSPT,INDATE,1,KBITS,24,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+      IF( .NOT. LENCODE) THEN
+        IF( (INDATE.LT.19000000).AND.(INDATE.GT.100) )
+     X    INDATE = INDATE + 19000000
+        KSEC1(44) = INDATE
+      ENDIF
+C
+C     Octet 55 : Type of SST field used.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45), 1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octet 56 : Count of ICE fields used (n, say).
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46), 1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     Octet 57->54+(n*4) : YYMMDD dates and satellite numbers of the
+C                          ICE fields used.
+C
+      DO 210 ILOOP = 1, KSEC1(46)
+C
+C       YYMMDD date.
+        IF( LENCODE) THEN
+          INDATE = KSEC1(45+(ILOOP*2))
+          IF( INDATE.GT.19000000 ) INDATE = INDATE - 19000000
+        ENDIF
+        CALL INXBIT(KGRIB,KLENG,KNSPT,INDATE,1,KBITS,24,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+        IF( .NOT. LENCODE) THEN
+          IF( (INDATE.LT.19000000).AND.(INDATE.GT.100) )
+     X      INDATE = INDATE + 19000000
+          KSEC1(45+(ILOOP*2)) = INDATE
+        ENDIF
+C
+C       Satellite number (ICE data).
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46+(ILOOP*2)),
+     X              1,KBITS, 8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF
+C
+  210 CONTINUE
+C
+C     On encoding, adjust length of section 1.
+      IF( LENCODE ) THEN
+        LENS1 = 56 + KSEC1(46)*4
+        CALL INXBIT(KGRIB,KLENG,KPLEN,LENS1, 1,KBITS,24,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,9004)
+        ENDIF      
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF6 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,*) '         KNSPT  = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF6')
+      ELSE
+        RETURN
+      ENDIF
+C
+C
+ 9004 FORMAT (' ECDEF6: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef6.h b/gribex/ecdef6.h
new file mode 100755
index 0000000..91edd76
--- /dev/null
+++ b/gribex/ecdef6.h
@@ -0,0 +1,83 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C                   ECMWF local GRIB use definition 6.
+C                       Surface temperature data.
+C                   ----------------------------------
+C
+C                 GRIB code
+C     KSEC1(NN)   section 1
+C                 octet(s)
+C     ---------   ---------
+C
+C       37         41        ECMWF local GRIB use definition identifier
+C                            = 6
+C                            = surface temperature fields made from SST and
+C                            SSMI data with first-guess values inserted on
+C                            land points.
+C
+C       38         42        Class : 1 = Operations
+C
+C       39         43        Type  : 2 = Analysis
+C
+C       40         44-45     Stream : 1025 = Daily archive
+C
+C       41         46-49     Expver : Version number/experiment identifier.
+C                                   (4 Ascii characters, right justified)
+C
+C       42         50        Zero, for compatibility with MARS labelling.
+C
+C       43         51        Zero, for compatibility with MARS labelling.
+C
+C       44         52-54     Date of SST field used; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       45         55        Type of SST field used:
+C                            0 = climatology
+C                            1 = 1/1 degree sst data
+C                            2 = 2/2 degree sst data
+C
+C       46         56        Count of ICE fields used (n, say).
+C                            (NB. n maybe 0).
+C
+C       47         57-59     Date of first ICE field used; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C	48	   60	     First day satellite number (ICE data)
+C
+C       49         61-63     Date of second ICE field used ; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       50         64        Second day satellite number (ICE data)
+C
+C       51         65-67     Date of third ICE field used ; YYYYMMDD.
+C                            (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       52         68        Third day satellite number (ICE data)
+C
+C
+C       ...
+C
+C       45+(n*2)   53+(n*4)  Date of nth field used; YYYYMMDD.
+C                ->55+(n*4)  (Stored in 3 bytes as YYYYMMDD-19000000.
+C                             Zero = date not given.)
+C
+C       46+(n*2)   56+(n*4)  Nth  day satellite number (ICE data)
+C
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef7.F b/gribex/ecdef7.F
new file mode 100755
index 0000000..7b8f7df
--- /dev/null
+++ b/gribex/ecdef7.F
@@ -0,0 +1,238 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF7( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF7
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 7.
+C     (Extensions for sensitivity gradients/trajectory forecast).
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF7( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion or
+C                  extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 7.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 7.
+#include "ecdef7.h"
+C
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF      14th February 1995
+C     Modify comments (see ecdef.h also) for inclusion of Sensitivity
+C     forecast.
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*(*) HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IDUM
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Extensions sensitivity gradients/trajectory forecast/
+C                 sensitivity forecasts.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C*    Octet 50 : Forecast indicator or iteration number
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 51 : Total number of diagnostics(trajectory forecast), or
+C                Number of iterations in diagnostic minimisation
+C                (sensitivity forecast), or
+C                = 0 for trajectory forecasts.
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(43),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 52 : Domain.
+C                0 = Global
+C                1 = Europe
+C                2 = Northern Hemsphere
+C                3 = Southern Hemsphere
+C                One 8 bit field.
+C
+C         Insert/extract fields.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 53 : Diagnostic number
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C*    Octet 54 : Dummy, set to zero.
+C                One 8 bit field.
+C
+C     Insert/extract field.
+C
+      IDUM = 0
+      CALL INXBIT (KGRIB,KLENG,KNSPT,IDUM,1,KBITS, 8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+        GO TO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF7 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,9003) KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF7')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9003 FORMAT (1H ,'         KNSPT  = ',I12)
+C
+ 9004 FORMAT (' ECDEF7: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef7.h b/gribex/ecdef7.h
new file mode 100755
index 0000000..fa60b6f
--- /dev/null
+++ b/gribex/ecdef7.h
@@ -0,0 +1,55 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C       
+C                   ECMWF local GRIB use definition 7.
+C
+C                   Sensitivity gradient/Trajectory
+C                   forecast and Sensitivity forecast data.
+C                   ---------------------------------------
+C
+C
+C                   Word
+C                   ----
+C                    38    as for definition 1.  
+C
+C                    39    Type  :
+C                                 50 = Sensitivity gradient
+C                                 51 = Trajectory forecast
+C                                 52 = Sensitivity forecast
+C
+C                    40    Stream :
+C                               1036 = Sensitivity forecasts
+C
+C                    41    as for definition 1.  
+C
+C                    42    Forecast number or diagnostic number:
+C                          = 0 for trajectory forecast(type 51).
+C                          = 0 for control sensitivity forecast(type 52).
+C                          = 1 J1 diagnostic(type 50).
+C                          = 2 J2 diagnostic(type 50).
+C                          = 3 J3 diagnostic(type 50).
+C                          = 4 J4 diagnostic(type 50).
+C                          = 5 J5 diagnostic(type 50).
+C
+C                    43    Total number of diagnostics(type 50).
+C                          0 for trajectory forecasts(type 51).
+C                          Number of interations in diagnostic
+C                          minimisation(type 52).
+C
+C                    44    Domain
+C                          = 0 for Global
+C                          = 1 for Europe
+C                          = 2 for Northern Hemisphere
+C                          = 3 for Southern Hemisphere
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef8.F b/gribex/ecdef8.F
new file mode 100755
index 0000000..598a64d
--- /dev/null
+++ b/gribex/ecdef8.F
@@ -0,0 +1,178 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF8( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF8
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 8.
+C     (ECMWF re-analysis data)
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF8( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.(Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 8.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C     ABORTX
+C     CSGNBT
+C     DSGNBT
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Adapted from ECLOC1.F - simplified to handle just definition 8.
+#include "ecdef8.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      18th January 1995
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle ECMWF re-analysis data, definition 8.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C
+C     Octet 50-62 : Unsigned integers in range (0-255)
+C     Thirteen 8 bit fields.
+C
+C     Insert/extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),13,KBITS,8,HFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        KRET = 2
+        WRITE(GRPRSM,9004)
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF8 : Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,9003) KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF8')
+      ELSE
+        RETURN
+      ENDIF
+C
+ 9003 FORMAT (1H ,'         KNSPT  = ',I12)
+C
+ 9004 FORMAT (' ECDEF8: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/ecdef8.h b/gribex/ecdef8.h
new file mode 100755
index 0000000..403d34f
--- /dev/null
+++ b/gribex/ecdef8.h
@@ -0,0 +1,32 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C       
+C                   ECMWF local GRIB use definition 8.
+C
+C                   ECMWF re-analysis data
+C                   ----------------------
+C
+C
+C                   Word
+C                   ----
+C                    38    as for definition 1.  
+C
+C                    39    Type.
+C
+C                    40    Stream.
+C
+C                    41    as for definition 1.  
+C
+C                    42-54 Unsigned integers in range (0-255)
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdef9.F b/gribex/ecdef9.F
new file mode 100755
index 0000000..90f889d
--- /dev/null
+++ b/gribex/ecdef9.F
@@ -0,0 +1,345 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDEF9( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS,
+     X                   KPR, KRET)
+C
+C---->
+C**** ECDEF9
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 9.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDEF9( HFUNC, KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 9.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C     CSGNBT  - code a signed value
+C     DSGNBT  - decode a signed value
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdef9.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      June 1996
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET, IZERO, JLOOP, ITEMP, IRETA
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC .EQ. 'C' )
+      LDECODE = .NOT. LENCODE
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle singular vector.
+C     ------------------------------------------------------------------
+C
+  200   CONTINUE
+C
+      IF( KSEC1(39).EQ.62 ) THEN
+C
+C       Octets 50-51 : Singular vector number.
+C       Octets 52-53 : Number of iterations.
+C       Octets 54-55 : Number of singular vectors computed.
+C       Three 16 bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),3,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X  '      encoding section 1, elements 42 - 44.'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 55.'
+          ENDIF
+        ENDIF
+C
+C       Octet 56 : Norm used at initial time.
+C       Octet 57 : Norm used at final time.
+C       Two 8 bit fields.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),2,KBITS,8,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*)
+     X  '      encoding section 1, elements 45 - 46.'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 56 - 57.'
+          ENDIF
+        ENDIF
+C
+C       Octets 58-61 : Multiplication factor.
+C       One 32 bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(47),1,KBITS,32,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*) '      encoding section 1, element 47.'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 58 - 61.'
+          ENDIF
+        ENDIF
+C
+C       Octets 62-65 : Latitude of north-west corner of LPO area.
+C       Octets 66-69 : Longitude of north-west corner of LPO area.
+C       Octets 70-73 : Latitude of south-east corner of LPO area.
+C       Octets 74-77 : Longitude of south-east corner of LPO area.
+C       Four signed 32 bit fields.
+C
+        DO 210 JLOOP = 48, 51
+          IF ( LENCODE ) CALL CSGNBT( ITEMP, KSEC1(JLOOP), 32, IRETA)
+          CALL INXBIT(KGRIB,KLENG,KNSPT,ITEMP,1,KBITS,32,HFUNC,KRET)
+          IF ( LDECODE ) CALL DSGNBT( KSEC1(JLOOP), ITEMP, 32, IRETA)
+          IF ( (IRETA.NE.0) .OR. (KRET.NE.0) ) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*)
+     X  'encoding/decoding section 1, element ', JLOOP
+          ENDIF
+  210   CONTINUE
+C
+C       Octets 78-81 : Accuracy.
+C       One 32 bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(52),1,KBITS,32,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*) '      encoding section 1, element 52.'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 78 - 81.'
+          ENDIF
+        ENDIF
+C
+C       Octets 82-83 : Number of singular vectors evolved.
+C       One 16 bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(53),1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*) '      encoding section 1, element 53.'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 82 - 83.'
+          ENDIF
+        ENDIF
+C
+C       Octets 84-87 : Ritz number.
+C       Octets 88-91 : Ritz number.
+C       Two signed 32 bit fields.
+C
+        DO 220 JLOOP = 54, 55
+          IF ( LENCODE ) CALL CSGNBT( ITEMP, KSEC1(JLOOP), 32, IRETA)
+          CALL INXBIT(KGRIB,KLENG,KNSPT,ITEMP,1,KBITS,32,HFUNC,KRET)
+          IF ( LDECODE ) CALL DSGNBT( KSEC1(JLOOP), ITEMP, 32, IRETA)
+          IF ( (IRETA.NE.0) .OR. (KRET.NE.0) ) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+            WRITE(GRPRSM,*)
+     X  'encoding/decoding section 1, element ', JLOOP
+          ENDIF
+  220   CONTINUE
+C
+C       Octet 92 : Reserved.
+C       Set to 0.
+C
+        IF ( LENCODE ) THEN
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF (KRET.NE.0) THEN
+            KRET = 2
+            WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+            IF( LENCODE ) THEN
+              WRITE(GRPRSM,*)
+     X  '      encoding section 1, reserved element.'
+            ELSE
+              WRITE(GRPRSM,*) '      decoding section 1, octets 92.'
+            ENDIF
+          ENDIF
+        ELSE
+          KNSPT = KNSPT + 8
+        ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Handle perturbation analysis or perturbation.
+C     ------------------------------------------------------------------
+C
+      ELSE
+C
+  300   CONTINUE
+C
+C       Octets 50-51 : Perturbation analysis or perturbation number.
+C       One 16 bit field.
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(42),1,KBITS,16,HFUNC,KRET)
+        IF (KRET.NE.0) THEN
+          KRET = 2
+          WRITE(GRPRSM,*) 'ECDEF9: Error reported by routine INXBIT:'
+          IF( LENCODE ) THEN
+            WRITE(GRPRSM,*) '      encoding section 1, element 42.'
+          ELSE
+            WRITE(GRPRSM,*) '      decoding section 1, octets 50 - 51.'
+          ENDIF
+        ENDIF
+C
+        IF ( LENCODE ) THEN
+C
+C         Octets 52-92 set to zero
+          DO 310 JLOOP = 52,92
+            IZERO = 0
+            CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+            IF (KRET.NE.0) THEN
+              KRET = 2
+              WRITE(GRPRSM,*)
+     X  'ECDEF9: Error reported by routine INXBIT:'
+              WRITE(GRPRSM,*)
+     X  '        encoding section 1, element ',JLOOP
+            ENDIF
+  310     CONTINUE
+C
+        ELSE
+C
+C         KSEC1(43-55) set to zero.
+          DO 320 JLOOP = 43, 55
+            KSEC1(JLOOP) = 0
+  320     CONTINUE
+          KNSPT = KNSPT + 328
+          KRET = 0
+        ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+      ENDIF
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'ECDEF9: Section 9.'
+        WRITE(GRPRSM,*) '        Output values set, KNSPT = ', KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF (IRET.EQ.0.AND.KRET.NE.0) THEN
+        CALL ABORTX ('ECDEF9')
+      ELSE
+        RETURN
+      ENDIF
+C
+C
+      END
diff --git a/gribex/ecdef9.h b/gribex/ecdef9.h
new file mode 100755
index 0000000..7c3b2a5
--- /dev/null
+++ b/gribex/ecdef9.h
@@ -0,0 +1,80 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 9.
+C     Singular vectors and ensemble perturbations.
+C     ---------------------------------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C     42        38        Class : 1 = Operations
+C                                 2 = Research
+C
+C     43        39        Type  : 60 = Perturbed analysis
+C                                 62 = Singular vector
+C                                 63 = Adjoint singular vector
+C
+C     44-45     40        Stream : 1035 = Ensemble forecasts
+C
+C     46-49     41        Expver : Version number/experiment identifier.
+C                                  ( 4 Ascii characters, right justified)
+C
+C     50-51     42        If type 60, perturbed ensemble forecast number.
+C                         If type 62 or 63, singular vector number.
+C
+C
+C     If type = 60:
+C
+C     52-92     43-55     Set to zero.
+C
+C
+C     If type = 62 or 63:
+C
+C     52-53     43        Number of iterations.
+C
+C     54-55     44        Number of singular vectors computed.
+C
+C     56        45        Norm used at initial time.
+C
+C     57        46        Norm used at final time.
+C
+C     58-61     47        Multiplication factor to convert latitude/longitude
+C                         and accuracy from real to integer.
+C
+C     62-65     48        Latitude in degrees of north-west corner of LPO area
+C                         multiplied by KSEC1(47).
+C
+C     66-69     49        Longitude in degrees of north-west corner of LPO area
+C                         multiplied by KSEC1(47).
+C
+C     70-73     50        Latitude in degrees of south-east corner of LPO area
+C                         multiplied by KSEC1(47).
+C
+C     74-77     51        Longitude in degrees of south-east corner of LPO area
+C                         multiplied by KSEC1(47).
+C
+C     78-81     52        Accuracy multiplied by KSEC1(47).
+C
+C     82-83     53        Number of singular vectors evolved.
+C
+C     84-91     54-55     Ritz numbers.
+C                         Given ritz, then:
+C                           KSEC1(54) = NINT( LOG10(RITZ)-5 )
+C                           KSEC1(55) = NINT( RITZ/ EXP(LOG(10.0)*KSEC1(54) ) )
+C                         Thus:
+C                           RITZ = KSEC1(55)*EXP( LOG(10.0)*KSEC1(54) )
+C
+C     92                  Reserved. Set to zero.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdf190.h b/gribex/ecdf190.h
new file mode 100755
index 0000000..90dc13d
--- /dev/null
+++ b/gribex/ecdf190.h
@@ -0,0 +1,65 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 190.
+C     Multiple ECMWF local definitions
+C     --------------------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C      41         37      ECMWF local GRIB use definition identifier (= 190)
+C
+C      42         38      Class
+C
+C      43         39      Type
+C
+C     44-45       40      Stream
+C
+C     46-49       41      Version number/experiment identifier.
+C                         (4 Ascii characters, right justified)
+C
+C     50-51      42-43    Set to zero (For compatibility with other
+C                                      ECMWF local definitions)
+C
+C      52         44      Number of ECMWF local definitions (N, say)
+C
+C      53         45      First ECMWF local definition number
+C
+C     54-55       46      Number of bytes in first ECMWF local definition
+C
+C      56         47      Second ECMWF local definition number
+C
+C     57-58       48      Number of bytes in second ECMWF local definition
+C
+C      ...        ...
+C
+C    50+N*3      43+N*2   Nth ECMWF local definition number
+C
+C  51+N*3-52+N*3 44+N*2   Number of bytes in Nth ECMWF local definition
+C
+C
+C   N ECMWF local definitions follow:
+C
+C   53+N*3...    45+N*2   Stream of ECMWF local definition bytes previously
+C                         encoded/decoded via function calls.
+C
+C   The ECMWF local definitions are the locally defined extensions from
+C   byte 41 onwards.
+C
+C   If definition 190 appears in the list of ECMWF local, the stream of
+C   ECMWF local definition bytes will include its own stream of ECMWF
+C   local definition bytes.
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecdf191.F b/gribex/ecdf191.F
new file mode 100755
index 0000000..1d75769
--- /dev/null
+++ b/gribex/ecdf191.F
@@ -0,0 +1,362 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECDF191(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KPLEN,KRET)
+C
+C---->
+C**** ECDF191
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use definition 191.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECDF191(HFUNC,KSEC1,KGRIB,KLENG,KNSPT,KBITS,KRET)
+C
+C
+C     Input
+C     -----
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C     KSEC1      - Array containing Grib Section 1 data.
+C     KGRIB      - Array containing Grib coded data.
+C     KLENG      - Length (words) of KGRIB.
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C     KBITS      - Number of bits in computer word.
+C     KPLEN      - Pointer to field containing length of Section 1.
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output
+C     ------
+C     KSEC1      - Array containing Grib Section 1 data.(Updated)
+C     KGRIB      - Array containing Grib coded data.(Updated)
+C     KNSPT      - Number of bit after last one inserted/extracted.
+C                  (Updated)
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  2   , Error reported by routine INXBIT.
+C
+C
+C     Method.
+C     -------
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code, definition 191.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bits
+C     ABORTX  - abort the program
+C     CSGNBT  - code a signed value
+C     DSGNBT  - decode a signed value
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+#include "ecdf191.h"
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      December 2001
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Parameter(s)
+C
+      INTEGER JPBYTES
+C                `-----> Number of bytes in an INTEGER
+#ifdef INTEGER_8
+      PARAMETER( JPBYTES = 8)
+#else
+      PARAMETER( JPBYTES = 4)
+#endif
+C
+C     Subroutine arguments
+C
+      CHARACTER*1   HFUNC
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IRET, IZERO, JLOOP, N, M, ILENS1, N_KNSPT, ICOUNT, IBITS
+C
+      LOGICAL LENCODE, LDECODE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRET = KRET
+      LENCODE = ( HFUNC.EQ.'C' )
+      LDECODE = .NOT. LENCODE
+C
+      N_KNSPT = KNSPT
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Handle the local extension
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Octet 50 : Zero
+C     Octet 51 : Zero
+C     Two 8 bit fields.
+C
+      IF( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '          encoding section 1, octet 50'
+          GOTO 900
+        ENDIF
+      ELSE
+        KSEC1(42) = 0
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+      IF( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '          encoding section 1, octet 51'
+          GOTO 900
+        ENDIF
+      ELSE
+        KSEC1(43) = 0
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+C     Octet 52 : Format version major number
+C     Octet 53 : Format version minor number
+C     Two 8 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(44),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, element 44.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octet 52.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(45),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, element 45.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octet 53.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Octet 54 : Original sub-centre identifier
+C     One 8 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(46),1,KBITS,8,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, element 46.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octet 54.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Octet 55-58 : Padding, set to zero
+C     Four 8 bit fields.
+C
+      IF( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '          encoding section 1, octet 55'
+          GOTO 900
+        ENDIF
+      ELSE
+        KSEC1(47) = 0
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+      IF( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '          encoding section 1, octet 56'
+          GOTO 900
+        ENDIF
+      ELSE
+        KSEC1(48) = 0
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+      IF( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '          encoding section 1, octet 57'
+          GOTO 900
+        ENDIF
+      ELSE
+        KSEC1(49) = 0
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+      IF( LENCODE ) THEN
+        IZERO = 0
+        CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '          encoding section 1, octet 58'
+          GOTO 900
+        ENDIF
+      ELSE
+        KSEC1(50) = 0
+        KNSPT = KNSPT + 8
+      ENDIF
+C
+C     Octets 59-60: Number of bytes of free format data descriptor
+C     One 16 bit field
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(51),1,KBITS,16,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '      encoding section 1, element 51.'
+        ELSE
+          WRITE(*,*) '      decoding section 1, octets 59 - 60.'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Octets 61-(60+N) : Data bytes
+C     N values; 8 bit values packed in integer array element
+C
+      N = KSEC1(51)
+      ICOUNT = (N+JPBYTES-1)/JPBYTES
+      IBITS  = JPBYTES*8
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC1(52),
+     X            ICOUNT,KBITS,IBITS,HFUNC,KRET)
+      IF( KRET.NE.0 ) THEN
+        KRET = 2
+        WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+        IF( LENCODE ) THEN
+          WRITE(*,*) '    encoding section 1, elements 52 - (51+N/4).'
+        ELSE
+          WRITE(*,*) '    decoding section 1, octets 61 - (60+N).'
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Octets (60+N) onwards: Padded with zeroes
+C     The section will be padded with zeroes to make the overall length
+C     of the section = 60 + 80*M for some M > 0.
+C
+      M = 60+(((ICOUNT*JPBYTES)+79)/80)*80
+C
+      DO JLOOP = (60+ICOUNT*JPBYTES+1), M
+        IF( LENCODE ) THEN
+          IZERO = 0
+          CALL INXBIT(KGRIB,KLENG,KNSPT,IZERO,1,KBITS,8,HFUNC,KRET)
+          IF( KRET.NE.0 ) THEN
+            KRET = 2
+            WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+            WRITE(*,*) '      encoding section 1, octets (56+N) onwards'
+            GOTO 900
+          ENDIF
+        ELSE
+          KNSPT = KNSPT + 8
+        ENDIF
+      ENDDO
+C
+C     Calculate section 1 total length using original and final bit
+C     positions. NB packing started at octet 50.
+C
+      ILENS1 = 49 + (KNSPT - N_KNSPT)/8
+C
+C*    Insert length of section 1, if coding data.
+C     One 24-bit field.
+C
+      IF( LENCODE ) THEN
+        CALL INXBIT(KGRIB,KLENG,KPLEN,ILENS1,1,KBITS, 24,HFUNC,KRET)
+        IF( KRET.NE.0 ) THEN
+          KRET = 2
+          WRITE(*,*) 'ECDF191: Error reported by routine INXBIT:'
+          WRITE(*,*) '         encoding length of section 1'
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF( (IRET.EQ.0).AND.(KRET.NE.0) ) THEN
+        CALL ABORTX('ECDF191')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/ecdf191.h b/gribex/ecdf191.h
new file mode 100755
index 0000000..88f610d
--- /dev/null
+++ b/gribex/ecdf191.h
@@ -0,0 +1,65 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     ECMWF local GRIB use definition 191.
+C     Free format data descriptor.
+C     ----------------------------
+C
+C     Octet     KSEC1(n)
+C     -----     --------
+C
+C       5          2      Originating centre (WMO identifier)
+C
+C      26         22      Sub-centre identifier (= 98)
+C
+C      **         24      Flag field to indicate local use in Section 1 (= 1)
+C
+C      41         37      ECMWF local GRIB use definition identifier (= 191)
+C
+C      42         38      Class
+C
+C      43         39      Type
+C
+C     44-45       40      Stream
+C
+C     46-49       41      Version number/experiment identifier.
+C                         (4 Ascii characters, right justified)
+C
+C     50-51      42-43    Set to zero (For compatibility with other
+C                                      ECMWF local definitions)
+C
+C      52         44      Format version major number
+C
+C      53         45      Format version minor number
+C
+C      54         46      Original sub-centre identifier
+C
+C     55-58     (47-50)   Set to zero
+C
+C     59-60       51      Number of bytes of free format data descriptor
+C                         (N, say)
+C
+C   61-(60+N) 52-(51+N/J) Data descriptor bytes packed in integer array
+C                         elements
+C                         (J = the number of bytes in an INTEGER = 4 or 8)
+C
+C
+C     The section will be padded with zeroes to make the overall length
+C     of the section = 60 + 80*M for some M > 0.
+C
+C     -----------------------------------------------------------------|
+C
+C     ** Not stored in GRIB message.
+C
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
diff --git a/gribex/ecloc1.F b/gribex/ecloc1.F
new file mode 100755
index 0000000..a838a7a
--- /dev/null
+++ b/gribex/ecloc1.F
@@ -0,0 +1,224 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ECLOC1(HFUNC,KSEC1,KGRIB,KNSPT,KBITS,KRET)
+C
+C---->
+C**** ECLOC1
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of ECMWF local use of Section 1.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ECLOC1(HFUNC,KSEC1,KGRIB,KNSPT,KBITS,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     HFUNC      - Requested function.
+C                  'C' to code data.
+C                  'D' to decode data.
+C     KSEC1      - Array containing Grib Section 1 data.
+C     KGRIB      - Array containing Grib coded data.
+C     KNSPT      - Bit number after which insertion or
+C                  extraction starts.
+C     KBITS      - Number of bits in computer word.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KNSPT      - Number of bit after last one inserted or
+C                              extracted.
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  1   , Invalid local use definition.
+C                  2   , Error reported by routine INXBIT.
+C                  3   , 3d or 4d analysis not implemented.
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with ECMWF usage of
+C     local part of section 1 of Grib code.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT  - insert/extract bit data
+C     ABORTX  - abort program
+C     CSGNBT  - encode sign bit
+C     DSGNBT  - decode sign bit
+C     ELDEFS  - encode ECMWF section 1, local usage definitions
+C     DLDEFS  - decode ECMWF section 1, local usage definitions
+#ifdef LITTLE_ENDIAN
+C     SWAP4   - swap order of characters in the experiment version
+#endif
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      03:11:92.
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      21:05:93.
+C     Additional parameter KPLEN added. Local usage definitions
+C     3 and 4 added.
+C
+C     J.D.Chambers     ECMWF      18:10:93.
+C     Local usage definition 5 added.
+C
+C     J.D.Chambers     ECMWF      12.05.94
+C     ECMWF local usage definition 7 added.
+C     (Sensitivity gradient/Trajectory forecast data).
+C     Change to use CSGNBT and DSGNBT to code and decode sign bits
+C
+C     J.D.Chambers     ECMWF      02.06.94
+C     Fix handling of local use section 1 for MARS labelling
+C
+C     J.D.Chambers     ECMWF      11.11.94
+C     Fix overwrite of constant zero
+C
+C     J.D.Chambers     ECMWF      18.01.95
+C     Use subroutine calls (ECDEF1, ... ) to handle ECMWF
+C     section 1 local usage definitions.
+C
+C     J.D.Chambers     ECMWF      September 2004
+C     Use ELDEFS and DLDEFS to handle ECMWF
+C     section 1 local usage definitions.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      CHARACTER*(*) HFUNC
+      INTEGER KSEC1, KGRIB, KNSPT, KBITS, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Parameter(s)
+C
+      INTEGER JPBITS
+#ifdef INTEGER_8
+      PARAMETER ( JPBITS = 64 )
+#else
+      PARAMETER ( JPBITS = 32 )
+#endif
+C
+C     Local variables
+C
+      INTEGER ILEN, LOOP, ITEMP(1000), NUMBYTS, NUMVALS, IOFFSET
+      INTEGER NUMBER
+C
+      LOGICAL LENCODE, LDEBUG
+C
+C     Function(s)
+C
+      INTEGER LDEFNUM
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      LDEBUG = (NDBG.GE.1)
+C
+      IF( LDEBUG ) THEN
+        WRITE(GRPRSM,*) 'ECLOC1: Section 1.'
+        WRITE(GRPRSM,*) '         Input values used -'
+        WRITE(GRPRSM,*) '         HFUNC  = ', HFUNC
+        WRITE(GRPRSM,*) '         KNSPT  = ', KNSPT
+      ENDIF
+C
+C     Reset return code to 0.
+C
+      KRET = 0
+C
+      LENCODE = ( HFUNC(1:1).EQ.'C' )
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 .  Check input parameters.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( LDEBUG ) WRITE(GRPRSM,*) 'ECLOC1: Section 2.'
+C
+      IOFFSET = 1 + (KNSPT / KBITS)
+C
+C     KWBC non-ensemble products have:
+C       ksec1( 2) = 7     (originating centre = KWBC)
+C       ksec1(22) = 98    (subcentre          = ECMWF)
+C     For these, an ECMWF local definition applies.
+C
+      IF( LENCODE ) THEN
+        NUMBER = KSEC1(2)*1000000 + KSEC1(22)*1000 + KSEC1(37)
+        CALL ELDEFS(NUMBER,KSEC1(37),KGRIB(IOFFSET),NUMVALS,NUMBYTS)
+        IF( NUMBYTS.LE.0 ) THEN
+          KRET = 1
+          GOTO 900
+        ENDIF
+        NUMBYTS = NUMBYTS + 40
+        CALL ISEC1L(KGRIB,NUMBYTS)
+        NUMBYTS = NUMBYTS - 40
+      ELSE
+        NUMBER = LDEFNUM(KSEC1(2),KSEC1(22),KGRIB(IOFFSET))
+        CALL DLDEFS(NUMBER,KGRIB(IOFFSET),KSEC1(37),NUMVALS,NUMBYTS)
+        IF( NUMBYTS.LE.0 ) THEN
+          KRET = 1
+          GOTO 900
+        ENDIF
+      ENDIF
+      KNSPT = KNSPT + (NUMBYTS*8)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Abort/return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/eggsec2.F b/gribex/eggsec2.F
new file mode 100755
index 0000000..f225865
--- /dev/null
+++ b/gribex/eggsec2.F
@@ -0,0 +1,254 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION EGGSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,
+     X                         LQUASI)
+C
+C---->
+C**** EGGSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for gaussian grid fields..
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = EGGSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,LQUASI))
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     LQUASI  - .TRUE. if gaussian grid is quasi-regular (reduced).
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+      LOGICAL LQUASI
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRETA, IRETB, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      EGGSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+C     For quasi-regular grids Ni is set to all 1 bits, as
+C     the number of points is different on different parallels.
+C
+      IF( LQUASI ) KSEC2(2) = JP16SET
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'EGGSEC2: number of pts along parallel or meridian.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(4), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(5), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'EGGSEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      IRESOL = KSEC2(6)+KSEC2(18)+KSEC2(19)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'EGGSEC2: components flag.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 18 - 20 : La2 - latitude of last grid point.
+C     Octets 21 - 23 : Lo2 - longitude of last grid point.
+C     Two 24 bit fields.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(7), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(8), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'EGGSEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 24 - 25 : Di - i direction increment.
+C     One 16 bit field.
+C
+C     For quasi-regular grids all Di bits are set to 1, as
+C     the increment is different on different parallels.
+C
+      IF( LQUASI ) KSEC2(9) = JP16SET
+C
+C     If increments not given, set all bits to 1.
+C
+      IF( KSEC2(6).EQ.0 ) KSEC2(9) = JP16SET
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),1,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'EGGSEC2: i direction increment.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 26 - 27 : N- number of parallels between a Pole
+C     and the Equator.
+C     One 16 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(10),1,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'EGGSEC2: no. of parallels between pole and Equator'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EGGSEC2 = 1
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'EGGSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 32 : Reserved.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 16,'C',IRETA)
+      CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 16,'C',IRETB)
+      IRET = IRETA + IRETB
+      IF( IRET.NE.0 ) THEN
+        IRET = 810
+        WRITE(GRPRSM,*) 'EGGSEC2: Error inserting dummy zero.'
+        WRITE(GRPRSM,*) 'EGGSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/elasec2.F b/gribex/elasec2.F
new file mode 100755
index 0000000..7269b3b
--- /dev/null
+++ b/gribex/elasec2.F
@@ -0,0 +1,264 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ELASEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C---->
+C**** ELASEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for lambert conformal fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = ELASEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      ELASEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along X-axis.
+C     Octets 9 - 10 : Nj - number of points along Y-axis.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 number of points along X or Y axis.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C 
+      CALL CSGNBT( ILALO(1), KSEC2(4), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(5), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*)
+     X    'ELASEC2 latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+C     Resolution flag ( KSEC2(6) ) is not applicable.
+C
+      IRESOL = KSEC2(18)+KSEC2(19)+KSEC2(6)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 components flag.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 18 - 20 : LoV - orientation of the grid.
+C     One 24 bit field.
+C
+C     Set sign bit to 1, if value is negative.
+C 
+      CALL CSGNBT( ILALO(1), KSEC2(7), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),1,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*)
+     X    'ELASEC2 latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 21 - 23 : Dx - X direction grid length.
+C     Octets 24 - 26 : Dy - Y direction grid length.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 X or Y axis grid length.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 27 : Projection centre flag.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 Projection centre flag.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 scanning mode flags.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 31 : Latin 1.
+C     Octets 32 - 34 : Latin 2.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C 
+      CALL CSGNBT( ILALO(1), KSEC2(14), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(15), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 Latin1 or Latin2 of secants points.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 35 - 37 : Latitude of the southern pole.
+C     Octets 38 - 40 : Longitude of the southern pole.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C 
+      CALL CSGNBT( ILALO(1), KSEC2(20), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(21), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ELASEC2 = 1
+        WRITE(GRPRSM,*) 'ELASEC2 Error inserting'
+        WRITE(GRPRSM,*) 'ELASEC2 latitude/longitude of southern pole.'
+        WRITE(GRPRSM,*) 'ELASEC2 Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 41 - 42 : Reserved.
+C     One 16 bit fields.
+C
+C     All bits already set to 0.
+C     Update bit pointer.
+C 
+      INSPT = INSPT + 16
+C 
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/ellsec2.F b/gribex/ellsec2.F
new file mode 100755
index 0000000..ff28e20
--- /dev/null
+++ b/gribex/ellsec2.F
@@ -0,0 +1,271 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ELLSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,
+     X                         LQUASI)
+C
+C---->
+C**** ELLSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = ELLSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,LQUASI))
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     LQUASI  - .TRUE. if gaussian grid is quasi-regular (reduced).
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+      LOGICAL LQUASI
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      ELLSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+C     WARNING!!
+C     For quasi-regular grids, it is here assumed that Ni is variable,
+C     i.e. that the number of points along a parallel is variable but
+C     that the number of points along a meridian is fixed.
+C
+C     For quasi-regular grids Ni is set to all 1 bits, as
+C     the number of points is different on different parallels.
+C
+C     Set to all 1 bits.
+C
+      IF( LQUASI ) KSEC2(2) = JP16SET
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'ELLSEC2: number of pts along parallel or meridian.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(4), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(5), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'ELLSEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      IRESOL = KSEC2(6)+KSEC2(18)+KSEC2(19)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'ELLSEC2: components flag.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 18 - 20 : La2 - latitude of last grid point.
+C     Octets 21 - 23 : Lo2 - longitude of last grid point.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(7), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(8), 24, IRET)
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'ELLSEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 24 - 25 : Di - i direction increment.
+C     One 16 bit field.
+C
+C     For quasi-regular grids all Di bits are set to 1, as
+C     the increment is different on different parallels.
+C
+C     If field not given, set to all bits to 1.
+C
+Ce    Set to all 1 bits.
+      IF( LQUASI) KSEC2(9) = JP16SET
+Ce
+Ce    If increments not given, set all bits to 1.
+      IF( KSEC2(6).EQ.0) KSEC2(9) = JP16SET
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),1,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'ELLSEC2: i direction increment.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 26 - 27 : Dj - j direction increment.
+C     One 16 bit field.
+C
+C     If field not given, set to all bits to 1.
+C
+      IF( KSEC2(6).EQ.0) KSEC2(10) = JP16SET
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(10),1,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'ELLSEC2: j direction increment.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'ELLSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 32 : Reserved.
+C     Two 16 bit fields.
+C
+Ce    Set bits to 0.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 32,'C',IRET)
+      IF( IRET.NE.0) THEN
+        ELLSEC2 = 1
+        WRITE(GRPRSM,*) 'ELLSEC2: Error inserting dummy zero.'
+        WRITE(GRPRSM,*) 'ELLSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/emesec2.F b/gribex/emesec2.F
new file mode 100755
index 0000000..d8df76f
--- /dev/null
+++ b/gribex/emesec2.F
@@ -0,0 +1,314 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION EMESEC2(KGRIB,KLENG,KNSPT,KSEC0,KSEC2,KBITS,
+     X                         OQUASI)
+C
+C---->
+C**** EMESEC2
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = EMESEC2(KGRIB,KLENG,KNSPT,KSEC0,KSEC2,KBITS,OQUASI)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     KNSPT   - Bit position of GRIB product built so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     KBITS   - Number of bits per element in KGRIB.
+C     OQUASI  - .TRUE. if gaussian grid is quasi-regular (reduced).
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     KNSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     /GRPRSCM/ for GRPRSM variable.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer KNSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J. Clochard, Meteo France, for ECMWF - October 2000.
+C     (derived from ELLSEC2)
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J. Clochard, June 2008.
+C     Use of GRPRSM instead of standard output in error/debug printouts.
+C     Doctorize all dummy-arguments (K for integers, O for logicals).
+C     Return-code set to 810 for errors on final padding.
+C     Do not enforce Di/j increments to missing values when resolution
+C     flag is off.
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JP16SET, JP24SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+      PARAMETER ( JP24SET = 2**24 - 1 ) 
+C                           ^---> 16777215 = FFFFFF(hex)
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,KNSPT,KSEC0,KSEC2,KBITS, JLOOP
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+      LOGICAL OQUASI
+C
+C     Global variables
+C
+#include "grprs.h"
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL, IZERO
+      SAVE IZERO
+      DATA IZERO /0/
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      EMESEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+C     WARNING!!
+C     For quasi-regular grids, it is here assumed that Ni is variable,
+C     i.e. that the number of points along a parallel is variable but
+C     that the number of points along a meridian is fixed.
+C
+C     For quasi-regular grids Ni is set to all 1 bits, as
+C     the number of points is different on different parallels.
+C
+C     Set to all 1 bits.
+C
+      IF( OQUASI ) KSEC2(2) = JP16SET
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC2(2),2,KBITS, 16,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting number of pts'
+        WRITE(GRPRSM,*) 'EMESEC2: along parallel or meridian.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(4), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(5), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO,2,KBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'EMESEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+      IRESOL = KSEC2(6)+KSEC2(18)+KSEC2(19)
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,IRESOL,1,KBITS, 8,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EMESEC2: components flag.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 18 - 20 : La2 - latitude of last grid point.
+C     Octets 21 - 23 : Lo2 - longitude of last grid point.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(7), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(8), 24, IRET)
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO,2,KBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EMESEC2: latitude/longitude of last grid point'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 24 - 26 : Latin - latitude(s) at which the Mercator
+C                      projection cylinder intersects the Earth.
+C     One 24 bit field.
+C
+C     Set sign bit to 1, if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(9), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,ILALO,1,KBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EMESEC2: latitude of intersection.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 27 : Reserved. Set to zero.
+C     One 8 bit field.
+C
+Ce    Set bits to 0.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT, IZERO, 1,KBITS, 8,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting dummy zero.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC2(11),1,KBITS, 8,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EMESEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 31 : Di - i direction increment.
+C     One 24 bit field.
+C
+C     For quasi-regular grids all Di bits are set to 1, as
+C     the increment is different on different parallels.
+C
+C     If field not given, set to all bits to 1.
+C
+Ce    Set to all 1 bits.
+      IF( OQUASI) KSEC2(13) = JP24SET
+Ce
+Ce    If increments not given, set all bits to 1.
+Ce    IF( KSEC2(6).EQ.0) KSEC2(13) = JP24SET
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC2(13),1,KBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EMESEC2: i direction increment.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 32 - 34 : Dj - j direction increment.
+C     One 24 bit field.
+C
+C     If field not given, set to all bits to 1.
+C
+C     IF( KSEC2(6).EQ.0) KSEC2(14) = JP24SET
+C
+      CALL INXBIT(KGRIB,KLENG,KNSPT,KSEC2(14),1,KBITS, 24,'C',IRET)
+      IF( IRET.NE.0) THEN
+        EMESEC2 = 1
+        WRITE(GRPRSM,*) 'EMESEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EMESEC2: j direction increment.'
+        WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 35 - 42 : Reserved.
+C     Eight 8 bit fields.
+C
+Ce    Set bits to 0.
+C
+      DO 221 JLOOP = 1, 8
+C
+        CALL INXBIT(KGRIB,KLENG,KNSPT, IZERO, 1,KBITS, 8,'C',IRET)
+        IF( IRET.NE.0) THEN
+	  IRET = 810
+          EMESEC2 = IRET
+          WRITE(GRPRSM,*) 'EMESEC2: Error inserting dummy zero.'
+          WRITE(GRPRSM,*) 'EMESEC2: Return code = ', IRET
+          GO TO 900
+        ENDIF
+C
+  221 CONTINUE
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/emoscyc.F b/gribex/emoscyc.F
new file mode 100755
index 0000000..5a6c80a
--- /dev/null
+++ b/gribex/emoscyc.F
@@ -0,0 +1,154 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION EMOSCYC(KONOFF,KCYCLES)
+C
+C---->
+C**** EMOSCYC
+C
+C     Purpose
+C     -------
+C
+C     Returns current EMOS_CYCLE version number.
+C
+C
+C     Interface
+C     ---------
+C
+C     INUM = EMOSCYC(KONOFF,KCYCLES)
+C
+C     Input
+C     -----
+C
+C     KONOFF - switch for displayed message
+C              = 0 if display is required on the first call
+C              = non-zero if display is not required
+C
+C
+C     Output
+C     ------
+C
+C     Returns a 6-digit version number, aaabbc, where:
+C       aaa = 3-digit major number
+C       bb  = 2-digit minor number
+C       c   = 1-digit spare number (normally 0)
+C
+C     KCYCLES(1) = INTP_CYCLE number
+C     KCYCLES(2) = BUFR_CYCLE number
+C     KCYCLES(3) = GRIB_CYCLE number
+C     KCYCLES(4) = PBIO_CYCLE number
+C     
+C
+C     Method
+C     ------
+C
+C     Reads a 6-digit version number from the environment variable
+C     EMOS_CYCLE. If this does not give a 6-digit number, an internal
+C     hard-coded default value is used.
+C
+C     On the first call, the function (optionally) displays a message:
+C
+C       **************************************
+C       * EMOS_CYCLE version number = nnnnnn *
+C       * INTP_CYCLE = iiiiii
+C       * BUFR_CYCLE = bbbbbb
+C       * GRIB_CYCLE = gggggg
+C       * PBIO_CYCLE = pppppp
+C       **************************************
+C     
+C
+C     Externals
+C     ---------
+C
+C     None.
+C     
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1998
+C
+C
+C----<
+C ------------------------------------------------------------------
+C*    Section 0.   Variables.
+C ------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KONOFF, KCYCLES(4)
+C
+C     Local variables
+C
+      INTEGER INUMBER, ICOUNT, IOFFSET
+      SAVE INUMBER, ICOUNT
+      CHARACTER*38 CMESS
+      CHARACTER*20 YNUMBER
+C
+C     Externals
+C
+      INTEGER INTPNUM, BUFRNUM, GRIBNUM, PBIONUM
+C
+      DATA INUMBER/100000/, ICOUNT/0/
+      DATA CMESS/'* EMOS_CYCLE version number = ****** *'/
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( ICOUNT.EQ.0 ) THEN
+C
+C       See if the environment variable has an override value
+C
+        CALL GETENV( 'EMOS_CYCLE', YNUMBER)
+        IOFFSET = INDEX( YNUMBER, ' ')
+        IF( IOFFSET.EQ.7 ) THEN
+          READ(YNUMBER,'(I6.6)') INUMBER
+        ENDIF
+C
+      KCYCLES(1) = INTPNUM(1)
+      KCYCLES(2) = BUFRNUM(1)
+      KCYCLES(3) = GRIBNUM(1)
+      KCYCLES(4) = PBIONUM(1)
+C
+C       First time through, display the message if required
+C
+        IF( KONOFF.EQ.0 ) THEN
+          WRITE(CMESS(31:36),'(I6.6)') INUMBER
+          WRITE(GRPRSM,*) '**************************************'
+          WRITE(GRPRSM,*) CMESS
+          CMESS(3:6) = 'INTP'
+          WRITE(CMESS(31:36),'(I6.6)') KCYCLES(1)
+          WRITE(GRPRSM,*) CMESS
+          CMESS(3:6) = 'BUFR'
+          WRITE(CMESS(31:36),'(I6.6)') KCYCLES(2)
+          WRITE(GRPRSM,*) CMESS
+          CMESS(3:6) = 'GRIB'
+          WRITE(CMESS(31:36),'(I6.6)') KCYCLES(3)
+          WRITE(GRPRSM,*) CMESS
+          CMESS(3:6) = 'PBIO'
+          WRITE(CMESS(31:36),'(I6.6)') KCYCLES(4)
+          WRITE(GRPRSM,*) CMESS
+          WRITE(GRPRSM,*) '**************************************'
+        ENDIF
+        ICOUNT = 1
+      ENDIF
+C
+      EMOSCYC = INUMBER
+C
+      RETURN
+      END
diff --git a/gribex/emoslibVersion.c b/gribex/emoslibVersion.c
new file mode 100755
index 0000000..77bed79
--- /dev/null
+++ b/gribex/emoslibVersion.c
@@ -0,0 +1,15 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+// Creates a global variable which is visible using 'nm'.
+*/
+extern char * LIBEMOS_000200 = "LIBEMOS_000200";
diff --git a/gribex/eocsec2.F b/gribex/eocsec2.F
new file mode 100755
index 0000000..81234ff
--- /dev/null
+++ b/gribex/eocsec2.F
@@ -0,0 +1,176 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION EOCSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C---->
+C**** EOCSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for ECMWF ocean fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = EOCSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+#include "eocsec2.h"
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER IRET, ILOOP
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      EOCSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C
+C     Octets 7 - 8  : Ni - number of points along a parallel.
+C     Octets 9 - 10 : Nj - number of points along a meridian.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EOCSEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: number of pts along first or second axis.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 11 - 27 : Reserved.
+C
+C     Fill reserved octets with 0.
+C
+      DO ILOOP = 1,17
+        CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 8,'C',IRET)
+        IF( IRET.NE.0 ) THEN
+          EOCSEC2 = 1
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting dummy zero.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+          GO TO 900
+        ENDIF
+      ENDDO
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EOCSEC2 = 1
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: scanning mode flags.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octets 29 - 32 : Reserved.
+C
+C     Fill reserved octets with 0.
+C
+      DO ILOOP = 1,4
+        CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 8,'C',IRET)
+        IF( IRET.NE.0 ) THEN
+          EOCSEC2 = 1
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting dummy zero.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', IRET
+          GO TO 900
+        ENDIF
+      ENDDO
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/eocsec2.h b/gribex/eocsec2.h
new file mode 100755
index 0000000..35400ff
--- /dev/null
+++ b/gribex/eocsec2.h
@@ -0,0 +1,42 @@
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C     ECMWF ocean data GRIB section 2
+C     -------------------------------
+C
+C     Octet     KSEC2(n)
+C     -----     --------
+C
+C     1-3       -         Length of section
+C
+C     4         -         Not used: set to zero
+C
+C     5         -         255 (all bits set to 1)
+C
+C     6         1         Data representation type = 192 = ECMWF ocean grid
+C
+C     7-8       2         Ni - number of points along the first axis
+C                         (32767 = not used)
+C
+C     9-10      3         Nj - number of points along the second axis
+C                         (32767 = not used)
+C
+C     11-27     -         Not used: set to zero
+C
+C     -         4-10      Reserved. Set to 0.
+C
+C     28        11        Scanning mode flags (see WMO code table 8)
+C
+C     29-32     -         Not used: set to zero
+C
+C     -         12-22     Reserved. Set to 0.
+C
+C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/gribex/epssec2.F b/gribex/epssec2.F
new file mode 100755
index 0000000..3d07fc0
--- /dev/null
+++ b/gribex/epssec2.F
@@ -0,0 +1,246 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION EPSSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C---->
+C**** EPSSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for polar stereographic fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = EPSSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      EPSSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Ni - number of points along X-axis.
+C     Octets 9 - 10 : Nj - number of points along Y-axis.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EPSSEC2: number of points along X or Y axis.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : La1 - latitude of first grid point.
+C     Octets 14 - 16 : Lo1 - longitude of first grid point.
+C     Two 24 bit fields.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(4), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(5), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'EPSSEC2: latitude or longitude of first grid pt.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+C     Resolution flag ( KSEC2(6) ) is not applicable.
+C
+      KSEC2(6) = 0
+      IRESOL = KSEC2(18)+KSEC2(19)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EPSSEC2: components flag.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(6),1,IBITS, 8,'C',IRET)
+C     IF( IRET.NE.0 ) THEN
+C       EPSSEC2 = 1
+C       WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+C       WRITE(GRPRSM,*) 'EPSSEC2: components flag.'
+C       WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+C       GOTO 900
+C     ENDIF
+C
+C     Octets 18 - 20 : LoV - orientation of the grid.
+C     One 24 bit field.
+C
+C     Set sign bit to 1 if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(7), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),1,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'EPSSEC2: latitude or longitude of last grid point.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 21 - 23 : Dx - X direction grid length.
+C     Octets 24 - 26 : Dy - Y direction grid length.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EPSSEC2: X or Y axis grid length.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 27 : Projection centre flag.
+C     One 8-bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EPSSEC2: Projection centre flag.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'EPSSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Fix-up for flag which was different in Experimental Edition.
+      IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C     Octets 29 - 32 : Reserved.
+C     Two 16 bit fields.
+C
+C     Set bits to 0.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 32,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        EPSSEC2 = 1
+        WRITE(GRPRSM,*) 'EPSSEC2: Error inserting dummy zero.'
+        WRITE(GRPRSM,*) 'EPSSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/eshsec2.F b/gribex/eshsec2.F
new file mode 100755
index 0000000..59fb62a
--- /dev/null
+++ b/gribex/eshsec2.F
@@ -0,0 +1,164 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ESHSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C---->
+C**** ESHSEC2P
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for spherical harmonic fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = ESHSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC0   - GRIB section 0 description.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP16SET
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS
+      DIMENSION KGRIB(*),KSEC0(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER IRET, ILOOP
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      ESHSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8   : J pentagonal resolution parameter.
+C     Octets 9 - 10  : K pentagonal resolution parameter.
+C     Octets 11 - 12 : M pentagonal resolution parameter.
+C     Three 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),3,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESHSEC2 = 1
+        WRITE(GRPRSM,*) 'ESHSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X    'ESHSEC2: J,K,M pentagonal resolution parameters.'
+        WRITE(GRPRSM,*) 'ESHSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C     Octet 13 : Representation type.
+C     Octet 14 : Representation mode.
+C     Two 8 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(5),2,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESHSEC2 = 1
+        WRITE(GRPRSM,*) 'ESHSEC2: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'ESHSEC2: representation type or mode.'
+        WRITE(GRPRSM,*) 'ESHSEC2: Return code = ', IRET
+        GO TO 900
+      ENDIF
+C
+C
+C     Octets 15 - 32 : Reserved.
+C     Nine 16 bit fields.
+C
+C     Fill reserved octets with 0.
+C
+      DO ILOOP = 1,9
+        CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 16,'C',IRET)
+        IF( IRET.NE.0 ) THEN
+          ESHSEC2 = 1
+          WRITE(GRPRSM,*) 'ESHSEC2: Error inserting dummy zero.'
+          WRITE(GRPRSM,*) 'ESHSEC2: Return code = ', IRET
+          GO TO 900
+        ENDIF
+      ENDDO
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/esvsec2.F b/gribex/esvsec2.F
new file mode 100755
index 0000000..a7e7429
--- /dev/null
+++ b/gribex/esvsec2.F
@@ -0,0 +1,251 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ESVSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS,ILEN2)
+C
+C---->
+C**** ESVSEC2
+C
+C     PURPOSE
+C     _______
+C
+C     Encodes GRIB section 2 values for space view perspective or
+C     orthographic grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = ESVSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+C
+C     Input parameters
+C     ________________
+C
+C     KGRIB   - GRIB product built so far (upto octet 6). 
+C     KLENG   - Length of KGRIB.
+C     INSPT   - Bit position of GRIB product built so far.
+C     KSEC2   - GRIB section 2 description.
+C     IBITS   - Number of bits per element in KGRIB.
+C     ILEN2   - Length in bytes of section 2
+C     
+C
+C     Output parameters
+C     ________________
+C
+C     KGRIB   - Updated GRIB product to end of section 2.
+C     INSPT   - Updated bit position of GRIB product built so far.
+C     IRET    - Function return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Packs values given in KSEC2 into KGRIB and updates bit
+C     pointer INSPT.
+C
+C     Externals
+C     _________
+C
+C     CSGNBT  - Set the sign bit.
+C     INXBIT  - Insert bit data.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF     February 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+C
+C     Function arguments
+C
+      INTEGER KGRIB,KLENG,INSPT,KSEC2,IBITS,ILEN2
+      DIMENSION KGRIB(*),KSEC2(*)
+C
+C     Local variables
+C
+      INTEGER ILALO(2), IRET, IRESOL, IZERO, LOOP
+      DATA IZERO/0/
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      ESVSEC2 = 0
+C
+C     _______________________________________________________
+C
+C     Section 2.    Pack section 2 octets.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Octets 7 - 8  : Nx - number of points along X-axis.
+C     Octets 9 - 10 : Ny - number of points along Y-axis.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'ESVSEC2: number of points along X or Y axis.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 11 - 13 : Lap - latitude of sub-satellite point.
+C     Octets 14 - 16 : Lop - longitude of sub-satellite point.
+C     Two 24 bit fields.
+C
+C     Set sign bit to 1, if value is negative.
+C
+      CALL CSGNBT( ILALO(1), KSEC2(4), 24, IRET)
+      CALL CSGNBT( ILALO(2), KSEC2(5), 24, IRET)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'ESVSEC2: latitude/longitude of sub-satellite pt.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 17 : Resolution and components flag.
+C     One 8 bit field.
+C
+C     Resolution flag ( KSEC2(6) ) is not applicable.
+C
+      IRESOL = KSEC2(18)+KSEC2(19)
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'ESVSEC2: components flag.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 18 - 20 : dx Apparent diameter of earth in grid
+C                         lengths in x direction.
+C     Octets 21 - 23 : dy Apparent diameter of earth in grid
+C                         lengths in y direction.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(7),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'ESVSEC2: number of points along X or Y axis.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 24 - 25 : Xp X-coordinate of sub-satellite point.
+C     Octets 26 - 27 : Yp Y-coordinate of sub-satellite point.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'ESVSEC2: X or Y coordinate of sub-satellite point.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octet 28 : Scanning mode flags.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*) 'ESVSEC2: scanning mode flags.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 29 - 31 : The orientation of the grid.
+C     Octets 32 - 34 : nr the altitude of the camera.
+C     Two 24 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),2,IBITS, 24,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'ESVSEC2: orientation of the grid or camera angle.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 35 - 36 : Xo - X coordinate of origin of sector image.
+C     Octets 37 - 38 : Yo - Y coordinate of origin of sector image.
+C     Two 16 bit fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(15),2,IBITS, 16,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        ESVSEC2 = 1
+        WRITE(GRPRSM,*) 'ESVSEC2: Error inserting'
+        WRITE(GRPRSM,*)
+     X    'ESVSEC2: X or Y coordinates of origin of sector.'
+        WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+        GOTO 900
+      ENDIF
+C
+C     Octets 39 - 40 : Reserved (ECMWF).
+C     Octets 39 - 44 : Reserved (GRIB specification).
+C
+C     Fill reserved octets with 0.
+C
+      DO LOOP = 1, (ILEN2 - 38)
+        CALL INXBIT(KGRIB,KLENG,INSPT, IZERO, 1,IBITS, 8,'C',IRET)
+        IF( IRET.NE.0 ) THEN
+          IRET = 810
+          WRITE(GRPRSM,*) 'ESVSEC2: Error inserting dummy zero.'
+          WRITE(GRPRSM,*) 'ESVSEC2: Return code = ', IRET
+          GOTO 900
+        ENDIF
+      ENDDO
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/exscal.F b/gribex/exscal.F
new file mode 100755
index 0000000..f6578f6
--- /dev/null
+++ b/gribex/exscal.F
@@ -0,0 +1,140 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE EXSCAL (PDATA,KDATA,KLEN,PREF,PSCALE,LALLPOS)
+C
+C---->
+C**** EXSCAL - Vectorise calculation of values.
+C
+C     Purpose.
+C     --------
+C
+C     Vectorise calculation of values.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL EXSCAL (PDATA,KDATA,KLEN,PREF,PSCALE,LALLPOS)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KDATA   - Array of integer increments
+C     KLEN    - Number of values to be converted.
+C     PREF    - Reference value.
+C     PSCALE  - Scale factor.
+C     LALLPOS - .TRUE. if all packed value occupies full (integer)
+C                      word, eg 32 bits on a 32-bit integer machine.
+C
+C     Output Parameters.
+C     -----------------
+C
+C     PDATA   - Array of floating point values.
+C
+C     Method.
+C     -------
+C
+C     The reference value is added to each increment,
+C     and the result is then multiplied by the scale factor.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB representation.
+C
+C     Comments.
+C     --------
+C
+C     PDATA and KDATA are really the same array. This routine
+C     is just a device to force vectorisation on the Cray,
+C     without the necessity of using another array.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy     ECMWF     25.06.91
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J.D.Chambers    ECMWF     06.09.95
+C     Reverse processing in loop to run from last to first in
+C     case reals are larger than integers.
+C
+C     J.D.Chambers    ECMWF     16.05.96
+C     Handle case when packed value occupies full word.
+C
+C----<
+C     -----------------------------------------------------------------
+C     Section 0.    Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+      INTEGER KDATA
+      INTEGER KLEN
+      INTEGER LOOP
+      REAL PDATA
+      REAL PREF
+      REAL PSCALE
+      LOGICAL LALLPOS
+      DIMENSION PDATA(KLEN)
+      DIMENSION KDATA(KLEN)
+C
+      REAL*8 BIG, RTEMP
+      DATA BIG /4294967296.0/
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Calculation of values.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+#ifdef CRAY
+C
+      DO 110 LOOP = KLEN, 1, -1
+        PDATA(LOOP) = PREF + KDATA(LOOP)*PSCALE
+  110 CONTINUE
+#else
+C
+      IF( .NOT. LALLPOS ) THEN
+        DO 110 LOOP = KLEN, 1, -1
+	  PDATA(LOOP) = PREF + KDATA(LOOP)*PSCALE
+  110   CONTINUE
+C
+C     Packed values use all bits in integer word, ie sign bit is
+C     really a data bit.
+      ELSE
+        DO 120 LOOP = KLEN, 1, -1
+          IF( KDATA(LOOP) .GE. 0 ) THEN
+	    PDATA(LOOP) = PREF + KDATA(LOOP)*PSCALE
+          ELSE
+            RTEMP = BIG + DBLE(KDATA(LOOP))
+            PDATA(LOOP) = PREF + RTEMP*PSCALE
+          ENDIF
+  120   CONTINUE
+      ENDIF
+#endif
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/gribex/extmap.F b/gribex/extmap.F
new file mode 100755
index 0000000..1043e5e
--- /dev/null
+++ b/gribex/extmap.F
@@ -0,0 +1,464 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE EXTMAP (KGRIB,KLENG,KMAP1,KMAP2,KVALS,PSEC4,KSIZE,
+     X                   KBITS,KSBMAP,PMISS,KNUM,KPR,KRET,KNOMIS)
+C
+C---->
+C**** EXTMAP - Extraction of bit maps for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C     Extracts bit-maps (primary and secondary,if present)
+C     from an array of GRIB coded data and inserts the
+C     missing data value indicator in appropriate places in
+C     the array of already unpacked data values.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL EXTMAP (KGRIB,KLENG,KMAP1,KMAP2,KVALS,PSEC4,KSIZE,KBITS,
+C    X             KSBMAP,PMISS,KNUM,KPR,KRET,KNOMIS)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KGRIB      - Array from which data is being unpacked
+C                  from GRIB code.
+C
+C     KLENG      - Length of this array.
+C
+C     KMAP1      - Bit-pointer to start of primary bit-map
+C                  (Section 3 bitmap) in array KGRIB.
+C
+C     KMAP2      - Bit-pointer to start of secondary bitmap
+C                  (Section 4 bitmap) in array KGRIB.
+C                  Negative value if no secondary bit maps.
+C
+C     KVALS      - Number of unpacked values in PSEC4 on entry
+C
+C     PSEC4      - Array of data values unpacked from GRIB code.
+C
+C     KSIZE      - Number of bits in the primary bit map.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     PMISS      - Value to be used to indicate missing data
+C                  in array PSEC4.
+C
+C     KNUM       - Number of values at each grid point. This
+C                  is normally 1 except when a matrix of value
+C                  is represented.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSBMAP     - Bit-map flag.
+C                  -2 , All bits in the bit-map set to 1.
+C                       There is no missing data.
+C                  -4 , Some points have no data. User
+C                       supplied value for missing data
+C                       indicator in appropriate places in
+C                       the array PSEC4.
+C
+C     KRET       - Return code.
+C                  0 , No error encountered.
+C                  1 , Error in routine INXBIT.
+C                  4 , Number of values at each grid point (KNUM)
+C                      is greater than allowed (JPWORK).
+C
+C     KNOMIS     - Number of non-missing values in PSEC4 entry.
+C
+C
+C     Method.
+C     -------
+C
+C     The bit-map contains 1 where valid data exists and 0
+C     where data is missing. The corresponding data array
+C     contains valid data and the missing data indicator value.
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT   - Extract values from bit-stream
+C
+C     Reference.
+C     ----------
+C
+C     See routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      10:07:92
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      29:10:92
+C     Maximum sizes increased to allow for packing of
+C     2D spectra.
+C     Number of data values 120*61*12*25
+C
+C     J.D.Chambers     ECMWF      09:03:94
+C     Maximum size for bitmap array increased to 132000
+C     to allow for products 0.5 * 0.5 degrees, whole
+C     hemisphere (N or S).
+C
+C     J.D.Chambers     ECMWF      18:04:94
+C     Fix setting of missing values according to bitmap 
+C
+C     J.D.Chambers     ECMWF      19:07:94
+C     Maximum size for bitmap array increased to 140000
+C     for reduced gaussian n160.
+C
+C     J.D.Chambers     ECMWF      23.05.95
+C     Use dynamic allocation for secondary bitmap
+C     Process primary bitmap in small pieces.  Use PSEC4
+C     for expanding data using bitmaps.
+C
+C     J.D.Chambers     ECMWF      24.10.96
+C     Use fixed allocation for secondary bitmap
+C     Process primary bitmap in small pieces.  Use PSEC4
+C
+C     J. Clochard, METEO FRANCE, for ECMWF - January 1998.
+C     Dummy-argument KNOMIS added.
+C     Strips size (JPWORK) enlarged to 10000.
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPWORK
+      PARAMETER (JPWORK=10000)
+C
+C     Subroutine arguments
+C
+      INTEGER KBITS, KGRIB, KLENG, KMAP1, KMAP2, KNUM, KVALS, KNOMIS
+      DIMENSION KGRIB(*)
+      INTEGER KPR, KRET, KSBMAP, KSIZE
+      REAL PMISS, PSEC4
+      DIMENSION PSEC4(*)
+C
+C     Local variables
+C
+      INTEGER ICURR, IPT, LENGTH
+      INTEGER JLOOP, JLOOPI, NEXT, IMANY, NABITS, NBITS, NVALS, MYMAP1
+      LOGICAL LMOPT
+C
+      INTEGER IMAP1
+      DIMENSION IMAP1(JPWORK)
+C
+C     Work array.
+C
+      INTEGER IMAP2
+      DIMENSION IMAP2(JPWORK)
+C
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'EXTMAP: Section 1.'
+        WRITE(GRPRSM,*) 'EXTMAP:   Input values used -'
+        WRITE(GRPRSM,*) 'EXTMAP: KSIZE,KNUM = ', KSIZE,KNUM
+        WRITE(GRPRSM,*) 'EXTMAP: KLENG,KMAP1,KMAP2,KBITS, PMISS = '
+        WRITE(GRPRSM,*) KLENG,KMAP1,KMAP2,KBITS, PMISS
+        WRITE(GRPRSM,*) 'EXTMAP: KVALS = ', KVALS
+      ENDIF
+C
+C     Reset return code to 0.
+C
+      KRET  = 0
+      KNOMIS = 0
+      NBITS = 0
+      NABITS = 0
+      LENGTH = KNUM
+C
+C     Check there is enough space for unpacking secondary bitmap
+C
+      IF( LENGTH.GT.JPWORK ) THEN
+        WRITE(GRPRSM,*) 'EXTMAP: Number of values at each grid point'
+        WRITE(GRPRSM,*)
+     X    'EXTMAP: (KNUM) is greater than allowed (JPWORK).'
+        KRET = 4
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 2 .  Handle 'M' option case
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     If the original field has been packed with the 'M' option,
+C     have to find out how many true values there are in the field.
+C
+      LENGTH = KSIZE * KNUM
+      LMOPT = (KVALS.EQ.LENGTH)
+C
+      IF( LMOPT ) THEN
+C
+C       Count the number of bits in the primary bitmap
+C
+        NEXT = 0
+        NVALS = 0
+        MYMAP1 = KMAP1
+C
+  210   CONTINUE
+C
+C       Unpack the primary bitmap in strips of JPWORK values
+C
+        NEXT = NEXT + JPWORK
+        IMANY = JPWORK
+C
+C       Check whether end of primary bitmap reached.
+C       Adjust if less than JPWORK values left to process
+C
+        IF( NEXT.GT.KSIZE ) IMANY = KSIZE + JPWORK - NEXT
+C
+C       Unpack next strip of primary bitmap values.
+C
+        CALL INXBIT(KGRIB,KLENG,MYMAP1,IMAP1,IMANY,KBITS,1,'D',KRET)
+        IF( KRET.NE.0 ) THEN
+          WRITE(GRPRSM,*) 'EXTMAP: Error reported by routine INXBIT.'
+          KRET = 1
+          GO TO 900
+        ENDIF
+C
+C       Work through the strip of primary bitmap values counting points
+C       which are not missing.
+C
+        DO 220 JLOOP = 1,IMANY
+          IF( IMAP1(JLOOP).EQ.1 ) NVALS = NVALS + 1
+  220   CONTINUE
+C
+C       Loop back if more strips of primary bitmap to process
+C
+        IF( NEXT.LT.KSIZE ) GOTO 210
+C
+      ELSE
+C
+        NVALS = KVALS
+C
+      ENDIF
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'EXTMAP: NVALS = ', NVALS
+        WRITE(GRPRSM,*) 'EXTMAP: KVALS = ', KVALS
+        WRITE(GRPRSM,*) 'EXTMAP: LENGTH = ', LENGTH
+      ENDIF
+C
+C     Move input field to far end of input array
+C
+      IF( NVALS.LT.LENGTH ) THEN
+        ICURR = NVALS+1
+!OCL NOVREC
+        DO 230 JLOOP = LENGTH, LENGTH - NVALS + 1, -1
+          ICURR = ICURR - 1
+          PSEC4(JLOOP) = PSEC4(ICURR)
+  230   CONTINUE
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Decoding of bit-map and data.
+C     ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'EXTMAP: Section 3.'
+C
+C*    Set unoccupied values in array to missing data indicator.
+C
+      ICURR = LENGTH - NVALS
+      DO 310 JLOOP = 1, ICURR
+        PSEC4(JLOOP) = PMISS
+  310 CONTINUE
+C
+C*    Copy data to output array or insert missing data value
+C     in accordance with the bit map values.
+C
+      ICURR = LENGTH - NVALS
+      IPT = 1
+      NEXT = 0
+C
+  320 CONTINUE
+C
+C     The primary bitmap is unpacked and used in strips of JPWORK values
+C
+      NEXT = NEXT + JPWORK
+      IMANY = JPWORK
+C
+C     Check whether end of primary bitmap reached.
+C     Adjust if less than JPWORK values left to process
+C
+      IF( NEXT.GT.KSIZE ) IMANY = KSIZE + JPWORK - NEXT
+C
+C     Unpack next strip of primary bitmap values.
+C
+      CALL INXBIT(KGRIB,KLENG,KMAP1,IMAP1,IMANY,KBITS,1,'D',KRET)
+      IF( KRET.NE.0 ) THEN
+        WRITE(GRPRSM,*) 'EXTMAP: Error reported by routine INXBIT.'
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Work through the strip of primary bitmap values.
+C
+      IF(KMAP2.LE.0.AND.KNUM.EQ.1) THEN
+        IMAP2(1) = 1
+!OCL NOVREC
+        DO 325 JLOOP = 1,IMANY
+          IF( IMAP1(JLOOP).EQ.1 ) THEN
+            ICURR      = ICURR + 1
+            PSEC4(IPT) = PSEC4(ICURR)
+            NABITS     = NABITS + 1
+          ELSE
+            PSEC4(IPT) = PMISS
+            NBITS      = NBITS + 1
+          ENDIF
+          IPT = IPT + 1
+ 325    CONTINUE
+C
+      ELSE
+C
+        DO 380 JLOOP = 1,IMANY
+C
+C         If primary bitmap indicates there are values at the point ..
+C
+          IF( IMAP1(JLOOP).EQ.1 ) THEN
+C
+C           .. read secondary bitmap, if any.
+C
+            IF( KMAP2.GT.0 ) THEN
+              CALL INXBIT(KGRIB,KLENG,KMAP2,IMAP2,KNUM,KBITS,1,'D',KRET)
+              IF( KRET.NE.0 ) THEN
+                WRITE(GRPRSM,*)
+     X            'EXTMAP: Error reported by routine INXBIT.'
+                KRET = 1
+                GO TO 900
+              ENDIF
+C
+            ELSE
+C
+C*            If no secondary bitmaps present, set up dummy secondary
+C             bitmap to indicate no missing data values.
+C
+              IF( KNUM.EQ.1 ) THEN
+                IMAP2(1)   = 1
+                ICURR      = ICURR + 1
+                PSEC4(IPT) = PSEC4(ICURR)
+                IPT        = IPT + 1
+                NABITS     = NABITS + 1
+              ELSE
+                DO 330 JLOOPI = 1,KNUM
+                  IMAP2(JLOOPI) = 1
+  330           CONTINUE
+              ENDIF
+C
+            ENDIF
+C
+C           Use the bitmap to put in data value or missing data indicator.
+C
+            IF( KNUM.GT.1 ) THEN
+              DO 340 JLOOPI = 1,KNUM
+                IF( IMAP2(JLOOPI).EQ.1 ) NABITS = NABITS + 1
+  340         CONTINUE
+C
+              DO 350 JLOOPI = 1,KNUM
+                IF( IMAP2(JLOOPI).NE.1 ) NBITS = NBITS + 1
+  350         CONTINUE
+C
+              DO 360 JLOOPI = 1,KNUM
+                IF( IMAP2(JLOOPI).EQ.1 ) THEN
+                  ICURR              = ICURR + 1
+                  PSEC4(IPT+JLOOPI-1) = PSEC4(ICURR)
+                ELSE
+                  PSEC4(IPT+JLOOPI-1) = PMISS
+                ENDIF
+  360         CONTINUE
+              IPT = IPT + KNUM
+C
+            ENDIF
+C
+C         If primary bitmap indicates there are no values at the point ..
+C
+          ELSE
+            IF( KNUM.EQ.1 ) THEN
+              PSEC4(IPT) = PMISS
+            ELSE
+              DO 370 JLOOPI = 1,KNUM
+                PSEC4(IPT+JLOOPI-1) = PMISS
+  370         CONTINUE
+            ENDIF
+            IPT   = IPT + KNUM
+            NBITS = NBITS + KNUM
+          ENDIF
+C
+  380   CONTINUE
+C
+      ENDIF
+C
+C     Loop back if more strips of primary bitmap to process
+C
+      IF( NEXT.LT.KSIZE ) GOTO 320
+C
+C*    Set bit-map flag.
+C
+      IF( NBITS.GT.0 ) THEN
+        KSBMAP = -4
+      ELSE
+        KSBMAP = -2
+      ENDIF
+C
+C*    Return effective number of non-missing values.
+C
+      KNOMIS=NVALS
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'EXTMAP: Section 9.'
+        WRITE(GRPRSM,*) 'EXTMAP: NBITS = ', NBITS
+        WRITE(GRPRSM,*) 'EXTMAP: NABITS = ', NABITS
+        WRITE(GRPRSM,*) 'EXTMAP: NVALS = ', NVALS
+        WRITE(GRPRSM,*) 'EXTMAP: Output values set -'
+        WRITE(GRPRSM,*) 'EXTMAP: KNOMIS = ', KNOMIS
+        WRITE(GRPRSM,*) 'EXTMAP: KSIZE = ', KSIZE
+        WRITE(GRPRSM,*) 'EXTMAP: KSBMAP = ', KSBMAP
+      ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/findLocalDefinitionFile.c b/gribex/findLocalDefinitionFile.c
new file mode 100755
index 0000000..74d3dff
--- /dev/null
+++ b/gribex/findLocalDefinitionFile.c
@@ -0,0 +1,111 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "fortint.h"
+
+#ifdef TABLE_PATH
+#define USER 1
+#else
+#define USER 0
+#define TABLE_PATH "/home/ma/emos/tables/gribex"
+#endif
+
+
+char* findLocalDefinitionFile(fortint);
+
+int fileExists(char* fileName) {
+struct stat buf;
+int status;
+
+  status = stat(fileName,&buf);
+  if( (status == 0) && S_ISREG(buf.st_mode) ) return 1;
+
+  return 0;
+}
+
+char* findLocalDefinitionFile(fortint definitionNumber) {
+char * directoryPath;
+char * directoryName;
+static char fullFileName[256];
+char fileName[] = "localDefinitionTemplate_ccc_sss_nnn";
+char defaultDirectory[] = "/home/ma/emos/tables/gribex";
+char * endString;
+char * startString;
+fortint n;
+int DefinitionNumber = (int) definitionNumber;
+int centre    = DefinitionNumber/1000000;
+int subcentre = (DefinitionNumber/1000)%1000;
+int number    = DefinitionNumber%1000;
+int defaultDirectoryChosen = 0;
+
+  sprintf((fileName+24),"%03d",centre);
+  sprintf((fileName+27),"_%03d",subcentre);
+  sprintf((fileName+31),"_%03d",number);
+  directoryPath = (char*) getenv("LOCAL_DEFINITION_TEMPLATES");
+  if( directoryPath == NULL ) {
+    defaultDirectoryChosen = 1;
+	if(USER){
+	  char temp[256] = TABLE_PATH;
+	  strcat(temp,"/gribtemplates"); 
+      directoryPath = temp;
+	}
+	 else
+      directoryPath = TABLE_PATH;
+  }
+/*
+// The directoryPath can have a list of directories separated by ':'.
+// Check each possible directory to find a suitable file.
+*/
+
+  startString = directoryPath;
+
+  while( (endString = strchr(startString,':')) != NULL ) {
+    n = (int) (endString - startString);
+
+    strncpy(fullFileName,startString,n);
+    fullFileName[n] = '/';
+    strcpy(&fullFileName[n+1],fileName);
+
+    if( fileExists(fullFileName) ) return fullFileName;
+    startString += (n+1);
+  }
+  if( startString != directoryPath )
+    n = strlen(directoryPath) - (int) (startString - directoryPath);
+  else
+    n = strlen(directoryPath);
+
+  strncpy(fullFileName,startString,n);
+  fullFileName[n] = '/';
+  strcpy(&fullFileName[n+1],fileName);
+
+  if( fileExists(fullFileName) )
+    return fullFileName;
+  else {
+       /*try with the center = ECMWF and subcenter = 0
+       printf("didnt found file name = %s\n", fullFileName);*/
+       sprintf((fileName+24),"%03d",subcentre);
+       sprintf((fileName+27),"_%03d",0);
+       sprintf((fileName+31),"_%03d",number);
+       n = strlen(directoryPath);
+       strncpy(fullFileName,directoryPath,n);
+       fullFileName[n] = '/';
+       strcpy(&fullFileName[n+1],fileName);
+       if( fileExists(fullFileName) ) return fullFileName;
+     return NULL;   
+  }
+}
diff --git a/gribex/fortint.h b/gribex/fortint.h
new file mode 100755
index 0000000..e517d43
--- /dev/null
+++ b/gribex/fortint.h
@@ -0,0 +1,35 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FORTINT_H
+#define FORTINT_H
+
+#ifdef INTEGER_IS_INT
+#define fortint int
+#define JPointer int *
+#else
+#if defined hpR64 || defined hpiaR64
+#define fortint long long
+#define JPointer long long *
+#else
+#define fortint long
+#define JPointer long *
+#endif
+#endif
+
+#ifdef REAL_8
+#define fortreal double
+#else
+#define fortreal float
+#endif
+
+#define fortdouble double
+
+#endif /* End of FORTINT_H */
diff --git a/gribex/fortranInterface.c b/gribex/fortranInterface.c
new file mode 100755
index 0000000..cb95af0
--- /dev/null
+++ b/gribex/fortranInterface.c
@@ -0,0 +1,524 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "handleLocalDefinitions.h"
+#include "fortint.h"
+#include "grib_int_t.h"
+
+typedef struct knownActions {
+int count;
+int * numbers;
+action ** actions;
+} knownActions;
+
+knownActions known = {0,NULL,NULL};
+
+int definitionIsDefined(struct knownActions * known, fortint number) {
+int loop;
+grib_int_t Number = (grib_int_t) number;
+
+  for( loop = 0; loop < known->count; loop++ ) {
+    if( known->numbers[loop] == (int)number ) return loop;
+  }
+
+  known->count++;
+
+  known->numbers = (int*) realloc(known->numbers,known->count*sizeof(int));
+  if( known->numbers == NULL ) return -1;
+
+  known->actions = (action**) realloc(known->actions,
+                                      known->count*sizeof(action*));
+  if( known->actions == NULL ) return -1;
+
+  known->numbers[known->count-1] = (int) number;
+  known->actions[known->count-1] = createLocalDefinitionHandler(Number);
+  if( known->actions[known->count-1] == NULL ) return -1;
+
+  return (known->count-1);
+}
+
+void decodeLocalDefinition(
+  fortint localDefinitionNumber,
+  fortint* packedValues,
+  fortint* unpackedValues,
+  fortint* numberOfUnpackedIntegers,
+  fortint* numberOfPackedBytes) {
+int listPosition, loop;
+unsigned char* packedValuesBytes = (unsigned char*) packedValues;
+grib_int_t UnpackedValues[1024];
+grib_int_t NumberOfUnpackedIntegers;
+grib_int_t NumberOfPackedBytes;
+
+  listPosition = definitionIsDefined(&known,localDefinitionNumber);
+  if( listPosition == -1 ) {
+    *numberOfPackedBytes = 0;
+    return;
+  }
+
+  decodeLocalDefinitionValues(known.actions[listPosition],
+                              packedValuesBytes,UnpackedValues,
+                              &NumberOfUnpackedIntegers,
+                              &NumberOfPackedBytes);
+  *numberOfUnpackedIntegers = NumberOfUnpackedIntegers;
+  *numberOfPackedBytes = NumberOfPackedBytes;
+  for( loop = 0; loop < NumberOfUnpackedIntegers; loop++ )
+    *(unpackedValues+loop) = (fortint) UnpackedValues[loop];
+
+  return;
+}
+
+void dldefs(
+  fortint* localDefinitionNumber,
+  fortint* packedValues,
+  fortint* unpackedValues,
+  fortint* numberOfUnpackedIntegers,
+  fortint* numberOfPackedBytes) {
+
+  decodeLocalDefinition(*localDefinitionNumber,packedValues,unpackedValues,
+                        numberOfUnpackedIntegers,numberOfPackedBytes);
+  return;
+}
+
+fortint dldefs_(
+  fortint* localDefinitionNumber,
+  fortint* packedValues,
+  fortint* unpackedValues,
+  fortint* numberOfUnpackedIntegers,
+  fortint* numberOfPackedBytes) {
+
+  decodeLocalDefinition(*localDefinitionNumber,packedValues,unpackedValues,
+                        numberOfUnpackedIntegers,numberOfPackedBytes);
+  return;
+}
+
+void encodeLocalDefinition(
+  fortint localDefinitionNumber,
+  fortint* unpackedValues,
+  fortint* packedValues,
+  fortint* numberOfUnpackedIntegers,
+  fortint* numberOfPackedBytes) {
+int listPosition, loop;
+unsigned char* packedValuesBytes = (unsigned char*) packedValues;
+grib_int_t UnpackedValues[1024];
+grib_int_t NumberOfUnpackedIntegers;
+grib_int_t NumberOfPackedBytes;
+
+  listPosition = definitionIsDefined(&known,localDefinitionNumber);
+  if( listPosition == -1 ) {
+    *numberOfPackedBytes = 0;
+    return;
+  }
+
+  for( loop = 0; loop < 1024; loop++ )
+    UnpackedValues[loop] = (grib_int_t) *(unpackedValues+loop);
+
+  encodeLocalDefinitionValues(known.actions[listPosition],
+                              UnpackedValues,packedValuesBytes,
+                              &NumberOfUnpackedIntegers,
+                              &NumberOfPackedBytes);
+  *numberOfUnpackedIntegers = NumberOfUnpackedIntegers;
+  *numberOfPackedBytes = NumberOfPackedBytes;
+
+  return;
+}
+
+fortint eldefs(
+  fortint* localDefinitionNumber,
+  fortint* unpackedValues,
+  fortint* packedValues,
+  fortint* numberOfUnpackedIntegers,
+  fortint* numberOfPackedBytes) {
+
+  encodeLocalDefinition(*localDefinitionNumber,unpackedValues,packedValues,
+                       numberOfUnpackedIntegers,numberOfPackedBytes);
+}
+
+fortint eldefs_(
+  fortint* localDefinitionNumber,
+  fortint* unpackedValues,
+  fortint* packedValues,
+  fortint* numberOfUnpackedIntegers,
+  fortint* numberOfPackedBytes) {
+
+  encodeLocalDefinition(*localDefinitionNumber,unpackedValues,packedValues,
+                       numberOfUnpackedIntegers,numberOfPackedBytes);
+}
+
+void insertSection1Length(fortint* section1, fortint* length) {
+unsigned char* psection1 = (unsigned char*) section1;
+unsigned char section1Length[3] = {'\0','\0','\0'};
+fortint Length = *length;
+
+  section1Length[0] = (Length & 0xff0000) >> 16;
+  section1Length[1] = (Length & 0xff00) >> 8;
+  section1Length[2] = (Length & 0xff);
+  memcpy((psection1+8),section1Length,3);
+  return;
+}
+
+void isec1l_(fortint* section1, fortint* length) {
+  insertSection1Length(section1,length);
+  return;
+}
+
+void isec1l(fortint* section1, fortint* length) {
+  insertSection1Length(section1,length);
+  return;
+}
+
+fortint ldefnum(fortint* centre, fortint* subcentre, fortint* number) {
+int shift = (sizeof(fortint)-1)*8;
+#ifdef LITTLE_ENDIAN
+  return ((*centre*1000000) + (*subcentre*1000) + (*number & 0xff));
+#else
+  return ((*centre*1000000) + (*subcentre*1000) + ((*number>>shift) & 0xff));
+#endif
+}
+
+fortint ldefnum_(fortint* centre, fortint* subcentre, fortint* number) {
+  return ldefnum(centre,subcentre,number);
+}
+
+void loadPrintLine(
+  char* printLine,
+  int printLineLength,
+  char* contents,
+  char* code,
+  fortint* ksec1Value) {
+int loop, printLength;
+char value[9];
+char p;
+fortint number;
+
+  for( loop = 0; loop < printLineLength; loop++) printLine[loop] = ' ';
+  printLength = strlen(contents);
+  if( printLength > (printLineLength-10) ) printLength = (printLineLength-10);
+  strncpy((printLine+1),contents,printLength);
+
+  if( EQUAL(code,"A4") ) {
+    memcpy(value,ksec1Value,4);
+    value[4] = '\0';
+    sprintf((printLine+37),"      %s",value);
+  }
+  else if( EQUAL(code,"A8") ) {
+    memcpy(value,ksec1Value,8);
+    value[8] = '\0';
+    sprintf((printLine+37),"      %s",value);
+  } else if( EQUAL(code,"BYTES") ){
+    sprintf(value,"%0x",*ksec1Value,8);
+    if( strlen(value) < 8 ) {
+      int missing = 8 - strlen(value);
+      for( loop = 7; loop >= missing; loop-- ) value[loop] = value[loop-missing];
+      for( loop = 0; loop < missing; loop++ ) value[loop] = '0';
+    }
+#ifdef LITTLE_ENDIAN
+    p = value[0];
+    value[0] = value[6];
+    value[6] = p;
+    p = value[1];
+    value[1] = value[7];
+    value[7] = p;
+    p = value[2];
+    value[2] = value[4];
+    value[4] = p;
+    p = value[3];
+    value[3] = value[5];
+    value[5] = p;
+#endif
+    value[8] = '\0';
+    sprintf((printLine+37),"  %s",value);
+  }
+
+  else
+    sprintf((printLine+37)," %9d",*ksec1Value);
+
+  return;
+}
+
+action* createLocalDefinition(action*,grib_int_t);
+
+void displayUnpackedSection1Values(
+  fortint fileNumber,
+  fortint* unpackedSection1Values) {
+FILE * out;
+char fileName[] = "fort.nn";
+fortint localDefinitionNumber, listPosition;
+action* a;
+int Local = 0;
+int valueToPrint = 41;
+int expverFound = 0;
+int printLength, loop, printableValue = 0, numberOfPrintLines;
+int loopCount, listCount, padCount, byteCount;
+int localDefinitionLengthOffset;
+grib_int_t first = 1, firstLocal = 1;
+char* loopName, *byteName;
+grib_int_t previousDefinitionLengthOffset = 0;
+grib_int_t previousDefinitionLength = 0;
+#define LINELENGTH 46
+char printLine[LINELENGTH] = "                                        ";
+
+  if( (fileNumber < 1) || (fileNumber > 99) ) return;
+
+  if( fileNumber == 6 ) {
+    out = stdout;
+    setbuf(out,NULL);
+  }
+  else {
+    if( fileNumber < 10 ) 
+      sprintf((fileName+5),"%1d",fileNumber);
+    else
+      sprintf((fileName+5),"%2d",fileNumber);
+    out = fopen(fileName,"w");
+  }
+  if( out == NULL ) return;
+
+  localDefinitionNumber = unpackedSection1Values[1]*1000000 +
+                          unpackedSection1Values[21]*1000 +
+                          unpackedSection1Values[36];
+  listPosition = definitionIsDefined(&known,localDefinitionNumber);
+  if( listPosition == -1 )
+    return;
+  else
+    a = known.actions[listPosition];
+
+  while(a) {
+    if( expverFound ) {
+/*
+//    Abandon printing on following:
+*/
+      if( EQUAL((a->code),"IF_EQ") ||
+          EQUAL((a->code),"IF_NEQ") ||
+          EQUAL((a->code),"ENDIF") ||
+          EQUAL((a->code),"PADTO") ||
+          EQUAL((a->code),"SP_TO") ||
+          EQUAL((a->code),"PADMULT") ) return;
+/*
+//    Avoid straightforward printing of following:
+*/
+      printableValue = ( NEQUAL((a->ksec1),"n/a")    &&
+                         NEQUAL((a->code),"PAD")  &&
+                         NEQUAL((a->code),"LP_I") &&
+                         NEQUAL((a->code),"LIST")    &&
+                         NEQUAL((a->code),"BYTES")   &&
+                         NEQUAL((a->code),"F1") );
+      if( printableValue ) {
+        loadPrintLine(printLine,LINELENGTH,
+                      (char*)(a->description),(char*)(a->code),
+                      &unpackedSection1Values[valueToPrint]);
+        fprintf(out,"%s\n",printLine);
+      }
+/*
+//    Print loops:
+*/
+      if( EQUAL((a->code),"LP_I") ){
+        loopCount = a->reference->value;
+        loopName = strdup(a->description);
+        for( loop = 0; loop < loopCount; loop++ ) {
+          loadPrintLine(printLine,LINELENGTH,
+                        loopName,(char*)(a->code),
+                        &unpackedSection1Values[valueToPrint]);
+          fprintf(out,"%s\n",printLine);
+          valueToPrint++;
+        }
+        free(loopName);
+      }
+/*
+//    Print bytes:
+*/
+      if( EQUAL((a->code),"BYTES") ) {
+        byteCount = a->reference->value;
+        byteName = strdup(a->description);
+        for( loop = 0; loop < byteCount/4; loop++ ) {
+          loadPrintLine(printLine,LINELENGTH,
+                        byteName,"BYTES",
+                        &unpackedSection1Values[valueToPrint]);
+          fprintf(out,"%s\n",printLine);
+          valueToPrint++;
+        }
+        free(byteName);
+      }
+/*
+//    Skip padding and only move the count if ksec1 is affected:
+*/
+      if( EQUAL((a->code),"PAD") ) {
+        if( (! stringIsNotANumber(a->count)) && NEQUAL((a->ksec1),"n/a") ) {
+          padCount = atoi(a->count);
+          valueToPrint += padCount;
+        }
+      }
+/*
+//    Print lists:
+*/
+      if( EQUAL((a->code),"LIST") ) {
+        char** listName = NULL;
+        char** listCode = NULL;
+        action* listPointer = a->next;
+        int separateItems = 0, nextItem = 0;
+        int inLocal = 0;
+
+        listCount = a->reference->value;
+        listName = (char**) malloc(sizeof(char*));
+
+        while( NEQUAL((listPointer->code),"ENDLIST") ) {
+          static grib_int_t localCount = 0;
+          if( NEQUAL(listPointer->code,"LOCAL") &&
+              (!inLocal) &&
+              (localCount <= 1) ) {
+            separateItems++;
+            listName = (char**) realloc(listName,separateItems*sizeof(char*));
+            listName[separateItems-1] = strdup(listPointer->description);
+            listCode = (char**) realloc(listCode,separateItems*sizeof(char*));
+            listCode[separateItems-1] = strdup(listPointer->code);
+            listPointer = listPointer->next;
+            localDefinitionLengthOffset = separateItems - 1;
+          }
+          else {
+/*
+//          Special handling for definition 192 (LOCAL within a LIST):
+//
+//   numberOfLocalDefinitions	52	I1	44	-
+//   listOfLocalDefinitions	-	LIST	-	numberOfLocalDefinitions
+//   localDefinitionLength	-	I2	-	-
+//   localDefinition		-	LOCAL	-	-
+//   endListOfLocalDefinitions	-	ENDLIST	-	listOfLocalDefinitions
+*/
+            action* local, * a;
+            action next;
+            grib_int_t lengthOffset;
+            static grib_int_t length;
+            grib_int_t localDefinitionNumber;
+
+            inLocal = 1;
+
+            if( first ) {
+              first = 0;
+              lengthOffset = valueToPrint;
+              localCount = listCount;
+            }
+            else {
+              lengthOffset =
+                previousDefinitionLengthOffset + previousDefinitionLength + 1;
+            }
+            length = unpackedSection1Values[lengthOffset];
+            previousDefinitionLengthOffset = lengthOffset;
+            previousDefinitionLength = length;
+
+            if( !firstLocal ) {
+              separateItems++;
+              listName = (char**) realloc(listName,separateItems*sizeof(char*));
+              listName[separateItems-1] =
+                strdup(listName[localDefinitionLengthOffset]);
+              listCode = (char**) realloc(listCode,separateItems*sizeof(char*));
+              listCode[separateItems-1] =
+                strdup(listCode[localDefinitionLengthOffset]);
+            }
+            else
+              firstLocal = 0;
+/*
+//          Setup ccc = 98, sss = 000, nnn = number
+*/
+            localDefinitionNumber = 98000000 +
+                                    unpackedSection1Values[lengthOffset+1];
+
+            a = listPointer;
+            Local = 1;
+            local = createLocalDefinition(a,localDefinitionNumber);
+            local = local->next;
+
+            while( local ) {
+              if( NEQUAL(local->ksec1,"n/a") ) {
+                separateItems++;
+                listName = (char**) realloc(listName,separateItems*sizeof(char*));
+                listName[separateItems-1] = strdup(local->description);
+                listCode = (char**) realloc(listCode,separateItems*sizeof(char*));
+                listCode[separateItems-1] = strdup(local->code);
+              }
+              else {
+/*
+//              previousDefinitionLengthOffset++;
+*/
+              }
+              local = local->next;
+            }
+            localCount--;
+            if( localCount == 0 ) {
+              inLocal = 0;
+              break;
+            }
+          }
+        }
+
+        if( Local )
+          numberOfPrintLines = separateItems;
+        else
+          numberOfPrintLines = listCount * separateItems;
+       
+        nextItem = 0;
+        for( loop = 0; loop < numberOfPrintLines; loop++ ) {
+          loadPrintLine(printLine,LINELENGTH,
+                      listName[nextItem],listCode[nextItem],
+                      &unpackedSection1Values[valueToPrint]);
+          fprintf(out,"%s\n",printLine);
+          valueToPrint++;
+		  if(EQUAL(listCode[nextItem],"A8"))
+		  	valueToPrint++;
+          nextItem++;
+          if( nextItem == separateItems ) nextItem = 0;
+        }
+        for( loop = 0; loop < separateItems; loop++ ) {
+          free(listName[loop]);
+          free(listCode[loop]);
+        }
+        free(listName);
+        free(listCode);
+/*
+//      Skip to ENDLIST (which will not be displayed)
+//      Return if a LIST of LOCAL definitions (definition 192).
+*/
+        a = listPointer;
+        if( Local ) {
+          first = 1;
+          firstLocal = 1;
+/*
+          previousDefinitionLengthOffset = 0;
+          previousDefinitionLength = 0;
+*/
+          Local = 0;
+          if( fileNumber != 6 ) fclose(out);
+          return;
+        }
+      }
+    }
+
+    if( EQUAL("experimentVersionNumber",a->description) ) expverFound = 1;
+    if( printableValue ) valueToPrint++;
+	if( printableValue && EQUAL((a->code),"A8") ) valueToPrint++;
+    a = a->next;
+  }
+
+  if( fileNumber != 6 ) fclose(out);
+
+  return;
+}
+
+void ldefprt(fortint* fileNumber, fortint* unpackedSection1Values) {
+  displayUnpackedSection1Values(*fileNumber,unpackedSection1Values);
+  return;
+}
+
+void ldefprt_(fortint* fileNumber, fortint* unpackedSection1Values) {
+  displayUnpackedSection1Values(*fileNumber,unpackedSection1Values);
+  return;
+}
diff --git a/gribex/fortvalues.h b/gribex/fortvalues.h
new file mode 100755
index 0000000..6d8b6d1
--- /dev/null
+++ b/gribex/fortvalues.h
@@ -0,0 +1,21 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FORTVALUES_H
+#define FORTVALUES_H
+
+#include "fortint.h"
+
+#define BYTE  0xFF & (fortint)
+
+void mvbytes(char *, fortint * , int );
+void rtbytes(fortint *, char * , int );
+
+#endif /* End of FORTVALUES_H */
diff --git a/gribex/ftn1cr.F b/gribex/ftn1cr.F
new file mode 100755
index 0000000..1d016bc
--- /dev/null
+++ b/gribex/ftn1cr.F
@@ -0,0 +1,192 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE FTN1CR ( KNUM , KPR ,KRET )
+C
+C---->
+C**** FTN1CR
+C
+C     PURPOSE.
+C     --------
+C
+C           GIVES FORTRAN UNIT NUMBER NOT CURRENTLY IN USE.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL FTN1CR ( KNUM , KPR ,KRET )
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               KNUM       - FREE FORTRAN UNIT NUMBER.
+C               KRET       - ERROR RETURN CODE.
+C                            0   , NO ERROR ENCOUNTERED.
+C                            1   , NO UNIT NUMBER FREE.
+C
+C     METHOD.
+C     -------
+C
+C           INQUIRE STATEMENT ON CRAY ALIAS USED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C           NONE.
+C
+C     COMMENTS.
+C     ---------
+C
+C           ROUTINE CONTAINS SECTIONS 0 , 2  AND SECTION 9.
+C
+C     AUTHOR.
+C     -------
+C
+C           J. HENNESSY      ECMWF      12.07.89.
+C
+C     MODIFICATIONS
+C     --------------
+C
+C           NONE.
+C
+C----<
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'FTN1CR : SECTION 1.'
+C
+      KRET = 0
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . INQUIRE FOR FREE UNIT.
+C     ----------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'FTN1CR : SECTION 2.'
+C
+      DO 2010 J2010 = 99,1,-1
+         IF (J2010.EQ.5) GO TO 2010
+         IF (J2010.EQ.6) GO TO 2010
+         WRITE (YALIAS,'(A,I2.2)') 'FT',J2010
+         INQUIRE (FILE=YALIAS,EXIST=LEX)
+         IF (LEX) GO TO 2010
+         KNUM = J2010
+         GO TO 2050
+ 2010 CONTINUE
+C
+C     NO FREE UNIT FOUND.
+C
+      KRET = 1
+C
+      WRITE (*,9001)
+C
+ 2050 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,9002) KNUM
+C
+      GO TO 9000
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'FTN1CR : SECTION 9.'
+C
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'FTN1CR : NO FORTRAN UNIT AVAILABLE.')
+C
+ 9002 FORMAT (1H ,'FTN1CR : FORTRAN UNIT ALLOCATED = ',I3)
+C
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/gbitmap.F b/gribex/gbitmap.F
new file mode 100755
index 0000000..9debbb2
--- /dev/null
+++ b/gribex/gbitmap.F
@@ -0,0 +1,258 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#ifndef USE_NO_POINTERS
+      INTEGER FUNCTION GBITMAP(KNUM, KVALS, KNONMIS, KBTPTR, KBYTE)
+C
+C---->
+C**** GBITMAP - Read bitmap from a file
+C
+C     Purpose.
+C     --------
+C
+C     Reads a bitmap from a file.
+C
+C**   Interface.
+C     ----------
+C
+C     IRET = GBITMAP(KNUM, KVALS, KNONMIS, KBTPTR, KBYTE)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KNUM    - The predetermined bitmap number (in range 0 to 999)
+C     KBYTE   - Number of bits in an INTEGER.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KVALS   - The number of bits in the bitmap
+C     KNONMIS - The number of non-missing points in the bitmap
+C     KBTPTR  - Pointer to the start of the bitmap
+C
+C     Returns zero if all OK (otherwise an error).
+C
+C
+C     Method.
+C     -------
+C
+C     Opens a file containing the bitmap, allocates memory for the
+C     bitmap, reads the bitmap into memory, and closes the file.
+C
+C     If the bitmap number is the same as in the previous call,
+C     the open/allocate/read sequence is skipped.
+C
+C     The file pathname may be given by the environment variable
+C     LOCAL_BITMAP_PATH, otherwise a hardcoded default pathname is used.
+C
+C
+C     Externals.
+C     ----------
+C
+C     PBOPEN   - Opens the binary bitmap file
+C     PBREAD   - Reads the binary bitmap file
+C     PBCLOSE  - Closes the binary bitmap file
+C     INXBIT   - Extract values from bit-stream
+C     JMALLOC  - Routine to acquire memory
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers       ECMWF      Oct 1996
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.Clochard, Meteo France, for ECMWF - January 1998.
+C     Use JMALLOC for all systems.
+C
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+#include "grbcom.h"
+C
+C     Function arguments
+C
+      INTEGER KNUM, KVALS, KNONMIS, KBYTE
+#ifdef POINTER_64
+      INTEGER*8 KBTPTR
+#else
+      INTEGER*4 KBTPTR
+#endif
+C
+C     Local variables
+C
+      INTEGER IRET
+C
+C     Predetermined bitmask variables
+C
+      CHARACTER*256 HBTMASK
+      INTEGER IBTMAP,IBTMASK,IBTSIZE,IBTSIZP,IBTOPEN,IBTVALS,NONMISS
+      INTEGER IOFFSET
+#ifdef POINTER_64
+      INTEGER*8 IBTPTR
+#endif
+      POINTER (IBTPTR,IBTMAP)
+      DIMENSION IBTMAP(1)
+      SAVE IBTPTR, IBTSIZP, IBTOPEN, IBTVALS, NONMISS
+C
+C     External functions
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      EXTERNAL JMALLOC
+C
+      DATA IBTSIZP/0/
+      DATA IBTOPEN/0/
+C
+C     ----------------------------------------------------------------
+C     Section 1 . Initialise.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Clear return values
+      KVALS   = 0
+      KNONMIS = 0
+      KBTPTR  = 0
+C
+C     Check the bitmap number is valid
+      IF( (KNUM.LT.0) .OR. (KNUM.GT.999) ) THEN
+        WRITE(GRPRSM,*) 'GBITMAP: Invalid bitmap number given = ', KNUM
+        GBITMAP = 727
+        GOTO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 2 . Open the bitmask file if first time.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( IBTOPEN.NE.KNUM ) THEN
+C 
+C       Build filename
+        HBTMASK = ELBPATH
+        IOFFSET = INDEX( HBTMASK, ' ')
+        WRITE(HBTMASK(IOFFSET:IOFFSET+10),'(A8,I3.3)')
+     X    'bitmask_', KNUM
+        IOFFSET = INDEX( HBTMASK, ' ')
+C 
+C       Open the file
+        CALL PBOPEN(IBTMASK,HBTMASK(1:IOFFSET-1),'r',IRET)
+        IF( IRET.NE.0 ) THEN
+          WRITE(GRPRSM,*) 'GBITMAP: Open predetermined bitmap failed'
+          GBITMAP = 728
+          GOTO 900
+        ENDIF
+C 
+C       Read file size (number of bits)
+        CALL PBREAD(IBTMASK,IBTSIZE,KBYTE,IRET)
+        IF( IRET.NE.KBYTE ) THEN
+          WRITE(GRPRSM,*) 'GBITMAP: Problem getting bitmap size'
+          GBITMAP = 729
+          GOTO 900
+        ENDIF
+C 
+C       Get memory to read bitmask unless sufficient previously
+C       allocated
+        IBTVALS = IBTSIZE
+        IBTSIZE = (IBTSIZE+8-1)/8
+C 
+C       Check whether this bitmap is bigger than the previous
+C       bitmap (if any)
+        IF( IBTSIZE.GT.IBTSIZP ) THEN
+C 
+C         Return previously allocated memory (if any)
+          IF( IBTSIZP.NE.0 ) CALL JFREE(IBTPTR)
+C 
+C         Get memory
+          IBTPTR  = JMALLOC(IBTSIZE)
+#ifdef hpR64
+          IBTPTR = IBTPTR/(1024*1024*1024*4)
+#endif
+          IF( IBTPTR.EQ.0 ) THEN
+            WRITE(GRPRSM,*) 'GBITMAP: Problem getting memory for bitmap'
+            GBITMAP = 730
+            GOTO 900
+          ENDIF
+        ENDIF
+C 
+C       Read number of non-missing points
+        CALL PBREAD(IBTMASK,NONMISS,KBYTE,IRET)
+        IF( IRET.NE.KBYTE ) THEN
+          WRITE(GRPRSM,*)
+     X      'GBITMAP: Problem getting no. non-missing points'
+          GBITMAP = 731
+          GOTO 900
+        ENDIF
+C 
+C       Read the bitmap
+        CALL PBREAD(IBTMASK,IBTMAP,IBTSIZE,IRET)
+        IF( IRET.NE.IBTSIZE ) THEN
+          WRITE(GRPRSM,*) 'GBITMAP: Problem reading bitmap'
+          GBITMAP = 732
+          GOTO 900
+        ENDIF
+C 
+C       Close the bitmap file
+        CALL PBCLOSE(IBTMASK,IRET)
+        IF( IRET.NE.0 ) THEN
+          WRITE(GRPRSM,*) 'GBITMAP: Problem closing bitmap file'
+          GBITMAP = 733
+          GOTO 900
+        ENDIF
+C
+        IBTOPEN = KNUM
+C
+      ENDIF
+C
+C     Setup return values
+      KVALS   = IBTVALS
+      KNONMIS = NONMISS
+      KBTPTR  = IBTPTR
+      GBITMAP = 0
+C 
+C     ----------------------------------------------------------------
+C     Section 9 . Closedown.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
+#endif
diff --git a/gribex/gbyte.F b/gribex/gbyte.F
new file mode 100755
index 0000000..2941ac1
--- /dev/null
+++ b/gribex/gbyte.F
@@ -0,0 +1,67 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GBYTE  (SOURCE,DEST,IOFSET,IBYTSZ)
+C
+C---->
+C**** GBYTE  - Extract a single bit field. Cray routine.
+C
+C*    FUNCTION: GET A SINGLE BIT FIELD FROM SOURCE INTO DEST
+C*
+C*    INPUT   : SOURCE(1)= WORD CONTAINING START OF BIT FIELD
+C*              DEST     = TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST CONTAINS FIELD RIGHT JUSTIFIED
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+C----<
+      PARAMETER(NBPW=64)
+      INTEGER SOURCE(1),DEST
+      INTEGER SH1
+      SH1=IOFSET+IBYTSZ-NBPW
+
+      IF(SH1.GT.0) GO TO 2
+
+
+C     BYTES DO NOT SPAN WORDS
+
+
+      SH1=NBPW+SH1
+
+
+      DEST=AND(
+     1          SHIFT(SOURCE(1),SH1),
+     2          SHIFT(MASK(IBYTSZ),IBYTSZ)
+     3        )
+
+      RETURN
+
+C     BYTE SPANS WORDS
+
+2     CONTINUE
+
+
+      DEST=OR(
+     1        SHIFT(
+     2              AND(SOURCE(1),COMPL(MASK(IOFSET)))
+     3              ,SH1),
+     4        SHIFT(
+     5              AND(SOURCE(2),MASK(SH1))
+     6              ,SH1)
+     7       )
+
+
+
+      RETURN
+      END
diff --git a/gribex/gbytes.F b/gribex/gbytes.F
new file mode 100755
index 0000000..3dff884
--- /dev/null
+++ b/gribex/gbytes.F
@@ -0,0 +1,76 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GBYTES (S,D,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C---->
+C**** GBYTES - Extract a number of bit fields. Cray routine.
+C
+C S CONTAINS A BIT STRING OF INDEFINITE LENGTH. GBYTES WILL
+C EXTRACT NBYTES BITSTRINGS, IBSIZ BITS LONG, AND STORE THEM
+C RIGHT JUSTIFIED 0 FILL, INTO SUCCESSIVE WORDS OF D. THE
+C SUCCESSIVE BITSTRINGS START AT BIT POSITIONS
+C     ISKIP1+1+(IBYTE-1)*(IBSIZ+ISKIP2)
+C IN THE BIT STRING S. I.E. SKIP ISKIP1 BITS AT THE START,
+C AND ISKIP2 BITS BETWEEN THE EXTRACTED STRINGS.
+C BIT ISKP+1 IN A STRING IS FOUND IN WORD IS=1+ISKIP/NBPW IN S,
+C WHERE NBPW IS THE NUMBER OF BITS PER WORD. THE STARTING BIT
+C IS FOUND BY SKIPPING MOD(ISKP,NBPW) BITS IN THAT WORD.
+C KWOFF IS AN OPTIONAL 7TH PARAMETER, WHICH DEFAULTS TO 0
+C IF PRESENT KWOFF BITS ARE TOTALLY IGNORED AT THE START OF A WORD
+C THUS IF A PACKED CYBER BIT STRING IS TRANSFERRED TO THE
+C CRAY, WITH EACH 60 BIT CYBER WORD PLACED AT THE RIGHT END OF
+C A 64 BIT CRAY WORD, A BYTE SEQUENCE WHICH WAS ORIGINALLY
+C LOCATED WITH START POINTS IN ARITHMETIC PROGRESSION ON THE
+C CYBER, WILL NO LONGER HAVE THIS PROPERTY ON THE CRAY. BY
+C USING THE ROUTINE WITH KWOFF=4, THE ELEMENTS OF THE BYTE
+C SEQUENCE CAN BE EXTRACTED ON THE CRAY, USING THE SAME SKIPS
+C AS WERE USED ON THE CYBER.
+C
+C----<
+      PARAMETER(NBPW=64)
+      DIMENSION S(2) , D(NBYTES)
+      INTEGER SH1
+      IGNORE = 0
+#ifdef CRAY
+      IF(NUMARG().GT.6) IGNORE = KWOFF
+#else
+      IF(NUMARG(DUMMY).GT.6) IGNORE = KWOFF
+#endif
+      IS=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION DETERMINED, THE
+C DESIRED EXTRACTION CAN BE DONE BY
+C***     CALL GBYTE(S(IS),D(IBYTE),ISKIP,IBSIZ)
+C BUT SINCE THE CODE IS SHORT IT IS INSERTED IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+C BYTE COMES FROM 1 WORD OF S
+         D(IBYTE) = AND( SHIFT(S(IS),SH1),SHIFT(MASK(IBSIZ),IBSIZ))
+         GO TO 65
+   50    CONTINUE
+         SH1 =SH1-NBPW
+C BYTE COMES FROM 2 WORDS OF S.
+         D(IBYTE) = OR(SHIFT(AND(S(IS),COMPL(MASK(ISKIP))),SH1)
+     1                           ,
+     2                SHIFT(AND(SHIFT(S(IS+1),IGNORE),MASK(SH1)),SH1)
+     3                 )
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP =ISKIP-NBPW
+         IS = IS+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75 CONTINUE
+      RETURN
+      END
diff --git a/gribex/gdecode.c b/gribex/gdecode.c
new file mode 100755
index 0000000..296112d
--- /dev/null
+++ b/gribex/gdecode.c
@@ -0,0 +1,1512 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "gdecode.h"
+
+#define GRIB 0x47524942
+#define BIT1 0x80
+#define BIT2 0x40
+
+#define DEBUGOFF 1
+#define DEBUG1 (debugSet > DEBUGOFF )
+#define DEBUG2 (debugSet > (DEBUGOFF + 1) )
+static char * debugLevel;
+static int debugSet = 0;
+
+
+fortint findSectionOffsets(
+  unsigned char * buffer,
+  fortint* is0,
+  fortint* is1,
+  fortint* is2,
+  fortint* is3,
+  fortint* is4,
+  fortint* iedition) {
+long section0Offset, section1Offset, section2Offset;
+long section3Offset, section4Offset, edition;
+int large = 0;
+int found = 0;
+int code = 0;
+unsigned char p, edit_num, flag23;
+int section0Length = 8, section1Length, section2Length, section3Length,
+    section4Length;
+long total;
+unsigned char * q = buffer;
+
+/*
+//  Read bytes until "GRIB" found
+*/
+    do {
+      code = ( (code << 8) | ((*q++)<<0) ) & 0xFFFFFFFF;
+      if (code == GRIB ) found = 1;
+    } while ( ! found );
+    section0Offset = (long) (q - buffer - 4);
+/*
+//  Find out which edition of GRIB is present (default is 1)
+*/
+    edition = 1;
+    section1Offset = section0Offset + 8;
+    if( (*(buffer+21-section0Offset) == '\0') &&
+        (*(buffer+22-section0Offset) == '\0') ) {
+/*
+//    GRIB edition -1
+*/
+      edition = -1;
+      section1Offset = section0Offset;
+      section1Length = 20;
+      section0Length = 4;
+    }
+    else {
+      total = THREEBYTEINT(q); q += 3;
+      if( total == 24 ) {
+/*
+//      Check for edition number
+*/
+        if( ONEBYTEINT(q) != 0) return 1;
+/*
+//      GRIB edition 0
+*/
+        q++;
+        edition = 0;
+        section1Length = 24;
+        section1Offset = section0Offset + 4;
+        section0Length = 4;
+      }
+/*
+//    See if it is an extra large (wave) product
+*/
+      if( total > 0x800000 ) {
+        total = (total&0x7fffff) * 120;
+        large = 1;
+      }
+    }
+
+    if( edition == 1 ) {
+/*
+//    Read length of section 1
+*/
+      q++;
+      section1Length = THREEBYTEINT(q); q += 3;
+      section1Offset = section0Offset + section0Length;
+    }
+/*
+//  Now figure out if sections 2/3 are present
+*/
+    q += 4;
+    flag23 = *q++;
+    section2Length = flag23 & BIT1;
+    section3Length = flag23 & BIT2;
+/*
+//  Advance to end of section 1
+*/
+    q = buffer + section1Offset + section1Length;
+/*
+//  Read section 2 length if it is present
+*/
+    if( section2Length ) {
+      section2Offset = (fortint) (q - buffer);
+      section2Length = THREEBYTEINT(q); q+= 3;
+      q = buffer + section2Offset + section2Length;
+    }
+    else {
+      section2Length = 0;
+      section2Offset = 0;
+    }
+/*
+//  Read section 3 length if it is present
+*/
+    if( section3Length ) {
+      section3Offset = (fortint) (q - buffer);
+      section3Length = THREEBYTEINT(q); q+= 3;
+    q = buffer + section3Offset + section3Length;
+    }
+    else {
+      section3Length = 0;
+      section3Offset = 0;
+    }
+/*
+//  Read section 4 length
+*/
+    section4Offset = (fortint) (q - buffer);
+    section4Length = THREEBYTEINT(q); q+= 3;
+    if( large ){
+          total = total + section4Length;
+	  section4Length = total - section4Offset;  
+	  }
+/*
+//  Advance to end of section 4
+*/
+    q = buffer + section4Offset + section4Length;
+/*
+//  Check section 5, ie 7777 group is in the expected place
+*/
+    if( FOURBYTEINT(q) != 0x37373737 ) {
+      if(!large) {
+             printf("7777 group not found\n");
+             return 15;
+      }
+    }
+/*
+//  Success!
+*/
+    *is0 = (fortint) section0Offset;
+    *is1 = (fortint) section1Offset;
+    *is2 = (fortint) section2Offset;
+    *is3 = (fortint) section3Offset;
+    *is4 = (fortint) section4Offset;
+    *iedition = (fortint) edition;
+
+    return 0;
+}
+
+fortint prepareGrib( gribProduct ** grib, unsigned char * buffer) {
+fortint is0, is1, is2, is3, is4, iedition;
+long status;
+unsigned char * p;
+gribProduct * gp;
+
+  if( *grib == NULL ) {
+    gp = (gribProduct *) allocateMemory(sizeof(gribProduct));
+    *grib = gp;
+  }
+  else
+    gp = *grib;
+
+  status = findSectionOffsets(buffer,&is0,&is1,&is2,&is3,&is4,&iedition);
+  if( status ) {
+    printf("prepareGrib: Problem finding GRIB section offsets\n");
+    return (fortint) 1;
+  }
+
+  if( iedition != 1 ) {
+    printf("prepareGrib: Only GRIB edition 1 allowed.\n");
+    return (fortint) 1;
+  }
+
+  p = (unsigned char *) (buffer + is0);
+  gp->g0 = (gribSection0 *) p;
+
+  p = (unsigned char *) (buffer + is1);
+  gp->g1 = (gribSection1 *) p;
+
+  if( is2 == 0 )
+    gp->g2 = NULL;
+  else {
+    p = (unsigned char *) (buffer + is2);
+    gp->g2 = (gribSection2 *) p;
+  }
+
+  if( is3 == 0 )
+    p = NULL;
+  else {
+    p = (unsigned char *) (buffer + is3);
+    gp->g3 = (gribSection3 *) p;
+  }
+
+  p = (unsigned char *) (buffer + is4);
+  gp->g4 = (gribSection4 *) p;
+
+  return (fortint) 0;
+}
+
+fortint convertGRIBFloatToIEEE(unsigned char * valuePointer) {
+fortint temp;
+fortint sign, exponent, mantissa, newmantissa, newexponent;
+/*
+// The GRIB float format is defined in WMO manual on codes for
+// FM 92 GRIB, 92.6.4:
+//    R = (-1)^sign * 2^(-24) * mantissa * 16^(exponent-64)
+*/
+
+  temp = FOURBYTEINT(valuePointer);
+  if( temp == 0 )
+    return (fortint) 0;
+  else {
+    sign = temp & 0x80000000;
+    exponent = (((temp & 0x7f000000)>>24) - 64);
+    mantissa = (temp & 0xffffff);
+    newmantissa = mantissa<<8;
+    newexponent = exponent*4-1;
+    while( !(newmantissa & 0x80000000) ) {
+      newexponent--;
+      newmantissa <<= 1;
+    }
+    newexponent += 127;
+    return (fortint) (sign | (newexponent<<23) | ((newmantissa>>8)&0x7fffff) );
+  }
+}
+
+fortdouble realValue(unsigned char * value) {
+float realNumber;
+fortint realNumberBits;
+
+  realNumberBits = convertGRIBFloatToIEEE(value);
+  memcpy((char *)&realNumber,(char *)&realNumberBits,4);
+  return (fortdouble) realNumber;
+}
+
+fortdouble referenceValue(gribProduct * grib) {
+  return realValue(grib->g4->referenceValue);
+}
+
+fortdouble RGREFVL(gribProduct ** grib) {
+  return referenceValue( (*grib) );
+}
+
+fortint IGBTSPV(gribProduct ** grib) {
+  return g4_bits( (*grib) );
+}
+
+fortdouble RGDSCAL(gribProduct ** grib) {
+fortint value = g4_scale( (*grib) );
+double two = 2.0;
+fortdouble scale;
+/*
+// High order bit set => negative value
+*/
+  if( value & 0x8000 ) value = - (value & 0x7fff);
+  if( value == 0 )
+    scale = 1.0;
+  else
+    scale = pow(two,(double)value);
+  return scale;
+}
+
+fortint IGUNUSD(gribProduct ** grib) {
+  return (g4_flag( (*grib) ) & 0xf);
+}
+
+fortint GDECODE(gribProduct ** grib, unsigned char * buffer) {
+fortint status;
+/*
+// See if DEBUG switched on.
+*/
+    if( ! debugSet ) {
+      debugLevel = getenv("GDECODE_DEBUG");
+      if( debugLevel == NULL )
+        debugSet = DEBUGOFF;              /* off */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(debugLevel) ; loop++ ) {
+          if( ! isdigit(debugLevel[loop]) ) {
+            printf("Invalid number string in GDECODE_DEBUG: %s\n", debugLevel);
+            printf("GDECODE_DEBUG must comprise only digits [0-9].\n");
+            debugSet = DEBUGOFF;
+          }
+        }
+        debugSet = DEBUGOFF + atol( debugLevel );
+      }
+      if( DEBUG1 ) printf("GDECODE: GDECODE_DEBUG switched on, level = %s\n",
+                          debugLevel);
+    }
+
+  status = prepareGrib( grib, buffer);
+
+  if( DEBUG1 )
+    if( status )
+      printf("GDECODE: prepareGrib failed.\n");
+    else
+      printf("GDECODE: prepareGrib ran OK\n");
+
+  return status;
+}
+
+fortint IGLNGTH(gribProduct ** grib) {
+  return g0_length( (*grib) );
+}
+
+fortint IGDATE(gribProduct ** grib) {
+fortint date;
+gribProduct * g = *grib;
+
+  if( (g1_century(g) == 255) || (g1_year(g) == 255) || (g1_day(g) == 255) )
+    return (fortint) g1_month(g);
+
+  date = (g1_century(g)-1)*1000000 +
+         g1_year(g)*10000 +
+         g1_month(g)*100 +
+         g1_day(g);
+
+  return date;
+}
+
+fortint IGTIME(gribProduct ** grib) {
+fortint time;
+gribProduct * g = *grib;
+  
+  if( (g1_hour(g) == 255) || (g1_minute(g) == 255) ) return (fortint) -1;
+
+  time = g1_hour(g)*100 +
+         g1_minute(g);
+
+  return time;
+}
+
+fortint IGSTEP(gribProduct ** grib) {
+fortint timeunit, timerange, step;
+gribProduct * g = *grib;
+  
+  switch( (int) g1_timeunit(g) ) {
+
+    case 2:
+      timeunit = 24;
+      break;
+
+    case 10:
+      timeunit = 3;
+      break;
+
+    case 11:
+      timeunit = 6;
+      break;
+
+    case 12:
+      timeunit = 12;
+      break;
+
+    default:
+      timeunit = 1;
+      break;
+  }
+
+  switch( (int) g1_timerange(g) ) {
+
+    case 0:
+    case 1:
+    case 113:
+    case 114:
+    case 115:
+    case 116:
+    case 117:
+    case 118:
+    case 123:
+    case 124:
+      step = g1_P1(g);
+      break;
+
+    case 10:
+      step = (g1_P1(g)<<8) | (g1_P2(g)<<0);
+      break;
+
+    default:
+      step = g1_P2(g);
+      break;
+ }
+
+  step *= timeunit;
+
+  return step;
+}
+
+fortint IGSTEP1(gribProduct ** grib) {
+  return g1_P1( (*grib) );
+}
+
+fortint IGSTEP2(gribProduct ** grib) {
+  return g1_P2( (*grib) );
+}
+
+fortint IGTABLE(gribProduct ** grib) {
+  return g1_table( (*grib) );
+}
+
+fortint IGCENTR(gribProduct ** grib) {
+  return g1_centre( (*grib) );
+}
+
+fortint IGPARAM(gribProduct ** grib) {
+  return g1_parameter( (*grib) );
+}
+
+fortint IGLEVEL(gribProduct ** grib) {
+fortint level;
+gribProduct * g = *grib;
+
+  switch( (int) g1_typeOfLevel(g) ) {
+
+    case  20:
+    case 100:
+    case 103:
+    case 105:
+    case 107:
+    case 109:
+    case 111:
+    case 113:
+    case 115:
+    case 117:
+    case 119:
+    case 125:
+    case 127:
+    case 160:
+    case 210:
+      level = (g1_level1(g)<<8) | (g1_level2(g)<<0);
+      break;
+
+    case 101:
+    case 104:
+    case 106:
+    case 108:
+    case 110:
+    case 112:
+    case 114:
+    case 116:
+    case 120:
+    case 121:
+    case 128:
+    case 141:
+      level = g1_level1(g)*1000 + g1_level2(g);
+      break;
+
+    default:
+      level = 0;
+      break;
+  }
+
+  return level;
+}
+
+fortint IGLEVL1(gribProduct ** grib) {
+gribProduct * g = *grib;
+
+  switch( (int) g1_typeOfLevel(g) ) {
+
+    case 101:
+    case 104:
+    case 106:
+    case 108:
+    case 110:
+    case 112:
+    case 114:
+    case 116:
+    case 120:
+    case 121:
+    case 128:
+    case 141:
+      return g1_level1(g);
+
+    default:
+      return IGLEVEL(grib);
+  }
+}
+
+fortint IGLEVL2(gribProduct ** grib) {
+gribProduct * g = *grib;
+
+  switch( (int) g1_typeOfLevel(g) ) {
+
+    case 101:
+    case 104:
+    case 106:
+    case 108:
+    case 110:
+    case 112:
+    case 114:
+    case 116:
+    case 120:
+    case 121:
+    case 128:
+    case 141:
+      return g1_level2(g);
+
+    default:
+      return IGLEVEL(grib);
+  }
+}
+
+fortint IGDEFIN(gribProduct ** grib) {
+  if( ecmwfLocalDefinitionPresent((*grib)) )
+    return g1_definition( (*grib) );
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) )
+    return g1_definition( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGDEFIN: no ECMWF local definition found\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGCLASS(gribProduct ** grib) {
+  if( ecmwfLocalDefinitionPresent((*grib)) )
+    return g1_class( (*grib) );
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) )
+    return g1_class( (*grib) );
+  else {
+    if( DEBUG1 ) printf("GCLASS: no ECMWF class found\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGTYPE(gribProduct ** grib) {
+  if( ecmwfLocalDefinitionPresent((*grib)) )
+    return g1_type( (*grib) );
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) )
+    return g1_type( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGTYPE: no ECMWF type found\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGSTREM(gribProduct ** grib) {
+  if( ecmwfLocalDefinitionPresent((*grib)) )
+    return g1_stream( (*grib) );
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) )
+    return g1_stream( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGSTREM: no ECMWF stream found\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGEXPVR(gribProduct ** grib) {
+  if( ecmwfLocalDefinitionPresent((*grib)) )
+    return g1_expver( (*grib) );
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) )
+    return g1_expver( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGEXPVR: no ECMWF experiment version found\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGREPRS(gribProduct ** grib) {
+  return g2_datatype( (*grib) );
+}
+
+fortint IGNUMPV(gribProduct ** grib) {
+  return g2_NV( (*grib) );
+}
+
+fortint GPV(gribProduct ** grib, fortdouble * list, fortint * sizeList ) {
+gribProduct * g = *grib;
+fortdouble * l = list;
+int loop, numberOfVerticalCoordinates;
+unsigned char * value;
+
+  if( !(numberOfVerticalCoordinates = g2_NV(g)) ) return (fortint) 0;
+
+  if( numberOfVerticalCoordinates > *sizeList ) return (fortint) -1;
+
+  value = (unsigned char *)(g->g2) + g2_PV_PL(g) - 1;
+
+  for( loop = 0; loop < numberOfVerticalCoordinates; loop++ ) {
+    *(l+loop) = realValue(value);
+    value += 4;
+  }
+  return (fortint) numberOfVerticalCoordinates;
+}
+
+fortint GPL(gribProduct ** grib, fortint * list, fortint * sizeList ) {
+gribProduct * g = *grib;
+fortint * l = list;
+int loop, numberOfVerticalCoordinates, numberOfRows;
+unsigned char * value;
+
+  numberOfRows = g2_nj(g);
+  if( numberOfRows > *sizeList ) return (fortint) -1;
+
+  numberOfVerticalCoordinates = g2_NV(g);
+
+  value = (unsigned char *)(g->g2) + g2_PV_PL(g) +
+                                             numberOfVerticalCoordinates*4 - 1;
+
+  for( loop = 0; loop < numberOfRows; loop++ ) {
+    *(l+loop) = TWOBYTEINT(value);
+    value += 2;
+  }
+  return (fortint) numberOfRows;
+}
+
+fortint IGNI(gribProduct ** grib) {
+  if( generalLatLonGrid( (*grib) ) )
+    if( g2_ni( (*grib) ) == 65535 )
+      return (fortint) -1;
+    else
+     return g2_ni( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGNI: not a lat/long grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGNJ(gribProduct ** grib) {
+  if( generalLatLonGrid( (*grib) ) )
+    if( g2_nj( (*grib) ) == 65535 )
+      return (fortint) -1;
+    else
+      return g2_nj( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGNJ: not a lat/long grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGNWLAT(gribProduct ** grib) {
+fortint value;
+  if( generalLatLonGrid( (*grib) ) ) {
+    value = g2_firstLat( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGNWLAT: not a lat/long grid\n");
+    return (fortdouble) -999999.0;
+  }
+}
+
+fortdouble RGNWLON(gribProduct ** grib) {
+fortint value;
+  if( generalLatLonGrid( (*grib) ) ) {
+    value = g2_firstLon( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGNWLON: not a lat/long grid\n");
+    return (fortdouble) -999999.0;
+  }
+}
+
+fortdouble RGSELAT(gribProduct ** grib) {
+fortint value;
+  if( generalLatLonGrid( (*grib) ) ) {
+    value = g2_lastLat( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGSELAT: not a lat/long grid\n");
+    return (fortdouble) -999999.0;
+  }
+}
+
+fortdouble RGSELON(gribProduct ** grib) {
+fortint value;
+  if( generalLatLonGrid( (*grib) ) ) {
+    value = g2_lastLon( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGSELON: not a lat/long grid\n");
+    return (fortdouble) -999999.0;
+  }
+}
+
+fortint IGRESCO(gribProduct ** grib) {
+  if( generalLatLonGrid( (*grib) ) )
+    return g2_resAndComp( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGRESCO: not a lat/long grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGDI(gribProduct ** grib) {
+fortint value;
+  if( generalLatLonGrid( (*grib) ) ) {
+    value = g2_di( (*grib) );
+    if( value == 65535 )
+      return (fortdouble) -1;
+    else
+      return ((fortdouble) value )/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGDI: not a lat/long grid\n");
+    return (fortdouble) -999999.0;
+  }
+}
+
+fortdouble RGDJ(gribProduct ** grib) {
+fortint value;
+  if( generalLatLonGrid( (*grib) ) ) {
+    value = g2_dj( (*grib) );
+    if( value == 65535 )
+      return (fortdouble) -1;
+    else
+      return ((fortdouble) value )/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGDJ: not a lat/long grid\n");
+    return (fortdouble) -999999.0;
+  }
+}
+
+fortint IGGAUSS(gribProduct ** grib) {
+  if( anyGaussianGrid( (*grib) ) )
+    return g2_gaussNumber( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGGAUSS: not a gaussian grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGSCANM(gribProduct ** grib) {
+  if( generalLatLonGrid( (*grib) ) )
+    return g2_scan( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGSCANM: not a lat/long grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGJ(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g2_J( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGJ: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGK(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g2_K( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGK: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGM(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g2_M( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGM: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGREPMO(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g2_repmode( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGREPMO: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGIP(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return ((fortdouble) g4_ip( (*grib) )/1000.0);
+  else {
+    if( DEBUG1 ) printf("RGIP: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGTJ(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g4_j( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGTJ: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGTK(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g4_k( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGTK: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortint IGTM(gribProduct ** grib) {
+  if( anySpectralField( (*grib) ) )
+    return g4_m( (*grib) );
+  else {
+    if( DEBUG1 ) printf("IGTM: not a spectral field\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGLATRP(gribProduct ** grib) {
+fortint value;
+  if( generalRotatedGrid( (*grib) ) ) {
+    value = g2_latSouthPole( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGLATRP: not a rotated grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGLONRP(gribProduct ** grib) {
+fortint value;
+  if( generalRotatedGrid( (*grib) ) ) {
+    value = g2_lonSouthPole( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( DEBUG1 ) printf("RGLONRP: not a rotated grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGROTAT(gribProduct ** grib) {
+unsigned char * rotation;
+  if( generalRotatedGrid( (*grib) ) ) {
+    rotation = ((*grib)->g2)->grid.latlon.angleOfRotationOrStretchingFactor;
+    return realValue(rotation);
+  }
+  else {
+    if( DEBUG1 ) printf("RGROTAT: not a rotated grid\n");
+    return (fortint) -999999;
+  }
+}
+
+fortdouble RGLATSP(gribProduct ** grib) {
+fortint value;
+  if( generalStretchedAndRotatedGrid( (*grib) ) ) {
+    value = g2_latStretching( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( generalStretchedGrid( (*grib) ) ) {
+      value = g2_latSouthPole( (*grib) );
+      if( value & 0x800000 ) value = - (value & 0x7fffff);;
+      return ((fortdouble) value)/1000.0;
+    }
+    else {
+      if( DEBUG1 ) printf("RGLATSP: not a stretched/rotated grid\n");
+      return (fortint) -999999;
+    }
+  }
+}
+
+fortdouble RGLONSP(gribProduct ** grib) {
+fortint value;
+  if( generalStretchedAndRotatedGrid( (*grib) ) ) {
+    value = g2_lonStretching( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);;
+    return ((fortdouble) value)/1000.0;
+  }
+  else {
+    if( generalStretchedGrid( (*grib) ) ) {
+      value = g2_lonSouthPole( (*grib) );
+      if( value & 0x800000 ) value = - (value & 0x7fffff);;
+      return ((fortdouble) value)/1000.0;
+    }
+    else {
+      if( DEBUG1 ) printf("RGLONSP: not a stretched/rotated grid\n");
+      return (fortint) -999999;
+    }
+  }
+}
+
+fortdouble RGSFACT(gribProduct ** grib) {
+unsigned char * factor;
+  if( generalStretchedAndRotatedGrid( (*grib) ) ) {
+    factor = ((*grib)->g2)->grid.latlon.stretchingFactor;
+    return realValue(factor);
+  }
+  else
+    if( generalStretchedGrid( (*grib) ) ) {
+      factor = ((*grib)->g2)->grid.latlon.angleOfRotationOrStretchingFactor;
+      return realValue(factor);
+    }
+    else {
+      if( DEBUG1 ) printf("RGSFACT: not a stretched/rotated grid\n");
+      return (fortint) -999999;
+    }
+}
+
+fortint IGLEVTY(gribProduct ** grib) {
+  if( DEBUG2) printf("IGLEVTY\n");
+  return (fortint) g1_typeOfLevel((*grib));
+}
+
+fortdouble RGLEVTY(gribProduct ** grib) {
+  if( DEBUG2) printf("RGLEVTY\n");
+  return (fortdouble) IGLEVTY(grib);
+}
+
+fortint IGTUNIT(gribProduct ** grib) {
+  if( DEBUG2) printf("IGTUNIT\n");
+  return (fortint) g1_timeunit((*grib));
+}
+
+fortdouble RGTUNIT(gribProduct ** grib) {
+  if( DEBUG2) printf("RGTUNIT\n");
+  return (fortdouble) IGTUNIT(grib);
+}
+
+fortint IGTRIND(gribProduct ** grib) {
+  if( DEBUG2) printf("IGTRIND\n");
+  return (fortint) g1_timerange((*grib));
+}
+
+fortdouble RGTRIND(gribProduct ** grib) {
+  if( DEBUG2) printf("RGTRIND\n");
+  return (fortdouble) IGTRIND(grib);
+}
+
+fortint IGNUMAV(gribProduct ** grib) {
+  if( DEBUG2) printf("IGNUMAV\n");
+  return (fortint) g1_number((*grib));
+}
+
+fortdouble RGNUMAV(gribProduct ** grib) {
+  if( DEBUG2) printf("RGNUMAV\n");
+  return (fortdouble) IGNUMAV(grib);
+}
+
+fortint IGNUMMS(gribProduct ** grib) {
+  if( DEBUG2) printf("IGNUMMS\n");
+  return (fortint) g1_missing((*grib));
+}
+
+fortdouble RGNUMMS(gribProduct ** grib) {
+  if( DEBUG2) printf("RGNUMMS\n");
+  return (fortdouble) IGNUMMS(grib);
+}
+
+fortint IGSUBID(gribProduct ** grib) {
+  if( DEBUG2) printf("IGSUBID\n");
+  return (fortint) g1_subcentre((*grib));
+}
+
+fortdouble RGSUBID(gribProduct ** grib) {
+  if( DEBUG2) printf("RGSUBID\n");
+  return (fortdouble) IGSUBID(grib);
+}
+
+fortint IGUDECF(gribProduct ** grib) {
+fortint scale;
+
+  if( DEBUG2) printf("IGUDECF\n");
+
+  scale = g1_scale((*grib));
+  if( scale & 0x8000 ) scale = - (scale & 0x7fff);
+  return scale;
+}
+
+fortdouble RGUDECF(gribProduct ** grib) {
+  if( DEBUG2) printf("RGUDECF\n");
+  return (fortdouble) IGUDECF(grib);
+}
+
+fortint IGDUMMY(gribProduct ** grib) {
+  if( DEBUG2) printf("IGDUMMY\n");
+  return 0;
+}
+
+fortdouble RGDUMMY(gribProduct ** grib) {
+  if( DEBUG2) printf("RGDUMMY\n");
+  return 0;
+}
+
+fortint numberOfValuesInSection4(gribProduct * grib) {
+fortint loop, total = 0, count = 0;
+unsigned char * value;
+
+  if( generalLatLonGrid(grib) )
+    if( directionIncrementsGiven(grib) )
+      return g2_ni(grib)*g2_nj(grib);
+    else {
+      value = (unsigned char *) (grib->g2) + 4*g2_NV(grib) + g2_PV_PL(grib) - 1;
+      for( loop = 0; loop < g2_nj(grib); loop++ ) {
+        total += TWOBYTEINT(value);
+        value += 2;
+      }
+      return total;
+    }
+  else if( anySpectralField(grib) )
+    return (g2_J(grib)+1)*(g2_J(grib)+2);
+
+  return 0;
+}
+
+fortint g4_offset(gribProduct * grib) {
+int flag = g4_flag(grib);
+
+  if(gridPoint(grib) &&
+     simplePacking(grib) &&
+     floatingPoint(grib) &&
+     noAdditionalFlags(grib)) return 12;
+
+  if((!gridPoint(grib)))
+    if(simplePacking(grib)) return 12;
+  else
+    return 19;
+
+  return 12;
+}
+
+fortint IGNVALU(gribProduct ** grib) {
+  return numberOfValuesInSection4( (*grib) );
+}
+
+fortint GVALUES(
+  gribProduct ** grib,
+  fortdouble * array,
+  fortint * arraySize,
+  fortint * notMissing,
+  fortdouble * userSuppliedMissingValue ) {
+gribProduct * g = *grib;
+fortdouble * arr = array;
+fortint outerLoop, innerLoop, loop, numberOfValues, numberNotMissing;
+unsigned char * value, * bitStart;
+fortdouble IP;
+double * powerFactor;
+fortdouble scale, minimum, missingValue;
+fortint packedBits,nextValueFirstBit,bitsPerValue;
+fortint subsetTruncation, fieldTruncation;
+unsigned char * nextUnpacked, * nextPacked;
+unsigned char * primaryBitmap;
+unsigned char * secondaryBitmap;
+unsigned char * listOfWidths;
+unsigned char * firstOrderPackedValues;
+unsigned char * secondOrderPackedValues;
+fortint primaryBit, secondaryBit;
+fortint firstOrderValue, secondOrderValue, width;
+fortint nextFirstOrderValue = 0;
+fortint nextSecondOrderValue = 0;
+fortint nextWidth = 0;
+fortint nextPrimaryBit = 0;
+fortint nextSecondaryBit = 0;
+fortint firstOrderPackedValueSize = g4_bits(g);
+fortint one = 1, eight = 8;
+fortint primaryBitmapped = primaryBitmapPresent(g);
+
+  if( !(numberOfValues = numberOfValuesInSection4(g)) ) {
+    if( DEBUG1 ) printf("GVALUES: no values found in GRIB.\n");
+    return (fortint) 0;
+  }
+
+  if( numberOfValues > *arraySize ) {
+    if( DEBUG1 ) printf("GVALUES: user array too small for field values.\n");
+    return (fortint) -1;
+  }
+
+  minimum = referenceValue(g),
+  missingValue = *userSuppliedMissingValue;
+
+  scale = (fortdouble) RGDSCAL(grib);
+  value = (unsigned char *)(g->g4) + g4_offset(g) - 1;
+  bitsPerValue = g4_bits(g);
+  nextValueFirstBit = 0;
+
+  if( anySpectralField(g) ) {
+    numberNotMissing = numberOfValues;
+/*
+// Spectral simple packing
+*/
+    if( simplePacking(g) ) {
+      GBYTE(value,&packedBits,&nextValueFirstBit,&bitsPerValue);
+      *arr = realValue(value);
+      value += 4;
+      for( loop = 1; loop < numberOfValues; loop++ ) {
+        GBYTE(value,&packedBits,&nextValueFirstBit,&bitsPerValue);
+        nextValueFirstBit += bitsPerValue;
+        *(arr+loop) = minimum + ((fortdouble) packedBits) * scale;
+      }
+    }
+/*
+// Spectral complex packing
+*/
+    else {
+      fieldTruncation  = g2_J(g)+1;
+      subsetTruncation = g4_j(g)+1;
+      nextUnpacked = value;
+      nextPacked = value + (subsetTruncation*(subsetTruncation+1))*4;
+      loop = 0;
+      for( outerLoop = 0; outerLoop < fieldTruncation; outerLoop++ ) {
+        if(outerLoop < subsetTruncation) {
+          for(innerLoop=outerLoop;innerLoop<fieldTruncation;innerLoop++) {
+            if(innerLoop < subsetTruncation) {
+              *(arr+loop) = realValue(nextUnpacked);
+              loop++;
+              nextUnpacked += 4;
+              *(arr+loop) = realValue(nextUnpacked);
+              loop++;
+              nextUnpacked += 4;
+            }
+            else {
+              GBYTE(nextPacked,&packedBits,&nextValueFirstBit,&bitsPerValue);
+              nextValueFirstBit += bitsPerValue;
+              *(arr+loop) = minimum + ((fortdouble) packedBits) * scale;
+              loop++;
+              GBYTE(nextPacked,&packedBits,&nextValueFirstBit,&bitsPerValue);
+              nextValueFirstBit += bitsPerValue;
+              *(arr+loop) = minimum + ((fortdouble) packedBits) * scale;
+              loop++;
+            }
+          }
+        }
+        else {
+          for(innerLoop=outerLoop;innerLoop<fieldTruncation;innerLoop++){
+            GBYTE(nextPacked,&packedBits,&nextValueFirstBit,&bitsPerValue);
+            nextValueFirstBit += bitsPerValue;
+            *(arr+loop) = minimum + ((fortdouble) packedBits) * scale;
+            loop++;
+            GBYTE(nextPacked,&packedBits,&nextValueFirstBit,&bitsPerValue);
+            nextValueFirstBit += bitsPerValue;
+            *(arr+loop) = minimum + ((fortdouble) packedBits) * scale;
+            loop++;
+          }
+        }
+      }
+/*
+// NB. ECMWF bug misses storing unpacked one value in each line of subset
+*/
+      IP = RGIP(grib);
+      powerFactor = (double *) allocateMemory(fieldTruncation*sizeof(double));
+      powerFactor[0] = 1.0;
+      for( loop = 1; loop < fieldTruncation; loop++ ) {
+        *(powerFactor+loop) =
+          (double) 1.0/pow((double)((loop+1)*(loop+2)),(double)IP);
+      }
+
+      loop = 0;
+      for( outerLoop = 0; outerLoop < (subsetTruncation-1); outerLoop++ ) {
+        for( innerLoop = outerLoop; innerLoop < fieldTruncation; innerLoop++ ) {
+          if( innerLoop >= (subsetTruncation-1) ) {
+            *(arr+loop)   *= powerFactor[innerLoop-1];
+            *(arr+loop+1) *= powerFactor[innerLoop-1];
+          }
+          loop += 2;
+        }
+      }
+      for(outerLoop=(subsetTruncation-1);outerLoop<fieldTruncation;outerLoop++){
+        for( innerLoop = outerLoop; innerLoop < fieldTruncation; innerLoop++ ) {
+          *(arr+loop)   *= powerFactor[innerLoop-1];
+          *(arr+loop+1) *= powerFactor[innerLoop-1];
+          loop += 2;
+        }
+      }
+      freeMemory(powerFactor);
+    }
+  }
+/*
+// Grid-point simple packing
+*/
+  else {
+    if( simplePacking(g) ) {
+      primaryBit = 1;
+      numberNotMissing = 0;
+
+      if( primaryBitmapped ) primaryBitmap = (unsigned char*)(g->g3) + 6;
+
+      for( loop = 0; loop < numberOfValues; loop++ ) {
+
+        if( primaryBitmapped ) {
+          primaryBit = getSingleMapBit(primaryBitmap,nextPrimaryBit);
+          nextPrimaryBit++;
+        }
+
+        if( primaryBit ) {
+          GBYTE(value,&packedBits,&nextValueFirstBit,&bitsPerValue);
+          *(arr+loop) = minimum + ((fortdouble) packedBits) * scale;
+          nextValueFirstBit += bitsPerValue;
+          numberNotMissing++;
+        }
+        else
+          *(arr+loop) = missingValue;
+      }
+    }
+/*
+// Grid-point second-order packing
+*/
+    else {
+      listOfWidths = (unsigned char *)(g->g4) + g4_offset(g) + 10 - 1;
+      GBYTE(listOfWidths,&width,&nextWidth,&eight);
+
+      firstOrderPackedValues  = (unsigned char *)(g->g4) + g4_n1(g) - 1;
+      secondOrderPackedValues = (unsigned char *)(g->g4) + g4_n2(g) - 1;
+
+      numberNotMissing = 0;
+
+      if( primaryBitmapped ) primaryBitmap = (unsigned char*)(g->g3) + 6;
+
+      if( secondaryBitmapPresent(g) ) {
+        if( differentWidths(g) ) 
+          secondaryBitmap = (unsigned char *) listOfWidths + g4_p1(g);
+        else
+          secondaryBitmap = (unsigned char *) listOfWidths + 1;
+      }
+
+      for( loop = 0; loop < numberOfValues; loop++ ) {
+
+        if( primaryBitmapped ) {
+          primaryBit = getSingleMapBit(primaryBitmap,nextPrimaryBit);
+          nextPrimaryBit++;
+        }
+        else
+          primaryBit = 1;
+
+        if( primaryBit ) {
+          if( secondaryBitmapPresent(g) ) {
+            secondaryBit = getSingleMapBit(secondaryBitmap,nextSecondaryBit);
+            nextSecondaryBit++;
+          }
+          else
+            secondaryBit = MULTIPLE(loop,g2_ni(g)) ;
+
+          if( secondaryBit ) {
+            GBYTE(firstOrderPackedValues,&firstOrderValue,
+                  &nextFirstOrderValue,&firstOrderPackedValueSize);
+            nextFirstOrderValue += firstOrderPackedValueSize;
+
+            if( differentWidths(g) ) {
+              GBYTE(listOfWidths,&width,&nextWidth,&eight);
+              nextWidth += 8;
+            }
+          }
+
+          if( width ) {
+            GBYTE(secondOrderPackedValues,&secondOrderValue,
+                  &nextSecondOrderValue,&width);
+            nextSecondOrderValue += width;
+          }
+          else
+            secondOrderValue = 0;
+
+          *(arr+loop) = minimum +
+            ((fortdouble)(firstOrderValue+secondOrderValue))*scale;
+          numberNotMissing++; 
+        }
+        else
+          *(arr+loop) = missingValue;
+      }
+    }
+  }
+
+  *notMissing = numberNotMissing;
+  if( DEBUG1 ) printf("GVALUES: number of field values = %d\n",numberOfValues);
+  return (fortint) numberOfValues;
+}
+
+void GVEND(gribProduct ** grib) {
+gribProduct * g;
+
+  g = *grib;
+
+  if( g->currentPoint.latitude != NULL ) {
+    freeMemory(g->currentPoint.latitude);
+    g->currentPoint.latitude = NULL;
+  }
+
+  if( g->currentPoint.longitudeIncrement != NULL ) {
+    freeMemory(g->currentPoint.longitudeIncrement);
+    g->currentPoint.longitudeIncrement = NULL;
+  }
+
+  if( g->expandedValues != NULL ) {
+    freeMemory(g->expandedValues);
+    g->expandedValues = NULL;
+  }
+
+  if( g->latitudeOffsets != NULL ) {
+    freeMemory(g->latitudeOffsets);
+    g->latitudeOffsets = NULL;
+  }
+
+  return;
+}
+
+fortint setupIrregularLongitudeIncrements(gribProduct ** grib, fortint nj) {
+gribProduct * g = *grib;
+fortint * numberOfPointsPerLatitude;
+fortint nrows, loop, count;
+
+  g->latitudeOffsets = (fortint *) allocateMemory((nj+1)*sizeof(fortint));
+  numberOfPointsPerLatitude = (fortint *) allocateMemory(nj*sizeof(fortint));
+  nrows = GPL(grib,numberOfPointsPerLatitude,&nj);
+  if( nrows != nj ) return (fortint) -4;
+
+  g->latitudeOffsets[0] = 0;
+  for( loop = 0; loop < nj; loop++ ) {
+    count = numberOfPointsPerLatitude[loop];
+    g->latitudeOffsets[loop+1] = g->latitudeOffsets[loop] + count;
+    if( count != 0 )
+      g->currentPoint.longitudeIncrement[loop] =
+        360.0 / (fortdouble) numberOfPointsPerLatitude[loop];
+    else
+      g->currentPoint.longitudeIncrement[loop] = 0.0;
+  }
+  freeMemory(numberOfPointsPerLatitude);
+
+  return (fortint) 0;
+}
+
+fortint GVINIT(gribProduct ** grib, fortdouble * missingValue) {
+gribProduct * g;
+fortint regular, ni, nj, loop, status;
+fortdouble latitudeStep, longitudeStep, north;
+
+  if( grib == NULL) {
+    if( DEBUG1 ) printf("GVINIT: grib empty. Was GDECODE called?\n");
+    return (fortint) -1;
+  }
+  g = *grib;
+/*
+// Only gaussian or lat/lon grid point fields can be handled
+*/
+  if( !generalLatLonGrid(g) ) {
+    if( DEBUG1 )
+      printf("GVINIT: only gaussian or lat/lon grid point fields handled\n");
+    return (fortint) -2;
+  }
+
+  g->numberOfValues    = numberOfValuesInSection4(g);
+  g->value             = (unsigned char *)(g->g4) + g4_offset(g) - 1;
+  g->bitStart          = (unsigned char *)(g->g3) + 6;
+  g->bitsPerValue      = g4_bits(g);
+  g->bitmapped         = primaryBitmapPresent(g);
+  g->nextValueFirstBit = 0;
+  g->nextBit           = 0;
+  g->scale             = (fortdouble) RGDSCAL(grib);
+  g->minimum           = referenceValue(g);
+  g->missingValue      = *missingValue;
+
+  ni = g2_ni(g);
+  nj = g2_nj(g);
+  g->currentPoint.latitude = (fortdouble *) allocateMemory(nj*sizeof(fortdouble));
+
+  g->currentPoint.longitudeIncrement = (fortdouble *) allocateMemory(nj*sizeof(fortdouble));
+
+  regular = directionIncrementsGiven(g);
+
+  if( anyLatLonGrid(g) ) {
+    north = RGNWLAT(grib);
+    latitudeStep  = RGDJ(grib);
+    longitudeStep = RGDI(grib);
+    for( loop = 0; loop < nj; loop++ )
+      g->currentPoint.latitude[loop] = north - (latitudeStep * (fortdouble) loop);
+  }
+  else {
+    fortint zero = 0, minusOne = -1;
+    status = IGGLAT(&nj,g->currentPoint.latitude,&zero,&minusOne);
+    if( status != 0 ) return (fortint) -5;
+    longitudeStep = 360.0 / (fortdouble) (2*nj);
+  }
+
+  if( regular )
+    for( loop = 0; loop < nj; loop++ )
+      g->currentPoint.longitudeIncrement[loop] = longitudeStep;
+  else
+    setupIrregularLongitudeIncrements(grib, nj);
+
+  if( ! simplePacking(g) ) {
+    fortint notMissing;
+    fortint numberOfValues = g->numberOfValues;
+
+    g->expandedValues = (fortdouble *) allocateMemory(numberOfValues*sizeof(fortdouble));
+
+    status =
+      GVALUES(grib,g->expandedValues,&numberOfValues,&notMissing,missingValue);
+    if( status != numberOfValues ) return (fortint) -6;
+  }
+ 
+  return (fortint) (g->currentPointIndex = 1);
+}
+
+fortint GVECTOR(
+  gribProduct ** grib,
+  fortdouble * latitude,
+  fortdouble * longitude,
+  fortdouble * pointValue) {
+gribProduct * g;
+fortint loop, bit, packedBits, current, ni, nj, one = 1;
+fortint regular, latitudeIndex, longitudeIndex, currentLatitude;
+
+  if( grib == NULL) {
+    if( DEBUG1 ) printf("GVECTOR: grib empty. Was GDECODE called?\n");
+    return (fortint) -1;
+  }
+
+  g = *grib;
+  current = ((g->currentPointIndex)++ - 1);
+  if( current >= g->numberOfValues ) {
+    if( DEBUG1 ) printf("GVECTOR: all field values already supplied\n");
+    return (fortint) -2;
+  }
+
+  regular = directionIncrementsGiven(g);
+
+  if( regular) {
+    ni = g2_ni(g);
+    nj = g2_nj(g);
+
+    latitudeIndex = current/ni;
+    longitudeIndex = current - ((current/ni)*ni);
+    *latitude  = g->currentPoint.latitude[latitudeIndex];
+    *longitude = g->currentPoint.longitudeIncrement[latitudeIndex]*longitudeIndex;
+  }
+  else {
+    currentLatitude = -1;
+    while( current >= g->latitudeOffsets[++currentLatitude]);
+    latitudeIndex = currentLatitude - 1;
+    longitudeIndex = current - g->latitudeOffsets[latitudeIndex];
+    *latitude  = g->currentPoint.latitude[latitudeIndex];
+    *longitude = g->currentPoint.longitudeIncrement[latitudeIndex]*longitudeIndex;
+  }
+
+  if( ! simplePacking(g) ) {
+    *pointValue = *(g->expandedValues + current);
+  }
+  else {
+    bit = 1;
+    if( g->bitmapped ) {
+      bit = getSingleMapBit(g->bitStart,g->nextBit);
+      g->nextBit++;
+    }
+
+    if( bit ) {
+      GBYTE(g->value,&packedBits,&(g->nextValueFirstBit),&(g->bitsPerValue));
+      g->nextValueFirstBit += g->bitsPerValue;
+      *pointValue = g->minimum + ((fortdouble) packedBits) * g->scale;
+    }
+    else
+      *pointValue = g->missingValue;
+  }
+
+  return (current+1);
+}
+
+fortint getSingleMapBit(unsigned char * map, fortint bitNumber) {
+fortint byteOffset = (bitNumber>>3);
+fortint bitOffset = bitNumber - (byteOffset<<3);
+
+  return (fortint) ((map[byteOffset]>>(7-bitOffset))&0x1);
+}
+
+void * allocateMemory(size_t size) {
+void * memoryPointer = (void *) malloc(size);
+
+  if( DEBUG2 ) printf("allocateMemory: allocated %d memory bytes\n",size);
+  if( memoryPointer == NULL ) {
+    printf("allocateMemory: requested number of bytes = %d\n", size);
+    perror("allocateMemory: memory allocation failed");
+    exit(1);
+  }
+  if( DEBUG2 )
+    printf("allocateMemory: allocated memory pointer = %0x\n", memoryPointer);
+  return memoryPointer;
+}
+
+void freeMemory(void * memoryPointer) {
+  if( DEBUG2 )
+    printf("freeMemory: freeing memory pointer = %0x\n", memoryPointer);
+  if( memoryPointer != NULL ) free(memoryPointer);
+  return;
+}
diff --git a/gribex/gdecode.h b/gribex/gdecode.h
new file mode 100755
index 0000000..82ff296
--- /dev/null
+++ b/gribex/gdecode.h
@@ -0,0 +1,424 @@
+#ifndef GDECODE_H
+#define GDECODE_H
+#include <stdio.h>
+#include <stdlib.h>
+#include "fortint.h"
+#include <string.h>
+#include <ctype.h>
+
+#include "gdecodeStruct.h"
+
+#include "sencode1.h"
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define IGGLAT  igglat
+#define GBYTE   gbyte
+#define GDECODE gdecode
+#define IGLNGTH iglngth
+#define IGTABLE igtable
+#define IGCENTR igcentr
+#define IGPARAM igparam
+#define IGLEVEL iglevel
+#define IGLEVL1 iglevl1
+#define IGLEVL2 iglevl2
+#define IGDATE  igdate
+#define IGTIME  igtime
+#define IGSTEP  igstep
+#define IGSTEP1 igstep1
+#define IGSTEP2 igstep2
+#define IGDEFIN igdefin
+#define IGCLASS igclass
+#define IGTYPE  igtype
+#define IGSTREM igstrem
+#define IGEXPVR igexpvr
+#define IGNUMPV ignumpv
+#define GPV     gpv
+#define GPL     gpl
+#define IGREPRS igreprs
+#define IGNI    igni
+#define IGNJ    ignj
+#define RGNWLAT rgnwlat
+#define RGNWLON rgnwlon
+#define IGRESCO igresco
+#define RGSELAT rgselat
+#define RGSELON rgselon
+#define RGDI    rgdi
+#define RGDJ    rgdj
+#define IGGAUSS iggauss
+#define IGSCANM igscanm
+#define IGJ     igj
+#define IGK     igk
+#define IGM     igm
+#define IGREPMO igrepmo
+#define RGIP    rgip
+#define IGTJ    igtj
+#define IGTK    igtk
+#define IGTM    igtm
+#define RGLATRP rglatrp
+#define RGLONRP rglonrp
+#define RGROTAT rgrotat
+#define RGLATSP rglatsp
+#define RGLONSP rglonsp
+#define RGSFACT rgsfact
+#define RGREFVL rgrefvl
+#define IGBTSPV igbtspv
+#define RGDSCAL rgdscal
+#define IGUNUSD igunusd
+#define IGNVALU ignvalu
+#define GVALUES gvalues
+#define GVINIT  gvinit
+#define GVECTOR gvector
+#define GVEND   gvend
+#define IGLEVTY iglevty
+#define RGLEVTY rglevty
+#define IGNUMAV ignumav
+#define RGNUMAV rgnumav
+#define IGNUMMS ignumms
+#define RGNUMMS rgnumms
+#define IGSUBID igsubid
+#define RGSUBID rgsubid
+#else
+#define IGGLAT  igglat_
+#define GBYTE   gbyte_
+#define GDECODE gdecode_
+#define IGLNGTH iglngth_
+#define IGTABLE igtable_
+#define IGCENTR igcentr_
+#define IGPARAM igparam_
+#define IGLEVEL iglevel
+#define IGLEVL1 iglevl1
+#define IGLEVL2 iglevl2
+#define IGDATE  igdate_
+#define IGTIME  igtime_
+#define IGSTEP  igstep_
+#define IGSTEP1 igstep1_
+#define IGSTEP2 igstep2_
+#define IGDEFIN igdefin_
+#define IGCLASS igclass_
+#define IGTYPE  igtype_
+#define IGSTREM igstrem_
+#define IGEXPVR igexpvr_
+#define IGNUMPV ignumpv_
+#define GPV     gpv_
+#define GPL     gpl_
+#define IGREPRS igreprs_
+#define IGNI    igni_
+#define IGNJ    ignj_
+#define RGNWLAT rgnwlat_
+#define RGNWLON rgnwlon_
+#define IGRESCO igresco_
+#define RGSELAT rgselat_
+#define RGSELON rgselon_
+#define RGDI    rgdi_
+#define RGDJ    rgdj_
+#define IGGAUSS iggauss_
+#define IGSCANM igscanm_
+#define IGJ     igj_
+#define IGK     igk_
+#define IGM     igm_
+#define IGREPMO igrepmo_
+#define RGIP    rgip_
+#define IGTJ    igtj_
+#define IGTK    igtk_
+#define IGTM    igtm_
+#define RGLATRP rglatrp_
+#define RGLONRP rglonrp_
+#define RGROTAT rgrotat_
+#define RGLATSP rglatsp_
+#define RGLONSP rglonsp_
+#define RGSFACT rgsfact_
+#define RGREFVL rgrefvl_
+#define IGBTSPV igbtspv_
+#define RGDSCAL rgdscal_
+#define IGUNUSD igunusd_
+#define IGNVALU ignvalu_
+#define GVALUES gvalues_
+#define GVINIT  gvinit_
+#define GVECTOR gvector_
+#define GVEND   gvend_
+#define IGLEVTY iglevty_
+#define RGLEVTY rglevty_
+#define IGNUMAV ignumav_
+#define RGNUMAV rgnumav_
+#define IGNUMMS ignumms_
+#define RGNUMMS rgnumms_
+#define IGSUBID igsubid_
+#define RGSUBID rgsubid_
+#endif
+
+#define MOVE1BYTE(p,n)  ( *(p)     = ((*(n)>> 0) & 0xFF) ) 
+#define MOVE2BYTES(p,n) ( *(p)     = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>> 0) & 0xFF) )
+#define MOVE3BYTES(p,n) ( *(p)     = ((*(n)>>16) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+2) = ((*(n)>> 0) & 0xFF) )
+#define MOVE4BYTES(p,n) ( *(p)     = ((*(n)>>24) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>>16) & 0xFF) ) , \
+                        ( *((p)+2) = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+3) = ((*(n)>> 0) & 0xFF) )
+
+#define MOD(a,b) ((a) - ((a)/(b))*(b))
+#define MULTIPLE(a,b) ( MOD(a,b) == 0 )
+
+#define ONEBYTEINT(a)   (fortint) ( *(a) )
+#define TWOBYTEINT(a)   (fortint) ( (*(a))<<8 | (*((a)+1))<<0 )
+#define THREEBYTEINT(a) (fortint) (TWOBYTEINT((a))<<8 | (*((a)+2))<<0 )
+#define FOURBYTEINT(a)  (fortint) (THREEBYTEINT((a))<<8 | (*((a)+3))<<0 )
+/*
+// Section 0
+*/
+#define g0_length(a)  THREEBYTEINT((a->g0)->totalGRIBlength)
+#define g0_edition(a) ONEBYTEINT((a->g0)->editionNumber)
+/*
+// Section 1
+*/
+#define g1_length(a)      THREEBYTEINT((a->g1)->sectionLength)
+#define g1_table(a)       ONEBYTEINT((a->g1)->tableVersionNumber)
+#define g1_centre(a)      ONEBYTEINT((a->g1)->originatingCentre)
+#define g1_process(a)     ONEBYTEINT((a->g1)->generatingProcessId)
+#define g1_grid(a)        ONEBYTEINT((a->g1)->gridDefinition)
+#define g1_flag(a)        ONEBYTEINT((a->g1)->section2and3PresentFlag)
+#define g1_parameter(a)   ONEBYTEINT((a->g1)->parameter)
+#define g1_typeOfLevel(a) ONEBYTEINT((a->g1)->typeOfLevel)
+#define g1_level1(a)      ONEBYTEINT((a->g1)->level1)
+#define g1_level2(a)      ONEBYTEINT((a->g1)->level2)
+#define g1_year(a)        ONEBYTEINT((a->g1)->year)
+#define g1_month(a)       ONEBYTEINT((a->g1)->month)
+#define g1_day(a)         ONEBYTEINT((a->g1)->day)
+#define g1_hour(a)        ONEBYTEINT((a->g1)->hour)
+#define g1_minute(a)      ONEBYTEINT((a->g1)->minute)
+#define g1_timeunit(a)    ONEBYTEINT((a->g1)->unitOfTimeRange)
+#define g1_P1(a)          ONEBYTEINT((a->g1)->P1)
+#define g1_P2(a)          ONEBYTEINT((a->g1)->P2)
+#define g1_timerange(a)   ONEBYTEINT((a->g1)->timeRangeIndicator)
+#define g1_number(a)      TWOBYTEINT((a->g1)->numberInAverage)
+#define g1_missing(a)     ONEBYTEINT((a->g1)->numberMissing)
+#define g1_century(a)     ONEBYTEINT((a->g1)->century)
+#define g1_subcentre(a)   ONEBYTEINT((a->g1)->subCentreId)
+#define g1_scale(a)       TWOBYTEINT((a->g1)->unitsDecimalScaleFactor)
+#define g1_definition(a)  ONEBYTEINT((a->g1)->local.mars.definition)
+#define g1_class(a)       ONEBYTEINT((a->g1)->local.mars.ecmwfClass)
+#define g1_type(a)        ONEBYTEINT((a->g1)->local.mars.type)
+#define g1_stream(a)      TWOBYTEINT((a->g1)->local.mars.stream)
+#define g1_expver(a)      FOURBYTEINT((a->g1)->local.mars.experimentVersionNumber)
+
+#define centreUsingECMWFLocalDefinition(a) \
+            ((g1_subcentre(a)==98)&&(g1_length(a)>=40))
+
+#define ecmwfLocalDefinitionPresent(a) ((g1_centre(a)==98)&&(g1_length(a)>=40))
+
+#define ecmwfLocalDefinition1Present(a) \
+                    ( ecmwfLocalDefinitionPresent(a) && (g1_definition(a)==1) )
+#define ecmwfLocalDefinition2Present(a) \
+                    ( ecmwfLocalDefinitionPresent(a) && (g1_definition(a)==2) )
+
+#define g1_1_number(a) ONEBYTEINT((a->g1)->local.contents.def1.number)
+#define g1_1_total(a)  ONEBYTEINT((a->g1)->local.contents.def1.total)
+
+#define g1_2_number(a)  ONEBYTEINT((a->g1)->local.contents.def2.number)
+#define g1_2_total(a)   ONEBYTEINT((a->g1)->local.contents.def2.total)
+#define g1_2_method(a)  ONEBYTEINT((a->g1)->local.contents.def2.method)
+#define g1_2_start(a)   TWOBYTEINT((a->g1)->local.contents.def2.startTimestep)
+#define g1_2_end(a)     TWOBYTEINT((a->g1)->local.contents.def2.endTimestep)
+#define g1_2_control(a) ONEBYTEINT((a->g1)->local.contents.def2.controlForecastCluster)
+#define g1_2_operational(a)   ONEBYTEINT((a->g1)->local.contents.def2.operationalForecastCluster)
+#define g1_2_count(a)   ONEBYTEINT((a->g1)->local.contents.def2.numberInCluster)
+#define g1_2_domainN(a) THREEBYTEINT((a->g1)->local.contents.def2.domainNorthLatitude)
+#define g1_2_domainW(a) THREEBYTEINT((a->g1)->local.contents.def2.domainWestLongitude)
+#define g1_2_domainS(a) THREEBYTEINT((a->g1)->local.contents.def2.domainSouthLatitude)
+#define g1_2_domainE(a) THREEBYTEINT((a->g1)->local.contents.def2.domainEastLongitude)
+/*
+// Section 2
+*/
+#define g2_length(a)           THREEBYTEINT((a->g2)->sectionLength)
+#define g2_NV(a)               ONEBYTEINT((a->g2)->NV)
+#define g2_PV_PL(a)            ONEBYTEINT((a->g2)->PV_PL)
+#define g2_datatype(a)         ONEBYTEINT((a->g2)->dataRepresentationType)
+#define g2_ni(a)               TWOBYTEINT((a->g2)->grid.latlon.numberOfPointsAlongParallel)
+#define g2_nj(a)               TWOBYTEINT((a->g2)->grid.latlon.numberOfPointsAlongMeridian)
+#define g2_firstLat(a)         THREEBYTEINT((a->g2)->grid.latlon.latitudeOfFirstPoint)
+#define g2_firstLon(a)         THREEBYTEINT((a->g2)->grid.latlon.longitudeOfFirstPoint)
+#define g2_lastLat(a)          THREEBYTEINT((a->g2)->grid.latlon.latitudeOfLastPoint)
+#define g2_lastLon(a)          THREEBYTEINT((a->g2)->grid.latlon.longitudeOfLastPoint)
+#define g2_resAndComp(a)       ONEBYTEINT((a->g2)->grid.latlon.resolutionAndComponentsFlag)
+#define g2_scan(a)             ONEBYTEINT((a->g2)->grid.latlon.scanningMode)
+#define g2_di(a)               TWOBYTEINT((a->g2)->grid.latlon.iDirectionIncrement)
+#define g2_dj(a)               TWOBYTEINT((a->g2)->grid.latlon.jDirectionIncrement)
+#define g2_gaussNumber(a)      TWOBYTEINT((a->g2)->grid.gaussian.numberOfParallelsBetweenPoleAndEquator)
+#define g2_latSouthPole(a)     THREEBYTEINT((a->g2)->grid.latlon.latitudeOfSouthPole)
+#define g2_lonSouthPole(a)     THREEBYTEINT((a->g2)->grid.latlon.longitudeOfSouthPole)
+#define g2_rotOrStretch(a)     FOURBYTEINT((a->g2)->grid.latlon.angleOfRotationOrStretchingFactor)
+#define g2_latStretching(a)    THREEBYTEINT((a->g2)->grid.latlon.latitudeOfPoleOfStretching)
+#define g2_lonStretching(a)    THREEBYTEINT((a->g2)->grid.latlon.longitudeOfPoleOfStretching)
+#define g2_stretchingFactor(a) FOURBYTEINT((a->g2)->grid.latlon.stretchingFactor)
+#define g2_J(a)                TWOBYTEINT((a->g2)->grid.spectral.J)
+#define g2_K(a)                TWOBYTEINT((a->g2)->grid.spectral.K)
+#define g2_M(a)                TWOBYTEINT((a->g2)->grid.spectral.M)
+#define g2_repmode(a)          ONEBYTEINT((a->g2)->grid.spectral.representationMode)
+
+#define basicSpectralField(a)               (g2_datatype(a)==50)
+#define rotatedSpectralField(a)             (g2_datatype(a)==60)
+#define stretchedSpectralField(a)           (g2_datatype(a)==70)
+#define rotatedAndStretchedSpectralField(a) (g2_datatype(a)==80)
+#define anySpectralField(a) (basicSpectralField(a)||\
+                             rotatedSpectralField(a)||\
+                             stretchedSpectralField(a)||\
+                             rotatedAndStretchedSpectralField(a))
+
+#define basicGaussianGrid(a)               (g2_datatype(a)== 4)
+#define rotatedGaussianGrid(a)             (g2_datatype(a)==14)
+#define stretchedGaussianGrid(a)           (g2_datatype(a)==24)
+#define rotatedAndStretchedGaussianGrid(a) (g2_datatype(a)==34)
+#define anyGaussianGrid(a) (basicGaussianGrid(a)||\
+                            rotatedGaussianGrid(a)||\
+                            stretchedGaussianGrid(a)||\
+                            rotatedAndStretchedGaussianGrid(a))
+
+#define basicLatLonGrid(a)               (g2_datatype(a)== 0)
+#define rotatedLatLonGrid(a)             (g2_datatype(a)==10)
+#define stretchedLatLonGrid(a)           (g2_datatype(a)==20)
+#define rotatedAndStretchedLatLonGrid(a) (g2_datatype(a)==30)
+#define anyLatLonGrid(a) (basicLatLonGrid(a)||\
+                          rotatedLatLonGrid(a)||\
+                          stretchedLatLonGrid(a)||\
+                          rotatedAndStretchedLatLonGrid(a))
+
+#define generalLatLonGrid(a) (anyGaussianGrid(a)||anyLatLonGrid(a))
+#define generalRotatedGrid(a) (rotatedLatLonGrid(a)||\
+                               rotatedAndStretchedLatLonGrid(a)||\
+                               rotatedGaussianGrid(a)||\
+                               rotatedAndStretchedGaussianGrid(a)||\
+                               rotatedSpectralField(a)||\
+                               rotatedAndStretchedSpectralField(a))
+#define generalStretchedGrid(a) (stretchedLatLonGrid(a)||\
+                                 rotatedAndStretchedLatLonGrid(a)||\
+                                 stretchedGaussianGrid(a)||\
+                                 rotatedAndStretchedSpectralField(a)||\
+                                 stretchedSpectralField(a)||\
+                                 rotatedAndStretchedGaussianGrid(a))
+#define generalStretchedAndRotatedGrid(a) (rotatedAndStretchedLatLonGrid(a)||\
+                                           rotatedAndStretchedGaussianGrid(a))
+#define directionIncrementsGiven(a) ((g2_resAndComp(a)&0x80)&&(g2_di(a)!=0xffff))
+/*
+// Section 3
+*/
+#define g3_length(a)             THREEBYTEINT((a->g3)->sectionLength)
+#define g3_table(a)              ONEEBYTEINT((a->g3)->tableReference)
+#define primaryBitmapPresent(a)  ( g1_flag(a) & 0x40 )
+/*
+// Section 4
+*/
+#define g4_length(a)        THREEBYTEINT((a->g4)->sectionLength)
+#define g4_flag(a)          ONEBYTEINT((a->g4)->flag)
+#define g4_scale(a)         TWOBYTEINT((a->g4)->scaleFactor)
+#define g4_reference(a)     FOURBYTEINT((a->g4)->referenceValue)
+#define g4_bits(a)          ONEBYTEINT((a->g4)->numberOfBitsPerValue)
+#define g4_n(a)             TWOBYTEINT((a->g4)->data.complexSpectral.N)
+#define g4_ip(a)            TWOBYTEINT((a->g4)->data.complexSpectral.IP)
+#define g4_j(a)             ONEBYTEINT((a->g4)->data.complexSpectral.J)
+#define g4_k(a)             ONEBYTEINT((a->g4)->data.complexSpectral.K)
+#define g4_m(a)             ONEBYTEINT((a->g4)->data.complexSpectral.M)
+#define g4_n1(a)            TWOBYTEINT((a->g4)->data.complexGrid.n1)
+#define g4_extendedFlags(a) ONEBYTEINT((a->g4)->data.complexGrid.extendedFlags)
+#define g4_n2(a)            TWOBYTEINT((a->g4)->data.complexGrid.n2)
+#define g4_p1(a)            TWOBYTEINT((a->g4)->data.complexGrid.p1)
+#define g4_p2(a)            TWOBYTEINT((a->g4)->data.complexGrid.p2)
+
+#define gridPoint(a)                      ( (g4_flag(a)&0x80) == 0 )
+#define simplePacking(a)                  ( (g4_flag(a)&0x40) == 0 )
+#define floatingPoint(a)                  ( (g4_flag(a)&0x20) == 0 )
+#define noAdditionalFlags(a)              ( (g4_flag(a)&0x10) == 0 )
+#define matrixAtGridPoint(a)              (g4_extendedFlags(a)&0x40)
+#define secondaryBitmapPresent(a)         (g4_extendedFlags(a)&0x20)
+#define differentWidths(a)                (g4_extendedFlags(a)&0x10)
+#define generalExtendedSecondOrder(a)     (g4_extendedFlags(a)&0x08)
+#define boustrophedonicOrdering(a)        (g4_extendedFlags(a)&0x04)
+#define firstOrderSpatialDifferencing(a)  ( (g4_extendedFlags(a)&0x03) == 1 )
+#define secondOrderSpatialDifferencing(a) ( (g4_extendedFlags(a)&0x03) == 2 )
+#define thirdOrderSpatialDifferencing(a)  ( (g4_extendedFlags(a)&0x03) == 3 )
+
+#define anyComplexPackedSpectralField(a) \
+                                      (anySpectralField(a) && !simplePacking(a))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+// Function prototypes
+*/
+void GBYTE(void*,void*,fortint*,fortint*);
+fortint IGGLAT(fortint*,fortdouble*,fortint*,fortint*);
+double pow(double,double);
+void *memcpy(void*,const void*,size_t);
+
+fortint findSectionOffsets(unsigned char*,fortint*,fortint*,fortint*,fortint*,fortint*,fortint*);
+fortint prepareGrib(gribProduct**,unsigned char*);
+fortint convertGRIBFloatToIEEE(unsigned char*);
+fortdouble realValue(unsigned char*);
+fortdouble referenceValue(gribProduct*);
+fortdouble RGREFVL(gribProduct**);
+fortint IGBTSPV(gribProduct**);
+fortdouble RGDSCAL(gribProduct**);
+fortint IGUNUSD(gribProduct**);
+fortint GDECODE(gribProduct**,unsigned char*);
+fortint IGLNGTH(gribProduct**);
+fortint IGDATE(gribProduct**);
+fortint IGTIME(gribProduct**);
+fortint GSTEP(gribProduct**);
+fortint IGTABLE(gribProduct**);
+fortint IGCENTR(gribProduct**);
+fortint IGPARAM(gribProduct**);
+fortint IGLEVEL(gribProduct**);
+fortint IGLEVL1(gribProduct**);
+fortint IGLEVL2(gribProduct**);
+fortint IGDEFIN(gribProduct**);
+fortint IGCLASS(gribProduct**);
+fortint IGTYPE(gribProduct**);
+fortint IGSTREM(gribProduct**);
+fortint IGEXPVR(gribProduct**);
+fortint IGREPRS(gribProduct**);
+fortint IGNUMPV(gribProduct**);
+fortint GPV(gribProduct**,fortdouble*,fortint*);
+fortint GPL(gribProduct**,fortint*,fortint*);
+fortint IGNI(gribProduct**);
+fortint IGNJ(gribProduct**);
+fortdouble RGNWLAT(gribProduct**);
+fortdouble RGNWLON(gribProduct**);
+fortdouble RGSELAT(gribProduct**);
+fortdouble RGSELON(gribProduct**);
+fortint IGRESCO(gribProduct**);
+fortdouble RGDI(gribProduct**);
+fortdouble RGDJ(gribProduct**);
+fortint IGGAUSS(gribProduct**);
+fortint IGSCANM(gribProduct**);
+fortint IGJ(gribProduct**);
+fortint IGK(gribProduct**);
+fortint IGM(gribProduct**);
+fortint IGREPMO(gribProduct**);
+fortdouble RGIP(gribProduct**);
+fortint IGTJ(gribProduct**);
+fortint IGTK(gribProduct**);
+fortint IGTM(gribProduct**);
+fortdouble RGLATRP(gribProduct**);
+fortdouble RGLONRP(gribProduct**);
+fortdouble RGROTAT(gribProduct**);
+fortdouble RGLATSP(gribProduct**);
+fortdouble RGLONSP(gribProduct**);
+fortdouble RGSFACT(gribProduct**);
+fortint numberOfValuesInSection4(gribProduct*);
+fortint g4_offset(gribProduct*);
+fortint IGNVALU(gribProduct**);
+fortint GVALUES( gribProduct**,fortdouble*,fortint*,fortint*,fortdouble*);
+void GVEND(gribProduct**);
+fortint setupIrregularLongitudeIncrements(gribProduct**,fortint);
+fortint GVINIT(gribProduct**,fortdouble*);
+fortint GVECTOR( gribProduct**,fortdouble*,fortdouble*,fortdouble*);
+fortint getSingleMapBit(unsigned char*,fortint);
+void * allocateMemory(size_t);
+void freeMemory(void*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* End of GDECODE_H */
diff --git a/gribex/gdecode1.c b/gribex/gdecode1.c
new file mode 100755
index 0000000..d4179d1
--- /dev/null
+++ b/gribex/gdecode1.c
@@ -0,0 +1,36 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "gdecode.h"
+#include "gdecode1.h"
+
+fortint IG1NUMB(gribProduct ** grib) {
+  if( ecmwfLocalDefinition1Present((*grib)) )
+    return g1_1_number( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG1NUMB(gribProduct ** grib) {
+  return (fortdouble) IG1NUMB(grib);
+}
+
+fortint IG1TOTL(gribProduct ** grib) {
+  if( ecmwfLocalDefinition1Present((*grib)) )
+    return g1_1_total( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG1TOTL(gribProduct ** grib) {
+  return (fortdouble) IG1TOTL(grib);
+}
+
diff --git a/gribex/gdecode1.h b/gribex/gdecode1.h
new file mode 100755
index 0000000..97ad156
--- /dev/null
+++ b/gribex/gdecode1.h
@@ -0,0 +1,31 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef GDECODE1_H
+#define GDECODE1_H
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define IG1NUMB ig1numb
+#define RG1NUMB rg1numb
+#define IG1TOTL ig1totl
+#define RG1TOTL rg1totl
+#else
+#define IG1NUMB ig1numb_
+#define RG1NUMB rg1numb_
+#define IG1TOTL ig1totl_
+#define RG1TOTL rg1totl_
+#endif
+
+fortint IG1NUMB(gribProduct **);
+fortdouble RG1NUMB(gribProduct **);
+fortint IG1TOTL(gribProduct **);
+fortdouble RG1TOTL(gribProduct **);
+
+#endif /* end of GDECODE1_H */
diff --git a/gribex/gdecode2.c b/gribex/gdecode2.c
new file mode 100755
index 0000000..4654f52
--- /dev/null
+++ b/gribex/gdecode2.c
@@ -0,0 +1,197 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "gdecode.h"
+#include "gdecode2.h"
+
+fortint IG2NUMB(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_number( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2NUMB(gribProduct ** grib) {
+  return (fortdouble) IG2NUMB(grib);
+}
+
+fortint IG2TOTL(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_total( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2TOTL(gribProduct ** grib) {
+  return (fortdouble) IG2TOTL(grib);
+}
+
+fortint IG2METH(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_method( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2METH(gribProduct ** grib) {
+  return (fortdouble) IG2METH(grib);
+}
+
+fortint IG2CFCL(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_control( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2CFCL(gribProduct ** grib) {
+  return (fortdouble) IG2CFCL(grib);
+}
+
+fortint IG2ELON(gribProduct ** grib) {
+fortint value;
+  if( ecmwfLocalDefinition2Present((*grib)) ) {
+    value = g1_2_domainE( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);
+    return value;
+  }
+  else
+    return -999999;
+}
+
+fortdouble RG2ELON(gribProduct ** grib) {
+fortdouble value = (fortdouble) IG2ELON(grib);
+  if( value != -999999.0 )
+    return (value/1000.0);
+  else
+    return value;
+}
+
+fortint IG2NLAT(gribProduct ** grib) {
+fortint value;
+  if( ecmwfLocalDefinition2Present((*grib)) ) {
+    value = g1_2_domainN( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);
+    return value;
+  }
+  else
+    return -999999;
+}
+
+fortdouble RG2NLAT(gribProduct ** grib) {
+fortdouble value = (fortdouble) IG2NLAT(grib);
+  if( value != -999999.0 )
+    return (value/1000.0);
+  else
+    return value;
+}
+
+fortint IG2SLAT(gribProduct ** grib) {
+fortint value;
+  if( ecmwfLocalDefinition2Present((*grib)) ) {
+    value = g1_2_domainS( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);
+    return value;
+  }
+  else
+    return -999999;
+}
+
+fortdouble RG2SLAT(gribProduct ** grib) {
+fortdouble value = (fortdouble) IG2SLAT(grib);
+  if( value != -999999.0 )
+    return (value/1000.0);
+  else
+    return value;
+}
+
+fortint IG2WLON(gribProduct ** grib) {
+fortint value;
+  if( ecmwfLocalDefinition2Present((*grib)) ) {
+    value = g1_2_domainW( (*grib) );
+    if( value & 0x800000 ) value = - (value & 0x7fffff);
+    return value;
+  }
+  else
+    return -999999;
+}
+
+fortdouble RG2WLON(gribProduct ** grib) {
+fortdouble value = (fortdouble) IG2WLON(grib);
+  if( value != -999999.0 )
+    return (value/1000.0);
+  else
+    return value;
+}
+
+fortint IG2END(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_end( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2END(gribProduct ** grib) {
+  return (fortdouble) IG2END(grib);
+}
+
+fortint IG2NUCL(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_count( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2NUCL(gribProduct ** grib) {
+  return (fortdouble) IG2NUCL(grib);
+}
+
+fortint IG2OPCL(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_operational( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2OPCL(gribProduct ** grib) {
+  return (fortdouble) IG2OPCL(grib);
+}
+
+fortint IG2STAR(gribProduct ** grib) {
+  if( ecmwfLocalDefinition2Present((*grib)) )
+    return g1_2_start( (*grib) );
+  else
+    return -999999;
+}
+
+fortdouble RG2STAR(gribProduct ** grib) {
+  return (fortdouble) IG2STAR(grib);
+}
+
+fortint IG2LIST(gribProduct ** grib, fortint * array, fortint * size) {
+gribProduct * g = *grib;
+fortint loop, listLength;
+unsigned char * p;
+
+  if( !ecmwfLocalDefinition2Present(g) ) return -1;
+
+  listLength =  g1_2_count(g);
+  if( listLength > *size ) return -1;
+
+  p = (unsigned char *) ((g->g1)->local.contents.def2.forecastNumberList);
+  for( loop = 0; loop < listLength; loop++ ) {
+    *(array+loop) = ONEBYTEINT(p);
+    p++;
+  }
+
+  return listLength;
+
+}
diff --git a/gribex/gdecode2.h b/gribex/gdecode2.h
new file mode 100755
index 0000000..7ab4af2
--- /dev/null
+++ b/gribex/gdecode2.h
@@ -0,0 +1,93 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef GDECODE2_H
+#define GDECODE2_H
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define IG2NUMB ig2numb
+#define RG2NUMB rg2numb
+#define IG2TOTL ig2totl
+#define RG2TOTL rg2totl
+#define IG2METH ig2meth
+#define RG2METH rg2meth
+#define IG2CFCL ig2cfcl
+#define RG2CFCL rg2cfcl
+#define IG2ELON ig2elon
+#define RG2ELON rg2elon
+#define IG2NLAT ig2nlat
+#define RG2NLAT rg2nlat
+#define IG2SLAT ig2slat
+#define RG2SLAT rg2slat
+#define IG2WLON ig2wlon
+#define RG2WLON rg2wlon
+#define IG2END  ig2end
+#define RG2END  rg2end
+#define IG2NUCL ig2nucl
+#define RG2NUCL rg2nucl
+#define IG2OPCL ig2opcl
+#define RG2OPCL rg2opcl
+#define IG2STAR ig2star
+#define RG2STAR rg2star
+#define IG2LIST ig2list
+#else
+#define IG2NUMB ig2numb_
+#define RG2NUMB rg2numb_
+#define IG2TOTL ig2totl_
+#define RG2TOTL rg2totl_
+#define IG2METH ig2meth_
+#define RG2METH rg2meth_
+#define IG2CFCL ig2cfcl_
+#define RG2CFCL rg2cfcl_
+#define IG2ELON ig2elon_
+#define RG2ELON rg2elon_
+#define IG2NLAT ig2nlat_
+#define RG2NLAT rg2nlat_
+#define IG2SLAT ig2slat_
+#define RG2SLAT rg2slat_
+#define IG2WLON ig2wlon_
+#define RG2WLON rg2wlon_
+#define IG2END  ig2end_
+#define RG2END  rg2end_
+#define IG2NUCL ig2nucl_
+#define RG2NUCL rg2nucl_
+#define IG2OPCL ig2opcl_
+#define RG2OPCL rg2opcl_
+#define IG2STAR ig2star_
+#define RG2STAR rg2star_
+#define IG2LIST ig2list_
+#endif
+
+fortint IG2NUMB(gribProduct **);
+fortdouble RG2NUMB(gribProduct **);
+fortint IG2TOTL(gribProduct **);
+fortdouble RG2TOTL(gribProduct **);
+fortint IG2METH(gribProduct **);
+fortdouble RG2METH(gribProduct **);
+fortint IG2CFCL(gribProduct **);
+fortdouble RG2CFCL(gribProduct **);
+fortint IG2ELON(gribProduct **);
+fortdouble RG2ELON(gribProduct **);
+fortint IG2NLAT(gribProduct **);
+fortdouble RG2NLAT(gribProduct **);
+fortint IG2SLAT(gribProduct **);
+fortdouble RG2SLAT(gribProduct **);
+fortint IG2WLON(gribProduct **);
+fortdouble RG2WLON(gribProduct **);
+fortint IG2END(gribProduct **);
+fortdouble RG2END(gribProduct **);
+fortint IG2NUCL(gribProduct **);
+fortdouble RG2NUCL(gribProduct **);
+fortint IG2OPCL(gribProduct **);
+fortdouble RG2OPCL(gribProduct **);
+fortint IG2STAR(gribProduct **);
+fortdouble RG2STAR(gribProduct **);
+
+#endif /* end of GDECODE2_H */
diff --git a/gribex/gdecodeStruct.h b/gribex/gdecodeStruct.h
new file mode 100755
index 0000000..569ade8
--- /dev/null
+++ b/gribex/gdecodeStruct.h
@@ -0,0 +1,366 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef GDECODESTRUCT_H
+#define GDECODESTRUCT_H
+
+typedef struct gribSection0 {
+unsigned char GRIB[4];
+unsigned char totalGRIBlength[3];
+unsigned char editionNumber[1];
+} gribSection0;
+
+typedef struct ECMWFdefinition1 {
+unsigned char number[1];
+unsigned char total[1];
+unsigned char spare[1];
+} ECMWFdefinition1;
+
+typedef struct ECMWFdefinition2 {
+unsigned char number[1];
+unsigned char total[1];
+unsigned char spare[1];
+unsigned char method[1];
+unsigned char startTimestep[2];
+unsigned char endTimestep[2];
+unsigned char domainNorthLatitude[3];
+unsigned char domainWestLongitude[3];
+unsigned char domainSouthLatitude[3];
+unsigned char domainEastLongitude[3];
+unsigned char operationalForecastCluster[1];
+unsigned char controlForecastCluster[1];
+unsigned char numberInCluster[1];
+unsigned char forecastNumberList[256];
+} ECMWFdefinition2;
+
+typedef struct ECMWFdefinition3 {
+unsigned char band[1];
+unsigned char functionCode[1];
+unsigned char spare[1];
+} ECMWFdefinition3;
+
+typedef struct ECMWFdefinition5 {
+unsigned char number[1];
+unsigned char total[1];
+unsigned char unitsDecimalScaleFactor[1];
+unsigned char thresholdIndicator[1];
+unsigned char lowerThreshold[2];
+unsigned char upperThreshold[2];
+unsigned char spare[1];
+} ECMWFdefinition5;
+
+typedef struct ICEField {
+unsigned char date[3];
+unsigned char satelliteNumber[1];
+} ICEField;
+
+typedef struct ECMWFdefinition6 {
+unsigned char zero[2];
+unsigned char SSTFieldDate[3];
+unsigned char typeOfSSTField[1];
+unsigned char countOfICEFields[1];
+unsigned char lowerThreshold[2];
+unsigned char upperThreshold[2];
+ICEField ICEFieldList[20];
+} ECMWFdefinition6;
+
+typedef struct ECMWFdefinition7 {
+unsigned char number[1];
+unsigned char totalNumberOfDiagnostics[1];
+unsigned char domain[1];
+unsigned char diagnosticNumber[1];
+unsigned char spare[1];
+} ECMWFdefinition7;
+
+typedef struct ECMWFdefinition8 {
+unsigned char interval[1];
+unsigned char unsignedIntegers[12];
+} ECMWFdefinition8;
+
+typedef struct ECMWFdefinition9 {
+unsigned char number[2];
+unsigned char numberOfIterations[2];
+unsigned char numberOfSingularVectorsComputed[2];
+unsigned char initialNorm[1];
+unsigned char finalNorm[1];
+unsigned char multiplicationFactor[4];
+unsigned char northWestLatitude[4];
+unsigned char northWestLongitude[4];
+unsigned char southEastLatitude[4];
+unsigned char southEastLongitude[4];
+unsigned char accuracy[4];
+unsigned char numberOfSingularVectorsEvolved[2];
+unsigned char ritzNumber1[4];
+unsigned char ritzNumber2[4];
+unsigned char spare[1];
+} ECMWFdefinition9;
+
+typedef struct ECMWFdefinition10 {
+unsigned char number[1];
+unsigned char total[1];
+unsigned char centralClusterDefinition[1];
+unsigned char parameter[1];
+unsigned char levelType[1];
+unsigned char domainNorth[3];
+unsigned char domainWest[3];
+unsigned char domainSouth[3];
+unsigned char domainEast[3];
+unsigned char operationalForcastTubeNumber[1];
+unsigned char controlForcastTubeNumber[1];
+unsigned char level[2];
+unsigned char referenceStep[2];
+unsigned char radiusOfCentralCluster[2];
+unsigned char ensembleStandardDeviation[2];
+unsigned char distanceOfExtremeToMean[2];
+unsigned char numberOfForecastsInTube[1];
+unsigned char ensembleForecastList[255];
+} ECMWFdefinition10;
+
+typedef struct ECMWFdefinition11 {
+unsigned char analysisClass[1];
+unsigned char analysisType[1];
+unsigned char analysisStream[2];
+unsigned char analysisExpver[4];
+unsigned char analysisYear[1];
+unsigned char analysisMonth[1];
+unsigned char analysisDay[1];
+unsigned char analysisHour[1];
+unsigned char analysisMinute[1];
+unsigned char analysisCentury[1];
+unsigned char analysisOriginatingCentre[1];
+unsigned char analysisSubCentre[1];
+unsigned char spare[7];
+} ECMWFdefinition11;
+
+typedef struct ECMWFdefinition20 {
+unsigned char iteration[1];
+unsigned char total[1];
+unsigned char spare[1];
+} ECMWFdefinition20;
+
+typedef union localContent {
+ECMWFdefinition1  def1;
+ECMWFdefinition2  def2;
+ECMWFdefinition3  def3;
+ECMWFdefinition5  def5;
+ECMWFdefinition6  def6;
+ECMWFdefinition7  def7;
+ECMWFdefinition8  def8;
+ECMWFdefinition9  def9;
+ECMWFdefinition10 def10;
+ECMWFdefinition11 def11;
+ECMWFdefinition20 def20;
+} localContent;
+
+typedef struct marsHeader {
+unsigned char definition[1];
+unsigned char ecmwfClass[1];
+unsigned char type[1];
+unsigned char stream[2];
+unsigned char experimentVersionNumber[4];
+} marsHeader;
+
+typedef struct localDefinition {
+marsHeader mars;
+localContent contents;
+} localDefinition;
+
+typedef struct gribSection1 {
+unsigned char sectionLength[3];
+unsigned char tableVersionNumber[1];
+unsigned char originatingCentre[1];
+unsigned char generatingProcessId[1];
+unsigned char gridDefinition[1];
+unsigned char section2and3PresentFlag[1];
+unsigned char parameter[1];
+unsigned char typeOfLevel[1];
+unsigned char level1[1];
+unsigned char level2[1];
+unsigned char year[1];
+unsigned char month[1];
+unsigned char day[1];
+unsigned char hour[1];
+unsigned char minute[1];
+unsigned char unitOfTimeRange[1];
+unsigned char P1[1];
+unsigned char P2[1];
+unsigned char timeRangeIndicator[1];
+unsigned char numberInAverage[2];
+unsigned char numberMissing[1];
+unsigned char century[1];
+unsigned char subCentreId[1];
+unsigned char unitsDecimalScaleFactor[2];
+unsigned char reserved[12];
+localDefinition local;
+} gribSection1;
+
+typedef struct latitudeLongitudeGrid {
+unsigned char numberOfPointsAlongParallel[2];
+unsigned char numberOfPointsAlongMeridian[2];
+unsigned char latitudeOfFirstPoint[3];
+unsigned char longitudeOfFirstPoint[3];
+unsigned char resolutionAndComponentsFlag[1];
+unsigned char latitudeOfLastPoint[3];
+unsigned char longitudeOfLastPoint[3];
+unsigned char iDirectionIncrement[2];
+unsigned char jDirectionIncrement[2];
+unsigned char scanningMode[1];
+unsigned char setToZero[4];
+unsigned char latitudeOfSouthPole[3];
+unsigned char longitudeOfSouthPole[3];
+unsigned char angleOfRotationOrStretchingFactor[4];
+unsigned char latitudeOfPoleOfStretching[3];
+unsigned char longitudeOfPoleOfStretching[3];
+unsigned char stretchingFactor[4];
+} latitudeLongitudeGrid;
+
+typedef struct gaussianGrid {
+unsigned char numberOfPointsAlongParallel[2];
+unsigned char numberOfPointsAlongMeridian[2];
+unsigned char latitudeOfFirstPoint[3];
+unsigned char longitudeOfFirstPoint[3];
+unsigned char resolutionAndComponentsFlag[1];
+unsigned char latitudeOfLastPoint[3];
+unsigned char longitudeOfLastPoint[3];
+unsigned char iDirectionIncrement[2];
+unsigned char numberOfParallelsBetweenPoleAndEquator[2];
+unsigned char scanningMode[1];
+unsigned char setToZero[4];
+unsigned char latitudeOfSouthPole[3];
+unsigned char longitudeOfSouthPole[3];
+unsigned char angleOfRotationOrStretchingFactor[4];
+unsigned char latitudeOfPoleOfStretching[3];
+unsigned char longitudeOfPoleOfStretching[3];
+unsigned char stretchingFactor[4];
+} gaussianGrid;
+
+
+typedef struct sphericalHarmonicCoefficients {
+unsigned char J[2];
+unsigned char K[2];
+unsigned char M[2];
+unsigned char representationType[1];
+unsigned char representationMode[1];
+unsigned char setToZero[18];
+unsigned char latitudeOfSouthPole[3];
+unsigned char longitudeOfSouthPole[3];
+unsigned char angleOfRotationOrStretchingFactor[4];
+unsigned char latitudeOfPoleOfStretching[3];
+unsigned char longitudeOfPoleOfStretching[3];
+unsigned char stretchingFactor[4];
+} sphericalHarmonicCoefficients;
+
+typedef union gridDefinition {
+latitudeLongitudeGrid latlon;
+gaussianGrid gaussian;
+sphericalHarmonicCoefficients spectral;
+} gridDefinition;
+
+typedef struct gribSection2 {
+unsigned char sectionLength[3];
+unsigned char NV[1];
+unsigned char PV_PL[1];
+unsigned char dataRepresentationType[1];
+gridDefinition grid;
+} gribSection2;
+
+typedef struct gribSection3 {
+unsigned char sectionLength[3];
+unsigned char numberOfUnusedBits[1];
+unsigned char tableReference[2];
+unsigned char bitmap;
+} gribSection3;
+
+typedef struct simplePackingGridPoint {
+unsigned char dataBits;
+} simplePackingGridPoint;
+
+typedef struct secondOrderPackingGridPoint {
+unsigned char n1[2];
+unsigned char extendedFlags[1];
+unsigned char n2[2];
+unsigned char p1[2];
+unsigned char p2[2];
+unsigned char reserved[1];
+unsigned char dataBits;
+} secondOrderPackingGridPoint;
+
+typedef struct simplePackingSpectral {
+unsigned char realPartOf0_0Coefficient[4];
+unsigned char dataBits;
+} simplePackingSpectral;
+
+typedef struct complexPackingSpectral {
+unsigned char N[2];
+unsigned char IP[2];
+unsigned char J[1];
+unsigned char K[1];
+unsigned char M[1];
+unsigned char dataBits;
+} complexPackingSpectral;
+
+typedef union binaryData {
+simplePackingGridPoint simpleGrid;
+secondOrderPackingGridPoint complexGrid;
+simplePackingSpectral simpleSpectral;
+complexPackingSpectral complexSpectral;
+} binaryData;
+
+typedef struct gribSection4 {
+unsigned char sectionLength[3];
+unsigned char flag[1];
+unsigned char scaleFactor[2];
+unsigned char referenceValue[4];
+unsigned char numberOfBitsPerValue[1];
+binaryData data;
+} gribSection4;
+
+typedef struct gribSection5 {
+unsigned char end7777[4];
+} gribSection5;
+
+typedef struct latLongValueVector {
+fortdouble * latitude;
+fortdouble * longitudeIncrement;
+fortdouble * gridPointValue;
+} latLongValueVector;
+
+typedef struct gribProduct {
+gribSection0 * g0;
+gribSection1 * g1;
+gribSection2 * g2;
+gribSection3 * g3;
+gribSection4 * g4;
+gribSection5 * g5;
+fortint currentPointIndex;
+fortint numberOfValues;
+unsigned char * value;
+unsigned char * bitStart;
+fortint bitsPerValue;
+fortint bitmapped;
+fortint nextValueFirstBit;
+fortint nextBit;
+fortint northSet;
+fortint southSet;
+fortint westSet;
+fortint eastSet;
+fortint northSouthIncrementSet;
+fortint westEastIncrementSet;
+fortint northSouthNumberOfPointsSet;
+fortint westEastNumberOfPointsSet;
+fortdouble scale;
+fortdouble minimum;
+fortdouble missingValue;
+fortint * latitudeOffsets;
+fortdouble * expandedValues;
+latLongValueVector currentPoint;
+} gribProduct;
+
+#endif /* End of GDECODESTRUCT_H */
diff --git a/gribex/genbin.F b/gribex/genbin.F
new file mode 100755
index 0000000..07cffd0
--- /dev/null
+++ b/gribex/genbin.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GENBIN (IN,NBIT,OUT,ERR)
+C
+C---->
+C**********************************************************************
+C*
+C*  NAME      : GENBIN
+C*
+C*  FUNCTION  : PRODUCES A BINARY NUMBER WITH ONES AND ZEROES
+C*              CORRESPONDING TO THE ONES AND ZEROES OF THE INPUT
+C*              DECIMAL NUMBER.
+C*              EG INPUT NUMBER 1010 DECIMAL , OUTPUT 1010 BINARY.
+C*
+C*  INPUT     : IN   - INTEGER VARIABLE CONTAINING DECIMAL NUMBER.
+C*              NBIT - NUMBER OF DIGITS TO BE USED.
+C*
+C*  OUTPUT    : OUT  - INTEGER VARIABLE CONTAINING BINARY VALUE
+C*                     WITH ONES AND ZEROES CORRESPONDING TO THOSE OF
+C*                     THE INPUT DECIMAL NUMBER.
+C*
+C*              ERR  - 0 IF NO ERROR, 1 IF INVALID NUMBER OF BITS.
+C*
+C*    JOHN HENNESSY     ECMWF, OCTOBER 1985
+C*
+C**********************************************************************
+C----<
+C
+      IMPLICIT INTEGER (A-Z)
+C
+      OUT = 0
+      INN = IN
+C
+C     CHECK SIZE OF INTEGER
+C
+      IF (NBIT.LT.0.OR.NBIT.GT.15)
+     C   THEN
+             ERR = 1
+             RETURN
+         ELSE
+             ERR = 0
+         ENDIF
+C
+         DO 100 I=1,NBIT
+            TEMP = INN / 10
+            DIFF = INN - (TEMP*10)
+            K    = I - 1
+            MASC = 2**K
+            IF (DIFF.NE.0) OUT = OR(OUT,MASC)
+            INN = TEMP
+  100    CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/gendir.F b/gribex/gendir.F
new file mode 100755
index 0000000..fc1cb22
--- /dev/null
+++ b/gribex/gendir.F
@@ -0,0 +1,215 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GENDIR (HPARAM,KARRAY,KLEN,HLINE,KIN,KOUT,HLAST,KRET)
+C
+C---->
+C**** GENDIR - Generate directive lines for MARS.
+C
+C     Purpose.
+C     --------
+C
+C           Creates mars directive line(s) in character format
+C           from list of integers.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GENDIR (HPARAM,KARRAY,KLEN,HLINE,KIN,KOUT,HLAST,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               HPARAM     - MARS parameter being used.
+C               KARRAY     - Array of required values.
+C               KLEN       - Number of values.
+C               HLINE      - Array of 80 character variables.
+C               KIN        - Dimension of array HLINE.
+C               HLAST      - Terminating character for directive line(s)
+C               KRET       - Abort/no abort when error found.
+C                            0   , abort if error found.
+C                            Non-zero , no abort on error.
+C
+C               Output parameters.
+C               ------------------
+C
+C               LINE       - MARS directive line(s)
+C               KOUT       - Number of lines generated.
+C               KRET       - Error return code.
+C                            0   , No error encountered.
+C                            1   , Output character array too small.
+C
+C     Method.
+C     -------
+C
+C           Integers converted to characters and packed to remove
+C           spaces. Lines are broken at / character for MARS input.
+C
+C     Externals.
+C     ----------
+C
+C           RTB
+C           REMSP
+C
+C     Reference.
+C     ----------
+C
+C           MARS User Guide for directive description.
+C
+C     Comments.
+C     ---------
+C
+C           See also GENINT which performs the reverse function.
+C           Program contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      16:10:86.
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      10:07:91.
+C           Print of error message added.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      INTEGER RTB
+C
+C
+      CHARACTER*80  HLINE
+      CHARACTER*10  YTEMP
+      CHARACTER*(*) HPARAM
+      CHARACTER*1   HLAST
+C
+      DIMENSION KARRAY(*)
+      DIMENSION HLINE(KIN)
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IRET = KRET
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Convert integer data to required character format.
+C     ----------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+      KOUT                     = 1
+      HLINE(KOUT)(1:)          = HPARAM(1:)
+      ILEN                     = RTB (HLINE(KOUT))
+      ICHAR                    = ILEN + 1
+      HLINE(KOUT)(ICHAR:ICHAR) = '='
+      ICHAR                    = ICHAR + 1
+C
+      DO 2010 I=1,KLEN
+         WRITE (YTEMP(1:10),'(I10)') KARRAY(I)
+         CALL REMSP (YTEMP)
+         ILEN  = RTB (YTEMP)
+         ILAST = ILEN + ICHAR
+         IF (ILAST.GT.80)
+     C      THEN
+                ICHAR = 1
+                KOUT  = KOUT + 1
+                IF (KOUT.GT.KIN)
+     C             THEN
+                       KRET = 1
+		       WRITE (*,9001) KIN , KOUT
+                       GO TO 9000
+                   ENDIF
+            ENDIF
+         HLINE(KOUT)(ICHAR:) = YTEMP(1:ILEN)
+         ICHAR               = ICHAR + ILEN
+         HLINE(KOUT)(ICHAR:) = '/'
+         ICHAR               = ICHAR + 1
+ 2010 CONTINUE
+C
+      ILEN                   = RTB (HLINE(KOUT))
+      HLINE(KOUT)(ILEN:ILEN) = HLAST
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine or abort.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+ 9001 FORMAT (1H ,'GENDIR : Character array is dimensioned ',I3,
+     C            ' but should be at least ',I3,'.')
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+      END
diff --git a/gribex/gengrib.F b/gribex/gengrib.F
new file mode 100755
index 0000000..a094dbd
--- /dev/null
+++ b/gribex/gengrib.F
@@ -0,0 +1,246 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GENGRIB( VALUES, LAT, LONG, NBITS, GRIB, GRIBSIZE)
+C
+C---->
+C**** GENGRIB
+C
+C     Purpose.
+C     --------
+C
+C     Creates a generic GRIB field product.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GENGRIB( VALUES, LAT, LONG, NBITS, GRIB, GRIBSIZE)
+C
+C
+C     Input
+C     -----
+C
+C     VALUES   -  array of real numbers
+C     LAT      -  first dimension of the array
+C                 (e.g. number of points along a meridian )
+C     LONG     -  second dimension of the array
+C                 (e.g. number of points along a parallel )
+C     NBITS    -  number of bits to use for each packed value
+C                 If NBITS = 0, a value is calculated for the given
+C                 field.
+C     GRIBSIZE -  size in bytes of output array GRIB
+C
+C
+C     Output
+C     ------
+C
+C     GRIB     -  packed GRIB record
+C
+C
+C     Method.
+C     -------
+C
+C     Packs the matrix of real values as a 500 hPa geopotential first
+C     guess field for 94/1/1 1200.
+C
+C
+C     Externals.
+C     ----------
+C
+C     GRIBEX
+C     CNBITS
+C
+C
+C     Reference.
+C     ----------
+C
+C     Binary data representation - FM 92 GRIB, ECMWF, May 1992
+C
+C
+C     Comments.
+C     ---------
+C
+C     If number of bits for packing is not supplied by caller, calculate
+C     the number of bits needed to code the range of field values.
+C     Apply (arbitrary) lower limit unless the number of bits is 1 (for
+C     bit fields for example) when the value is left as 1.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers           ECMWF      28.07.94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C   
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C                                                                
+      IMPLICIT NONE 
+C
+C     Parameters
+      INTEGER JPLOW
+      PARAMETER ( JPLOW = 16 )
+C
+C     Arguments
+      INTEGER LAT,LONG
+      REAL VALUES( LAT, LONG)
+      INTEGER GRIB(*), GRIBSIZE
+      INTEGER NBITS
+C
+C     Local variables
+      INTEGER KSEC0(2), KSEC1(43), KSEC2(23), KSEC3(2), KSEC4(33)
+      REAL PSEC2(10), PSEC3(2)
+      INTEGER LOOP, KLENG, KLENP, KWORD, KRET
+C
+      INTEGER CNBITS
+C                                             
+C     ----------------------------------------------------------------
+C*    Section 1 . Setup section 1.
+C     ----------------------------------------------------------------
+C                                                                    
+  100 CONTINUE                                                    
+C                                                               
+      KSEC1( 1) = 128
+      KSEC1( 2) = 98
+      KSEC1( 3) = 255
+      KSEC1( 4) = 255
+      KSEC1( 5) = 128
+      KSEC1( 6) = 129
+      KSEC1( 7) = 100
+      KSEC1( 8) = 500
+      KSEC1( 9) = 0
+      KSEC1(10) = 94
+      KSEC1(11) = 1
+      KSEC1(12) = 1
+      KSEC1(13) = 12
+      KSEC1(14) = 0
+      KSEC1(15) = 1
+      KSEC1(16) = 0
+      KSEC1(17) = 0
+      KSEC1(18) = 0
+      KSEC1(19) = 0
+      KSEC1(20) = 0
+      KSEC1(21) = 20
+      DO 110 LOOP = 22, 36
+        KSEC1(LOOP) = 0
+  110 CONTINUE
+      KSEC1(24) = 1
+      KSEC1(37) = 1
+      KSEC1(38) = 1
+      KSEC1(39) = 1
+      KSEC1(40) = 1060
+      KSEC1(41) = 1413829460
+      KSEC1(42) = 0
+      KSEC1(43) = 0
+C                                             
+C     ----------------------------------------------------------------
+C*    Section 2 . Setup section 2.
+C     ----------------------------------------------------------------
+C                                                                    
+  200 CONTINUE                                                    
+C                                                               
+      KSEC2( 1) = 0
+      KSEC2( 2) = LONG
+      KSEC2( 3) = LAT
+      KSEC2( 4) = 90000
+      KSEC2( 5) = 0
+      KSEC2( 6) = 128
+      KSEC2( 7) = -90000
+      KSEC2( 8) = 360000 - (360000/LONG)
+      KSEC2( 9) = (360000/LONG)
+      KSEC2(10) = (180000/(LAT-1))
+      KSEC2(11) = 0
+      KSEC2(12) = 0
+      KSEC2(13) = 0
+      KSEC2(14) = 0
+      KSEC2(15) = 0
+      KSEC2(16) = 0
+      KSEC2(17) = 0
+      KSEC2(18) = 0
+      KSEC2(19) = 0
+      KSEC2(20) = 0
+      KSEC2(21) = 0
+      KSEC2(22) = 0
+      KSEC2(23) = LONG
+      DO 210 LOOP =1, 10
+        PSEC2(LOOP) = 0.0
+  210 CONTINUE
+C                                             
+C     ----------------------------------------------------------------
+C*    Section 3 . Setup section 3.
+C     ----------------------------------------------------------------
+C                                                                    
+  300 CONTINUE                                                    
+C                                                               
+      KSEC3( 1) = 0
+      KSEC3( 2) = -1000000
+      PSEC3( 1) = 0
+      PSEC3( 2) = -1000000.0
+C                                             
+C     ----------------------------------------------------------------
+C*    Section 4 . Setup section 4.
+C     ----------------------------------------------------------------
+C                                                                    
+  400 CONTINUE                                                    
+C                                                               
+      KSEC4( 1) = LAT*LONG
+C
+      IF ( NBITS .LE. 0 ) THEN
+C
+C       If number of bits for packing not supplied by caller, calculate
+C       the number of bits needed to code the range of field values.
+        KSEC4( 2) = CNBITS( VALUES, LAT, LONG )
+C
+C       Apply (arbitrary) lower limit.
+        IF ( (KSEC4( 2) .LT. JPLOW) .AND.
+     X       (KSEC4( 2) .NE. 1) ) KSEC4( 2) = JPLOW
+      ELSE
+        KSEC4( 2) = NBITS
+      ENDIF
+      DO 410 LOOP = 3, 33
+        KSEC4(LOOP) = 0
+  410 CONTINUE
+C                                             
+C     ----------------------------------------------------------------
+C*    Section 5 . Pack the field.
+C     ----------------------------------------------------------------
+C                                                                    
+  500 CONTINUE                                                    
+C                                                               
+#ifdef CRAY
+      KLENG = GRIBSIZE/8
+#else
+      KLENG = GRIBSIZE/4
+#endif
+      KLENP = LAT*LONG
+C
+Cjdc  CALL GRSVCK(0)
+Cjdc  CALL GRSDBG(1)
+C
+      CALL GRIBEX( KSEC0, KSEC1, KSEC2, PSEC2, KSEC3, PSEC3, KSEC4,
+     X             VALUES, KLENP, GRIB, KLENG, KWORD, 'C', KRET)
+C                                           
+C     ----------------------------------------------------------------
+C*    Section 9 . End.
+C     ----------------------------------------------------------------
+C                                                                
+  900 CONTINUE                                           
+C                                                    
+      RETURN
+      END
diff --git a/gribex/getValues.c b/gribex/getValues.c
new file mode 100755
index 0000000..dded380
--- /dev/null
+++ b/gribex/getValues.c
@@ -0,0 +1,391 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "getValues.h"
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define GETINT  getint
+#define GETREAL getreal
+#else
+#define GETINT  getint_
+#define GETREAL getreal_
+#endif
+
+fortint getIntegerValue(
+  gribProduct** grib,
+  unsigned char* request ){
+
+  return GETINT(grib,request,strlen(request));
+}
+
+void copyName(
+  unsigned char* copy,
+  unsigned char* original,
+  int copyLength,
+  int originalLength) {
+int length;
+char *p;
+
+  length = (originalLength>copyLength)?copyLength:originalLength;
+  memcpy(copy,original,length);
+  copy[length] = '\0';
+
+  p = copy + length - 1;
+  while( *p == ' ' ) *(p--) = '\0';
+
+  return;
+}
+
+fortint GETINT(
+  gribProduct** grib,
+  unsigned char* request,
+  long requestLength ) { 
+int index;
+int listLength = sizeof(despatchInteger)/sizeof(despatchI);
+unsigned char Request[80];
+
+  copyName(Request,request,(int)sizeof(Request),(int)requestLength);
+
+  index = binaryChopI(despatchInteger,listLength,Request);
+  if( index < 0 )
+    return -999999;
+  else {
+    return despatchInteger[index].get(grib);
+  }
+}
+
+fortdouble getRealValue(
+  gribProduct** grib,
+  unsigned char* request ) {
+
+  return GETREAL(grib,request,strlen(request));
+}
+
+fortdouble GETREAL(
+  gribProduct** grib,
+  unsigned char* request,
+  long requestLength ) { 
+int index;
+int listLength = sizeof(despatchReal)/sizeof(despatchR);
+char Request[80];
+
+  copyName(Request,request,(int)sizeof(Request),(int)requestLength);
+
+  index = binaryChopR(despatchReal,listLength,Request);
+  if( index < 0 )
+    return -999999.0;
+  else {
+    return despatchReal[index].get(grib);
+  }
+}
+
+fortint IGNWLAT(gribProduct** grib) {
+fortdouble value = GNWLAT(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGNWLON(gribProduct** grib) {
+fortdouble value = GNWLON(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGSELAT(gribProduct** grib) {
+fortdouble value = GSELAT(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGSELON(gribProduct** grib) {
+fortdouble value = GSELON(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGDI(gribProduct** grib) {
+fortdouble value = GDI(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGDJ(gribProduct** grib) {
+fortdouble value = GDJ(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGIP(gribProduct** grib) {
+fortdouble value = GIP(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLATRPL(gribProduct** grib) {
+fortdouble value = GLATRPL(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLONRPL(gribProduct** grib) {
+fortdouble value = GLONRPL(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGROTATN(gribProduct** grib) {
+fortdouble value = GROTATN(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLATSPL(gribProduct** grib) {
+fortdouble value = GLATSPL(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLONSPL(gribProduct** grib) {
+fortdouble value = GLONSPL(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGSFACTR(gribProduct** grib) {
+fortdouble value = GSFACTR(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGREFVAL(gribProduct** grib) {
+  return (fortint)(1000000.0 * GREFVAL(grib));
+}
+
+fortint IGDSCALE(gribProduct** grib) {
+  return (fortint)(1000000.0 * GDSCALE(grib));
+}
+
+fortdouble RGLENGTH(gribProduct** grib) {
+  return (fortdouble) GLENGTH(grib);
+}
+
+fortdouble RGTABLE(gribProduct** grib) {
+  return (fortdouble) GTABLE(grib);
+}
+
+fortdouble RGCENTRE(gribProduct** grib) {
+  return (fortdouble) GCENTRE(grib);
+}
+
+fortdouble RGPARAM(gribProduct** grib) {
+  return (fortdouble) GPARAM(grib);
+}
+
+fortdouble RGLEVEL(gribProduct** grib) {
+  return (fortdouble) GLEVEL(grib);
+}
+
+fortdouble RGLEVEL1(gribProduct** grib) {
+  return (fortdouble) GLEVEL1(grib);
+}
+
+fortdouble RGLEVEL2(gribProduct** grib) {
+  return (fortdouble) GLEVEL2(grib);
+}
+
+fortdouble RGDATE(gribProduct** grib) {
+  return (fortdouble) GDATE(grib);
+}
+
+fortdouble RGTIME(gribProduct** grib) {
+  return (fortdouble) GTIME(grib);
+}
+
+fortdouble RGSTEP(gribProduct** grib) {
+  return (fortdouble) GSTEP(grib);
+}
+
+fortdouble RGDEFIN(gribProduct** grib) {
+  return (fortdouble) GDEFIN(grib);
+}
+
+fortdouble RGCLASS(gribProduct** grib) {
+  return (fortdouble) GCLASS(grib);
+}
+
+fortdouble RGTYPE(gribProduct** grib) {
+  return (fortdouble) GTYPE(grib);
+}
+
+fortdouble RGSTREAM(gribProduct** grib) {
+  return (fortdouble) GSTREAM(grib);
+}
+
+fortdouble RGEXPVER(gribProduct** grib) {
+  return (fortdouble) GEXPVER(grib);
+}
+
+fortdouble RGNUMPV(gribProduct** grib) {
+  return (fortdouble) GNUMPV(grib);
+}
+
+fortdouble RGREPRES(gribProduct** grib) {
+  return (fortdouble) GREPRES(grib);
+}
+
+fortdouble RGNI(gribProduct** grib) {
+  return (fortdouble) GNI(grib);
+}
+
+fortdouble RGNJ(gribProduct** grib) {
+  return (fortdouble) GNJ(grib);
+}
+
+fortdouble RGRESCOM(gribProduct** grib) {
+  return (fortdouble) GRESCOM(grib);
+}
+
+fortdouble RGNUMBER(gribProduct** grib) {
+  return (fortdouble) GNUMBER(grib);
+}
+
+fortdouble RGSCAN(gribProduct** grib) {
+  return (fortdouble) GSCAN(grib);
+}
+
+fortdouble RGJ(gribProduct** grib) {
+  return (fortdouble) GJ(grib);
+}
+
+fortdouble RGK(gribProduct** grib) {
+  return (fortdouble) GK(grib);
+}
+
+fortdouble RGM(gribProduct** grib) {
+  return (fortdouble) GM(grib);
+}
+
+fortdouble RGREPMOD(gribProduct** grib) {
+  return (fortdouble) GREPMOD(grib);
+}
+
+fortdouble RGTJ(gribProduct** grib) {
+  return (fortdouble) GTJ(grib);
+}
+
+fortdouble RGTK(gribProduct** grib) {
+  return (fortdouble) GTK(grib);
+}
+
+fortdouble RGTM(gribProduct** grib) {
+  return (fortdouble) GTM(grib);
+}
+
+fortdouble RGBITSPV(gribProduct** grib) {
+  return (fortdouble) GBITSPV(grib);
+}
+
+fortdouble RGUNUSED(gribProduct** grib) {
+  return (fortdouble) GUNUSED(grib);
+}
+
+fortdouble RGNVALUE(gribProduct** grib) {
+  return (fortdouble) GNVALUE(grib);
+}
+
+int binaryChopI(despatchI * list, int listLength, unsigned char * test) {
+int current, oldCurrent = -1;
+int direction, startRange = 0, endRange = listLength;
+
+  do {
+    current = (startRange + endRange)/2;
+
+    if( current == oldCurrent) break;
+
+    direction = strcmp(test,(*(list+current)).name);
+
+    if( direction == 0 ) return current;
+
+    if( direction < 0 )
+      endRange = current;
+    else
+      startRange = current;
+
+    oldCurrent = current;
+  } while( startRange <= endRange );
+
+  return -1;
+}
+
+int binaryChopR(despatchR * list, int listLength, unsigned char * test) {
+int current, oldCurrent = -1;
+int direction, startRange = 0, endRange = listLength;
+
+  do {
+    current = (startRange + endRange)/2;
+
+    if( current == oldCurrent) break;
+
+    direction = strcmp(test,(*(list+current)).name);
+
+    if( direction == 0 ) return current;
+
+    if( direction < 0 )
+      endRange = current;
+    else
+      startRange = current;
+
+    oldCurrent = current;
+  } while( startRange <= endRange );
+
+  return -1;
+}
diff --git a/gribex/getValues.h b/gribex/getValues.h
new file mode 100755
index 0000000..438f688
--- /dev/null
+++ b/gribex/getValues.h
@@ -0,0 +1,184 @@
+#ifndef GETVALUES_H
+#define GETVALUES_H
+
+#include "gdecode.h"
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define GETINT  getint
+#define GETREAL getreal
+#else
+#define GETINT  getint_
+#define GETREAL getreal_
+#endif
+
+fortint  getIntegerValue(gribProduct**,unsigned char*);
+fortdouble getRealValue(gribProduct**,unsigned char*);
+fortint  GETINT(gribProduct**,unsigned char*,long);
+fortdouble GETREAL(gribProduct**,unsigned char*,long);
+
+fortint IGNWLAT(gribProduct**);
+fortint IGNWLON(gribProduct**);
+fortint IGSELAT(gribProduct**);
+fortint IGSELON(gribProduct**);
+fortint IGDI(gribProduct**);
+fortint IGDJ(gribProduct**);
+fortint IGIP(gribProduct**);
+fortint IGLATRPL(gribProduct**);
+fortint IGLONRPL(gribProduct**);
+fortint IGROTATN(gribProduct**);
+fortint IGLATSPL(gribProduct**);
+fortint IGLONSPL(gribProduct**);
+fortint IGSFACTR(gribProduct**);
+fortint IGREFVAL(gribProduct**);
+fortint IGDSCALE(gribProduct**);
+
+fortdouble RGLENGTH(gribProduct**);
+fortdouble RGTABLE(gribProduct**);
+fortdouble RGCENTRE(gribProduct**);
+fortdouble RGPARAM(gribProduct**);
+fortdouble RGLEVEL(gribProduct**);
+fortdouble RGLEVEL1(gribProduct**);
+fortdouble RGLEVEL2(gribProduct**);
+fortdouble RGDATE(gribProduct**);
+fortdouble RGTIME(gribProduct**);
+fortdouble RGSTEP(gribProduct**);
+fortdouble RGDEFIN(gribProduct**);
+fortdouble RGCLASS(gribProduct**);
+fortdouble RGTYPE(gribProduct**);
+fortdouble RGSTREAM(gribProduct**);
+fortdouble RGEXPVER(gribProduct**);
+fortdouble RGNUMPV(gribProduct**);
+fortdouble RGREPRES(gribProduct**);
+fortdouble RGNI(gribProduct**);
+fortdouble RGNJ(gribProduct**);
+fortdouble RGRESCOM(gribProduct**);
+fortdouble RGNUMBER(gribProduct**);
+fortdouble RGSCAN(gribProduct**);
+fortdouble RGJ(gribProduct**);
+fortdouble RGK(gribProduct**);
+fortdouble RGM(gribProduct**);
+fortdouble RGREPMOD(gribProduct**);
+fortdouble RGTJ(gribProduct**);
+fortdouble RGTK(gribProduct**);
+fortdouble RGTM(gribProduct**);
+fortdouble RGBITSPV(gribProduct**);
+fortdouble RGUNUSED(gribProduct**);
+fortdouble RGNVALUE(gribProduct**);
+
+typedef fortint (*geti) (gribProduct **);
+typedef fortdouble (*getf) (gribProduct **);
+
+typedef struct {
+  unsigned char * name;
+  geti get;
+} despatchI;
+
+typedef struct {
+  unsigned char * name;
+  getf get;
+} despatchR;
+
+despatchI despatchInteger[] = {
+  "angleOfRotation",IGROTATN,
+  "bottomLayer",GLEVEL2,
+  "codeTable",GTABLE,
+  "complexPackingScalingFactor",IGIP,
+  "dataRepresentationType",GREPRES,
+  "date",GDATE,
+  "ecmwfClass",GCLASS,
+  "ecmwfExperimentVersionNumber",GEXPVER,
+  "ecmwfLocalDefinitionNumber",GDEFIN,
+  "ecmwfStream",GSTREAM,
+  "ecmwfType",GTYPE,
+  "gribLength",GLENGTH,
+  "iDirectionIncrement",IGDI,
+  "jDirectionIncrement",IGDJ,
+  "jPentagonalResolution",GJ,
+  "kPentagonalResolution",GK,
+  "latitudeOfThePoleOfStretching",IGLATSPL,
+  "latitudeOfTheSouthernPoleOfRotation",IGLATRPL,
+  "longitudeOfThePoleOfStretching",IGLONSPL,
+  "longitudeOfTheSouthernPoleOfRotation",IGLONRPL,
+  "mPentagonalResolution",GM,
+  "northWestLatitude",IGNWLAT,
+  "northWestLongitude",IGNWLON,
+  "numberOfBitsPerPackedValue",GBITSPV,
+  "numberOfFieldValues",GNVALUE,
+  "numberOfParallelsBetweenPoleAndEquator",GNUMBER,
+  "numberOfPointsAlongMeridian",GNJ,
+  "numberOfPointsAlongParallel",GNI,
+  "numberOfUnusedBitsAtEndOfSection4",GUNUSED,
+  "numberOfVerticalCoordinateParameters",GNUMPV,
+  "originatingCentre",GCENTRE,
+  "parameter", GPARAM,
+  "pressureLevel",GLEVEL,
+  "referenceValue",IGREFVAL,
+  "representationMode",GREPMOD,
+  "resolutionAndComponentsFlag",GRESCOM,
+  "scaleFactorUsedToPackFieldValues",IGDSCALE,
+  "scanningModeFlag",GSCAN,
+  "southEastLatitude",IGSELAT,
+  "southEastLongitude",IGSELON,
+  "stretchingFactor",IGSFACTR,
+  "subsetJPentagonalResolution",GTJ,
+  "subsetKPentagonalResolution",GTK,
+  "subsetMPentagonalResolution",GTM,
+  "time",GTIME,
+  "timestep",GSTEP,
+  "topLayer",GLEVEL1
+};
+
+despatchR despatchReal[] = {
+  "angleOfRotation",GROTATN,
+  "bottomLayer",RGLEVEL2,
+  "codeTable",RGTABLE,
+  "complexPackingScalingFactor",GIP,
+  "dataRepresentationType",RGREPRES,
+  "date",RGDATE,
+  "ecmwfClass",RGCLASS,
+  "ecmwfExperimentVersionNumber",RGEXPVER,
+  "ecmwfLocalDefinitionNumber",RGDEFIN,
+  "ecmwfStream",RGSTREAM,
+  "ecmwfType",RGTYPE,
+  "gribLength",RGLENGTH,
+  "iDirectionIncrement",GDI,
+  "jDirectionIncrement",GDJ,
+  "jPentagonalResolution",RGJ,
+  "kPentagonalResolution",RGK,
+  "latitudeOfThePoleOfStretching",GLATSPL,
+  "latitudeOfTheSouthernPoleOfRotation",GLATRPL,
+  "longitudeOfThePoleOfStretching",GLONSPL,
+  "longitudeOfTheSouthernPoleOfRotation",GLONRPL,
+  "mPentagonalResolution",RGM,
+  "northWestLatitude",GNWLAT,
+  "northWestLongitude",GNWLON,
+  "numberOfBitsPerPackedValue",RGBITSPV,
+  "numberOfFieldValues",RGNVALUE,
+  "numberOfParallelsBetweenPoleAndEquator",RGNUMBER,
+  "numberOfPointsAlongMeridian",RGNJ,
+  "numberOfPointsAlongParallel",RGNI,
+  "numberOfUnusedBitsAtEndOfSection4",RGUNUSED,
+  "numberOfVerticalCoordinateParameters",RGNUMPV,
+  "originatingCentre",RGCENTRE,
+  "parameter",RGPARAM,
+  "pressureLevel",RGLEVEL,
+  "referenceValue",GREFVAL,
+  "representationMode",RGREPMOD,
+  "resolutionAndComponentsFlag",RGRESCOM,
+  "scaleFactorUsedToPackFieldValues",GDSCALE,
+  "scanningModeFlag",RGSCAN,
+  "southEastLatitude",GSELAT,
+  "southEastLongitude",GSELON,
+  "stretchingFactor",GSFACTR,
+  "subsetJPentagonalResolution",RGTJ,
+  "subsetKPentagonalResolution",RGTK,
+  "subsetMPentagonalResolution",RGTM,
+  "time",RGTIME,
+  "timestep",RGSTEP,
+  "topLayer",RGLEVEL1
+};
+
+int binaryChopI(despatchI * list, int listLength, unsigned char * test);
+int binaryChopR(despatchR * list, int listLength, unsigned char * test);
+
+#endif /* End of GETVALUES_H */
diff --git a/gribex/getchd.F b/gribex/getchd.F
new file mode 100755
index 0000000..61e0d2d
--- /dev/null
+++ b/gribex/getchd.F
@@ -0,0 +1,202 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETCHD (KLCHD,HCHD,KLENG,KARRAY,KPR,KRET)
+C
+C---->
+C     ----------------------------------------------------------------
+C
+C****
+C
+C     PURPOSE.
+C     --------
+C
+C           GET CHARACTER DATA FROM UNPACKED GRIB OR
+C           PSEUDO-GRIB RECORDS, RETRIEVED FROM MARS.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL GETCHD (KLCHD,HCHD,KLENG,KARRAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               HCHD       - STRING TO RECEIVE CHARACTER DATA.
+C               KLENG      - LENGTH OF THIS STRING.
+C               KARRAY     - ARRAY CONTAINING UNPACKED RECORD.
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               KRET       - ABORT/NO ABORT WHEN ERROR FOUND.
+C                            0   , ABORT IF ERROR FOUND.
+C                            NON-ZERO , NO ABORT IF ERROR FOUND.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               HCHD       - STRING OF CHARACTER DATA.
+C               KLCHD      - NUMBER OF CHARACTERS IN THIS STRING.
+C               KRET       - ERROR RETURN CODE.
+C                            0   , NO ERROR ENCOUNTERED.
+C                            1   , TARGET STRING TOO SHORT.
+C
+C     METHOD.
+C     -------
+C
+C           UNPACKED DATA IS IN SELF DEFINING RECORDS. THE REQUIRED
+C           VALUES ARE LOCATED AND EXTRACTED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C           SEE MARS FORMAT DOCUMENTATION RE GRIB, PSEUDO-GRIB AND
+C           UNPACKED FORMATS.
+C
+C     COMMENTS.
+C     ---------
+C
+C           PROGRAM CONTAINS SECTIONS 0 TO 2 AND SECTION 9.
+C
+C     AUTHOR.
+C     -------
+C
+C           J. HENNESSY      ECMWF      18:06:86.
+C
+C     MODIFICATIONS
+C     --------------
+C           NONE.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARRAY(*)
+C
+      CHARACTER*(*) HCHD
+C
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETCHD : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C     --------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . EXTRACT VALUES . PRINT IF REQUIRED.
+C     -----------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETCHD : SECTION 2.'
+C
+      ILIB1 = KARRAY(2)
+      ILIB2 = KARRAY(2+ILIB1+1)
+      ILFB2 = KARRAY(2+ILIB1+1+ILIB2+1)
+      ILIB3 = KARRAY(2+ILIB1+1+ILIB2+1+ILFB2+1)
+      KLCHD = KARRAY(2+ILIB1+1+ILIB2+1+ILFB2+1+ILIB3+1)
+C
+      IF (KLENG.LT.KLCHD)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLCHD
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLCHD
+         IVAL    = KARRAY(J+2+ILIB1+1+ILIB2+1+ILFB2+1+ILIB3+1)
+         READ (IVAL,'(A1)') HCHD(J:J)
+ 2010 CONTINUE
+C
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETCHD : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETCHD : ERROR CODE = ',I3,'. TARGET STRING MUST BE',
+     C             ' AT LEAST ',I5,' CHARACTERS LONG.')
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/getfb2.F b/gribex/getfb2.F
new file mode 100755
index 0000000..ed78edf
--- /dev/null
+++ b/gribex/getfb2.F
@@ -0,0 +1,203 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETFB2 (KLFB2,PFB2,KLENG,KARRAY,KPR,KRET)
+C
+C---->
+C**** GETFB2 - Extract real values from section 2 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C           Get real values from section 2 of unpacked GRIB or
+C           Pseudo-grib records, retrieved from MARS.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GETFB2 (KLFB2,PFB2,KLENG,KARRAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               PFB2       - Array to receive section 2 values.
+C               KLENG      - Length of this array.
+C               KARRAY     - Array containing unpacked record.
+C               KPR        - Debug print switch.
+C                            0 , No printout.
+C                            1 , Debug printout.
+C                            2 , Print values extracted.
+C
+C               KRET       - Abort/no abort when error found.
+C                            0   , abort if error found.
+C                            Non-zero , no abort if error found.
+C
+C               Output parameters.
+C               ------------------
+C
+C               PFB2       - Array containing values from section 2.
+C               KLFB2      - Number of values in this array.
+C               KRET       - Error return code.
+C                            0   , No error encountered.
+C                            1   , Target array too small.
+C
+C     Method.
+C     -------
+C
+C           Unpacked data is in self defining records. The required
+C           values are located and extracted.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           See MARS format documentation re GRIB, Pseudo-grib and
+C           unpacked formats.
+C
+C     Comments.
+C     ---------
+C
+C           Subroutine contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18:06:86.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARRAY(*)
+      DIMENSION PFB2(KLENG)
+C
+      EQUIVALENCE (IVAL,ZVAL)
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETFB2 : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C     --------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . EXTRACT VALUES . PRINT IF REQUIRED.
+C     -----------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETFB2 : SECTION 2.'
+C
+      ILIB1 = KARRAY(2)
+      ILIB2 = KARRAY(2+ILIB1+1)
+      KLFB2 = KARRAY(2+ILIB1+1+ILIB2+1)
+C
+      IF (KLENG.LT.KLFB2)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLFB2
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLFB2
+         IVAL    = KARRAY(J+2+ILIB1+1+ILIB2+1)
+         PFB2(J) = ZVAL
+         IF (KPR.GT.0) WRITE (*,9501) ZVAL
+ 2010 CONTINUE
+C
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETFB2 : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETFB2 : ERROR CODE = ',I3,'. TARGET ARRAY MUST BE ',
+     C             ' AT LEAST ',I5,' WORDS LONG.')
+C
+ 9501 FORMAT (1H ,F30.8)
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/getfpd.F b/gribex/getfpd.F
new file mode 100755
index 0000000..6ad5c8f
--- /dev/null
+++ b/gribex/getfpd.F
@@ -0,0 +1,205 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETFPD (KFPD,PFPD,KLEN,KARAY,KPR,KRET)
+C
+C---->
+C**** GETFPD - Extract data from unpacked GRIB record.
+C
+C     Purpose.
+C     --------
+C
+C           Get floating point data from record of unpacked GRIB
+C           or Pseudo-grib data.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GETFPD (KFPD,PFPD,KLEN,KARAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               PFPD       - Array to receive floating point data.
+C               KLEN       - Length of this array.
+C               KARAY      - Array containing unpacked record.
+C
+C
+C               KPR        - Debug print switch.
+C                            0 , No printout.
+C                            1 , Debug printout.
+C
+C               KRET       - Abort/no abort when error found.
+C                            0   , Abort if error found.
+C                            Non-zero , no abort on error.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KRET       - Error return code.
+C                            0   , No error encountered.
+C                            1   , Target array too small.
+C
+C               PFPD       - Floating point data.
+C               KFPD       - Number of values in this array.
+C
+C     Method.
+C     -------
+C
+C           Unpacked data is in self-defining records. The required
+C           values are located and extracted.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           See MARS format documentation re GRIB, Pseudo-grib and
+C           unpacked record formats.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18:06:86.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ----------------------------------------------------------------
+C---->
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARAY(*)
+      DIMENSION PFPD(KLEN)
+C
+      EQUIVALENCE (IVAL,ZVAL)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETFPD : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C
+C*    GO TO SECTION 9 , IF ERROR IN PARAMETERS.
+C
+      IF (KRET.NE.0) GO TO 9000
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . LOCATE AND EXTRACT VALUES.
+C     ----------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETFPD : SECTION 2.'
+C
+      ILB1 = KARAY(2)
+      ILB2 = KARAY(2+ILB1+1)
+      ILF2 = KARAY(2+ILB1+1+ILB2+1)
+      ILB3 = KARAY(2+ILB1+1+ILB2+1+ILF2+1)
+      ILCD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1)
+      KFPD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1)
+C
+      IF (KLEN.LT.KFPD)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KFPD
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KFPD
+         IVAL    = KARAY(J+2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1)
+         PFPD(J) = ZVAL
+ 2010 CONTINUE
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETFPD : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETFPD : ERROR CODE = ',I3,'. TARGET ARRAY MUST ',
+     C            'BE AT LEAST ',I5,' WORDS LONG.')
+C
+C
+C     ---------------------------------------------------------------
+C
+C
+      END
+C
diff --git a/gribex/getib1.F b/gribex/getib1.F
new file mode 100755
index 0000000..37c72af
--- /dev/null
+++ b/gribex/getib1.F
@@ -0,0 +1,194 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETIB1 (KLIB1,KIB1,KLENG,KARRAY,KPR,KRET)
+C
+C---->
+C**** GETIB1 - Get values from section 1 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C           Get integer values from section 1 of unpacked GRIB or
+C           pseudo-GRIB records, retrieved from MARS.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GETIB1 (KLIB1,KIB1,KLENG,KARRAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               KIB1       - Array to receive section 1 values.
+C               KLENG      - Length of this array.
+C               KARRAY     - Array containing unpacked record.
+C               KPR        - Debug print switch.
+C                            0 , No printout.
+C                            1 , Debug printout.
+C                            2 , Print section 1 values.
+C
+C               KRET       - Abort/no abort when error found.
+C                            0   , Abort if error found.
+C                            Non-zero , no abort when error found.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KIB1       - Array containing values from section 1.
+C               KLIB1      - Number of values in this array.
+C               KRET       - Error return code.
+C                            0   , No error encountered.
+C                            1   , Target array too small.
+C
+C     Method.
+C     -------
+C
+C           Unpacked data is in self defining records. The required
+C           values are located and extracted.
+C
+C     Externals.
+C     ----------
+C
+C           PRTBK1
+C
+C     Reference.
+C     ----------
+C
+C           See MARS format documentation re GRIB, pseudo-GRIB and
+C           unpacked formats.
+C
+C     Comments.
+C     ---------
+C
+C           Program contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18:06:86.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARRAY(*)
+      DIMENSION KIB1(KLENG)
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values. Check input parameters.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB1 : Section 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Extract values . Print if required.
+C     -----------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB1 : Section 2.'
+C
+      KLIB1 = KARRAY(2)
+C
+      IF (KLENG.LT.KLIB1)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLIB1
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLIB1
+         KIB1(J) = KARRAY(J+2)
+ 2010 CONTINUE
+C
+      IF (KPR.GT.0) CALL PRTBK1(KIB1)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine or abort. Format statements.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB1 : Section 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETIB1 : Error code = ',I3,'. Target array must be ',
+     C             ' at least ',I5,' words long.')
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/getib2.F b/gribex/getib2.F
new file mode 100755
index 0000000..833c2bc
--- /dev/null
+++ b/gribex/getib2.F
@@ -0,0 +1,197 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETIB2 (KLIB2,KIB2,KLENG,KARRAY,KPR,KRET)
+C
+C---->
+C**** GETIB2 - Extract integer values from section 2 of GRIB record.
+C
+C     Purpose.
+C     --------
+C
+C           Get integer values from section 2 of unpacked GRIB or
+C           Pseudo-grib records, retrieved from MARS.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GETIB2 (KLIB2,KIB2,KLENG,KARRAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               KIB2       - Array to receive section 2 values.
+C               KLENG      - Length of this array.
+C               KARRAY     - Array containing unpacked record.
+C               KPR        - Debug print switch.
+C                            0 , No printout.
+C                            1 , Debug printout.
+C                            2 , Print section 2 values.
+C
+C               KRET       - Abort/no abort when error found.
+C                            0   , Abort if error found.
+C                            Non-zero , no abort if error found.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KIB2       - Array containing values from section 2.
+C               KLIB2      - Number of values in this array.
+C               KRET       - Error return code.
+C                            0   , No error encountered.
+C                            1   , Target array too small.
+C
+C     Method.
+C     -------
+C
+C           Unpacked data is in self defining records. The required
+C           values are located and extracted.
+C
+C     Externals.
+C     ----------
+C
+C           PRTBK2
+C
+C     Reference.
+C     ----------
+C
+C           See MARS format documentation re GRIB, Pseudo-grib and
+C           unpacked formats.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains sections 0 to 2 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18:06:86.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARRAY(*)
+      DIMENSION KIB2(KLENG)
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB2 : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C     --------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . EXTRACT VALUES . PRINT IF REQUIRED.
+C     -----------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB2 : SECTION 2.'
+C
+      ILIB1 = KARRAY(2)
+      KLIB2 = KARRAY(2+ILIB1+1)
+C
+      IF (KLENG.LT.KLIB2)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLIB2
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLIB2
+         KIB2(J) = KARRAY(J+2+ILIB1+1)
+ 2010 CONTINUE
+C
+      IF (KPR.GT.0) CALL PRTBK2(KIB2)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB2 : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETIB2 : ERROR CODE = ',I3,'. TARGET ARRAY MUST BE ',
+     C             ' AT LEAST ',I5,' WORDS LONG.')
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/getib3.F b/gribex/getib3.F
new file mode 100755
index 0000000..2434697
--- /dev/null
+++ b/gribex/getib3.F
@@ -0,0 +1,199 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETIB3 (KLIB3,KIB3,KLENG,KARRAY,KPR,KRET)
+C
+C---->
+C     ----------------------------------------------------------------
+C
+C****
+C
+C     PURPOSE.
+C     --------
+C
+C           GET BINARY VALUES FROM BLOCK 3 OF UNPACKED GRIB OR
+C           PSEUDO-GRIB RECORDS, RETRIEVED FROM MARS.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL GETIB3 (KLIB3,KIB3,KLENG,KARRAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               KIB3       - ARRAY TO RECEIVE BLOCK 3 VALUES.
+C               KLENG      - LENGTH OF THIS ARRAY.
+C               KARRAY     - ARRAY CONTAINING UNPACKED RECORD.
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               KRET       - ABORT/NO ABORT WHEN ERROR FOUND.
+C                            0   , ABORT IF ERROR FOUND.
+C                            NON-ZERO , NO ABORT IF ERROR FOUND.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               KIB3       - ARRAY CONTAINING VALUES FROM BLOCK 3.
+C               KLIB3      - NUMBER OF WORDS FILLED IN THIS ARRAY.
+C               KRET       - ERROR RETURN CODE.
+C                            0   , NO ERROR ENCOUNTERED.
+C                            1   , TARGET ARRAY TOO SMALL.
+C
+C     METHOD.
+C     -------
+C
+C           UNPACKED DATA IS IN SELF DEFINING RECORDS. THE REQUIRED
+C           VALUES ARE LOCATED AND EXTRACTED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C           SEE MARS FORMAT DOCUMENTATION RE GRIB, PSEUDO-GRIB AND
+C           UNPACKED FORMATS.
+C
+C     COMMENTS.
+C     ---------
+C
+C           PROGRAM CONTAINS SECTIONS 0 TO 2 AND SECTION 9.
+C
+C     AUTHOR.
+C     -------
+C
+C           J. HENNESSY      ECMWF      18:06:86.
+C
+C     MODIFICATIONS
+C     --------------
+C           NONE.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARRAY(*)
+      DIMENSION KIB3(KLENG)
+C
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB3 : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C     --------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . EXTRACT VALUES . PRINT IF REQUIRED.
+C     -----------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB3 : SECTION 2.'
+C
+      ILIB1 = KARRAY(2)
+      ILIB2 = KARRAY(2+ILIB1+1)
+      ILFB2 = KARRAY(2+ILIB1+1+ILIB2+1)
+      KLIB3 = KARRAY(2+ILIB1+1+ILIB2+1+ILFB2+1)
+C
+      IF (KLENG.LT.KLIB3)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLIB3
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLIB3
+         KIB3(J) = KARRAY(J+2+ILIB1+1+ILIB2+1+ILFB2+1)
+ 2010 CONTINUE
+C
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIB3 : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETIB3 : ERROR CODE = ',I3,'. TARGET ARRAY MUST BE ',
+     C             ' AT LEAST ',I5,' WORDS LONG.')
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/getind.F b/gribex/getind.F
new file mode 100755
index 0000000..2963545
--- /dev/null
+++ b/gribex/getind.F
@@ -0,0 +1,201 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETIND (KLND,KIND,KLEN,KARAY,KPR,KRET)
+C
+C---->
+C     ----------------------------------------------------------------
+C
+C****
+C
+C     PURPOSE.
+C     --------
+C
+C           GET INTEGER DATA FROM RECORD OF UNPACKED GRIB
+C           OR PSEUDO-GRIB DATA.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL GETIND (KLND,KIND,KLEN,KARAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               KIND       - ARRAY TO RECEIVE INTEGER DATA.
+C               KLEN       - LENGTH OF THIS ARRAY.
+C               KARAY      - ARRAY CONTAINING UNPACKED RECORD.
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               KRET       - ABORT/NO ABORT WHEN ERROR FOUND.
+C                            0   , ABORT IF ERROR FOUND.
+C                            NON-ZERO , NO ABORT ON ERROR.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               KRET       - ERROR RETURN CODE.
+C                            0   , NO ERROR ENCOUNTERED.
+C                            1   , TARGET ARRAY TOO SMALL.
+C               KIND       - INTEGER DATA.
+C               KLND       - NUMBER OF VALUES IN THIS ARRAY.
+C
+C     METHOD.
+C     -------
+C
+C           UNPACKED DATA IS IN SELF-DEFINING RECORDS. THE REQUIRED
+C           VALUES ARE LOCATED AND EXTRACTED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C           SEE MARS FORMAT DOCUMENTATION RE GRIB, PSEUDO-GRIB AND
+C           UNPACKED RECORD FORMATS.
+C
+C     COMMENTS.
+C     ---------
+C
+C           PROGRAM CONTAINS SECTIONS 0 TO 2 AND SECTION 9.
+C
+C     AUTHOR.
+C     -------
+C
+C           J. HENNESSY      ECMWF      18:06:86.
+C
+C     MODIFICATIONS
+C     --------------
+C           NONE.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARAY(*)
+      DIMENSION KIND(KLEN)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIND : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C
+C*    GO TO SECTION 9 , IF ERROR IN PARAMETERS.
+C
+      IF (KRET.NE.0) GO TO 9000
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . LOCATE AND EXTRACT VALUES.
+C     --------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIND : SECTION 2.'
+C
+      ILB1 = KARAY(2)
+      ILB2 = KARAY(2+ILB1+1)
+      ILF2 = KARAY(2+ILB1+1+ILB2+1)
+      ILB3 = KARAY(2+ILB1+1+ILB2+1+ILF2+1)
+      ILCD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1)
+      ILFD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1)
+      KLND = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1+ILFD+1)
+C
+      IF (KLEN.LT.KLND)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLND
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLND
+         KIND(J) = KARAY(J+2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1+ILFD+1)
+ 2010 CONTINUE
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETIND : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETIND : ERROR CODE = ',I3,'. TARGET ARRAY MUST ',
+     C            'BE AT LEAST ',I5,' WORDS LONG.')
+C
+C
+C     ---------------------------------------------------------------
+C
+C
+      END
+C
diff --git a/gribex/getlgd.F b/gribex/getlgd.F
new file mode 100755
index 0000000..9e72b0f
--- /dev/null
+++ b/gribex/getlgd.F
@@ -0,0 +1,205 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GETLGD (KLGD,OLND,KLEN,KARAY,KPR,KRET)
+C
+C---->
+C     ----------------------------------------------------------------
+C
+C****
+C
+C     PURPOSE.
+C     --------
+C
+C           GET LOGICAL DATA FROM RECORD OF UNPACKED GRIB
+C           OR PSEUDO-GRIB DATA.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL GETLGD (KLGD,OLND,KLEN,KARAY,KPR,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               OLND       - ARRAY TO RECEIVE LOGICAL DATA.
+C               KLEN       - LENGTH OF THIS ARRAY.
+C               KARAY      - ARRAY CONTAINING UNPACKED RECORD.
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               KRET       - ABORT/NO ABORT WHEN ERROR FOUND.
+C                            0   , ABORT IF ERROR FOUND.
+C                            NON-ZERO , NO ABORT ON ERROR.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               KRET       - ERROR RETURN CODE.
+C                            0   , NO ERROR ENCOUNTERED.
+C                            1   , TARGET ARRAY TOO SMALL.
+C               OLND       - LOGICAL DATA.
+C               KLGD       - NUMBER OF VALUES IN THIS ARRAY.
+C
+C     METHOD.
+C     -------
+C
+C           UNPACKED DATA IS IN SELF-DEFINING RECORDS. THE REQUIRED
+C           VALUES ARE LOCATED AND EXTRACTED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           NONE.
+C
+C     REFERENCE.
+C     ----------
+C
+C           SEE MARS FORMAT DOCUMENTATION RE GRIB, PSEUDO-GRIB AND
+C           UNPACKED RECORD FORMATS.
+C
+C     COMMENTS.
+C     ---------
+C
+C           PROGRAM CONTAINS SECTIONS 0 TO 2 AND SECTION 9.
+C
+C     AUTHOR.
+C     -------
+C
+C           J. HENNESSY      ECMWF      18:06:86.
+C
+C     MODIFICATIONS
+C     --------------
+C           NONE.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES.
+C     ------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      DIMENSION KARAY(*)
+      DIMENSION OLND(KLEN)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . SET INITIAL VALUES. CHECK INPUT PARAMETERS.
+C     -------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETLGD : SECTION 1.'
+C
+      IRET = KRET
+      KRET = 0
+C
+C
+C*    GO TO SECTION 9 , IF ERROR IN PARAMETERS.
+C
+      IF (KRET.NE.0) GO TO 9000
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . LOCATE AND EXTRACT VALUES.
+C     --------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETLGD : SECTION 2.'
+C
+      ILB1 = KARAY(2)
+      ILB2 = KARAY(2+ILB1+1)
+      ILF2 = KARAY(2+ILB1+1+ILB2+1)
+      ILB3 = KARAY(2+ILB1+1+ILB2+1+ILF2+1)
+      ILCD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1)
+      ILFD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1)
+      ILID = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1+ILFD+1)
+      KLGD = KARAY(2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1+ILFD+1+ILID+1)
+C
+      IF (KLEN.LT.KLGD)
+     C   THEN
+             KRET = 1
+             WRITE (*,9001) KRET , KLGD
+             GO TO 9000
+         ENDIF
+C
+      DO 2010 J=1,KLGD
+         IVAL    = KARAY(J+2+ILB1+1+ILB2+1+ILF2+1+ILB3+1+ILCD+1+ILFD+1
+     C                    +KLGD+1)
+         OLND(J) = .FALSE.
+         IF (IVAL.EQ.1) OLND(J) = .TRUE.
+ 2010 CONTINUE
+C
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE OR ABORT. FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'GETLGD : SECTION 9.'
+C
+      IF (KRET.NE.0.AND.IRET.EQ.0) CALL ABORT
+C
+      RETURN
+C
+C
+ 9001 FORMAT (1H ,'GETLGD : ERROR CODE = ',I3,'. TARGET ARRAY MUST ',
+     C            'BE AT LEAST ',I5,' WORDS LONG.')
+C
+C
+C     ---------------------------------------------------------------
+C
+C
+      END
+C
diff --git a/gribex/getsetValues.c b/gribex/getsetValues.c
new file mode 100755
index 0000000..6691739
--- /dev/null
+++ b/gribex/getsetValues.c
@@ -0,0 +1,449 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include "getsetValues.h"
+
+void copyNameLoc(
+  unsigned char* copy,
+  unsigned char* original,
+  int copyLength,
+  int originalLength) {
+int length;
+unsigned char *p;
+
+  length = (originalLength>copyLength)?copyLength:originalLength;
+  memcpy(copy,original,length);
+  copy[length] = '\0';
+
+  p = copy + length - 1;
+  while( *p == ' ' ) *(p--) = '\0';
+
+  return;
+}
+
+fortint GETINT(
+  gribProduct** grib,
+  unsigned char* request,
+  long requestLength ) { 
+int index;
+int listLength = sizeof(despatchInteger)/sizeof(despatchI);
+unsigned char Request[80];
+
+  copyNameLoc(Request,request,(int)sizeof(Request),(int)requestLength);
+
+  index = binaryChopI(despatchInteger,listLength,Request);
+  if( index < 0 )
+    return -999999;
+  else {
+    return despatchInteger[index].get(grib);
+  }
+}
+
+fortint getIntegerValue(
+  gribProduct** grib,
+  unsigned char* request ){
+
+  return GETINT(grib,request,(long)strlen((char*)request));
+}
+
+fortdouble GETREAL(
+  gribProduct** grib,
+  unsigned char* request,
+  long requestLength ) { 
+int index;
+int listLength = sizeof(despatchReal)/sizeof(despatchR);
+unsigned char Request[80];
+
+  copyNameLoc(Request,request,(int)sizeof(Request),(int)requestLength);
+
+  index = binaryChopR(despatchReal,listLength,Request);
+  if( index < 0 )
+    return -999999.0;
+  else {
+    return despatchReal[index].get(grib);
+  }
+}
+
+fortdouble getRealValue(
+  gribProduct** grib,
+  unsigned char* request ) {
+
+  return GETREAL(grib,request,(long)strlen((char*)request));
+}
+
+fortint IGNWLAT(gribProduct** grib) {
+fortdouble value = RGNWLAT(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGNWLON(gribProduct** grib) {
+fortdouble value = RGNWLON(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGSELAT(gribProduct** grib) {
+fortdouble value = RGSELAT(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGSELON(gribProduct** grib) {
+fortdouble value = RGSELON(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGDI(gribProduct** grib) {
+fortdouble value = RGDI(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGDJ(gribProduct** grib) {
+fortdouble value = RGDJ(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGIP(gribProduct** grib) {
+fortdouble value = RGIP(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLATRP(gribProduct** grib) {
+fortdouble value = RGLATRP(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLONRP(gribProduct** grib) {
+fortdouble value = RGLONRP(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGROTAT(gribProduct** grib) {
+fortdouble value = RGROTAT(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLATSP(gribProduct** grib) {
+fortdouble value = RGLATSP(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGLONSP(gribProduct** grib) {
+fortdouble value = RGLONSP(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGSFACT(gribProduct** grib) {
+fortdouble value = RGSFACT(grib);
+
+  if( value != -999999.0 )
+    return (fortint)(1000000.0 * value);
+  else
+    return -999999;
+}
+
+fortint IGREFVL(gribProduct** grib) {
+  return (fortint)(1000000.0 * RGREFVL(grib));
+}
+
+fortint IGDSCAL(gribProduct** grib) {
+  return (fortint)(1000000.0 * RGDSCAL(grib));
+}
+
+fortdouble RGLNGTH(gribProduct** grib) {
+  return (fortdouble) IGLNGTH(grib);
+}
+
+fortdouble RGTABLE(gribProduct** grib) {
+  return (fortdouble) IGTABLE(grib);
+}
+
+fortdouble RGCENTR(gribProduct** grib) {
+  return (fortdouble) IGCENTR(grib);
+}
+
+fortdouble RGPARAM(gribProduct** grib) {
+  return (fortdouble) IGPARAM(grib);
+}
+
+fortdouble RGLEVEL(gribProduct** grib) {
+  return (fortdouble) IGLEVEL(grib);
+}
+
+fortdouble RGLEVL1(gribProduct** grib) {
+  return (fortdouble) IGLEVL1(grib);
+}
+
+fortdouble RGLEVL2(gribProduct** grib) {
+  return (fortdouble) IGLEVL2(grib);
+}
+
+fortdouble RGDATE(gribProduct** grib) {
+  return (fortdouble) IGDATE(grib);
+}
+
+fortdouble RGTIME(gribProduct** grib) {
+  return (fortdouble) IGTIME(grib);
+}
+
+fortdouble RGSTEP(gribProduct** grib) {
+  return (fortdouble) IGSTEP(grib);
+}
+
+fortdouble RGSTEP1(gribProduct ** grib) {
+  return (fortdouble) IGSTEP1(grib);
+}
+
+fortdouble RGSTEP2(gribProduct ** grib) {
+  return (fortdouble) IGSTEP2(grib);
+}
+
+fortdouble RGDEFIN(gribProduct** grib) {
+  return (fortdouble) IGDEFIN(grib);
+}
+
+fortdouble RGCLASS(gribProduct** grib) {
+  return (fortdouble) IGCLASS(grib);
+}
+
+fortdouble RGTYPE(gribProduct** grib) {
+  return (fortdouble) IGTYPE(grib);
+}
+
+fortdouble RGSTREM(gribProduct** grib) {
+  return (fortdouble) IGSTREM(grib);
+}
+
+fortdouble RGEXPVR(gribProduct** grib) {
+  return (fortdouble) IGEXPVR(grib);
+}
+
+fortdouble RGNUMPV(gribProduct** grib) {
+  return (fortdouble) IGNUMPV(grib);
+}
+
+fortdouble RGREPRS(gribProduct** grib) {
+  return (fortdouble) IGREPRS(grib);
+}
+
+fortdouble RGNI(gribProduct** grib) {
+  return (fortdouble) IGNI(grib);
+}
+
+fortdouble RGNJ(gribProduct** grib) {
+  return (fortdouble) IGNJ(grib);
+}
+
+fortdouble RGRESCO(gribProduct** grib) {
+  return (fortdouble) IGRESCO(grib);
+}
+
+fortdouble RGGAUSS(gribProduct** grib) {
+  return (fortdouble) IGGAUSS(grib);
+}
+
+fortdouble RGSCANM(gribProduct** grib) {
+  return (fortdouble) IGSCANM(grib);
+}
+
+fortdouble RGJ(gribProduct** grib) {
+  return (fortdouble) IGJ(grib);
+}
+
+fortdouble RGK(gribProduct** grib) {
+  return (fortdouble) IGK(grib);
+}
+
+fortdouble RGM(gribProduct** grib) {
+  return (fortdouble) IGM(grib);
+}
+
+fortdouble RGREPMO(gribProduct** grib) {
+  return (fortdouble) IGREPMO(grib);
+}
+
+fortdouble RGTJ(gribProduct** grib) {
+  return (fortdouble) IGTJ(grib);
+}
+
+fortdouble RGTK(gribProduct** grib) {
+  return (fortdouble) IGTK(grib);
+}
+
+fortdouble RGTM(gribProduct** grib) {
+  return (fortdouble) IGTM(grib);
+}
+
+fortdouble RGBTSPV(gribProduct** grib) {
+  return (fortdouble) IGBTSPV(grib);
+}
+
+fortdouble RGUNUSD(gribProduct** grib) {
+  return (fortdouble) IGUNUSD(grib);
+}
+
+fortdouble RGNVALU(gribProduct** grib) {
+  return (fortdouble) IGNVALU(grib);
+}
+
+int binaryChopI(despatchI * list, int listLength, unsigned char * test) {
+int current, oldCurrent = -1;
+int direction, startRange = 0, endRange = listLength;
+
+  do {
+    current = (startRange + endRange)/2;
+
+    if( current == oldCurrent) break;
+
+    direction = strcmp((char*)test,(char*)(*(list+current)).name);
+
+    if( direction == 0 ) return current;
+
+    if( direction < 0 )
+      endRange = current;
+    else
+      startRange = current;
+
+    oldCurrent = current;
+  } while( startRange <= endRange );
+
+  return -1;
+}
+
+int binaryChopR(despatchR * list, int listLength, unsigned char * test) {
+int current, oldCurrent = -1;
+int direction, startRange = 0, endRange = listLength;
+
+  do {
+    current = (startRange + endRange)/2;
+
+    if( current == oldCurrent) break;
+
+    direction = strcmp((char*)test,(char*)(*(list+current)).name);
+
+    if( direction == 0 ) return current;
+
+    if( direction < 0 )
+      endRange = current;
+    else
+      startRange = current;
+
+    oldCurrent = current;
+  } while( startRange <= endRange );
+
+  return -1;
+}
+
+fortint setIntegerValue(
+  gribProduct** grib,
+  unsigned char* request,
+  fortint * value )
+{
+  return SETINT(grib,request,value,(long)strlen((char*)request));
+}
+
+fortint SETINT(
+  gribProduct** grib,
+  unsigned char* request,
+  fortint * value,
+  long requestLength )
+{ 
+int index;
+int listLength = sizeof(despatchInteger)/sizeof(despatchI);
+unsigned char Request[80];
+
+  copyNameLoc(Request,request,(int)sizeof(Request),(int)requestLength);
+
+  index = binaryChopI(despatchInteger,listLength,Request);
+  if( index < 0 )
+    return -999999;
+  else {
+    despatchInteger[index].set(grib,value);
+    return 0;
+  }
+}
+
+fortint setRealValue(
+  gribProduct** grib,
+  unsigned char* request,
+  fortdouble * value ) {
+
+  return SETREAL(grib,request,value,strlen((char*)request));
+}
+
+fortint SETREAL(
+  gribProduct** grib,
+  unsigned char* request,
+  fortdouble * value,
+  long requestLength ) { 
+int index;
+int listLength = sizeof(despatchReal)/sizeof(despatchR);
+unsigned char Request[80];
+
+  copyNameLoc(Request,request,(int)sizeof(Request),(int)requestLength);
+
+  index = binaryChopR(despatchReal,listLength,Request);
+  if( index < 0 )
+    return -999999.0;
+  else {
+    despatchReal[index].set(grib,value);
+    return 0;
+  }
+}
diff --git a/gribex/getsetValues.h b/gribex/getsetValues.h
new file mode 100755
index 0000000..f8d797d
--- /dev/null
+++ b/gribex/getsetValues.h
@@ -0,0 +1,389 @@
+#ifndef GETVALUES_H
+#define GETVALUES_H
+
+#include "gdecode.h"
+#include "gdecode1.h"
+#include "gdecode2.h"
+
+#include "sencode.h"
+#include "sencode1.h"
+#include "sencode2.h"
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define GETINT  getint
+#define GETREAL getreal
+#define SETINT  setint
+#define SETREAL setreal
+#else
+#define GETINT  getint_
+#define GETREAL getreal_
+#define SETINT  setint_
+#define SETREAL setreal_
+#endif
+
+fortint    getIntegerValue(gribProduct**,unsigned char*);
+fortdouble getRealValue(gribProduct**,unsigned char*);
+fortint    GETINT(gribProduct**,unsigned char*,long);
+fortdouble GETREAL(gribProduct**,unsigned char*,long);
+
+fortint setIntegerValue(gribProduct**,unsigned char*,fortint*);
+fortint setRealValue(gribProduct**,unsigned char*,fortdouble*);
+fortint SETINT(gribProduct**,unsigned char*,fortint*,long);
+fortint SETREAL(gribProduct**,unsigned char*,fortdouble*,long);
+
+fortint IGNWLAT(gribProduct**);
+fortint IGNWLON(gribProduct**);
+fortint IGSELAT(gribProduct**);
+fortint IGSELON(gribProduct**);
+fortint IGDI(gribProduct**);
+fortint IGDJ(gribProduct**);
+fortint IGIP(gribProduct**);
+fortint IGLATRP(gribProduct**);
+fortint IGLONRP(gribProduct**);
+fortint IGROTAT(gribProduct**);
+fortint IGLATSP(gribProduct**);
+fortint IGLONSP(gribProduct**);
+fortint IGSFACT(gribProduct**);
+fortint IGREFVL(gribProduct**);
+fortint IGDSCAL(gribProduct**);
+fortint IGLEVTY(gribProduct**);
+fortint IGTUNIT(gribProduct**);
+fortint IGTRIND(gribProduct**);
+fortint IGSTEP(gribProduct**);
+fortint IGSTEP1(gribProduct**);
+fortint IGSTEP2(gribProduct**);
+fortint IGNUMAV(gribProduct**);
+fortint IGNUMMS(gribProduct**);
+fortint IGSUBID(gribProduct**);
+fortint IGUDECF(gribProduct**);
+fortint IGTYPE(gribProduct**);
+fortint IGCLASS(gribProduct**);
+fortint IGSTREM(gribProduct**);
+fortint IGEXPVR(gribProduct**);
+fortint IGDEFIN(gribProduct**);
+fortint IGDUMMY(gribProduct**);
+
+fortdouble RGLNGTH(gribProduct**);
+fortdouble RGTABLE(gribProduct**);
+fortdouble RGCENTR(gribProduct**);
+fortdouble RGPARAM(gribProduct**);
+fortdouble RGLEVEL(gribProduct**);
+fortdouble RGLEVL1(gribProduct**);
+fortdouble RGLEVL2(gribProduct**);
+fortdouble RGDATE(gribProduct**);
+fortdouble RGTIME(gribProduct**);
+fortdouble RGSTEP(gribProduct**);
+fortdouble RGSTEP1(gribProduct**);
+fortdouble RGSTEP2(gribProduct**);
+fortdouble RGCLASS(gribProduct**);
+fortdouble RGTYPE(gribProduct**);
+fortdouble RGSTREM(gribProduct**);
+fortdouble RGEXPVR(gribProduct**);
+fortdouble RGNUMPV(gribProduct**);
+fortdouble RGREPRS(gribProduct**);
+fortdouble RGNI(gribProduct**);
+fortdouble RGNJ(gribProduct**);
+fortdouble RGRESCO(gribProduct**);
+fortdouble RGGAUSS(gribProduct**);
+fortdouble RGSCANM(gribProduct**);
+fortdouble RGJ(gribProduct**);
+fortdouble RGK(gribProduct**);
+fortdouble RGM(gribProduct**);
+fortdouble RGREPMO(gribProduct**);
+fortdouble RGTJ(gribProduct**);
+fortdouble RGTK(gribProduct**);
+fortdouble RGTM(gribProduct**);
+fortdouble RGBTSPV(gribProduct**);
+fortdouble RGUNUSD(gribProduct**);
+fortdouble RGNVALU(gribProduct**);
+fortdouble RGLEVTY(gribProduct**);
+fortdouble RGTUNIT(gribProduct**);
+fortdouble RGTRIND(gribProduct**);
+fortdouble RGNUMAV(gribProduct**);
+fortdouble RGNUMMS(gribProduct**);
+fortdouble RGSUBID(gribProduct**);
+fortdouble RGUDECF(gribProduct**);
+fortdouble RGTYPE(gribProduct**);
+fortdouble RGDEFIN(gribProduct**);
+fortdouble RGDUMMY(gribProduct**);
+
+fortint ISDUMMY(gribProduct **, fortint *);
+fortint RSDUMMY(gribProduct **, fortdouble *);
+fortint RSDATE(gribProduct **, fortdouble *);
+fortint ISDATE(gribProduct **, fortint *);
+fortint RSTIME(gribProduct **, fortdouble *);
+fortint ISTIME(gribProduct **, fortint *);
+fortint RSTABLE(gribProduct **, fortdouble *);
+fortint ISTABLE(gribProduct **, fortint *);
+fortint RSCENTR(gribProduct **, fortdouble *);
+fortint ISCENTR(gribProduct **, fortint *);
+fortint RSPARAM(gribProduct **, fortdouble *);
+fortint ISPARAM(gribProduct **, fortint *);
+fortint RSLEVTY(gribProduct **, fortdouble *);
+fortint ISLEVTY(gribProduct **, fortint *);
+fortint RSLEVEL(gribProduct **, fortdouble *);
+fortint ISLEVEL(gribProduct **, fortint *);
+fortint RSLEVEL(gribProduct **, fortdouble *);
+fortint ISLEVEL(gribProduct **, fortint *);
+fortint RSTUNIT(gribProduct **, fortdouble *);
+fortint ISTUNIT(gribProduct **, fortint *);
+fortint RSTRIND(gribProduct **, fortdouble *);
+fortint ISTRIND(gribProduct **, fortint *);
+fortint RSSTEP(gribProduct **, fortdouble *);
+fortint ISSTEP(gribProduct **, fortint *);
+fortint RSSTEP1(gribProduct **, fortdouble *);
+fortint ISSTEP1(gribProduct **, fortint *);
+fortint RSSTEP2(gribProduct **, fortdouble *);
+fortint ISSTEP2(gribProduct **, fortint *);
+fortint RSNUMAV(gribProduct **, fortdouble *);
+fortint ISNUMAV(gribProduct **, fortint *);
+fortint RSNUMMS(gribProduct **, fortdouble *);
+fortint ISNUMMS(gribProduct **, fortint *);
+fortint RSSUBID(gribProduct **, fortdouble *);
+fortint ISSUBID(gribProduct **, fortint *);
+fortint RSUDECF(gribProduct **, fortdouble *);
+fortint ISUDECF(gribProduct **, fortint *);
+fortint RSTYPE(gribProduct **, fortdouble *);
+fortint ISTYPE(gribProduct **, fortint *);
+fortint RSCLASS(gribProduct **, fortdouble *);
+fortint ISCLASS(gribProduct **, fortint *);
+fortint RSSTREM(gribProduct **, fortdouble *);
+fortint ISSTREM(gribProduct **, fortint *);
+fortint RSEXPVR(gribProduct **, fortdouble *);
+fortint ISEXPVR(gribProduct **, fortint *);
+fortint RSDEFIN(gribProduct **, fortdouble *);
+fortint ISDEFIN(gribProduct **, fortint *);
+fortint RSBTSPV(gribProduct **, fortdouble *);
+fortint ISBTSPV(gribProduct **, fortint *);
+fortint RSREPRS(gribProduct **, fortdouble *);
+fortint ISREPRS(gribProduct **, fortint *);
+fortint RSNWLAT(gribProduct **, fortdouble *);
+fortint ISNWLAT(gribProduct **, fortint *);
+fortint RSNWLON(gribProduct **, fortdouble *);
+fortint ISNWLON(gribProduct **, fortint *);
+fortint RSSELAT(gribProduct **, fortdouble *);
+fortint ISSELAT(gribProduct **, fortint *);
+fortint RSSELON(gribProduct **, fortdouble *);
+fortint ISSELON(gribProduct **, fortint *);
+fortint RSDIJ(gribProduct **, fortdouble *);
+fortint ISDIJ(gribProduct **, fortint *);
+fortint RSDI(gribProduct **, fortdouble *);
+fortint ISDI(gribProduct **, fortint *);
+fortint RSDJ(gribProduct **, fortdouble *);
+fortint ISDJ(gribProduct **, fortint *);
+fortint RSNI(gribProduct **, fortdouble *);
+fortint ISNI(gribProduct **, fortint *);
+fortint RSNJ(gribProduct **, fortdouble *);
+fortint ISNJ(gribProduct **, fortint *);
+fortint RSJ(gribProduct **, fortdouble *);
+fortint ISJ(gribProduct **, fortint *);
+fortint RSK(gribProduct **, fortdouble *);
+fortint ISK(gribProduct **, fortint *);
+fortint RSM(gribProduct **, fortdouble *);
+fortint ISM(gribProduct **, fortint *);
+fortint RSJKM(gribProduct **, fortdouble *);
+fortint ISJKM(gribProduct **, fortint *);
+fortint RSTJ(gribProduct **, fortdouble *);
+fortint ISTJ(gribProduct **, fortint *);
+fortint RSTK(gribProduct **, fortdouble *);
+fortint ISTK(gribProduct **, fortint *);
+fortint RSTM(gribProduct **, fortdouble *);
+fortint ISTM(gribProduct **, fortint *);
+fortint RSTJKM(gribProduct **, fortdouble *);
+fortint ISTJKM(gribProduct **, fortint *);
+fortint RSLATRP(gribProduct **, fortdouble *);
+fortint ISLATRP(gribProduct **, fortint *);
+fortint RSLONRP(gribProduct **, fortdouble *);
+fortint ISLONRP(gribProduct **, fortint *);
+fortint RSROTAT(gribProduct **, fortdouble *);
+fortint ISROTAT(gribProduct **, fortint *);
+fortint RSLATSP(gribProduct **, fortdouble *);
+fortint ISLATSP(gribProduct **, fortint *);
+fortint RSLONSP(gribProduct **, fortdouble *);
+fortint ISLONSP(gribProduct **, fortint *);
+fortint RSSFACT(gribProduct **, fortdouble *);
+fortint ISSFACT(gribProduct **, fortint *);
+fortint RSSETQG(gribProduct **, fortdouble *);
+fortint ISSETQG(gribProduct **, fortint *);
+fortint RSSETRG(gribProduct **, fortdouble *);
+fortint ISSETRG(gribProduct **, fortint *);
+
+fortint SPV(gribProduct **, fortdouble *, fortint *);
+
+typedef fortint (*geti) (gribProduct **);
+typedef fortdouble (*getf) (gribProduct **);
+typedef fortint (*seti) (gribProduct **, fortint *);
+typedef fortint (*setf) (gribProduct **, fortdouble *);
+
+typedef struct {
+  const char * name;
+  geti get;
+  seti set;
+} despatchI;
+
+typedef struct {
+  const char * name;
+  getf get;
+  setf set;
+} despatchR;
+
+despatchI despatchInteger[] = {
+  "angleOfRotation",IGROTAT,ISROTAT,
+  "bottomLayer",IGLEVL2,ISDUMMY,
+  "codeTable",IGTABLE,ISTABLE,
+  "complexPackingScalingFactor",IGIP,ISDUMMY,
+  "dataRepresentationType",IGREPRS,ISREPRS,
+  "date",IGDATE,ISDATE,
+  "definition1Number",IG1NUMB,IS1NUMB,
+  "definition1Total",IG1TOTL,IS1TOTL,
+  "definition2ControlForecastCluster",IG2CFCL,IS2CFCL,
+  "definition2DomainEast",IG2ELON,IS2ELON,
+  "definition2DomainNorth",IG2NLAT,IS2NLAT,
+  "definition2DomainSouth",IG2SLAT,IS2SLAT,
+  "definition2DomainWest",IG2WLON,IS2WLON,
+  "definition2EndStep",IG2END,IS2END,
+  "definition2Method",IG2METH,IS2METH,
+  "definition2Number",IG2NUMB,IS2NUMB,
+  "definition2NumberInCluster",IG2NUCL,IS2NUCL,
+  "definition2OperationalForecastCluster",IG2OPCL,IS2OPCL,
+  "definition2StartStep",IG2STAR,IS2STAR,
+  "definition2Total",IG2TOTL,IS2TOTL,
+  "ecmwfClass",IGCLASS,ISCLASS,
+  "ecmwfExperimentVersionNumber",IGEXPVR,ISEXPVR,
+  "ecmwfLocalDefinitionNumber",IGDEFIN,ISDEFIN,
+  "ecmwfStream",IGSTREM,ISSTREM,
+  "ecmwfType",IGTYPE,ISTYPE,
+  "gribLength",IGLNGTH,ISDUMMY,
+  "iAndjHaveTheSameIncrement",IGDUMMY,ISDIJ,
+  "iDirectionIncrement",IGDI,ISDI,
+  "jDirectionIncrement",IGDJ,ISDJ,
+  "jPentagonalResolution",IGJ,ISJ,
+  "jkmHaveSamePentagonalResolution",IGDUMMY,ISJKM,
+  "kPentagonalResolution",IGK,ISK,
+  "latitudeOfThePoleOfStretching",IGLATSP,ISLATSP,
+  "latitudeOfTheSouthernPoleOfRotation",IGLATRP,ISLATRP,
+  "longitudeOfThePoleOfStretching",IGLONSP,ISLONSP,
+  "longitudeOfTheSouthernPoleOfRotation",IGLONRP,ISLONRP,
+  "mPentagonalResolution",IGM,ISM,
+  "northWestLatitude",IGNWLAT,ISNWLAT,
+  "northWestLongitude",IGNWLON,ISNWLON,
+  "numberOfBitsPerPackedValue",IGBTSPV,ISBTSPV,
+  "numberOfFieldValues",IGNVALU,ISDUMMY,
+  "numberOfParallelsBetweenPoleAndEquator",IGGAUSS,ISDUMMY,
+  "numberOfPointsAlongMeridian",IGNJ,ISNJ,
+  "numberOfPointsAlongParallel",IGNI,ISNI,
+  "numberOfProductsInAverage",IGNUMAV,ISNUMAV,
+  "numberOfProductsMissingFromAverage",IGNUMMS,ISNUMMS,
+  "numberOfUnusedBitsAtEndOfSection4",IGUNUSD,ISDUMMY,
+  "numberOfVerticalCoordinateParameters",IGNUMPV,ISDUMMY,
+  "originatingCentre",IGCENTR,ISCENTR,
+  "parameter",IGPARAM,ISPARAM,
+  "pressureLevel",IGLEVEL,ISLEVEL,
+  "referenceValue",IGREFVL,ISDUMMY,
+  "representationMode",IGREPMO,ISDUMMY,
+  "resolutionAndComponentsFlag",IGRESCO,ISDUMMY,
+  "scaleFactorUsedToPackFieldValues",IGDSCAL,ISDUMMY,
+  "scanningModeFlag",IGSCANM,ISDUMMY,
+  "setReducedGaussianGridNumber",IGDUMMY,ISSETQG,
+  "setRegularGaussianGridNumber",IGDUMMY,ISSETRG,
+  "southEastLatitude",IGSELAT,ISSELAT,
+  "southEastLongitude",IGSELON,ISSELON,
+  "stretchingFactor",IGSFACT,ISSFACT,
+  "subcentreIdentifier",IGSUBID,ISSUBID,
+  "subsetJKMHaveSamePentagonalResolution",IGDUMMY,ISTJKM,
+  "subsetJPentagonalResolution",IGTJ,ISTJ,
+  "subsetKPentagonalResolution",IGTK,ISTK,
+  "subsetMPentagonalResolution",IGTM,ISTM,
+  "time",IGTIME,ISTIME,
+  "timeRangeIndicator",IGTRIND,ISTRIND,
+  "timeStep",IGSTEP,ISSTEP,
+  "timeStepP1",IGSTEP1,ISSTEP1,
+  "timeStepP2",IGSTEP2,ISSTEP2,
+  "timeUnit",IGTUNIT,ISTUNIT,
+  "topLayer",IGLEVL1,ISDUMMY,
+  "typeOfLevel",IGLEVTY,ISLEVTY,
+  "unitsDecimalScaleFactor",IGUDECF,ISUDECF
+};
+
+despatchR despatchReal[] = {
+  "angleOfRotation",RGROTAT,RSROTAT,
+  "bottomLayer",RGLEVL2,RSDUMMY,
+  "codeTable",RGTABLE,RSTABLE,
+  "complexPackingScalingFactor",RGIP,RSDUMMY,
+  "dataRepresentationType",RGREPRS,RSREPRS,
+  "date",RGDATE,RSDATE,
+  "definition1Number",RG1NUMB,RS1NUMB,
+  "definition1Total",RG1TOTL,RS1TOTL,
+  "definition2ControlForecastCluster",RG2CFCL,RS2CFCL,
+  "definition2DomainEast",RG2ELON,RS2ELON,
+  "definition2DomainNorth",RG2NLAT,RS2NLAT,
+  "definition2DomainSouth",RG2SLAT,RS2SLAT,
+  "definition2DomainWest",RG2WLON,RS2WLON,
+  "definition2EndStep",RG2END,RS2END,
+  "definition2Method",RG2METH,RS2METH,
+  "definition2Number",RG2NUMB,RS2NUMB,
+  "definition2NumberInCluster",RG2NUCL,RS2NUCL,
+  "definition2OperationalForecastCluster",RG2OPCL,RS2OPCL,
+  "definition2StartStep",RG2STAR,RS2STAR,
+  "definition2Total",RG2TOTL,RS2TOTL,
+  "ecmwfClass",RGCLASS,RSCLASS,
+  "ecmwfExperimentVersionNumber",RGEXPVR,RSEXPVR,
+  "ecmwfLocalDefinitionNumber",RGDEFIN,RSDEFIN,
+  "ecmwfStream",RGSTREM,RSSTREM,
+  "ecmwfType",RGTYPE,RSTYPE,
+  "gribLength",RGLNGTH,RSDUMMY,
+  "iAndjHaveTheSameIncrement",RGDUMMY,RSDIJ,
+  "iDirectionIncrement",RGDI,RSDI,
+  "jDirectionIncrement",RGDJ,RSDJ,
+  "jPentagonalResolution",RGJ,RSJ,
+  "jkmHaveSamePentagonalResolution",RGDUMMY,RSJKM,
+  "kPentagonalResolution",RGK,RSK,
+  "latitudeOfThePoleOfStretching",RGLATSP,RSLATSP,
+  "latitudeOfTheSouthernPoleOfRotation",RGLATRP,RSLATRP,
+  "longitudeOfThePoleOfStretching",RGLONSP,RSLONSP,
+  "longitudeOfTheSouthernPoleOfRotation",RGLONRP,RSLONRP,
+  "mPentagonalResolution",RGM,RSM,
+  "northWestLatitude",RGNWLAT,RSNWLAT,
+  "northWestLongitude",RGNWLON,RSNWLON,
+  "numberOfBitsPerPackedValue",RGBTSPV,RSBTSPV,
+  "numberOfFieldValues",RGNVALU,RSDUMMY,
+  "numberOfParallelsBetweenPoleAndEquator",RGGAUSS,RSDUMMY,
+  "numberOfPointsAlongMeridian",RGNJ,RSNJ,
+  "numberOfPointsAlongParallel",RGNI,RSNI,
+  "numberOfProductsInAverage",RGNUMAV,RSNUMAV,
+  "numberOfProductsMissingFromAverage",RGNUMMS,RSNUMMS,
+  "numberOfUnusedBitsAtEndOfSection4",RGUNUSD,RSDUMMY,
+  "numberOfVerticalCoordinateParameters",RGNUMPV,RSDUMMY,
+  "originatingCentre",RGCENTR,RSCENTR,
+  "parameter",RGPARAM,RSPARAM,
+  "pressureLevel",RGLEVEL,RSLEVEL,
+  "referenceValue",RGREFVL,RSDUMMY,
+  "representationMode",RGREPMO,RSDUMMY,
+  "resolutionAndComponentsFlag",RGRESCO,RSDUMMY,
+  "scaleFactorUsedToPackFieldValues",RGDSCAL,RSDUMMY,
+  "scanningModeFlag",RGSCANM,RSDUMMY,
+  "setReducedGaussianGridNumber",RGDUMMY,RSSETQG,
+  "setRegularGaussianGridNumber",RGDUMMY,RSSETRG,
+  "southEastLatitude",RGSELAT,RSSELAT,
+  "southEastLongitude",RGSELON,RSSELON,
+  "stretchingFactor",RGSFACT,RSSFACT,
+  "subcentreIdentifier",RGSUBID,RSSUBID,
+  "subsetJKMHaveSamePentagonalResolution",RGDUMMY,RSTJKM,
+  "subsetJPentagonalResolution",RGTJ,RSTJ,
+  "subsetKPentagonalResolution",RGTK,RSTK,
+  "subsetMPentagonalResolution",RGTM,RSTM,
+  "time",RGTIME,RSTIME,
+  "timeRangeIndicator",RGTRIND,RSTRIND,
+  "timeStep",RGSTEP,RSSTEP,
+  "timeStepP1",RGSTEP1,RSSTEP1,
+  "timeStepP2",RGSTEP2,RSSTEP2,
+  "timeUnit",RGTUNIT,RSTUNIT,
+  "topLayer",RGLEVL1,RSDUMMY,
+  "typeOfLevel",RGLEVTY,RSLEVTY,
+  "unitsDecimalScaleFactor",RGUDECF,RSUDECF
+};
+
+int binaryChopI(despatchI * list, int listLength, unsigned char * test);
+int binaryChopR(despatchR * list, int listLength, unsigned char * test);
+
+#endif /* End of GETVALUES_H */
diff --git a/gribex/getsys.F b/gribex/getsys.F
new file mode 100755
index 0000000..097a982
--- /dev/null
+++ b/gribex/getsys.F
@@ -0,0 +1,170 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GETSYS (HSYS)
+      IMPLICIT LOGICAL     ( L , O , G )
+      IMPLICIT CHARACTER*8 ( C , H , Y )
+      IMPLICIT INTEGER     ( I , J , K , M , N )
+C
+C---->
+C*    MARS common areas containing job environment information,
+C     parameter settings etc.
+C
+C     NFTNOS - 12 Fortran unit numbers used by MARS.
+C              NFTNOS(1) is MARSLOG file. Cracked MARS directives.
+C              NFTNOS(2) is MARSPAR file. MARS directives in
+C                        network transmission format.
+C              NFTNOS(5) is unit 5 , standard input.
+C              NFTNOS(6) is unit 6 , standard output.
+C              NFTNOS(7) is MARSDEF or MARSDEFNEXT, language
+C                        definition, operational or test.
+C              Set by routine JENVXX.
+C     NUMREQ - Total number of requests.
+C     NUMFIL - Numbers of different files to be accessed.
+C              NUMFIL(1) , Total number of files to accessed.
+C              NUMFIL(2) , Number of IBM disk files to accessed.
+C              NUMFIL(3) , Number of IBM MSS files to be accessed.
+C              NUMFIL(4) , Number of IBM tape files to be accessed.
+C              NUMFIL(5) , Number of worker machine files to accessed.
+C     NCNDAY - Century day.
+C              Set by routine JENVXX.
+C     NJMODE - Mode in which MARS job is running.
+C              -1, Quit issued.
+C              0 , Checkout directives only.
+C              1 , Connected mode (normal mode retains connection
+C                  with IBM at all times).
+C              2 , Disconnected mode (send requests to IBM and
+C                  terminate).
+C                  Not yet implemented.
+C     NJOBSQ - Unique number identifying job or process.
+C              Set by routine JENVXX.
+C     NUMBIT - Number of bits in computer word.
+C              Set by routine JENVXX.
+C     NDBUGS - Debug print switch for IBM.
+C              0 , No debug printout.     .
+C              8 , Debug print on IBM.
+C              Set by routine JENVXX.
+C     NDBUGL - Debug level indicator for worker machine.
+C              0 , No debug print.
+C              4 , Trace through subroutine sections and
+C                  values of parameters on entry as well as
+C                  other print statements used when actually
+C                  debugging.
+C              Set by routine JENVXX.
+C     NJBCAT - Category assigned to job by MARS.
+C              0 , Archive request.
+C              1 , Manage request.
+C              2 , Checkout request.
+C              3 , Costonly request.
+C              4 , Retrieval from online Operational database on the
+C                  worker machine.
+C              5 , Retrieve guaranteed online (on IBM ) data.
+C              6 , Retrieve online (on IBM ) data.
+C                  Not yet implemented. Treated as category 7.
+C              7 , Retrieve off-line (on IBM ) data.
+C              8 , Retrieval of research department data from
+C                  online Research database on worker machine.
+C     NPRITY - Priority assigned to job by MARS.
+C              1 , High.
+C              2 , Normal.
+C              3 , Low.
+C     NIAORB - 0 , Current job is an active mode job.
+C              1 , Current job is in interactive edit mode.
+C              Set by routine JENVXX.
+C
+C----<
+      INTEGER NFTNOS
+      INTEGER NCNDAY
+      INTEGER NJMODE
+      INTEGER NJOBSQ
+      INTEGER NUMBIT
+      INTEGER NDBUGS
+      INTEGER NDBUGL
+      INTEGER NJBCAT
+      INTEGER NPRITY
+      INTEGER NIAORB
+      INTEGER NFLTYP
+      INTEGER NUMFIL
+      INTEGER NUMREQ
+C
+      DIMENSION NFTNOS(12)
+      DIMENSION NUMFIL(5)
+C
+      COMMON /INTGCOM/ NFTNOS , NCNDAY , NJMODE , NJOBSQ , NUMBIT ,
+     C                 NDBUGS , NDBUGL , NJBCAT , NPRITY , NIAORB ,
+     C                 NFLTYP , NUMFIL , NUMREQ
+C
+C     COPSYS - Name of computer operating system.
+C              UNICOS
+C              COS
+C              NOS/VE
+C              VMS
+C              MVS/XA
+C              Set by routine calling MARSXX.
+C     CWMACH - Name of machine on which MARS is running.
+C              CRAY
+C              CYBER
+C              VAX
+C              IBM
+C              Set by routine JENVXX.
+C     CCDATE - Date at start of job in yymmdd format.
+C              Set by routine JENVXX.
+C     CCTIME - Time at start of job in hhmmss format.
+C              Set by routine JENVXX.
+C     CJNAME - Name of job or process.
+C              Set by routine JENVXX.
+C     CACCNT - Account under which job is running.
+C     CWMARS - Connect to test or operational MARS/IBM.
+C              MATS , Test version.
+C              MARS , Operational version.
+C              Set by routine JENVXX.
+C     CWLANG - Use test or operational version of MARS language.
+C              MARSDEF - Operational version.
+C              MATSDEF - Test version.
+C              Set by routine JENVCO for COS version.
+C     CWLAPA - Use test or operational version of MARS language.
+C              .../.../marsdef - Operational version.
+C              .../.../matsdef - Test version.
+C              Set by routine JENVUN for UNICOS version.
+C     CWTMDR - Temporary file directory.
+C              Set by JENVUN.
+C     CWUSER - User name.
+C              Set by JENVUN.
+C     CUSFDB - FDB Usage indicator.
+C              NEVER , Never attempt to access FDB.
+C              ALWAYS, Always attempt to access FDB.
+C              DEFAULT, Analyse request before deciding usage.
+C              Set by JENVUN.
+C     CWEDNO - GRIB Code Edition indicator.
+C              OFF , use current edition.
+C              ON  , use edition 0.
+C
+      CHARACTER*8   COPSYS
+      CHARACTER*8   CWMACH
+      CHARACTER*3   CWUSER
+      CHARACTER*6   CCDATE
+      CHARACTER*6   CCTIME
+      CHARACTER*4   CWMARS
+      CHARACTER*7   CWLANG
+      CHARACTER*7   CUSFDB
+      CHARACTER*48  CWLAPA
+      CHARACTER*48  CWTMDR
+      CHARACTER*16  CJNAME
+      CHARACTER*16  CACCNT
+      CHARACTER*3   CWEDNO
+C
+      COMMON /CHARCOM/ COPSYS , CWMACH , CCDATE , CCTIME , CJNAME ,
+     C                 CACCNT , CWMARS , CWLANG , CWLAPA , CWTMDR ,
+     C                 CWUSER , CUSFDB , CWEDNO
+C
+      CHARACTER*6 HSYS
+      HSYS = COPSYS
+      RETURN
+      END
diff --git a/gribex/getusr.F b/gribex/getusr.F
new file mode 100755
index 0000000..a7cd020
--- /dev/null
+++ b/gribex/getusr.F
@@ -0,0 +1,170 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GETUSR (HNAM)
+      IMPLICIT LOGICAL     ( L , O , G )
+      IMPLICIT CHARACTER*8 ( C , H , Y )
+      IMPLICIT INTEGER     ( I , J , K , M , N )
+C---->
+C
+C*    MARS common areas containing job environment information,
+C     parameter settings etc.
+C
+C     NFTNOS - 12 Fortran unit numbers used by MARS.
+C              NFTNOS(1) is MARSLOG file. Cracked MARS directives.
+C              NFTNOS(2) is MARSPAR file. MARS directives in
+C                        network transmission format.
+C              NFTNOS(5) is unit 5 , standard input.
+C              NFTNOS(6) is unit 6 , standard output.
+C              NFTNOS(7) is MARSDEF or MARSDEFNEXT, language
+C                        definition, operational or test.
+C              Set by routine JENVXX.
+C     NUMREQ - Total number of requests.
+C     NUMFIL - Numbers of different files to be accessed.
+C              NUMFIL(1) , Total number of files to accessed.
+C              NUMFIL(2) , Number of IBM disk files to accessed.
+C              NUMFIL(3) , Number of IBM MSS files to be accessed.
+C              NUMFIL(4) , Number of IBM tape files to be accessed.
+C              NUMFIL(5) , Number of worker machine files to accessed.
+C     NCNDAY - Century day.
+C              Set by routine JENVXX.
+C     NJMODE - Mode in which MARS job is running.
+C              -1, Quit issued.
+C              0 , Checkout directives only.
+C              1 , Connected mode (normal mode retains connection
+C                  with IBM at all times).
+C              2 , Disconnected mode (send requests to IBM and
+C                  terminate).
+C                  Not yet implemented.
+C     NJOBSQ - Unique number identifying job or process.
+C              Set by routine JENVXX.
+C     NUMBIT - Number of bits in computer word.
+C              Set by routine JENVXX.
+C     NDBUGS - Debug print switch for IBM.
+C              0 , No debug printout.     .
+C              8 , Debug print on IBM.
+C              Set by routine JENVXX.
+C     NDBUGL - Debug level indicator for worker machine.
+C              0 , No debug print.
+C              4 , Trace through subroutine sections and
+C                  values of parameters on entry as well as
+C                  other print statements used when actually
+C                  debugging.
+C              Set by routine JENVXX.
+C     NJBCAT - Category assigned to job by MARS.
+C              0 , Archive request.
+C              1 , Manage request.
+C              2 , Checkout request.
+C              3 , Costonly request.
+C              4 , Retrieval from online Operational database on the
+C                  worker machine.
+C              5 , Retrieve guaranteed online (on IBM ) data.
+C              6 , Retrieve online (on IBM ) data.
+C                  Not yet implemented. Treated as category 7.
+C              7 , Retrieve off-line (on IBM ) data.
+C              8 , Retrieval of research department data from
+C                  online Research database on worker machine.
+C     NPRITY - Priority assigned to job by MARS.
+C              1 , High.
+C              2 , Normal.
+C              3 , Low.
+C     NIAORB - 0 , Current job is an active mode job.
+C              1 , Current job is in interactive edit mode.
+C              Set by routine JENVXX.
+C
+C---->
+      INTEGER NFTNOS
+      INTEGER NCNDAY
+      INTEGER NJMODE
+      INTEGER NJOBSQ
+      INTEGER NUMBIT
+      INTEGER NDBUGS
+      INTEGER NDBUGL
+      INTEGER NJBCAT
+      INTEGER NPRITY
+      INTEGER NIAORB
+      INTEGER NFLTYP
+      INTEGER NUMFIL
+      INTEGER NUMREQ
+C
+      DIMENSION NFTNOS(12)
+      DIMENSION NUMFIL(5)
+C
+      COMMON /INTGCOM/ NFTNOS , NCNDAY , NJMODE , NJOBSQ , NUMBIT ,
+     C                 NDBUGS , NDBUGL , NJBCAT , NPRITY , NIAORB ,
+     C                 NFLTYP , NUMFIL , NUMREQ
+C
+C     COPSYS - Name of computer operating system.
+C              UNICOS
+C              COS
+C              NOS/VE
+C              VMS
+C              MVS/XA
+C              Set by routine calling MARSXX.
+C     CWMACH - Name of machine on which MARS is running.
+C              CRAY
+C              CYBER
+C              VAX
+C              IBM
+C              Set by routine JENVXX.
+C     CCDATE - Date at start of job in yymmdd format.
+C              Set by routine JENVXX.
+C     CCTIME - Time at start of job in hhmmss format.
+C              Set by routine JENVXX.
+C     CJNAME - Name of job or process.
+C              Set by routine JENVXX.
+C     CACCNT - Account under which job is running.
+C     CWMARS - Connect to test or operational MARS/IBM.
+C              MATS , Test version.
+C              MARS , Operational version.
+C              Set by routine JENVXX.
+C     CWLANG - Use test or operational version of MARS language.
+C              MARSDEF - Operational version.
+C              MATSDEF - Test version.
+C              Set by routine JENVCO for COS version.
+C     CWLAPA - Use test or operational version of MARS language.
+C              .../.../marsdef - Operational version.
+C              .../.../matsdef - Test version.
+C              Set by routine JENVUN for UNICOS version.
+C     CWTMDR - Temporary file directory.
+C              Set by JENVUN.
+C     CWUSER - User name.
+C              Set by JENVUN.
+C     CUSFDB - FDB Usage indicator.
+C              NEVER , Never attempt to access FDB.
+C              ALWAYS, Always attempt to access FDB.
+C              DEFAULT, Analyse request before deciding usage.
+C              Set by JENVUN.
+C     CWEDNO - GRIB Code Edition indicator.
+C              OFF , use current edition.
+C              ON  , use edition 0.
+C
+      CHARACTER*8   COPSYS
+      CHARACTER*8   CWMACH
+      CHARACTER*3   CWUSER
+      CHARACTER*6   CCDATE
+      CHARACTER*6   CCTIME
+      CHARACTER*4   CWMARS
+      CHARACTER*7   CWLANG
+      CHARACTER*7   CUSFDB
+      CHARACTER*48  CWLAPA
+      CHARACTER*48  CWTMDR
+      CHARACTER*16  CJNAME
+      CHARACTER*16  CACCNT
+      CHARACTER*3   CWEDNO
+C
+      COMMON /CHARCOM/ COPSYS , CWMACH , CCDATE , CCTIME , CJNAME ,
+     C                 CACCNT , CWMARS , CWLANG , CWLAPA , CWTMDR ,
+     C                 CWUSER , CUSFDB , CWEDNO
+C
+      CHARACTER*3 HNAM
+      HNAM = CWUSER
+      RETURN
+      END
diff --git a/gribex/grbcom.h b/gribex/grbcom.h
new file mode 100755
index 0000000..e25641e
--- /dev/null
+++ b/gribex/grbcom.h
@@ -0,0 +1,38 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Common blocks holding default or user supplied values.
+C
+C
+C     REALs
+C
+#ifdef REAL_8
+      REAL*8 FREF, FMAX
+#else
+      REAL*4 FREF, FMAX
+#endif
+      COMMON /GRBCOMR/
+     X     FREF, FMAX
+C
+C     INTEGERs
+C
+      INTEGER NFREF, NFMAX, NRND, NDBG, NVCK, NONOFF, NOABORT
+      INTEGER NUM2OK, NSUBCE, NEMOSLB, NEMOSET, N13FLAG,DUMPDATA
+      COMMON /GRBCOMI/
+     X        NFREF, NFMAX, NRND, NDBG, NVCK, NONOFF, NOABORT, NUM2OK
+     X       ,NSUBCE, NEMOSLB, NEMOSET, N13FLAG,DUMPDATA
+C
+      INTEGER NEXT2O, NLOC2O
+      COMMON /GRBCXT/ NEXT2O, NLOC2O
+C
+C     CHARACTERs
+C
+      CHARACTER*256 ELTPATH, ELBPATH,DUMPPATH
+      COMMON /GRBELTP/ ELTPATH, ELBPATH,DUMPPATH
diff --git a/gribex/grchk1.F b/gribex/grchk1.F
new file mode 100755
index 0000000..8501ba4
--- /dev/null
+++ b/gribex/grchk1.F
@@ -0,0 +1,950 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRCHK1(KSEC1,KRET)
+C
+C---->
+C**** GRCHK1 - Check parameters for Section 1 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C     Check parameters for Section 1 of GRIB code against
+C     valid values for GRIB Code Edition 1.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRCHK1(KSEC1,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC1      - Array containing parameters for section
+C                  1 of GRIB code.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  1   , Error in GRIB code parameter.
+C
+C     Method.
+C     -------
+C
+C     Values checked against current code/flag tables
+C     and against maximum or minimum permitted values.
+C     They are also checked against the current status
+C     of the implementation of GRIBEX and ECMWF usage.
+C
+C     Externals.
+C     ----------
+C
+C     KWCHK1  - Check Washington ensemble products local usage.
+C     CHKTAB2 - Checks whether parameter appears in know code tables 2
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB code.
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      30.08.91
+C     Checks for bit-map present removed.
+C     Check for negative value for century removed.
+C
+C     J. Hennessy      ECMWF      02.12.91
+C     Changes to Table 2 and Parameter number checks.
+C
+C     J. Hennessy      ECMWF      22.07.92
+C     Missing data value (255) allowed for originating centre
+C     and parameter number.
+C     Additional checks for experimental space view
+C     perspective added.
+C
+C     J. Hennessy      ECMWF      09.11.92
+C     Checks for ECMWF local use 1 and 2 added.
+C
+C     J. Hennessy      ECMWF      24.05.93
+C     Checks for ECMWF local use 3 and 4 added.
+C
+C     J. Hennessy      ECMWF      08.06.93
+C     Meteosat 3 and Goes 6 added.
+C
+C     J.D.Chambers     ECMWF      20.10.93
+C     Checks for ECMWF local use 5 added.
+C
+C     J.D.Chambers     ECMWF      07.02.94
+C     Add satellite streams 52,53 and satellite ids 121, 122
+C
+C     J.D.Chambers     ECMWF      10.05.94
+C     Fix test of KSEC1(43) - total forecast number can be 0
+C
+C     J.D.Chambers     ECMWF      12.05.94
+C     Checks for ECMWF local use 7 added.
+C
+C     J.D.Chambers     ECMWF      09.06.94
+C     Allow missing data indicator(255) for date/time/...
+C
+C     J.D.Chambers     ECMWF      17.06.94
+C     Add CLASS = 3 for ERA.
+C
+C     J.D.Chambers     ECMWF      19.09.94
+C     Allow single field in an average.
+C     Remove restriction that number of fields missing from an
+C     average should be less than the number in the average.
+C
+C     J.D.Chambers     ECMWF      23.11.94
+C     Only check for reserved fields if ECMWF local usage 1.
+C
+C     J.D.Chambers     ECMWF      02.02.95
+C     Allow types 17 and 18 (ensemble mean/standard deviations).
+C
+C     J.D.Chambers     ECMWF      14.02.95
+C     Allow type 52 (sensitivity forecast)
+C
+C     J.D.Chambers     ECMWF      28.03.95
+C     Allow parameters 127 & 128 in code table 2, ECMWF table 128
+C
+C     J.D.Chambers     ECMWF      09.10.95
+C     Check Washington ensemble products local usage.
+C
+C     J.D.Chambers     ECMWF      27.02.96
+C     Allow for ECMWF local use definition 6.
+C
+C     J.D.Chambers     ECMWF      04.11.96
+C     Add CLASS = 4, TYPE = 21, STREAM = 2231/2232/2233 for ECSN.
+C
+C     J.D.Chambers     ECMWF      08.01.98
+C     Add TYPE = 22 (climate simulation, 360 day year) for ECSN.
+C
+C     J.D.Chambers     ECMWF      13.02.98
+C     Add EPS tubes and SSTs.
+C
+C     J.D.Chambers     ECMWF      April 1998
+C     Add wave 2D spectra directions and frequencies
+C
+C     J.D.Chambers     ECMWF      April 1998
+C     Update WMO valid table entries.
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Adapt CHKTAB2 to new calling syntax.
+C
+C     J.D.Chambers     ECMWF      April 2000
+C     Add CLASS = 6 for DEMETER.
+C     Add CLASS = 7 for PROVOST.
+C
+C     J.D.Chambers     ECMWF      October 2002
+C     Add TYPE = 27 for extreme forecast index
+C         TYPE = 28 for extreme forecast index control
+C
+C     J.D.Chambers     ECMWF      March 2003
+C     Add TYPE = 33 for 4D variational increments
+C
+C     J.D.Chambers     ECMWF      April 2003
+C     Add CLASS = 8 for ELDAS
+C     Add TYPE = 34 for gridded observations
+C     Add TYPE = 90-99 for Mars development
+C     Add STREAM = 1061-1069 for Mars development
+C     Add STREAM = 1100 and 1101 for ELDAS
+C
+C     J.D.Chambers     ECMWF      April 2003
+C     Add type 64 - signal variance
+C
+C     J.D.Chambers     ECMWF      February 2004
+C     Add monthly forecast streams, 1200 - 1211
+C
+C     J.D.Chambers     ECMWF      February 2004
+C     Add monthly forecast streams, 1220 - 1224
+C
+C     J.D.Chambers     ECMWF      March 2004
+C     Add Delayed CutOff streams, 1028 and 1029
+C
+C     J.D.Chambers     ECMWF      September 2004
+C     Add local definition 24
+C
+C     J.D.Chambers     ECMWF      November 2004
+C     Add local definition 25
+C
+C     J.D.Chambers     ECMWF      January 2005
+C     Add streams 1039 and 1084
+C
+C     S.Curic     ECMWF      March 2005
+C     Add STREAM = 1024 Daily archive hindcast
+C         STREAM = 1034 Ensemble forecast overlap
+C         STREAM = 1039 Ensemble forecast hindcasts (changed name)
+C         STREAM = 1084 Ensemble wave hindcast (changed name)
+C         STREAM = 1085 Wave hindcast
+C         STREAM = 1086 Wave ensemble forecast overlap
+C         STREAM = 1087 
+C     Add TYPE = 29 Probability Boundaries
+C         TYPE = 36 Probability Distribution
+C         TYPE = 37 Cluster information
+C     Add CLASS = 10 Cosmo leps
+C         CLASS = 11 Ensembles
+C
+C     S.Curic     ECMWF      March 2005
+C     Add type of level 211 Ocean wave data (ECMWF extention)
+C                       212 Wave spectra         
+C
+C     S.Curic     ECMWF      July 2005
+C     Add STREAM = 1075 Monthly means of Daily forecast accumulations
+C     Add Time range indicator = 120 Average of N Forecast. Each product
+C             is an accumulation from forecast lenght P1 to forecast 
+C              lenght P2, with reference times at intervals P2-P1
+C     S.Curic     ECMWF      September 2005
+C        211 level type has been replaced with 209 because 211 is
+C        in use by NCEP
+C     Add CLASS = 12 TIGGE
+C
+C     S.Curic     ECMWF      January 2006
+C     Add CLASS = 14 ERA Interim
+C
+C     M.Fuentes   ECMWF      February 2006
+C     Add TYPE = 65 CV (Cal/Val)
+C
+C     S.Curic     ECMWF      March 2006
+C     Add STREAM = 1030  Ensemble Data Assimilation
+C         STREAM = 1076  Monthly Means Daily climatology
+C         STREAM = 1088  Ensemble Wave Data Assimilation
+C         STREAM = 1089  Daily climatology wave 
+C
+C     S.Curic     ECMWF      April 2006
+C     Add STREAM = 1230  Multi-model Multi-annual Forecast
+C         STREAM = 1231  Multi-model Multi-annual Forecast means
+C         STREAM = 1232  Multi-model Multi-annual Forecast wave
+C         STREAM = 1233  Multi-model Multi-annual Forecast wave means
+C
+C     S.Curic     ECMWF      January 2007
+C     Add Satellite identifiers 56, 171
+C
+C     S.Curic     ECMWF      February 2007
+C          STREAM = 1032 efho Ensemble Forecast Hindcast Overlap
+C          STREAM = 1033 enfh Ensemble Forecast Hindcasts
+C          STREAM = 1078 ewho Ensemble Forecast Wave Hindcast Overlap
+C          STREAM = 1079 enwh Ensemble Forecast Wave Hindcasts 
+C
+C     S.Curic     ECMWF      February 2007
+C     Add CLASS = 15 SREPS Short-Range Ensemble Prediction System
+C
+C     S.Curic     ECMWF      July 2007
+C     Add TYPE = 38       Unassigned 
+C         TYPE = 39       Unassigned
+C
+C     M.Fuentes   ECMWF      July 2007
+C     Add STREAM = 1040   efhm Ensemble Forecast Hindcast Means
+C
+C     S.Curic     ECMWF      July 2007
+C     Add CLASS = 16 dt (Data Targeting System)
+C
+C     S.Curic     ECMWF      July 2008
+C     Add TYPE = 32      Climate Distribution (CD) 
+C         TYPE = 38      Shift Of Tails (SOT)
+C     Add STREAM = 1077  Wave Ensemble forecast Hindcast Stat (WEHS)
+C
+C     S.Curic     ECMWF      September 2008
+C     Add STREAM = 1240  Eurosip
+C     Add STREAM = 1241  EUROSIP Hindcast Monthly Means
+C
+C     S.Curic     ECMWF      January 2010
+C     Add CLASS = 19 MACC Monitoring Atmos. Composition and Climate
+C
+C     S.Curic     ECMWF      January 2010
+C     Add CLASS = 20 PE Permanent experiments 
+C
+C
+C     S.Curic     ECMWF      September 2010
+C     Add TYPE = 45     Cluster representative 	CR
+C
+C     S.Curic     ECMWF      November 2010
+C     Add satellite streams 172,257
+C
+C
+C     S.Curic     ECMWF      December 2010
+C     Add stream 1022  fsob forecast sensitivity to observations
+C     Add stream 1023  fsow forecast sensitivity to observations wave
+C     Add type  47    taem    time average ensemble mean 
+C     Add type  48    taes    time average ensemble standard deviation
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KRET, KSEC1
+      DIMENSION KSEC1(*)
+C
+C     Parameters
+C
+      INTEGER JPAVAC, JPTYP, JPSTR, JP1, JP3, JP4, JP5, JPIDSAT
+      PARAMETER (JPAVAC=9)
+      PARAMETER (JP1=4)
+      PARAMETER (JP3=40)
+      PARAMETER (JP4=12)
+      PARAMETER (JP5=17)
+      PARAMETER (JPTYP=71)
+      PARAMETER (JPSTR=126)
+      PARAMETER (JPIDSAT = 28)
+C
+C     Local variables
+C
+      LOGICAL LECMWF, LKWBC
+C
+      INTEGER LOOP, NRET, IDSATEL, NUMBER
+      INTEGER IAC, IAVAC, IRET, ISTRE, ITAB1
+      INTEGER ITAB3, ITAB4, ITAB5, ITEMP, ITYPE
+C
+      DIMENSION IDSATEL(JPIDSAT)
+      DIMENSION ITAB1(JP1)
+      DIMENSION ITAB3(JP3)
+      DIMENSION ITAB4(JP4)
+      DIMENSION ITAB5(JP5)
+      DIMENSION IAVAC(JPAVAC)
+      DIMENSION ITYPE(JPTYP)
+      DIMENSION ISTRE(JPSTR)
+C
+      CHARACTER*121 HFIRST, HSECOND, HTHIRD, HFOURTH
+C
+      SAVE ITAB1, ITAB3, ITAB4, ITAB5, IAVAC
+      SAVE ITYPE, ISTRE, IDSATEL
+C
+C     Externals
+C
+      INTEGER CHKTAB2
+      EXTERNAL CHKTAB2
+C
+C     Valid values given in Code Table 1.
+C
+      DATA ITAB1  /0,128,64,192/
+C
+C     Valid values given in Code Table 3.
+C
+      DATA ITAB3 /1,2,3,4,5,6,7,8,9,20,
+     X            100,101,102,103,104,105,106,107,108,109,
+     X            110,111,112,113,114,115,116,117,119,
+     X            120,121,125,128,141,160,200,201,209,210,212/
+C
+C     Valid values given in Code Table 4.
+C
+      DATA ITAB4 /0,1,2,3,4,5,6,7,10,11,12,
+     X            254/
+C
+C     Valid values given in Code Table 5.
+C
+      DATA ITAB5 /0,1,2,3,4,5,
+     X            10,
+     X            113,114,115,116,117,118,119,
+     X            120,123,124/
+C
+C     Valid values given in Code Table 5, for averages and
+C     accumulations.
+C
+      DATA IAVAC /113,114,115,116,117,118,119,
+     X            123,124/
+C
+C     Valid values for type.
+C
+
+      DATA ITYPE /    1, 2, 3, 4, 5, 6, 7, 8, 9,
+     X            10,11,12,13,14,15,16,17,18,19,
+     X            20,21,22,23,24,25,26,27,28,29,
+     X            30,31,32,33,34,35,36,37,38,39,
+     X            40,41,42,45,47,48,
+     X            50,51,52,
+     X            60,61,62,63,64,65,
+     X            70,71,72,
+     X            80,81,82,83,
+     X            90,91,92,93,94,95,96,97,98,99/
+C
+C     Valid values for stream.
+C
+      DATA ISTRE /
+     X      50,  51,  52,  53,  54, 55,
+     X     119, 120, 121, 122, 130, 140,
+     X     150, 151, 152, 201, 250, 251, 252, 253, 254, 255, 256,
+     X     1022,1023,
+     X     1024,1025,1026,1027,1028,1029,1030,1032,1033,
+     X     1034,1035,1036,1037,1038,1039,
+     X     1040,1041,1042,1043,1044,1045,1046,1047,
+     X     1050,1051,1052,1053,1054,1055,1056,
+     X     1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,
+     X     1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,
+     X     1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,
+     X     1090,1091,1092,1093,1094,1095,1096,1097,
+     X     1100,1101,1110,
+     X     1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,
+     X     1210,1211,
+     X     1220,1221,1222,1223,1224,
+     X     1230,1231,1232,1233,
+     X     1240,1241,
+     X     2231,2232,2233,
+     X     2240,2241,2242,2243/
+C
+C
+C     Valid values for satellite identifiers
+C
+      DATA IDSATEL/
+     X   50, 51, 52, 53, 54, 55, 56,119, 120, 121, 122, 130, 140,
+     X  150, 151, 152, 171, 172, 199, 201, 250, 251, 252, 253, 
+     X   254, 255, 256, 257/
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     Reset return code.
+      KRET = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Check values against code tables and extreme values.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C*    Check Parameter Table version number.
+C
+      IF( (KSEC1(1).LT.1).OR.(KSEC1(1).GT.254) ) THEN
+        WRITE(GRPRSM,9001) KSEC1(1)
+        KRET = 1
+      ENDIF
+C
+C*    Check Identification of centre. Code Table 0.
+C     Currently only values 1 to 98 inclusive are used.
+C     Missing value indicator (255) is allowed.
+C
+      IF( (KSEC1(2).LT.0).OR.(KSEC1(2).GT.255) ) THEN
+        WRITE(GRPRSM,9002) KSEC1(2)
+        KRET = 1
+      ENDIF
+C
+      LECMWF = ( KSEC1(2).EQ.98 ).OR.
+     X         ( (KSEC1(2).EQ.80).AND.
+     X           (KSEC1(24).EQ.1).AND.
+     X           (KSEC1(37).EQ.50) )
+      LKWBC  = ( (KSEC1(2).EQ.7) .AND. (KSEC1(22).NE.98) )
+C
+C*    Check Generating process identification number.
+C
+      IF( (KSEC1(3).LT.1).OR.(KSEC1(3).GT.255) ) THEN
+        WRITE(GRPRSM,9003) KSEC1(3)
+        KRET = 1
+      ENDIF
+C
+C*    Check Grid definition.
+C
+      IF( (KSEC1(4).LT.1).OR.(KSEC1(4).GT.255) ) THEN
+        WRITE(GRPRSM,9004) KSEC1(4)
+        KRET = 1
+      ENDIF
+C
+C*    Check Flag. Code Table 1.
+C
+      DO LOOP = 1, JP1
+         IF( KSEC1(5).EQ.ITAB1(LOOP) ) GOTO 215
+      ENDDO
+C
+      WRITE(GRPRSM,9005) KSEC1(5)
+      KRET = 1
+C
+  215 CONTINUE
+C
+C*    Cross check that, if uncatalogued grid is specified, Section
+C     2, Grid description section, is included.
+C
+      IF( (KSEC1(4).EQ.255).AND.
+     X    ( (KSEC1(5).EQ.0).OR.(KSEC1(5).EQ.64) ) ) THEN
+        KRET = 1
+        WRITE(GRPRSM,9014)
+      ENDIF
+C
+C*    Check Parameter indicator. Code Table 2.
+C
+      IF( (KSEC1(6).LT.1).OR.(KSEC1(6).GT.255) ) THEN
+        WRITE(GRPRSM,9006) KSEC1(6)
+        KRET = 1
+      ENDIF
+C
+C*    Check ECMWF Parameter Table Number and Parameter Indicators.
+C
+      IF( LECMWF ) THEN
+C
+        IRET = CHKTAB2(KSEC1,HFIRST,HSECOND,HTHIRD,HFOURTH)
+C
+        IF( IRET.EQ.20001 ) THEN
+C
+          IF( MIN( KSEC1(1),KSEC1(6)) .LE. 127 ) THEN
+            WRITE(GRPRSM,*)
+     X        'GRCHK1: WMO code table 2 version ', KSEC1(1)
+          ELSEIF (LECMWF) THEN
+            WRITE(GRPRSM,*)
+     X        'GRCHK1: ECMWF local table 2 version ', KSEC1(1)
+          ELSE
+            WRITE(GRPRSM,*) 
+     X 'GRCHK1: originating centre local table 2 version ', KSEC1(1)
+          ENDIF
+C
+          WRITE(GRPRSM,*)
+     X        '        does not contain parameter  ', KSEC1(6)
+C
+        ENDIF
+C
+      ENDIF
+C
+C*    Check International Table useage.
+C
+      IF( (KSEC1(1).LT.127).AND.(KSEC1(6).GT.127) ) THEN
+        WRITE(GRPRSM,9024) KSEC1(6) , KSEC1(1)
+      ENDIF
+C
+C*    Check Indicator of type of level. Code Table 3.
+C     Experimental space view uses this field as satellite
+C     identification.
+C
+      IF( (KSEC1(6).EQ.127).AND.(KSEC1(1).EQ.1) ) THEN
+C
+C       Satellite identification.
+C       
+        NRET = 1
+        DO LOOP = 1, JPIDSAT
+          IF( KSEC1(7).EQ.IDSATEL(LOOP) ) NRET = 0
+        ENDDO
+C
+        IF( NRET.EQ.1 ) THEN
+          WRITE(GRPRSM,*)
+     X        'GRCHK1: Invalid satellite identifier: ',KSEC1(7)
+          KRET = 1
+        ENDIF
+      
+      ELSE
+C
+        IRET = 0
+C
+C       Type of level.
+C
+        DO LOOP = 1, JP3
+          IF( KSEC1(7).EQ.ITAB3(LOOP) ) GOTO 225
+        ENDDO
+C
+        IRET = 1
+C
+  225   CONTINUE
+C
+C       ECMWF uses 200 for pseudo-levels.
+C
+        IF( (KSEC1(7).EQ.200).AND.LECMWF ) IRET = 0
+        IF( IRET.EQ.1 ) THEN
+          WRITE(GRPRSM,9015) KSEC1(7)
+          KRET = 1
+        ENDIF
+C
+
+C
+      ENDIF
+C
+C     For certain level types no description is necessary and
+C     those fields should be 0.
+C
+      IF( (KSEC1(7).LT.8).OR.(KSEC1(7).EQ.102) ) THEN
+        ITEMP = KSEC1(8) + KSEC1(9)
+        IF( ITEMP.NE.0 ) THEN
+          KRET = 1
+          WRITE(GRPRSM,9023) KSEC1(7) , KSEC1(8) , KSEC1(9)
+        ENDIF
+      ENDIF
+C
+C*    Check Year of century.
+C
+C
+      IF( (KSEC1(10).LT.0).OR.(KSEC1(10).GT.100) ) THEN
+        IF( KSEC1(10).NE.255 ) THEN
+          WRITE(GRPRSM,9008) KSEC1(10)
+          KRET = 1
+        ENDIF
+      ENDIF
+C
+C*    Month check.
+C
+      IF( (KSEC1(11).LT.1).OR.(KSEC1(11).GT.12) ) THEN
+        IF( KSEC1(10).NE.255 ) THEN
+          WRITE(GRPRSM,9009) KSEC1(11)
+          KRET = 1
+        ENDIF
+      ENDIF
+C
+C*    Day check.
+C
+      IF( (KSEC1(12).LT.1).OR.(KSEC1(12).GT.31) ) THEN
+        IF( KSEC1(10).NE.255 ) THEN
+          WRITE(GRPRSM,9010) KSEC1(12)
+          KRET = 1
+        ENDIF
+      ENDIF
+C
+C*    Hour check.
+C
+      IF( (KSEC1(13).LT.0).OR.(KSEC1(13).GT.23) ) THEN
+        IF( KSEC1(10).NE.255 ) THEN
+          WRITE(GRPRSM,9011) KSEC1(13)
+          KRET = 1
+        ENDIF
+      ENDIF
+C
+C*    Minute check.
+C
+      IF( (KSEC1(14).LT.0).OR.(KSEC1(14).GT.59) ) THEN
+        IF( KSEC1(10).NE.255 ) THEN
+          WRITE(GRPRSM,9012) KSEC1(14)
+          KRET = 1
+        ENDIF
+      ENDIF
+C
+C*    Indicator of unit of time check. Code Table 4.
+C
+      DO LOOP = 1, JP4
+        IF( KSEC1(15).EQ.ITAB4(LOOP) ) GOTO 245
+      ENDDO
+C
+      WRITE(GRPRSM,9013) KSEC1(15)
+      KRET = 1
+C
+  245 CONTINUE
+C
+C*    Time range indicator check. Code Table 5.
+C
+      DO LOOP = 1, JP5
+        IF( KSEC1(18).EQ.ITAB5(LOOP) ) GOTO 255
+      ENDDO
+C
+      WRITE(GRPRSM,9019) KSEC1(18)
+      KRET = 1
+C
+  255 CONTINUE
+C
+C*    Cross check Time range indicator and Number averaged or
+C     accumulated.
+C
+      IAC = 0
+      DO LOOP = 1, JPAVAC
+        IF( KSEC1(18).EQ.IAVAC(LOOP) ) IAC = 1
+      ENDDO
+C
+C     If average or accumulation, check for valid numbers
+C     of included and missing values.
+C
+      IF( IAC.EQ.1. ) THEN
+        IF( KSEC1(19).LT.1 ) THEN
+          WRITE(GRPRSM,9016) KSEC1(18) , KSEC1(19)
+Cjdc      KRET = 1
+        ENDIF
+        IF( KSEC1(20).LT.0 ) THEN
+          WRITE(GRPRSM,9020) KSEC1(18) , KSEC1(20)
+Cjdc      KRET = 1
+        ENDIF
+      ENDIF
+C
+C*    Century check.
+C
+C     ECMWF data starts in 20th century.
+C commented to allow work Simona
+C
+cs      IF( (KSEC1(21).LT.20).AND.LECMWF ) THEN
+cs        WRITE(GRPRSM,9021) KSEC1(21)
+cs        KRET = 1
+cs      ENDIF
+C
+C*    Decimal scale factor check.
+C
+C     At ECMWF the scale factor is always 0.
+C
+Cjdc  IF( (KSEC1(23).NE.0).AND.LECMWF ) THEN
+Cjdc    WRITE(GRPRSM,9022) KSEC1(23)
+Cjdc    KRET = 1
+Cjdc  ENDIF
+C
+C*    Flag field, indicating local ECMWF usage.
+C
+      IF( (KSEC1(24).NE.0).AND.(KSEC1(24).NE.1) ) THEN
+        WRITE(GRPRSM,9025)
+        KRET = 1
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3 . Check validity of values for ECMWF local use.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( (KSEC1(24).EQ.1).AND.LECMWF ) THEN
+C
+C*      Check reserved fields are zero.
+C
+        DO LOOP = 25, 36
+          IF( KSEC1(LOOP).NE.0 ) WRITE(GRPRSM,9026)
+        ENDDO
+C
+C       Check local definition number.
+C      
+        IF( (KSEC1(37).LT.1).OR.(KSEC1(37).GT.254) ) THEN
+          KRET = 1
+          WRITE(GRPRSM,9101) KSEC1(37)
+        ENDIF
+C
+C       Check Class.
+C         1 = operations
+C         2 = research
+C         3 = ECMWF re-analysis
+C         4 = European Climate Support Network (ECSN).
+C         5 = ERA 40 (ECMWF 40-year re-analysis)
+C         6 = DEMETER
+C         7 = PROVOST
+C         8 = ELDAS
+C         9 = TOST
+C        10 = COSMO
+C        11 = Ensembles
+C        12 = TIGGE
+C        14 = ERA Interim
+C        15 = SREPS
+C        16 = dt (Data Targeting System)
+C        17 = la LACE ALADIN
+C        18 = yt YOTC
+C        19 = MACC
+C        99 = ECMWF testing
+C
+C      1-120 = Member State
+C        121 = Generic Member State
+C
+        IF( (KSEC1(38).LT.1).OR.
+     X      ((KSEC1(38).GT.20).AND.
+     X       (KSEC1(38).LT.99).OR.(KSEC1(38).GT.121)) ) THEN
+          KRET = 1
+          WRITE(GRPRSM,9102) KSEC1(38)
+        ENDIF
+C
+C       Check Type.
+C
+        DO LOOP = 1, JPTYP
+          IF( KSEC1(39).EQ.ITYPE(LOOP) ) GOTO 325
+        ENDDO
+C
+        WRITE(GRPRSM,9103 ) KSEC1(39)
+        KRET = 1
+C
+  325   CONTINUE
+C
+C       Check Stream.
+C
+         DO LOOP = 1, JPSTR
+           IF( KSEC1(40).EQ.ISTRE(LOOP) ) GOTO 335
+         ENDDO
+C
+         WRITE(GRPRSM,9104) KSEC1(40)
+         KRET = 1
+C
+  335    CONTINUE
+C
+C        No check on the ASCII Version Number.
+C
+C
+C        Check ECMWF local definition 1.
+C        (MARS labelling or ensemble forecast data)
+C
+         IF( KSEC1(37).EQ.1 ) THEN
+C
+C          Check ensemble forecast number and total forecasts number.
+C          (ECMWF ensemble seasonal forecasts, stream 1090, uses
+C          2-byte ensemble forecast number)
+C
+           IF( KSEC1(40).NE.1090 ) THEN
+C
+             IF( (KSEC1(42).LT.0).OR.(KSEC1(42).GT.255) ) THEN
+               KRET = 1
+               WRITE(GRPRSM,9105) KSEC1(42)
+             ENDIF
+C
+             IF( (KSEC1(43).LT.0).OR.(KSEC1(43).GT.255) ) THEN
+               KRET = 1
+               WRITE(GRPRSM,9106) KSEC1(43)
+             ENDIF
+C
+           ELSE
+C
+             IF( (KSEC1(42).LT.0).OR.(KSEC1(42).GT.65535) ) THEN
+               KRET = 1
+               WRITE(GRPRSM,9105) KSEC1(42)
+             ENDIF
+C
+           ENDIF
+C
+         ENDIF
+C
+C        Check ECMWF local definition 2.
+C        (Cluster means and standard deviations)
+C
+         IF( KSEC1(37).EQ.2 ) THEN
+C
+C          Check cluster number.
+C
+           IF( (KSEC1(42).LT.1).OR.(KSEC1(42).GT.255) ) THEN
+             KRET = 1
+             WRITE(GRPRSM,9107)
+           ENDIF
+C
+C          Check total number of clusters.
+C
+           IF( (KSEC1(43).LT.1).OR.(KSEC1(43).GT.255) ) THEN
+             KRET = 1
+             WRITE(GRPRSM,9108)
+           ENDIF
+C
+C          Check clustering method.
+C
+           IF( (KSEC1(44).LT.1).OR.(KSEC1(44).GT.3) ) THEN
+             KRET = 1
+             WRITE(GRPRSM,9109)
+           ENDIF
+C
+         ENDIF
+C
+C        Check ECMWF local definition 6.
+C        (Surface temperatures)
+C
+         IF( KSEC1(37).EQ.6 ) THEN
+C
+C          Check type for SST field.
+C
+           IF( (KSEC1(45).LT.0).OR.(KSEC1(45).GT.2) ) THEN
+             KRET = 1
+             WRITE(GRPRSM,*)
+     X         'GRCHK1: Invalid type for SST field = ',KSEC1(45)
+           ENDIF
+C
+C          Check count of ICE fields used.
+C
+           IF( KSEC1(46).LT.0 ) THEN
+             KRET = 1
+             WRITE(GRPRSM,*)
+     X         'GRCHK1: Invalid count of ICE fields used = ',KSEC1(46)
+           ENDIF
+C
+         ENDIF
+C
+       ENDIF
+C
+C        Check ECMWF local definition 18.
+C        (Multi-analysis ensemble data)
+C
+         IF( KSEC1(37).EQ.18 ) THEN
+C
+C          Check list of WMO centre identifiers
+C
+           NUMBER = KSEC1(46)
+           IF( NUMBER.LT.0 ) THEN
+             KRET = 1
+             WRITE(GRPRSM,*)
+     X         'GRCHK1: WMO id list count invalid = ',NUMBER
+           ENDIF
+C
+           IF( NUMBER.GT.15 ) THEN
+             KRET = 1
+             WRITE(GRPRSM,*)
+     X         'GRCHK1: WMO id list count greater than 15 = ',NUMBER
+           ENDIF
+C
+         ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4 . Check validity of values for Washington ensemble
+C                 products local usage.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+Cjdc  IF( (KSEC1(24).EQ.1).AND.LKWBC ) CALL KWCHK1(KSEC1,KRET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Return to calling routine. Format statements.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9001 FORMAT (1H ,'GRCHK1: Invalid Parameter Table version number - ',
+     C             I5)
+ 9002 FORMAT (1H ,'GRCHK1: Invalid Identification of Centre - ',I5)
+ 9003 FORMAT (1H ,'GRCHK1: Invalid Generating Process - ',I5)
+ 9004 FORMAT (1H ,'GRCHK1: Invalid Grid Definition - ',I5)
+ 9005 FORMAT (1H ,'GRCHK1: Invalid flag field - ',I5,' decimal.')
+ 9006 FORMAT (1H ,'GRCHK1: Invalid Indicator of parameter - ',I5)
+ 9008 FORMAT (1H ,'GRCHK1: Invalid year of century - ',I5)
+ 9009 FORMAT (1H ,'GRCHK1: Invalid month - ',I5)
+ 9010 FORMAT (1H ,'GRCHK1: Invalid day - ',I5)
+ 9011 FORMAT (1H ,'GRCHK1: Invalid hour - ',I5)
+ 9012 FORMAT (1H ,'GRCHK1: Invalid minute - ',I5)
+ 9013 FORMAT (1H ,'GRCHK1: Invalid Indicator of unit of time - ',I5)
+ 9014 FORMAT (1H ,'GRCHK1: Uncatalogued grid and no Section 2.')
+ 9015 FORMAT (1H ,'GRCHK1: Invalid indicator of type of level - ',I5)
+ 9016 FORMAT (1H ,'GRCHK1: Inconsistent Time Range Indicator',
+     C            ' - ',I5,' and number included in averages - ',I5)
+ 9019 FORMAT (1H ,'GRCHK1: Invalid Time Range Indicator - ',I5)
+ 9020 FORMAT (1H ,'GRCHK1: Inconsistent Time Range Indicator',
+     C            ' - ',I5,' and number missing from averages - ',I5)
+ 9021 FORMAT (1H ,'GRCHK1: Invalid century of reference time - ',I5)
+ 9022 FORMAT (1H ,'GRCHK1: Invalid decimal scale factor - ',I5)
+ 9023 FORMAT (1H ,'GRCHK1: For level type ',I3,' descriptions are',
+     C            'invalid - ',I5,3X,I5)
+ 9024 FORMAT (1H ,'GRCHK1: ** WARNING ** Parameter number ',I3,' is',
+     C            ' not defined in International Table number ',I3,'.')
+ 9025 FORMAT (1H ,'GRCHK1: Local use flag KSEC1(24) should be',
+     C                      ' 0 or 1.')
+ 9026 FORMAT (1H ,'GRCHK1: Reserved fields KSEC1(25->36) should be 0 ',
+     C                      'to avoid problems with future releases.')
+C
+ 9101 FORMAT (1H ,'GRCHK1: Invalid local use definition: ',I8)
+C
+ 9102 FORMAT (1H ,'GRCHK1: Invalid class - ',I5)
+C
+ 9103 FORMAT (1H ,'GRCHK1: Invalid type - ',I5)
+C
+ 9104 FORMAT (1H ,'GRCHK1: Invalid stream - ',I5)
+C
+ 9105 FORMAT (1H ,'GRCHK1: Invalid ensemble forecast number - ',I5)
+C
+ 9106 FORMAT (1H ,'GRCHK1: Invalid total number of forecasts - ',I5)
+C
+ 9107 FORMAT (1H ,'GRCHK1: Invalid cluster number - ',I5)
+C
+ 9108 FORMAT (1H ,'GRCHK1: Invalid total number of clusters - ',I5)
+C
+ 9109 FORMAT (1H ,'GRCHK1: Invalid clustering method - ',I5)
+C
+      END
diff --git a/gribex/grchk2.F b/gribex/grchk2.F
new file mode 100755
index 0000000..f3d4d3a
--- /dev/null
+++ b/gribex/grchk2.F
@@ -0,0 +1,658 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRCHK2 (KSEC1,KSEC2,PSEC2,KRET)
+C
+C---->
+C**** GRCHK2 - Check parameters for Section 2 of GRIB Code.
+C
+C     Purpose.
+C     --------
+C
+C     Check parameters for Section 2 of GRIB code against
+C     valid values for GRIB Edition 1.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRCHK2 (KSEC1,KSEC2,PSEC2,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC1      - Array containing integer parameters for
+C                  section 1 of GRIB code.
+C
+C     KSEC2      - Array containing integer parameters for
+C                  section 2 of GRIB code.
+C
+C     PSEC2      - Array containing real parameters for
+C                  section 2 of GRIB code.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  1   , Error in GRIB Code parameter.
+C
+C     Method.
+C     -------
+C
+C     Values checked against current code/flag tables
+C     and against maximum or minimum permitted values.
+C     They are also checked against the current status
+C     of the implementation of GRIBEX and ECMWF usage.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB Code.
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      30.08.91
+C     Polar stereographic representation type allowed.
+C
+C     J. Hennessy      ECMWF      01.10.91
+C     Space view or orthographic representation allowed.
+C     Additional parameters KSEC1 and PSEC2 added.
+C
+C     J.D.Chambers     ECMWF      27.04.94
+C     Allow complex packing for spherical harmonics
+C
+C     J.D.Chambers     ECMWF      03.04.95
+C     Allow Lambert conformal.
+C
+C     J.D.Chambers     ECMWF      July 2004
+C     Allow Mercator
+C
+C----<
+C     ----------------------------------------------------------------
+C     Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JP6, JP6X, JP8
+      PARAMETER (JP6=23)
+      PARAMETER (JP6X=17)
+      PARAMETER (JP8=8)
+C
+C     Subroutine arguments
+C
+      INTEGER KSEC1, KSEC2, KRET
+      DIMENSION KSEC1(*)
+      DIMENSION KSEC2(*)
+      REAL PSEC2
+      DIMENSION PSEC2(*)
+C
+C     Local variables
+C
+      LOGICAL LQUASI
+      INTEGER LOOP
+C
+      INTEGER ITAB6, ITAB6X, ITAB8
+      DIMENSION ITAB6(JP6)
+      DIMENSION ITAB6X(JP6X)
+      DIMENSION ITAB8(JP8)
+C
+C     Valid values given in Code Table 6.
+C
+      DATA ITAB6 /  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
+     X             10, 13, 14,
+     X             20, 24, 30, 34, 50, 60, 70, 80, 90,
+     X            192 /
+C
+C     Code Table 6 values currently supported by GRIBEX.
+C
+      DATA ITAB6X /0,1,3,4,5,10,14,20,24,30,34,50,60,70,80,90,192/
+C
+C     Valid values given in Code Table 8.
+C
+      DATA ITAB8 /0,128,64,192,32,160,96,224/
+C
+C     ----------------------------------------------------------------
+C     Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Reset return code.
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C     Section 2 . Check values against code tables and extreme values.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Number of vertical coordinate parameters.
+C
+      IF (KSEC2(12).LT.0.OR.KSEC2(12).GT.255) THEN
+       	KRET = 1
+	WRITE(GRPRSM,9019) KSEC2(12)
+      ENDIF
+C
+C     Check Data Representation Type.
+C
+      DO LOOP = 1,JP6
+	IF (KSEC2(1).EQ.ITAB6(LOOP)) GO TO 202
+      ENDDO
+C
+      KRET = 1
+      WRITE(GRPRSM,9001) KSEC2(1)
+C
+  202 CONTINUE
+C
+C     Check Data Representation Type currently supported.
+C
+      DO LOOP = 1,JP6X
+	IF (KSEC2(1).EQ.ITAB6X(LOOP)) GO TO 204
+      ENDDO
+C
+      KRET = 1
+      WRITE(GRPRSM,9002) KSEC2(1)
+      GO TO 900
+C
+  204 CONTINUE
+C
+C     Earth flag.
+C
+      IF (KSEC2(18).NE.0.AND.KSEC2(18).NE.64) THEN
+       	KRET = 1
+	WRITE(GRPRSM,9005) KSEC2(18)
+      ENDIF
+C
+C     Check ECMWF usage.(0 except for space view perspective)
+C
+      IF (KSEC2(18).NE.0.AND.KSEC1(2).EQ.98.AND.KSEC2(1).NE.90) THEN
+ 	KRET = 1
+	WRITE(GRPRSM,9007)
+      ENDIF
+C
+C     Components flag.
+C
+      IF (KSEC2(19).NE.0.AND.KSEC2(19).NE.8) THEN
+	KRET = 1
+	WRITE(GRPRSM,9006) KSEC2(19)
+      ENDIF
+C
+C     Check ECMWF usage.
+C
+      IF(KSEC2(19).NE.0.AND.KSEC2(19).NE.8.AND.KSEC1(2).EQ.98) THEN
+	KRET = 1
+	WRITE(GRPRSM,9008)
+      ENDIF
+C
+      LQUASI = (KSEC2(17) .EQ. 1)
+C
+C     ----------------------------------------------------------------
+C     Section 3. Checks on latitude/longitude grids.
+C     ----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF ( KSEC2(1).EQ.0  .OR. KSEC2(1).EQ.10 .OR.
+     X     KSEC2(1).EQ.20 .OR. KSEC2(1).EQ.30 ) THEN
+C
+C       Number of points along a parallel.
+C
+	IF ( KSEC2(2).LT.1. OR. KSEC2(2).GT.65535 ) THEN
+          IF ( .NOT. LQUASI ) THEN
+	    KRET = 1
+	    WRITE(GRPRSM,9022) KSEC2(2)
+          ENDIF
+        ENDIF
+C
+C       Number of points along a meridian.
+C
+	IF ( KSEC2(3).LT.1 .OR. KSEC2(3).GT.65535 ) THEN
+          IF ( .NOT. LQUASI ) THEN
+	    KRET = 1
+	    WRITE(GRPRSM,9023) KSEC2(3)
+          ENDIF
+        ENDIF
+C
+C       Latitude of first grid point.
+C
+	IF (KSEC2(4).LT.-90000.OR.KSEC2(4).GT.90000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9015) KSEC2(4)
+        ENDIF
+C
+C       Longitude of first grid point.
+C
+	IF (KSEC2(5).LT.-360000.OR.KSEC2(5).GT.360000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9016) KSEC2(5)
+        ENDIF
+C
+C       Resolution flag.
+C
+	IF (KSEC2(6).NE.0.AND.KSEC2(6).NE.128) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9003) KSEC2(6)
+        ENDIF
+C
+C       Latitude of last grid point.
+C
+	IF (KSEC2(7).LT.-90000.OR.KSEC2(7).GT.90000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9020) KSEC2(7)
+        ENDIF
+C
+C       Longitude of last grid point.
+C
+	IF (KSEC2(8).LT.-360000.OR.KSEC2(8).GT.360000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9021) KSEC2(8)
+        ENDIF
+C
+C       Direction increments, if included.
+C
+        IF (KSEC2(6).EQ.128) THEN
+	  IF (KSEC2(9).LT.1.OR.KSEC2(9).GT.65535) THEN
+            IF( .NOT. LQUASI ) THEN
+	      KRET = 1
+	      WRITE(GRPRSM,9024) KSEC2(9)
+            ENDIF
+          ENDIF
+C
+	  IF (KSEC2(10).LT.1.OR.KSEC2(10).GT.65535) THEN
+            IF( .NOT. LQUASI ) THEN
+	      KRET = 1
+	      WRITE(GRPRSM,9025) KSEC2(10)
+            ENDIF
+          ENDIF
+        ENDIF
+C
+C       Scanning mode flag.
+C
+        DO LOOP = 1, JP8
+	  IF (KSEC2(11).EQ.ITAB8(LOOP)) GO TO 302
+        ENDDO
+C
+        KRET = 1
+        WRITE(GRPRSM,9004) KSEC2(11)
+C
+  302   CONTINUE
+C
+C       Regular / Quasi-regular grid check.
+C
+	IF (KSEC2(17).NE.0.AND.KSEC2(17).NE.1) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9009) KSEC2(17)
+        ENDIF
+C
+        GO TO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 4. Checks on Gaussian grids.
+C     ----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF ( KSEC2(1).EQ.4  .OR. KSEC2(1).EQ.14 .OR.
+     X     KSEC2(1).EQ.24 .OR. KSEC2(1).EQ.34) THEN
+C
+C       Latitude of first grid point.
+C
+	IF (KSEC2(4).LT.-90000.OR.KSEC2(4).GT.90000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9015) KSEC2(4)
+        ENDIF
+C
+C       Longitude of first grid point.
+C
+	IF (KSEC2(5).LT.-360000.OR.KSEC2(5).GT.360000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9016) KSEC2(5)
+        ENDIF
+C
+C       Latitude of last grid point.
+C
+	IF (KSEC2(7).LT.-90000.OR.KSEC2(7).GT.90000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9020) KSEC2(7)
+        ENDIF
+C
+C       Longitude of last grid point.
+C
+	IF (KSEC2(8).LT.-360000.OR.KSEC2(8).GT.360000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9021) KSEC2(8)
+        ENDIF
+C
+C       i-direction increment, if included.
+C
+        IF (KSEC2(6).EQ.128) THEN
+	  IF (KSEC2(9).LT.1.OR.KSEC2(9).GT.65535) THEN
+	    KRET = 1
+	    WRITE(GRPRSM,9024) KSEC2(9)
+          ENDIF
+        ENDIF
+C
+C       Number of parallels beween pole and equator.
+C
+        IF (KSEC2(10).LT.1.OR.KSEC2(10).GT.65535) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9026) KSEC2(10)
+        ENDIF
+C
+C       Increment flag.
+C
+	IF (KSEC2(6).NE.0.AND.KSEC2(6).NE.128) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9003) KSEC2(6)
+        ENDIF
+C
+C       Scanning mode flag.
+C
+        DO LOOP = 1, JP8
+	  IF (KSEC2(11).EQ.ITAB8(LOOP)) GO TO 402
+        ENDDO
+C
+        KRET = 1
+        WRITE(GRPRSM,9004) KSEC2(11)
+C
+  402   CONTINUE
+C
+C       Regular / Quasi-regular grid check.
+C
+	IF (KSEC2(17).NE.0.AND.KSEC2(17).NE.1) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9009) KSEC2(17)
+        ENDIF
+C
+C       Cross-check increments flag and quasi-regular indicator.
+C
+	IF ( LQUASI .AND.KSEC2(6).EQ.128) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9011)
+        ENDIF
+C
+        GO TO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 5. Checks on Polar Stereographic data.
+C
+C     ----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+      IF (KSEC2(1).EQ.5) THEN
+C
+C       Number of points along X-axis.
+C
+	IF (KSEC2(2).LT.1.OR.KSEC2(2).GT.65535) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9027) KSEC2(2)
+        ENDIF
+C
+C       Number of points along Y-axis.
+C
+	IF (KSEC2(3).LT.1.OR.KSEC2(3).GT.65535) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9028) KSEC2(3)
+        ENDIF
+C
+C       Latitude of first grid point.
+C
+	IF (KSEC2(4).LT.-90000.OR.KSEC2(4).GT.90000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9015) KSEC2(4)
+        ENDIF
+C
+C       Longitude of first grid point.
+C
+	IF (KSEC2(5).LT.-360000.OR.KSEC2(5).GT.360000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9016) KSEC2(5)
+        ENDIF
+C
+C       Orientation of the grid.
+C
+	IF (KSEC2(7).LT.-360000.OR.KSEC2(7).GT.360000) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9017) KSEC2(7)
+        ENDIF
+C
+C       Grid lengths.
+C
+	IF (KSEC2(9).LT.1.OR.KSEC2(9).GT.16777215) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9029) KSEC2(9)
+        ENDIF
+C
+	IF (KSEC2(10).LT.1.OR.KSEC2(10).GT.16777215) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9030) KSEC2(10)
+        ENDIF
+C
+C       Projection centre.
+C
+C       The use of 1 by the Polar Stereographic projection in this
+C       octet is inconsistent with Lambert conformal et al
+C       representation where bit 1 is set 1 to indicate North pole.
+C
+	IF (KSEC2(13).NE.0.AND.KSEC2(13).NE.1) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9018) KSEC2(13)
+        ENDIF
+C
+        GO TO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 6. Checks on spherical harmonic data.
+C     ----------------------------------------------------------------
+C
+  600 CONTINUE
+C
+      IF ( KSEC2(1).EQ.50 .OR. KSEC2(1).EQ.60 .OR.
+     X     KSEC2(1).EQ.70 .OR. KSEC2(1).EQ.80 ) THEN
+C
+C       Spectral data representation type.
+C
+        IF (KSEC2(5).NE.1) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9012) KSEC2(5)
+        ENDIF
+C
+C       Spectral data representation mode.
+C
+	IF (KSEC2(6).NE.1.AND.KSEC2(6).NE.2) THEN
+	  KRET = 1
+	  WRITE(GRPRSM,9013) KSEC2(6)
+        ENDIF
+C
+        GO TO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 7 . Checks on space view perspective.
+C     ----------------------------------------------------------------
+C
+  700 CONTINUE
+C
+      IF (KSEC2(1).EQ.90) THEN
+	GO TO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 8. Checks on Lambert conformal data.
+C     ----------------------------------------------------------------
+C
+  800 CONTINUE
+C
+      IF (KSEC2(1).EQ.3) THEN
+C
+C       Number of points along X-axis.
+C
+        IF (KSEC2(2).LT.1.OR.KSEC2(2).GT.65535) THEN
+          KRET = 1
+          WRITE(GRPRSM,9027) KSEC2(2)
+        ENDIF
+C
+C       Number of points along Y-axis.
+C
+        IF (KSEC2(3).LT.1.OR.KSEC2(3).GT.65535) THEN
+          KRET = 1
+          WRITE(GRPRSM,9028) KSEC2(3)
+        ENDIF
+C
+C       Latitude of first grid point.
+C
+        IF (KSEC2(4).LT.-90000.OR.KSEC2(4).GT.90000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9015) KSEC2(4)
+        ENDIF
+C
+C
+C       Longitude of first grid point.
+C
+        IF (KSEC2(5).LT.-360000.OR.KSEC2(5).GT.360000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9016) KSEC2(5)
+        ENDIF
+C
+C       Orientation of the grid.
+C
+        IF (KSEC2(7).LT.-360000.OR.KSEC2(7).GT.360000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9017) KSEC2(7)
+        ENDIF
+C
+C       Grid lengths.
+C
+        IF (KSEC2(9).LT.1.OR.KSEC2(9).GT.16777215) THEN
+          KRET = 1
+          WRITE(GRPRSM,9029) KSEC2(9)
+        ENDIF
+C
+        IF (KSEC2(10).LT.1.OR.KSEC2(10).GT.16777215) THEN
+          KRET = 1
+          WRITE(GRPRSM,9030) KSEC2(10)
+        ENDIF
+C
+C       Projection centre.
+C
+        IF (KSEC2(13).NE.0.AND.KSEC2(13).NE.64.AND.KSEC2(13).NE.
+     X       128.AND.KSEC2(13).NE.192) THEN
+          KRET = 1
+          WRITE(GRPRSM,9018) KSEC2(13)
+        ENDIF
+C
+C       Latitude Latin 1.
+C
+        IF (KSEC2(14).LT.-90000.OR.KSEC2(14).GT.90000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9015) KSEC2(14)
+        ENDIF
+C
+C       Latitude Latin 2.
+C
+        IF (KSEC2(15).LT.-90000.OR.KSEC2(15).GT.90000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9015) KSEC2(15)
+        ENDIF
+C
+C       Latitude of southern pole.
+C
+        IF (KSEC2(20).LT.-90000.OR.KSEC2(20).GT.90000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9015) KSEC2(20)
+        ENDIF
+C
+C       Longitude of southern pole.
+C
+        IF (KSEC2(21).LT.-360000.OR.KSEC2(21).GT.360000) THEN
+          KRET = 1
+          WRITE(GRPRSM,9016) KSEC2(21)
+        ENDIF
+C
+        GO TO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C     Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'GRCHK2 : Invalid data representation type - ',I3)
+ 9002 FORMAT (1H ,'GRCHK2 : Unsupported data representation type - ',I3)
+ 9003 FORMAT (1H ,'GRCHK2 : Invalid increments flag - ',I3)
+ 9004 FORMAT (1H ,'GRCHK2 : Invalid scanning mode flag - ',I3)
+ 9005 FORMAT (1H ,'GRCHK2 : Invalid earth flag - ',I3)
+ 9006 FORMAT (1H ,'GRCHK2 : Invalid components flag - ',I3)
+ 9007 FORMAT (1H ,'GRCHK2 : Earth flag - ECMWF usage is 0.')
+ 9008 FORMAT (1H ,'GRCHK2 : Components flag - ECMWF usage is 0.')
+ 9009 FORMAT (1H ,'GRCHK2 : Invalid quasi / regular indicator - ',I3)
+ 9011 FORMAT (1H ,'GRCHK2 : Quasi-regular Gaussian grid cannot have',
+     C            ' direction increments included.')
+ 9012 FORMAT (1H ,'GRCHK2 : Invalid spectral representation type - ',I3)
+ 9013 FORMAT (1H ,'GRCHK2 : Invalid spectral representation mode - ',I3)
+ 9014 FORMAT (1H ,'GRCHK2 : Complex spectral representation mode ',
+     C            'not catered for.')
+ 9015 FORMAT (1H ,'GRCHK2 : Invalid latitude of first grid point - ',
+     C               I10)
+ 9016 FORMAT (1H ,'GRCHK2 : Invalid longitude of first grid point - ',
+     C               I10)
+ 9017 FORMAT (1H ,'GRCHK2 : Invalid orientation of the grid - ',
+     C               I10)
+ 9018 FORMAT (1H ,'GRCHK2 : Invalid projection centre flag - ',I3)
+ 9019 FORMAT (1H ,'GRCHK2 : Invalid number of vertical coordinate ',
+     C            'parameters - ',I8)
+ 9020 FORMAT (1H ,'GRCHK2 : Invalid latitude of last grid point - ',
+     C               I10)
+ 9021 FORMAT (1H ,'GRCHK2 : Invalid longitude of last grid point - ',
+     C               I10)
+ 9022 FORMAT (1H ,'GRCHK2 : Invalid number of points along a parallel',
+     C              ' - ', I10)
+ 9023 FORMAT (1H ,'GRCHK2 : Invalid number of points along a meridian',
+     C              ' - ', I10)
+ 9024 FORMAT (1H ,'GRCHK2 : Invalid i-direction increment - ',I10)
+ 9025 FORMAT (1H ,'GRCHK2 : Invalid j-direction increment - ',I10)
+ 9026 FORMAT (1H ,'GRCHK2 : Invalid number of parallels - ',I10)
+ 9027 FORMAT (1H ,'GRCHK2 : Invalid number of points along X-axis',
+     C              ' - ', I10)
+ 9028 FORMAT (1H ,'GRCHK2 : Invalid number of points along Y-axis',
+     C              ' - ', I10)
+ 9029 FORMAT (1H ,'GRCHK2 : Invalid X-direction grid length - ',I10)
+ 9030 FORMAT (1H ,'GRCHK2 : Invalid Y-direction grid length - ',I10)
+C
+      RETURN
+C
+      END
diff --git a/gribex/grchk3.F b/gribex/grchk3.F
new file mode 100755
index 0000000..aba1487
--- /dev/null
+++ b/gribex/grchk3.F
@@ -0,0 +1,201 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GRCHK3 (KSEC1,KSEC3,PSEC3,KRET)
+C
+C---->
+C**** GRCHK3 - Check parameters for Section 3 of GRIB Code.
+C
+C     Purpose.
+C     --------
+C
+C           Check parameters for Section 3 of GRIB code against
+C           valid values for GRIB Edition 1.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GRCHK3 (KSEC1,KSEC3,PSEC3,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KSEC1      - Array containing integer parameters for
+C                            section 1 of GRIB code.
+C
+C               KSEC3      - Array containing integer parameters for
+C                            section 3 of GRIB code.
+C
+C               PSEC3      - Array containing real parameters for
+C                            section 3 of GRIB code.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KRET       - Return code.
+C                            0   , No error encountered.
+C                            1   , Error in GRIB Code parameter.
+C
+C     Method.
+C     -------
+C
+C           Values checked against current code/flag tables
+C           and against maximum or minimum permitted values.
+C           They are also checked against the current status
+C           of the implementation of GRIBEX and ECMWF usage.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           WMO Manual on Codes for GRIB Code.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 5 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      16.09.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      01.10.91
+C           Additional parameter KSEC1 and PSEC3 added.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER KRET
+      INTEGER KSEC1
+      INTEGER KSEC3
+C
+      REAL    PSEC3
+C
+      DIMENSION KSEC1(*)
+      DIMENSION KSEC3(*)
+C
+      DIMENSION PSEC3(*)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Reset return code.
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Check values.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C*    Check bit-map table reference field.
+C
+      IF (KSEC3(1).LT.0.OR.KSEC3(1).GT.65535)
+     C   THEN
+	     KRET = 1
+	     WRITE(GRPRSM,9001) KSEC3(1)
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'GRCHK3 : Invalid bit-map table reference - ',I9)
+C
+      RETURN
+      END
diff --git a/gribex/grchk4.F b/gribex/grchk4.F
new file mode 100755
index 0000000..6463839
--- /dev/null
+++ b/gribex/grchk4.F
@@ -0,0 +1,246 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRCHK4 (KSEC1,KSEC4,PSEC4,KRET)
+C
+C---->
+C**** GRCHK4 - Check parameters for Section 4 of GRIB Code.
+C
+C     Purpose.
+C     --------
+C
+C           Check parameters for Section 4 of GRIB code against
+C           valid values for GRIB Edition 1.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GRCHK4 (KSEC1,KSEC4,PSEC4,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KSEC1      - Array containing integer parameters for
+C                            section 1 of GRIB code.
+C
+C               KSEC4      - Array containing integer parameters for
+C                            section 4 of GRIB code.
+C
+C               PSEC4      - Array containing real parameters for
+C                            section 4 of GRIB code.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KRET       - Return code.
+C                            0   , No error encountered.
+C                            1   , Error in GRIB Code parameter.
+C
+C     Method.
+C     -------
+C
+C           Values checked against current code/flag tables
+C           and against maximum or minimum permitted values.
+C           They are also checked against the current status
+C           of the implementation of GRIBEX.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           WMO Manual on Codes for GRIB Code.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 2 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      01.10.91
+C           Additional parameters KSEC1 and PSEC4 added.
+C
+C           J. Hennessy      ECMWF      17.07.92
+C           Additional flag and matrix of values checks added.
+C
+C           J.D.Chambers     ECMWF      27.04.94
+C           Allow complex packing for spherical harmonics
+C
+C           J. Clochard, Meteo France, for ECMWF - January 1998.
+C           Take into account second-order packing for grid-point data.
+C           Revised printouts.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER KRET
+      INTEGER KSEC1
+      INTEGER KSEC4
+C
+      REAL    PSEC4
+C
+      DIMENSION KSEC1(*)
+      DIMENSION KSEC4(*)
+C
+      DIMENSION PSEC4(*)
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Reset return code.
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C*    Section 2 . Check values against code tables and extreme values.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C*    Check number of values to be encoded.
+      IF (KSEC4(1).EQ.0) THEN
+        KRET = 1
+        WRITE(GRPRSM,*)
+     X    'GRCHK4: Invalid number of data values to be encoded'
+     X    , KSEC4(1)
+      ENDIF
+C
+C*    Check number of bits per data value.
+      IF (KSEC4(2).LT.1.OR.KSEC4(2).GT.32) THEN
+        KRET = 1
+        WRITE(GRPRSM,*)
+     X     'GRCHK4: Invalid number of bits for packed data values'
+     X    , KSEC4(2)
+      ENDIF
+C
+C*    Check on type of data (grid or spherical harmonics).
+      IF ( KSEC4(3).NE.0 .AND. KSEC4(3).NE.128 ) THEN
+        WRITE(GRPRSM,*) 'GRCHK4: Invalid type of data', KSEC4(3)
+      ENDIF
+C
+C*    Check type of packing.
+      IF ( KSEC4(4).NE.0 .AND. KSEC4(4).NE.64 ) THEN
+        KRET = 1
+        WRITE(GRPRSM,*) 'GRCHK4: Invalid type of packing', KSEC4(4)
+      ENDIF
+C
+C*    Check data representation.
+      IF (KSEC4(5).NE.0.AND.KSEC4(5).NE.32) THEN
+        KRET = 1
+        WRITE(GRPRSM,*) 'GRCHK4: Invalid data representation', KSEC4(5)
+      ENDIF
+C
+C*    Check additional flag field.
+      IF (KSEC4(6).NE.0.AND.KSEC4(6).NE.16) THEN
+        KRET = 1
+        WRITE(GRPRSM,*)
+     X    'GRCHK4: Invalid additional flag field', KSEC4(6)
+      ENDIF
+C
+C*    Check reserved field.
+      IF (KSEC4(7).NE.0) THEN
+        WRITE(GRPRSM,*)
+     X    'GRCHK4: Reserved field not 0. May cause trouble'
+        WRITE(GRPRSM,*) 'GRCHK4: in future releases of GRIBEX.'
+      ENDIF
+C
+C*    Check number of values indicator.
+      IF (KSEC4(8).NE.0.AND.KSEC4(8).NE.64) THEN
+        KRET = 1
+        WRITE(GRPRSM,*) 'GRCHK4: Invalid number of fields indicator'
+     X    , KSEC4(8)
+      ENDIF
+C
+C*    Check secondary bit maps indicator.
+      IF (KSEC4(9).NE.0.AND.KSEC4(9).NE.32) THEN
+        KRET = 1
+        WRITE(GRPRSM,*) 'GRCHK4: Invalid secondary bit map indicator'
+     X    , KSEC4(9)
+      ENDIF
+C
+C*    Check value widths indicator.
+      IF (KSEC4(6).EQ.16.AND.KSEC4(10).NE.0.AND.KSEC4(10).NE.16) THEN
+        KRET = 1
+        WRITE(GRPRSM,*) 'GRCHK4: Invalid value widths', KSEC4(10)
+      ENDIF
+C
+C*    Tests specific to second-order packing.
+C
+      IF (KSEC4(3).EQ.0.AND.KSEC4(4).EQ.64) THEN
+C
+C*    Check constant width.
+        IF (KSEC4(10).EQ.0.AND.(ABS(KSEC4(11)).GE.KSEC4(2))) THEN
+          KRET = 1
+          WRITE(GRPRSM,9011) KSEC4(11), KSEC4(2)-1
+        ENDIF
+C
+C*    Check general extended 2nd-order packing indicator.
+        IF (KSEC4(12).NE.0.AND.KSEC4(12).NE.8) THEN
+          KRET = 1
+          WRITE(GRPRSM,*)
+     X     'GRCHK4: Invalid general extended 2n-order packing indicator'
+     X      , KSEC4(12)
+        ENDIF
+C
+C*    Check boustrophedonic ordering indicator.
+        IF (KSEC4(13).NE.0.AND.KSEC4(13).NE.4) THEN
+          KRET = 1
+          WRITE(GRPRSM,*)
+     X     'GRCHK4: Invalid boustrophedonic ordering indicator'
+     X      , KSEC4(13)
+        ENDIF
+C
+C*    Check spatial differencing indicator.
+        IF (KSEC4(14).NE.0.AND.KSEC4(14).NE.2) THEN
+          KRET = 1
+          WRITE(GRPRSM,*)
+     X    'GRCHK4: Invalid spatial differencing indicator'
+     X      , KSEC4(14)
+        ENDIF
+C
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9011 FORMAT (TR1,'GRCHK4 : Second-order packing with constant width ',
+     C        'option:',/,TR10,'Constant width value',I3,
+     C        ' not in range [-/+',I2,'(=KSEC4(2)-1)].')
+C
+      RETURN
+C
+      END
diff --git a/gribex/grib_int_t.h b/gribex/grib_int_t.h
new file mode 100755
index 0000000..d433fc5
--- /dev/null
+++ b/gribex/grib_int_t.h
@@ -0,0 +1,27 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef GRIB_INT_T_H
+#define GRIB_INT_T_H
+
+#ifdef INTEGER_IS_INT
+typedef int grib_int_t;
+#else
+typedef long grib_int_t;
+#endif
+typedef long * JPointer;
+typedef long long grib_int_64_t;
+
+typedef double grib_real_t;
+
+typedef unsigned char grib_octet_t;
+typedef const char grib_string_t;
+
+#endif /* End of GRIB_INT_T_H */
diff --git a/gribex/gribex.F b/gribex/gribex.F
new file mode 100755
index 0000000..192b40a
--- /dev/null
+++ b/gribex/gribex.F
@@ -0,0 +1,5086 @@
+      SUBROUTINE GRIBEX (KSEC0,KSEC1,KSEC2,PSEC2,KSEC3,PSEC3,KSEC4,
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+     C                   PSEC4,KLENP,KGRIB,KLENG,KWORD,HOPER,KRET)
+C---->
+#include "gribex.h"
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0 . Definition of variables. Data statements.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,KGRIB
+      DIMENSION KGRIB(*), KSEC0(*), KSEC1(*)
+      DIMENSION KSEC2(*), KSEC3(*), KSEC4(*)
+      INTEGER KLENP,KLENG,KWORD, KRET
+      REAL PSEC2, PSEC3, PSEC4
+      DIMENSION PSEC2(*), PSEC3(*), PSEC4(*)
+      CHARACTER*(*) HOPER
+C
+C     Local variables
+C
+      INTEGER N, NP, NINC
+      REAL  JPEPSLN
+      PARAMETER (JPEPSLN=1E-12)
+C                         `-----> tolerance used to check equality
+C                                 of floating point numbers - needed
+C                                 on some platforms (eg vpp700, linux)
+      CHARACTER*1   YFUNC, YTEMP
+      INTEGER IJDC, JLOOP, JLOOPO, ISTATUS, ISECLEN
+      INTEGER IDUMP
+#ifdef REAL_BIGGER_THAN_INTEGER
+      INTEGER IINDEX, ILOOPS, NREM, JPNSEC4, ILNGTH
+      PARAMETER (JPNSEC4=12800)
+      INTEGER*4 NSEC4
+      DIMENSION NSEC4(JPNSEC4)
+      REAL*4    XSEC4
+      DIMENSION XSEC4(JPNSEC4)
+      EQUIVALENCE (NSEC4(1), XSEC4(1))
+      INTEGER*8 IJDCXX
+      REAL*8    RJDCXX
+#else
+      INTEGER IJDCXX
+      REAL    RJDCXX
+#endif
+      EQUIVALENCE (IJDCXX, RJDCXX)
+      INTEGER I,IBLEN,IBITS,IBMAP,IBMAP2,IBYTEX,ICOUNT,NBYTE
+      INTEGER IEXP, IFLAG, IFLAGX, IFPT, IL
+      INTEGER ILEN, ILENF, ILEN1, ILEN2, ILEN3, ILEN4
+      INTEGER IMANT, IMISNG, IMISS, IMODAY, INC
+      INTEGER INIL, INITAL, INOLAT, INOLNG, INSPT, INUB
+      INTEGER INUM, IOFF, IPL, IPLEN, IPSEUD
+      INTEGER IPVPL, IRESOL, ISBMAP, NONMISS
+      INTEGER ISCALE, ISINT, ISKALE
+      INTEGER ISKIP, ITEMP, ITRND, IVALS, IP7777
+      INTEGER IEAST, IWEST, ILOEXT, INROWS
+C
+      INTEGER JPEDNO, JPLEN1
+      INTEGER KRETA, KRETB
+      INTEGER ITRUNC, ISUBSET, IS3BYTE
+      INTEGER NBPV
+      REAL RANGE
+C
+C     Wave coordinate information held in KSEC4 are 32-bit REALs,
+C     so REAL*4 ZREAL4 must be used for encoding/decoding.
+C
+      REAL*4  ZREAL4
+      REAL    ZMAXV, ZMAX, ZMIN, ZMISNG, ZMSVAL, ZREAL, ZREF, ZVAL
+#if defined(CRAY) || defined(CYBER) ||((defined IBM)&&(!defined rs6000))
+      REAL    ZS, ZAUXIL
+#else
+      DOUBLE PRECISION    ZS, ZAUXIL
+#endif
+      REAL    ZSCALE
+C
+      LOGICAL LENCODE, LDECODE, LPDEBUG
+      LOGICAL LGRDPT, LSPHERC, LCOMPLX 
+      LOGICAL LECMWF, LECLOC, LKWBCE, LSST11
+      LOGICAL LLARGE
+      LOGICAL LQUASI, LSECT2, LSECT3, LPERIO
+      LOGICAL L_IORJ
+      LOGICAL LALLPOS
+      LOGICAL LVEGGY
+      LOGICAL LSATIMG
+      INTEGER NITABLE, NICENTRE, NIPARAM
+C
+C     Externals
+C
+      INTEGER EGGSEC2, DGGSEC2, ELLSEC2, DLLSEC2, ESHSEC2, DSHSEC2
+      INTEGER EOCSEC2, DOCSEC2, ESVSEC2, DSVSEC2, EMESEC2, DMESEC2
+      INTEGER CSECT4, DSECT4A, GBITMAP, D2ORDR, C2ORDR, REF2GRB
+      INTEGER ONEBITS, D13FLAG
+C#ifdef GRIB2
+C     INTEGER G2ENCOD
+C     EXTERNAL G2ENCOD
+C#endif
+      EXTERNAL CSECT4, DSECT4A, GBITMAP, D2ORDR, C2ORDR, REF2GRB
+      EXTERNAL EGGSEC2, DGGSEC2, ELLSEC2, DLLSEC2, ESHSEC2, DSHSEC2
+      EXTERNAL EOCSEC2, DOCSEC2, ESVSEC2, DSVSEC2, EMESEC2, DMESEC2
+      EXTERNAL ONEBITS, D13FLAG
+C
+C     GRIB code version number used in coding data.
+C
+      PARAMETER (JPEDNO=1)
+C
+C     GRIBEX version number
+C
+      INTEGER IGRIBEX
+      CHARACTER*6 YGRIBEX
+C
+C     Length (in octets) used for Section 1, when coding data.
+C
+      PARAMETER (JPLEN1=28)
+C
+      INTEGER IPARM, ILALO, IGRIB, I7777
+      DIMENSION IPARM(4), ILALO(2), IGRIB(4), I7777(4)
+C
+      INTEGER JP24SET, JP23SET, JP16SET, JP8SET
+      PARAMETER ( JP24SET = 2**24 - 1 ) 
+C                            ^---> 16777215 = FFFFFF(hex) 
+      PARAMETER ( JP23SET = 2**23 - 1 ) 
+C                            ^---> 8388607  = 7FFFFF(hex) 
+      PARAMETER ( JP16SET = 2**16 - 1 ) 
+C                            ^---> 65535    =   FFFF(hex)
+      PARAMETER ( JP8SET  = 2**8 - 1 ) 
+C                            ^---> 255      =     FF(hex)
+C
+C     Predetermined bitmask variables
+C
+#ifndef USE_NO_POINTERS
+      INTEGER IBTMAP, IBTVALS
+#ifdef POINTER_64
+      INTEGER*8 IBTPTR
+#endif
+      POINTER (IBTPTR,IBTMAP)
+      DIMENSION IBTMAP(1)
+#endif
+C
+#include "grbcom.h"
+C
+C     Missing data indicator for integer and real values in GRIB code
+C     header fields.
+C
+      EQUIVALENCE (IMISNG,ZMISNG)
+C
+      EQUIVALENCE (ZREAL4,ISINT)
+C
+      SAVE INITAL, IBITS, IMISNG, NBYTE
+C
+C     Characters GRIB and 7777 in Ascii for use in Sections 0 and 5
+C     of GRIB code.
+C
+      DATA IGRIB /71,82,73,66/
+      DATA I7777 /55,55,55,55/
+      DATA YGRIBEX/'13.040'/, IGRIBEX/13040/
+C
+C     Initialise local variables
+C
+      DATA YFUNC/' '/,YTEMP/' '/
+      DATA IJDC/0/,JLOOP/0/,JLOOPO/0/
+#ifdef REAL_BIGGER_THAN_INTEGER
+      DATA IINDEX/0/,ILOOPS/0/,NREM/0/,ILNGTH/0/
+#endif
+      DATA IJDCXX/0/,I/0/,IBLEN/0/,IBITS/0/,IBMAP/0/,IBMAP2/0/
+      DATA IBYTEX/0/,ICOUNT/0/,NBYTE/0/
+      DATA IEXP/0/,IFLAG/0/,IFLAGX/0/,IFPT/0/,IL/0/
+      DATA ILEN/0/,ILENF/0/,ILEN1/0/,ILEN2/0/,ILEN3/0/,ILEN4/0/
+      DATA IMANT/0/,IMISNG/0/,IMISS/0/,IMODAY/0/,INC/0/
+      DATA INIL/0/,INITAL/0/,INOLAT/0/,INOLNG/0/,INSPT/0/,INUB/0/
+      DATA INUM/0/,IOFF/0/,IPL/0/,IPLEN/0/,IPSEUD/0/
+      DATA IPVPL/0/,IRESOL/0/,ISBMAP/0/,NONMISS/0/
+      DATA ISCALE/0/,ISINT/0/,ISKALE/0/
+      DATA ISKIP/0/,ITEMP/0/,ITRND/0/,IVALS/0/,IP7777/0/
+      DATA IEAST/0/,IWEST/0/,ILOEXT/0/,INROWS/0/
+C
+      DATA KRETA/0/,KRETB/0/,ITRUNC/0/,ISUBSET/0/
+C
+      DATA ZMAXV/0.0/,ZMAX/0.0/,ZMIN/0.0/,ZMSVAL/0.0/
+      DATA ZREF/0.0/,ZVAL/0.0/,ZS/0.0/,ZAUXIL/0.0/,ZSCALE/0.0/
+C
+      DATA LENCODE/.FALSE./,LDECODE/.FALSE./,LPDEBUG/.FALSE./
+      DATA LGRDPT/.FALSE./,LSPHERC/.FALSE./,LCOMPLX/.FALSE./ 
+      DATA LECMWF/.FALSE./,LECLOC/.FALSE./,LKWBCE/.FALSE./
+      DATA LSST11/.FALSE./,LLARGE/.FALSE./,LQUASI/.FALSE./
+      DATA LSECT2/.FALSE./,LSECT3/.FALSE./,LPERIO/.FALSE./
+      DATA L_IORJ/.FALSE./,LALLPOS/.FALSE./
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Set initial values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     Handle 'V' option - display version number
+C
+      IF( HOPER(1:1).EQ.'V' ) THEN
+        WRITE(GRPRSM,*) 'GRIBEX: Version is ',YGRIBEX
+        KRET = IGRIBEX
+        RETURN
+      ENDIF
+C
+C     Clear definition 13  flag
+C
+      N13FLAG = -1
+C
+C     Clear flag indicating GRIB product longer than 2**23-1 bytes long.
+      LLARGE = .FALSE.
+C
+C     Initialise flag indicating 'quasi-regular grid'
+      LQUASI = .FALSE.
+C
+C*    Set number of bits per computer word,missing data indicator and
+C     the number of bytes per computer word first time through.
+C     Try to set default values for parameters in common area,
+C     if not already set by user via calls to the GRS--- routines.
+C
+      IF( INITAL.EQ.0) THEN
+        CALL SETPAR (IBITS,IMISNG,NDBG)
+        NBYTE = IBITS/8
+        INITAL = 1
+        CALL GRSDEF
+      ENDIF
+C
+      IMISS = 0
+C
+C
+C     Set encoding/decoding flags initially dependent on 'L' option,
+C     since this option skips round most processing.
+      LENCODE = ( HOPER(1:1) .NE. 'L' )
+      LDECODE = ( HOPER(1:1) .EQ. 'L' )
+C
+      LPDEBUG = ( NDBG.GE.1 )
+C
+      IF( LPDEBUG ) THEN
+        WRITE(GRPRSM,*) 'GRIBEX: Version is ',YGRIBEX
+        WRITE(GRPRSM,*) 'GRIBEX: Section 1. Input values used -'
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Length of GRIB array (KLENG) = ',KLENG
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Length of data array (KLENP) = ',KLENP
+        WRITE(GRPRSM,*) 'GRIBEX: Operation code = ', HOPER
+Ce
+Ce      Extra printout if encoding
+Ce
+        IF( HOPER.EQ.'C'.OR.HOPER.EQ.'M'.OR.HOPER.EQ.'K') THEN
+          KSEC0(2) = JPEDNO
+          CALL GRPRS1(KSEC0,KSEC1)
+Ce
+          LSECT2 = KSEC1(5).GE.128
+          LSECT3 = MOD(KSEC1(5),128).GE.64
+Ce
+Ce        Print section 2 if present.
+Ce
+          IF( LSECT2 ) CALL GRPRS2(KSEC0,KSEC2,PSEC2)
+Ce
+Ce        Print section 3 if present.
+Ce
+          IF( LSECT3 ) CALL GRPRS3(KSEC0,KSEC3,PSEC3)
+Ce
+Ce        Print section 4.
+Ce
+          CALL GRPRS4(KSEC0,KSEC4,PSEC4)
+Ce
+Ce        Special print for 2D spectra wave field real values in
+Ce        section 4
+Ce
+          IF( (KSEC1(1).EQ.140) .AND.
+     X        (KSEC1(2).EQ. 98) .AND.
+     X        (KSEC1(24).EQ. 1) .AND.
+     X        ( (KSEC1(40).EQ.1045).OR.(KSEC1(40).EQ.1081) ) .AND.
+     X        ( (KSEC1(6) .EQ. 250).OR.(KSEC1(6) .EQ. 251) ) )
+     X      CALL GRPRS4W(KSEC4)
+        ENDIF
+      ENDIF
+C
+C     Reset return code to 0, retaining input value to decide
+C     on abort / no abort, if error encountered later.
+C
+      NOABORT = KRET
+      KRET    = 0
+C
+C     IPSEUD is used to indicate pseudo-GRIB data encountered,
+C     when decoding.
+C     ISBMAP is the bit-map section flag and indicates what decoding
+C     has been done on bit-maps and data.
+C     See informative return codes for KRET when decoding.
+C
+      IPSEUD = 0
+      ISBMAP = 0
+C
+C     Reset bit-pointer to 0.
+C
+      INSPT = 0
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Check input parameters.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X 'GRIBEX: Section 2. Check input parameters.'
+C
+C*    Check that valid function has been requested.
+C
+      YFUNC = HOPER
+#ifdef USE_NO_POINTERS
+      IF( YFUNC.EQ.'R' ) THEN
+        KRET = 201
+        WRITE(GRPRSM,*) 'GRIBEX: Invalid function requested - ',HOPER
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+#endif
+      L_IORJ = (HOPER.EQ.'I').OR.(HOPER.EQ.'J')
+      IF( YFUNC.NE.'C'.AND.YFUNC.NE.'D'.AND.(.NOT.L_IORJ).AND.
+     X    YFUNC.NE.'L'.AND.YFUNC.NE.'R'.AND.YFUNC.NE.'S'.AND.
+     X    YFUNC.NE.'X'.AND.YFUNC.NE.'Z'.AND.YFUNC.NE.'M'.AND.
+     X    YFUNC.NE.'G'.AND.YFUNC.NE.'A'.AND.YFUNC.NE.'B'.AND.
+     X    YFUNC.NE.'K') THEN
+        KRET = 201
+        WRITE(GRPRSM,*) 'GRIBEX: Invalid function requested - ',HOPER
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C     Function 'A' encodes 8-bit data.
+      IF( HOPER.EQ.'A') YFUNC = 'C'
+C
+C     Function 'B' decodes 8-bit data.
+      IF( HOPER.EQ.'B') YFUNC = 'D'
+C
+C*    Function 'L' returns the length of the GRIB message and
+C     GRIB Edition number only, so no array initialisation is
+C     necessary.
+C
+      IF( YFUNC.EQ.'L') GO TO 300
+C
+C*    Function 'M' is for coding data, and if a bit map is encountered
+C     GRIB messages are made a fixed length. HOPER is passed to the
+C     bit-map handling routine.
+C
+      IF( HOPER.EQ.'M') YFUNC = 'C'
+C
+C*    Function 'K' is the same as 'C', but for grid-point fields,
+C     an "aggressive packing" is performed: all user-allowed strategies
+C     for second-order packing are attempted, in order to make the
+C     shortest GRIB message.
+C
+      IF( HOPER.EQ.'K') YFUNC = 'C'
+C
+C*    Function 'I' is for decoding of sections 0, 1 and 2
+C     of GRIB code only. Value of HOPER is checked at the start of
+C     decoding section 3.
+C*    Function 'J' is for decoding of sections 0, 1, 2, 3 and 4.
+C
+      IF( L_IORJ) YFUNC = 'D'
+C
+C*    Function 'R' is the same as 'D', but if a quasi-regular
+C     Gaussian is encountered, it is converted to a regular one.
+C     Value of HOPER is checked near end of section 8.
+C
+      IF( HOPER.EQ.'R') YFUNC = 'D'
+C
+C*    Function 'S' is the same as 'D', but if analysis data in
+C     GRIB Experimental Edition is encountered, the time range
+C     indicator flag is set to indicate initialised analysis.
+C     Value of HOPER is checked  when time range indicator has
+C     been extracted.
+C
+      IF( HOPER.EQ.'S') YFUNC = 'D'
+C
+C*    Function 'X' is the same as 'D', but only the data
+C     at the requested points is unpacked.
+C     Value of HOPER is checked prior to unpacking data values.
+C
+      IF( HOPER.EQ.'X') YFUNC = 'D'
+C
+C*    Function 'G' is the same as 'D', but only the reference
+C     value and scale factor are unpacked. A pointer to packed data
+C     is returned.
+C     Value of HOPER is checked prior to unpacking data values.
+C
+      IF( HOPER.EQ.'G') YFUNC = 'D'
+C
+C*    Function 'Z' is for decoding only the information which could
+C     be handled by the the old decoding routine DECOGB (eg no bit
+C     maps) and is used by the new DECOGB interface.
+C
+      IF( HOPER.EQ.'Z') YFUNC = 'D'
+C
+      LENCODE = ( YFUNC.EQ.'C' )
+      LDECODE = ( YFUNC.EQ.'D' )
+Cd
+Cd    Set up the definition 13 flag variable
+Cd
+      IF( LDECODE ) N13FLAG = D13FLAG(KGRIB)
+C
+C*    Preset some arrays to 0.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Check number of bits per data field fits size of computer word.
+Ce
+        IF( IBITS.LT.KSEC4(2)) THEN
+          KRET = 202
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Number of bits per data value = ',KSEC4(2)
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: This exceeds word length which = ',IBITS
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Ce
+Ce      Check number of bits is not zero or negative
+Ce
+        IF( KSEC4(2) .LT. 0 ) THEN
+          KRET = 204
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Number of bits per data value = ',KSEC4(2)
+          WRITE(GRPRSM,*) 'GRIBEX: This must be positive.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GOTO 900
+        ELSEIF( KSEC4(2) .EQ. 0 ) THEN
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Number of bits per data value = ',KSEC4(2)
+          KSEC4(2) = 8
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: This must be positive - enforced to ',
+     X               KSEC4(2)
+        ENDIF
+Ce
+Ce      Check if number of bits per packed value = number of bits per
+Ce      computer word.
+Ce
+        LALLPOS = KSEC4(2) .EQ. IBITS
+Ce
+Ce      If entire field is missing, check that all data values are zero.
+Ce
+        IF( KSEC4(1).LT.0) THEN
+          IMISS = 1
+          ILENF = - KSEC4(1)
+          DO 210 JLOOP = 1 , ILENF
+            IF( PSEC4(JLOOP).NE.0.0) THEN
+              KRET = 203
+              WRITE(GRPRSM,*)
+     X  'GRIBEX: Non-zero value in missing data field.'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+  210     CONTINUE
+        ELSE
+          IMISS = 0
+          ILENF = KSEC4(1)
+        ENDIF
+Ce
+Ce      If input data is integer, change it to real.
+Ce
+        IF( ( KSEC4(5).EQ.32 ).AND.( HOPER.NE.'A' ) )
+     X    CALL RORINT(PSEC4,PSEC4,ILENF,'R')
+Ce
+        DO 215 JLOOP = 21,24
+          KSEC4(JLOOP) = 0
+  215   CONTINUE
+Ce
+      ELSE
+Cd
+Cd      Preset arrays to receive section header information to 0.
+Cd      Routine GSBITE resets data array to 0.
+Cd
+        DO 220 JLOOP = 1,25
+          KSEC1(JLOOP) = 0
+  220   CONTINUE
+Cd
+        DO 230 JLOOP = 1,22
+          KSEC2(JLOOP) = 0
+  230   CONTINUE
+Cd
+        DO 240 JLOOP = 1,33
+          KSEC4(JLOOP) = 0
+  240   CONTINUE
+Cd
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Indicator Section (Section 0) of GRIB code.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C#ifdef GRIB2
+C      IF( LENCODE.AND.(KSEC0(2).EQ.2) ) THEN
+C        IF( LPDEBUG ) WRITE(GRPRSM,*) 'GRIBEX: Section 3. Handle GRIB2'
+C        KRET = G2ENCOD(KSEC0,KSEC1,KSEC2,KSEC3,KSEC4,
+C     X                 PSEC2,PSEC3,PSEC4,PSEC3(2))
+C        RETURN
+C      ENDIF
+C#endif
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 3. Handle GRIB Indicator Section (Section 0)'
+C
+C*    Octets 1 - 4 : The letters G R I B.
+C     Four 8 bit fields.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Insert the letters G R I B.
+Ce
+        CALL INXBIT(KGRIB,KLENG,INSPT,IGRIB(1),4,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 301
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting letters GRIB'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ELSE
+Cd
+Cd      When decoding data, check letters -> GRIB, BUDG or TIDE.
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,IPARM(1),4,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 301
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting letters GRIB'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      Check that 'GRIB' is found where expected.
+Cd
+        IF( IPARM(1).EQ.71.AND.IPARM(2).EQ.82.AND.
+     X      IPARM(3).EQ.73.AND.IPARM(4).EQ.66) GO TO 310
+Cd
+Cd      ECMWF pseudo-grib data uses 'BUDG' and 'TIDE'.
+Cd
+        IF( IPARM(1).EQ.66.AND.IPARM(2).EQ.85.AND.
+     X      IPARM(3).EQ.68.AND.IPARM(4).EQ.71) GO TO 310
+Cd
+        IF( IPARM(1).EQ.84.AND.IPARM(2).EQ.73.AND.
+     X      IPARM(3).EQ.68.AND.IPARM(4).EQ.69) GO TO 310
+Cd
+Cd      Data is not GRIB or pseudo-grib.
+Cd
+        KRET = 305
+        WRITE(GRPRSM,*) 'GRIBEX: Input data is not GRIB or pseudo-grib.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+Cd
+      ENDIF
+C
+  310 CONTINUE
+C
+C*    Octets 5 - 7 : Length of message.
+C     One 24 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      When coding data, skip field. Length is inserted
+Ce      later, when known.
+Ce      Update bit-pointer.
+Ce
+        INSPT = INSPT + 24
+      ELSE
+Cd
+Cd      Extract field.
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,ITEMP,1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 302
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error extracting length of GRIB message.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      When decoding, use most-significant bit as a sign bit.
+Cd
+        IF( LDECODE ) CALL DSGNBT( KSEC0(1), ITEMP, 24, KRET)
+Cd
+Cd      If count is negative, have to rescale by factor of -120.
+Cd      This is a fixup to get round the restriction on product lengths
+Cd      due to the count being only 24 bits. It is only possible because
+Cd      the (default) rounding for GRIB products is 120 bytes.
+Cd
+        IF( KSEC0(1).LT.0 ) THEN
+          IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X      'GRIBEX: Special case, negative length multiplied by -120'
+          LLARGE = .TRUE.
+          KSEC0(1) = KSEC0(1) * (-120)
+        ENDIF
+      ENDIF
+C
+C*    Octet 8 : GRIB Edition Number.
+C     One 8 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Set value, if coding data.
+Ce
+        KSEC0(2) = JPEDNO
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC0(2),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 303
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error inserting/extracting GRIB Edition Number.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Ce
+      ELSE
+Cd
+Cd      Extract field.
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC0(2),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 303
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error inserting/extracting GRIB Edition Number.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      When decoding or calculating length, previous editions
+Cd      of the GRIB code must be taken into account.
+Cd
+Cd      In the table below, covering sections 0 and 1 of the GRIB
+Cd      code, octet numbering is from the beginning of the GRIB
+Cd      message;
+Cd      * indicates that the value is not available in the code edition;
+Cd      R indicates reserved, should be set to 0;
+Cd      Experimental edition is considered as edition -1.
+Cd
+Cd      GRIB code edition -1 has fixed length of 20 octets for
+Cd      section 1, the length not included in the message.
+Cd      GRIB code edition 0 has fixed length of 24 octets for
+Cd      section 1, the length being included in the message.
+Cd      GRIB code edition 1 can have different lengths for section
+Cd      1, the minimum being 28 octets, length being included in
+Cd      the message.
+Cd
+Cd                                              Octet numbers for code
+Cd                                                       editions
+Cd
+Cd                     Contents.                   -1      0      1
+Cd                     ---------                ----------------------
+Cd           Letters GRIB                          1-4    1-4    1-4
+Cd           Total length of GRIB message.          *      *     5-7
+Cd           GRIB code edition number               *      *      8
+Cd           Length of Section 1.                   *     5-7    9-11
+Cd           Reserved octet (R).                    *      8(R)   *
+Cd           Version no. of Code Table 2.           *      *     12
+Cd           Identification of centre.              5      9     13
+Cd           Generating process.                    6     10     14
+Cd           Grid definition .                      7     11     15
+Cd           Flag (Code Table 1).                   8     12     16
+Cd           Indicator of parameter.                9     13     17
+Cd           Indicator of type of level.           10     14     18
+Cd           Height, pressure etc of levels.      11-12  15-16  19-20
+Cd           Year of century.                      13     17     21
+Cd           Month.                                14     18     22
+Cd           Day.                                  15     19     23
+Cd           Hour.                                 16     20     24
+Cd           Minute.                               17     21     25
+Cd           Indicator of unit of time.            18     22     26
+Cd           P1 - Period of time.                  19     23     27
+Cd           P2 - Period of time                  20(R)   24     28
+Cd           or reserved octet (R).
+Cd           Time range indicator.                21(R)   25     29
+Cd           or reserved octet (R).
+Cd           Number included in average.       22-23(R)  26-27  30-31
+Cd           or reserved octet (R).
+Cd           Number missing from average.         24(R)  28(R)   32
+Cd           or reserved octet (R).
+Cd           Century of data.                       *      *     33
+Cd           Designates sub-centre if not 0.        *      *     34
+Cd           Decimal scale factor.                  *      *    35-36
+Cd           Reserved. Set to 0.                    *      *    37-48
+Cd           (Need not be present)
+Cd           For originating centre use only.       *      *    49-nn
+Cd           (Need not be present)
+Cd
+Cd      Identify which GRIB code edition is being decoded.
+Cd
+Cd      In GRIB edition 1, the edition number is in octet 8.
+Cd      In GRIB edition 0, octet 8 is reserved and set to 0.
+Cd      In GRIB edition -1, octet 8 is a flag field and can have a
+Cd      a valid value of 0, 1, 2 or 3.
+Cd
+Cd      However, GRIB edition number 0 has a fixed
+Cd      length of 24, included in the message, for section 1, so
+Cd      if the value extracted from octets 5-7 is 24 and that from
+Cd      octet 8 is 0, it is safe to assume edition 0 of the code.
+Cd
+        IF( KSEC0(1).EQ.24.AND.KSEC0(2).EQ.0) THEN
+Cd
+Cd        Set bit-pointer back by 32 bits (4 octets).
+          INSPT = INSPT - 32
+Cd
+Cd        Set length of GRIB message to missing data value.
+          KSEC0(1) = IMISNG
+Cd
+          GO TO 400
+        ENDIF
+Cd
+Cd      In GRIB Edition -1, octets 22 and 23 are reserved and set
+Cd      to 0. These octets in Edition 1 are the month and the day,
+Cd      and must be non-zero.
+Cd
+        ITEMP = 168
+        CALL INXBIT(KGRIB,KLENG,ITEMP,IMODAY,1,IBITS, 16,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 304
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error extracting octets 22 and 23 for'
+          WRITE(GRPRSM,*) 'GRIBEX: Experimental Edition check.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+        IF( IMODAY.EQ.0) THEN
+Cd
+Cd        Set bit-pointer back by 32 bits (4 octets).
+          INSPT = INSPT - 32
+Cd
+          KSEC0(2) = -1
+Cd
+Cd        Set length of GRIB message to missing data value.
+Cd
+          KSEC0(1) = IMISNG
+Cd
+Cd        Set length of section 1 of GRIB code to 20 octets.
+Cd
+          ILEN1 = 20
+Cd
+Cd        Skip next 4 octets, as they do not exist in
+Cd        the Experimental Edition of the code. ie
+Cd        length of Section and Table 2 Version Number.
+Cd
+          GO TO 401
+        ENDIF
+Cd
+      ENDIF
+C
+C*    If Grib Edition 1 and only length is required, go to section 9.
+C
+      IF( YFUNC.EQ.'L') GO TO 900
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 4 . Product Definition Section (Section 1) of GRIB code.
+C    -----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 4. Handle Product Definition (Section 1)'
+C
+C*    Check consistency of values given, with GRIB code, if required.
+C
+      IF( NVCK.EQ.1.AND. LENCODE ) THEN
+        CALL GRCHK1(KSEC1,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 499
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error found when checking values for'
+          WRITE(GRPRSM,*) 'GRIBEX: Section 1 against valid GRIB values.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C*    Octets 1 - 3 : Length of Section.
+C     One 24 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Set value, if coding data.
+        ILEN1 = JPLEN1
+Ce
+Ce      Extra octets if ECMWF local definition usage in section 1.
+Ce
+        LECMWF = (KSEC1(2) .EQ.98)
+        LECLOC = (KSEC1(2) .EQ.98) .OR.
+     X           (KSEC1(22).EQ.98)
+        LSST11 = (KSEC1( 6).EQ.139) .AND.
+     X           (KSEC1( 7).EQ.  1) .AND.
+     X           (KSEC1(22).EQ. 98)
+        LKWBCE = (KSEC1( 2).EQ.  7) .AND.
+     X           (KSEC1(22).NE. 98)
+Ce
+        IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Local extension in use for...'
+        IF( LPDEBUG.AND.LECLOC ) WRITE(GRPRSM,*)
+     X  'GRIBEX: ECMWF data'
+        IF( LPDEBUG.AND.LKWBCE ) WRITE(GRPRSM,*)
+     X  'GRIBEX: KWBC ensemble data'
+        IF( LPDEBUG.AND.LSST11 ) WRITE(GRPRSM,*) 'GRIBEX: SST data'
+Ce
+      ENDIF
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILEN1,1,IBITS, 24,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 401
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: Error inserting/extracting length of Section 1.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Octet 4  : Version Number of Table 2.
+C     One 8 bit field.
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(1),1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 402
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: Error inserting/extracting Param Table Version No.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+  401 CONTINUE
+C
+C*    Check Edition number.
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: GRIB Edition Number = ',KSEC0(2)
+      IF( KSEC0(2).GT.1) THEN
+        KRET = 413
+        WRITE(GRPRSM,*) 'GRIBEX: Grib Edition not catered for.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Print length of Section 1, if required.
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Length of Section 1 of GRIB = ',ILEN1,' octets.'
+C
+C*    Octet 5  : Identification of centre.
+C     Octet 6  : Generating process identification.
+C     Octet 7  : Grid definition.
+C     Octet 8  : Flag.
+C     Octet 9  : Indicator of parameter.
+C     Octet 10 : Indicator of type of level.
+C                (or satellite identifier)
+C                Satellite useage as defined by INPE/CPTEC
+C                and used by ECMWF, pending final definition
+C                by WMO.
+C     Six 8 bit fields.
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(2),6,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 403
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting six fields from'
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Identification of Centre to Indicator of'
+        WRITE(GRPRSM,*) 'GRIBEX: type of level.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C     If decoding, fix-up for Experimental Edition and Edition 0
+C     of GRIB code.
+C
+      IF( .NOT. LENCODE ) THEN
+Cd
+Cd      Set logical flag for ECMWF data
+Cd
+        LECMWF = (KSEC1(2).EQ.98)
+Cd
+Cd      In GRIB Experimental Edition and Edition 0
+Cd      the International Table Version Number in use was 0.
+Cd      ECMWF has always used its own local table. It is the same
+Cd      for Experimental Edition, Edition 0 and Edition 1 and is
+Cd      local table number 128.
+Cd
+        IF( KSEC0(2).LT.1) THEN
+          IF( LECMWF ) THEN
+Cd
+Cd          ECMWF data. Local table number.
+            KSEC1(1) = 128
+          ELSE
+Cd
+Cd          International table number.
+Cd          KSEC1(1) = 0 is already preset.
+          ENDIF
+        ENDIF
+Cd
+Cd      Fix-up for flag field, which was different in Experimental
+Cd      Edition.
+Cd
+Cd                        Experimental          Editions 0 and 1
+Cd                        Edition
+Cd
+Cd           Sections     Binary    Decimal     Binary    Decimal
+Cd           included     value     value       value     value
+Cd
+Cd             none       00000000    0         00000000     0
+Cd              2         00000001    1         10000000   128
+Cd              3         00000010    2         01000000    64
+Cd           2 and 3      00000011    3         11000000   192
+Cd
+        IF( KSEC0(2).EQ.-1) THEN
+          IF( KSEC1(5).EQ.1) KSEC1(5) = 128
+          IF( KSEC1(5).EQ.2) KSEC1(5) = 64
+          IF( KSEC1(5).EQ.3) KSEC1(5) = 192
+        ENDIF
+      ENDIF
+      LSECT2 = KSEC1(5).GE.128
+      LSECT3 = MOD(KSEC1(5),128).GE.64
+C
+C*    Once the flag field has been extracted, no further fields
+C     from section 1 of the GRIB code are required, when length
+C     of GRIB or pseudo-Grib message only is required.
+C
+      IF( YFUNC.EQ.'L') THEN
+C
+C       Length of section 0 + section 1 is 28 octets (224 bits)
+C       for GRIB Edition 0 and 24 octets (192 bits) for
+C       Experimental edition.
+C       Set bit-pointer and jump to extraction of length of section 3.
+C
+        INSPT = 224
+        IF( KSEC0(2).EQ.-1) INSPT = 192
+        GO TO 500
+      ENDIF
+C
+C*    Octets 11 - 12 : Height, pressure etc of levels or
+C                      satellite spectral band.
+C                      Satellite useage as defined by INPE/CPTEC
+C                      and used by ECMWF, pending final definition
+C                      by WMO.
+C     One 16 bit field or two 8 bit fields.
+C
+C     Satellite image if WMO table and parameter 127
+C
+      LSATIMG = ((KSEC1(1).LT.128).AND.(KSEC1(6).EQ.127))
+C
+C     For certain level types, no description is necessary, so when
+C     decoding the fields are set to 0 regardless of bit string content.
+C
+      IF( (.NOT.LENCODE).AND.
+     X    (.NOT.LSATIMG).AND.
+     X    ( ((KSEC1(7).LT.100).AND.(KSEC1(7).NE.20)).OR.
+     X      (KSEC1(7).EQ.102) .OR.
+     X      (KSEC1(7).EQ.200) .OR.
+     X      (KSEC1(7).EQ.201) ) ) THEN
+Cd
+Cd      Update bit-pointer and skip extraction.
+        KSEC1(8) = 0
+        KSEC1(9) = 0
+        INSPT = INSPT + 16
+        GO TO 402
+      ENDIF
+C
+C     Certain level types require that the description occupies
+C     both octets.
+C     Satellite Spectral band occupies both octets.
+C     Satellite useage as defined by INPE/CPTEC
+C     and used by ECMWF, pending final definition by WMO.
+C     Image data uses 2 octets.
+C
+      IF( (KSEC1(7).NE. 20).AND.
+     X    (KSEC1(7).NE.100).AND.
+     X    (KSEC1(7).NE.103).AND.
+     X    (KSEC1(7).NE.105).AND.
+     X    (KSEC1(7).NE.107).AND.
+     X    (KSEC1(7).NE.109).AND.
+     X    (KSEC1(7).NE.111).AND.
+     X    (KSEC1(7).NE.113).AND.
+     X    (KSEC1(7).NE.115).AND.
+     X    (KSEC1(7).NE.117).AND.
+     X    (KSEC1(7).NE.125).AND.
+     X    (KSEC1(7).NE.127).AND.
+     X    (KSEC1(7).NE.160).AND.
+     X    (KSEC1(7).NE.210).AND.
+     X    (.NOT.LSATIMG) ) THEN
+C
+C       Two 8 bit fields.
+        INUM  = 2
+        IBLEN = 8
+      ELSE
+C
+C       One 16 bit field.
+        INUM     = 1
+        IBLEN    = 16
+        KSEC1(9) = 0
+      ENDIF
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(8),INUM,IBITS, 
+     X             IBLEN,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 404
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting Height,'
+        WRITE(GRPRSM,*) 'GRIBEX: pressure, etc of levels.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Fix-up for ECMWF upper-air data incorrectly coded in Experimental
+C     Edition.
+C
+      IF( KSEC0(2).EQ.-1.AND. LECMWF ) THEN
+        ITEMP = INSPT - 16
+        INUM  = 2
+        IBLEN = 8
+        CALL INXBIT(KGRIB,KLENG,ITEMP,KSEC1(8),INUM,IBITS, 
+     X               IBLEN,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 404
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting Height,'
+          WRITE(GRPRSM,*) 'GRIBEX: pressure, etc of levels.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+        KSEC1(8) = KSEC1(8) * 32 + KSEC1(9)
+        KSEC1(9) = 0
+      ENDIF
+C
+  402 CONTINUE
+C
+C*    Octet 13 : Year of century.
+C     Octet 14 : Month.
+C     Octet 15 : Day.
+C     Octet 16 : Hour.
+C     Octet 17 : Minute.
+C     Octet 18 : Indicator of unit of time range..
+C     Six 8 bit fields.
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(10),6,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 405
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting six fields from'
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Year of century to Indicator of unit of'
+        WRITE(GRPRSM,*) 'GRIBEX: time range.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Fix-up for unit of time, which was different in Experimental
+C     Edition.
+C
+C
+C                  Experimental          Editions 0 and 1
+C                  Edition
+C
+C     Meaning      Decimal               Decimal
+C                  value                 value
+C
+C     Minute       0 or 30                 0
+C     Hour         1 or 40                 1
+C     Day          2 or 50                 2
+C     Month        3 or 60                 3
+C     Year         4 or 70                 4
+C     Decade       5 or 80                 5
+C     Normal         6                     6
+C     Century      7 or 90                 7
+C     Second         -                   254
+C
+      IF( KSEC0(2).EQ.-1) THEN
+        IF( KSEC1(15).EQ.90) KSEC1(15) = 7
+        IF( KSEC1(15).GT.10) KSEC1(15) = (KSEC1(15) / 10) - 3
+      ENDIF
+C
+C*    Octets 19 - 20 : Period of time.
+C     One 16 bit field or two 8 bit fields.
+C
+      IF( LENCODE .AND.KSEC1(18).EQ.10) THEN
+Ce
+Ce      One 16 bit field.
+        INUM  = 1
+        IBLEN = 16
+      ELSE
+Ce
+Ce      Two 8 bit fields.
+        INUM  = 2
+        IBLEN = 8
+      ENDIF
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(16),INUM,IBITS,
+     X            IBLEN,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 406
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting Period of time.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Octet 21 : Time range indicator.
+C     One 8 bit field.
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(18),1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 407
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: Error inserting/extracting time range indicator.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    When decoding, period of time field and time range
+C     indicator may need modification.
+C
+      IF( .NOT. LENCODE ) THEN
+Cd
+Cd      When decoding, length of period of time field is known
+Cd      only at this time. If a 16 bit field is indicated, put
+Cd      the two extracted 8-bit fields together.
+Cd
+        IF( KSEC1(18).EQ.10) THEN
+Cd
+Cd        One 16 bit field.
+          KSEC1(16) = KSEC1(16) * 256 + KSEC1(17)
+          KSEC1(17) = 0
+        ENDIF
+Cd
+Cd      If data is known to be initialised analysis and GRIB is
+Cd      Experimental Edition, set time range indicator flag.
+Cd
+        IF( KSEC1(16).EQ.0.AND.HOPER.EQ.'S'.AND.KSEC0(2).EQ.-1)
+     X    KSEC1(18) = 1
+Cd
+      ENDIF
+C
+C*    Octet 22 - 23 : Number averaged.
+C     One 16 bit field.
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(19),1,IBITS, 16,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 408
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting number averaged.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Octet 24 : Number missing from averages etc.
+C     One 8 bit field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(20),1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 409
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting number missing'
+        WRITE(GRPRSM,*) 'GRIBEX: from averages etc.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    This is the end of Section 1 if Edition 0 or -1 of GRIB code.
+C     Set other fields to be compatible with Edition 1, where possible.
+C
+      IF( KSEC0(2).LT.1) THEN
+C
+C       Century of data.
+C
+C       All ECMWF data in Edition 0 or -1 is 20th century.
+C       Otherwise set century to missing data value.
+C
+        IF( LECMWF ) THEN
+          KSEC1(21) = 20
+        ELSE
+          KSEC1(21) = IMISNG
+        ENDIF
+C
+C       Reserved field and decimal scale factor field (which
+C       was always 0).
+C
+C       KSEC1(22) and KSEC1(23) set to 0.
+C
+        KSEC1(22) = 0
+        KSEC1(23) = 0
+        GO TO 499
+      ENDIF
+C
+C*    Octet 25 : Century of data.
+C     One 8 bit field.
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC1(21),1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 410
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting century of data'
+        WRITE(GRPRSM,*) 'GRIBEX: or reserved field.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Octet 26 : Sub-centre.
+C     ( Now used at ECMWF/Washington to designate a sub-centre
+C       =   2 for NMC ensemble products(decoding only).
+C       =  98 for EPS products from Washington with ECMWF extensions.
+C       = 231 Meteo France Climate Centre (ECSN)
+C       = 232 MPI Climate Centre (ECSN)
+C       = 233 UKMO Climate Centre (ECSN)
+C       = 240 for ECMWF seasonal forecast centre (PROVOST).
+C       = 241 for Meteo France seasonal forecast centre (PROVOST).
+C       = 242 for EDF seasonal forecast centre (PROVOST).
+C       = 243 for UKMO seasonal forecast centre (PROVOST).
+C       = 0   otherwise. )
+C
+C     One 8 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      When coding ECMWF data, sub-centre is set to 0 unless a
+Ce      designated sub-centre or explicitly enabled by previous user
+Ce      call to GRSUBC.
+Ce
+        IF( .NOT.LECMWF .OR. NSUBCE.EQ.1 ) THEN
+          ITEMP = KSEC1(22)
+Ce
+        ELSE IF( (KSEC1(22).EQ. 98) .OR.
+     X           (KSEC1(22).EQ.231) .OR.
+     X           (KSEC1(22).EQ.232) .OR.
+     X           (KSEC1(22).EQ.233) .OR.
+     X           (KSEC1(22).EQ.240) .OR.
+     X           (KSEC1(22).EQ.241) .OR.
+     X           (KSEC1(22).EQ.242) .OR.
+     X           (KSEC1(22).EQ.243) )THEN
+          ITEMP = KSEC1(22)
+Ce
+        ELSE
+          ITEMP = 0
+        ENDIF
+      ENDIF
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT, ITEMP, 1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 810
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting dummy zero.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+Cd
+      IF( LDECODE ) THEN
+Cd
+Cd      When decoding, KSEC1(22) is set to message content.
+Cd
+        KSEC1(22) = ITEMP
+Cd
+Cd      Set flags for known special local extensions to section 1:
+Cd        ECMWF data
+Cd        Washington SST data
+Cd        Washington ensemble data
+Cd
+        LECLOC = (KSEC1(2).EQ.98) .OR.
+     X           (KSEC1(22).EQ.98)
+        LSST11 = (KSEC1( 6).EQ.139) .AND.
+     X           (KSEC1( 7).EQ.  1) .AND.
+     X           (KSEC1(22).EQ. 98)
+        LKWBCE = (KSEC1( 2).EQ.  7) .AND.
+     X           (KSEC1(22).NE. 98)
+Cd
+        IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Local extension in use for...'
+        IF( LPDEBUG.AND.LECLOC ) WRITE(GRPRSM,*) 'GRIBEX: ECMWF data'
+        IF( LPDEBUG.AND.LKWBCE ) WRITE(GRPRSM,*)
+     X  'GRIBEX: KWBC ensemble data'
+        IF( LPDEBUG.AND.LSST11 ) WRITE(GRPRSM,*) 'GRIBEX: SST data'
+Cd
+      ENDIF
+C
+C*    Octets 27 - 28 : Units decimal scale factor.
+C     One 16 bit field.
+C
+C     When coding, set sign bit if value is negative.
+C
+      IF( LENCODE ) CALL CSGNBT( ITEMP, KSEC1(23), 16, KRET)
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ITEMP,1,IBITS, 16,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 411
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting units decimal'
+        WRITE(GRPRSM,*) 'GRIBEX: scale factor.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C     When decoding, set sign bit if value is negative.
+C
+      IF( LDECODE ) CALL DSGNBT( KSEC1(23), ITEMP, 16, KRET)
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      When coding data, the reserved octets 29-40 need not
+Ce      be present and are not included, unless ECMWF local
+Ce      use of octets 41 onwards is indicated.
+Ce
+        IF( KSEC1(24).EQ.1.AND.((LECLOC.OR.LSST11).OR.LKWBCE)) THEN
+Ce
+Ce        Fill reserved octets with 0.
+Ce
+          DO 410 JLOOP = 29,40
+            CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 8,YFUNC,KRET)
+            IF( KRET.NE.0) THEN
+              KRET = 810
+              WRITE(GRPRSM,*) 'GRIBEX: Error inserting dummy zero.'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+  410     CONTINUE
+Ce
+Ce        Have to set sectionLength for KWBC ensemble products to
+Ce        force proper encoding
+Ce
+          IF( LKWBCE ) THEN
+            IF( KSEC1(42).NE.0) THEN
+              IF( KSEC1(46).NE.0) THEN
+#ifdef linux
+                ISECLEN = (256 + 86)*256*256
+              ELSE
+                ISECLEN = (256 + 60)*256*256
+              ENDIF
+#else
+                ISECLEN = 86*256 + 1
+              ELSE
+                ISECLEN = 60*256 + 1
+              ENDIF
+#endif
+            ENDIF
+            KGRIB(3) = ISECLEN
+          ENDIF
+Ce
+Ce        Insert local ECMWF data.
+          KRET = NOABORT
+          CALL ECLOC1(YFUNC,KSEC1,KGRIB,INSPT,IBITS,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 412
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting ECMWF local'
+            WRITE(GRPRSM,*) 'GRIBEX: data.'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+Ce
+        ENDIF
+Ce
+      ELSE
+Cd
+Cd      When decoding data the reserved octets are skipped.
+Cd      If local use is not ECMWF usage or Washington ensemble usage,
+Cd      the local use octets are also skipped.
+Cd      Presence is indicated by length of section > 28 octets.
+Cd
+        IF( ILEN1.GT.28.AND. (LECLOC.OR.LKWBCE.OR.LSST11) ) THEN
+Cd
+Cd        Set decoded values as zero and move pointer past
+Cd        reserved octets.
+Cd
+          DO 420 JLOOP = 25,36
+            KSEC1(JLOOP) = 0
+  420     CONTINUE
+          INSPT = INSPT + 96
+Cd
+Cd        Set flag to indicate local use.
+          KSEC1(24) = 1
+Cd
+Cd        Extract local ECMWF data.
+Cd        .. or Washington ensemble data.
+Cd
+          KRET = NOABORT
+          IF( (LECLOC.OR.LSST11).OR.LKWBCE )
+     X      CALL ECLOC1(YFUNC,KSEC1,KGRIB,INSPT,IBITS,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 412
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting ECMWF or'
+            WRITE(GRPRSM,*) 'GRIBEX: Washington local data.'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+Cd
+        ELSE
+          IF( ILEN1.GT.28) INSPT = INSPT + (ILEN1-28) * 8
+        ENDIF
+Cd
+      ENDIF
+C
+  499 CONTINUE
+C
+C*    Check for ECMWF pseudo-grib data. This saves calling GRIBEX
+C     with function 'I' to check if the data is GRIB data, and another
+C     call with function 'D' when GRIB data is found.
+C
+      IF( (.NOT.LENCODE).AND.(KSEC1(6).EQ.127.OR.KSEC1(6).EQ.128)) THEN
+        IF( KSEC1(1).EQ.128.AND. LECMWF ) THEN
+Cd
+          IPSEUD = -6
+Cd
+Cd        Change function to 'L' so that section 0 is fully decoded.
+          YFUNC = 'L'
+          GO TO 500
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 5 . Grid Description Section (Section 2) of GRIB code.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 5. Handle Grid Description Section (Section 2)'
+C
+      IF( .NOT.LSECT2 ) THEN
+C
+        IF( LDECODE ) THEN
+Cd
+Cd      If decoding data, set section 2 values to missing data indicator
+Cd
+          DO 505 JLOOP=1,22
+            KSEC2(JLOOP) = IMISNG
+  505     CONTINUE
+        ENDIF
+Cd
+Cd    Go to section 6, if no grid description included.
+Cd
+        GO TO 600
+      ENDIF
+C
+C*    Check consistency of values given, with GRIB code, if required.
+C
+      IF( NVCK.EQ.1.AND. LENCODE ) THEN
+        CALL GRCHK2 (KSEC1,KSEC2,PSEC2,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 599
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error found when checking values for'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 2 against valid GRIB values.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C*    Octets 1 - 3 : Length of section.
+C     One 24 bit field.
+C
+C     Calculate length of section, if coding data.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Length is normally 32 + stretched and/or rotated
+Ce      parameters + vertical coordinate parameters + list of
+Ce      numbers of points.
+Ce      (Lambert conformal and Mercator are 42 octets in length,
+Ce      while Space view is 40 for ECMWF (44 in GRIB specification)
+Ce
+Ce      Ordinary Grid.
+Ce
+        INC = 0
+Ce
+Ce      Space view perspective.
+Ce
+        IF( KSEC2(1).EQ.90) INC = 12
+Ce
+Ce      Lambert or Mercator +10.
+Ce
+        IF( KSEC2(1).EQ.3.OR.KSEC2(1).EQ.1) INC = 10
+Ce
+Ce
+Ce      Rotated grid.
+Ce      (Gaussian, Latitude/longitude or Spherical Harmonics)
+Ce
+        IF( KSEC2(1).EQ.10.OR.KSEC2(1).EQ.14.OR.KSEC2(1).EQ.60) INC = 10
+Ce
+Ce      Stretched grid.
+Ce      (Gaussian, Latitude/longitude or Spherical Harmonics)
+Ce
+        IF( KSEC2(1).EQ.20.OR.KSEC2(1).EQ.24.OR.KSEC2(1).EQ.70) INC = 10
+Ce
+Ce      Stretched and rotated grid.
+Ce      (Gaussian, Latitude/longitude or Spherical Harmonics)
+Ce
+        IF( KSEC2(1).EQ.30.OR.KSEC2(1).EQ.34.OR.KSEC2(1).EQ.80) INC = 20
+Ce
+Ce      Calculate data offset allowing for quasi-regular grid
+Ce      (Polar sterographic cannot be a quasi-regular grid)
+Ce
+        LQUASI = ( KSEC2(17).EQ.1 ) .AND. (KSEC2(1).NE.5)
+        IF( LQUASI ) THEN
+          ILEN2 = 32 + INC + (KSEC2(12)*4) + 2*KSEC2(3)
+        ELSE
+          ILEN2 = 32 + INC + (KSEC2(12)*4)
+        ENDIF
+Ce
+      ENDIF
+C
+C     Insert / extract field.
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILEN2,1,IBITS, 24,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 501
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: length of Section 2.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Print length of Section 2, if required.
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Length of Section 2 of GRIB = ',ILEN2,' octets.'
+C
+C*    If only length is required, update bit-pointer and jump
+C     to extraction of length of section 3.
+C
+      IF( YFUNC.EQ.'L') THEN
+        INSPT = INSPT -24 + ILEN2 * 8
+        GO TO 600
+      ENDIF
+C
+C*    Octet 4 : NV - number of vertical coordinate parameters.
+C     One 8 bit field.
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(12),1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 502
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: number of Vertical coordinate parameters.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Fixup for Editions -1 and 0 of GRIB code, where number
+C     of Vertical Coordinate Parameters must be calculated,
+C     as this octet contained the number of unused bits at the
+C     end of the section, which by definition of the section
+C     always had to be 0.
+C
+      IF( KSEC0(2).LT.1) THEN
+        KSEC2(12) = ( ILEN2 - 32 ) / 4
+      ENDIF
+C
+C*    Octet 5 : PV - location of list of vertical coordinate parameters,
+C                    if any,
+C               or
+C               PL - location of list of numbers of points, if no PV,
+C               or
+C               255 - no PV or PL.
+C     One 8 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Set value, if coding data.
+Ce
+Ce      Neither present is default.
+        IPVPL = 255
+Ce
+Ce      Vertical coordinate parameters present.
+        IF( KSEC2(12).NE.0) IPVPL = 32 + INC + 1
+Ce
+Ce      List of number of points present, if no vertical
+Ce      coordinate parameters present and if quasi-regular grid.
+Ce
+        IF( LQUASI.AND.KSEC2(12).EQ.0) IPVPL = 32 + INC + 1
+Ce
+Ce      Insert field.
+Ce
+        CALL INXBIT(KGRIB,KLENG,INSPT,IPVPL,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 503
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: location of List of vertical coordinate'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: parameters or List of numbers of points.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Ce
+      ELSE
+Cd
+Cd      If decoding data.  Extract field.
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,IPVPL,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 503
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: location of List of vertical coordinate'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: parameters or List of numbers of points.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      Experimental space view perspective data  received
+Cd      at ECMWF has all 0 bits.
+Cd      0 is illegal for all data types, so change it.
+Cd
+        IF( IPVPL.EQ.0) IPVPL = 255
+Cd
+Cd      Neither present, so set regular grid indicator.
+Cd
+        IF( IPVPL.EQ.255) THEN
+          KSEC2(17) = 0
+          LQUASI = .FALSE.
+        ENDIF
+Cd
+Cd      Vertical coordinate parameters present.
+Cd      If the length of section is greater than the
+Cd      end of the vertical coordinate parameters, then
+Cd      there is a list of numbers of points following, so
+Cd      set quasi-regular grid indicator.
+Cd
+        IF( KSEC2(12).NE.0) THEN
+          IPL = 4 * KSEC2(12) + IPVPL - 1
+          IF( IPL.LT.ILEN2) THEN
+            KSEC2(17) = 1
+            LQUASI = .TRUE.
+          ENDIF
+        ENDIF
+Cd
+Cd
+Cd      List of number of points present, no vertical
+Cd      coordinate parameters present, so set quasi-regular
+Cd      grid indicator.
+Cd
+        IF( KSEC2(12).EQ.0.AND.IPVPL.NE.255) THEN
+          KSEC2(17) = 1
+          LQUASI = .TRUE.
+        ENDIF
+Cd
+Cd      Fixup for Editions -1 and 0 of GRIB code, where
+Cd      all grids were regular.
+Cd
+        IF( KSEC0(2).LT.1) THEN
+          KSEC2(17) = 0
+          LQUASI = .FALSE.
+        ENDIF
+Cd
+      ENDIF
+C
+C*    Octet 6 : Data representation type.
+C     One 8 bit field.
+C
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(1),1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 504
+        WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+        WRITE(GRPRSM,*) 'GRIBEX: data representation type.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+      LSPHERC = .FALSE.
+      LGRDPT = .TRUE.
+C
+C****
+C     Gaussian grid definition.
+C****
+C
+      IF( KSEC2(1).EQ.4. .OR.
+     X    KSEC2(1).EQ.14 .OR.
+     X    KSEC2(1).EQ.24 .OR.
+     X    KSEC2(1).EQ.34     ) THEN
+C
+        IF( LENCODE ) THEN
+          KRET = EGGSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,LQUASI)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error encoding gaussian grid section 2'
+            KRET = 540
+            GOTO 900
+          ENDIF
+        ELSE
+          KRET = DGGSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error decoding gaussian grid section 2'
+            KRET = 541
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        GO TO 520
+      ENDIF
+C
+C****
+C     Latitude/longitude grid definition,
+C     Equidistant Cylindrical or Plate Carree.
+C****
+C
+      IF( KSEC2(1).EQ.0  .OR.
+     X    KSEC2(1).EQ.10 .OR.
+     X    KSEC2(1).EQ.20 .OR.
+     X    KSEC2(1).EQ.30     ) THEN
+C
+        IF( LENCODE ) THEN
+          KRET = ELLSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,LQUASI)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error encoding lat/long grid section 2'
+            KRET = 542
+            GOTO 900
+          ENDIF
+        ELSE
+          KRET = DLLSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error decoding lat/long grid section 2'
+            KRET = 543
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        GO TO 520
+      ENDIF
+C
+C****
+C     Spherical Harmonic format.
+C****
+C
+      IF( KSEC2(1).EQ.50 .OR.
+     X    KSEC2(1).EQ.60 .OR.
+     X    KSEC2(1).EQ.70 .OR.
+     X    KSEC2(1).EQ.80     ) THEN
+C
+        LSPHERC = .TRUE.
+        LGRDPT = .FALSE.
+C
+        IF( LENCODE ) THEN
+          KRET = ESHSEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Error encoding spectral section 2'
+            KRET = 544
+            GOTO 900
+          ENDIF
+        ELSE
+          KRET = DSHSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Error decoding spectral section 2'
+            KRET = 545
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        ITRUNC = KSEC2(2)
+C
+        GOTO 520
+      ENDIF
+C
+C****
+C*    Polar Stereographic.
+C****
+C
+      IF( KSEC2(1).EQ.5) THEN
+C
+C*      Octets 7 - 8  : Ni - number of points along X-axis.
+C       Octets 9 - 10 : Nj - number of points along Y-axis.
+C       Two 16 bit fields.
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 523
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: number of points along X or Y axis.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*      Octets 11 - 13 : La1 - latitude of first grid point.
+C       Octets 14 - 16 : Lo1 - longitude of first grid point.
+C       Two 24 bit fields.
+C
+C       When coding data, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(4), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(5), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 506
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude or longitude of first grid pt.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       When decoding data, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(4), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(5), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octet 17 : Resolution and components flag.
+C       One 8 bit field.
+C
+C       Resolution flag ( KSEC2(6) ) is not applicable.
+C
+        KSEC2(6) = 0
+        IF( LENCODE ) IRESOL = KSEC2(18)+KSEC2(19)
+C
+C       Insert / extract field.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 507
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: components flag.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+        IF( LDECODE ) THEN
+Cd
+Cd        All flag fields are already set to 0, so
+          IF( IRESOL.EQ.0) GO TO 513
+Cd
+Cd        Fix up for flag which was different in Experimental edition.
+Cd
+          IF( KSEC0(2).EQ.-1.AND.(IRESOL.EQ.1.OR.IRESOL.EQ.3))
+     X      IRESOL = 128
+Cd
+Cd        Resolution flag is not applicable.
+          IF( IRESOL.GE.128) IRESOL = IRESOL - 128
+Cd
+Cd        Set earth flag.
+          IF( IRESOL.GE.64) THEN
+            KSEC2(18) = 64
+            IRESOL    = IRESOL - 64
+          ENDIF
+Cd
+Cd        Set components flag.
+          KSEC2(19) = IRESOL
+Cd
+        ENDIF
+C
+  513   CONTINUE
+C
+C       Insert / extract field.
+C
+C       CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(6),1,IBITS, 8,YFUNC,KRET)
+C       IF( KRET.NE.0) THEN
+C         KRET = 507
+C         WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+C         WRITE(GRPRSM,*) 'GRIBEX: components flag.'
+C         WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+C         GO TO 900
+C       ENDIF
+C
+C*      Octets 18 - 20 : LoV - orientation of the grid.
+C       One 24 bit field.
+C
+C       When coding data, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) CALL CSGNBT( ILALO(1), KSEC2(7), 24, KRET)
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 508
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude or longitude of last grid point.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       When decoding data, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) CALL DSGNBT( KSEC2(7), ILALO(1), 24, KRET)
+C
+C*      Octets 21 - 23 : Dx - X direction grid length.
+C*      Octets 24 - 26 : Dy - Y direction grid length.
+C       Two 24 bit fields.
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 524
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: X or Y axis grid length.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*      Octet 27 : Projection centre flag.
+C       One 8-bit field.
+C
+C       Insert / extract field.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 525
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: Projection centre flag.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*      Octet 28 : Scanning mode flags.
+C       One 8 bit field.
+C
+C       Insert / extract field.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 511
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: scanning mode flags.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Fix-up for flag which was different in Experimental Edition.
+        IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C*      Octets 29 - 32 : Reserved.
+C       Two 16 bit fields.
+C
+C       If insertion, set bits to 0.
+        IF( LENCODE ) THEN
+          CALL INXBIT(KGRIB,KLENG,INSPT, 0, 1,IBITS, 32,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 810
+            WRITE(GRPRSM,*) 'GRIBEX: Error inserting dummy zero.'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+        ELSE
+Cd
+Cd        If extraction, only update bit pointer.
+          INSPT = INSPT + 32
+        ENDIF
+C
+        GO TO 520
+      ENDIF
+C
+C****
+C*    Space view perspective or orthographic.
+C****
+C
+      IF( KSEC2(1).EQ.90) THEN
+C
+        IF( LENCODE ) THEN
+          KRET = ESVSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS,ILEN2)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Error encoding spectral section 2'
+            KRET = 546
+            GOTO 900
+          ENDIF
+        ELSE
+          KRET = DSVSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS,ILEN2)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Error decoding spectral section 2'
+            KRET = 547
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C
+        GO TO 520
+C
+      ENDIF
+C
+C****
+C*    Mercator
+C****
+C
+      IF( KSEC2(1).EQ.1) THEN
+C
+        IF( LENCODE ) THEN
+          KRET = EMESEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,LQUASI)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Error encoding Mercator section 2'
+            KRET = 546
+            GOTO 900
+          ENDIF
+        ELSE
+          KRET = DMESEC2(KGRIB,KLENG,INSPT,KSEC0,KSEC2,IBITS,IMISNG)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Error decoding Mercator section 2'
+            KRET = 547
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C
+        GO TO 520
+C
+      ENDIF
+C
+C****
+C*    Lambert Conformal.
+C****
+C
+      IF( KSEC2(1).EQ.3) THEN
+C
+C*      Octets 7 - 8  : Ni - number of points along X-axis.
+C       Octets 9 - 10 : Nj - number of points along Y-axis.
+C       Two 16 bit fields.
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(2),2,IBITS, 16,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 523
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: number of points along X or Y axis.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*      Octets 11 - 13 : La1 - latitude of first grid point.
+C       Octets 14 - 16 : Lo1 - longitude of first grid point.
+C       Two 24 bit fields.
+C
+Ce      When coding data, set sign bit to 1, if value is negative.
+Ce
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(4), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(5), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 506
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude or longitude of first grid pt.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+Cd      When decoding data, if sign bit is 1, value is negative.
+Cd
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(4), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(5), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octet 17 : Resolution and components flag.
+C       One 8 bit field.
+C
+C       Resolution flag ( KSEC2(6) ) is not applicable.
+C
+        IF( LENCODE ) IRESOL = KSEC2(18)+KSEC2(19)+KSEC2(6)
+C
+C       Insert / extract field.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IRESOL,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 507
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: components flag.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+        IF( LDECODE ) THEN
+Cd
+Cd        If all flag fields are already set to 0, bypass.
+Cd
+          IF( IRESOL.EQ.0) GO TO 515
+Cd
+Cd        Resolution flag is not applicable.
+Cd
+          IF( IRESOL.GE.128) THEN
+            KSEC2(6) = 128
+            IRESOL   = IRESOL - 128
+          ENDIF
+Cd
+Cd        Set earth flag.
+Cd
+          IF( IRESOL.GE.64) THEN
+            KSEC2(18) = 64
+            IRESOL    = IRESOL - 64
+          ENDIF
+Cd
+Cd        Set components flag.
+Cd
+          KSEC2(19) = IRESOL
+Cd
+        ENDIF
+C
+  515   CONTINUE
+C
+C       Insert / extract field.
+C
+C*      Octets 18 - 20 : LoV - orientation of the grid.
+C       One 24 bit field.
+C
+Ce      When coding data, set sign bit to 1, if value is negative.
+Ce
+        IF( LENCODE ) CALL CSGNBT( ILALO(1), KSEC2(7), 24, KRET)
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 508
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude or longitude of last grid point.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+Cd      When decoding data, if sign bit is 1, value is negative.
+Cd
+        IF( LDECODE ) CALL DSGNBT( KSEC2(7), ILALO(1), 24, KRET)
+C
+C*      Octets 21 - 23 : Dx - X direction grid length.
+C*      Octets 24 - 26 : Dy - Y direction grid length.
+C       Two 24 bit fields.
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(9),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 524
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: X or Y axis grid length.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*      Octet 27 : Projection centre flag.
+C       One 8-bit field.
+C
+C       Insert / extract field.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(13),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 525
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: Projection centre flag.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*      Octet 28 : Scanning mode flags.
+C       One 8 bit field.
+C
+C       Insert / extract field.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(11),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 511
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: scanning mode flags.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Fix-up for flag which was different in Experimental
+C            Edition.
+C
+        IF( KSEC0(2).EQ.-1.AND.KSEC2(11).EQ.1) KSEC2(11) = 0
+C
+C*      Octets 29 - 31 : Latin 1.
+C*      Octets 32 - 34 : Latin 2.
+C       Two 24 bit fields.
+C
+Ce      When coding data, set sign bit to 1, if value is negative.
+Ce
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(14), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(15), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 531
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Latin1 or Latin2 of secants points.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+Cd      When decoding data, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(14), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(15), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octets 35 - 37 : Latitude of the southern pole.
+C*      Octets 38 - 40 : Longitude of the southern pole.
+C       Two 24 bit fields.
+C
+Ce      When coding data, set sign bit to 1, if value is negative.
+Ce
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(20), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(21), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 532
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude/longitude of southern pole.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+Cd      When decoding data, if sign bit is 1, value is negative.
+Cd
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(20), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(21), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octets 41 - 42 : Reserved.
+C       One 16 bit fields.
+C
+        IF( LENCODE ) THEN
+C
+Ce        All bits already set to 0.
+Ce        No insertion, only update bit pointer.
+Ce
+          INSPT = INSPT + 16
+Ce
+        ELSE
+Cd
+Cd        No extraction, only update bit pointer.
+Cd
+          INSPT = INSPT + 16
+Cd
+        ENDIF
+C
+        GO TO 520
+      ENDIF
+C
+C
+C****
+C     Ocean grid definition.
+C****
+C
+      IF( KSEC2(1).EQ.192 ) THEN
+C
+        IF( LENCODE ) THEN
+          KRET = EOCSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error encoding ECMWF ocean section 2'
+            KRET = 546
+            GOTO 900
+          ENDIF
+        ELSE
+          KRET = DOCSEC2(KGRIB,KLENG,INSPT,KSEC2,IBITS)
+          IF( KRET.NE.0 ) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error decoding ECMWF ocean section 2'
+            KRET = 547
+            GOTO 900
+          ENDIF
+        ENDIF
+        GOTO 520
+C
+      ENDIF
+C
+C****
+C*    Other representation types not yet catered for.
+C****
+C
+      KRET = 598
+      WRITE(GRPRSM,*)
+     X  'GRIBEX: Representation type not catered for:',KSEC2(1)
+      WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+      GO TO 900
+C
+C*    Rotation parameters for rotated or stretched and rotated grids.
+C     (Gaussian, Latitude/longitude or Spherical Harmonics)
+C
+  520 CONTINUE
+C
+      IF( KSEC2(1).EQ.10.OR.KSEC2(1).EQ.30.OR.
+     X    KSEC2(1).EQ.14.OR.KSEC2(1).EQ.34.OR.
+     X    KSEC2(1).EQ.60.OR.KSEC2(1).EQ.80) THEN
+C
+C*      Octets 33 - 35 : Latitude of the southern pole.
+C       Octets 36 - 38 : Longitude of the southern pole.
+C       Two 24 bit fields.
+C
+C       When coding data, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(13), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(14), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 517
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude or longitude of southern pole.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       When decoding data, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(13), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(14), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octets 39 - 42 : Angle of rotation.
+C       One 8 bit and one 24 bit field.
+C
+        IF( LENCODE ) THEN
+Ce
+Ce        Convert floating point to GRIB representation.
+          ITRND = 1
+          CALL CONFP3 (PSEC2(1),IEXP,IMANT,IBITS,ITRND)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+        CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS, 24,YFUNC,KRETB)
+        KRET = KRET + KRETB
+        IF( KRET.NE.0) THEN
+          KRET = 518
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: angle of rotation.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+        IF( LDECODE ) THEN
+Cd
+Cd        Convert GRIB representation to floating point.
+          CALL DECFP2 (PSEC2(1),IEXP,IMANT)
+Cd
+        ENDIF
+      ENDIF
+C
+C*    Stretching parameters for stretched grids.
+C     (Gaussian, Latitude/longitude or Spherical Harmonics)
+C
+      IF( KSEC2(1).EQ.20.OR.KSEC2(1).EQ.24.OR.KSEC2(1).EQ.70) THEN
+C
+C*      Octets 33 - 35 : Latitude of pole of stretching.
+C       Octets 36 - 38 : Longitude of pole of stretching.
+C       Two 24 bit fields.
+C
+C       When coding data, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(15), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(16), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 519
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude/longitude of pole of stretching.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       When decoding data, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(15), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(16), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octets 39 - 42 : Stretching factor.
+C       One 8 bit and one 24 bit field.
+C
+C       Convert floating point to GRIB representation.
+        ITRND = 1
+        IF( LENCODE ) CALL CONFP3 (PSEC2(2),IEXP,IMANT,IBITS,ITRND)
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+        CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS, 24,YFUNC,KRETB)
+        KRET = KRETA + KRETB
+        IF( KRET.NE.0) THEN
+          KRET = 520
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: stretching factor.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Convert GRIB representation to floating point.
+        IF( LDECODE ) CALL DECFP2 (PSEC2(2),IEXP,IMANT)
+C
+      ENDIF
+C
+C*    Stretching parameters for stretched and rotated grids.
+C     (Gaussian, Latitude/longitude or Spherical Harmonics)
+C
+      IF( KSEC2(1).EQ.30.OR.KSEC2(1).EQ.34.OR.KSEC2(1).EQ.80) THEN
+C
+C*      Octets 43 - 45 : Latitude of pole of stretching.
+C       Octets 46 - 48 : Longitude of pole of stretching.
+C       Two 24 bit fields.
+C
+C       When coding data, set sign bit to 1, if value is negative.
+C
+        IF( LENCODE ) THEN
+          CALL CSGNBT( ILALO(1), KSEC2(15), 24, KRET)
+          CALL CSGNBT( ILALO(2), KSEC2(16), 24, KRET)
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILALO(1),2,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 519
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: latitude/longitude of pole of stretching.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       When decoding data, if sign bit is 1, value is negative.
+C
+        IF( LDECODE ) THEN
+          CALL DSGNBT( KSEC2(15), ILALO(1), 24, KRET)
+          CALL DSGNBT( KSEC2(16), ILALO(2), 24, KRET)
+        ENDIF
+C
+C*      Octets 49 - 52 : Stretching factor.
+C       One 8 bit and one 24 bit field.
+C
+C       Convert floating point to GRIB representation.
+        ITRND = 1
+        IF( LENCODE ) CALL CONFP3 (PSEC2(2),IEXP,IMANT,IBITS,ITRND)
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+        CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS, 24,YFUNC,KRETB)
+        KRET = KRETA + KRETB
+        IF( KRET.NE.0) THEN
+          KRET = 520
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: stretching factor.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Convert GRIB representation to floating point.
+C
+        IF( LDECODE ) CALL DECFP2 (PSEC2(2),IEXP,IMANT)
+C
+      ENDIF
+C
+C*    Vertical coordinate parameters, if any.
+C
+      IF( KSEC2(12).NE.0) THEN
+        ITRND = 1
+        DO 530 JLOOP = 1 , KSEC2(12)
+C
+C         One 8 bit and one 24 bit field.
+C
+Ce        Convert floating point to GRIB representation.
+          IF( LENCODE )
+     X      CALL CONFP3 (PSEC2(JLOOP+10),IEXP,IMANT, IBITS,ITRND)
+C
+C         Insert / extract fields.
+C
+          CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+          CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS, 24,YFUNC,KRETB)
+          KRET = KRETA + KRETB
+          IF( KRET.NE.0) THEN
+            KRET = 521
+            WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+            WRITE(GRPRSM,*) 'GRIBEX: vertical coordinate parameters.'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+C
+Cd        Convert GRIB representation to floating point.
+          IF( LDECODE ) CALL DECFP2 (PSEC2(JLOOP+10),IEXP,IMANT)
+C
+  530   CONTINUE
+      ENDIF
+C
+C*    List of number of points, if any.
+C     Number of 16 bit fields.
+C
+      IF( LQUASI) THEN
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC2(23),KSEC2(3),IBITS,
+     X               16,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 522
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting'
+          WRITE(GRPRSM,*) 'GRIBEX: list of numbers of points.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 6 . Bit Map Section (section 3) of GRIB code.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 6. Handle Bit Map Section (Section 3)'
+C
+C*    Go to section 9, if decoding of identification sections only and
+C     GRIB Code Edition is higher than 0. If Edition is lower the
+C     length of the GRIB message needs to be calculated, so change
+C     function to 'L' to complete decoding of section 0.
+C     Number of data values decoded ( KSEC4(1) ) already set to 0.
+C
+      IF( HOPER(1:1).EQ.'I') THEN
+        IF( KSEC0(2).GT.0) THEN
+          GO TO 900
+        ELSE
+          YFUNC = 'L'
+        ENDIF
+      ENDIF
+C
+C*    Set integer or real missing data value.
+C
+      IF( KSEC4(5) .EQ. 0 )  THEN
+        ZMSVAL = PSEC3(2)
+      ELSE
+        ZMSVAL = REAL(KSEC3(2))
+      ENDIF
+C
+C*    Go to section 7, if no bit map required.
+C
+      IF( .NOT.LSECT3 ) GO TO 700
+C
+C*    Set bit-map flag and attempt no decoding of bit-map, if
+C     routine has been called by the DECOGB interface routine,
+C     which is provided for upward compatibility with old software.
+C
+      IF( HOPER.EQ.'Z') THEN
+        ISBMAP = -5
+        WRITE(GRPRSM,*) 'GRIBEX: Bit-map found. No data decoded.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', ISBMAP
+        GO TO 900
+      ENDIF
+C
+C*    Check consistency of values given, with GRIB code, if required.
+C
+      IF( NVCK.EQ.1.AND. LENCODE ) THEN
+        CALL GRCHK3 (KSEC1,KSEC3,PSEC3,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 699
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error found checking values for section 3'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C*    When coding data, calculate the length of section and number
+C     of unused bits.
+C
+      IF( LENCODE ) THEN
+Ce
+        IF( KSEC3(1).NE.0) THEN
+Ce
+Ce        Predetermined bit-map table included.
+Ce        Length of section is 6 octets, number of unused bits is 0.
+          ILEN3 = 6
+          INUB  = 0
+Cjdc      KRET = GBITMAP(KSEC3(1), IBTVALS, NONMISS, IBTPTR, NBYTE)
+Cjdc      IVALS = NONMISS
+Ce
+        ELSE
+Ce
+Ce        Bit-map included in section 3.
+Ce        Length of section = 6 octets of header + length of
+Ce        bit-map, rounded to a multiple of 2 octets.
+Ce
+Ce        Set IVALS to the number of bits in the bit-map.
+          IF( KSEC4(8).EQ.0) THEN
+Ce
+Ce          Each bit in the bit-map represents a single value.
+            IVALS = ILENF
+          ELSE
+Ce
+Ce          Each bit in the bit-map represents a matrix of values.
+            IVALS = ILENF / (KSEC4(50)*KSEC4(51))
+          ENDIF
+Ce
+          ITEMP = 48 + IVALS
+          ILEN3 = ( ITEMP + 15 ) / 16
+          ILEN3 = ILEN3 * 2
+Ce
+Ce        Number of unused bits.
+          INUB = ILEN3 * 8 - ITEMP
+Ce
+        ENDIF
+Ce
+      ENDIF
+C
+C*    Octets 1 - 3 : Length of section.
+C     One 24 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ILEN3,1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 601
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error inserting/extracting section 3 length'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*    Print length of Section 3, if required.
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Length of Section 3 of GRIB = ',ILEN3,' octets.'
+C
+C     If only length is required, update bit-pointer and jump
+C     to extraction of length of section 4.
+C
+      IF( YFUNC.EQ.'L') THEN
+        INSPT = INSPT -24 + ILEN3 * 8
+        GO TO 700
+      ENDIF
+C
+C*    Octet 4 : Number of unused bits at end of section.
+C     One 8 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,INUB,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 602
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting number'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: unused bits at the end of Section 3.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C*    Octets 5-6 : Bit-map table reference.
+C     One 16 bit field.
+C
+C     Insert/extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,KSEC3(1),1,IBITS, 16,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 603
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: Error inserting/extracting bit-map reference table'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C*    Set integer or real missing data value.
+C
+      IF( KSEC4(5) .EQ. 0 )  THEN
+        ZMSVAL = PSEC3(2)
+      ELSE
+        ZMSVAL = REAL(KSEC3(2))
+      ENDIF
+C
+C*    Finished if a predetermined bit-map table is given.
+C
+      IF( KSEC3(1).NE.0) GO TO 700
+C
+C*    Bit-map definition included.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Insert primary bit-map. Set function for fixed length
+Ce      messages if required.
+Ce
+        YTEMP = YFUNC
+        IF( HOPER.EQ.'M') YTEMP = 'M'
+Ce
+        IF( KSEC4(8).EQ.64) THEN
+Ce
+Ce        Matrix of values at a point.
+          ITEMP = KSEC4(50) * KSEC4(51)
+        ELSE
+Ce
+Ce        Single value at each point.
+          ITEMP = 1
+        ENDIF
+Ce
+Ce      Retain pointer to bit-map location.
+Ce
+        IBMAP = INSPT
+Ce
+        CALL INSMP1 (KGRIB,KLENG,INSPT,KSEC4(9),PSEC4,
+     X               ILENF,IBITS,ZMSVAL,YTEMP,ITEMP,NDBG,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 604
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting primary bit map.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Ce
+Ce      Number of data values remaining to be handled
+Ce      is now in ILENF, which is used when finding maximum and
+Ce      minimum values etc. When a matrix of values is present
+Ce      PSEC4 may still contain missing data indicators for each
+Ce      matrix.
+Ce
+Ce      Effective number of points will be returned in KSEC4(21).
+Ce
+        NONMISS = ILENF
+Ce
+Ce      Unused bits at end of section.
+Ce      These bits are already set to 0, so update bit-pointer only.
+Ce
+        INSPT = INSPT + INUB
+Ce
+      ELSE
+Cd
+Cd      Retain pointer to bit-map location.
+Cd
+        IBMAP = INSPT
+Cd
+Cd      IVALS is the number of bits in the bit-map. It is the same
+Cd      as the number of data values (including missing data
+Cd      values to be decoded) when each point represents a single
+Cd      data value. When each bit in the bit-map represents a
+Cd      matrix of values, it is the number of matrices.
+Cd
+        IVALS = (ILEN3 - 6) * 8 - INUB
+Cd
+Cd      Update bit-pointer to start of section 4 of Grib message.
+        INSPT = INSPT - 48 + ILEN3 * 8
+Cd
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 7 . Binary Data Section (section 4) of GRIB code.
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 7. Handle Binary Data Section (Section 4)'
+C
+C*    Check consistency of values given, with GRIB code, if required.
+C
+      IF( NVCK.EQ.1.AND. LENCODE ) THEN
+        CALL GRCHK4 (KSEC1,KSEC4,PSEC4,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 799
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error found when checking values for section 4'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C*    Retain value of the pointer to the first bit in Section 4.
+C     When coding data, this is needed later to insert the length
+C     of Section 4 and the number of unused bits.
+C     When decoding data, this is used later to calculate the
+C     number of packed data values which have to be decoded.
+C
+      IPLEN = INSPT
+C
+C*    Octets 1 - 3 : Length of section.
+C     One 24 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Increment pointer.
+        INSPT = INSPT + 24
+      ELSE
+Cd
+Cd      Extract field.
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,ILEN4,1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 701
+          WRITE(GRPRSM,*) 'GRIBEX: Error extracting section 4 length'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      If a very large product, the section 4 length field holds
+Cd      the number of bytes in the product after section 4 upto
+Cd      the end of the padding bytes.
+Cd      This is a fixup to get round the restriction on product lengths
+Cd      due to the count being only 24 bits. It is only possible because
+Cd      the (default) rounding for GRIB products is 120 bytes.
+Cd
+     
+Cljbf   in case of big fields, revert the 
+Cljbf   workaround in decoding in case we realize it
+Cljbf   is not paked using the *120 trick
+Cljbf   
+  
+        IF( LLARGE .AND. ILEN4.GT.120) THEN
+          KSEC0(1) = KSEC0(1) / 120
+          KSEC0(1) = KSEC0(1) * 2
+          LLARGE = .FALSE.
+        ENDIF    
+         
+        IF( LLARGE ) ILEN4 = KSEC0(1) - (INSPT/8) - ILEN4 + 3
+Cd
+Cd      Print length of Section 4, if required.
+Cd
+        IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X    'GRIBEX: Length of Section 4 of GRIB = ',ILEN4,' octets.'
+Cd
+Cd      Set length if required, by updating bit-pointer and
+Cd      adding length of section 5 (32 bits). Length in bytes.
+Cd      Finished if length only required, so go to section 9.
+Cd
+        IF( YFUNC.EQ.'L'.OR.HOPER.EQ.'X') THEN
+          KSEC0(1) = (INSPT - 24 + ILEN4 * 8 + 32) / 8
+          IF( YFUNC.EQ.'L') GO TO 900
+        ENDIF
+Cd
+      ENDIF
+C
+C*    Octet 4 : 4 bit flag field and 4 bit unused bit count field.
+C     One 8 bit field for insertion/extraction purposes.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Type of data (spherical harmonic coefficients or grid
+Ce      point) is taken from KSEC4(3) only if no Section 2 is
+Ce      included.(This allows for data coded without Section 2).
+Ce
+        IF( LSECT2 ) THEN
+Ce
+Ce        If section 2 is present, it says if data is spherical harmonic
+Ce
+          IF( LSPHERC ) THEN
+            KSEC4(3) = 128
+          ELSE
+            KSEC4(3) = 0
+          ENDIF
+Ce
+        ELSE
+Ce
+Ce        Section 4 says if it's spherical harmonic data..
+Ce
+          LSPHERC = ( KSEC4(3) .EQ. 128 )
+          LGRDPT  = .NOT.LSPHERC
+        ENDIF
+Ce
+Ce      When coding data, field is inserted later, when
+Ce      number of unused bits is known and added to it.
+Ce
+Ce      Increment pointer.
+        INSPT = INSPT + 8
+Ce
+      ELSE
+Cd
+Cd      Decoding -> extract field.
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,IFLAG,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 706
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error extracting section 4 flag field.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      All flags already preset to 0.
+Cd
+        IF( KSEC0(2).EQ.-1) THEN
+Cd
+Cd        In the Experimental Edition flag field was
+Cd        0000 for grid point data.
+Cd        0001 for spherical harmonic data.
+Cd
+          ITEMP = IFLAG / 16
+          INIL  = IFLAG - ITEMP * 16
+          IF( ITEMP.NE.0) KSEC4(3) = 128
+          GO TO 710
+        ENDIF
+Cd
+        IF( KSEC0(2).EQ.0) THEN
+Cd
+Cd        In Edition 0 flag field only 2 first bits had significance.
+Cd 
+Cd        0- for grid point data.
+Cd        1- for spherical harmonic data.
+Cd        -0 for simple packing.
+Cd        -1 for complex packing (only supported for spectral data).
+Cd
+          IF( IFLAG.GE.128) THEN
+            KSEC4(3) = 128
+            IFLAG    = IFLAG - 128
+          ENDIF
+Cd
+          IF( IFLAG.GE.64) THEN
+            KSEC4(4) = 64
+            IFLAG    = IFLAG - 64
+          ENDIF
+Cd
+          INIL  = IFLAG
+        ELSEIF( KSEC0(2).EQ.1) THEN
+Cd
+Cd        In Edition 1 flag field all 4 bits have significance.
+Cd 
+Cd        0--- for grid point data.
+Cd        1--- for spherical harmonic data.
+Cd        -0-- for simple packing.
+Cd        -1-- for complex or second order packing.
+Cd        --0- for floating point values.
+Cd        --1- for integer values.
+Cd        ---0 for no additional flags at Octet 14.
+Cd        ---1 for additional flags at Octet 14.
+Cd
+          IF( IFLAG.GE.128) THEN
+            KSEC4(3) = 128
+            IFLAG    = IFLAG - 128
+          ENDIF
+Cd
+          IF( IFLAG.GE.64) THEN
+            KSEC4(4) = 64
+            IFLAG    = IFLAG - 64
+          ENDIF
+Cd
+          IF( IFLAG.GE.32) THEN
+            KSEC4(5) = 32
+            IFLAG    = IFLAG - 32
+          ENDIF
+Cd
+          IF( IFLAG.GE.16) THEN
+            KSEC4(6) = 16
+            IFLAG    = IFLAG - 16
+          ENDIF
+Cd
+          INIL  = IFLAG
+        ENDIF
+Cd
+  710   CONTINUE
+Cd 
+Cd      Type of data (spherical harmonic coefficients or grid
+Cd      point) is taken from KSEC4(3) only if no Section 2 is
+Cd      included.(This allows for data coded without Section 2).
+Cd
+        IF( .NOT.LSECT2 ) THEN 
+          LSPHERC = ( KSEC4(3) .EQ. 128 )
+          LGRDPT  = .NOT.LSPHERC
+        ELSEIF( LSPHERC ) THEN
+          KSEC4(3) = 128
+        ELSE
+          KSEC4(3) = 0
+        ENDIF
+Cd
+Cd      Print number of unused bits, if required.
+Cd
+        IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X    'GRIBEX: Number of unused bits is ',INIL,'.'
+Cd
+      ENDIF
+C
+C*    Complex packing supported for spherical harmonics.
+      LCOMPLX = (LSPHERC .AND. ( KSEC4(4).EQ.64 ) ) .OR.
+     X          (LSPHERC .AND. LSECT2 .AND. ( KSEC2(6).EQ.2 ) )
+C
+C     Check input specification is consistent
+      IF( LCOMPLX .AND. LSECT2 ) THEN
+        IF( ( KSEC4(4).NE.64 ) .AND. ( KSEC2(6).EQ.2 )  ) THEN
+           WRITE(GRPRSM,*) ' COMPLEX mismatch. KSEC4(4) = ', KSEC4(4)
+           WRITE(GRPRSM,*) ' COMPLEX mismatch. KSEC2(6) = ', KSEC2(6)
+           KRET = 807
+           GOTO 900
+        ELSEIF( ( KSEC4(4).EQ.64 ) .AND. ( KSEC2(6).NE.2 )  ) THEN
+ 
+           WRITE(GRPRSM,*) ' COMPLEX mismatch. KSEC4(4) = ', KSEC4(4)
+           WRITE(GRPRSM,*) ' COMPLEX mismatch. KSEC2(6) = ', KSEC2(6)
+           KRET = 807
+           GOTO 900
+        ENDIF
+      ELSEIF( LCOMPLX ) THEN
+C
+C         Truncation of full spectrum, which is supposed triangular,
+C         has to be diagnosed. Define also sub-set truncation.
+C
+        IF (LENCODE) THEN
+Ce
+          ISUBSET = KSEC4(18)
+Ce
+Ce        When encoding, use the total number of data.
+Ce
+          ITEMP = KSEC4(1)
+          ITRUNC= ( NINT ( SQRT ( REAL ( 4 * ITEMP + 1 ) ) ) - 3 ) / 2
+Ce
+        ELSE
+Cd
+Cd        When decoding, use section 4 descriptors.
+Cd
+          INSPT=INSPT+6*8
+          CALL INXBIT(KGRIB,KLENG,INSPT,KSEC4(2),1,IBITS, 8,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+          KRET = 709
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting number of'
+          WRITE(GRPRSM,*) 'GRIBEX: bits per data value'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+Cd
+          CALL INXBIT(KGRIB,KLENG,INSPT,ITEMP,1,IBITS,16,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 796
+            WRITE(GRPRSM,*)
+     X 'GRIBEX: Error extracting pointer to packed data.'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+Cd
+          INSPT=INSPT+16
+          CALL INXBIT(KGRIB,KLENG,INSPT,ISUBSET,1,IBITS, 8,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 797
+            WRITE(GRPRSM,*)
+     X 'GRIBEX: Error extracting sub-set truncation.'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+Cd
+          IF (KSEC0(2).GE.1) THEN
+            ITEMP = ILEN4 * 8 - INIL + (ITEMP-IPLEN/8) * 8
+            ITEMP = ( ITEMP - 32 * ( ISUBSET + 1 ) * (ISUBSET + 2 ) )
+     X               / KSEC4(2)
+            ITRUNC= ( NINT ( SQRT ( REAL ( 4 * ITEMP + 1 ) ) ) - 3 ) / 2
+          ELSE
+            ITEMP = ILEN4 * 8 - INIL + (ITEMP-1) * 8
+            ITEMP = ( ITEMP - 32 * ( ISUBSET + 1 ) ** 2 ) / KSEC4(2)
+            ITRUNC= NINT ( SQRT ( REAL ( ITEMP ) ) ) - 1
+          ENDIF
+Cd
+        ENDIF
+C
+        IF( LPDEBUG) WRITE(GRPRSM,*)
+     X    'GRIBEX: diagnosed truncation of full spectrum is ', ITRUNC
+C
+      ELSE
+        ISUBSET = 0
+      ENDIF
+C
+C *******************************************
+C
+C     Handle complex packing of section 4.
+C     (Avoid decoding of section 4 if 'I' or 'J' option)
+C
+      IF( LCOMPLX.AND.(.NOT.L_IORJ) ) THEN
+C
+C       Adjust bit pointer to start of section
+        INSPT = IPLEN
+C
+        IF( LENCODE) THEN
+C
+C         Encoding ...
+          KRET = CSECT4( PSEC4, ITRUNC, KSEC1, KSEC4,
+     X                   KGRIB, KLENG, INSPT, IBITS, KSEC4(2))
+        ELSE
+C
+C         Decoding ...
+          KRET = DSECT4A( PSEC4, ITRUNC, KSEC0, KSEC1, KSEC4,
+     X                   KGRIB, KLENG, INSPT, IBITS, KSEC4(2))
+C
+C         Special case when no.bits per packed value = no.bits per word
+          IF( KRET .EQ. 16123 ) KRET = 205
+        ENDIF
+C
+C       Give up if error reported.
+        IF( KRET .NE. 0 ) GOTO 900
+C
+C       Got to deal with section 5 if OK.
+        GOTO 799
+      ENDIF
+C
+C *******************************************
+C
+C     Complex packing ("Second order packing") for grid point.
+C
+      IF( LGRDPT .AND. (KSEC4(4).NE.0.OR.HOPER.EQ.'K') ) THEN
+C
+        IF( LENCODE .AND. KSEC4(6).EQ.0 ) THEN
+          KRET = 703
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Second-order packing implies additional flags'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ELSEIF( HOPER.EQ.'G'.OR.HOPER.EQ.'A'.OR.HOPER.EQ.'B' ) THEN
+          KRET = 704
+          WRITE(GRPRSM,*) 'GRIBEX: Function ',HOPER,' invalid for'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: second-order packed field (grid-point).'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+C
+        ELSEIF( LDECODE ) THEN
+Cd
+Cd        Decoding ...
+Cd
+          INSPT=IPLEN
+          KRET = D2ORDR( PSEC4, KLENP, KSEC1, KSEC2, KSEC3, KSEC4, 
+     X                   KGRIB, KLENG, INSPT, IBITS, HOPER, ILEN4,
+     X                   INIL,  ZREF, ZSCALE, IBMAP, IVALS, NDBG )
+Cd
+Cd        Give up if error reported.
+          IF( KRET .NE. 0 ) GOTO 900
+Cd
+Cd        At this stage, PSEC4 contains normalized INTEGER values.
+Cd
+          IFPT=0
+          ILEN=KSEC4(1)
+Cd
+          IF( L_IORJ ) THEN
+            KSEC4(34)=INSPT
+Cd
+Cjdc        IF( HOPER.EQ.'J' ) GOTO 815
+            GOTO 900
+          ELSE
+            GOTO 796
+          ENDIF
+C
+        ENDIF
+C
+C       Encoding is performed later, once the normalization of
+C       field values into normalized integer values is performed.
+C
+      ENDIF
+C
+C*    Set IFPT to the number of data values stored in floating point
+C     rather than packed format.
+C     For simple packing of data in spherical harmonic
+C     format the first word contains the real (0,0) coefficient,
+C     which is treated separately. IFPT is 1 for spherical
+C     harmonics, 0 for other data.
+C
+      IF( LGRDPT ) THEN
+        IFPT = 0
+      ELSE
+        IFPT = 1
+      ENDIF
+C
+C*    Octets 5 - 6 : Scale factor.
+C     One 16 bit field.
+C
+C     Calculate scale factor, if coding data.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Change units of data values , if required.
+Ce
+        IF( KSEC1(23).NE.0) THEN
+          DO 720 JLOOP = 1 , ILENF
+            PSEC4(JLOOP) = PSEC4(JLOOP)*(10.0**KSEC1(23))
+  720     CONTINUE
+        ENDIF
+Ce
+Ce      Find maximum and minimum values in data array, ignoring
+Ce      any missing-data values, if secondary bit-maps are
+Ce      indicated. Values not being packed are skipped.
+Ce
+        ILEN = ILENF - IFPT
+Ce
+        IF( KSEC4(8).EQ.64.AND.KSEC4(9).EQ.32) THEN
+Ce
+Ce        Secondary bit maps present.
+Ce
+          CALL MAXMN2 (PSEC4(IFPT+1),ILEN,ZMSVAL,ZMAX,ZMIN)
+Ce
+        ELSE
+Ce
+Ce        No secondary bit maps present.
+Ce
+          IF( HOPER.NE.'A' ) CALL MAXMIN(PSEC4(IFPT+1),ILEN,ZMAX,ZMIN)
+Ce
+        ENDIF
+Ce
+        IF( LPDEBUG ) THEN
+          WRITE(GRPRSM,*) 'GRIBEX: Maximum value calculated = ', ZMAX
+          WRITE(GRPRSM,*) 'GRIBEX: Minimum value calculated = ', ZMIN
+        ENDIF
+Ce
+Ce      Calculate and pack scale factor.
+Ce
+Ce      If user has supplied a reference value, use it.
+        IF( NFREF.EQ.1) THEN
+          ZREF = FREF
+Ce
+Ce        If integer data being packed, ensure that
+Ce        reference value represents an integer.
+          IF(  KSEC4(5) .EQ. 32 ) THEN
+#ifdef VAX
+            ITEMP = JNINT(ZREF)
+#else
+            ITEMP = NINT(ZREF)
+#endif
+            ZREF  = REAL(ITEMP)
+          ENDIF
+Ce
+Ce        Use user-supplied value unless it exceeds the minimum value.
+Ce        Otherwise use the minimum value.
+Ce
+          IF( ZREF.GT.ZMIN) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: User supplied reference value ',ZREF
+            WRITE(GRPRSM,*) 'GRIBEX: exceeds minimum value ',ZMIN
+            WRITE(GRPRSM,*) 'GRIBEX: Minimum value used instead.'
+            ZREF = ZMIN
+          ENDIF
+Ce
+        ELSE
+          ZREF = ZMIN
+        ENDIF
+Ce
+Ce      If user has supplied a maximum value, use it.
+Ce
+        IF( NFMAX.EQ.1) THEN
+          ZMAXV = FMAX
+Ce
+Ce        If integer data being packed, ensure that
+Ce        maximum value represents an integer.
+          IF(  KSEC4(5) .EQ. 32 ) THEN
+#ifdef VAX
+            ITEMP = JNINT(ZMAXV)
+#else
+            ITEMP = NINT(ZMAXV)
+#endif
+            ZMAXV  = REAL(ITEMP)
+          ENDIF
+Ce
+Ce        Use user-supplied value unless it is less than the maximum
+Ce        value. Otherwise use the maximum value.
+Ce
+          IF( ZMAXV.LT.ZMAX) THEN
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: User supplied maximum value ',ZMAXV
+            WRITE(GRPRSM,*) 'GRIBEX: is less than maximum value ',ZMAX
+            WRITE(GRPRSM,*) 'GRIBEX: Maximum value used instead.'
+            ZMAXV = ZMAX
+          ENDIF
+Ce
+        ELSE
+          ZMAXV = ZMAX
+        ENDIF
+Ce
+        IF( LPDEBUG ) THEN
+          WRITE(GRPRSM,*) 'GRIBEX: Maximum value used = ', ZMAXV
+          WRITE(GRPRSM,*) 'GRIBEX: Minimum value used = ', ZREF
+        ENDIF
+Ce
+        IF( (HOPER .EQ. 'A') .OR. (HOPER .EQ. 'B') ) THEN
+          ZREF = 0.0
+          ZS = 0.0
+          ISCALE = 0
+          ZSCALE = 1.0
+        ELSE
+Ce
+Ce        Before using reference value, convert floating point to GRIB
+Ce        representation and come back with (possibly) adjusted value.
+Ce
+          ISTATUS = REF2GRB(ZREF, IEXP, IMANT, IBITS)
+          IF( ISTATUS.NE.0 ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: REF2GRB reference value problem'
+            WRITE(GRPRSM,*) 'GRIBEX: for parameter ', KSEC1(6)
+            WRITE(GRPRSM,*) 'GRIBEX: level type ', KSEC1(7)
+            WRITE(GRPRSM,*) 'GRIBEX: level ', KSEC1(8), KSEC1(9)
+          ENDIF 
+          
+Ce
+Ce        If KSEC4(2) is less than (IBITS-1), then IS is taken as the
+Ce        largest integer that enables the following formula :
+Ce
+Ce        0 <= (ZMAXV-ZREF) / (2**IS) < 2**KSEC4(2)-0.5
+Ce
+Ce        (NINT of the ratio above is a positive integer that fits in
+Ce         KSEC4(2) bits) ; this is equivalent to
+Ce
+Ce        2**(IS-1) <= (ZMAXV-ZREF) / (2**KSEC4(2)-0.5) < 2**IS
+Ce        or :
+Ce        2**IS     <= (ZMAXV-ZREF) / (2**(KSEC4(2)+1)-1) < 2**(IS+1)
+Ce
+Ce        Otherwise, the 0.5 is replaced by 1. to avoid any problem
+Ce        with the numerical representation of a signed integer .
+Ce
+Cjdc      IF( LALLPOS) THEN
+Cjdc        ZAUXIL = 1.
+Cjdc        ZS = (ZMAXV-ZREF) / (2.**REAL(KSEC4(2))-1.)
+Cjdc      ELSEIF( KSEC4(2).EQ.(IBITS-1) ) THEN
+Cjdc        ZAUXIL = 1.
+Cjdc        ZS = (ZMAXV-ZREF) / REAL(2**KSEC4(2)-1)
+Cjdc      ELSE
+Cjdc        ZAUXIL = 2.
+Cjdc        ZS = (ZMAXV-ZREF) / REAL(2**(KSEC4(2)+1)-1)
+Cjdc      ENDIF
+Ce
+#ifdef CRAY
+Cjdc      IF( ZS.NE.0.0) ZS = ALOG(ZS) / ALOG(2.) + ZAUXIL
+#else
+Cjdc      IF( ZS.NE.0.0) ZS = LOG(ZS) / LOG(2.) + ZAUXIL
+#endif
+Cjdc      ISCALE = MIN (INT(ZS),INT(ZS+SIGN(1.,ZS)))
+Cjdc
+C
+C         Adjust number of bits per value if full integer length to
+C         avoid hitting most significant bit (sign bit).
+C
+          NBPV  = KSEC4(2)
+          IF( NBPV.EQ.IBITS ) NBPV = NBPV - 1
+
+C
+C        Adjust the minumum value to be the scale factor in case the
+C        scale factor coded cannot represent the minimun value (loss of precision)
+C        This should be done before computing the range of the scale factor, as the
+C        unpacking will be done
+C        Using the reference value coded
+
+          
+          IF(ZMIN.NE.ZREF) THEN
+            IF( LPDEBUG ) THEN
+                 WRITE(GRPRSM,*)
+     X  'GRIBEX: Minimum value rectified from ', ZMIN, ' to ', ZREF,
+     X  'to match reference value precision'
+            ENDIF
+          ENDIF
+
+C
+C         Calculate the binary scaling factor to spread the range of
+C         values over the number of bits per value.
+C         Limit scaling to 2**-126 to 2**127 (using IEEE 32-bit floats
+C         as a guideline).
+C                
+          ZS = 1.0
+          RANGE = (ZMAX-ZREF)
+          
+          IF( ABS(ZMAX-ZMIN).LT.JPEPSLN ) THEN
+            ISCALE = 0
+          ELSE IF( ABS(RANGE-1.0).LT.JPEPSLN ) THEN
+            ISCALE = 1 - NBPV
+          ELSE IF( RANGE.GT.1.0 ) THEN
+            DO JLOOP = 1, 127
+              ZS = 2.0 * ZS
+              IF( ZS.GT.(RANGE+JPEPSLN) ) THEN
+                ISCALE = JLOOP - NBPV
+                GOTO 727
+              ENDIF
+            ENDDO
+            WRITE(GRPRSM,*)
+C
+     X       'GRIBEX: Problem calculating binary scale value for encode'
+            KRET = 707
+            GOTO 900
+C
+  727       CONTINUE
+          ELSE
+            DO JLOOP = 1, 126
+              ZS = ZS / 2.0
+              IF( ZS.LT.(RANGE-JPEPSLN) ) THEN
+                ISCALE = 1 - JLOOP - NBPV
+                GOTO 728
+              ENDIF
+            ENDDO
+C
+            WRITE(GRPRSM,*)
+     X       'GRIBEX: Problem calculating binary scale value for encode'
+            KRET = 707
+            GOTO 900
+  728       CONTINUE
+          ENDIF
+C
+#if (defined VAX) || (defined rs6000) || defined (__alpha) || defined hpR64
+Cjdc      ISCALE = MIN (INT(ZS),INT(ZS+DSIGN(1.0D0,ZS)))
+#else
+Cjdc      ISCALE = MIN (INT(ZS),INT(ZS+SIGN(1.,ZS)))
+#endif
+Ce
+Ce        Limit scale factor to head off problems of 'rogue' fields
+Ce        which are flat except for one pimple value
+Ce        (Is this still needed?)
+Ce
+          IF( ISCALE.LT.-99 ) THEN
+            WRITE(GRPRSM,*)
+     X  ' GRIBEX: scaling factor changed from ', ISCALE
+            WRITE(GRPRSM,*)
+     X  ' GRIBEX:                          to ', -99
+            ISCALE = -99
+          ENDIF
+          IF( ISCALE.GT.99 ) THEN
+            WRITE(GRPRSM,*)
+     X  ' GRIBEX: scaling factor changed from ', ISCALE
+            WRITE(GRPRSM,*)
+     X  ' GRIBEX:                          to ',  99
+            ISCALE =  99
+          ENDIF
+Ce
+          ZSCALE = 2.**ISCALE
+          IF( LPDEBUG ) THEN
+            WRITE(GRPRSM,*) 'GRIBEX: Encoding ZMAX = ', ZMAX
+            WRITE(GRPRSM,*) 'GRIBEX: Encoding ZREF = ', ZREF
+            WRITE(GRPRSM,*) 'GRIBEX: Encoding RANGE = ', RANGE
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Encoding scaling value = ', ZSCALE
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Encoding scaling value = 2 to power ',
+     X        ISCALE
+          ENDIF
+Ce
+Ce        Set sign bit.
+Ce
+          ITEMP = ISCALE
+          CALL CSGNBT( ISCALE, ITEMP, 16, KRET)
+        ENDIF
+Ce
+Ce      Scale factor has all bits set to 1 for missing fields.
+Ce      (ECMWF convention only).
+Ce
+        IF( IMISS.EQ.1) ISCALE = JP16SET
+Ce
+      ENDIF
+C 
+C     Insert / extract field.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,ISCALE,1,IBITS, 16,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 707
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting scale factor.'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+Cd
+Cd    If decoding, set scale factor.
+Cd
+      IF( LDECODE ) THEN
+        ISKALE = ISCALE
+        CALL DSGNBT( ISCALE, ISKALE, 16, KRET)
+Cd
+Cd      Limit scale factor to head off problems of 'rogue' fields
+Cd      which are flat except for one pimple value
+        IF( ISCALE .LT. -99 ) THEN
+          WRITE(GRPRSM,*)
+     X  ' GRIBEX: scaling factor changed from ', ISCALE
+          WRITE(GRPRSM,*)
+     X  ' GRIBEX:                          to ', -99
+          ISCALE = -99
+        ENDIF
+        IF( ISCALE .GT.  99 ) THEN
+          WRITE(GRPRSM,*)
+     X  ' GRIBEX: scaling factor changed from ', ISCALE
+          WRITE(GRPRSM,*)
+     X  ' GRIBEX:                          to ',  99
+          ISCALE =  99
+        ENDIF
+Cd
+        ZSCALE = 2.**ISCALE
+C
+        IF( LPDEBUG ) THEN
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Decoding scaling value = ', ZSCALE
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Decoding scaling value = 2 to power ',
+     X      ISCALE
+        ENDIF
+      ENDIF
+C
+C*    Octets 7 - 10 : Reference value.
+C     One 8 bit and one 24 bit field.
+C
+      IF( LENCODE ) THEN
+Ce
+        IF( IMISS.EQ.1) THEN
+Ce
+Ce        For missing, these data fields are set to all 1 bits.
+          IEXP   = JP8SET
+          IMANT  = JP24SET
+        ENDIF
+Ce
+      ENDIF
+C
+C     Insert / extract fields.
+C
+      CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+      CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS, 24,YFUNC,KRETB)
+      KRET = KRETA + KRETB
+      IF( KRET.NE.0) THEN
+        KRET = 708
+        WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting reference value'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C     Conversion from GRIB format, if decoding.
+C
+      IF( LDECODE ) THEN
+Cd
+Cd      Set IMISS to 1 if entire field is missing, i.e. scale
+Cd      factor, exponent and mantissa with all bits set to 1.
+Cd
+        IMISS = 0
+        IF( ISKALE.EQ.JP16SET.AND.IEXP.EQ.JP8SET.AND.IMANT.EQ.JP24SET)
+     X    IMISS = 1
+Cd
+Cd      Convert GRIB representation to floating point.
+Cd
+        IF( IMISS.EQ.0) THEN
+Cd
+Cd        Field is present.
+          CALL DECFP2 (ZREF,IEXP,IMANT)
+        ELSE
+Cd
+Cd        Field is missing. Print warning message and
+Cd        field identification sections of Grib code,
+Cd        forcing field data values to 0.
+Cd
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Following field is missing ***********'
+          CALL GRPRS1 (KSEC0,KSEC1)
+          ZREF   = 0
+          ZSCALE = 0
+        ENDIF
+        IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X    'GRIBEX: Decoded reference value = ',ZREF
+      ENDIF
+Cd
+C*    Octet 11 : Number of bits containing each packed value.
+C     One 8 bit field.
+C
+C     Insert / extract field.
+C
+      IF( .NOT.LGRDPT.OR.KSEC4(4).EQ.0) THEN
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC4(2),1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 709
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting number of'
+          WRITE(GRPRSM,*) 'GRIBEX: bits per data value'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+      ELSE
+C
+C        In second-order packing case, this number may differ from
+C        the value specified for normalization process (KSEC4(2)).
+C        Field is inserted later, within function C2ORDR or related
+C        C2* sub-functions.
+C
+        INSPT=INSPT+8
+C
+      ENDIF
+C
+      IF( LDECODE ) THEN
+Cd
+Cd      Check if number of bits per packed value = number of bits per
+Cd      computer word.
+Cd
+        LALLPOS = KSEC4(2) .EQ. IBITS
+Cd
+      ENDIF
+C
+C*    Octets 12 et sequentia can contain further header
+C     information, depending on data representation type.
+C
+C
+C*    For grid point data, simple packing, single value at each
+C     grid point there is no further header information and
+C     packed data begins in octet 12.
+C
+C*    For grid point data, simple packing, with a matrix of
+C     values at each grid point further information is added.
+C
+      IF( LGRDPT .AND.KSEC4(6).EQ.16.AND.KSEC4(4).EQ.0) THEN
+C
+C       Octets 12 - 13. N - octet number at which packed
+C       data begins.
+C       One 16 bit field.
+C
+C            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C            !                                                !
+C            ! This is the WMO definition, but it is entirely !
+C            ! inadequate when secondary bit maps are present !
+C            ! eg 3x3 global grid with a matrix of values     !
+C            ! 12x26 at each point. This gives a bit map with !
+C            ! a length of 285480 octets which cannot be given!
+C            ! in 16 bits.                                    !
+C            !                                                !
+C            ! ECMWF uses the following definition  for its   !
+C            ! wave model data.                               !
+C            ! N - Number of secondary bit maps               !
+C            !     (ie the number of points which are 'not    !
+C            !      missing').                                !
+C            !     This definition will accommodate a 1x1     !
+C            !     degree global grid.                        !
+C            !                                                !
+C            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+        IF( LENCODE ) THEN
+Ce
+Ce        Octet number = 25 + NC1 + NC2
+Ce
+          IBYTEX = 25 + KSEC4(53) + KSEC4(55)
+Ce
+Ce        Add in length of bit-maps, if present.
+Ce        Length in bits is the number of values
+Ce        remaining to be packed rounded
+Ce        up to a number of octets.
+Ce
+          IF( KSEC4(9).EQ.32) IBYTEX = IBYTEX + (ILENF+7) / 8
+Ce
+Ce        ECMWF wave model usage.
+Ce        ECMWF is centre number 98, and local code table
+Ce        2 used for wave models is 140.
+Ce
+          IF( LECLOC .AND.KSEC1(1).EQ.140) THEN
+            IBYTEX = ILENF / (KSEC4(50) * KSEC4(51))
+          ENDIF
+        ENDIF
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IBYTEX,1,IBITS, 16,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 720
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting octet number'
+          WRITE(GRPRSM,*) 'GRIBEX: at which packed data begins'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Special fix to handle overflow of this 16-bit field when
+C       a large wave field is being decoded
+C
+        IF( LLARGE .AND. (IBYTEX.LT.2000) ) IBYTEX = IBYTEX + 65536
+C
+C       Octet 14. Extended flags.
+C       One 8 bit field.
+C
+        IF( LENCODE ) IFLAGX = KSEC4(8) + KSEC4(9) + KSEC4(10)
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IFLAGX,1,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 721
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error inserting/extracting extended flag field'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+        IF( LDECODE ) THEN
+Cd
+Cd        In Edition 1 only 3 bits are used.
+Cd
+Cd        -0------ for single datum at each grid point.
+Cd        -1------ for matrix of values at each point.
+Cd        --0----- for no secondary bit-maps.
+Cd        --1----- for secondary bit-maps present.
+Cd        ---0---- for second order values constant width.
+Cd        ---1---- for second order values different widths.
+Cd
+          IF( IFLAGX.GE.64) THEN
+            KSEC4(8) = 64
+            IFLAGX   = IFLAGX - 64
+          ENDIF
+Cd
+          IF( IFLAGX.GE.32) THEN
+            KSEC4(9) = 32
+            IFLAGX   = IFLAGX - 32
+          ENDIF
+Cd
+          IF( IFLAGX.GE.16) THEN
+            KSEC4(10) = 16
+            IFLAGX   = IFLAGX - 16
+          ENDIF
+        ENDIF
+C
+C       Octets 15 - 16. NR - first dimension (rows) of
+C       each matrix.
+C       Octets 17 - 18. NC - second dimension (columns) of
+C       each matrix.
+C       Two 16 bit fields.
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC4(50),2,IBITS, 16,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 722
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting/extracting first or'
+          WRITE(GRPRSM,*) 'GRIBEX: second dimension of matrix'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Octet 19. First dimension coordinate values
+C       definition.
+C       Octet 20. NC1 - Number of coefficients or values
+C       used to specify first dimension coordinate function.
+C       Octet 21. Second dimension coordinate values
+C       definition.
+C       Octet 22. NC2 - Number of coefficients or values
+C       used to specify second dimension coordinate function.
+C       Octet 23. First dimension physical significance.
+C       Octet 24. Second dimension physical significance.
+C       Six 8 bit fields.
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,KSEC4(52),6,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 723
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting six fields'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: from 1st dimension coordinate value on'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+C       Octets 25 - (24+NC1).
+C       Coefficients to define first dimension coordinate
+C       values in functional form, or the explicit
+C       coordinate values.
+C       Octets (25+NC1) - (24+NC1+NC2).
+C       Coefficients to define second dimension coordinate
+C       values in functional form, or the explicit
+C       coordinate values.
+C       (NC1+NC2) 8 bit fields.
+C
+C            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C            !                                                !
+C            ! This is the WMO definition, but it is very     !
+C            ! limited and can only accommodate small integer !
+C            ! fields values.                                 !
+C            !                                                !
+C            ! ECMWF needs to use floating point numbers and  !
+C            ! for the wave models the definition is NC1+NC2  !
+C            ! (8 bit and 24 bit) fields.
+C            !                                                !
+C            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+        ITEMP = KSEC4(53) + KSEC4(55)
+C
+C       ECMWF wave model usage.
+C       ECMWF is centre number 98, and local code table
+C       2 used for wave models is 140.
+C
+        IF( LECLOC .AND.KSEC1(1).EQ.140) THEN
+          ITRND = 1
+          DO 730 JLOOP=1,ITEMP
+C
+C           One 8 bit and one 24 bit field.
+C
+            IF( LENCODE ) THEN
+Ce
+Ce            Convert floating point to GRIB representation.
+              ISINT = KSEC4(JLOOP+59)
+              ZREAL = ZREAL4
+              CALL CONFP3 (ZREAL,IEXP,IMANT, IBITS,ITRND)
+            ENDIF
+C
+C           Insert / extract fields.
+C
+            CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+            CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS,24,YFUNC,KRETB)
+            KRET = KRETA + KRETB
+            IF( KRET.NE.0) THEN
+              KRET = 724
+              WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting first or'
+              WRITE(GRPRSM,*)
+     X  'GRIBEX: second dimension coefficients'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+C
+            IF( LDECODE ) THEN
+Cd
+Cd            Convert GRIB representation to floating point.
+              CALL DECFP2 (ZREAL,IEXP,IMANT)
+              ZREAL4 = ZREAL
+              KSEC4(JLOOP+59) = ISINT
+            ENDIF
+C
+  730     CONTINUE
+        ELSE
+C
+C         Insert / extract fields.
+C
+          CALL INXBIT(KGRIB,KLENG,INSPT,KSEC4(57),ITEMP, 
+     X                 IBITS,8,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 724
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting first or'
+            WRITE(GRPRSM,*) 'GRIBEX: second dimension coefficients'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+        ENDIF
+C
+C       Matrix bit-maps may follow.
+C
+        IF( KSEC4(9).EQ.32) THEN
+          ITEMP = KSEC4(50) * KSEC4(51)
+          IF( LENCODE ) THEN
+            CALL INSMP2 (KGRIB,KLENG,INSPT,PSEC4,
+     X                   ILENF,IBITS,ZMSVAL,YFUNC,
+     X                   ITEMP,NDBG,KRET)
+            IF( KRET.NE.0) THEN
+              KRET = 725
+              WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting secondary bit-map'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+            ILEN = ILENF
+          ELSE
+Cd
+Cd          Retain pointer to bit-map location.
+            IBMAP2 = INSPT
+Cd
+Cd          Set pointer to start of packed data.
+Cd
+            IF( LECLOC .AND.KSEC1(1).EQ.140) THEN
+              ITEMP = KSEC4(50)*KSEC4(51)*IBYTEX
+              ITEMP = (ITEMP+7) / 8
+              INSPT = INSPT + ITEMP * 8
+            ELSE
+              INSPT = INSPT + (IBYTEX-25-KSEC4(53) -KSEC4(55)) * 8
+            ENDIF
+C
+          ENDIF
+        ENDIF
+C
+      ENDIF
+C
+C*    For spherical harmonic data (simple packing), real (0,0)
+C     coefficient is in floating point representation in
+C     octets 12-15.
+C     One 8 bit and one 24 bit field.
+C
+      IF( LSPHERC ) THEN
+C
+C       Convert floating point to GRIB representation.
+        ITRND = 1
+        IF( LENCODE ) CALL CONFP3 (PSEC4(1),IEXP,IMANT,IBITS,ITRND)
+C
+C       Insert / extract fields.
+C
+        CALL INXBIT(KGRIB,KLENG,INSPT,IEXP,1,IBITS, 8,YFUNC,KRETA)
+        CALL INXBIT(KGRIB,KLENG,INSPT,IMANT,1,IBITS, 24,YFUNC,KRETB)
+        KRET = KRETA + KRETB
+        IF( KRET.NE.0) THEN
+          KRET = 711
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error inserting/extracting real coefficient'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+        IF( LDECODE .AND. (.NOT. L_IORJ) ) THEN
+Cd
+Cd        Convert GRIB representation to floating point.
+Cd
+          IF( IMISS.EQ.1) THEN
+            PSEC4(1) = 0.0
+          ELSE
+            CALL DECFP2 (PSEC4(1),IEXP,IMANT)
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C*    Octet N onwards - Packed data.
+C
+C     If decoding , calculate number of data values, unless
+C     number has been given by user for 'X' function.
+C
+      IF( LDECODE ) THEN
+        IF( HOPER.EQ.'X') THEN
+          ILEN = KSEC4(34)
+Cdx
+Cdx     Otherwise, use the byte counts
+        ELSEIF( KSEC4(2).NE.0) THEN
+          ILEN = (IPLEN+(ILEN4*8)-INSPT-INIL)/KSEC4(2)
+Cd
+Cd      If explicitly constant field, use section 2 information
+Cd
+        ELSEIF( .NOT.LSECT2 ) THEN
+          KRET = 726
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Constant (0-bit) field without section 2'
+          WRITE(GRPRSM,*) 'GRIBEX: not supported'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ELSEIF( LSPHERC ) THEN
+          KRET = 727
+          WRITE(GRPRSM,*) 'GRIBEX: Constant (0-bit) spectral field'
+          WRITE(GRPRSM,*) 'GRIBEX: not supported'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ELSEIF( HOPER.EQ.'G'.OR.HOPER.EQ.'B') THEN
+          KRET = 728
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Constant (0-bit) field: function ',HOPER(:1)
+          WRITE(GRPRSM,*) 'not supported'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ELSEIF( LQUASI ) THEN
+Cd
+          IF( MOD(KSEC2(11),64).LT.32) THEN
+            INROWS=KSEC2(3)
+          ELSE
+            INROWS=KSEC2(2)
+          ENDIF
+Cd
+          ILEN=0
+Cd
+          DO 740 JLOOP = 1 , INROWS
+            ILEN=ILEN+KSEC2(22+JLOOP)
+  740     CONTINUE
+Cd
+        ELSE
+          ILEN=KSEC2(2)*KSEC2(3)
+        ENDIF
+Cd
+Cd      Total number of values = packed + unpacked.
+Cd 
+        IF( HOPER .EQ. 'B' ) THEN
+          KSEC4(1) = (ILEN+NBYTE-1)/NBYTE
+          KSEC4(21) = ILEN
+Cd 
+        ELSE
+          KSEC4(1) = ILEN + IFPT
+        ENDIF
+Cd 
+Cd      Check length of output array.
+Cd 
+        IF( (KSEC4(1).GT.KLENP) .AND.
+     X       (HOPER.NE.'G')      .AND.
+     X       (HOPER.NE.'J')    ) THEN
+          KRET = 710
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Output array too small. Length = ',KLENP
+          WRITE(GRPRSM,*) 'GRIBEX: Number of values = ', KSEC4(1)
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd 
+        IF( KSEC4(2).EQ.0) THEN
+C
+          IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X      'GRIBEX: Explicitly constant field (0-bit).'
+C
+C          Explicitly constant field, filled directly.
+C
+          IF( HOPER.NE.'J') THEN
+C 
+            IF( KSEC1(23).EQ.0) THEN
+              ZVAL = ZREF
+            ELSE
+              ZVAL = ZREF / 10.**KSEC1(23)
+            ENDIF
+C
+            DO 750 JLOOP = 1 , ILEN
+              PSEC4(IFPT+JLOOP) = ZVAL
+  750       CONTINUE
+C
+          ENDIF
+C
+Cx        Option 'X', only a few points extracted.
+Cx
+          IF( HOPER.EQ.'X') THEN
+Cx
+Cx          Convert to integer if original data was integer.
+Cx
+            IF( KSEC4(5).EQ.32 ) CALL RORINT(PSEC4,PSEC4,KSEC4(1),'I')
+            GO TO 900
+Cx
+          ENDIF
+C
+          GOTO 800
+C
+        ENDIF
+C
+      ENDIF
+C
+C
+C*    Scale and store, or extract and scale data values.
+C
+C     Only a few points to be unpacked.
+C
+      IF( HOPER.EQ.'X') THEN
+Cx
+Cx      Check that a section 2 is present.
+Cx
+        IF( .NOT.LSECT2 ) THEN
+          KRET = 798
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Function is X but no section 2 included'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cx
+Cx      Check that no bit-map is included.
+Cx
+        IF( LSECT3 ) THEN
+          KRET = 717
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Function is X and a bit-map is included'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cx
+Cx      Check that field is Gaussian or latitude/longitude grid.
+Cx
+        IF( KSEC2(1).NE.0.AND.KSEC2(1).NE.4.AND.
+     X      KSEC2(1).NE.10.AND.KSEC2(1).NE.14.AND.
+     X      KSEC2(1).NE.20.AND.KSEC2(1).NE.24.AND.
+     X      KSEC2(1).NE.30.AND.KSEC2(1).NE.34) THEN
+          KRET = 716
+          WRITE(GRPRSM,*) 'GRIBEX: Function is X and field is not'
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Gaussian or Latitude/longitude field'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cx
+Cx      Check that scanning mode is West to East and North to South.
+Cx
+        IF( KSEC2(11).NE.0) THEN
+          KRET = 715
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Function is X and scanning mode is not'
+          WRITE(GRPRSM,*) 'GRIBEX: North to South and West to East'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cx
+Cx      Check that number of points required does not exceed
+Cx      maximum or minimum allowed.
+Cx
+        IF( KSEC4(34).GT.4.OR.KSEC4(34).LT.1) THEN
+          KRET = 714
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Invalid no. of values for function X = ',KSEC4(34)
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cx
+        ITEMP = 1
+Cx
+Cx      Take into account decimal scaling factor, if any.
+Cx
+        IF( KSEC1(23).NE.0) THEN
+          ZREF = ZREF / 10.**KSEC1(23)
+          ZSCALE = ZSCALE / 10.**KSEC1(23)
+        ENDIF
+Cx
+Cx      Skip down latitude rows.
+        DO 770 JLOOPO = 1,KSEC4(34)
+Cx
+Cx        Regular grid.
+          IF( .NOT. LQUASI) THEN
+            ISKIP = (KSEC4(34+ITEMP)-1) * KSEC2(2)
+Cx
+Cx        Quasi-regular grid.
+          ELSE
+            ISKIP = 0
+            DO 760 JLOOP = 1,KSEC4(34+ITEMP) - 1
+              ISKIP = ISKIP + KSEC2(22+JLOOP)
+  760       CONTINUE
+          ENDIF
+Cx
+Cx        Skip any points not required on this latitude row.
+          ISKIP = ISKIP + KSEC4(34+ITEMP+1) - 1
+Cx
+Cx        Calculate number of bits in these values and add
+Cx        to current value of bit-pointer.
+          ISKIP = ISKIP * KSEC4(2) + INSPT
+Cx
+Cx        Extract value from 1 point.
+          CALL INXBIT(KGRIB,KLENG,ISKIP,IJDC,1,
+     X                IBITS,KSEC4(2),YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 712
+            WRITE(GRPRSM,*) 'GRIBEX: Error extracting data values'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+          IJDCXX = IJDC
+Cx
+          IF( KSEC4(5).EQ.32 ) THEN
+Cx
+Cx          Integer values
+Cx
+#if (defined REAL_BIGGER_THAN_INTEGER)
+            PSEC4(JLOOPO) = ZREF + DBLE(IJDCXX)*ZSCALE
+#else
+            PSEC4(JLOOPO) = ZREF + IJDCXX*ZSCALE
+#endif
+            IJDCXX = PSEC4(JLOOPO)
+            PSEC4(JLOOPO) = RJDCXX
+Cx
+          ELSE
+Cx
+Cx          Real values
+Cx
+#if (defined REAL_BIGGER_THAN_INTEGER)
+            PSEC4(JLOOPO) = ZREF + DBLE(IJDCXX)*ZSCALE
+#else
+            PSEC4(JLOOPO) = ZREF + IJDCXX*ZSCALE
+#endif
+          ENDIF
+          ITEMP = ITEMP + 2
+  770   CONTINUE
+Cx
+        GOTO 900
+      ENDIF
+C
+C*******************************************************************
+C     All data to be unpacked or packed.
+C*******************************************************************
+C
+C     Scale the fields using the reference value and scaling factor
+C
+      IF( LENCODE .AND. (HOPER .NE. 'A')  )
+     X  CALL INSCAL(PSEC4(IFPT+1),PSEC4(IFPT+1),ILEN,ZREF,ZSCALE,NBPV)
+C
+C     Insert / extract fields, unless special 'G' operation or
+C     if 'J' option in effect.
+C
+      IF( LENCODE.AND.LGRDPT.AND.(KSEC4(4).NE.0.OR.HOPER.EQ.'K')) THEN
+Ce
+Ce*******************************************
+Ce
+Ce      Complex packing ("second-order packing") for grid-point.
+Ce
+        INSPT=INSPT-11*8
+        KRET = C2ORDR( PSEC4, KLENP, KSEC1, KSEC2, KSEC3, KSEC4, 
+     X                 KGRIB, KLENG, INSPT, IBITS, HOPER, IBMAP,
+     X                 IVALS, ZREF,  ZMAX,  ILEN,  NDBG )
+Ce
+Ce      Give up if error reported.
+        IF( KRET .NE. 0 ) GOTO 900
+Ce
+C
+      ELSEIF( (HOPER.NE.'G') .AND. (.NOT.L_IORJ) ) THEN
+Cd
+#ifdef REAL_BIGGER_THAN_INTEGER
+        IF( LDECODE .AND. (HOPER.NE.'B') ) THEN
+Cd
+Cd        Split the values into groups of length 'JPNSEC4' (maximum)
+Cd
+          ILOOPS = 1+(ILEN-1)/JPNSEC4
+          IINDEX = IFPT
+Cd
+          DO 785 JLOOPO = 1, ILOOPS
+            ILNGTH = MIN(JPNSEC4,ILEN-(JLOOPO-1)*JPNSEC4)
+            CALL INXBIT(KGRIB,KLENG,INSPT,NSEC4,ILNGTH,
+     X                   IBITS,KSEC4(2),YFUNC,KRET)
+            IF( KRET.NE.0) THEN
+              KRET = 712
+              WRITE(GRPRSM,*) 'GRIBEX: Error extracting data values'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+            DO 780 JLOOP = 1, ILNGTH
+              PSEC4(IINDEX + JLOOP) = ZREF + NSEC4(JLOOP)*ZSCALE
+  780       CONTINUE
+            IINDEX = IINDEX + ILNGTH
+  785     CONTINUE
+Cd
+Cd        Change units of data values, if required.
+Cd
+          IF( KSEC1(23).NE.0) THEN
+            DO 790 JLOOP = 1 , KSEC4(1)
+              PSEC4(JLOOP) = PSEC4(JLOOP)/10.0**KSEC1(23)
+  790       CONTINUE
+          ENDIF
+          GOTO 799
+        ENDIF
+Cb
+Cb      Handle data for option 'B'
+Cb
+        IF( HOPER.EQ.'B' ) THEN
+Cb
+          ILOOPS = 1+(ILEN/NBYTE-1)/JPNSEC4
+          IINDEX = IFPT
+Cb
+          DO 794 JLOOPO = 1, ILOOPS
+            ILNGTH = MIN(JPNSEC4,ILEN-(JLOOPO-1)*JPNSEC4)
+            CALL INXBIT(KGRIB,KLENG,INSPT,NSEC4,ILNGTH,
+     X                  IBITS,KSEC4(2),YFUNC,KRET)
+            IF( KRET.NE.0) THEN
+              KRET = 712
+              WRITE(GRPRSM,*) 'GRIBEX: Error extracting data values'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+Cb
+            DO 792 JLOOP = 1, ILNGTH
+              PSEC4(IINDEX + JLOOP) = XSEC4(JLOOP)
+  792       CONTINUE
+Cb
+            IINDEX = IINDEX + ILNGTH
+  794     CONTINUE
+Cb
+          GOTO 799
+Cb
+        ENDIF
+#endif
+C
+        IF( (HOPER.NE.'A') .AND. (HOPER.NE.'B') ) THEN
+          CALL INXBIT( KGRIB,KLENG,INSPT,PSEC4(IFPT+1),ILEN,
+     X                 IBITS,KSEC4(2),YFUNC,KRET)
+        ELSE
+          CALL INXBIT( KGRIB,KLENG,INSPT,PSEC4(IFPT+1),ILEN/NBYTE,
+     X                 IBITS,IBITS,YFUNC,KRET)
+        ENDIF
+        IF( KRET.NE.0) THEN
+          KRET = 712
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting/extracting data values'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+C
+       ELSE
+C
+Cgj     Option 'G' or 'J' in effect.
+Cgj
+        KSEC4(34) = INSPT
+C
+        IF( .NOT. L_IORJ ) THEN
+Cg
+Cg        Option 'G' ...
+Cg
+Cg        Return reference value, binary scale factor and
+Cg        bit pointer to start of packed data.
+C
+          PSEC4(1) = ZREF
+          PSEC4(2) = ZSCALE
+        ENDIF
+Cj
+        IF( HOPER.EQ.'J' ) GOTO 815
+Cj
+        GO TO 900
+Cd
+      ENDIF
+C
+  796 CONTINUE
+C
+      IF( LDECODE .AND. (HOPER .NE. 'B') ) THEN
+Cd
+       CALL EXSCAL(PSEC4(IFPT+1),PSEC4(IFPT+1),ILEN,ZREF,ZSCALE,LALLPOS)
+Cd
+Cd      Change units of data values, if required.
+Cd
+        IF( KSEC1(23).NE.0) THEN
+          DO 798 JLOOP = 1 , KSEC4(1)
+            PSEC4(JLOOP) = PSEC4(JLOOP)/10.0**KSEC1(23)
+  798     CONTINUE
+        ENDIF
+Cd
+      ENDIF
+C
+ 799  CONTINUE
+C
+C*    Enter length of binary data section, ensuring that the
+C     length is an even number of octets, padding with binary
+C     zeroes as required.
+C     One 24 bit field.
+C
+      IF( YFUNC.NE.'C') GO TO 800
+Ce
+Ce    Length of section 4, in bits.
+Ce
+      ILEN4 = INSPT - IPLEN
+      IL    = ILEN4 / 16
+      IL    = ILEN4 - ( IL * 16 )
+      INIL  = 0
+      IF( IL.NE.0) THEN
+        INIL = 16 - IL
+Ce
+Ce      Insert padding zeroes at end of section 4
+Ce
+        ITEMP = 0
+        CALL INXBIT(KGRIB,KLENG,INSPT,ITEMP,1,IBITS,INIL,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 734
+          WRITE(GRPRSM,*)
+     X      'GRIBEX: Error inserting padding zeroes at end of section 4'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ',KRET
+          GO TO 900
+        ENDIF
+        ILEN4 = ILEN4 + INIL
+      ENDIF
+Ce
+      ILEN4 = ILEN4 / 8
+Ce
+Ce    Because of the restriction on product lengths to 3 octets,
+Ce    if a very large product, the section 4 length field holds
+Ce    the number of bytes in the product after section 4 upto
+Ce    the end of the padding bytes.
+Ce    This is only feasible because the (default) rounding for
+Ce    GRIB products is 120 bytes.
+Ce    In this case, delay encoding the value until section 5 has
+Ce    been encoded.
+Ce
+      IF( ILEN4.GE.JP23SET ) THEN
+        LLARGE = .TRUE.
+        IPLEN = IPLEN + 24
+      ELSE
+Ce
+Ce      Insert field.
+        CALL INXBIT(KGRIB,KLENG,IPLEN,ILEN4,1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 701
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting section 4 length'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+                 GO TO 900
+        ENDIF
+      ENDIF
+Ce
+Ce    Enter flag / unused bits field.
+Ce    One 8 bit field.
+Ce    Two 4 bit fields.
+Ce
+      IFLAG = KSEC4(3) + KSEC4(4) + KSEC4(5) + KSEC4(6)
+      IFLAG = IFLAG + INIL
+Ce
+Ce    Print number of unused bits, if required.
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Number of unused bits is ',INIL,'.'
+Ce
+Ce    Insert field.
+      CALL INXBIT(KGRIB,KLENG,IPLEN,IFLAG,1,IBITS, 8,YFUNC,KRET)
+      IF( KRET.NE.0) THEN
+        KRET = 713
+        WRITE(GRPRSM,*)
+     X    'GRIBEX: Error inserting/extracting flag and unused bit field'
+        WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+        GO TO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 8 . Code/decode End Section (Section 5) of GRIB code.
+C     -----------------------------------------------------------------|
+C
+  800 CONTINUE
+C
+      IF( LPDEBUG ) WRITE(GRPRSM,*)
+     X  'GRIBEX: Section 8. Handle End Section (Section 5)'
+C
+C*    Ascii 7 7 7 7 at end of coded data.
+C     Four 8 bit fields.
+C
+      IF( LENCODE ) THEN
+Ce
+Ce      Insert field.
+        IP7777 = INSPT
+        CALL INXBIT(KGRIB,KLENG,INSPT,I7777(1),4,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 801
+          WRITE(GRPRSM,*) 'GRIBEX: Error inserting 7777 group'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ',KRET
+          GO TO 900
+        ENDIF
+Ce
+Ce      Length of GRIB message.
+        KSEC0(1) = INSPT / 8
+        ITEMP = KSEC0(1)
+Ce
+Ce    Because of the restriction on product lengths to 3 octets, if
+Ce    more than 24 bits is needed, rescale by a factor of -120 to give
+Ce    a (smaller) negative count.  It is only possible because
+Ce    the (default) rounding for GRIB products is 120 bytes.
+Ce
+        IF( ITEMP.GE.JP23SET ) THEN
+          LLARGE = .TRUE.
+        ELSE
+Ce
+Ce        When encoding, use most-significant bit as a sign bit.
+Ce
+          CALL CSGNBT( KSEC0(1), ITEMP, 24, KRET)
+Ce
+Ce        Insert field.
+          ITEMP = 32
+          CALL INXBIT(KGRIB,KLENG,ITEMP,KSEC0(1),1,IBITS, 24,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 802
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting length of GRIB message'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+        ENDIF
+Ce
+Cjdc  ELSE
+      ENDIF
+Cj
+Cj      'J' option jumps here for possible bitmap adjustment
+Cj      to number of values in field section 4.
+Cj
+  815 CONTINUE
+C
+      IF( LDECODE ) THEN
+Cj
+        IF( L_IORJ ) GOTO 816
+Cj
+Cd      Skip padding.
+        INSPT = INSPT + INIL
+Cd
+        CALL INXBIT(KGRIB,KLENG,INSPT,IPARM(1),4,IBITS, 8,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 801
+          WRITE(GRPRSM,*) 'GRIBEX: Error extracting 7777 group'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ',KRET
+          GO TO 900
+	ENDIF
+Cd      Check that length is consistent with the number of the header file
+Cd	this will not happen for very large grib products with the *120 nightmare fix
+Cd	in this *120 case the KSEC0(1) is updated with the value of the pointer/8
+	IF( LLARGE) THEN
+	IF( KSEC0(1).NE.INSPT/8) THEN          
+	   IF( LPDEBUG ) THEN
+	    WRITE(GRPRSM,*) 'GRIBEX: Large product found', KSEC0(1) 
+	   ENDIF
+	   KSEC0(1) = INSPT/8	
+	   IF( LPDEBUG ) THEN
+	    WRITE(GRPRSM,*) 'GRIBEX: KSEC0(1) updated to = ', KSEC0(1)
+	   ENDIF
+	  ENDIF
+	ENDIF
+Cd
+Cd      Check that 7777 group is found where expected.
+        ICOUNT = 0
+        DO 810 JLOOP = 1 , 4
+          IF( IPARM(JLOOP).NE.55) ICOUNT = ICOUNT + 1
+  810   CONTINUE
+        IF( ICOUNT.NE.0) THEN
+          KRET = 805
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: End of message 7777 group not found.'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Cd
+Cd      Final handling when bit-maps included.
+Cd
+  816   CONTINUE
+Cd
+        IF( LSECT3 ) THEN
+Cd
+Cd        Bit-map included in GRIB message.
+          IF( KSEC3(1).EQ.0) THEN
+Cd
+            IF( KSEC4(8).EQ.0.OR.KSEC4(9).EQ.0) THEN
+Cd
+Cd            Single value at each point.
+Cd
+              ITEMP = 1
+Cd
+Cd          Pointer IBMAP2 is set negative if there
+Cd          are no matrix bit-maps.
+Cd
+              IBMAP2 = -1
+              ITEMP = 1
+            ELSE
+Cd
+Cd            Matrix of values at a point.
+Cd
+              ITEMP = KSEC4(50) * KSEC4(51)
+            ENDIF
+Cd
+            IF( .NOT.L_IORJ ) THEN
+Cd
+Cd            Check user array is big enough before using bitmap to
+Cd            fill missing data values (not relevant for 'J' option)
+Cd
+              IF( KLENP .LT. (IVALS*ITEMP) ) THEN
+                WRITE(GRPRSM,*)
+     X  'GRIBEX: Output array is not big enough to'
+                WRITE(GRPRSM,*)
+     X  'GRIBEX: allow expansion using bitmaps'
+                KRET = 729
+                GOTO 900
+              ENDIF
+Cd
+Cd            Expand using bitmaps
+Cd
+              CALL EXTMAP(KGRIB,KLENG,IBMAP,IBMAP2,KSEC4(1),PSEC4,IVALS,
+     X                    IBITS,ISBMAP,ZMSVAL,ITEMP,NDBG,KRET,NONMISS)
+              IF( KRET.NE.0) THEN
+                KRET = 806
+                WRITE(GRPRSM,*)
+     X            'GRIBEX: Error extracting primary/secondary bit map.'
+                WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+                GO TO 900
+              ENDIF
+              KSEC4(1) = IVALS*ITEMP
+Cj
+            ELSE IF( HOPER.EQ.'J' ) THEN
+Cj
+Cj            Cannot handle secondary bitmaps for 'J' option counting
+Cj
+              IF( IBMAP2.NE.-1 ) THEN
+                WRITE(GRPRSM,*)
+     X            'GRIBEX: Cannot handle 2ndary bitmaps for J option'
+                KRET = 811
+                GOTO 900
+Cj
+              ELSE
+Cj
+Cj              Count bits in primary bitmap only ('J' option)
+Cj
+                IS3BYTE = (IBMAP/8 - 6)
+                NONMISS = ONEBITS(KGRIB,IS3BYTE)
+                KSEC4(21) = NONMISS
+                KSEC4(1)  = IVALS
+              ENDIF
+            ENDIF
+Cd
+          ELSE
+#ifdef USE_NO_POINTERS
+            WRITE(GRPRSM,*)
+     X        'GRIBEX: predetermined bit-map reference not handled'
+              KRET = 735
+              GOTO 900
+#else
+Cd
+Cd          Predetermined bit-map reference only.
+Cd          (Secondary bitmaps not handled in this case).
+Cd
+            IBMAP2 = -1
+Cd
+Cd          Single value at each point.
+Cd
+            ITEMP = 1
+Cd
+Cd          Get the bitmask
+Cd
+            KRET = GBITMAP(KSEC3(1), IBTVALS, NONMISS, IBTPTR, NBYTE)
+            IF( KRET.NE.0 ) THEN
+              WRITE(GRPRSM,*) 'GRIBEX: Problem getting bitmap'
+              GOTO 900
+            ENDIF
+Cd
+Cd          Expand using bitmap
+Cd
+            IBMAP = 0
+Cd
+Cd          Set integer or real missing data value.
+Cd
+            IF( KSEC4(5) .EQ. 0 )  THEN
+              ZMSVAL = PSEC3(2)
+            ELSE
+              ZMSVAL = REAL(KSEC3(2))
+            ENDIF
+            CALL EXTMAP(IBTMAP, KLENG, IBMAP, IBMAP2, KSEC4(1), PSEC4,
+     X                  IBTVALS,IBITS, ISBMAP,ZMSVAL, ITEMP, NDBG, KRET,
+     X                  NONMISS)
+            IF( KRET.NE.0) THEN
+              KRET = 806
+              WRITE(GRPRSM,*)
+     X          'GRIBEX: Error extracting primary or secondary bit map.'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+            KSEC4(1) = IBTVALS*ITEMP
+Cd
+#endif
+          ENDIF
+        ENDIF
+Cd
+#ifndef USE_NO_POINTERS
+Cd
+Cd      If required, convert quasi-regular grid to regular.
+Cd
+        IF( HOPER.EQ.'R'.AND.LQUASI) THEN
+Cr
+Cr        Quasi-regular gaussian ..
+Cr
+          IF( (KSEC2(1).EQ. 4).OR.
+     X        (KSEC2(1).EQ.14).OR.
+     X        (KSEC2(1).EQ.24).OR.
+     X        (KSEC2(1).EQ.34) ) THEN
+Cr
+Cr          Gaussian grid must be global
+Cr
+            INOLAT = KSEC2(10) * 2
+Cr
+            IF( KSEC2(3).NE.INOLAT ) THEN
+              KRET = 808
+              WRITE(GRPRSM,*)
+     X          'GRIBEX: Error converting quasi-regular gaussian grid'
+              WRITE(GRPRSM,*) 'GRIBEX: to regular. Grid must be global.'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ',KRET
+              GO TO 900
+            ENDIF
+Cr
+            INOLNG    = INOLAT * 2
+            KSEC2(9)  = NINT(360000.0/REAL(INOLNG))
+            LPERIO = .TRUE.
+C
+C           Some ECMWF 'vegetation' parameters have to be interpolated
+C           using 'nearest neighbour' processing
+C
+            NITABLE  = KSEC1(1)
+            NICENTRE = KSEC1(2)
+            NIPARAM  = KSEC1(6)
+            LVEGGY = (NITABLE.EQ.128).AND.
+     X               (NICENTRE.EQ.98).AND.
+     X               ((NIPARAM.EQ.27).OR.
+     X                (NIPARAM.EQ.28).OR.
+     X                (NIPARAM.EQ.29).OR.
+     X                (NIPARAM.EQ.30))
+            IF( LPDEBUG ) THEN
+              IF( LVEGGY ) WRITE(GRPRSM,*)
+     X          'GRIBEX: Nearest neighbour processing used for R option'
+            ENDIF
+            CALL QU2REG3(PSEC4,KSEC2(23),INOLAT,INOLNG,1,ZMSVAL,KRET,
+     X                   LSECT3,LPERIO,LVEGGY)
+            IF( KRET .NE. 0 ) THEN
+              KRET = 808
+              WRITE(GRPRSM,*)
+     X          'GRIBEX: Error converting quasi-regular gaussian grid'
+              WRITE(GRPRSM,*)
+     X          'GRIBEX: to regular. Return code = ',KRET
+              GO TO 900
+            ENDIF
+Cr
+Cr        Quasi-regular latitude-longitude ..
+Cr
+          ELSE IF( (KSEC2(1).EQ. 0).OR.
+     X             (KSEC2(1).EQ.10).OR.
+     X             (KSEC2(1).EQ.20).OR.
+     X             (KSEC2(1).EQ.30) ) THEN
+            INOLAT    = IABS(KSEC2(4) - KSEC2(7))
+            IEAST   = KSEC2(5)
+Cr
+Cr          Special case: symmetrical about equator, no equator
+Cr          Have to calculate extreme longitude
+Cr          (Fixup for reduced lat/long grids reporting last point
+Cr          correctly)
+Cr
+            IF((MOD(KSEC2(3),2).EQ.0).AND.(KSEC2(4).EQ.(-KSEC2(7))))THEN
+              N = KSEC2(3)/2
+              NP = KSEC2(22+N)
+              NINC = 360000/NP
+              KSEC2(8) = IEAST + NINC*(NP-1)
+              KSEC2(9) = NINC
+            ENDIF
+            IWEST   = KSEC2(8)
+            IF( IWEST .LT. IEAST ) IWEST = IWEST + 360000
+            INOLNG    = IABS(IWEST - IEAST)
+Cr
+Cr          Allow for missing Di or Dj increment.
+Cr
+            IF( KSEC2(9) .EQ. IMISNG ) THEN
+              INOLAT    = 1 + INOLAT/ KSEC2(10)
+              INOLNG    = 1 + INOLNG/ KSEC2(10)
+              KSEC2(9)  = KSEC2(10)
+            ELSE
+              INOLAT    = 1 + INOLAT/ KSEC2(9)
+              INOLNG    = 1 + INOLNG/ KSEC2(9)
+              KSEC2(10) = KSEC2(9)
+            ENDIF
+Cr
+Cr          Check if input domain is periodic.
+Cr
+            ILOEXT = KSEC2(8)+(1-2*(KSEC2(11)/128))*KSEC2(9)
+            LPERIO = MOD( IABS(ILOEXT-KSEC2(5) ), 360000) .EQ. 0
+            CALL QU2REG3(PSEC4,KSEC2(23),INOLAT,INOLNG,1,ZMSVAL,KRET,
+     X                   LSECT3,LPERIO,LVEGGY)
+            IF( KRET .NE. 0 ) THEN
+              KRET = 808
+              WRITE(GRPRSM,*)
+     X          'GRIBEX: Error converting quasi-regular gaussian grid'
+              WRITE(GRPRSM,*)
+     X          'GRIBEX: to regular. Return code = ',KRET
+              GO TO 900
+            ENDIF
+Cr
+          ENDIF
+Cr
+          KSEC4(1)  = INOLAT * INOLNG
+          KSEC2(2)  = INOLNG
+          KSEC2(3)  = INOLAT
+          KSEC2(6)  = 128
+          KSEC2(17) = 0
+          LQUASI = .FALSE.
+        ENDIF
+#endif
+Cj
+        IF( HOPER.EQ.'J' ) GOTO 900
+Cj
+Cd
+Cd      Convert to integer if original data was integer.
+Cd
+        IF( ( KSEC4(5) .EQ. 32 ) .AND. (HOPER.NE.'B') )
+     X    CALL RORINT(PSEC4,PSEC4,KSEC4(1),'I')
+Cd
+Cd      Set number of values decoded negative, if missing data.
+Cd
+        IF( IMISS.EQ.1) KSEC4(1) = - KSEC4(1)
+Cd
+Cd      If GRIB Edition number is -1 or 0, set GRIB message
+Cd      length for return to user.
+Cd
+        IF( KSEC0(2).EQ.-1.OR.KSEC0(2).EQ.0) KSEC0(1) = INSPT / 8
+Cd
+        GO TO 900
+Cd
+      ENDIF
+C
+C*    Set unused part of last word to binary zeroes.
+C
+      KWORD    = INSPT / IBITS
+      ITEMP    = KWORD * IBITS
+      IOFF     = INSPT - ITEMP
+      IF( IOFF.NE.0) THEN
+        CALL INXBIT(KGRIB,KLENG,INSPT,0,1,IBITS,(IBITS-IOFF),YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 809
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error padding unused part of GRIB to zero'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+        KWORD = KWORD + 1
+      ENDIF
+C
+C*    Round length to a multiple of 120 octets, if required,
+C     Set any additional words to 0.
+C
+      IF( (NRND.EQ.1).OR.LLARGE ) THEN
+        I = INSPT / 960
+        I = I * 960
+        I = INSPT - I
+        IF( I.NE.0) THEN
+          I = (960 - I)
+          ITEMP = MOD(I,8)
+          CALL INXBIT(KGRIB,KLENG,INSPT,0,1,IBITS,ITEMP,YFUNC,KRET)
+          IF( KRET.NE.0) THEN
+            KRET = 810
+            WRITE(GRPRSM,*)
+     X  'GRIBEX: Error padding GRIB to multiple of 120'
+            WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+            GO TO 900
+          ENDIF
+          ITEMP = I/8
+          DO 820 JLOOP = 1, ITEMP
+            CALL INXBIT(KGRIB,KLENG,INSPT,0,1,IBITS,8,YFUNC,KRET)
+            IF( KRET.NE.0) THEN
+              KRET = 810
+              WRITE(GRPRSM,*)
+     X  'GRIBEX: Error padding GRIB to multiple of 120'
+              WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+              GO TO 900
+            ENDIF
+  820     CONTINUE
+          I = I / IBITS
+        ENDIF
+        KWORD = KWORD + I
+      ENDIF
+Ce
+      IF( LLARGE.AND.LENCODE ) THEN
+Ce
+Ce      Because of the restriction on product lengths to 3 octets, if
+Ce      more than 24 bits is needed, rescale by a factor of -120 to give
+Ce      a (smaller) negative count.  It is only possible because
+Ce      the (default) rounding for GRIB products is 120 bytes.
+Ce
+        ITEMP = (KWORD*(IBITS/8)) / (-120)
+Ce
+Ce      When encoding, use most-significant bit as a sign bit.
+Ce
+        CALL CSGNBT( KSEC0(1), ITEMP, 24, KRET)
+Ce
+Ce      Insert product length field.
+        ITEMP = 32
+        CALL INXBIT(KGRIB,KLENG,ITEMP,KSEC0(1),1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 802
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting length of GRIB message'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+Ce
+Ce      If encoding a very large product, the section 4 length field
+Ce      holds the number of bytes in the product after section 4 upto
+Ce      the end of the padding bytes. In this case, the setting
+Ce      of this field has been postponed upto this point.
+Ce
+        IPLEN = IPLEN - 32
+        ILEN4 = KWORD*(IBITS/8) - (IP7777/8)
+Ce
+Ce      Insert section 4 length.
+        CALL INXBIT(KGRIB,KLENG,IPLEN,ILEN4,1,IBITS, 24,YFUNC,KRET)
+        IF( KRET.NE.0) THEN
+          KRET = 802
+          WRITE(GRPRSM,*)
+     X  'GRIBEX: Error inserting length of GRIB section 4'
+          WRITE(GRPRSM,*) 'GRIBEX: Return code = ', KRET
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Abort/return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( LPDEBUG ) THEN
+        WRITE(GRPRSM,*) 'GRIBEX: Section 9.'
+        WRITE(GRPRSM,*) 'GRIBEX: Output values set -'
+        IF( LDECODE ) THEN
+          CALL GRPRS0(KSEC0)
+          CALL GRPRS1(KSEC0,KSEC1)
+Cd
+Cd        Print section 2 if present.
+Cd
+          IF( LSECT2 ) CALL GRPRS2(KSEC0,KSEC2,PSEC2)
+Cd
+Cd        Print section 3 if present.
+Cd
+          IF( LSECT3 ) CALL GRPRS3(KSEC0,KSEC3,PSEC3)
+Cd
+          CALL GRPRS4(KSEC0,KSEC4,PSEC4)
+Cd
+Cd        Special print for 2D spectra wave field real values in
+Cd        section 4
+Cd
+          IF( (KSEC1(1).EQ.140) .AND.
+     X        (KSEC1(2).EQ. 98) .AND.
+     X        (KSEC1(24).EQ. 1) .AND.
+     X        ( (KSEC1(40).EQ.1045).OR.(KSEC1(40).EQ.1081) ) .AND.
+     X        ( (KSEC1(6) .EQ. 250).OR.(KSEC1(6) .EQ. 251) ) )
+     X      CALL GRPRS4W(KSEC4)
+        ENDIF
+      ENDIF
+C
+C     Effective number of points in masked field returned in KSEC4(21).
+C     Bit-map pointer within masked field returned in KSEC4(22).
+C
+      IF( LSECT3 ) THEN
+        KSEC4(21) = NONMISS
+        KSEC4(22) = IBMAP
+      ENDIF
+C
+C     Length of section 4 (octets) in KSEC4(23).
+C     Unused bit count returned in KSEC4(24).
+C
+      KSEC4(23) = ILEN4
+      KSEC4(24) = INIL
+C
+C*    If no error has been encountered, set return code to informative
+C     value, if required.
+C
+C     Set pseudo-GRIB data encountered.
+C
+      IF( KRET.EQ.0.AND.IPSEUD.NE.0) KRET = IPSEUD
+C
+C     Set data with bit-map encountered (unless 'J' option in use).
+C
+      IF( (KRET.EQ.0.AND.ISBMAP.NE.0).AND.(HOPER.NE.'J')) KRET = ISBMAP
+C
+C Dumping data values on a file if an error occurs and the environment
+C variable GRIBEX_DUMP_DATA_ON_ERROR is set
+        IF (( HOPER.EQ.'C'.OR.HOPER.EQ.'M'.OR.HOPER.EQ.'K')
+     x  .AND.DUMPDATA.NE.0) THEN
+          OPEN(IDUMP,FILE=DUMPPATH,FORM='FORMATTED',STATUS='UNKNOWN')
+          do jloop=1,klenp
+            write(IDUMP,'(E20.10)') PSEC4(jloop)
+          enddo
+          close(IDUMP)
+        ENDIF
+C
+C*    Abort if an error has been encountered and user has requested
+C     an abort. Informative values are negative and do not cause an
+C     abort.
+C
+      IF( (NOABORT.EQ.0) .AND. (KRET.GT.0) ) THEN
+C
+C       Try to print some useful information before aborting
+C
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        WRITE(GRPRSM,*) 'GRIBEX: Version is ',YGRIBEX
+        WRITE(GRPRSM,*) 'GRIBEX: KLENP = ', KLENP
+        WRITE(GRPRSM,*) 'GRIBEX: KLENG = ', KLENG
+        WRITE(GRPRSM,*) 'GRIBEX: HOPER = ', HOPER
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 910 JLOOP = 1, 43
+          WRITE(GRPRSM,*) 'GRIBEX: KSEC1(',JLOOP,') = ', KSEC1(JLOOP)
+  910   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 920 JLOOP = 1, 22
+          WRITE(GRPRSM,*) 'GRIBEX: KSEC2(',JLOOP,') = ', KSEC2(JLOOP)
+  920   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 930 JLOOP = 1, 10
+          WRITE(GRPRSM,*) 'GRIBEX: PSEC2(',JLOOP,') = ', PSEC2(JLOOP)
+  930   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 940 JLOOP = 1, 2
+          WRITE(GRPRSM,*) 'GRIBEX: KSEC3(',JLOOP,') = ', KSEC3(JLOOP)
+  940   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 950 JLOOP = 1, 2
+          WRITE(GRPRSM,*) 'GRIBEX: PSEC3(',JLOOP,') = ', PSEC3(JLOOP)
+  950   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 960 JLOOP = 1, 20
+          WRITE(GRPRSM,*) 'GRIBEX: KSEC4(',JLOOP,') = ', KSEC4(JLOOP)
+  960   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        DO 970 JLOOP = 1, 20
+          WRITE(GRPRSM,*) 'GRIBEX: PSEC4(',JLOOP,') = ', PSEC4(JLOOP)
+  970   CONTINUE
+        WRITE(GRPRSM,*) 'GRIBEX: ********************************'
+        CALL ABORTX ('GRIBEX')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
+ 
+ 
diff --git a/gribex/gribex.h b/gribex/gribex.h
new file mode 100755
index 0000000..b06d5da
--- /dev/null
+++ b/gribex/gribex.h
@@ -0,0 +1,1527 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** GRIBEX - Coding and decoding of GRIB format data.
+C
+C     Purpose.
+C     --------
+C
+C     1) Code data in FM-92 GRIB code, Edition 1.
+C     2) Decode data from FM-92 GRIB code.
+C     3) Decode only identification sections of GRIB
+C        coded data ie Sections 0, 1 and 2.
+C     4) Return length of GRIB message, in bytes, and GRIB
+C        Edition number only.
+C
+C        A number of options exist when coding or decoding -
+C        see values allowed for requested function, HOPER, below.
+C
+C        Decoding functions work on Experimental Edition,
+C        Edition 0 and Edition 1 of GRIB code. Decoded values
+C        for Sections 0 to 2 are always in Edition 1 format.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRIBEX (KSEC0,KSEC1,KSEC2,PSEC2,KSEC3,PSEC3,KSEC4,
+C    X                   PSEC4,KLENP,KGRIB,KLENG,KWORD,HOPER,KRET)
+C
+C     Integer    K.
+C     Real       P.
+C     Logical    O.
+C     Character  H.
+C
+C     Input Parameters for all functions.
+C     -----------------------------------
+C
+C     HOPER      - Requested function.
+C
+C
+C                  'A' To encode 8-bit data into GRIB code
+C
+C                  'B' To decode 8-bit data from GRIB code
+C
+C
+C                  'C' To code data in GRIB code, with or
+C                      without bit-maps.
+C
+C                  'D' To decode data from GRIB code. If
+C                      ECMWF pseudo-Grib data is encountered,
+C                      only sections 0 and 1 are decoded and
+C                      the return code is set to -6.
+C
+C                  'G' Special decoding for graphics purposes.
+C                      Reference value returned in PSEC4(1)
+C                      Binary scale factor returned in PSEC4(2
+C                      Bit pointer to data increments in
+C                      KSEC4(34).
+C
+C                  'I' To decode only identification
+C                      sections 0, 1 and 2 of GRIB or
+C                      pseudo-Grib data.
+C
+C                  'J' To decode only identification
+C                      sections 0, 1, 3 and 4 of GRIB.
+C
+C                  'K' Special "aggressive" coding: try all
+C                      the relevant methods of packing,
+C                      especially second-order packing,
+C                      in order to get the shortest
+C                      GRIB message. Effective only for
+C                      grid-point fields. No feedback in
+C                      KSEC4 descriptors, to preserve the
+C                      "read-only" status of this array.
+C
+C                  'L' Return length of GRIB message, in
+C                      bytes, and GRIB Edition number only.
+C                      Length does not include any bytes
+C                      added to round message length to a
+C                      multiple of 120 bytes. Works also for
+C                      pseudo-Grib data.
+C
+C                  'M' To code data in GRIB code and, if a
+C                      bit-map is encountered, make GRIB
+C                      message full length ie the same length
+C                      as if all data values were given.
+C
+C                  'R' To decode data from GRIB code, and if
+C                      a quasi-regular Gaussian grid or a
+C                      quasi-regular latitude-longitude grid
+C                      is encountered, convert it to regular.
+C
+C                  'S' To decode initialised analysis data
+C                      from GRIB code, and if data is in the
+C                      Experimental Edition of GRIB, set the
+C                      Time Range Indicator flag. In the
+C                      Experimental Edition there was no
+C                      distinction between initialised and
+C                      uninitialised analyses.
+C
+C                  'X' To extract data values for up to 4
+C                      points from a GRIB coded Gaussian or
+C                      Latitude/longitude field, without
+C                      unpacking the data at other points.
+C                      See words 34 to 42 of KSEC4 below.
+C
+C                  'Z' To decode data from GRIB code.
+C                      If a bit-map is encountered,
+C                      only sections 0,1 and 2 are decoded and
+C                      the return code is set to -5.
+C
+C     KLENP      - Length of array PSEC4.
+C
+C     KLENG      - Length of array KGRIB.
+C
+C     KRET       - Response to error indicator.
+C                  0         , Abort if error encountered.
+C                              Negative return codes are
+C                              informative and do not cause
+C                              an abort.
+C                  Non- zero , Return to calling routine
+C                              even if error encountered.
+C
+C
+C
+C
+C
+C     Input parameters for coding function.
+C     Output Parameters for decoding functions.
+C     -----------------------------------------
+C
+C     KSEC1      - Integer parameters of Section 1 (Product
+C                  Definition Section) of GRIB code.
+C                  Integer array of at least 25 words.
+C
+C                  If Section 1 of the GRIB code contains
+C                  data for ECMWF local use, KSEC1 should
+C                  be sized accordingly eg 53 + N , where
+C                  N is the number of ensemble forecasts.
+C
+C         Word   Contents.
+C         ----   ---------
+C           1    Version number of Code Table 2.
+C           2    Identification of centre (Code Table 0).
+C           3    Generating process identification number
+C                ( allocated by originating centre ).
+C           4    Grid definition (NNN -  Catalogue number
+C                of grid used by originating centre. See
+C                Volume B of publication WMO - No.9).
+C           5    Flag indication relative to Section 2
+C                (Grid Description Section) and Section
+C                3 (Bit Map Section). Code Table 1.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Sections 2 and 3 omitted.
+C                 128      Section 2 included, Section 3
+C                          omitted.
+C                  64      Section 2 omitted, Section 3
+C                          included.
+C                 192      Sections 2 and 3 included.
+C
+C           6    Indicator of parameter (Code Table 2).
+C           7    Indicator of type of level (Code Table 3).
+C                 (or satellite identifier)
+C                 Satellite useage as defined by INPE/CPTEC
+C                 and used by ECMWF, pending final definition
+C                 by WMO.
+C           8    Height, pressure etc of level (Code Table 3).
+C                Single level or top of layer.
+C                 (or satellite spectral band)
+C                 Satellite useage as defined by INPE/CPTEC
+C                 and used by ECMWF, pending final definition
+C                 by WMO.
+C           9    Height, pressure etc of level (Code Table 3).
+C                Bottom of layer, if word 6 indicates a layer.
+C          10    Year of century  }
+C          11    Month            } Reference time of data -
+C          12    Day              } Date and time of start of
+C          13    Hour             } averaging or accumulation
+C          14    Minute           } period.
+C          15    Indicator of unit of time (Code Table 4).
+C          16    P1 - Period of time (number of time units)
+C                (0 for analyses or initialised analyses).
+C          17    P2 - Period of time (number of time units);
+C                or time interval between successive
+C                analyses, initialised analyses or forecasts
+C                undergoing averaging or accumulation;
+C                otherwise set to zero.
+C          18    Time range indicator (Code Table 5).
+C          19    Number included in average, when time range
+C                indicator indicates an average or
+C                accumulation; otherwise set to zero.
+C          20    Number missing from average, when time range
+C                indicator indicates an average or
+C                accumulation; otherwise set to zero.
+C          21    Century of reference time of data.
+C          22    Identification of sub-centre(Code Table C-1).
+C          23    Decimal scale factor.
+C          24    Flag field to indicate local use in
+C                Section 1.
+C                0 - No local use of section 1.
+C                1 - Local use of section 1.
+C       25-36    Reserved for WMO reserved fields. Set to 0.
+C          37    ECMWF local usage identifier.This is a number
+C                which indicates the contents of words 38-nn.
+C
+C                1 - ECMWF local GRIB use definition 1.
+C                    Ensemble forecast data.
+C                2 - ECMWF local GRIB use definition 2.
+C                    Cluster means and standard deviations.
+C                3 - ECMWF local GRIB use definition 3.
+C                    Satellite image data.
+C                4 - ECMWF local GRIB use definition 4.
+C                    Ocean model data.
+C                5 - ECMWF local GRIB use definition 5.
+C                    Forecast probability data.
+C                6 - ECMWF local GRIB use definition 6.
+C                    Surface temperature data.
+C                7 - ECMWF local GRIB use definition 7.
+C                    Sensitivity gradient/Trajectory
+C                    forecast and Sensitivity forecast data.
+C                8 - ECMWF local GRIB use definition 8.
+C                    ECMWF re-analysis data.
+C                9 - ECMWF local GRIB use definition 9.
+C                    Singular vectors and ensemble perturbations.
+C
+C
+#include "ecdef1.h"
+#include "ecdef2.h"
+#include "ecdef3.h"
+#include "ecdef4.h"
+#include "ecdef5.h"
+#include "ecdef6.h"
+#include "ecdef7.h"
+#include "ecdef8.h"
+#include "ecdef9.h"
+#include "ecdef10.h"
+#include "ecdef11.h"
+#include "ecdef12.h"
+#include "ecdef13.h"
+#include "ecdef14.h"
+C
+C
+C
+C
+C
+C     KSEC2      - Integer parameters of Section 2 (Grid
+C                  Description Section) of GRIB code.
+C                  Integer array of at least 22 + n words,
+C                  where n is the number of parallels or
+C                  meridians in a quasi-regular (reduced)
+C                  Gaussian or latitude/longitude grid.
+C
+C          Notes:- 1) Latitudes, longitudes are in
+C                     millidegrees.
+C                  2) Latitude values in the range 0-90000.
+C                  3) Longitude values in the range 0-360000.
+C                  4) Southern latitudes and western
+C                     longitudes are negative.
+C
+C         Word   Contents for latitude/longitude grids or
+C                equidistant cylindrical or Plate Carree.
+C         ----   ----------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    Ni - Number of points along a parallel.
+C           3    Nj - Number of points along a meridian.
+C           4    La1 - Latitude of first grid point.
+C           5    Lo1 - Longitude of first grid point.
+C           6    Resolution flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Direction increments not given.
+C                          Used for quasi-regular grids, but
+C                          can also be used for regular grids.
+C                 128      Direction increments given.
+C                          Grids must be regular.
+C
+C           7    La2 - Latitude of last grid point.
+C           8    Lo2 - Longitude of last grid point.
+C           9    Di - i direction increment.
+C          10    Dj - j direction increment.
+C          11    Scanning mode flags (Code Table 8).
+C          12    Number of vertical coordinate parameters.
+C          13    Latitude of the southern pole of rotation.
+C          14    Longitude of the southern pole of rotation.
+C          15    Latitude of the the pole of stretching.
+C          16    Longitude of the the pole of stretching.
+C          17    0 , Regular grid.
+C                1 , Quasi-regular (reduced) grid.
+C
+C             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C             !                                               
+C             !      At the moment quasi-regular latitude/    
+C             !      longitude grids are not properly defined.
+C             !      The Resolution flag field indicates both 
+C             !      direction increments are given or not.   
+C             !      One increment needs to be given. Grids   
+C             !      can be irregular in one direction only.  
+C             !                                               
+C             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C          18    Earth flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Earth assumed spherical with
+C                          radius of 6367.47 km.
+C                  64      Earth assumed oblate spheroidal
+C                          with size as determined by IAU in
+C                          1965 :
+C                          (6378.160km,6356.775km,f=1/297.0)
+C
+C          19    Components flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Resolved u and v components of
+C                          vector quantities relative to
+C                          easterly and northerly directions.
+C
+C                   8      Resolved u and v components of
+C                          vector quantities relative to the
+C                          defined grid in the direction of
+C                          increasing x and y (or i and j)
+C                          coordinates respectively.
+C
+C       20-22    Reserved. Set to 0.
+C       23-nn    Number of points along each parallel
+C                in a Quasi-regular grid. Number of parallels
+C                is given by Nj above.
+C                or
+C                Number of points along each meridian
+C                in a Quasi-regular grid. Number of  meridians
+C                is given by Ni above.
+C
+C                Scanning mode flags (Code Table 8) indicate
+C                whether points are consecutive on a meridian
+C                or a parallel.
+C
+C          Notes:- 1) Increments are in millidegrees.
+C
+C
+C
+C
+C
+C         Word   Contents for Gaussian grids .
+C         ----   ---------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    Ni - Number of points along a parallel.
+C                    Cannot be used for quasi-regular grids.
+C           3    Nj - Number of points along a meridian.
+C           4    La1 - Latitude of first grid point.
+C           5    Lo1 - Longitude of first grid point.
+C           6    Resolution flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Direction increments not given.
+C                          Used for quasi-regular grids, but
+C                          can also be used for regular grids.
+C                 128      Direction increments given.
+C                          Grids must be regular.
+C
+C           7    La2 - Latitude of last grid point.
+C           8    Lo2 - Longitude of last grid point.
+C           9    Di - i direction increment.
+C                     Cannot be used for quasi-regular grids.
+C          10    N - Number of parallels between a Pole and
+C                the Equator.
+C          11    Scanning mode flags (Code Table 8).
+C          12    Number of vertical coordinate parameters.
+C          13    Latitude of the southern pole of rotation.
+C          14    Longitude of the southern pole of rotation.
+C          15    Latitude of the the pole of stretching.
+C          16    Longitude of the the pole of stretching.
+C          17    0 , Regular grid.
+C                1 , Quasi-regular (reduced) grid.
+C          18    Earth flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Earth assumed spherical with
+C                          radius of 6367.47 km.
+C                  64      Earth assumed oblate spheroidal
+C                          with size as determined by IAU in
+C                          1965 :
+C                          (6378.160km,6356.775km,f=1/297.0)
+C
+C          19    Components flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Resolved u and v components of
+C                          vector quantities relative to
+C                          easterly and northerly directions.
+C
+C                   8      Resolved u and v components of
+C                          vector quantities relative to the
+C                          defined grid in the direction of
+C                          increasing x and y (or i and j)
+C                          coordinates respectively.
+C
+C       20-22    Reserved. Set to 0.
+C       23-nn    Number of points along each parallel
+C                in a Quasi-regular grid. Number of parallels
+C                is given by Nj above.
+C
+C          Notes:- 1) Increments are in millidegrees.
+C
+C
+C
+C
+C
+C         Word   Contents for Spherical Harmonic Coefficients.
+C         ----   --------------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    J - Pentagonal resolution parameter.
+C           3    K - Pentagonal resolution parameter.
+C           4    M - Pentagonal resolution parameter.
+C           5    Representation type ( Code Table 9 ).
+C           6    Representation mode ( Code Table 10 ).
+C        7-11    Reserved. Set to 0.
+C          12    Number of vertical coordinate parameters.
+C          13    Latitude of the southern pole of rotation.
+C          14    Longitude of the southern pole of rotation.
+C          15    Latitude of the the pole of stretching.
+C          16    Longitude of the the pole of stretching.
+C       17-22    Reserved. Set to 0.
+C
+C
+C
+C
+C
+C         Word   Contents for Polar Stereographic.
+C         ----   --------------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    Nx - Number of points along X-axis.
+C           3    Ny - Number of points along Y-axis.
+C           4    La1 - Latitude of first grid point.
+C           5    Lo1 - Longitude of first grid point.
+C           6    Reserved. Set to 0. Resolution flag is
+C                not applicable to Polar stereographic.
+C           7    LoV - Orientation of the grid ie the
+C                longitude of the meridian which is parallel
+C                to the Y-axis along which latitude increases
+C                as the Y-coordinate increases.
+C           8    Reserved. Set to 0.
+C           9    Dx - X-direction grid length.
+C          10    Dy - Y-direction grid length.
+C          11    Scanning mode flag (Code Table 8).
+C          12    Number of vertical coordinate parameters.
+C          13    Projection centre flag.
+C                0 , North pole is on projection plane.
+C                1 , South pole is on projection plane. ??????
+C                128 , South pole is on projection plane. ????
+C       14-16    Reserved. Set to 0.
+C          17    0 , Regular grid.
+C                1 , Quasi-regular (reduced) grid.
+C          18    Earth flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Earth assumed spherical with
+C                          radius of 6367.47 km.
+C                  64      Earth assumed oblate spheroidal
+C                          with size as determined by IAU in
+C                          1965 :
+C                          (6378.160km,6356.775km,f=1/297.0)
+C
+C          19    Components flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Resolved u and v components of
+C                          vector quantities relative to
+C                          easterly and northerly directions.
+C
+C                   8      Resolved u and v components of
+C                          vector quantities relative to the
+C                          defined grid in the direction of
+C                          increasing x and y (or i and j)
+C                          coordinates respectively.
+C               20-22      Reserved. Set to 0.
+C
+C
+C          Notes   1) Grid lengths are in metres, at the 60-
+C                     degree parallel nearest to the pole on
+C                     the projection plane.
+C
+C
+C
+C
+C
+C         Word   Contents for Mercator.
+C         ----   ---------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    Ni - Number of points along a parallel.
+C           3    Nj - Number of points along a meridian.
+C           4    La1 - Latitude of first grid point.
+C           5    Lo1 - Longitude of first grid point.
+C           6    Resolution flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Direction increments not given.
+C                 128      Direction increments given.
+C
+C           7    La2 - Latitude of last grid point.
+C           8    Lo2 - Longitude of last grid point.
+C           9    Latin - latitude at which the Mercator
+C                projection cylinder intersects the earth.
+C          10    Reserved. set to 0.
+C          11    Scanning mode flags (Code Table 8).
+C          12    Number of vertical coordinate parameters.
+C          13    Di - i direction grid length.
+C          14    Dj - j direction grid length.
+C       15-16    Reserved. Set to 0.
+C          17    0 , Regular grid.
+C                1 , Quasi-regular (reduced) grid.
+C          18    Earth flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Earth assumed spherical with
+C                          radius of 6367.47 km.
+C                  64      Earth assumed oblate spheroidal
+C                          with size as determined by IAU in
+C                          1965 :
+C                          (6378.160km,6356.775km,f=1/297.0)
+C
+C          19    Components flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Resolved u and v components of
+C                          vector quantities relative to
+C                          easterly and northerly directions.
+C
+C                   8      Resolved u and v components of
+C                          vector quantities relative to the
+C                          defined grid in the direction of
+C                          increasing x and y (or i and j)
+C                          coordinates respectively.
+C
+C       20-22    Reserved. Set to 0.
+C
+C          Notes   1) Grid lengths are in units of metres,
+C                     at the parallel specified by Latin.
+C
+C
+C
+C
+C
+C         Word   Contents for Lambert conformal, secant or
+C                tangent, conical or bi-polar (normal or
+C                oblique) or
+C                Albers equal-area, secant or tangent,
+C                conical or bi-polar (normal or oblique).
+C         ----   --------------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    Nx - Number of points along X-axis.
+C           3    Ny - Number of points along Y-axis.
+C           4    La1 - Latitude of first grid point.
+C           5    Lo1 - Longitude of first grid point.
+C           6    Resolution flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Direction increments not given.
+C                 128      Direction increments given.
+C
+C           7    LoV - Orientation of the grid ie the  East
+C                longitude of the meridian which is parallel
+C                to the Y-axis along which latitude increases
+C                as the Y-coordinate increases.
+C           8    Reserved. Set to 0.
+C           9    Dx - X-direction grid length.
+C          10    Dy - Y-direction grid length.
+C          11    Scanning mode flag (Code Table 8).
+C          12    Number of vertical coordinate parameters.
+C          13    Projection centre flag.
+C                  0 , North pole is on projection plane.
+C                      Only one projection centre is used.
+C                128 , South pole is on projection plane.
+C                      Only one projection centre is used.
+C                 64 , North pole is on projection plane.
+C                      Projection is bi-polar and symmetric.
+C                192 , South pole is on projection plane.
+C                      Projection is bi-polar and symmetric.
+C          14    Latin 1 - First latitude from the pole at
+C                which the secant cone cuts the sphere.
+C          15    Latin 2 - Second latitude from the pole at
+C                which the secant cone cuts the sphere.
+C          16    Reserved. Set to 0.
+C          17    0 , Regular grid.
+C                1 , Quasi-regular (reduced) grid.
+C          18    Earth flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Earth assumed spherical with
+C                          radius of 6367.47 km.
+C                  64      Earth assumed oblate spheroidal
+C                          with size as determined by IAU in
+C                          1965 :
+C                          (6378.160km,6356.775km,f=1/297.0)
+C
+C          19    Components flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Resolved u and v components of
+C                          vector quantities relative to
+C                          easterly and northerly directions.
+C
+C                   8      Resolved u and v components of
+C                          vector quantities relative to the
+C                          defined grid in the direction of
+C                          increasing x and y (or i and j)
+C                          coordinates respectively.
+C
+C          20    Latitude of the southern pole.
+C          21    Longitude of the southern pole.
+C          22    Reserved. Set to 0.
+C
+C          Notes   1) Grid lengths are in metres, at the 60-
+C                     degree parallel nearest to the pole on
+C                     the projection plane.
+C
+C
+C
+C
+C
+C         Word   Contents for Space view perspective
+C                or orthographic.
+C         ----   ---------------------------------------
+C           1    Data representation type (Code Table 6).
+C           2    Nx - Number of points along x-axis.
+C           3    Ny - Number of points along y-axis.
+C           4    Lap - Latitude of sub-satellite point.
+C           5    Lop - Longitude of sub-satellite point.
+C           6    Resolution flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Direction increments not given.
+C                 128      Direction increments given.
+C
+C           7    dx - Apparent diameter of the earth in
+C                grid lengths in the x direction.
+C           8    dy - Apparent diameter of the earth in
+C                grid lengths in the y direction.
+C           9    Xp X-coordinate of sub-satellite point
+C          10    Yp Y-coordinate of sub-satellite point
+C          11    Scanning mode flag (Code Table 8).
+C          12    Number of vertical coordinate parameters.
+C          13    The orientation of the grid.
+C          14    nr - the altitude of the camera from the
+C                earth's centre.
+C                For orthographic view from infinite
+C                distance 16777215.
+C          15    Xo - X coordinate of origin of sector
+C                     image.
+C          16    Yo - Y coordinate of origin of sector
+C                     image.
+C          17    0 , Regular grid.
+C                1 , Quasi-regular (reduced) grid.
+C          18    Earth flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Earth assumed spherical with
+C                          radius of 6367.47 km.
+C                  64      Earth assumed oblate spheroidal
+C                          with size as determined by IAU in
+C                          1965 :
+C                          (6378.160km,6356.775km,f=1/297.0)
+C
+C          19    Components flag.
+C                Valid values are :-
+C
+C                Decimal
+C                value     Meaning
+C                -----     -------
+C                   0      Resolved u and v components of
+C                          vector quantities relative to
+C                          easterly and northerly directions.
+C
+C                   8      Resolved u and v components of
+C                          vector quantities relative to the
+C                          defined grid in the direction of
+C                          increasing x and y (or i and j)
+C                          coordinates respectively.
+C
+C       20-22    Reserved. Set to 0.
+C
+C
+C
+C
+C
+C     PSEC2      - Real parameters for Section 2 (Grid
+C                  Definition Section) of GRIB Code.
+C                  Real array of at least 10 + nn words, where
+C                  nn is the number of vertical coordinate
+C                  parameters.
+C
+C         Word   Contents.
+C         ----   --------------------------------------------
+C           1      Angle of rotation.
+C           2      Stretching factor.
+C         3-10     Reserved. Set to 0.
+C        11-nn     Vertical coordinate parameters.
+C                  Number given in KSEC2(12)
+C
+C
+C
+C
+C
+C     KSEC3      - Integer parameters for Section 3 (Bit Map
+C                  Section) of GRIB code.
+C                  Integer array of at least 2 words.
+C
+C         Word   Contents.
+C         ----   --------------------------------------------
+C           1      0 , Bit map included in the GRIB message.
+C                      Binary data array (PSEC4) contains the
+C                      missing data indicator at the points
+C                      where no data is given.
+C                  Non-zero, Number of predetermined bit-map.
+C                      Bit map is not included in the message.
+C                      Binary data array contains only valid
+C                      data values.
+C
+C           2      The value used to indicate missing data in
+C                  an integer binary data array is indicated
+C                  here.
+C                  This value is user supplied for both
+C                  coding and decoding, and redefined at each
+C                  call.
+C
+C                  On ouput, whenever a masked field is found,
+C                  the effective number of non-missing values
+C                  is returned.
+C
+C
+C
+C
+C     PSEC3      - Real parameters for Section 3 (Bit Map
+C                  Section) of GRIB code.
+C                  Real array of at least 2 words.
+C
+C         Word   Contents.
+C         ----   --------------------------------------------
+C           1      Not used.
+C
+C           2      The value used to indicate missing data in
+C                  a real binary data array is indicated here.
+C                  This value is user supplied for both
+C                  coding and decoding.
+C
+C
+C
+C
+C
+C     KSEC4      - Integer parameters for Section 4 (Binary
+C                  Data Section) of GRIB code.
+C                  Integer array of at least 42 words.
+C
+C         Word   Contents.
+C         ----   --------------------------------------------
+C           1    Number of data values in array PSEC4 to be
+C                packed in GRIB code or which have been
+C                unpacked from GRIB code. Where a bit-map
+C                is used this number includes the number of
+C                mising data values.
+C
+C             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C             !                                              !
+C             ! If this number is NEGATIVE, it indicates     !
+C             ! ENTIRE FIELD IS MISSING. All values in PSEC4 !
+C             ! are 0. This is an ECMWF convention - coded   !
+C             ! data has scale factor, exponent and mantissa !
+C             ! of reference value with all bits set to 1.   !
+C             !                                              !
+C             !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C           2    Number of bits used for each packed value.
+C           3    Type of data. Used only if Section 2 is
+C                not included when coding data.
+C                  0 - Grid point data.
+C                128 - Spherical harmonic coefficients.
+C           4    Type of packing.
+C                  0 - Simple packing.
+C                 64 - Complex or second order packing.
+C           5    Data representation.
+C                  0 - Floating point data.
+C                 32 - Integer data.
+C           6    Additional flags indicator.
+C                  0 - No additional flags.
+C                 16 - additional flags.
+C           7    Reserved. Set to 0.
+C           8    Number of values indicator.
+C                  0 - Single datum at each grid point.
+C                 64 - Matrix of values at each grid point.
+C           9    Secondary bit maps indicator.
+C                  0 - No secondary bit maps.
+C                 32 - Secondary bit maps present.
+C          10    Values width indicator.
+C                  0 - Second order values constant width.
+C                 16 - Second order values different widths.
+C          11    Number of bits for second order values,
+C                when of constant width.
+C
+C          If not zero, words 12 to 15 indicate specific use of
+C          2nd-order packing methods which are extensions
+C          to current WMO standard for GRIB edition 1.
+C
+C          12    General extended 2nd-order packing indicator.
+C                  0 - Method not used.
+C                  8 - Method in use.
+C          13    Boustrophedonic ordering indicator.
+C                  0 - Sub-method not used.
+C                  4 - Sub-method in use.
+C          14    Spatial differencing 1st indicator.
+C                  0 - Sub-method used at order KSEC4(15) if equal to 1.
+C                  2 - Sub-method used, at order 2+KSEC4(15).
+C          15    Spatial differencing 2nd indicator.
+C                  0 - Sub-method used at order KSEC4(14) if equal to 2.
+C                  1 - Sub-method used, at order KSEC4(14)+1.
+C
+C          Spatial differencing feature is used at order
+C          KSEC4(14)+KSEC4(15), provided this sum is not 0, and the
+C          valid entries mentioned above are used.
+C
+C     Contents of words 16-20 for simple packing cases :
+C
+C       16-20    Set to 0.
+C
+C     Contents of words 16-20 for complex packing of spectral data :
+C
+C          16    Pointer to the start of packed data values.
+C          17    Scaling factor P, stored as the integer value P*1000
+C                (in the range -10000 to +10000) for GRIB edition 1.
+C                (and as P for GRIB edition 0 decoding)
+C          18    Pentagonal resolution parameter J for data subset
+C                stored as 32-bit floating-point values.
+C          19    Pentagonal resolution parameter K for data subset.
+C          20    Pentagonal resolution parameter M for data subset.
+C
+C     Contents of words 16-20 for complex packing of grid-point data
+C     (second-order packing) :
+C
+C          16    Pointer (relative to section 4) to first-order values.
+C          17    Pointer (relative to section 4) to 2nd-order values.
+C          18    Number of first-order values.
+C          19    Number of second-order values.
+C          20    Group width (8 bits in standard cases).
+C
+C     Words 21 to 24 are supplied back both for decoding and encoding
+C     functions.
+C
+C          21    Number of non-missing points if masked field .
+C                (set to 0 otherwise)
+C          22    Bit-map pointer to explicit bit-map if any.
+C                (set to 0 otherwise)
+C          23    Full length of section 4 (octets).
+C          24    Unused bit count at end of section 4.
+C
+C       25-33    Reserved. Set to 0.
+C
+C                Words 34 to 42 are used only for the 'X'
+C                function. Scanning mode must be from West
+C                to East and from North to South.
+C          34    Number of points (maximum 4) from which
+C                data is to be unpacked.
+C          35    Number of latitude row of first value.
+C          36    Number of longitude point of first value.
+C          37    Number of latitude row of second value.
+C          38    Number of longitude point of second value.
+C          39    Number of latitude row of third value.
+C          40    Number of longitude point of third value.
+C          41    Number of latitude row of fourth value.
+C          42    Number of longitude point of fourth value.
+C
+C                For grid point packing, with a matrix of
+C                values at each grid point, words 50 to
+C                50+NC1+NC2 are used as follows.
+C          50    First dimension (rows) of each matrix.
+C          51    Second dimension (columns) of each matrix.
+C          52    First dimension coordinate values definition
+C                See Code Table 12.
+C          53    NC1- Number of coefficients or values used to
+C                specify first dimension coordinate function.
+C          54    Second dimension coordinate values definition
+C                See Code Table 12.
+C          55    NC2- Number of coefficients or values used to
+C                specify second dimension coordinate function.
+C          56    First dimension physical significance. See
+C                Code Table 13.
+C          57    Second dimension physical significance. See
+C                Code Table 13.
+C     58 - 59    Reserved. Set to 0.
+C
+C                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C                !                                           !
+C                ! In the WMO specification the following    !
+C                ! fields are integer values. ECMWF uses     !
+C                ! floating point values for the wave models !
+C                ! so these fields contain real values on    !
+C                ! both input and output.
+C                !                                           !
+C                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     60 - (59+NC1)    Coefficients to define first dimension
+C                coordinate values in functional form, or the
+C                the explicit coordinate values.
+C (60+NC1)-(59+NC1+NC2)    Coefficients to define second dimension
+C                coordinate values in functional form, or the
+C                the explicit coordinate values.
+C
+C
+C
+C
+C
+C     PSEC4      - Array of data values to be packed in GRIB
+C                  code or which have been unpacked. Where a
+C                  bit-map is included in the GRIB message
+C                  this array contains missing data indicator
+C                  ( value supplied by the user in PSEC3(2)
+C                  or KSEC3(2) ) at the appropriate places.
+C
+C                  Although declared as real in GRIBEX this
+C                  can be an array of integer data. The value
+C                  in KSEC4(5) indicates whether data is in
+C                  integer or floating point format.
+C
+C              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C              !                                            !
+C              !   When CODING data, PSEC4 is OVERWRITTEN.  !
+C              !                                            !
+C              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+C
+C     Output parameters for coding function.
+C     Input Parameters for decoding functions.
+C     -----------------------------------------
+C
+C     KGRIB      - Array containing GRIB coded data.
+C
+C     KWORD      - Number of words of KGRIB occupied by
+C                  coded data. Output parameter for coding
+C                  function only. Not required as input
+C                  for decoding.
+C
+C     Output Parameters for all functions.
+C     -----------------------------------
+C
+C     KSEC0      - Word 1 contains number of octets in
+C                  GRIB message (not including padding to
+C                  a word boundary or rounding to a multiple
+C                  of 120 octets).
+C                - Word 2 contains GRIB edition number.
+C
+C     KRET       - Return code.
+C
+C                  Informative codes for decoding functions.
+C
+C                  -2  , Bit-map encountered with all bits
+C                        set to 1. Array PSEC4 contains all
+C                        real data values.
+C                  -3  , Predetermined bit-map encountered.
+C                        Data has not been fully decoded ie
+C                        array PSEC4 contains only real data
+C                        values. The user must use this data
+C                        in conjunction with the defined
+C                        bit-map.
+C                  -4  , Bit-map encountered. The data has
+C                        been fully decoded ie array PSEC4
+C                        contains real values and missing
+C                        data indicators where appropriate.
+C                  -5  , Bit-map encountered. The data has
+C                        not been decoded. This return code
+C                        is set only by the 'Z' function.
+C                  -6  , ECMWF pseudo-grib data encountered.
+C
+C                  Error codes.
+C
+C                  0   , No error encountered.
+C                  201 , Invalid function requested.
+C                  202 , Number of bits per data value exceeds
+C                        word length.
+C                  203 , Missing data indicated and data field
+C                        contains non-zero values.
+C                  204 , Number of bits for coding value is zero
+C                        or negative.
+C                  301 , Error in inserting/extracting
+C                        letters GRIB.
+C                  302 , Error extracting length of GRIB
+C                        message.
+C                  303 , Error inserting/extracting GRIB
+C                        Edition Number.
+C                  304 , Error extracting octets 22 and 23
+C                        Experimental Edition check.
+C                  305 , Input data is not GRIB or pseudo-
+C                        grib.
+C                  401 , Error inserting/extracting length of
+C                        Section 1.
+C                  402 , Error inserting/extracting Parameter
+C                        Version Number.
+C                  403 , Error inserting/extracting six fields
+C                        from Identification of Centre to
+C                        Indicator of type of level.
+C                  404 , Error inserting/extracting Height,
+C                        pressure, etc of levels.
+C                  405 , Error inserting/extracting six fields
+C                        from Year of century to Indicator
+C                        of unit of time range.
+C                  406 , Error inserting/extracting Period of
+C                        time.
+C                  407 , Error inserting/extracting time range
+C                        indicator.
+C                  408 , Error inserting/extracting number
+C                        averaged.
+C                  409 , Error inserting/extracting number
+C                        missing from averages etc.
+C                  410 , Error inserting/extracting century of
+C                        data or reserved field.
+C                  411 , Error inserting/extracting units
+C                        decimal scale factor.
+C                  412 , Error inserting/extracting ECMWF
+C                        local data.
+C                  413 , Grib Edition not catered for.
+C                  414 , Error inserting/extracting sub-centre.
+C                  499 , Error found when checking values for
+C                        Section 1 against valid GRIB values.
+C
+C                  501 , Error inserting/extracting length of
+C                        Section 2.
+C                  502 , Error inserting/extracting number of
+C                        Vertical coordinate parameters.
+C                  503 , Error inserting/extracting location
+C                        of List of vertical coordinate
+C                        parameters or List of numbers of
+C                        points.
+C                  504 , Error inserting/extracting data
+C                        representation type.
+C                  505 , Error inserting/extracting number of
+C                        points along a parallel or meridian.
+C                  506 , Error inserting/extracting latitude
+C                        or longitude of first grid point.
+C                  507 , Error inserting/extracting components
+C                        flag.
+C                  508 , Error inserting/extracting latitude
+C                        or longitude of last grid point.
+C                  509 , Error inserting/extracting i
+C                        direction increment.
+C                  510 , Error inserting/extracting number of
+C                        parallels between pole and Equator.
+C                  511 , Error inserting/extracting scanning
+C                        mode flags.
+C                  513 , Error inserting/extracting j
+C                        direction increment.
+C                  514 , Error inserting/extracting J,K,M
+C                        pentagonal resolution parameters.
+C                  515 , Error inserting/extracting
+C                        representation type or mode.
+C                  517 , Error inserting/extracting latitude
+C                        or longitude of southern pole.
+C                  518 , Error inserting/extracting angle
+C                        of rotation.
+C                  519 , Error inserting/extracting latitude
+C                        or of pole of stretching.
+C                  520 , Error inserting/extracting
+C                        stretching factor.
+C                  521 , Error inserting/extracting
+C                        vertical coordinate parameters.
+C                  522 , Error inserting/extracting list of
+C                        numbers of points.
+C                  523 , Error inserting/extracting number of
+C                        points along X or Y axis.
+C                  524 , Error inserting/extracting X or Y
+C                        axis grid lengths.
+C                  525 , Error inserting/extracting Projection
+C                        centre flag.
+C                  526 ,  Error inserting/extracting latitude
+C                        or  longitude of sub-satellite point.
+C                  527 , Error inserting/extracting diameter
+C                        of the earth in x or y direction.
+C                  528 , Error inserting/extracting X or Y
+C                        coordinate of sub-satellite point.
+C                  529 , Error inserting/extracting orientatio
+C                        of the grid or camera angle.
+C                  530 , Error inserting/extracting X or Y
+C                        coordinates of origin of sector.
+C                  598 , Representation type not catered for.
+C                  599 , Error found when checking values for
+C                        Section 2 against valid GRIB values.
+C                  601 , Error inserting/extracting length of
+C                        Section 3.
+C                  602 , Error inserting/extracting number of
+C                        unused bits at end of section 3.
+C                  603 , Error inserting/extracting bit-map
+C                        reference table.
+C                  604 , Error inserting/extracting primary
+C                        Bit-map.
+C                  605 , Cannot convert Quasi-regular
+C                        Gaussian grid with a bit-map.
+C                  699 , Error found when checking values for
+C                        Section 3 against valid GRIB values.
+C                  701 , Error inserting/extracting length of
+C                        Section 4.
+C                  703 , Second-order packing implies
+C                        additional flags.
+C                  704 , Functions 'A','B','G' invalid with
+C                        second-order packing.
+C                  705 , Only simple packing catered for.
+C                  706 , Error in extracting section 4 flag
+C                        field.
+C                  707 , Error inserting/extracting scale
+C                        factor.
+C                  708 , Error inserting/extracting reference
+C                        value.
+C                  709 , Error inserting/extracting number of
+C                        bits per data value.
+C                  710 , Output array too small.
+C                  711 , Error inserting/extracting real
+C                        coefficient.
+C                  712 , Error inserting/extracting data
+C                        values.
+C                  713 , Error inserting/extracting flag
+C                        and unused bit field.
+C                  714 , Function is 'X' and number of
+C                        values is illegal.
+C                  715 , Function is 'X' and scanning mode is
+C                        not North to South and West to East.
+C                  716 , Function is 'X' and field is not
+C                        Gaussian or Latitude/longitude grid.
+C                  717 , Function is 'X' and a bit-map is
+C                        included.
+C                  720 , Error inserting/extracting octet
+C                        number at which packed data begins.
+C                  721 , Error inserting/extracting extended
+C                        extended flag field.
+C                  722 , Error inserting/extracting first or
+C                        second dimension of matrix.
+C                  723 , Error inserting/extracting six fields
+C                        from first dimension coordinate value
+C                        onwards.
+C                  724 , Error inserting/ectracting first or
+C                        second dimension coefficients.
+C                  725 , Error inserting secondary bit-maps.
+C                  726 , Explicitly constant field not
+C                        supported without a section 2.
+C                  727 , Explicitly constant field not
+C                        supported for spectral field.
+C                  728 , Functions 'G' or 'B' not supported
+C                        for an explicitly constant field.
+C                  798 , Function is 'X' and no section 2 is
+C                        included.
+C                  799 , Error found when checking values for
+C                        Section 4 against valid GRIB values.
+C                  801 , Error inserting/extracting 7777 group
+C                  802 , Error inserting/extracting length of
+C                        GRIB message.
+C                  805 , End of message 7777 group not found.
+C                  806 , Error in extracting primary or
+C                        secondary bit maps.
+C                  808 , Error converting quasi-regular
+C                        gaussian grid to regular.
+C                  810 , Error inserting dummy zero.
+C
+C
+C     Method.
+C     -------
+C
+C     Input data packed in GRIB code in accordance with
+C     parameters given or set by user or fully or partially
+C     unpacked, depending on function used.
+C
+C     Externals.
+C     ----------
+C
+C     ABORTX
+C     C2ORDR
+C     CONFP3
+C     CSECT4
+C     CSGNBT
+C     D2ORDR
+C     DECFP2
+C     DSECT4
+C     DSGNBT
+C     ECLOC1
+C     EXSCAL
+C     EXTMAP
+C     GBITMAP
+C     GRCHK1
+C     GRCHK2
+C     GRCHK3
+C     GRCHK4
+C     GRPRS0
+C     GRPRS1
+C     GRPRS2
+C     GRPRS3
+C     GRPRS4
+C     INSCAL
+C     INSMP1
+C     INSMP2
+C     INXBIT
+C     MAXMIN
+C     MAXMN2
+C     QU2REG2
+C     RORINT
+C     SETPAR
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB definition.
+C     WMO Publication No. 9, Volume B, for grid catalogue numbers.
+C
+C     Comments.
+C     ---------
+C
+C     All machine dependent code is in 3 low level routines.
+C     Versions of these exist for the VAX, CYBER, IBM
+C     and SUN workstation, as well as the CRAY.
+C     INXBIT - contains calls to the routines GBYTE(S)
+C              and SBYTE(S) or their equivalents.
+C     SETPAR - to set number of bits in the computer word
+C              and largest negative number.
+C     ABORTX - to terminate execution of the job.
+C
+C     This routine codes/decodes:
+C      -  regular and quasi-regular latitude/longitude grids,
+C      -  regular and quasi-regular gaussian grids,
+C      -  spherical harmonics,
+C      -  space view perspective or orthographic fields,
+C      -  polar stereographic data,
+C      -  lambert conformal grids.
+C     Grids may be rotated, stretched, or rotated and stretched.
+C     They may have primary and secondary bit-maps.
+C     Only simple packing of integer data is allowed, but
+C     real data may use simple or complex packing.
+C     Matrices of values at grid points are supported and the
+C     additional flag field is allowed.
+C
+C     Apart from the values which can be passed to  this
+C     routine, other values are held in a common area and
+C     are used by default, unless changed by calls to the
+C     appropriate routines before calling GRIBEX. The
+C     following defaults are used. They have been selected
+C     to facilitate the most frequent usage at ECMWF and
+C     to ease the transition to the next version of the
+C     GRIB code.
+C
+C     1) By default debug printout is switched off.
+C        CALL GRSDBG (I) where
+C                    I = Non-zero to switch on debug printout.
+C                        0, to switch off debug printout.
+C
+C     2) By default the reference value used is the minimum
+C        of the data values supplied.
+C        CALL GRSREF (ZREF) to change the value, where ZREF
+C        is real and the required value.
+C
+C     3) By default GRIB messages are rounded to a
+C        multiple of 120 octets.
+C        CALL GRSRND (I) where
+C                    I = 0, to switch off rounding.
+C                        Non-zero to switch on rounding.
+C
+C     4) By default, the values given  are checked for
+C        consistency with GRIB code values as currently
+C        defined, when coding data. Data values are never
+C        checked.
+C        CALL GRSVCK (I) where
+C                    I = 0, to switch off checking.
+C                        Non-zero to switch on checking.
+C
+C
+C     5) By default P factor calculation switch is switched
+C        off, i.e. the user supplies the P factor for complex
+C        packing.
+C        CALL GRSMKP (I) where
+C                     I = 0 , user supplies the P factor
+C                       = Non-zero , GRIBEX calculates the P
+C                         factor.
+C
+C
+C     Ancillary print routines are available for the
+C     various sections of the GRIB code.
+C
+C     CALL GRPRS0 (KSEC0) To print section 0.
+C
+C     CALL GRPRS1 (KSEC0,KSEC1) To print section 1.
+C
+C     CALL GRPRS2 (KSEC0,KSEC2,PSEC2) To print section 2.
+C
+C     CALL GRPRS3 (KSEC0,KSEC3,PSEC3) To print section 3.
+C
+C     CALL GRPRS4 (KSEC0,KSEC4,PSEC4) To print section 4.
+C
+C     Routine contains Sections 0 to 9.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      25.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      09.07.91
+C     Functions 'R' and 'L' added.
+C     Release 1 of software.
+C
+C     J. Hennessy      ECMWF      14.08.91
+C     Functions 'S' and 'X' added.
+C
+C     J. Hennessy      ECMWF      23.08.91
+C     Bit-map handling added.
+C
+C     J. Hennessy      ECMWF      04.09.91
+C     Polar stereographic representation added.
+C     Flag bit handling modified. Various bugs fixed.
+C
+C     J. Hennessy      ECMWF      11.09.91
+C     Function 'M' added.
+C
+C     J. Hennessy      ECMWF      24.09.91
+C     Space view perspective representation added.
+C
+C     J. Hennessy      ECMWF      01.10.91
+C     Integer data handling added. Length of GRIB message
+C     for Experimental Edition and Edition 0 included
+C     when function 'I' is used.
+C
+C     J. Hennessy      ECMWF      25.10.91
+C     When decoding data with bit-maps, include the number of
+C     missing data values in the number of values decoded.
+C     Release 2 of software.
+C
+C     J. Hennessy      ECMWF      30.10.91
+C     Check for ECMWF pseudo-grib data made specific for
+C     parameter numbers 127 and 128.
+C     Bug in 'X' function fixed.
+C
+C     J. Hennessy      ECMWF      22.11.91
+C     A number of machine dependent features removed.
+C     Bug fixed in Polar Stereographic representation.
+C     Release 3 of software.
+C
+C     J. Hennessy      ECMWF      23.01.92
+C     Handling of missing fields modified.
+C     Print of sections 2 and 3 suppressed, if not used.
+C
+C     J. Hennessy      ECMWF      21.07.92
+C     Consistency checks moved from end to start of sections.
+C     Secondary bit-maps and matrix of values at each grid
+C     point  and additional flag field added.
+C     X and Y coordinates of origin of sector image added
+C     to space view perspective representation.
+C     Release 4 of software.
+C
+C     J. Hennessy      ECMWF      24.09.92
+C     Bugfix. KSEC4(3) set to 0 before checking type of data.
+C
+C     J. Hennessy      ECMWF      12.10.92
+C     Check for 'GRIB` added when decoding data.
+C     Return correct error code, if 7777 group not found and
+C     GRIB message contains bit-maps.
+C
+C     J. Hennessy      ECMWF      06.11.92
+C     ECMWF use of part of Section 1 reserved for local use.
+C     Release 5 of software.
+C
+C     J. Hennessy      ECMWF      25.02.93
+C     Check on valid Grib Edition number added.
+C
+C     J. Hennessy      ECMWF      19.05.93
+C     ECMWF local uses 3 and 4 added.
+C     Function 'G' added.
+C     Release 6 of software. (NEXT VERSION on Cray and IBM only)
+C
+C     J.D.Chambers     ECMWF      18.10.93
+C     ECMWF local use 5. (Forecast probabilities).
+C
+C     J.D.Chambers     ECMWF      09.03.94
+C     Add check that given number of bits for packing is positive
+C
+C     J.D.Chambers     ECMWF      15.04.94
+C     Add options 'A' and 'B' for handling 8-bit data.
+C
+C     J.D.Chambers     ECMWF      09.04.04
+C     Add complex packing for spherical harmonics.
+C
+C     J.D.Chambers     ECMWF      21.06.94
+C     Set encode/decode flag allowing for possible use of 'L' option
+C
+C     J.D.Chambers     ECMWF      07.07.94
+C     Put zeroes in all reserved fields (don't assume arrays have
+C     been zeroed).
+C     Use csgnbt and dsgnbt to code/decode sign bits.
+C
+C     J.D.Chambers     ECMWF      13.07.94
+C     Replace call to QU2REG by call to QU2REG2 to allow linear
+C     interpolation of fields with missing data values.
+C
+C     J.D.Chambers     ECMWF      06.09.94
+C     Add user option to supply the P factor for complex packing
+C     This is switched on/off by a user call to GRSMKP.
+C
+C     J.D.Chambers     ECMWF      11.11.94
+C     Fix type of ZS for NOS/VE and assign of LENCODE/LDECODE
+C     for 'L' option
+C
+C     J.D.Chambers     ECMWF      21.11.94
+C     Use JNINT on VAX
+C
+C     J.D.Chambers     ECMWF      19.01.95
+C     Allow for section 1 local use definition 8 (ERA)
+C
+C     J.D.Chambers     ECMWF      21.02.95
+C     Allow for quasi-regular lat/long grids (c.f.Washington SSTs)
+C
+C     J.D.Chambers     ECMWF      22.02.95
+C     Changes for sensitivity forecast.
+C
+C     J.D.Chambers     ECMWF      23.05.95
+C     Add check that output array is big enough for filling with
+C     missing data values.
+C     Add return warning (-7) when all data values are missing.
+C
+C     J.D.Chambers     ECMWF      29.06.95
+C     Allow for global product with wraparound, eg last longitude
+C     repeats first in composite Washington SSTs.
+C
+C     J.D.Chambers     ECMWF      29.06.95
+C     Allow Lambert conformal.
+C
+C     J.D.Chambers     ECMWF      30.06.95
+C     Remove return warning (-7) when all data values are missing.
+C
+C     J.D.Chambers     ECMWF      13.09.95
+C     Fail decoding if number of bits per packed value = number
+C     of bits per computer word (error 205).
+C
+C     J.D.Chambers     ECMWF      09.10.95
+C     Add decoding of Washington ensemble products local usage.
+C
+C     J.D.Chambers     ECMWF      11.01.96
+C     Use section 1 octet 26 for designated sub-centres:
+C       =  98 for EPS products from Washington with
+C         ECMWF extensions.
+C       = 240 for ECMWF seasonal forecast centre.
+C       = 241 for Meteo France.
+C       = 242 for EDF.
+C       = 243 for UKMO.
+C       = 0   otherwise.
+C
+C     J.D.Chambers     ECMWF      09.02.96
+C     Add 'J' decoding option.
+C
+C     J.D.Chambers     ECMWF      24.10.96
+C     Add handling of predetermined bitmap
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Add coding and decoding of second-order packed grid-point data.
+C     Function 'K' added.
+C     Enables decoding of explicitly constant fields (0-bit number)
+C     for grid-point fields encoded with a section 2.
+C     Update table 3 for level/layer management.
+C     KSEC1(22) enforced only when coding ECMWF data.
+C     For 'R' option, secure when no primary bit-map,
+C     and take into account periodicity (or not) of input grid.
+C     Default setting of global variables through GRSDEF routine.
+C     For masked fields, effective number of points returned
+C     in KSEC3(2).
+C
+C     J. Clochard, Meteo France, for ECMWF - September 1998.
+C     Enable decoding of complex packing spectral data in GRIB edition 0
+C     and/or without section 2.
+C     KSEC0 added in DSECT4 calling syntax.
diff --git a/gribex/gribin.F b/gribex/gribin.F
new file mode 100755
index 0000000..005aa85
--- /dev/null
+++ b/gribex/gribin.F
@@ -0,0 +1,49 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+	subroutine gribin(kunit,karray,kinlen,koutlen,keof,kret)
+C---->
+C
+C	This subroutine mimics the behaviour of the original GRIBIN 
+C	but makes a call to PBGRIB to retrieve GRIB products.  Because 
+C	MAGICS calls GRIBIN with an invalid buffer size, this mimic 
+C	version has to call PBGRIB with a phoney buffer size - dumlen,
+C	currently 1000000.  In effect this subverts the check that the 
+C	buffer is big enough for the retrieved product!!!
+C
+C----<
+	integer icalls
+	integer dumlen
+	save icalls, dumlen
+	data icalls/0/
+	data dumlen/1000000/
+C
+C First time through, print a warning message
+	if (icalls .eq. 0) then
+	  icalls = icalls + 1
+	  write(*,*) ' *********************************************'
+	  write(*,*) ' *********************************************'
+	  write(*,*) ' You are using an obsolete subroutine (GRIBIN)'
+	  write(*,*) ' for retrieving GRIB products.'
+	  write(*,*) ' There is NO check your buffer is big enough.'
+	  write(*,*) ' Please change to using PBGRIB.'
+	  write(*,*) ' *********************************************'
+	  write(*,*) ' *********************************************'
+	endif
+C
+C Note the use of dumlen (not kinlen) in the following call ...
+	call pbgrib(kunit,karray,DUMLEN,koutlen,kret)
+	if ( kret .eq. -3) then
+	  write(*,*) ' Buffer not big enough for GRIB product'
+	  kret = -5
+	endif
+C
+	return
+	end
diff --git a/gribex/gribnum.F b/gribex/gribnum.F
new file mode 100755
index 0000000..26305af
--- /dev/null
+++ b/gribex/gribnum.F
@@ -0,0 +1,124 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GRIBNUM(KONOFF)
+C
+C---->
+C**** GRIBNUM
+C
+C     Purpose
+C     -------
+C
+C     Returns current GRIB_CYCLE version number.
+C
+C
+C     Interface
+C     ---------
+C
+C     INUM = GRIBNUM(KONOFF)
+C
+C     Input
+C     -----
+C
+C     KONOFF - switch for displayed message
+C              = 0 if display is required on the first call
+C              = non-zero if display is not required
+C
+C
+C     Output
+C     ------
+C
+C     Returns a 6-digit version number, aaabbc, where:
+C       aaa = 3-digit major number
+C       bb  = 2-digit minor number
+C       c   = 1-digit spare number (normally 0)
+C     
+C
+C     Method
+C     ------
+C
+C     Reads a 6-digit version number from the environment variable
+C     GRIB_CYCLE. If this does not give a 6-digit number, an internal
+C     hard-coded default value is used.
+C
+C     On the first call, the function (optionally) displays a message:
+C
+C       **************************************
+C       * GRIB_CYCLE version number = aaabbc *
+C       **************************************
+C     
+C
+C     Externals
+C     ---------
+C
+C     None.
+C     
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1998
+C
+C
+C----<
+C ------------------------------------------------------------------
+C*    Section 0.   Variables.
+C ------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KONOFF
+C
+C     Local variables
+C
+      INTEGER INUMBER, ICOUNT, IOFFSET
+      SAVE INUMBER, ICOUNT
+      CHARACTER*38 CMESS
+      CHARACTER*20 YNUMBER
+C
+      DATA INUMBER/000010/, ICOUNT/0/
+      DATA CMESS/'* GRIB_CYCLE version number = ****** *'/
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( ICOUNT.EQ.0 ) THEN
+C
+C       See if the environment variable has an override value
+C
+        CALL GETENV( 'GRIB_CYCLE', YNUMBER)
+        IOFFSET = INDEX( YNUMBER, ' ')
+        IF( IOFFSET.EQ.7 ) THEN
+          READ(YNUMBER,'(I6.6)') INUMBER
+        ENDIF
+C
+C       First time through, display the message if required
+C
+        IF( KONOFF.EQ.0 ) THEN
+          WRITE(CMESS(31:36),'(I6.6)') INUMBER
+          WRITE(GRPRSM,*) '**************************************'
+          WRITE(GRPRSM,*) CMESS
+          WRITE(GRPRSM,*) '**************************************'
+        ENDIF
+        ICOUNT = 1
+      ENDIF
+C
+      GRIBNUM = INUMBER
+C
+      RETURN
+      END
diff --git a/gribex/groutpt.F b/gribex/groutpt.F
new file mode 100755
index 0000000..6c33271
--- /dev/null
+++ b/gribex/groutpt.F
@@ -0,0 +1,112 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GROUTPT()
+C
+C---->
+C**** GROUTPT
+C
+C     Purpose.
+C     --------
+C     Changes diagnostic output stream if defined by environment variable.
+C
+C**   Interface.
+C     ----------
+C     CALL GROUTPT()
+C
+C
+C     Input Parameters.
+C     -----------------
+C     None.
+C
+C
+C     Output Parameters.
+C     ------------------
+C     None.
+C
+C
+C     Method.
+C     -------
+C     Checks environment variable GRPRS_STREAM for output stream number
+C     for printing (default is 6)
+C
+C
+C     Externals.
+C     ----------
+C     Common block GRPRSCM.
+C
+C
+C     Reference.
+C     ----------
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers   ECMWF    June 2002
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C
+C     Local variables
+C
+      INTEGER IOFFSET
+      CHARACTER*10 YNUMBER
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 .
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     See if output stream needs changing
+C
+      CALL GETENV('GRPRS_STREAM', YNUMBER)
+      IOFFSET = INDEX( YNUMBER, ' ')
+      IF( IOFFSET.GT.1 ) THEN
+        IF( IOFFSET.EQ.2 ) THEN
+          READ(YNUMBER,'(I1.1)') GRPRSM
+        ELSE IF( IOFFSET.EQ.3 ) THEN
+          READ(YNUMBER,'(I2.2)') GRPRSM
+        ELSE
+          WRITE(GRPRSM,*)
+     X    'GROUTPT: Invalid value for GRPRS_STREAM: ' // YNUMBER
+          GRPRSM = 6
+        ENDIF
+      ELSE
+        GRPRSM = 6
+      ENDIF
+C
+      IF( GRPRSM.LT.1 ) THEN
+        WRITE(*,*) 'GROUTPT: Invalid number for GRPRS_STREAM: ', GRPRSM
+        GRPRSM = 6
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/grpr190.c b/gribex/grpr190.c
new file mode 100755
index 0000000..b6164cd
--- /dev/null
+++ b/gribex/grpr190.c
@@ -0,0 +1,76 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+
+#include "fortint.h"
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define GRPRS1B grprs1b
+#else
+#define GRPRS1B grprs1b_
+#endif
+
+void GRPRS1B(fortint*);
+fortint dldefs_(fortint*,fortint*,fortint*,fortint*,fortint*);
+fortint d_def_x(fortint*,fortint*,unsigned char*);
+
+void grpr190(fortint* ksec1) {
+/*
+// Decodes the local definition bytes for the multiple local definitions
+// in definition 190 and displays them via calls to Fortran routine GRPRS1B.
+*/
+unsigned char* bytes;
+fortint numberOfDefinitions = ksec1[43];
+unsigned char* startByte = (unsigned char*) &ksec1[44+2*ksec1[43]];
+fortint numberOfBytes = ksec1[45];
+fortint offset = 36*sizeof(fortint);
+fortint definitionNumber = ksec1[44];
+fortint loop, status, numberOfUnpackedIntegers, numberOfPackedBytes;
+static int first = 1;
+fortint* pBytes;
+
+  if( first ) {
+    setbuf(stdout,NULL);
+    first = 0;
+  }
+
+  for( loop = 0; loop < numberOfDefinitions; loop++ ) {
+    bytes = (unsigned char*) malloc(numberOfBytes*sizeof(fortint)+offset);
+/*
+//  Decode the bytes into INTEGERS
+*/
+/*
+//  Code for libemos version 000264 ..
+//
+//  status = dldefs(&definitionNumber,startByte,(bytes+offset),
+//                  &numberOfUnpackedIntegers,&numberOfPackedBytes);
+*/
+    pBytes = (fortint*) (bytes+offset);
+    status = d_def_x(&definitionNumber,pBytes,startByte);
+/*
+//  Display the values.
+*/
+    printf("\n ECMWF local definition number = %d\n",definitionNumber);
+    GRPRS1B((fortint*)bytes);
+
+    free(bytes);
+    startByte += numberOfBytes;
+    numberOfBytes = ksec1[47+loop*2];
+    definitionNumber = ksec1[46+loop*2];
+  }
+
+  return;
+}
+
+void grpr190_(fortint* ksec1) { grpr190(ksec1); return; }
diff --git a/gribex/grprs.h b/gribex/grprs.h
new file mode 100755
index 0000000..dc4e010
--- /dev/null
+++ b/gribex/grprs.h
@@ -0,0 +1,16 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Common blocks holding default or user supplied values for printing.
+C
+      LOGICAL GRPRSET
+      INTEGER GRPRSM
+C
+      COMMON /GRPRSCM/ GRPRSM, GRPRSET
diff --git a/gribex/grprs0.F b/gribex/grprs0.F
new file mode 100755
index 0000000..b0d2226
--- /dev/null
+++ b/gribex/grprs0.F
@@ -0,0 +1,114 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS0(KSEC0)
+C
+C---->
+C**** GRPRS0 - Print information from Section 0 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Indicator
+C     Section (Section 0) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS0(KSEC0)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC0 - Array of decoded parameters from Section 0.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C     Method.
+C     -------
+C
+C     Fields are printed as integers.
+C
+C     Externals.
+C     ----------
+C
+C     Common block GRPRSCM.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     Checks environment variable GRPRS_STREAM for output stream number
+C     for printing (default is 6)
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy    ECMWF 18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy    ECMWF 30.08.91
+C     Changes to some comments only.
+C
+C     J.D.Chambers   ECMWF    June 2002
+C     Add option to set output stream number using environment variable
+C     GRPRS_STREAM
+C
+C     -----------------------------------------------------------------|
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER KSEC0(*)
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print required information.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WRITE(GRPRSM,9000)
+      WRITE(GRPRSM,9001)
+      WRITE(GRPRSM,9002)
+      WRITE(GRPRSM,9003) KSEC0(1)
+      WRITE(GRPRSM,9004) KSEC0(2)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+ 9000 FORMAT(1H )
+ 9001 FORMAT(1H ,'Section 0 - Indicator Section.       ')
+ 9002 FORMAT(1H ,'-------------------------------------')
+ 9003 FORMAT(1H ,'Length of GRIB message (octets).     ',I9)
+ 9004 FORMAT(1H ,'GRIB Edition Number.                 ',I9)
+C
+      RETURN
+C
+      END
diff --git a/gribex/grprs1.F b/gribex/grprs1.F
new file mode 100755
index 0000000..ecec22f
--- /dev/null
+++ b/gribex/grprs1.F
@@ -0,0 +1,1466 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS1(KSEC0,KSEC1)
+C
+C---->
+C**** GRPRS1
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Product Definition
+C     Section (Section 1) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS1(KSEC0,KSEC1)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC0 - Array of decoded parameters from Section 0.
+C     KSEC1 - Array of decoded parameters from Section 1.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     Flag fields are printed in binary representation.
+C     Other fields as integers.
+C     Fields printed depend on GRIB Edition.
+C
+C
+C     Externals.
+C     ----------
+C
+C     PRTBIN  - Print binary value in character format.
+C     KWPRS1  - Print Washington ensemble products.
+C     CHKTAB2 - Looks up a parameter in a given ECMWF local table 2.
+C
+C     Common block GRPRSCM.
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     When decoding data from Experimental Edition or Edition 0,
+C     routine GRIBEX adds the additional fields available in
+C     Edition 1.
+C
+C     Checks environment variable GRPRS_STREAM for output stream number
+C     for printing (default is 6)
+C
+C
+C     Author.
+C     -------
+C     J. Hennessy    ECMWF 18.06.91
+C
+C
+C     Modifications.
+C     --------------
+C     J. Hennessy    ECMWF 30.08.91
+C     Different print for GRIB Editions up to Edition 1
+C     removed.
+C
+C     J. Hennessy    ECMWF 07.01.92
+C     Different print for GRIB Editions up to Edition 1
+C     added for centres other than ECMWF.
+C
+C     J. Hennessy    ECMWF 27.07.92
+C     Print added for satellite identifiers.
+C
+C     J. Hennessy    ECMWF 03.11.92
+C     Print of local ECMWF use  1 of section 1 added.
+C
+C     J. Hennessy    ECMWF 03.12.92
+C     Version number changed to character print.
+C
+C     J. Hennessy    ECMWF 20.05.93
+C     Print of local ECMWF use 2,3 and 4 of section 1 added.
+C
+C     J.D.Chambers   ECMWF 18.10.93
+C     Print of local ECMWF use 5 of section 1 added.
+C
+C     J.D.Chambers   ECMWF 10.05.94
+C     Fix print of version number
+C
+C     J.D.Chambers   ECMWF 02.06.94
+C     Fix print of total number of forecasts and forecast number
+C     for MARS labelling
+C
+C     J.D.Chambers   ECMWF 19.01.95
+C     Allow printing of ECMWF local use definition 8.
+C
+C     J.D.Chambers   ECMWF 14.02.95
+C     Modify printing of ECMWF local use definition 7.
+C
+C     J.D.Chambers   ECMWF 09.10.95
+C     Add handling of Washington ensemble products.
+C
+C     J.D.Chambers     ECMWF      27.02.96
+C     Allow for ECMWF local use definition 6.
+C
+C     J.D.Chambers     ECMWF      13.02.98
+C     Allow for ECMWF local use definition 10 (EPS tubes).
+C
+C     J.D.Chambers     ECMWF      16.02.98
+C     Allow for ECMWF local use definition 11 (Supplementary data
+C     used by analysis).
+C
+C     J.D.Chambers     ECMWF      April 1998
+C     Allow for ECMWF local use definition 13
+C
+C     J.D.Chambers     ECMWF      November 1998
+C     Allow for ECMWF local use definition 12
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Replace LOCAL2K call by CHKTAB2 call.
+C
+C     J.D.Chambers   ECMWF    June 2002
+C     Add option to set output stream number using environment variable
+C     GRPRS_STREAM
+C
+C     J.D.Chambers     ECMWF      October 2002
+C     Allow for ECMWF local use definition 19
+C
+C     J.D.Chambers     ECMWF      March 2003
+C     Allow for ECMWF local use definition 20
+C
+C     J.D.Chambers     ECMWF      March 2003
+C     Allow for ECMWF local use definition 21
+C
+C     J.D.Chambers     ECMWF      February 2004
+C     Allow for ECMWF local use definition 22 and 23
+C
+C     J.D.Chambers     ECMWF      September 2004
+C     Allow for ECMWF local use definition 24
+C
+C     J.D.Chambers     ECMWF      November 2004
+C     Allow for ECMWF local use definition 25
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+#include "grbcom.h"
+C
+C     Parameter(s)
+C
+      INTEGER JPBYTES
+#ifdef INTEGER_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+C
+C     Subroutine arguments
+C
+      INTEGER KSEC0(*)
+      INTEGER KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IPREV, ICURR, ICOUNT, IOFFSET, IOFF2, IOFF3
+      INTEGER IBIT, IERR, IOUT, IYEAR, NBYTES
+      INTEGER JLOOP, JILOOP
+      REAL VALUE
+C
+      CHARACTER*8 HVERSION
+      CHARACTER*121 HFIRST, HSECOND, HTHIRD, HFOURTH
+C
+C     Externals
+C
+      INTEGER CHKTAB2
+      EXTERNAL CHKTAB2
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print required information.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WRITE(GRPRSM,9000)
+      WRITE(GRPRSM,9001)
+      WRITE(GRPRSM,9002)
+C
+      WRITE(GRPRSM,9100) KSEC1(1)
+      WRITE(GRPRSM,9101) KSEC1(2)
+      WRITE(GRPRSM,9102) KSEC1(3)
+      WRITE(GRPRSM,9103) KSEC1(4)
+      IBIT = 8
+      CALL PRTBIN (KSEC1(5),IBIT,IOUT,IERR)
+      WRITE(GRPRSM,9104) IOUT
+      WRITE(GRPRSM,9105) KSEC1(6)
+      IERR = CHKTAB2(KSEC1,HFIRST,HSECOND,HTHIRD,HFOURTH)
+      IF( IERR .EQ. 0 ) THEN
+        IOFF2 = 121
+        DO JLOOP = 121, 1, -1
+          IF( HSECOND(JLOOP:JLOOP).NE.' ' ) THEN
+            IOFF2 = JLOOP
+            GOTO 110
+          ENDIF
+        ENDDO
+        GOTO 130
+ 110    CONTINUE
+        IOFF3 = 121
+        DO JLOOP = 121, 1, -1
+          IF( HTHIRD(JLOOP:JLOOP).NE.' ' ) THEN
+            IOFF3 = JLOOP
+            GOTO 120
+          ENDIF
+        ENDDO
+        GOTO 130
+ 120    CONTINUE
+        WRITE(GRPRSM,*)'('//HSECOND(1:IOFF2)//': '//HTHIRD(1:IOFF3)//')'
+C
+ 130    CONTINUE
+      ENDIF
+C
+      IF (KSEC1(6).NE.127) THEN
+        WRITE(GRPRSM,9106) KSEC1(7)
+        WRITE(GRPRSM,9107) KSEC1(8)
+        WRITE(GRPRSM,9108) KSEC1(9)
+      ELSE
+        WRITE(GRPRSM,9206) KSEC1(7)
+        WRITE(GRPRSM,9207) KSEC1(8)
+      ENDIF
+C
+      IYEAR = KSEC1(10)
+      IF( IYEAR.NE.255 ) THEN
+        IYEAR  = ((KSEC1(21)-1)*100 + KSEC1(10))
+        WRITE(GRPRSM,9109) KSEC1(10), IYEAR
+      ELSE
+        WRITE(GRPRSM,*) 'Year of reference time of data (=MISSING)  255'
+      ENDIF
+      WRITE(GRPRSM,9110) KSEC1(11)
+      WRITE(GRPRSM,9111) KSEC1(12)
+      WRITE(GRPRSM,9112) KSEC1(13)
+      WRITE(GRPRSM,9113) KSEC1(14)
+      WRITE(GRPRSM,9114) KSEC1(15)
+      WRITE(GRPRSM,9115) KSEC1(16)
+      WRITE(GRPRSM,9116) KSEC1(17)
+      WRITE(GRPRSM,9117) KSEC1(18)
+      WRITE(GRPRSM,9118) KSEC1(19)
+      WRITE(GRPRSM,9119) KSEC1(20)
+C
+C     All ECMWF data in GRIB Editions before Edition 1 is decoded
+C     as 20th century data. Other centres are decoded as missing.
+C
+      IF (KSEC0(2).LT.1.AND.KSEC1(2).NE.98) THEN
+        WRITE(GRPRSM,9122)
+      ELSE
+        WRITE(GRPRSM,9120) KSEC1(21)
+      ENDIF
+C
+C     Print sub-centre
+      WRITE(GRPRSM,9123) KSEC1(22)
+C
+C     Decimal scale factor
+      WRITE(GRPRSM,9121) KSEC1(23)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Print local ECMWF information.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Regular MARS labelling, or reformatted Washington EPS products.
+C
+      IF ((KSEC1(2).EQ.98.AND.KSEC1(24).EQ.1) .OR.
+     X    (KSEC1(22).EQ.98.AND.KSEC1(24).EQ.1) .OR.
+     X    (KSEC1(2).EQ. 7.AND.KSEC1(22).EQ.98)) THEN
+C
+C       Parameters common to all definitions.
+C
+        WRITE(GRPRSM,9301) KSEC1(37)
+        IF(KSEC1(37).EQ.1)
+     X    WRITE(GRPRSM,*) '(Mars labelling or ensemble forecast)'
+        IF(KSEC1(37).EQ.2)
+     X    WRITE(GRPRSM,*) '(Cluster means and standard deviations)'
+        IF(KSEC1(37).EQ.3)
+     X    WRITE(GRPRSM,*) '(Satellite image data)'
+        IF(KSEC1(37).EQ.4)
+     X    WRITE(GRPRSM,*) '(Ocean model data)'
+        IF(KSEC1(37).EQ.5)
+     X    WRITE(GRPRSM,*) '(Forecast probability data)'
+        IF(KSEC1(37).EQ.6)
+     X    WRITE(GRPRSM,*) '(Surface temperature data)'
+        IF(KSEC1(37).EQ.7)
+     X    WRITE(GRPRSM,*) '(Sensitivity data)'
+        IF(KSEC1(37).EQ.8)
+     X    WRITE(GRPRSM,*) '(ECMWF re-analysis data)'
+        IF(KSEC1(37).EQ.9)
+     X    WRITE(GRPRSM,*) '(Singular vectors / ensemble perturbations)'
+        IF(KSEC1(37).EQ.10)
+     X    WRITE(GRPRSM,*) '(EPS tubes)'
+        IF(KSEC1(37).EQ.11)
+     X    WRITE(GRPRSM,*) '(Supplementary data used by analysis)'
+        IF(KSEC1(37).EQ.13)
+     X    WRITE(GRPRSM,*) '(Wave 2D spectra direction and frequency)'
+        IF(KSEC1(37).EQ.14)
+     X    WRITE(GRPRSM,*) '(Brightness temperature)'
+        IF(KSEC1(37).EQ.15)
+     X    WRITE(GRPRSM,*) '(Ocean ensemble seasonal forecast)'
+        IF(KSEC1(37).EQ.16)
+     X    WRITE(GRPRSM,*) '(Seasonal fc monthly mean atmosphere data)'
+        IF(KSEC1(37).EQ.17)
+     X    WRITE(GRPRSM,*) '(Sst or sea-ice used by analysis)'
+        IF(KSEC1(37).EQ.18)
+     X    WRITE(GRPRSM,*) '(Multi-analysis ensemble data)'
+        IF(KSEC1(37).EQ.19)
+     X    WRITE(GRPRSM,*) '(Extreme forecast index data)'
+        IF(KSEC1(37).EQ.20)
+     X    WRITE(GRPRSM,*) '(4D variational increments)'
+        IF(KSEC1(37).EQ.21)
+     X    WRITE(GRPRSM,*) '(Sensitive area predictions)'
+        IF(KSEC1(37).EQ.23)
+     X    WRITE(GRPRSM,*)
+     X '(Coupled atmospheric, wave & ocean means (+ hindcast support))'
+        IF(KSEC1(37).EQ.24)
+     X    WRITE(GRPRSM,*) '(Satellite image simulation)'
+        IF(KSEC1(37).EQ.25)
+     X    WRITE(GRPRSM,*) '(4DVar model errors)'
+        IF(KSEC1(37).EQ.50)
+     X    WRITE(GRPRSM,*) '(Member State data)'
+        IF(KSEC1(37).EQ.190)
+     X    WRITE(GRPRSM,*) '(Multiple ECMWF local definitions)'
+        IF(KSEC1(37).EQ.191)
+     X    WRITE(GRPRSM,*) '(Free format data descriptor)'
+C
+        WRITE(GRPRSM,9302) KSEC1(38)
+        WRITE(GRPRSM,9303) KSEC1(39)
+        WRITE(GRPRSM,9304) KSEC1(40)
+        WRITE(HVERSION, '(A8)' ) KSEC1(41)
+        WRITE(GRPRSM,9305)
+     X    HVERSION(5:5),
+     X    HVERSION(6:6),
+     X    HVERSION(7:7),
+     X    HVERSION(8:8)
+C
+C       ECMWF Local definition 1.
+C       (MARS labelling or ensemble forecast data)
+C
+        IF (KSEC1(37).EQ.1) THEN
+          WRITE(GRPRSM,9310) KSEC1(42)
+          IF( KSEC1(40).NE.1090 ) WRITE(GRPRSM,9311) KSEC1(43)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 2.
+C       (Cluster means and standard deviations)
+C
+        IF (KSEC1(37).EQ.2) THEN
+          WRITE(GRPRSM,9312) KSEC1(42)
+          WRITE(GRPRSM,9313) KSEC1(43)
+          WRITE(GRPRSM,9314) KSEC1(44)
+          WRITE(GRPRSM,9315) KSEC1(45)
+          WRITE(GRPRSM,9316) KSEC1(46)
+          WRITE(GRPRSM,9317) KSEC1(47)
+          WRITE(GRPRSM,9318) KSEC1(48)
+          WRITE(GRPRSM,9319) KSEC1(49)
+          WRITE(GRPRSM,9320) KSEC1(50)
+          WRITE(GRPRSM,9321) KSEC1(51)
+          WRITE(GRPRSM,9324) KSEC1(52)
+          WRITE(GRPRSM,9322) KSEC1(53)
+          DO 210 JLOOP = 1,KSEC1(53)
+            WRITE(GRPRSM,9323) KSEC1(JLOOP+53)
+  210     CONTINUE
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 3.
+C       (Satellite image data)
+C
+        IF (KSEC1(37).EQ.3) THEN
+          WRITE(GRPRSM,9306) KSEC1(42)
+          WRITE(GRPRSM,9307) KSEC1(43)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 4.
+C       (Ocean model data)
+C
+        IF (KSEC1(37).EQ.4) THEN
+          WRITE(GRPRSM,9310) KSEC1(42)
+          IF( KSEC1(40).NE.1090 ) WRITE(GRPRSM,9311) KSEC1(43)
+          WRITE(GRPRSM,9401) KSEC1(44)
+          WRITE(GRPRSM,9402) KSEC1(45)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Coordinate structure definition.'
+          WRITE(GRPRSM,*) '--------------------------------'
+          WRITE(GRPRSM,9403) KSEC1(46)
+          WRITE(GRPRSM,9404) KSEC1(47)
+          WRITE(GRPRSM,9405) KSEC1(48)
+          WRITE(GRPRSM,9406) KSEC1(49)
+          WRITE(GRPRSM,9407) KSEC1(50)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Position definition.'
+          WRITE(GRPRSM,*) '--------------------'
+          WRITE(GRPRSM,9411) KSEC1(51)
+          WRITE(GRPRSM,9412) KSEC1(52)
+          WRITE(GRPRSM,9413) KSEC1(53)
+          WRITE(GRPRSM,9414) KSEC1(54)
+          WRITE(GRPRSM,9415) KSEC1(55)
+          WRITE(GRPRSM,9416) KSEC1(56)
+          WRITE(GRPRSM,9413) KSEC1(57)
+          WRITE(GRPRSM,9414) KSEC1(58)
+          WRITE(GRPRSM,9415) KSEC1(59)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Grid Definition.'
+          WRITE(GRPRSM,*) '----------------'
+          WRITE(GRPRSM,9421) KSEC1(60)
+          WRITE(GRPRSM,9422) KSEC1(61)
+          WRITE(GRPRSM,9423) KSEC1(62)
+          WRITE(GRPRSM,9424) KSEC1(63)
+          WRITE(GRPRSM,9425) KSEC1(64)
+          WRITE(GRPRSM,9426) KSEC1(65)
+          WRITE(GRPRSM,9427) KSEC1(66)
+          WRITE(GRPRSM,9428) KSEC1(67)
+          WRITE(GRPRSM,9429) KSEC1(68)
+          WRITE(GRPRSM,9430) KSEC1(69)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Further information.'
+          WRITE(GRPRSM,*) '--------------------'
+          WRITE(GRPRSM,9441) KSEC1(70)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Auxiliary information.'
+          WRITE(GRPRSM,*) '----------------------'
+          WRITE(GRPRSM,9451) KSEC1(71)
+          WRITE(GRPRSM,9452) KSEC1(72)
+          WRITE(GRPRSM,9453) KSEC1(73)
+          WRITE(GRPRSM,9454) KSEC1(74)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Horizontal coordinate supplement.'
+          WRITE(GRPRSM,*) '---------------------------------'
+          IF( KSEC1(71).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(71)
+            DO JLOOP = 1,KSEC1(71)
+              WRITE(GRPRSM,9461) KSEC1(74+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Mixed coordinate definition.'
+          WRITE(GRPRSM,*) '----------------------------'
+          IF( KSEC1(72).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(72)
+            IOFFSET = 74 + KSEC1(71)
+            DO JLOOP = 1,KSEC1(72)
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Grid coordinate list.'
+          WRITE(GRPRSM,*) '---------------------'
+          IF( KSEC1(73).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(73)
+            IOFFSET = 74 + KSEC1(71) + KSEC1(72)
+            DO JLOOP = 1,KSEC1(73)
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Auxiliary array.'
+          WRITE(GRPRSM,*) '----------------'
+          IF( KSEC1(74).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(74)
+            IOFFSET = 74 + KSEC1(71) + KSEC1(72) + KSEC1(73)
+            DO JLOOP = 1,KSEC1(74)
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Post-auxiliary array.'
+          WRITE(GRPRSM,*) '---------------------'
+          IOFFSET = 74 + KSEC1(71) + KSEC1(72) + KSEC1(73) + KSEC1(74)
+          IF( KSEC1(IOFFSET+1).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(IOFFSET+1)
+            DO JLOOP = 2, 4
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+            IF( KSEC1(IOFFSET+1).GT.4 ) THEN
+              WRITE(GRPRSM,9462) KSEC1(IOFFSET+5)
+              IF( KSEC1(IOFFSET+6).NE.0 ) THEN
+                WRITE(GRPRSM,9463) KSEC1(IOFFSET+6)
+                WRITE(GRPRSM,9464) KSEC1(IOFFSET+7)
+              ENDIF
+            ENDIF
+          ENDIF
+C
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 5.
+C       (Forecast probability data)
+C
+        IF (KSEC1(37).EQ.5) THEN
+          WRITE(GRPRSM,9500) KSEC1(42)
+          WRITE(GRPRSM,9501) KSEC1(43)
+          WRITE(GRPRSM,9502) KSEC1(44)
+          WRITE(GRPRSM,9503) KSEC1(45)
+          IF ( KSEC1(45) .NE. 2 ) WRITE(GRPRSM,9504) KSEC1(46)
+          IF ( KSEC1(45) .NE. 1 ) WRITE(GRPRSM,9505) KSEC1(47)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 6.
+C       (Surface temperature data)
+C
+        IF (KSEC1(37).EQ.6) THEN
+C
+          IYEAR = KSEC1(44)
+          IF( IYEAR.GT.100 ) THEN
+            IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+            WRITE(GRPRSM,9601) IYEAR
+          ELSE
+            WRITE(GRPRSM,*)
+     X        'Date of SST field used               Not given'
+          ENDIF
+          IF(KSEC1(45).EQ.0) WRITE(GRPRSM,9602) KSEC1(45)
+          IF(KSEC1(45).EQ.1) WRITE(GRPRSM,9603) KSEC1(45)
+          IF(KSEC1(45).EQ.2) WRITE(GRPRSM,9604) KSEC1(45)
+C
+          WRITE(GRPRSM,9605) KSEC1(46)
+C
+          DO 260 JLOOP = 1, KSEC1(46)
+            IYEAR = KSEC1(45+(JLOOP*2))
+            IF( IYEAR.GT.100 ) THEN
+              IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+              WRITE(GRPRSM,9606) JLOOP, IYEAR
+              WRITE(GRPRSM,9607) JLOOP, KSEC1(46+(JLOOP*2))
+            ELSE
+              WRITE(GRPRSM,*)
+     X          'Date of SST field used               Not given'
+            ENDIF
+C
+  260     CONTINUE
+C
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 7.
+C       (Sensitivity data)
+C
+        IF (KSEC1(37).EQ.7) THEN
+          IF ( KSEC1(39) .EQ. 51 ) WRITE(GRPRSM,9700) KSEC1(42)
+          IF ( KSEC1(39) .NE. 51 ) WRITE(GRPRSM,9701) KSEC1(42)
+          IF ( KSEC1(39) .NE. 52 ) WRITE(GRPRSM,9702) KSEC1(43)
+          IF ( KSEC1(39) .EQ. 52 ) WRITE(GRPRSM,9703) KSEC1(43)
+          WRITE(GRPRSM,9704) KSEC1(44) 
+          WRITE(GRPRSM,9705) KSEC1(45)
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 8.
+C       (ECMWF re-analysis data)
+C
+        IF (KSEC1(37).EQ.8) THEN
+          IF( (KSEC1(40).EQ.1043).OR.
+     X        (KSEC1(40).EQ.1070).OR.
+     X        (KSEC1(40).EQ.1071) ) THEN
+            WRITE(GRPRSM,9801) KSEC1(42)
+            DO JLOOP = 43, 54
+              JILOOP = JLOOP + 8
+              WRITE(GRPRSM,9800) JILOOP, KSEC1(JLOOP)
+            ENDDO
+          ELSE
+            DO JLOOP = 42, 54
+              JILOOP = JLOOP + 8
+              WRITE(GRPRSM,9800) JILOOP, KSEC1(JLOOP)
+            ENDDO
+          ENDIF
+          GOTO 900
+        ENDIF
+C
+        IF (KSEC1(39).GT.4.AND.KSEC1(39).LT.9) THEN
+          WRITE(GRPRSM,9308) KSEC1(42)
+          WRITE(GRPRSM,9309) KSEC1(43)
+        ENDIF
+C
+C
+C       ECMWF Local definition 9.
+C       (Singular vectors and ensemble perturbations)
+C
+        IF (KSEC1(37).EQ.9) THEN
+          IF(KSEC1(39).EQ.60)
+     X      WRITE(GRPRSM,9960) KSEC1(42)
+          IF(KSEC1(39).EQ.61)
+     X      WRITE(GRPRSM,9961) KSEC1(42)
+          IF(KSEC1(39).EQ.62)
+     X      WRITE(GRPRSM,9962) KSEC1(42)
+          IF(KSEC1(39).EQ.62) THEN
+            WRITE(GRPRSM,9943) KSEC1(43)
+            WRITE(GRPRSM,9944) KSEC1(44)
+            WRITE(GRPRSM,9945) KSEC1(45)
+            WRITE(GRPRSM,9946) KSEC1(46)
+            WRITE(GRPRSM,9947) KSEC1(47)
+            WRITE(GRPRSM,9948) KSEC1(48)
+            WRITE(GRPRSM,9949) KSEC1(49)
+            WRITE(GRPRSM,9950) KSEC1(50)
+            WRITE(GRPRSM,9951) KSEC1(51)
+            WRITE(GRPRSM,9952) KSEC1(52)
+            WRITE(GRPRSM,9953) KSEC1(53)
+            WRITE(GRPRSM,9954) KSEC1(54)
+            WRITE(GRPRSM,9955) KSEC1(55)
+          ENDIF
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 10.
+C       (EPS tubes)
+C
+        IF (KSEC1(37).EQ.10) THEN
+          WRITE(GRPRSM,1001) KSEC1(42)
+          WRITE(GRPRSM,1002) KSEC1(43)
+          WRITE(GRPRSM,1003) KSEC1(44)
+          WRITE(GRPRSM,1004) KSEC1(45)
+          WRITE(GRPRSM,1005) KSEC1(46)
+          WRITE(GRPRSM,1006) KSEC1(47)
+          WRITE(GRPRSM,1007) KSEC1(48)
+          WRITE(GRPRSM,1008) KSEC1(49)
+          WRITE(GRPRSM,1009) KSEC1(50)
+          WRITE(GRPRSM,1010) KSEC1(51)
+          WRITE(GRPRSM,1011) KSEC1(52)
+          WRITE(GRPRSM,1012) KSEC1(53)
+          WRITE(GRPRSM,1013) KSEC1(54)
+          WRITE(GRPRSM,1014) KSEC1(55)
+          WRITE(GRPRSM,1015) KSEC1(56)
+          WRITE(GRPRSM,1016) KSEC1(57)
+          WRITE(GRPRSM,1017) KSEC1(58)
+C
+          WRITE(GRPRSM,1018)
+          DO 280 JLOOP = 1, KSEC1(58)
+            WRITE(GRPRSM,1019) KSEC1(58+JLOOP)
+  280     CONTINUE
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 11.
+C       (Supplementary data used by the analysis)
+C
+        IF (KSEC1(37).EQ.11) THEN
+          WRITE(GRPRSM,1101)
+          WRITE(GRPRSM,1103) KSEC1(42)
+          WRITE(GRPRSM,1104) KSEC1(43)
+          WRITE(GRPRSM,1105) KSEC1(44)
+          WRITE(HVERSION, '(A8)' ) KSEC1(45)
+          WRITE(GRPRSM,1106)
+     X      HVERSION(5:5),
+     X      HVERSION(6:6),
+     X      HVERSION(7:7),
+     X      HVERSION(8:8)
+          IYEAR = KSEC1(46)
+          IF( IYEAR.GT.40 ) THEN
+            IYEAR = IYEAR + 1900
+          ELSE
+            IYEAR = IYEAR + 2000
+          ENDIF
+          WRITE(GRPRSM,1107) KSEC1(46), IYEAR
+          WRITE(GRPRSM,1108) KSEC1(47)
+          WRITE(GRPRSM,1109) KSEC1(48)
+          WRITE(GRPRSM,1110) KSEC1(49)
+          WRITE(GRPRSM,1111) KSEC1(50)
+          WRITE(GRPRSM,1112) KSEC1(51)
+          WRITE(GRPRSM,1113) KSEC1(52)
+          WRITE(GRPRSM,1114) KSEC1(53)
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 12.
+C
+        IF (KSEC1(37).EQ.12) THEN
+          WRITE(GRPRSM,1201)
+          WRITE(GRPRSM,1203) KSEC1(42)
+          WRITE(GRPRSM,1204) KSEC1(43)
+          WRITE(GRPRSM,1205) KSEC1(44)
+          WRITE(GRPRSM,1206) KSEC1(45)
+          WRITE(GRPRSM,1207) KSEC1(46)
+          WRITE(GRPRSM,1208) KSEC1(47)
+          WRITE(GRPRSM,1209) KSEC1(48)
+          WRITE(GRPRSM,1210) KSEC1(49)
+          WRITE(GRPRSM,1211)
+          IPREV  = KSEC1(50)
+          ICURR  = 0
+          ICOUNT = 0
+          DO JLOOP = 1, KSEC1(49)
+            ICURR = KSEC1(49+JLOOP)
+            IF( ICURR.NE.IPREV ) THEN
+              IF( ICOUNT.EQ.1 ) WRITE(GRPRSM,1212) IPREV
+              IF( ICOUNT.EQ.2 ) WRITE(GRPRSM,1213) IPREV
+              IF( ICOUNT.GT.2 ) WRITE(GRPRSM,1214) IPREV, ICOUNT
+              IPREV  = ICURR
+              ICOUNT = 1
+            ELSE
+              ICOUNT = ICOUNT + 1
+            ENDIF
+          ENDDO
+          IF( ICOUNT.EQ.1 ) WRITE(GRPRSM,1212) IPREV
+          IF( ICOUNT.EQ.2 ) WRITE(GRPRSM,1213) IPREV
+          IF( ICOUNT.GT.2 ) WRITE(GRPRSM,1214) IPREV, ICOUNT
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 13.
+C       (Wave 2D spectra direction and frequency)
+C
+        IF (KSEC1(37).EQ.13) THEN
+          WRITE(GRPRSM,1301) KSEC1(44)
+          WRITE(GRPRSM,1302) KSEC1(45)
+          WRITE(GRPRSM,1303) KSEC1(46)
+          WRITE(GRPRSM,1304) KSEC1(47)
+          WRITE(GRPRSM,1305) KSEC1(48)
+          WRITE(GRPRSM,1306) KSEC1(49)
+          WRITE(GRPRSM,1307)
+          DO 290 JLOOP = 1, KSEC1(46)
+            VALUE = REAL(KSEC1(49+JLOOP))/REAL(KSEC1(48))
+            IF( KSEC1(44).EQ.JLOOP ) THEN
+              WRITE(GRPRSM,1308) JLOOP, VALUE
+            ELSE
+              WRITE(GRPRSM,1309) JLOOP, VALUE
+            ENDIF
+  290     CONTINUE
+          WRITE(GRPRSM,1310)
+          DO 295 JLOOP = 1, KSEC1(47)
+            VALUE = REAL(KSEC1(49+KSEC1(46)+JLOOP))/REAL(KSEC1(49))
+            IF( KSEC1(45).EQ.JLOOP ) THEN
+              WRITE(GRPRSM,1308) JLOOP, VALUE
+            ELSE
+              WRITE(GRPRSM,1309) JLOOP, VALUE
+            ENDIF
+  295     CONTINUE
+C
+          IF( N13FLAG.GT.0 ) THEN
+            WRITE(GRPRSM,1311) KSEC1(50+KSEC1(46)+KSEC1(47))
+            WRITE(GRPRSM,1312) KSEC1(51+KSEC1(46)+KSEC1(47))
+            IF( N13FLAG.GT.1 ) THEN
+              WRITE(GRPRSM,1313) KSEC1(52+KSEC1(46)+KSEC1(47))
+              WRITE(GRPRSM,1314) KSEC1(53+KSEC1(46)+KSEC1(47))
+              WRITE(GRPRSM,1315) KSEC1(54+KSEC1(46)+KSEC1(47))
+              IF( N13FLAG.GT.2 ) THEN
+                WRITE(GRPRSM,1316) KSEC1(55+KSEC1(46)+KSEC1(47))
+                WRITE(GRPRSM,1317) KSEC1(56+KSEC1(46)+KSEC1(47))
+                WRITE(GRPRSM,1318) KSEC1(57+KSEC1(46)+KSEC1(47))
+                WRITE(GRPRSM,1319) KSEC1(58+KSEC1(46)+KSEC1(47))
+              ENDIF
+            ENDIF
+          ENDIF
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 14.
+C       (Brightness temperature)
+C
+        IF (KSEC1(37).EQ.14) THEN
+          WRITE(GRPRSM,1401) KSEC1(44)
+          WRITE(GRPRSM,1402) KSEC1(45)
+          WRITE(GRPRSM,1403) KSEC1(46)
+          WRITE(GRPRSM,1404)
+          DO 296 JLOOP = 1, KSEC1(46)
+            VALUE = REAL(KSEC1(46+JLOOP))/REAL(KSEC1(45))
+            IF( KSEC1(44).EQ.JLOOP ) THEN
+              WRITE(GRPRSM,1405) JLOOP, VALUE
+            ELSE
+              WRITE(GRPRSM,1406) JLOOP, VALUE
+            ENDIF
+  296     CONTINUE
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 15.
+C       (Ocean ensemble seasonal forecast)
+C
+        IF (KSEC1(37).EQ.15) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1504) KSEC1(43)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 16.
+C       (Seasonal forecast monthly mean atmosphere data)
+C
+        IF (KSEC1(37).EQ.16) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          WRITE(GRPRSM,1601) KSEC1(46)
+          WRITE(GRPRSM,1602) KSEC1(47)
+          WRITE(GRPRSM,1603) KSEC1(48)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 17.
+C       (Sst or sea-ice used by analysis)
+C
+        IF (KSEC1(37).EQ.17) THEN
+C
+          IYEAR = KSEC1(44)
+          IF( IYEAR.GT.100 ) THEN
+            IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+            WRITE(GRPRSM,1701) IYEAR
+          ELSE
+            WRITE(GRPRSM,*)
+     X        'Date of sst/ice field used           Not given'
+          ENDIF
+          IF(KSEC1(45).EQ.0) WRITE(GRPRSM,1702) KSEC1(45)
+          IF(KSEC1(45).EQ.1) WRITE(GRPRSM,1703) KSEC1(45)
+          IF(KSEC1(45).EQ.2) WRITE(GRPRSM,1704) KSEC1(45)
+C
+          WRITE(GRPRSM,1705) KSEC1(46)
+C
+          DO JLOOP = 1, KSEC1(46)
+            IYEAR = KSEC1(45+(JLOOP*2))
+            IF( IYEAR.GT.100 ) THEN
+              IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+              WRITE(GRPRSM,1706) JLOOP, IYEAR
+              WRITE(GRPRSM,1707) JLOOP, KSEC1(46+(JLOOP*2))
+            ELSE
+              WRITE(GRPRSM,*)
+     X          'Date of sst/ice field used           Not given'
+            ENDIF
+C
+          ENDDO
+          GOTO 900
+C
+        ENDIF
+C
+C       ECMWF Local definition 18.
+C       (Multi-analysis ensemble data)
+C
+        IF (KSEC1(37).EQ.18) THEN
+          WRITE(GRPRSM,1801) KSEC1(42)
+          WRITE(GRPRSM,1802) KSEC1(43)
+          WRITE(GRPRSM,1803) KSEC1(44)
+          WRITE(HVERSION, '(A8)' ) KSEC1(45)
+          WRITE(GRPRSM,1804)
+     X      HVERSION(5:5),
+     X      HVERSION(6:6),
+     X      HVERSION(7:7),
+     X      HVERSION(8:8)
+          WRITE(GRPRSM,1805) KSEC1(46)
+          WRITE(GRPRSM,*) '  WMO centre analyses used:'
+          WRITE(GRPRSM,*) '  ------------------------'
+          DO JLOOP = 1, KSEC1(46)
+            WRITE(HVERSION, '(A8)' ) KSEC1(46+JLOOP)
+            WRITE(GRPRSM,1806)
+     X      HVERSION(5:5),
+     X      HVERSION(6:6),
+     X      HVERSION(7:7),
+     X      HVERSION(8:8)
+          ENDDO
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 19.
+C       (Extreme forecast index)
+C
+        IF (KSEC1(37).EQ.19) THEN
+          WRITE(GRPRSM,1901) KSEC1(42)
+          WRITE(GRPRSM,1902) KSEC1(43)
+          WRITE(GRPRSM,1903) KSEC1(44)
+          WRITE(GRPRSM,1904) KSEC1(45)
+          WRITE(GRPRSM,1905) KSEC1(46)
+          WRITE(GRPRSM,1906) KSEC1(47)
+          WRITE(GRPRSM,1907) KSEC1(48)
+          WRITE(GRPRSM,1908) KSEC1(49)
+          WRITE(GRPRSM,1909) KSEC1(50)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 20.
+C       (4D variational increments)
+C
+        IF (KSEC1(37).EQ.20) THEN
+          WRITE(GRPRSM,2001) KSEC1(42)
+          WRITE(GRPRSM,2002) KSEC1(43)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 21.
+C       (Sensitive area predictions)
+C
+        IF (KSEC1(37).EQ.21) THEN
+          WRITE(GRPRSM,2101) KSEC1(42)
+          WRITE(GRPRSM,2102) KSEC1(43)
+          WRITE(GRPRSM,2103) KSEC1(44)
+          WRITE(GRPRSM,2104) KSEC1(45)
+          WRITE(GRPRSM,2105) KSEC1(46)
+          WRITE(GRPRSM,2106) KSEC1(47)
+          WRITE(GRPRSM,2107) KSEC1(48)
+          WRITE(GRPRSM,2108) KSEC1(49)
+          WRITE(GRPRSM,2109) KSEC1(50)
+          WRITE(GRPRSM,2110) KSEC1(51)
+          WRITE(GRPRSM,2111) KSEC1(52)
+          WRITE(GRPRSM,2112) KSEC1(53)
+          WRITE(GRPRSM,2113) KSEC1(54)
+          WRITE(GRPRSM,2114) KSEC1(55)
+          WRITE(GRPRSM,2115) KSEC1(56)
+          WRITE(GRPRSM,2116) KSEC1(57)
+          WRITE(HVERSION, '(A8)' ) KSEC1(58)
+#ifdef LITTLE_ENDIAN
+          WRITE(GRPRSM,2117) HVERSION(5:5)
+#else
+          WRITE(GRPRSM,2117) HVERSION(8:8)
+#endif
+          WRITE(GRPRSM,2118) KSEC1(59)
+          WRITE(GRPRSM,2119) KSEC1(60)
+          WRITE(GRPRSM,2120) KSEC1(61)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 22.
+C       (Couple atmospheric, wave and ocean models)
+C
+        IF (KSEC1(37).EQ.22) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1504) KSEC1(43)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          WRITE(GRPRSM,2201) KSEC1(46)
+          WRITE(GRPRSM,2202) KSEC1(47)
+          WRITE(GRPRSM,2203) KSEC1(48)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 23.
+C       (Couple atmospheric, wave and ocean means)
+C
+        IF (KSEC1(37).EQ.23) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1504) KSEC1(43)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          WRITE(GRPRSM,1601) KSEC1(46)
+          WRITE(GRPRSM,1602) KSEC1(47)
+          WRITE(GRPRSM,1603) KSEC1(48)
+          WRITE(GRPRSM,2201) KSEC1(49)
+          WRITE(GRPRSM,2202) KSEC1(50)
+          WRITE(GRPRSM,2203) KSEC1(51)
+          WRITE(GRPRSM,9502) KSEC1(52)
+          WRITE(GRPRSM,9503) KSEC1(53)
+          IF ( KSEC1(53) .NE. 2 ) WRITE(GRPRSM,9504) KSEC1(54)
+          IF ( KSEC1(53) .NE. 1 ) WRITE(GRPRSM,9505) KSEC1(55)
+C
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 24.
+C       (Couple atmospheric, wave and ocean means)
+C
+        IF (KSEC1(37).EQ.24) THEN
+          WRITE(GRPRSM,2401) KSEC1(42)
+          WRITE(GRPRSM,2402) KSEC1(43)
+          WRITE(GRPRSM,2403) KSEC1(44)
+          WRITE(GRPRSM,2404) KSEC1(45)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 25.
+C       (Couple atmospheric, wave and ocean means)
+C
+        IF (KSEC1(37).EQ.25) THEN
+          WRITE(GRPRSM,2501) KSEC1(42)
+          WRITE(GRPRSM,2502) KSEC1(43)
+          WRITE(GRPRSM,2503) KSEC1(44)
+        ENDIF
+C
+C       ECMWF Local definition 50.
+C       (Member State data)
+C
+        IF (KSEC1(37).EQ.50) THEN
+          WRITE(GRPRSM,5001) KSEC1(42)
+          WRITE(GRPRSM,5002) KSEC1(43)
+          WRITE(GRPRSM,5003) KSEC1(44)
+          WRITE(GRPRSM,5004) KSEC1(45)
+          WRITE(GRPRSM,5005) KSEC1(46)
+          WRITE(GRPRSM,5006) KSEC1(47)
+          WRITE(GRPRSM,5007) KSEC1(48)
+          WRITE(GRPRSM,*) '  ECMWF additions'
+          WRITE(GRPRSM,*) '  ---------------'
+          WRITE(GRPRSM,5008) KSEC1(49)
+          WRITE(GRPRSM,5009) KSEC1(50)
+          WRITE(GRPRSM,5010) (KSEC1(JLOOP),JLOOP=51,60)
+          WRITE(GRPRSM,*) '  Optional data'
+          WRITE(GRPRSM,*) '  -------------'
+          WRITE(GRPRSM,5010) (KSEC1(JLOOP),JLOOP=61,106)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 190.
+C       (Multiple ECMWF local definitions)
+C
+        IF (KSEC1(37).EQ.190) THEN
+          WRITE(GRPRSM,19001) KSEC1(44)
+          NBYTES = 0
+          DO JLOOP = 1, KSEC1(44)
+            WRITE(GRPRSM,19002) KSEC1(43+JLOOP*2)
+            WRITE(GRPRSM,19003) KSEC1(44+JLOOP*2)
+            NBYTES = NBYTES + KSEC1(44+2*JLOOP) + 8
+          ENDDO
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) ' Internal local definitions:'
+          WRITE(GRPRSM,*) ' ---------------------------'
+          CALL GRPR190(KSEC1)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 191.
+C       (Free format data descriptor)
+C
+        IF (KSEC1(37).EQ.191) THEN
+          WRITE(GRPRSM,19101) KSEC1(44)
+          WRITE(GRPRSM,19102) KSEC1(45)
+          WRITE(GRPRSM,19103) KSEC1(46)
+          WRITE(GRPRSM,19108) KSEC1(51)
+          WRITE(GRPRSM,*) '  Data descriptor bytes'
+          WRITE(GRPRSM,*) '  ---------------------'
+          DO JLOOP = 52, (51+(KSEC1(51)+JPBYTES-1)/JPBYTES)
+            WRITE(GRPRSM,19109) KSEC1(JLOOP)
+          ENDDO
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition not in above selection
+C       (eg defined using templates)
+C
+        IF( NDBG.EQ.0 ) CALL LDEFPRT(GRPRSM,KSEC1)
+        GOTO 900
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3 . Print Washington ensemble product information.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Washington EPS products (but not reformatted Washington EPS
+C     products.
+      IF ((KSEC1(2).EQ.7.AND.KSEC1(24).EQ.1).AND.
+     X    (.NOT.KSEC1(22).EQ.98) ) THEN
+        CALL KWPRS1 (KSEC0,KSEC1)
+      ENDIF
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9000 FORMAT(' ')
+ 9001 FORMAT(' Section 1 - Product Definition Section.')
+ 9002 FORMAT(' ---------------------------------------')
+ 9100 FORMAT(' Code Table 2 Version Number.         ',I9)
+ 9101 FORMAT(' Originating centre identifier.       ',I9)
+ 9102 FORMAT(' Model identification.                ',I9)
+ 9103 FORMAT(' Grid definition.                     ',I9)
+ 9104 FORMAT(' Flag (Code Table 1)                   ',I8.8)
+ 9105 FORMAT(' Parameter identifier (Code Table 2). ',I9)
+ 9106 FORMAT(' Type of level (Code Table 3).        ',I9)
+ 9107 FORMAT(' Value 1 of level (Code Table 3).     ',I9)
+ 9108 FORMAT(' Value 2 of level (Code Table 3).     ',I9)
+ 9109 FORMAT(' Year of reference time of data.      ',I9,'  (',I4,')' )
+ 9110 FORMAT(' Month of reference time of data.     ',I9)
+ 9111 FORMAT(' Day of reference time of data.       ',I9)
+ 9112 FORMAT(' Hour of reference time of data.      ',I9)
+ 9113 FORMAT(' Minute of reference time of data.    ',I9)
+ 9114 FORMAT(' Time unit (Code Table 4).            ',I9)
+ 9115 FORMAT(' Time range one.                      ',I9)
+ 9116 FORMAT(' Time range two.                      ',I9)
+ 9117 FORMAT(' Time range indicator (Code Table 5)  ',I9)
+ 9118 FORMAT(' Number averaged.                     ',I9)
+ 9119 FORMAT(' Number missing from average.         ',I9)
+ 9120 FORMAT(' Century of reference time of data.   ',I9)
+ 9121 FORMAT(' Units decimal scaling factor.        ',I9)
+ 9122 FORMAT(' Century of reference time of data.   Not given')
+ 9123 FORMAT(' Sub-centre identifier.               ',I9)
+ 9206 FORMAT(' Satellite identifier.                ',I9)
+ 9207 FORMAT(' Spectral band.                       ',I9)
+C
+ 9301 FORMAT(' ECMWF local usage identifier.        ',I9)
+ 9302 FORMAT(' Class.                               ',I9)
+ 9303 FORMAT(' Type.                                ',I9)
+ 9304 FORMAT(' Stream.                              ',I9)
+ 9305 FORMAT(' Version number or Experiment identifier.  ',A1,A1,A1,A1)
+ 9306 FORMAT(' Satellite spectral band.             ',I9)
+ 9307 FORMAT(' Function code.                       ',I9)
+ 9308 FORMAT(' Simulation number.                   ',I9)
+ 9309 FORMAT(' Total number of simulations.         ',I9)
+ 9310 FORMAT(' Forecast number.                     ',I9)
+ 9311 FORMAT(' Total number of forecasts.           ',I9)
+ 9312 FORMAT(' Cluster number.                      ',I9)
+ 9313 FORMAT(' Total number of clusters.            ',I9)
+ 9314 FORMAT(' Clustering method.                   ',I9)
+ 9315 FORMAT(' Start time step when clustering.     ',I9)
+ 9316 FORMAT(' End time step when clustering.       ',I9)
+ 9317 FORMAT(' Northern latitude of domain.         ',I9)
+ 9318 FORMAT(' Western longitude of domain.         ',I9)
+ 9319 FORMAT(' Southern latitude of domain.         ',I9)
+ 9320 FORMAT(' Eastern longitude of domain.         ',I9)
+ 9321 FORMAT(' Operational forecast in cluster      ',I9)
+ 9322 FORMAT(' Number of forecasts in cluster.      ',I9)
+ 9323 FORMAT(' Forecast number                      ',I9)
+ 9324 FORMAT(' Control forecast in cluster          ',I9)
+C
+C       ECMWF Local definition 4.
+C
+ 9401 FORMAT(' System number.                       ',I9)
+ 9402 FORMAT(' Method number.                       ',I9)
+ 9403 FORMAT(' Space unit flag.                     ',I9)
+ 9404 FORMAT(' Vertical coordinate definition.      ',I9)
+ 9405 FORMAT(' Horizontal coordinate definition.    ',I9)
+ 9406 FORMAT(' Time unit flag.                      ',I9)
+ 9407 FORMAT(' Time coordinate definition.          ',I9)
+ 9408 FORMAT(' Method used for analysis or forecast.',I9)
+C
+ 9411 FORMAT(' Mixed coordinate field flag.         ',I9)
+ 9412 FORMAT(' Coordinate 1 flag.                   ',I9)
+ 9413 FORMAT(' Averaging flag.                      ',I9)
+ 9414 FORMAT(' Position of level 1.                 ',I9)
+ 9415 FORMAT(' Position of level 2.                 ',I9)
+ 9416 FORMAT(' Coordinate 2 flag.                   ',I9)
+C
+ 9421 FORMAT(' Coordinate 3 flag (x-axis)           ',I9)
+ 9422 FORMAT(' Coordinate 4 flag (y-axis)           ',I9)
+ 9423 FORMAT(' Coordinate 4 of first grid point.   ',I10)
+ 9424 FORMAT(' Coordinate 3 of first grid point.   ',I10)
+ 9425 FORMAT(' Coordinate 4 of last grid point.    ',I10)
+ 9426 FORMAT(' Coordinate 3 of last grid point.    ',I10)
+ 9427 FORMAT(' i - increment.                       ',I9)
+ 9428 FORMAT(' j - increment.                       ',I9)
+ 9429 FORMAT(' Flag for irregular grid coordinates. ',I9)
+ 9430 FORMAT(' Flag for normal or staggered grids.  ',I9)
+C
+ 9441 FORMAT(' Further information flag.            ',I9)
+C
+ 9451 FORMAT(' No. entries in horizontal coordinate ',I9)
+ 9452 FORMAT(' No. entries in mixed coordinate defn.',I9)
+ 9453 FORMAT(' No. entries in grid coordinate list. ',I9)
+ 9454 FORMAT(' No. entries in auxiliary array.      ',I9)
+C
+ 9461 FORMAT('  ',I12)
+ 9462 FORMAT(' Reference date                       ',I9)
+ 9463 FORMAT(' Climate date - from                  ',I9)
+ 9464 FORMAT(' Climate date - to                    ',I9)
+C
+C       ECMWF Local definition 5.
+C
+ 9500 FORMAT(' Forecast probability number          ',I9)
+ 9501 FORMAT(' Total number of forecast probabilities ',I7)
+ 9502 FORMAT(' Threshold units decimal scale factor ',I9)
+ 9503 FORMAT(' Threshold indicator(1=lower,2=upper,3=both) ',I2)
+ 9504 FORMAT(' Lower threshold value                ',I9)
+ 9505 FORMAT(' Upper threshold value                ',I9)
+C
+C       ECMWF Local definition 6.
+C
+ 9601 FORMAT(' Date of SST field used               ',I9)
+ 9602 FORMAT(' Type of SST field (= climatology)    ',I9)
+ 9603 FORMAT(' Type of SST field (= 1/1 degree)     ',I9)
+ 9604 FORMAT(' Type of SST field (= 2/2 degree)     ',I9)
+ 9605 FORMAT(' Number of ICE fields used:           ',I9)
+ 9606 FORMAT(' Date of ICE field',I3,'                 ',I9)
+ 9607 FORMAT(' Satellite number (ICE field',I3,')      ',I9)
+C
+C       ECMWF Local definition 7.
+C
+ 9700 FORMAT(' Forecast number                      ',I9)
+ 9701 FORMAT(' Iteration number                     ',I9)
+ 9702 FORMAT(' Total number of diagnostics          ',I9)
+ 9703 FORMAT(' No.interations in diag. minimisation ',I9)
+ 9704 FORMAT(' Domain(0=Global,1=Europe,2=N.Hem.,3=S.Hem.) ',I2)
+ 9705 FORMAT(' Diagnostic number                    ',I9)
+C
+C       ECMWF Local definition 8.
+C
+ 9800 FORMAT(' ERA section 1 octet ',I2,'.              ',I9)
+ 9801 FORMAT(' Interval between reference times     ',I9)
+C
+C       ECMWF Local definition 9.
+C
+ 9943 FORMAT(' Number of iterations                 ',I9)
+ 9944 FORMAT(' Number of singular vectors computed  ',I9)
+ 9945 FORMAT(' Norm used at initial time            ',I9)
+ 9946 FORMAT(' Norm used at final time              ',I9)
+ 9947 FORMAT(' Multiplication factor                ',I9)
+ 9948 FORMAT(' Latitude of north-west corner        ',I9)
+ 9949 FORMAT(' Longitude of north-west corner       ',I9)
+ 9950 FORMAT(' Latitude of south-east corner        ',I9)
+ 9951 FORMAT(' Longitude of south-east corner       ',I9)
+ 9952 FORMAT(' Accuracy                             ',I9)
+ 9953 FORMAT(' Number of singular vectors evolved   ',I9)
+ 9954 FORMAT(' Ritz number one                      ',I9)
+ 9955 FORMAT(' Ritz number two                      ',I9)
+ 9960 FORMAT(' Perturbed ensemble forecast number   ',I9)
+ 9961 FORMAT(' Initial state perturbation number    ',I9)
+ 9962 FORMAT(' Singular vector number               ',I9)
+C
+C       ECMWF Local definition 10.
+C
+ 1001 FORMAT(' Tube number                          ',I9)
+ 1002 FORMAT(' Total number of tubes                ',I9)
+ 1003 FORMAT(' Central cluster definition           ',I9)
+ 1004 FORMAT(' Parameter                            ',I9)
+ 1005 FORMAT(' Type of level                        ',I9)
+ 1006 FORMAT(' Northern latitude of domain of tubing',I9)
+ 1007 FORMAT(' Western longitude of domain of tubing',I9)
+ 1008 FORMAT(' Southern latitude of domain of tubing',I9)
+ 1009 FORMAT(' Eastern longitude of domain of tubing',I9)
+ 1010 FORMAT(' Tube number of operational forecast  ',I9)
+ 1011 FORMAT(' Tube number of control forecast      ',I9)
+ 1012 FORMAT(' Height/pressure of level             ',I9)
+ 1013 FORMAT(' Reference step                       ',I9)
+ 1014 FORMAT(' Radius of central cluster            ',I9)
+ 1015 FORMAT(' Ensemble standard deviation          ',I9)
+ 1016 FORMAT(' Dist.of tube extreme to ensemble mean',I9)
+ 1017 FORMAT(' Number of forecasts in the tube      ',I9)
+ 1018 FORMAT(' List of ensemble forecast numbers:')
+ 1019 FORMAT('    ',I9)
+C
+C       ECMWF Local definition 11.
+C
+ 1101 FORMAT(' Details of analysis which used the supplementary data:')
+ 1103 FORMAT('   Class                              ',I9)
+ 1104 FORMAT('   Type                               ',I9)
+ 1105 FORMAT('   Stream                             ',I9)
+ 1106 FORMAT('   Version number/experiment identifier:   ',A1,A1,A1,A1)
+ 1107 FORMAT('   Year                               ',I9,'  (',I4,')')
+ 1108 FORMAT('   Month                              ',I9)
+ 1109 FORMAT('   Day                                ',I9)
+ 1110 FORMAT('   Hour                               ',I9)
+ 1111 FORMAT('   Minute                             ',I9)
+ 1112 FORMAT('   Century                            ',I9)
+ 1113 FORMAT('   Originating centre                 ',I9)
+ 1114 FORMAT('   Sub-centre                         ',I9)
+C
+C       ECMWF Local definition 12.
+C
+ 1201 FORMAT(' (Mean, average, etc)') 
+ 1203 FORMAT(' Start date of the period              ', I8)
+ 1204 FORMAT(' Start time of the period                  ', I4.4)
+ 1205 FORMAT(' Finish date of the period             ', I8)
+ 1206 FORMAT(' Finish time of the period                 ', I4.4)
+ 1207 FORMAT(' Verifying date of the period          ', I8)
+ 1208 FORMAT(' Verifying time of the period              ', I4.4)
+ 1209 FORMAT(' Code showing method                   ', I8)
+ 1210 FORMAT(' Number of different time intervals used  ', I5)
+ 1211 FORMAT(' List of different time intervals used:')
+ 1212 FORMAT('  - interval ',I5.4, ' used       once')
+ 1213 FORMAT('  - interval ',I5.4, ' used       twice')
+ 1214 FORMAT('  - interval ',I5.4, ' used ', I5, ' times')
+
+C
+C       ECMWF Local definition 13.
+C
+ 1301 FORMAT(' Direction number                     ',I9)
+ 1302 FORMAT(' Frequency number                     ',I9)
+ 1303 FORMAT(' Total number of directions           ',I9)
+ 1304 FORMAT(' Total number of frequencies          ',I9)
+ 1305 FORMAT(' Scale factor applied to directions   ',I9)
+ 1306 FORMAT(' Scale factor applied to frequencies  ',I9)
+ 1307 FORMAT(' List of directions:')
+ 1308 FORMAT(' ', I2.2,':', F15.7, '   <-- this field value')
+ 1309 FORMAT(' ', I2.2,':', F15.7)
+ 1310 FORMAT(' List of frequencies:')
+ 1311 FORMAT(' System number (65535 = missing)      ',I9)
+ 1312 FORMAT(' Method number (65535 = missing)      ',I9)
+ 1313 FORMAT(' Reference date                       ',I9)
+ 1314 FORMAT(' Climate date (from)                  ',I9)
+ 1315 FORMAT(' Climate date (to)                    ',I9)
+ 1316 FORMAT(' Leg base Date                        ',I9)
+ 1317 FORMAT(' Leg base Time                        ',I9)
+ 1318 FORMAT(' Leg base Number                      ',I9)
+ 1319 FORMAT(' Ocean Atmosphere Coupling flag       ',I9)
+C
+C       ECMWF Local definition 14.
+C
+ 1401 FORMAT(' Channel number                       ',I9)
+ 1402 FORMAT(' Scale factor applied to frequencies  ',I9)
+ 1403 FORMAT(' Total number of frequencies          ',I9)
+ 1404 FORMAT(' List of frequencies:')
+ 1405 FORMAT(' ', I3,':', F15.9, '   <-- this channel')
+ 1406 FORMAT(' ', I3,':', F15.9)
+C
+C       ECMWF Local definition 15.
+C
+ 1501 FORMAT(' Ensemble member number               ',I9)
+ 1502 FORMAT(' System number                        ',I9)
+ 1503 FORMAT(' Method number                        ',I9)
+ 1504 FORMAT(' Total number of ensembles            ',I9)
+C
+C       ECMWF Local definition 16.
+C
+ 1601 FORMAT(' Verifying month                      ',I9)
+ 1602 FORMAT(' Averaging period                     ',I9)
+ 1603 FORMAT(' Forecast month (0 = not present)     ',I9)
+C
+C       ECMWF Local definition 17.
+C
+ 1701 FORMAT(' Date of sst/ice field used           ',I9)
+ 1702 FORMAT(' Type of sst/ice field (= climatology)',I9)
+ 1703 FORMAT(' Type of sst/ice field (= 1/1 degree) ',I9)
+ 1704 FORMAT(' Type of sst/ice field (= 2/2 degree) ',I9)
+ 1705 FORMAT(' Number of ICE fields used:           ',I9)
+ 1706 FORMAT(' Date of ICE field',I3,'                 ',I9)
+ 1707 FORMAT(' Satellite number (ICE field',I3,')      ',I9)
+C
+C       ECMWF Local definition 18.
+C
+ 1801 FORMAT(' Ensemble forecast number             ',I9)
+ 1802 FORMAT(' Number of forecasts in ensemble      ',I9)
+ 1803 FORMAT(' Data origin                          ',I9)
+ 1804 FORMAT(' Model identifier of forecast used         ',A1,A1,A1,A1)
+ 1805 FORMAT(' Number of analyses in start analysis ',I9)
+ 1806 FORMAT('   ',A1,A1,A1,A1)
+C
+C       ECMWF Local definition 19.
+C
+ 1901 FORMAT(' Zero, for Mars compatibility         ',I9)
+ 1902 FORMAT(' Ensemble size                        ',I9)
+ 1903 FORMAT(' Power of 10 used to scale weight (F) ',I9)
+ 1904 FORMAT(' Weight*10**F applied to climate month 1',I7)
+ 1905 FORMAT(' First month used for climate month 1 ',I9)
+ 1906 FORMAT(' Last month used for climate month 1  ',I9)
+ 1907 FORMAT(' First month used for climate month 2 ',I9)
+ 1908 FORMAT(' Last month used for climate month 2  ',I9)
+ 1909 FORMAT(' EFI order                            ',I9)
+C
+C       ECMWF Local definition 20.
+C
+ 2001 FORMAT(' Iteration                            ',I9)
+ 2002 FORMAT(' Total number of iterations           ',I9)
+C
+C       ECMWF Local definition 21.
+C
+ 2101 FORMAT(' Forecast/sing.vector/flight number   ',I9)
+ 2102 FORMAT(' Number of iterations                 ',I9)
+ 2103 FORMAT(' Number of singular vectors computed  ',I9)
+ 2104 FORMAT(' Norm used at initial time            ',I9)
+ 2105 FORMAT(' Norm used at final time              ',I9)
+ 2106 FORMAT(' Lat-lon multiplication factor        ',I9)
+ 2107 FORMAT(' Area north-west latitude             ',I9)
+ 2108 FORMAT(' Area north-west longitude            ',I9)
+ 2109 FORMAT(' Area south-east latitude             ',I9)
+ 2110 FORMAT(' Area south-east longitude            ',I9)
+ 2111 FORMAT(' Accuracy                             ',I9)
+ 2112 FORMAT(' Number of singular vectors evolved   ',I9)
+ 2113 FORMAT(' Ritz number 1                        ',I9)
+ 2114 FORMAT(' Ritz number 2                        ',I9)
+ 2115 FORMAT(' Observation offset period            ',I9)
+ 2116 FORMAT(' Forecast lead time                   ',I9)
+ 2117 FORMAT(' Domain                                       ',A1)
+ 2118 FORMAT(' Method number                        ',I9)
+ 2119 FORMAT(' Total forecasts in ensemble          ',I9)
+ 2120 FORMAT(' Shape of verification region (flag)  ',I9)
+C
+C       ECMWF Local definition 22 and 23.
+C
+ 2201 FORMAT(' Reference date                       ',I9)
+ 2202 FORMAT(' Climate date (from)                  ',I9)
+ 2203 FORMAT(' Climate date (to)                    ',I9)
+C
+C       ECMWF Local definition 24
+C
+ 2401 FORMAT(' Satellite identifier  (WMO table C-5)',I9)
+ 2402 FORMAT(' Instrument identifier (WMO table C-8)',I9)
+ 2403 FORMAT(' Channel number                       ',I9)
+ 2404 FORMAT(' Function code                        ',I9)
+C
+C       ECMWF Local definition 25
+C
+ 2501 FORMAT(' Component index                      ',I9)
+ 2502 FORMAT(' Number of components                 ',I9)
+ 2503 FORMAT(' Model error type                     ',I9)
+C
+C       ECMWF Local definition 50.
+C
+ 5001 FORMAT(' Number                               ',I9)
+ 5002 FORMAT(' Total                                ',I9)
+ 5003 FORMAT(' Model identifier                     ',I9)
+ 5004 FORMAT(' Latitude of NW corner (degrees*10^6) ',I9)
+ 5005 FORMAT(' Longitude of NW corner(degrees*10^6) ',I9)
+ 5006 FORMAT(' Latitude of SE corner (degrees*10^6) ',I9)
+ 5007 FORMAT(' Longitude of SE corner(degrees*10^6) ',I9)
+ 5008 FORMAT(' Original parameter number            ',I9)
+ 5009 FORMAT(' Original parameter table number      ',I9)
+ 5010 FORMAT(10(1X,Z8.8))
+C
+C       ECMWF Local definition 190.
+C
+19001 FORMAT(' Number of ECMWF local definitions    ',I9)
+19002 FORMAT(' ECMWF local definition number        ',I9)
+19003 FORMAT(' Number of bytes in local definition  ',I9)
+#ifdef INTEGER_8
+19004 FORMAT(3X,Z16.16)
+#else
+19004 FORMAT(3X,Z8.8)
+#endif
+C
+C       ECMWF Local definition 191.
+C
+19101 FORMAT(' Format version major number          ',I9)
+19102 FORMAT(' Format version minor number          ',I9)
+19103 FORMAT(' Original sub-centre identifier       ',I9)
+19108 FORMAT(' Number of bytes of data descriptor   ',I9)
+#ifdef INTEGER_8
+19109 FORMAT(3X,Z16.16)
+#else
+19109 FORMAT(3X,Z8.8)
+#endif
+C
+      END
diff --git a/gribex/grprs1b.F b/gribex/grprs1b.F
new file mode 100755
index 0000000..6abb71b
--- /dev/null
+++ b/gribex/grprs1b.F
@@ -0,0 +1,1268 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS1B(KSEC1)
+C
+C---->
+C**** GRPRS1B
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Product Definition
+C     Section (Section 1) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS1B(KSEC1)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC1 - Array of decoded parameters from Section 1.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     Flag fields are printed in binary representation.
+C     Other fields as integers.
+C     Fields printed depend on GRIB Edition.
+C
+C     This is a simplified version of grprs1.F called by grprs1.c
+C     to display local definitions stored internally in ECMWF local
+C     defienition 190.
+C
+C
+C     Externals.
+C     ----------
+C
+C     PRTBIN  - Print binary value in character format.
+C     CHKTAB2 - Looks up a parameter in a given ECMWF local table 2.
+C
+C     Common block GRPRSCM.
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     When decoding data from Experimental Edition or Edition 0,
+C     routine GRIBEX adds the additional fields available in
+C     Edition 1.
+C
+C     Checks environment variable GRPRS_STREAM for output stream number
+C     for printing (default is 6)
+C
+C
+C     Author.
+C     -------
+C     J.D.Chambers     ECMWF      November 2004
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+#include "grbcom.h"
+C
+C     Parameter(s)
+C
+      INTEGER JPBYTES
+#ifdef INTEGER_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+C
+C     Subroutine arguments
+C
+      INTEGER KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER IPREV, ICURR, ICOUNT, IOFFSET, IOFF2, IOFF3
+      INTEGER IBIT, IERR, IOUT, IYEAR, NBYTES, LEN
+      INTEGER JLOOP, JILOOP
+      REAL VALUE
+C
+      CHARACTER*8 HVERSION
+      CHARACTER*121 HFIRST, HSECOND, HTHIRD, HFOURTH
+C
+C     Externals
+C
+      INTEGER CHKTAB2
+      EXTERNAL CHKTAB2
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print required information.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+        IF(KSEC1(37).EQ.1)
+     X    WRITE(GRPRSM,*) '(Mars labelling or ensemble forecast)'
+        IF(KSEC1(37).EQ.2)
+     X    WRITE(GRPRSM,*) '(Cluster means and standard deviations)'
+        IF(KSEC1(37).EQ.3)
+     X    WRITE(GRPRSM,*) '(Satellite image data)'
+        IF(KSEC1(37).EQ.4)
+     X    WRITE(GRPRSM,*) '(Ocean model data)'
+        IF(KSEC1(37).EQ.5)
+     X    WRITE(GRPRSM,*) '(Forecast probability data)'
+        IF(KSEC1(37).EQ.6)
+     X    WRITE(GRPRSM,*) '(Surface temperature data)'
+        IF(KSEC1(37).EQ.7)
+     X    WRITE(GRPRSM,*) '(Sensitivity data)'
+        IF(KSEC1(37).EQ.8)
+     X    WRITE(GRPRSM,*) '(ECMWF re-analysis data)'
+        IF(KSEC1(37).EQ.9)
+     X    WRITE(GRPRSM,*) '(Singular vectors / ensemble perturbations)'
+        IF(KSEC1(37).EQ.10)
+     X    WRITE(GRPRSM,*) '(EPS tubes)'
+        IF(KSEC1(37).EQ.11)
+     X    WRITE(GRPRSM,*) '(Supplementary data used by analysis)'
+        IF(KSEC1(37).EQ.13)
+     X    WRITE(GRPRSM,*) '(Wave 2D spectra direction and frequency)'
+        IF(KSEC1(37).EQ.14)
+     X    WRITE(GRPRSM,*) '(Brightness temperature)'
+        IF(KSEC1(37).EQ.15)
+     X    WRITE(GRPRSM,*) '(Ocean ensemble seasonal forecast)'
+        IF(KSEC1(37).EQ.16)
+     X    WRITE(GRPRSM,*) '(Seasonal fc monthly mean atmosphere data)'
+        IF(KSEC1(37).EQ.17)
+     X    WRITE(GRPRSM,*) '(Sst or sea-ice used by analysis)'
+        IF(KSEC1(37).EQ.18)
+     X    WRITE(GRPRSM,*) '(Multi-analysis ensemble data)'
+        IF(KSEC1(37).EQ.19)
+     X    WRITE(GRPRSM,*) '(Extreme forecast index data)'
+        IF(KSEC1(37).EQ.20)
+     X    WRITE(GRPRSM,*) '(4D variational increments)'
+        IF(KSEC1(37).EQ.21)
+     X    WRITE(GRPRSM,*) '(Sensitive area predictions)'
+        IF(KSEC1(37).EQ.23)
+     X    WRITE(GRPRSM,*)
+     X '(Coupled atmospheric, wave & ocean means (+ hindcast support))'
+        IF(KSEC1(37).EQ.24)
+     X    WRITE(GRPRSM,*) '(Satellite image simulation)'
+        IF(KSEC1(37).EQ.25)
+     X    WRITE(GRPRSM,*) '(4DVar model errors)'
+        IF(KSEC1(37).EQ.50)
+     X    WRITE(GRPRSM,*) '(Member State data)'
+        IF(KSEC1(37).EQ.190)
+     X    WRITE(GRPRSM,*) '(Multiple ECMWF local definitions)'
+        IF(KSEC1(37).EQ.191)
+     X    WRITE(GRPRSM,*) '(Free format data descriptor)'
+C
+        WRITE(GRPRSM,9302) KSEC1(38)
+        WRITE(GRPRSM,9303) KSEC1(39)
+        WRITE(GRPRSM,9304) KSEC1(40)
+        WRITE(HVERSION, '(A8)' ) KSEC1(41)
+        WRITE(GRPRSM,9305)
+     X    HVERSION(5:5),
+     X    HVERSION(6:6),
+     X    HVERSION(7:7),
+     X    HVERSION(8:8)
+C
+C       ECMWF Local definition 1.
+C       (MARS labelling or ensemble forecast data)
+C
+        IF (KSEC1(37).EQ.1) THEN
+          WRITE(GRPRSM,9310) KSEC1(42)
+          IF( KSEC1(40).NE.1090 ) WRITE(GRPRSM,9311) KSEC1(43)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 2.
+C       (Cluster means and standard deviations)
+C
+        IF (KSEC1(37).EQ.2) THEN
+          WRITE(GRPRSM,9312) KSEC1(42)
+          WRITE(GRPRSM,9313) KSEC1(43)
+          WRITE(GRPRSM,9314) KSEC1(44)
+          WRITE(GRPRSM,9315) KSEC1(45)
+          WRITE(GRPRSM,9316) KSEC1(46)
+          WRITE(GRPRSM,9317) KSEC1(47)
+          WRITE(GRPRSM,9318) KSEC1(48)
+          WRITE(GRPRSM,9319) KSEC1(49)
+          WRITE(GRPRSM,9320) KSEC1(50)
+          WRITE(GRPRSM,9321) KSEC1(51)
+          WRITE(GRPRSM,9324) KSEC1(52)
+          WRITE(GRPRSM,9322) KSEC1(53)
+          DO 210 JLOOP = 1,KSEC1(53)
+            WRITE(GRPRSM,9323) KSEC1(JLOOP+53)
+  210     CONTINUE
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 3.
+C       (Satellite image data)
+C
+        IF (KSEC1(37).EQ.3) THEN
+          WRITE(GRPRSM,9306) KSEC1(42)
+          WRITE(GRPRSM,9307) KSEC1(43)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 4.
+C       (Ocean model data)
+C
+        IF (KSEC1(37).EQ.4) THEN
+          WRITE(GRPRSM,9310) KSEC1(42)
+          IF( KSEC1(40).NE.1090 ) WRITE(GRPRSM,9311) KSEC1(43)
+          WRITE(GRPRSM,9401) KSEC1(44)
+          WRITE(GRPRSM,9402) KSEC1(45)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Coordinate structure definition.'
+          WRITE(GRPRSM,*) '--------------------------------'
+          WRITE(GRPRSM,9403) KSEC1(46)
+          WRITE(GRPRSM,9404) KSEC1(47)
+          WRITE(GRPRSM,9405) KSEC1(48)
+          WRITE(GRPRSM,9406) KSEC1(49)
+          WRITE(GRPRSM,9407) KSEC1(50)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Position definition.'
+          WRITE(GRPRSM,*) '--------------------'
+          WRITE(GRPRSM,9411) KSEC1(51)
+          WRITE(GRPRSM,9412) KSEC1(52)
+          WRITE(GRPRSM,9413) KSEC1(53)
+          WRITE(GRPRSM,9414) KSEC1(54)
+          WRITE(GRPRSM,9415) KSEC1(55)
+          WRITE(GRPRSM,9416) KSEC1(56)
+          WRITE(GRPRSM,9413) KSEC1(57)
+          WRITE(GRPRSM,9414) KSEC1(58)
+          WRITE(GRPRSM,9415) KSEC1(59)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Grid Definition.'
+          WRITE(GRPRSM,*) '----------------'
+          WRITE(GRPRSM,9421) KSEC1(60)
+          WRITE(GRPRSM,9422) KSEC1(61)
+          WRITE(GRPRSM,9423) KSEC1(62)
+          WRITE(GRPRSM,9424) KSEC1(63)
+          WRITE(GRPRSM,9425) KSEC1(64)
+          WRITE(GRPRSM,9426) KSEC1(65)
+          WRITE(GRPRSM,9427) KSEC1(66)
+          WRITE(GRPRSM,9428) KSEC1(67)
+          WRITE(GRPRSM,9429) KSEC1(68)
+          WRITE(GRPRSM,9430) KSEC1(69)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Further information.'
+          WRITE(GRPRSM,*) '--------------------'
+          WRITE(GRPRSM,9441) KSEC1(70)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Auxiliary information.'
+          WRITE(GRPRSM,*) '----------------------'
+          WRITE(GRPRSM,9451) KSEC1(71)
+          WRITE(GRPRSM,9452) KSEC1(72)
+          WRITE(GRPRSM,9453) KSEC1(73)
+          WRITE(GRPRSM,9454) KSEC1(74)
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Horizontal coordinate supplement.'
+          WRITE(GRPRSM,*) '---------------------------------'
+          IF( KSEC1(71).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(71)
+            DO JLOOP = 1,KSEC1(71)
+              WRITE(GRPRSM,9461) KSEC1(74+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Mixed coordinate definition.'
+          WRITE(GRPRSM,*) '----------------------------'
+          IF( KSEC1(72).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(72)
+            IOFFSET = 74 + KSEC1(71)
+            DO JLOOP = 1,KSEC1(72)
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Grid coordinate list.'
+          WRITE(GRPRSM,*) '---------------------'
+          IF( KSEC1(73).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(73)
+            IOFFSET = 74 + KSEC1(71) + KSEC1(72)
+            DO JLOOP = 1,KSEC1(73)
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Auxiliary array.'
+          WRITE(GRPRSM,*) '----------------'
+          IF( KSEC1(74).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(74)
+            IOFFSET = 74 + KSEC1(71) + KSEC1(72) + KSEC1(73)
+            DO JLOOP = 1,KSEC1(74)
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+          ENDIF
+C
+          WRITE(GRPRSM,*) ' '
+          WRITE(GRPRSM,*) 'Post-auxiliary array.'
+          WRITE(GRPRSM,*) '---------------------'
+          IOFFSET = 74 + KSEC1(71) + KSEC1(72) + KSEC1(73) + KSEC1(74)
+          IF( KSEC1(IOFFSET+1).EQ.0 ) THEN
+            WRITE(GRPRSM,*) '(None).'
+          ELSE
+            WRITE(GRPRSM,*) 'Number of items = ', KSEC1(IOFFSET+1)
+            DO JLOOP = 2, 4
+              WRITE(GRPRSM,9461) KSEC1(IOFFSET+JLOOP)
+            ENDDO
+            IF( KSEC1(IOFFSET+1).GT.4 ) THEN
+              WRITE(GRPRSM,9462) KSEC1(IOFFSET+5)
+              IF( KSEC1(IOFFSET+6).NE.0 ) THEN
+                WRITE(GRPRSM,9463) KSEC1(IOFFSET+6)
+                WRITE(GRPRSM,9464) KSEC1(IOFFSET+7)
+              ENDIF
+            ENDIF
+          ENDIF
+C
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 5.
+C       (Forecast probability data)
+C
+        IF (KSEC1(37).EQ.5) THEN
+          WRITE(GRPRSM,9500) KSEC1(42)
+          WRITE(GRPRSM,9501) KSEC1(43)
+          WRITE(GRPRSM,9502) KSEC1(44)
+          WRITE(GRPRSM,9503) KSEC1(45)
+          IF ( KSEC1(45) .NE. 2 ) WRITE(GRPRSM,9504) KSEC1(46)
+          IF ( KSEC1(45) .NE. 1 ) WRITE(GRPRSM,9505) KSEC1(47)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 6.
+C       (Surface temperature data)
+C
+        IF (KSEC1(37).EQ.6) THEN
+C
+          IYEAR = KSEC1(44)
+          IF( IYEAR.GT.100 ) THEN
+            IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+            WRITE(GRPRSM,9601) IYEAR
+          ELSE
+            WRITE(GRPRSM,*)
+     X        'Date of SST field used               Not given'
+          ENDIF
+          IF(KSEC1(45).EQ.0) WRITE(GRPRSM,9602) KSEC1(45)
+          IF(KSEC1(45).EQ.1) WRITE(GRPRSM,9603) KSEC1(45)
+          IF(KSEC1(45).EQ.2) WRITE(GRPRSM,9604) KSEC1(45)
+C
+          WRITE(GRPRSM,9605) KSEC1(46)
+C
+          DO 260 JLOOP = 1, KSEC1(46)
+            IYEAR = KSEC1(45+(JLOOP*2))
+            IF( IYEAR.GT.100 ) THEN
+              IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+              WRITE(GRPRSM,9606) JLOOP, IYEAR
+              WRITE(GRPRSM,9607) JLOOP, KSEC1(46+(JLOOP*2))
+            ELSE
+              WRITE(GRPRSM,*)
+     X          'Date of SST field used               Not given'
+            ENDIF
+C
+  260     CONTINUE
+C
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 7.
+C       (Sensitivity data)
+C
+        IF (KSEC1(37).EQ.7) THEN
+          IF ( KSEC1(39) .EQ. 51 ) WRITE(GRPRSM,9700) KSEC1(42)
+          IF ( KSEC1(39) .NE. 51 ) WRITE(GRPRSM,9701) KSEC1(42)
+          IF ( KSEC1(39) .NE. 52 ) WRITE(GRPRSM,9702) KSEC1(43)
+          IF ( KSEC1(39) .EQ. 52 ) WRITE(GRPRSM,9703) KSEC1(43)
+          WRITE(GRPRSM,9704) KSEC1(44) 
+          WRITE(GRPRSM,9705) KSEC1(45)
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 8.
+C       (ECMWF re-analysis data)
+C
+        IF (KSEC1(37).EQ.8) THEN
+          IF( (KSEC1(40).EQ.1043).OR.
+     X        (KSEC1(40).EQ.1070).OR.
+     X        (KSEC1(40).EQ.1071) ) THEN
+            WRITE(GRPRSM,9801) KSEC1(42)
+            DO JLOOP = 43, 54
+              JILOOP = JLOOP + 8
+              WRITE(GRPRSM,9800) JILOOP, KSEC1(JLOOP)
+            ENDDO
+          ELSE
+            DO JLOOP = 42, 54
+              JILOOP = JLOOP + 8
+              WRITE(GRPRSM,9800) JILOOP, KSEC1(JLOOP)
+            ENDDO
+          ENDIF
+          GOTO 900
+        ENDIF
+C
+        IF (KSEC1(39).GT.4.AND.KSEC1(39).LT.9) THEN
+          WRITE(GRPRSM,9308) KSEC1(42)
+          WRITE(GRPRSM,9309) KSEC1(43)
+        ENDIF
+C
+C
+C       ECMWF Local definition 9.
+C       (Singular vectors and ensemble perturbations)
+C
+        IF (KSEC1(37).EQ.9) THEN
+          IF(KSEC1(39).EQ.60)
+     X      WRITE(GRPRSM,9960) KSEC1(42)
+          IF(KSEC1(39).EQ.61)
+     X      WRITE(GRPRSM,9961) KSEC1(42)
+          IF(KSEC1(39).EQ.62)
+     X      WRITE(GRPRSM,9962) KSEC1(42)
+          IF(KSEC1(39).EQ.62) THEN
+            WRITE(GRPRSM,9943) KSEC1(43)
+            WRITE(GRPRSM,9944) KSEC1(44)
+            WRITE(GRPRSM,9945) KSEC1(45)
+            WRITE(GRPRSM,9946) KSEC1(46)
+            WRITE(GRPRSM,9947) KSEC1(47)
+            WRITE(GRPRSM,9948) KSEC1(48)
+            WRITE(GRPRSM,9949) KSEC1(49)
+            WRITE(GRPRSM,9950) KSEC1(50)
+            WRITE(GRPRSM,9951) KSEC1(51)
+            WRITE(GRPRSM,9952) KSEC1(52)
+            WRITE(GRPRSM,9953) KSEC1(53)
+            WRITE(GRPRSM,9954) KSEC1(54)
+            WRITE(GRPRSM,9955) KSEC1(55)
+          ENDIF
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 10.
+C       (EPS tubes)
+C
+        IF (KSEC1(37).EQ.10) THEN
+          WRITE(GRPRSM,1001) KSEC1(42)
+          WRITE(GRPRSM,1002) KSEC1(43)
+          WRITE(GRPRSM,1003) KSEC1(44)
+          WRITE(GRPRSM,1004) KSEC1(45)
+          WRITE(GRPRSM,1005) KSEC1(46)
+          WRITE(GRPRSM,1006) KSEC1(47)
+          WRITE(GRPRSM,1007) KSEC1(48)
+          WRITE(GRPRSM,1008) KSEC1(49)
+          WRITE(GRPRSM,1009) KSEC1(50)
+          WRITE(GRPRSM,1010) KSEC1(51)
+          WRITE(GRPRSM,1011) KSEC1(52)
+          WRITE(GRPRSM,1012) KSEC1(53)
+          WRITE(GRPRSM,1013) KSEC1(54)
+          WRITE(GRPRSM,1014) KSEC1(55)
+          WRITE(GRPRSM,1015) KSEC1(56)
+          WRITE(GRPRSM,1016) KSEC1(57)
+          WRITE(GRPRSM,1017) KSEC1(58)
+C
+          WRITE(GRPRSM,1018)
+          DO 280 JLOOP = 1, KSEC1(58)
+            WRITE(GRPRSM,1019) KSEC1(58+JLOOP)
+  280     CONTINUE
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 11.
+C       (Supplementary data used by the analysis)
+C
+        IF (KSEC1(37).EQ.11) THEN
+          WRITE(GRPRSM,1101)
+          WRITE(GRPRSM,1103) KSEC1(42)
+          WRITE(GRPRSM,1104) KSEC1(43)
+          WRITE(GRPRSM,1105) KSEC1(44)
+          WRITE(HVERSION, '(A8)' ) KSEC1(45)
+          WRITE(GRPRSM,1106)
+#ifdef LITTLE_ENDIAN
+     X      HVERSION(8:8),
+     X      HVERSION(7:7),
+     X      HVERSION(6:6),
+     X      HVERSION(5:5)
+#else
+     X      HVERSION(5:5),
+     X      HVERSION(6:6),
+     X      HVERSION(7:7),
+     X      HVERSION(8:8)
+#endif
+          IYEAR = KSEC1(46)
+          IF( IYEAR.GT.40 ) THEN
+            IYEAR = IYEAR + 1900
+          ELSE
+            IYEAR = IYEAR + 2000
+          ENDIF
+          WRITE(GRPRSM,1107) KSEC1(46), IYEAR
+          WRITE(GRPRSM,1108) KSEC1(47)
+          WRITE(GRPRSM,1109) KSEC1(48)
+          WRITE(GRPRSM,1110) KSEC1(49)
+          WRITE(GRPRSM,1111) KSEC1(50)
+          WRITE(GRPRSM,1112) KSEC1(51)
+          WRITE(GRPRSM,1113) KSEC1(52)
+          WRITE(GRPRSM,1114) KSEC1(53)
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 12.
+C
+        IF (KSEC1(37).EQ.12) THEN
+          WRITE(GRPRSM,1201)
+          WRITE(GRPRSM,1203) KSEC1(42)
+          WRITE(GRPRSM,1204) KSEC1(43)
+          WRITE(GRPRSM,1205) KSEC1(44)
+          WRITE(GRPRSM,1206) KSEC1(45)
+          WRITE(GRPRSM,1207) KSEC1(46)
+          WRITE(GRPRSM,1208) KSEC1(47)
+          WRITE(GRPRSM,1209) KSEC1(48)
+          WRITE(GRPRSM,1210) KSEC1(49)
+          WRITE(GRPRSM,1211)
+          IPREV  = KSEC1(50)
+          ICURR  = 0
+          ICOUNT = 0
+          DO JLOOP = 1, KSEC1(49)
+            ICURR = KSEC1(49+JLOOP)
+            IF( ICURR.NE.IPREV ) THEN
+              IF( ICOUNT.EQ.1 ) WRITE(GRPRSM,1212) IPREV
+              IF( ICOUNT.EQ.2 ) WRITE(GRPRSM,1213) IPREV
+              IF( ICOUNT.GT.2 ) WRITE(GRPRSM,1214) IPREV, ICOUNT
+              IPREV  = ICURR
+              ICOUNT = 1
+            ELSE
+              ICOUNT = ICOUNT + 1
+            ENDIF
+          ENDDO
+          IF( ICOUNT.EQ.1 ) WRITE(GRPRSM,1212) IPREV
+          IF( ICOUNT.EQ.2 ) WRITE(GRPRSM,1213) IPREV
+          IF( ICOUNT.GT.2 ) WRITE(GRPRSM,1214) IPREV, ICOUNT
+          GOTO 900
+        ENDIF
+C
+C
+C       ECMWF Local definition 13.
+C       (Wave 2D spectra direction and frequency)
+C
+        IF (KSEC1(37).EQ.13) THEN
+          WRITE(GRPRSM,1301) KSEC1(44)
+          WRITE(GRPRSM,1302) KSEC1(45)
+          WRITE(GRPRSM,1303) KSEC1(46)
+          WRITE(GRPRSM,1304) KSEC1(47)
+          WRITE(GRPRSM,1305) KSEC1(48)
+          WRITE(GRPRSM,1306) KSEC1(49)
+          WRITE(GRPRSM,1307)
+          DO 290 JLOOP = 1, KSEC1(46)
+            VALUE = REAL(KSEC1(49+JLOOP))/REAL(KSEC1(48))
+            IF( KSEC1(44).EQ.JLOOP ) THEN
+              WRITE(GRPRSM,1308) JLOOP, VALUE
+            ELSE
+              WRITE(GRPRSM,1309) JLOOP, VALUE
+            ENDIF
+  290     CONTINUE
+          WRITE(GRPRSM,1310)
+          DO 295 JLOOP = 1, KSEC1(47)
+            VALUE = REAL(KSEC1(49+KSEC1(46)+JLOOP))/REAL(KSEC1(49))
+            IF( KSEC1(45).EQ.JLOOP ) THEN
+              WRITE(GRPRSM,1308) JLOOP, VALUE
+            ELSE
+              WRITE(GRPRSM,1309) JLOOP, VALUE
+            ENDIF
+  295     CONTINUE
+C
+          IF( N13FLAG.GT.0 ) THEN
+            WRITE(GRPRSM,1311) KSEC1(50+KSEC1(46)+KSEC1(47))
+            WRITE(GRPRSM,1312) KSEC1(51+KSEC1(46)+KSEC1(47))
+            IF( N13FLAG.GT.1 ) THEN
+              WRITE(GRPRSM,1313) KSEC1(52+KSEC1(46)+KSEC1(47))
+              WRITE(GRPRSM,1314) KSEC1(53+KSEC1(46)+KSEC1(47))
+              WRITE(GRPRSM,1315) KSEC1(54+KSEC1(46)+KSEC1(47))
+            ENDIF
+          ENDIF
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 14.
+C       (Brightness temperature)
+C
+        IF (KSEC1(37).EQ.14) THEN
+          WRITE(GRPRSM,1401) KSEC1(44)
+          WRITE(GRPRSM,1402) KSEC1(45)
+          WRITE(GRPRSM,1403) KSEC1(46)
+          WRITE(GRPRSM,1404)
+          DO 296 JLOOP = 1, KSEC1(46)
+            VALUE = REAL(KSEC1(46+JLOOP))/REAL(KSEC1(45))
+            IF( KSEC1(44).EQ.JLOOP ) THEN
+              WRITE(GRPRSM,1405) JLOOP, VALUE
+            ELSE
+              WRITE(GRPRSM,1406) JLOOP, VALUE
+            ENDIF
+  296     CONTINUE
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 15.
+C       (Ocean ensemble seasonal forecast)
+C
+        IF (KSEC1(37).EQ.15) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1504) KSEC1(43)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 16.
+C       (Seasonal forecast monthly mean atmosphere data)
+C
+        IF (KSEC1(37).EQ.16) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          WRITE(GRPRSM,1601) KSEC1(46)
+          WRITE(GRPRSM,1602) KSEC1(47)
+          WRITE(GRPRSM,1603) KSEC1(48)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 17.
+C       (Sst or sea-ice used by analysis)
+C
+        IF (KSEC1(37).EQ.17) THEN
+C
+          IYEAR = KSEC1(44)
+          IF( IYEAR.GT.100 ) THEN
+            IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+            WRITE(GRPRSM,1701) IYEAR
+          ELSE
+            WRITE(GRPRSM,*)
+     X        'Date of sst/ice field used           Not given'
+          ENDIF
+          IF(KSEC1(45).EQ.0) WRITE(GRPRSM,1702) KSEC1(45)
+          IF(KSEC1(45).EQ.1) WRITE(GRPRSM,1703) KSEC1(45)
+          IF(KSEC1(45).EQ.2) WRITE(GRPRSM,1704) KSEC1(45)
+C
+          WRITE(GRPRSM,1705) KSEC1(46)
+C
+          DO JLOOP = 1, KSEC1(46)
+            IYEAR = KSEC1(45+(JLOOP*2))
+            IF( IYEAR.GT.100 ) THEN
+              IF( IYEAR.LT.19000000 ) IYEAR = IYEAR + 19000000
+              WRITE(GRPRSM,1706) JLOOP, IYEAR
+              WRITE(GRPRSM,1707) JLOOP, KSEC1(46+(JLOOP*2))
+            ELSE
+              WRITE(GRPRSM,*)
+     X          'Date of sst/ice field used           Not given'
+            ENDIF
+C
+          ENDDO
+          GOTO 900
+C
+        ENDIF
+C
+C       ECMWF Local definition 18.
+C       (Multi-analysis ensemble data)
+C
+        IF (KSEC1(37).EQ.18) THEN
+          WRITE(GRPRSM,1801) KSEC1(42)
+          WRITE(GRPRSM,1802) KSEC1(43)
+          WRITE(GRPRSM,1803) KSEC1(44)
+          WRITE(HVERSION, '(A8)' ) KSEC1(45)
+          WRITE(GRPRSM,1804)
+#ifdef LITTLE_ENDIAN
+     X      HVERSION(8:8),
+     X      HVERSION(7:7),
+     X      HVERSION(6:6),
+     X      HVERSION(5:5)
+#else
+     X      HVERSION(5:5),
+     X      HVERSION(6:6),
+     X      HVERSION(7:7),
+     X      HVERSION(8:8)
+#endif
+          WRITE(GRPRSM,1805) KSEC1(46)
+          WRITE(GRPRSM,*) '  WMO centre analyses used:'
+          WRITE(GRPRSM,*) '  ------------------------'
+          DO JLOOP = 1, KSEC1(46)
+            WRITE(HVERSION, '(A8)' ) KSEC1(46+JLOOP)
+            WRITE(GRPRSM,1806)
+#ifdef LITTLE_ENDIAN
+     X      HVERSION(8:8),
+     X      HVERSION(7:7),
+     X      HVERSION(6:6),
+     X      HVERSION(5:5)
+#else
+     X      HVERSION(5:5),
+     X      HVERSION(6:6),
+     X      HVERSION(7:7),
+     X      HVERSION(8:8)
+#endif
+          ENDDO
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 19.
+C       (Extreme forecast index)
+C
+        IF (KSEC1(37).EQ.19) THEN
+          WRITE(GRPRSM,1901) KSEC1(42)
+          WRITE(GRPRSM,1902) KSEC1(43)
+          WRITE(GRPRSM,1903) KSEC1(44)
+          WRITE(GRPRSM,1904) KSEC1(45)
+          WRITE(GRPRSM,1905) KSEC1(46)
+          WRITE(GRPRSM,1906) KSEC1(47)
+          WRITE(GRPRSM,1907) KSEC1(48)
+          WRITE(GRPRSM,1908) KSEC1(49)
+          WRITE(GRPRSM,1909) KSEC1(50)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 20.
+C       (4D variational increments)
+C
+        IF (KSEC1(37).EQ.20) THEN
+          WRITE(GRPRSM,2001) KSEC1(42)
+          WRITE(GRPRSM,2002) KSEC1(43)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 21.
+C       (Sensitive area predictions)
+C
+        IF (KSEC1(37).EQ.21) THEN
+          WRITE(GRPRSM,2101) KSEC1(42)
+          WRITE(GRPRSM,2102) KSEC1(43)
+          WRITE(GRPRSM,2103) KSEC1(44)
+          WRITE(GRPRSM,2104) KSEC1(45)
+          WRITE(GRPRSM,2105) KSEC1(46)
+          WRITE(GRPRSM,2106) KSEC1(47)
+          WRITE(GRPRSM,2107) KSEC1(48)
+          WRITE(GRPRSM,2108) KSEC1(49)
+          WRITE(GRPRSM,2109) KSEC1(50)
+          WRITE(GRPRSM,2110) KSEC1(51)
+          WRITE(GRPRSM,2111) KSEC1(52)
+          WRITE(GRPRSM,2112) KSEC1(53)
+          WRITE(GRPRSM,2113) KSEC1(54)
+          WRITE(GRPRSM,2114) KSEC1(55)
+          WRITE(GRPRSM,2115) KSEC1(56)
+          WRITE(GRPRSM,2116) KSEC1(57)
+          WRITE(HVERSION, '(A8)' ) KSEC1(58)
+#ifdef LITTLE_ENDIAN
+          WRITE(GRPRSM,2117) HVERSION(5:5)
+#else
+          WRITE(GRPRSM,2117) HVERSION(8:8)
+#endif
+          WRITE(GRPRSM,2118) KSEC1(59)
+          WRITE(GRPRSM,2119) KSEC1(60)
+          WRITE(GRPRSM,2120) KSEC1(61)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 22.
+C       (Couple atmospheric, wave and ocean models)
+C
+        IF (KSEC1(37).EQ.22) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1504) KSEC1(43)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          WRITE(GRPRSM,2201) KSEC1(46)
+          WRITE(GRPRSM,2202) KSEC1(47)
+          WRITE(GRPRSM,2203) KSEC1(48)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 23.
+C       (Couple atmospheric, wave and ocean means)
+C
+        IF (KSEC1(37).EQ.23) THEN
+          WRITE(GRPRSM,1501) KSEC1(42)
+          WRITE(GRPRSM,1504) KSEC1(43)
+          WRITE(GRPRSM,1502) KSEC1(44)
+          WRITE(GRPRSM,1503) KSEC1(45)
+          WRITE(GRPRSM,1601) KSEC1(46)
+          WRITE(GRPRSM,1602) KSEC1(47)
+          WRITE(GRPRSM,1603) KSEC1(48)
+          WRITE(GRPRSM,2201) KSEC1(49)
+          WRITE(GRPRSM,2202) KSEC1(50)
+          WRITE(GRPRSM,2203) KSEC1(51)
+          WRITE(GRPRSM,9502) KSEC1(52)
+          WRITE(GRPRSM,9503) KSEC1(53)
+          IF ( KSEC1(53) .NE. 2 ) WRITE(GRPRSM,9504) KSEC1(54)
+          IF ( KSEC1(53) .NE. 1 ) WRITE(GRPRSM,9505) KSEC1(55)
+C
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 24.
+C       (Couple atmospheric, wave and ocean means)
+C
+        IF (KSEC1(37).EQ.24) THEN
+          WRITE(GRPRSM,2401) KSEC1(42)
+          WRITE(GRPRSM,2402) KSEC1(43)
+          WRITE(GRPRSM,2403) KSEC1(44)
+          WRITE(GRPRSM,2404) KSEC1(45)
+          GOTO 900
+C
+C       ECMWF Local definition 25.
+C       (Couple atmospheric, wave and ocean means)
+C
+        IF (KSEC1(37).EQ.25) THEN
+          WRITE(GRPRSM,2501) KSEC1(42)
+          WRITE(GRPRSM,2502) KSEC1(43)
+          WRITE(GRPRSM,2503) KSEC1(44)
+        ENDIF
+C
+        ENDIF
+C
+C       ECMWF Local definition 50.
+C       (Member State data)
+C
+        IF (KSEC1(37).EQ.50) THEN
+          WRITE(GRPRSM,5001) KSEC1(42)
+          WRITE(GRPRSM,5002) KSEC1(43)
+          WRITE(GRPRSM,5003) KSEC1(44)
+          WRITE(GRPRSM,5004) KSEC1(45)
+          WRITE(GRPRSM,5005) KSEC1(46)
+          WRITE(GRPRSM,5006) KSEC1(47)
+          WRITE(GRPRSM,5007) KSEC1(48)
+          WRITE(GRPRSM,*) '  ECMWF additions'
+          WRITE(GRPRSM,*) '  ---------------'
+          WRITE(GRPRSM,5008) KSEC1(49)
+          WRITE(GRPRSM,5009) KSEC1(50)
+          WRITE(GRPRSM,5010) (KSEC1(JLOOP),JLOOP=51,60)
+          WRITE(GRPRSM,*) '  Optional data'
+          WRITE(GRPRSM,*) '  -------------'
+          WRITE(GRPRSM,5010) (KSEC1(JLOOP),JLOOP=61,106)
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition 191.
+C       (Free format data descriptor)
+C
+        IF (KSEC1(37).EQ.191) THEN
+          WRITE(GRPRSM,19101) KSEC1(44)
+          WRITE(GRPRSM,19102) KSEC1(45)
+          WRITE(GRPRSM,19103) KSEC1(46)
+          WRITE(GRPRSM,19108) KSEC1(51)
+          WRITE(GRPRSM,*) '  Data descriptor bytes'
+          WRITE(GRPRSM,*) '  ---------------------'
+          DO JLOOP = 52, (51+(KSEC1(51)+JPBYTES-1)/JPBYTES)
+            WRITE(GRPRSM,19109) KSEC1(JLOOP)
+          ENDDO
+          GOTO 900
+        ENDIF
+C
+C       ECMWF Local definition not in above selection
+C       (eg defined using templates)
+C
+Cjdc    CALL LDEFPRT(GRPRSM,KSEC1)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9000 FORMAT(' ')
+ 9001 FORMAT(' Section 1 - Product Definition Section.')
+ 9002 FORMAT(' ---------------------------------------')
+ 9100 FORMAT(' Code Table 2 Version Number.         ',I9)
+ 9101 FORMAT(' Originating centre identifier.       ',I9)
+ 9102 FORMAT(' Model identification.                ',I9)
+ 9103 FORMAT(' Grid definition.                     ',I9)
+ 9104 FORMAT(' Flag (Code Table 1)                   ',I8.8)
+ 9105 FORMAT(' Parameter identifier (Code Table 2). ',I9)
+ 9106 FORMAT(' Type of level (Code Table 3).        ',I9)
+ 9107 FORMAT(' Value 1 of level (Code Table 3).     ',I9)
+ 9108 FORMAT(' Value 2 of level (Code Table 3).     ',I9)
+ 9109 FORMAT(' Year of reference time of data.      ',I9,'  (',I4,')' )
+ 9110 FORMAT(' Month of reference time of data.     ',I9)
+ 9111 FORMAT(' Day of reference time of data.       ',I9)
+ 9112 FORMAT(' Hour of reference time of data.      ',I9)
+ 9113 FORMAT(' Minute of reference time of data.    ',I9)
+ 9114 FORMAT(' Time unit (Code Table 4).            ',I9)
+ 9115 FORMAT(' Time range one.                      ',I9)
+ 9116 FORMAT(' Time range two.                      ',I9)
+ 9117 FORMAT(' Time range indicator (Code Table 5)  ',I9)
+ 9118 FORMAT(' Number averaged.                     ',I9)
+ 9119 FORMAT(' Number missing from average.         ',I9)
+ 9120 FORMAT(' Century of reference time of data.   ',I9)
+ 9121 FORMAT(' Units decimal scaling factor.        ',I9)
+ 9122 FORMAT(' Century of reference time of data.   Not given')
+ 9123 FORMAT(' Sub-centre identifier.               ',I9)
+ 9206 FORMAT(' Satellite identifier.                ',I9)
+ 9207 FORMAT(' Spectral band.                       ',I9)
+C
+ 9301 FORMAT(' ECMWF local usage identifier.        ',I9)
+ 9302 FORMAT(' Class.                               ',I9)
+ 9303 FORMAT(' Type.                                ',I9)
+ 9304 FORMAT(' Stream.                              ',I9)
+ 9305 FORMAT(' Version number or Experiment identifier.  ',A1,A1,A1,A1)
+ 9306 FORMAT(' Satellite spectral band.             ',I9)
+ 9307 FORMAT(' Function code.                       ',I9)
+ 9308 FORMAT(' Simulation number.                   ',I9)
+ 9309 FORMAT(' Total number of simulations.         ',I9)
+ 9310 FORMAT(' Forecast number.                     ',I9)
+ 9311 FORMAT(' Total number of forecasts.           ',I9)
+ 9312 FORMAT(' Cluster number.                      ',I9)
+ 9313 FORMAT(' Total number of clusters.            ',I9)
+ 9314 FORMAT(' Clustering method.                   ',I9)
+ 9315 FORMAT(' Start time step when clustering.     ',I9)
+ 9316 FORMAT(' End time step when clustering.       ',I9)
+ 9317 FORMAT(' Northern latitude of domain.         ',I9)
+ 9318 FORMAT(' Western longitude of domain.         ',I9)
+ 9319 FORMAT(' Southern latitude of domain.         ',I9)
+ 9320 FORMAT(' Eastern longitude of domain.         ',I9)
+ 9321 FORMAT(' Operational forecast in cluster      ',I9)
+ 9322 FORMAT(' Number of forecasts in cluster.      ',I9)
+ 9323 FORMAT(' Forecast number                      ',I9)
+ 9324 FORMAT(' Control forecast in cluster          ',I9)
+C
+C       ECMWF Local definition 4.
+C
+ 9401 FORMAT(' System number.                       ',I9)
+ 9402 FORMAT(' Method number.                       ',I9)
+ 9403 FORMAT(' Space unit flag.                     ',I9)
+ 9404 FORMAT(' Vertical coordinate definition.      ',I9)
+ 9405 FORMAT(' Horizontal coordinate definition.    ',I9)
+ 9406 FORMAT(' Time unit flag.                      ',I9)
+ 9407 FORMAT(' Time coordinate definition.          ',I9)
+ 9408 FORMAT(' Method used for analysis or forecast.',I9)
+C
+ 9411 FORMAT(' Mixed coordinate field flag.         ',I9)
+ 9412 FORMAT(' Coordinate 1 flag.                   ',I9)
+ 9413 FORMAT(' Averaging flag.                      ',I9)
+ 9414 FORMAT(' Position of level 1.                 ',I9)
+ 9415 FORMAT(' Position of level 2.                 ',I9)
+ 9416 FORMAT(' Coordinate 2 flag.                   ',I9)
+C
+ 9421 FORMAT(' Coordinate 3 flag (x-axis)           ',I9)
+ 9422 FORMAT(' Coordinate 4 flag (y-axis)           ',I9)
+ 9423 FORMAT(' Coordinate 4 of first grid point.   ',I10)
+ 9424 FORMAT(' Coordinate 3 of first grid point.   ',I10)
+ 9425 FORMAT(' Coordinate 4 of last grid point.    ',I10)
+ 9426 FORMAT(' Coordinate 3 of last grid point.    ',I10)
+ 9427 FORMAT(' i - increment.                       ',I9)
+ 9428 FORMAT(' j - increment.                       ',I9)
+ 9429 FORMAT(' Flag for irregular grid coordinates. ',I9)
+ 9430 FORMAT(' Flag for normal or staggered grids.  ',I9)
+C
+ 9441 FORMAT(' Further information flag.            ',I9)
+C
+ 9451 FORMAT(' No. entries in horizontal coordinate ',I9)
+ 9452 FORMAT(' No. entries in mixed coordinate defn.',I9)
+ 9453 FORMAT(' No. entries in grid coordinate list. ',I9)
+ 9454 FORMAT(' No. entries in auxiliary array.      ',I9)
+C
+ 9461 FORMAT('  ',I12)
+ 9462 FORMAT(' Reference date                       ',I9)
+ 9463 FORMAT(' Climate date - from                  ',I9)
+ 9464 FORMAT(' Climate date - to                    ',I9)
+C
+C       ECMWF Local definition 5.
+C
+ 9500 FORMAT(' Forecast probability number          ',I9)
+ 9501 FORMAT(' Total number of forecast probabilities ',I7)
+ 9502 FORMAT(' Threshold units decimal scale factor ',I9)
+ 9503 FORMAT(' Threshold indicator(1=lower,2=upper,3=both) ',I2)
+ 9504 FORMAT(' Lower threshold value                ',I9)
+ 9505 FORMAT(' Upper threshold value                ',I9)
+C
+C       ECMWF Local definition 6.
+C
+ 9601 FORMAT(' Date of SST field used               ',I9)
+ 9602 FORMAT(' Type of SST field (= climatology)    ',I9)
+ 9603 FORMAT(' Type of SST field (= 1/1 degree)     ',I9)
+ 9604 FORMAT(' Type of SST field (= 2/2 degree)     ',I9)
+ 9605 FORMAT(' Number of ICE fields used:           ',I9)
+ 9606 FORMAT(' Date of ICE field',I3,'                 ',I9)
+ 9607 FORMAT(' Satellite number (ICE field',I3,')      ',I9)
+C
+C       ECMWF Local definition 7.
+C
+ 9700 FORMAT(' Forecast number                      ',I9)
+ 9701 FORMAT(' Iteration number                     ',I9)
+ 9702 FORMAT(' Total number of diagnostics          ',I9)
+ 9703 FORMAT(' No.interations in diag. minimisation ',I9)
+ 9704 FORMAT(' Domain(0=Global,1=Europe,2=N.Hem.,3=S.Hem.) ',I2)
+ 9705 FORMAT(' Diagnostic number                    ',I9)
+C
+C       ECMWF Local definition 8.
+C
+ 9800 FORMAT(' ERA section 1 octet ',I2,'.              ',I9)
+ 9801 FORMAT(' Interval between reference times     ',I9)
+C
+C       ECMWF Local definition 9.
+C
+ 9943 FORMAT(' Number of iterations                 ',I9)
+ 9944 FORMAT(' Number of singular vectors computed  ',I9)
+ 9945 FORMAT(' Norm used at initial time            ',I9)
+ 9946 FORMAT(' Norm used at final time              ',I9)
+ 9947 FORMAT(' Multiplication factor                ',I9)
+ 9948 FORMAT(' Latitude of north-west corner        ',I9)
+ 9949 FORMAT(' Longitude of north-west corner       ',I9)
+ 9950 FORMAT(' Latitude of south-east corner        ',I9)
+ 9951 FORMAT(' Longitude of south-east corner       ',I9)
+ 9952 FORMAT(' Accuracy                             ',I9)
+ 9953 FORMAT(' Number of singular vectors evolved   ',I9)
+ 9954 FORMAT(' Ritz number one                      ',I9)
+ 9955 FORMAT(' Ritz number two                      ',I9)
+ 9960 FORMAT(' Perturbed ensemble forecast number   ',I9)
+ 9961 FORMAT(' Initial state perturbation number    ',I9)
+ 9962 FORMAT(' Singular vector number               ',I9)
+C
+C       ECMWF Local definition 10.
+C
+ 1001 FORMAT(' Tube number                          ',I9)
+ 1002 FORMAT(' Total number of tubes                ',I9)
+ 1003 FORMAT(' Central cluster definition           ',I9)
+ 1004 FORMAT(' Parameter                            ',I9)
+ 1005 FORMAT(' Type of level                        ',I9)
+ 1006 FORMAT(' Northern latitude of domain of tubing',I9)
+ 1007 FORMAT(' Western longitude of domain of tubing',I9)
+ 1008 FORMAT(' Southern latitude of domain of tubing',I9)
+ 1009 FORMAT(' Eastern longitude of domain of tubing',I9)
+ 1010 FORMAT(' Tube number of operational forecast  ',I9)
+ 1011 FORMAT(' Tube number of control forecast      ',I9)
+ 1012 FORMAT(' Height/pressure of level             ',I9)
+ 1013 FORMAT(' Reference step                       ',I9)
+ 1014 FORMAT(' Radius of central cluster            ',I9)
+ 1015 FORMAT(' Ensemble standard deviation          ',I9)
+ 1016 FORMAT(' Dist.of tube extreme to ensemble mean',I9)
+ 1017 FORMAT(' Number of forecasts in the tube      ',I9)
+ 1018 FORMAT(' List of ensemble forecast numbers:')
+ 1019 FORMAT('    ',I9)
+C
+C       ECMWF Local definition 11.
+C
+ 1101 FORMAT(' Details of analysis which used the supplementary data:')
+ 1103 FORMAT('   Class                              ',I9)
+ 1104 FORMAT('   Type                               ',I9)
+ 1105 FORMAT('   Stream                             ',I9)
+ 1106 FORMAT('   Version number/experiment identifier:   ',A1,A1,A1,A1)
+ 1107 FORMAT('   Year                               ',I9,'  (',I4,')')
+ 1108 FORMAT('   Month                              ',I9)
+ 1109 FORMAT('   Day                                ',I9)
+ 1110 FORMAT('   Hour                               ',I9)
+ 1111 FORMAT('   Minute                             ',I9)
+ 1112 FORMAT('   Century                            ',I9)
+ 1113 FORMAT('   Originating centre                 ',I9)
+ 1114 FORMAT('   Sub-centre                         ',I9)
+C
+C       ECMWF Local definition 12.
+C
+ 1201 FORMAT(' (Mean, average, etc)') 
+ 1203 FORMAT(' Start date of the period              ', I8)
+ 1204 FORMAT(' Start time of the period                  ', I4.4)
+ 1205 FORMAT(' Finish date of the period             ', I8)
+ 1206 FORMAT(' Finish time of the period                 ', I4.4)
+ 1207 FORMAT(' Verifying date of the period          ', I8)
+ 1208 FORMAT(' Verifying time of the period              ', I4.4)
+ 1209 FORMAT(' Code showing method                   ', I8)
+ 1210 FORMAT(' Number of different time intervals used  ', I5)
+ 1211 FORMAT(' List of different time intervals used:')
+ 1212 FORMAT('  - interval ',I5.4, ' used       once')
+ 1213 FORMAT('  - interval ',I5.4, ' used       twice')
+ 1214 FORMAT('  - interval ',I5.4, ' used ', I5, ' times')
+
+C
+C       ECMWF Local definition 13.
+C
+ 1301 FORMAT(' Direction number                     ',I9)
+ 1302 FORMAT(' Frequency number                     ',I9)
+ 1303 FORMAT(' Total number of directions           ',I9)
+ 1304 FORMAT(' Total number of frequencies          ',I9)
+ 1305 FORMAT(' Scale factor applied to directions   ',I9)
+ 1306 FORMAT(' Scale factor applied to frequencies  ',I9)
+ 1307 FORMAT(' List of directions:')
+ 1308 FORMAT(' ', I2.2,':', F15.7, '   <-- this field value')
+ 1309 FORMAT(' ', I2.2,':', F15.7)
+ 1310 FORMAT(' List of frequencies:')
+ 1311 FORMAT(' System number (65535 = missing)      ',I9)
+ 1312 FORMAT(' Method number (65535 = missing)      ',I9)
+ 1313 FORMAT(' Reference date                       ',I9)
+ 1314 FORMAT(' Climate date (from)                  ',I9)
+ 1315 FORMAT(' Climate date (to)                    ',I9)
+C
+C       ECMWF Local definition 14.
+C
+ 1401 FORMAT(' Channel number                       ',I9)
+ 1402 FORMAT(' Scale factor applied to frequencies  ',I9)
+ 1403 FORMAT(' Total number of frequencies          ',I9)
+ 1404 FORMAT(' List of frequencies:')
+ 1405 FORMAT(' ', I3,':', F15.9, '   <-- this channel')
+ 1406 FORMAT(' ', I3,':', F15.9)
+C
+C       ECMWF Local definition 15.
+C
+ 1501 FORMAT(' Ensemble member number               ',I9)
+ 1502 FORMAT(' System number                        ',I9)
+ 1503 FORMAT(' Method number                        ',I9)
+ 1504 FORMAT(' Total number of ensembles            ',I9)
+C
+C       ECMWF Local definition 16.
+C
+ 1601 FORMAT(' Verifying month                      ',I9)
+ 1602 FORMAT(' Averaging period                     ',I9)
+ 1603 FORMAT(' Forecast month (0 = not present)     ',I9)
+C
+C       ECMWF Local definition 17.
+C
+ 1701 FORMAT(' Date of sst/ice field used           ',I9)
+ 1702 FORMAT(' Type of sst/ice field (= climatology)',I9)
+ 1703 FORMAT(' Type of sst/ice field (= 1/1 degree) ',I9)
+ 1704 FORMAT(' Type of sst/ice field (= 2/2 degree) ',I9)
+ 1705 FORMAT(' Number of ICE fields used:           ',I9)
+ 1706 FORMAT(' Date of ICE field',I3,'                 ',I9)
+ 1707 FORMAT(' Satellite number (ICE field',I3,')      ',I9)
+C
+C       ECMWF Local definition 18.
+C
+ 1801 FORMAT(' Ensemble forecast number             ',I9)
+ 1802 FORMAT(' Number of forecasts in ensemble      ',I9)
+ 1803 FORMAT(' Data origin                          ',I9)
+ 1804 FORMAT(' Model identifier of forecast used         ',A1,A1,A1,A1)
+ 1805 FORMAT(' Number of analyses in start analysis ',I9)
+ 1806 FORMAT('   ',A1,A1,A1,A1)
+C
+C       ECMWF Local definition 19.
+C
+ 1901 FORMAT(' Zero, for Mars compatibility         ',I9)
+ 1902 FORMAT(' Ensemble size                        ',I9)
+ 1903 FORMAT(' Power of 10 used to scale weight (F) ',I9)
+ 1904 FORMAT(' Weight*10**F applied to climate month 1',I7)
+ 1905 FORMAT(' First month used for climate month 1 ',I9)
+ 1906 FORMAT(' Last month used for climate month 1  ',I9)
+ 1907 FORMAT(' First month used for climate month 2 ',I9)
+ 1908 FORMAT(' Last month used for climate month 2  ',I9)
+ 1909 FORMAT(' EFI order                            ',I9)
+C
+C       ECMWF Local definition 20.
+C
+ 2001 FORMAT(' Iteration                            ',I9)
+ 2002 FORMAT(' Total number of iterations           ',I9)
+C
+C       ECMWF Local definition 21.
+C
+ 2101 FORMAT(' Forecast/sing.vector/flight number   ',I9)
+ 2102 FORMAT(' Number of iterations                 ',I9)
+ 2103 FORMAT(' Number of singular vectors computed  ',I9)
+ 2104 FORMAT(' Norm used at initial time            ',I9)
+ 2105 FORMAT(' Norm used at final time              ',I9)
+ 2106 FORMAT(' Lat-lon multiplication factor        ',I9)
+ 2107 FORMAT(' Area north-west latitude             ',I9)
+ 2108 FORMAT(' Area north-west longitude            ',I9)
+ 2109 FORMAT(' Area south-east latitude             ',I9)
+ 2110 FORMAT(' Area south-east longitude            ',I9)
+ 2111 FORMAT(' Accuracy                             ',I9)
+ 2112 FORMAT(' Number of singular vectors evolved   ',I9)
+ 2113 FORMAT(' Ritz number 1                        ',I9)
+ 2114 FORMAT(' Ritz number 2                        ',I9)
+ 2115 FORMAT(' Observation offset period            ',I9)
+ 2116 FORMAT(' Forecast lead time                   ',I9)
+ 2117 FORMAT(' Domain                                       ',A1)
+ 2118 FORMAT(' Method number                        ',I9)
+ 2119 FORMAT(' Total forecasts in ensemble          ',I9)
+ 2120 FORMAT(' Shape of verification region (flag)  ',I9)
+C
+C       ECMWF Local definition 22 and 23.
+C
+ 2201 FORMAT(' Reference date                       ',I9)
+ 2202 FORMAT(' Climate date (from)                  ',I9)
+ 2203 FORMAT(' Climate date (to)                    ',I9)
+C
+C       ECMWF Local definition 24
+C
+ 2401 FORMAT(' Satellite identifier  (WMO table C-5)',I9)
+ 2402 FORMAT(' Instrument identifier (WMO table C-8)',I9)
+ 2403 FORMAT(' Channel number                       ',I9)
+ 2404 FORMAT(' Function code                        ',I9)
+C
+C       ECMWF Local definition 25
+C
+ 2501 FORMAT(' Component index                      ',I9)
+ 2502 FORMAT(' Number of components                 ',I9)
+ 2503 FORMAT(' Model error type                     ',I9)
+C
+C       ECMWF Local definition 50.
+C
+ 5001 FORMAT(' Number                               ',I9)
+ 5002 FORMAT(' Total                                ',I9)
+ 5003 FORMAT(' Model identifier                     ',I9)
+ 5004 FORMAT(' Latitude of NW corner (degrees*10^6) ',I9)
+ 5005 FORMAT(' Longitude of NW corner(degrees*10^6) ',I9)
+ 5006 FORMAT(' Latitude of SE corner (degrees*10^6) ',I9)
+ 5007 FORMAT(' Longitude of SE corner(degrees*10^6) ',I9)
+ 5008 FORMAT(' Original parameter number            ',I9)
+ 5009 FORMAT(' Original parameter table number      ',I9)
+ 5010 FORMAT(10(1X,Z8.8))
+C
+C       ECMWF Local definition 190.
+C
+19001 FORMAT(' Number of ECMWF local definitions    ',I9)
+19002 FORMAT(' ECMWF local definition number        ',I9)
+19003 FORMAT(' Number of bytes in local definition  ',I9)
+#ifdef INTEGER_8
+19004 FORMAT(3X,Z16.16)
+#else
+19004 FORMAT(3X,Z8.8)
+#endif
+C
+C       ECMWF Local definition 191.
+C
+19101 FORMAT(' Format version major number          ',I9)
+19102 FORMAT(' Format version minor number          ',I9)
+19103 FORMAT(' Original sub-centre identifier       ',I9)
+19108 FORMAT(' Number of bytes of data descriptor   ',I9)
+#ifdef INTEGER_8
+19109 FORMAT(3X,Z16.16)
+#else
+19109 FORMAT(3X,Z8.8)
+#endif
+C
+      END
diff --git a/gribex/grprs2.F b/gribex/grprs2.F
new file mode 100755
index 0000000..38abb8e
--- /dev/null
+++ b/gribex/grprs2.F
@@ -0,0 +1,546 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS2 (KSEC0,KSEC2,PSEC2)
+C
+C---->
+C**** GRPRS2 - Print information from Section 2 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Grid Description
+C     Section (Section 2) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS2 (KSEC0,KSEC2,PSEC2)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC0 - Array of decoded integers from Section 0.
+C
+C     KSEC2 - Array of decoded integers from Section 2.
+C
+C     PSEC2 - Array of decoded reals from Section 2.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     Flag fields are printed in binary representation
+C     Other fields as integers or reals, as appropriate.
+C     Fields printed depend on GRIB Edition.
+C
+C
+C     Externals.
+C     ----------
+C
+C     PRTBIN   - Print binary representation of value.
+C     PTQUASI  - Print quasi-grid data.
+C
+C     Common block GRPRSCM.
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Only data representation types catered for are Gaussian
+C     grid, latitude/longitude grid, Spherical Harmonics,
+C     Polar stereographic and Space view perspective.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy    ECMWF 18.06.91
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy    ECMWF        02.09.91
+C     Polar stereographic print added.
+C
+C     J. Hennessy    ECMWF        25.09.91
+C     Space view perspective print added.
+C
+C     J.D.Chambers   ECMWF        21.02.95
+C     Quasi-regular lat/long grids added.
+C
+C     J.D.Chambers     ECMWF      03.04.95
+C     Allow Lambert conformal.
+C
+C     J.D.Chambers   ECMWF    June 2002
+C     Add option to set output stream number using environment variable
+C     GRPRS_STREAM
+C
+C     J.D.Chambers     ECMWF      July 2004
+C     Allow Mercator
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KSEC0,KSEC2
+      DIMENSION KSEC0(*)
+      DIMENSION KSEC2(*)
+      REAL PSEC2
+      DIMENSION PSEC2(*)
+C
+C     Local variables
+C
+      INTEGER I, IBIT, IEDIT, IERR, IOUT, IRESOL
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print GRIB Edition number.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IEDIT = KSEC0(2)
+      WRITE(GRPRSM,9000)
+      WRITE(GRPRSM,9001)
+      WRITE(GRPRSM,9002)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Print spherical harmonic data.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF (KSEC2(1).EQ.50 .OR. KSEC2(1).EQ.60 .OR.
+     X    KSEC2(1).EQ.70 .OR. KSEC2(1).EQ.80) THEN
+        WRITE(GRPRSM,9111) KSEC2(1)
+        WRITE(GRPRSM,9102) KSEC2(2)
+        WRITE(GRPRSM,9103) KSEC2(3)
+        WRITE(GRPRSM,9104) KSEC2(4)
+        WRITE(GRPRSM,9105) KSEC2(5)
+        WRITE(GRPRSM,9106) KSEC2(6)
+        DO I = 7, 11
+          WRITE(GRPRSM,9107) KSEC2(I)
+        ENDDO
+        WRITE(GRPRSM,9212) KSEC2(12)
+	GO TO 800
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3 . Print Gaussian grid data.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF (KSEC2(1).EQ.4 .OR. KSEC2(1).EQ.14 .OR.
+     X    KSEC2(1).EQ.24 .OR. KSEC2(1).EQ.34) THEN
+	WRITE(GRPRSM,9200)
+        WRITE(GRPRSM,9112) KSEC2(1)
+C
+C       Quasi-regular grids introduced in Edition 1.
+C
+	IF (KSEC2(17).EQ.0.OR.IEDIT.LT.1) THEN
+          WRITE(GRPRSM,9201) KSEC2(2)
+	ELSE
+          CALL PTQUASI(KSEC2)
+        ENDIF
+        WRITE(GRPRSM,9202) KSEC2(3)
+        WRITE(GRPRSM,9203) KSEC2(4)
+        WRITE(GRPRSM,9204) KSEC2(5)
+        IBIT = 8
+	IRESOL = KSEC2(6) + KSEC2(18) + KSEC2(19)
+        CALL PRTBIN (IRESOL,IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9205) IOUT
+        WRITE(GRPRSM,9206) KSEC2(7)
+        WRITE(GRPRSM,9207) KSEC2(8)
+C
+C       Print increment if given.
+C
+        IF (KSEC2(6).EQ.128) THEN
+          WRITE(GRPRSM,9208) KSEC2(9)
+	ELSE
+	  WRITE(GRPRSM,9236)
+        ENDIF
+        WRITE(GRPRSM,9210) KSEC2(10)
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+        WRITE(GRPRSM,9212) KSEC2(12)
+	GO TO 800
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4 . Print Latitude / longitude grid data.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF (KSEC2(1).EQ.0 .OR. KSEC2(1).EQ.10 .OR.
+     X    KSEC2(1).EQ.20 .OR. KSEC2(1).EQ.30) THEN
+	WRITE(GRPRSM,9200)
+        WRITE(GRPRSM,9113) KSEC2(1)
+C
+C       Quasi-regular lat/long grids also possible.
+C
+	IF (KSEC2(17).EQ.0) THEN
+          WRITE(GRPRSM,9201) KSEC2(2)
+	ELSE
+          CALL PTQUASI(KSEC2)
+        ENDIF
+        WRITE(GRPRSM,9202) KSEC2(3)
+        WRITE(GRPRSM,9203) KSEC2(4)
+        WRITE(GRPRSM,9204) KSEC2(5)
+        IBIT = 8
+	IRESOL = KSEC2(6) + KSEC2(18) + KSEC2(19)
+        CALL PRTBIN (IRESOL,IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9205) IOUT
+        WRITE(GRPRSM,9206) KSEC2(7)
+        WRITE(GRPRSM,9207) KSEC2(8)
+C
+C       Print increment if given.
+C
+        IF ( KSEC2(9) .LT. 0) THEN
+          WRITE(GRPRSM,9236)
+        ELSE
+          WRITE(GRPRSM,9208) KSEC2(9)
+        ENDIF
+        IF ( KSEC2(10) .LT. 0) THEN
+          WRITE(GRPRSM,9237)
+        ELSE
+          WRITE(GRPRSM,9209) KSEC2(10)
+        ENDIF
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+        WRITE(GRPRSM,9212) KSEC2(12)
+	GO TO 800
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5 . Print polar stereographic data.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF (KSEC2(1).EQ.5) THEN
+	WRITE(GRPRSM,9200)
+        WRITE(GRPRSM,9114) KSEC2(1)
+        WRITE(GRPRSM,9301) KSEC2(2)
+        WRITE(GRPRSM,9302) KSEC2(3)
+        WRITE(GRPRSM,9203) KSEC2(4)
+        WRITE(GRPRSM,9204) KSEC2(5)
+        IBIT = 8
+	IRESOL = KSEC2(18) + KSEC2(19)
+        CALL PRTBIN (IRESOL,IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9205) IOUT
+        WRITE(GRPRSM,9303) KSEC2(7)
+        WRITE(GRPRSM,9304) KSEC2(9)
+        WRITE(GRPRSM,9305) KSEC2(10)
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+        WRITE(GRPRSM,9212) KSEC2(12)
+        WRITE(GRPRSM,9306) KSEC2(13)
+	GO TO 800
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6 . Print Lambert conformal data.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+      IF (KSEC2(1).EQ.3) THEN
+C
+        WRITE(GRPRSM,9200)
+        WRITE(GRPRSM,9115) KSEC2(1)
+        WRITE(GRPRSM,9301) KSEC2(2)
+        WRITE(GRPRSM,9302) KSEC2(3)
+        WRITE(GRPRSM,9203) KSEC2(4)
+        WRITE(GRPRSM,9204) KSEC2(5)
+        IBIT = 8
+        IRESOL = KSEC2(18) + KSEC2(19) + KSEC2(6)
+        CALL PRTBIN (IRESOL,IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9205) IOUT
+        WRITE(GRPRSM,9303) KSEC2(7)
+        WRITE(GRPRSM,9304) KSEC2(9)
+        WRITE(GRPRSM,9305) KSEC2(10)
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+        WRITE(GRPRSM,9212) KSEC2(12)
+        WRITE(GRPRSM,9306) KSEC2(13)
+        WRITE(GRPRSM,9214) KSEC2(14)
+        WRITE(GRPRSM,9215) KSEC2(15)
+        WRITE(GRPRSM,9216) KSEC2(20)
+        WRITE(GRPRSM,9217) KSEC2(21)
+        GO TO 800
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7 . Print space view perspective or orthographic data.
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+      IF (KSEC2(1).EQ.90) THEN
+        WRITE(GRPRSM,9200)
+        WRITE(GRPRSM,9116) KSEC2(1)
+        WRITE(GRPRSM,9301) KSEC2(2)
+        WRITE(GRPRSM,9302) KSEC2(3)
+        WRITE(GRPRSM,9310) KSEC2(4)
+        WRITE(GRPRSM,9311) KSEC2(5)
+        IBIT = 8
+	IRESOL = KSEC2(18) + KSEC2(19)
+        WRITE(GRPRSM,9312) KSEC2(7)
+        WRITE(GRPRSM,9313) KSEC2(8)
+        WRITE(GRPRSM,9314) KSEC2(9)
+        WRITE(GRPRSM,9315) KSEC2(10)
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+        WRITE(GRPRSM,9212) KSEC2(12)
+        WRITE(GRPRSM,9303) KSEC2(13)
+        WRITE(GRPRSM,9316) KSEC2(14)
+        WRITE(GRPRSM,9317) KSEC2(15)
+        WRITE(GRPRSM,9318) KSEC2(16)
+        WRITE(GRPRSM,9319) KSEC2(18)
+        WRITE(GRPRSM,9320) KSEC2(19)
+	GO TO 800
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.5 . Print ocean data
+C     -----------------------------------------------------------------|
+C
+  750 CONTINUE
+C
+      IF( KSEC2(1).EQ.192 ) THEN
+        WRITE(GRPRSM,9117) KSEC2(1)
+        IF( KSEC2(2).EQ. 32767 ) THEN
+          WRITE(GRPRSM,9501) KSEC2(2)
+        ELSE
+          WRITE(GRPRSM,9502) KSEC2(2)
+        ENDIF
+C
+        IF( KSEC2(3).EQ. 32767 ) THEN
+          WRITE(GRPRSM,9503) KSEC2(3)
+        ELSE
+          WRITE(GRPRSM,9504) KSEC2(3)
+        ENDIF
+C
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+	GO TO 800
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.6 . Print mercator data
+C     -----------------------------------------------------------------|
+C
+  760 CONTINUE
+C
+      IF (KSEC2(1).EQ.1) THEN
+	WRITE(GRPRSM,9200)
+        WRITE(GRPRSM,9118) KSEC2(1)
+        WRITE(GRPRSM,9201) KSEC2(2)
+        WRITE(GRPRSM,9202) KSEC2(3)
+        WRITE(GRPRSM,9203) KSEC2(4)
+        WRITE(GRPRSM,9204) KSEC2(5)
+        IBIT = 8
+	IRESOL = KSEC2(6) + KSEC2(18) + KSEC2(19)
+        CALL PRTBIN (IRESOL,IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9205) IOUT
+        WRITE(GRPRSM,9206) KSEC2(7)
+        WRITE(GRPRSM,9207) KSEC2(8)
+        WRITE(GRPRSM,9218) KSEC2(9)
+        WRITE(GRPRSM,9208) KSEC2(13)
+        WRITE(GRPRSM,9209) KSEC2(14)
+        IBIT = 8
+        CALL PRTBIN (KSEC2(11),IBIT,IOUT,IERR)
+        WRITE(GRPRSM,9211) IOUT
+        WRITE(GRPRSM,9212) KSEC2(12)
+	GO TO 800
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Drop through to here => representation type not catered for.
+C     -----------------------------------------------------------------|
+C
+      WRITE(GRPRSM,*)
+     X  'GRPRS2 :Data representation type not catered for -', KSEC2(1)
+C
+      GO TO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 8 . Print vertical coordinate parameters,
+C                 rotated grid information,
+C                 stretched grid information, if any.
+C     -----------------------------------------------------------------|
+C
+  800 CONTINUE
+C
+C     Vertical coordinate parameters ...
+C
+      IF (KSEC2(12).NE.0) THEN
+        WRITE(GRPRSM,9000)
+        WRITE(GRPRSM,9400)
+        WRITE(GRPRSM,9401)
+        DO I = 11, (KSEC2(12)+10)
+          WRITE(GRPRSM,9402) PSEC2(I)
+        ENDDO
+      ENDIF
+C
+C     Rotated and stretched grids introduced in Edition 1.
+C
+      IF (IEDIT.LT.1) GO TO 900
+C
+C*    Rotated grid information ...
+C
+      IF (KSEC2(1).EQ.10 .OR. KSEC2(1).EQ.30 .OR.
+     X    KSEC2(1).EQ.14 .OR. KSEC2(1).EQ.34 .OR.
+     X    KSEC2(1).EQ.60 .OR. KSEC2(1).EQ.80 .OR.
+     X    KSEC2(1).EQ.30) THEN
+        WRITE(GRPRSM,9000)
+        WRITE(GRPRSM,9220) KSEC2(13)
+        WRITE(GRPRSM,9221) KSEC2(14)
+        WRITE(GRPRSM,9222) PSEC2(1)
+      ENDIF
+C
+C*    Stretched grid information ...
+C
+      IF (KSEC2(1).EQ.20 .OR. KSEC2(1).EQ.30 .OR.
+     X    KSEC2(1).EQ.24 .OR. KSEC2(1).EQ.34 .OR.
+     X    KSEC2(1).EQ.70 .OR. KSEC2(1).EQ.80) THEN
+        WRITE(GRPRSM,9000)
+        WRITE(GRPRSM,9230) KSEC2(15)
+        WRITE(GRPRSM,9231) KSEC2(16)
+        WRITE(GRPRSM,9232) PSEC2(2)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9000 FORMAT (1H )
+ 9001 FORMAT (1H ,'Section 2 - Grid Description Section.')
+ 9002 FORMAT (1H ,'-------------------------------------')
+ 9102 FORMAT (1H ,'J - Pentagonal resolution parameter.         ',I9)
+ 9103 FORMAT (1H ,'K - Pentagonal resolution parameter.         ',I9)
+ 9104 FORMAT (1H ,'M - Pentagonal resolution parameter.         ',I9)
+ 9105 FORMAT (1H ,'Representation type (Table 9)                ',I9)
+ 9106 FORMAT (1H ,'Representation mode (Table 10).              ',I9)
+ 9107 FORMAT (1H ,'Not used.                                    ',I9)
+ 9111 FORMAT (1H ,'Data represent type = spectral     (Table 6) ',I9)
+ 9112 FORMAT (1H ,'Data represent type = gaussian     (Table 6) ',I9)
+ 9113 FORMAT (1H ,'Data represent type = lat/long     (Table 6) ',I9)
+ 9114 FORMAT (1H ,'Data represent type = polar stereo (Table 6) ',I9)
+ 9115 FORMAT (1H ,'Data represent type = Lambert      (Table 6) ',I9)
+ 9116 FORMAT (1H ,'Data represent type = space/ortho  (Table 6) ',I9)
+ 9117 FORMAT (1H ,'Data represent type = ECMWF ocean  (Table 6) ',I9)
+ 9118 FORMAT (1H ,'Data represent type = Mercator  (Table 6)    ',I9)
+C
+ 9200 FORMAT (1H ,'(Southern latitudes and Western longitudes',
+     C            ' are negative.)')
+ 9201 FORMAT (1H ,'Number of points along a parallel.           ',I9)
+ 9202 FORMAT (1H ,'Number of points along a meridian.           ',I9)
+ 9203 FORMAT (1H ,'Latitude of first grid point.                ',I9)
+ 9204 FORMAT (1H ,'Longitude of first grid point.               ',I9)
+ 9205 FORMAT (1H ,'Resolution and components flag.               ',I8.8)
+ 9206 FORMAT (1H ,'Latitude of last grid point.                 ',I9)
+ 9207 FORMAT (1H ,'Longitude of last grid point.                ',I9)
+ 9208 FORMAT (1H ,'i direction (East-West) increment.           ',I9)
+ 9209 FORMAT (1H ,'j direction (North-South) increment.         ',I9)
+ 9210 FORMAT (1H ,'Number of parallels between pole and equator.',I9)
+ 9211 FORMAT (1H ,'Scanning mode flags (Code Table 8)            ',I8.8)
+ 9212 FORMAT (1H ,'Number of vertical coordinate parameters.    ',I9)
+C
+ 9214 FORMAT (1H ,'Latitude intersection 1 - Latin 1 -.         ',I9)
+ 9215 FORMAT (1H ,'Latitude intersection 2 - Latin 2 -.         ',I9)
+ 9216 FORMAT (1H ,'Latitude of Southern Pole.                   ',I9)
+ 9217 FORMAT (1H ,'Longitude of Southern Pole.                  ',I9)
+ 9218 FORMAT (1H ,'Latitude projection intersects Earth(Latin)  ',I9)
+C
+ 9220 FORMAT (1H ,'Latitude of southern pole of rotation.       ',I9)
+ 9221 FORMAT (1H ,'Longitude of southern pole of rotation.      ',I9)
+ 9222 FORMAT (1H ,'Angle of rotation.                     ',F20.10)
+C
+ 9230 FORMAT (1H ,'Latitude of pole of stretching.              ',I9)
+ 9231 FORMAT (1H ,'Longitude of pole of stretching.             ',I9)
+ 9232 FORMAT (1H ,'Stretching factor.                     ',F20.10)
+ 9233 FORMAT (1H ,'Number of points along a parallel varies.')
+ 9235 FORMAT (1H , I5,16X,A10)
+ 9236 FORMAT (1H ,'i direction (East-West) increment',
+     X        '            Not given')
+ 9237 FORMAT (1H ,'j direction (North-South) increment',
+     X        '          Not given')
+C
+ 9301 FORMAT (1H ,'Number of points along X axis.               ',I9)
+ 9302 FORMAT (1H ,'Number of points along Y axis.               ',I9)
+ 9303 FORMAT (1H ,'Orientation of the grid.                     ',I9)
+ 9304 FORMAT (1H ,'X direction increment.                       ',I9)
+ 9305 FORMAT (1H ,'Y direction increment.                       ',I9)
+ 9306 FORMAT (1H ,'Projection centre flag.                      ',I9)
+C
+ 9310 FORMAT (1H ,'Latitude of sub-satellite point.             ',I9)
+ 9311 FORMAT (1H ,'Longitude of sub-satellite point.            ',I9)
+ 9312 FORMAT (1H ,'Diameter of the earth in x direction.        ',I9)
+ 9313 FORMAT (1H ,'Diameter of the earth in y direction.        ',I9)
+ 9314 FORMAT (1H ,'X coordinate of sub-satellite point.         ',I9)
+ 9315 FORMAT (1H ,'Y coordinate of sub-satellite point.         ',I9)
+ 9316 FORMAT (1H ,'Altitude of the camera.                      ',I9)
+ 9317 FORMAT (1H ,'Y coordinate of origin of sector image.      ',I9)
+ 9318 FORMAT (1H ,'X coordinate of origin of sector image.      ',I9)
+ 9319 FORMAT (1H ,'Earth flag                                   ',I9)
+ 9320 FORMAT (1H ,'Components flag                              ',I9)
+C
+ 9400 FORMAT (1H ,'Vertical Coordinate Parameters.')
+ 9401 FORMAT (1H ,'-------------------------------')
+ 9402 FORMAT (4X,F20.12,4X,F20.12)
+C
+ 9501 FORMAT(' Number of points along the first axis.       Not used')
+ 9502 FORMAT (' Number of points along the first axis.       ',I9)
+ 9503 FORMAT(' Number of points along the second axis.      Not used')
+ 9504 FORMAT (' Number of points along the second axis.      ',I9)
+C
+      END
diff --git a/gribex/grprs3.F b/gribex/grprs3.F
new file mode 100755
index 0000000..c105dba
--- /dev/null
+++ b/gribex/grprs3.F
@@ -0,0 +1,130 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS3 (KSEC0,KSEC3,PSEC3)
+C
+C---->
+C**** GRPRS3 - Print information from Section 3 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Bit-map section
+C     Section (Section 3) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS3 (KSEC0,KSEC3,PSEC3)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC0 - Array of decoded integers from Section 0.
+C     KSEC3 - Array of decoded integers from Section 3.
+C
+C     PSEC3 - Array of decoded reals from Section 3.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C     Method.
+C     -------
+C
+C     Fields printed as integers or reals.
+C
+C     Externals.
+C     ----------
+C
+C     Common block GRPRSCM.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy    ECMWF 11.09.91
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers   ECMWF 20.07.94
+C     Change format for printing missing data indicator to
+C     allow largest negative (32-bit) number
+C
+C     J.D.Chambers   ECMWF 14.06.95
+C     Change format for printing missing data indicator to
+C     allow for MAGICS value (-1.5E+21)
+C
+C     J.D.Chambers   ECMWF    June 2002
+C     Add option to set output stream number using environment variable
+C     GRPRS_STREAM
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER KSEC0(*)
+      INTEGER KSEC3(*)
+      REAL PSEC3(*)
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print required information.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WRITE(GRPRSM,9000)
+      WRITE(GRPRSM,9001)
+      WRITE(GRPRSM,9002)
+C
+      IF( KSEC3(1).NE.0 ) THEN
+        WRITE(GRPRSM,9003) KSEC3(1)
+      ELSE
+        WRITE(GRPRSM,9004)
+      ENDIF
+      WRITE(GRPRSM,9005) KSEC3(2)
+C
+      WRITE(GRPRSM,*)
+     X  'Missing data value for real data.        ', PSEC3(2)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+ 9000 FORMAT (1H )
+ 9001 FORMAT (1H ,'Section 3 - Bit-map Section.')
+ 9002 FORMAT (1H ,'-------------------------------------')
+ 9003 FORMAT (1H ,'Predetermined bit-map number.                ',I9)
+ 9004 FORMAT (1H ,'No predetermined bit-map.')
+ 9005 FORMAT (1H ,'Missing data value for integer data.    ',I14)
+ 9006 FORMAT (1H ,'Missing data value for real data.        ',F20.6)
+C
+      RETURN
+C
+      END
diff --git a/gribex/grprs4.F b/gribex/grprs4.F
new file mode 100755
index 0000000..26f5014
--- /dev/null
+++ b/gribex/grprs4.F
@@ -0,0 +1,247 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS4 (KSEC0,KSEC4,PSEC4)
+C
+C---->
+C**** GRPRS4 - Print information from Section 4 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Binary data section
+C     Section (Section 4) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS4 (KSEC0,KSEC4,PSEC4)
+C
+C
+C     Input Parameters.
+C     -----------------
+C     KSEC0 - Array of decoded integers from Section 0.
+C     KSEC4 - Array of decoded integers from Section 4.
+C     PSEC4 - Array of decoded reals from Section 4.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C     Method.
+C     -------
+C
+C     Fields printed as integers or reals.
+C
+C     Externals.
+C     ----------
+C
+C     SETPAR
+C     INXBIT.
+C
+C     Common block GRPRSCM.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     Checks environment variable GRPRS_STREAM for output stream number
+C     for printing (default is 6)
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy    ECMWF 11.09.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy    ECMWF 21.07.92
+C
+C     J.D.Chambers   ECMWF 20.10.93
+C     Distinguish between real and integer values
+C     in print of gridpoint values
+C
+C     J.D.Chambers   ECMWF 09.05.94
+C     Print complex packing information
+C
+C     J.D.Chambers   ECMWF 14.06.95
+C     Change format for printing missing data indicator to
+C     allow for MAGICS value (-1.5E+21)
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Take into account second-order packing for grid-point data.
+C
+C     J.D.Chambers   ECMWF    June 2002
+C     Add option to set output stream number using environment variable
+C     GRPRS_STREAM
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER KSEC0(*)
+      INTEGER KSEC4(*)
+      REAL PSEC4(*)
+C
+      INTEGER INUM, J210, J212, IVALUE, IBIT, IDUM, INSPT, IRET
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print integer information from KSEC4.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WRITE(GRPRSM,9000)
+      WRITE(GRPRSM,9001)
+      WRITE(GRPRSM,9002)
+C
+      WRITE(GRPRSM,9003) KSEC4(1)
+      WRITE(GRPRSM,9004) KSEC4(2)
+      WRITE(GRPRSM,9005) KSEC4(3)
+      WRITE(GRPRSM,9006) KSEC4(4)
+      WRITE(GRPRSM,9007) KSEC4(5)
+      WRITE(GRPRSM,9008) KSEC4(6)
+      WRITE(GRPRSM,9009) KSEC4(7)
+      WRITE(GRPRSM,9010) KSEC4(8)
+      WRITE(GRPRSM,9011) KSEC4(9)
+      WRITE(GRPRSM,9012) KSEC4(10)
+C     If complex packing ..
+      IF ( KSEC4(4).EQ.64 ) THEN
+C
+        IF ( KSEC4(3).EQ.128 ) THEN
+          WRITE(GRPRSM,9116) KSEC4(16)
+          WRITE(GRPRSM,9117) KSEC4(17)
+          WRITE(GRPRSM,9118) KSEC4(18)
+          WRITE(GRPRSM,9119) KSEC4(19)
+          WRITE(GRPRSM,9120) KSEC4(20)
+        ELSE
+          WRITE(GRPRSM,9013) KSEC4(11)
+          WRITE(GRPRSM,9014) KSEC4(12)
+          WRITE(GRPRSM,9015) KSEC4(13)
+          WRITE(GRPRSM,9016) KSEC4(14)+KSEC4(15)
+        ENDIF
+C
+      ENDIF
+C
+C     Number of non-missing values
+C
+      IF ( KSEC4(21).NE.0 )  WRITE(GRPRSM,9017) KSEC4(21)
+C
+C     Information on matrix of values , if present.
+C
+      IF (KSEC4(8).EQ.64)
+     C   THEN
+             WRITE(GRPRSM,9020) KSEC4(50)
+             WRITE(GRPRSM,9021) KSEC4(51)
+             WRITE(GRPRSM,9022) KSEC4(52)
+             WRITE(GRPRSM,9023)
+             WRITE(GRPRSM,9024) KSEC4(53)
+             WRITE(GRPRSM,9025) KSEC4(54)
+             WRITE(GRPRSM,9023)
+             WRITE(GRPRSM,9026) KSEC4(55)
+             WRITE(GRPRSM,9027) KSEC4(56)
+             WRITE(GRPRSM,9028) KSEC4(57)
+         ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Print values from PSEC4.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      WRITE(GRPRSM,9000)
+C
+      INUM = KSEC4(1)
+      IF (INUM.LT.0)  INUM = - INUM
+      IF (INUM.GT.20) INUM = 20
+C
+C     Print first INUM values.
+C
+      WRITE(GRPRSM,9031) INUM
+C
+      IF ( KSEC4(5) .EQ. 0 ) THEN
+C
+C     Print real values ...
+        DO 210 J210=1,INUM
+          WRITE(GRPRSM,9034) PSEC4(J210)
+  210   CONTINUE
+C
+      ELSE
+C
+C     Print integer values ...
+        CALL SETPAR(IBIT,IDUM,IDUM)
+        DO 212 J212=1,INUM
+           INSPT = 0
+           CALL INXBIT(IVALUE,1,INSPT,PSEC4(J212),1,IBIT,IBIT,'C',IRET)
+           WRITE(GRPRSM,9033) IVALUE
+  212   CONTINUE
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+ 9000 FORMAT(' ')
+ 9001 FORMAT(' Section 4 - Binary Data  Section.')
+ 9002 FORMAT(' -------------------------------------')
+ 9003 FORMAT(' Number of data values coded/decoded.         ',I9)
+ 9004 FORMAT(' Number of bits per data value.               ',I9)
+ 9005 FORMAT(' Type of data       (0=grid pt, 128=spectral).',I9)
+ 9006 FORMAT(' Type of packing    (0=simple, 64=complex).   ',I9)
+ 9007 FORMAT(' Type of data       (0=float, 32=integer).    ',I9)
+ 9008 FORMAT(' Additional flags   (0=none, 16=present).     ',I9)
+ 9009 FORMAT(' Reserved.                                    ',I9)
+ 9010 FORMAT(' Number of values   (0=single, 64=matrix).    ',I9)
+ 9011 FORMAT(' Secondary bit-maps (0=none, 32=present).     ',I9)
+ 9012 FORMAT(' Values width       (0=constant, 16=variable).',I9)
+ 9013 FORMAT(' Bits number of 2nd order values    (none=>0).',I9)
+ 9014 FORMAT(' General extend. 2-order packing (0=no,8=yes).',I9)
+ 9015 FORMAT(' Boustrophedonic ordering        (0=no,4=yes).',I9)
+ 9016 FORMAT(' Spatial differencing order          (0=none).',I9)
+ 9017 FORMAT(' Number of non-missing values                 ',I9)
+ 9120 FORMAT(' Pentagonal resolution parameter M for subset.',I9)
+ 9020 FORMAT(' First dimension (rows) of each matrix.       ',I9)
+ 9021 FORMAT(' Second dimension (columns) of each matrix.   ',I9)
+ 9022 FORMAT(' First dimension coordinate values definition.',I9)
+ 9023 FORMAT(' (Code Table 12)')
+ 9024 FORMAT(' NC1 - Number of coefficients for 1st dimension.',I7)
+ 9025 FORMAT(' Second dimension coordinate values definition.',I8)
+ 9026 FORMAT(' NC2 - Number of coefficients for 2nd dimension.',I7)
+ 9027 FORMAT(' 1st dimension physical signifance (Table 13). ',I8)
+ 9028 FORMAT(' 2nd dimension physical signifance (Table 13). ',I8)
+ 9031 FORMAT(' First ',I4,' data values.')
+ 9032 FORMAT(' ',F30.15)
+C
+C931020
+ 9033 FORMAT(' ',I15)
+ 9034 FORMAT(' ',G20.8)
+C
+C940509
+ 9116 FORMAT(' Byte offset of start of packed data (N).     ',I9)
+ 9117 FORMAT(' Power (P * 1000).                            ',I9)
+ 9118 FORMAT(' Pentagonal resolution parameter J for subset.',I9)
+ 9119 FORMAT(' Pentagonal resolution parameter K for subset.',I9)
+      RETURN
+C
+      END
diff --git a/gribex/grprs4w.F b/gribex/grprs4w.F
new file mode 100755
index 0000000..e650bf0
--- /dev/null
+++ b/gribex/grprs4w.F
@@ -0,0 +1,121 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRPRS4W(KSEC4)
+C
+C---->
+C**** GRPRS4W
+C
+C     Purpose.
+C     --------
+C
+C     Print the wave coordinate information in the Binary data
+C     section Section (Section 4) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRPRS4W(KSEC4)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC4 - Array of decoded integers from Section 4.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C     Method.
+C     -------
+C
+C     Fields printed as reals.
+C
+C     Externals.
+C     ----------
+C
+C     SETPAR
+C     INXBIT.
+C
+C     Common block GRPRSCM.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     Wave coordinate information held in KSEC4 are 32-bit REALs,
+C     hence the PTEMP and NTEMP used for printing are 4-byte variables.
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers   ECMWF 28.10.97
+C     Add printout for ECMWF wave 2Dsp first and second dimension
+C     coordinate values
+C
+C     J.D.Chambers   ECMWF    June 2002
+C     Add option to set output stream number using environment variable
+C     GRPRS_STREAM
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+      INTEGER KSEC4
+      DIMENSION KSEC4(*)
+C
+C     Local variables
+C
+      INTEGER JLOOP
+      REAL*4    PTEMP(100)
+      INTEGER*4 NTEMP(100)
+      EQUIVALENCE ( PTEMP(1),NTEMP(1) )
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Print integer information from KSEC4.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WRITE(GRPRSM,*)
+     X  'Coefficients defining first dimension coordinates:'
+      DO 110 JLOOP = 1, KSEC4(53)
+        NTEMP(JLOOP) = KSEC4(59 + JLOOP)
+        WRITE(GRPRSM,'(F20.10)') PTEMP(JLOOP)
+  110 CONTINUE
+C
+      WRITE(GRPRSM,*)
+     X  'Coefficients defining second dimension coordinates:'
+      DO 120 JLOOP = 1, KSEC4(55)
+        NTEMP(JLOOP) = KSEC4(59 + KSEC4(53) + JLOOP)
+        WRITE(GRPRSM,'(F20.10)') PTEMP(JLOOP)
+  120 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C     Section 9. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/grsdbg.F b/gribex/grsdbg.F
new file mode 100755
index 0000000..c7fd88f
--- /dev/null
+++ b/gribex/grsdbg.F
@@ -0,0 +1,132 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSDBG (KDBG)
+C
+C---->
+C**** GRSDBG - Debug print switch setting for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C           Switch debug printout on or off for routine GRIBEX.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRSDBG (KDBG)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KDGB        - Debug print switch.
+C                   0 , No printout.
+C                   Non-zero , Debug printout.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C     Method.
+C     -------
+C
+C     The variable NDBG is set in the common area. All other
+C     parameters are also set to default values, if they have
+C     not already been set by the user.
+C
+C     Externals.
+C     ----------
+C
+C     GRSDEF - Default setting of global variables.
+C
+C     Reference.
+C     ----------
+C
+C     See subroutine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     None
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      25.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      25.06.91
+C     Changes to some comments only.
+C
+C     J. Hennessy      ECMWF      14.11.91
+C     Common areas changed.
+C
+C     J. Hennessy      ECMWF      07.01.92
+C     Input parameter returned unchanged.
+C
+C     J.D.Chambers     ECMWF      13.09.94
+C     Add NONOFF and NOABORT, use grbcom.h
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Use GRSDEF routine for default setting.
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Use a static variable to determine if initialisation of
+C     default values has already been done for common area
+C     variables.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+      INTEGER KDBG
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C     Set debug print to required value.
+C
+      NDBG   = KDBG
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/grsdef.F b/gribex/grsdef.F
new file mode 100755
index 0000000..622282f
--- /dev/null
+++ b/gribex/grsdef.F
@@ -0,0 +1,309 @@
+      SUBROUTINE GRSDEF
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C---->
+C**** GRSDEF
+C
+C     Purpose.
+C     --------
+C     Sets initial values for common area variables and environment
+C     variables for the GRIBEX package, if not already done.
+C
+C
+C     Interface.
+C     ----------
+C     CALL GRSDEF
+C
+C
+C     Input Parameters.
+C     -----------------
+C     None.
+C
+C
+C     Output Parameters.
+C     ------------------
+C     None.
+C
+C
+C     Method.
+C     -------
+C     Self-explanatory.
+C
+C
+C     Externals.
+C     ----------
+C     EMOSNUM - Returns current EMOSLIB version number
+C
+C
+C     Reference.
+C     ----------
+C     See subroutine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C     None
+C
+C
+C     Author.
+C     -------
+C     J. Clochard, Meteo France, for ECMWF - March 1998.
+C
+C
+C     Modifications.
+C     --------------
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Add variable NSUBCE.
+C     Use a static variable to determine if initialisation has already
+C     been done. NUSER removed .
+C     Reverse defaults for NEXT2O and NLOC2O, for consistency with
+C     version 13.023 of software .
+C
+C     J.D.Chambers     ECMWF   September 2002
+C     Read environment variables first time through.
+C
+C     E. Fucile   ECMWF  October 2008
+C     added environment variable GRIBEX_DUMP_DATA_ON_ERROR
+C     to dump data files in a file when an error occurs
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+#include "grbcom.h"
+C
+C     Local variables
+C
+      INTEGER IOFFSET
+      CHARACTER*10 HNDBG, HNVCK, YNUMBER
+      CHARACTER*256 HDEFAULT, HBTDEFT
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+#ifdef TABLE_PATH
+      DATA HDEFAULT / TABLE_PATH /
+#else
+      DATA HDEFAULT / '' /
+#endif
+
+#ifdef __uxp__
+      DATA HBTDEFT /'/vpp700/mrfs/postproc/'/
+#else
+      DATA HBTDEFT /'/home/ma/emos/tables/'/
+#endif
+C
+      DATA LFIRST / .TRUE. /
+C
+C     External(s)
+C
+      INTEGER EMOSNUM
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values, conditionally.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( .NOT. LFIRST) GOTO 900
+C
+C     Mark common area values set.
+      LFIRST = .FALSE.
+C
+C     Common area variables have not been set. Set them.
+C
+C     User supplied reference value.
+      FREF   = 0.0
+C
+C     Reference value supplied by user flag. Set to off.
+      NFREF  = 0
+C
+C     User supplied maximum value.
+      FMAX   = 0.0
+C
+C     Maximum value supplied by user flag. Set to off.
+      NFMAX  = 0
+C
+C     Set rounding to 120 bytes on.
+      NRND   = 1
+C
+C     Set P factor switch to default, user supplies the P factor.
+      NONOFF = 0
+C
+C     Set abort flag to NO abort
+      NOABORT = 1
+C
+C     Exhaustive use of all possible second-order packing methods
+C     for HOPER='K'. Set to off.
+      NUM2OK  = 0
+C
+C     Use of extended second-order packing methods for grid-point
+C     encoding (HOPER='C' and 'K'). Set to on.
+      NEXT2O  = 1
+C
+C     Use of non-local second-order packing methods for grid-point
+C     encoding (HOPER='C' and 'K'). Set to on.
+      NLOC2O  = 1
+C
+C     Use of (all valid) sub-centre values for ECMWF fields encoding .
+C     encoding. Set to off.
+      NSUBCE  = 0
+C
+C     ----------------------------------------------------------------
+C*    Section 2. Set up values controlled by environment variables
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Set debug print on/off.
+C
+      NDBG   = 0
+      CALL GETENV('GRIBEX_DEBUG',HNDBG)
+      IOFFSET = INDEX( HNDBG, ' ')
+      IF( IOFFSET.GT.1 ) THEN
+        IF( HNDBG(1:2).EQ.'ON') THEN
+          NDBG = 1
+        ELSE IF( HNDBG(1:1).EQ.'1') THEN
+          NDBG = 1
+        ELSE IF( HNDBG(1:1).EQ.'2') THEN
+          NDBG = 2
+        ELSE
+          NDBG = 0
+        ENDIF
+      ENDIF
+C
+C     Set DUMPDATA to dump data values on error
+C
+      DUMPDATA   = 0
+      CALL GETENV('GRIBEX_DUMP_DATA_ON_ERROR',DUMPPATH)
+      IOFFSET = INDEX( DUMPPATH, ' ')
+      IF( IOFFSET.GT.2 ) THEN
+        IF( DUMPPATH(1:3).EQ.'OFF') THEN
+          DUMPDATA=0
+        ELSE
+          DUMPDATA=1
+        ENDIF
+      ENDIF
+
+C
+C     Set GRIB value checking on/off.
+C
+      NVCK   = 1
+      CALL GETENV('GRIBEX_CHECK',HNVCK)
+      IOFFSET = INDEX( HNVCK, ' ')
+      IF( IOFFSET.GT.2 ) THEN
+        IF( HNVCK(1:3).EQ.'OFF') THEN
+          NVCK = 0
+        ELSE
+          NVCK = 1
+        ENDIF
+      ENDIF
+C
+C     See if output stream needs changing
+C
+      CALL GETENV('GRPRS_STREAM', YNUMBER)
+      IOFFSET = INDEX( YNUMBER, ' ')
+      IF( IOFFSET.GT.1 ) THEN
+        IF( IOFFSET.EQ.2 ) THEN
+          READ(YNUMBER,'(I1.1)') GRPRSM
+        ELSE IF( IOFFSET.EQ.3 ) THEN
+          READ(YNUMBER,'(I2.2)') GRPRSM
+        ELSE
+          WRITE(GRPRSM,*)
+     X    'GRSDEF: Invalid value for GRPRS_STREAM: ' // YNUMBER
+          GRPRSM = 6
+        ENDIF
+      ELSE
+        GRPRSM = 6
+      ENDIF
+C
+      IF( GRPRSM.LT.1 ) THEN
+        WRITE(*,*) 'GRSDEF: Invalid number for GRPRS_STREAM: ', GRPRSM
+        GRPRSM = 6
+      ENDIF
+C
+C     Set EMOSLIB version number
+C
+      IF( (NEMOSLB.EQ.0).OR.(NEMOSET.EQ.0) ) THEN
+        IF( NDBG.GT.0 ) THEN
+          NEMOSLB = EMOSNUM(0)
+        ELSE
+          NEMOSLB = EMOSNUM(1)
+        ENDIF
+        NEMOSET = 1
+      ENDIF
+C
+C     Set pathname for parameter table lookup
+C
+      CALL GETENV( 'ECMWF_LOCAL_TABLE_PATH', ELTPATH)
+      IOFFSET = INDEX( ELTPATH, ' ')
+      IF( IOFFSET.LE.1 ) THEN
+      IOFFSET = INDEX(HDEFAULT,' ') - 1
+       IF(IOFFSET.GT.0) THEN
+           ELTPATH = HDEFAULT(1:IOFFSET)//'/gribtables/'
+       ELSE 
+           ELTPATH = '/usr/local/lib/metaps/tables/gribex/'
+c           ELTPATH = '/home/ma/emos/tables/gribex/'
+       ENDIF
+      ENDIF
+C
+C     Set pathname for bitmask file
+C
+      CALL GETENV( 'LOCAL_BITMAP_PATH', ELBPATH)
+      IOFFSET = INDEX( ELBPATH, ' ')
+      IF(IOFFSET.LE. 1) THEN
+        ELBPATH = HBTDEFT
+      ENDIF
+C
+C     Display values if debug is ON
+C
+      IF( NDBG.GT.0 ) THEN
+C
+        WRITE(GRPRSM,*) 'GRSDEF: ***********************************'
+        WRITE(GRPRSM,*) 'GRSDEF: Environment variable settings:'
+C
+        WRITE(GRPRSM,*) 'GRSDEF: GRIBEX_DEBUG is ON'
+C
+        IF( NVCK.GT.0 ) THEN
+          WRITE(GRPRSM,*) 'GRSDEF: GRIBEX_CHECK is ON'
+        ELSE
+          WRITE(GRPRSM,*) 'GRSDEF: GRIBEX_CHECK is OFF'
+        ENDIF
+C
+        WRITE(GRPRSM,*) 'GRSDEF: GRPRS_STREAM is ', GRPRSM
+C
+        WRITE(GRPRSM,9000) NEMOSLB
+C
+        IOFFSET = INDEX( ELTPATH, ' ')
+        WRITE(GRPRSM,*)
+     X    'GRSDEF: ECMWF_LOCAL_TABLE_PATH is ' // ELTPATH(1:IOFFSET)
+C
+        IOFFSET = INDEX( ELBPATH, ' ')
+        WRITE(GRPRSM,*)
+     X    'GRSDEF: LOCAL_BITMAP_PATH is ' // ELBPATH(1:IOFFSET)
+C
+        WRITE(GRPRSM,*) 'GRSDEF: ***********************************'
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+ 9000 FORMAT(' GRSDEF: EMOSLIB version number (EMOS_CYCLE) is ',(I6.6))
+C
+      END
+
diff --git a/gribex/grsmax.F b/gribex/grsmax.F
new file mode 100755
index 0000000..71c550a
--- /dev/null
+++ b/gribex/grsmax.F
@@ -0,0 +1,140 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSMAX (PMAX)
+C
+C---->
+C**** GRSMAX - Set user defined maximum value for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C           Set user defined maximum value for GRIB code for
+C           routine GRIBEX.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GRSMAX (PMAX)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               PMAX        - Maximum value required.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           The flag variable NFMAX is set to indicate that the
+C           user has supplied a maximum value and the variable
+C           FMAX is set to the required maximum value. These
+C           variables are in the common area. All other parameters
+C           are also set to default values, if they have not already
+C           been set by the user.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           See subroutine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      25.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      28.08.91
+C           Changes to some comments only.
+C
+C           J. Hennessy      ECMWF      14.11.91
+C           Changes to common area.
+C
+C           J.D.Chambers     ECMWF      13.09.94
+C           Add NONOFF and NOABORT, use grbcom.h
+C
+C           J. Clochard, Meteo France, for ECMWF - March 1998.
+C           Use GRSDEF routine for default setting.
+C
+C           J. Clochard, Meteo France, for ECMWF - June 1999.
+C           Use a static variable to determine if initialisation of
+C           default values has already been done for common area
+C           variables.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+      REAL    PMAX
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C     Set maximum value to required value.
+C
+      FMAX   = PMAX
+C
+C     Maximum value supplied by user flag. Set to on.
+C
+      NFMAX  = 1
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/grsmkp.F b/gribex/grsmkp.F
new file mode 100755
index 0000000..0768bd1
--- /dev/null
+++ b/gribex/grsmkp.F
@@ -0,0 +1,138 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSMKP(KONOFF)
+C
+C---->
+C**** GRSMKP - P factor calculation switch setting for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C     P factor calculation switch set on or off for routine GRIBEX.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRSMKP (KONOFF)
+C
+C
+C     Input Parameter.
+C     ----------------
+C
+C     KONOFF  - P factor calculation switch flag,
+C               = 0 ,        user supplies the P factor (default)
+C               = Non-zero , GRIBEX calculates the P factor.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     The variable NONOFF is set in the common area. All other
+C     parameters are also set to default values, if they have
+C     not already been set by the user.
+C
+C
+C     Externals.
+C     ----------
+C
+C     GRSDEF - Default setting of global variables.
+C
+C
+C     Reference.
+C     ----------
+C
+C     See subroutine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers       ECMWF      6th Sept 1994
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF      13.09.94
+C     Add NONOFF and NOABORT, use grbcom.h
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Use GRSDEF routine for default setting.
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Use a static variable to determine if initialisation of
+C     default values has already been done for common area variables.
+C
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments.
+      INTEGER KONOFF
+C
+C     Local variables.
+      INTEGER IONOFF
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IONOFF = 0
+      IF (KONOFF.NE.0) IONOFF = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C     Set P factor switch to required value
+C
+      NONOFF   = IONOFF
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/grsmok.F b/gribex/grsmok.F
new file mode 100755
index 0000000..755a80f
--- /dev/null
+++ b/gribex/grsmok.F
@@ -0,0 +1,136 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSMOK ( KUM2OK )
+C
+C---->
+C**** GRSMOK - controls use of Methods for GRIBEX Option 'K'
+C              (2nd-order aggressive packing).
+C
+C     Purpose.
+C     --------
+C
+C     Exhaustive 2nd-order aggressive packing switch set on or off
+C     for routine GRIBEX.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRSMOK ( KUM2OK )
+C
+C
+C     Input Parameter.
+C     ----------------
+C
+C     KUM2OK  - Exhaustive 2nd-order aggressive packing switch flag,
+C               = 0 ,        user supplies the allowed methods (default)
+C               = Non-zero , all applicable methods.
+C
+C               (Use for HOPER='K' function)
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     The variable NUM2OK is set in the common area. All other
+C     parameters are also set to default values, if they have
+C     not already been set by the user.
+C
+C
+C     Externals.
+C     ----------
+C
+C     GRSDEF - Default setting of global variables.
+C
+C
+C     Reference.
+C     ----------
+C
+C     See subroutine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Use a static variable to determine if initialisation of
+C     default values has already been done for common area variables.
+C
+C
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments.
+      INTEGER KUM2OK
+C
+C     Local variables.
+      INTEGER IUM2OK
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IUM2OK = 0
+      IF (KUM2OK.NE.0) IUM2OK = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C       Set exhaustive 2nd-order aggressive packing switch
+C       to required value.
+C
+      NUM2OK   = IUM2OK
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/grsn2o.F b/gribex/grsn2o.F
new file mode 100755
index 0000000..af89fd9
--- /dev/null
+++ b/gribex/grsn2o.F
@@ -0,0 +1,135 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSN2O ( KNLOCP )
+C
+C---->
+C**** GRSN2O - controls use of Non-local 2nd-Order packing methods
+C              for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C     Non-local 2nd-order methods switch set on or off
+C     for routine GRIBEX.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRSN2O ( KNLOCP )
+C
+C
+C     Input Parameter.
+C     ----------------
+C
+C     KNLOCP  - Non-local 2nd-order methods switch flag,
+C               = 0 ,        not allowed (default)
+C               = Non-zero , non-local methods allowed.
+C
+C        (Use for grid-point encoding, HOPER='C' and 'K' functions)
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     The variable NLOC2O is set in the common area. All other
+C     parameters are also set to default values, if they have
+C     not already been set by the user.
+C
+C
+C     Externals.
+C     ----------
+C
+C     GRSDEF - Default setting of global variables.
+C
+C
+C     Reference.
+C     ----------
+C
+C     See subroutine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Use a static variable to determine if initialisation of
+C     default values has already been done for common area variables.
+C
+C
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments.
+      INTEGER KNLOCP
+C
+C     Local variables.
+      INTEGER INLOCP
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      INLOCP = 0
+      IF (KNLOCP.NE.0) INLOCP = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C       Set non-local 2nd-order packing switchto required value.
+C
+      NLOC2O   = INLOCP
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/grsref.F b/gribex/grsref.F
new file mode 100755
index 0000000..0617ae4
--- /dev/null
+++ b/gribex/grsref.F
@@ -0,0 +1,144 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSREF (PREF)
+C
+C---->
+C**** GRSREF - Set user defined reference value for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C           Set user defined reference value for GRIB code for
+C           routine GRIBEX.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GRSREF (PREF)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               PREF        - Reference value required.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           The flag variable NFREF is set to indicate that the
+C           user has supplied a reference value and the variable
+C           FREF is set to the required reference value. These
+C           variables are in the common area. All other parameters
+C           are also set to default values, if they have not already
+C           been set by the user.
+C
+C     Externals.
+C     ----------
+C
+C           GRSDEF - Default setting of global variables.
+C
+C     Reference.
+C     ----------
+C
+C           See subroutine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      25.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      28.08.91
+C           Changes to some comments only.
+C
+C           J. Hennessy      ECMWF      14.11.91
+C           Changes to common area.
+C
+C           J.D.Chambers     ECMWF      13.09.94
+C           Add NONOFF and NOABORT, use grbcom.h
+C
+C           J. Clochard, Meteo France, for ECMWF - January 1998.
+C           Use GRSDEF routine for default setting.
+C
+C           J. Clochard, Meteo France, for ECMWF - June 1999.
+C           Use a static variable to determine if initialisation of
+C           default values has already been done for common area
+C           variables.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+      REAL    PREF
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     If common area variables have not been set, start by
+C     setting default values.
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C
+C     Set reference value to required value.
+C
+      FREF   = PREF
+C
+C     Reference value supplied by user flag. Set to on.
+C
+      NFREF  = 1
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/grsrnd.F b/gribex/grsrnd.F
new file mode 100755
index 0000000..01b22bf
--- /dev/null
+++ b/gribex/grsrnd.F
@@ -0,0 +1,143 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE GRSRND (KRND)
+C
+C---->
+C**** GRSRND - Set GRIB code rounding/no rounding for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C           Switch GRIB length rounding on/off for routine GRIBEX.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GRSRND (KRND)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KRND        - Value checking switch.
+C                            0 , No rounding.
+C                            Non-zero , Values rounded.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               GRSDEF - Default setting of global variables.
+C
+C     Method.
+C     -------
+C
+C           The variable NRND is set in the common area. All other
+C           parameters are also set to default values, if they have
+C           not already been set by the user.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           See subroutine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      25.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      28.08.91
+C           Changes to some comments only.
+C
+C           J. Hennessy      ECMWF      14.11.91
+C           Changes to common area.
+C
+C           J. Hennessy      ECMWF      07.01.92
+C           Input parameter returned unchanged.
+C
+C           J.D.Chambers     ECMWF      13.09.94
+C           Add NONOFF and NOABORT, use grbcom.h
+C
+C           J. Clochard, Meteo France, for ECMWF - January 1998.
+C           Use GRSDEF routine for default setting.
+C
+C           J. Clochard, Meteo France, for ECMWF - June 1999.
+C           Use a static variable to determine if initialisation of
+C           default values has already been done for common area
+C           variables.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+      INTEGER KRND
+C
+      INTEGER IRND
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IRND = 0
+      IF (KRND.NE.0) IRND = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C     Set rounding to 120 bytes to required value.
+C
+      NRND   = IRND
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/grsubc.F b/gribex/grsubc.F
new file mode 100755
index 0000000..f181c57
--- /dev/null
+++ b/gribex/grsubc.F
@@ -0,0 +1,133 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSUBC ( KSUBCE )
+C
+C---->
+C**** GRSUBC - controls use of SUB-Centre number use for ECMWF fields.
+C
+C     Purpose.
+C     --------
+C
+C     Sub-centre use for ECMWF fields encoding switch set on or off
+C     for routine GRIBEX.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRSUBC ( KSUBCE )
+C
+C
+C     Input Parameter.
+C     ----------------
+C
+C     KSUBCE  -  Sub-centre use for ECMWF fields encoding switch flag,
+C               = 0 ,        only explicit values allowed (default)
+C               = Non-zero , all valid octet values allowed .
+C
+C               (Use for encoding type functions)
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     The variable NSUBCE is set in the common area. All other
+C     parameters are also set to default values, if they have
+C     not already been set by the user.
+C
+C
+C     Externals.
+C     ----------
+C
+C     GRSDEF - Default setting of global variables.
+C
+C
+C     Reference.
+C     ----------
+C
+C     See subroutine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments.
+      INTEGER KSUBCE
+C
+C     Local variables.
+      INTEGER ISUBCE
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      ISUBCE = 0
+      IF (KSUBCE.NE.0) ISUBCE = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C       Set sub-centre use for ECMWF fields encoding switch
+C       to required value.
+C
+      NSUBCE   = ISUBCE
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/grsvck.F b/gribex/grsvck.F
new file mode 100755
index 0000000..b8f5aeb
--- /dev/null
+++ b/gribex/grsvck.F
@@ -0,0 +1,142 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSVCK (KVCK)
+C
+C---->
+C**** GRSVCK - Set GRIB code parameter value check for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C           Switch parameter value checking on/off for routine GRIBEX.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL GRSVCK (KVCK)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KVCK        - Value checking switch.
+C                            0 , No checking.
+C                            Non-zero , Values checked.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           The variable NVCK is set in the common area. All other
+C           parameters are also set to default values, if they have
+C           not already been set by the user.
+C
+C     Externals.
+C     ----------
+C
+C           GRSDEF - Default setting of global variables.
+C
+C     Reference.
+C     ----------
+C
+C           See subroutine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      25.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      28.08.91
+C           Changes to some comments only.
+C
+C           J. Hennessy      ECMWF      14.11.91
+C           Chnages to common area.
+C
+C           J. Hennessy      ECMWF      30.01.92
+C           Input parameter returned unchanged.
+C
+C           J.D.Chambers     ECMWF      13.09.94
+C           Add NONOFF and NOABORT, use grbcom.h
+C
+C           J. Clochard, Meteo France, for ECMWF - January 1998.
+C           Use GRSDEF routine for default setting.
+C
+C           J. Clochard, Meteo France, for ECMWF - June 1999.
+C           Use a static variable to determine if initialisation of
+C           default values has already been done for common area
+C           variables.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+      INTEGER KVCK
+C
+      INTEGER IVCK
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IVCK = 0
+      IF (KVCK.NE.0) IVCK = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C     Set GRIB value checking to required value.
+C
+      NVCK   = IVCK
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/grsx2o.F b/gribex/grsx2o.F
new file mode 100755
index 0000000..99ca208
--- /dev/null
+++ b/gribex/grsx2o.F
@@ -0,0 +1,136 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GRSX2O ( KEXT2O )
+C
+C---->
+C**** GRSX2O - controls use of eXTended 2nd-Order packing methods
+C              for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C     Extended 2nd-order methods switch set on or off
+C     for routine GRIBEX.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GRSX2O ( KEXT2O )
+C
+C
+C     Input Parameter.
+C     ----------------
+C
+C     KEXT2O  - Extended 2nd-order methods switch flag,
+C               = 0 ,        not allowed (default)
+C               = Non-zero , extended methods allowed.
+C
+C        (Use for grid-point encoding, HOPER='C' and 'K' functions)
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     The variable NEXT2O is set in the common area. All other
+C     parameters are also set to default values, if they have
+C     not already been set by the user.
+C
+C
+C     Externals.
+C     ----------
+C
+C     GRSDEF - Default setting of global variables.
+C
+C
+C     Reference.
+C     ----------
+C
+C     See subroutine GRIBEX.
+C
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Use a static variable to determine if initialisation of
+C     default values has already been done for common area variables.
+C
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments.
+      INTEGER KEXT2O
+C
+C     Local variables.
+      INTEGER IEXT2O
+C
+      LOGICAL LFIRST
+      SAVE LFIRST
+C
+      DATA LFIRST / .TRUE. /
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IEXT2O = 0
+      IF (KEXT2O.NE.0) IEXT2O = 1
+C
+      IF (LFIRST) THEN
+C
+C       Common area variables may have not been set, so start by
+C       trying to set default values.
+C
+        CALL GRSDEF
+        LFIRST=.FALSE.
+C
+      ENDIF
+C
+C       Set exhaustive 2nd-order aggressive packing switch
+C       to required value.
+C
+      NEXT2O   = IEXT2O
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/gsbite.F b/gribex/gsbite.F
new file mode 100755
index 0000000..13aeb05
--- /dev/null
+++ b/gribex/gsbite.F
@@ -0,0 +1,292 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4) || (defined rs6000) || (defined NECSX) || (defined POWERPC)
+      SUBROUTINE GSBITE (KS,KD,KSKST,KSIZE,KSKBTW,K,KBPW,KMASK,HADIR)
+C
+C---->
+C**** GSBITE - Extraction/insertion of bits from/to bitstream on Cray.
+C
+C     Purpose.
+C     --------
+C
+C     Vectorising extraction/insertion of bits from/to bitstream.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL GSBITE (KS,KD,KSKST,KSIZE,KSKBTW,K,KBPW,KMASK,HADIR)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KS      - If HADIR='D', input bit stream, else output bit stream.
+C     KD      - If HADIR='D', output words, else input words.
+C     KSKST   - Number of bits skipped at beginning of KS.
+C     KSIZE   - Number of bits to be extracted to one word of KD.
+C     KSKBTW  - Number of bits skipped between 2 words to be extracted.
+C     K       - Number of words to be extracted into KD. If less than
+C               or equal to 0 only calculate KBPW and KMASK.
+C     KBPW    - Number of bits per word in KS,calculated if 0.
+C     KMASK   - Masks for bit patterns, calculated if KMASK(2) is 0.
+C               (KMASK must have dimension KBPW+1)
+C     HADIR   - Direction of conversion: 'D' for decoding, ie
+C               extract words KD(1...K) from bits KS(KSKST+1....)
+C               If not 'D', encode, i.e. pack words KD(1....K) into
+C               bits KS(KSKST+1.....KSKST+K*(KSIZE+KSKBTW))
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KS,KD   - See above.
+C     KSKST   - Updated to number of bits used, i.e. to
+C               KSKST+K*(KSIZE+KSKBTW)
+C     KBPW    - If 0 on input, number of bits in each word of KS.
+C     KMASK   - If KMASK(2) was 0 on input, bit pattern masks.
+C               (KMASK must have dimension KBPW+1)
+C
+C
+C     Method.
+C     -------
+C
+C     Vector loop is over repeatedly occurring bit patterns.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     This routine is for vector processors only.
+C
+C
+C     Author.
+C     -------
+C
+C     G.J.Cats 08 Dec 87
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy     ECMWF     09.09.91
+C     Introductory comments changed to conform to standard.
+C
+C     J.D.Chambers    ECMWF     05.01.95
+C     Put in fixes suggested by G.Cats (Dec. 95) for:
+C     i)    "Number of words to be extracted = 0"
+C     ii)   Optimise test for encode/decode in loop by using logical.
+C     iii)  Intialise ISTS before use.
+C
+C     J.D.Chambers    ECMWF     22.05.96
+C     Defines to remove inline functions except on CRAY
+C     (The Fujitsu doesn't need them).
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Use intrinsic functions on CRAY.
+C
+C
+C     ------------------------------------------------------------------
+C----<
+C
+      DIMENSION KS(*),KD(*),KMASK(*)
+      CHARACTER*1 HADIR
+      LOGICAL     LODECD
+C
+C     1.  COMPLETE KBPW AND KMASK, RETURN IF 0 WORDS ARE TO BE EXTRACTED
+C
+      IF(KBPW.EQ.0) THEN
+         IS    = KS(1)
+         KS(1) = 1
+ 1101    CONTINUE
+         IF(KS(1).NE.0) THEN
+            KBPW  = KBPW + 1
+            KS(1) = ISHFT(KS(1),1)
+            GOTO 1101
+         ENDIF
+         KS(1) = IS
+      ENDIF
+      IF(KMASK(2).EQ.0) THEN
+         KMASK(KBPW+1) = 0
+         DO 1110 J = KBPW,1,-1
+           KMASK(J) = IBSET(KMASK(J+1),KBPW-J)
+ 1110    CONTINUE
+      ENDIF
+      IF(K.LE.0)RETURN
+C
+C     2.  PRESET KD TO 0 IF KD IS OUTPUT I.E. WHEN DECODING
+C
+      LODECD = HADIR .EQ. 'D'
+      IF (LODECD) THEN
+         DO 2101 J = 1,K
+           KD(J) = 0
+ 2101    CONTINUE
+      ENDIF
+      IF(KSIZE.LE.0) RETURN
+C
+C     3.  CALCULATE SEVERAL PARAMETERS FOR LOOPING (FOR EFFICIENCY, THE
+C         CODE OF SECTIONS 3.3 AND 3.4 FOR K=1 IS SEPARATED INTO 3.2)
+C
+C     3.1 NUMBER OF BITS USED PER WORD, INITIAL NR OF SKIPPED BITS
+C
+      ISTEP = KSIZE + KSKBTW
+      ISKWS = KSKST
+C
+C     3.2 VECTOR LOOP LENGTH AND STEP SIZE IN KD IF K=1;KS STEP IRRELVNT
+C
+      IF(K.EQ.1) THEN
+         ILL  = 1
+         IBDL = 2
+         ISTD = 1
+         ISTS = 1
+      ELSE
+C
+C     3.3 STEP SIZES IN KS,KD: INVERSE OF LARGEST FACTOR OF ISTEP,KBPW
+C
+         ILCF = KBPW
+         ISHF = ISTEP
+ 331     CONTINUE
+         IF(ILCF.EQ.ISHF) GOTO 332
+         IF(ILCF.EQ.1) GOTO 332
+         IF(ILCF.GT.ISHF) THEN
+            ILCF = ILCF - ISHF
+         ELSE
+            ISHF = ISHF - ILCF
+         ENDIF
+         GOTO 331
+ 332     CONTINUE
+         ISTD = KBPW/ILCF
+         ISTS = ISTEP/ILCF
+C
+C     3.4 VECTOR LOOP LENGTH AND SWITCH-OVER POINT FOR SMALLER LOOP
+C
+         ILL  = (K-1)/ISTD + 1
+         IBDL = K - (ILL-1)*ISTD
+      ENDIF
+C
+C     4.  LOOP OVER FIRST ISTD WORDS OF KD (TRAILS THE VECTOR LOOP)
+C
+      DO 790 JBD = 1,ISTD
+C
+C       4.1 LAST BIT IN KS TO BE TREATED
+C
+        IENBS = ISKWS + KSIZE
+C
+C       4.2 NR OF WORDS OF KS TO BE SKIPPED, NR OF BITS IN THOSE AND
+C           THIS
+C
+        ISKW = ISKWS/KBPW
+        ISTA = ISKW*KBPW
+        ISKB = ISKWS - ISTA
+C
+C       4.3 MASK AND LEFT SHIFT FOR THE REMAINING BITS
+C
+        IMASK = KMASK(ISKB+1)
+        ISH   = KSIZE + ISKB
+C
+C       4.4 POSITION OF CURRENT WORD OF KS
+C
+        IBS = ISKW + 1
+C
+C       5.  LOOP OVER WORDS OF KS CONTRIBUTING TO ONE WORD OF KD
+C
+ 500    CONTINUE
+C
+C       5.1 UPDATE SHIFT AND LAST BIT IN CURRENT WORD
+C
+        ISH  = ISH - KBPW
+        IEND = ISTA + KBPW
+C
+C       5.2 IS LAST BIT OF CURRENT WORD OUTSIDE RANGE TO BE EXTRACTED
+C
+        IF(IEND.GT.IENBS) THEN
+          ISH   = IENBS - IEND
+          IMASK = IAND(IMASK,NOT(KMASK(KBPW+ISH+1)))
+        ENDIF
+C
+C       5.3 INITIAL OFFSETS FOR VECTOR ELEMENTS IN VECTOR LOOP
+C
+        IOS = 0
+        IOD = 0
+C
+C     6.  VECTOR LOOP IS OVER REPEATEDLY OCCURRING BITPATTERNS/MASKS
+C
+        IF (LODECD) THEN
+Cjdc#ifdef CRAY
+CDIR$ IVDEP
+!cdir nodep
+          DO 611 JI = 1,ILL
+            KD(JBD+IOD) =
+     X        IOR(KD(JBD+IOD),ISHFT(IAND(IMASK,KS(IBS+IOS)),ISH))
+            IOD = IOD + ISTD
+            IOS = IOS + ISTS
+ 611      CONTINUE
+Cjdc#else
+!OCL NOVREC
+Cjdc       CALL GSDECODE( KS(IBS), KD(JBD), ISTS, ISTD, ILL, IMASK, ISH )
+Cjdc#endif
+        ELSE
+Cjdc#ifdef CRAY
+CDIR$ IVDEP
+!OCL NOVREC
+!cdir nodep
+          DO 612 JI = 1,ILL
+            KS(IBS+IOS) = IOR(
+     X      IAND(      KS(IBS+IOS),           NOT(IMASK)),
+     X      IAND(ISHFT(KD(JBD+IOD),-ISH),    IMASK ))
+            IOD = IOD + ISTD
+            IOS = IOS + ISTS
+ 612      CONTINUE
+Cjdc#else
+Cjdc        CALL GSENCODE( KD(JBD), KS(IBS), ISTD, ISTS, ILL, IMASK, ISH )
+Cjdc#endif
+        ENDIF
+C
+C       7.  END LOOPS
+C
+C       7.1 PREPARE FOR END OF LOOP OVER WORDS OF KS WITIHN ONE KD WORD
+C
+        ISTA = ISTA + KBPW
+C
+C       7.2 NEXT WORD OF KD IF EXTRACTION NOT COMPLETED
+C
+        IF(ISTA.LT.IENBS) THEN
+          IMASK = KMASK(1)
+          IBS   = IBS + 1
+          GOTO 500
+        ENDIF
+C
+C       7.8 PREPARE FOR END OF LOOP OVER FIRST WORDS OF KD
+C
+        IF(JBD.EQ.IBDL)ILL = ILL - 1
+        ISKWS = ISKWS + ISTEP
+C
+C       7.9 END LOOP OVER FIRST WORDS OF KD
+C
+ 790  CONTINUE
+C
+C     8.  FINISHED: UPDATE KSKST AND RETURN
+C
+      KSKST = KSKST + K*ISTEP
+C
+      RETURN
+      END
+#endif
diff --git a/gribex/gscale.F b/gribex/gscale.F
new file mode 100755
index 0000000..4401795
--- /dev/null
+++ b/gribex/gscale.F
@@ -0,0 +1,255 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GSCALE( PDATA, KTRUNC, KSTART, IPOWER, HOPT)
+C
+C---->
+C**** GSCALE
+C
+C     Purpose.
+C     --------
+C
+C     Pre- or post-scales spherical harmonic coefficents in GRIB scaling
+C     and packing.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     IRET = GSCALE(PDATA, KTRUNC, KSTART, IPOWER, HOPT)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PDATA      - Array of floating point values.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KSTART     - Number indicating truncation after which to start.
+C     IPOWER     - Power to use when scaling coefficients(*1000).
+C     HOPT       - Selects pre- or post scaling
+C                  = 'I' for pre-scaling
+C                  = 'O' for post-scaling
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     PDATA      - Array with values changed.
+C
+C
+C     Method.
+C     -------
+C
+C                            <--    n    -->             (n = 0 to m)
+C
+C                            <KSTART>|
+C
+C     Given numbers:         cccccccc|cccccc    ^
+C                              cccccc|cccccc    |
+C                                cccc|cccccc    |
+C                                  cc|cccccc    m        (m = 0 to KTRUNC)
+C                                    |cccccc    |
+C                                       cccc    |
+C                                         cc    v
+C
+C
+C      Operates on values :          |cccccc
+C                                    |cccccc
+C                                    |cccccc
+C                                    |cccccc
+C                                    |cccccc
+C                                       cccc
+C                                         cc
+C
+C
+C
+C     A scale factor is applied to the values.  The factor is
+C     
+C     n(n+1)^^p            for pre-scaling
+C     1 / n(n+1)^^p        for post-scaling
+C
+C     where p = IPOWER/1000.
+C
+C
+C     Externals.
+C     ----------
+C
+C     None
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      20:04:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Call to FLOAT replaced by REAL.
+C
+C     J.D.Chambers     ECMWF        July 2000
+C     Run loops calculating power factors in SCALAR on VPPs to
+C     eliminate differences due to vetorisation.
+C
+C     S.Curic     ECMWF        April 2005
+C     Change value of JPMXTRC in order to handle truncation T2047
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPBYTES, JPMXTRC
+#ifdef REAL_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER (JPMXTRC = 2048)
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KSTART, IPOWER
+      REAL PDATA
+      DIMENSION PDATA(*)
+      CHARACTER*1 HOPT
+C
+C     Local variables.
+C
+      INTEGER N, M, INDEX
+      REAL FACTOR, POWER
+      DIMENSION FACTOR(JPMXTRC)
+C
+C     Externals
+C
+C     -----------------------------------------------------------------|
+C*    Section 1 . Check for valid truncation and start values.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      GSCALE = 0
+      IF( (IPOWER.LT.-10000).OR.(IPOWER.GT.10000) ) THEN
+        WRITE(GRPRSM,*) ' GSCALE - Invalid power given = ', IPOWER
+        GSCALE = 16600
+        GOTO 900
+      ENDIF
+C
+      IF( (KTRUNC.LT.0).OR.(KTRUNC.GT.JPMXTRC) ) THEN
+        WRITE(GRPRSM,*) ' GSCALE - cannot handle truncation = ', KTRUNC
+        GSCALE = 16601
+        GOTO 900
+      ENDIF
+C
+      IF( (HOPT.NE.'I').AND.(HOPT.NE.'O') ) THEN
+        WRITE(GRPRSM,*) ' GSCALE - Invalid option given = ', HOPT
+        GSCALE = 16602
+        GOTO 900
+      ENDIF
+C
+      IF( KSTART.GT.KTRUNC ) THEN
+        WRITE(GRPRSM,*) ' GSCALE - Invalid start/truncation given'
+        WRITE(GRPRSM,*) ' GSCALE - KSTART, KTRUNC =', KSTART, KTRUNC
+        GSCALE = 16603
+        GOTO 900
+      ENDIF
+C
+C     Setup scaling factors = n(n+1)^^p, for n = 1 to KTRUNC
+C
+      IF( IPOWER.EQ.0 ) GOTO 900
+      POWER = REAL(IPOWER) / 1000.0
+      FACTOR(1) = 1.0
+C
+C     'I' option -> multiply by the factors
+C     'O' option -> divide by the factors
+C
+      IF( HOPT.EQ.'I' ) THEN
+#ifdef FUJITSU
+!OCL SCALAR
+#endif
+        DO N = 1 , KTRUNC
+          IF( IPOWER.NE.1000 ) THEN
+            FACTOR(N+1) = REAL(N * (N+1) )**POWER
+          ELSE
+            FACTOR(N+1) = REAL(N * (N + 1))
+          ENDIF
+        ENDDO
+      ELSE
+#ifdef FUJITSU
+!OCL SCALAR
+#endif
+        DO N = 1 , KTRUNC
+          IF( IPOWER.NE.1000 ) THEN
+            FACTOR(N+1) = 1.0 / REAL(N * (N+1) )**POWER
+          ELSE
+            FACTOR(N+1) = 1.0 / REAL(N * (N + 1))
+          ENDIF
+        ENDDO
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2 . Scale the values.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Handle values 2 at a time (real and imaginary parts)
+C
+      INDEX = -1
+      DO M = 0 , KSTART-1
+        DO N = M , KTRUNC
+          INDEX = INDEX + 2
+          IF( N.GE.KSTART ) THEN
+            PDATA(INDEX)   = PDATA(INDEX)   * FACTOR(N+1)
+            PDATA(INDEX+1) = PDATA(INDEX+1) * FACTOR(N+1)
+          ENDIF   
+        ENDDO
+      ENDDO
+C
+      DO M = KSTART , KTRUNC
+        DO N = M , KTRUNC
+          INDEX = INDEX + 2
+          PDATA(INDEX)   = PDATA(INDEX)   * FACTOR(N+1)
+          PDATA(INDEX+1) = PDATA(INDEX+1) * FACTOR(N+1)
+        ENDDO
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/handleLocalDefinitions.c b/gribex/handleLocalDefinitions.c
new file mode 100755
index 0000000..2a9198f
--- /dev/null
+++ b/gribex/handleLocalDefinitions.c
@@ -0,0 +1,1601 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "handleLocalDefinitions.h"
+#include "grib_int_t.h"
+
+#define FREE_NOT_NULL(a) if((a)!=NULL) free((a))
+
+void releaseAction(action* a) {
+action* current = a;
+action* previous;
+
+  while (current != NULL) {
+    FREE_NOT_NULL((char*)current->description);
+    FREE_NOT_NULL((char*)current->octet);
+    FREE_NOT_NULL((char*)current->code);
+    FREE_NOT_NULL((char*)current->ksec1);
+    FREE_NOT_NULL((char*)current->count);
+    previous = current;
+    current = current->next;
+    FREE_NOT_NULL(previous);
+  }
+
+  return;
+}
+
+void init(
+  action* first,
+  action* a,
+  char* description,
+  char* octet,
+  char* code,
+  char* ksec1,
+  char* count) {
+/*
+// Copies the text fields describing the action
+*/
+  memset(a,0,sizeof(*a));
+  a->description = strdup(description);
+  if( (a->description) == NULL ) {
+    perror("init: strdup failed");
+    exit(1);
+  }
+  a->octet = strdup(octet);
+  if( (a->octet) == NULL ) {
+    perror("init: strdup failed");
+    exit(1);
+  }
+  a->code = strdup(code);
+  if( (a->code) == NULL ) {
+    perror("init: strdup failed");
+    exit(1);
+  }
+  a->ksec1 = strdup(ksec1);
+  if( (a->ksec1) == NULL ) {
+    perror("init: strdup failed");
+    exit(1);
+  }
+  a->count = strdup(count);
+  if( (a->count) == NULL ) {
+    perror("init: strdup failed");
+    exit(1);
+  }
+  return;
+}
+
+action* packNOOP(action* a,buffer *b) { return a->next; } 
+
+action* unpackNOOP(action* a,buffer *b) { return a->next; }
+
+grib_int_t stringIsNotANumber(const char * count) {
+grib_int_t loop;
+
+  for( loop = 0; loop < strlen(count); loop++ )
+    if( ! isdigit(*(count+loop)) ) return 1;
+
+  return 0;
+}
+
+/*==========================================================*/
+
+void updateOffsets(action* a,buffer* b,grib_int_t* numberOfValues) {
+/*
+// Updates current values of packed byte offset and unpacked
+// integer value offset and count when the local definition
+// description has a value in the appropriate column.
+*/
+unsigned char* octetValue;
+grib_int_t* ksec1Value;
+
+  if( ! stringIsNotANumber(a->count) )
+    *numberOfValues = atol(a->count);
+
+  if( ! stringIsNotANumber(a->octet) ) {
+    octetValue = (b->startOctets)+atol(a->octet)-OCTETSTART;
+    (b->packed) = octetValue;
+  }
+
+  if( ! stringIsNotANumber(a->ksec1) ) {
+    ksec1Value = (b->startKsec1)+atol(a->ksec1)-KSEC1START;
+    (b->values) = ksec1Value;
+  }
+
+  return;
+}
+
+action* packPADMULT(action* a,buffer *b) {
+/*
+// Pad buffer with zeroes upto a multiple of 'count' bytes
+*/
+grib_int_t count, loop;
+grib_int_t multiple = atol(a->count);
+grib_int_t startOctet = atol(a->octet);
+
+  count = (int)((b->packed)-(b->startOctets)) -(startOctet-OCTETSTART);
+  count = ((count + multiple - 1)/multiple)*multiple - count;
+  if( count == 0 ) count = multiple;
+
+  for( loop = 0; loop < count; loop++ ) *(b->packed)++ = 0;
+
+  b->totalPackedBytes += count;
+  b->packed += count;
+  b->totalUnPackedBytes += count;
+  return a->next;
+}
+
+action* unpackPADMULT(action* a,buffer *b) {
+grib_int_t count, loop;
+grib_int_t multiple = atol(a->count);
+grib_int_t startOctet = atol(a->octet);
+
+  count = (int)((b->packed)-(b->startOctets)) -(startOctet-OCTETSTART);
+  count = ((count + multiple - 1)/multiple)*multiple - count;
+  if( count == 0 ) count = multiple;
+
+  b->totalUnPackedBytes += count;
+  b->packed += count;
+
+  return a->next;
+}
+
+action* packPADFROM(action* a,buffer *b) {
+/*
+// Pad buffer with zeroes upto a multiple of 'count' bytes
+// starting from byte 'octet'
+*/
+grib_int_t count, loop;
+grib_int_t multiple = atol(a->count);
+grib_int_t startByte = atol(a->octet);
+
+  count = (int)((b->packed)-(b->startOctets)+OCTETSTART-1-startByte);
+  count = ((count + multiple - 1)/multiple)*multiple - count;
+
+  for( loop = 0; loop < count; loop++ ) *(b->packed)++ = 0;
+
+  b->totalPackedBytes += count;
+  return a->next;
+}
+
+action* unpackPADFROM(action* a,buffer *b) {
+/*
+// Skip padding in buffer upto a multiple of 'count' bytes
+// starting from byte 'octet'
+*/
+grib_int_t count;
+grib_int_t multiple = atol(a->count);
+grib_int_t startByte = atol(a->octet);
+
+  count = (grib_int_t)((b->packed)-(b->startOctets)) +
+                       OCTETSTART - 1 -startByte;
+  while( count > 0 ) {
+    count -= multiple;
+  }
+  count = -count;
+
+  b->totalUnPackedBytes += count;
+  (b->packed) += count;
+
+  return a->next;
+}
+
+action* packUP_TO(action* a,buffer *b, unsigned char character) {
+/*
+// Pad buffer with 'characters's upto given byte
+*/
+grib_int_t count = 0, loop;
+
+  updateOffsets(a,b,&count);
+
+  if( count != 0 ) {
+
+    count = atoi(a->count) - (int)((b->packed)-(b->startOctets)+OCTETSTART-1);
+
+    for( loop = 0; loop < count; loop++ ) *(b->packed)++ = character;
+
+    b->totalPackedBytes += count;
+  }
+  return a->next;
+}
+
+action* packSP_TO(action* a,buffer *b) {
+/*
+// Pad buffer with spaces upto given byte
+*/
+  return packUP_TO(a,b,' ');
+}
+
+action* unpackSP_TO(action* a,buffer *b) { 
+grib_int_t count = 0, loop;
+
+  updateOffsets(a,b,&count);
+  b->totalUnPackedBytes = count + 1 - OCTETSTART;
+  b->packed = b->startOctets + count + 1 - OCTETSTART;
+
+  return a->next;
+}
+
+
+
+action* packPADTO(action* a,buffer *b) {
+/*
+// Pad buffer with zeroes upto given byte
+*/
+  return packUP_TO(a,b,'\0');
+}
+
+action* unpackPADTO(action* a,buffer *b) {
+grib_int_t count = 0, loop;
+
+  updateOffsets(a,b,&count);
+  b->totalUnPackedBytes = count + 1 - OCTETSTART;
+  b->packed = b->startOctets + count + 1 - OCTETSTART;
+
+  return a->next;
+}
+
+action* packBYTES(action* a,buffer *b) {
+/*
+// Fill buffer with a string of bytes
+*/
+grib_int_t count, numberOfBytes, numberOfValues;
+
+  if( stringIsNotANumber(a->count) )
+    numberOfBytes = (a->reference->value);
+  else
+    numberOfBytes = atoi(a->count);
+
+  numberOfValues = (numberOfBytes+sizeof(grib_int_t)-1) / sizeof(grib_int_t);
+
+  updateOffsets(a,b,&count);
+
+  memcpy((b->packed),(b->values),numberOfBytes);
+
+  (b->packed) += numberOfBytes;
+  (b->values) += numberOfValues;
+
+  b->totalPackedBytes += numberOfBytes;
+  return a->next;
+}
+
+action* unpackBYTES(action* a,buffer *b) {
+/*
+// Unpack a string of bytes from buffer
+*/
+grib_int_t count, numberOfBytes, numberOfValues;
+
+  if( stringIsNotANumber(a->count) )
+    numberOfBytes = (a->reference->value);
+  else
+    numberOfBytes = atoi(a->count);
+
+  numberOfValues = (numberOfBytes+sizeof(grib_int_t)-1) / sizeof(grib_int_t);
+
+  updateOffsets(a,b,&count);
+
+  memcpy((b->values),(b->packed),numberOfBytes);
+
+  (b->packed) += numberOfBytes;
+  (b->values) += numberOfValues;
+
+  b->totalUnPackedBytes += numberOfBytes;
+  b->totalUnPackedValues += numberOfValues;
+
+  return a->next;
+}
+
+action* packF1(action* a,buffer *b) { 
+/*
+// Pack a flag (=1) into buffer
+*/
+grib_int_t count;
+grib_int_t* flag;
+
+  flag = (grib_int_t*) malloc(sizeof(grib_int_t));
+  if( flag == NULL ) {
+    perror("packF1: malloc failed in packF1");
+    exit(1);
+  }
+
+  *flag = atol(a->count);
+  (a->value) = *flag;
+  updateOffsets(a,b,&count);
+
+  MOVE1BYTE((b->packed),flag);
+  (b->packed)++;
+
+  b->totalPackedBytes++;
+  return a->next;
+}
+
+action* packD3(action* a,buffer *b) { 
+/*
+// Pack a 3-byte date modified by 19000000 if necessary
+// (see definitions 6 and 17)
+*/
+grib_int_t numberOfValues = 1, loop;
+grib_int_t date;
+
+  updateOffsets(a,b,&numberOfValues);
+/*
+// Save values which may be loop count and/or a running summation in a list
+*/
+  (a->value) = *(b->values);
+/*
+//(a->sum) += *(b->values);
+*/
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    date = *(b->values)++;
+    if( date > 19000000 ) date -= 19000000;
+    MOVE3BYTES((b->packed),&date);
+    (b->packed) += 3;
+  }
+
+  b->totalPackedBytes += numberOfValues*3;
+  return a->next;
+}
+
+action* unpackD3(action* a,buffer *b) { 
+/*
+// Unpack a 3-byte date modified by 19000000 if necessary
+// (see definitions 6 and 17)
+*/
+grib_int_t numberOfValues = 1, loop;
+grib_int_t date;
+
+  updateOffsets(a,b,&numberOfValues);
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    date = THREE_BYTE_INT((b->packed));
+    if( (date < 19000000) && (date > 100 ) ) date += 19000000;
+    *(b->values) = date;
+    (b->packed) += 3;
+    b->totalUnPackedBytes += 3;
+    (b->values)++;
+  }
+/*
+// Save value which is a loop count
+*/
+  if( numberOfValues > 1 )
+    (a->value) = numberOfValues;
+  else
+    (a->value) = date;
+  (a->sum) += *(b->values);
+
+  b->totalUnPackedValues += numberOfValues;
+  return a->next;
+}
+
+action* packSn(action* a,buffer *b, grib_int_t n) { 
+/*
+// Pack a signed n-byte value
+// Negative values are stored as a positive value with the most significant
+// bit set to 1
+*/
+grib_int_t numberOfValues = 1, loop;
+grib_int_t value;
+
+  updateOffsets(a,b,&numberOfValues);
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    value = *(b->values)++;
+    switch( (int) n ) {
+      case 1:
+        if( value < 0 ) value = - (value & 0x7f);
+        MOVE1BYTE((b->packed),&value);
+        break;
+      case 2:
+        if( value < 0 ) value = - (value & 0x7fff);
+        MOVE2BYTES((b->packed),&value);
+        break;
+      case 3:
+        if( value < 0 ) value = - (value & 0x7fffff);
+        MOVE3BYTES((b->packed),&value);
+        break;
+      case 4:
+        if( value < 0 ) value = - (value & 0x7fffffff);
+        MOVE4BYTES((b->packed),&value);
+        break;
+      default:
+        fprintf(stderr,"packSn: %d not yet handled\n",n);
+        exit(1);
+    }
+    (b->packed) += n;
+  }
+
+  b->totalPackedBytes += numberOfValues*n;
+  return a->next;
+}
+
+action* packS1(action* a,buffer *b) { return packSn(a,b,1); }
+
+action* packS2(action* a,buffer *b) { return packSn(a,b,2); }
+
+action* packS3(action* a,buffer *b) { return packSn(a,b,3); }
+
+action* packS4(action* a,buffer *b) { return packSn(a,b,4); }
+
+
+action* unpackSn(action* a,buffer *b, grib_int_t n) { 
+/*
+// Unpack a signed n-byte value
+// Negative values are stored as a positive value with the most significant
+// bit set to 1
+*/
+grib_int_t numberOfValues = 1, loop;
+grib_int_t value;
+
+  updateOffsets(a,b,&numberOfValues);
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    switch( (int) n ) {
+      case 1:
+        value = ONE_BYTE_INT((b->packed));
+        if( value & 0x80 ) value = - (value & 0x7f);
+        *(b->values) = value;
+        break;
+      case 2:
+        value = TWO_BYTE_INT((b->packed));
+        if( value & 0x8000 ) value = - (value & 0x7fff);
+        *(b->values) = value;
+        break;
+      case 3:
+        value = THREE_BYTE_INT((b->packed));
+        if( value & 0x800000 ) value = - (value & 0x7fffff);
+        *(b->values) = value;
+        break;
+      case 4:
+        value = FOUR_BYTE_INT((b->packed));
+        if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+        *(b->values) = value;
+        break;
+      default:
+        fprintf(stderr,"unpackSn: %d not yet handled\n",n);
+        exit(1);
+    }
+    (b->packed) += n;
+    (b->values)++;
+  }
+  if( numberOfValues > 1 )
+    (a->value) = numberOfValues;
+  else
+    (a->value) = value;
+
+  b->totalUnPackedBytes += numberOfValues * n;
+  b->totalUnPackedValues += numberOfValues;
+
+  return a->next;
+}
+
+action* unpackS1(action* a,buffer *b) { return unpackSn(a,b,1); }
+
+action* unpackS2(action* a,buffer *b) { return unpackSn(a,b,2); }
+
+action* unpackS3(action* a,buffer *b) { return unpackSn(a,b,3); }
+
+action* unpackS4(action* a,buffer *b) { return unpackSn(a,b,4); }
+
+
+action* packIn(action* a,buffer *b, grib_int_t n) { 
+/*
+// Pack an n-byte value
+*/
+grib_int_t numberOfValues = 1, loop;
+
+  updateOffsets(a,b,&numberOfValues);
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    switch( (int) n ) {
+      case 1:
+        MOVE1BYTE((b->packed),(b->values));
+        break;
+      case 2:
+        MOVE2BYTES((b->packed),(b->values));
+        break;
+      case 3:
+        MOVE3BYTES((b->packed),(b->values));
+        break;
+      case 4:
+        MOVE4BYTES((b->packed),(b->values));
+        break;
+      default:
+        fprintf(stderr,"packIn: %d not yet handled\n",n);
+        exit(1);
+    }
+    (b->packed) += n;
+    (b->values)++;
+  }
+
+  b->totalPackedBytes += numberOfValues*n;
+  return a->next;
+}
+
+action* packI1(action* a,buffer *b) { 
+/*
+// Save values which may be loop count and/or a running summation in a list
+*/
+  (a->value) = *(b->values);
+/*
+//(a->sum) += *(b->values);
+*/
+
+  return packIn(a,b,1);
+}
+
+action* packI2(action* a,buffer *b) { 
+/*
+// Save values which may be loop count and/or a running summation in a list
+*/
+  (a->value) = *(b->values);
+/*
+//(a->sum) += *(b->values);
+*/
+
+  return packIn(a,b,2);
+}
+
+action* packI3(action* a,buffer *b) { 
+/*
+// Save values which may be loop count and/or a running summation in a list
+*/
+  (a->value) = *(b->values);
+/*
+//(a->sum) += *(b->values);
+*/
+
+  return packIn(a,b,3);
+}
+
+action* packI4(action* a,buffer *b) { 
+/*
+// Save values which may be loop count and/or a running summation in a list
+*/
+  (a->value) = *(b->values);
+/*
+//(a->sum) += *(b->values);
+*/
+
+  return packIn(a,b,4);
+}
+
+action* packA4(action* a,buffer *b) { 
+/*
+// Pack an 4-byte ASCII value
+//
+// Note: assumes that only one A4 value is being handled (count is -)
+*/
+  memcpy((b->packed),(b->values),4);
+
+  (b->packed) +=4;
+  (b->values)++;
+  b->totalPackedBytes += 4;
+
+  return a->next;
+}
+
+action* packA8(action* a,buffer *b) { 
+/*
+// Pack an 8-byte ASCII value
+//
+// Note: assumes that only one A8 value is being handled (count is -)
+*/
+  memcpy((b->packed),(b->values),8);
+
+  (b->packed) +=8;
+  (b->values)++;
+  (b->values)++;
+  b->totalPackedBytes += 8;
+
+  return a->next;
+}
+
+action* packA1(action* a,buffer *b) { 
+/*
+// Pack an 1-byte ASCII value
+*/
+  return packIn(a,b,1);
+}
+
+action* packPAD(action* a,buffer *b) { 
+/*
+// Pack buffer with zeroes
+*/
+grib_int_t zero = 0, loop, numberOfZeroes = atoi((a->count));
+
+  updateOffsets(a,b,&numberOfZeroes);
+
+  if( NEQUAL(a->octet,"n/a") ) {
+    for( loop = 0; loop < numberOfZeroes; loop++ ) {
+      MOVE1BYTE((b->packed),&zero);
+      (b->packed)++;
+    }
+    b->totalPackedBytes += numberOfZeroes;
+  }
+
+  if( NEQUAL(a->ksec1,"n/a") ) (b->values) += numberOfZeroes;
+    
+  return a->next;
+}
+
+action* packLP_In(action* a,buffer *b, grib_int_t n) { 
+/*
+// Packs a list of single n-byte values in buffer
+*/
+action* relatedAction;
+grib_int_t count, numberOfValues, loop;
+grib_int_t N = (n < 0) ? -n : n;
+
+  relatedAction = a->reference;
+  if( relatedAction == NULL ) {
+    fprintf(stderr,"packLP_In: relatedAction '%s' not found for '%s'\n",
+           (a->count), (a->description));
+    exit(1);
+  }
+  numberOfValues = (relatedAction->value);
+
+  if((numberOfValues>0)&&( n < 0 )) numberOfValues--;
+
+  updateOffsets(a,b,&count);
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    switch( (int) N ) {
+      case 1:
+        MOVE1BYTE((b->packed),(b->values));
+        break;
+      case 2:
+        MOVE2BYTES((b->packed),(b->values));
+        break;
+      case 3:
+        MOVE3BYTES((b->packed),(b->values));
+        break;
+      case 4:
+        MOVE4BYTES((b->packed),(b->values));
+        break;
+      default:
+        fprintf(stderr,"packLP_In: %d not yet handled\n",N);
+        exit(1);
+    }
+    (b->packed) += N;
+    (b->values)++;
+  }
+
+  b->totalPackedBytes += (numberOfValues*N);
+  return a->next;
+}
+
+action* packLP_I1(action* a,buffer *b) { return packLP_In(a,b,1); }
+
+action* packLP_I2(action* a,buffer *b) { return packLP_In(a,b,2); }
+
+action* packLP_I3(action* a,buffer *b) { return packLP_In(a,b,3); }
+
+action* packLP_I4(action* a,buffer *b) { return packLP_In(a,b,4); }
+
+action* packLP_I4M1(action* a,buffer *b) { return packLP_In(a,b,-4); }
+
+/*=======================================*/
+
+action* packLP_Sn(action* a,buffer *b, grib_int_t n) { 
+/*
+// Packs a list of single n-byte values in buffer
+*/
+action* relatedAction;
+grib_int_t count, numberOfValues, loop;
+grib_int_t N = (n < 0) ? -n : n;
+grib_int_t value;
+
+
+  relatedAction = a->reference;
+  if( relatedAction == NULL ) {
+    fprintf(stderr,"packLP_Sn: relatedAction '%s' not found for '%s'\n",
+           (a->count), (a->description));
+    exit(1);
+  }
+  numberOfValues = (relatedAction->value);
+
+  if((numberOfValues>0)&&( n < 0 )) numberOfValues--;
+
+  updateOffsets(a,b,&count);
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    value = *(b->values)++;
+    switch( (int) N ) {
+      case 1:
+	if( value < 0 ) value = - (value & 0x7f);
+        MOVE1BYTE((b->packed),&value);
+        break;
+      case 2:
+	if( value < 0 ) value = - (value & 0x7fff);
+        MOVE2BYTES((b->packed),&value);
+        break;
+      case 3:
+	if( value < 0 ) value = - (value & 0x7fffff);
+        MOVE3BYTES((b->packed),&value);
+        break;
+      case 4:
+	if( value < 0 ) value = - (value & 0x7fffffff);
+        MOVE4BYTES((b->packed),&value);
+        break;
+      default:
+        fprintf(stderr,"packLP_Sn: %d not yet handled\n",N);
+        exit(1);
+    }
+    (b->packed) += N;
+  }
+
+  b->totalPackedBytes += (numberOfValues*N);
+  return a->next;
+}
+
+action* packLP_S1(action* a,buffer *b) { return packLP_Sn(a,b,1); }
+
+action* packLP_S2(action* a,buffer *b) { return packLP_Sn(a,b,2); }
+
+action* packLP_S3(action* a,buffer *b) { return packLP_Sn(a,b,3); }
+
+action* packLP_S4(action* a,buffer *b) { return packLP_Sn(a,b,4); }
+
+
+/*=======================================*/
+
+action* unpackF1(action* a,buffer *b) { 
+/*
+// Skips a flag in buffer
+*/
+  (a->value) = *(b->packed);
+  (b->packed)++;
+  b->totalUnPackedBytes++;
+  return a->next;
+}
+
+action* packL3(action* a,buffer *b) { 
+/*
+// Does (almost) nothing
+*/
+  return a->next;
+}
+
+action* unpackL3(action* a,buffer *b) { 
+/*
+// Unpack a 3-byte value without disturbing the buffer counts
+*/
+  *(b->values) = THREE_BYTE_INT((b->packed));
+  (a->value) = *(b->values);
+
+  return a->next;
+}
+
+action* unpackIn(action* a,buffer *b, grib_int_t n) { 
+/*
+// Unpack an n-byte value
+*/
+grib_int_t numberOfValues = 1, loop;
+
+  updateOffsets(a,b,&numberOfValues);
+  
+  if((numberOfValues>0)&&( n < 0 )) numberOfValues--;
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    switch( (int) n ) {
+      case 1:
+        *(b->values) = ONE_BYTE_INT((b->packed));
+        break;
+      case 2:
+        *(b->values) = TWO_BYTE_INT((b->packed));
+        break;
+      case 3:
+        *(b->values) = THREE_BYTE_INT((b->packed));
+        break;
+      case 4:
+        *(b->values) = FOUR_BYTE_INT((b->packed));
+        break;
+      default:
+        fprintf(stderr,"unpackIn: %d not yet handled\n",n);
+        exit(1);
+    }
+/*
+// Save value which may be loop count
+*/
+    (a->value) = *(b->values);
+    (a->sum) += *(b->values);
+
+    (b->packed) += n;
+    (b->values)++;
+  }
+
+  b->totalUnPackedBytes += numberOfValues * n;
+  b->totalUnPackedValues += numberOfValues;
+
+  return a->next;
+}
+
+action* unpackI1(action* a,buffer *b) { return unpackIn(a,b,1); }
+
+action* unpackI2(action* a,buffer *b) { return unpackIn(a,b,2); }
+
+action* unpackI3(action* a,buffer *b) { return unpackIn(a,b,3); }
+
+action* unpackI4(action* a,buffer *b) { return unpackIn(a,b,4); }
+
+action* unpackA4(action* a,buffer *b) {
+/*
+// Unpacks a 4-byte ASCII value
+//
+// Note: assumes that only one A4 value is being handled (count is -)
+*/
+
+  memcpy((b->values),(b->packed),4);
+  (a->value) = *(b->values);
+
+  (b->packed) += 4;
+  (b->values)++;
+
+  b->totalUnPackedBytes += 4;
+  b->totalUnPackedValues ++;
+
+  return a->next;
+}
+
+action* unpackA8(action* a,buffer *b) {
+/*
+// Unpacks a 8-byte ASCII value
+//
+// Note: assumes that only one A8 value is being handled (count is -)
+*/
+
+  memcpy((b->values),(b->packed),8);
+  (a->value) = *(b->values);
+
+  (b->packed) += 8;
+  (b->values) ++;
+  (b->values) ++;
+
+  b->totalUnPackedBytes += 8;
+  b->totalUnPackedValues ++;
+  b->totalUnPackedValues ++;
+
+  return a->next;
+}
+
+action* unpackA1(action* a,buffer *b) { return unpackIn(a,b,1); }
+
+
+action* unpackPAD(action* a,buffer *b) { 
+/*
+// Unpack zeroes from buffer
+*/
+grib_int_t loop, numberOfZeroes = atoi((a->count)), zero = 0;
+
+  if( NEQUAL(a->octet,"n/a") ) {
+    if( NEQUAL(a->octet,"-") )
+      (b->packed) =  (b->startOctets)+atoi(a->octet)-OCTETSTART;
+    (b->packed) += numberOfZeroes;
+    (b->totalUnPackedBytes) += numberOfZeroes;
+  }
+
+  if( NEQUAL(a->ksec1,"n/a") ) {
+    if( NEQUAL(a->ksec1,"-") )
+      (b->values) = (b->startKsec1)+atoi(a->ksec1)-KSEC1START;
+
+    for( loop = 0; loop < numberOfZeroes; loop++ ) *(b->values)++ = 0;
+    b->totalUnPackedValues += numberOfZeroes;
+  }
+  return a->next;
+}
+
+action* unpackLP_In(action* a,buffer *b, grib_int_t n) { 
+/*
+// Unpacks a list of single n-byte values from buffer
+*/
+action* relatedAction;
+grib_int_t count, numberOfValues, loop;
+grib_int_t N = (n < 0) ? -n : n;
+
+  updateOffsets(a,b,&count);
+
+  relatedAction = a->reference;
+  if( relatedAction == NULL ) {
+    fprintf(stderr,"unpackLP_In: relatedAction '%s' not found for '%s'\n",
+           (a->count), (a->description));
+    exit(1);
+  }
+  numberOfValues = (relatedAction->value);
+
+  if((numberOfValues>0)&&( n < 0 )) numberOfValues--;
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    switch( (int) N ) {
+      case 1:
+        *(b->values) = ONE_BYTE_INT((b->packed));
+        (b->packed) += 1;
+        b->totalUnPackedBytes += 1;
+        break;
+      case 2:
+        *(b->values) = TWO_BYTE_INT((b->packed));
+        (b->packed) += 2;
+        b->totalUnPackedBytes += 2;
+        break;
+      case 3:
+        *(b->values) = THREE_BYTE_INT((b->packed));
+        (b->packed) += 3;
+        b->totalUnPackedBytes += 3;
+        break;
+      case 4:
+        *(b->values) = FOUR_BYTE_INT((b->packed));
+        (b->packed) += 4;
+        b->totalUnPackedBytes += 4;
+        break;
+      default:
+        fprintf(stderr,"unpackLP_In: %d not yet handled\n",N);
+        exit(1);
+    }
+    (b->values)++;
+  }
+
+  b->totalUnPackedValues += numberOfValues;
+  return a->next;
+}
+
+action* unpackLP_I1(action* a,buffer *b) { return unpackLP_In(a,b,1); }
+
+action* unpackLP_I2(action* a,buffer *b) { return unpackLP_In(a,b,2); }
+
+action* unpackLP_I3(action* a,buffer *b) { return unpackLP_In(a,b,3); }
+
+action* unpackLP_I4(action* a,buffer *b) { return unpackLP_In(a,b,4); }
+
+action* unpackLP_I4M1(action* a,buffer *b) { return unpackLP_In(a,b,-4); }
+
+/*==========================================================*/
+
+action* unpackLP_Sn(action* a,buffer *b, grib_int_t n) { 
+/*
+// Unpacks a list of single n-byte values from buffer
+*/
+action* relatedAction;
+grib_int_t count, numberOfValues, loop;
+grib_int_t N = (n < 0) ? -n : n;
+grib_int_t value;
+
+  updateOffsets(a,b,&count);
+
+  relatedAction = a->reference;
+  if( relatedAction == NULL ) {
+    fprintf(stderr,"unpackLP_Sn: relatedAction '%s' not found for '%s'\n",
+           (a->count), (a->description));
+    exit(1);
+  }
+  numberOfValues = (relatedAction->value);
+
+  if((numberOfValues>0)&&( n < 0 )) numberOfValues--;
+
+  for( loop = 0; loop < numberOfValues; loop++ ) {
+    
+    switch( (int) N ) {
+      case 1:
+        value = ONE_BYTE_INT((b->packed));
+	if( value & 0x80 ) value = - (value & 0x7f);
+	*(b->values) = value;
+        (b->packed) += 1;
+        b->totalUnPackedBytes += 1;
+        break;
+      case 2:
+        value = TWO_BYTE_INT((b->packed));
+	if( value & 0x8000 ) value = - (value & 0x7fff);
+	*(b->values) = value;
+        (b->packed) += 2;
+        b->totalUnPackedBytes += 2;
+        break;
+      case 3:
+        value = THREE_BYTE_INT((b->packed));
+	if( value & 0x800000 ) value = - (value & 0x7fffff);
+	*(b->values) = value;
+        (b->packed) += 3;
+        b->totalUnPackedBytes += 3;
+        break;
+      case 4:
+        value = FOUR_BYTE_INT((b->packed));
+	if( value & 0x80000000 ) value = - (value & 0x7fffffff);
+	*(b->values) = value;
+        (b->packed) += 4;
+        b->totalUnPackedBytes += 4;
+        break;
+      default:
+        fprintf(stderr,"unpackLP_Sn: %d not yet handled\n",N);
+        exit(1);
+    }
+    (b->values)++;
+  }
+
+  b->totalUnPackedValues += numberOfValues;
+  return a->next;
+}
+
+action* unpackLP_S1(action* a,buffer *b) { return unpackLP_Sn(a,b,1); }
+
+action* unpackLP_S2(action* a,buffer *b) { return unpackLP_Sn(a,b,2); }
+
+action* unpackLP_S3(action* a,buffer *b) { return unpackLP_Sn(a,b,3); }
+
+action* unpackLP_S4(action* a,buffer *b) { return unpackLP_Sn(a,b,4); }
+
+
+/*==========================================================*/
+
+action* packLIST(action* a,buffer *b) {
+/*
+// Packs a list of several values into buffer
+*/
+grib_int_t count = a->reference->value;
+grib_int_t i;
+
+  (a->sum) = 0;
+  for(i = 0; i < count; i++) {
+    encode(a->next,b);
+  }
+
+  return a->end->next;
+}
+
+action* unpackLIST(action* a,buffer *b) {
+/*
+// Unpacks a list of several values from buffer
+*/
+grib_int_t count = a->reference->value;
+grib_int_t i;
+
+  for(i = 0; i < count; i++) {
+    decode(a->next,b);
+  }
+
+  return a->end->next;
+}
+
+/*==========================================================*/
+
+
+void init_reference(
+  action* first,
+  action* a,
+  char* description,
+  char* octet,
+  char* ksec1,
+  char* count)
+{
+/*
+// Finds a reference from a 'count' field to a previous action
+// which stores the count value
+*/
+
+  if( NEQUAL(count,"-") ) {
+    while(first)
+    {
+      if( EQUAL(first->description,count) ) {
+    	  a->reference = first;
+    	  return;
+      }
+      first = first->next;
+    }
+  }
+  a->reference = NULL;
+
+}
+
+/*==========================================================*/
+action* packENDLIST(action* a,buffer *b) { return 0; } 
+
+action* unpackENDLIST(action* a,buffer *b) { return 0; }
+
+action* packENDIF(action* a,buffer *b) { return 0; } 
+
+action* unpackENDIF(action* a,buffer *b) { return 0; }
+
+void initENDLIST(
+  action* first,
+  action* a,
+  char* description,
+  char* octet,
+  char* code,
+  char* ksec1,
+  char* count) {
+/*
+// Finds the start action described in a 'count' field
+*/
+  init(first,a,description,octet,code,ksec1,count);
+
+  while(first) {
+    if( EQUAL(first->description,count) ) {
+      first->end = a;
+      return;
+    }
+    first = first->next;
+  }
+
+  fprintf(stderr,"initENDLIST: Cannot find end loop (%s)",count); 
+  exit(1); 
+}
+
+void initENDIF(
+  action* first,
+  action* a,
+  char* description,
+  char* octet,
+  char* code,
+  char* ksec1,
+  char* count) {
+/*
+// Finds the start action described in a 'ksec1' field
+*/
+  init(first,a,description,octet,code,ksec1,count);
+
+  while(first) {
+    if( EQUAL(first->description,ksec1) ) {
+      first->end = a;
+      return;
+    }
+    first = first->next;
+  }
+
+  fprintf(stderr,"initENDIF: Cannot find end loop (%s)",ksec1); 
+  exit(1); 
+}
+
+/*==========================================================*/
+
+int test_eq(grib_int_t a,grib_int_t b)  { return a == b; }
+int test_ne(grib_int_t a,grib_int_t b)  { return a != b; }
+int test_ge(grib_int_t a,grib_int_t b)  { return a >= b; }
+int test_gt(grib_int_t a,grib_int_t b)  { return a > b;  }
+int test_le(grib_int_t a,grib_int_t b)  { return a <= b; }
+int test_lt(grib_int_t a,grib_int_t b)  { return a < b;  }
+int test_bit(grib_int_t a,grib_int_t b) { return (a & (1 << b)) != 0;  }
+
+/*==========================================================*/
+
+action* pack_if(action* a,buffer *b)
+{ 
+grib_int_t val1 = a->reference->value;
+grib_int_t val2 = atol(a->ksec1);
+
+  if(a->test(val1,val2)) encode(a->next,b);
+	
+  return a->end->next;
+} 
+
+action* unpack_if(action* a,buffer *b)
+{ 
+grib_int_t val1 = a->reference->value;
+grib_int_t val2 = atol(a->ksec1);
+
+  if(a->test(val1,val2)) decode(a->next,b);
+	
+  return a->end->next;
+} 
+
+action* createLocalDefinition(action*,grib_int_t);
+
+action* packLOCAL(action* a,buffer *b)
+{
+grib_int_t localDefinitionNumber;
+grib_int_t length;
+action* local;
+action next;
+grib_int_t* lengthValue = (b->values) - 1;
+grib_octet_t* packedLengthValue = (b->packed) - 2;
+
+/*
+// Setup ccc = 98, sss = 000, nnn = number
+*/
+  localDefinitionNumber = *(b->values);
+  localDefinitionNumber += 98000000;
+
+  local = createLocalDefinition(a,localDefinitionNumber);
+  local = local->next;
+
+  while( local ) {
+    memmove(&next,local,sizeof(action));
+    next.next = NULL;
+    encode(&next,b);
+    local = local->next;
+  }
+
+  length = (b->values) - lengthValue - 1;
+
+  *lengthValue = length;
+  MOVE2BYTES(packedLengthValue,&length);
+  
+  return NULL;
+}
+
+action* unpackLOCAL(action* a,buffer *b)
+{
+grib_int_t localDefinitionNumber;
+action* local;
+action next;
+grib_int_t* lengthValue = (b->values) - 1;
+grib_octet_t* packedLengthValue = (b->packed) - 2;
+
+  *lengthValue = TWO_BYTE_INT(packedLengthValue);
+/*
+// Setup ccc = 98, sss = 000, nnn = number
+*/
+  localDefinitionNumber = ONE_BYTE_INT((b->packed));
+  localDefinitionNumber += 98000000;
+
+  local = createLocalDefinition(a,localDefinitionNumber);
+  local = local->next;
+
+  while( local ) {
+    memmove(&next,local,sizeof(action));
+    next.next = NULL;
+    decode(&next,b);
+    local = local->next;
+  }
+
+  return NULL;
+}
+
+
+/*==========================================================*/
+
+static op_code codes[] = {
+  { "IF_EQ",   init,        pack_if,     unpack_if,     test_eq },
+  { "IF_NEQ",  init,        pack_if,     unpack_if,     test_ne},
+  { "IF_GT",   init,        pack_if,     unpack_if,     test_gt},
+  { "ENDIF",   initENDIF,   packENDIF,   unpackENDIF, },
+  { "F1",      init,        packF1,      unpackF1, },
+  { "SP_TO",   init,        packSP_TO,   unpackSP_TO, },
+  { "PAD",     init,        packPAD,     unpackPAD, },
+  { "PADTO",   init,        packPADTO,   unpackPADTO, },
+  { "PADMULT", init,        packPADMULT, unpackPADMULT, },
+  { "PADFROM", init,        packPADFROM, unpackPADFROM, },
+  { "BYTES",   init,        packBYTES,   unpackBYTES, },
+  { "D3",      init,        packD3,      unpackD3, },
+  { "S1",      init,        packS1,      unpackS1, },
+  { "S2",      init,        packS2,      unpackS2, },
+  { "S3",      init,        packS3,      unpackS3, },
+  { "S4",      init,        packS4,      unpackS4, },
+  { "L3",      init,        packL3,      unpackL3, },
+  { "I1",      init,        packI1,      unpackI1, },
+  { "I2",      init,        packI2,      unpackI2, },
+  { "I3",      init,        packI3,      unpackI3, },
+  { "I4",      init,        packI4,      unpackI4, },
+  { "A4",      init,        packA4,      unpackA4, },
+  { "A8",      init,        packA8,      unpackA8, },
+  { "A1",      init,        packA1,      unpackA1, },
+  { "LOCAL",   init,        packLOCAL,   unpackLOCAL, },
+  { "LP_I1",   init,        packLP_I1,   unpackLP_I1, },
+  { "LP_I2",   init,        packLP_I2,   unpackLP_I2, },
+  { "LP_I3",   init,        packLP_I3,   unpackLP_I3, },
+  { "LP_I4",   init,        packLP_I4,   unpackLP_I4, },
+  { "LP_I4M1", init,        packLP_I4M1, unpackLP_I4M1, },
+  { "LP_S1",   init,        packLP_S1,   unpackLP_S1, },
+  { "LP_S2",   init,        packLP_S2,   unpackLP_S2, },
+  { "LP_S3",   init,        packLP_S3,   unpackLP_S3, },
+  { "LP_S4",   init,        packLP_S4,   unpackLP_S4, },
+  { "LIST",    init,        packLIST,    unpackLIST, },
+  { "ENDLIST", initENDLIST, packENDLIST, unpackENDLIST, },
+};
+
+action* createLocalDefinitionHandler(grib_int_t definitionNumber) {
+/*
+// Creates a handler from a text description of a local definition.
+//
+// The file name is localDefinitionTemplate_mmm_nnn for definition nnn
+// of a centre with WMO identifier mmm (eg ECMWF = 098).
+// The directory containing the text definition can be specified
+// by environment variable LOCAL_DEFINITION_TEMPLATES.
+*/
+static char * fullPathName;
+FILE* file;
+char line[1024];
+grib_int_t i;
+action* first = 0;
+action* last  = 0;
+int useInternalDefinition = 0, number;
+char* definition;
+char* next = NULL;
+
+  fullPathName = findLocalDefinitionFile(definitionNumber);
+  if( fullPathName == NULL) {
+    useInternalDefinition = 1;
+    number = definitionNumber % 1000;
+
+    switch( (int) number ) {
+
+      default:
+        {
+          int DefinitionNumber = (int) definitionNumber;
+          int centre    = DefinitionNumber/1000000;
+          int subcentre = (DefinitionNumber/1000)%1000;
+          int number    = DefinitionNumber%1000;
+
+          printf("createLocalDefinitionHandler: no local definition found for:\n");
+
+          printf("createLocalDefinitionHandler: - centre     %d\n",centre);
+          printf("createLocalDefinitionHandler: - subcentre  %d\n",subcentre);
+          printf("createLocalDefinitionHandler: - definition %d\n",number);
+          return NULL;
+        }
+    }
+  }
+
+  if( ! useInternalDefinition ) {
+    file = fopen(fullPathName,"r");
+    if( file == NULL) {
+      perror("createLocalDefinitionHandler: Error opening template file");
+      return NULL;
+    }
+  }
+
+  do
+  {
+    char description[40];
+    char octet[40];
+    char code[40];
+    char ksec1[40];
+    char count[40];
+    action* a = 0;
+
+
+      if( useInternalDefinition ) {
+        int count;
+
+        next = strchr(definition,'\n');
+        if( next == NULL )
+          strcpy(line,definition);
+        else {
+          count = next - definition;
+          memcpy(line,definition,count);
+          line[count] = '\0';
+          definition += (count+1);
+        }
+      }
+      else {
+        next = fgets(line,sizeof(line)-1,file);
+        if( next == NULL ) continue;
+      }
+
+      if( line[0] == '!') continue;
+
+      sscanf(line,"%s %s %s %s %s",description,octet,code,ksec1,count);
+
+      for(i = 0; i < NUMBER(codes); i++ ) {
+
+        if( EQUAL(code,codes[i].description) ) {
+
+          a = (action*)malloc(sizeof(action));
+          if( a == NULL ) {
+            fprintf(stderr,"createLocalDefinitionHandler: out of memory");
+            exit(1);
+          }
+
+          codes[i].init(first,a,description,octet,code,ksec1,count);
+          a->pack   = codes[i].pack;
+          a->unpack = codes[i].unpack;
+          a->test   = codes[i].test;
+          a->sum    = 0;
+          init_reference(first,a,description,octet,ksec1,count);
+
+          if(!first)
+            first = last = a;
+          else
+            last->next = a;
+
+          last = a;
+          break;
+
+        }
+      }
+
+      if(!a) {
+        fprintf(stderr,"createLocalDefinitionHandler: Invalid opcode(%s)",code);
+        return NULL;
+      }
+
+  } while( next != NULL );
+  if(file) fclose(file);
+  return first;
+
+}
+
+void encode(action* a,buffer* b)
+{
+  while(a) {
+    a = a->pack(a,b);
+  }
+  return;
+}
+
+int encodeLocalDefinitionValues(
+  action* a,
+  grib_int_t* values,
+  unsigned char* packed,
+  grib_int_t * numberOfValues,
+  grib_int_t * numberOfBytes) {
+/*
+// Builds packed bytes in 'buffer' from integer 'values'.
+//
+// Returns the number of bytes packed in buffer.
+*/
+buffer b;
+
+  b.totalPackedBytes = 0;
+  b.totalUnPackedBytes = 0;
+  b.values = values;
+  b.startKsec1 = values;
+  b.packed = packed;
+  b.startOctets  = packed;
+  encode(a,&b);
+
+  *numberOfValues = (b.values - b.startKsec1);
+  *numberOfBytes  = b.totalPackedBytes;
+  return 0;
+}
+
+void decode(action* a,buffer* b)
+{
+  while(a) {
+    a = a->unpack(a,b);
+  }
+  return;
+}
+
+int decodeLocalDefinitionValues(
+  action* a,
+  unsigned char* packed,
+  grib_int_t* values,
+  grib_int_t * numberOfValues,
+  grib_int_t * numberOfBytes) {
+/*
+// Builds integer 'values' from packed bytes in 'buffer'.
+//
+// Returns the number of values unpacked.
+*/
+buffer b;
+
+  b.totalUnPackedValues = 0;
+  b.totalUnPackedBytes = 0;
+  b.values = values;
+  b.startKsec1 = values;
+  b.packed = packed;
+  b.startOctets  = packed;
+  decode(a,&b);
+
+  *numberOfValues = b.totalUnPackedValues;
+  *numberOfBytes  = b.totalUnPackedBytes;
+  return 0;
+}
+
+action* createLocalDefinition(action* actionSoFar,grib_int_t definitionNumber) {
+/*
+// Creates a handler from a text description of a local definition.
+//
+// The file name is localDefinitionTemplate_mmm_nnn for definition nnn
+// of a centre with WMO identifier mmm (eg ECMWF = 098).
+// The directory containing the text definition can be specified
+// by environment variable LOCAL_DEFINITION_TEMPLATES.
+*/
+static char * fullPathName;
+FILE* file;
+char line[1024];
+grib_int_t i;
+action* latest  = actionSoFar;
+int useInternalDefinition = 0, number;
+char* definition;
+char* next = NULL;
+
+  fullPathName = findLocalDefinitionFile(definitionNumber);
+  if( fullPathName == NULL) {
+    useInternalDefinition = 1;
+    number = definitionNumber % 1000;
+
+    switch( (int) number ) {
+
+      default:
+        {
+          int DefinitionNumber = (int) definitionNumber;
+          int centre    = DefinitionNumber/1000000;
+          int subcentre = (DefinitionNumber/1000)%1000;
+          int number    = DefinitionNumber%1000;
+
+          printf("createLocalDefinition: no local definition found for:\n");
+
+          printf("createLocalDefinition: - centre     %d\n",centre);
+          printf("createLocalDefinition: - subcentre  %d\n",subcentre);
+          printf("createLocalDefinition: - definition %d\n",number);
+          exit(1);
+        }
+    }
+  }
+
+  if( ! useInternalDefinition ) {
+    file = fopen(fullPathName,"r");
+    if( file == NULL) {
+      perror("createLocalDefinition: Error opening template file");
+      return NULL;
+    }
+  }
+
+  do
+  {
+    char description[40];
+    char octet[40];
+    char code[40];
+    char ksec1[40];
+    char count[40];
+    action* a = 0;
+
+
+      if( useInternalDefinition ) {
+        int count;
+
+        next = strchr(definition,'\n');
+        if( next == NULL )
+          strcpy(line,definition);
+        else {
+          count = next - definition;
+          memcpy(line,definition,count);
+          line[count] = '\0';
+          definition += (count+1);
+        }
+      }
+      else {
+        next = fgets(line,sizeof(line)-1,file);
+        if( next == NULL ) continue;
+      }
+
+      if( line[0] == '!') continue;
+
+      sscanf(line,"%s %s %s %s %s",description,octet,code,ksec1,count);
+
+      for(i = 0; i < NUMBER(codes); i++ ) {
+
+        if( EQUAL(code,codes[i].description) ) {
+
+          a = (action*)malloc(sizeof(action));
+          if( a == NULL ) {
+            fprintf(stderr,"createLocalDefinition: out of memory");
+            exit(1);
+          }
+          if( NEQUAL(octet,"n/a") ) strcpy(octet,"-");
+          if( NEQUAL(ksec1,"n/a") ) strcpy(ksec1,"-");
+          codes[i].init(actionSoFar,a,description,octet,code,ksec1,count);
+          a->pack   = codes[i].pack;
+          a->unpack = codes[i].unpack;
+          a->test   = codes[i].test;
+          a->sum    = 0;
+          init_reference(actionSoFar,a,description,octet,ksec1,count);
+
+          latest->next = a;
+          latest = a;
+
+          break;
+
+        }
+      }
+
+      if(!a) {
+        fprintf(stderr,"createLocalDefinition: Invalid opcode(%s)",code);
+        return NULL;
+      }
+
+  } while( next != NULL );
+  if(file) fclose(file);
+  return actionSoFar;
+
+}
diff --git a/gribex/handleLocalDefinitions.h b/gribex/handleLocalDefinitions.h
new file mode 100755
index 0000000..2b7726a
--- /dev/null
+++ b/gribex/handleLocalDefinitions.h
@@ -0,0 +1,103 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#include "grib_int_t.h"
+
+#ifndef UNPACK_H
+#define UNPACK_H
+
+#define ONE_BYTE_INT(a)   (int) ( *(a) & 0xff )
+#define TWO_BYTE_INT(a)   (int) ( ONE_BYTE_INT(a)<<8 | ONE_BYTE_INT(a+1))
+#define THREE_BYTE_INT(a) (int) (TWO_BYTE_INT((a))<<8 | ONE_BYTE_INT(a+2))
+#define FOUR_BYTE_INT(a)  (int) (THREE_BYTE_INT((a))<<8 | ONE_BYTE_INT(a+3))
+
+#define MOVE1BYTE(p,n)  ( *(p)     = ((*(n)>> 0) & 0xFF) ) 
+#define MOVE2BYTES(p,n) ( *(p)     = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>> 0) & 0xFF) )
+#define MOVE3BYTES(p,n) ( *(p)     = ((*(n)>>16) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+2) = ((*(n)>> 0) & 0xFF) )
+#define MOVE4BYTES(p,n) ( *(p)     = ((*(n)>>24) & 0xFF) ) , \
+                        ( *((p)+1) = ((*(n)>>16) & 0xFF) ) , \
+                        ( *((p)+2) = ((*(n)>> 8) & 0xFF) ) , \
+                        ( *((p)+3) = ((*(n)>> 0) & 0xFF) )
+
+
+#define NUMBER(x) (sizeof(x)/sizeof(x[0]))
+#define OCTETSTART 41
+#define KSEC1START 37
+
+#define NEQUAL(a,b) (strcmp((a),(b)) != 0)
+#define EQUAL(a,b)  (strcmp((a),(b)) == 0)
+
+typedef struct action action;
+
+typedef struct buffer {
+grib_int_t    totalPackedBytes;
+grib_int_t    totalUnPackedValues;
+grib_int_t    totalUnPackedBytes;
+grib_int_t*   values;
+grib_int_t*   startKsec1;
+grib_octet_t* packed;
+grib_octet_t* startOctets;
+} buffer;
+
+char* findLocalDefinitionFile(grib_int_t);
+
+void encode(action*,buffer*);
+void decode(action*,buffer*);
+
+typedef action* (*pack_proc)(action*,buffer*);
+typedef action* (*unpack_proc)(action*,buffer*);
+typedef int (*test_proc)(grib_int_t,grib_int_t);
+
+struct action {
+ grib_string_t    *description;
+ grib_string_t    *octet;
+ grib_string_t    *code;
+ grib_string_t    *ksec1;
+ grib_string_t    *count;
+struct action* next;
+pack_proc      pack;
+unpack_proc    unpack;
+
+grib_int_t           value;
+
+test_proc      test;
+grib_int_t           sum;
+
+struct action* reference;
+struct action* end;
+
+} ;
+
+/*==========================================================*/
+
+typedef void (*init_proc)(action*,action*,char*,char*,char*,char*,char*);
+
+typedef struct op_code {
+	 grib_string_t *description;
+	init_proc   init;
+	pack_proc   pack;
+	unpack_proc unpack;
+	test_proc   test;
+} op_code;
+
+/*==========================================================*/
+
+action* createLocalDefinitionHandler(grib_int_t);
+
+int encodeLocalDefinitionValues(action*,grib_int_t*,grib_octet_t*,grib_int_t*,grib_int_t*);
+
+int decodeLocalDefinitionValues(action*,grib_octet_t*,grib_int_t*,grib_int_t*,grib_int_t*);
+
+void releaseAction(action*);
+
+#endif /* End of UNPACK_H */
diff --git a/gribex/inscal.F b/gribex/inscal.F
new file mode 100755
index 0000000..ec12651
--- /dev/null
+++ b/gribex/inscal.F
@@ -0,0 +1,153 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE INSCAL (PDATA,KDATA,KLEN,PREF,PSCALE,NBPV)
+C
+C---->
+C**** INSCAL - Vectorise calculation of increments.
+C
+C     Purpose.
+C     --------
+C
+C     Vectorise calculation of increments.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL INSCAL (PDATA,KDATA,KLEN,PREF,PSCALE,NBPV)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PDATA      - Array of floating point values.
+C     KLEN       - Number of values to be converted.
+C     PREF       - Reference value.
+C     PSCALE     - Scale factor.
+C     NBPV       - Number of bits per packed value
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KDATA      - Array of integer increments
+C
+C     Method.
+C     -------
+C
+C     The reference value is subtracted from each value,
+C     and the result is then divided by the scale factor.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB representation.
+C
+C     Comments.
+C     --------
+C
+C     PDATA and KDATA are really the same array. This routine
+C     is just a device to force vectorisation on the Cray,
+C     without the necessity of using another array.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy     ECMWF     25.06.91
+C
+C     Modifications.
+C     _____________
+C
+C     J.D.Chambers          ECMWF     21.11.94
+C     Use JNINT on VAX
+C
+C     J.D.Chambers          ECMWF     21.11.94
+C     Check number of bits per value is not exceeded
+C
+C     P.J.Towers            ECMWF     18.07.02
+C     Optimised for IBM Power4.
+C         -Merged loops
+C         -Replaced Nint(x) by Int(x+0.5)
+C         -Replaced division by scale by multiplication by reciprocal
+C
+C     R. El Khatib / D. Paradis METEO-FRANCE 06.02.08
+C         - (No conversion if the value exceeds the number of bits for
+C         integers 
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+#ifdef CRAY
+      IMPLICIT NONE
+#endif
+#include "grbcom.h"
+#include "grprs.h"
+C
+      INTEGER KDATA(KLEN), NBPV, LOOP, MAXNBPV
+      INTEGER INTEMAX
+C
+      REAL PDATA(KLEN), PREF, PSCALE
+      REAL ZRECIP
+      REAL ZI
+      LOGICAL LPDEBUG
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Calculation of increments.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      LPDEBUG = ( NDBG.GE.1 )
+      MAXNBPV = 2**NBPV
+      ZRECIP = 1.0 / PSCALE
+      IF( LPDEBUG ) THEN
+        WRITE(GRPRSM,*) 'INSCAL: MAXNBPV = ', MAXNBPV
+        WRITE(GRPRSM,*) 'INSCAL: PSCALE = ', PSCALE
+        WRITE(GRPRSM,*) 'INSCAL: ZRECIP = ', ZRECIP
+        WRITE(GRPRSM,*) 'INSCAL: PREF = ', PREF
+        WRITE(GRPRSM,*) 'INSCAL: KLEN = ', KLEN
+      ENDIF
+
+#ifdef JBPW_64
+      INTEMAX = 140737488355327
+#else
+      INTEMAX = 2147483647
+#endif
+
+      DO LOOP = 1,KLEN
+#ifdef VAX
+         KDATA(LOOP) = JNINT ( (PDATA(LOOP) - PREF) / PSCALE )
+#else
+         ZI =  (PDATA(LOOP) - PREF) * ZRECIP + 0.5
+         IF (ABS(ZI) .GE. INTEMAX) THEN
+            KDATA(LOOP) = MAXNBPV - 1
+         ELSE
+            KDATA(LOOP) =  INT ( ZI )
+         ENDIF
+#endif
+         IF( KDATA(LOOP).GE.MAXNBPV ) KDATA(LOOP) = MAXNBPV - 1
+         IF( KDATA(LOOP).LT.0 ) KDATA(LOOP) = 0
+      ENDDO
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/insmp1.F b/gribex/insmp1.F
new file mode 100755
index 0000000..e6eb28b
--- /dev/null
+++ b/gribex/insmp1.F
@@ -0,0 +1,406 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INSMP1(KGRIB,KLENG,KMAP1,KSECM,PSEC4,KSIZE,KBITS,
+     X                  PMISS,HFUNC,KNUM,KPR,KRET)
+C
+C---->
+C**** INSMP1 - Insertion of primary bit map for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C     Generates a primary bit-map (Section 3 bit-map) and
+C     inserts in array of GRIB coded data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL INSMP1(KGRIB,KLENG,KMAP1,KSECM,PSEC4,KSIZE,KBITS,
+C    X            PMISS,HFUNC,KNUM,KPR,KRET)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KGRIB      - Array into which data is being packed in GRIB code.
+C
+C     KLENG      - Length of this array.
+C
+C     KMAP1      - Bit-pointer to start of primary bit-map
+C                  (Section 3 bitmap) in array KGRIB.
+C
+C     KSECM      - Indicator of use of secondary bitmap
+C                  (Section 4 bitmap) in array KGRIB.
+C                  0 , No secondary bit-map.
+C                  32, Secondary bit-map to be added later.
+C
+C     PSEC4      - Array of data values to be packed in
+C                  GRIB code, containing missing data
+C                  indicator PMISS where appropriate.
+C
+C     KSIZE      - Number of values, including missing data
+C                  values, in array PSEC4.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     PMISS      - Value indicating missing data in array PSEC4.
+C
+C     HFUNC      - 'C' , GRIB data being packed normally.
+C                  'M' , GRIB data being packed in fixed length messages
+C
+C     KNUM       - Number of values at each grid point.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     PSEC4      - Array of data values to be packed in
+C                  GRIB code. Changes to contents depend
+C                  on function performed eg
+C
+C                  Rn = Real data value at point n.
+C                  M  = Missing data indicator.
+C                  On input PSEC4 is R1 R2 M M  M R6
+C
+C                  Output with function 'C', single value per point:
+C                    Bit-map is 1  1  0  0  0  1
+C                    PSEC4 is   R1 R2 R6 M  M  M
+C                                      ^
+C                                      |
+C                                    KSIZE
+C
+C                  Output with function 'C' , matrix (2x1) of values
+C                  per point:
+C                    Bit-map is 1  0  1
+C                    PSEC4 is   R1 R2 M  R6 M  M  M
+C                                         ^
+C                                         |
+C                                       KSIZE
+C
+C                  Output with function 'M' with no secondary bit-maps,
+C                  single value:
+C                    Bit-map is 1  1  0  0  0  1
+C                    PSEC4 is   R1 R2 R6 R1 R1 R1
+C                                              ^
+C                                              |
+C                                            KSIZE
+C
+C                  Output with function 'M' with secondary bit-maps,
+C                  (2x1 matrix)
+C                    Bit-map is 1  1  1
+C                    PSEC4 is   R1 R2 M  M  M  R6
+C                                              ^
+C                                              |
+C                                            KSIZE
+C
+C     KSIZE      - The number of data values remaining in
+C                  array PSEC4 to be packed.
+C
+C     KRET       - Return code.
+C                  0 , No error encountered.
+C                  1 , Error in routine INXBIT.
+C
+C     Method.
+C     -------
+C
+C     The bit-map contains 1 where valid data exists and 0
+C     where data is missing. The corresponding data array
+C     contains valid data and the missing data indicator value.
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C
+C     Reference.
+C     ----------
+C
+C     See routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      09:07:92
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      19:10:92
+C     Maximum sizes increased to allow for packing of 2D spectra.
+C     Number of data values 120*61*12*25
+C
+C     J.D.Chambers     ECMWF      09:03:94
+C     Maximum size for bitmap array increased to 132000
+C     to allow for products 0.5 * 0.5 degrees, whole
+C     hemisphere (N or S).
+C
+C     J.D.Chambers     ECMWF      13:07:94
+C     Maximum size for bitmap array increased to 140000
+C     to allow for N160 products whole globe
+C
+C     J.D.Chambers     ECMWF      24:05:95
+C     Handle bitmap in strips to avoid problem with very large products
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Strips size (JPWORK) enlarged to 10000.
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPWORK
+      PARAMETER (JPWORK=10000)
+C
+C     Subroutine arguents
+C
+      INTEGER KGRIB, KLENG, KMAP1, KSECM, KSIZE, KBITS, KNUM, KPR, KRET
+      DIMENSION KGRIB(*)
+      REAL PSEC4, PMISS
+      DIMENSION PSEC4(*)
+      CHARACTER*(*) HFUNC
+C
+C     Local variables
+C
+      INTEGER IMAP1, IMISS, NEXTIN, NXTOUT, INOBT, IPT
+      DIMENSION IMAP1(JPWORK)
+      INTEGER JLOOP, JLOOPI, NEXT, IMANY
+      REAL VALUE
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) THEN
+        WRITE(GRPRSM,*) 'INSMP1: Section 1.'
+        WRITE(GRPRSM,*) '         Input values used -'
+        WRITE(GRPRSM,*) ' KLENG  = ', KLENG
+        WRITE(GRPRSM,*) ' KMAP1  = ', KMAP1
+        WRITE(GRPRSM,*) ' KSECM  = ', KSECM
+        WRITE(GRPRSM,*) ' KSIZE  = ', KSIZE
+        WRITE(GRPRSM,*) ' KBITS  = ', KBITS
+        WRITE(GRPRSM,*) ' PMISS  = ', PMISS
+        WRITE(GRPRSM,*) ' HFUNC  = ', HFUNC
+        WRITE(GRPRSM,*) ' KNUM   = ', KNUM 
+      ENDIF
+C
+C     Reset return code to 0.
+C
+      KRET = 0
+C
+C     Check function requested.
+C
+      IF( (HFUNC.NE.'C') .AND. (HFUNC.NE.'M') ) THEN
+        WRITE(GRPRSM,*) 'INSMP1: Invalid function requested - ', HFUNC
+        KRET = 3
+        GO TO 900
+      ENDIF
+C
+C*    Set number of bits in bitmap.
+C
+      INOBT = KSIZE / KNUM
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Handle fixed length records with secondary bit-maps.
+C    -------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     If fixed length records with secondary bit-maps are required,
+C     insert a primary bit-map of all 1 bits and finish.
+C
+      IF( (HFUNC.EQ.'M') .AND. (KSECM.EQ.32) ) THEN
+C
+        IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'INSMP1: Section 2.'
+C
+        DO 210 JLOOP = 1,JPWORK
+          IMAP1(JLOOP)   = 1
+  210   CONTINUE
+C
+        NEXT = 0
+C
+  215   CONTINUE
+C
+C       Pack the primary bitmap in strips of JPWORK values
+C
+        NEXT  = NEXT + JPWORK
+        IMANY = JPWORK
+C
+C       Check whether end of primary bitmap reached.
+C       Adjust if less than JPWORK values left to process
+C
+        IF( NEXT.GT.INOBT ) IMANY = INOBT + JPWORK - NEXT
+C
+C       Pack next strip of primary bitmap values.
+C
+        CALL INXBIT(KGRIB,KLENG,KMAP1,IMAP1,IMANY,KBITS,1,'C',KRET)
+        IF( KRET.NE.0 ) THEN
+          WRITE(GRPRSM,9003)
+          KRET = 1
+          GO TO 900
+        ENDIF
+C
+C       Loop back if more strips of primary bitmap to process
+C
+        IF( NEXT.LT.INOBT ) GOTO 215
+C
+        GO TO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Generate the primary bitmap.
+C    -------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'INSMP1: Section 3.'
+C
+      NEXTIN = 0
+      NXTOUT = 0
+C
+      NEXT = 0
+C
+C     Pack the primary bitmap in strips of JPWORK values
+C
+  305 CONTINUE
+C
+      NEXT  = NEXT + JPWORK
+      IMANY = JPWORK
+C
+C     Check whether the end of primary bitmap has been reached.
+C     Adjust if less than JPWORK values left to process.
+C
+      IF( NEXT.GT.INOBT ) IMANY = INOBT + JPWORK - NEXT
+C
+      IF (KPR.GE.1) THEN
+          WRITE(GRPRSM,*) 'INSMP1: NEXT = ', NEXT
+          WRITE(GRPRSM,*) 'INSMP1: IMANY = ', IMANY
+          WRITE(GRPRSM,*) 'INSMP1: INOBT = ', INOBT
+      ENDIF
+C
+C*    Reset bit-map to all 0 bits.
+C
+      DO 310 JLOOP = 1, IMANY
+        IMAP1(JLOOP) = 0
+  310 CONTINUE
+C
+C     Set a bit to 1 for every KNUM values which contain at
+C     least 1 real data value.
+C
+      IPT = 0
+C
+      IF( KNUM.EQ.1 ) THEN
+!OCL NOVREC
+        DO 320 JLOOP = 1, IMANY
+          IF (PSEC4(NEXTIN+JLOOP).NE.PMISS) THEN
+            IMAP1(IPT+JLOOP) = 1
+            NXTOUT           = NXTOUT + 1
+            PSEC4(NXTOUT)    = PSEC4(NEXTIN+JLOOP)
+          ENDIF
+  320   CONTINUE
+C
+        IPT    = IPT + IMANY
+        NEXTIN = NEXTIN + IMANY
+C
+      ELSE
+C
+        DO 350 JLOOP = 1, IMANY
+C
+          IMISS = 0
+          DO 330 JLOOPI = 1, KNUM
+            IF (PSEC4(NEXTIN+JLOOPI).EQ.PMISS) IMISS = IMISS + 1
+  330     CONTINUE
+C
+C         If point not completely missing, move data forwards in data 
+C         array. If no real data value found, the corresponding bit is
+C         already 0.
+C
+          IF( IMISS.NE.KNUM ) THEN
+            IMAP1(IPT+JLOOP) = 1
+            DO 340 JLOOPI = 1, KNUM
+              PSEC4(NXTOUT+JLOOPI) = PSEC4(NEXTIN+JLOOPI)
+  340       CONTINUE
+            NXTOUT = NXTOUT + KNUM
+          ENDIF
+C
+          NEXTIN = NEXTIN + KNUM
+C
+  350   CONTINUE
+        IPT = IPT + IMANY
+C
+      ENDIF
+C
+C     Pack next strip of primary bitmap values in GRIB coded data.
+C
+      CALL INXBIT(KGRIB,KLENG,KMAP1,IMAP1,IMANY,KBITS,1,'C',KRET)
+      IF( KRET.NE.0 ) THEN
+        WRITE(GRPRSM,9003)
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Loop back if more strips of primary bitmap to process
+C
+      IF( NEXT.LT.INOBT ) GOTO 305
+C
+C     Is a fixed length message required, even though a bit map is used?
+C
+      IF( HFUNC.EQ.'M' ) THEN
+C
+C       The otherwise unused part of the array is set to a genuine data
+C       value so that extraction of minimum and maximum values remain
+C       correct. Number of data values includes these padding values.
+C
+        VALUE = PSEC4(1)
+        DO 360 JLOOP = NXTOUT+1, KSIZE
+          PSEC4(JLOOP) = VALUE
+  360   CONTINUE
+C
+      ELSE
+C
+C       Return number of points with values (ie excluding points with
+C       missing data values).
+C
+        KSIZE = NXTOUT
+C
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'INSMP1: Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,*) 'INSMP1: KSIZE = ', KSIZE
+      ENDIF
+      RETURN
+C
+ 9003 FORMAT (1H ,'INSMP1: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/insmp2.F b/gribex/insmp2.F
new file mode 100755
index 0000000..3648c40
--- /dev/null
+++ b/gribex/insmp2.F
@@ -0,0 +1,311 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INSMP2 (KGRIB,KLENG,KMAP2,PSEC4,KSIZE,KBITS,
+     X                     PMISS,HFUNC,KNUM,KPR,KRET)
+C
+C---->
+C**** INSMP2 - Insertion of secondary bit maps for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C     Generates secondary bit-maps (Section 4 bit-maps) and
+C     inserts in array of GRIB coded data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL INSMP2 (KGRIB,KLENG,KMAP2,PSEC4,KSIZE,KBITS,
+C    X                     PMISS,HFUNC,KNUM,KPR,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KGRIB      - Array into which data is being packed in GRIB code.
+C
+C     KLENG      - Length of this array.
+C
+C     KMAP2      - Bit-pointer to start of secondary bit maps
+C                  (Section 4 bitmaps) in array KGRIB.
+C
+C     PSEC4      - Array of data values to be packed in
+C                  GRIB code, containing missing data
+C                  indicator PMISS where appropriate.
+C
+C     KSIZE      - Number of values, including missing data
+C                  values, in array PSEC4.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     PMISS      - Value indicating missing data in array PSEC4.
+C
+C     HFUNC      - 'C' , GRIB data packed normally.
+C                  'M' , GRIB data being packed in fixed length messages
+C
+C     KNUM       - Number of values at each grid point.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSIZE      - The number of data values remaining in
+C                  array PSEC4 to be packed.
+C
+C     KRET       - Return code.
+C                  0 , No error encountered.
+C                  1 , Error in routine INXBIT.
+#if (!defined VAX)
+C                  2 , Memory allocation problem.
+C                  3 , Memory deallocation problem.
+#else
+C                  4 , (VAX only) Number of values at each grid point
+C                      (KNUM) is greater than allowed (JPWORK).
+#endif
+C
+C     Method.
+C     -------
+C
+C     The bit-map contains 1 where valid data exists and 0
+C     where data is missing. The corresponding data array
+C     contains valid data and the missing data indicator value.
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT
+C
+C     Reference.
+C     ----------
+C
+C     See routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      09:07:92
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      19:10:92
+C     Maximum sizes increased to allow for packing of
+C     2D spectra.
+C     Number of data values 120*61*12*25
+C
+C     J.D.Chambers     ECMWF      09:03:94
+C     Maximum size for bitmap array increased to 132000
+C     to allow for products 0.5 * 0.5 degrees, whole
+C     hemisphere (N or S).
+C
+C     J.D.Chambers     ECMWF      24:05:95
+C     Handle bitmap in strips to avoid problem with very large products
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        April 1998
+C     Remove dynamic allocation of work array
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Strips size (JPWORK) enlarged to 10000.
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPWORK
+      PARAMETER (JPWORK=10000)
+C
+C     Subroutine arguments
+C
+      INTEGER KBITS, KGRIB, KLENG, KMAP2, KNUM, KPR, KRET, KSIZE
+      DIMENSION KGRIB(*)
+      REAL PMISS, PSEC4
+      DIMENSION PSEC4(*)
+      CHARACTER*(*) HFUNC
+C
+C     Local variables
+C
+      INTEGER NEXTIN, NXTOUT, IPT, ITEMP
+      INTEGER JLOOP, JLOOPI
+      INTEGER LENGTH
+      REAL VALUE
+C
+C     Work array.
+C
+      INTEGER IMAP2
+      DIMENSION IMAP2(JPWORK)
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) 'INSMP2: Section 1.'
+        WRITE(GRPRSM,*) '         Input values used -'
+        WRITE(GRPRSM,*) '         HFUNC  = ', HFUNC
+        WRITE(GRPRSM,*) '         KSIZE  = ', KSIZE
+        WRITE(GRPRSM,*) '         KNUM   = ', KNUM 
+      ENDIF
+C
+C     Reset return code to
+      KRET  = 0
+C
+C     ------------------------------------------------------------------
+C*    Section 2 .  Check input parameters.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'INSMP2: Section 2.'
+C
+C*    Check function requested.
+C
+      IF( (HFUNC.NE.'C').AND.(HFUNC.NE.'M') ) THEN
+        WRITE(GRPRSM,*) 'INSMP2: Invalid function requested - ', HFUNC
+        KRET = 3
+        GO TO 900
+      ENDIF
+C
+      LENGTH = KNUM
+C
+C     Check there is enough space for packing secondary bitmap
+C
+      IF( LENGTH.GT.JPWORK ) THEN
+        WRITE(GRPRSM,*) 'INSMP2: Number of values at each grid point'
+        WRITE(GRPRSM,*)
+     X    'INSMP2: (KNUM) is greater than allowed (JPWORK).'
+        KRET = 4
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Generation of bit-map.
+C    -------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) WRITE(GRPRSM,*) 'INSMP2: Section 3.'
+C
+      NEXTIN = 0
+      NXTOUT = 0
+C
+C*    Generate the bit-map in accordance with the missing data
+C     values.
+C
+      DO 320 JLOOP = 1, KSIZE, KNUM
+        IPT = 0
+C
+        DO 310 JLOOPI = 1, KNUM
+C
+          IF (PSEC4(JLOOPI+NEXTIN).EQ.PMISS) THEN
+C
+C           If missing data indicator, set secondary bitmap flag to 0
+C
+            IMAP2(IPT+JLOOPI) = 0
+C
+          ELSE
+C
+C           If not missing, set secondary bitmap flag to 1 and
+C           move data forwards in data array.
+C
+            IMAP2(IPT+JLOOPI) = 1
+            NXTOUT            = NXTOUT + 1
+            PSEC4(NXTOUT)     = PSEC4(NEXTIN+JLOOPI)
+          ENDIF
+  310   CONTINUE
+        IPT = IPT + KNUM
+C
+C*      Insert bit-map in GRIB coded data.
+C
+        CALL INXBIT(KGRIB,KLENG,KMAP2,IMAP2,KNUM,KBITS,1,'C',KRET)
+        IF (KRET.NE.0) THEN
+          WRITE(GRPRSM,9003)
+          KRET = 1
+          GO TO 900
+        ENDIF
+C
+        NEXTIN = NEXTIN + KNUM
+C
+  320 CONTINUE
+C
+C*    Bit map must be a multiple of 8 bits.
+C
+      ITEMP = (KMAP2+7) / 8
+      ITEMP = ITEMP * 8
+      IF (ITEMP.NE.KMAP2) THEN
+        IMAP2(1) = 0
+        ITEMP = ITEMP - KMAP2
+        CALL INXBIT(KGRIB,KLENG,KMAP2,IMAP2,1,KBITS,ITEMP,'C',KRET)
+        IF (KRET.NE.0) THEN
+          WRITE(GRPRSM,9003)
+          KRET = 1
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C     Is a fixed length message required, even though a bit map is used?
+C
+      IF (HFUNC.EQ.'M') THEN
+C
+C       The otherwise unused part of the array is set to a genuine data
+C       value so that extraction of minimum and maximum values remain
+C       correct. Number of data values includes these padding values.
+C
+        VALUE = PSEC4(1)
+        DO 330 JLOOP = NXTOUT+1, KSIZE
+          PSEC4(JLOOP) = VALUE
+  330   CONTINUE
+C
+      ELSE
+C
+C       Return number of points with values (ie excluding points with
+C       missing data values).
+C
+        KSIZE = NXTOUT
+C
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) THEN
+        WRITE(GRPRSM,*) 'INSMP2: Section 9.'
+        WRITE(GRPRSM,*) '         Output values set -'
+        WRITE(GRPRSM,*) 'INSMP2: KSIZE = ', KSIZE
+      ENDIF
+C
+      RETURN
+C
+ 9003 FORMAT (1H ,'INSMP2: Error reported by routine INXBIT.')
+C
+      END
diff --git a/gribex/inxbit.F b/gribex/inxbit.F
new file mode 100755
index 0000000..76c7998
--- /dev/null
+++ b/gribex/inxbit.F
@@ -0,0 +1,241 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT,
+     C                   KBLEN,HFUNC,KRET)
+C
+C---->
+C**** INXBIT - Insert/extract bits consecutively in/from a given array
+C
+C     Purpose.
+C     --------
+C
+C     Take rightmost KBLEN bits from KNUM words of KPARM
+C     and insert them consecutively in KGRIB, starting at
+C     bit after KNSPT or vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL INXBIT (KGRIB,KLENG,KNSPT,KPARM,KNUM,KBIT, KBLEN,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KGRIB      - Array containing bitstream.
+C     KLENG      - Length (words) of this array.
+C     KNSPT      - Bit number after which insertion/extraction starts.
+C     KPARM      - Array from which bits are taken for
+C                  insertion in the bitstream or to which
+C                  bits are extracted from the bitstream.
+C     KBIT       - Number of bits in computer word.
+C     KNUM       - Number of bit fields inserted/extracted.
+C     KBLEN      - Number of bits per bit field.
+C     HFUNC      - Requested function.
+C                  'C' to insert bits in bitstream,
+C                  'D' to extract bits from bitstream.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KNSPT      - Bit number of last bit inserted/extracted.
+C
+C     KRET       - Return code.
+C                  0 , No error encountered.
+C                  1 , Insertion/extraction exceeded array boundary.
+C
+C     Method.
+C     -------
+C
+C     Word and offset pointer calculated before calling
+C     insertion/extraction routines.
+C
+C     Externals.
+C     ----------
+C
+C
+C     Reference.
+C     ----------
+C
+C     ECLIB documentation on SBYTES and GBYTES.
+C
+C     Comments.
+C     ---------
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+C     Vectorized Fortran version of routine.
+C     This routine contains a call to GSBITE, a vectorising
+C     version of GBYTE(S) and SBYTE(S).
+#else
+C     Generic version of routine.
+#endif
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Hennessy      ECMWF      08.11.91
+C     Parameter KMACH removed from list of input parameters.
+C
+C     J. Hennessy      ECMWF      12.10.92
+C     Dimension of IMASK changed from 64 to 65.
+C
+C     J.D.Chambers     ECMWF      21.05.96
+C     Defines put in for Fujtsu.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      CHARACTER*1 HFUNC
+      INTEGER IND, INUM, IOFF, IWORD
+      INTEGER KBIT, KBLEN, KGRIB, KLENG, KNSPT, KNUM, KPARM, KRET
+      INTEGER J901
+C
+      DIMENSION KGRIB(KLENG)
+      DIMENSION KPARM(*)
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+      INTEGER IMASK
+      DIMENSION IMASK(65)
+C
+C     Values in IMASK are set in the first call to routine GSBITE, and
+C     are used in subsequent calls.
+C
+      SAVE IMASK
+C
+C     Force routine GSBITE to calculate bit-masks first time through.
+C
+      DATA IMASK(2) /0/
+#endif
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifdef DEBUG
+      WRITE(GRPRSM,*) 'INXBIT: Input values used -'
+      WRITE(GRPRSM,*) 'KLENG = ', KLENG
+      WRITE(GRPRSM,*) 'KNSPT = ', KNSPT
+      WRITE(GRPRSM,*) 'KBIT = ', KBIT
+      WRITE(GRPRSM,*) 'HFUNC = ', HFUNC
+#endif
+C
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C*    Section 2 . Bit insertion/extraction.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C*    Calculate word pointer and offset.
+C
+      IWORD = KNSPT / KBIT
+      IOFF  = KNSPT - IWORD * KBIT
+      IWORD = IWORD + 1
+#ifdef DEBUG
+      WRITE(GRPRSM,*) 'INXBIT: Word is ',IWORD,', bit offset is ',IOFF
+#endif
+C
+C     Insert/extract bits.
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+      IF (KNUM.GE.8) THEN
+C
+C       Vectorising routine GSBITE performs the same
+C       functions as SBYTE(S) and GBYTE(S).
+C
+	CALL GSBITE (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM,
+     X                    KBIT,IMASK,HFUNC)
+      ELSE
+C
+C       Scalar faster.
+C
+        IF (HFUNC.EQ.'C') THEN
+          CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+	ELSE
+          CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+	ENDIF
+      ENDIF
+#elif (defined CYBER)
+      IF (HFUNC.EQ.'C') THEN
+        CALL SBYTES6 (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+      ELSE
+        CALL GBYTES6 (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+      ENDIF
+#elif (defined IBM) || (defined VAX)
+      IF (HFUNC.EQ.'C') THEN
+        CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+      ELSE
+        CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+      ENDIF
+#else
+      IF (HFUNC.EQ.'C') THEN
+        CALL SBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+      ELSE
+        CALL GBYTES (KGRIB(IWORD),KPARM,IOFF,KBLEN,0,KNUM)
+      ENDIF
+#endif
+C
+C     Update pointer.
+C
+      KNSPT = KNSPT + KBLEN * KNUM
+C
+C     ----------------------------------------------------------------
+C*    Section 3 . Check out of range.
+C    -----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IND = KNSPT / KBIT
+      IF (IND.GT.KLENG) THEN
+	KRET = 1
+	WRITE(GRPRSM,*) 'INXBIT : Word ', IND ,
+     X              ' is outside array bounds ', KLENG
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+#ifdef DEBUG
+      INUM = KNUM
+      IF( INUM.GT.360 ) THEN
+        INUM = 360
+        WRITE(GRPRSM,*) 'First ', INUM,' values.'
+      ENDIF
+      DO 901 J901=1,INUM
+        IF( HFUNC.EQ.'C' ) THEN
+          WRITE(GRPRSM,*) 'Inserted value = ', KPARM(J901)
+        ELSE
+          WRITE(GRPRSM,'(1H ,Z)') KGRIB(IWORD)
+          WRITE(GRPRSM,*) 'Extracted value = ', KPARM(J901)
+          WRITE(GRPRSM,'(1H ,Z)') KPARM(J901)
+        ENDIF
+  901 CONTINUE
+      WRITE(GRPRSM,*) '         Output values set -'
+      WRITE(GRPRSM,*) 'KNSPT = ', KNSPT
+#endif
+C
+      RETURN
+      END
diff --git a/gribex/inxmap.F b/gribex/inxmap.F
new file mode 100755
index 0000000..e73e776
--- /dev/null
+++ b/gribex/inxmap.F
@@ -0,0 +1,460 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE INXMAP (KGRIB,KLENG,KMAPT,PSEC4,KSIZE,KBITS,KSBMAP,
+     C                     PMISS,HFUNC,KPR,KRET)
+C
+C---->
+C**** INXMAP - Bit map handling for routine GRIBEX.
+C
+C     Purpose.
+C     --------
+C
+C           1) Extract a bit-map from an array of GRIB coded data and
+C              insert missing data value in appropriate places in the
+C              array of already decoded data values.
+C
+C           2) Generate a bit-map and insert in array of GRIB coded
+C              data and remove missing data values from the array of
+C              values being encoded in GRIB code.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL INXMAP (KGRIB,KLENG,KMAPT,PSEC4,KSIZE,KBITS,KSBMAP,
+C    C                     PMISS,HFUNC,KPR,KRET)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KGRIB      - Array of GRIB data being coded/decoded.
+C
+C               KLENG      - Length of this array.
+C
+C               KMAPT      - Bit-pointer to start of bit-map in
+C                            array KGRIB.
+C
+C               PSEC4      - Array of data values decoded or to be
+C                            coded in GRIB.
+C
+C               KSIZE      - Size of bit-map ie number of values,
+C                            including missing data values, in array
+C                            PSEC4.
+C
+C               KBITS      - Number of bits in computer word.
+C
+C               PMISS      - Value indicating missing data in array
+C                            PSEC4.
+C
+C               HFUNC      - 'C' , GRIB data being coded.
+C                            'M' , GRIB data being coded in fixed length
+C                                  messages.
+C                            'D' , GRIB data being decoded.
+C
+C               KPR        - Debug print switch.
+C                            0 , No printout.
+C                            1 , Debug printout.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               KSBMAP     - Bit-map flag.
+C                            Used only when decoding data.
+C                            -2 , All bits in the bit-map set to 1.
+C                                 There is no missing data.
+C                            -4 , Some points have no data. User
+C                                 supplied value for missing data
+C                                 indicator in appropriate places in
+C                                 the array PSEC4.
+C
+C               KSIZE      - When coding data, the number of real data
+C                            values in array PSEC4. Not changed when
+C                            decoding.
+C
+C               KRET       - Return code.
+C                            0 , No error encountered.
+C                            1 , Error in routine INXBIT.
+C                            2 , Bit-map size exceeds maximum.
+C                            3 , Invalid function requested.
+C
+C     Method.
+C     -------
+C
+C           The bit-map contains 1 where valid data exists and 0
+C           where data is missing. The corresponding data array
+C           contains valid data and the missing data indicator value.
+C
+C     Externals.
+C     ----------
+C
+C           INXBIT
+C
+C     Reference.
+C     ----------
+C
+C           See routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 4 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      09:09:91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08:11:91
+C           Parameter KMACH removed from list of input parameters.
+C           Optional abort removed.
+C
+C940309     J.D.Chambers     ECMWF      09:03:94
+C940309     Maximum size for bitmap array increased to 132000
+C940309     to allow for products 0.5 * 0.5 degrees, whole
+C940309     hemisphere (N or S).
+C
+C     ------------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      CHARACTER*(*) HFUNC
+      CHARACTER*1   YFUNC
+C
+      INTEGER IMAP
+      INTEGER INEXT
+C
+      INTEGER JPMAP
+C
+      INTEGER J320
+      INTEGER J330
+      INTEGER J420
+      INTEGER J430
+      INTEGER J431
+C
+      INTEGER KBITS
+      INTEGER KGRIB
+      INTEGER KLENG
+      INTEGER KMAPT
+      INTEGER KPR
+      INTEGER KRET
+      INTEGER KSBMAP
+      INTEGER KSIZE
+C
+      REAL PMISS
+      REAL PSEC4
+C
+      REAL ZSEC4
+C
+C*    Maximum size of bit-map which can be handled.
+C
+C940309 PARAMETER (JPMAP=41472)
+      PARAMETER (JPMAP=132000)
+C
+      DIMENSION IMAP(JPMAP)
+C
+      DIMENSION PSEC4(*)
+      DIMENSION ZSEC4(JPMAP)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE(GRPRSM,*) 'INXMAP : Section 1.'
+             WRITE(GRPRSM,*) '         Input values used -'
+	     WRITE(GRPRSM,9004) HFUNC
+	     WRITE(GRPRSM,9005) KSIZE
+         ENDIF
+C
+C     Reset return code to
+C
+      KRET  = 0
+C
+      INEXT = 0
+C
+      YFUNC = HFUNC
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 .  Check input parameters.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE(GRPRSM,*) 'INXMAP : Section 2.'
+C
+C*    Check that bit-map size does not exceed maximum permitted.
+C
+      IF (JPMAP.LT.KSIZE)
+     C   THEN
+	     WRITE(GRPRSM,9001) KSIZE , JPMAP
+	     KRET = 2
+	     GO TO 900
+         ENDIF
+
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Decoding of bit-map and data.
+C     ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE(GRPRSM,*) 'INXMAP : Section 3.'
+C
+      IF (YFUNC.EQ.'D')
+     C   THEN
+C
+C*           Extract bit-map from GRIB coded data.
+C
+             CALL INXBIT (KGRIB,KLENG,KMAPT,IMAP,KSIZE,KBITS,1,
+     C                     YFUNC,KRET)
+C
+             IF (KRET.NE.0)
+     C          THEN
+		    WRITE(GRPRSM,9003)
+		    KRET = 1
+		    GO TO 900
+                ENDIF
+C
+C*           Copy data to temporary array and insert missing data
+C            indicator in temporary array, in accordance with the
+C            bit map values.
+C
+             DO 320 J320=1,KSIZE
+	        IF (IMAP(J320).EQ.0)
+     C             THEN
+	  	       ZSEC4(J320) = PMISS
+                   ELSE
+		       INEXT       = INEXT + 1
+		       ZSEC4(J320) = PSEC4(INEXT)
+                   ENDIF
+  320        CONTINUE
+C
+C*           Set bit-map flag, and if missing data is indicated
+C            transfer data to original array.
+C
+             IF (INEXT.NE.KSIZE)
+     C          THEN
+		    KSBMAP = -4
+                    DO 330 J330=1,KSIZE
+	               PSEC4(J330) = ZSEC4(J330)
+  330               CONTINUE
+                ELSE
+		    KSBMAP = -2
+		ENDIF
+C
+             GO TO 900
+C
+         ENDIF
+C
+C    -------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 4 . Generation of bit-map.
+C    -------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE(GRPRSM,*) 'INXMAP : Section 4.'
+C
+      IF (YFUNC.EQ.'C'.OR.YFUNC.EQ.'M')
+     C   THEN
+C
+C*           Copy data to temporary array and remove missing data
+C            indicator in temporary array, generating the bit-map
+C            in accordance with the missing data values.
+C
+             DO 420 J420=1,KSIZE
+	        IF (PSEC4(J420).EQ.PMISS)
+     C             THEN
+		       IMAP(J420)   = 0
+                   ELSE
+		       IMAP(J420)   = 1
+		       INEXT        = INEXT + 1
+		       ZSEC4(INEXT) = PSEC4(J420)
+                   ENDIF
+  420        CONTINUE
+C
+C*           Insert bit-map in GRIB coded data.
+C
+             CALL INXBIT (KGRIB,KLENG,KMAPT,IMAP,KSIZE,KBITS,1,
+     C                     YFUNC,KRET)
+C
+             IF (KRET.NE.0)
+     C          THEN
+		    WRITE(GRPRSM,9003)
+		    KRET = 1
+		    GO TO 900
+                ENDIF
+C
+C*           If missing data is indicated transfer data to original
+C            array.
+C
+             IF (INEXT.NE.KSIZE)
+     C          THEN
+                    DO 430 J430=1,INEXT
+	               PSEC4(J430) = ZSEC4(J430)
+  430               CONTINUE
+C
+                    IF (YFUNC.EQ.'M')
+     C                 THEN
+C
+C                          Fixed length messages required, even though
+C                          a bit map is used. The otherwise unused part
+C                          of the array is set to a genuine data value
+C                          so that extraction of minimum and maximum
+C                          values remain correct. Number of data values
+C                          includes these padding values.
+C
+                           DO 431 J431=INEXT+1,KSIZE
+	                      PSEC4(J431) = PSEC4(1)
+  431                      CONTINUE
+		       ELSE
+C
+C                          Return number of real values (excluding
+C                          missing data values).
+C
+                           KSIZE = INEXT
+                       ENDIF
+		ENDIF
+C
+	     GO TO 900
+C
+         ENDIF
+C
+C*    Invalid function requested.
+C
+      WRITE(GRPRSM,9002) YFUNC
+      KRET = 3
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE(GRPRSM,*) 'INXMAP : Section 9.'
+             WRITE(GRPRSM,*) '         Output values set -'
+	     WRITE(GRPRSM,9005) KSIZE
+	     WRITE(GRPRSM,9006) KSBMAP
+         ENDIF
+C
+ 9001 FORMAT (1H ,'INXMAP : Bit-map size is ',I6,', maximum allowed',
+     C            ' is ',I6,'.')
+C
+ 9002 FORMAT (1H ,'INXMAP : Invalid function requested - ',A1)
+C
+ 9003 FORMAT (1H ,'INXMAP : Error reported by routine INXBIT.')
+C
+ 9004 FORMAT (1H ,'         HFUNC  = ',A1)
+C
+ 9005 FORMAT (1H ,'         KSIZE  = ',I6)
+C
+ 9006 FORMAT (1H ,'         KSBMAP = ',I6)
+C
+      RETURN
+C
+      END
diff --git a/gribex/jabort.c b/gribex/jabort.c
new file mode 100755
index 0000000..86b1c5a
--- /dev/null
+++ b/gribex/jabort.c
@@ -0,0 +1,21 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdlib.h>
+
+void jabort(void) {
+  abort();
+}
+
+void jabort_(void)
+{
+  abort();
+}
diff --git a/gribex/jfree.c b/gribex/jfree.c
new file mode 100755
index 0000000..bd8f2fd
--- /dev/null
+++ b/gribex/jfree.c
@@ -0,0 +1,22 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdlib.h>
+
+void jfree( int ** n)
+{
+    free(*n);
+}
+
+void jfree_( int ** n)
+{
+    free(*n);
+}
diff --git a/gribex/jmalloc.c b/gribex/jmalloc.c
new file mode 100755
index 0000000..8ceb0cf
--- /dev/null
+++ b/gribex/jmalloc.c
@@ -0,0 +1,84 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "fortint.h"
+
+#if (defined hpR64) || (defined hpiaR64) || (defined CRAY) || (defined rs6000)
+#define XALLOC malloc
+#else
+#define XALLOC malloc
+#endif
+
+#if (defined hpR64) || (defined hpiaR64)
+JPointer jmalloc_( fortint * n)
+{
+int number = *n;
+long * alloc;
+JPointer falloc;
+
+    alloc = (long *) XALLOC(number);
+    falloc = (JPointer) alloc;
+    return falloc;
+}
+
+JPointer jmalloc( fortint * n) {
+  return jmalloc_(n);
+}
+#elif (defined __alpha)
+JPointer jmalloc_( int * n)
+{
+static JPointer ret;
+    ret = (JPointer) XALLOC(*n);
+    return ret;
+}
+
+JPointer jmalloc( int * n) {
+  return jmalloc_(n);
+}
+#elif (defined POINTER_64)
+JPointer jmalloc_( JPointer n)
+{
+/*size_t number_of_bytes = (size_t) (*n);*/
+
+/*printf("======= jmalloc_ number of bytes %ld \n", *n);*/
+   return  XALLOC(*n);
+}
+
+JPointer jmalloc( int * n) {
+  return jmalloc_(n);
+}
+
+
+#else
+int * jmalloc_( int * n)
+{
+    return (int *) XALLOC(*n);
+}
+
+int * jmalloc( int * n) {
+  return jmalloc_(n);
+}
+#endif
+
+size_t* jmalloc2_( size_t * n)
+{
+/*   printf("======= jmalloc2_ number of bytes %ld \n", *n);*/
+
+   return  (size_t *)XALLOC(*n);
+}
+
+size_t* jmalloc2( size_t * n)
+{
+  return (size_t *)jmalloc2_(n);
+}
diff --git a/gribex/kwchk1.F b/gribex/kwchk1.F
new file mode 100755
index 0000000..e0a76fd
--- /dev/null
+++ b/gribex/kwchk1.F
@@ -0,0 +1,192 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE KWCHK1(KSEC1,KRET)
+C
+C---->
+C**** KWCHK1
+C
+C     Purpose.
+C     --------
+C
+C     Check parameters for Washington ensemble products Section 1
+C     of GRIB code against valid values for GRIB Code Edition 1.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL KWCHK1(KSEC1,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC1      - Array containing parameters for section
+C                  1 of GRIB code.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  1   , Error in GRIB code parameter.
+C
+C     Method.
+C     -------
+C
+C     Values checked against Washington ensemble product usage.
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Routine contains Sections 0 to 2 and Section 9.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      09.10.95
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+      INTEGER KSEC1, KRET
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+#ifdef CRAY
+      INTEGER MMASK
+#endif
+      INTEGER IVERSN, IV0001, IV0011
+      DATA IV0001/808464433/, IV0011/808464689/
+C
+C     IV0001 = right-justified ascii '0001'
+C     IV0011 = right-justified ascii '0011'
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Reset return code.
+      KRET = 0
+C
+C     ----------------------------------------------------------------
+C*    Section 2 . Check usage.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Ensemble forecast data
+      IF(KSEC1(37).NE.1) THEN
+        WRITE(GRPRSM,*)
+     X      'KWCHK1: Invalid Ensemble f/c data flag = ',KSEC1(37)
+        KRET = 1
+        GOTO 900
+      ENDIF
+C
+C     Class.
+      IF( KSEC1(38).NE.1 ) THEN
+        WRITE(GRPRSM,*) 'KWCHK1: Invalid class code = ',KSEC1(38)
+        KRET = 1
+        GOTO 900
+      ENDIF
+C
+C     Type.
+      IF( (KSEC1(39).NE.10) .AND. (KSEC1(39).NE.11) ) THEN
+        WRITE(GRPRSM,*) 'KWCHK1: Invalid type code = ',KSEC1(39)
+        KRET = 1
+        GOTO 900
+      ENDIF
+C
+C     Stream.
+      IF( KSEC1(40).NE.1051 ) THEN
+        WRITE(GRPRSM,*) 'KWCHK1: Invalid stream code = ',KSEC1(40)
+        KRET = 1
+        GOTO 900
+      ENDIF
+C
+C     Version number.
+      IVERSN = KSEC1(41)
+#if (!defined rs6000)
+#ifdef CRAY
+C
+C     Mask least significant 32 bits for integer comparison
+      MMASK = MASK(96)
+      IVERSN = AND( IVERSN, MMASK)
+#endif
+      IF( (IVERSN.NE.IV0001) .AND. (IVERSN.NE.IV0011) ) THEN
+        WRITE(GRPRSM,*) 'KWCHK1: Invalid version number = ', IVERSN
+        KRET = 1
+        GOTO 900
+      ENDIF
+#endif
+C
+C     Number of perturbed forecast.
+      IF( KSEC1(39).EQ.10 ) THEN
+        IF( KSEC1(42).NE.0 ) THEN
+          WRITE(GRPRSM,*)
+     X      'KWCHK1: Invalid control f/c number = ',KSEC1(42)
+          KRET = 1
+          GOTO 900
+        ENDIF
+C
+      ELSE
+        IF( (KSEC1(42).LT.0) .OR. (KSEC1(42).GT.11) ) THEN
+          WRITE(GRPRSM,*)
+     X      'KWCHK1: Invalid perturbed f/c number = ',KSEC1(42)
+          KRET = 1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Total number of forecasts in ensemble.
+      IF( (KSEC1(43).LT.0) .OR. (KSEC1(43).GT.11) ) THEN
+        WRITE(GRPRSM,*)
+     X      'KWCHK1: Invalid total f/cs in ensemble = ',KSEC1(43)
+        KRET = 1
+        GOTO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C*    Section 9 . Return to calling routine. Format statements.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/kwloc1.F b/gribex/kwloc1.F
new file mode 100755
index 0000000..cc2bf9a
--- /dev/null
+++ b/gribex/kwloc1.F
@@ -0,0 +1,271 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE KWLOC1(KSEC1,KGRIB,KLENG,KNSPT,KBITS,KPLEN,KPR,KRET)
+C
+C---->
+C**** KWLOC1
+C
+C     Purpose.
+C     --------
+C
+C     GRIB coding/decoding of Washington ensemble product local use of
+C     Section 1.
+C
+C     Interface.
+C     ----------
+C
+C     CALL KWLOC1 (KSEC1,KGRIB,KLENG,KNSPT,KBITS, KPLEN,KPR,KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KLENG      - Length (words) of KGRIB.
+C
+C     KNSPT      - Bit number after which insertion or
+C                  extraction starts.
+C
+C     KBITS      - Number of bits in computer word.
+C
+C     KPLEN      - Pointer to field containing length of Section 1.
+C
+C     KPR        - Debug print switch.
+C                  0  , No printout.
+C                  >0 , Debug printout.
+C
+C     KRET       - Response to error indicator.
+C                  0        , Abort if error encountered.
+C                  Non-zero , Return to calling routine
+C                             even if error encountered.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KSEC1      - Array containing Grib Section 1 data.
+C
+C     KGRIB      - Array containing Grib coded data.
+C
+C     KNSPT      - Number of bit after last one inserted or
+C                              extracted.
+C
+C     KRET       - Return code.
+C                  0   , No error encountered.
+C                  1   , Error reported by routine INXBIT.
+C
+C     Method.
+C     -------
+C
+C     Input data packed/unpacked in accordance with Washington ensemble
+C     product usage of local part of section 1 of Grib code.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INXBIT - insert/extract bit data
+C     ABORTX - abort program
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual On Codes for Grib Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Washington ensemble product usage of local part of section 1 of
+C     GRIB:
+C
+C     Octet 41 : Identifies the application:
+C                1   Ensemble.
+C
+C     Octet 42 : Type:
+C                1   Unperturbed control forecast,
+C                2   Individual negatively perturbed forecast,
+C                3   Individual positively perturbed forecast,
+C                4   Cluster,
+C                5   Whole ensemble.
+C
+C     Octet 43 : Identification number:
+C                1   If byte 42=1, identifies high resolution.
+C                2   If byte 42=1, identifies low resolution.
+C                3   Etc.(!?).
+C                    (1 to 5 for perturbed 00Z forecast.)
+C                    (1 to 2 for perturbed 12Z forecast.)
+C
+C     Octet 44 : Products:
+C                1   Full field (individual forecast)/unweighted mean.
+C                2   Weighted mean.
+C                11  Standard deviation wrt ensemble mean.
+C                12  Standard deviation wrt ensemble mean, normalized.
+C
+C     Octet 45 : Spatial smoothing of product (number of highest total
+C                wavenumber included):
+C                255 Original resolution retained.
+C
+Cjdc  Octet 46 : Dummy.    (Not being used!)
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      09.10.95
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C----<
+C     ------------------------------------------------------------------
+C     Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      INTEGER KSEC1, KGRIB, KLENG, KNSPT, KBITS, KPLEN, KPR, KRET
+      DIMENSION KGRIB(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+      INTEGER IRET
+      CHARACTER*1   YFUNC
+C
+C     ------------------------------------------------------------------
+C     Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) THEN
+        WRITE(GRPRSM,*) 'KWLOC1 : Section 1.'
+        WRITE(GRPRSM,*) 'KWLOC1 : On input, KNSPT = ',KNSPT
+      ENDIF
+C
+C     Reset return code to 0, retaining input value to decide
+C     on abort / no abort, if error encountered later.
+C
+      IRET = KRET
+      KRET = 0
+      YFUNC = 'D'
+C
+C     ------------------------------------------------------------------
+C     Section 2 . Washington ensemble product local use of Grib
+C                 Section 1.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) WRITE(GRPRSM,*) 'ECLOC1 : Section 2.'
+C
+C     Extract fields.
+C
+C
+C     Octet 41 : Identifies the application:
+C                1   Ensemble.
+C     One 8 bit field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(37),1,KBITS, 8,YFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'KWLOC1: INXBIT error reported = ',KRET
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Octet 42 : Type:
+C                1   Unperturbed control forecast,
+C                2   Individual negatively perturbed forecast,
+C                3   Individual positively perturbed forecast,
+C                4   Cluster,
+C                5   Whole ensemble.
+C     One 8 bit field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(38),1,KBITS, 8,YFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'KWLOC1: INXBIT error reported = ',KRET
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Octet 43 : Identification number:
+C                1   If byte 42=1, identifies high resolution.
+C                2   If byte 42=1, identifies low resolution.
+C                3   Etc.(!?)
+C     One 8 bit field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(39),1,KBITS, 8,YFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'KWLOC1: INXBIT error reported = ',KRET
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Octet 44 : Products:
+C                1   Full field (individual forecast)/unweighted mean.
+C                2   Weighted mean.
+C                11  Standard deviation wrt ensemble mean.
+C                11  Standard deviation wrt ensemble mean, normalized.
+C     One 8 bit field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(40),1,KBITS, 8,YFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'KWLOC1: INXBIT error reported = ',KRET
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Octet 45 : Spatial smoothing of product (number of highest total
+C                wavenumber included):
+C                255 Original resolution retained.
+C     One 8 bit field.
+C
+      CALL INXBIT (KGRIB,KLENG,KNSPT,KSEC1(41),1,KBITS, 8,YFUNC,KRET)
+      IF (KRET.NE.0) THEN
+        WRITE(GRPRSM,*) 'KWLOC1: INXBIT error reported = ',KRET
+        KRET = 1
+        GO TO 900
+      ENDIF
+C
+C     Octet 46 : Dummy.
+C     One 8 bit field.
+C
+Cjdc  KNSPT = KNSPT + 8
+C
+C     ------------------------------------------------------------------
+C     Section 9 . Abort/return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) THEN
+        WRITE(GRPRSM,*) 'KWLOC1 : Section 9.'
+        WRITE(GRPRSM,*) 'KWLOC1 : On output, KNSPT = ',KNSPT
+      ENDIF
+C
+C     Abort if requested to do so when an error has been encountered.
+C
+      IF ( (IRET.EQ.0) .AND. (KRET.NE.0) ) THEN
+        CALL ABORTX ('KWLOC1')
+      ELSE
+        RETURN
+      ENDIF
+C
+      END
diff --git a/gribex/kwprs1.F b/gribex/kwprs1.F
new file mode 100755
index 0000000..82d3617
--- /dev/null
+++ b/gribex/kwprs1.F
@@ -0,0 +1,375 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE KWPRS1 (KSEC0,KSEC1)
+C
+C---->
+C**** KWPRS1
+C
+C     Purpose.
+C     --------
+C
+C     Print the information in the Product Definition
+C     Section (Section 1) of decoded Washington ensemble GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL KWPRS1 (KSEC0,KSEC1)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC0 - Array of decoded parameters from Section 0.
+C
+C     KSEC1 - Array of decoded parameters from Section 1.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     None.
+C
+C
+C     Externals.
+C     ----------
+C
+C     PRTBIN
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C     See also routine GRIBEX.
+C     http://www.nco.ncep.noaa.gov/pmb/docs/on388/appendixc.html. 
+C
+C
+C     Comments.
+C     ---------
+C
+C
+C     Washington ensemble product usage of local part of section 1 of
+C     GRIB:
+C
+C     KSEC1(37) decoded from Octet 41.
+C     Identifies the application:
+C                1   Ensemble.
+C
+C     KSEC1(38) decoded from Octet 42.
+C     Type:
+C                1   Unperturbed control forecast,
+C                2   Individual negatively perturbed forecast,
+C                3   Individual positively perturbed forecast,
+C                4   Cluster,
+C                5   Whole ensemble.
+C
+C     KSEC1(39) decoded from Octet 43.
+C     Identification number:
+C                1   If byte 42 = 1, identifies high resolution.
+C                2   If byte 42 = 1, identifies low resolution.
+C                1-5 If byte 42 = 2 or 3, number of a member of a pair
+C                    of (negative perturbation, positive perturbation) 
+C
+C     KSEC1(40) decoded from Octet 44.
+C     Product identifier:
+C                1   Full field (individual forecast)/unweighted mean.
+C                2   Weighted mean.
+C                11  Standard deviation wrt ensemble mean.
+C                11  Standard deviation wrt ensemble mean, normalized.
+C
+C     KSEC1(41) decoded from Octet 45.
+C     Spatial smoothing of product (number of highest total
+C     wavenumber included):
+C                255 Original resolution retained.
+C
+C     Following are used only if needed.
+C
+C     Probability Section
+C     -------------------
+C
+C     KSEC1(42) decoded from Octet 46.
+C     Probability product definition.
+C     If octet 9 = 191 or 192, defines variable in terms of octet 9 table
+C
+C     KSEC1(43) decoded from Octet 47.
+C     Probability type 
+C                1 = Probability of event below lower limit 
+C                2 = Probability of event above upper limit 
+C                3 = Probability of event between lower and upper limits 
+C
+C     KSEC1(44) decoded from Octets 48 - 51
+C     Probability lower limit (unit as in octet 9; floating point number)
+C
+C     KSEC1(45) decoded from Octets 52 - 55
+C     Probability upper limit (unit as in octet 9; floating point number)
+C
+C     Octets 56 - 60 are reserved.
+C
+C     Following are used only if octet 42 = 4 or 5.
+C
+C     Clustering Section
+C     ------------------
+C
+C     KSEC1(46) decoded from Octet 61.
+C     Ensemble size (number of members, including controls)
+C
+C     KSEC1(47) decoded from Octet 62.
+C     Cluster size (number of members)
+C
+C     KSEC1(48) decoded from Octet 63.
+C     Number of clusters 
+C
+C     KSEC1(49) decoded from Octet 64.
+C     Clustering Method
+C                1 = AC 
+C                2 = RMS 
+C
+C     KSEC1(50) decoded from Octets 65 - 67
+C     Northern latitude of clustering domain (in thousandths of degree) 
+C
+C     KSEC1(51) decoded from Octets 68 - 70
+C     Southern latitude of clustering domain (in thousandths of degree) 
+C
+C     KSEC1(52) decoded from Octets 71 - 73
+C     Eastern longitude of clustering domain (in thousandths of degree) 
+C
+C     KSEC1(53) decoded from Octets 74 - 76
+C     Western longitude of clustering domain (in thousandths of degree) 
+C
+C     KSEC1(54 - 63) decoded from Octets 77 - 86
+C     Cluster Membership (If octet 42 = 4)
+C     Indicates in binary (on/off) format, which members of the ensemble
+C     belong to the current cluster. Membership table defined by product
+C     generators. 
+C
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers   ECMWF 09.10.95
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      INTEGER KSEC0
+      INTEGER KSEC1
+      DIMENSION KSEC0(*)
+      DIMENSION KSEC1(*)
+C
+C     Local variables
+C
+      INTEGER LOOP
+      INTEGER*4 ILIMIT
+      REAL*4    RLIMIT
+      EQUIVALENCE(ILIMIT,RLIMIT)
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Print required information.
+C     ----------------------------------------------------------------- C
+  100 CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Print Washington ensemble product information.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Application Identifier.
+C
+      WRITE(GRPRSM,9000) KSEC1(37)
+C
+C     Type.
+C
+      IF(KSEC1(38).GT.5) WRITE(GRPRSM,9100) KSEC1(38)
+      IF(KSEC1(38).EQ.1) WRITE(GRPRSM,9101) KSEC1(38)
+      IF(KSEC1(38).EQ.2) WRITE(GRPRSM,9102) KSEC1(38)
+      IF(KSEC1(38).EQ.3) WRITE(GRPRSM,9103) KSEC1(38)
+      IF(KSEC1(38).EQ.4) WRITE(GRPRSM,9104) KSEC1(38)
+      IF(KSEC1(38).EQ.5) WRITE(GRPRSM,9105) KSEC1(38)
+C
+C     Identification number.
+C
+      IF(KSEC1(38).NE.1) THEN
+        WRITE(GRPRSM,9200) KSEC1(39)
+      ELSE
+        IF(KSEC1(39).EQ.1) THEN
+          WRITE(GRPRSM,9201) KSEC1(39)
+        ELSE IF(KSEC1(39).EQ.2) THEN
+          WRITE(GRPRSM,9202) KSEC1(39)
+        ELSE
+          WRITE(GRPRSM,9200) KSEC1(39)
+        ENDIF
+      ENDIF
+C
+C     Product.
+C
+      IF(KSEC1(40).EQ.1) THEN
+        WRITE(GRPRSM,9301) KSEC1(40)
+      ELSE IF(KSEC1(40).EQ.2) THEN
+        WRITE(GRPRSM,9302) KSEC1(40)
+      ELSE IF(KSEC1(40).EQ.11) THEN
+        WRITE(GRPRSM,9311) KSEC1(40)
+      ELSE IF(KSEC1(40).EQ.12) THEN
+        WRITE(GRPRSM,9312) KSEC1(40)
+      ELSE
+        WRITE(GRPRSM,9300) KSEC1(40)
+      ENDIF
+C
+C     Spatial smoothing of product.
+C
+      IF( KSEC1(41).EQ.255) THEN
+        WRITE(GRPRSM,9400) KSEC1(41)
+      ELSE
+        WRITE(GRPRSM,9401) KSEC1(41)
+      ENDIF
+C
+C     Probability Section
+C
+      IF( KSEC1(42).NE.0) THEN
+C
+C       Probability type
+C
+        WRITE(GRPRSM,9500) KSEC1(42)
+        IF( KSEC1(43).EQ.1 ) THEN
+          WRITE(GRPRSM,9501) KSEC1(43)
+        ELSE IF( KSEC1(43).EQ.2 ) THEN
+          WRITE(GRPRSM,9502) KSEC1(43)
+        ELSE IF( KSEC1(43).EQ.3 ) THEN
+          WRITE(GRPRSM,9503) KSEC1(43)
+        ELSE
+          WRITE(GRPRSM,9504) KSEC1(43)
+        ENDIF
+C
+C       Limits
+C
+        ILIMIT = KSEC1(44)
+        WRITE(GRPRSM,9505) RLIMIT
+C
+        ILIMIT = KSEC1(45)
+        WRITE(GRPRSM,9506) RLIMIT
+      ENDIF
+C
+C     Clustering Section
+C
+      IF( KSEC1(46).NE.0) THEN
+C
+C       Ensemble size
+C
+        WRITE(GRPRSM,9507) KSEC1(46)
+C
+        IF( KSEC1(47).NE.0 ) THEN 
+C
+C         Cluster size
+C         Number of clusters
+C         Clustering Method
+C
+          WRITE(GRPRSM,9508) KSEC1(47)
+          WRITE(GRPRSM,9509) KSEC1(48)
+          WRITE(GRPRSM,9510) KSEC1(49)
+C
+C         North/South/East/West limits of clustering domain
+C
+          WRITE(GRPRSM,9511) KSEC1(50)
+          WRITE(GRPRSM,9511) KSEC1(51)
+          WRITE(GRPRSM,9511) KSEC1(52)
+          WRITE(GRPRSM,9511) KSEC1(53)
+C
+C         Cluster Membership
+C
+          IF( KSEC1(38).EQ.4 ) THEN
+            WRITE(GRPRSM,9515)
+            WRITE(GRPRSM,9516)
+            DO LOOP = 1, KSEC1(46)
+              IF( KSEC1(53+LOOP).EQ.1 ) THEN
+                WRITE(GRPRSM,9517) LOOP
+              ELSE
+                WRITE(GRPRSM,9518) LOOP
+              ENDIF
+            ENDDO
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9000 FORMAT(1H ,'Application Identifier.(1=Ensemble)  ',I9)
+C
+ 9100 FORMAT(1H ,'Type:                                ',I9)
+ 9101 FORMAT(1H ,'Type: Unperturbed control forecast.  ',I9)
+ 9102 FORMAT(1H ,'Type: Individual -vely perturbed fc. ',I9)
+ 9103 FORMAT(1H ,'Type: Individual +vely perturbed fc. ',I9)
+ 9104 FORMAT(1H ,'Type: Cluster.                       ',I9)
+ 9105 FORMAT(1H ,'Type: Whole ensemble.                ',I9)
+C
+ 9200 FORMAT(1H ,'Identification number.               ',I9)
+ 9201 FORMAT(1H ,'Identification number: (1=high res)  ',I9)
+ 9202 FORMAT(1H ,'Identification number: (2=low res)   ',I9)
+C
+ 9300 FORMAT(1H ,'Product.                             ',I9)
+ 9301 FORMAT(1H ,'Full field/unweighted mean.          ',I9)
+ 9302 FORMAT(1H ,'Weighted mean.                       ',I9)
+ 9311 FORMAT(1H ,'Standard deviation wrt ensemble mean.',I9)
+ 9312 FORMAT(1H ,'Stand.dev. wrt ens. mean, normalized.',I9)
+C
+ 9400 FORMAT(1H ,'Original spatial smoothing retained. ',I9)
+ 9401 FORMAT(1H ,'Spatial smoothing of product:        ',I9)
+C
+ 9500 FORMAT(1H ,'Probability product definition       ',I9)
+ 9501 FORMAT(1H ,'Prob. of event below lower limit     ',I9)
+ 9502 FORMAT(1H ,'Prob. of event above upper limit     ',I9)
+ 9503 FORMAT(1H ,'Prob. of event between limits        ',I9)
+ 9504 FORMAT(1H ,'Unknown probability type             ',I9)
+ 9505 FORMAT(1H ,'Probability lower limit        ',F15.6)
+ 9506 FORMAT(1H ,'Probability upper limit        ',F15.6)
+ 9507 FORMAT(1H ,'Ensemble size (members + controls)   ',I9)
+ 9508 FORMAT(1H ,'Cluster size (number of members)     ',I9)
+ 9509 FORMAT(1H ,'Number of clusters                   ',I9)
+ 9510 FORMAT(1H ,'Clustering Method (1 = AC, 2 = RMS)  ',I9)
+ 9511 FORMAT(1H ,'Northern latitude of domain (x1000)  ',I9) 
+ 9512 FORMAT(1H ,'Southern latitude of domain (x1000)  ',I9) 
+ 9513 FORMAT(1H ,'Eastern longitude of domain (x1000)  ',I9) 
+ 9514 FORMAT(1H ,'Western longitude of domain (x1000)  ',I9) 
+ 9515 FORMAT(1H ,'Cluster Membership')
+ 9516 FORMAT(1H ,'------------------')
+ 9517 FORMAT(1H ,'Ensemble member',I3,' in cluster')
+ 9518 FORMAT(1H ,'Ensemble member',I3,' not in cluster')
+C
+      END
diff --git a/gribex/l2u1cr.F b/gribex/l2u1cr.F
new file mode 100755
index 0000000..ed0a796
--- /dev/null
+++ b/gribex/l2u1cr.F
@@ -0,0 +1,141 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE L2U1CR (HSTRNG)
+C
+C---->
+C**** L2U1CR - Convert character string to upper case.
+C
+C     Purpose.
+C     --------
+C
+C           Convert character string to all upper case.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL L2U1CR (HSTRNG)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               HSTRNG     - String in upper and/or lower case.
+C
+C               Output parameters.
+C               ------------------
+C
+C               HSTRNG     - Character string in all upper case.
+C
+C     Method.
+C     -------
+C
+C           Numeric values of each byte examined and altered if in the
+C           range of lower case letters.
+C
+C     Externals.
+C     ----------
+C
+C           ICHAR
+C           CHAR
+C
+C     Reference.
+C     ----------
+C
+C           Cray Programmer's Library Reference Manual.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains sections 0 to 1 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      07:04:89.
+C
+C     Modifications
+C     --------------
+C
+C           J. Hennessy      ECMWF      29.01.90
+C           Replace null characters by blanks.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      CHARACTER*(*) HSTRNG
+C
+C     ASCII representation of lower case characters a and z.
+C
+      DATA IA  /97/
+      DATA IZ  /122/
+C
+C     ASCII representation of null and blank characters.
+C
+      DATA INULL /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Change any necessary letters.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+C
+      ILEN = LEN (HSTRNG)
+C
+      DO 1100 J=1,ILEN
+         ICH = ICHAR (HSTRNG(J:J))
+         IF ( (ICH.GE.IA).AND.(ICH.LE.IZ) ) HSTRNG (J:J) = CHAR (ICH-32)
+         IF (ICH.EQ.INULL) HSTRNG (J:J) = CHAR (32)
+ 1100 CONTINUE
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/ldc1cr.F b/gribex/ldc1cr.F
new file mode 100755
index 0000000..97867ac
--- /dev/null
+++ b/gribex/ldc1cr.F
@@ -0,0 +1,755 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE LDC1CR (HVERB,HOWN,HEXP,HTYP,HCLS,HSTR,HRUT,KPR,KRC)
+C
+C
+C---->
+C**** LDC1CR
+C
+C     PURPOSE.
+C     --------
+C
+C           LIST ALL NODES AND FILES FOR A GIVEN RESEARCH EXPERIMENT.
+C           FILES AND NODES UNDER OPERATIONS TEST ROOT-NODE MATST CAN
+C           ALSO BE LISTED. OPERATIONAL ARCHIVES CANNOT BE LISTED -
+C           THE VOLUME IS FAR TOO GREAT.
+C
+C           REMOVE ALL NODES AND FILES FOR A GIVEN RESEARCH EXPERIMENT.
+C           FILES AND NODES UNDER OPERATIONS TEST ROOT-NODE MATST CAN
+C           ALSO BE REMOVED. OPERATIONAL ARCHIVES CANNOT BE REMOVED.
+C
+C**   INTERFACE.
+C     ----------
+C
+C           CALL LDC1CR (HVERB,HOWN,HEXP,HTYP,HCLS,HSTR,HRUT,KPR,KRC)
+C
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               INPUT PARAMETERS.
+C               -----------------
+C
+C               HVERB      - ACTION REQUIRED. 'LIST' OR 'REMOVE'
+C
+C               HOWN       - OWNER'S PASSWORD. 6 CHARACTERS FOR
+C                            RESEARCH EXPERIMENT, 5 FOR OPERATIONS.
+C
+C               HEXP       - 4 CHARACTER EXPERIMENT IDENTIFIER.
+C
+C               HSTR       - ARCHIVE STREAM.
+C                            FOR RESEARCH.
+C                                DA - DAILY ARCHIVE.
+C                            FOR OPERATIONS.
+C                                DA - DAILY ARCHIVE.
+C                                CH - CHERNOBYL ARCHIVE.
+C                                TG - TOGA ARCHIVE.
+C                                MO - MONTHLY ARCHIVE.
+C
+C               HTYP       - DATA TYPE.
+C                            AN  - ANALYSIS.
+C                            IA  - INITIALISED ANALYSIS.
+C                            FG  - FIRST GUESS.
+C                            FC  - FORECAST.
+C                            EA  - ERRORS IN ANALYSIS.
+C                            CL  - CLIMATOLOGY.
+C                            ALL - ALL TYPES.
+C
+C               HCLS       - OD , OPERATIONS.
+C                            RD , RESEARCH.
+C
+C               HRUT       - ROOT NODE TO BE USED.
+C                            FOR RESEARCH.
+C                               P , PRODUCTION ROOT MARSR.
+C                               T , TEST ROOT MATSR.
+C                            FOR OPERATIONS.
+C                               P , PRODUCTION ROOT MARST.
+C                               O , OLD PRODUCTION ROOT MARSO.
+C                               T , TEST ROOT MATST.
+C
+C               KPR        - DEBUG PRINT SWITCH.
+C                            0 , NO PRINTOUT.
+C                            1 , DEBUG PRINTOUT.
+C
+C               OUTPUT PARAMETERS.
+C               ------------------
+C
+C               KRC        - ERROR RETURN CODE.
+C                        0 - NO ERROR ENCOUNTERED.
+C                        1 - EXPERIMENT DOES NOT EXIST
+C                        2 - EXPERIMENT IDIDENTIFIER NOT 4 CHARACTERS.
+C                        3 - ACTION ATTEMPTED ON OPERATIONAL NODES OR
+C                            FILES.
+C                        4 - ERROR REPORTED BY ECFILE.
+C                        5 - OWNER PASSWORD INCORRECT LENGTH.
+C                        6 - NO FREE FORTRAN UNIT NUMBERS.
+C
+C
+C     METHOD.
+C     -------
+C
+C           EXPERIMENT IDENTIFIER , DATA TYPE, CLASS AND ROOT ARE USED
+C           TO DETERMINE NODES AND FILES, WHICH ARE THEN LISTED.
+C           THE LIST IS USED TO DELETE NODES AND FILES IF REQUESTED.
+C
+C     EXTERNALS.
+C     ----------
+C
+C           ECFILE
+C           L2U1CR
+C
+C     REFERENCE.
+C     ----------
+C
+C           NONE.
+C
+C     COMMENTS.
+C     ---------
+C
+C           PROGRAM CONTAINS SECTIONS 0 TO 6 AND SECTION 9.
+C
+C
+C     AUTHOR.
+C     -------
+C
+C           J.HENNESSY       ECMWF      04:07:89.
+C
+C     MODIFICATIONS
+C     --------------
+C
+C           NONE.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 0 . DEFINITION OF VARIABLES. SET INITIAL VALUES.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+C
+C
+C
+C
+      DIMENSION      YPATH(3)
+      DIMENSION      YIU(6)
+      DIMENSION      IU(6)
+      DIMENSION      IREASON(5)
+C
+      CHARACTER*1    YCOMMA,YSTOP
+      CHARACTER*2    YIU
+      CHARACTER*5    YPATHC
+C
+      CHARACTER*8    HVERB
+      CHARACTER*6    HOWN
+      CHARACTER*4    HEXP
+      CHARACTER*2    HSTR
+      CHARACTER*4    HTYP
+      CHARACTER*2    HCLS
+      CHARACTER*1    HRUT
+C
+      CHARACTER*7    YLFNIN
+      CHARACTER*11   YLSTNA
+      CHARACTER*15   YNODE
+      CHARACTER*17   YPATH
+      CHARACTER*80   YLINE1
+      CHARACTER*80   YLINE2
+      CHARACTER*80   YPATH1
+      CHARACTER*80   YPATH2
+C
+      YLSTNA    = 'FN=LIST,NA,'
+      YCOMMA    = ','
+      YSTOP     = '.'
+C
+C     DEFAULT VALUES FOR NODES/FILES ARE RESEARCH PRODUCTION NODES AND
+C     FILES.
+C
+      YPATHC    = 'PATH='
+      YPATH(1)  = '/MARSR           '
+      YPATH(2)  = '/CACHE/MARSR     '
+      YPATH(3)  = '/MARSBACKUP/MARSR'
+C
+C     CHECK IF ACTION REQUIRED ON RESEARCH TEST ROOT.
+C
+      IF (HCLS.EQ.'RD'.AND.HRUT.EQ.'T')
+     C   THEN
+             YPATH(1)  = '/MATSR           '
+             YPATH(2)  = '/CACHE/MATSR     '
+             YPATH(3)  = '/MARSBACKUP/MATSR'
+         ENDIF
+C
+C     CHECK IF ACTION REQUIRED ON OPERATIONS TEST ROOT.
+C
+      IF (HCLS.EQ.'OD'.AND.HRUT.EQ.'T')
+     C   THEN
+             YPATH(1)  = '/MATST           '
+             YPATH(2)  = '/CACHE/MATST     '
+             YPATH(3)  = '/MARSBACKUP/MATST'
+         ENDIF
+C
+C     CHECK FOR ATTEMPTED ACTION ON OPERATIONS PRODUCTION ROOTS.
+C
+      IF (HCLS.EQ.'OD'.AND.HRUT.NE.'T')
+     C   THEN
+             KRC = 3
+             WRITE (*,9100)
+             GO TO 9000
+         ENDIF
+C
+C     GET 6 UNUSED FORTRAN UNIT NUMBERS.
+C
+      DO 10 J10 =1,6
+         CALL FTN1CR (IU(J10),KPR,ISERR)
+         IF (ISERR.NE.0)
+     C      THEN
+                WRITE (*,9800)
+                KRC = 6
+                GO TO 9000
+            ENDIF
+         WRITE (YIU(J10),'(I2.2)') IU(J10)
+         OPEN (UNIT=IU(J10),STATUS='SCRATCH')
+   10 CONTINUE
+C
+C
+C
+      JLOOP  = 0
+      KRC    = 0
+      IFLAG  = 0
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 1 . PREPARE LIST COMMAND USING PATHNAME AND GET NODE1.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 1'
+C
+C*    GO TO SECTION 9 IF ERROR IN EXPERIMENT IDENTIFIER .
+C
+      I = INDEX (HEXP,' ')
+      IF (I.NE.0)
+     C   THEN
+             KRC = 2
+             WRITE(*,9300) HEXP
+             IFLAG = 1
+             GO TO 9000
+         ENDIF
+C
+C*    IF ACTION IS 'REMOVE' CHECK PASSWORD LENGTH.
+C
+      IF (HVERB.EQ.'REMOVE  ')
+     C   THEN
+             IL = INDEX (HOWN,' ')
+             IF (IL.EQ.6) IL = 5
+             IF (IL.EQ.0) IL = 6
+             IF (IL.EQ.5.AND.HCLS.NE.'OD') KRC = 5
+             IF (IL.EQ.6.AND.HCLS.NE.'RD') KRC = 5
+             IF (KRC.NE.0)
+     C          THEN
+                    WRITE (*,9400) HOWN
+                    GO TO 9000
+                ENDIF
+         ENDIF
+C
+C     LOOP ROUTINE FOR EACH TYPE OF PATHNAME
+C
+C     IF JLOOP = 1 LOOK FOR NODES BEGINNING WITH /MARSR
+C     IF JLOOP = 2 LOOK FOR NODES BEGINNING WITH /CACHE/MARSR
+C     IF JLOOP = 3 LOOK FOR NODES BEGINNING WITH /MARSBACKUP/MARSR
+C
+      JLOOP = JLOOP + 1
+      IF (JLOOP.GT.3) GO TO 6000
+C
+C*    REWIND ALL FILES AT BEGINNING OF EACH LOOP
+C
+      REWIND IU(1)
+      REWIND IU(2)
+      REWIND IU(3)
+      REWIND IU(4)
+C
+      YLFNIN        = 'L=FT' // YIU(1)
+      YLINE1(1:)    = ' '
+      YLINE1(1:11)  = YLSTNA
+      YLINE1(12:17) = YLFNIN
+      YLINE1(18:18) = YCOMMA
+      YLINE1(19:23) = YPATHC
+      YLINE1(24:)   = YPATH(JLOOP)
+C
+      IJ = INDEX(YLINE1,' ')
+      YLINE1(IJ:IJ) = YSTOP
+C
+      IF (KPR.EQ.1) WRITE (*,'(1X,A80)') YLINE1
+C
+      CALL ECFILE (IERR,IREASON,YLINE1)
+C
+C*    TRAP CFS RETURN CODES FOR FILE/NODE DOES NOT EXIST.
+C
+      IF (IERR .EQ. 9.
+     C   AND.IREASON(1).EQ.1.
+     C   AND.IREASON(2).EQ.1.
+     C   AND.IREASON(3).EQ.33) GO TO 1000
+C
+C*    GO TO SECTION 9 , IF ANY OTHER ERROR REPORTED.
+C
+      IF (IERR.NE.0)
+     C   THEN
+C
+             KRC = 4
+             WRITE (*,9500) IERR, IREASON
+             WRITE (*,9600) YLINE1
+             GO TO 9000
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 2 . ISSUE LIST COMMAND(S) USING PATHNAME/NODE1/EXPID.
+C     ---------------------------------------------------------------
+C
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 2'
+C
+C     CREATE EACH PATHNAME + NODE(S)
+C     IF TYPE = ALL THEN LIST ALL TYPES
+C
+      REWIND IU(1)
+C
+ 2100 CONTINUE
+      READ (IU(1),'(A80)',END=6000) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).NE.'DESC') GO TO 2100
+C
+C
+ 2200 CONTINUE
+      READ (IU(1),'(A80)',END=6000) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).EQ.'    ') GO TO 1000
+C
+      IF (HTYP(1:3).EQ.'ALL') GO TO 2220
+      IF (HTYP(1:2).NE.YLINE1(19:20)) GO TO 2200
+C
+ 2220 CONTINUE
+      YNODE = '/' // YLINE1(19:20) // '/' // HEXP
+      IF (JLOOP .EQ. 1) YPATH1 = YPATH(JLOOP)(1:6) // YNODE
+      IF (JLOOP .EQ. 2) YPATH1 = YPATH(JLOOP)(1:12) // YNODE
+      IF (JLOOP .EQ. 3) YPATH1 = YPATH(JLOOP) // YNODE
+C
+C
+      YLFNIN         = 'L=FT'//YIU(2)
+      YLINE1(1:11)   = YLSTNA
+      YLINE1(12:17)  = YLFNIN
+      YLINE1(18:18)  = YCOMMA
+      YLINE1(19:23)  = YPATHC
+      YLINE1(24:)    = YPATH1
+      IJ = INDEX (YLINE1,' ')
+      YLINE1(IJ:IJ)  = YSTOP
+      IPTR = IJ
+      IF (KPR.EQ.1) WRITE (*,'(1H ,A80)') YLINE1
+C
+      CALL ECFILE (IERR,IREASON,YLINE1)
+C
+C*    TRAP CFS RETURN CODES FOR FILE/NODE DOES NOT EXIST.
+C
+      IF (IERR.EQ.9.
+     C    AND.IREASON(1).EQ.1.
+     C    AND.IREASON(2).EQ.1.
+     C    AND.IREASON(3).EQ.33) GO TO 2200
+C
+C*    GO TO SECTION 9 , IF ANY OTHER ERROR REPORTED.
+C
+      IF (IERR.NE.0)
+     C   THEN
+             KRC = 4
+             WRITE (*,9500) IERR, IREASON
+             WRITE (*,9600) YLINE1
+             GO TO 9000
+         ENDIF
+C
+C     SET FLAG TO INDICATE NODE FOUND FOR GIVEN EXPERIMENT IDENTIFIER.
+C
+      IFLAG = 1
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 3 . ISSUE LIST COMMAND USING PATHNAME/NODE1/EXPID/NODE2.
+C     ------------------------------------------------------------------
+C
+ 3000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 3'
+C
+C     CREATE PATHNAME WITH NEXT NODE.
+C
+      REWIND IU(2)
+ 3100 CONTINUE
+      READ (IU(2),'(A80)',END=2200) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).NE.'DESC')  GO TO 3100
+C
+      IPT1 = 0
+ 3200 CONTINUE
+      READ (IU(2),'(A80)',END=2200) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).EQ.'    ')  GO TO 2200
+      YNODE = '/'//YLINE1(19:22)
+      IJ = INDEX (YPATH1,' ')
+      IF (IPT1.EQ.0) IPT1 = IJ - 1
+      YPATH1 = YPATH1(1:IPT1)//YNODE
+C
+      YLINE1(1:)     = ' '
+      YLFNIN         = 'L=FT'//YIU(3)
+      YLINE1(1:11)   = YLSTNA
+      YLINE1(12:17)  = YLFNIN
+      YLINE1(18:18)  = YCOMMA
+      YLINE1(19:23)  = YPATHC
+      YLINE1(24:) = YPATH1
+      IJ = INDEX (YLINE1,' ')
+      YLINE1(IJ:IJ)  = YSTOP
+      IF (KPR.EQ.1) WRITE (*,'(1H ,A80)') YLINE1
+C
+      CALL ECFILE (IERR,IREASON,YLINE1)
+C
+C*    TRAP CFS RETURN CODES FOR FILE/NODE DOES NOT EXIST.
+C
+      IF (IERR.EQ.9.
+     C   AND.IREASON(1).EQ.1.
+     C   AND.IREASON(2).EQ.1.
+     C   AND.IREASON(3).EQ.33) GO TO 3200
+C
+C*    GO TO SECTION 9 , IF ANY OTHER ERROR REPORTED.
+C
+      IF (IERR.NE.0)
+     C   THEN
+             KRC = 4
+             WRITE (*,9500) IERR, IREASON
+             WRITE (*,9600) YLINE1
+             GO TO 9000
+         ENDIF
+C
+C    ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 4. ISSUE LIST COMMAND PATHNAME/NODE1/EXPID/NODE2/NODE3.
+C     ------------------------------------------------------------------
+C
+ 4000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 4'
+C
+      REWIND IU(3)
+C
+ 4200 CONTINUE
+      READ (IU(3),'(A80)',END=3200) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).NE.'DESC')  GO TO 4200
+C
+ 4300 CONTINUE
+      READ (IU(3),'(A80)',END=3200) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).EQ.'    ')  GO TO 3200
+      YNODE = '/'//YLINE1(19:22)
+      IJ = INDEX (YPATH1,' ')
+      IPTR = IJ - 1
+      YPATH1 = YPATH1(1:IPTR)//YNODE
+      YPATH2 = YPATH1
+      WRITE (*,'(1H1,''CFS PATHNAME -'')')
+      WRITE (*,'(5X,A80)') YPATH1
+C
+C*    WRITE PATHNAME TO FILE USED IN DELETING NODES .
+C
+      YLINE2='FN=REMOVE,PW='//HOWN(1:IL)//',NA,PATH='//YPATH2
+      IJ = INDEX (YLINE2,' ')
+      YLINE2(IJ:) = '.'
+      WRITE (IU(6),'(A80)') YLINE2
+C
+C
+      REWIND IU(4)
+      YLINE1(1:)     = ' '
+      YLFNIN         = 'L=FT'//YIU(4)
+      YLINE1(1:11)   = YLSTNA
+      YLINE1(12:17)  = YLFNIN
+      YLINE1(18:18)  = YCOMMA
+      YLINE1(19:23)  = YPATHC
+      YLINE1(24:)    = YPATH1
+      IJ = INDEX (YLINE1,' ')
+      YLINE1(IJ:IJ)  = YSTOP
+      YPATH1(IPTR+1: ) = ' '
+      IF (KPR.EQ.1) WRITE (*,'(1H ,A80)') YLINE1
+C
+      CALL ECFILE (IERR,IREASON,YLINE1)
+C
+C*    TRAP CFS RETURN CODES FOR FILE/NODE DOES NOT EXIST.
+C
+      IF (IERR.EQ.9.
+     C   AND.IREASON(1).EQ.1.
+     C   AND.IREASON(2).EQ.1.
+     C   AND.IREASON(3).EQ.33) GO TO 4300
+C
+C*    GO TO SECTION 9 , IF ANY OTHER ERROR REPORTED.
+C
+      IF (IERR.NE.0)
+     C   THEN
+             KRC = 4
+             WRITE (*,9500) IERR, IREASON
+             WRITE (*,9600) YLINE1
+             GO TO 9000
+         ENDIF
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 5. PRINT OUT CFS FILE NAMES.
+C     ---------------------------------------------------------------
+C
+ 5000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 5.'
+C
+      REWIND (IU(4))
+C
+      WRITE (*,'(1H ,''CFS-FILES'')')
+ 5100 CONTINUE
+      READ (IU(4),'(A80)',END=5300) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).NE.'DESC') GO TO 5100
+C
+ 5200 CONTINUE
+      READ (IU(4),'(A80)',END=5300) YLINE1
+      CALL L2U1CR (YLINE1)
+      IF (YLINE1(19:22).EQ.'    ') GO TO 4300
+      WRITE (*,'(5X,A14)') YLINE1(19:32)
+      YLINE2='FN=DELETE,PW='//HOWN(1:IL)//',NA,PATH='//YPATH2
+      IJ = INDEX (YLINE2,' ')
+      INOD = IJ
+      YLINE2(IJ:) = '/'//YLINE1(19:32)//'.'
+C
+C*    WRITE PATHNAME TO FILE USED IN DELETING FILES .
+C
+      WRITE (IU(5),'(A80)') YLINE2
+      GO TO 5200
+ 5300 CONTINUE
+      WRITE (*,*) 'HOW DID I GET HERE'
+      YLINE2 = YLINE2(1:IJ-1)//'.'
+      WRITE (*,'(1H ,A80)') YLINE2
+      GO TO 4300
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 6 . DELETE CFS FILES AND REMOVE NODES . IF REQUIRED.
+C     ------------------------------------------------------------------
+C
+ 6000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 6.'
+C
+C*    GO TO SECTION 9 IF LIST OF NODES AND FILES ONLY.
+C
+      IF (HVERB.EQ.'LIST    ') GO TO 9000
+      IERR=0
+C
+C     DELETE FILES.
+C
+      REWIND IU(5)
+ 6100 CONTINUE
+      READ (IU(5),'(A80)',END=6200) YLINE2
+C
+      IF (KPR.EQ.1) WRITE (*,'(1H ,A80)') YLINE2
+      CALL ECFILE (IERR,IREASON,YLINE2)
+C
+C*    GO TO SECTION 9 , IF ERROR REPORTED.
+C
+      IF (IERR.NE.0)
+     C   THEN
+             KRC = 4
+             WRITE (*,9700) IERR, IREASON
+             WRITE (*,9600) YLINE2
+             GO TO 9000
+         ENDIF
+C
+      GO TO 6100
+C
+ 6200 CONTINUE
+C
+C     REMOVE NODES.
+C
+      REWIND IU(6)
+ 6300 CONTINUE
+      READ (IU(6),'(A80)',END=6400) YLINE2
+ 6350 CONTINUE
+      IF (KPR.EQ.1) WRITE (*,'(1H ,A80)') YLINE2
+      CALL ECFILE (IERR,IREASON,YLINE2)
+C
+C     TRAP RETURN CODES FOR NODE HAS DESCENDANTS. EXPERIMENT
+C     IDENTIFIER NODES CAN HAVE SEVERAL DESCENDANTS, AND ARE
+C     REMOVED WHEN ALL DESCENDANTS HAVE BEEN REMOVED.
+C
+      IF (IERR.EQ.9.
+     C    AND.IREASON(1).EQ.1.
+     C    AND.IREASON(2).EQ.104.
+     C    AND.IREASON(3).EQ.0)   GO TO 6300
+C
+C*    GO TO SECTION 9 , IF ERROR REPORTED.
+C
+      IF (IERR.NE.0)
+     C   THEN
+             KRC = 4
+             WRITE (*,9700) IERR, IREASON
+             WRITE (*,9600) YLINE2
+             GO TO 9000
+         ENDIF
+C
+C     MODIFY COMMAND AS LAST NODE HAS BEEN REMOVED.
+C
+      I = INDEX (YLINE2,'.')
+      DO 6360 J6360 = I,1,-1
+         IF (YLINE2(J6360:J6360).EQ.'/')
+     C      THEN
+                YLINE2(J6360:) = '.'
+                GO TO 6370
+            ENDIF
+ 6360 CONTINUE
+C
+ 6370 CONTINUE
+C
+C     NODES ARE REMOVED ONLY AS FAR AS THE TYPE NODE EG AN,OR FC.
+C
+      IF (YLINE2(J6360-3:J6360-3).NE.'/') GO TO 6350
+C
+      GO TO 6300
+C
+C
+ 6400 CONTINUE
+C
+C
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    SECTION 9 . RETURN TO CALLING ROUTINE.FORMAT STATEMENTS.
+C     ------------------------------------------------------------------
+C
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'LDC1CR : SECTION 9.'
+C
+C     CLOSE AND RETURN FILES.
+C
+      DO 9010 J9010=1,6
+         CLOSE (UNIT=IU(J9010))
+ 9010 CONTINUE
+C
+C     SEE IF THE EXPERIMENT DOES EXIST IN CFS (IE IFLAG =1)
+C
+      IF (IFLAG .EQ. 0)
+     C   THEN
+          KRC = 1
+          WRITE (*,9200) HEXP
+         ENDIF
+      RETURN
+C
+C
+ 9100 FORMAT (' LDC1CR : ACTION ATTEMPTED ON OPERATIONAL PRODUCTION',
+     C          ' NODES OR FILES.')
+C
+ 9500 FORMAT (' LDC1CR : NODE/FILE LISTING ERROR. FAILURE CODE = ',I3,
+     C          ' , REASON CODES = ',3I6,'.')
+C
+ 9600 FORMAT (1H ,A)
+C
+ 9700 FORMAT (' LDC1CR : NODE/FILE REMOVAL ERROR. FAILURE CODE = ',I3,
+C
+     C          ' , REASON CODES = ',3I6,'.')
+C
+ 9800 FORMAT (' LDC1CR : NO FREE FORTRAN UNIT NUMBERS.')
+C
+ 9200 FORMAT (' LDC1CR : EXPERIMENT IDENTIFIER OF ',A5,' NOT IN CFS')
+C
+ 9300 FORMAT (' LDC1CR : EXPERIMENT IDENTIFIER NOT 4 CHARACTERS - ',
+     C          A)
+ 9400 FORMAT (' LDC1CR : OWNER (PASSWORD) INVALID - ',A)
+C
+C     ------------------------------------------------------------------
+C
+C
+      END
diff --git a/gribex/lnbfcr.F b/gribex/lnbfcr.F
new file mode 100755
index 0000000..42cf1f6
--- /dev/null
+++ b/gribex/lnbfcr.F
@@ -0,0 +1,220 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE LNBFCR (KARRAY,KLENB)
+C
+C---->
+C**** LNBFCR - Calculate length of BUFR message on Cray.
+C
+C     Purpose.
+C     --------
+C
+C           Calculate length of BUFR message.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL LNBFCR (KARRAY,KLENB)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               KARRAY     - Array containing BUFR message.
+C
+C               KLENB      - 0, abort if error.
+C                            1, return to calling routine even if error,
+C                               unless array limits exceeded.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KLENB      - Length of BUFR message in bytes.
+C                            -1, error in calculating length.
+C
+C     Method.
+C     -------
+C
+C           The length of each BUFR message is calculated
+C           from the BUFR header Sections.
+C
+C     Externals.
+C     ----------
+C
+C           UNPACK
+C
+C     Reference.
+C     ----------
+C
+C           WMO BUFR Code Documentation.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      20:06:90.
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      18:12:90.
+C           Soft fail option added.
+C
+C           J. Hennessy      ECMWF      04:02:92.
+C           Modified to cater for Edition 2 of BUFR code.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      PARAMETER (JPBYT=2056)
+C
+      DIMENSION KARRAY(*)
+      DIMENSION ISCATR(JPBYT)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Calculate BUFR length.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+      IABORT = KLENB
+C
+C     Unpack first JPBYT bytes of data.
+C
+      CALL UNPACK (KARRAY,8,ISCATR,JPBYT)
+C
+C     BUFR Edition 2 or greater has full message length in
+C     bytes 5-7. ( Edition number is in byte 8)
+C
+      IF (ISCATR(8).GE.2)
+     C   THEN
+             KLENB = SHIFTL(ISCATR(5),16) + SHIFTL(ISCATR(6),8)
+     C                 + ISCATR(7)
+             GO TO 9000
+         ENDIF
+C
+C     Length not in message, so calculate.
+C     Count of octets in Section 0.
+C
+      KLENB = 4
+C
+C     Count of octets in Section 1.
+C
+      KLENB = KLENB + SHIFTL(ISCATR(5),16) + SHIFTL(ISCATR(6),8)
+     C                 + ISCATR(7)
+C
+C     Check if optional Section 2 is present.
+C
+      IFLAG = ISCATR(12)
+C
+C     Check flag value.
+C
+      IF (IFLAG.NE.0.AND.IFLAG.NE.128)
+     C   THEN
+             WRITE (*,9002) IFLAG
+	     IF (IABORT.EQ.0) CALL ABORT
+	     KLENB = -1
+	     GO TO 9000
+         ENDIF
+C
+      IF (IFLAG.EQ.128)
+     C        KLENB = KLENB + SHIFTL(ISCATR(KLENB+1),16) +
+     C                SHIFTL(ISCATR(KLENB+2),8) + ISCATR(KLENB+3)
+C
+C     Check on array length.
+C
+      IF (KLENB.GT.JPBYT)
+     C   THEN
+             WRITE (*,9001)
+	     IF (IABORT.EQ.0) CALL ABORT
+	     KLENB = -1
+	     GO TO 9000
+         ENDIF
+C
+C     Length of Section 3.
+C
+      KLENB = KLENB + SHIFTL(ISCATR(KLENB+1),16) +
+     C                SHIFTL(ISCATR(KLENB+2),8) + ISCATR(KLENB+3)
+C
+C     Check on array length.
+C
+      IF ((KLENB+3).GT.JPBYT)
+     C   THEN
+             WRITE (*,9001)
+	     IF (IABORT.EQ.0) CALL ABORT
+	     KLENB = -1
+	     GO TO 9000
+         ENDIF
+C
+C     Length of binary data Section 4.
+C
+      KLENB = KLENB + SHIFTL(ISCATR(KLENB+1),16) +
+     C                SHIFTL(ISCATR(KLENB+2),8) + ISCATR(KLENB+3)
+C
+C     Length of Section 5.
+C
+      KLENB = KLENB + 4
+C
+C    ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+ 9001 FORMAT (1H ,'LNBFCR : Array ISCATR limits exceeded.')
+C
+ 9002 FORMAT (1H ,'LNBFCR : Error in section 2 flag - ',I4)
+C
+      RETURN
+C
+      END
diff --git a/gribex/lngbcr.F b/gribex/lngbcr.F
new file mode 100755
index 0000000..d058198
--- /dev/null
+++ b/gribex/lngbcr.F
@@ -0,0 +1,309 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE LNGBCR (KARRAY,KLENB)
+C
+C---->
+C**** LNGBCR - Calculate or extract length of GRIB field on Cray.
+C
+C     Purpose.
+C     --------
+C
+C           Calculate or extract length of GRIB field.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL LNGBCR (KARRAY,KLENB)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               KARRAY     - Array containing GRIB field.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KLENB      - Length of GRIB field in bytes.
+C
+C     Method.
+C     -------
+C
+C           The length of each GRIB encoded field is calculated
+C           from the GRIB header Sections for Experimental Edition
+C           or Edition 0 of GRIB code. For GRIB Edition 1 the length
+C           is extracted from bytes 5-7 of section 0.
+C
+C     Externals.
+C     ----------
+C
+C           UNPACK
+C
+C     Reference.
+C     ----------
+C
+C           WMO GRIB Code Documentation.
+C
+C           Research Department Documentation for description of
+C           BUDG and TIDE Pseudo-Grib messages.
+C
+C     Comments.
+C     ---------
+C
+C           ECMWF Pseudo-Grib fields (BUDG and TIDE)are handled by this
+C           routine.
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      30:04:90.
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      31:05:90.
+C           Increase array size to accommodate vertical level
+C           co-ordinates of model level data. Add array size check.
+C
+C           J. Hennessy      ECMWF      13:11:90.
+C           Increase array size to accommodate bit maps.
+C
+C           J. Hennessy      ECMWF      16:05:91.
+C           Modified to handle GRIB Edition 1.
+C
+C           J. Hennessy      ECMWF      23:09:92.
+C           Washington SST made fixed length for GRIB Edition 1.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      PARAMETER (JPBYT=5440)
+C
+      DIMENSION KARRAY(*)
+      DIMENSION ISCATR(JPBYT)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Unpack the data.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Unpack first JPBYT octets of data, 1 octet per word.
+C
+      CALL UNPACK (KARRAY,8,ISCATR,JPBYT)
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Identify GRIB Edition of data.
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     In the Experimental GRIB Edition, octet 8 is a flag field
+C     and can have a valid value of 0, 1, 2 or 3.
+C     In GRIB Edition 0, octet 8 is reserved and set to 0.
+C     In GRIB Edition 1, the edition number is in octet 8.
+C
+C     However, Edition 0 of the code has a fixed length of 24 octets,
+C     included in the message, for section 1, so if the value
+C     contained in octets 5-7 is 24, and that in octet 8 is 0, it
+C     is safe to assume Edition 0 of the GRIB code.
+C
+      IF (ISCATR(5).EQ.0.AND.ISCATR(6).EQ.0.AND.ISCATR(7).EQ.24.
+     C              AND.ISCATR(8).EQ.0)
+     C   THEN
+             ISNEW = 1
+	     GO TO 400
+         ENDIF
+C
+C     In the Experimental GRIB Edition, octets 23 and 24 are reserved
+C     and set to 0. These octets in Edition 1 are the month and the day,
+C     and must be non-zero.
+C
+      IF (ISCATR(22).EQ.0.AND.ISCATR(23).EQ.0)
+     C   THEN
+             ISNEW = 0
+	     GO TO 400
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Extract GRIB length from Edition 1 data.
+C     ----------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Edition number is 1, so extract length from octets 5-7.
+C
+      KLENB = SHIFTL(ISCATR(5),16) + SHIFTL(ISCATR(6),8) + ISCATR(7)
+      IF (ISCATR(13).EQ.7.AND.ISCATR(17).EQ.139) KLENB = 34920
+      GO TO 900
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 4 . Calculate GRIB length.
+C     ----------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     NMC Washington Sea Surface Temperature analysis is a global
+C     field made in ECMWF from 8 component fields received on the GTS
+C     and coded in GRIB using ECMWF field code 139. This field
+C     contains a bit map and varies in length. For archiving purposes
+C     a fixed length was used (34920) bytes. NMC has code figure 7
+C     as centre of origin. Experimental Edition of GRIB was never
+C     used for this product.
+C
+      IF (ISNEW.EQ.1.AND.ISCATR(9).EQ.7.AND.ISCATR(13).EQ.139)
+     C   THEN
+             KLENB = 34920
+             GO TO 900
+         ENDIF
+C
+C     Count of octets in Section 0.
+C
+      KLENB = 4
+C
+C     Count of octets in Section 1 - code edition dependent.
+C
+      KLENB = KLENB + 20 + (ISNEW*4)
+C
+C     Check if optional Section 2 is present.
+C
+      IFLAG = ISCATR(8+4*ISNEW)
+      INC   = 0
+      IF (ISNEW.EQ.0)
+     C   THEN
+             IF (IFLAG.EQ.1.OR.IFLAG.EQ.3) INC = 1
+         ELSE
+             IF (IFLAG.EQ.128.OR.IFLAG.EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C        KLENB = KLENB + SHIFTL(ISCATR(KLENB+1),16) +
+     C                SHIFTL(ISCATR(KLENB+2),8) + ISCATR(KLENB+3)
+C
+C     Check on array length.
+C
+      IF (KLENB.GT.JPBYT)
+     C   THEN
+             WRITE (*,9001)
+             CALL ABORT
+         ENDIF
+C
+C     Check if optional Section 3 is present.
+C
+      INC   = 0
+      IF (ISNEW.EQ.0)
+     C   THEN
+             IF (IFLAG.EQ.2.OR.IFLAG.EQ.3) INC = 1
+         ELSE
+             IF (IFLAG.EQ.64.OR.IFLAG.EQ.192) INC = 1
+         ENDIF
+C
+      IF (INC.EQ.1)
+     C        KLENB = KLENB + SHIFTL(ISCATR(KLENB+1),16) +
+     C                SHIFTL(ISCATR(KLENB+2),8) + ISCATR(KLENB+3)
+C
+C     Check on array length.
+C
+      IF ((KLENB+3).GT.JPBYT)
+     C   THEN
+             WRITE (*,9001)
+             CALL ABORT
+         ENDIF
+C
+C     Length of binary data Section 4.
+C
+      KLENB = KLENB + SHIFTL(ISCATR(KLENB+1),16) +
+     C                SHIFTL(ISCATR(KLENB+2),8) + ISCATR(KLENB+3)
+C
+C     Length of Section 5.
+C
+      KLENB = KLENB + 4
+C
+C    ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'LNGBCR : Array ISCATR limits exceeded.')
+C
+      RETURN
+C
+      END
diff --git a/gribex/local2.F b/gribex/local2.F
new file mode 100755
index 0000000..5ece162
--- /dev/null
+++ b/gribex/local2.F
@@ -0,0 +1,236 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION LOCAL2(KTABLE, KPARAM, KCENTR,
+     X                        HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C---->
+C**** LOCAL2
+C
+C     Purpose
+C     -------
+C
+C     Looks up the description of a parameter in known table 2 versions
+C     for WMO code FM 92-X Ext. GRIB.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = LOCAL2(KTABLE, KPARAM, KCENTR,
+C                   HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C     Input
+C     -----
+C
+C     KTABLE - Local table 2 version number.
+C     KPARAM - Parameter number.
+C     KCENTR - Centre number.
+C
+C
+C     Output
+C     ------
+C
+C     HFIRST  - First line of descriptor:  MARS mnemonic
+C     HSECOND - Second line of descriptor: Parameter description
+C     HTHIRD  - Third line of descriptor:  Units for the parameter
+C     HFOURTH - Fourth line of descriptor: Description of units
+C
+C     Function return value is
+C            0 if no error detected.
+C        20001 if no match found for the parameter number in
+C              the given table.
+C        20002 if there is an error opening the file holding
+C              the given table.
+C        20003 if there is an error finding an unused fortran unit
+C              number for reading the table.
+C
+C
+C     Method
+C     ------
+C
+C     Checks if environment variable ECMWF_LOCAL_TABLE_PATH exists to
+C     define the location of the parameter tables.
+C
+C     Otherwise, looks for table xxx in:
+C       /home/ecmwf/emos_sms/tables/gribex/nnnnnn/local_table_2_version_xxx.
+C     where nnnnnn is the current EMOSLIB version.
+C
+C     Entry for each parameter in table has the format (without quotes):
+C        "......................"         Separator
+C        "051"                            Paramter number
+C        "MX2T24"                         MARS mnemonic
+C        "Max 2m temp"                    Parameter description
+C        "K"                              Units for the parameter
+C        "During previous 24 hours"       Further description
+C
+C     There is a termination "......................" line in the file
+C     and there may be lines of comment before the first parameter entry.
+C
+C     The parameter definition file is kept open between calls.
+C
+C
+C     Externals
+C     ---------
+C     TAB2FIL - Builds code table 2 file name.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Sept 1995
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Argument KCENTR added for code tables management.
+C     Use TAB2FIL function for file name building.
+C
+C     _______________________________________________________
+C----<
+C
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 20000 )
+C
+C     Function arguments
+C
+      INTEGER KPARAM, KTABLE, KCENTR
+      CHARACTER*(*) HFIRST, HSECOND, HTHIRD, HFOURTH
+C
+C     Local variables
+C
+      INTEGER IPR, IRET, ISTATUS, IPARAM, ITABLE
+      CHARACTER*256 YFILE, YDUMMY
+C
+      INTEGER NOLDTAB, NUNIT
+      SAVE NOLDTAB, NUNIT
+C
+C     External functions
+C
+      INTEGER TAB2FIL
+      EXTERNAL TAB2FIL
+C
+      DATA NOLDTAB/-1/
+C
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      LOCAL2 = 0
+C
+C     Put phoney fields in return parameters
+C
+      HFIRST  = 'NONE'
+      HSECOND = 'Undefined parameter'
+      HTHIRD  = 'Undefined parameter'
+      HFOURTH = 'Undefined parameter'
+C
+C     See if a new table is requested.
+C
+      IF( MAX( KTABLE, KPARAM) .LE. 127 ) THEN
+        ITABLE = KTABLE
+      ELSE
+        ITABLE = 1000*KCENTR + KTABLE
+      ENDIF
+C
+      IF( ITABLE.NE.NOLDTAB ) THEN
+        IF( NOLDTAB.NE.-1 ) CLOSE(UNIT=NUNIT)
+        NOLDTAB = ITABLE
+C
+C      Find an unused fortran unit number
+C
+        IPR = 0
+        CALL FTN1CR(NUNIT, IPR, IRET)
+        IF( IRET.NE.0 ) THEN
+          LOCAL2 = JPROUTINE + 3
+          RETURN
+        ENDIF
+C
+C       Build filename
+C
+        IRET = TAB2FIL( KTABLE, KPARAM, KCENTR, YFILE )
+C
+C       Open file
+C
+        OPEN(UNIT=NUNIT, FILE=YFILE, ERR=910, IOSTAT=ISTATUS,
+     X       STATUS='OLD',FORM='FORMATTED')
+C
+C     Otherwise, use the existing open parameter table file.
+C
+      ELSE
+        REWIND NUNIT
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Search for the parameter in the table.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Skip lines until '......................' separator found
+C
+  210 CONTINUE
+      READ(NUNIT,'(A)',END=230) YDUMMY
+      IF( YDUMMY(1:22).EQ.'......................') GOTO 225
+      GOTO 210
+C
+C     Loop through file
+C
+  220 CONTINUE
+        READ(NUNIT,'(A)',END=230) YDUMMY
+  225 CONTINUE
+        READ(NUNIT,'(I3.3)',END=230) IPARAM
+        IF ( IPARAM .EQ. KPARAM ) THEN
+          READ(NUNIT,'(A)',END=230) HFIRST
+          READ(NUNIT,'(A)',END=230) HSECOND
+          READ(NUNIT,'(A)',END=230) HTHIRD
+          READ(NUNIT,'(A)',END=230) HFOURTH
+          LOCAL2 = 0
+          GOTO 900
+        ELSE
+          READ(NUNIT,'(A)',END=230) YDUMMY
+          READ(NUNIT,'(A)',END=230) YDUMMY
+          READ(NUNIT,'(A)',END=230) YDUMMY
+          READ(NUNIT,'(A)',END=230) YDUMMY
+        ENDIF
+      GOTO 220
+C
+C     Dropthrough if no match found
+C
+ 230  CONTINUE
+      LOCAL2 = JPROUTINE + 1
+      GOTO 900
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+C     Error opening table file
+C
+ 910  CONTINUE
+      LOCAL2 = JPROUTINE + 2
+      RETURN
+C
+C     Normal return.
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/local2c.c b/gribex/local2c.c
new file mode 100755
index 0000000..e0af49b
--- /dev/null
+++ b/gribex/local2c.c
@@ -0,0 +1,131 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define LOCAL2C local2c
+#define LOCAL2KC local2kc
+#define EMOSNUM emosnum
+#else
+#define LOCAL2C local2c_
+#define LOCAL2KC local2kc_
+#define EMOSNUM emosnum_
+#endif
+#endif
+
+#ifdef TABLE_PATH
+#define USER 1
+#else
+#define USER 0
+#define TABLE_PATH "/home/ma/emos/tables/gribex/nnnnnn/local_table_2_version_"
+#endif
+
+#define JPROUTINE 20000
+#define BUFFLEN 256
+
+int LOCAL2C(int , int , char * , char * , char * , char * );
+int LOCAL2KC(int * , char * , char * , char * , char * );
+int EMOSNUM(int *);
+
+int LOCAL2KC(int * ksec1,
+            char * hfirst, char * hsecond, char * hthird, char * hfourth)
+{
+    return ( LOCAL2C( ksec1[0], ksec1[5], hfirst, hsecond, hthird, hfourth) );
+}
+
+int LOCAL2C(int ktable, int kparam,
+            char * hfirst, char * hsecond, char * hthird, char * hfourth)
+{
+char yfile[256], * pyfile;
+FILE * in;
+char buffer[BUFFLEN];
+int iparam;
+int nnnnnn, noprint = 1;
+char NNNNNN[7];
+
+    strcpy( hfirst,  "NONE");
+    strcpy( hsecond, "Undefined parameter");
+    strcpy( hthird , "Undefined parameter");
+    strcpy( hfourth, "Undefined parameter");
+
+/* Build filename */
+
+    pyfile = getenv("ECMWF_LOCAL_TABLE_PATH");
+
+    if( pyfile == NULL )
+        strcpy( yfile, TABLE_PATH);
+		if(USER)
+		 strcat(yfile,"/gribtables");
+    else
+        strcpy( yfile, pyfile);
+
+    nnnnnn = EMOSNUM(&noprint);
+    sprintf(NNNNNN,"%6.6d",nnnnnn);
+    memcpy((yfile+28),NNNNNN,6);
+    sprintf((yfile+strlen(yfile)),"%3.3d",ktable);
+
+/* Open file */
+
+    in = fopen(yfile, "r");
+    if ( in == NULL )  return (JPROUTINE + 2);
+
+/*  Loop through file */
+
+    while(1)
+    {
+        fgets(buffer, BUFFLEN-1, in);
+        if (feof(in) ) return (JPROUTINE + 1);
+
+        fgets(buffer, BUFFLEN-1, in);
+        if (feof(in) ) return (JPROUTINE + 1);
+        sscanf(buffer, "%3d", &iparam);
+
+/*  Match found in table */
+
+        if( kparam == iparam )
+        {
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            buffer[strlen(buffer)-1] = '\0';
+            strcpy(hfirst,buffer);
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            buffer[strlen(buffer)-1] = '\0';
+            strcpy(hsecond,buffer);
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            buffer[strlen(buffer)-1] = '\0';
+            strcpy(hthird,buffer);
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            buffer[strlen(buffer)-1] = '\0';
+            strcpy(hfourth,buffer);
+            return 0;
+        }
+        else
+        {
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+            fgets(buffer, BUFFLEN-1, in);
+            if (feof(in) ) return (JPROUTINE + 1);
+        }
+        
+    }
+}
diff --git a/gribex/local2k.F b/gribex/local2k.F
new file mode 100755
index 0000000..3c148d0
--- /dev/null
+++ b/gribex/local2k.F
@@ -0,0 +1,105 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION LOCAL2K(KSEC1, HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C---->
+C**** LOCAL2K
+C
+C     Purpose
+C     -------
+C
+C     Looks up the description of a parameter in known table 2 versions
+C     for WMO code FM 92-X Ext. GRIB.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = LOCAL2K(KSEC1, HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C     Input
+C     -----
+C
+C     KSEC1  - Section 1 values for a GRIB product.
+C
+C
+C     Output
+C     ------
+C
+C     HFIRST  - First line of descriptor:  MARS mnemonic
+C     HSECOND - Second line of descriptor: Parameter description
+C     HTHIRD  - Third line of descriptor:  Units for the parameter
+C     HFOURTH - Fourth line of descriptor: Description of units
+C
+C     Function return value is
+C            0 if no error detected.
+C        20001 if no match found for the parameter number in
+C              the given table.
+C        20002 if there is an error opening the file holding
+C              the given table.
+C
+C
+C     Method
+C     ------
+C
+C     Calls LOCAL2.
+C
+C
+C     Externals
+C     ---------
+C     LOCAL2  - looks up information in standard tables.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Sept 1995
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C     Argument KCENTR added to LOCAL2 call for code tables management.
+C
+C     _______________________________________________________
+C----<
+C
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER KSEC1
+      DIMENSION KSEC1(*)
+      CHARACTER*(*) HFIRST, HSECOND, HTHIRD, HFOURTH
+C
+C     Externals
+      INTEGER LOCAL2
+C
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      LOCAL2K = LOCAL2(KSEC1(1), KSEC1(6), KSEC1(2),
+     X                 HFIRST, HSECOND, HTHIRD, HFOURTH)
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+C     Normal return.
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/make.dep b/gribex/make.dep
new file mode 100755
index 0000000..d91a74c
--- /dev/null
+++ b/gribex/make.dep
@@ -0,0 +1,36 @@
+#
+# Header file dependencies
+#
+c2ordr.o: grbcom.h
+codeps.o: grbcom.h
+confp3.o: grbcom.h
+csect4.o: grbcom.h
+docsec2.o: eocsec2.h
+ecdef1.o: ecdef1.h
+ecdef10.o: ecdef10.h
+ecdef11.o: ecdef11.h
+ecdef13.o: ecdef13.h
+ecdef2.o: ecdef2.h
+ecdef3.o: ecdef3.h
+ecdef4.o: ecdef4.h
+ecdef5.o: ecdef5.h
+ecdef6.o: ecdef6.h
+ecdef7.o: ecdef7.h
+ecdef8.o: ecdef8.h
+ecdef9.o: ecdef9.h
+eocsec2.o: eocsec2.h
+gribex.o: gribex.h grbcom.h
+grsdbg.o: grbcom.h
+grsdef.o: grbcom.h
+grsmkp.o: grbcom.h
+grsmok.o: grbcom.h
+grsn2o.o: grbcom.h
+grsref.o: grbcom.h
+grsrnd.o: grbcom.h
+grsubc.o: grbcom.h
+grsvck.o: grbcom.h
+grsx2o.o: grbcom.h
+bt_sun_c.o: /usr/include/stdio.h
+cgsloop.o: /usr/include/stdio.h
+jabort.o: /usr/include/stdlib.h
+local2c.o: /usr/include/stdio.h /usr/include/stdlib.h /usr/include/string.h
diff --git a/gribex/maxmin.F b/gribex/maxmin.F
new file mode 100755
index 0000000..6cede76
--- /dev/null
+++ b/gribex/maxmin.F
@@ -0,0 +1,139 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE MAXMIN(PARRAY,KLEN,PMAX,PMIN)
+C
+C---->
+C**** MAXMIN - Get maximum and minimum values.
+C
+C     Purpose.
+C     --------
+C
+C     Get maximum and minimum values from an array of
+C     floating point numbers..
+C
+C**   Interface.
+C     ----------
+C
+C     CALL MAXMIN(PARRAY,KLEN,PMAX,PMIN)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PARRAY - Array of numbers.
+C     KLEN   - Last word of this array.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     PMAX   - Maximum value.
+C     PMIN   - Minimum value.
+C
+C     Method.
+C     -------
+C
+C     Intrinsic functions MAX and MIN are used.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      18:06:91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Start loop from index 2.
+C     Inhibits use of DMAX1/DMIN1 on CRAY (SMP) systems.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KLEN
+      REAL   PARRAY, PMAX, PMIN, VSMALL
+      DIMENSION PARRAY(KLEN)
+#ifndef __uxp__
+C
+C     Parameters
+C
+      REAL JPSMALL
+#ifdef __alpha
+#ifdef REAL_8
+      PARAMETER (JPSMALL = 1E-307)
+#else
+      PARAMETER (JPSMALL = 1E-37)
+#endif
+#else
+      PARAMETER (JPSMALL = 1E-38)
+#endif
+#endif
+C
+C     Local variables
+C
+      INTEGER JLOOP
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Get maximum and minimum values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Set initial values.
+C
+      PMAX = PARRAY(1)
+      PMIN = PARRAY(1)
+C
+C     Extract maximum and minimum values.
+C
+      DO 110 JLOOP = 2 , KLEN
+        PMAX = MAX(PMAX,PARRAY(JLOOP))
+        PMIN = MIN(PMIN,PARRAY(JLOOP))
+  110 CONTINUE
+C
+C     Adjust to an acceptable 'tiny' minimum
+C
+#ifdef __uxp__
+      VSMALL = TINY(PMIN)
+#else
+      VSMALL = JPSMALL
+#endif
+      IF( (PMIN.NE.0.0).AND.(ABS(PMIN).LT.VSMALL) )
+     X   PMIN = SIGN(VSMALL,PMIN)
+C
+C     ----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/maxmn2.F b/gribex/maxmn2.F
new file mode 100755
index 0000000..e30b59c
--- /dev/null
+++ b/gribex/maxmn2.F
@@ -0,0 +1,156 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE MAXMN2(PARRAY,KLEN,PMISS,PMAX,PMIN)
+C
+C---->
+C**** MAXMN2 - Get max/minimum values, ignoring missing data value.
+C
+C     Purpose.
+C     --------
+C
+C     Get maximum and minimum values from an array of
+C     floating point numbers, ignoring missing data value.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL MAXMN2(PARRAY,KLEN,PMISS,PMAX,PMIN)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PARRAY - Array of numbers.
+C
+C     KLEN   - Last word of this array.
+C
+C     PMISS  - Value indicating missing data in array element.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     PMAX   - Maximum value.
+C     PMIN   - Minimum value.
+C
+C     Method.
+C     -------
+C
+C     Intrinsic functions MAX and MIN are used.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Comments.
+C     ---------
+C
+C     None.
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      18:06:91
+C
+C     Modifications.
+C     --------------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Exclude values from first loop in second search loop.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KLEN
+      REAL   PARRAY, PMAX, PMIN, PMISS, VSMALL
+      DIMENSION PARRAY(*)
+#ifndef __uxp__
+C
+C     Parameters
+C
+      REAL JPSMALL
+#ifdef __alpha
+#ifdef REAL_8
+      PARAMETER (JPSMALL = 1E-307)
+#else
+      PARAMETER (JPSMALL = 1E-37)
+#endif
+#else
+#ifdef REAL_8
+      PARAMETER (JPSMALL = 1E-308)
+#else
+      PARAMETER (JPSMALL = 1E-38)
+#endif
+#endif
+#endif
+C
+C     Local variables
+C
+      INTEGER JLOOP, IOFF
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Get maximum and minimum values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Set initial values to first data value which is not
+C     a missing data indicator.
+C
+      DO 110 JLOOP = 1 , KLEN
+        IF (PARRAY(JLOOP).NE.PMISS) THEN
+          PMAX = PARRAY(JLOOP)
+          PMIN = PARRAY(JLOOP)
+          IOFF = JLOOP
+          GO TO 120
+        ENDIF
+  110 CONTINUE
+C
+  120 CONTINUE
+C
+C     Extract maximum and minimum values.
+C
+      DO 130 JLOOP = IOFF+1 , KLEN
+        IF (PARRAY(JLOOP).NE.PMISS) THEN
+          PMAX = MAX(PMAX,PARRAY(JLOOP))
+          PMIN = MIN(PMIN,PARRAY(JLOOP))
+        ENDIF
+  130 CONTINUE
+C
+C     Adjust to an acceptable 'tiny' minimum
+C
+#ifdef __uxp__
+      VSMALL = TINY(PMIN)
+#else
+      VSMALL = JPSMALL
+#endif
+      IF( (PMIN.NE.0.0).AND.(ABS(PMIN).LT.VSMALL) )
+     X   PMIN = SIGN(VSMALL,PMIN)
+C
+C     ----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/maxmni.F b/gribex/maxmni.F
new file mode 100755
index 0000000..e9be939
--- /dev/null
+++ b/gribex/maxmni.F
@@ -0,0 +1,110 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE MAXMNI(KARRAY,KLEN,KMAX,KMIN)
+C
+C---->
+C**** MAXMNI - Get maximum and minimum values.
+C
+C     Purpose.
+C     --------
+C
+C     Get maximum and minimum values from an array of integer numbers.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL MAXMNI (KARRAY,KLEN,KMAX,KMIN)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KARRAY - Array of numbers.
+C     KLEN   - Last word of this array.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KMAX   - Maximum value.
+C     KMIN   - Minimum value.
+C
+C     Method.
+C     -------
+C
+C     Intrinsic functions MAX and MIN are used.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Comments.
+C     ---------
+C
+C     Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KARRAY, KLEN, KMAX, KMIN
+      DIMENSION KARRAY(*)
+C
+C     Local variables
+C
+      INTEGER JLOOP
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Get maximum and minimum values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Set initial values.
+C
+      KMAX = KARRAY(1)
+      KMIN = KARRAY(1)
+C
+C     Extract maximum and minimum values.
+C
+      DO 110 JLOOP = 2 , KLEN
+        KMAX = MAX(KMAX,KARRAY(JLOOP))
+        KMIN = MIN(KMIN,KARRAY(JLOOP))
+  110 CONTINUE
+C
+C     ----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/modval.F b/gribex/modval.F
new file mode 100755
index 0000000..789378d
--- /dev/null
+++ b/gribex/modval.F
@@ -0,0 +1,54 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE MODVAL   (LENIN,LENOUT,MULT)
+C
+C---->
+C*                                                                    *
+C*    NAME      : MODVAL                                              *
+C*                                                                    *
+C*    FUNCTION  : MAKES ONE VALUE A MULTIPLE OF ANOTHER.              *
+C*                                                                    *
+C*    INPUT     : LENIN = INPUT  VALUE                                *
+C*                MULT  = MODULO VALUE                                *
+C*                                                                    *
+C*    OUTPUT    : LENOUT= OUTPUT VALUE                                *
+C*                                                                    *
+C*    GENERAL   : MODVAL CALLS  MOD                                   *
+C*                              ABS                                   *
+C*                                                                    *
+C*    AUTHOR    : B.V. GURETZKY    V.E. DAY                           *
+C*                                                                    *
+C*    MODIFIED  : J. HENNESSY      25.11.85                           *
+C*                                                                    *
+C*                                                                    *
+C     ---------------------------------------------------------------
+C----<
+C
+      LENG  = ABS (MULT)
+      INTER = MOD (ABS(LENIN),LENG)
+C
+      IF (INTER.NE.0)
+     C   THEN
+             LENG = LENG - INTER
+             IF (LENIN.LT.0)
+     C           THEN
+                     LENOUT = LENIN - LENG
+                 ELSE
+                     LENOUT = LENIN + LENG
+                 ENDIF
+         ELSE
+             LENOUT = LENIN
+         ENDIF
+C
+C
+      RETURN
+      END
diff --git a/gribex/mxmncr.F b/gribex/mxmncr.F
new file mode 100755
index 0000000..86640c7
--- /dev/null
+++ b/gribex/mxmncr.F
@@ -0,0 +1,91 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE MXMN(PARR,KLEN,PMAX,PMIN)
+C
+C---->
+C**   *SUBROUTINE* *MXMN* - *FIND THE MAXIMUM AND MINIMUM ELEMENTS OF
+C                       AN ARRAY
+C
+C          *JAN *HASELER     *ECMWF*     6/10/82
+C
+C     PURPOSE
+C     -------
+C
+C          *FIND THE MAXIMUM AND MINIMUM ELEMENTS OF THE ARRAY *PARR*
+C
+C     INTERFACE
+C     ---------
+C
+C           *CALL* *MXMN(PARR,KLEN,PMAX,PMIN)*
+C
+C     WHERE *PARR(KLEN)* = INPUT ARRAY
+C           *PMAX*       = OUTPUT MAXIMUM ELEMENT OF *PARR*
+C           *PMIN*       = OUTPUT MINIMUM ELEMENT OF *PARR*
+C
+C     *MXMN* IS CALLED FROM SUBROUTINES *OUTSHC,* *OUTSHG,* *OUT2D* AND
+C     *OUTDIA*
+C
+C     RESULTS
+C     -------
+C
+C          *THE VALUES *PMAX* AND *PMIN* ARE RETURNED
+C
+C     EXTERNALS
+C     ---------
+C
+C          *ISMAX* - *CAL* FUNCTION TO FIND MAX ARRAY ELEMENT
+C          *ISMIN* - *CAL* FUNCTION TO FIND MIN ARRAY ELEMENT
+C
+C     ------------------------------------------------------------------
+C----<
+C
+      DIMENSION PARR(KLEN)
+C
+C-----------------------------------------------------------------------
+C*
+C          1.           FIND MAX AND MIN
+C                       ----------------
+C
+  100 CONTINUE
+C
+C*            1.1       SEARCH THROUGH 4096 ELEMENTS AT A TIME
+  110 CONTINUE
+      ZMIN=PARR(1)
+      ZMAX=PARR(1)
+      ID=1
+      I1=KLEN/4096
+      I2=KLEN-I1*4096
+C
+      DO 115 J=1,I1
+      IX=ISMAX(4096,PARR(ID),1)+ID-1
+      IN=ISMIN(4096,PARR(ID),1)+ID-1
+      ZMAX=AMAX1(ZMAX,PARR(IX))
+      ZMIN=AMIN1(ZMIN,PARR(IN))
+      ID=ID+4096
+  115 CONTINUE
+C
+C
+C*            1.2       REMAINING ELEMENTS
+  120 CONTINUE
+      IF (I2.GT.0) THEN
+           IX=ISMAX(I2,PARR(ID),1)+ID-1
+           IN=ISMIN(I2,PARR(ID),1)+ID-1
+           ZMAX=AMAX1(ZMAX,PARR(IX))
+           ZMIN=AMIN1(ZMIN,PARR(IN))
+      ENDIF
+C
+      PMIN=ZMIN
+      PMAX=ZMAX
+C
+      RETURN
+      END
+
diff --git a/gribex/offset.F b/gribex/offset.F
new file mode 100755
index 0000000..9c4fc36
--- /dev/null
+++ b/gribex/offset.F
@@ -0,0 +1,109 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE OFFSET  (IOFF,NVAL,IWORD,IBYTE,NBIT,ILEN,IERR)
+C
+C
+C
+C
+C
+C---->
+C*
+C*    NAME      : OFFSET
+C:
+C*    FUNCTION  : CALCULATES THE WORD AND BIT OFFSET OF THE START
+C*                OF THE NEXT BIT-FIELD IN AN ARRAY OF BINARY
+C*                DATA, FOLLOWING THE INSERTION/EXTRACTION OF ONE
+C*                OR MORE CONSECUTIVE BIT-FIELDS.
+C*
+C*    INPUT     : IOFF  - BIT OFFSET AT WHICH LAST INSERTION OR
+C*                        EXTRACTION STARTED.
+C*                NVAL  - NUMBER OF FIELDS INSERTED OR EXTRACTED IN
+C*                        LAST OPERATION.
+C*                IWORD - WORD NUMBER OF ARRAY AT WHICH LAST OPERATION
+C*                        STARTED.
+C*                IBYTE - LENGTH, IN BITS, OF LAST FIELD(S) INSERTED
+C*                        OR EXTRACTED.
+C*                NBIT  - NUMBER OF BITS IN COMPUTER WORD.
+C*                ILEN  - NUMBER OF WORDS IN ARRAY.
+C*
+C*    OUTPUT    : IOFF  - BIT OFFSET AT WHICH NEXT INSERTION OR
+C*                        EXTRACTION STARTS.
+C*                NVAL  - UNCHANGED.
+C*                IWORD - WORD NUMBER OF ARRAY AT WHICH NEXT OPERATION
+C*                        STARTS.
+C*                IBYTE - UNCHANGED.
+C*                NBIT  - UNCHANGED.
+C*                ILEN  - UNCHANGED.
+C*
+C*                IERR  - EQUAL 0 IF NO ERROR.
+C*                        EQUAL -2 IF NEXT OPERATION IS OUTSIDE ARRAY
+C*                        BOUNDS.
+C*
+C*    GENERAL   : OFFSET CALLS -----
+C*
+C*    AUTHOR    : J.HENNESSY  15.4.85
+C*
+C*    MODIFIED  : J.HENNESSY  28.11.85
+C*
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C     CLEAR ERROR INDICATOR
+C
+      IERR = 0
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C     CALCULATE NEXT WORD AND BIT POSITIONS.
+C
+      IBITL = NVAL  * IBYTE
+      INTER = IBITL / NBIT
+      IOFFS = IBITL - INTER * NBIT
+      IWORD = IWORD + INTER
+      IOFF  = IOFF  + IOFFS
+C
+      IF (IOFF.GE.NBIT)
+     C   THEN
+             IWORD = IWORD + 1
+             IOFF  = IOFF  - NBIT
+         END IF
+C
+C
+C
+C
+C
+C
+C
+C
+C     CHECK THAT NEXT WORD TO BE ACCESSED LIES WITHIN THE ARRAY BOUNDS.
+C
+      IF (IWORD.GT.ILEN)
+     C   THEN
+             IERR = -2
+             WRITE (*,9001) IWORD,ILEN
+ 9001        FORMAT (1H ,'WORD ',I8,' IS OUTSIDE ARRAY BOUNDS ',I8)
+         ENDIF
+C
+C
+      RETURN
+C
+      END
diff --git a/gribex/offset2.F b/gribex/offset2.F
new file mode 100755
index 0000000..4d8c94c
--- /dev/null
+++ b/gribex/offset2.F
@@ -0,0 +1,119 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE OFFSET2(IOFF,NLAST,IWORD,NBIT,ILEN,IERR)
+C
+C----> OFFSET2
+C 
+C     Purpose.
+C     --------
+C
+C     Calculates the word and bit offset of the start of the next
+C     bit-field in an array of binary data, following the
+C     insertion/extraction of one or more consecutive bit-fields.
+C
+C     Interface.
+C     ----------
+C
+C     CALL OFFSET2(IOFF,NLAST,IWORD,NBIT,ILEN,IERR)
+C 
+C
+C     Input Parameters.
+C     -----------------
+C
+C     IOFF  - Bit offset at which last insertion or extraction started.
+C     NLAST - Number of bits in fields inserted or extracted in 
+C             previous operation.
+C     IWORD - Word number of array at which previous operation started.
+C     NBIT  - Number of bits in computer word.
+C     ILEN  - Number of words in array.
+C
+C     Output Parameters.
+C     -----------------
+C
+C     IOFF  - Bit offset at which next insertion or extraction starts.
+C     IWORD - Word number of array at which next operation starts.
+C 
+C     IERR  - = 0 if no error.
+C             = -2 if next operation is outside array bounds.
+
+C
+C
+C     Method.
+C     -------
+C
+C     See below.
+C
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Rewrite of offset.F to speed processing.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF     September 2001
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C 
+C
+C     ---------------------------------------------------------------
+C----<
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+C
+      INTEGER IOFF,NLAST,IWORD,NBIT,ILEN,IERR
+C
+C     Clear error indicator
+C
+      IERR = 0
+C
+C     Calculate next word and bit positions.
+C
+      IOFF = IOFF + (NLAST-(NLAST/NBIT)*NBIT)
+C
+      IF( IOFF.GE.NBIT ) THEN
+        IWORD = IWORD + (NLAST/NBIT) + 1
+        IOFF  = IOFF  - NBIT
+      ELSE
+        IWORD = IWORD + (NLAST/NBIT)
+      ENDIF
+C
+C     Check that next word to be accessed lies within the array bounds.
+C
+      IF( IWORD.GT.ILEN ) THEN
+        IERR = -2
+        WRITE(GRPRSM,*) 'Word ',IWORD,' is outside array bounds ',ILEN
+      ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/orefdat.c b/gribex/orefdat.c
new file mode 100755
index 0000000..8543970
--- /dev/null
+++ b/gribex/orefdat.c
@@ -0,0 +1,74 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "fortint.h"
+
+fortint orefdat_(fortint* ksec1) {
+/*
+// Fortran-callable:
+//
+//      INTEGER OREFDAT
+//      EXTERNAL OREFDAT
+//
+//      INDEX = OREFDAT(KSEC1)
+//
+// where KSEC1 contains GRIB section 1 after unpacking by GRIBEX.
+//
+// Returns the index of the reference date in the post-auxiliary array in
+// ECMWF local definition 4 (ocean data).
+//
+// Returns -1 if
+//  -  local definition 4 is not in use, or
+//  -  the post-auxiliary array is empty, or
+//  -  the post-auxiliary array does not contain a reference date.
+*/
+fortint offset;
+
+  if( ksec1[36] != 4 )  return -1;
+
+  offset = 74 + ksec1[70] + ksec1[71] + ksec1[72] + ksec1[73];
+  if( offset == 0 ) return -1;
+
+  if( ksec1[offset] < 5 )
+    return -1;
+  else
+    return (offset+5);
+}
+
+fortint orefdat(fortint* ksec1) {
+  return orefdat_(ksec1);
+}
+
+fortint d13flag(fortint* kgrib) {
+/*
+// Fortran-callable:
+//
+//      INTEGER D13FLAG
+//      EXTERNAL D13FLAG
+//
+//      FLAG = D13FLAG(KGRIB)
+//
+// where KGRIB contains GRIB 1 before unpacking by GRIBEX.
+//
+// Returns the Flag to show inclusions in the header in ECMWF GRIB section
+// 1 local extension 13, or -1 if definition 13 is not present.
+*/
+unsigned char* p = ((unsigned char*) kgrib) + 7;
+
+  if( *(p + 41) == 13 )
+    return (fortint) *(p + 64);
+  else
+    return -1;
+}
+
+fortint d13flag_(fortint* kgrib) {
+  return d13flag(kgrib);
+}
diff --git a/gribex/packcf.F b/gribex/packcf.F
new file mode 100755
index 0000000..7bead8b
--- /dev/null
+++ b/gribex/packcf.F
@@ -0,0 +1,276 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION PACKCF( PARRAY, KTRUNC, KSUBSET, KGRIB, KLENG,
+     X                          KNSPT, KBITS)
+C
+C---->
+C**** PACKCF
+C
+C     Purpose.
+C     --------
+C
+C     Moves the unscaled values from an array of spherical harmonic
+C     coefficients, just the first "KSUBSET" triangle of coefficients.
+C
+C**   Interface.
+C     ----------
+C
+C     IRET = PACKCF(PARRAY,KTRUNC,KSUBSET,KGRIB,KLENG,KNSPT,KBITS)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PARRAY     - Array of spherical harmonic coefficients.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KSUBSET    - Number indicating truncation of subset to move.
+C     KNSPT      - Bit pointer for next free position in KGRIB.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KGRIB      - Array containing generated GRIB product.
+C     KLENG      - Length of KGRIB
+C     KNSPT      - Bit pointer for next free position in KGRIB(updated).
+C     KBITS      - Number of bits per computer word.
+C
+C     Returns 0 if OK, otherwise prints an error message and returns
+C     an error code.
+C
+C
+C     Method.
+C     -------
+C                           <KSUBSET>|
+C
+C     Given numbers:         cccccccc|cccccc
+C                              cccccc|cccccc
+C                                cccc|cccccc
+C                                  cc|cccccc
+C                                    |cccccc
+C                                       cccc
+C                                         cc
+C
+C      Converts and moves :  cccccccc
+C                              cccccc
+C                                cccc
+C                                  cc
+C
+C     Externals.
+C     ----------
+C
+C     CONFP3  - Convert floating point value to storage format
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+C     GSBITE  - Store bit pattern (Vectorized Fortran).
+#endif
+C     SBYTES  - Store bit pattern
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     KSUBSET must be less than or equal to KTRUNC.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      13:04:94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      INTEGER JPMAXT
+      PARAMETER ( JPMAXT = 2047 + 1 )
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KSUBSET, KNSPT, KGRIB, KLENG, KBITS
+C
+      REAL PARRAY
+      DIMENSION PARRAY(*), KGRIB(KLENG)
+C
+C     Local variables.
+      INTEGER JCOL, JROW, INDEX, ILAST, ITRND, IEXP, IMANT, INEXT
+      INTEGER INSPT, INEED, IWORD, IOFF
+      DIMENSION IEXP(JPMAXT*2), IMANT(JPMAXT*2)
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+C
+C     Values in IMASK are set in the first call to routine GSBITE, and
+C     are used in subsequent calls.
+C
+      INTEGER IMASK
+      DIMENSION IMASK(65)
+      SAVE IMASK
+C
+C     Force routine GSBITE to calculate bit-masks first time through.
+      DATA IMASK(2) /0/
+#endif
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Check for valid truncation and start values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Check for valid truncation and subset values
+C
+      PACKCF = 0
+      IF ( KSUBSET .GT. KTRUNC ) THEN
+        WRITE(GRPRSM,*) 'PACKCF: Invalid subset/truncation given'
+        WRITE(GRPRSM,*) 'PACKCF: KSUBSET, KTRUNC =', KSUBSET, KTRUNC
+        PACKCF = 16400
+        GOTO 900
+      ENDIF
+C
+C     Check that the GRIB area is big enough.
+      INEED = ( KNSPT + (KSUBSET+1)*(KSUBSET+2)*32 ) / KBITS
+      IF (INEED.GT.KLENG) THEN
+        PACKCF = 16401
+        WRITE(GRPRSM,*) 'PACKCF: GRIB area is not big enough.'
+        GOTO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C*    Section 2. Convert values to IBM format exponent and mantissa.
+C                Handle values 2 at a time (real and imaginary parts)
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      ITRND = 1
+      ILAST = KSUBSET+1
+      INDEX = -1
+C
+C     Loop through rows in the subset
+      DO 490 JROW = 1 , ILAST
+C
+C       Pick up columns in subset
+        INEXT = 0
+        DO 210 JCOL = JROW , KTRUNC+1
+          INDEX = INDEX + 2
+          IF ( ILAST .GE. JCOL ) THEN
+C
+C           Convert floating point nos. to GRIB and insert fields.
+C           Real part ..
+            INEXT = INEXT + 1
+            CALL CONFP3( PARRAY(INDEX), IEXP(INEXT), IMANT(INEXT),
+     X                   KBITS, ITRND)
+C
+C           Imaginary part ..
+            INEXT = INEXT + 1
+            CALL CONFP3( PARRAY(INDEX+1), IEXP(INEXT), IMANT(INEXT),
+     X                   KBITS, ITRND)
+          ENDIF
+  210   CONTINUE
+C
+C     ----------------------------------------------------------------
+C*    Section 3. Move exponents into bit array.
+C     ----------------------------------------------------------------
+C
+  300   CONTINUE
+C
+C*      Calculate word pointer and offset.
+        INSPT = KNSPT
+        IWORD = INSPT / KBITS
+        IOFF  = INSPT - IWORD * KBITS
+        IWORD = IWORD + 1
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+        IF (INEXT.GE.8) THEN
+C
+C         Vectorising routine GSBITE.
+          CALL GSBITE( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT, KBITS,
+     X                 IMASK, 'C')
+        ELSE
+C
+C         Scalar faster.
+          CALL SBYTES( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT)
+        ENDIF
+#elif (defined CYBER)
+        CALL SBYTES6( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT)
+#else
+        CALL SBYTES( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT)
+#endif
+C
+C     ----------------------------------------------------------------
+C*    Section 4. Move mantissae into bit array.
+C     ----------------------------------------------------------------
+C
+  400   CONTINUE
+C
+C*      Calculate word pointer and offset.
+        INSPT = KNSPT + 8
+        IWORD = INSPT / KBITS
+        IOFF  = INSPT - IWORD * KBITS
+        IWORD = IWORD + 1
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+        IF (INEXT.GE.8) THEN
+C
+C         Vectorising routine GSBITE.
+          CALL GSBITE( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT, KBITS,
+     X                 IMASK, 'C')
+        ELSE
+C
+C         Scalar faster.
+          CALL SBYTES( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT)
+        ENDIF
+#elif (defined CYBER)
+        CALL SBYTES6( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT)
+#else
+        CALL SBYTES( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT)
+#endif
+C
+C       Update the bit pointer
+        KNSPT = KNSPT +  32 * INEXT
+C
+  490 Continue
+C     End of loop through rows of the subset
+C
+C
+C     ----------------------------------------------------------------
+C*    Section 5. Update pointer.
+C     ----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C     ----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/parval.F b/gribex/parval.F
new file mode 100755
index 0000000..cdd4927
--- /dev/null
+++ b/gribex/parval.F
@@ -0,0 +1,331 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE PARVAL (KCSP,KNSP,HLINE,HPAR,KLPAR,HVAL,KLVAL)
+C
+C---->
+C**** PARVAL - Extract next parameter and value pair.
+C
+C     Purpose.
+C     --------
+C
+C         Get next parameter and value from line.
+C
+C**   Interface.
+C     ----------
+C
+C         CALL PARVAL (KCSP,KNSP,HLINE,HPAR,KLPAR,HVAL,KLVAL)
+C
+C         INTEGER     K.
+C         REAL        P.
+C         LOGICAL     O.
+C         CHARACTER   H.
+C
+C             Input Parameters.
+C             -----------------
+C
+C                KCSP  = Current search start position
+C                HLINE = Line being examined
+C
+C             Output Parameters.
+C             -----------------
+C
+C                KNSP   = Next search position (for next call)
+C                         It is set to zero if the last set of
+C                         PARAMETER=VALUE pairs is found, and
+C                         to -1 if further parameters and values
+C                         are to be read from a continuation line.
+C
+C                KLPAR  = Length of parameter string
+C
+C                HPAR   = Parameter
+C
+C                KLVAL  = Length of value string
+C
+C                HVAL   = Value
+C
+C     Method.
+C     -------
+C
+C          The separators / , = and " are found to identify
+C          the parameters and values.
+C
+C     Externals.
+C     ----------
+C
+C          RTB
+C          REMSP
+C          DELSP
+C          REPCHR
+C
+C     Reference.
+C     ----------
+C
+C          MARS User Guide for information on parameters and
+C          value pairs.
+C
+C     Comments.
+C     ---------
+C
+C          Routine contains sections 0-4 and section 9.
+C
+C     Author.
+C     -------
+C
+C          J. Hennessy 16.04.85
+C
+C     Modifications.
+C     --------------
+C
+C          J. Hennessy 08.04.86
+C
+C                "     15.09.86
+C
+C          J. Hennessy 03.07.90
+C          Character variable HVAL made to agree in length with
+C          that in calling routine.
+C
+C          J. Hennessy 23.11.90
+C          Allow COMMENT values to include commas.
+C
+C          J. Hennessy 18.02.91
+C          Adjust YLINE length to match HLINE. Allow for / in error
+C          at start of list of parameters.
+C
+C          J. Hennessy 15.10.92
+C          Check on input string length added.
+C
+C----<
+C     ---------------------------------------------------------------
+C
+C
+C*    Section 0 . Definition of variables.
+C     ---------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      PARAMETER (JPMAX=960)
+C
+      INTEGER RTB
+C
+      CHARACTER*(*) HLINE
+      CHARACTER*8   HPAR
+      CHARACTER*(*) HVAL
+      CHARACTER*(JPMAX) YLINE
+C
+C     ---------------------------------------------------------------
+C
+C
+C*    Section 1 . Set initial values.
+C     ---------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+C     Check length of input string.
+C
+      ILEN = LEN (HLINE)
+      IF (ILEN.GT.JPMAX)
+     C   THEN
+             WRITE (*,9001) ILEN , JPMAX
+             CALL ABORTX ('PARVAL')
+         ENDIF
+C
+C     Set parameter and value to 'space' and their lengths to 0.
+C
+      HPAR  = ' '
+      HVAL  = ' '
+      KLPAR = 0
+      KLVAL = 0
+C
+C
+C
+C*    Section 2 . Handle request from HELP facility.
+C     ---------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+C     First check if help is being requested by use of ?.
+C
+      IF (HLINE(KCSP:KCSP).EQ.'?')
+     C     THEN
+               HPAR  = '?'
+               KLPAR = 1
+               KNSP  = KCSP + 1
+	       GO TO 9000
+           ENDIF
+C
+C*     Go to section 9.
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C*    Section 3 . Tidy up input format a little.
+C     ---------------------------------------------------------------
+C
+ 3000 CONTINUE
+C
+C     Change any ' characters to " characters.
+C
+c--      CALL REPCHR (HLINE,'''','"')
+C
+C     Remove any spaces before or after / separators.
+C
+c--      CALL DELSP (HLINE)
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C*    Section 4 . Extract next parameter and its value.
+C     ---------------------------------------------------------------
+C
+ 4000 CONTINUE
+C
+C     Look for next '=' and ',' in line. Examine
+C     the last character in the line. If this is a ',' a
+C     continuation line will follow. Otherwise the last
+C     PARAMETER=VALUE pair for the current command has been
+C     read.
+C
+      II = INDEX (HLINE(KCSP:),'=')
+      IJ = INDEX (HLINE(KCSP:),',')
+      IK = RTB(HLINE)
+      KNSP = 0
+      IF (HLINE(IK:IK).EQ.',') KNSP = -1
+C
+      IF (II.EQ.0.AND.IJ.EQ.0)
+C
+C*    No = or , found. Go to section 9.
+C
+     C    THEN
+C
+C             Check that no entry with missing = has been made.
+C             Set parameter and value to unrecognised string,
+C
+              IF (IK.GT.KCSP)
+     C        THEN
+                  HPAR = HLINE(KCSP:IK)
+                  CALL REMSP (HPAR)
+                  IF (HPAR(1:1).NE.' ')
+     C                      THEN
+                                HPAR = HLINE(KCSP:IK)
+                                KLPAR = IK - KCSP + 1
+                                HVAL = HLINE(KCSP:IK)
+                                KLVAL = IK - KCSP + 1
+                                KNSP = IK + 1
+                            ENDIF
+              ENDIF
+C
+              GO TO 9000
+          ENDIF
+C
+      IF (II.EQ.0.AND.IJ.NE.0)
+C
+C*    , found but no = found. Check that no erroneous entry
+C     has been made. Go to section 9.
+C
+     C     THEN
+C
+C              Check that no erroneous entry with missing =
+C              exists.
+C
+               HPAR = HLINE(KCSP:KCSP+IJ-2)
+               CALL REMSP (HPAR)
+               IF (HPAR(1:1).NE.' ')
+     C             THEN
+                       KLPAR = RTB(HPAR)
+                       HVAL = HPAR
+                       KLVAL = KLPAR
+                       KNSP = KCSP + IJ- 1
+                   ENDIF
+               GO TO 9000
+           ENDIF
+C
+C     Extract parameter entry and its length.
+C
+      KLPAR = II - 1
+      HPAR = HLINE(KCSP:KCSP+KLPAR-1)
+C
+C     Remove any leading/trailing spaces.
+C
+      IF (HPAR(1:1).EQ.' ') THEN
+                               CALL REMSP(HPAR)
+                               KLPAR = RTB (HPAR)
+                           ENDIF
+C
+C     Find end of value entry. This can be a comma, space or
+C     a full stop.
+C     If none is found the remaining characters are taken as
+C     the value, and treated as the last entry for this command.
+C
+      KCSP = KCSP + II
+C
+C     Remove any spaces between = and value.
+C     Remove any / put at the start of a list of values.
+C
+      YLINE(1:) = HLINE(KCSP:)
+      IF (YLINE(1:1).EQ.'/') YLINE(1:1) = ' '
+      CALL REMSP (YLINE)
+      HLINE (KCSP:) = YLINE
+C
+      II = INDEX(HLINE(KCSP:),',')
+C
+C     If the value is a character string it may contain a ",".
+C     Currently only the COMMENT parameter in a CREATE command
+C     can validly have an embedded , .
+C
+      CALL L2U1CR (HPAR)
+      IF (HLINE(KCSP:KCSP).EQ.'"'.AND.HPAR(1:7).EQ.'COMMENT')
+     C   THEN
+	     ISTR = INDEX(HLINE(KCSP+1:),'"')
+	     IF (ISTR.GE.II) II = ISTR + 2
+         ENDIF
+C
+C     Extract value entry and length
+C
+      IF (II.EQ.0)
+     C    THEN
+              II = RTB (HLINE)
+              IF (HLINE(II:II).EQ.'.') II = II - 1
+              KLVAL = II - KCSP + 1
+          ELSE
+              KLVAL = II - 1
+          ENDIF
+C
+C     Handle missing value (eg date=, entered) where length is 0.
+C
+      KNSP = KCSP + KLVAL + 1
+C
+      IF (KLVAL.GT.0)
+     C   THEN
+             HVAL = HLINE(KCSP:KCSP+KLVAL-1)
+         ELSE
+             HVAL = ' '
+             KLVAL = 1
+         ENDIF
+C
+C     ---------------------------------------------------------------
+C
+C
+C
+C*    Section 9. Return to calling routine.
+C     ---------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+ 9001 FORMAT (1H ,'PARVAL : String length is ',I3,'. Maximum',
+     C            ' allowed is ',I3,'.')
+      RETURN
+C
+      END
diff --git a/gribex/prtbin.F b/gribex/prtbin.F
new file mode 100755
index 0000000..8d98b14
--- /dev/null
+++ b/gribex/prtbin.F
@@ -0,0 +1,196 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE PRTBIN (KIN,KNBIT,KOUT,KERR)
+C
+C---->
+C**** PRTBIN - Binary to decimal conversion.
+C
+C     Purpose.
+C     --------
+C
+C           Produces a decimal number with ones and zeroes
+C           corresponding to the ones and zeroes of the input
+C           binary number.
+C           eg input number 1011 binary, output number 1011 decimal.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL PRTBIN (KIN,KNBIT,KOUT,KERR)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KIN   - Integer variable containing binary number.
+C
+C               KNBIT - Number of bits in binary number.
+C
+C               Output Parameters.
+C               -----------------
+C
+C               KOUT  - Integer variable containing decimal value
+C                       with ones and zeroes corresponding to those of
+C                       the input binary number.
+C
+C               KERR  - 0, If no error.
+C                       1, Number of bits in binary number exceeds
+C                          maximum allowed or is less than 1.
+C
+C     Method.
+C     -------
+C
+C           Odd numbers have a binary representation ending in 1, even
+C           numbers end in 0.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Replaces earlier routine of the same name, which
+C           contained non-ANSI code.
+C           Routine contains sections 0, 1 and section 9.
+C
+C     Author.
+C     -------
+C
+C           John Hennessy     ECMWF    01.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           None.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0. Definition of variables. Check on parameters.
+C     -----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER IDEC
+      INTEGER IK
+      INTEGER ITEMP
+C
+      INTEGER J102
+C
+      INTEGER KERR
+      INTEGER KIN
+      INTEGER KNBIT
+      INTEGER KOUT
+C
+C     Check length of binary number to ensure decimal number
+C     generated will fit in the computer word - in this case will
+C     it fit in a Cray 48 bit integer?
+C
+      IF (KNBIT.LT.1.OR.KNBIT.GT.14)
+     C   THEN
+             KERR = 1
+	     WRITE(GRPRSM,9000) KNBIT
+             GO TO 900
+         ELSE
+             KERR = 0
+         ENDIF
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1. Generate required number.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      KOUT = 0
+      IK   = KIN
+      IDEC = 1
+C
+      DO 102 J102=1,KNBIT
+         ITEMP = IK - ( (IK/2)*2 )
+	 KOUT  = KOUT + ITEMP * IDEC
+	 IK    = IK / 2
+	 IDEC  = IDEC * 10
+  102 CONTINUE
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9. Format statements. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9000 FORMAT (1H ,'PRTBIN : Error in binary number length - ',I3,
+     C            ' bits.')
+C
+      RETURN
+      END
diff --git a/gribex/prtbk1.F b/gribex/prtbk1.F
new file mode 100755
index 0000000..3780f97
--- /dev/null
+++ b/gribex/prtbk1.F
@@ -0,0 +1,86 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE PRTBK1 (IB1PAR)
+C
+C---->
+C
+C     NAME      : PRTBK1
+C
+C     FUNCTION  : PRINT THE INFORMATION IN THE PRODUCT DEFINITION
+C                 BLOCK (BLOCK 1) OF DECODED GRIB DATA.
+C
+C     INPUT     : IB1PAR - ARRAY OF DECODED PARAMETERS FROM BLOCK 1.
+C
+C     OUTPUT    : FLAG FIELDS ARE PRINTED IN BINARY REPRESENTATION.
+C                 OTHER FIELDS AS INTEGERS.
+C
+C     JOHN HENNESSY  ECMWF OCTOBER 1985
+C
+C      Modifications.
+C      --------------
+C            J. Hennessy   ECMWF 23:11:90
+C            Printed output changed from all upper-case.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+      IMPLICIT INTEGER (A-Z)
+C
+      DIMENSION IB1PAR(*)
+C
+      WRITE (*,'(1H )')
+      WRITE (*,9000)
+ 9000 FORMAT (1H ,'Section 1 - Product definition section.')
+C
+      WRITE (*,'(1H )')
+      WRITE (*,9001) IB1PAR(1)
+ 9001 FORMAT (1H ,'Originating centre identifier.       ',I9)
+      WRITE (*,9002) IB1PAR(2)
+ 9002 FORMAT (1H ,'Model identification.                ',I9)
+      WRITE (*,9003) IB1PAR(3)
+ 9003 FORMAT (1H ,'Grid definition.                     ',I9)
+      NBIT = 8
+      CALL PRTBIN (IB1PAR(4),NBIT,OUT,ERR)
+      WRITE (*,9004) OUT
+ 9004 FORMAT (1H ,'Flag (Code Table 1)                   ',I8.8)
+      WRITE (*,9005) IB1PAR(5)
+ 9005 FORMAT (1H ,'Parameter identifier (Code Table 2). ',I9)
+      WRITE (*,9006) IB1PAR(6)
+ 9006 FORMAT (1H ,'Type of level (Code Table 3).        ',I9)
+      WRITE (*,9007) IB1PAR(7)
+ 9007 FORMAT (1H ,'Value 1 of level (Code Table 3).     ',I9)
+      WRITE (*,9008) IB1PAR(8)
+ 9008 FORMAT (1H ,'Value 2 of level (Code Table 3).     ',I9)
+      WRITE (*,9009) IB1PAR(9)
+ 9009 FORMAT (1H ,'Year of reference time of data.      ',I9)
+      WRITE (*,9010) IB1PAR(10)
+ 9010 FORMAT (1H ,'Month of reference time of data.     ',I9)
+      WRITE (*,9011) IB1PAR(11)
+ 9011 FORMAT (1H ,'Day of reference time of data.       ',I9)
+      WRITE (*,9012) IB1PAR(12)
+ 9012 FORMAT (1H ,'Hour of reference time of data.      ',I9)
+      WRITE (*,9013) IB1PAR(13)
+ 9013 FORMAT (1H ,'Minute of reference time of data.    ',I9)
+      WRITE (*,9014) IB1PAR(14)
+ 9014 FORMAT (1H ,'Time unit (Code Table 4).            ',I9)
+      WRITE (*,9015) IB1PAR(15)
+ 9015 FORMAT (1H ,'Time range one.                      ',I9)
+      WRITE (*,9016) IB1PAR(16)
+ 9016 FORMAT (1H ,'Time range two.                      ',I9)
+      WRITE (*,9017) IB1PAR(17)
+ 9017 FORMAT (1H ,'Time range indicator (Code Table 5)  ',I9)
+      WRITE (*,9018) IB1PAR(18)
+ 9018 FORMAT (1H ,'Number averaged.                     ',I9)
+C
+      RETURN
+C
+      END
diff --git a/gribex/prtbk2.F b/gribex/prtbk2.F
new file mode 100755
index 0000000..ba623c9
--- /dev/null
+++ b/gribex/prtbk2.F
@@ -0,0 +1,121 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE PRTBK2 (IB2PAR)
+C
+C---->
+C
+C     NAME      : PRTBK2
+C
+C     FUNCTION  : PRINT THE INFORMATION IN THE GRDI DEFINITION
+C                 BLOCK (BLOCK 2) OF DECODED GRIB DATA.
+C
+C     INPUT     : IB2PAR - ARRAY OF DECODED PARAMETERS FROM BLOCK 2.
+C
+C     OUTPUT    : FLAG FIELDS ARE PRINTED IN BINARY REPRESENTATION.
+C                 OTHER FIELDS AS INTEGERS.
+C
+C     JOHN HENNESSY  ECMWF OCTOBER 1985
+C
+C     Modifications.
+C     --------------
+C
+C         J. Hennessy   ECMWF  23:11:90
+C         Output changed from all upper-case.
+C
+C     ---------------------------------------------------------------
+C----<
+C
+      IMPLICIT INTEGER (A-Z)
+C
+      DIMENSION IB2PAR(*)
+C
+      WRITE (*,'(1H )')
+      WRITE (*,9000)
+ 9000 FORMAT (1H ,'Section 2 - Grid definition section.')
+C
+      WRITE (*,'(1H )')
+      WRITE (*,9001) IB2PAR(1)
+ 9001 FORMAT (1H ,'Data representation type (Table 6)   ',I9)
+C
+C     SPHERICAL HARMONIC DATA
+C
+      IF (IB2PAR(1).EQ.50)
+     C   THEN
+C
+             WRITE (*,9002) IB2PAR(2)
+ 9002        FORMAT (1H ,'J - Pentagonal resolution parameter. ',I9)
+             WRITE (*,9003) IB2PAR(3)
+ 9003        FORMAT (1H ,'K - Pentagonal resolution parameter. ',I9)
+             WRITE (*,9004) IB2PAR(4)
+ 9004        FORMAT (1H ,'M - Pentagonal resolution parameter. ',I9)
+             WRITE (*,9005) IB2PAR(5)
+ 9005        FORMAT (1H ,'Representation type (Table 9)        ',I9)
+             WRITE (*,9006) IB2PAR(6)
+ 9006        FORMAT (1H ,'Representation mode (Table 10).      ',I9)
+             WRITE (*,9007) (IB2PAR(I),I=7,11)
+ 9007        FORMAT (1H ,'Not used.                            ',I9)
+C
+             RETURN
+C
+         ENDIF
+C
+C     GAUSSIAN AND REGULAR LATITUDE / LONGITUDE GRIDS.
+C
+      IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C   THEN
+C
+             WRITE (*,9102) IB2PAR(2)
+ 9102        FORMAT (1H ,'No. of points along a latitude.      ',I9)
+             WRITE (*,9103) IB2PAR(3)
+ 9103        FORMAT (1H ,'No. of points along a meridian.      ',I9)
+             WRITE (*,9104) IB2PAR(4)
+ 9104        FORMAT (1H ,'Latitude of origin.                  ',I9)
+	     WRITE (*,9200)
+ 9200        FORMAT (1H ,'(Southern latitudes are negative.)')
+             WRITE (*,9105) IB2PAR(5)
+ 9105        FORMAT (1H ,'Longitude of origin.                 ',I9)
+	     WRITE (*,9201)
+ 9201        FORMAT (1H ,'(Western longitudes are negative.)')
+             NBIT = 8
+             CALL PRTBIN (IB2PAR(6),NBIT,OUT,ERR)
+             WRITE (*,9106) OUT
+ 9106        FORMAT (1H ,'Resolution flag.                      ',I8.8)
+             WRITE (*,9107) IB2PAR(7)
+ 9107        FORMAT (1H ,'Latitude of extreme point.           ',I9)
+	     WRITE (*,9200)
+             WRITE (*,9108) IB2PAR(8)
+ 9108        FORMAT (1H ,'Longitude of extreme point.          ',I9)
+	     WRITE (*,9201)
+             WRITE (*,9109) IB2PAR(9)
+ 9109        FORMAT (1H ,'East-West increment.                 ',I9)
+             IF (IB2PAR(1).EQ.0)
+     C          THEN
+                    WRITE (*,9110) IB2PAR(10)
+ 9110               FORMAT (1H ,'North-South increment.               ',
+     C                         I9)
+                ENDIF
+             IF (IB2PAR(1).EQ.4)
+     C          THEN
+                    WRITE (*,8110) IB2PAR(10)
+ 8110               FORMAT(1H ,'No. of latitude lines pole / equator.',
+     C                         I9)
+                ENDIF
+             NBIT = 8
+             CALL PRTBIN (IB2PAR(11),NBIT,OUT,ERR)
+             WRITE (*,9111) OUT
+ 9111        FORMAT (1H ,'Scanning mode flags (Code Table 8)    ',I8.8)
+C
+             RETURN
+C
+         ENDIF
+C
+      END
diff --git a/gribex/prtbl1.F b/gribex/prtbl1.F
new file mode 100755
index 0000000..9644a54
--- /dev/null
+++ b/gribex/prtbl1.F
@@ -0,0 +1,72 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE PRTBL1 (IB1PAR)
+C
+C---->
+C**************************************************************
+C*
+C*    NAME      : PRTBL1
+C*
+C*    FUNCTION  : PRINT THE INFORMATION IN THE PRODUCT DEFINITION
+C*                BLOCK (BLOCK 1) OF DECODED GRIB DATA.
+C*
+C*    INPUT     : IB1PAR - ARRAY OF DECODED PARAMETERS FROM BLOCK 1.
+C*
+C*    JOHN HENNESSY  ECMWF 28 MAY 1985
+C*
+C*
+C**************************************************************
+C----<
+C
+      DIMENSION IB1PAR(*)
+C
+      WRITE (*,9000)
+ 9000 FORMAT (1H0,'BLOCK 1 - PRODUCT DEFINITION BLOCK',/)
+C
+      WRITE (*,9001) IB1PAR(1)
+ 9001 FORMAT (1H0,'ORIGINATING CENTRE IDENTIFIER.       ',I9)
+      WRITE (*,9002) IB1PAR(2)
+ 9002 FORMAT (1H ,'MODEL IDENTIFICATION.                ',I9)
+      WRITE (*,9003) IB1PAR(3)
+ 9003 FORMAT (1H ,'GRID DEFINITION.                     ',I9)
+      WRITE (*,9004) IB1PAR(4)
+ 9004 FORMAT (1H ,'FLAG (CODE TABLE 1)                  ',I9)
+      WRITE (*,9005) IB1PAR(5)
+ 9005 FORMAT (1H ,'PARAMETER IDENTIFIER (CODE TABLE 2). ',I9)
+      WRITE (*,9006) IB1PAR(6)
+ 9006 FORMAT (1H ,'TYPE OF LEVEL (CODE TABLE 3).        ',I9)
+      WRITE (*,9007) IB1PAR(7)
+ 9007 FORMAT (1H ,'VALUE 1 OF LEVEL (CODE TABLE 3).     ',I9)
+      WRITE (*,9008) IB1PAR(8)
+ 9008 FORMAT (1H ,'VALUE 2 OF LEVEL (CODE TABLE 3).     ',I9)
+      WRITE (*,9009) IB1PAR(9)
+ 9009 FORMAT (1H ,'YEAR OF DATA.                        ',I9)
+      WRITE (*,9010) IB1PAR(10)
+ 9010 FORMAT (1H ,'MONTH OF DATA.                       ',I9)
+      WRITE (*,9011) IB1PAR(11)
+ 9011 FORMAT (1H ,'DAY OF DATA.                         ',I9)
+      WRITE (*,9012) IB1PAR(12)
+ 9012 FORMAT (1H ,'HOUR OF DATA.                        ',I9)
+      WRITE (*,9013) IB1PAR(13)
+ 9013 FORMAT (1H ,'MINUTE OF DATA.                      ',I9)
+      WRITE (*,9014) IB1PAR(14)
+ 9014 FORMAT (1H ,'TIME UNIT (CODE TABLE 4).            ',I9)
+      WRITE (*,9015) IB1PAR(15)
+ 9015 FORMAT (1H ,'TIME RANGE ONE.                      ',I9)
+      WRITE (*,9016) IB1PAR(16)
+ 9016 FORMAT (1H ,'TIME RANGE TWO.                      ',I9)
+      WRITE (*,9017) IB1PAR(17)
+ 9017 FORMAT (1H ,'TIME RANGE FLAG (CODE TABLE 5).      ',I9)
+C
+      RETURN
+C
+      END
diff --git a/gribex/prtbl2.F b/gribex/prtbl2.F
new file mode 100755
index 0000000..7090210
--- /dev/null
+++ b/gribex/prtbl2.F
@@ -0,0 +1,97 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE PRTBL2 (IB2PAR)
+C
+C---->
+C*
+C*    NAME      : PRTBL2
+C*
+C*    FUNCTION  : PRINT THE INFORMATION IN THE GRDI DEFINITION
+C*                BLOCK (BLOCK 2) OF DECODED GRIB DATA.
+C*
+C*    INPUT     : IB2PAR - ARRAY OF DECODED PARAMETERS FROM BLOCK 2.
+C*
+C*    JOHN HENNESSY  ECMWF 28 MAY 1985
+C*
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+      DIMENSION IB2PAR(*)
+C
+      WRITE (*,9000)
+ 9000 FORMAT (1H0,'BLOCK 2 - GRID DEFINITION BLOCK',/)
+C
+      WRITE (*,9001) IB2PAR(1)
+ 9001 FORMAT (1H0,'DATA REPRESENTATION TYPE (TABLE 6)   ',I9)
+C
+C     SPHERICAL HARMONIC DATA
+C
+      IF (IB2PAR(1).EQ.50)
+     C   THEN
+C
+             WRITE (*,9002) IB2PAR(2)
+ 9002        FORMAT (1H ,'J - PENTAGONAL RESOLUTION PARAMETER. ',I9)
+             WRITE (*,9003) IB2PAR(3)
+ 9003        FORMAT (1H ,'K - PENTAGONAL RESOLUTION PARAMETER. ',I9)
+             WRITE (*,9004) IB2PAR(4)
+ 9004        FORMAT (1H ,'M - PENTAGONAL RESOLUTION PARAMETER. ',I9)
+             WRITE (*,9005) IB2PAR(5)
+ 9005        FORMAT (1H ,'REPRESENTATION TYPE (TABLE 9)        ',I9)
+             WRITE (*,9006) IB2PAR(6)
+ 9006        FORMAT (1H ,'REPRESENTATION MODE (TABLE 10).      ',I9)
+C
+             RETURN
+C
+         ENDIF
+C
+C     GAUSSIAN AND REGULAR LATITUDE / LONGITUDE GRIDS.
+C
+      IF (IB2PAR(1).EQ.0.OR.IB2PAR(1).EQ.4)
+     C   THEN
+C
+             WRITE (*,9102) IB2PAR(2)
+ 9102        FORMAT (1H ,'NO. OF POINTS ALONG A LATITUDE.      ',I9)
+             WRITE (*,9103) IB2PAR(3)
+ 9103        FORMAT (1H ,'NO. OF POINTS ALONG A MERIDIAN.      ',I9)
+             WRITE (*,9104) IB2PAR(4)
+ 9104        FORMAT (1H ,'LATITUDE OF ORIGIN (SOUTH -IVE)      ',I9)
+             WRITE (*,9105) IB2PAR(5)
+ 9105        FORMAT (1H ,'LONGITUDE OF ORIGIN (WEST -IVE)      ',I9)
+             WRITE (*,9106) IB2PAR(6)
+ 9106        FORMAT (1H ,'EXTREME POINT / INCREMENTS FLAG.     ',I9)
+             WRITE (*,9107) IB2PAR(7)
+ 9107        FORMAT (1H ,'LATITUDE OF EXTREME POINT(SOUTH -IVE)',I9)
+             WRITE (*,9108) IB2PAR(8)
+ 9108        FORMAT (1H ,'LONGITUDE OF EXTREME POINT(WEST -IVE)',I9)
+             WRITE (*,9109) IB2PAR(9)
+ 9109        FORMAT (1H ,'LATITUDE INCREMENT.                  ',I9)
+             IF (IB2PAR(1).EQ.0)
+     C          THEN
+                    WRITE (*,9110) IB2PAR(10)
+ 9110               FORMAT(1H ,'LONGITUDE INCREMENT.                 ',
+     C                         I9)
+                ENDIF
+             IF (IB2PAR(1).EQ.4)
+     C          THEN
+                    WRITE (*,8110) IB2PAR(10)
+ 8110               FORMAT(1H ,'NO. OF LATITUDE LINES POLE / EQUATOR.',
+     C                         I9)
+                ENDIF
+             WRITE (*,9111) IB2PAR(11)
+ 9111        FORMAT (1H ,'SCANNING MODE (CODE TABLE 8).        ',I9)
+C
+             RETURN
+C
+         ENDIF
+C
+      END
diff --git a/gribex/ptquasi.F b/gribex/ptquasi.F
new file mode 100755
index 0000000..b864dfa
--- /dev/null
+++ b/gribex/ptquasi.F
@@ -0,0 +1,167 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE PTQUASI (KSEC2)
+C
+C---->
+C**** PTQUASI
+C
+C     Purpose.
+C     --------
+C
+C     Print the qusai-regular information in the Grid Description
+C     Section (Section 2) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL PTQUASI (KSEC2)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KSEC2 - Array of decoded integers from Section 2.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     None.
+C
+C
+C     Method.
+C     -------
+C
+C     See below.
+C
+C
+C     Externals.
+C     ----------
+C
+C     PRTBIN
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes re GRIB Code.
+C
+C
+C     Comments.
+C     ---------
+C
+C     Only data representation types catered for are Gaussian
+C     grid, latitude/longitude grid, Spherical Harmonics,
+C     Polar stereographic and Space view perspective.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers   ECMWF 21.02.95
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+      INTEGER KSEC2
+      DIMENSION KSEC2(*)
+C
+C     Local variables
+      CHARACTER*12 YOUT
+C
+      INTEGER NEXTLAT, NREPEAT, LATCNT
+      INTEGER J120
+C
+      LOGICAL NTOS
+C
+C     -----------------------------------------------------------------
+C*    Section 1. Print quasi-grid data.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     See if scanning is north->south or south->north
+C
+      WRITE(GRPRSM,*) ' Number of points along a parallel varies.'
+      NTOS = ( MOD(KSEC2(11),128) .LT. 64 )
+      IF ( NTOS ) THEN
+        WRITE(GRPRSM,*)
+     X    ' Number of points.   Parallel. (North to South)'
+      ELSE
+        WRITE(GRPRSM,*)
+     X    ' Number of points.   Parallel. (South to North)'
+      ENDIF
+C
+C     Display number of points for each latitude
+      LATCNT  = KSEC2(3)
+      NEXTLAT = 0
+      YOUT    = ' '
+C
+      DO 120 J120 = 1,LATCNT
+	NEXTLAT = NEXTLAT + 1
+	WRITE (YOUT(1:4),'(I4)') NEXTLAT
+C
+C       Finished?
+	IF (NEXTLAT.GT.LATCNT) GO TO 900
+	IF (NEXTLAT.EQ.LATCNT) THEN
+          WRITE(GRPRSM,9005) KSEC2(NEXTLAT+22) , YOUT
+	  GO TO 900
+        ENDIF
+C
+C       Look for neighbouring latitudes with same number of points
+C
+        NREPEAT = 0
+  110   CONTINUE
+C
+C       If neighbouring latitudes have same number of points
+C       increase the repeat count.
+        IF (KSEC2(NEXTLAT+22+1).EQ.KSEC2(NEXTLAT+22)) THEN
+          NREPEAT = NREPEAT + 1
+          NEXTLAT = NEXTLAT + 1
+	  IF (NEXTLAT.LT.LATCNT) GO TO 110
+        ENDIF
+C
+C       Display neighbouring latitudes with same number of points as
+C       'nn to mm'.
+        IF (NREPEAT.GE.1) THEN
+          YOUT(5:) = ' to '
+	  WRITE (YOUT(9:12),'(I4)') NEXTLAT
+        ENDIF
+        WRITE(GRPRSM,9005) KSEC2(NEXTLAT+22) , YOUT
+        YOUT = ' '
+C
+  120 CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9005 FORMAT (1H , I5,16X,A12)
+C
+      END
diff --git a/gribex/qu2reg.F b/gribex/qu2reg.F
new file mode 100755
index 0000000..f7f7e30
--- /dev/null
+++ b/gribex/qu2reg.F
@@ -0,0 +1,331 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE QU2REG (PFIELD,KPOINT,KLAT,KLON,KCODE)
+C
+C---->
+C**** QU2REG - Convert quasi-regular grid data to regular.
+C
+C     Purpose.
+C     --------
+C
+C           Convert quasi-regular grid data to regular,
+C           using either a linear or cubic interpolation.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL QU2REG (PFIELD,KPOINT,KLAT,KLON,KCODE)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               PFIELD     - Array containing quasi-regular grid
+C                            data.
+C
+C               KPOINT     - Array containing list of the number of
+C                            points on each latitude (or longitude) of
+C                            the quasi-regular grid.
+C
+C               KLAT       - Number of latitude lines
+C
+C               KLON       - Number of longitude lines
+C
+C               KCODE      - Interpolation required.
+C                            1 , linear - data quasi-regular on
+C                                         latitude lines.
+C                            3 , cubic - data quasi-regular on
+C                                         latitude lines.
+C                            11, linear - data quasi-regular on
+C                                         longitude lines.
+C                            13, cubic - data quasi-regular on
+C                                         longitude lines.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               PFIELD     - Array containing regular grid data.
+C
+C     Method.
+C     -------
+C
+C           Data is interpolated and expanded into a temporary array,
+C           which is then copied back into the user's array.
+C           Routine aborts if an invalid interpolation is requested or
+C           field size exceeds array dimensions.
+C
+C     Externals.
+C     ----------
+C
+C           ROWINA
+C           ABORTX
+C
+C     Reference.
+C     ----------
+C
+C           WMO Manual on Codes for GRIB code specifications of
+C           quasi-regular grids.
+C
+C     Comments.
+C     ---------
+C
+C           This routine is an adaptation of INTPGRR and runs
+C           on the Cray only.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      18.06.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      08.10.91
+C           Call to ROWINT changed to call to ROWINA.
+C           ROWINA called if only number of values required is not
+C           the same as the input number.
+C
+C           J. Hennessy      ECMWF      07.01.92
+C           Call to ABORT changed to ABORTX.
+C
+C     -----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0. Definition of variables. Data statements.
+C     -----------------------------------------------------------------
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+#ifdef CRAY
+
+      IMPLICIT NONE
+#endif
+
+C
+      INTEGER ICODE
+      INTEGER ILII
+      INTEGER ILIO
+      INTEGER IQUANO
+      INTEGER IREGNO
+C
+      INTEGER JPMAX
+C
+      INTEGER J210
+      INTEGER J220
+      INTEGER J225
+      INTEGER J230
+      INTEGER J240
+C
+      INTEGER KCODE
+      INTEGER KLAT
+      INTEGER KLON
+      INTEGER KPOINT
+C
+      REAL    PFIELD
+C
+      REAL    ZLINE
+      REAL    ZTEMP
+      REAL    ZWORK
+C
+C     Maximum number of latitudes (or longitudes), for which arrays
+C     are dimensioned.
+C
+      PARAMETER (JPMAX=320)
+C
+      DIMENSION PFIELD(*)
+      DIMENSION ZTEMP(JPMAX*JPMAX*2)
+      DIMENSION ZLINE(JPMAX*2)
+      DIMENSION ZWORK(0:JPMAX*2+2,3)
+C
+      DIMENSION KPOINT(*)
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1. Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Check input parameters.
+C
+      IF (KCODE.NE.1.AND.KCODE.NE.3.AND.
+     C    KCODE.NE.11.AND.KCODE.NE.13)
+     C   THEN
+	     WRITE (*,9001) KCODE
+	     CALL ABORTX ('QU2REG')
+         ENDIF
+C
+      IF (KLAT.GT.JPMAX)
+     C   THEN
+	     WRITE (*,9002) KLAT , JPMAX
+	     CALL ABORTX ('QU2REG')
+         ENDIF
+C
+      IF (KLON.GT.JPMAX*2)
+     C   THEN
+	     WRITE (*,9003) KLAT , JPMAX*2
+	     CALL ABORTX ('QU2REG')
+         ENDIF
+C
+C     Set array indices to 0.
+C
+      ILII  = 0
+      ILIO  = 0
+C
+C     Establish values of loop parameters.
+C
+      IF (KCODE.GT.10)
+     C   THEN
+C
+C            Quasi-regular along longitude lines.
+C
+	     IQUANO = KLON
+	     IREGNO = KLAT
+	     ICODE  = KCODE - 10
+         ELSE
+C
+C            Quasi-regular along latitude lines.
+C
+	     IQUANO = KLAT
+	     IREGNO = KLON
+	     ICODE  = KCODE
+	 ENDIF
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2. Interpolate field from quasi to regular grid.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      DO 230 J230=1,IQUANO
+C
+         IF (IREGNO.NE.KPOINT(J230))
+     C      THEN
+C
+C               Line contains less values than required,so
+C               extract quasi-regular grid values for a line
+C
+                DO 210 J210=1,KPOINT(J230)
+                   ILII        = ILII+1
+                   ZLINE(J210) = PFIELD(ILII)
+  210           CONTINUE
+C
+C               and interpolate this line.
+C
+                CALL ROWINA (ZLINE,IREGNO,KPOINT(J230),ZWORK,ICODE)
+C
+C               Add regular grid values for this line to the temporary
+C               array.
+C
+                DO 220 J220=1,IREGNO
+                   ILIO        = ILIO+1
+                   ZTEMP(ILIO) = ZLINE(J220)
+  220           CONTINUE
+C
+            ELSE
+C
+C               Line contains the required number of values, so add
+C               this line to the temporary array.
+C
+                DO 225 J225=1,IREGNO
+                   ILIO        = ILIO+1
+                   ILII        = ILII+1
+                   ZTEMP(ILIO) = PFIELD(ILII)
+  225           CONTINUE
+C
+            ENDIF
+C
+  230 CONTINUE
+C
+C     Copy temporary array to user array.
+C
+      DO 240 J240=1,KLON*KLAT
+	 PFIELD(J240) = ZTEMP(J240)
+  240 CONTINUE
+C
+C     ------------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9. Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9001 FORMAT (1H ,'QU2REG : Invalid interpolation type code = ',I3)
+C
+ 9002 FORMAT (1H ,'QU2REG : Number of latitudes is ',I4,', maximum ',
+     C                      'allowed is ',I3,'.')
+C
+ 9003 FORMAT (1H ,'QU2REG : Number of longitudes is ',I4,', maximum ',
+     C                      'allowed is ',I3,'.')
+C
+      RETURN
+C
+      END
diff --git a/gribex/qu2reg2.F b/gribex/qu2reg2.F
new file mode 100755
index 0000000..50d3b4c
--- /dev/null
+++ b/gribex/qu2reg2.F
@@ -0,0 +1,305 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE QU2REG2(PFIELD,KPOINT,KLAT,KLON,KCODE,PMSVAL,KRET)
+C
+C---->
+C**** QU2REG - Convert quasi-regular grid data to regular.
+C
+C     Purpose.
+C     --------
+C
+C     Convert quasi-regular grid data to regular,
+C     using either a linear or cubic interpolation.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL QU2REG2(PFIELD,KPOINT,KLAT,KLON,KCODE,PMSVAL)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PFIELD     - Array containing quasi-regular grid
+C                  data.
+C
+C     KPOINT     - Array containing list of the number of
+C                  points on each latitude (or longitude) of
+C                  the quasi-regular grid.
+C
+C     KLAT       - Number of latitude lines
+C
+C     KLON       - Number of longitude lines
+C
+C     KCODE      - Interpolation required.
+C                  1 , linear - data quasi-regular on
+C                               latitude lines.
+C                  3 , cubic -  data quasi-regular on
+C                               latitude lines.
+C                  11, linear - data quasi-regular on
+C                               longitude lines.
+C                  13, cubic -  data quasi-regular on
+C                               longitude lines.
+C
+C     PMSVAL     - Value used for missing data indicator.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KRET       - return code
+C                  0 = OK
+C                  non-zero indicates fatal error
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     PFIELD     - Array containing regular grid data.
+C
+C
+C     Method.
+C     -------
+C
+C     Data is interpolated and expanded into a temporary array,
+C     which is then copied back into the user's array.
+C     Returns an error code if an invalid interpolation is requested
+C     or field size exceeds array dimensions.
+C
+C
+C     Externals.
+C     ----------
+C
+C     ROWINA2
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB code specifications of
+C     quasi-regular grids.
+C
+C
+C     Comments.
+C     ---------
+C
+C     This routine is an adaptation of QU2REG to allow missing data
+C     values, and hence bit mapped fields.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      22.07.94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF      13.09.94
+C     Add return code KRET and remove calls to ABORT.
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables. Data statements.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPBYTES, JPMAX
+#ifdef REAL_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER (JPMAX=721)
+C     Maximum number of latitudes (or longitudes), for which arrays
+C     are dimensioned.
+C
+C     Subroutine arguments
+C
+      REAL PFIELD, PMSVAL
+      DIMENSION PFIELD(*)
+      INTEGER KPOINT, KLAT, KLON, KCODE, KRET
+      DIMENSION KPOINT(*)
+C
+C     Local variables.
+C
+      INTEGER ICODE, ILII, ILIO, IQUANO, IREGNO
+      INTEGER J210, J220, J225, J230, J240
+C
+      REAL ZLINE, ZWORK
+      DIMENSION ZLINE(JPMAX*2)
+      DIMENSION ZWORK(0:JPMAX*2+2,3)
+C
+#ifdef POINTER_64
+      INTEGER*8 IZTEMP
+#endif
+      REAL ZTEMP
+      DIMENSION ZTEMP(1)
+      POINTER ( IZTEMP, ZTEMP )
+      INTEGER ISIZE
+      SAVE ISIZE, IZTEMP
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      EXTERNAL JMALLOC
+C
+      DATA ISIZE/0/
+C
+C     ------------------------------------------------------------------
+C*    Section 1. Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      KRET = 0
+C
+C     Check input parameters.
+C
+      IF (KCODE.NE.1.AND.KCODE.NE.3.AND.KCODE.NE.11.AND.KCODE.NE.13)
+     X  THEN
+	WRITE (*,9001) KCODE
+        KRET = 1
+        GOTO 900
+      ENDIF
+C
+      IF (KLAT.GT.JPMAX) THEN
+	WRITE (*,9002) KLAT , JPMAX
+        KRET = 2
+        GOTO 900
+      ENDIF
+C
+      IF (KLON.GT.JPMAX*2) THEN
+	WRITE (*,9003) KLAT , JPMAX*2
+        KRET = 3
+        GOTO 900
+      ENDIF
+C
+C     Set array indices to 0.
+C
+      ILII  = 0
+      ILIO  = 0
+C
+C     Establish values of loop parameters.
+C
+      IF (KCODE.GT.10) THEN
+C
+C       Quasi-regular along longitude lines.
+C
+	IQUANO = KLON
+	IREGNO = KLAT
+	ICODE  = KCODE - 10
+      ELSE
+C
+C       Quasi-regular along latitude lines.
+C
+	IQUANO = KLAT
+	IREGNO = KLON
+	ICODE  = KCODE
+      ENDIF
+C
+C     Allocate memory (first time only)
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE = (JPMAX*JPMAX*2)*JPBYTES
+        IZTEMP = JMALLOC(ISIZE)
+#ifdef hpR64
+        IZTEMP = IZTEMP/(1024*1024*1024*4)
+#endif
+        IF( IZTEMP.EQ.0 ) THEN
+          WRITE(*,*) 'QU2REG2: Memory allocation failed.'
+          WRITE(*,*) 'QU2REG2: Number of bytes required = ', ISIZE
+          KRET = 5
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 2. Interpolate field from quasi to regular grid.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      DO 230 J230=1,IQUANO
+C
+        IF (IREGNO.NE.KPOINT(J230)) THEN
+C
+C         Line contains less values than required,so
+C         extract quasi-regular grid values for a line
+C
+          DO 210 J210=1,KPOINT(J230)
+            ILII        = ILII+1
+            ZLINE(J210) = PFIELD(ILII)
+  210     CONTINUE
+C
+C         and interpolate this line.
+C
+          CALL ROWINA2( ZLINE, IREGNO, KPOINT(J230), ZWORK, ICODE,
+     X                  PMSVAL, KRET)
+          IF ( KRET .NE. 0 ) GOTO 900
+C
+C         Add regular grid values for this line to the temporary array.
+C
+          DO 220 J220=1,IREGNO
+            ILIO        = ILIO+1
+            ZTEMP(ILIO) = ZLINE(J220)
+  220     CONTINUE
+C
+        ELSE
+C
+C         Line contains the required number of values, so add
+C         this line to the temporary array.
+C
+          DO 225 J225=1,IREGNO
+            ILIO        = ILIO+1
+            ILII        = ILII+1
+            ZTEMP(ILIO) = PFIELD(ILII)
+  225     CONTINUE
+C
+        ENDIF
+C
+  230 CONTINUE
+C
+C     Copy temporary array to user array.
+C
+      DO 240 J240=1,KLON*KLAT
+	PFIELD(J240) = ZTEMP(J240)
+  240 CONTINUE
+C
+C     ------------------------------------------------------------------
+C*    Section 9. Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9001 FORMAT (1H ,'QU2REG : Invalid interpolation type code = ',I3)
+C
+ 9002 FORMAT (1H ,'QU2REG : Number of latitudes is ',I4,', maximum ',
+     C                      'allowed is ',I3,'.')
+C
+ 9003 FORMAT (1H ,'QU2REG : Number of longitudes is ',I4,', maximum ',
+     C                      'allowed is ',I3,'.')
+C
+      END
diff --git a/gribex/qu2reg3.F b/gribex/qu2reg3.F
new file mode 100755
index 0000000..7d27f66
--- /dev/null
+++ b/gribex/qu2reg3.F
@@ -0,0 +1,321 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#ifndef USE_NO_POINTERS
+      SUBROUTINE QU2REG3(PFIELD,KPOINT,KLAT,KLON,KCODE,PMSVAL,KRET,
+     X                   OMISNG,OPERIO,OVEGGY)
+C
+C---->
+C**** QU2REG3 - Convert quasi-regular grid data to regular.
+C
+C     Purpose.
+C     --------
+C
+C     Convert quasi-regular grid data to regular,
+C     using either a linear or cubic interpolation.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL QU2REG3(PFIELD,KPOINT,KLAT,KLON,KCODE,PMSVAL,OMISNG,OPERIO,
+C    X            OVEGGY)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PFIELD     - Array containing quasi-regular grid
+C                  data.
+C
+C     KPOINT     - Array containing list of the number of
+C                  points on each latitude (or longitude) of
+C                  the quasi-regular grid.
+C
+C     KLAT       - Number of latitude lines
+C
+C     KLON       - Number of longitude lines
+C
+C     KCODE      - Interpolation required.
+C                  1 , linear - data quasi-regular on
+C                               latitude lines.
+C                  3 , cubic -  data quasi-regular on
+C                               latitude lines.
+C                  11, linear - data quasi-regular on
+C                               longitude lines.
+C                  13, cubic -  data quasi-regular on
+C                               longitude lines.
+C
+C     PMSVAL     - Value used for missing data indicator.
+C
+C     OMISNG     - True if missing values are present in field.
+C
+C     OPERIO     - True if input field is periodic.
+C
+C     OVEGGY     - True if 'nearest neighbour' processing must be used
+C                  for interpolation
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KRET       - return code
+C                  0 = OK
+C                  non-zero indicates fatal error
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     PFIELD     - Array containing regular grid data.
+C
+C
+C     Method.
+C     -------
+C
+C     Data is interpolated and expanded into a temporary array,
+C     which is then copied back into the user's array.
+C     Returns an error code if an invalid interpolation is requested
+C     or field size exceeds array dimensions.
+C
+C
+C     Externals.
+C     ----------
+C
+C     ROWINA3
+C
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB code specifications of
+C     quasi-regular grids.
+C
+C
+C     Comments.
+C     ---------
+C
+C     This routine is an adaptation of QU2REG to allow missing data
+C     values, and hence bit mapped fields.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      22.07.94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers     ECMWF      13.09.94
+C     Add return code KRET and remove calls to ABORT.
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Addition of OMISNG and OPERIO arguments.
+C     Fix message for longitude number out of bounds, and routine
+C     name in title and formats.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables. Data statements.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+C
+      INTEGER JPBYTES, JPMAX
+#ifdef REAL_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER (JPMAX=3000)
+C     Maximum number of latitudes (or longitudes), for which arrays
+C     are dimensioned.
+C
+C     Subroutine arguments
+C
+      REAL PFIELD, PMSVAL
+      DIMENSION PFIELD(*)
+      INTEGER KPOINT, KLAT, KLON, KCODE, KRET
+      DIMENSION KPOINT(*)
+C
+      LOGICAL OMISNG, OPERIO, OVEGGY
+C
+C     Local variables.
+C
+      INTEGER ICODE, ILII, ILIO, IQUANO, IREGNO
+      INTEGER J210, J220, J225, J230, J240
+C
+      REAL ZLINE, ZWORK
+      DIMENSION ZLINE(JPMAX*2)
+      DIMENSION ZWORK(0:JPMAX*2+2,3)
+C
+#ifdef POINTER_64
+      INTEGER*8 IZTEMP
+#endif
+      REAL ZTEMP
+      DIMENSION ZTEMP(1)
+      POINTER ( IZTEMP, ZTEMP )
+      INTEGER ISIZE
+      SAVE ISIZE, IZTEMP
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      EXTERNAL JMALLOC
+C
+      DATA ISIZE/0/
+C
+C     ------------------------------------------------------------------
+C*    Section 1. Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      KRET = 0
+C
+C     Check input parameters.
+C
+      IF (KCODE.NE.1.AND.KCODE.NE.3.AND.KCODE.NE.11.AND.KCODE.NE.13)
+     X  THEN
+        WRITE(GRPRSM,9001) KCODE
+        KRET = 1
+        GOTO 900
+      ELSEIF (KLAT.GT.JPMAX) THEN
+        WRITE(GRPRSM,9002) KLAT , JPMAX
+        KRET = 2
+        GOTO 900
+      ELSEIF (KLON.GT.JPMAX*2) THEN
+        WRITE(GRPRSM,9003) KLON , JPMAX*2
+        KRET = 3
+        GOTO 900
+      ENDIF
+C
+C     Set array indices to 0.
+C
+      ILII  = 0
+      ILIO  = 0
+C
+C     Establish values of loop parameters.
+C
+      IF (KCODE.GT.10) THEN
+C
+C       Quasi-regular along longitude lines.
+C
+        IQUANO = KLON
+        IREGNO = KLAT
+        ICODE  = KCODE - 10
+      ELSE
+C
+C       Quasi-regular along latitude lines.
+C
+        IQUANO = KLAT
+        IREGNO = KLON
+        ICODE  = KCODE
+      ENDIF
+C
+C     Allocate memory (first time only)
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE = (JPMAX*JPMAX*2)*JPBYTES
+        IZTEMP = JMALLOC(ISIZE)
+#ifdef hpR64
+        IZTEMP = IZTEMP/(1024*1024*1024*4)
+#endif
+        IF( IZTEMP.EQ.0 ) THEN
+          WRITE(GRPRSM,*) 'QU2REG3: Memory allocation failed.'
+          WRITE(GRPRSM,*) 'QU2REG3: Number of bytes required = ', ISIZE
+          KRET = 5
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 2. Interpolate field from quasi to regular grid.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      DO 230 J230=1,IQUANO
+C
+        IF (IREGNO.NE.KPOINT(J230)) THEN
+C
+C         Line contains less values than required,so
+C         extract quasi-regular grid values for a line
+C
+          DO 210 J210=1,KPOINT(J230)
+            ILII        = ILII+1
+            ZLINE(J210) = PFIELD(ILII)
+  210     CONTINUE
+C
+C         and interpolate this line.
+C
+          CALL ROWINA3( ZLINE, IREGNO, KPOINT(J230), ZWORK, ICODE,
+     X                  PMSVAL, KRET, OMISNG, OPERIO , OVEGGY)
+          IF ( KRET .NE. 0 ) GOTO 900
+C
+C         Add regular grid values for this line to the temporary array.
+C
+          DO 220 J220=1,IREGNO
+            ILIO        = ILIO+1
+            ZTEMP(ILIO) = ZLINE(J220)
+  220     CONTINUE
+C
+        ELSE
+C
+C         Line contains the required number of values, so add
+C         this line to the temporary array.
+C
+          DO 225 J225=1,IREGNO
+            ILIO        = ILIO+1
+            ILII        = ILII+1
+            ZTEMP(ILIO) = PFIELD(ILII)
+  225     CONTINUE
+C
+        ENDIF
+C
+  230 CONTINUE
+C
+C     Copy temporary array to user array.
+C
+      DO 240 J240=1,KLON*KLAT
+        PFIELD(J240) = ZTEMP(J240)
+  240 CONTINUE
+C
+C     ------------------------------------------------------------------
+C*    Section 9. Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+ 9001 FORMAT (1H ,'QU2REG3 : Invalid interpolation type code = ',I3)
+C
+ 9002 FORMAT (1H ,'QU2REG3 : Number of latitudes is ',I4,', maximum ',
+     C                      'allowed is ',I4,'.')
+C
+ 9003 FORMAT (1H ,'QU2REG3 : Number of longitudes is ',I4,', maximum ',
+     C                      'allowed is ',I4,'.')
+C
+      END
+#endif
diff --git a/gribex/reclen.F b/gribex/reclen.F
new file mode 100755
index 0000000..20bc6ae
--- /dev/null
+++ b/gribex/reclen.F
@@ -0,0 +1,205 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE RECLEN  (BLOCK,LEN,NBIT,ICODE,INDIC,LEVEL,IERR)
+C
+C---->
+C*                                                                    *
+C*    NAME      : RECLEN
+C*                                                                    *
+C*    FUNCTION  : CALCULATES FROM THE GRIB (OR PSEUDO GRIB) HEADERS   *
+C*                THE TOTAL LENGTH OF THE RECORD, AND ALSO RETURNS    *
+C*                PARAMETER NUMBER, INDICATOR OF TYPE OF LEVEL AND    *
+C*                LEVEL NUMBER.                                       *
+C*                                                                    *
+C*    INPUT     : BLOCK = INPUT ARRAY                                 *
+C*                NBIT  = NO OF BITS PER COMPUTER WORD                *
+C*                                                                    *
+C*    OUTPUT    : LEN   = LENGTH IN OCTETS                            *
+C*                ICODE = PARAMETER NUMBER                            *
+C*                INDIC = LEVEL TYPE INDICATOR                        *
+C*                LEVEL = LEVEL NUMBER                                *
+C*                IERR  = -1 , UNDEFINED BLOCK 3 INCLUDED.            *
+C*                      = -2 , ERROR DETECTED BY SUBROUTINE OFFSET.   *
+C                       = -3 , Section length of 0 found.
+C*                      =  0 , NO ERROR.                              *
+C*                                                                    *
+C*    GENERAL   : RECLEN CALLS GBYTES                                 *
+C*                             OFFSET                                 *
+C*                             MODVAL                                 *
+C*                                                                    *
+C*    AUTHOR    : B.V. GURETZKY  03.05.85                             *
+C*                                                                    *
+C*    MODIFIED  : J. HENNESSY    25.11.85                             *
+C                 J. Hennessy    11.11.91
+C                 Checks on section lengths of 0 added.
+C*                                                                    *
+C     ---------------------------------------------------------------
+C----<
+C
+      IMPLICIT  INTEGER(B,U)
+      DIMENSION BLOCK(*)
+      DIMENSION IBLOCK(24)
+C
+C     SKIP PAST LEADING 4 ASCII CHARACTERS
+C
+      IWORD = 1
+      IOFF  = 0
+      IBYTE = 8
+      NVAL  = 4
+      ILENG = 200
+      IERR  = 0
+C
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     EXTRACT FIRST 4 OCTETS OF BLOCK 1.
+C
+      CALL GBYTES (BLOCK(IWORD),IBLOCK(1),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     IF THESE OCTETS DO NOT CONTAIN 0, 0, 24 AND 0 RESPECTIVELY
+C     THEN THE DATA IS IN THE OLD VERSION OF THE CODE.
+C
+      IF (IBLOCK(1).EQ.0.AND.IBLOCK(2).EQ.0.AND.IBLOCK(3).EQ.24.
+     C    AND.IBLOCK(4).EQ.0)
+     C      THEN
+                ISNEW = 1
+                NVAL = 20
+            ELSE
+                ISNEW = 0
+                NVAL = 16
+            ENDIF
+C
+C     EXTRACT NEXT 16 OR 20 OCTETS OF BLOCK 1 - NUMBER DEPENDS
+C     ON VERSION OF CODE.
+C
+      CALL GBYTES (BLOCK(IWORD),IBLOCK(5),IOFF,IBYTE,0,NVAL)
+      CALL OFFSET (IOFF,NVAL,IWORD,IBYTE,NBIT,ILENG,IERR)
+      IF (IERR.NE.0) RETURN
+C
+C     LENGTH OF BLOCK 0 + BLOCK 1
+      LEN = 24 + (ISNEW*4)
+C
+C
+C     PARAMETER NUMBER.
+C
+      ICODE = IBLOCK(5+4*ISNEW)
+C
+C     LEVEL TYPE
+C
+      INDIC = IBLOCK(6+4*ISNEW)
+C
+C     LEVEL DESCRIPTION
+C
+      KTEMP = 32 + ISNEW*224
+C
+      IF (INDIC.EQ.100.OR.INDIC.EQ.103.OR.INDIC.EQ.105.
+     C   .OR.INDIC.EQ.107.OR.INDIC.EQ.109)
+     C     THEN
+               LEVEL = IBLOCK(7+ISNEW*4) * KTEMP + IBLOCK(8+ISNEW*4)
+           ELSE
+               LEVEL = IBLOCK(7+ISNEW*4)
+           ENDIF
+C
+C     CHECK FOR PRESENCE OF BLOCK 2.
+C
+      IFLAG = IBLOCK(4+4*ISNEW)
+C
+      INC = 0
+      IF (ISNEW.EQ.0)
+     C   THEN
+             IF (IFLAG.EQ.1.OR.IFLAG.EQ.3) INC = 1
+         ELSE
+             IF (IFLAG.EQ.128.OR.IFLAG.EQ.192) INC = 1
+         ENDIF
+C
+C     LENGTH OF GRID DEFINITION BLOCK
+C
+      IF (INC.EQ.1)
+     C   THEN
+             CALL GBYTE (BLOCK(IWORD),LBLK,IOFF,24)
+             LEN = LEN + LBLK
+             IF (LBLK.EQ.0)
+     C          THEN
+                    IERR = -3
+                    LEN  = 0
+                    WRITE (*,9001)
+                    RETURN
+                ENDIF
+C
+             CALL  OFFSET (IOFF,LBLK,IWORD,8,NBIT,ILENG,IERR)
+             IF (IERR.NE.0) RETURN
+         ENDIF
+C
+C     CHECK FOR PRESENCE OF BLOCK 3
+C
+      INC = 0
+      IF (ISNEW.EQ.0)
+     C   THEN
+             IF (IFLAG.EQ.2.OR.IFLAG.EQ.3) INC = 1
+         ELSE
+             IF (IFLAG.EQ.64.OR.IFLAG.EQ.192) INC = 1
+         ENDIF
+C
+C
+C------------------------------------------
+C
+C     NMC WASHINGTON SEA SURFACE TEMPERATURE ANALYSIS IS THE ONLY
+C     GRIB CODED FIELD WITH BLOCK 3. IT ALSO VARIES IN LENGTH SO
+C     THE LENGTH IS FIXED FOR ARCHIVAL/RETRIEVAL PURPOSES TO
+C     34920 BYTES.
+C
+      IF (INC.EQ.1)
+     C   THEN
+             LEN = 34920
+             RETURN
+         ENDIF
+C
+C------------------------------------------
+C
+C
+      IF (INC.EQ.1)
+     C    THEN
+              IERR = -1
+              WRITE (*,*) ' RECLEN : BLOCK 3 OF GRIB CODE NOT DEFINED'
+              RETURN
+          ENDIF
+C
+C     LENGTH OF BINARY DATA BLOCK
+C
+      CALL GBYTE (BLOCK(IWORD),LBLK,IOFF,24)
+      LEN = LEN + LBLK
+C
+             IF (LBLK.EQ.0)
+     C          THEN
+                    IERR = -3
+                    LEN  = 0
+                    WRITE (*,9002)
+                    RETURN
+                ENDIF
+C
+C     BLOCK 5 HAS FIXED LENGTH OF 4 OCTETS.
+
+      LEN = LEN + 4
+C
+C     MAKE LENGTH MULTIPLE OF 120 OCTETS
+C
+      INTER = 120
+      CALL MODVAL (LEN,LENB,INTER)
+      LEN = LENB
+C
+ 9001 format (1h ,'RECLEN : Length of section 2 is 0.')
+C
+ 9002 format (1h ,'RECLEN : Length of section 4 is 0.')
+      RETURN
+      END
diff --git a/gribex/ref2grb.F b/gribex/ref2grb.F
new file mode 100755
index 0000000..5d98c63
--- /dev/null
+++ b/gribex/ref2grb.F
@@ -0,0 +1,175 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION REF2GRB(PREF, KEXP, KMANT, KBITS)
+C
+C---->
+C**** REF2GRB
+C
+C     Purpose.
+C     --------
+C
+C     Code and check reference value in IBM format
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL REF2GRB(PREF, KEXP, KMANT, KBITS)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PREF       - Reference value
+C     KBITS      - Number of bits per computer word.
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KEXP       - 8-bit exponent
+C     KMANT      - 24-bit mantissa
+C
+C     Function returns 0 if no problems encountered, otherwise -1.
+C
+C
+C     Method.
+C     -------
+C
+C     Codes in IBM format, then decides to ensure that reference 
+C     value used for packing is not different from that stored
+C     because of packing differences.
+C
+C
+C     Externals.
+C     ----------
+C
+C     CONFP3    - Encode into IBM floating point format.
+C     DECFP     - Decode from IBM floating point format.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      17:05:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     Change to function return status code.
+C     J.D.Chambers     ECMWF      August, 2000
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+#include "grbcom.h"
+C
+C     Subroutine arguments
+C
+      REAL PREF
+      INTEGER KEXP, KMANT, KBITS
+C
+C     Local variables
+C
+      INTEGER ITRND
+      REAL ZTEMP
+      LOGICAL LDEBUG
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Convert to and from IBM format.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      REF2GRB = 0
+C
+      LDEBUG = (NDBG.EQ.1)
+C 
+C     Convert floating point reference value to IBM representation.
+C
+      ITRND = 1
+      ZTEMP = PREF
+      CALL CONFP3 (PREF,KEXP,KMANT,KBITS,ITRND)
+C 
+C     Set reference value to that actually stored in the GRIB code.
+C
+      CALL DECFP2 (PREF,KEXP,KMANT)
+C 
+C     If the nearest number which can be represented in
+C     GRIB format is greater than the reference value,
+C     find the nearest number in GRIB format lower
+C     than the reference value.
+C 
+      IF (ZTEMP.LT.PREF) THEN
+C 
+C       Convert floating point to GRIB representation
+C       using truncation to ensure that the converted
+C       number is smaller than the original one.
+C
+        ITRND = 0
+        PREF  = ZTEMP
+        CALL CONFP3 (PREF,KEXP,KMANT,KBITS,ITRND)
+C 
+C       Set reference value to that stored in the GRIB code.
+C
+        CALL DECFP2 (PREF,KEXP,KMANT)
+C 
+        IF (ZTEMP.LT.PREF) THEN
+          IF( LDEBUG ) THEN
+            WRITE(GRPRSM,*) 'REF2GRB: Reference value error.'
+            WRITE(GRPRSM,*) 'REF2GRB: Notify Met.Applications Section.'
+            WRITE(GRPRSM,*) 'REF2GRB: ZTEMP = ', ZTEMP
+#ifdef REAL_8
+            WRITE(GRPRSM,'(1X,Z16)') ZTEMP
+#else
+            WRITE(GRPRSM,'(1X,Z8)') ZTEMP
+#endif
+            WRITE(GRPRSM,*) 'REF2GRB: PREF = ', PREF
+#ifdef REAL_8
+            WRITE(GRPRSM,'(1X,Z16)') PREF
+#else
+            WRITE(GRPRSM,'(1X,Z8)') PREF
+#endif
+            REF2GRB = -1
+          ENDIF
+C
+          PREF = ZTEMP
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/remsp.F b/gribex/remsp.F
new file mode 100755
index 0000000..726913a
--- /dev/null
+++ b/gribex/remsp.F
@@ -0,0 +1,46 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE REMSP (STRING)
+C
+C---->
+C**** REMSP - Remove leading spaces from character string.
+C     NAME       : REMSP
+C
+C     FUNCTION   : LEFT JUSTIFY CHARACTER STRING BY REMOVING
+C                  ANY LEADING SPACES.
+C
+C     INPUT      : STRING = CHARACTER STRING, WITH OR WITHOUT
+C                           LEADING SPACES.
+C
+C     OUTPUT     : STRING = CHARACTER STRING LEFT JUSTIFIED.
+C
+C         JOHN HENNESSY, ECMWF, 16TH APRIL 1985
+C
+C     ---------------------------------------------------------------
+C----<
+C
+      CHARACTER*(*) STRING
+C
+      DO 100 I=1,LEN(STRING)
+         IF (STRING(I:I).NE.' ') GO TO 200
+  100 CONTINUE
+C
+C     Blank line.
+C
+      RETURN
+C
+C     Left justify string.
+C
+  200 STRING(1:) = STRING(I:)
+C
+      RETURN
+      END
diff --git a/gribex/repchr.F b/gribex/repchr.F
new file mode 100755
index 0000000..38968f1
--- /dev/null
+++ b/gribex/repchr.F
@@ -0,0 +1,162 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE REPCHR (HCHAR,HOLD,HNEW)
+C
+C---->
+C**** REPCHR - Replace one character by another.
+C
+C     Purpose.
+C     --------
+C
+C           Replace all occurrences of a given character in a
+C           character string by another.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL REPCHR (HCHAR,HOLD,HNEW)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               HCHAR      - Character string to be modified.
+C               HOLD       - Character to be replaced.
+C               HNEW       - Replacement character.
+C
+C               Output parameters.
+C               ------------------
+C
+C               HCHAR      - Modified character string.
+C
+C     Method.
+C     -------
+C
+C           Characters examined in sequence and changed if necessary.
+C           Only the first character of the strings HOLD and HNEW is
+C           used, if these are longer than 1 character.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Program contains sections 0 to 1 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      16.01:92.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+      INTEGER      ILEN
+C
+      INTEGER      J150
+C
+      CHARACTER*(*) HCHAR
+      CHARACTER*(*) HOLD
+      CHARACTER*(*) HNEW
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Replace required characters.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      ILEN = LEN (HCHAR)
+C
+      DO 150 J150=1,ILEN
+         IF (HCHAR(J150:J150).EQ.HOLD(1:1)) HCHAR(J150:J150) = HNEW(1:1)
+  150 CONTINUE
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/revero.F b/gribex/revero.F
new file mode 100755
index 0000000..6989ee9
--- /dev/null
+++ b/gribex/revero.F
@@ -0,0 +1,263 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION REVERO ( KDATA,  KLENP,  KSEC2,  KGRIB,  KLENG,
+     X                          KBITS,  KBMAP,  KVALS,  OPRIBI, OQUASI,
+     X                          KNROWS, KLEN,   KWORK,  KLWORK, ODEBUG,
+     X                          OPRCLN, KLENGR )
+C
+C---->
+C**** REVERO
+C
+C     Purpose.
+C     --------
+C
+C     Reverse order of even rows in a field of integer values.
+C     This function is used for handling of boustrophedonic ordering
+C     in extended second-order packing methods.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     KRET = REVERO ( KDATA,  KLENP,  KSEC2,  KGRIB,  KLENG,  KBITS,
+C    X                KBMAP,  KVALS,  OPRIBI, OQUASI, KNROWS, KLEN,
+C    X                KWORK,  KLWORK, ODEBUG, OPRCLN, KLENGR )
+C
+C     Input Parameters.
+C     ----------------
+C
+C     KDATA      - Array of normalized values.
+C     KLENP      - Length of array KDATA.
+C     KSEC2      - Array of GRIB section 2 integer descriptors.
+C     KGRIB      - Array containing GRIB product (for bit-map).
+C     KLENG      - Length of GRIB product array.
+C     KBITS      - Number of bits per computer word.
+C     KBMAP      - Bit pointer for start of explicit primary Bit-MAP
+C                  (if any).
+C     KVALS      - Number of bits in primary bit-map.
+C     OPRIBI     - True if a PRImary BIt-map is present.
+C     OQUASI     - True if the grid is QUASI-regular.
+C     KNROWS     - Number of ROWS (or lines) in the grid.
+C     KLEN       - Exact number of grid-points to handle.
+C     KLWORK     - Length of work array KWORK.
+C     ODEBUG     - True for some debug printout.
+C     OPRCLN     - True if row lengthes have been pre-computed.
+C
+C     Input Parameters if OPRCLN is TRUE.
+C     ------------------------------------
+C     KLENGR     - Effective LENGth of Rows array.
+C
+C     Output Parameters if OPRCLN is FALSE.
+C     ------------------------------------
+C
+C     KWORK      - Work array, used to unpack a primary bit-map, if any.
+C
+C     Method.
+C     -------
+C
+C     Determines effective row length(es), and swaps fields values
+C     for rows with an even rank.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     Note that arrays KLENGR and KWORK are not used in the same call,
+C     so they may overlap.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C
+C
+C     Modifications.
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C
+C     Subroutine arguments
+C
+      INTEGER KLENP, KBMAP, KVALS, KNROWS, KLEN, KLWORK, KLENG, KBITS
+      INTEGER KDATA (KLENP), KSEC2 (*), KWORK (KLWORK), KGRIB (KLENG)
+      INTEGER KLENGR (KNROWS)
+C
+      LOGICAL OPRIBI, OQUASI, ODEBUG, OPRCLN
+C
+C     Local variables.
+C
+      INTEGER IREFLN, IPTRBM, IRETFN, JROW, IPTOFF, ILNGTX, INBSEQ, J
+      INTEGER JSEQ, IPTNBR, ICOUNT, ILNGTH, ILEN, INDEX1, INDEX2, IRET
+      INTEGER IAUXIL
+C
+      CHARACTER YOPER*1
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Performs initial computations.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+#ifndef ebug2o
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9100) OPRCLN
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      YOPER='D'
+C
+      IRETFN = 0
+      IREFLN=22
+      ICOUNT=0
+C
+      IF (OPRIBI) THEN
+        IPTRBM=KBMAP
+        ILEN=KVALS
+      ELSE
+        ILEN=KLEN
+      ENDIF
+C
+      ILNGTX=ILEN/KNROWS
+C
+C     -----------------------------------------------------------------
+C*    Section 2 . Loop on rows, wuth values swap for even rank rows.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      DO 222 JROW=1,KNROWS
+C
+      IF (OQUASI) THEN
+        ILNGTX=KSEC2(IREFLN+JROW)
+      ENDIF
+C
+      IF (.NOT.OPRIBI.OR.ILNGTX.EQ.0) THEN
+C
+C         Effective length of row = full length.
+C
+        ILNGTH=ILNGTX
+C
+      ELSEIF (OPRCLN) THEN
+C
+        ILNGTH=KLENGR (JROW)
+C
+      ELSE
+C
+C         An (explicit) bit-map is included.
+C         The number of values in current row has to be computed.
+C
+        ILNGTH=0
+        INBSEQ=1+(ILNGTX-1)/KLWORK
+C
+        DO 212 JSEQ=1,INBSEQ
+        IPTOFF=(JSEQ-1)*KLWORK
+        IPTNBR=MIN (KLWORK,ILNGTX-IPTOFF)
+        CALL INXBIT (KGRIB,KLENG,IPTRBM,KWORK,IPTNBR,KBITS,1,
+     X               YOPER,IRET)
+C
+        IF (IRET.NE.0) THEN
+          IRETFN = 23210
+          WRITE(GRPRSM,FMT=9210) JROW, IPTOFF+1, IPTOFF+IPTNBR
+          GOTO 900
+        ENDIF
+C
+        DO 211 J=1,IPTNBR
+        ILNGTH=ILNGTH+KWORK(J)
+  211   CONTINUE
+C
+  212   CONTINUE
+C
+      ENDIF
+C
+      IF (MOD (JROW,2).EQ.0.AND.ILNGTH.GT.1) THEN
+C
+C             Swap field values within row.
+C
+#ifdef CRAY
+CDIR$ IVDEP
+#endif
+#ifdef FUJITSU
+!OCL NOVREC
+#endif
+        DO 221 J=1,ILNGTH/2
+        INDEX1=ICOUNT+J
+        INDEX2=ICOUNT+ILNGTH+1-J
+        IAUXIL=KDATA(INDEX1)
+        KDATA(INDEX1)=KDATA(INDEX2)
+        KDATA(INDEX2)=IAUXIL
+  221   CONTINUE
+C
+      ENDIF
+C
+      ICOUNT=ICOUNT+ILNGTH
+C
+  222 CONTINUE
+C
+      IF (ICOUNT.NE.KLEN) THEN
+        IRETFN = 23220
+        WRITE(GRPRSM,FMT=9220) ICOUNT, KLEN
+        GOTO 900
+      ENDIF      
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      REVERO = IRETFN
+#ifndef ebug2o
+C
+      IF (ODEBUG) THEN
+#endif
+        WRITE(GRPRSM,FMT=9900) IRETFN
+#ifndef ebug2o
+      ENDIF
+#endif
+C
+      RETURN
+C
+ 9100 FORMAT (' REVERO: Function start, OPRCLN = ',L1,'.')
+C
+ 9210 FORMAT (' REVERO: Problem unpacking primary bit-map,row',I6,
+     X        ' points ',I8,'..',I8,'.')
+C
+ 9220 FORMAT (' REVERO: Inconsistency: computed g.p. number =',I8,
+     X        ', expected =',I8,'.')
+C
+ 9900 FORMAT (' REVERO: Function return code =',I6,'.')
+C
+      END
diff --git a/gribex/rorint.F b/gribex/rorint.F
new file mode 100755
index 0000000..63d0062
--- /dev/null
+++ b/gribex/rorint.F
@@ -0,0 +1,139 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE RORINT(PDATA,KDATA,KLEN,HDIR)
+C
+C---->
+C**** RORINT - Conversion of arrays between data types.
+C
+C     Purpose.
+C     --------
+C
+C     Converts real arrays to integer and vice versa.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL RORINT(PDATA,KDATA,KLEN,HDIR)
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KDATA      - Array of integer increments
+C                  Input for 'R' function.
+C     PDATA      - Array of floating point values.
+C                  Input for 'I' function.
+C     KLEN       - Number of values to be converted.
+C     HDIR       - 'R', convert integer to real.
+C                  'I', convert real to integer.
+C
+C     Output Parameters.
+C     -----------------
+C
+C     KDATA      - Array of integer increments
+C                  Output for 'I' function.
+C     PDATA      - Array of floating point values.
+C                  Output for 'R' function.
+C
+C     Method.
+C     -------
+C
+C     Data types converted.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Comments.
+C     --------
+C
+C     PDATA and KDATA are really the same array. This routine
+C     is just a device to force vectorisation on the Cray,
+C     without the necessity of using another array.
+C
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy     ECMWF     27.09.91
+C
+C     Modifications.
+C     _____________
+C
+C     J.D.Chambers          ECMWF     21.11.94
+C     Use JNINT on VAX
+C
+C     J.D.Chambers    ECMWF     23.10.97
+C     Use input and output arrays with same REAL and INTEGER size.
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#if (defined REAL_BIGGER_THAN_INTEGER)
+      INTEGER*8 KDATA
+      REAL*8 PDATA
+#else
+      INTEGER KDATA
+      REAL PDATA
+#endif
+      INTEGER KLEN
+      DIMENSION PDATA(KLEN)
+      DIMENSION KDATA(KLEN)
+      CHARACTER*(1) HDIR
+C
+      INTEGER JLOOP
+C
+C     -----------------------------------------------------------------
+C*    Section 1 . Conversion of data types.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Real to integer
+C
+      IF (HDIR.EQ.'I') THEN
+        DO 110 JLOOP = 1, KLEN
+#ifdef VAX
+          KDATA(JLOOP) = JNINT(PDATA(JLOOP))
+#else
+          KDATA(JLOOP) = NINT(PDATA(JLOOP))
+#endif
+  110   CONTINUE
+C
+C     Integer to real
+C
+      ELSE
+        DO 120 JLOOP = KLEN, 1, -1
+#if (defined REAL_BIGGER_THAN_INTEGER)
+          PDATA(JLOOP) = DBLE(KDATA(JLOOP))
+#else
+          PDATA(JLOOP) = REAL(KDATA(JLOOP))
+#endif
+  120   CONTINUE
+      ENDIF
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/rowina.F b/gribex/rowina.F
new file mode 100755
index 0000000..614e3ab
--- /dev/null
+++ b/gribex/rowina.F
@@ -0,0 +1,142 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE ROWINA (P,KO,KI,PW,KCODE)
+C
+C---->
+C**** ROWINA - Interpolation of row of values.
+C
+C     Purpose.
+C     --------
+C
+C           Interpolate a row of values.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL ROWINA (P,KO,KI,PW,KCODE)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               P     - Row of values to be interpolated.
+C                       Dimension must be at least KO.
+C
+C               KO    - Number of values required.
+C
+C               KI    - Number of values in P on input.
+C
+C               PW    - Working array.
+C                       Dimension must be at least (0:KO+2,3).
+C
+C               KCODE - Interpolation required.
+C                       1 , linear.
+C                       3 , cubic.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               P     - Now contains KO values.
+C
+C     Method.
+C     -------
+C
+C           Linear or cubic interpolation performed as required.
+C
+C     Externals.
+C     ----------
+C
+C           SCM0
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           This is a version of ROWINT which conforms to Ansi
+C           standards, achieved by passing the work array as a
+C           parameter and changing lower case letters to upper case.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy     ECMWF     09.10.91
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy     ECMWF     07.01.92
+C           Call to ABORT changed to ABORTX.
+C
+C     -----------------------------------------------------------------
+C----<
+C
+      DIMENSION P(KO),PW(0:KO+2,3)
+C
+      IF(KCODE.EQ.1) THEN
+         DO 102 JL=1,KI
+            PW(JL,1)=P(JL)
+  102    CONTINUE
+         PW(KI+1,1)=P(1)
+         ZRDI=REAL(KI)
+         ZDO=1./REAL(KO)
+C
+         DO 105 JL=1,KO
+            ZPOS=(JL-1)*ZDO
+            ZWT=ZPOS*ZRDI
+            IP=ZWT
+            ZWT=ZWT-IP
+            P(JL)=(1.-ZWT)*PW(IP+1,1)+ZWT*PW(IP+2,1)
+  105    CONTINUE
+C
+      ELSEIF(KCODE.EQ.3) THEN
+         DO 302 JL=1,KI
+            PW(JL,1)=P(JL)
+  302    CONTINUE
+         PW(0,1)=P(KI)
+         PW(KI+1,1)=P(1)
+         PW(KI+2,1)=P(2)
+         DO 305 JL=1,KI
+            PW(JL,2)= - PW(JL-1,1)/3. - 0.5*PW(JL,1)
+     1             + PW(JL+1,1)    - PW(JL+2,1)/6.
+            PW(JL+1,3)=   PW(JL-1,1)/6. - PW(JL,1)
+     1             + 0.5*PW(JL+1,1) + PW(JL+2,1)/3.
+  305    CONTINUE
+         CALL SCM0(PW(1,2),PW(2,3),PW(1,1),PW(2,1),KI)
+         ZRDI=REAL(KI)
+         ZDO=1./REAL(KO)
+         DO 310 JL=1,KO
+            ZPOS=(JL-1)*ZDO
+            ZWT=ZPOS*ZRDI
+            IP=ZWT+1
+            ZWT=ZWT+1.-IP
+            ZWT1 = 1. - ZWT
+            P(JL)=((3.-2.*ZWT1)*PW(IP,1) + ZWT*PW(IP,2))*ZWT1*ZWT1
+     1       + ((3.-2.*ZWT) *PW(IP+1,1) - ZWT1*PW(IP+1,3))*ZWT*ZWT
+  310    CONTINUE
+      ELSE
+	 WRITE (*,9001) KCODE
+	 CALL ABORTX ('ROWINA')
+      ENDIF
+C
+      RETURN
+C
+ 9001 FORMAT (1H ,'ROWINA : Invalid interpolation code = ',I4)
+C
+      END
diff --git a/gribex/rowina2.F b/gribex/rowina2.F
new file mode 100755
index 0000000..6cc3c16
--- /dev/null
+++ b/gribex/rowina2.F
@@ -0,0 +1,228 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ROWINA2( P, KO, KI, PW, KCODE, PMSVAL, KRET)
+C
+C---->
+C**** ROWINA2 - Interpolation of row of values.
+C
+C     Purpose.
+C     --------
+C
+C     Interpolate a row of values.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ROWINA2( P, KO, KI, PW, KCODE, PMSVAL, KRET)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     P      - Row of values to be interpolated.
+C              Dimension must be at least KO.
+C
+C     KO     - Number of values required.
+C
+C     KI     - Number of values in P on input.
+C
+C     PW     - Working array.
+C              Dimension must be at least (0:KO+2,3).
+C
+C     KCODE  - Interpolation required.
+C              1 , linear.
+C              3 , cubic.
+C
+C     PMSVAL - Value used for missing data indicator.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     P     - Now contains KO values.
+C     KRET  - Return code
+C             0, OK
+C             Non-zero, error
+C
+C
+C     Method.
+C     -------
+C
+C     Linear or cubic interpolation performed as required.
+C
+C
+C     Externals.
+C     ----------
+C
+C     SCM0
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     This is a version of ROWINA which allows for missing data
+C     values and hence for bitmapped fields.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers    ECMWF     22.07.94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers    ECMWF     13.09.94
+C     Add return code KRET and remove calls to ABORT.
+C
+C
+C     -----------------------------------------------------------------
+C----<
+C
+C*******************************************************************
+C     Section 0.  Declarations.
+C*******************************************************************
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+      REAL P, PW, PMSVAL
+      INTEGER KO,KI,KCODE, KRET
+      DIMENSION P(KO),PW(0:KO+2,3)
+C
+C     Local variables
+      INTEGER JL, IP
+      REAL ZRDI, ZDO, ZPOS, ZWT, ZWT1
+C
+C*******************************************************************
+C     Section 1.  Linear interpolation ..
+C*******************************************************************
+C
+  100 CONTINUE
+C
+      KRET = 0
+C
+      IF( KCODE.EQ.1 ) THEN
+C
+C        Move input values to work array
+         DO 110 JL = 1, KI
+            PW(JL,1) = P(JL)
+  110    CONTINUE
+C
+C        Arrange wrap-around value in work array
+         PW(KI+1,1) = P(1)
+C
+C        Set up constants to be used to figure out weighting for
+C        values in interpolation.
+         ZRDI = FLOAT(KI)
+         ZDO  = 1.0 / FLOAT(KO)
+C
+C        Loop through the output points
+         DO 120 JL = 1, KO
+C
+C           Calculate weight from the start of row
+            ZPOS = (JL-1) * ZDO
+            ZWT  = ZPOS * ZRDI
+C
+C           Get the current array position(minus 1) from the weight -
+C           note the implicit truncation.
+            IP   = ZWT
+C
+C           If the left value is missing, use the right value
+            IF ( PW(IP+1,1) .EQ. PMSVAL ) THEN
+               P(JL) = PW(IP+2,1)
+C
+C           If the right value is missing, use the left value
+            ELSE IF ( PW(IP+2,1) .EQ. PMSVAL ) THEN
+               P(JL) = PW(IP+1,1)
+C
+C           If neither missing, interpolate ...
+            ELSE
+C
+C             Adjust the weight to range (0.0 to 1.0)
+              ZWT  = ZWT - IP
+C
+C             Interpolate using the weighted values on either side
+C             of the output point position
+              P(JL) = (1.0-ZWT) * PW(IP+1,1) + ZWT * PW(IP+2,1)
+            ENDIF
+C
+  120    CONTINUE
+C
+C*******************************************************************
+C     Section 2.  Cubic interpolation ..
+C*******************************************************************
+C
+  200 CONTINUE
+C
+      ELSEIF(KCODE.EQ.3) THEN
+         DO 210 JL = 1,KI
+            IF ( P(JL) .EQ. PMSVAL ) THEN
+              WRITE(*,*) ' ROWINA2: Cubic interpolation not supported'
+              WRITE(*,*) ' ROWINA2: for fields containing missing data.'
+              WRITE(*,*) ' Sorry!'
+	      KRET = 1
+              GOTO 900
+            ENDIF
+            PW(JL,1) = P(JL)
+  210    CONTINUE
+         PW(0,1) = P(KI)
+         PW(KI+1,1) = P(1)
+         PW(KI+2,1) = P(2)
+         DO 220 JL = 1,KI
+            PW(JL,2) =  - PW(JL-1,1)/3.0 - 0.5*PW(JL,1)
+     1             + PW(JL+1,1)    - PW(JL+2,1)/6.0
+            PW(JL+1,3) =    PW(JL-1,1)/6.0 - PW(JL,1)
+     1             + 0.5*PW(JL+1,1) + PW(JL+2,1)/3.0
+  220    CONTINUE
+         CALL SCM0(PW(1,2),PW(2,3),PW(1,1),PW(2,1),KI)
+         ZRDI = FLOAT(KI)
+         ZDO = 1.0/FLOAT(KO)
+         DO 230 JL = 1,KO
+            ZPOS = (JL-1)*ZDO
+            ZWT = ZPOS*ZRDI
+            IP = ZWT+1
+            ZWT = ZWT+1.0-IP
+            ZWT1  =  1.0 - ZWT
+            P(JL) = ((3.0-2.0*ZWT1)*PW(IP,1) + ZWT*PW(IP,2))*ZWT1*ZWT1
+     1       + ((3.0-2.0*ZWT) *PW(IP+1,1) - ZWT1*PW(IP+1,3))*ZWT*ZWT
+  230    CONTINUE
+C
+      ELSE
+C
+C*******************************************************************
+C     Section 3.  Invalid interpolation code ..
+C*******************************************************************
+C
+  300   CONTINUE
+C
+        WRITE (*,9001) KCODE
+        KRET = 2
+      ENDIF
+C
+C*******************************************************************
+C     Section 9.  Closedown.
+C*******************************************************************
+C
+900   CONTINUE
+      RETURN
+C
+ 9001 FORMAT (1H ,'ROWINA2 : Invalid interpolation code = ',I4)
+C
+      END
diff --git a/gribex/rowina3.F b/gribex/rowina3.F
new file mode 100755
index 0000000..06248a1
--- /dev/null
+++ b/gribex/rowina3.F
@@ -0,0 +1,318 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE ROWINA3( P, KO, KI, PW, KCODE, PMSVAL, KRET,
+     X                    OMISNG, OPERIO, OVEGGY)
+C
+C---->
+C**** ROWINA3 - Interpolation of row of values.
+C
+C     Purpose.
+C     --------
+C
+C     Interpolate a row of values.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL ROWINA3( P, KO, KI, PW, KCODE, PMSVAL, KRET, OMISNG, OPERIO)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     P      - Row of values to be interpolated.
+C              Dimension must be at least KO.
+C
+C     KO     - Number of values required.
+C
+C     KI     - Number of values in P on input.
+C
+C     PW     - Working array.
+C              Dimension must be at least (0:KO+2,3).
+C
+C     KCODE  - Interpolation required.
+C              1 , linear.
+C              3 , cubic.
+C
+C     PMSVAL - Value used for missing data indicator.
+C
+C     OMISNG - True if missing values are present in field.
+C
+C     OPERIO - True if input field is periodic.
+C
+C     OVEGGY     - True if 'nearest neighbour' processing must be used
+C                  for interpolation
+C
+C     Output Parameters.
+C     ------------------
+C
+C     P     - Now contains KO values.
+C     KRET  - Return code
+C             0, OK
+C             Non-zero, error
+C
+C
+C     Method.
+C     -------
+C
+C     Linear or cubic interpolation performed as required.
+C
+C
+C     Externals.
+C     ----------
+C
+C     SCM0
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     This is a version of ROWINA which allows for missing data
+C     values and hence for bitmapped fields.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers    ECMWF     22.07.94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     J.D.Chambers    ECMWF     13.09.94
+C     Add return code KRET and remove calls to ABORT.
+C
+C     J. Clochard, Meteo France, for ECMWF - January 1998.
+C     Addition of OMISNG and OPERIO arguments.
+C
+C
+C     -----------------------------------------------------------------
+C----<
+C
+C*******************************************************************
+C     Section 0.  Declarations.
+C*******************************************************************
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Subroutine arguments
+      REAL P, PW, PMSVAL
+      INTEGER KO,KI,KCODE, KRET
+      DIMENSION P(KO),PW(0:KO+2,3)
+C
+C     Local variables
+      INTEGER JL, IP
+      REAL ZRDI, ZDO, ZPOS, ZWT, ZWT1
+C
+      LOGICAL OMISNG, OPERIO, OVEGGY
+C
+C*******************************************************************
+C     Section 1.  Linear interpolation ..
+C*******************************************************************
+C
+  100 CONTINUE
+C
+      KRET = 0
+C
+      IF( KCODE.EQ.1 ) THEN
+C
+C        Move input values to work array
+         DO 110 JL = 1, KI
+            PW(JL,1) = P(JL)
+  110    CONTINUE
+C
+         IF (OPERIO) THEN
+C
+C        Arrange wrap-around value in work array
+           PW(KI+1,1) = P(1)
+C
+C          Set up constants to be used to figure out weighting for
+C          values in interpolation.
+           ZRDI = REAL(KI)
+           ZDO  = 1.0 / REAL(KO)
+         ELSE
+C
+C        Repeat last value, to cope with "implicit truncation" below
+           PW(KI+1,1) = P(KI)
+C
+C          Set up constants to be used to figure out weighting for
+C          values in interpolation.
+           ZRDI = REAL(KI-1)
+           ZDO  = 1.0 / REAL(KO-1)
+         ENDIF
+C
+C        Loop through the output points
+         IF ( .NOT. OMISNG ) THEN
+C
+            DO 120 JL = 1, KO
+C
+C           Calculate weight from the start of row
+            ZPOS = (JL-1) * ZDO
+            ZWT  = ZPOS * ZRDI
+C
+C           Get the current array position(minus 1) from the weight -
+C           note the implicit truncation.
+            IP   = ZWT
+C
+C           Adjust the weight to range (0.0 to 1.0)
+            ZWT  = ZWT - IP
+C
+C           If 'nearest neighbour' processing must be used
+C
+            IF( OVEGGY ) THEN
+C
+              IF( ZWT.LT.0.5 ) THEN
+                P(JL) = PW(IP+1,1)
+              ELSE
+                P(JL) = PW(IP+2,1)
+              ENDIF
+            ELSE
+C
+C             Interpolate using the weighted values on either side
+C             of the output point position
+              P(JL) = (1.0-ZWT) * PW(IP+1,1) + ZWT * PW(IP+2,1)
+C
+            ENDIF
+C
+  120       CONTINUE
+C
+         ELSE
+C
+         DO 130 JL = 1, KO
+C
+C           Calculate weight from the start of row
+            ZPOS = (JL-1) * ZDO
+            ZWT  = ZPOS * ZRDI
+C
+C           If 'nearest neighbour' processing must be used
+C
+            IF( OVEGGY ) THEN
+C
+              IF( ZWT.LT.0.5 ) THEN
+                P(JL) = PW(IP+1,1)
+              ELSE
+                P(JL) = PW(IP+2,1)
+              ENDIF
+            ELSE
+C
+C             Get the current array position(minus 1) from the weight -
+C             note the implicit truncation.
+              IP   = ZWT
+C
+C             If the left value is missing, use the right value
+              IF ( PW(IP+1,1) .EQ. PMSVAL ) THEN
+                 P(JL) = PW(IP+2,1)
+C
+C             If the right value is missing, use the left value
+              ELSE IF ( PW(IP+2,1) .EQ. PMSVAL ) THEN
+                 P(JL) = PW(IP+1,1)
+C
+C             If neither missing, interpolate ...
+              ELSE
+C
+C               Adjust the weight to range (0.0 to 1.0)
+                ZWT  = ZWT - IP
+C
+C               Interpolate using the weighted values on either side
+C               of the output point position
+                P(JL) = (1.0-ZWT) * PW(IP+1,1) + ZWT * PW(IP+2,1)
+              ENDIF
+C
+            ENDIF
+C
+  130    CONTINUE
+C
+       ENDIF
+C
+C*******************************************************************
+C     Section 2.  Cubic interpolation ..
+C*******************************************************************
+C
+  200 CONTINUE
+C
+      ELSEIF(KCODE.EQ.3) THEN
+C
+         IF ( OMISNG ) THEN
+            WRITE(GRPRSM,*)
+     X        'ROWINA3: Cubic interpolation not supported'
+            WRITE(GRPRSM,*)
+     X        'ROWINA3: for fields containing missing data.'
+            WRITE(GRPRSM,*) ' Sorry!'
+            KRET = 1
+            GOTO 900
+         ENDIF
+C
+         DO 210 JL = 1,KI
+            IF ( P(JL) .EQ. PMSVAL ) THEN
+              WRITE(GRPRSM,*) 
+     X          'ROWINA3: Cubic interpolation not supported'
+              WRITE(GRPRSM,*) 
+     X          'ROWINA3: for fields containing missing data.'
+              WRITE(GRPRSM,*) ' Sorry!'
+              KRET = 1
+              GOTO 900
+            ENDIF
+            PW(JL,1) = P(JL)
+  210    CONTINUE
+         PW(0,1) = P(KI)
+         PW(KI+1,1) = P(1)
+         PW(KI+2,1) = P(2)
+         DO 220 JL = 1,KI
+            PW(JL,2) =  - PW(JL-1,1)/3.0 - 0.5*PW(JL,1)
+     1             + PW(JL+1,1)    - PW(JL+2,1)/6.0
+            PW(JL+1,3) =    PW(JL-1,1)/6.0 - PW(JL,1)
+     1             + 0.5*PW(JL+1,1) + PW(JL+2,1)/3.0
+  220    CONTINUE
+         CALL SCM0(PW(1,2),PW(2,3),PW(1,1),PW(2,1),KI)
+         ZRDI = REAL(KI)
+         ZDO = 1.0/REAL(KO)
+         DO 230 JL = 1,KO
+            ZPOS = (JL-1)*ZDO
+            ZWT = ZPOS*ZRDI
+            IP = ZWT+1
+            ZWT = ZWT+1.0-IP
+            ZWT1  =  1.0 - ZWT
+            P(JL) = ((3.0-2.0*ZWT1)*PW(IP,1) + ZWT*PW(IP,2))*ZWT1*ZWT1
+     1       + ((3.0-2.0*ZWT) *PW(IP+1,1) - ZWT1*PW(IP+1,3))*ZWT*ZWT
+  230    CONTINUE
+C
+      ELSE
+C
+C*******************************************************************
+C     Section 3.  Invalid interpolation code ..
+C*******************************************************************
+C
+  300   CONTINUE
+C
+        WRITE(GRPRSM,9001) KCODE
+        KRET = 2
+      ENDIF
+C
+C*******************************************************************
+C     Section 9.  Closedown.
+C*******************************************************************
+C
+900   CONTINUE
+      RETURN
+C
+ 9001 FORMAT (1H ,'ROWINA3 : Invalid interpolation code = ',I4)
+C
+      END
diff --git a/gribex/rtb.F b/gribex/rtb.F
new file mode 100755
index 0000000..bd82097
--- /dev/null
+++ b/gribex/rtb.F
@@ -0,0 +1,59 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      INTEGER FUNCTION RTB (CHAR)
+C
+C---->
+C*
+C*    NAME      : RTB
+C*
+C*    FUNCTION  : COUNT THE NUMBER OF CHARACTERS IN A CHARACTER
+C*                STRING, EXCLUDING TRAILING SPACES.
+C*
+C*    INPUT     : CHAR - CHARACTER STRING
+C*
+C*    OUTPUT    : RTB  - NO OF CHARACTERS
+C*
+C*    GENERAL   : RTB CALLS  -----
+C*
+C*    AUTHOR    : J.HENNESSY  15.4.85
+C*
+C     ---------------------------------------------------------------
+C----<
+C
+      CHARACTER*(*) CHAR
+C
+      J = LEN (CHAR)
+C
+C     No trailing blanks.
+C
+      IF (CHAR(J:J).NE.' ')
+     C     THEN
+               RTB = J
+               RETURN
+           ENDIF
+C
+C     String with trailing blanks.
+C
+      DO 100 I = J,1,-1
+         IF (CHAR(I:I).NE.' ')
+     C          THEN
+                    RTB = I
+                    RETURN
+                ENDIF
+  100 CONTINUE
+C
+C     String consists of only blanks.
+C
+      RTB = 0
+C
+      RETURN
+      END
diff --git a/gribex/sbyte.F b/gribex/sbyte.F
new file mode 100755
index 0000000..bbcb1bc
--- /dev/null
+++ b/gribex/sbyte.F
@@ -0,0 +1,77 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SBYTE  (DEST,SOURCE,IOFSET,IBYTSZ)
+C
+C---->
+C**** SBYTE  - Insert a single bit field. Cray routine.
+C
+C*    FUNCTION: STORE A SINGLE BIT FIELD FROM SOURCE INTO DEST
+C*
+C*    INPUT   : SOURCE   = WORD CONTAINING  BIT FIELD RIGHT JUSTIFIED
+C*              DEST(1)  = 1ST TARGET WORD
+C*              IOFSET   = OFFSET IN BITS FOR START OF THE FIELD
+C*              IBYTSZ   = LENGTH OF FIELD IN BITS ; .LE.WORD SIZE .....
+C*
+C*    OUTPUT  : SOURCE,IOFSET,IBYTSZ UNCHANGED
+C*              DEST(1) AND EVENTUALLY DEST(2) CONTAIN FIELD
+C*
+C*    AUTHOR  : M.MIQUEU   08/1981 (REWRITTEN FROM J.MARTELLET'S)
+C*
+C----<
+      PARAMETER(NBPW=64)
+      INTEGER SOURCE,DEST(1)
+      INTEGER SH1,SH2,SH3
+      SH1=IOFSET+IBYTSZ
+      IF(SH1.GT.NBPW) GO TO 2
+
+      SH2=NBPW-SH1
+      IF(SH2.LT.0) SH2=NBPW-SH2
+
+C     BYTE  DOES NOT SPAN WORDS
+
+
+      DEST(1)=SHIFT(
+     1              OR(
+     2                 AND(SHIFT(DEST(1),SH1),
+     3                     SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ) )
+     4                 ,
+     5                 AND(SOURCE,
+     6                     COMPL(SHIFT(COMPL(MASK(IBYTSZ)),IBYTSZ)) )
+     7                 )
+     8              ,SH2)
+
+
+
+      RETURN
+
+2     CONTINUE
+
+C     BYTE SPANS 2 WORDS
+
+      SH3=2*NBPW-SH1
+
+
+      DEST(1)=OR(
+     1           AND(DEST(1),MASK(IOFSET))
+     2           ,
+     3           AND(SHIFT(SOURCE,SH3) , COMPL(MASK(IOFSET)) )
+     4           )
+
+      DEST(2)=OR(
+     1           AND(DEST(2) , COMPL(MASK(SH1-NBPW)) )
+     2           ,
+     3           SHIFT( AND(SOURCE , COMPL(MASK(SH3)) ) ,SH3)
+     4           )
+
+
+
+      RETURN
+      END
diff --git a/gribex/sbytes.F b/gribex/sbytes.F
new file mode 100755
index 0000000..341865e
--- /dev/null
+++ b/gribex/sbytes.F
@@ -0,0 +1,63 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SBYTES (D,S,ISKIP1,IBSIZ,ISKIP2,NBYTES,KWOFF)
+C
+C---->
+C**** SBYTES - Insert a number of bit fields. Cray routine.
+C
+C REVERSES THE ACTION OF GBYTES, TAKING FIELDS FROM S AND
+C INSERTING THEM INTO A BIT STRING IN D. SEE GBYTES.
+C AUTHOR D. ROBERTSON  AUG,1981
+C
+C----<
+      PARAMETER(NBPW=64)
+      DIMENSION D(2) , S(NBYTES)
+      INTEGER SH1,SH2,SH3
+      IGNORE = 0
+#ifdef CRAY
+      IF(NUMARG().GT.6) IGNORE = KWOFF
+#else
+      IF(NUMARG(DUMMY).GT.6) IGNORE = KWOFF
+#endif
+      ID=1+ISKIP1/(NBPW-IGNORE)
+      ISKIP = MOD(ISKIP1,NBPW-IGNORE) + IGNORE
+      ISTEP = ISKIP2+IBSIZ
+      DO 75 IBYTE = 1 , NBYTES
+C WITH THE STARTING WORD AND BIT POSITION KNOWN, THE
+C DESIRED INSERTION CAN BE DONE BY
+C**      CALL SBYTE(D(ID),S(IBYTE),ISKIP,IBSIZ)
+C BUT THE CODE IS SHORT ENOUGH TO GO IN-LINE.
+         SH1 = ISKIP+IBSIZ
+         IF(SH1.GT.NBPW) GO TO 50
+         SH2 = NBPW-SH1
+         IF(SH2.LT.0) SH2 = NBPW-SH2
+C BYTE GOES INTO 1 WORD OF D.
+         D(ID) = SHIFT(OR(AND(SHIFT(D(ID),SH1),MASK(NBPW-IBSIZ)),
+     1                   AND(S(IBYTE),SHIFT(MASK(IBSIZ),IBSIZ))),SH2)
+         GO TO 65
+   50    CONTINUE
+C BYTE GOES INTO 2 WORDS OF D.
+         SH3 = 2*NBPW-SH1
+         D(ID)=OR(AND(D(ID),MASK(ISKIP)),
+     1               AND(SHIFT(S(IBYTE),SH3),COMPL(MASK(ISKIP))))
+         D(ID+1)=OR(AND(D(ID+1),SHIFT(COMPL(MASK(SH1-NBPW)),NBPW-IGNORE)
+     1                 ),
+     2              SHIFT(AND(S(IBYTE),COMPL(MASK(SH3))),SH3-IGNORE))
+   65    CONTINUE
+C UPDATE STARTING WORD AND BIT POSITION
+         ISKIP = ISKIP+ISTEP
+         IF(ISKIP.LT.NBPW) GO TO 75
+         ISKIP = ISKIP - NBPW
+         ID = ID+1+ISKIP/(NBPW-IGNORE)
+         ISKIP = MOD(ISKIP,NBPW-IGNORE) + IGNORE
+   75    CONTINUE
+      RETURN
+      END
diff --git a/gribex/scm0.F b/gribex/scm0.F
new file mode 100755
index 0000000..2bdee0c
--- /dev/null
+++ b/gribex/scm0.F
@@ -0,0 +1,61 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE SCM0   (PDL,PDR,PFL,PFR,KLG)
+C
+C---->
+C**** SCM0   - Apply SCM0 limiter to derivative estimates.
+C
+C    M. HORTAL    ECMWF February 1991  closely following D. WILLIAMSON
+C
+C    Apply SCM0 limiter to derivative estimates.
+C
+C   output:
+C     pdl   = the limited derivative at the left edge of the interval
+C     pdr   = the limited derivative at the right edge of the interval
+C
+C   inputs
+C     pdl   = the original derivative at the left edge
+C     pdr   = the original derivative at the right edge
+C     pfl   = function value at the left edge of the interval
+C     pfr   = function value at the right edge of the interval
+C     klg  = number of intervals where the derivatives are limited
+C
+C----<
+      INTEGER KLG
+C
+      REAL PDL(KLG), PDR(KLG), PFL(KLG), PFR(KLG)
+C
+      INTEGER JL
+C      
+      REAL ZALPHA, ZBETA, ZEPS, ZFAC
+C
+  100 CONTINUE
+C
+C    define constants
+C
+      ZEPS=1.E-12
+      ZFAC=3.*(1.-ZEPS)
+C
+      DO 200 JL=1,KLG
+      IF(ABS(PFR(JL)-PFL(JL)).GT.ZEPS) THEN
+          ZALPHA=PDL(JL)/(PFR(JL)-PFL(JL))
+          ZBETA =PDR(JL)/(PFR(JL)-PFL(JL))
+          IF(ZALPHA.LE.0.) PDL(JL)=0.
+          IF(ZBETA .LE.0.) PDR(JL)=0.
+          IF(ZALPHA.GT.ZFAC) PDL(JL)=ZFAC*(PFR(JL)-PFL(JL))
+          IF(ZBETA .GT.ZFAC) PDR(JL)=ZFAC*(PFR(JL)-PFL(JL))
+      ELSE
+          PDL(JL)=0.
+          PDR(JL)=0.
+      ENDIF
+  200 CONTINUE
+      END
diff --git a/gribex/search.F b/gribex/search.F
new file mode 100755
index 0000000..59662d9
--- /dev/null
+++ b/gribex/search.F
@@ -0,0 +1,208 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SEARCH (KEYS,MAXKEY,STRING,LEN,POS,IS,IF,
+     C                    ISUP,IP,OP,IA,MIN)
+C
+C---->
+C**** SEARCH - Search for given character string.
+C 
+C     Purpose.
+C     --------
+C
+C           Search for a match, in an array of character
+C           variables, for a given character string.
+C 
+C**   Interface.
+C     ----------
+C
+C           CALL SEARCH (KEYS,MAXKEY,STRING,LEN,POS,IS,IF,
+C    C                    ISUP,IP,OP,IA,MIN)
+C
+C               Input Parameters.
+C               -----------------
+C
+C                KEYS   = Array of character variables
+C 
+C                MAXKEY = Size of array
+C 
+C                STRING = Character string for which match is
+C                         sought
+C 
+C                LEN    = Length of this string
+C 
+C                ISUP   = 0 , Print turned on, when no match found.
+C                         1 , Print suppressed
+C 
+C                IS     = Search start position in array "KEYS"
+C 
+C                IF     = Search end position in array KEYS.
+C 
+C                OP     = Unit number of file output
+C 
+C                IP     = Unit number of file input
+C 
+C                IA     = 1 , Interactive use
+C                         0 , Batch use.
+C 
+C                MIN    = Minimum number of characters needed for match.
+C 
+C               Output Parameters.
+C               ------------------
+C
+C                POS    = 0 , Match not found
+C                         -1 , Multiple matches found
+C                         Positive value, indicates array element
+C                             which matches
+C 
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      16.04.85
+C
+C     Modifications.
+C     --------------
+C
+C           J. Hennessy      ECMWF      07.12.93
+C           Code added to remove ambiguous entries when possible.
+C
+C           J.D.Chambers  ECMWF  13.12.93
+C           Increase parameter value table size 1200 -> 1500
+C 
+C     ----------------------------------------------------------------
+C----<
+C
+      IMPLICIT INTEGER (A-Z)
+C
+      PARAMETER (ASIZE=1500)
+C
+      DIMENSION KEYS(MAXKEY)
+      CHARACTER*(*) KEYS, STRING
+      CHARACTER*1   PAGE
+C
+      DIMENSION ATAB(ASIZE)
+C
+      IF (MAXKEY.GT.ASIZE)
+     C   THEN
+             WRITE (*,*) ' SEARCH : Array limits exceeded.'
+             WRITE (*,*) ' SEARCH : MAXKEY = ', MAXKEY
+             WRITE (*,*) '          Notify MARS group.'
+             CALL ABORT
+         ENDIF
+C
+      SIZE = MAX (LEN,MIN)
+C
+C
+C
+C
+C
+C****************************************************************
+C*
+C*    Flag and count matching entries
+C*
+C****************************************************************
+C
+C
+      N = MIN
+  100 K = 0
+      DO 200 I=IS,IF
+         ATAB(I) = 0
+         IF (STRING(1:N).EQ.KEYS(I)(1:N))
+     C      THEN
+                ATAB(I) = 1
+                K = K + 1
+                J = I
+            ENDIF
+  200 CONTINUE
+C
+      N = N + 1
+      IF (N.LE.SIZE.AND.K.GT.1) GO TO 100
+C
+C
+C****************************************************************
+C*
+C*    No match found. print message (if required) and return.
+C*
+C****************************************************************
+C
+      IF (K.EQ.0)
+     C THEN
+           POS = 0
+           IF (ISUP.EQ.1) RETURN
+C
+           IF (STRING(1:1).NE.'?')
+     C      THEN
+              WRITE (OP,9000) STRING(1:SIZE)
+ 9000         FORMAT (' Unrecognised entry - ',A)
+            ENDIF
+           WRITE (OP,*) 'Valid entries are :-'
+           N = 0
+           DO 300 I=IS,IF
+                  N = N + 1
+                  WRITE (OP,'(1H ,20X,A)') KEYS(I)
+                  IF (IA.EQ.1.AND.N.EQ.19)
+     C              THEN
+  250                   WRITE(OP,*)'Type page to continue -->'
+                        N = 0
+                        READ (IP,'(A1)') PAGE
+                        CALL L2U1CR (PAGE)
+                        IF (PAGE.NE.'P') GO TO 250
+                        GO TO 300
+                    ENDIF
+  300      CONTINUE
+           POS = 0
+           RETURN
+       END IF
+C
+C****************************************************************
+C*
+C*    Return if only 1 match found.
+C*
+C****************************************************************
+C
+      IF (K.EQ.1) THEN
+                      POS = J
+                      RETURN
+                  ENDIF
+C
+C****************************************************************
+C*
+C*    Number of entries found. Try to resolve ambiguity.
+C*
+C****************************************************************
+C
+      DO 350 I=IS,IF
+           IF (ATAB(I).EQ.1) 
+     C        THEN
+                  IJ = RTB(KEYS(I))
+                  IF (STRING(1:LEN).EQ.KEYS(I)(1:IJ))
+     C               THEN
+                         POS = I
+                         RETURN
+                     ENDIF
+              ENDIF
+  350 CONTINUE
+C
+C****************************************************************
+C*
+C*    Ambiguous entry found. Print/display message
+C*
+C****************************************************************
+C
+      WRITE (OP,9001) STRING(1:SIZE)
+ 9001 FORMAT (' Ambiguous entry  - ',A)
+      DO 400 I=IS,IF
+           IF (ATAB(I).EQ.1) WRITE (OP,9002) KEYS(I)
+ 9002      FORMAT ('     ',A)
+  400 CONTINUE
+C
+      POS = - 1
+      RETURN
+      END
diff --git a/gribex/sencode.c b/gribex/sencode.c
new file mode 100755
index 0000000..a5793d1
--- /dev/null
+++ b/gribex/sencode.c
@@ -0,0 +1,2586 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "gdecode.h"
+#include "sencode.h"
+
+#define DEBUGOFF 1
+#define DEBUG1 (debugSet > DEBUGOFF )
+#define DEBUG2 (debugSet > (DEBUGOFF + 1) )
+static char * debugLevel;
+static int debugSet = 0;
+
+#define ABS(a) ((a)<0?-(a):(a))
+#define SMALL (1E-12)
+#define PRACTICALLYZERO(a) (ABS((a))<(SMALL))
+#define QUITESMALL (0.05)
+#define ALMOSTZERO(a) (ABS((a))<(QUITESMALL))
+#define TRUE    1
+#define FALSE   0
+#define CHECK   1
+#define NOCHECK 0
+
+#define NORTH   0
+#define SOUTH   1
+#define WEST    2
+#define EAST    3
+#define W_E_INC 4
+#define N_S_INC 5
+#define W_E_PTS 6
+#define N_S_PTS 7
+
+fortint initialiseNewGrib(gribProduct**);
+fortint copyExistingGrib(gribProduct**,gribProduct**);
+void adjustGridAreaDefinition(gribProduct*,int);
+
+fortint SENCODE(gribProduct ** newGrib, gribProduct ** oldGrib) {
+fortint status;
+/*
+// See if DEBUG switched on.
+*/
+    if( ! debugSet ) {
+      debugLevel = getenv("GDECODE_DEBUG");
+      if( debugLevel == NULL )
+        debugSet = DEBUGOFF;              /* off */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(debugLevel) ; loop++ ) {
+          if( ! isdigit(debugLevel[loop]) ) {
+            printf("Invalid number string in GDECODE_DEBUG: %s\n", debugLevel);
+            printf("GDECODE_DEBUG must comprise only digits [0-9].\n");
+            debugSet = DEBUGOFF;
+          }
+        }
+        debugSet = DEBUGOFF + atol( debugLevel );
+      }
+      if( DEBUG1 ) printf("SENCODE: GDECODE_DEBUG switched on, level = %s\n",
+                          debugLevel);
+    }
+
+  if( *oldGrib == NULL ) {
+    status = initialiseNewGrib(newGrib);
+    if( DEBUG1 )
+      if( status )
+        printf("SENCODE: initialiseNewGrib failed.\n");
+      else
+        printf("SENCODE: initialiseNewGrib ran OK\n");
+  }
+  else {
+    status = copyExistingGrib(newGrib,oldGrib);
+    if( DEBUG1 )
+      if( status )
+        printf("SENCODE: copyExistingGrib failed.\n");
+      else
+        printf("SENCODE: copyExistingGrib ran OK\n");
+  }
+
+  return status;
+
+}
+
+fortint initialiseNewGrib(gribProduct** newGrib) {
+
+  if( DEBUG1 ) printf("initialiseNewGrib\n");
+
+  *newGrib = (gribProduct *) allocateMemory(sizeof(gribProduct));
+  (*newGrib)->g0 = (gribSection0 *) allocateMemory(sizeof(gribSection0));
+  (*newGrib)->g1 = (gribSection1 *) allocateMemory(sizeof(gribSection1));
+  (*newGrib)->g2 = (gribSection2 *) allocateMemory(sizeof(gribSection2));
+  (*newGrib)->g3 = NULL;
+  (*newGrib)->g4 = (gribSection4 *) allocateMemory(20);
+  (*newGrib)->g5 = (gribSection5 *) allocateMemory(sizeof(gribSection5));
+  memcpy((*((*newGrib)->g5)).end7777,"7777",4);
+
+  (*newGrib)->currentPointIndex               = 0;
+  (*newGrib)->numberOfValues                  = 0;
+  (*newGrib)->value                           = NULL;
+  (*newGrib)->bitStart                        = NULL;
+  (*newGrib)->bitsPerValue                    = 0;
+  (*newGrib)->bitmapped                       = 0;
+  (*newGrib)->nextValueFirstBit               = 0;
+  (*newGrib)->nextBit                         = 0;
+  (*newGrib)->scale                           = (fortdouble) 0.0;
+  (*newGrib)->minimum                         = (fortdouble) 0.0;
+  (*newGrib)->missingValue                    = (fortdouble) 0.0;
+  (*newGrib)->latitudeOffsets                 = NULL;
+  (*newGrib)->expandedValues                  = NULL;
+  (*newGrib)->currentPoint.latitude           = NULL;
+  (*newGrib)->currentPoint.longitudeIncrement = NULL;
+  (*newGrib)->currentPoint.gridPointValue     = NULL;
+  (*newGrib)->northSet =
+  (*newGrib)->southSet =
+  (*newGrib)->westSet =
+  (*newGrib)->eastSet =
+  (*newGrib)->northSouthIncrementSet =
+  (*newGrib)->westEastIncrementSet =
+  (*newGrib)->northSouthNumberOfPointsSet =
+  (*newGrib)->westEastNumberOfPointsSet = TRUE;
+
+  return (fortint) 0;
+}
+
+fortint copyExistingGrib(gribProduct** newGrib, gribProduct** oldGrib) {
+fortint lengthOfSectionToCopy;
+gribProduct * oldG = *oldGrib;
+gribProduct * newG;
+
+  if( DEBUG1 ) printf("copyExistingGrib\n");
+
+  *newGrib = (gribProduct *) allocateMemory(sizeof(gribProduct));
+  newG = *newGrib;
+/*
+// Create section 0
+*/
+  newG->g0 = (gribSection0 *) allocateMemory(sizeof(gribSection0));
+  memcpy((newG->g0),(oldG->g0),sizeof(gribSection0));
+/*
+// Copy section 1
+*/
+  lengthOfSectionToCopy = g1_length(oldG);
+  newG->g1 = (gribSection1 *) allocateMemory(lengthOfSectionToCopy);
+  memcpy((newG->g1),(oldG->g1),lengthOfSectionToCopy);
+/*
+// Copy section 2
+*/
+  lengthOfSectionToCopy = g2_length(oldG);
+  newG->g2 = (gribSection2 *) allocateMemory(lengthOfSectionToCopy);
+  memcpy((newG->g2),(oldG->g2),lengthOfSectionToCopy);
+
+/*
+  if( anyLatLonGrid(oldG) )  {
+*/
+  if( generalLatLonGrid(oldG) )  {
+    newG->northSet =
+    newG->southSet =
+    newG->westSet =
+    newG->eastSet =
+    newG->northSouthIncrementSet =
+    newG->westEastIncrementSet =
+    newG->northSouthNumberOfPointsSet =
+    newG->westEastNumberOfPointsSet = TRUE;
+  }
+/*
+// Section 3 may or may not have to be created.
+*/
+  newG->g3 = NULL;
+/*
+// Copy standard part of section 4
+*/
+  lengthOfSectionToCopy = 20;
+  newG->g4 = (gribSection4 *) allocateMemory(lengthOfSectionToCopy);
+  memcpy((newG->g4),(oldG->g4),lengthOfSectionToCopy);
+/*
+// Create section 5.
+*/
+  newG->g5 = (gribSection5 *) allocateMemory(sizeof(gribSection5));
+  memcpy((*(newG->g5)).end7777,"7777",4);
+
+
+  newG->currentPointIndex = 0;
+  newG->numberOfValues    = getIntegerValue(oldGrib,"numberOfFieldValues");
+  newG->value             = NULL;
+  newG->bitStart          = NULL;
+  newG->bitsPerValue      = oldG->bitsPerValue;
+  newG->bitmapped         = oldG->bitmapped;
+  newG->nextValueFirstBit = 0;
+  newG->nextBit           = 0;
+  newG->scale             = (fortdouble) oldG->scale;
+  newG->minimum           = (fortdouble) oldG->minimum;
+  newG->missingValue      = (fortdouble) oldG->missingValue;
+  newG->latitudeOffsets                 = NULL;
+  newG->currentPoint.latitude           = NULL;
+  newG->currentPoint.longitudeIncrement = NULL;
+  newG->expandedValues                  = NULL;
+  newG->currentPoint.gridPointValue     = NULL;
+
+  return (fortint) 0;
+}
+
+fortint SENPACK(
+  gribProduct** newGrib, unsigned char * buffer, fortint * bufferLength)
+{
+fortint totalLength;
+gribProduct* g = *newGrib;
+fortint lengthOfSectionToMove, next;
+
+  totalLength = 8 + g1_length(g) + g2_length(g) + g4_length(g) + 4;
+  if( primaryBitmapPresent(g) ) totalLength += g3_length(g);
+
+  if( DEBUG1 ) printf("GRIB totalLength = %d bytes\n",totalLength);
+
+  if( totalLength > *bufferLength ) {
+    if( DEBUG1 ) printf("GRIB length (%d) greater than buffer length (%d)\n",
+                         totalLength, *bufferLength );
+    return (fortint) -1;
+  }
+  else {
+    memcpy(buffer,(g->g0),sizeof(gribSection0));
+    MOVE3BYTES((buffer+4),&totalLength);
+    next = sizeof(gribSection0);
+
+    lengthOfSectionToMove = g1_length(g);
+    memcpy((buffer+next),(g->g1),lengthOfSectionToMove);
+    next += g1_length(g);
+
+    lengthOfSectionToMove = g2_length(g);
+    memcpy((buffer+next),(g->g2),lengthOfSectionToMove);
+    next += g2_length(g);
+
+    if( primaryBitmapPresent(g) > 0 ) {
+      lengthOfSectionToMove = g3_length(g);
+      memcpy((buffer+next),(g->g3),lengthOfSectionToMove);
+      next += g3_length(g);
+    }
+
+    lengthOfSectionToMove = g4_length(g);
+    memcpy((buffer+next),(g->g4),lengthOfSectionToMove);
+    next += g4_length(g);
+
+    lengthOfSectionToMove = 4;
+    memcpy((buffer+next),"7777",lengthOfSectionToMove);
+
+    return (fortint) totalLength;
+  }
+}
+
+fortint ISTIME(gribProduct ** grib, fortint * HHMM ) {
+gribProduct * g = *grib;
+fortint hhmm = (fortint) (*HHMM);
+fortint hh = hhmm/100;
+fortint mm = MOD(hhmm,100);
+
+  if( DEBUG1 ) printf("ISTIME: HHMM = %d\n", *HHMM);
+
+  MOVE1BYTE(((g->g1)->hour),&hh);
+  MOVE1BYTE(((g)->g1->minute),&mm);
+
+  return 0;
+}
+
+fortint RSTIME(gribProduct ** grib, double * HHMM ) {
+fortint hhmm = (fortint) (*HHMM);
+
+  if( DEBUG1 ) printf("RSTIME: HHMM = %f\n", *HHMM);
+
+  return ISTIME(grib,&hhmm);
+}
+
+fortint ISDATE(gribProduct ** grib, fortint * YYYYMMDD ) {
+gribProduct * g = *grib;
+fortint yyyymmdd = *YYYYMMDD;
+fortint yyyy, mmdd, year, month, day, century;
+
+  if( DEBUG1 ) printf("ISDATE: YYYYMMDD = %d\n", yyyymmdd);
+
+  yyyy = yyyymmdd/10000;
+  mmdd = MOD(yyyymmdd,10000);
+  year = MOD(yyyy,100);
+  month = mmdd/100;
+  day = MOD(mmdd,100);
+  century = 1 + (yyyy/100);
+  if( year == 0 ) century -= 1;
+
+  MOVE1BYTE(((g->g1)->year),&year);
+  MOVE1BYTE(((g)->g1->month),&month);
+  MOVE1BYTE(((g)->g1->day),&day);
+  MOVE1BYTE(((g)->g1->century),&century);
+
+  return 0;
+}
+
+fortint RSDATE(gribProduct ** grib, double * YYYYMMDD ) {
+fortint yyyymmdd = (fortint) *YYYYMMDD;
+
+  if( DEBUG1 ) printf("RSDATE: YYYYMMDD = %f\n", *YYYYMMDD);
+
+  return ISDATE(grib,&yyyymmdd);
+}
+
+fortint ISTABLE(gribProduct ** grib, fortint * table) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISTABLE: table = %d\n", *table);
+
+  MOVE1BYTE(((g->g1)->tableVersionNumber),table);
+
+  return 0;
+}
+
+fortint RSTABLE(gribProduct ** grib, fortdouble * table) {
+gribProduct * g = *grib;
+fortint Table = (fortint) *table;
+
+  if( DEBUG1 ) printf("RSTABLE: table = %f\n", *table);
+
+  return ISTABLE(grib,&Table);
+}
+
+fortint ISCENTR(gribProduct ** grib, fortint * centre) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISCENTR: centre = %d\n", *centre);
+
+  MOVE1BYTE(((g->g1)->originatingCentre),centre);
+
+  return 0;
+}
+
+fortint RSCENTR(gribProduct ** grib, fortdouble * centre) {
+gribProduct * g = *grib;
+fortint Centre = (fortint) *centre;
+
+  if( DEBUG1 ) printf("RSCENTR: centre = %f\n", *centre);
+
+  return ISCENTR(grib,&Centre);
+}
+
+fortint ISPARAM(gribProduct ** grib, fortint * parameter) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISPARAM: parameter = %d\n", *parameter);
+
+  MOVE1BYTE(((g->g1)->parameter),parameter);
+
+  return 0;
+}
+
+fortint RSPARAM(gribProduct ** grib, fortdouble * parameter) {
+gribProduct * g = *grib;
+fortint Parameter = (fortint) *parameter;
+
+  if( DEBUG1 ) printf("RSPARAM: parameter = %f\n", *parameter);
+
+  return ISPARAM(grib,&Parameter);
+}
+
+fortint ISLEVTY(gribProduct ** grib, fortint * typeOfLevel) {
+gribProduct * g = *grib;
+fortint TypeOfLevel = *typeOfLevel;
+fortint zero =0;
+
+  if( DEBUG1 ) printf("ISLEVTY: typeOfLevel = %d\n", TypeOfLevel);
+
+  MOVE1BYTE(((g->g1)->typeOfLevel),typeOfLevel);
+
+  if( (TypeOfLevel < 20) ||
+      ((TypeOfLevel > 20) && (TypeOfLevel < 100)) ||
+      (TypeOfLevel == 102) ||
+      (TypeOfLevel == 118) ||
+      ((TypeOfLevel > 121) && (TypeOfLevel < 125)) ||
+      (TypeOfLevel == 126) ||
+      ((TypeOfLevel > 128) && (TypeOfLevel < 141)) ||
+      ((TypeOfLevel > 141) && (TypeOfLevel < 160)) ||
+      ((TypeOfLevel > 160) && (TypeOfLevel < 200)) ||
+      ((TypeOfLevel > 201) && (TypeOfLevel < 210)) ||
+      (TypeOfLevel > 210) ) {
+     MOVE2BYTES(((g->g1)->level1),&zero);
+   }
+
+  return 0;
+}
+
+fortint RSLEVTY(gribProduct ** grib, fortdouble * typeOfLevel) {
+gribProduct * g = *grib;
+fortint TypeOfLevel = (fortint) *typeOfLevel;
+
+  if( DEBUG1 ) printf("RSLEVTY: typeOfLevel = %f\n", *typeOfLevel);
+
+  return ISLEVTY(grib,&TypeOfLevel);
+}
+
+fortint ISLEVEL(gribProduct ** grib, fortint * level) {
+gribProduct * g = *grib;
+fortint zero = 0, bottomLayer, topLayer;
+
+  if( DEBUG1 ) printf("ISLEVEL: level = %d\n", *level);
+
+  switch( (int) g1_typeOfLevel(g) ) {
+
+    case  20:
+    case 100:
+    case 103:
+    case 105:
+    case 107:
+    case 109:
+    case 111:
+    case 113:
+    case 115:
+    case 117:
+    case 119:
+    case 125:
+    case 127:
+    case 160:
+    case 210:
+      if( DEBUG1 ) printf("ISLEVEL: two-byte level value\n");
+      MOVE2BYTES(((g->g1)->level1),level);
+      break;
+
+    case 101:
+    case 104:
+    case 106:
+    case 108:
+    case 110:
+    case 112:
+    case 114:
+    case 116:
+    case 120:
+    case 121:
+    case 128:
+    case 141:
+      if( DEBUG1 ) printf("ISLEVEL: top and bottom level values\n");
+      topLayer = (*level)/1000;
+      MOVE1BYTE(((g->g1)->level1),&topLayer);
+      bottomLayer = MOD((*level),1000);
+      MOVE1BYTE(((g->g1)->level2),&bottomLayer);
+      break;
+
+    default:
+      if( DEBUG1 ) printf("ISLEVEL: level value set to zero\n");
+      MOVE2BYTES(((g->g1)->level1),&zero);
+      break;
+  }
+
+
+  return 0;
+}
+
+fortint RSLEVEL(gribProduct ** grib, fortdouble * level) {
+gribProduct * g = *grib;
+fortint Level = (fortint) *level;
+
+  if( DEBUG1 ) printf("RSLEVEL: level = %f\n", *level);
+
+  return ISLEVEL(grib,&Level);
+}
+
+fortint ISTUNIT(gribProduct ** grib, fortint * timeUnit) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISTUNIT: timeUnit = %d\n", *timeUnit);
+
+  switch( (int) *timeUnit ) {
+
+  case 0:
+  case 1:
+  case 2:
+  case 3:
+  case 4:
+  case 5:
+  case 6:
+  case 7:
+  case 10:
+  case 11:
+  case 12:
+  case 254:
+    MOVE1BYTE(((g->g1)->unitOfTimeRange),timeUnit);
+    break;
+    return 0;
+
+  default:
+    if( DEBUG1 ) printf("ISTUNIT: invalid time unit\n");
+    return -1;
+  }
+
+}
+
+fortint RSTUNIT(gribProduct ** grib, fortdouble * timeUnit) {
+gribProduct * g = *grib;
+fortint TimeUnit = (fortint) *timeUnit;
+
+  if( DEBUG1 ) printf("RSTUNIT: timeUnit = %f\n", *timeUnit);
+
+  return ISTUNIT(grib,&TimeUnit);
+}
+
+fortint ISTRIND(gribProduct ** grib, fortint * timeRangeIndicator) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISTRIND: timeRangeIndicator = %d\n",*timeRangeIndicator);
+  MOVE1BYTE(((g->g1)->timeRangeIndicator),timeRangeIndicator);
+
+  return 0;
+}
+
+fortint RSTRIND(gribProduct ** grib, fortdouble * timeRangeIndicator) {
+gribProduct * g = *grib;
+fortint TimeRangeIndicator = (fortint) *timeRangeIndicator;
+
+  if( DEBUG1 ) printf("RSTRIND: timeRangeIndicator = %f\n",*timeRangeIndicator);
+
+  return ISTRIND(grib,&TimeRangeIndicator);
+}
+
+fortint ISSTEP(gribProduct ** grib, fortint * timeStep) {
+gribProduct * g = *grib;
+fortint zero = 0;
+
+  if( DEBUG1 ) printf("ISSTEP: timeStep = %d\n",*timeStep);
+
+  switch( (int) g1_timerange(g) ) {
+
+    case 0:
+      MOVE1BYTE(((g->g1)->P1),timeStep);
+      MOVE1BYTE(((g->g1)->P2),&zero);
+      return 0;
+
+    case 1:
+      MOVE1BYTE(((g->g1)->P1),&zero);
+      MOVE1BYTE(((g->g1)->P2),&zero);
+      return 0;
+
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 113:
+    case 114:
+    case 115:
+    case 116:
+    case 117:
+    case 118:
+    case 119:
+      printf("ISSTEP: time range indicator %d requires separate values for P1 and P2\n", g1_timerange(g));
+      return -1;
+
+    case 10:
+      MOVE2BYTES(((g->g1)->P1),timeStep);
+      return 0;
+
+    case 123:
+    case 124:
+      MOVE1BYTE(((g->g1)->P1),&zero);
+      MOVE1BYTE(((g->g1)->P2),timeStep);
+      return 0;
+
+    default:
+      printf("ISSTEP: unable to set step for reserved time range indicator %d\n", g1_timerange(g));
+      return -1;
+  }
+
+}
+
+fortint RSSTEP(gribProduct ** grib, fortdouble * timeStep) {
+gribProduct * g = *grib;
+fortint TimeStep = (fortint) *timeStep;
+
+  if( DEBUG1 ) printf("RSSTEP: timeStep = %f\n",*timeStep);
+
+  return ISSTEP(grib,&TimeStep);
+}
+
+fortint ISSTEP1(gribProduct ** grib, fortint * timeStepP1) {
+gribProduct * g = *grib;
+fortint zero = 0;
+
+  if( DEBUG1 ) printf("ISSTEP1: timeStepP1 = %d\n",*timeStepP1);
+
+  switch( (int) g1_timerange(g) ) {
+
+    case 0:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 113:
+    case 114:
+    case 115:
+    case 116:
+    case 117:
+    case 118:
+    case 119:
+      MOVE1BYTE(((g->g1)->P1),timeStepP1);
+      return 0;
+
+    case 1:
+    case 123:
+    case 124:
+      MOVE1BYTE(((g->g1)->P1),&zero);
+      return 0;
+
+    case 10:
+      MOVE2BYTES(((g->g1)->P1),timeStepP1);
+      return 0;
+
+    default:
+      printf("ISSTEP1: unable to set P1 for reserved time range indicator %d\n", g1_timerange(g));
+      return -1;
+  }
+
+}
+
+fortint RSSTEP1(gribProduct ** grib, fortdouble * timeStepP1) {
+gribProduct * g = *grib;
+fortint TimeStepP1 = (fortint) *timeStepP1;
+
+  if( DEBUG1 ) printf("RSSTEP1: timeStepP1 = %f\n",*timeStepP1);
+
+  return ISSTEP1(grib,&TimeStepP1);
+}
+
+fortint ISSTEP2(gribProduct ** grib, fortint * timeStepP2) {
+gribProduct * g = *grib;
+fortint zero = 0;
+
+  if( DEBUG1 ) printf("ISSTEP2: timeStepP2 = %d\n",*timeStepP2);
+
+  switch( (int) g1_timerange(g) ) {
+
+    case 0:
+    case 1:
+      MOVE1BYTE(((g->g1)->P2),&zero);
+      return 0;
+
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 113:
+    case 114:
+    case 115:
+    case 116:
+    case 117:
+    case 118:
+    case 119:
+    case 123:
+    case 124:
+      MOVE1BYTE(((g->g1)->P2),timeStepP2);
+      return 0;
+
+    case 10:
+      printf("ISSTEP2: unable to set P2 for time range indicator %d\n", g1_timerange(g));
+      return -1;
+
+    default:
+      printf("ISSTEP2: unable to set P2 for reserved time range indicator %d\n", g1_timerange(g));
+      return -1;
+  }
+
+}
+
+fortint RSSTEP2(gribProduct ** grib, fortdouble * timeStepP2) {
+gribProduct * g = *grib;
+fortint TimeStepP2 = (fortint) *timeStepP2;
+
+  if( DEBUG1 ) printf("RSSTEP2: timeStepP2 = %f\n",*timeStepP2);
+
+  return ISSTEP2(grib,&TimeStepP2);
+}
+
+fortint ISNUMAV(gribProduct ** grib, fortint * numberInAverage) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISNUMAV: numberInAverage = %d\n",*numberInAverage);
+
+  MOVE2BYTES(((g->g1)->numberInAverage),numberInAverage);
+  return 0;
+}
+
+fortint RSNUMAV(gribProduct ** grib, fortdouble * numberInAverage) {
+gribProduct * g = *grib;
+fortint NumberInAverage = (fortint) *numberInAverage;
+
+  if( DEBUG1 ) printf("RSNUMAV: numberInAverage = %f\n",*numberInAverage);
+
+  return ISNUMAV(grib,&NumberInAverage);
+
+}
+
+fortint ISNUMMS(gribProduct ** grib, fortint * numberMissing) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISNUMMS: numberMissing = %d\n",*numberMissing);
+
+  MOVE1BYTE(((g->g1)->numberMissing),numberMissing);
+  return 0;
+}
+
+fortint RSNUMMS(gribProduct ** grib, fortdouble * numberMissing) {
+gribProduct * g = *grib;
+fortint NumberMissing = (fortint) *numberMissing;
+
+  if( DEBUG1 ) printf("RSNUMMS: numberMissing = %f\n",*numberMissing);
+
+  return ISNUMMS(grib,&NumberMissing);
+}
+
+fortint ISSUBID(gribProduct ** grib, fortint * subCentreId) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISSUBID: subCentreId = %d\n",*subCentreId);
+
+  MOVE1BYTE(((g->g1)->subCentreId),subCentreId);
+  return 0;
+}
+
+fortint RSSUBID(gribProduct ** grib, fortdouble * subCentreId) {
+gribProduct * g = *grib;
+fortint SubCentreId = (fortint) *subCentreId;
+
+  if( DEBUG1 ) printf("RSSUBID: subCentreId = %f\n",*subCentreId);
+
+  return ISSUBID(grib,&SubCentreId);
+}
+
+fortint ISUDECF(gribProduct ** grib, fortint * decimalScale) {
+gribProduct * g = *grib;
+fortint scale = *decimalScale;
+
+  if( DEBUG1 ) printf("ISUDECF: decimalScale = %d\n",*decimalScale);
+
+  if( scale < 0 ) scale = (-scale) | 0x8000;
+  MOVE2BYTES(((g->g1)->unitsDecimalScaleFactor),&scale);
+  return 0;
+}
+
+fortint RSUDECF(gribProduct ** grib, fortdouble * decimalScale) {
+gribProduct * g = *grib;
+fortint DecimalScale = (fortint) *decimalScale;
+
+  if( DEBUG1 ) printf("RSUDECF: decimalScale = %f\n",*decimalScale);
+
+  return ISUDECF(grib,&DecimalScale);
+}
+
+fortint ISTYPE(gribProduct ** grib, fortint * ecmwfType) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISTYPE: ecmwfType = %d\n",*ecmwfType);
+
+  if( ecmwfLocalDefinitionPresent(g) ) {
+    MOVE1BYTE(((g->g1)->local.mars.type),ecmwfType);
+    return 0;
+  }
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) ) {
+    MOVE1BYTE(((g->g1)->local.mars.type),ecmwfType);
+    return 0;
+  }
+  else {
+    if( DEBUG1 ) printf("ISTYPE: no ECMWF local definition present\n");
+    return (fortint) -1;
+  }
+
+}
+
+fortint RSTYPE(gribProduct ** grib, fortdouble * ecmwfType) {
+gribProduct * g = *grib;
+fortint EcmwfType = (fortint) *ecmwfType;
+
+  if( DEBUG1 ) printf("RSTYPE: ecmwfType = %f\n",*ecmwfType);
+
+  return ISTYPE(grib,&EcmwfType);
+}
+
+fortint ISCLASS(gribProduct ** grib, fortint * ecmwfClass) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISCLASS: ecmwfClass = %d\n",*ecmwfClass);
+
+  if( ecmwfLocalDefinitionPresent(g) ) {
+    MOVE1BYTE(((g->g1)->local.mars.ecmwfClass),ecmwfClass);
+    return 0;
+  }
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) ) {
+    MOVE1BYTE(((g->g1)->local.mars.ecmwfClass),ecmwfClass);
+    return 0;
+  }
+  else {
+    if( DEBUG1 ) printf("ISCLASS: no ECMWF local definition present\n");
+    return (fortint) -1;
+  }
+
+}
+
+fortint RSCLASS(gribProduct ** grib, fortdouble * ecmwfClass) {
+gribProduct * g = *grib;
+fortint EcmwfClass = (fortint) *ecmwfClass;
+
+  if( DEBUG1 ) printf("RSCLASS: ecmwfClass = %f\n",*ecmwfClass);
+
+  return ISCLASS(grib,&EcmwfClass);
+}
+
+fortint ISSTREM(gribProduct ** grib, fortint * ecmwfStream) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISSTREM: ecmwfStream = %d\n",*ecmwfStream);
+
+  if( ecmwfLocalDefinitionPresent(g) ) {
+    MOVE2BYTES(((g->g1)->local.mars.stream),ecmwfStream);
+    return 0;
+  }
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) ) {
+    MOVE2BYTES(((g->g1)->local.mars.stream),ecmwfStream);
+    return 0;
+  }
+  else {
+    if( DEBUG1 ) printf("ISSTREM: no ECMWF local definition present\n");
+    return (fortint) -1;
+  }
+
+}
+
+fortint RSSTREM(gribProduct ** grib, fortdouble * ecmwfStream) {
+gribProduct * g = *grib;
+fortint EcmwfStream = (fortint) *ecmwfStream;
+
+  if( DEBUG1 ) printf("RSSTREM: ecmwfStream = %f\n",*ecmwfStream);
+
+  return ISSTREM(grib,&EcmwfStream);
+}
+
+fortint ISEXPVR(gribProduct ** grib, fortint * ecmwfExpver) {
+gribProduct * g = *grib;
+
+  if( DEBUG1 ) printf("ISEXPVR: ecmwfExpver = %d\n",*ecmwfExpver);
+
+  if( ecmwfLocalDefinitionPresent(g) ) {
+    MOVE4BYTES(((g->g1)->local.mars.experimentVersionNumber),ecmwfExpver);
+    return 0;
+  }
+
+  if(  centreUsingECMWFLocalDefinition((*grib)) ) {
+    MOVE4BYTES(((g->g1)->local.mars.experimentVersionNumber),ecmwfExpver);
+    return 0;
+  }
+  else {
+    if( DEBUG1 ) printf("ISEXPVR: no ECMWF local definition present\n");
+    return (fortint) -1;
+  }
+
+}
+
+fortint RSEXPVR(gribProduct ** grib, fortdouble * ecmwfExpver) {
+gribProduct * g = *grib;
+fortint EcmwfExpver = (fortint) *ecmwfExpver;
+gribSection1 * newG1;
+
+  if( DEBUG1 ) printf("RSEXPVR: ecmwfExpver = %f\n",*ecmwfExpver);
+
+  return ISEXPVR(grib,&EcmwfExpver);
+}
+
+fortint ISDEFIN(gribProduct ** grib, fortint * definitionNumber) {
+gribProduct * g = *grib;
+localDefinition * local;
+fortint length, oldCopyLength, loop;
+gribSection1 * newG1, * oldG1;
+
+  if( DEBUG1 ) printf("ISDEFIN: definitionNumber = %d\n",*definitionNumber);
+
+  if( DEBUG1 ) {
+    if(ecmwfLocalDefinitionPresent(g) ||  centreUsingECMWFLocalDefinition(g)) {
+      if( *definitionNumber == g1_definition(g) ) {
+        printf("ISDEFIN: definitionNumber already has the given value\n");
+      }
+      else {
+        printf("ISDEFIN: changing the ECMWF local definition from %d to %d\n",
+                g1_definition(g), *definitionNumber);
+      }
+    }
+    else
+      printf("ISDEFIN: creating a new ECMWF local definition\n");
+  }
+
+  length = (40 + sizeof(marsHeader));
+
+  switch( (int) *definitionNumber ) {
+
+    case 1:
+      length += sizeof(ECMWFdefinition1);
+      break;
+
+    case 2:
+      length += sizeof(ECMWFdefinition2);
+      break;
+
+    case 3:
+      length += sizeof(ECMWFdefinition3);
+      break;
+
+    case 5:
+      length += sizeof(ECMWFdefinition5);
+      break;
+
+    case 6:
+      length += sizeof(ECMWFdefinition6);
+      break;
+
+    case 7:
+      length += sizeof(ECMWFdefinition7);
+      break;
+
+    case 8:
+      length += sizeof(ECMWFdefinition8);
+      break;
+
+    case 9:
+      length += sizeof(ECMWFdefinition9);
+      break;
+
+    case 10:
+      length += sizeof(ECMWFdefinition10);
+      break;
+
+    case 11:
+      length += sizeof(ECMWFdefinition11);
+      break;
+
+    case 14:
+      length = 1080;
+      break;
+
+    case 15:
+      length = 60;
+      break;
+
+    case 16:
+      length = 80;
+      break;
+
+    case 18:
+    case 19:
+      length = 120;
+      break;
+
+    case 20:
+      length += sizeof(ECMWFdefinition20);
+      break;
+
+    case 50:
+      length = 300;
+      break;
+
+    default:
+      printf("ISDEFIN: ECMWF local definition from %d not yet handled\n",
+              *definitionNumber);
+      return -1;
+  }
+
+  newG1 = (gribSection1 *) allocateMemory(length);
+  {
+    unsigned char * p = (unsigned char * ) newG1;
+    for( loop = 40; loop < length; loop++ ) p[loop] = '\0';
+  }
+
+  if( ecmwfLocalDefinitionPresent(g) ||  centreUsingECMWFLocalDefinition(g) )
+    oldCopyLength = (40 + sizeof(marsHeader));
+  else
+    oldCopyLength = 40;
+
+  oldG1 = (gribSection1 *) (g->g1);
+  memcpy(newG1,oldG1,oldCopyLength);
+
+/*freeMemory(oldG1);*/
+  freeMemory(oldG1);
+
+  (g->g1) = newG1;
+  MOVE1BYTE(((g->g1)->local.mars.definition),definitionNumber);
+  MOVE3BYTES(((g->g1)->sectionLength),&length);
+  return 0;
+  
+}
+
+fortint RSDEFIN(gribProduct ** grib, fortdouble * definitionNumber) {
+gribProduct * g = *grib;
+fortint DefinitionNumber = (fortint) *definitionNumber;
+
+  if( DEBUG1 ) printf("RSDEFIN: definitionNumber = %f\n",*definitionNumber);
+
+  return ISDEFIN(grib,&DefinitionNumber);
+}
+
+fortint ISBTSPV(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISBTSPV: set number of bits per value to %d\n",*value);
+  MOVE1BYTE(((g->g4)->numberOfBitsPerValue),value);
+  return 0;
+}
+
+fortint RSBTSPV(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) *value;
+
+  if( DEBUG2) printf("RSBTSPV\n");
+  return ISBTSPV(grib,&Ivalue);
+}
+
+fortint ISREPRS(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value, defaultValue, loop;
+fortint zero = 0, ninety = 90000;
+unsigned char * p;
+
+  if( DEBUG1) printf("ISREPRS: set data representation type to %d\n",Value);
+
+/*
+//if( g2_datatype(g) == Value ) {
+//  if( DEBUG1) printf("ISREPRS: data representation type remains unchanged\n");
+//  return 0;
+//}
+*/
+  MOVE1BYTE(((g->g2)->NV),&zero);
+  defaultValue = 0xff;
+  MOVE1BYTE(((g->g2)->PV_PL),&defaultValue);
+
+  switch( (int) Value ) {
+
+    case 0:
+    case 10:
+    case 20:
+    case 30:
+      if( DEBUG1) printf("ISREPRS: setup for latitude/longitude grid\n");
+      MOVE1BYTE(((g->g2)->dataRepresentationType),value);
+
+      MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongParallel),&zero);
+      MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongMeridian),&zero);
+      g->northSouthNumberOfPointsSet = g->westEastNumberOfPointsSet = FALSE;
+
+      MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfFirstPoint),&ninety);
+      MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfFirstPoint),&zero);
+      defaultValue = ninety | 0x800000;
+      MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfLastPoint),&defaultValue);
+      defaultValue = 360000;
+      MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfLastPoint),&defaultValue);
+      g->northSet = g->southSet = g->westSet = g->eastSet = TRUE;
+
+      defaultValue = 0x80;
+      MOVE1BYTE(((g->g2)->grid.latlon.resolutionAndComponentsFlag),&defaultValue);
+      MOVE2BYTES(((g->g2)->grid.latlon.iDirectionIncrement),&zero);
+      MOVE2BYTES(((g->g2)->grid.latlon.jDirectionIncrement),&zero);
+      g->northSouthIncrementSet = g->westEastIncrementSet = FALSE;
+
+      MOVE1BYTE(((g->g2)->grid.latlon.scanningMode),&zero);
+      MOVE4BYTES(((g->g2)->grid.latlon.setToZero),&zero);
+
+      defaultValue = ninety | 0x800000;
+      MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfSouthPole),&defaultValue);
+      MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfSouthPole),&zero);
+      MOVE4BYTES(((g->g2)->grid.latlon.angleOfRotationOrStretchingFactor),&zero);
+      MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfPoleOfStretching),&zero);
+      MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfPoleOfStretching),&zero);
+      MOVE4BYTES(((g->g2)->grid.latlon.stretchingFactor),&zero);
+      break;
+
+    case 50:
+    case 60:
+    case 70:
+    case 80:
+      if( DEBUG1) printf("ISREPRS: setup for spherical harmonics\n");
+      MOVE1BYTE(((g->g2)->dataRepresentationType),value);
+      MOVE2BYTES(((g->g2)->grid.spectral.J),&zero);
+      MOVE2BYTES(((g->g2)->grid.spectral.K),&zero);
+      MOVE2BYTES(((g->g2)->grid.spectral.M),&zero);
+      defaultValue = 1;
+      MOVE1BYTE(((g->g2)->grid.spectral.representationType),&defaultValue);
+      MOVE1BYTE(((g->g2)->grid.spectral.representationMode),&defaultValue);
+      p = (unsigned char *) &((g->g2)->grid.spectral.setToZero);
+      for( loop = 0; loop < 18; loop++ ) { MOVE1BYTE(p,&zero); p++; }
+      defaultValue = ninety | 0x800000;
+      MOVE3BYTES(((g->g2)->grid.spectral.latitudeOfSouthPole),&defaultValue);
+      MOVE3BYTES(((g->g2)->grid.spectral.longitudeOfSouthPole),&zero);
+      MOVE4BYTES(((g->g2)->grid.spectral.angleOfRotationOrStretchingFactor),&zero);
+      MOVE3BYTES(((g->g2)->grid.spectral.latitudeOfPoleOfStretching),&zero);
+      MOVE3BYTES(((g->g2)->grid.spectral.longitudeOfPoleOfStretching),&zero);
+      MOVE4BYTES(((g->g2)->grid.spectral.stretchingFactor),&zero);
+      break;
+
+    case  4:
+    case 14:
+    case 24:
+    case 34:
+      if( DEBUG1) printf("ISREPRS: setup for gaussian grids\n");
+      MOVE1BYTE(((g->g2)->dataRepresentationType),value);
+
+      MOVE2BYTES(((g->g2)->grid.gaussian.numberOfPointsAlongParallel),&zero);
+      MOVE2BYTES(((g->g2)->grid.gaussian.numberOfPointsAlongMeridian),&zero);
+      g->northSouthNumberOfPointsSet = g->westEastNumberOfPointsSet = FALSE;
+
+      MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfFirstPoint),&ninety);
+      MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfFirstPoint),&zero);
+      defaultValue = ninety | 0x800000;
+      MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfLastPoint),&defaultValue);
+      defaultValue = 360000;
+      MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfLastPoint),&defaultValue);
+      g->northSet = g->southSet = g->westSet = g->eastSet = TRUE;
+
+      defaultValue = 0x80;
+      MOVE1BYTE(((g->g2)->grid.gaussian.resolutionAndComponentsFlag),&defaultValue);
+      MOVE2BYTES(((g->g2)->grid.gaussian.iDirectionIncrement),&zero);
+      MOVE2BYTES(((g->g2)->grid.gaussian.numberOfParallelsBetweenPoleAndEquator),&zero);
+      g->northSouthIncrementSet = g->westEastIncrementSet = FALSE;
+
+      MOVE1BYTE(((g->g2)->grid.gaussian.scanningMode),&zero);
+      MOVE4BYTES(((g->g2)->grid.gaussian.setToZero),&zero);
+
+      defaultValue = ninety | 0x800000;
+      MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfSouthPole),&defaultValue);
+      MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfSouthPole),&zero);
+      MOVE4BYTES(((g->g2)->grid.gaussian.angleOfRotationOrStretchingFactor),&zero);
+      MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfPoleOfStretching),&zero);
+      MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfPoleOfStretching),&zero);
+      MOVE4BYTES(((g->g2)->grid.gaussian.stretchingFactor),&zero);
+      break;
+
+    default:
+      if( DEBUG1) printf("ISREPRS: data representation type not yet handled\n");
+      break;
+  }
+
+  return 0;
+}
+
+fortint RSREPRS(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) *value;
+  if( DEBUG2) printf("RSREPRS\n");
+  return ISREPRS(grib,&Ivalue);
+}
+
+fortint ISNWLAT(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISNWLAT: value = %d\n", Value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+  MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfFirstPoint),&Value);
+  g->northSet = TRUE;
+  adjustGridAreaDefinition(g,(int)NORTH);
+  return 0;
+}
+
+fortint RSNWLAT(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("ISNWLAT\n");
+  return ISNWLAT(grib,&Ivalue);
+}
+
+fortint ISNWLON(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISNWLON: value = %d\n", Value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+  MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfFirstPoint),&Value);
+  g->westSet = TRUE;
+  adjustGridAreaDefinition(g,(int)WEST);
+  return 0;
+}
+
+fortint RSNWLON(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("ISNWLON\n");
+  return ISNWLON(grib,&Ivalue);
+}
+
+fortint ISSELAT(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISSELAT: value = %d\n", Value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+  MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfLastPoint),&Value);
+  g->southSet = TRUE;
+  adjustGridAreaDefinition(g,(int)SOUTH);
+  return 0;
+}
+
+fortint RSSELAT(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("ISSELAT\n");
+  return ISSELAT(grib,&Ivalue);
+}
+
+fortint ISSELON(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISSELON: value = %d\n", Value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+  MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfLastPoint),&Value);
+  g->eastSet = TRUE;
+  adjustGridAreaDefinition(g,(int)EAST);
+  return 0;
+}
+
+fortint RSSELON(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("ISSELON\n");
+  return ISSELON(grib,&Ivalue);
+}
+
+fortint ISDI(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISDI: value = %d\n", *value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  MOVE2BYTES(((g->g2)->grid.latlon.iDirectionIncrement), value);
+  g->westEastIncrementSet = TRUE;
+  adjustGridAreaDefinition(g,(int)W_E_INC);
+  return 0;
+}
+
+fortint RSDI(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSDI\n");
+  return ISDI(grib,&Ivalue);
+}
+
+fortint ISDJ(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISDJ: value = %d\n", *value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  MOVE2BYTES(((g->g2)->grid.latlon.jDirectionIncrement), value);
+  g->northSouthIncrementSet = TRUE;
+  adjustGridAreaDefinition(g,(int)N_S_INC);
+  return 0;
+}
+
+fortint RSDJ(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSDJ\n");
+  return ISDJ(grib,&Ivalue);
+}
+
+fortint ISDIJ(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISDIJ: value = %d\n", *value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  ISDI(grib,value);
+  ISDJ(grib,value);
+  return 0;
+}
+
+fortint RSDIJ(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSDIJ\n");
+  return ISDIJ(grib,&Ivalue);
+}
+
+fortint ISNJ(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISNJ: value = %d\n", *value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongMeridian), value);
+  g->northSouthNumberOfPointsSet = TRUE;
+  adjustGridAreaDefinition(g,(int)N_S_PTS);
+  return 0;
+}
+
+fortint RSNJ(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("ISNJ\n");
+  return ISNJ(grib,&Ivalue);
+}
+
+fortint ISNI(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISNI: value = %d\n", *value);
+  if( !generalLatLonGrid(g) ) return 0;
+
+  MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongParallel), value);
+  g->westEastNumberOfPointsSet = TRUE;
+  adjustGridAreaDefinition(g,(int)W_E_PTS);
+  return 0;
+}
+
+fortint RSNI(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("ISNI\n");
+  return ISNI(grib,&Ivalue);
+}
+
+fortint ISJ(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint truncation = *value;
+
+  if( DEBUG2) printf("ISJ value = %d\n", truncation);
+  if( anySpectralField(g) ) {
+    MOVE2BYTES(((g->g2)->grid.spectral.J),value);
+    g->numberOfValues = (truncation+1) * (truncation+2);
+  }
+  return 0;
+}
+
+fortint RSJ(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSJ value = %f\n", *value);
+  return ISJ(grib,&Ivalue);
+}
+
+fortint ISK(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISK value = %d\n", *value);
+  if( anySpectralField(g) ) MOVE2BYTES(((g->g2)->grid.spectral.K),value);
+  return 0;
+}
+
+fortint RSK(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSK value = %f\n", *value);
+  return ISK(grib,&Ivalue);
+}
+
+fortint ISM(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISM value = %d\n", *value);
+  if( anySpectralField(g) ) MOVE2BYTES(((g->g2)->grid.spectral.M),value);
+  return 0;
+}
+
+fortint RSM(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSM value = %f\n", *value);
+  return ISM(grib,&Ivalue);
+}
+
+fortint ISJKM(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISJKM value = %d\n", *value);
+  ISJ(grib,value);
+  ISK(grib,value);
+  ISM(grib,value);
+  return 0;
+}
+
+fortint RSJKM(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSJKM value = %f\n", *value);
+  return ISJKM(grib,&Ivalue);
+}
+
+fortint ISTJ(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISTJ value = %d\n", *value);
+  if( anyComplexPackedSpectralField(g) )
+    MOVE1BYTE(((g->g4)->data.complexSpectral.J),value);
+  return 0;
+}
+
+fortint RSTJ(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSTJ value = %f\n", *value);
+  return ISTJ(grib,&Ivalue);
+}
+
+fortint ISTK(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISTK value = %d\n", *value);
+  if( anyComplexPackedSpectralField(g) )
+    MOVE1BYTE(((g->g4)->data.complexSpectral.K),value);
+  return 0;
+}
+
+fortint RSTK(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSTK value = %f\n", *value);
+  return ISTK(grib,&Ivalue);
+}
+
+fortint ISTM(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISTM value = %d\n", *value);
+  if( anyComplexPackedSpectralField(g) )
+    MOVE1BYTE(((g->g4)->data.complexSpectral.M),value);
+  return 0;
+}
+
+fortint RSTM(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSTM value = %f\n", *value);
+  return ISTM(grib,&Ivalue);
+}
+
+fortint ISTJKM(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+  if( DEBUG2) printf("ISTJKM value = %d\n", *value);
+  ISTJ(grib,value);
+  ISTK(grib,value);
+  ISTM(grib,value);
+  return 0;
+}
+
+fortint RSTJKM(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value);
+  if( DEBUG2) printf("RSTJKM value = %f\n", *value);
+  return ISTJKM(grib,&Ivalue);
+}
+
+fortint ISLATRP(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISLATRP: value = %d\n", Value);
+  if( !generalRotatedGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+  MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfSouthPole),&Value);
+  return 0;
+}
+
+fortint RSLATRP(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSLATRP\n");
+  return ISLATRP(grib,&Ivalue);
+}
+
+fortint ISLONRP(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISLONRP: value = %d\n", Value);
+  if( !generalRotatedGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+  MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfSouthPole),&Value);
+  return 0;
+}
+
+fortint RSLONRP(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSLONRP\n");
+  return ISLONRP(grib,&Ivalue);
+}
+
+fortint RSROTAT(gribProduct ** grib, fortdouble * value) {
+gribProduct * g = *grib;
+fortint valueExponent, valueMantissa, numberOfBitsPerInteger;
+fortint status;
+
+  if( DEBUG2) printf("RSROTAT: value = %f\n", *value);
+  if( !generalRotatedGrid(g) ) return 0;
+
+  numberOfBitsPerInteger = sizeof(fortint) * 8;
+  status = REF2GRB(value,&valueExponent,
+                   &valueMantissa,&numberOfBitsPerInteger);
+  if( status ) {
+    printf("RSROTAT: call to REF2GRB failed\n");
+    exit(1);
+  }
+  MOVE1BYTE(((g->g2)->grid.latlon.angleOfRotationOrStretchingFactor),&valueExponent);
+  MOVE3BYTES((((g->g2)->grid.latlon.angleOfRotationOrStretchingFactor)+1),&valueMantissa);
+  return 0;
+}
+
+fortint ISROTAT(gribProduct ** grib, fortint * value) {
+fortdouble Value = ((fortdouble) *value) / 1000.0;
+  if( DEBUG2) printf("ISROTAT: value = %d\n", *value);
+  return RSROTAT(grib,&Value);
+}
+
+fortint ISLATSP(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISLATSP: value = %d\n", Value);
+  if( !generalStretchedGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+
+  if( generalStretchedAndRotatedGrid(g) )
+    MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfPoleOfStretching),&Value);
+  else
+    MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfSouthPole),&Value);
+
+  return 0;
+}
+
+fortint RSLATSP(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSLATSP\n");
+  return ISLATSP(grib,&Ivalue);
+}
+
+fortint ISLONSP(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint Value = *value;
+  if( DEBUG2) printf("ISLONSP: value = %d\n", Value);
+  if( !generalStretchedGrid(g) ) return 0;
+
+  if( Value < 0 ) Value = 0x800000 | (-Value);
+
+  if( generalStretchedAndRotatedGrid(g) )
+    MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfPoleOfStretching),&Value);
+  else
+    MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfSouthPole),&Value);
+
+  return 0;
+}
+
+fortint RSLONSP(gribProduct ** grib, fortdouble * value) {
+fortint Ivalue = (fortint) (*value * 1000.0);
+  if( DEBUG2) printf("RSLONSP\n");
+  return ISLONSP(grib,&Ivalue);
+}
+
+fortint RSSFACT(gribProduct ** grib, fortdouble * value) {
+gribProduct * g = *grib;
+fortint valueExponent, valueMantissa, numberOfBitsPerInteger;
+fortint status;
+
+  if( DEBUG2) printf("RSSFACT: value = %f\n", *value);
+  if( !generalStretchedGrid(g) ) return 0;
+
+  numberOfBitsPerInteger = sizeof(fortint) * 8;
+  status = REF2GRB(value,&valueExponent,
+                   &valueMantissa,&numberOfBitsPerInteger);
+  if( status ) {
+    printf("RSSFACT: call to REF2GRB failed\n");
+    exit(1);
+  }
+
+  if( generalStretchedAndRotatedGrid(g) ) {
+    MOVE1BYTE(((g->g2)->grid.latlon.stretchingFactor),&valueExponent);
+    MOVE3BYTES((((g->g2)->grid.latlon.stretchingFactor)+1),&valueMantissa);
+  }
+  else {
+    MOVE1BYTE(((g->g2)->grid.latlon.angleOfRotationOrStretchingFactor),&valueExponent);
+    MOVE3BYTES((((g->g2)->grid.latlon.angleOfRotationOrStretchingFactor)+1),&valueMantissa);
+  }
+  return 0;
+}
+
+fortint ISSFACT(gribProduct ** grib, fortint * value) {
+fortdouble Value = ((fortdouble) *value) / 1000.0;
+  if( DEBUG2) printf("ISSFACT: value = %d\n", *value);
+  return RSSFACT(grib,&Value);
+}
+
+fortint ISSETQG(gribProduct ** grib, fortint * value) {
+gribProduct * g = *grib;
+fortint northToSouth;
+fortint number = (*value), missing = 0xffff, zero = 0;
+fortdouble * gaussianLatitudes;
+fortint * countOfPointsAtLatitudes;
+fortint total, loop, status, one = 1, coordinate;
+unsigned char htype[2] = "R";
+fortdouble lastLongitude;
+gribSection2 * newSection2;
+fortint newSection2Size, listOffset, count;
+unsigned char * p;
+
+  if( DEBUG2) printf("ISSETQG: reduced gaussian number = %d\n", *value);
+
+  if( !anyGaussianGrid(g) ) return 0;
+/*
+//if( number == g2_gaussNumber(g) ) return 0;
+*/
+
+  MOVE2BYTES(((g->g2)->grid.gaussian.numberOfPointsAlongParallel),&missing);
+  northToSouth = number * 2;
+  MOVE2BYTES(((g->g2)->grid.gaussian.numberOfPointsAlongMeridian),&northToSouth);
+
+  MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfFirstPoint),&zero);
+
+  MOVE1BYTE(((g->g2)->grid.gaussian.resolutionAndComponentsFlag),&zero);
+
+  MOVE2BYTES(((g->g2)->grid.gaussian.iDirectionIncrement),&missing);
+  MOVE2BYTES(((g->g2)->grid.gaussian.numberOfParallelsBetweenPoleAndEquator),
+             &number);
+  MOVE1BYTE(((g->g2)->grid.gaussian.scanningMode),&zero);
+
+  MOVE4BYTES(((g->g2)->grid.gaussian.setToZero),&zero);
+  MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfSouthPole),&zero);
+  MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfSouthPole),&zero);
+  MOVE4BYTES(((g->g2)->grid.gaussian.angleOfRotationOrStretchingFactor),&zero);
+  MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfPoleOfStretching),&zero);
+  MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfPoleOfStretching),&zero);
+  MOVE4BYTES(((g->g2)->grid.gaussian.stretchingFactor),&zero);
+
+  gaussianLatitudes =
+                 (fortdouble *) allocateMemory(northToSouth*sizeof(fortdouble));
+  countOfPointsAtLatitudes =
+                 (fortint *) allocateMemory(northToSouth*sizeof(fortint));
+  JGETGG(&number,htype,gaussianLatitudes,countOfPointsAtLatitudes,&status,
+         (long)one);
+  if( status ) {
+    printf("ISSETQG: JGETGG failed for gaussian number %d\n",number);
+    exit(1);
+  }
+
+  coordinate = (fortint) ((0.0005 + gaussianLatitudes[0])*1000.0);
+  MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfFirstPoint),&coordinate);
+
+  coordinate = 0x800000 | coordinate;
+  MOVE3BYTES(((g->g2)->grid.gaussian.latitudeOfLastPoint),&coordinate);
+
+  freeMemory(gaussianLatitudes);
+
+  lastLongitude = 360.0 - (360/(fortdouble)countOfPointsAtLatitudes[number-1]);
+  coordinate = (fortint) (lastLongitude * 1000.0);
+  if( coordinate < 0 ) coordinate = 0x800000 | (-coordinate);
+  MOVE3BYTES(((g->g2)->grid.gaussian.longitudeOfLastPoint),&coordinate);
+
+  switch( (int) g2_datatype(g) ) {
+
+    case  4:
+      listOffset = 32;
+      break;
+
+    case 14:
+    case 24:
+      listOffset = 42;
+      break;
+
+    case 34:
+      listOffset = 52;
+      break;
+
+    default:
+      printf("ISSETQG: unexpected gaussian representation type = %d\n",
+             g2_datatype(g));
+      exit(1);
+  }
+  listOffset += g2_NV(g) * 4;
+
+  newSection2Size = listOffset + (northToSouth * 2);
+  newSection2 = (gribSection2 *) allocateMemory(newSection2Size);
+  memcpy(newSection2,(g->g2),sizeof(gribSection2));
+
+  total = 0;
+  p = (unsigned char *) newSection2;
+  p += listOffset;
+  for(loop=0;loop<northToSouth;loop++) {
+    count = countOfPointsAtLatitudes[loop];
+    total += count;
+    MOVE2BYTES(p,&count);
+    p +=2;
+  }
+  g->numberOfValues = total;
+  freeMemory((g->g2));
+  g->g2 = newSection2;
+
+  MOVE3BYTES(((g->g2)->sectionLength),&newSection2Size);
+  listOffset++;
+  MOVE1BYTE(((g->g2)->PV_PL),&listOffset);
+
+  return 0;
+}
+
+fortint RSSETQG(gribProduct ** grib, fortdouble * value) {
+fortint Value = (fortint) *value;
+  if( DEBUG2) printf("RSSETQG\n");
+  return ISSETQG(grib,&Value);;
+}
+
+fortint ISSETRG(gribProduct ** grib, fortint * value) {
+  if( DEBUG2) printf("ISSETRG: regular gaussian number = %d\n", *value);
+  return 0;
+}
+
+fortint RSSETRG(gribProduct ** grib, fortdouble * value) {
+  if( DEBUG2) printf("RSSETRG\n");
+  return 0;
+}
+
+fortint ISDUMMY(gribProduct ** grib, fortint * value) {
+  if( DEBUG2) printf("ISDUMMY\n");
+  return 0;
+}
+
+fortint RSDUMMY(gribProduct ** grib, fortdouble * value) {
+  if( DEBUG2) printf("RSDUMMY\n");
+  return 0;
+}
+
+fortint SVALUES(
+  gribProduct ** grib,
+  fortdouble * arrayOfUnpackedValues,
+  fortint * arraySize,
+  fortdouble * userSuppliedMissingValue ) {
+gribProduct * g = *grib;
+fortint loop, startValue, lengthOfSection3;
+fortint N, numberOfUnpackedValues, nextNonMissingValue = 0;
+fortint numberOfValues, numberOfMissingValues = 0;
+fortdouble missingValue = *userSuppliedMissingValue;
+fortdouble value, maximum, minimum, truncation;
+unsigned char * bitmap, * section3;
+
+  if( DEBUG1 ) printf("SVALUES\n");
+/*
+// Calculate the number of points from the GRIB headers
+*/
+  numberOfUnpackedValues = g->numberOfValues;
+  if( DEBUG1 )
+    printf("SVALUES: numberOfUnpackedValues = %d\n",numberOfUnpackedValues);
+
+  if( numberOfUnpackedValues <= 0 ) {
+    printf("SVALUES: grib headers not sufficiently configured for packing\n"); 
+    return -1;
+  }
+
+  if( numberOfUnpackedValues > *arraySize ) {
+    printf(
+     "SVALUES: calculated number of values (%d) greater than array size(%d)\n",
+      numberOfUnpackedValues, *arraySize);
+    return -1;
+  }
+
+  N = numberOfUnpackedValues;
+/*
+// For gridpoint fields, it may be necessary to create a bitmap if
+// there are missing data values
+*/
+  if( !anySpectralField(g) ) {
+    if( DEBUG1 ) printf("SVALUES: gridpoint field\n");
+    lengthOfSection3 = (6+(N+7)/8);
+    if( MOD(lengthOfSection3,2) == 1 ) lengthOfSection3++;
+    section3 = (unsigned char *) allocateMemory(lengthOfSection3);
+    bitmap = section3 + 6;
+    for( loop = 0; loop < (N+7)/8; loop++) bitmap[loop] = 0;
+
+    maximum = minimum = arrayOfUnpackedValues[0];
+    for( loop = 0; loop < N; loop++) {
+      value = arrayOfUnpackedValues[loop];
+      if( value == missingValue ) {
+        numberOfMissingValues++;
+      }
+      else {
+        setBitMap(bitmap,loop);
+        if( (value < minimum) || (minimum == missingValue) ) {
+          minimum = value;
+        }
+        if( (value > maximum) || (maximum == missingValue) ) {
+          maximum = value;
+        }
+      }
+    }
+/*
+// Create section 3 if there is a bitmap
+*/
+    if( numberOfMissingValues > 0 ) {
+      fortint numberOfUnusedBits = (lengthOfSection3-6)*8 - N;
+      fortint zero = 0;
+
+      if( DEBUG1 ) printf("SVALUES: create section 3 bitmap\n");
+
+      g->bitmapped = 1;
+      freeMemory(g->g3);
+      g->g3 = (gribSection3 *) section3;
+      MOVE3BYTES((g->g3)->sectionLength,&lengthOfSection3);
+      MOVE1BYTE((g->g3)->numberOfUnusedBits,&numberOfUnusedBits);
+      MOVE2BYTES((g->g3)->tableReference,&zero);
+      *((g->g1)->section2and3PresentFlag) |= 0x40;
+/*
+//    Repack the input array, leaving out the missing data
+*/
+      nextNonMissingValue = 0;
+      for( loop = 0; loop < N; loop++) {
+        if( arrayOfUnpackedValues[loop] != missingValue )
+          arrayOfUnpackedValues[nextNonMissingValue++] =
+            arrayOfUnpackedValues[loop];
+      }
+    }
+    else {
+	g->bitmapped = 0;
+	*((g->g1)->section2and3PresentFlag) &= 0xbf;
+      freeMemory(section3);
+    }
+    numberOfValues = N - numberOfMissingValues;
+
+    if( simplePacking(g) ) {
+      fortint estimatedSizeOfSection4;
+      unsigned char * section4;
+      fortint status, lengthOfSection4, numberOfUnusedBits;
+      fortint referenceValueExponent, referenceValueMantissa;
+      fortint numberOfBitsPerPackedValue, numberOfBitsPerInteger;
+      fortint firstCoefficientExponent, firstCoefficientMantissa;
+      fortint integerScale = 0;
+      fortdouble range = maximum - minimum;
+      fortdouble realScale = 1.0;
+      fortint numberOfValuesToScale, startOfPackedValueBits;
+      fortint * arrayOfScaledValues;
+
+      if( DEBUG1 ) printf("SVALUES: gridpoint field with simple packing\n");
+
+      estimatedSizeOfSection4 = 512+(N*sizeof(fortint)*8+7)/8;
+      section4 = (unsigned char *) allocateMemory(estimatedSizeOfSection4);
+
+
+      numberOfBitsPerPackedValue = g4_bits(g);
+      numberOfBitsPerInteger = sizeof(fortint) * 8;
+      if( numberOfBitsPerPackedValue == numberOfBitsPerInteger)
+        numberOfBitsPerPackedValue--;
+
+      if( PRACTICALLYZERO(range) )
+        integerScale = 0;
+      else
+        if( (minimum != 0) && PRACTICALLYZERO(range/minimum) ){
+          integerScale = 0;
+        }
+        else
+          if( PRACTICALLYZERO(range-1.0) )
+            integerScale = 1 - numberOfBitsPerPackedValue;
+          else
+            if( range > 1.0 ) {
+              for( loop = 1; loop < 128; loop++ ) {
+                realScale *= 2.0;
+                if( realScale > (range + SMALL) ) {
+                  integerScale = loop - numberOfBitsPerPackedValue;
+                  break;
+                }
+              }
+            }
+            else {
+              for( loop = 1; loop < 127; loop++ ) {
+                realScale /= 2.0;
+                if( realScale < (range - SMALL) ) {
+                  integerScale = 1 - loop - numberOfBitsPerPackedValue;
+                  break;
+                }
+              } 
+            }
+
+      realScale = (fortdouble) pow((double)2.0,(double)integerScale);
+      if( integerScale < 0 ) integerScale = 0x8000 | (-integerScale);
+      MOVE2BYTES((section4+4),&integerScale);
+
+      status = REF2GRB(&minimum,&referenceValueExponent,
+                       &referenceValueMantissa,&numberOfBitsPerInteger);
+      if( status ) {
+        printf("SVALUES: call to REF2GRB failed\n");
+        return -1;
+      }
+      MOVE1BYTE((section4+6),&referenceValueExponent);
+      MOVE3BYTES((section4+7),&referenceValueMantissa);
+
+      MOVE1BYTE((section4+10),&numberOfBitsPerPackedValue);
+ 
+      status = REF2GRB(&arrayOfUnpackedValues[0],&firstCoefficientExponent,
+                       &firstCoefficientMantissa,&numberOfBitsPerInteger);
+      if( status ) {
+        printf("SVALUES: call to REF2GRB failed\n");
+        return -1;
+      }
+      MOVE1BYTE((section4+11),&firstCoefficientExponent);
+      MOVE3BYTES((section4+12),&firstCoefficientMantissa);
+
+      numberOfValuesToScale = numberOfValues;
+      arrayOfScaledValues =
+        (fortint *) allocateMemory(numberOfValuesToScale*sizeof(fortint));
+
+      INSCAL(&arrayOfUnpackedValues[0],arrayOfScaledValues,
+             &numberOfValuesToScale,&minimum,&realScale,
+             &numberOfBitsPerPackedValue);
+
+      startOfPackedValueBits = 88;
+      lengthOfSection4 = estimatedSizeOfSection4/sizeof(fortint);
+      INXBIT((fortint*)section4,&lengthOfSection4,
+             &startOfPackedValueBits,arrayOfScaledValues,
+             &numberOfValuesToScale,&numberOfBitsPerInteger,
+             &numberOfBitsPerPackedValue,"C",&status,(long)1);
+      if( status ) {
+        printf("SVALUES: call to INXBIT failed\n");
+        return -1;
+      }
+      freeMemory(arrayOfScaledValues);
+
+      lengthOfSection4 = (startOfPackedValueBits + 7)/8;
+      if( MOD(lengthOfSection4,2) == 1 ) lengthOfSection4++;
+      MOVE3BYTES(section4,&lengthOfSection4);
+
+      numberOfUnusedBits = lengthOfSection4*8 - startOfPackedValueBits;
+      if( !floatingPoint(g) ) numberOfUnusedBits |= 0x20;
+      MOVE1BYTE((section4+3),&numberOfUnusedBits);
+
+      freeMemory(g->g4);
+      g->g4 = (gribSection4 *) section4;
+    }
+    else {
+printf("Second order packing not yet handled!\n");
+      return -1;
+    }
+    return 0;
+  }
+
+/*
+// Spherical harmonics
+*/
+  if( anySpectralField(g) && floatingPoint(g) ) {
+    fortint estimatedSizeOfSection4;
+    unsigned char * section4;
+
+    estimatedSizeOfSection4 = 512+(N*sizeof(fortint)*8+7)/8;
+    section4 = (unsigned char *) allocateMemory(estimatedSizeOfSection4);
+
+    if( simplePacking(g) )
+      startValue = 1;
+    else
+      startValue = 0;
+    maximum = minimum = arrayOfUnpackedValues[startValue];
+    for( loop = startValue; loop < N; loop++) {
+      value = arrayOfUnpackedValues[loop];
+      if( (value < minimum) || (minimum == missingValue) ) {
+        minimum = value;
+      }
+      if( (value > maximum) || (maximum == missingValue) ) {
+        maximum = value;
+      }
+    }
+
+/*
+// If complex packing required, use GRIBEX routines GRSMKP and CSECT4
+*/
+    if( !simplePacking(g) ) {
+      fortint * ksec1, * ksec4;
+      fortint ktrunc, kleng, knspt, status, adjustment;
+      fortint numberOfBitsPerInteger, numberOfBitsPerPackedValue;
+
+      if( DEBUG1 ) printf("SVALUES: spectral field with complex packing\n");
+
+      ksec1 = (fortint *) allocateMemory(1024*sizeof(fortint));
+      for( loop = 0; loop < 1024; loop++) ksec1[loop] = 0;
+
+      ksec4 = (fortint *) allocateMemory(512*sizeof(fortint));
+      for( loop = 0; loop < 512; loop++) ksec4[loop] = 0;
+
+      ksec1[22] = g1_scale(g);
+
+      ksec4[ 1] = g4_bits(g);
+      ksec4[16] = g4_ip(g);
+      ksec4[17] = g4_j(g); 
+      ksec4[18] = g4_k(g); 
+      ksec4[19] = g4_m(g); 
+
+      ktrunc = g2_J(g);
+      kleng  = (estimatedSizeOfSection4+sizeof(fortint)-1)/sizeof(fortint);
+      knspt  = 0;
+      numberOfBitsPerInteger  = sizeof(fortint) * 8;
+      numberOfBitsPerPackedValue  = g4_bits(g);
+
+      {
+        fortint forceComputation = 1;
+        GRSMKP(&forceComputation);
+      }
+      status = CSECT4(arrayOfUnpackedValues,&ktrunc,ksec1,ksec4,
+                      (fortint *)section4,&kleng,&knspt,
+                      &numberOfBitsPerInteger,&numberOfBitsPerPackedValue);
+      if( status ) {
+        printf("SVALUES: call to CSECT4 failed\n");
+        return -1;
+      }
+/*
+// NB. Adjust the octet number at which first-order packed data begins
+//     to be consistent with an ECMWF bug.
+*/
+      adjustment = TWOBYTEINT(section4+11);
+      adjustment += 8 + g1_length(g) + g2_length(g);
+      MOVE2BYTES((section4+11),&adjustment);
+
+      freeMemory(g->g4);
+      g->g4 = (gribSection4 *) section4;
+    }
+/*
+// Simple packing required
+*/
+    else {
+      fortint status, lengthOfSection4, numberOfUnusedBits;
+      fortint referenceValueExponent, referenceValueMantissa;
+      fortint numberOfBitsPerPackedValue, numberOfBitsPerInteger;
+      fortint firstCoefficientExponent, firstCoefficientMantissa;
+      fortint integerScale = 0;
+      fortdouble range = maximum - minimum;
+      fortdouble realScale = 1.0;
+      fortint numberOfValuesToScale, startOfPackedValueBits;
+      fortint * arrayOfScaledValues;
+
+      if( DEBUG1 ) printf("SVALUES: spectral field with simple packing\n");
+
+      numberOfBitsPerPackedValue = g4_bits(g);
+      numberOfBitsPerInteger = sizeof(fortint) * 8;
+      if( numberOfBitsPerPackedValue == numberOfBitsPerInteger)
+        numberOfBitsPerPackedValue--;
+
+      if( PRACTICALLYZERO(range) )
+        integerScale = 0;
+      else
+        if( (minimum != 0) && PRACTICALLYZERO(range/minimum) )
+          integerScale = 0;
+        else
+          if( PRACTICALLYZERO(range-1.0) )
+            integerScale = 1 - numberOfBitsPerPackedValue;
+          else
+            if( range > 1.0 ) {
+              for( loop = 1; loop < 128; loop++ ) {
+                realScale *= 2.0;
+                if( realScale > (range + SMALL) ) {
+                  integerScale = loop - numberOfBitsPerPackedValue;
+                  break;
+                }
+              }
+            }
+            else {
+              for( loop = 1; loop < 127; loop++ ) {
+                realScale /= 2.0;
+                if( realScale < (range - SMALL) ) {
+                  integerScale = 1 - loop - numberOfBitsPerPackedValue;
+                  break;
+                }
+              } 
+            }
+
+      realScale = (fortdouble) pow((double)2.0,(double)integerScale);
+      if( integerScale < 0 ) integerScale = 0x8000 | (-integerScale);
+      MOVE2BYTES((section4+4),&integerScale);
+
+      status = REF2GRB(&minimum,&referenceValueExponent,
+                       &referenceValueMantissa,&numberOfBitsPerInteger);
+      if( status ) {
+        printf("SVALUES: call to REF2GRB failed\n");
+        return -1;
+      }
+      MOVE1BYTE((section4+6),&referenceValueExponent);
+      MOVE3BYTES((section4+7),&referenceValueMantissa);
+
+      MOVE1BYTE((section4+10),&numberOfBitsPerPackedValue);
+ 
+      status = REF2GRB(&arrayOfUnpackedValues[0],&firstCoefficientExponent,
+                       &firstCoefficientMantissa,&numberOfBitsPerInteger);
+      if( status ) {
+        printf("SVALUES: call to REF2GRB failed\n");
+        return -1;
+      }
+      MOVE1BYTE((section4+11),&firstCoefficientExponent);
+      MOVE3BYTES((section4+12),&firstCoefficientMantissa);
+
+      numberOfValuesToScale = N - 1;
+      arrayOfScaledValues =
+        (fortint *) allocateMemory(numberOfValuesToScale*sizeof(fortint));
+
+      INSCAL(&arrayOfUnpackedValues[1],arrayOfScaledValues,
+             &numberOfValuesToScale,&minimum,&realScale,
+             &numberOfBitsPerPackedValue);
+
+      startOfPackedValueBits = 120;
+      lengthOfSection4 = estimatedSizeOfSection4/sizeof(fortint);
+      INXBIT((fortint*)section4,&lengthOfSection4,
+             &startOfPackedValueBits,arrayOfScaledValues,
+             &numberOfValuesToScale,&numberOfBitsPerInteger,
+             &numberOfBitsPerPackedValue,"C",&status,(long)1);
+      if( status ) {
+        printf("SVALUES: call to INXBIT failed\n");
+        return -1;
+      }
+      freeMemory(arrayOfScaledValues);
+
+      lengthOfSection4 = (startOfPackedValueBits + 7)/8;
+      if( MOD(lengthOfSection4,2) == 1 ) lengthOfSection4++;
+      MOVE3BYTES(section4,&lengthOfSection4);
+
+      numberOfUnusedBits = lengthOfSection4*8 - startOfPackedValueBits;
+      numberOfUnusedBits |= 0x80;
+      MOVE1BYTE((section4+3),&numberOfUnusedBits);
+
+      freeMemory(g->g4);
+      g->g4 = (gribSection4 *) section4;
+    }
+  }
+  else {
+    if( DEBUG1 ) printf("SVALUES: gridpoint field\n");
+  }
+  return 0;
+}
+
+void setBitMap(unsigned char * bitmap, fortint bitNumber ) {
+fortint byteOffset = (bitNumber>>3);
+fortint bitOffset = bitNumber - (byteOffset<<3);
+
+  bitmap[byteOffset] |= (0x80>>bitOffset);
+}
+
+void adjustGridAreaDefinition(gribProduct* g, int type) {
+fortdouble north, south, west, east, increment;
+fortint value, numberOfPoints ;
+
+  switch( type) {
+
+    case NORTH:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new north given\n");
+      north = RGNWLAT(&g);
+      if( g->southSet ) {
+        south = RGSELAT(&g);
+        if( g->northSouthIncrementSet ) {
+          increment   = RGDJ(&g);
+          numberOfPoints = (fortint) (0.5 + (north-south)/increment) + 1;
+          MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongMeridian),
+                     &numberOfPoints);
+          g->northSouthNumberOfPointsSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: numberOfPoints set = %d\n",
+                    numberOfPoints);
+        }
+        else if( g->northSouthNumberOfPointsSet ) {
+          numberOfPoints = IGNJ(&g) - 1;
+          increment = (north-south)/(fortdouble) numberOfPoints;
+          value = (fortint) (increment * 1000.0);
+          MOVE2BYTES(((g->g2)->grid.latlon.jDirectionIncrement),&value);
+          g->northSouthIncrementSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: north-south increment set = %f\n",
+                    increment);
+        }
+      }
+      else {
+        if( g->northSouthIncrementSet && g->northSouthNumberOfPointsSet ) {
+          increment   = RGDJ(&g);
+          numberOfPoints = IGNJ(&g) - 1;
+          south = north - increment * (fortdouble) numberOfPoints;
+          value = (fortint) (south * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfLastPoint),&value);
+          g->southSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: south set = %f\n", south);
+        }
+      }
+      break;
+
+    case SOUTH:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new south given\n");
+      south = RGSELAT(&g);
+      if( g->northSet ) {
+        north = RGNWLAT(&g);
+        if( g->northSouthIncrementSet ) {
+          increment   = RGDJ(&g);
+          numberOfPoints = (fortint) (0.5 + (north-south)/increment) + 1;
+          MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongMeridian),
+                     &numberOfPoints);
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: numberOfPoints set = %d\n",
+                    numberOfPoints);
+        }
+        else if( g->northSouthNumberOfPointsSet ) {
+          numberOfPoints = IGNJ(&g) - 1;
+          increment = (north-south)/(fortdouble) numberOfPoints;
+          value = (fortint) (increment * 1000.0);
+          MOVE2BYTES(((g->g2)->grid.latlon.jDirectionIncrement),&value);
+          g->northSouthIncrementSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: north-south increment set = %f\n",
+                    increment);
+        }
+      }
+      else {
+        if( g->northSouthIncrementSet && g->northSouthNumberOfPointsSet ) {
+          increment   = RGDJ(&g);
+          numberOfPoints = IGNJ(&g) - 1;
+          north = south + increment * (fortdouble) numberOfPoints;
+          value = (fortint) (north * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfFirstPoint),&value);
+          g->northSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: north set = %f\n", north);
+        }
+      }
+      break;
+
+    case WEST:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new west given\n");
+      west = RGNWLON(&g);
+      if( g->eastSet ) {
+        east = RGSELON(&g);
+        if( g->westEastIncrementSet ) {
+          increment   = RGDI(&g);
+          if( ALMOSTZERO(east - west - 360.0) )
+            numberOfPoints = (fortint) (0.5 + (east-west)/increment);
+          else
+            numberOfPoints = (fortint) (0.5 + (east-west)/increment) + 1;
+          MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongParallel),
+                     &numberOfPoints);
+          g->westEastNumberOfPointsSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: numberOfPoints set = %d\n",
+                    numberOfPoints);
+        }
+        else if( g->westEastNumberOfPointsSet ) {
+          numberOfPoints = IGNI(&g) - 1;
+/*
+//        Test for longitude wraparound
+*/
+          if( ALMOSTZERO(east - west - 360.0) ) numberOfPoints++;
+          increment = (east-west)/(fortdouble) numberOfPoints;
+          value = (fortint) (increment * 1000.0);
+          MOVE2BYTES(((g->g2)->grid.latlon.iDirectionIncrement),&value);
+          g->westEastIncrementSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: west-east increment set = %f\n",
+                    increment);
+        }
+      }
+      else {
+        if( g->westEastIncrementSet && g->westEastNumberOfPointsSet ) {
+          increment   = RGDI(&g);
+          numberOfPoints = IGNI(&g) - 1;
+          east = west + increment * (fortdouble) numberOfPoints;
+          value = (fortint) (east * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfLastPoint),&value);
+          g->eastSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: east set = %f\n", east);
+        }
+      }
+      break;
+
+    case EAST:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new east given\n");
+      east = RGSELON(&g);
+      if( g->westSet ) {
+        west = RGNWLON(&g);
+        if( g->westEastIncrementSet ) {
+          increment   = RGDI(&g);
+          if( ALMOSTZERO(east - west - 360.0) )
+            numberOfPoints = (fortint) (0.5 + (east-west)/increment);
+          else
+            numberOfPoints = (fortint) (0.5 + (east-west)/increment) + 1;
+          MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongParallel),
+                     &numberOfPoints);
+          g->westEastNumberOfPointsSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: numberOfPoints set = %d\n",
+                    numberOfPoints);
+        }
+        else if( g->westEastNumberOfPointsSet ) {
+          numberOfPoints = IGNI(&g) - 1;
+/*
+//        Test for longitude wraparound
+*/
+          if( ALMOSTZERO(east - west - 360.0) ) numberOfPoints++;
+          increment = (east-west)/(fortdouble) numberOfPoints;
+          value = (fortint) (increment * 1000.0);
+          MOVE2BYTES(((g->g2)->grid.latlon.iDirectionIncrement),&value);
+          g->westEastIncrementSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: west-east increment set = %f\n",
+                    increment);
+        }
+      }
+      else {
+        if( g->westEastIncrementSet && g->westEastNumberOfPointsSet ) {
+          increment   = RGDI(&g);
+          numberOfPoints = IGNI(&g);
+          west = east - increment * (fortdouble) numberOfPoints;
+          value = (fortint) (west * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfFirstPoint),&value);
+          g->westSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: west set = %f\n", west);
+        }
+      }
+      break;
+
+    case W_E_INC:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new west-east increment given\n");
+      increment = RGDI(&g);
+      if( g->westSet ) {
+        west = RGNWLON(&g);
+        if( g->eastSet ) {
+          east = RGSELON(&g);
+          if( ALMOSTZERO(east - west - 360.0) )
+            numberOfPoints = (fortint) (0.5 + (east-west)/increment);
+          else
+            numberOfPoints = (fortint) (0.5 + (east-west)/increment) + 1;
+          MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongParallel),
+                     &numberOfPoints);
+          g->westEastNumberOfPointsSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: numberOfPoints set = %d\n",
+                    numberOfPoints);
+        }
+        else if( g->westEastNumberOfPointsSet ) {
+          numberOfPoints = IGNI(&g);
+          east = west + increment *(fortdouble) numberOfPoints;
+          value = (fortint) (east * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfLastPoint),&value);
+          g->eastSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: east set = %f\n", east);
+        }
+      }
+      else {
+        if( g->eastSet && g->westEastNumberOfPointsSet ) {
+          east = RGSELON(&g);
+          numberOfPoints = IGNI(&g);
+          west = east - increment * (fortdouble) numberOfPoints;
+          value = (fortint) (west * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfFirstPoint),&value);
+          g->westSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: west set = %f\n", west);
+        }
+      }
+      break;
+
+    case N_S_INC:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new north-south increment given\n");
+      increment = RGDJ(&g);
+      if( g->northSet ) {
+        north = RGNWLAT(&g);
+        if( g->southSet ) {
+          south = RGSELAT(&g);
+          numberOfPoints = (fortint) (0.5 + (north-south)/increment) + 1;
+          MOVE2BYTES(((g->g2)->grid.latlon.numberOfPointsAlongMeridian),
+                     &numberOfPoints);
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: numberOfPoints set = %d\n",
+                    numberOfPoints);
+        }
+        else if( g->northSouthNumberOfPointsSet ) {
+          numberOfPoints = IGNJ(&g) - 1;
+          south = north - increment *(fortdouble) numberOfPoints;
+          value = (fortint) (south * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfLastPoint),&value);
+          g->southSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: south set = %f\n", south);
+        }
+      }
+      else {
+        if( g->southSet && g->northSouthNumberOfPointsSet ) {
+          south = RGSELAT(&g);
+          numberOfPoints = IGNJ(&g);
+          north = south + increment *(fortdouble) numberOfPoints;
+          value = (fortint) (north * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfFirstPoint),&value);
+          g->northSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: north set = %f\n", north);
+        } 
+      }
+      break;
+
+    case W_E_PTS:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new west-east number of points given\n");
+      numberOfPoints = IGNI(&g);
+      if( g->westSet ) {
+        west = RGNWLON(&g);
+        if( g->eastSet ) {
+          east = RGSELON(&g);
+          if( ALMOSTZERO(east - west - 360.0) ) numberOfPoints--;
+          increment = (east-west)/(fortdouble)numberOfPoints;
+          value = (fortint) (increment * 1000.0);
+          MOVE2BYTES(((g->g2)->grid.latlon.iDirectionIncrement),&value);
+          g->westEastIncrementSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: west-east increment set = %f\n",
+                    increment);
+        }
+        else if( g->westEastIncrementSet ) {
+          increment   = RGDI(&g);
+          east = west + increment *(fortdouble) numberOfPoints;
+          if( (east - west) > 360.0 ) east -= increment;
+          value = (fortint) (east * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfLastPoint),&value);
+          g->eastSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: east set = %f\n", east);
+        }
+      }
+      else {
+        if( g->eastSet && g->westEastIncrementSet ) {
+          east = RGSELON(&g);
+          increment   = RGDI(&g);
+          west = east - increment *(fortdouble) numberOfPoints;
+          if( (east - west) > 360.0 ) east += increment;
+          value = (fortint) (west * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.longitudeOfFirstPoint),&value);
+          g->westSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: west set = %f\n", west);
+        } 
+      }
+      break;
+
+    case N_S_PTS:
+      if( DEBUG2 ) printf("adjustGridAreaDefinition: new north-south number of points given\n");
+      numberOfPoints = IGNJ(&g) - 1;
+      if( g->northSet ) {
+        north = RGNWLAT(&g);
+        if( g->southSet ) {
+          south = RGSELAT(&g);
+          increment = (north-south)/(fortdouble)numberOfPoints;
+          value = (fortint) (increment * 1000.0);
+          MOVE2BYTES(((g->g2)->grid.latlon.jDirectionIncrement),&value);
+          g->northSouthIncrementSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: north-south increment set = %f\n", increment);
+        }
+        else if( g->northSouthIncrementSet ) {
+          increment   = RGDJ(&g);
+          south = north - increment *(fortdouble) numberOfPoints;
+          value = (fortint) (south * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfLastPoint),&value);
+          g->southSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: south set = %f\n", south);
+        }
+      }
+      else {
+        if( g->southSet && g->northSouthIncrementSet ) {
+          south = RGSELAT(&g);
+          increment   = RGDJ(&g);
+          north = south + increment *(fortdouble) numberOfPoints;
+          value = (fortint) (north * 1000.0);
+          if( value < 0 ) value = 0x800000 | (-value);
+          MOVE3BYTES(((g->g2)->grid.latlon.latitudeOfFirstPoint),&value);
+          g->northSet = TRUE;
+          if( DEBUG2 )
+            printf("adjustGridAreaDefinition: north set = %f\n", north);
+        } 
+      }
+      break;
+
+    default:
+      printf("adjustGridAreaDefinition: not yet implemented\n");
+      break;
+
+  }
+
+  g->numberOfValues = g2_ni(g) * g2_nj(g);
+  return;
+}
+
+fortint SPV(gribProduct** grib, fortdouble* list, fortint* sizeList) {
+gribProduct * g = *grib;
+fortint section2Size, requiredMemory, listOffset, numberOfRows;
+fortint numberOfNewCoordinates = *sizeList;
+gribSection2 * newG2;
+fortint numberOfOldCoordinates, number, loop;
+unsigned char * nextValue, * newLocation, * newCoordinateLocation;
+fortint exponent, mantissa, numberOfBitsPerInteger;
+fortdouble nextCoordinate;
+
+/*
+// Ensure there is enough memory to accomodate the list of vertical coordinates
+*/
+  section2Size = g2_length(g);
+  requiredMemory = section2Size - g2_NV(g)*4 + numberOfNewCoordinates*4;
+
+  if( requiredMemory > section2Size ) {
+    newG2 = (gribSection2 *) allocateMemory(requiredMemory);
+    memcpy(newG2,(g->g2),section2Size);
+    freeMemory((g->g2));
+    (g->g2) = newG2;
+  }
+  MOVE3BYTES(((g->g2)->sectionLength),&requiredMemory);
+
+  switch( (int) g2_datatype(g) ) {
+
+    case  0:
+    case  4:
+    case  5:
+    case 50:
+      listOffset = 32;
+      break;
+
+    case  1:
+    case  3:
+    case  6:
+    case  8:
+    case 10:
+    case 13:
+    case 14:
+    case 20:
+    case 24:
+    case 60:
+    case 70:
+      listOffset = 42;
+      break;
+
+    case 30:
+    case 34:
+    case 80:
+      listOffset = 52;
+      break;
+
+    case 90:
+      listOffset = 44;
+      break;
+
+    default:
+      printf("SPV: does not handle representation type = %d\n",
+             g2_datatype(g));
+      exit(1);
+  }
+/*
+// Move the list of the number of points at each latitude if it is a
+// reduced grid.
+*/
+  numberOfRows = g2_nj(g);
+
+  if( !directionIncrementsGiven(g) &&  (numberOfRows != 0) ) {
+
+    numberOfOldCoordinates = g2_NV(g);
+
+    if( numberOfOldCoordinates < numberOfNewCoordinates ) {
+      nextValue = numberOfRows*2 +
+        (unsigned char*)(g->g2) + g2_PV_PL(g) + numberOfOldCoordinates*4 - 1;
+      newLocation = numberOfRows*2 +
+        (unsigned char*)(g->g2) + listOffset + numberOfNewCoordinates*4;
+      for( loop = numberOfRows; loop >= 0; loop-- ) {
+        number = TWOBYTEINT(nextValue);
+        nextValue -= 2;
+        MOVE2BYTES(newLocation,&number);
+        newLocation -= 2;
+      }
+    }
+    else {
+{
+fortint temp;
+temp = g2_PV_PL(g);
+printf("********************* g2_PV_PL(g) = %d\n",temp);
+}
+      nextValue =
+        (unsigned char*)(g->g2) + g2_PV_PL(g) + numberOfOldCoordinates*4 - 1;
+      newLocation =
+        (unsigned char*)(g->g2) + listOffset + numberOfNewCoordinates*4;
+      for( loop = 0; loop < numberOfRows; loop++ ) {
+        number = TWOBYTEINT(nextValue);
+        nextValue += 2;
+        MOVE2BYTES(newLocation,&number);
+        newLocation += 2;
+      }
+    }
+  }
+/*
+// Add the vertical coordinates
+*/
+  newCoordinateLocation = (unsigned char*)(g->g2) + listOffset;
+  numberOfBitsPerInteger = sizeof(fortint) * 8;
+
+  for( loop = 0; loop < numberOfNewCoordinates; loop++) {
+    nextCoordinate = list[loop];
+    if( REF2GRB(&nextCoordinate,&exponent,&mantissa,&numberOfBitsPerInteger) ) {
+      printf("SPV: call to REF2GRB failed\n");
+      exit(1);
+    }
+    MOVE1BYTE(newCoordinateLocation,&exponent);
+    MOVE3BYTES((newCoordinateLocation+1),&mantissa);
+    newCoordinateLocation += 4;
+  }
+  MOVE1BYTE(((g->g2)->NV),&numberOfNewCoordinates);
+  listOffset++;
+  MOVE1BYTE(((g->g2)->PV_PL),&listOffset);
+
+}
diff --git a/gribex/sencode.h b/gribex/sencode.h
new file mode 100755
index 0000000..ead4a07
--- /dev/null
+++ b/gribex/sencode.h
@@ -0,0 +1,63 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef SENCODE_H
+#define SENCODE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fortint.h"
+/*sinisa #include "getsetValues.h" */
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define SENCODE sencode
+#define SENPACK senpack
+#define RSTIME  rstime
+#define ISTIME  istime
+#define RSDATE  rsdate
+#define ISDATE  isdate
+#define SVALUES svalues
+#define SPV     spv
+#define CSECT4  csect4
+#define GRSMKP  grsmkp
+#define REF2GRB ref2grb
+#define INSCAL  inscal
+#define INXBIT  inxbit
+#define JGETGG  jgetgg
+#else
+#define SENCODE sencode_
+#define SENPACK senpack_
+#define RSTIME  rstime_
+#define ISTIME  istime_
+#define RSDATE  rsdate_
+#define ISDATE  isdate_
+#define SVALUES svalues_
+#define SPV     spv_
+#define CSECT4  csect4_
+#define GRSMKP  grsmkp_
+#define REF2GRB ref2grb_
+#define INSCAL  inscal_
+#define INXBIT  inxbit_
+#define JGETGG  jgetgg_
+#endif
+
+#endif /* End of SENCODE_H */
+
+fortint SVALUES(gribProduct**,fortdouble*,fortint*,fortdouble*);
+fortint CSECT4(fortdouble*,fortint*,fortint*,fortint*,fortint*,fortint*,
+               fortint*,fortint*,fortint*);
+void GRSMKP(fortint*);
+fortint REF2GRB(fortdouble*,fortint*,fortint*,fortint*);
+void INSCAL(fortdouble*,fortint*,fortint*,fortdouble*,fortdouble*,fortint*);
+void INXBIT(fortint*,fortint*,fortint*,fortint*,fortint*,fortint*,fortint*,
+            char*,fortint*,long);
+void JGETGG(fortint*,unsigned char*,fortdouble*,fortint*,fortint*,long);
+
+void setBitMap(unsigned char*,fortint);
diff --git a/gribex/sencode1.c b/gribex/sencode1.c
new file mode 100755
index 0000000..d1801cf
--- /dev/null
+++ b/gribex/sencode1.c
@@ -0,0 +1,45 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "gdecode.h"
+#include "sencode.h"
+
+#include "sencode1.h"
+
+fortint IS1NUMB(gribProduct ** grib, fortint * number) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==1) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def1.number),number);
+  return 0;
+}
+
+fortint RS1NUMB(gribProduct ** grib, fortdouble *number) {
+fortint Number = (fortint) *number;
+  return IS1NUMB(grib,&Number);
+}
+
+fortint IS1TOTL(gribProduct ** grib, fortint * total) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==1) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def1.total),total);
+  return 0;
+}
+
+fortint RS1TOTL(gribProduct ** grib, fortdouble *total) {
+fortint Total = (fortint) *total;
+  return IS1TOTL(grib,&Total);
+}
diff --git a/gribex/sencode1.h b/gribex/sencode1.h
new file mode 100755
index 0000000..71e47a0
--- /dev/null
+++ b/gribex/sencode1.h
@@ -0,0 +1,31 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef SENCODE1_H
+#define SENCODE1_H
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define IS1NUMB is1numb
+#define RS1NUMB rs1numb
+#define IS1TOTL is1totl
+#define RS1TOTL rs1totl
+#else
+#define IS1NUMB is1numb_
+#define RS1NUMB rs1numb_
+#define IS1TOTL is1totl_
+#define RS1TOTL rs1totl_
+#endif
+
+fortint IS1NUMB(gribProduct **, fortint *);
+fortint RS1NUMB(gribProduct **, fortdouble *);
+fortint IS1TOTL(gribProduct **, fortint *);
+fortint RS1TOTL(gribProduct **, fortdouble *);
+
+#endif /* end of SENCODE1_H */
diff --git a/gribex/sencode2.c b/gribex/sencode2.c
new file mode 100755
index 0000000..34907f7
--- /dev/null
+++ b/gribex/sencode2.c
@@ -0,0 +1,223 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "gdecode.h"
+#include "sencode.h"
+
+#include "sencode2.h"
+
+fortint IS2NUMB(gribProduct ** grib, fortint * number) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def2.number),number);
+  return 0;
+}
+
+fortint RS2NUMB(gribProduct ** grib, fortdouble *number) {
+fortint Number = (fortint) *number;
+  return IS2NUMB(grib,&Number);
+}
+
+fortint IS2TOTL(gribProduct ** grib, fortint * total) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def2.total),total);
+  return 0;
+}
+
+fortint RS2TOTL(gribProduct ** grib, fortdouble *total) {
+fortint Total = (fortint) *total;
+  return IS2TOTL(grib,&Total);
+}
+
+fortint IS2METH(gribProduct ** grib, fortint * method) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def2.method),method);
+  return 0;
+}
+
+fortint RS2METH(gribProduct ** grib, fortdouble *method) {
+fortint Method = (fortint) *method;
+  return IS2METH(grib,&Method);
+}
+
+fortint IS2STAR(gribProduct ** grib, fortint * startTimestep) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE2BYTES(((g->g1)->local.contents.def2.startTimestep),startTimestep);
+  return 0;
+}
+
+fortint RS2STAR(gribProduct ** grib, fortdouble *startTimestep) {
+fortint StartTimestep = (fortint) *startTimestep;
+  return IS2STAR(grib,&StartTimestep);
+}
+
+fortint IS2END(gribProduct ** grib, fortint * endTimestep) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE2BYTES(((g->g1)->local.contents.def2.endTimestep),endTimestep);
+  return 0;
+}
+
+fortint RS2END(gribProduct ** grib, fortdouble *endTimestep) {
+fortint EndTimestep = (fortint) *endTimestep;
+  return IS2END(grib,&EndTimestep);
+}
+
+fortint IS2NLAT(gribProduct ** grib, fortint * domainNorthLatitude) {
+gribProduct * g = *grib;
+fortint value = *domainNorthLatitude;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(((g->g1)->local.contents.def2.domainNorthLatitude),&value);
+  return 0;
+}
+
+fortint RS2NLAT(gribProduct ** grib, fortdouble *domainNorthLatitude) {
+fortint DomainNorthLatitude = (fortint) (*domainNorthLatitude*1000.0);
+  return IS2NLAT(grib,&DomainNorthLatitude);
+}
+
+fortint IS2WLON(gribProduct ** grib, fortint * domainWestLongitude) {
+gribProduct * g = *grib;
+fortint value = *domainWestLongitude;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(((g->g1)->local.contents.def2.domainWestLongitude),&value);
+  return 0;
+}
+
+fortint RS2WLON(gribProduct ** grib, fortdouble *domainWestLongitude) {
+fortint DomainWestLongitude = (fortint) (*domainWestLongitude*1000.0);
+  return IS2WLON(grib,&DomainWestLongitude);
+}
+
+fortint IS2SLAT(gribProduct ** grib, fortint * domainSouthLatitude) {
+gribProduct * g = *grib;
+fortint value = *domainSouthLatitude;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(((g->g1)->local.contents.def2.domainSouthLatitude),&value);
+  return 0;
+}
+
+fortint RS2SLAT(gribProduct ** grib, fortdouble *domainSouthLatitude) {
+fortint DomainSouthLatitude = (fortint) (*domainSouthLatitude*1000.0);
+  return IS2SLAT(grib,&DomainSouthLatitude);
+}
+
+fortint IS2ELON(gribProduct ** grib, fortint * domainEastLongitude) {
+gribProduct * g = *grib;
+fortint value = *domainEastLongitude;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  if( value < 0 ) value = 0x800000 | (-value);
+  MOVE3BYTES(((g->g1)->local.contents.def2.domainEastLongitude),&value);
+  return 0;
+}
+
+fortint RS2ELON(gribProduct ** grib, fortdouble *domainEastLongitude) {
+fortint DomainEastLongitude = (fortint) (*domainEastLongitude*1000.0);
+  return IS2ELON(grib,&DomainEastLongitude);
+}
+
+fortint IS2OPCL(gribProduct ** grib, fortint * operationalForecastCluster) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def2.operationalForecastCluster),operationalForecastCluster);
+    return 0;
+}
+
+fortint RS2OPCL(gribProduct ** grib, fortdouble *operationalForecastCluster) {
+fortint OperationalForecastCluster = (fortint) *operationalForecastCluster;
+  return IS2OPCL(grib,&OperationalForecastCluster);
+}
+
+fortint IS2CFCL(gribProduct ** grib, fortint * controlForecastCluster) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def2.controlForecastCluster),controlForecastCluster);
+    return 0;
+}
+
+fortint RS2CFCL(gribProduct ** grib, fortdouble *controlForecastCluster) {
+fortint ControlForecastCluster = (fortint) *controlForecastCluster;
+  return IS2CFCL(grib,&ControlForecastCluster);
+}
+
+fortint IS2NUCL(gribProduct ** grib, fortint * numberInCluster) {
+gribProduct * g = *grib;
+
+  if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
+    return (fortint) -1;
+
+  MOVE1BYTE(((g->g1)->local.contents.def2.numberInCluster),numberInCluster);
+    return 0;
+}
+
+fortint RS2NUCL(gribProduct ** grib, fortdouble *numberInCluster) {
+fortint NumberInCluster = (fortint) *numberInCluster;
+  return IS2NUCL(grib,&NumberInCluster);
+}
+
+fortint IS2LIST(gribProduct ** grib, fortint * array, fortint * size) {
+gribProduct * g = *grib;
+fortint loop, listLength;
+unsigned char * p;
+
+  if( !ecmwfLocalDefinition2Present(g) ) return -1;
+
+  listLength =  g1_2_count(g);
+  if( listLength > *size ) return -1;
+
+  p = (unsigned char *) ((g->g1)->local.contents.def2.forecastNumberList);
+  for( loop = 0; loop < listLength; loop++ ) {
+    MOVE1BYTE(p,(array+loop));
+    p++;
+  }
+
+  return listLength;
+
+}
diff --git a/gribex/sencode2.h b/gribex/sencode2.h
new file mode 100755
index 0000000..4362006
--- /dev/null
+++ b/gribex/sencode2.h
@@ -0,0 +1,94 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef SENCODE2_H
+#define SENCODE2_H
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define IS2NUMB is2numb
+#define RS2NUMB rs2numb
+#define IS2TOTL is2totl
+#define RS2TOTL rs2totl
+#define IS2METH is2meth
+#define RS2METH rs2meth
+#define IS2STAR is2star
+#define RS2STAR rs2star
+#define IS2END  is2end
+#define RS2END  rs2end
+#define IS2NLAT is2nlat
+#define RS2NLAT rs2nlat
+#define IS2WLON is2wlon
+#define RS2WLON rs2wlon
+#define IS2SLAT is2slat
+#define RS2SLAT rs2slat
+#define IS2ELON is2elon
+#define RS2ELON rs2elon
+#define IS2OPCL is2opcl
+#define RS2OPCL rs2opcl
+#define RS2CFCL rs2cfcl
+#define IS2CFCL is2cfcl
+#define RS2NUCL rs2nucl
+#define IS2NUCL is2nucl
+#define IS2LIST is2list
+#else
+#define IS2NUMB is2numb_
+#define RS2NUMB rs2numb_
+#define IS2TOTL is2totl_
+#define RS2TOTL rs2totl_
+#define IS2METH is2meth_
+#define RS2METH rs2meth_
+#define IS2STAR is2star_
+#define RS2STAR rs2star_
+#define IS2END  is2end_
+#define RS2END  rs2end_
+#define IS2NLAT is2nlat_
+#define RS2NLAT rs2nlat_
+#define IS2WLON is2wlon_
+#define RS2WLON rs2wlon_
+#define IS2SLAT is2slat_
+#define RS2SLAT rs2slat_
+#define IS2ELON is2elon_
+#define RS2ELON rs2elon_
+#define IS2OPCL is2opcl_
+#define RS2OPCL rs2opcl_
+#define RS2CFCL rs2cfcl_
+#define IS2CFCL is2cfcl_
+#define RS2NUCL rs2nucl_
+#define IS2NUCL is2nucl_
+#define IS2LIST is2list_
+#endif
+
+fortint IS2NUMB(gribProduct **, fortint *);
+fortint RS2NUMB(gribProduct **, fortdouble *);
+fortint IS2TOTL(gribProduct **, fortint *);
+fortint RS2TOTL(gribProduct **, fortdouble *);
+fortint IS2METH(gribProduct **, fortint *);
+fortint RS2METH(gribProduct **, fortdouble *);
+fortint IS2STAR(gribProduct **, fortint *);
+fortint RS2STAR(gribProduct **, fortdouble *);
+fortint IS2END(gribProduct **, fortint *);
+fortint RS2END(gribProduct **, fortdouble *);
+fortint IS2NLAT(gribProduct **, fortint *);
+fortint RS2NLAT(gribProduct **, fortdouble *);
+fortint IS2WLON(gribProduct **, fortint *);
+fortint RS2WLON(gribProduct **, fortdouble *);
+fortint IS2SLAT(gribProduct **, fortint *);
+fortint RS2SLAT(gribProduct **, fortdouble *);
+fortint IS2ELON(gribProduct **, fortint *);
+fortint RS2ELON(gribProduct **, fortdouble *);
+fortint IS2OPCL(gribProduct **, fortint *);
+fortint RS2OPCL(gribProduct **, fortdouble *);
+fortint IS2CFCL(gribProduct **, fortint *);
+fortint RS2CFCL(gribProduct **, fortdouble *);
+fortint IS2NUCL(gribProduct **, fortint *);
+fortint RS2NUCL(gribProduct **, fortdouble *);
+fortint IS2LIST(gribProduct**,fortint*,fortint*);
+
+#endif /* end of SENCODE2_H */
diff --git a/gribex/setpar.F b/gribex/setpar.F
new file mode 100755
index 0000000..2c77196
--- /dev/null
+++ b/gribex/setpar.F
@@ -0,0 +1,118 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE SETPAR (KBIT,KNEG,KPR)
+C
+C---->
+C**** SETPAR - Set number of bits in word. Set maximum negative integer.
+C
+C     Purpose.
+C     --------
+C
+C     Set number of bits in word. Set maximum negative integer.
+C
+C**   Interface.
+C     ----------
+C
+C     CALL SETPAR (KBIT,KNEG,KPR)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KPR - Debug print switch.
+C           > 0 , print out.
+C           0   , No print out.
+C
+C     Output Parameters.
+C     ------------------
+C
+C     KBIT       - Number of bits in computer word.
+C
+C     KNEG       - Maximum negative integer.
+C
+C     Method.
+C     -------
+C
+C     Values are assigned according to hardware platform.
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Comments.
+C     ---------
+C
+C     None
+C
+C     Author.
+C     -------
+C
+C     J. Hennessy      ECMWF      28.10.91
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C     ------------------------------------------------------------------
+C----<
+C
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+      INTEGER KBIT
+      INTEGER KNEG
+      INTEGER KPR
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Assign values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 )  WRITE(GRPRSM,*) ' SETPAR : Section 1.'
+C
+#ifdef INTEGER_8
+      KBIT = 64
+      KNEG = -9223372036854775807
+#elif (defined VAX)
+      KBIT = 32
+      KNEG = -2147483648
+#else
+      KBIT = 32
+      KNEG = -2147483647
+#endif
+C     ------------------------------------------------------------------
+C*    Section 9 . Return to calling routine.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) THEN
+        WRITE(GRPRSM,*) ' SETPAR : Section 9.'
+        WRITE(GRPRSM,*) '          Output values set -'
+	WRITE(GRPRSM,*) 'SETPAR: KBIT = ', KBIT
+	WRITE(GRPRSM,*) 'SETPAR: KNEG = ', KNEG
+      ENDIF
+C
+      RETURN
+      END
diff --git a/gribex/sfbits.h b/gribex/sfbits.h
new file mode 100755
index 0000000..6a43835
--- /dev/null
+++ b/gribex/sfbits.h
@@ -0,0 +1,52 @@
+
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C     STATEMENT FUNCTIONS TO MANIPULATE BITS IN WORDS OF 64 BITS
+C
+C     DATA ONES/7777777777777777B/
+C     DATA OOOS/0B/
+C
+C     1.  SINGLE BIT MANIPULATIONS
+C
+C     1.1 SET BIT KBIT IN WORD PW
+C
+      IBSET(KW,KBIT)=OR(KW,SHIFT(1B,KBIT))
+C
+C     2.  WORD MANIPULATIONS, BIT BY BIT
+C
+C     2.1 ARE WORDS PW1 AND PW2 EQUAL?
+C
+C      LOGICAL NLEQAL
+C     NLEQAL(PW1,PW2)=(PW1.XOR.PW2).EQ.0B
+C
+C     2.2 BITWISE AND AND OR
+C
+      IAND(K1,K2)=AND(K1,K2)
+      IOR (K1,K2)= OR(K1,K2)
+C
+C     2.3 BITWISE NEGATION
+C
+      NOT(K)=COMPL(K)
+C
+C     2.4 SHIFT (LEFT FOR KSH POSITIVE, RIGHT FOR KSH NEGATIVE)
+C
+      ISHFT(K,KSH)=CVMGP(SHIFTL(K,KSH),SHIFTR(K,-KSH),KSH)
+C
+C     3.  SPECIAL PURPOSE
+C
+C     3.1 TAKE 4 LAST BITS OF KW, PUT THEM IN PW AT POS K*4-1
+C
+C     SETLEV(PW,KW,K)=OR(AND(PW,SHIFT(0B.EQV.17B,K*4-4)),
+C    +SHIFT(AND(17B,KW),K*4-4))
+C
+C     3.2 EXTRACT FIELD K*4-1:4 FROM PW
+C
+C     MGTLEV(PW,K)=AND(17B,SHIFT(PW,68-K*4))
diff --git a/gribex/sort.F b/gribex/sort.F
new file mode 100755
index 0000000..c27592f
--- /dev/null
+++ b/gribex/sort.F
@@ -0,0 +1,141 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE SORT (BLOCK,NOF,UN,IRETR,NBIT)
+C
+C---->
+C**********************************************************************
+C*                                                                    *
+C*    NAME      : SORT                                                *
+C*                                                                    *
+C*    FUNCTION  : SORTS AN ARRAY IN ASCENDING FIELD CODE-NUMBER       *
+C*                AND WRITES THE FIELD TO GIVEN UNIT NUMBER.          *
+C*                                                                    *
+C*    INPUT     : BLOCK = INPUT ARRAY CONTAINING FIELDS.              *
+C*                NOF   = NO OF FIELDS                                *
+C*                UN    = OUTPUT FILE FOR SORTED FIELDS.              *
+C*                NBIT  = NO OF BITS PER WORD                         *
+C*                                                                    *
+C*    OUTPUT    : IRETR  >  0     NO. OF RECORDS WRITTEN              *
+C*                       <  0     ERRORS REPORTED BY SUBROUTINES      *
+C*                       = -200   BUFFER OUT ERROR                    *
+C*                BLOCK - RECORDS ARE ALTERED . FIELD-CODE OCTETS     *
+C*                        ARE SET TO 0 !!!!!                          *
+C*                                                                    *
+C*    GENERAL   : SORT    CALLS RECLEN                                *
+C*                              SBYTE                                 *
+C*                                                                    *
+C*    AUTHOR    : B.V. GURETZKY  V.E. DAY                             *
+C*                                                                    *
+C*    MODIFIED  : J. HENNESSY    26.11.85                             *
+C*                                                                    *
+C**********************************************************************
+C----<
+C
+      IMPLICIT INTEGER (B,U)
+      DIMENSION BLOCK(*)
+C
+      DATA IPR /1/
+C
+C     RETURN IF NUMBER OF FIELDS NOT MORE THAN 0.
+C
+      IF (NOF.LE.0) RETURN
+C
+C     ONLY 1 FIELD SUPPLIED
+C
+      IF (NOF.EQ.1)
+     C  THEN
+            CALL RECLEN (BLOCK(1),LEN,NBIT,ICODE,INDIC,LEVEL,JERR)
+            IF (JERR.NE.0)
+     C         THEN
+                   IRETR = JERR
+                   RETURN
+               ENDIF
+            LEN = LEN / 8
+            BUFFER OUT (UN,0) (BLOCK(1),BLOCK(LEN))
+            IUNIT = UNIT(UN)
+            IF (IUNIT.GT.0) GO TO 10000
+            IRETR = IRETR + 1
+            RETURN
+        ENDIF
+C
+C
+C     LOOP THROUGH FIELDS SUPPLIED TO FIND THE ONE WITH
+C     THE NEXT HIGHEST FIELD CODE.
+C
+      DO 2000 I = 1,NOF
+C
+         IB              = 0
+         LENEXTR         = 0
+         IOFFEXT         = 0
+         ICODEXT         = 999
+C
+         DO 1000 J = 1,NOF
+C
+C           GET LENGTH OF FIELD RECORD.
+C
+            CALL RECLEN  (BLOCK(IB+1),LEN,NBIT,ICODE,INDIC,LEVEL,JERR)
+            IF (JERR.NE.0)
+     C         THEN
+                   IRETR = JERR
+                   RETURN
+               ENDIF
+            LEN = LEN / 8
+C
+            IF ((ICODE.LT.ICODEXT).AND.(ICODE.NE.0))
+     C         THEN
+                   LENEXTR   = LEN
+                   IOFFEXT   = IB
+                   ICODEXT   = ICODE
+               ENDIF
+            IB = IB + LEN
+C
+ 1000    CONTINUE
+C
+C        WRITE FIELD
+C
+         LEN = IOFFEXT + LENEXTR
+         BUFFER OUT(UN,0) (BLOCK(IOFFEXT+1),BLOCK(LEN))
+         CALL RECLEN (BLOCK(IOFFEXT+1),LEN,NBIT,ICODE,INDIC,LEVEL,JERR)
+            IF (JERR.NE.0)
+     C         THEN
+                   IRETR = JERR
+                   RETURN
+               ENDIF
+         IUNIT = UNIT(UN)
+         IF (IPR.EQ.1) WRITE (*,9101) LEVEL,ICODE
+ 9101    FORMAT (1H ,'LEVEL ',I5,' FIELD ',I5)
+         IF (ICODE.LT.127.OR.ICODE.GT.255)
+     C      THEN
+                WRITE (*,*) 'SORT : INVALID FIELD CODE.'
+                CALL ABORT
+            ENDIF
+C
+         IF (IUNIT.GT.0) GO TO 10000
+C
+C        SET  CODE-TYPE TO ZERO TO INDICATE
+C        THAT FIELD HAS ALREADY BEEN WRITTEN
+C
+         IZERO = 0
+         CALL SBYTE (BLOCK(IOFFEXT+2),IZERO,32,8)
+         IRETR = IRETR + 1
+
+ 2000 CONTINUE
+
+      RETURN
+10000 CONTINUE
+
+      IRETR = -200
+      WRITE (*,*) ' SORT : BUFFER OUT ERROR.'
+C
+      RETURN
+C
+      END
diff --git a/gribex/sortf.F b/gribex/sortf.F
new file mode 100755
index 0000000..817905a
--- /dev/null
+++ b/gribex/sortf.F
@@ -0,0 +1,218 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE SORTF (UN1,UN2,IRET)
+C
+C---->
+C**********************************************************************
+C*                                                                    *
+C*    NAME      : SORTF                                               *
+C*                                                                    *
+C*    FUNCTION  : SORTS FIELDS IN A FILE IN ASCENDING ORDER           *
+C*                                                                    *
+C*    INPUT     : UN1   = INPUT  LUN                                  *
+C*                UN2   = OUTPUT LUN                                  *
+C*                                                                    *
+C*    OUTPUT    : IRET  = -10    INSUFFICENT BUFFER LENGTH            *
+C*                      = -100   BUFFER IN ERROR                      *
+C*                      = -200   BUFFER OUT ERROR                     *
+C*                      = -300   UNRECOGNISED LEVEL TYPE.
+C*                      = -400   LEVEL SEQUENCE ERROR.
+C*                      > 0      NO. OF FIELDS WRITTEN                *
+C*                      < 0      ERROR CODES FROM SUBROUTINES.        *
+C*                                                                    *
+C*    GENERAL   : SORTF CALLS RECLEN                                  *
+C*                            SORT                                    *
+C*                                                                    *
+C*    AUTHOR    : B.V. GURETZKY   16.07.85                            *
+C*                                                                    *
+C*    MOFIFIED  : J. HENNESSY     26.11.85                            *
+C                 J. HENNESSY     23.03.87
+C*                                                                    *
+C**********************************************************************
+C----<
+C
+      IMPLICIT INTEGER (B,R,U)
+      PARAMETER (BLEN=500000)
+      DIMENSION BUF(BLEN)
+C
+C     NO OF BITS  PER WORD
+      DATA NBIT /64/
+C
+      DATA IPR /1/
+C
+C
+      IRET               = 0
+      IB                 = 0
+      LEN                = 0
+      NOF                = -1
+      RECNO              = 0
+      ICODE              = 0
+      INTER              = 0
+
+
+
+C      SKIP TO END OF FILE AND CHECK LAST FIELD.
+C
+      DO 2000 J = 1,10000
+         BUFFER IN (UN1,0) (BUF(1),BUF(BLEN))
+         IUNIT = UNIT(UN1)
+         IF (UNIT(UN1)) 1000,2500,10000
+ 1000    CONTINUE
+         RECNO = RECNO + 1
+ 2000 CONTINUE
+C
+C     IF LAST FIELD IS LN SURFACE PRESSURE OR BUDGET VALUE
+C     RECORD, WRITE TO OUTPUT FILE.
+C
+ 2500 CALL RECLEN (BUF(1),LEN,NBIT,ICODE,INDIC,LEVEL,JERR)
+      IF (JERR.NE.0)
+     C   THEN
+             IRET = JERR
+             RETURN
+         ENDIF
+C
+C     IDENTIFY LEVEL TYPE FOR SEQUENCE CHECKING PURPOSES.
+C
+C     SURFACE DATA.
+C
+      IF (INDIC.EQ.1)
+     C   THEN
+             INTER = 0
+             ITYPE = 0
+             GO TO 2600
+         ENDIF
+C
+C     PRESSURE LEVEL DATA.
+C
+      IF (INDIC.EQ.100)
+     C   THEN
+             INTER = 9999
+             ITYPE = 1
+             GO TO 2600
+         ENDIF
+C
+C     MODEL LEVEL DATA.
+C
+      IF (INDIC.EQ.109)
+     C   THEN
+             INTER = 0
+             ITYPE = 2
+             GO TO 2600
+         ENDIF
+C
+C     INVALID LEVEL TYPE.
+C
+      IRET = -300
+      WRITE (*,9001) INDIC
+ 9001 FORMAT (1H ,'SORTF : INVALID LEVEL TYPE - ',I3)
+      RETURN
+C
+ 2600 CONTINUE
+C
+      IF (ICODE.EQ.152.OR.ICODE.EQ.128)
+     C   THEN
+             IRET        = IRET   +  1
+             LEN         = LEN    /  8
+             RECNO       = RECNO  -  1
+             BUFFER OUT (UN2,0) (BUF(1),BUF(LEN))
+             IUNIT       = UNIT(UN2)
+             IF (IPR.EQ.1) WRITE (*,9101) LEVEL,ICODE
+ 9101        FORMAT (1H ,'LEVEL ',I5,' FIELD ',I5)
+             IF (IUNIT.GT.0) GO TO 10500
+         ENDIF
+C
+      REWIND UN1
+C
+C     START AGAIN AT BEGINNING OF FILE FOR OTHER FIELDS.
+C
+      DO 5000 J = 1,RECNO
+C
+C        READ AS MANY FIELDS AS POSSIBLE INTO MEMORY.
+C
+         LEVEL = INTER
+         BUFFER IN (UN1,0) (BUF(IB+1),BUF(BLEN))
+         IUNIT = UNIT(UN1)
+         IF (UNIT(UN1)) 3000,5500,10000
+ 3000    CONTINUE
+         NOF = NOF + 1
+C
+C        IF LEVEL CHANGES THEN SORT PREVIOUS FIELDS.
+C
+         CALL RECLEN (BUF(IB+1),LEN,NBIT,ICODE,INDIC,INTER,JERR)
+            IF (JERR.NE.0)
+     C         THEN
+                   IRET = JERR
+                   RETURN
+               ENDIF
+C
+         LEN = LENGTH(UN1)
+         IF ((INTER.NE.LEVEL).AND.(J.GT.1))
+     C      THEN
+C
+C               FIRST CHECK THAT LEVEL SEQUENCE IS CORRECT.
+C
+                IF ( (ITYPE.EQ.1.AND.INTER.GT.LEVEL) .OR.
+     C               (ITYPE.EQ.2.AND.INTER.LT.LEVEL) )
+     C             THEN
+                       IRET = - 400
+                       WRITE (*,9002)
+ 9002                  FORMAT (1H ,'SORTF : LEVEL SEQUENCE ERROR.')
+                       RETURN
+                   ENDIF
+C
+C               SORT FIELDS
+C
+                CALL SORT (BUF(1),NOF,UN2,IRET,NBIT)
+                IF (IRET.LE.0) RETURN
+C
+C               MOVE LAST FIELD TO BUFFER START
+C
+                NOF = 0
+                DO 4000 K = 1,LEN
+                   BUF(K) = BUF(IB+K)
+ 4000           CONTINUE
+                IB = 0
+C
+            ENDIF
+C
+C        CHECK BUFFER LIMITS
+C
+         IB = IB + LEN
+         IF (IB+LEN.GT.BLEN)
+     C      THEN
+                IRET = -10
+                WRITE (*,9000) J
+ 9000           FORMAT (' SORTF : NOT ENOUGH MEMORY FOR FIELD :',I4.4)
+                RETURN
+            ENDIF
+C
+C
+ 5000 CONTINUE
+C
+C     SORT LAST SET OF FIELDS.
+C
+ 5500 NOF = NOF + 1
+      CALL SORT (BUF(1),NOF,UN2,IRET,NBIT)
+C
+      RETURN
+C
+10000 CONTINUE
+      IRET = -100
+      WRITE (*,*) ' SORTF : BUFFER IN ERROR'
+      RETURN
+C
+10500 CONTINUE
+      IRET = -200
+      WRITE (*,*) ' SORTF : BUFFER OUT ERROR'
+      RETURN
+C
+      END
diff --git a/gribex/sources.CRAY b/gribex/sources.CRAY
new file mode 100755
index 0000000..ba42aa1
--- /dev/null
+++ b/gribex/sources.CRAY
@@ -0,0 +1,239 @@
+#
+#   Sources for libemos/gribex on CRAY.
+#
+
+HEADERS      = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c    = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   blckcr.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   gbyte.F   \
+   gbytes.F  \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   sbyte.F   \
+   sbytes.F  \
+   scm0.F    \
+   setpar.F  \
+   sort.F    \
+   sortf.F   \
+   tab2fil.F \
+   u2l1cr.F  \
+   unbkin.F  \
+   unbkout.F \
+   unblock.F \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.FUJITSU b/gribex/sources.FUJITSU
new file mode 100755
index 0000000..75f105a
--- /dev/null
+++ b/gribex/sources.FUJITSU
@@ -0,0 +1,233 @@
+#
+#   Sources for libemos/gribex
+#
+
+#EXTRAOBJ=cgsloop.o
+EXTRAOBJ=
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+#  cgsloop.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.VPP5000 b/gribex/sources.VPP5000
new file mode 100755
index 0000000..75f105a
--- /dev/null
+++ b/gribex/sources.VPP5000
@@ -0,0 +1,233 @@
+#
+#   Sources for libemos/gribex
+#
+
+#EXTRAOBJ=cgsloop.o
+EXTRAOBJ=
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+#  cgsloop.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.decalpha b/gribex/sources.decalpha
new file mode 100755
index 0000000..3781ce8
--- /dev/null
+++ b/gribex/sources.decalpha
@@ -0,0 +1,229 @@
+#
+#   Sources for libemos/gribex
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   swap4.c   \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.decmips b/gribex/sources.decmips
new file mode 100755
index 0000000..2d4ca77
--- /dev/null
+++ b/gribex/sources.decmips
@@ -0,0 +1,228 @@
+#
+#   Sources for libemos/gribex for decmips.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.hpia64 b/gribex/sources.hpia64
new file mode 100755
index 0000000..5b777f6
--- /dev/null
+++ b/gribex/sources.hpia64
@@ -0,0 +1,218 @@
+#
+#   Sources for libemos/gribex for hppa
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   jabort.c  \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gengrib.F \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.hppa b/gribex/sources.hppa
new file mode 100755
index 0000000..5b777f6
--- /dev/null
+++ b/gribex/sources.hppa
@@ -0,0 +1,218 @@
+#
+#   Sources for libemos/gribex for hppa
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   jabort.c  \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gengrib.F \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.ibm_power4 b/gribex/sources.ibm_power4
new file mode 100755
index 0000000..7b7745e
--- /dev/null
+++ b/gribex/sources.ibm_power4
@@ -0,0 +1,229 @@
+#
+#   Sources for libemos/gribex for rs6000.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.ibm_power6 b/gribex/sources.ibm_power6
new file mode 100755
index 0000000..7b7745e
--- /dev/null
+++ b/gribex/sources.ibm_power6
@@ -0,0 +1,229 @@
+#
+#   Sources for libemos/gribex for rs6000.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.ibm_power7 b/gribex/sources.ibm_power7
new file mode 100755
index 0000000..7b7745e
--- /dev/null
+++ b/gribex/sources.ibm_power7
@@ -0,0 +1,229 @@
+#
+#   Sources for libemos/gribex for rs6000.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.itanium b/gribex/sources.itanium
new file mode 100755
index 0000000..f98c6ac
--- /dev/null
+++ b/gribex/sources.itanium
@@ -0,0 +1,222 @@
+#
+#   Sources for libemos/gribex for sgimips.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   swap4.c   \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.linux b/gribex/sources.linux
new file mode 100755
index 0000000..f98c6ac
--- /dev/null
+++ b/gribex/sources.linux
@@ -0,0 +1,222 @@
+#
+#   Sources for libemos/gribex for sgimips.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   swap4.c   \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.linux_g77 b/gribex/sources.linux_g77
new file mode 100755
index 0000000..f98c6ac
--- /dev/null
+++ b/gribex/sources.linux_g77
@@ -0,0 +1,222 @@
+#
+#   Sources for libemos/gribex for sgimips.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   swap4.c   \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.rs6000 b/gribex/sources.rs6000
new file mode 100755
index 0000000..7b7745e
--- /dev/null
+++ b/gribex/sources.rs6000
@@ -0,0 +1,229 @@
+#
+#   Sources for libemos/gribex for rs6000.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gsbite.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.sgimips b/gribex/sources.sgimips
new file mode 100755
index 0000000..aa0a959
--- /dev/null
+++ b/gribex/sources.sgimips
@@ -0,0 +1,228 @@
+#
+#   Sources for libemos/gribex for sgimips.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/sources.sun4 b/gribex/sources.sun4
new file mode 100755
index 0000000..b60c3c7
--- /dev/null
+++ b/gribex/sources.sun4
@@ -0,0 +1,228 @@
+#
+#   Sources for libemos/gribex sun4.
+#
+
+HEADERS = \
+   comars.h  \
+   comcomm.h \
+   comgrb.h  \
+   ecdef1.h  \
+   ecdef2.h  \
+   ecdef3.h  \
+   ecdef4.h  \
+   ecdef5.h  \
+   ecdef6.h  \
+   ecdef7.h  \
+   ecdef8.h  \
+   ecdef9.h  \
+   ecdef10.h \
+   ecdef11.h \
+   ecdef12.h \
+   ecdef13.h \
+   ecdef14.h \
+   ecdef15.h \
+   ecdef16.h \
+   ecdef17.h \
+   ecdef18.h \
+   ecdef19.h \
+   ecdf190.h \
+   ecdf191.h \
+   ECMWFdefinitions.h \
+   gdecode.h \
+   gdecode1.h \
+   gdecode2.h \
+   gdecodeStruct.h \
+   getsetValues.h \
+   grbcom.h  \
+   gribex.h  \
+   handleLocalDefinitions.h \
+   sencode.h \
+   sencode1.h \
+   sencode2.h \
+   sfbits.h
+
+SOURCES.c = \
+   csgnbt.c  \
+   dsgnbt.c  \
+   ECMWFdefinitions.c \
+   findLocalDefinitionFile.c \
+   fortranInterface.c \
+   gdecode.c \
+   gdecode1.c \
+   gdecode2.c \
+   getsetValues.c \
+   grpr190.c \
+   handleLocalDefinitions.c \
+   jmalloc.c \
+   jfree.c   \
+   orefdat.c \
+   sencode.c \
+   sencode1.c \
+   sencode2.c \
+   valpina.c
+
+SOURCES.f    = 
+
+SOURCES.F    = \
+   abortx.F  \
+   bufrin.F  \
+   c2bitw.F  \
+   c2cwid.F  \
+   c2dosd.F  \
+   c2gene.F  \
+   c2ordr.F  \
+   c2pack.F  \
+   c2pkvw.F  \
+   c2rnge.F  \
+   c2rows.F  \
+   calcop.F  \
+   cheknum.F \
+   chktab2.F \
+   cmpck.F   \
+   codegb.F  \
+   codegc.F  \
+   codegr.F  \
+   codeps.F  \
+   confp.F   \
+   confp2.F  \
+   confp3.F  \
+   confpa.F  \
+   csect4.F  \
+   d2ordr.F  \
+   d2rosd.F  \
+   decext.F  \
+   decfp.F   \
+   decfp2.F  \
+   decogb.F  \
+   decogc.F  \
+   decogd.F  \
+   decogr.F  \
+   decops.F  \
+   decops2.F \
+   dggsec2.F \
+   dlasec2.F \
+   dllsec2.F \
+   dmesec2.F \
+   docsec2.F \
+   dpssec2.F \
+   dshsec2.F \
+   dsvsec2.F \
+   dsect4a.F \
+   ecdef1.F  \
+   ecdef10.F \
+   ecdef11.F \
+   ecdef12.F \
+   ecdef13.F \
+   ecdef14.F \
+   ecdef15.F \
+   ecdef16.F \
+   ecdef17.F \
+   ecdef18.F \
+   ecdef19.F \
+   ecdef50.F \
+   ecdf191.F \
+   ecdef2.F  \
+   ecdef3.F  \
+   ecdef4.F  \
+   ecdef5.F  \
+   ecdef6.F  \
+   ecdef7.F  \
+   ecdef8.F  \
+   ecdef9.F  \
+   ecloc1.F  \
+   eggsec2.F \
+   elasec2.F \
+   ellsec2.F \
+   emesec2.F \
+   eocsec2.F \
+   epssec2.F \
+   eshsec2.F \
+   esvsec2.F \
+   emoscyc.F \
+   exscal.F  \
+   extmap.F  \
+   ftn1cr.F  \
+   gbitmap.F \
+   genbin.F  \
+   gendir.F  \
+   gengrib.F \
+   getchd.F  \
+   getfb2.F  \
+   getfpd.F  \
+   getib1.F  \
+   getib2.F  \
+   getib3.F  \
+   getind.F  \
+   getlgd.F  \
+   getsys.F  \
+   getusr.F  \
+   grchk1.F  \
+   grchk2.F  \
+   grchk3.F  \
+   grchk4.F  \
+   gribex.F  \
+   gribin.F  \
+   gribnum.F \
+   grprs0.F  \
+   grprs1.F  \
+   grprs1b.F \
+   grprs2.F  \
+   grprs3.F  \
+   grprs4.F  \
+   grprs4w.F \
+   grsdbg.F  \
+   grsdef.F  \
+   grsmax.F  \
+   grsmkp.F  \
+   grsmok.F  \
+   grsn2o.F  \
+   grsref.F  \
+   grsrnd.F  \
+   grsubc.F  \
+   grsvck.F  \
+   grsx2o.F  \
+   gscale.F  \
+   inscal.F  \
+   insmp1.F  \
+   insmp2.F  \
+   inxbit.F  \
+   inxmap.F  \
+   kwchk1.F  \
+   kwloc1.F  \
+   kwprs1.F  \
+   lnbfcr.F  \
+   lngbcr.F  \
+   maxmin.F  \
+   maxmn2.F  \
+   maxmni.F  \
+   modval.F  \
+   mxmncr.F  \
+   offset.F  \
+   offset2.F \
+   packcf.F  \
+   prtbin.F  \
+   prtbk1.F  \
+   prtbk2.F  \
+   prtbl1.F  \
+   prtbl2.F  \
+   ptquasi.F \
+   qu2reg.F  \
+   qu2reg3.F \
+   reclen.F  \
+   ref2grb.F \
+   remsp.F   \
+   repchr.F  \
+   revero.F  \
+   rorint.F  \
+   rowina.F  \
+   rowina2.F \
+   rowina3.F \
+   rtb.F     \
+   scm0.F    \
+   setpar.F  \
+   tab2fil.F \
+   u2l1cr.F  \
+   uncmpck.F \
+   unpkcf.F  \
+   vod2uv.F  \
+   yyyy2cy.F
diff --git a/gribex/swap4.c b/gribex/swap4.c
new file mode 100755
index 0000000..569fb20
--- /dev/null
+++ b/gribex/swap4.c
@@ -0,0 +1,36 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <memory.h>
+
+void swap4_(char * version) {
+/*
+// Swaps the order of characters in experiment version (for little-endian)
+//
+// Called from FORTRAN:
+//
+//   CALL SWAP4(KSEC1(41))
+*/
+char copy[4];
+
+  memcpy(copy,version,4);
+
+  version[0] = copy[3];
+  version[1] = copy[2];
+  version[2] = copy[1];
+  version[3] = copy[0];
+
+  return;
+}
+
+void swap4(char * version) {
+  swap4_(version);
+}
diff --git a/gribex/tab2fil.F b/gribex/tab2fil.F
new file mode 100755
index 0000000..97f2a62
--- /dev/null
+++ b/gribex/tab2fil.F
@@ -0,0 +1,166 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION TAB2FIL ( KTABLE, KPARAM, KCENTR, HFILE )
+C
+C---->
+C**** TAB2FIL
+C
+C     Purpose
+C     -------
+C
+C     Build name of file that should contain, if present, the GRIB code
+C     table 2 (parameters) associated to data (with valid entries) .
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = TAB2FIL ( KTABLE, KPARAM, KCENTR )
+C
+C     Input
+C     -----
+C
+C     KTABLE - Local table 2 version number.
+C     KPARAM - Parameter number.
+C     KCENTR - Centre number.
+C
+C
+C     Output
+C     ------
+C
+C     HFILE - File name to look for and contact.
+C
+C     Function return value is:
+C            0 - In all current cases .
+C
+C
+C     Method
+C     ------
+C
+C     Checks if environment variable ECMWF_LOCAL_TABLE_PATH exists to
+C     define the location of the parameter tables.
+C
+C     Otherwise, looks for table xxx in:
+C
+C     ${ELTPATH}/wmostd/table_2_version_xxx for WMO standard entries ;
+C
+C     ${ELTPATH}/nnnnnn/local_table_2_version_xxx for ECMWF home data
+C     where nnnnnn is the current EMOSLIB version ;
+C
+C     ${ELTPATH}/cenCCC/local_table_2_version_xxx for home data of
+C     centre number CCC .
+C
+C     Entry for each parameter in table has the format (without quotes):
+C        "......................"         Separator
+C        "051"                            Paramter number
+C        "MX2T24"                         MARS mnemonic
+C        "Max 2m temp"                    Parameter description
+C        "K"                              Units for the parameter
+C        "During previous 24 hours"       Further description
+C
+C     There is a termination "......................" line in the file
+C     and there may be lines of comment before the first parameter entry.
+C
+C     The parameter definition file is kept open between calls.
+C
+C
+C     Externals
+C     ---------
+C     EMOSNUM - Gives current EMOSLIB version number.
+C
+C
+C     Author
+C     ------
+C
+C     J. Clochard, Meteo France, for ECMWF - June 1999.
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C     _______________________________________________________
+C----<
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+#include "grbcom.h"
+C
+C     Function arguments
+C
+      INTEGER KPARAM, KTABLE, KCENTR
+C
+      CHARACTER*256 HFILE
+C
+C     Local variables
+C
+      INTEGER IEMOSNM, IOFFSET
+C
+C     External functions
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+C
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      TAB2FIL = 0
+C
+C     Build filename
+C
+      HFILE = ELTPATH
+      IOFFSET = INDEX( HFILE, ' ')
+C
+      IF( MAX( KTABLE,KPARAM) .LE. 127 ) THEN
+C
+        HFILE(IOFFSET:)='wmostd/table_2_version_'
+        IOFFSET = INDEX( HFILE, ' ')
+C
+      ELSE
+C
+        IF( KCENTR .EQ. 98 ) THEN
+C
+          IEMOSNM = EMOSNUM(1)
+          WRITE(HFILE(IOFFSET:IOFFSET+5),'(I6.6)') IEMOSNM
+C
+        ELSE
+C
+          HFILE(IOFFSET:IOFFSET+3)='cen'
+          WRITE(HFILE(IOFFSET+3:IOFFSET+5),'(I3.3)') KCENTR
+C
+        ENDIF
+C
+        IOFFSET=IOFFSET+6
+        HFILE(IOFFSET:)='/local_table_2_version_'
+C
+      ENDIF
+C
+      IOFFSET = INDEX( HFILE, ' ')
+      WRITE(HFILE(IOFFSET:IOFFSET+2),'(I3.3)') KTABLE
+C     print *,'TAB2FIL: HFILE = "' // HFILE(:IOFFSET+2) // '"'
+C
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+C     Drop through if not found.
+C
+      RETURN   
+C
+      END
diff --git a/gribex/u2l1cr.F b/gribex/u2l1cr.F
new file mode 100755
index 0000000..c4bb72d
--- /dev/null
+++ b/gribex/u2l1cr.F
@@ -0,0 +1,141 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE U2L1CR (HSTRNG)
+C
+C---->
+C**** U2L1CR - Convert Upper case letters to Lower case.
+C
+C     Purpose.
+C     --------
+C
+C           Convert character string to all lower case.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL U2L1CR (HSTRNG)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               HSTRNG     - String in upper and/or lower case.
+C
+C               Output parameters.
+C               ------------------
+C
+C               HSTRNG     - Character string in all lower case.
+C
+C     Method.
+C     -------
+C
+C           Numeric values of each byte examined and altered if in the
+C           range of lower case letters.
+C
+C     Externals.
+C     ----------
+C
+C           ICHAR
+C           CHAR
+C
+C     Reference.
+C     ----------
+C
+C           Cray Programmer's Library Reference Manual.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains sections 0 to 1 and section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      09:08:90.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      CHARACTER*(*) HSTRNG
+C
+C     ASCII Representation of upper case characters A and Z.
+C
+      DATA IA  /65/
+      DATA IZ  /90/
+C
+C     ASCII Representation of NULL and BLANK characters.
+C
+      DATA INULL /0/
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Change any necessary letters.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+C
+      ILEN = LEN (HSTRNG)
+C
+      DO 1100 J=1,ILEN
+         ICH = ICHAR (HSTRNG(J:J))
+         IF ( (ICH.GE.IA).AND.(ICH.LE.IZ) ) HSTRNG (J:J) = CHAR (ICH+32)
+         IF (ICH.EQ.INULL) HSTRNG (J:J) = CHAR (32)
+ 1100 CONTINUE
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+c
+C
+C
+C
+C*    Section 9 . Return to calling routine.
+C     ----------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      RETURN
+      END
diff --git a/gribex/unbkin.F b/gribex/unbkin.F
new file mode 100755
index 0000000..3e6ddf9
--- /dev/null
+++ b/gribex/unbkin.F
@@ -0,0 +1,627 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE UNBKIN (KUNIT,KARRAY,KINLEN,KOUTLEN,KEOF,KRET)
+C
+C---->
+C**** UNBKIN - Read a record from a pure binary file.
+C
+C     Purpose.
+C     --------
+C
+C           Provides standard interface to read unblocked COS
+C           files or UNICOS pure binary files.
+C
+C           Read next record from a pure binary file
+C           and return in given array to calling routine.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL UNBKIN (KUNIT,KARRAY,KINLEN,KOUTLEN,KEOF,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               KUNIT      - Fortran unit number of file to be read.
+C                            1 to 99.
+C
+C               KARRAY     - Array to receive record.
+C
+C               KINLEN     - Length of this array, in words.
+C
+C               KOUTLEN    - Length of record to be read (in words)
+C                            If this is 0 the length of the record is
+C                            assumed to be in the first word of the
+C                            record. This is the case for MARS data
+C                            in unpacked format.
+C
+C               KEOF       - 0, If not last read from this file.
+C                            1, Last read to be made from this file.
+C
+C                            Normally this will be 0, but if the
+C                            same unit number is used later for
+C                            another file, and end-of-file was not
+C                            reached on the first one, a misread
+C                            will occur, unless KEOF is set to 1 on
+C                            the last read from the first file.
+C
+C               KRET       - 0, Routine to abort if error encountered.
+C                            1, Return to calling routine even if error.
+C
+C                            Adding 100 to KRET will add debug printout
+C                            eg values of input and output parameters.
+C
+C                            Valid values for KRET are thus 0, 1, 100
+C                            or 101.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KOUTLEN    - Length of record read, in words.
+C
+C               KEOF       - 0, If no end of file detected.
+C                            1, End of file detected.
+C
+C               KRET       - Return code.
+C                            0, No error encountered.
+C                            1, Read error.
+C                            2, Not used.
+C                            3, Not used.
+C                            4, Not used.
+C                            5, No data transferred because user's array
+C                               is smaller than the record length.
+C                            6, Maximum number of files opened for read
+C                               by user program exceeded.
+C                            7, Error detected in parameters.
+C                            8, Not used.
+C                            9, Not used.
+C                           10, End of file encountered before end of
+C                               record.
+C
+C     Method.
+C     -------
+C
+C           Data is read in 512 word blocks. The length of each
+C           record is given in the first word (or as input parameter)
+C           and enough blocks then read to complete the record, which
+C           is returned to the user. Any remaining words are kept to
+C           use as the start of the next record on the next read.
+C
+C           An array of Fortran numbers in use is kept, with a
+C           corresponding array of pointers to the last part of
+C           data read from each one. A similar array keeps end of file
+C           status for each file. When the last read has been
+C           made from a file, these entries are reset to 0.
+C
+C           If an error is encountered, an error message is printed.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           None.
+C
+C     Comments.
+C     ---------
+C
+C           Maximum number of files which can be handled in one
+C           program is 20.
+C
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      25:06:90.
+C
+C     Modifications
+C     --------------
+C
+C           None.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      PARAMETER (JPBLOK=512)
+      PARAMETER (JPFILS= 20)
+C
+      DIMENSION KARRAY(KINLEN)
+      DIMENSION INBUFF(JPFILS*JPBLOK)
+      DIMENSION ISTART(JPFILS)
+      DIMENSION IFTNOS(JPFILS)
+      DIMENSION IATEOF(JPFILS)
+C
+      DATA ISTART /JPFILS*0/
+      DATA IFTNOS /JPFILS*0/
+      DATA IATEOF /JPFILS*0/
+C
+      SAVE INBUFF
+      SAVE ISTART
+      SAVE IFTNOS
+      SAVE IATEOF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Check parameters. Set initial values.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+C     Set print switch, if required.
+C
+      IF (KRET.GE.100)
+     C   THEN
+             KPR = 1
+         ELSE
+             KPR = 0
+         ENDIF
+C
+C     Print input parameters, if required.
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'UNBKIN : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9904) KUNIT
+             WRITE (*,9905) KINLEN
+             WRITE (*,9906) KRET
+             WRITE (*,9908) KEOF
+         ENDIF
+C
+C     Check input parameters.
+C
+      IRET = 0
+      IF (KRET.GE.100) KRET = KRET - 100
+C
+C     Invalid value given for return code.
+C
+      IF (KRET.LT.0.OR.KRET.GT.1)
+     C   THEN
+             IRET = 7
+             WRITE (*,9910) KRET
+             GO TO 9000
+         ENDIF
+C
+C     Fortran unit numbers must be between 1 and 99 inclusive.
+C
+      IF (KUNIT.LT.1.OR.KUNIT.GT.99)
+     C   THEN
+             IRET = 7
+             WRITE (*,9911) KUNIT
+             GO TO 9000
+         ENDIF
+C
+C     Keep last read indicator.
+C
+      IEOF = KEOF
+      KEOF = 0
+C
+C     Locate Fortran unit number in list of active numbers.
+C
+      DO 1010 J1010=1,JPFILS
+         IF (IFTNOS(J1010).EQ.KUNIT)
+     C      THEN
+                IB = ISTART(J1010)
+                IZ = IATEOF(J1010)
+                IP = J1010
+                GO TO 1030
+            ENDIF
+ 1010 CONTINUE
+C
+C     None found, so first time in. Set table entries.
+C
+      DO 1020 J1020=1,JPFILS
+         IF (IFTNOS(J1020).EQ.0)
+     C      THEN
+                IB = 0
+                IZ = 0
+                IP = J1020
+                IFTNOS(J1020) = KUNIT
+                GO TO 1030
+            ENDIF
+ 1020 CONTINUE
+C
+C     No table entry free. Maximum number of files exceeded.
+C
+      IRET = 6
+      WRITE (*,9912) JPFILS
+      GO TO 9000
+C
+C     Set pointer to array holding last part of data read.
+C
+ 1030 CONTINUE
+C
+      IPR = IP
+      IP  =  (IP-1) * JPBLOK + 1
+C
+C     INBUFF(IP) to INBUFF(IP+IB) are the remaining words of the
+C     last block read.
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Ensure enough data is read to include a full record.
+C     ----------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'UNBKIN : Section 2.'
+             WRITE (*,9909) IPR , IP , IB
+         ENDIF
+C
+C     Copy remainder of last block read to user array.
+C
+C     KARRAY   1      IB
+C              !       !
+C              =========
+C
+      DO 2025 J2025 = 1,IB
+         KARRAY(J2025) = INBUFF(IP+J2025-1)
+ 2025 CONTINUE
+C
+C     Fill remainder of array with zeroes.
+C
+      DO 2050 J2050 = IB+1,KINLEN
+         KARRAY(J2050) = 0
+ 2050 CONTINUE
+C
+C
+C*    Get length of record to be read.   .
+C
+      IF (KOUTLEN.NE.0)
+     C   THEN
+             ILENW = KOUTLEN
+         ELSE
+             ILENW = KARRAY(1)
+         ENDIF
+C
+C     Force a block to be read if no data remains from previous
+C     read.
+C
+      IF (IB.EQ.0)            ILENW = JPBLOK + 1
+C
+C     Force a block to be read if data length is 0 to check for
+C     end-of-file.
+C
+      IF (ILENW.EQ.0)         ILENW = JPBLOK + 1
+C
+C     Force a block to be read if the record Length is
+C     greater than the length of data already read.
+C
+      IF (ILENW.GT.IB)        ILENW = JPBLOK + 1
+C
+C     No data is read if full record has already been read.
+C
+C     No data is read if an end-of-file has been
+C     encountered on previous read. Even if end-of-file has been
+C     reached there may be short record(s) remaining in the
+C     last block read.
+C
+C     KARRAY   1      IB            IE
+C              !       !             !
+C              =======================
+C
+C     Read next block if necessary to get full record.
+C
+      IF (IZ.EQ.0.AND.ILENW.GT.JPBLOK)
+     C   THEN
+             IE = IB + JPBLOK
+             BUFFER IN (KUNIT,0) (KARRAY(IB+1),KARRAY(IE))
+             IF (UNIT(KUNIT)) 2300,2200,2100
+         ELSE
+             IE = IB
+             GO TO 2300
+         ENDIF
+C
+ 2100 CONTINUE
+C
+C     Read error, go to section 9.
+C
+      IRET = 1
+      WRITE (*,9913) KUNIT
+      GO TO 9000
+C
+ 2200 CONTINUE
+C
+C     End of file read, so set flag. Last block read may still
+C     contain short records.
+C
+      IZ          = 1
+      IATEOF(IPR) = IZ
+C
+ 2300 CONTINUE
+C
+C*    Get length of record.
+C
+      IF (KOUTLEN.NE.0)
+     C   THEN
+             ILENW = KOUTLEN
+C
+C            If the record length has been set by user, and
+C            end-of-file has been encountered, force end-of-file
+C            processing if record length is greater than remaining
+C            contents of the buffer.
+C
+             IF(IZ.EQ.1.AND.ILENW.GT.IB) ILENW = 0
+C
+         ELSE
+             ILENW = KARRAY(1)
+         ENDIF
+C
+C        If end-of-file has been encountered and record
+C        length is 0 no further record remains in the buffer.
+C
+         IF (IZ.EQ.1.AND.ILENW.EQ.0)
+     C      THEN
+                KEOF = 1
+                IFTNOS(IPR) = 0
+                ISTART(IPR) = 0
+                IATEOF(IPR) = 0
+                GO TO 9000
+            ENDIF
+C
+      IF (KPR.EQ.1) WRITE (*,9902) ILENW
+C
+C     Ensure that user's array is large enough.
+C
+      IF (KINLEN.LT.ILENW)
+     C   THEN
+             WRITE (*,9917) KINLEN , ILENW
+             IRET = 5
+             GO TO 9000
+         ENDIF
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Read enough blocks to complete current record.
+C     ----------------------------------------------------------------
+C
+ 3000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'UNBKIN : Section 3.'
+C
+C
+C     If data already read does not contain a full record,
+C     read enough blocks to include the next full record.
+C     Read last block into INBUFF, preceding ones into user's array.
+C
+      IF (IE.LT.ILENW)
+     C   THEN
+C
+C            KARRAY   1      IB            IE                ILENW
+C                     !       !             !                    !
+C                     ==============================================
+C                                                                  !
+C                                                                ILENR
+             IB    = IE
+             ILENR = ILENW - IE
+C
+C            If second block is last block, do not read into user array.
+C
+             IF (ILENR.LE.JPBLOK) GO TO 3010
+C
+             IDIFF = MOD (ILENR,JPBLOK)
+             IF (IDIFF.NE.0)
+     C          THEN
+                    ILENR = ILENR - IDIFF
+                ELSE
+                    ILENR = ILENR - JPBLOK
+                ENDIF
+             IE    = IE + ILENR
+             BUFFER IN (KUNIT,0) (KARRAY(IB+1),KARRAY(IE))
+             IF (UNIT(KUNIT)) 3010,3700,2100
+C
+ 3010 CONTINUE
+C
+             BUFFER IN (KUNIT,0) (INBUFF(IP),INBUFF(IP+JPBLOK-1))
+             IF (UNIT(KUNIT)) 3100,3700,2100
+C
+C            Put end of field in user's array.
+C
+ 3100        CONTINUE
+C
+             IEND = ILENW - IE
+             DO 3200 J3200=1,IEND
+                KARRAY(IE+J3200) = INBUFF(IP+J3200-1)
+ 3200        CONTINUE
+C
+C            Move remainder of block to front of buffer.
+C
+             INTER = JPBLOK - IEND
+             DO 3300 J3300=1,INTER
+                INBUFF(IP+J3300-1) = INBUFF(IP+J3300-1+IEND)
+ 3300        CONTINUE
+C
+C
+         ELSE
+C
+C            Check for premature end-of-file ie record
+C            longer than data already read.
+C
+C            KARRAY   1        IB          ILENW
+C                     !         !    EOF    !
+C                     ===========
+C
+C===         IF (IZ.EQ.1.AND.ILENW.GT.IB) GO TO 3700
+C            RE-implement above line and remove next IF clause
+C            when ECFILE clears its buffers before use.
+C
+             IF (IZ.EQ.1.AND.ILENW.GT.IB)
+     C          THEN
+                    KEOF = 1
+                    IFTNOS(IPR) = 0
+                    ISTART(IPR) = 0
+                    IATEOF(IPR) = 0
+                    KOUTLEN     = 0
+                    GO TO 9000
+                 ENDIF
+C
+C            KARRAY   1           ILENW    IE
+C                     !              !      !
+C                     =======================
+C
+             INTER = IE - ILENW
+             DO 3400 J3400=1,INTER
+                INBUFF(IP+J3400-1) = KARRAY(ILENW+J3400)
+ 3400        CONTINUE
+         ENDIF
+C
+      KOUTLEN = ILENW
+      IB      = INTER
+C
+ 3600 CONTINUE
+C
+C     Save pointer to start of next read area, unless last read.
+C
+      IF (IEOF.EQ.1)
+     C   THEN
+             IFTNOS(IPR) = 0
+             ISTART(IPR) = 0
+             IATEOF(IPR) = 0
+         ELSE
+             ISTART(IPR) = IB
+             IATEOF(IPR) = IZ
+         ENDIF
+C
+      GO TO 9000
+C
+C     End-of-file before end of record.
+C
+ 3700 CONTINUE
+C
+      IRET = 10
+      WRITE (*,9918)
+C
+C    ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C THEN
+           WRITE (*,*) 'UNBKIN : Section 9.'
+           WRITE (*,*) '         Output values set -'
+           WRITE (*,9907) KOUTLEN
+           WRITE (*,9908) KEOF
+           WRITE (*,9906) IRET
+       ENDIF
+C
+C     Error encountered. Clear table entries, if any exist.
+C     Abort if requested.
+C
+      IF (IRET.NE.0.AND.IRET.NE.2)
+     C   THEN
+             IF (IRET.NE.6)
+     C          THEN
+                    IFTNOS(IPR) = 0
+                    IATEOF(IPR) = 0
+                    ISTART(IPR) = 0
+                ENDIF
+             WRITE (*,9903) IRET
+             IF (KRET.EQ.0) CALL ABORT
+         ENDIF
+C
+      KRET = IRET
+C
+      RETURN
+C
+C
+ 9902 FORMAT (1H ,'UNBKIN : Record length (words) = ',I8)
+C
+ 9903 FORMAT (1H ,'UNBKIN : Return code = ',I6)
+C
+ 9904 FORMAT (1H ,9X,'KUNIT   = ',I6)
+C
+ 9905 FORMAT (1H ,9X,'KINLEN  = ',I6)
+C
+ 9906 FORMAT (1H ,9X,'KRET    = ',I6)
+C
+ 9907 FORMAT (1H ,9X,'KOUTLEN = ',I6)
+C
+ 9908 FORMAT (1H ,9X,'KEOF    = ',I6)
+C
+ 9909 FORMAT (1H ,'IPR = ',I4,'  IP = ',I8,'  IB = ',I8)
+C
+ 9910 FORMAT (1H ,'UNBKIN : KRET on input is ',I4,
+     C        '. Valid values are 0,1,10,11,100,110,101 or 111.')
+ 9911 FORMAT (1H ,'UNBKIN : KUNIT on input is ',I4,
+     C        '. Valid values are 1 to 99.')
+ 9912 FORMAT (1H ,'UNBKIN : Maximum number of files (',I2,') exceeded.')
+C
+ 9913 FORMAT (1H ,'UNBKIN : Error in reading file number ',I3)
+C
+ 9917 FORMAT (1H ,'UNBKIN : Array length is ',I6, 'words, but record ',
+     C        'length is ',I6,' words.')
+ 9918 FORMAT (1H ,'UNBKIN : End-of-file reached before end of record.')
+C
+C
+      END
diff --git a/gribex/unbkout.F b/gribex/unbkout.F
new file mode 100755
index 0000000..b3a8415
--- /dev/null
+++ b/gribex/unbkout.F
@@ -0,0 +1,521 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE UNBKOUT (KUNIT,KARRAY,KINLEN,KOUTLEN,KEOF,KRET)
+C
+C---->
+C**** UNBKOUT - Write a record to a pure binary file.
+C
+C     Purpose.
+C     --------
+C
+C           Provides standard interface to write unblocked COS
+C           files or UNICOS pure binary files.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL UNBKOUT (KUNIT,KARRAY,KINLEN,KOUTLEN,KEOF,KRET)
+C
+C           INTEGER    K.
+C           REAL       P.
+C           LOGICAL    O.
+C           CHARACTER  H.
+C
+C               Input parameters.
+C               -----------------
+C
+C               KUNIT      - Fortran unit number of file to be written.
+C                            1 to 99.
+C
+C               KARRAY     - Array containing record to be written.
+C
+C               KINLEN     - Length of this array, in words.
+C
+C               KOUTLEN    - Length of record to be written (in words).
+C                            If this is 0 length is assumed to be in
+C                            the first word of the record.
+C                            This is the case with MARS data in unpacked
+C                            format.
+C
+C               KEOF       - 0, If not last write to this file.
+C                            1, Last write to this file, so write
+C                               record and flush output buffer.
+C                            2, Last record already written, so
+C                               flush output buffer.
+C
+C               KRET       - 0, Routine to abort if error encountered.
+C                            1, Return to calling routine even if error.
+C
+C                            Adding 100 to KRET will add debug printout
+C                            eg values of input and output parameters.
+C
+C                            Valid values for KRET are thus 0, 1, 100
+C                            or 101.
+C
+C               Output parameters.
+C               ------------------
+C
+C               KOUTLEN    - Length of record written, in words.
+C
+C               KRET       - Return code.
+C                            0, No error encountered.
+C                            1, Write error.
+C                            2, Not used.
+C                            3, Not used.
+C                            4, Not used.
+C                            5, No data transferred because user's array
+C                               is smaller than the record length.
+C                            6, Maximum number of files opened for write
+C                               by user program exceeded.
+C                            7, Error detected in parameters.
+C
+C     Method.
+C     -------
+C
+C           Data is written in 512 word blocks. The length of each
+C           record is taken from the first word (or input parameter)
+C           and all full blocks are then written. Unless it is the last
+C           write to the file, any remaining words are kept to use
+C           as the start of the next block to be written.
+C
+C           An array of Fortran numbers in use is kept, with a
+C           corresponding array of pointers to the next part of
+C           data to be written to each one. When the last write is
+C           made to a file, these entries are reset to 0.
+C
+C           If an error is encountered, an error message is printed.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           Cray CFT77 Manual.
+C
+C     Comments.
+C     ---------
+C
+C           Maximum number of files which can be handled in one
+C           program is 20
+C
+C           Routine contains Sections 0 to 3 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy      ECMWF      24:04:90.
+C
+C     Modifications
+C     --------------
+C
+C           J. Hennessy      ECMWF      31:10:90.
+C           Do not write empty last block, when flushing buffer.
+C
+C           B. Raoult        ECMWF      29:11:90
+C           Fix bug in zero-filling of short and last records.
+C
+C     ----------------------------------------------------------------
+C----<
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0 . Definition of variables.
+C     ----------------------------------------------------------------
+C
+      IMPLICIT LOGICAL     ( L, O, G )
+      IMPLICIT CHARACTER*8 ( C, H, Y )
+      IMPLICIT INTEGER     ( I, J, K, M, N )
+C
+      PARAMETER (JPBLOK=512)
+      PARAMETER (JPFILS= 20)
+C
+      DIMENSION KARRAY(KINLEN)
+      DIMENSION IOBUFF(JPFILS*JPBLOK)
+      DIMENSION ISTART(JPFILS)
+      DIMENSION IFTNOS(JPFILS)
+C
+      DATA ISTART /JPFILS*0/
+      DATA IFTNOS /JPFILS*0/
+C
+      SAVE IOBUFF
+      SAVE ISTART
+      SAVE IFTNOS
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Check parameters. Set initial values.
+C     ----------------------------------------------------------------
+C
+ 1000 CONTINUE
+C
+C*    Set print switch, if required.
+C
+      IF (KRET.GE.100)
+     C   THEN
+             KPR = 1
+         ELSE
+             KPR = 0
+         ENDIF
+C
+C*    Print input parameters, if required.
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'UNBKOUT : Section 1.'
+             WRITE (*,*) '         Input values used -'
+             WRITE (*,9904) KUNIT
+             WRITE (*,9905) KINLEN
+             WRITE (*,9907) KOUTLEN
+             WRITE (*,9906) KRET
+             WRITE (*,9908) KEOF
+         ENDIF
+C
+C*    Check input parameters.
+C
+      IRET = 0
+      IF (KRET.GE.100) KRET = KRET - 100
+C
+C*    Invalid value given for return code.
+C
+      IF (KRET.LT.0.OR.KRET.GT.1)
+     C   THEN
+             IRET = 7
+             WRITE (*,9910) KRET
+             GO TO 9000
+         ENDIF
+C
+C*    Fortran unit numbers must be between 1 and 99 inclusive.
+C
+      IF (KUNIT.LT.1.OR.KUNIT.GT.99)
+     C   THEN
+             IRET = 7
+             WRITE (*,9911) KUNIT
+             GO TO 9000
+         ENDIF
+C
+C*    Retain last write indicator.
+C
+      IF (KEOF.LT.0.OR.KEOF.GT.2)
+     C   THEN
+             IRET = 7
+             WRITE (*,9916) KEOF
+             GO TO 9000
+         ENDIF
+C
+      IEOF = KEOF
+      KEOF = 0
+C
+C*    Locate Fortran unit number in list of active numbers.
+C
+      DO 1010 J1010=1,JPFILS
+         IF (IFTNOS(J1010).EQ.KUNIT)
+     C      THEN
+                IB = ISTART(J1010)
+                IP = J1010
+                GO TO 1030
+            ENDIF
+ 1010 CONTINUE
+C
+C*    None found, so first time in. Set table entries.
+C
+      DO 1020 J1020=1,JPFILS
+         IF (IFTNOS(J1020).EQ.0)
+     C      THEN
+                IB = 0
+                IP = J1020
+                IFTNOS(J1020) = KUNIT
+                GO TO 1030
+            ENDIF
+ 1020 CONTINUE
+C
+C*    No table entry free. Maximum number of files exceeded.
+C
+      IRET = 6
+      WRITE (*,9912) JPFILS
+      GO TO 9000
+C
+C*    Set pointer to array holding last part of data not written.
+C
+ 1030 CONTINUE
+C
+      IPR = IP
+      IP  =  (IP-1) * JPBLOK + 1
+C
+C     IOBUFF(IP) to IOBUFF(IP+B) are the remaining words after
+C     last block written.
+C
+C*    Flush output buffer only requested.
+C
+      IF (IEOF.EQ.2) GO TO 3575
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2 . Get length of next record.
+C     ----------------------------------------------------------------
+C
+ 2000 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C   THEN
+             WRITE (*,*) 'UNBKOUT : Section 2.'
+             WRITE (*,9909) IPR , IP , IB
+         ENDIF
+C
+C     Get length of record.
+C
+      IF (KOUTLEN.EQ.0)
+     C   THEN
+             ILENW = KARRAY(1)
+         ELSE
+             ILENW = KOUTLEN
+         ENDIF
+C
+C     Ensure that user's array is large enough.
+C
+      IF (KINLEN.LT.ILENW)
+     C   THEN
+             IRET = 5
+             WRITE (*,9917) KINLEN , ILENW
+             GO TO 9000
+         ENDIF
+C
+      IF (KPR.EQ.1) WRITE (*,9902) ILENW
+C
+C     ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 3 . Write complete blocks.
+C     ----------------------------------------------------------------
+C
+ 3000 CONTINUE
+C
+      IF (KPR.EQ.1) WRITE (*,*) 'UNBKOUT : Section 3.'
+C
+C     If the record is 1 block or more in length write it to file.
+C     Write partial last block into IOBUFF, preceding ones to file.
+C
+      IF ((IB+ILENW).GE.JPBLOK)
+     C   THEN
+C
+C            Copy enough words from user array to complete first block.
+C
+             IF (IB.EQ.0) GO TO 3200
+             DO 3050 J3050 = 1,JPBLOK - IB
+                IOBUFF(IP+J3050+IB-1) = KARRAY(J3050)
+ 3050        CONTINUE
+C
+             IC = IB
+             IB = JPBLOK - IB
+C
+C            Write first block.
+C
+             BUFFER OUT (KUNIT,0) (IOBUFF(IP),IOBUFF(IP+JPBLOK-1))
+             IF (UNIT(KUNIT)) 3200,3700,3700
+C
+ 3200        CONTINUE
+C
+C            Check if length to be written was exactly 1 block.
+C
+             IF ((ILENW + IC).EQ.JPBLOK)
+     C          THEN
+                    INTER = 0
+                    GO TO 3555
+                ENDIF
+C
+             ILENR = ILENW - IB
+             IDIFF = MOD (ILENR,JPBLOK)
+             IF (IDIFF.NE.0)
+     C          THEN
+                    ILENR = ILENR - IDIFF
+                ELSE
+                    ILENR = ILENR - JPBLOK
+                ENDIF
+             IE    = IB + ILENR
+C
+C            For a short record there may not be a full
+C            second block.
+C
+             IF (IE.EQ.IB) GO TO 3400
+C
+C            If remaining part of record to be written is a multiple
+C            of the block size, write complete record.
+C
+             IF ((ILENW-IE).EQ.JPBLOK) IE = IE + JPBLOK
+C
+             BUFFER OUT (KUNIT,0) (KARRAY(IB+1),KARRAY(IE))
+             IF (UNIT(KUNIT)) 3400,3700,3700
+C
+C            Put end of field in IOBUFF.
+C
+ 3400        CONTINUE
+C
+             INTER = ILENW - IE
+             DO 3500 J3500=1,INTER
+                IOBUFF(IP+J3500-1) = KARRAY(IE+J3500)
+ 3500        CONTINUE
+C
+         ELSE
+C
+C            Add short record to buffer.
+C
+             DO 3550 J3550 = 1,ILENW
+                IOBUFF(IP+J3550+IB-1) = KARRAY(J3550)
+ 3550        CONTINUE
+             INTER = IB + ILENW
+C
+         ENDIF
+C
+ 3555 CONTINUE
+C
+      IB      = INTER
+      KOUTLEN = ILENW
+C
+C     Fill unused part of buffer with zeroes.
+C
+      DO 3560 J3560 = IB+1,JPBLOK
+         IOBUFF(J3560+IP-1) = 0
+ 3560 CONTINUE
+C
+C     Write last part of last record if end of file.
+C     Do not write empty last block, when flushing buffer.
+C
+ 3575 CONTINUE
+C
+      IF (IEOF.GT.0)
+     C   THEN
+	     IF (IB.EQ.0) GO TO 3600
+             DO 3580 J3580 = IB+1,JPBLOK
+                IOBUFF(J3580+IP-1) = 0
+ 3580        CONTINUE
+             BUFFER OUT (KUNIT,0) (IOBUFF(IP),IOBUFF(IP+JPBLOK-1))
+             IF (UNIT(KUNIT)) 3600 , 3700 , 3700
+         ENDIF
+C
+ 3600 CONTINUE
+C
+C     Save pointer to start of next write area, unless last write.
+C
+      IF (IEOF.GT.0)
+     C   THEN
+             IFTNOS(IPR) = 0
+             ISTART(IPR) = 0
+         ELSE
+             ISTART(IPR) = IB
+         ENDIF
+C
+      GO TO 9000
+C
+ 3700        CONTINUE
+C
+C*           Write error, go to section 9.
+C
+             IRET = 1
+             WRITE (*,9913) KUNIT
+C
+C    ----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Return to calling routine. Format statements.
+C     ------------------------------------------------------------------
+C
+ 9000 CONTINUE
+C
+      IF (KPR.EQ.1)
+     C THEN
+           WRITE (*,*) 'UNBKOUT : Section 9.'
+           WRITE (*,*) '         Output values set -'
+           WRITE (*,9907) KOUTLEN
+           WRITE (*,9908) KEOF
+           WRITE (*,9906) IRET
+       ENDIF
+C
+C
+      IF (IRET.NE.0.AND.IRET.NE.2)
+     C   THEN
+             WRITE (*,9903) IRET
+             IF (KRET.EQ.0) CALL ABORT
+         ENDIF
+C
+      KRET = IRET
+C
+ 9902 FORMAT (1H ,'UNBKOUT : Record length (words) = ',I8)
+C
+ 9903 FORMAT (1H ,'UNBKOUT : Return code = ',I6)
+C
+ 9904 FORMAT (1H ,9X,'KUNIT   = ',I6)
+C
+ 9905 FORMAT (1H ,9X,'KINLEN  = ',I6)
+C
+ 9906 FORMAT (1H ,9X,'KRET    = ',I6)
+C
+ 9907 FORMAT (1H ,9X,'KOUTLEN = ',I6)
+C
+ 9908 FORMAT (1H ,9X,'KEOF    = ',I6)
+C
+ 9909 FORMAT (1H ,'IPR = ',I4,'  IP = ',I8,'  IB = ',I8)
+C
+ 9910 FORMAT (1H ,'UNBKOUT : KRET on input is ',I4,
+     C         '. Valid values are 0,1,100 or 101.')
+ 9911 FORMAT (1H ,'UNBKOUT : KUNIT on input is ',I4,
+     C         '. Valid values are 1 to 99.')
+ 9912 FORMAT (1H ,'UNBKOUT : Maximum number of files (',I2,
+     C         ' exceeded.')
+ 9913 FORMAT (1H ,'UNBKOUT : Error in writing file number ',I2)
+C
+ 9916 FORMAT (1H ,'UNBKOUT : KEOF on input is ',I4,
+     C         '. Valid values are 0,1 or 2.')
+ 9917 FORMAT (1H ,'UNBKOUT : Array length is ',I6,' words, but record',
+     C        ' length is ',I6,' words.')
+C
+      RETURN
+C
+      END
diff --git a/gribex/unblock.F b/gribex/unblock.F
new file mode 100755
index 0000000..6913bc8
--- /dev/null
+++ b/gribex/unblock.F
@@ -0,0 +1,110 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#ifdef CRAY
+      SUBROUTINE UNBLOCK (UN1,UN2,IRET)
+C
+C---->
+C**********************************************************************
+C*                                                                    *
+C*    NAME      : UNBLOCK                                             *
+C*                                                                    *
+C*    FUNCTION  : CONVERTS CRAY BLOCKED DATASET OF GRIB DATA INTO AN  *
+C*                UNBLOCKED DATASET                                   *
+C*                                                                    *
+C*    INPUT     : UN1   = INPUT  LUN                                  *
+C*                UN2   = OUTPUT LUN                                  *
+C*                                                                    *
+C*    OUTPUT    : IRET  = -100   BUFFER IN  ERROR                     *
+C*                      = -200   BUFFER OUT ERROR                     *
+C*                      > 0      NO. OF BLOCKS WRITTEN                *
+C*                                                                    *
+C*    GENERAL   : UNBLOCK CALLS   -----                               *
+C*                                                                    *
+C*    AUTHOR    : B.V. GURETZKY     V.E. DAY                          *
+C*                                                                    *
+C*    MODIFIED  : J. HENNESSY       26.11.85                          *
+C*                                                                    *
+C**********************************************************************
+C----<
+C
+      IMPLICIT INTEGER (B,U)
+      PARAMETER (BLEN=25088)
+      DIMENSION BUF(BLEN+512)
+C
+C     NO OF WORDS PER BLOCK (UNBLOCKED DATASET ICB = 512 )
+      DATA ICB /512/
+C
+      IRET = 0
+      IRES = 0
+C
+      DO 5000 J = 1,10000
+C
+C        READ INPUT FILE RECORD.
+C
+         BUFFER IN (UN1,0) (BUF(IRES+1),BUF(BLEN+ICB))
+         IUNIT = UNIT(UN1)
+         IF (UNIT(UN1)) 1000,5500,10000
+ 1000    CONTINUE
+
+         LEN  = IRES + LENGTH(UN1)
+         K    = LEN  / ICB
+         IE   = K    * ICB
+         IRES = LEN  - IE
+C
+         IF (K.NE.0)
+     C      THEN
+C
+C               WRITE FIRST CHUNK OF ICB-BLOCKS
+C
+                BUFFER OUT (UN2,0) (BUF(1),BUF(IE))
+                IUNIT = UNIT(UN2)
+                IF (IUNIT.GT.0) GO TO 10100
+                IRET = IRET + K
+C
+C               MOVE REMAINDER OF BLOCK TO FRONT AND GET NEXT RECORD.
+C
+                DO 4000 I = 1,IRES
+                   BUF(I) = BUF(IE+I)
+ 4000           CONTINUE
+C
+            ENDIF
+C
+ 5000 CONTINUE
+C
+C
+C     HANDLE LAST BLOCK, SETTING UNUSED WORDS OF LAST BLOCK TO 0.
+C
+ 5500 IF (IRES.NE.0)
+     C   THEN
+             IRES = IRES + 1
+             DO 6000 I = IRES,ICB
+                BUF(I) = 0
+ 6000        CONTINUE
+             BUFFER OUT (UN2,0)(BUF(1),BUF(ICB))
+             IUNIT = UNIT(UN2)
+             IF (IUNIT.GT.0) GO TO 10100
+             IRET = IRET + 1
+         ENDIF
+C
+      RETURN
+C
+10000 CONTINUE
+      IRET = -100
+      WRITE (*,*) 'UNBLOCK : BUFFER IN ERROR'
+      RETURN
+C
+10100 CONTINUE
+      IRET = -200
+      WRITE (*,*) 'UNBLOCK : BUFFER OUT ERROR'
+      RETURN
+C
+      END
+#endif
diff --git a/gribex/uncmpck.F b/gribex/uncmpck.F
new file mode 100755
index 0000000..6487964
--- /dev/null
+++ b/gribex/uncmpck.F
@@ -0,0 +1,141 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE UNCMPCK(PSPEC,KTRUNC,KTRUNCNP)
+C
+C---->
+C**** UNCMPCK
+C
+C     Purpose.
+C     --------
+C
+C     Puts spectral coefficients in contiguous locations.
+C
+C
+C**   Interface.
+C     ----------
+C
+C     CALL UNCMPCK(PSPEC,KTRUNC,KTRUNCNP)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     PSPEC      - Array of spectral coefficients.
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KTRUNCNP   - Truncation of the subset of spherical harmonic
+C                  coefficients to be re-inserted..
+C
+C
+C     Output Parameters.
+C     -----------------
+C
+C     PSPEC      - Array of spectral coefficients rearranged.
+C
+C
+C     Method.
+C     -------
+C
+C     Given the values CCCCCC...C , contiguous in array PSPEC,
+C     rearranges them to leave slots for the subset of spectral
+C     coefficients to be re-inserted..
+C
+C                            <subset>|
+C
+C     Thus:                  cccccccc|CCCCCC
+C                              cccccc|CCCCCC
+C                                cccc|CCCCCC
+C                                  cc|CCCCCC
+C                                    |CCCCCC
+C                                       CCCC
+C                                         CC
+C
+C     Externals.
+C     ----------
+C
+C     None.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     --------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     M.Hamrut         ECMWF      09:05:94
+C
+C
+C     Modifications.
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+      INTEGER KTRUNC,KTRUNCNP
+      REAL PSPEC((KTRUNC+1)*(KTRUNC+2))
+C
+C     Local variables.
+      INTEGER IMAXP, IMAXUP, IUC, IC, JM, JN, IL2, IL1, ILEN
+C
+C     -----------------------------------------------------------------
+C*    Section 1. Rearrange the values.
+C     -----------------------------------------------------------------
+C
+      IMAXP  = (KTRUNC+1)*(KTRUNC+2)
+      IMAXUP = (KTRUNC+1)*(KTRUNC+2)-(KTRUNCNP+1)*(KTRUNCNP+2) 
+      IUC = IMAXP+1
+      IC  = IMAXUP+1
+C
+C     Loop through rows, starting at end and working backwards.
+      DO 102 JM=KTRUNC,0,-1
+C
+C       In each row calculate value to start with.
+C       For early rows, there are some values to skip to leave slots
+C       for the subset being re-instated.
+        IL2=MAX(JM,KTRUNCNP+1)
+        IL1=IL2-1
+        ILEN=2*(KTRUNC-IL2+1)
+C
+C       Move values for the row.
+CDIR$ IVDEP      
+        DO 104 JN=1,ILEN
+          IUC = IUC-1
+          IC  = IC-1
+          PSPEC(IUC) = PSPEC(IC)
+ 104    CONTINUE     
+C
+        IUC = IUC-MAX((IL1-JM+1)*2,0)
+ 102  CONTINUE
+C
+C     -----------------------------------------------------------------
+C*    Section 9. Return.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END        
diff --git a/gribex/unpkcf.F b/gribex/unpkcf.F
new file mode 100755
index 0000000..40f1e9a
--- /dev/null
+++ b/gribex/unpkcf.F
@@ -0,0 +1,268 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION UNPKCF( PARRAY, KTRUNC, KSUBSET, KGRIB, KLENG,
+     X                          KNSPT, KBITS)
+C
+C---->
+C**** UNPKCF
+C
+C     Purpose.
+C     --------
+C
+C     Unpacks scaled values from a GRIB product to an array of spherical
+C     harmonic coefficients, the first KSUBSET triangle of coefficients
+C
+C**   Interface.
+C     ----------
+C
+C     IRET = UNPKCF(PARRAY,KTRUNC,KSUBSET,KGRIB,KLENG,KNSPT,KBITS)
+C
+C
+C     Input Parameters.
+C     -----------------
+C
+C     KTRUNC     - Truncation of the spherical harmonic coefficients.
+C     KSUBSET    - Number indicating truncation of subset.
+C     KGRIB      - Array containing generated GRIB product.
+C     KLENG      - Length of KGRIB
+C     KNSPT      - Bit pointer for next free position in KGRIB.
+C
+C
+C     Output Parameters.
+C     ------------------
+C
+C     PARRAY     - Array of spherical harmonic coefficients.
+C     KNSPT      - Bit pointer for next free position in KGRIB(updated).
+C     KBITS      - Number of bits per computer word.
+C
+C     Returns 0 if OK, otherwise prints an error message and returns
+C     an error code.
+C
+C
+C     Method.
+C     -------
+C                           <KSUBSET>|
+C
+C     Given numbers:         cccccccc|cccccc
+C                              cccccc|cccccc
+C                                cccc|cccccc
+C                                  cc|cccccc
+C                                    |cccccc
+C                                       cccc
+C                                         cc
+C
+C      Converts and moves :  cccccccc
+C                              cccccc
+C                                cccc
+C                                  cc
+C
+C     Externals.
+C     ----------
+C
+C     DECFP2  - Convert to floating point value from storage format
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+C     GSBITE  - Extract bit pattern (Vectorized Fortran).
+#endif
+C     GBYTES  - Extract bit pattern
+C
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Comments.
+C     ---------
+C
+C     KSUBSET must be less than or equal to KTRUNC.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers     ECMWF      13:04:94
+C
+C
+C     Modifications.
+C     --------------
+C
+C     None.
+C
+C
+C----<
+C     ----------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ----------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Parameters
+      INTEGER JPMAXT
+      PARAMETER ( JPMAXT = 2047 + 1 )
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KSUBSET, KNSPT, KGRIB, KLENG, KBITS
+C
+      REAL PARRAY
+      DIMENSION PARRAY(*), KGRIB(KLENG)
+C
+C     Local variables.
+      INTEGER JCOL, JROW, INDEX, ILAST, ITRND, IEXP, IMANT
+      INTEGER INSPT, INEXT, IWORD, IOFF
+      DIMENSION IEXP(JPMAXT*2), IMANT(JPMAXT*2)
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+C
+C     Values in IMASK are set in the first call to routine GSBITE, and
+C     are used in subsequent calls.
+C
+      INTEGER IMASK
+      DIMENSION IMASK(65)
+      SAVE IMASK
+C
+C     Force routine GSBITE to calculate bit-masks first time through.
+      DATA IMASK(2) /0/
+#endif
+C
+C     ----------------------------------------------------------------
+C*    Section 1 . Check for valid truncation and start values.
+C     ----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Check for valid truncation and start values
+C
+      UNPKCF = 0
+      IF ( KSUBSET .GT. KTRUNC ) THEN
+        WRITE(GRPRSM,*) ' UNPKCF - Invalid start/truncation given'
+        WRITE(GRPRSM,*) ' UNPKCF - KSUBSET, KTRUNC =', KSUBSET, KTRUNC
+        UNPKCF = 16500
+        GOTO 900
+      ENDIF
+C
+C     ----------------------------------------------------------------
+C*    Section 2. Convert values from IBM format exponent and mantissa.
+C                Handle values 2 at a time (real and imaginary parts)
+C     ----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      ITRND = 1
+      ILAST = KSUBSET+1
+      INDEX = -1
+C
+C     Extract values in pairs and convert to floating point
+C
+C     Loop through rows in the subset
+      DO 590 JROW = 1 , ILAST
+        INEXT = 2 * (ILAST - JROW + 1)
+C
+C     ----------------------------------------------------------------
+C*    Section 3. Get exponents from bit array.
+C     ----------------------------------------------------------------
+C
+  300   CONTINUE
+C
+C*      Calculate word pointer and offset.
+        INSPT = KNSPT
+        IWORD = INSPT / KBITS
+        IOFF  = INSPT - IWORD * KBITS
+        IWORD = IWORD + 1
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+        IF (INEXT.GE.8) THEN
+C
+C         Vectorising routine GSBITE.
+          CALL GSBITE( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT, KBITS,
+     X                 IMASK, 'D')
+        ELSE
+C
+C         Scalar faster.
+          CALL GBYTES( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT)
+        ENDIF
+#elif (defined CYBER)
+        CALL GBYTES6( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT)
+#else
+        CALL GBYTES( KGRIB(IWORD), IEXP, IOFF, 8, 24, INEXT)
+#endif
+C
+C
+C     ----------------------------------------------------------------
+C*    Section 4. Get mantissae from bit array.
+C     ----------------------------------------------------------------
+C
+  400   CONTINUE
+C
+C*      Calculate word pointer and offset.
+        INSPT = KNSPT + 8
+        IWORD = INSPT / KBITS
+        IOFF  = INSPT - IWORD * KBITS
+        IWORD = IWORD + 1
+C
+#if (defined CRAY) || (defined __uxp__ ) || (defined IBM_POWER4)
+        IF (INEXT.GE.8) THEN
+C
+C         Vectorising routine GSBITE.
+          CALL GSBITE( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT, KBITS,
+     X                 IMASK, 'D')
+        ELSE
+C
+C         Scalar faster.
+          CALL GBYTES( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT)
+        ENDIF
+#elif (defined CYBER)
+        CALL GBYTES6( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT)
+#else
+        CALL GBYTES( KGRIB(IWORD), IMANT, IOFF, 24, 8, INEXT)
+#endif
+C
+C     ----------------------------------------------------------------
+C*    Section 5. Convert values from IBM format exponent and mantissa.
+C     ----------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C       Convert columns in subset
+        INEXT = 0
+        DO 510 JCOL = JROW , KTRUNC+1
+          INDEX = INDEX + 2
+          IF ( ILAST .GE. JCOL ) THEN
+C
+C           Real part ..
+            INEXT = INEXT + 1
+            CALL DECFP2 (PARRAY(INDEX),IEXP(INEXT),IMANT(INEXT))
+C
+C           Imaginary part ..
+            INEXT = INEXT + 1
+            CALL DECFP2 (PARRAY(INDEX+1),IEXP(INEXT),IMANT(INEXT))
+          ENDIF
+  510   CONTINUE
+C
+C       Update pointer.
+        KNSPT = KNSPT + INEXT*32
+C
+  590 CONTINUE
+C
+C     ----------------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     ----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/gribex/valpina.c b/gribex/valpina.c
new file mode 100755
index 0000000..9dccbac
--- /dev/null
+++ b/gribex/valpina.c
@@ -0,0 +1,243 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include "fortint.h"
+
+#define CHARSIZE (long) (sizeof(char)*8)
+#define LEASTSIGBIT 0x01
+
+long bitmapValue(unsigned char * , long );
+long bitmapValueTotal(unsigned char * , long, long );
+fortint valpina(unsigned char * , fortint *, fortint * );
+fortint valpina_(unsigned char * , fortint *, fortint * );
+long separationBetweenValues(unsigned char * , long , long );
+fortint numvals(unsigned char *, fortint *, fortint *);
+fortint numvals_(unsigned char *, fortint *, fortint *);
+fortint onebits(unsigned char *, fortint *);
+fortint onebits_(unsigned char *, fortint *);
+
+fortint numvals_(unsigned char * grib, fortint* istart, fortint* ifinish) {
+/*
+// Returns a count of the number of 1s in a GRIB between positions
+// 'start' and 'finish'.
+// If start = 0, the static values in the function are initialised.
+*/
+long start = (long) (*istart);
+long finish = (long) (*ifinish);
+static long oldTotal;
+static long oldStart, oldFinish;
+unsigned char * bitmap = grib;
+static unsigned char * oldBitmap = 0;
+
+  if( !start ) {
+    oldBitmap = 0;
+    oldTotal = 0;
+    oldStart = oldFinish = 1;
+    return (fortint) oldTotal;
+  }
+
+  if( oldBitmap != bitmap ) {
+    oldBitmap = bitmap;
+    oldStart = oldFinish = 1;
+    oldTotal = 0;
+  }
+
+  if( start == finish ) {
+    oldStart = oldFinish = finish;
+    oldTotal = 0;
+    return (fortint) oldTotal;
+  }
+
+  if( oldStart != start ) {
+    oldTotal = bitmapValueTotal(bitmap, start+1, finish);
+  }
+  else {
+    if( oldFinish < finish )
+      oldTotal += bitmapValueTotal(bitmap, oldFinish+1, finish);
+    else if( oldFinish > finish )
+      oldTotal -= bitmapValueTotal(bitmap, finish+1, oldFinish);
+  }
+
+  oldStart = start;
+  oldFinish = finish;
+
+  return (fortint) oldTotal;
+
+}
+
+fortint numvals(unsigned char * grib, fortint* istart, fortint* ifinish) {
+  return numvals_(grib,istart,ifinish);
+}
+
+fortint onebits_(unsigned char * grib, fortint* isection_3_offset) {
+/*
+// Returns a count of the number of 1s in a GRIB section 3 bitmap.
+*/
+long section_3_offset = (long) (*isection_3_offset);
+unsigned char * bitmap = grib + section_3_offset;
+long length, unused;
+long number_of_bits, total;
+
+  length = (*bitmap)<<16 | (*(bitmap+1)<<8) | *(bitmap+2);
+  unused = *(bitmap+3);
+  number_of_bits = ((length-6)*CHARSIZE) - unused;
+
+  total = bitmapValueTotal((bitmap+6),1,number_of_bits);
+  return ( (fortint) total );
+}
+
+fortint onebits(unsigned char * grib, fortint* isection_3_offset) {
+  return onebits_(grib,isection_3_offset);
+}
+
+long bitmapValueTotal(unsigned char * bitmap, long start, long finish) {
+/*
+// Returns the count of 1 bits between start and finish in a bitmap.
+*/
+long total = 0;
+unsigned char * first, * last, * next;
+/*
+  Lookup table to count number of 1s in a char
+*/
+static const char lookup[256] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};
+/*
+  Masks to remove bits from left- and right-hand end of a char
+*/
+static const unsigned char bottomMask[8] =
+  {0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
+static const unsigned char topMask[8]    =
+  {0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
+int bitsToAdd, bitsToSubtract;
+
+  first = bitmap + (start-1)/CHARSIZE;
+  last  = bitmap + (finish-1)/CHARSIZE;
+
+
+  bitsToAdd = (start-1)%CHARSIZE;
+  total = lookup[(*first & bottomMask[bitsToAdd])];
+
+  for( next = (first+1); next < last ; next++ )
+    total += lookup[*next];
+
+  if( last > first ) total += lookup[*last];
+
+  bitsToSubtract = CHARSIZE - 1 - (finish-1)%CHARSIZE;
+  total -= lookup[(*last & (~topMask[bitsToSubtract]))];
+
+  return total;
+}
+
+long bitmapValue(unsigned char * bitmap, long index) {
+/*
+// Returns the value (0,1) of the bit at position 'index' in a bitmap.
+*/
+unsigned char * next;
+int bitShift;
+
+  next = bitmap + (index-1)/CHARSIZE;
+  bitShift = CHARSIZE - 1 - ((index-1)%CHARSIZE);
+
+  return  (((*next) >> bitShift) & LEASTSIGBIT);
+
+}
+
+fortint valpina_(unsigned char * grib, fortint* ioffset, fortint* iindex) {
+/*
+//  A GRIB product starts at 'grib' and contains missing/non-missing values
+//  as described by a bitmap which is at position 'offset' in the GRIB.
+//
+//  'index' is the position of a point (missing/non-missing) in the field.
+//  If index = 0, the static values in the function are initialised.
+//
+//  Examines the bitmap and returns:
+//
+//  - the actual index of a non-missing value
+//
+//  - 0 for a missing value
+*/
+long offset = (long) (*ioffset);
+long index = (long) (*iindex);
+unsigned char * bitmap = (grib + offset);
+static unsigned char * oldBitmap;
+static long count = 0;
+static long oldIndex = 0;
+long value;
+
+  if( !(index) ) {
+    oldBitmap = 0;
+    count = 0;
+    oldIndex = 0;
+    return (fortint) 0;
+  }
+
+  if( oldBitmap != bitmap ) {
+    oldBitmap = bitmap;
+    count = 0;
+    oldIndex = 0;
+  }
+
+  value = bitmapValue(bitmap, index);
+
+  if( value ) {
+    if( (index) != oldIndex ) {
+      count += separationBetweenValues(bitmap, oldIndex, index);
+      oldIndex = index;
+    }
+    return (fortint) count;
+  }
+  else
+    return (fortint) 0;
+}
+
+fortint valpina(unsigned char * grib, fortint* ioffset, fortint* iindex) {
+  return valpina_(grib,ioffset,iindex);
+}
+
+long separationBetweenValues(unsigned char * bitmap,long oldIndex,long index) {
+/*
+//  Counts the number of actual (non-missing) values between two locations
+//  in the bitmap given by 'index' and 'oldIndex'.
+//
+//  The returned count can be positive or negative depending on whether
+//  index is after or before oldIndex.
+*/
+long start, finish, sign = 1, total = 0;
+
+  if( index > oldIndex ) {
+    start = oldIndex;
+    finish = index;
+  }
+  else {
+    start = index;
+    finish = oldIndex;
+    sign = -1;
+  }
+
+  total = bitmapValueTotal(bitmap, (start+1), finish);
+
+  return (sign*total);
+}
diff --git a/gribex/vod2uv.F b/gribex/vod2uv.F
new file mode 100755
index 0000000..948e004
--- /dev/null
+++ b/gribex/vod2uv.F
@@ -0,0 +1,129 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      SUBROUTINE VOD2UV(VOR,DIV,KTIN,U,V,KTOUT)
+C
+C---->
+C
+CL    CALCULATE SPHERICAL HARMONIC COEFFICIENTS OF U*COS(LAT) AND
+CL    V*COS(LAT) AT TRIANGULAR TRUNCATION KTOUT, GIVEN THE COEFFICIENTS
+CL    OF DIVERGENCE AND VORTICITY AT TRUNCATION KTIN
+CL
+CL    WHERE VOR(KDIM1)=INPUT ARRAY OF VORTICITY COEFFICIENTS
+CL          DIV(KDIM1)=INPUT ARRAY OF DIVERGENCE COEFFICIENTS
+CL          KTIN      =INPUT TRIANGULAR TRUNCATION
+CL          KDIM1     =(KTIN+1)*(KTIN+2)
+CL          U(KDIM2)  =OUTPUT ARRAY OF U*COS(LAT) COEFFICIENTS
+CL          V(KDIM2)  =OUTPUT ARRAY OF V*COS(LAT) COEFFICIENTS
+CL          KTOUT     =OUTPUT TRIANGULAR TRUNCATION (KTOUT.LE.KTIN)
+CL          KDIM2     =(KTOUT+1)*(KTOUT+4)
+C
+C     VERSION 1   5/1/81   JAN HASELER   ECMWF
+C
+C     VERSION 2   5/5/87   MODIFIED BY D. R. ROSKILLY
+C     THIS MOD. DOES NOT CALCULATE THE EXTRA VALUES FOR
+C     U AND V WINDS TO ALLOW VORT. AND DIV. TO BE RE-CALCULATED
+C     IF REQUIRED.
+C
+C     Version 3  15/2/88   routine renamed VOD2UV from DVTOUV.
+C
+C     VERSION 4  21/8/91   MODIFIED BY K.RIDER
+C
+C     THIS MOD. WAS MADE BECAUSE VERSION 2 WAS INCONSISTENTLY
+C     TRUNCATING U AND V TO T(ITOUT-1).
+C     NOW VORT. AND DIV. ARE CONSISTENTLY TRUNCATED TO T105
+C     AND U AND V ARE CALCULATED WITH TRUNCATION T(ITOUT),(WITH
+C     ZERO VALUES AT THE CORNER. VORT. AND DIV. CAN BE RECALCULATED
+C     IF REQUIRED, BUT ONLY TRUNCATED TO T(ITOUT) SINCE THE HIGHER
+C     COEFFICIENTS HAVE BEEN LOST.
+C
+C----<
+C
+      COMPLEX VOR(1),DIV(1),U(1),V(1),ZI
+C
+      DD(PM,PN)=-SQRT((PN*PN-PM*PM)/(4.*PN*PN-1.))/PN
+      SS(PM,PN)=-PM/(PN*(PN+1.))
+C
+      ZI=(0.,1.)
+      REARTH=6.371E6
+      K=1
+      IMN=1
+      ITOUT=MIN0(KTOUT,KTIN)
+C
+CL            1.1       M<ITOUT; N=M
+ 110  CONTINUE
+      DO 155 JM=1,ITOUT
+      ZM=JM-1.
+      ZN=ZM
+      IF (JM.EQ.1) GOTO 115
+      U(K)=(-DD(ZM,ZN+1.)*VOR(IMN+1)+ZI*SS(ZM,ZN)*DIV(IMN))*REARTH
+      V(K)=( DD(ZM,ZN+1.)*DIV(IMN+1)+ZI*SS(ZM,ZN)*VOR(IMN))*REARTH
+      GOTO 120
+C
+ 115  CONTINUE
+      U(K)=(-DD(ZM,ZN+1.)*VOR(IMN+1))*REARTH
+      V(K)=( DD(ZM,ZN+1.)*DIV(IMN+1))*REARTH
+C
+ 120  CONTINUE
+      IMN=IMN+1
+      K=K+1
+      JMP=JM+1
+      IF (JMP.GT.ITOUT) GOTO 140
+C
+CL            1.3       M<ITOUT; N<ITOUT-1
+ 130  CONTINUE
+      DO 135 JN=JMP,ITOUT-1
+      ZN=JN-1.
+      U(K)=( DD(ZM,ZN)*VOR(IMN-1)-DD(ZM,ZN+1)*VOR(IMN+1)
+     1        +ZI*SS(ZM,ZN)*DIV(IMN))*REARTH
+      V(K)=(-DD(ZM,ZN)*DIV(IMN-1)+DD(ZM,ZN+1)*DIV(IMN+1)
+     1        +ZI*SS(ZM,ZN)*VOR(IMN))*REARTH
+      K=K+1
+ 135  IMN=IMN+1
+C
+CL            1.3.1     M<ITOUT; N=ITOUT-1
+ 136  CONTINUE
+      ZN=ITOUT-1
+      U(K)=( DD(ZM,ZN)*VOR(IMN-1)+ZI*SS(ZM,ZN)*DIV(IMN))*REARTH
+      V(K)=(-DD(ZM,ZN)*DIV(IMN-1)+ZI*SS(ZM,ZN)*VOR(IMN))*REARTH
+      K=K+1
+      IMN=IMN+1
+C
+CL            1.4       M<ITOUT; N=ITOUT
+ 140  CONTINUE
+      ZN=ITOUT
+      U(K)=( DD(ZM,ZN)*VOR(IMN-1))*REARTH
+      V(K)=(-DD(ZM,ZN)*DIV(IMN-1))*REARTH
+      K=K+1
+C
+CL            1.5       M<ITOUT; N=ITOUT+1
+ 150  CONTINUE
+C--   ZN=ITOUT+1
+C--   U(K)=( DD(ZM,ZN)*VOR(IMN))*REARTH
+C--   V(K)=(-DD(ZM,ZN)*DIV(IMN))*REARTH
+C--   K=K+1
+      IMN=IMN+1+KTIN-ITOUT
+ 155  CONTINUE
+C
+CL            1.6       M=ITOUT; N=ITOUT
+ 160  CONTINUE
+      U(K)=0.
+      V(K)=0.
+      K=K+1
+C
+CL            1.7       M=ITOUT; N=ITOUT+1
+ 170  CONTINUE
+C--   ZN=ITOUT+1
+C--   U(K)= DD(ZM,ZN)*VOR(IMN)*REARTH
+C--   V(K)=-DD(ZM,ZN)*DIV(IMN)*REARTH
+C
+      RETURN
+      END
diff --git a/gribex/xgrdemo.F b/gribex/xgrdemo.F
new file mode 100755
index 0000000..39938f4
--- /dev/null
+++ b/gribex/xgrdemo.F
@@ -0,0 +1,209 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      PROGRAM GRDEMO
+C
+      IMPLICIT NONE
+C
+C---->
+C**** GRDEMO - Program to demonstrate use of GRIBEX routine.
+C
+C     Purpose.
+C     --------
+C
+C     Demonstrates use of GRIBEX routine to unpack
+C     GRIB coded data.
+C
+C**   Interface.
+C     ----------
+C
+C     File of GRIB coded data in "datafile".
+C
+C     Method.
+C     -------
+C
+C     Prints sections 0, 1, 2, 3 and 4 of GRIB message.
+C
+C     Externals.
+C     ----------
+C
+C     GRIBEX
+C     GRPRS0
+C     GRPRS1
+C     GRPRS2
+C     GRPRS3
+C     GRPRS4
+C     PBOPEN
+C     PBGRIB
+C     PBCLOSE
+C
+C     Reference.
+C     ----------
+C
+C     WMO Manual on Codes for GRIB definition.
+C     WMO Publication No. 9, Volume B, for grid catalogue numbers.
+C
+C     Comments.
+C     ---------
+C
+C     GRIBEX provides a number of packing/unpacking options.
+C     See documentation for details.
+C
+C
+C     -----------------------------------------------------------------
+C----<
+C
+C     Arrays are dimensioned to accommodate T213/N160 data volumes.
+C
+      INTEGER JPACK
+      PARAMETER (JPACK=70000)
+      INTEGER ISEC0, ISEC1, ISEC2, ISEC3, ISEC4
+C
+C     Array for integer parameters from section 0 of GRIB message.
+C
+      DIMENSION ISEC0(2)
+C
+C     Array for integer parameters from section 1 of GRIB message.
+C
+      DIMENSION ISEC1(1024)
+C
+C     Array for integer parameters from section 2 of GRIB message.
+C
+      DIMENSION ISEC2(1024)
+C
+C     Array for integer parameters from section 3 of GRIB message.
+C
+      DIMENSION ISEC3(2)
+C
+C     Array for integer parameters from section 4 of GRIB message.
+C
+      DIMENSION ISEC4(512)
+C
+      REAL ZSEC2, ZSEC3, ZSEC4
+C
+C     Array for real parameters from section 2 of GRIB message.
+C
+      DIMENSION ZSEC2(512)
+C
+C     Array for real parameters from section 3 of GRIB message.
+C
+      DIMENSION ZSEC3(2)
+C
+C     Array for real parameters from section 4 of GRIB message.
+C     This is the binary data section and the array to hold the unpacked
+C     data may need to be a number of times as long as that for the
+C     packed data. Here it is set arbitrarily to four time longer.
+C
+      DIMENSION ZSEC4(JPACK*2)
+C
+C     Array to read in packed data.
+C
+      INTEGER INBUFF
+      DIMENSION INBUFF(JPACK)
+C
+      INTEGER FILE, JCOUNT, NUMERR, IRET, IPUNP, IWORD
+      INTEGER LOOP, LENOUT, ILENB
+C
+C     Clear counters.
+C
+      NUMERR = 0
+      JCOUNT = 0
+C
+C     Open the data file
+C
+      CALL PBOPEN( FILE, "datafile", "R", IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*, *) 'Return code from PBOPEN = ',IRET
+        CALL PBCLOSE(FILE, IRET)
+        STOP 'Fault in PBOPEN'
+      ENDIF
+      ILENB = ILENB*4
+C
+C
+C     Loop through GRIB products in file.
+C
+   50 CONTINUE
+C
+        JCOUNT = JCOUNT + 1
+C
+C       Read packed field into INBUFF.
+C
+        CALL PBSIZE(FILE, LENOUT)
+        WRITE(*,*) 'Next GRIB field size = ', lenout
+C
+        ILENB = JPACK * 4
+        CALL PBGRIB( FILE, INBUFF, ILENB, LENOUT, IRET )
+        IF( IRET.LT.0 ) THEN
+          WRITE(*, *) 'Return code from PBGRIB = ',IRET
+          IF( IRET.EQ.-1 ) THEN
+            WRITE(*, *) 'End of file. Number of products = ',(JCOUNT-1)
+            CALL PBCLOSE(FILE, IRET)
+            WRITE(*,*) 'Number of decoding errors = ',NUMERR
+            STOP 'EOF'
+          ELSE
+            WRITE(*, *)
+     X        'Return code = ',IRET,' after ',JCOUNT,' products.'
+            CALL PBCLOSE(FILE, IRET)
+            STOP 'Fault in PBGRIB'
+          ENDIF
+        ENDIF
+        WRITE(*, *) 'Return length from PBGRIB = ',lenout
+C
+C       Decode the GRIB product.
+C
+        IRET = 1
+        ILENB = JPACK
+        IPUNP = JPACK * 4
+        CALL GRIBEX(ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X              ZSEC4,IPUNP,INBUFF,ILENB,IWORD,'D',IRET)
+C
+C       Check the return code.
+c
+        WRITE(*,*) 'GRIBEX return code = ',IRET
+        IF( IRET.EQ.-6 ) WRITE(*,*) 'Pseudo-grib data found.'
+C
+C       Update error count if necessary.
+C
+        IF( IRET.GT.0 ) THEN
+          NUMERR = NUMERR + 1
+          GOTO 50
+        ENDIF
+C
+C       Print section 0, 1, 2 and 3 (if present) and 4.
+C       Section 1 is the product definition section.
+C       Section 2 is the grid definition section.
+C       Section 3 is the bit-map section.
+C       Section 4 is the data section.
+C
+        CALL GRPRS0(ISEC0)
+        CALL GRPRS1(ISEC0,ISEC1)
+C
+        IF( (ISEC1(5).EQ.0).OR.(ISEC1(5).EQ.64) ) THEN
+          WRITE(*,*) 'No section 2 in GRIB message.'
+        ELSE
+          CALL GRPRS2(ISEC0,ISEC2,ZSEC2)
+        ENDIF
+C
+        IF( (ISEC1(5).EQ.0).OR.(ISEC1(5).EQ.128) ) THEN
+          WRITE(*,*) 'No section 3 in GRIB message.'
+        ELSE
+          CALL GRPRS3(ISEC0,ISEC3,ZSEC3)
+        ENDIF
+C
+        CALL GRPRS4(ISEC0,ISEC4,ZSEC4)
+C
+C       Print some vales
+        DO LOOP = 1,ISEC4(1)
+          WRITE(*,*) 'zsec4(', loop, ') = ', zsec4(loop)
+        ENDDO
+C
+      GOTO 50
+C
+      END
diff --git a/gribex/yyyy2cy.F b/gribex/yyyy2cy.F
new file mode 100755
index 0000000..df8380d
--- /dev/null
+++ b/gribex/yyyy2cy.F
@@ -0,0 +1,93 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION YYYY2CY(YYYY, CENTURY, YEAR)
+C
+C---->
+C**** YYYY2CY
+C
+C     Purpose
+C     -------
+C
+C     Return WMO defined century and year from YYYY date.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = YYYY2CY(YYYY, CENTURY, YEAR)
+C
+C     Input
+C     -----
+C
+C     YYYY    = Integer date in YYYY formay (eg 1998)
+C
+C
+C     Output
+C     ------
+C
+C     CENTURY = Integer century in CC format (eg 20 for 1998)
+C     YEAR    = Integer year in range 1 to 100 (eg 98 for 1998)
+C
+C     Returns 0 if function worked OK.
+C     Otherwise an illegal year has been give.
+C
+C
+C     Method
+C     ------
+C
+C     Last year in century is year 100
+C     (eg year 2000 is century 20, year 100)
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Sept 1998
+C
+C
+C ------------------------------------------------------------------
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER YYYY, CENTURY, YEAR
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Check valid input year (0000 to 9999)
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Check valid input year (0000 to 9999)
+C
+      IF( (YYYY.LT.0).OR.(YYYY.GT.9999) ) THEN
+        YYYY2CY = 1
+        RETURN
+      ENDIF
+C
+      YEAR = YYYY - 1
+      YEAR = MOD(YEAR,100) + 1
+C
+      CENTURY = (YYYY/100 +1 )
+      IF( YEAR.EQ.100 ) CENTURY = CENTURY - 1
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Return
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      YYYY2CY = 0
+      RETURN
+      END
+
diff --git a/gribtables/cen074/local_table_2_version_174 b/gribtables/cen074/local_table_2_version_174
new file mode 100755
index 0000000..027ec87
--- /dev/null
+++ b/gribtables/cen074/local_table_2_version_174
@@ -0,0 +1,180 @@
+Non-ECMWF seasonal forecast model local table 2: Version Number 175 - anomalies.
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+006
+-
+Total soil moisture
+m
+The depth over which it is integrated varies depending on soil type
+......................
+031
+-
+Fraction of sea-ice in sea
+0 - 1
+0 - 1
+......................
+034
+-
+Open-sea surface temperature
+K     
+K
+......................
+039
+-
+Volumetric soil water layer 1
+m**3 m**-3 
+0 - 10cm
+......................
+040
+-
+Volumetric soil water layer 2
+m**3 m**-3 
+10 - 35cm
+......................
+041
+-
+Volumetric soil water layer 3
+m**3 m**-3 
+35 - 100cm
+......................
+042
+-
+Volumetric soil water layer 4
+m**3 m**-3 
+100 - 300cm
+......................
+049
+-
+0m wind gust over last 24 hours
+m s**-1 
+m s**-1
+......................
+055
+-
+1.5m temperature - mean over last 24 hours
+K
+K
+......................
+83
+-
+Net primary productivity
+kg C m**-2 s**-1
+kg C m**-2 s**-1
+......................
+85
+-
+10m U wind over land
+m s**-1
+m s**-1
+......................
+86
+-
+10m V wind over land
+m s**-1
+m s**-1
+......................
+87
+-
+1.5m temperature over land
+K
+K
+......................
+88
+-
+1.5m dewpoint temperature over land
+K
+K
+......................
+89
+-
+Top incoming solar radiation
+W m**-2 s
+Accumulated
+......................
+90
+-
+Top outgoing solar radiation
+W m**-2 s
+Accumulated
+......................
+110
+-
+Ocean ice concentration
+0 - 1
+0 - 1
+......................
+111
+-
+Ocean mean ice depth
+m
+m
+......................
+139
+-
+Soil temperature layer 1
+K
+0 - 10cm
+......................
+164
+-
+Average potential temperature in upper 293.4m
+degrees C
+degrees C
+......................
+167
+-
+1.5m temperature
+K
+K
+......................
+168
+-
+1.5m dewpoint temperature
+K
+K
+......................
+170
+-
+Soil temperature layer 2
+K
+10 - 35cm
+......................
+172
+-
+Fractional land mask
+0 - 1
+0 - 1
+......................
+175
+-
+Average salinity in upper 293.4m
+psu
+psu
+......................
+183
+-
+Soil temperature layer 3
+K
+35 - 100cm
+......................
+201
+-
+1.5m temperature - maximum over last 24 hours
+K
+K
+......................
+202
+-
+1.5m temperature - minimum over last 24 hours
+K
+K
+......................
+236
+-
+Soil temperature layer 4                          
+K
+K
+......................
+999
+.
+.
diff --git a/gribtables/cen074/local_table_2_version_175 b/gribtables/cen074/local_table_2_version_175
new file mode 100755
index 0000000..027ec87
--- /dev/null
+++ b/gribtables/cen074/local_table_2_version_175
@@ -0,0 +1,180 @@
+Non-ECMWF seasonal forecast model local table 2: Version Number 175 - anomalies.
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+006
+-
+Total soil moisture
+m
+The depth over which it is integrated varies depending on soil type
+......................
+031
+-
+Fraction of sea-ice in sea
+0 - 1
+0 - 1
+......................
+034
+-
+Open-sea surface temperature
+K     
+K
+......................
+039
+-
+Volumetric soil water layer 1
+m**3 m**-3 
+0 - 10cm
+......................
+040
+-
+Volumetric soil water layer 2
+m**3 m**-3 
+10 - 35cm
+......................
+041
+-
+Volumetric soil water layer 3
+m**3 m**-3 
+35 - 100cm
+......................
+042
+-
+Volumetric soil water layer 4
+m**3 m**-3 
+100 - 300cm
+......................
+049
+-
+0m wind gust over last 24 hours
+m s**-1 
+m s**-1
+......................
+055
+-
+1.5m temperature - mean over last 24 hours
+K
+K
+......................
+83
+-
+Net primary productivity
+kg C m**-2 s**-1
+kg C m**-2 s**-1
+......................
+85
+-
+10m U wind over land
+m s**-1
+m s**-1
+......................
+86
+-
+10m V wind over land
+m s**-1
+m s**-1
+......................
+87
+-
+1.5m temperature over land
+K
+K
+......................
+88
+-
+1.5m dewpoint temperature over land
+K
+K
+......................
+89
+-
+Top incoming solar radiation
+W m**-2 s
+Accumulated
+......................
+90
+-
+Top outgoing solar radiation
+W m**-2 s
+Accumulated
+......................
+110
+-
+Ocean ice concentration
+0 - 1
+0 - 1
+......................
+111
+-
+Ocean mean ice depth
+m
+m
+......................
+139
+-
+Soil temperature layer 1
+K
+0 - 10cm
+......................
+164
+-
+Average potential temperature in upper 293.4m
+degrees C
+degrees C
+......................
+167
+-
+1.5m temperature
+K
+K
+......................
+168
+-
+1.5m dewpoint temperature
+K
+K
+......................
+170
+-
+Soil temperature layer 2
+K
+10 - 35cm
+......................
+172
+-
+Fractional land mask
+0 - 1
+0 - 1
+......................
+175
+-
+Average salinity in upper 293.4m
+psu
+psu
+......................
+183
+-
+Soil temperature layer 3
+K
+35 - 100cm
+......................
+201
+-
+1.5m temperature - maximum over last 24 hours
+K
+K
+......................
+202
+-
+1.5m temperature - minimum over last 24 hours
+K
+K
+......................
+236
+-
+Soil temperature layer 4                          
+K
+K
+......................
+999
+.
+.
diff --git a/gribtables/cen080/local_table_2_version_201 b/gribtables/cen080/local_table_2_version_201
new file mode 100755
index 0000000..01b9109
--- /dev/null
+++ b/gribtables/cen080/local_table_2_version_201
@@ -0,0 +1,796 @@
+......................
+001
+None
+downward shortwave radiant flux density
+W m**-2
+W m**-2
+......................
+002
+None
+upward shortwave radiant flux density
+W m**-2
+W m**-2
+......................
+003
+None
+downward longwave radiant flux density
+W m**-2
+W m**-2
+......................
+004
+None
+upward longwave radiant flux density
+W m**-2
+W m**-2
+......................
+005
+APAB_S
+downwd photosynthetic active radiant flux density
+W m**-2
+W m**-2
+......................
+006
+None
+net shortwave flux
+W m**-2
+W m**-2
+......................
+007
+None
+net longwave flux
+W m**-2
+W m**-2
+......................
+008
+None
+total net radiative flux density
+W m**-2
+W m**-2
+......................
+009
+None
+downw shortw radiant flux density, cloudfree part
+W m**-2
+W m**-2
+......................
+010
+None
+upw shortw radiant flux density, cloudy part
+W m**-2
+W m**-2
+......................
+011
+None
+downw longw radiant flux density, cloudfree part
+W m**-2
+W m**-2
+......................
+012
+None
+upw longw radiant flux density, cloudy part
+W m**-2
+W m**-2
+......................
+013
+SOHR_RAD
+shortwave radiative heating rate
+K s**-1
+K s**-1
+......................
+014
+THHR_RAD
+longwave radiative heating rate
+K s**-1
+K s**-1
+......................
+015
+None
+total radiative heating rate
+W m**-2
+W m**-2
+......................
+016
+None
+soil heat flux, surface
+W m**-2
+W m**-2
+......................
+017
+None
+soil heat flux, bottom of layer
+W m**-2
+W m**-2
+......................
+018
+None
+undefined
+-
+-
+......................
+019
+None
+undefined
+-
+-
+......................
+020
+None
+undefined
+-
+-
+......................
+021
+None
+undefined
+-
+-
+......................
+022
+None
+undefined
+-
+-
+......................
+023
+None
+undefined
+-
+-
+......................
+024
+None
+undefined
+-
+-
+......................
+025
+None
+undefined
+-
+-
+......................
+026
+None
+undefined
+-
+-
+......................
+027
+None
+undefined
+-
+-
+......................
+028
+None
+undefined
+-
+-
+......................
+029
+CLC
+fractional cloud cover
+(0-1)
+(0-1)
+......................
+030
+None
+cloud cover, grid scale
+(0-1)
+(0-1)
+......................
+031
+QC
+specific cloud water content
+kg kg**-1
+kg kg**-1
+......................
+032
+None
+cloud water content, grid scale, vert integrated
+kg m**-2
+kg m**-2
+......................
+033
+QI
+specific cloud ice content, grid scale
+kg kg**-1
+kg kg**-1
+......................
+034
+None
+cloud ice content, grid scale, vert integrated
+kg m**-2     
+kg m**-2     
+......................
+035
+None
+specific rainwater content, grid scale
+kg kg**-1     
+kg kg**-1     
+......................
+036
+None
+specific snow content, grid scale
+kg kg**-1     
+kg kg**-1     
+......................
+037
+None
+specific rainwater content, gs, vert. integrated
+kg m**-2
+kg m**-2
+......................
+038
+None
+specific snow content, gs, vert. integrated
+kg m**-2     
+kg m**-2     
+......................
+039
+None
+undefined
+-
+-
+......................
+040
+None
+undefined
+-
+-
+......................
+041
+TWATER
+total column water
+kg m**-2
+kg m**-2
+......................
+042
+None
+vert. integral of divergence of tot. water content
+kg m**-2
+kg m**-2
+......................
+043
+None
+undefined
+-
+-
+......................
+044
+None
+undefined
+-
+-
+......................
+045
+None
+undefined
+-
+-
+......................
+046
+None
+undefined
+-
+-
+......................
+047
+None
+undefined
+-
+-
+......................
+048
+None
+undefined
+-
+-
+......................
+049
+None
+undefined
+-
+-
+......................
+050
+CH_CM_CL
+cloud covers CH_CM_CL (000...888)
+(0-1)
+(0-1)
+......................
+051
+None
+cloud cover CH (0..8)
+(0-1)
+(0-1)
+......................
+052
+None
+cloud cover CM (0..8)
+(0-1)
+(0-1)
+......................
+053
+None
+cloud cover CL (0..8)
+(0-1)
+(0-1)
+......................
+054
+None
+total cloud cover (0..8)
+(0-1)
+(0-1)
+......................
+055
+None
+fog (0..8)
+(0-1)
+(0-1)
+......................
+056
+None
+fog
+(0-1)
+(0-1)
+......................
+057
+None
+undefined
+-
+-
+......................
+058
+None
+undefined
+-
+-
+......................
+059
+None
+undefined
+-
+-
+......................
+060
+None
+cloud cover, convective cirrus
+(0-1)
+(0-1)
+......................
+061
+None
+specific cloud water content, convective clouds
+kg kg**-1
+kg kg**-1
+......................
+062
+None
+cloud water content, conv clouds, vert integrated
+kg m**-2
+kg m**-2
+......................
+063
+None
+specific cloud ice content, convective clouds
+kg kg**-1
+kg kg**-1     
+......................
+064
+None
+cloud ice content, conv clouds, vert integrated
+kg m**-2
+kg m**-2
+......................
+065
+None
+convective mass flux
+kg s**-1 m**-2
+kg s**-1 m**-2
+......................
+066
+None
+updraft velocity, convection
+m s**-1
+m s**-1
+......................
+067
+None
+entrainment parameter, convection
+m**-1
+m**-1
+......................
+068
+HBAS_CON
+cloud base, convective clouds (above msl)
+m
+m
+......................
+069
+HTOP_CON
+cloud top, convective clouds (above msl)
+m
+m
+......................
+070
+None
+convective layers (00...77)  (BKE)
+(0-1)
+(0-1)
+......................
+071
+None
+KO-index
+(1)
+(1)
+......................
+072
+BAS_CON
+convection base index
+(1)
+(1)
+......................
+073
+TOP_CON
+convection top index
+(1)
+(1)
+......................
+074
+DT_CON
+convective temperature tendency
+K s**-1
+K s**-1
+......................
+075
+DQV_CON
+convective tendency of specific humidity
+s**-1
+s**-1
+......................
+076
+None
+convective tendency of total heat
+J kg**-1 s**-1
+J kg**-1 s**-1
+......................
+077
+None
+convective tendency of total water
+s**-1
+s**-1
+......................
+078
+DU_CON
+convective momentum tendency (X-component)
+m s**-2
+m s**-2
+......................
+079
+DV_CON
+convective momentum tendency (Y-component)
+m s**-2
+m s**-2
+......................
+080
+None
+convective vorticity tendency
+s**-2
+s**-2
+......................
+081
+None
+convective divergence tendency
+s**-2
+s**-2
+......................
+082
+HTOP_DC
+top of dry convection (above msl)
+m
+m
+......................
+083
+None
+dry convection top index
+(1)
+(1)
+......................
+084
+HZEROCL
+height of 0 degree Celsius isotherm above msl
+m
+m
+......................
+085
+SNOWLMT
+height of snow-fall limit
+m
+m
+......................
+086
+None
+undefined
+-
+-
+......................
+087
+None
+undefined
+-
+-
+......................
+088
+None
+undefined
+-
+-
+......................
+089
+None
+undefined
+-
+-
+......................
+090
+None
+undefined
+-
+-
+......................
+091
+None
+undefined
+-
+-
+......................
+092
+None
+undefined
+-
+-
+......................
+093
+None
+undefined
+-
+-
+......................
+094
+None
+undefined
+-
+-
+......................
+095
+None
+undefined
+-
+-
+......................
+096
+None
+undefined
+-
+-
+......................
+097
+None
+undefined
+-
+-
+......................
+098
+None
+undefined
+-
+-
+......................
+099
+QRS_GSP
+spec. content of precip. particles
+kg kg**-1
+kg kg**-1
+......................
+100
+PRR_GSP
+surface precipitation rate, rain, grid scale
+kg s**-1 m**-2
+kg s**-1 m**-2
+......................
+101
+PRS_GSP
+surface precipitation rate, snow, grid scale
+kg s**-1 m**-2
+kg s**-1 m**-2
+......................
+102
+RAIN_GSP
+surface precipitation amount, rain, grid scale
+kg m**-2
+kg m**-2
+......................
+111
+PRR_CON
+surface precipitation rate, rain, convective
+kg s**-1 m**-2
+kg s**-1 m**-2
+......................
+112
+PRS_CON
+surface precipitation rate, snow, convective
+kg s**-1 m**-2
+kg s**-1 m**-2
+......................
+113
+RAIN_CON
+surface precipitation amount, rain, convective
+kg m**-2
+kg m**-2
+......................
+130
+None
+undefined
+-
+-
+......................
+131
+None
+undefined
+-
+-
+......................
+132
+None
+undefined
+-
+-
+......................
+133
+None
+undefined
+-
+-
+......................
+134
+None
+undefined
+-
+-
+......................
+135
+None
+undefined
+-
+-
+......................
+136
+None
+undefined
+-
+-
+......................
+137
+None
+undefined
+-
+-
+......................
+138
+None
+undefined
+-
+-
+......................
+139
+PP
+deviation of pressure from reference value
+Pa
+Pa
+......................
+140
+None
+undefined
+-
+-
+......................
+141
+None
+undefined
+-
+-
+......................
+142
+None
+undefined
+-
+-
+......................
+143
+None
+undefined
+-
+-
+......................
+144
+None
+undefined
+-
+-
+......................
+145
+None
+undefined
+-
+-
+......................
+146
+None
+undefined
+-
+-
+......................
+147
+None
+undefined
+-
+-
+......................
+148
+None
+undefined
+-
+-
+......................
+149
+None
+undefined
+-
+-
+......................
+150
+None
+coefficient of horizontal diffusion
+m**2 s**-1
+m**2 s**-1
+......................
+187
+VMAX_10M
+maximum wind velocity
+m s**-1
+m s**-1
+......................
+200
+W_I
+water content of interception store
+kg m**-2
+kg m**-2
+......................
+203
+T_SNOW
+snow temperature
+K
+K
+......................
+215
+T_ICE
+ice surface temperature
+K
+K
+......................
+241
+CAPE_CON
+convective available potential energy
+J kg**-1
+J kg**-1
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/cen085/local_table_2_version_001 b/gribtables/cen085/local_table_2_version_001
new file mode 100755
index 0000000..96c327c
--- /dev/null
+++ b/gribtables/cen085/local_table_2_version_001
@@ -0,0 +1,225 @@
+Meteo France local table 2: Version Number 128 (+1,2,3... for entries below 128)
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+008
+ALTITUDE
+Geometrical height
+m
+m
+......................
+062
+PRLGE
+Large scale precipitation (water)
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Convective precipitation (water)
+kg m**-2
+kg m**-2
+......................
+128
+EAZSOL 
+Anal. error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+129
+EPZSOL
+Guess error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+130
+USTR
+U-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+131
+VSTR
+V-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+132
+TPWCLS
+Pseudo-adiabtemp in surface boundarylayer
+K
+K
+......................
+133
+FLP
+Flight-level using ICAO standard pressure
+Ft
+Ft
+......................
+134
+CAT
+Clear air turbulence
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+135
+AIR_CS
+Caesium pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+136
+SOL_CS
+Caesium pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+137
+AIR_IO
+Iode pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+138
+SOL_IO
+Iode pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+139
+AIR_RAD
+Radiative pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+140
+SOL_RAD
+Radiative pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+141
+AIR_CHIM
+Chemical pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+142
+SOL_CHIM
+Chemical pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+143
+AIR_PASS
+Passive tracer concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+144
+AIR_VOLCAN
+Volcanic pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+145
+SOL_VOLCAN
+Volcanic pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+149
+TP
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+150
+EAU
+Total water-type precipitation
+kg m**-2
+kg m**-2
+......................
+151
+BILANHY
+Hydric balance
+kg m**-2
+kg m**-2
+......................
+152
+RESERV_GLAC
+Ice content
+kg m**-2
+kg m**-2
+......................
+153
+RESERV_LIQU
+Water content
+kg m**-2
+kg m**-2
+......................
+154
+GIVRAGE
+Freezing risk index
+g Kg**-1
+g Kg**-1
+......................
+155
+GIVRAGE_VV
+Freezing risk index as regards vert.veloc
+g Kg**-1
+g Kg**-1
+......................
+156
+PREC_CONVEC
+Convective precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+157
+PREC_GDE_ECH
+Large-scale precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+158
+FLLUNAIRE_D
+Downwards lunar radiation flux (surface)
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+200
+MWD
+Mean wave direction
+degrees
+degrees
+......................
+201
+MWP
+Mean wave period
+s
+s
+......................
+202
+SHPS
+Significant height of primary swell
+m
+m
+......................
+203
+SHSS
+Significant height of secondary swell
+m
+m
+......................
+204
+PP1D
+Peak period of 1-dimensional wave spectra
+s
+s
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/cen085/local_table_2_version_002 b/gribtables/cen085/local_table_2_version_002
new file mode 100755
index 0000000..96c327c
--- /dev/null
+++ b/gribtables/cen085/local_table_2_version_002
@@ -0,0 +1,225 @@
+Meteo France local table 2: Version Number 128 (+1,2,3... for entries below 128)
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+008
+ALTITUDE
+Geometrical height
+m
+m
+......................
+062
+PRLGE
+Large scale precipitation (water)
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Convective precipitation (water)
+kg m**-2
+kg m**-2
+......................
+128
+EAZSOL 
+Anal. error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+129
+EPZSOL
+Guess error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+130
+USTR
+U-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+131
+VSTR
+V-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+132
+TPWCLS
+Pseudo-adiabtemp in surface boundarylayer
+K
+K
+......................
+133
+FLP
+Flight-level using ICAO standard pressure
+Ft
+Ft
+......................
+134
+CAT
+Clear air turbulence
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+135
+AIR_CS
+Caesium pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+136
+SOL_CS
+Caesium pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+137
+AIR_IO
+Iode pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+138
+SOL_IO
+Iode pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+139
+AIR_RAD
+Radiative pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+140
+SOL_RAD
+Radiative pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+141
+AIR_CHIM
+Chemical pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+142
+SOL_CHIM
+Chemical pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+143
+AIR_PASS
+Passive tracer concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+144
+AIR_VOLCAN
+Volcanic pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+145
+SOL_VOLCAN
+Volcanic pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+149
+TP
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+150
+EAU
+Total water-type precipitation
+kg m**-2
+kg m**-2
+......................
+151
+BILANHY
+Hydric balance
+kg m**-2
+kg m**-2
+......................
+152
+RESERV_GLAC
+Ice content
+kg m**-2
+kg m**-2
+......................
+153
+RESERV_LIQU
+Water content
+kg m**-2
+kg m**-2
+......................
+154
+GIVRAGE
+Freezing risk index
+g Kg**-1
+g Kg**-1
+......................
+155
+GIVRAGE_VV
+Freezing risk index as regards vert.veloc
+g Kg**-1
+g Kg**-1
+......................
+156
+PREC_CONVEC
+Convective precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+157
+PREC_GDE_ECH
+Large-scale precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+158
+FLLUNAIRE_D
+Downwards lunar radiation flux (surface)
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+200
+MWD
+Mean wave direction
+degrees
+degrees
+......................
+201
+MWP
+Mean wave period
+s
+s
+......................
+202
+SHPS
+Significant height of primary swell
+m
+m
+......................
+203
+SHSS
+Significant height of secondary swell
+m
+m
+......................
+204
+PP1D
+Peak period of 1-dimensional wave spectra
+s
+s
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/cen085/local_table_2_version_003 b/gribtables/cen085/local_table_2_version_003
new file mode 100755
index 0000000..96c327c
--- /dev/null
+++ b/gribtables/cen085/local_table_2_version_003
@@ -0,0 +1,225 @@
+Meteo France local table 2: Version Number 128 (+1,2,3... for entries below 128)
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+008
+ALTITUDE
+Geometrical height
+m
+m
+......................
+062
+PRLGE
+Large scale precipitation (water)
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Convective precipitation (water)
+kg m**-2
+kg m**-2
+......................
+128
+EAZSOL 
+Anal. error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+129
+EPZSOL
+Guess error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+130
+USTR
+U-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+131
+VSTR
+V-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+132
+TPWCLS
+Pseudo-adiabtemp in surface boundarylayer
+K
+K
+......................
+133
+FLP
+Flight-level using ICAO standard pressure
+Ft
+Ft
+......................
+134
+CAT
+Clear air turbulence
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+135
+AIR_CS
+Caesium pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+136
+SOL_CS
+Caesium pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+137
+AIR_IO
+Iode pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+138
+SOL_IO
+Iode pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+139
+AIR_RAD
+Radiative pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+140
+SOL_RAD
+Radiative pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+141
+AIR_CHIM
+Chemical pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+142
+SOL_CHIM
+Chemical pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+143
+AIR_PASS
+Passive tracer concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+144
+AIR_VOLCAN
+Volcanic pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+145
+SOL_VOLCAN
+Volcanic pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+149
+TP
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+150
+EAU
+Total water-type precipitation
+kg m**-2
+kg m**-2
+......................
+151
+BILANHY
+Hydric balance
+kg m**-2
+kg m**-2
+......................
+152
+RESERV_GLAC
+Ice content
+kg m**-2
+kg m**-2
+......................
+153
+RESERV_LIQU
+Water content
+kg m**-2
+kg m**-2
+......................
+154
+GIVRAGE
+Freezing risk index
+g Kg**-1
+g Kg**-1
+......................
+155
+GIVRAGE_VV
+Freezing risk index as regards vert.veloc
+g Kg**-1
+g Kg**-1
+......................
+156
+PREC_CONVEC
+Convective precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+157
+PREC_GDE_ECH
+Large-scale precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+158
+FLLUNAIRE_D
+Downwards lunar radiation flux (surface)
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+200
+MWD
+Mean wave direction
+degrees
+degrees
+......................
+201
+MWP
+Mean wave period
+s
+s
+......................
+202
+SHPS
+Significant height of primary swell
+m
+m
+......................
+203
+SHSS
+Significant height of secondary swell
+m
+m
+......................
+204
+PP1D
+Peak period of 1-dimensional wave spectra
+s
+s
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/cen085/local_table_2_version_128 b/gribtables/cen085/local_table_2_version_128
new file mode 100755
index 0000000..96c327c
--- /dev/null
+++ b/gribtables/cen085/local_table_2_version_128
@@ -0,0 +1,225 @@
+Meteo France local table 2: Version Number 128 (+1,2,3... for entries below 128)
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+008
+ALTITUDE
+Geometrical height
+m
+m
+......................
+062
+PRLGE
+Large scale precipitation (water)
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Convective precipitation (water)
+kg m**-2
+kg m**-2
+......................
+128
+EAZSOL 
+Anal. error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+129
+EPZSOL
+Guess error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+130
+USTR
+U-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+131
+VSTR
+V-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+132
+TPWCLS
+Pseudo-adiabtemp in surface boundarylayer
+K
+K
+......................
+133
+FLP
+Flight-level using ICAO standard pressure
+Ft
+Ft
+......................
+134
+CAT
+Clear air turbulence
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+135
+AIR_CS
+Caesium pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+136
+SOL_CS
+Caesium pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+137
+AIR_IO
+Iode pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+138
+SOL_IO
+Iode pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+139
+AIR_RAD
+Radiative pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+140
+SOL_RAD
+Radiative pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+141
+AIR_CHIM
+Chemical pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+142
+SOL_CHIM
+Chemical pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+143
+AIR_PASS
+Passive tracer concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+144
+AIR_VOLCAN
+Volcanic pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+145
+SOL_VOLCAN
+Volcanic pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+149
+TP
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+150
+EAU
+Total water-type precipitation
+kg m**-2
+kg m**-2
+......................
+151
+BILANHY
+Hydric balance
+kg m**-2
+kg m**-2
+......................
+152
+RESERV_GLAC
+Ice content
+kg m**-2
+kg m**-2
+......................
+153
+RESERV_LIQU
+Water content
+kg m**-2
+kg m**-2
+......................
+154
+GIVRAGE
+Freezing risk index
+g Kg**-1
+g Kg**-1
+......................
+155
+GIVRAGE_VV
+Freezing risk index as regards vert.veloc
+g Kg**-1
+g Kg**-1
+......................
+156
+PREC_CONVEC
+Convective precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+157
+PREC_GDE_ECH
+Large-scale precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+158
+FLLUNAIRE_D
+Downwards lunar radiation flux (surface)
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+200
+MWD
+Mean wave direction
+degrees
+degrees
+......................
+201
+MWP
+Mean wave period
+s
+s
+......................
+202
+SHPS
+Significant height of primary swell
+m
+m
+......................
+203
+SHSS
+Significant height of secondary swell
+m
+m
+......................
+204
+PP1D
+Peak period of 1-dimensional wave spectra
+s
+s
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/cen085/local_table_2_version_128.ecmwf b/gribtables/cen085/local_table_2_version_128.ecmwf
new file mode 100755
index 0000000..96c327c
--- /dev/null
+++ b/gribtables/cen085/local_table_2_version_128.ecmwf
@@ -0,0 +1,225 @@
+Meteo France local table 2: Version Number 128 (+1,2,3... for entries below 128)
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+008
+ALTITUDE
+Geometrical height
+m
+m
+......................
+062
+PRLGE
+Large scale precipitation (water)
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Convective precipitation (water)
+kg m**-2
+kg m**-2
+......................
+128
+EAZSOL 
+Anal. error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+129
+EPZSOL
+Guess error std dev for Z at soil level
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+130
+USTR
+U-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+131
+VSTR
+V-component of time-integrated stress
+W m**-2
+W m**-2
+......................
+132
+TPWCLS
+Pseudo-adiabtemp in surface boundarylayer
+K
+K
+......................
+133
+FLP
+Flight-level using ICAO standard pressure
+Ft
+Ft
+......................
+134
+CAT
+Clear air turbulence
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+135
+AIR_CS
+Caesium pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+136
+SOL_CS
+Caesium pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+137
+AIR_IO
+Iode pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+138
+SOL_IO
+Iode pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+139
+AIR_RAD
+Radiative pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+140
+SOL_RAD
+Radiative pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+141
+AIR_CHIM
+Chemical pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+142
+SOL_CHIM
+Chemical pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+143
+AIR_PASS
+Passive tracer concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+144
+AIR_VOLCAN
+Volcanic pollutant concentration in air
+pollutant_unit m**-3
+pollutant_unit m**-3
+......................
+145
+SOL_VOLCAN
+Volcanic pollutant soil deposit
+pollutant_unit m**-2
+pollutant_unit m**-2
+......................
+149
+TP
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+150
+EAU
+Total water-type precipitation
+kg m**-2
+kg m**-2
+......................
+151
+BILANHY
+Hydric balance
+kg m**-2
+kg m**-2
+......................
+152
+RESERV_GLAC
+Ice content
+kg m**-2
+kg m**-2
+......................
+153
+RESERV_LIQU
+Water content
+kg m**-2
+kg m**-2
+......................
+154
+GIVRAGE
+Freezing risk index
+g Kg**-1
+g Kg**-1
+......................
+155
+GIVRAGE_VV
+Freezing risk index as regards vert.veloc
+g Kg**-1
+g Kg**-1
+......................
+156
+PREC_CONVEC
+Convective precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+157
+PREC_GDE_ECH
+Large-scale precipitation (all types)
+kg m**-2
+kg m**-2
+......................
+158
+FLLUNAIRE_D
+Downwards lunar radiation flux (surface)
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+200
+MWD
+Mean wave direction
+degrees
+degrees
+......................
+201
+MWP
+Mean wave period
+s
+s
+......................
+202
+SHPS
+Significant height of primary swell
+m
+m
+......................
+203
+SHSS
+Significant height of secondary swell
+m
+m
+......................
+204
+PP1D
+Peak period of 1-dimensional wave spectra
+s
+s
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/cen085/local_table_2_version_128.mf b/gribtables/cen085/local_table_2_version_128.mf
new file mode 100755
index 0000000..af8072d
--- /dev/null
+++ b/gribtables/cen085/local_table_2_version_128.mf
@@ -0,0 +1,225 @@
+Table 2 locale a Meteo France: Version Number 128 (+1,2,3... pour entrees < 128)
+Codes et unites en phase avec FM 92-X Ext.GRIB.
+......................
+008
+ALTITUDE
+Altitude (geometrique)
+m
+m
+......................
+062
+PRLGE
+Precipitations liquides de grande echelle
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Precipitations liquides convectives
+kg m**-2
+kg m**-2
+......................
+128
+EAZSOL 
+Ecart-type d'erreur d'analyse du ZSOL
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+129
+EPZSOL
+Ecart-type d'erreur de prevision du ZSOL
+kg m**-1 s**-2
+kg m**-1 s**-2
+......................
+130
+USTR
+Premiere composante tension sol integree
+W m**-2
+W m**-2
+......................
+131
+VSTR
+Seconde composante tension sol integree
+W m**-2
+W m**-2
+......................
+132
+TPWCLS
+Pseudo-adiabtemp in surface boundarylayer
+K
+K
+......................
+133
+FLP
+Pression en niveau de vol
+Ft
+Ft
+......................
+134
+CAT
+Turbulence en air clair
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+135
+AIR_CS
+Concentration dans l'air polluant cesium
+unite_de_polluant m**-3
+unite_de_polluant m**-3
+......................
+136
+SOL_CS
+Depot au sol de polluant cesium
+unite_de_polluant m**-2
+unite_de_polluant m**-2
+......................
+137
+AIR_IO
+Concentration dans l'air de polluant iode
+unite_de_polluant m**-3
+unite_de_polluant m**-3
+......................
+138
+SOL_IO
+Depot au sol de polluant iode
+unite_de_polluant m**-2
+unite_de_polluant m**-2
+......................
+139
+AIR_RAD
+Concentration ds air polluant radioactif
+unite_de_polluant m**-3
+unite_de_polluant m**-3
+......................
+140
+SOL_RAD
+Depot au sol de polluant radioactif
+unite_de_polluant m**-2
+unite_de_polluant m**-2
+......................
+141
+AIR_CHIM
+Concentration dans air polluant chimique
+unite_de_polluant m**-3
+unite_de_polluant m**-3
+......................
+142
+SOL_CHIM
+Depot au sol de polluant chimique
+unite_de_polluant m**-2
+unite_de_polluant m**-2
+......................
+143
+AIR_PASS
+Concentration dans l'air traceur passif
+unite_de_polluant m**-3
+unite_de_polluant m**-3
+......................
+144
+AIR_VOLCAN
+Concentration dans l'air polluant volcan
+unite_de_polluant m**-3
+unite_de_polluant m**-3
+......................
+145
+SOL_VOLCAN
+Depot au sol de polluant type volcanique
+unite_de_polluant m**-2
+unite_de_polluant m**-2
+......................
+149
+TP
+Tourbillon potentiel
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+150
+EAU
+Precipitations liquides totales
+kg m**-2
+kg m**-2
+......................
+151
+BILANHY
+Bilan hydrique
+kg m**-2
+kg m**-2
+......................
+152
+RESERV_GLAC
+Contenu (reservoir) en glace
+kg m**-2
+kg m**-2
+......................
+153
+RESERV_LIQU
+Contenu (reservoir) en eau
+kg m**-2
+kg m**-2
+......................
+154
+GIVRAGE
+Indice de risque de givrage
+g Kg**-1
+g Kg**-1
+......................
+155
+GIVRAGE_VV
+Ind. risque givrage selon vitesse vertic.
+g Kg**-1
+g Kg**-1
+......................
+156
+PREC_CONVEC
+Precipitations convectives totales
+kg m**-2
+kg m**-2
+......................
+157
+PREC_GDE_ECH
+Precipitations de grande echelle totales
+kg m**-2
+kg m**-2
+......................
+158
+FLLUNAIRE_D
+Flux de rayonnement lunaire descendant
+kg m**-1 s**-3
+kg m**-1 s**-3
+......................
+200
+MWD
+Direction moyenne des vagues
+degre
+degre
+......................
+201
+MWP
+Periode moyenne des vagues
+s
+s
+......................
+202
+SHPS
+Hauteur significative dela houle primaire
+m
+m
+......................
+203
+SHSS
+Hauteur significative de la houle 2ndaire
+m
+m
+......................
+204
+PP1D
+Periode corr.pic d'energie spectre vagues
+s
+s
+......................
+255
+-
+Indique une valeur manquante
+-
+-
+......................
diff --git a/gribtables/local_table_2_version_128 b/gribtables/local_table_2_version_128
new file mode 100755
index 0000000..141a25d
--- /dev/null
+++ b/gribtables/local_table_2_version_128
@@ -0,0 +1,1266 @@
+ECMWF local table 2: Version Number 128 (Standard).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+STRF
+Stream function
+m**2 s**-1
+-
+......................
+002
+VPOT
+Velocity potential
+m**2 s**-1
+-
+......................
+003
+PT
+Potential temperature
+K
+-
+......................
+004
+EQPT
+Equivalent potential temperature
+K
+-
+......................
+005
+SEPT
+Saturated equivalent potential temperature
+K
+-
+......................
+006
+SSFR
+Soil sand fraction
+(0 - 1)
+-
+......................
+007
+SCFR
+Soil clay fraction
+(0 - 1)
+-
+......................
+008
+SRO
+Surface runoff
+m
+Accumulated field
+......................
+009
+SSRO
+Sub-surface runoff
+m
+Accumulated field
+......................
+010
+WIND
+Wind speed
+m s**-1
+-
+......................
+011
+UDVW
+U component of divergent wind
+m s**-1
+-
+......................
+012
+VDVW
+V component of divergent wind
+m s**-1
+-
+......................
+013
+URTW
+U component of rotational wind
+m s**-1
+-
+......................
+014
+VRTW
+V component of rotational wind
+m s**-1
+-
+......................
+015
+ALUVP
+UV visible albedo for direct radiation
+(0 - 1)
+-
+......................
+016
+ALUVD
+UV visible albedo for diffuse radiation
+(0 - 1)
+-
+......................
+017
+ALNIP
+Near IR albedo for direct radiation
+(0 - 1)
+-
+......................
+018
+ALNID
+Near IR albedo for diffuse radiation
+(0 - 1)
+-
+......................
+019
+UVCS
+Clear sky surface UV
+W m**-2 s
+-
+......................
+020
+PARCS
+Clear sky surface photosynthetically active radiation
+W m**-2 s
+-
+......................
+021
+UCTP
+Unbalanced component of temperature
+K
+-
+......................
+022
+UCLN
+Unbalanced component of logarithm of surface pressure
+-
+-
+......................
+023
+UCDV
+Unbalanced component of divergence
+s**-1
+-
+......................
+026
+CL
+Lake cover
+(0 - 1)
+-
+......................
+027
+CVL
+Low vegetation cover
+(0 - 1)
+-
+......................
+028
+CVH
+High vegetation cover
+(0 - 1)
+-
+......................
+029
+TVL
+Type of low vegetation
+-
+Table index
+......................
+030
+TVH
+Type of high vegetation
+-
+Table index
+......................
+031
+CI
+Sea-ice cover
+(0 - 1)
+-
+......................
+032
+ASN
+Snow albedo
+(0 - 1)
+-
+......................
+033
+RSN
+Snow density
+kg m**-3
+-
+......................
+034
+SSTK
+Sea surface temperature
+K
+-
+......................
+035
+ISTL1
+Ice surface temperature layer 1
+K
+-
+......................
+036
+ISTL2
+Ice surface temperature layer 2
+K
+-
+......................
+037
+ISTL3
+Ice surface temperature layer 3
+K
+-
+......................
+038
+ISTL4
+Ice surface temperature layer 4
+K
+-
+......................
+039
+SWVL1
+Volumetric soil water layer 1
+m**3 m**-3
+-
+......................
+040
+SWVL2
+Volumetric soil water layer 2
+m**3 m**-3
+-
+......................
+041
+SWVL3
+Volumetric soil water layer 3
+m**3 m**-3
+-
+......................
+042
+SWVL4
+Volumetric soil water layer 4
+m**3 m**-3
+-
+......................
+043
+SLT
+Soil type
+-
+-
+......................
+044
+ES
+Snow evaporation
+m of water
+Accumulated field
+......................
+045
+SMLT
+Snowmelt
+m of water
+Accumulated field
+......................
+046
+SDUR
+Solar duration
+s
+-
+......................
+047
+DSRP
+Direct solar radiation
+w m**-2
+Incident on a plane perpendicular to the Sun's direction
+......................
+048
+MAGSS
+Magnitude of surface stress
+N m**-2 s
+Accumulated field
+......................
+049
+10FG
+10 metre wind gust
+m s**-1
+-
+......................
+050
+LSPF
+Large-scale precipitation fraction
+s
+Accumulated field
+......................
+051
+MX2T24
+Maximum temperature at 2 metres since last 24 hours
+K
+-
+......................
+052
+MN2T24
+Minimum temperature at 2 metres since last 24 hours
+K
+-
+......................
+053
+MONT
+Montgomery potential
+m**2 s**-2
+-
+......................
+054
+PRES
+Pressure
+Pa
+-
+......................
+055
+MEAN2T24
+Mean temperature at 2 metres since last 24 hours
+K
+6-hourly intervals
+......................
+056
+MN2D24
+Mean 2 metre dewpoint temperature in past 24 hours
+K
+6-hourly intervals
+......................
+057
+UVB
+Downward UV radiation at the surface
+w m**-2 s
+Ultra-violet band B. Accumulated field.
+......................
+058
+PAR
+Photosynthetically active radiation at the surface
+w m**-2 s
+Accumulated field.
+......................
+059
+CAPE
+Convective available potential energy
+J kg**-1
+-
+......................
+060
+PV
+Potential vorticity
+K m**2 kg**-1 s**-1
+-
+......................
+061
+TPO
+Total precipitation from observations
+Millimetres*100 + number of stations
+-
+......................
+062
+OBCT
+Observation count
+-
+Count of observations used in calculating value at a gridpoint
+......................
+063
+-
+Start time for skin temperature difference
+s
+Seconds from reference time
+......................
+064
+-
+Finish time for skin temperature difference
+s
+Seconds from reference time
+......................
+065
+-
+Skin temperature difference
+K
+-
+......................
+066
+-
+Leaf area index, low vegetation
+m**2 / m**2
+-
+......................
+067
+-
+Leaf area index, high vegetation
+m**2 / m**2
+-
+......................
+068
+-
+Minimum stomatal resistance, low vegetation
+s m**-1
+-
+......................
+069
+-
+Minimum stomatal resistance, high vegetation
+s m**-1
+-
+......................
+070
+-
+Biome cover, low vegetation
+(0 - 1)
+-
+......................
+071
+-
+Biome cover, high vegetation
+(0 - 1)
+-
+......................
+072
+ISSRD
+Instantaneous surface solar radiation downwards
+w m**-2
+-
+......................
+073
+ISTRD
+Instantaneous surface thermal radiation downwards
+w m**-2
+-
+......................
+074
+SDFOR
+Standard deviation of filtered subgrid orography
+m
+Climatological field
+......................
+077
+ETADOT
+Vertical velocity in the hybrid eta vertical coordinate system
+s**-1
+-
+......................
+078
+TCLW
+Total column liquid water
+kg m**-2
+-
+......................
+079
+TCIW
+Total column ice water
+kg m**-2
+-
+......................
+121
+MX2T6
+Maximum temperature at 2 metres since last 6 hours
+K
+-
+......................
+122
+MN2T6
+Minimum temperature at 2 metres since last 6 hours
+K
+-
+......................
+123
+10FG6
+10 metre wind gust in the past 6 hours
+m s**-1
+During previous 6 hours
+......................
+124
+EMIS
+Surface emissivity
+dimensionless
+-
+......................
+125
+-
+Vertically integrated total energy
+J m**-2
+Integrated over a number of model levels
+......................
+126
+-
+Generic parameter for sensitive area prediction
+Various
+Originating centre dependent
+......................
+127
+AT
+Atmospheric tide
+-
+Not GRIB data (pseudo-GRIB)
+......................
+128
+BV
+Budget values
+-
+Not GRIB data (pseudo-GRIB)
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+At the surface: orography
+......................
+130
+T
+Temperature
+K
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+133
+Q
+Specific humidity
+kg kg**-1
+-
+......................
+134
+SP
+Surface pressure
+Pa
+-
+......................
+135
+W
+Vertical velocity
+Pa s**-1
+-
+......................
+136
+TCW
+Total column water
+kg m**-2
+Liquid + ice + vapour
+......................
+137
+TCWV
+Total column water vapour
+kg m**-2
+-
+......................
+138
+VO
+Vorticity (relative)
+s**-1
+-
+......................
+139
+STL1
+Soil temperature level 1
+K
+Soil temperature (ST) before 19930804
+......................
+140
+SWL1
+Soil wetness level 1
+m of water
+Surface soil wetness (SSW) before 19930804
+......................
+141
+SD
+Snow depth
+m of water equivalent
+-
+......................
+142
+LSP
+Stratiform precipitation (Large-scale precipitation)
+m
+Accumulated field
+......................
+143
+CP
+Convective precipitation
+m
+Accumulated field
+......................
+144
+SF
+Snowfall
+m of water equivalent
+Accumulated field. Contains convective + stratiform
+......................
+145
+BLD
+Boundary layer dissipation
+W m**-2 s
+Accumulated field
+......................
+146
+SSHF
+Surface sensible heat flux
+W m**-2 s
+Accumulated field
+......................
+147
+SLHF
+Surface latent heat flux
+W m**-2 s
+Accumulated field
+......................
+148
+CHNK
+Charnock
+-
+Surface stress (SS) before 19980519
+......................
+149
+SNR
+Surface net radiation
+W m**-2 s
+Accumulated field
+......................
+150
+TNR
+Top net radiation
+-
+-
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+-
+......................
+152
+LNSP
+Logarithm of surface pressure
+-
+-
+......................
+153
+SWHR
+Short-wave heating rate
+K
+Accumulated field
+......................
+154
+LWHR
+Long-wave heating rate
+K
+Accumulated field
+......................
+155
+D
+Divergence
+s**-1
+-
+......................
+156
+GH
+Gepotential Height
+gpm
+Geopotential height
+......................
+157
+R
+Relative humidity
+%
+-
+......................
+158
+TSP
+Tendency of surface pressure
+Pa s**-1
+-
+......................
+159
+BLH
+Boundary layer height
+m
+-
+......................
+160
+SDOR
+Standard deviation of orography
+-
+-
+......................
+161
+ISOR
+Anisotropy of sub-gridscale orography
+-
+-
+......................
+162
+ANOR
+Angle of sub-gridscale orography
+rad
+-
+......................
+163
+SLOR
+Slope of sub-gridscale orography
+-
+-
+......................
+164
+TCC
+Total cloud cover
+(0 - 1)
+-
+......................
+165
+10U
+10 metre U wind component
+m s**-1
+-
+......................
+166
+10V
+10 metre V wind component
+m s**-1
+-
+......................
+167
+2T
+2 metre temperature
+K
+-
+......................
+168
+2D
+2 metre dewpoint temperature
+K
+-
+......................
+169
+SSRD
+Surface solar radiation downwards
+W m**-2 s
+Accumulated field
+......................
+170
+STL2
+Soil temperature level 2
+K
+Deep soil temperature (DST) before 19930804
+......................
+171
+SWL2
+Soil wetness level 2
+m of water
+Deep soil wetness (DSW) before 19930804. Scaled: depth surf water layer 7cm deep
+......................
+172
+LSM
+Land-sea mask
+(0 - 1)
+-
+......................
+173
+SR
+Surface roughness
+m
+-
+......................
+174
+AL
+Albedo
+(0 - 1)
+-
+......................
+175
+STRD
+Surface thermal radiation downwards
+W m**-2 s
+Accumulated field
+......................
+176
+SSR
+Surface solar radiation
+W m**-2 s
+Accumulated field
+......................
+177
+STR
+Surface thermal radiation
+W m**-2 s
+Accumulated field
+......................
+178
+TSR
+Top solar radiation
+W m**-2 s
+Accumulated field
+......................
+179
+TTR
+Top thermal radiation
+W m**-2 s
+Accumulated field
+......................
+180
+EWSS
+East-West surface stress
+N m**-2 s
+Accumulated field
+......................
+181
+NSSS
+North-South surface stress
+N m**-2 s
+Accumulated field
+......................
+182
+E
+Evaporation
+m of water
+Accumulated field
+......................
+183
+STL3
+Soil temperature level 3
+K
+Climatological deep soil temperature (CDST) before 19930804
+......................
+184
+SWL3
+Soil wetness level 3
+m of water
+Climatological deep soil wetness (CDSW) before 19930804.Scaled depth surf water 7cm deep
+......................
+185
+CCC
+Convective cloud cover
+(0 - 1)
+-
+......................
+186
+LCC
+Low cloud cover
+(0 - 1)
+-
+......................
+187
+MCC
+Medium cloud cover
+(0 - 1)
+-
+......................
+188
+HCC
+High cloud cover
+(0 - 1)
+-
+......................
+189
+SUND
+Sunshine duration
+s
+Accumulated field
+......................
+190
+EWOV
+East-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+191
+NSOV
+North-South component of sub-gridscale orographic variance
+m**2
+-
+......................
+192
+NWOV
+North-West/South-East component of sub-gridscale orographic variance
+m**2
+-
+......................
+193
+NEOV
+North-East/South-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+194
+BTMP
+Brightness temperature
+K
+-
+......................
+195
+LGWS
+Latitudinal component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+196
+MGWS
+Meridional component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+197
+GWD
+Gravity wave dissipation
+W m**-2 s
+Accumulated field
+......................
+198
+SRC
+Skin reservoir content
+m of water
+-
+......................
+199
+VEG
+Vegetation fraction
+(0 - 1)
+-
+......................
+200
+VSO
+Variance of sub-gridscale orography
+m**2
+-
+......................
+201
+MX2T
+Maximum temperature at 2 metres since previous post-processing
+K
+-
+......................
+202
+MN2T
+Minimum temperature at 2 metres since previous post-processing
+K
+-
+......................
+203
+O3
+Ozone mass mixing ratio
+kg kg**-1
+-
+......................
+204
+PAW
+Precipitation analysis weights
+-
+-
+......................
+205
+RO
+Runoff
+m
+Accumulated field
+......................
+206
+TCO3
+Total column ozone
+kg m**-2
+Before 20010612 was in Dobsons. 1 Dobson = 2.1415E-5 kg m**-2
+......................
+207
+10SI
+10 metre wind speed
+m s**-1
+-
+......................
+208
+TSRC
+Top net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+209
+TTRC
+Top net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+210
+SSRC
+Surface net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+211
+STRC
+Surface net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+212
+TISR
+TOA incident solar radiation
+W m**-2 s
+Accumulated field
+......................
+213
+VIMD
+Vertically integrated moisture divergence
+kg m**-2
+-
+......................
+214
+DHR
+Diabatic heating by radiation
+K
+-
+......................
+215
+DHVD
+Diabatic heating by vertical diffusion
+K
+-
+......................
+216
+DHCC
+Diabatic heating by cumulus convection
+K
+-
+......................
+217
+DHLC
+Diabatic heating large-scale condensation
+K
+-
+......................
+218
+VDZW
+Vertical diffusion of zonal wind
+m s**-1
+-
+......................
+219
+VDMW
+Vertical diffusion of meridional wind
+m s**-1
+-
+......................
+220
+EWGD
+East-West gravity wave drag tendency
+m s**-1
+-
+......................
+221
+NSGD
+North-South gravity wave drag tendency
+m s**-1
+-
+......................
+222
+CTZW
+Convective tendency of zonal wind
+m s**-1
+-
+......................
+223
+CTMW
+Convective tendency of meridional wind
+m s**-1
+-
+......................
+224
+VDH
+Vertical diffusion of humidity
+kg kg**-1
+-
+......................
+225
+HTCC
+Humidity tendency by cumulus convection
+kg kg**-1
+-
+......................
+226
+HTLC
+Humidity tendency by large-scale condensation
+kg kg**-1
+-
+......................
+227
+CRNH
+Change from removal of negative humidity
+kg kg**-1
+-
+......................
+228
+TP
+Total precipitation
+m
+Accumulated
+......................
+229
+IEWS
+Instantaneous X surface stress
+N m**-2
+-
+......................
+230
+INSS
+Instantaneous Y surface stress
+N m**-2
+-
+......................
+231
+ISHF
+Instantaneous surface heat flux
+W m**-2
+-
+......................
+232
+IE
+Instantaneous moisture flux
+kg m**-2 s
+Evaporation
+......................
+233
+ASQ
+Apparent surface humidity
+kg kg**-1
+-
+......................
+234
+LSRH
+Logarithm of surface roughness length for heat
+-
+-
+......................
+235
+SKT
+Skin temperature
+K
+-
+......................
+236
+STL4
+Soil temperature level 4
+K
+-
+......................
+237
+SWL4
+Soil wetness level 4
+m
+Scaled to depth of surface water layer 7cm deep
+......................
+238
+TSN
+Temperature of snow layer
+K
+-
+......................
+239
+CSF
+Convective snowfall
+m of water equivalent
+Accumulated field
+......................
+240
+LSF
+Large-scale snowfall
+m of water equivalent
+Accumulated field
+......................
+241
+ACF
+Accumulated cloud fraction tendency
+(-1 to 1)
+-
+......................
+242
+ALW
+Accumulated liquid water tendency
+(-1 to 1)
+-
+......................
+243
+FAL
+Forecast albedo
+(0 - 1)
+-
+......................
+244
+FSR
+Forecast surface roughness
+m
+-
+......................
+245
+FLSR
+Forecast logarithm of surface roughness for heat
+-
+-
+......................
+246
+CLWC
+Cloud liquid water content
+kg kg**-1
+-
+......................
+247
+CIWC
+Cloud ice water content
+kg kg**-1
+-
+......................
+248
+CC
+Cloud cover
+(0 - 1)
+-
+......................
+249
+AIW
+Accumulated ice water tendency
+(-1 to 1)
+-
+......................
+250
+ICE
+Ice age
+(0 - 1)
+0 first-year, 1 multi-year
+......................
+251
+ATTE
+Adiabatic tendency of temperature
+K
+-
+......................
+252
+ATHE
+Adiabatic tendency of humidity
+kg kg**-1
+-
+......................
+253
+ATZE
+Adiabatic tendency of zonal wind
+m s**-1
+-
+......................
+254
+ATMW
+Adiabatic tendency of meridional wind
+m s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_129 b/gribtables/local_table_2_version_129
new file mode 100755
index 0000000..636baaf
--- /dev/null
+++ b/gribtables/local_table_2_version_129
@@ -0,0 +1,1164 @@
+ECMWF local table 2: Version Number 129 (Gradients).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+STRF
+Stream function
+m**2 s**-1
+-
+......................
+002
+VPOT
+Velocity potential
+m**2 s**-1
+-
+......................
+003
+PT
+Potential temperature
+K
+-
+......................
+004
+EQPT
+Equivalent potential temperature
+K
+-
+......................
+005
+SEPT
+Saturated equivalent potential temperature
+K
+-
+......................
+011
+UDVW
+U component of divergent wind
+m s**-1
+-
+......................
+012
+VDVW
+V component of divergent wind
+m s**-1
+-
+......................
+013
+URTW
+U component of rotational wind
+m s**-1
+-
+......................
+014
+VRTW
+V component of rotational wind
+m s**-1
+-
+......................
+021
+UCTP
+Unbalanced component of temperature
+K
+-
+......................
+022
+UCLN
+Unbalanced component of logarithm of surface pressure
+-
+-
+......................
+023
+UCDV
+Unbalanced component of divergence
+s**-1
+-
+......................
+026
+CL
+Lake cover
+(0 - 1)
+-
+......................
+027
+CVL
+Low vegetation cover
+(0 - 1)
+-
+......................
+028
+CVH
+High vegetation cover
+(0 - 1)
+-
+......................
+029
+TVL
+Type of low vegetation
+-
+Table index
+......................
+030
+TVH
+Type of high vegetation
+-
+Table index
+......................
+031
+CI
+Sea-ice cover
+(0 - 1)
+-
+......................
+032
+ASN
+Snow albedo
+(0 - 1)
+-
+......................
+033
+RSN
+Snow density
+kg m**-3
+-
+......................
+034
+SSTK
+Sea surface temperature
+K
+-
+......................
+035
+ISTL1
+Ice surface temperature layer 1
+K
+-
+......................
+036
+ISTL2
+Ice surface temperature layer 2
+K
+-
+......................
+037
+ISTL3
+Ice surface temperature layer 3
+K
+-
+......................
+038
+ISTL4
+Ice surface temperature layer 4
+K
+-
+......................
+039
+SWVL1
+Volumetric soil water layer 1
+m**3 m**-3
+-
+......................
+040
+SWVL2
+Volumetric soil water layer 2
+m**3 m**-3
+-
+......................
+041
+SWVL3
+Volumetric soil water layer 3
+m**3 m**-3
+-
+......................
+042
+SWVL4
+Volumetric soil water layer 4
+m**3 m**-3
+-
+......................
+043
+SLT
+Soil type
+-
+-
+......................
+044
+ES
+Snow evaporation
+m of water
+Accumulated field
+......................
+045
+SMLT
+Snowmelt
+m of water
+Accumulated field
+......................
+046
+SDUR
+Solar duration
+s
+-
+......................
+047
+DSRP
+Direct solar radiation
+w m**-2
+Incident on a plane perpendicular to the Sun's direction
+......................
+048
+MAGSS
+Magnitude of surface stress
+N m**-2 s
+Accumulated field
+......................
+049
+10FG
+10 metre wind gust
+m s**-1
+-
+......................
+050
+LSPF
+Large-scale precipitation fraction
+s
+Accumulated field
+......................
+051
+MX2T24
+Maximum 2 metre temperature
+K
+During previous 24 hours
+......................
+052
+MN2T24
+Minimum 2 metre temperature
+K
+During previous 24 hours
+......................
+053
+MONT
+Montgomery potential
+m**2 s**-2
+-
+......................
+054
+PRES
+Pressure
+Pa
+-
+......................
+055
+MEAN2T24
+Mean 2 metre temperature in past 24 hours
+K
+6-hourly intervals
+......................
+056
+MN2D24
+Mean 2 metre dewpoint temperature in past 24 hours
+K
+6-hourly intervals
+......................
+057
+UVB
+Downward UV radiation at the surface
+w m**-2 s
+Ultra-violet band B. Accumulated field.
+......................
+058
+PAR
+Photosynthetically active radiation at the surface
+w m**-2 s
+Accumulated field.
+......................
+059
+CAPE
+Convective available potential energy
+J kg**-1
+-
+......................
+060
+PV
+Potential vorticity
+K m**2 kg**-1 s**-1
+-
+......................
+061
+TPO
+Total precipitation from observations
+Millimetres*100 + number of stations
+-
+......................
+062
+OBCT
+Observation count
+-
+Count of observations used in calculating value at a gridpoint
+......................
+063
+-
+Start time for skin temperature difference
+s
+Seconds from reference time
+......................
+064
+-
+Finish time for skin temperature difference
+s
+Seconds from reference time
+......................
+065
+-
+Skin temperature difference
+K
+-
+......................
+066
+-
+Leaf area index, low vegetation
+m**2 / m**2
+-
+......................
+067
+-
+Leaf area index, high vegetation
+m**2 / m**2
+-
+......................
+068
+-
+Minimum stomatal resistance, low vegetation
+s m**-1
+-
+......................
+069
+-
+Minimum stomatal resistance, high vegetation
+s m**-1
+-
+......................
+070
+-
+Biome cover, low vegetation
+(0 - 1)
+-
+......................
+071
+-
+Biome cover, high vegetation
+(0 - 1)
+-
+......................
+078
+-
+Total column liquid water
+kg m**-2
+-
+......................
+079
+-
+Total column ice water
+kg m**-2
+-
+......................
+121
+MX2T6
+Maximum temperature at 2 metres
+K
+During previous 6 hours
+......................
+122
+MN2T6
+Minimum temperature at 2 metres
+K
+During previous 6 hours
+......................
+123
+10FG6
+10 metre wind gust in the past 6 hours
+m s**-1
+During previous 6 hours
+......................
+125
+-
+Vertically integrated total energy
+J m**-2
+Integrated over a number of model levels
+......................
+126
+-
+Generic parameter for sensitive area prediction
+Various
+Originating centre dependent
+......................
+127
+AT
+Atmospheric tide
+-
+Not GRIB data (pseudo-GRIB)
+......................
+128
+BV
+Budget values
+-
+Not GRIB data (pseudo-GRIB)
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+At the surface: orography
+......................
+130
+T
+Temperature
+K
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+133
+Q
+Specific humidity
+kg kg**-1
+-
+......................
+134
+SP
+Surface pressure
+Pa
+-
+......................
+135
+W
+Vertical velocity
+Pa s**-1
+-
+......................
+136
+TCW
+Total column water
+kg m**-2
+Liquid + ice + vapour
+......................
+137
+TCWV
+Total column water vapour
+kg m**-2
+-
+......................
+138
+VO
+Vorticity (relative)
+s**-1
+-
+......................
+139
+STL1
+Soil temperature level 1
+K
+Soil temperature (ST) before 19930804
+......................
+140
+SWL1
+Soil wetness level 1
+m of water
+Surface soil wetness (SSW) before 19930804
+......................
+141
+SD
+Snow depth
+m of water equivalent
+-
+......................
+142
+LSP
+Stratiform precipitation (Large-scale precipitation)
+m
+Accumulated field
+......................
+143
+CP
+Convective precipitation
+m
+Accumulated field
+......................
+144
+SF
+Snowfall (convective + stratiform)
+m of water equivalent
+Accumulated field
+......................
+145
+BLD
+Boundary layer dissipation
+W m**-2 s
+Accumulated field
+......................
+146
+SSHF
+Surface sensible heat flux
+W m**-2 s
+Accumulated field
+......................
+147
+SLHF
+Surface latent heat flux
+W m**-2 s
+Accumulated field
+......................
+148
+CHNK
+Charnock
+-
+Surface stress (SS) before 19980519
+......................
+149
+SNR
+Surface net radiation
+W m**-2 s
+Accumulated field
+......................
+150
+TNR
+Top net radiation
+-
+-
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+-
+......................
+152
+LNSP
+Logarithm of surface pressure
+-
+-
+......................
+153
+SWHR
+Short-wave heating rate
+K
+Accumulated field
+......................
+154
+LWHR
+Long-wave heating rate
+K
+Accumulated field
+......................
+155
+D
+Divergence
+s**-1
+-
+......................
+156
+GH
+Height
+m
+Geopotential height
+......................
+157
+R
+Relative humidity
+%
+-
+......................
+158
+TSP
+Tendency of surface pressure
+Pa s**-1
+-
+......................
+159
+BLH
+Boundary layer height
+m
+-
+......................
+160
+SDOR
+Standard deviation of orography
+-
+-
+......................
+161
+ISOR
+Anisotropy of sub-gridscale orography
+-
+-
+......................
+162
+ANOR
+Angle of sub-gridscale orography
+rad
+-
+......................
+163
+SLOR
+Slope of sub-gridscale orography
+-
+-
+......................
+164
+TCC
+Total cloud cover
+(0 - 1)
+-
+......................
+165
+10U
+10 metre U wind component
+m s**-1
+-
+......................
+166
+10V
+10 metre V wind component
+m s**-1
+-
+......................
+167
+2T
+2 metre temperature
+K
+-
+......................
+168
+2D
+2 metre dewpoint temperature
+K
+-
+......................
+169
+SSRD
+Surface solar radiation downwards
+W m**-2 s
+Accumulated field
+......................
+170
+STL2
+Soil temperature level 2
+K
+Deep soil temperature (DST) before 19930804
+......................
+171
+SWL2
+Soil wetness level 2
+m of water
+Deep soil wetness (DSW) before 19930804. Scaled: depth surf water layer 7cm deep
+......................
+172
+LSM
+Land-sea mask
+(0 - 1)
+-
+......................
+173
+SR
+Surface roughness
+m
+-
+......................
+174
+AL
+Albedo
+(0 - 1)
+-
+......................
+175
+STRD
+Surface thermal radiation downwards
+W m**-2 s
+Accumulated field
+......................
+176
+SSR
+Surface solar radiation
+W m**-2 s
+Accumulated field
+......................
+177
+STR
+Surface thermal radiation
+W m**-2 s
+Accumulated field
+......................
+178
+TSR
+Top solar radiation
+W m**-2 s
+Accumulated field
+......................
+179
+TTR
+Top thermal radiation
+W m**-2 s
+Accumulated field
+......................
+180
+EWSS
+East-West surface stress
+N m**-2 s
+Accumulated field
+......................
+181
+NSSS
+North-South surface stress
+N m**-2 s
+Accumulated field
+......................
+182
+E
+Evaporation
+m of water
+Accumulated field
+......................
+183
+STL3
+Soil temperature level 3
+K
+Climatological deep soil temperature (CDST) before 19930804
+......................
+184
+SWL3
+Soil wetness level 3
+m of water
+Climatological deep soil wetness (CDSW) before 19930804.Scaled depth surf water 7cm deep
+......................
+185
+CCC
+Convective cloud cover
+(0 - 1)
+-
+......................
+186
+LCC
+Low cloud cover
+(0 - 1)
+-
+......................
+187
+MCC
+Medium cloud cover
+(0 - 1)
+-
+......................
+188
+HCC
+High cloud cover
+(0 - 1)
+-
+......................
+189
+SUND
+Sunshine duration
+s
+Accumulated field
+......................
+190
+EWOV
+East-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+191
+NSOV
+North-South component of sub-gridscale orographic variance
+m**2
+-
+......................
+192
+NWOV
+North-West/South-East component of sub-gridscale orographic variance
+m**2
+-
+......................
+193
+NEOV
+North-East/South-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+194
+BTMP
+Brightness temperature
+K
+-
+......................
+195
+LGWS
+Latitudinal component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+196
+MGWS
+Meridional component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+197
+GWD
+Gravity wave dissipation
+W m**-2 s
+Accumulated field
+......................
+198
+SRC
+Skin reservoir content
+m of water
+-
+......................
+199
+VEG
+Vegetation fraction
+(0 - 1)
+-
+......................
+200
+VSO
+Variance of sub-gridscale orography
+m**2
+-
+......................
+201
+MX2T
+Maximum temperature at 2 metres since previous post-processing
+K
+-
+......................
+202
+MN2T
+Minimum temperature at 2 metres since previous post-processing
+K
+-
+......................
+203
+O3
+Ozone mass mixing ratio
+kg kg**-1
+-
+......................
+204
+PAW
+Precipitation analysis weights
+-
+-
+......................
+205
+RO
+Runoff
+m
+Accumulated field
+......................
+206
+TCO3
+Total column ozone
+kg m**-2
+Before 20010612 was in Dobsons. 1 Dobson = 2.1415E-5 kg m**-2
+......................
+207
+10SI
+10 metre wind speed
+m s**-1
+-
+......................
+208
+TSRC
+Top net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+209
+TTRC
+Top net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+210
+SSRC
+Surface net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+211
+STRC
+Surface net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+212
+TISR
+TOA incident solar radiation
+W m**-2 s
+Accumulated field
+......................
+214
+DHR
+Diabatic heating by radiation
+K
+-
+......................
+215
+DHVD
+Diabatic heating by vertical diffusion
+K
+-
+......................
+216
+DHCC
+Diabatic heating by cumulus convection
+K
+-
+......................
+217
+DHLC
+Diabatic heating large-scale condensation
+K
+-
+......................
+218
+VDZW
+Vertical diffusion of zonal wind
+m s**-1
+-
+......................
+219
+VDMW
+Vertical diffusion of meridional wind
+m s**-1
+-
+......................
+220
+EWGD
+East-West gravity wave drag tendency
+m s**-1
+-
+......................
+221
+NSGD
+North-South gravity wave drag tendency
+m s**-1
+-
+......................
+222
+CTZW
+Convective tendency of zonal wind
+m s**-1
+-
+......................
+223
+CTMW
+Convective tendency of meridional wind
+m s**-1
+-
+......................
+224
+VDH
+Vertical diffusion of humidity
+kg kg**-1
+-
+......................
+225
+HTCC
+Humidity tendency by cumulus convection
+kg kg**-1
+-
+......................
+226
+HTLC
+Humidity tendency by large-scale condensation
+kg kg**-1
+-
+......................
+227
+CRNH
+Change from removal of negative humidity
+kg kg**-1
+-
+......................
+228
+TP
+Total precipitation
+m
+Accumulated
+......................
+229
+IEWS
+Instantaneous X surface stress
+N m**-2
+-
+......................
+230
+INSS
+Instantaneous Y surface stress
+N m**-2
+-
+......................
+231
+ISHF
+Instantaneous surface heat flux
+W m**-2
+-
+......................
+232
+IE
+Instantaneous moisture flux
+kg m**-2 s
+Evaporation
+......................
+233
+ASQ
+Apparent surface humidity
+kg kg**-1
+-
+......................
+234
+LSRH
+Logarithm of surface roughness length for heat
+-
+-
+......................
+235
+SKT
+Skin temperature
+K
+-
+......................
+236
+STL4
+Soil temperature level 4
+K
+-
+......................
+237
+SWL4
+Soil wetness level 4
+m
+Scaled to depth of surface water layer 7cm deep
+......................
+238
+TSN
+Temperature of snow layer
+K
+-
+......................
+239
+CSF
+Convective snowfall
+m of water equivalent
+Accumulated field
+......................
+240
+LSF
+Large-scale snowfall
+m of water equivalent
+Accumulated field
+......................
+241
+ACF
+Accumulated cloud fraction tendency
+(-1 to 1)
+-
+......................
+242
+ALW
+Accumulated liquid water tendency
+(-1 to 1)
+-
+......................
+243
+FAL
+Forecast albedo
+(0 - 1)
+-
+......................
+244
+FSR
+Forecast surface roughness
+m
+-
+......................
+245
+FLSR
+Forecast logarithm of surface roughness for heat
+-
+-
+......................
+246
+CLWC
+Cloud liquid water content
+kg kg**-1
+-
+......................
+247
+CIWC
+Cloud ice water content
+kg kg**-1
+-
+......................
+248
+CC
+Cloud cover
+(0 - 1)
+-
+......................
+249
+AIW
+Accumulated ice water tendency
+(-1 to 1)
+-
+......................
+250
+ICE
+Ice age
+(0 - 1)
+0 first-year, 1 multi-year
+......................
+251
+ATTE
+Adiabatic tendency of temperature
+K
+-
+......................
+252
+ATHE
+Adiabatic tendency of humidity
+kg kg**-1
+-
+......................
+253
+ATZE
+Adiabatic tendency of zonal wind
+m s**-1
+-
+......................
+254
+ATMW
+Adiabatic tendency of meridional wind
+m s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_130 b/gribtables/local_table_2_version_130
new file mode 100755
index 0000000..cf225d3
--- /dev/null
+++ b/gribtables/local_table_2_version_130
@@ -0,0 +1,162 @@
+ECMWF local table 2: Version Number 130 (ASTEX).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+208
+TSRU
+Top solar radiation upward
+W m**-2
+-
+......................
+209
+TTRU
+Top thermal radiation upward
+W m**-2
+-
+......................
+210
+TSUC
+Top solar radiation upward, clear sky
+W m**-2
+-
+......................
+211
+TTUC
+Top thermal radiation upward, clear sky
+W m**-2
+-
+......................
+212
+CLW
+Cloud liquid water
+kg kg**-1
+-
+......................
+213
+CF
+Cloud fraction
+(0 - 1)
+-
+......................
+214
+DHR
+Diabatic heating by radiation
+K s**-1
+-
+......................
+215
+DHVD
+Diabatic heating by vertical diffusion
+K s**-1
+-
+......................
+216
+DHCC
+Diabatic heating by cumulus convection
+K s**-1
+-
+......................
+217
+DHLC
+Diabatic heating by large-scale condensation
+K s**-1
+-
+......................
+218
+VDZW
+Vertical diffusion of zonal wind
+m**2 s**-3
+-
+......................
+219
+VDMW
+Vertical diffusion of meridional wind
+m**2 s**-3
+-
+......................
+220
+EWGD
+East-West gravity wave drag
+m**2 s**-3
+-
+......................
+221
+NSGD
+North-South gravity wave drag
+m**2 s**-3
+-
+......................
+222
+CTZW
+Convective tendency of zonal wind
+m**2 s**-3
+-
+......................
+223
+CTMW
+Convective tendency of meridional wind
+m**2 s**-3
+-
+......................
+224
+VDH
+Vertical diffusion of humidity
+kg kg**-1 s**-1
+-
+......................
+225
+HTCC
+Humidity tendency by cumulus convection
+kg kg**-1 s**-1
+-
+......................
+226
+HTLC
+Humidity tendency by large-scale condensation
+kg kg**-1 s**-1
+-
+......................
+227
+CRNH
+Change from removal of negative humidity
+kg kg**-1 s**-1
+-
+......................
+228
+ATT
+Adiabatic tendency of temperature
+K s**-1
+-
+......................
+229
+ATH
+Adiabatic tendency of humidity
+kg kg**-1 s**-1
+-
+......................
+230
+ATZW
+Adiabatic tendency of zonal wind
+m**2 s**-3
+-
+......................
+231
+ATMWAX
+Adiabatic tendency of meridional wind
+m**2 s**-3
+-
+......................
+232
+MVV
+Mean vertical velocity
+Pa s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_131 b/gribtables/local_table_2_version_131
new file mode 100755
index 0000000..da9b7a0
--- /dev/null
+++ b/gribtables/local_table_2_version_131
@@ -0,0 +1,384 @@
+ECMWF local table 2: Version Number 131 (Probability forecasts).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+2TAG2
+2m temperature anomaly of at least +2K
+%
+Original units: K
+......................
+002
+2TAG1
+2m temperature anomaly of at least +1K
+%
+Original units: K
+......................
+003
+2TAG0
+2m temperature anomaly of at least 0K
+%
+Original units: K
+......................
+004
+2TALM1
+2m temperature anomaly of at most -1K
+%
+Original units: K
+......................
+005
+2TALM2
+2m temperature anomaly of at most -2K
+%
+Original units: K
+......................
+006
+TPAG20
+Total precipitation anomaly of at least 20 mm
+%
+Original units: m
+......................
+007
+TPAG10
+Total precipitation anomaly of at least 10 mm
+%
+Original units: m
+......................
+008
+TPAG0
+Total precipitation anomaly of at least 0 mm
+%
+Original units: m
+......................
+009
+STAG0
+Surface temperature anomaly of at least 0K
+%
+Original units: K
+......................
+010
+MSLAG0
+Mean sea level pressure anomaly of at least 0 Pa
+%
+Original units: Pa
+......................
+015
+H0DIP
+Heigth of 0 degree isotherm probability
+percentage
+Original units: m
+......................
+016
+HSLP
+Heigth of snowfall limit probability
+percentage
+Original units: m
+......................
+017
+SAIP
+Showalter index probability
+percentage
+Original units: K
+......................
+018
+WHIP
+Whiting index probability
+percentage
+Original units: K
+......................
+020
+TALM2
+Temperature anomaly less than -2 K
+%
+-
+......................
+021
+TAG2
+Temperature anomaly of at least +2 K
+%
+-
+......................
+022
+TALM8
+Temperature anomaly less than -8 K
+%
+-
+......................
+023
+TALM4
+Temperature anomaly less than -4 K
+%
+-
+......................
+024
+TAG4
+Temperature anomaly greater than +4 K
+%
+-
+......................
+025
+TAG8
+Temperature anomaly greater than +8 K
+%
+-
+......................
+049
+10GP
+10 metre wind gust probability
+percentage
+Original units: m s**-1
+......................
+059
+CAPEP
+Convective available potential energy probability
+percentage
+Original units: J kg**-1
+......................
+060
+TPG1
+Total precipitation of at least 1 mm
+%
+-
+......................
+061
+TPG5
+Total precipitation of at least 5 mm
+%
+-
+......................
+062
+TPG10
+Total precipitation of at least 10 mm
+%
+-
+......................
+063
+TPG20
+Total precipitation of at least 20 mm
+%
+-
+......................
+064
+TPL01
+Total precipitation less than 0.1 mm
+%
+no rain event
+......................
+065
+TPRL1
+Total precipitation rate less than 1 mm/day
+%
+-
+......................
+066
+TPRG3
+Total precipitation rate of at least 3 mm/day
+%
+-
+......................
+067
+TPRG5
+Total precipitation rate of at least 5 mm/day
+%
+-
+......................
+068
+10SPG10
+10 metre Wind speed of at least 10 m/s
+%
+-
+......................
+069
+10SPG15
+10 metre Wind speed of at least 15 m/s
+%
+-
+......................
+070
+10FGG15
+10 metre Wind gust of at least 15 m/s
+%
+-
+......................
+071
+10FGG20
+10 metre Wind gust of at least 20 m/s
+%
+-
+......................
+072
+10FGG25
+10 metre Wind gust of at least 25 m/s
+%
+-
+......................
+073
+2TL273
+2 metre temperature less than 273.15 K
+%
+-
+......................
+074
+SWHG2
+Significant wave height of at least 2 m
+%
+-
+......................
+075
+SWHG4
+Significant wave height of at least 4 m
+%
+-
+......................
+076
+SWHG6
+Significant wave height of at least 6 m
+%
+-
+......................
+077
+SWHG8
+Significant wave height of at least 8 m
+%
+-
+......................
+078
+MWPG8
+Mean wave period of at least 8 s
+%
+-
+......................
+079
+MWPG10
+Mean wave period of at least 10 s
+%
+-
+......................
+080
+MWPG12
+Mean wave period of at least 12 s
+%
+-
+......................
+081
+MWPG15
+Mean wave period of at least 15 s
+%
+-
+......................
+082
+TPG40
+Total precipitation of at least 40 mm
+%
+-
+......................
+083
+TPG60
+Total precipitation of at least 60 mm
+%
+-
+......................
+084
+TPG80
+Total precipitation of at least 80 mm
+%
+-
+......................
+085
+TPG100
+Total precipitation of at least 100 mm
+%
+-
+......................
+086
+TPG150
+Total precipitation of at least 150 mm
+%
+-
+......................
+087
+TPG200
+Total precipitation of at least 200 mm
+%
+-
+......................
+088
+TPG300
+Total precipitation of at least 300 mm
+%
+-
+......................
+129
+ZP
+Geopotential probability
+%
+-
+......................
+130
+TAP
+Temperature anomaly probability
+percentage
+Original units: K
+......................
+144
+SFP
+Snowfall (convective + stratiform) probability
+percentage
+Original units: m of water equivalent
+......................
+164
+TCCP
+Total cloud cover probability
+percentage
+Original units: (0 - 1)
+......................
+165
+10SP
+10 metre speed probability
+percentage
+Original units: m s**-1
+......................
+167
+2TP
+2 metre temperature probability
+percentage
+Original units: K
+......................
+201
+MX2TP
+Maximum 2 metre temperature probability
+percentage
+Original units: K
+......................
+202
+MN2TP
+Minimum 2 metre temperature probability
+percentage
+Original units: K
+......................
+228
+TPP
+Total precipitation probability
+percentage
+Original units: m
+......................
+229
+SWHP
+Significant wave height probability
+percentage
+Original units: m
+......................
+232
+MWPP
+Mean wave period probability
+percentage
+Original units: s
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_132 b/gribtables/local_table_2_version_132
new file mode 100755
index 0000000..651aa27
--- /dev/null
+++ b/gribtables/local_table_2_version_132
@@ -0,0 +1,60 @@
+ECMWF local table 2: Version Number 132 (Extreme forecast index).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+049
+10FGI
+10 metre wind gust index
+(-1 to 1)
+Original units: m s**-1
+......................
+144
+SFI
+Snowfall index
+(-1 to 1)
+-
+......................
+165
+10WSI
+10 metre speed index
+(-1 to 1)
+Original units: m s**-1
+......................
+167
+2TI
+2 metre temperature index
+(-1 to 1)
+Original units: K
+......................
+200
+MAXSWHI
+Maximum of significant wave height index
+(-1 to 1)
+-
+......................
+201
+MX2TI
+Maximum temperature at 2 metres index
+(-1 to 1)
+-
+......................
+202
+MN2TI
+Minimum temperature at 2 metres index
+(-1 to 1)
+-
+......................
+228
+TPI
+Total precipitation index
+(-1 to 1)
+Original units: m
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_133 b/gribtables/local_table_2_version_133
new file mode 100755
index 0000000..00d2537
--- /dev/null
+++ b/gribtables/local_table_2_version_133
@@ -0,0 +1,558 @@
+ECMWF local table 2: Version Number 133 (SREPS).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+2TPLM10
+2m temperature probability less than -10 C
+%
+-
+......................
+002
+2TPLM5
+2m temperature probability less than -5 C
+%
+-
+......................
+003
+2TPL0
+2m temperature probability less than 0 C
+%
+-
+......................
+004
+2TPL5
+2m temperature probability less than 5 C
+%
+-
+......................
+005
+2TPL10
+2m temperature probability less than 10 C
+%
+-
+......................
+006
+2TPG25
+2m temperature probability greater than 25 C
+%
+-
+......................
+007
+2TPG30
+2m temperature probability greater than 30 C
+%
+-
+......................
+008
+2TPG35
+2m temperature probability greater than 35 C
+%
+-
+......................
+009
+2TPG40
+2m temperature probability greater than 40 C
+%
+-
+......................
+010
+2TPG45
+2m temperature probability greater than 45 C
+%
+-
+......................
+011
+MN2TPLM10
+Minimum 2 metre temperature probability less than -10 C
+%
+-
+......................
+012
+MN2TPLM5
+Minimum 2 metre temperature probability less than -5 C
+%
+-
+......................
+013
+MN2TPL0
+Minimum 2 metre temperature probability less than 0 C
+%
+-
+......................
+014
+MN2TPL5
+Minimum 2 metre temperature probability less than 5 C
+%
+-
+......................
+015
+MN2TPL10
+Minimum 2 metre temperature probability less than 10 C
+%
+-
+......................
+016
+MX2TPG25
+Maximum 2 metre temperature probability greater than 25 C
+%
+-
+......................
+017
+MX2TPG30
+Maximum 2 metre temperature probability greater than 30 C
+%
+-
+......................
+018
+MX2TPG35
+Maximum 2 metre temperature probability greater than 35 C
+%
+-
+......................
+019
+MX2TPG40
+Maximum 2 metre temperature probability greater than 40 C
+%
+-
+......................
+020
+MX2TPG45
+Maximum 2 metre temperature probability greater than 45 C
+%
+-
+......................
+021
+10SPG10
+10 metre wind speed probability of at least 10 m/s
+%
+-
+......................
+022
+10SPG15
+10 metre wind speed probability of at least 15 m/s
+%
+-
+......................
+023
+10SPG20
+10 metre wind speed probability of at least 20 m/s
+%
+-
+......................
+024
+10SPG35
+10 metre wind speed probability of at least 35 m/s
+%
+-
+......................
+025
+10SPG50
+10 metre wind speed probability of at least 50 m/s
+%
+-
+......................
+026
+10GPG20
+10 metre wind gust probability of at least 20 m/s
+%
+-
+......................
+027
+10GPG35
+10 metre wind gust probability of at least 35 m/s
+%
+-
+......................
+028
+10GPG50
+10 metre wind gust probability of at least 50 m/s
+%
+-
+......................
+029
+10GPG75
+10 metre wind gust probability of at least 75 m/s
+%
+-
+......................
+030
+10GPG100
+10 metre wind gust probability of at least 100 m/s
+%
+-
+......................
+031
+TPPG1
+Total precipitation probability of at least 1 mm
+%
+-
+......................
+032
+TPPG5
+Total precipitation probability of at least 5 mm
+%
+-
+......................
+033
+TPPG10
+Total precipitation probability of at least 10 mm
+%
+-
+......................
+034
+TPPG20
+Total precipitation probability of at least 20 mm
+%
+-
+......................
+035
+TPPG40
+Total precipitation probability of at least 40 mm
+%
+-
+......................
+036
+TPPG60
+Total precipitation probability of at least 60 mm
+%
+-
+......................
+037
+TPPG80
+Total precipitation probability of at least 80 mm
+%
+-
+......................
+038
+TPPG100
+Total precipitation probability of at least 100 mm
+%
+-
+......................
+039
+TPPG150
+Total precipitation probability of at least 150 mm
+%
+-
+......................
+040
+TPPG200
+Total precipitation probability of at least 200 mm
+%
+-
+......................
+041
+TPPG300
+Total precipitation probability of at least 300 mm
+%
+-
+......................
+042
+SFPG1
+Snowfall probability of at least 1 mm
+%
+-
+......................
+043
+SFPG5
+Snowfall probability of at least 5 mm
+%
+-
+......................
+044
+SFPG10
+Snowfall probability of at least 10 mm
+%
+-
+......................
+045
+SFPG20
+Snowfall probability of at least 20 mm
+%
+-
+......................
+046
+SFPG40
+Snowfall probability of at least 40 mm
+%
+-
+......................
+047
+SFPG60
+Snowfall probability of at least 60 mm
+%
+-
+......................
+048
+SFPG80
+Snowfall probability of at least 80 mm
+%
+-
+......................
+049
+SFPG100
+Snowfall probability of at least 100 mm
+%
+-
+......................
+050
+SFPG150
+Snowfall probability of at least 150 mm
+%
+-
+......................
+051
+SFPG200
+Snowfall probability of at least 200 mm
+%
+-
+......................
+052
+SFPG300
+Snowfall probability of at least 300 mm
+%
+-
+......................
+053
+TCCPG10
+Total Cloud Cover probability greater than 10%
+%
+-
+......................
+054
+TCCPG20
+Total Cloud Cover probability greater than 20%
+%
+-
+......................
+055
+TCCPG30
+Total Cloud Cover probability greater than 30%
+%
+-
+......................
+056
+TCCPG40
+Total Cloud Cover probability greater than 40%
+%
+-
+......................
+057
+TCCPG50
+Total Cloud Cover probability greater than 50%
+%
+-
+......................
+058
+TCCPG60
+Total Cloud Cover probability greater than 60%
+%
+-
+......................
+059
+TCCPG70
+Total Cloud Cover probability greater than 70%
+%
+-
+......................
+060
+TCCPG80
+Total Cloud Cover probability greater than 80%
+%
+-
+......................
+061
+TCCPG90
+Total Cloud Cover probability greater than 90%
+%
+-
+......................
+062
+TCCPG99
+Total Cloud Cover probability greater than 99%
+%
+-
+......................
+063
+HCCPG10
+High Cloud Cover probability greater than 10%
+%
+-
+......................
+064
+HCCPG20
+High Cloud Cover probability greater than 20%
+%
+-
+......................
+065
+HCCPG30
+High Cloud Cover probability greater than 30%
+%
+-
+......................
+066
+HCCPG40
+High Cloud Cover probability greater than 40%
+%
+-
+......................
+067
+HCCPG50
+High Cloud Cover probability greater than 50%
+%
+-
+......................
+068
+HCCPG60
+High Cloud Cover probability greater than 60%
+%
+-
+......................
+069
+HCCPG70
+High Cloud Cover probability greater than 70%
+%
+-
+......................
+070
+HCCPG80
+High Cloud Cover probability greater than 80%
+%
+-
+......................
+071
+HCCPG90
+High Cloud Cover probability greater than 90%
+%
+-
+......................
+072
+HCCPG99
+High Cloud Cover probability greater than 99%
+%
+-
+......................
+073
+MCCPG10
+Medium Cloud Cover probability greater than 10%
+%
+-
+......................
+074
+MCCPG20
+Medium Cloud Cover probability greater than 20%
+%
+-
+......................
+075
+MCCPG30
+Medium Cloud Cover probability greater than 30%
+%
+-
+......................
+076
+MCCPG40
+Medium Cloud Cover probability greater than 40%
+%
+-
+......................
+077
+MCCPG50
+Medium Cloud Cover probability greater than 50%
+%
+-
+......................
+078
+MCCPG60
+Medium Cloud Cover probability greater than 60%
+%
+-
+......................
+079
+MCCPG70
+Medium Cloud Cover probability greater than 70%
+%
+-
+......................
+080
+MCCPG80
+Medium Cloud Cover probability greater than 80%
+%
+-
+......................
+081
+MCCPG90
+Medium Cloud Cover probability greater than 90%
+%
+-
+......................
+082
+MCCPG99
+Medium Cloud Cover probability greater than 99%
+%
+-
+......................
+083
+LCCPG10
+Low Cloud Cover probability greater than 10%
+%
+-
+......................
+084
+LCCPG20
+Low Cloud Cover probability greater than 20%
+%
+-
+......................
+085
+LCCPG30
+Low Cloud Cover probability greater than 30%
+%
+-
+......................
+086
+LCCPG40
+Low Cloud Cover probability greater than 40%
+%
+-
+......................
+087
+LCCPG50
+Low Cloud Cover probability greater than 50%
+%
+-
+......................
+088
+LCCPG60
+Low Cloud Cover probability greater than 60%
+%
+-
+......................
+089
+LCCPG70
+Low Cloud Cover probability greater than 70%
+%
+-
+......................
+090
+LCCPG80
+Low Cloud Cover probability greater than 80%
+%
+-
+......................
+091
+LCCPG90
+Low Cloud Cover probability greater than 90%
+%
+-
+......................
+092
+LCCPG99
+Low Cloud Cover probability greater than 99%
+%
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_140 b/gribtables/local_table_2_version_140
new file mode 100755
index 0000000..4c48d67
--- /dev/null
+++ b/gribtables/local_table_2_version_140
@@ -0,0 +1,246 @@
+ECMWF local table 2: Version Number 140 (Wave).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+200
+MAXSWH
+Maximum of significant wave height
+m
+-
+......................
+217
+TMAX
+Period corresponding to maximum individual wave height
+s
+-
+......................
+218
+HMAX
+Maximum individual wave height
+m
+-
+......................
+219
+WMB
+Model bathymetry
+m
+Ocean depth limited to 999 metres
+......................
+220
+MP1
+Mean wave period based on first moment
+s
+-
+......................
+221
+MP2
+Mean wave period based on second moment
+s
+-
+......................
+222
+WDW
+Wave spectral directional width
+-
+-
+......................
+223
+P1WW
+Mean wave period based on first moment for wind waves
+s
+-
+......................
+224
+P2WW
+Mean wave period based on second moment for wind waves
+s
+-
+......................
+225
+DWWW
+Wave spectral directional width for wind waves
+-
+-
+......................
+226
+P1PS
+Mean wave period based on first moment for swell
+s
+-
+......................
+227
+P2PS
+Mean wave period based on second moment for swell
+s
+-
+......................
+228
+DWPS
+Wave spectral directional width for swell
+-
+-
+......................
+229
+SWH
+Significant wave height
+m
+-
+......................
+230
+MWD
+Mean wave direction
+degrees
+-
+......................
+231
+PP1D
+Peak period of 1D spectra
+s
+-
+......................
+232
+MWP
+Mean wave period
+s
+-
+......................
+233
+CDWW
+Coefficient of drag with waves
+-
+-
+......................
+234
+SHWW
+Significant height of wind waves
+m
+-
+......................
+235
+MDWW
+Mean direction of wind waves
+degrees
+-
+......................
+236
+MPWW
+Mean period of wind waves
+s
+-
+......................
+237
+SHTS
+Significant height of total swell
+m
+-
+......................
+238
+MDTS
+Mean direction of total swell
+degrees
+-
+......................
+239
+MPTS
+Mean period of total swell
+s
+-
+......................
+240
+SDHS
+Standard deviation wave height
+m
+-
+......................
+241
+MU10
+Mean of 10 metre wind speed
+m s**-1
+-
+......................
+242
+MDWI
+Mean wind direction
+degrees
+-
+......................
+243
+SDU
+Standard deviation of 10 metre wind speed
+m s**-1
+-
+......................
+244
+MSQS
+Mean square slope of waves
+dimensionless
+-
+......................
+245
+WIND
+10 metre wind speed
+m s**-1
+Modified by wave model analysis
+......................
+246
+AWH
+Altimeter wave height
+m
+-
+......................
+247
+ACWH
+Altimeter corrected wave height
+m
+-
+......................
+248
+ARRC
+Altimeter range relative correction
+-
+-
+......................
+249
+DWI
+10 metre wind direction
+degrees
+-
+......................
+250
+2DSP
+2D wave spectra (multiple)
+m**2 s radian**-1
+Logarithm 10 based, modified by constant
+......................
+251
+2DFD
+2D wave spectra (single)
+m**2 s radian**-1
+One direction/one frequency; log 10 based, modified by constant
+......................
+252
+WSK
+Wave spectral kurtosis
+-
+-
+......................
+253
+BFI
+Benjamin-Feir index
+-
+-
+......................
+254
+WSP
+Wave spectral peakedness
+s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_150 b/gribtables/local_table_2_version_150
new file mode 100755
index 0000000..bfdd4f2
--- /dev/null
+++ b/gribtables/local_table_2_version_150
@@ -0,0 +1,198 @@
+ECMWF local table 2: Version Number 150 (Ocean - preliminary version).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+129
+-
+Ocean potential temperature
+deg C
+-
+......................
+130
+-
+Ocean salinity
+psu
+-
+......................
+131
+-
+Ocean potential density
+kg m**-3 -1000
+Reference = surface
+......................
+133
+-
+Ocean U velocity
+m s**-1
+-
+......................
+134
+-
+Ocean V velocity
+m s**-1
+-
+......................
+135
+-
+Ocean W velocity
+m s**-1
+-
+......................
+137
+-
+Richardson number
+-
+-
+......................
+139
+-
+U*V product
+m s**-2
+-
+......................
+140
+-
+U*T product
+m s**-1 deg C
+-
+......................
+141
+-
+V*T product
+m s**-1 deg C
+-
+......................
+142
+-
+U*U product
+m s**-2
+-
+......................
+143
+-
+V*V product
+m s**-2
+-
+......................
+144
+-
+UV - U~V~
+m s**-2
+u~ is time-mean of u
+......................
+145
+-
+UT - U~T~
+m s**-1 deg C
+-
+......................
+146
+-
+VT - V~T~
+m s**-1 deg C
+-
+......................
+147
+-
+UU - U~U~
+m s**-2
+-
+......................
+148
+-
+VV - V~V~
+m s**-2
+-
+......................
+152
+-
+Sea level
+m
+Departure from geoid, tides removed
+......................
+153
+-
+Barotropic stream function
+-
+-
+......................
+154
+-
+Mixed layer depth
+m
+Tcr=0.5 C for HOPE model
+......................
+155
+-
+Depth
+m
+Eg of isothermal surface
+......................
+168
+-
+U stress
+Pa
+-
+......................
+169
+-
+V stress
+Pa
+-
+......................
+170
+-
+Turbulent kinetic energy input
+-
+-
+......................
+171
+-
+Net surface heat flux
+-
++ve = down
+......................
+172
+-
+Surface solar radiation
+-
+-
+......................
+173
+-
+P-E
+-
+-
+......................
+180
+-
+Diagnosed sea surface temperature error
+deg C
+-
+......................
+181
+-
+Heat flux correction
+W m**-2
+-
+......................
+182
+-
+Observed sea surface temperature
+deg C
+-
+......................
+183
+-
+Observed heat flux
+W m**-2
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_151 b/gribtables/local_table_2_version_151
new file mode 100755
index 0000000..c6c1eb4
--- /dev/null
+++ b/gribtables/local_table_2_version_151
@@ -0,0 +1,480 @@
+ECMWF local table 2: Version Number 151 (Ocean - operational version).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+129
+OCPT
+Ocean potential temperature
+deg C
+-
+......................
+130
+S
+Salinity
+psu
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+133
+WV
+W velocity
+m s**-1
+-
+......................
+134
+MST
+Modulus of strain rate tensor
+s**-1
+-
+......................
+135
+VVS
+Vertical viscosity
+m**2 s**-1
+-
+......................
+136
+VDF
+Vertical diffusivity
+m**2 s**-1
+-
+......................
+137
+DEP
+Depth
+m
+-
+......................
+138
+STH
+Sigma-theta
+kg m**-3
+-
+......................
+139
+RN
+Richardson number
+-
+-
+......................
+140
+UV
+UV product
+m**2 s**-2
+-
+......................
+141
+UT
+UT product
+m s**-1 degC
+-
+......................
+142
+VT
+VT product
+m s**-1 deg C
+-
+......................
+143
+UU
+UU product
+m**2 s**-2
+-
+......................
+144
+VV
+VV product
+m**2 s**-2
+-
+......................
+145
+SL
+Sea level
+m
+Tides removed
+......................
+146
+SL_1
+Sea level previous timestep
+m
+-
+......................
+147
+BSF
+Barotropic stream function
+m**3 s**-1
+-
+......................
+148
+MLD
+Mixed layer depth
+m
+-
+......................
+149
+BTP
+Bottom Pressure (equivalent height)
+m
+-
+......................
+150
+SH
+Steric height
+m
+-
+......................
+151
+CRL
+Curl of Wind Stress
+N m**-3
+-
+......................
+152
+-
+Divergence of wind stress
+Nm**-3
+-
+......................
+153
+TAX
+U stress
+N m**-2
+-
+......................
+154
+TAY
+V stress
+N m**-2
+-
+......................
+155
+TKI
+Turbulent kinetic energy input
+W m**-2
+-
+......................
+156
+NSF
+Net surface heat flux
+W m**-2
+-
+......................
+157
+ASR
+Absorbed solar radiation
+W m**-2
+-
+......................
+158
+PME
+Precipitation - evaporation
+m s**-1
+-
+......................
+159
+SST
+Specified sea surface temperature
+deg C
+-
+......................
+160
+SHF
+Specified surface heat flux
+W m**-2
+-
+......................
+161
+DTE
+Diagnosed sea surface temperature error
+deg C
+-
+......................
+162
+HFC
+Heat flux correction
+W m**-2
+-
+......................
+163
+20D
+20 degrees isotherm depth
+m
+-
+......................
+164
+TAV300
+Average potential temperature in the upper 300m
+degrees C
+-
+......................
+165
+UBA1
+Vertically integrated zonal velocity (previous time step)
+m**2 s**-1
+-
+......................
+166
+VBA1
+Vertically Integrated meridional velocity (previous time step)
+m**2 s**-1
+-
+......................
+167
+ZTR
+Vertically integrated zonal volume transport
+m**2 s**-1
+-
+......................
+168
+MTR
+Vertically integrated meridional volume transport
+m**2 s**-1
+-
+......................
+169
+ZHT
+Vertically integrated zonal heat transport
+J m**-1 s**-1
+-
+......................
+170
+MHT
+Vertically integrated meridional heat transport
+J m**-1 s**-1
+-
+......................
+171
+UMAX
+U velocity maximum
+m s**-1
+-
+......................
+172
+DUMAX
+Depth of the velocity maximum
+m
+-
+......................
+173
+SMAX
+Salinity maximum
+psu
+-
+......................
+174
+DSMAX
+Depth of salinity maximum
+m
+-
+......................
+175
+SAV300
+Average salinity in the upper 300m
+psu
+-
+......................
+176
+LDP
+Layer depth at scalar points
+m
+-
+......................
+177
+LDU
+Layer depth at vector points
+m
+-
+......................
+178
+PTI
+Potential temperature increment
+deg C
+-
+......................
+179
+PTAE
+Potential temperature analysis error
+deg C
+-
+......................
+180
+BPT
+Background potential temperature
+deg C
+-
+......................
+181
+APT
+Analysed potential temperature
+deg C
+-
+......................
+182
+PTBE
+Potential temperature background error
+deg C
+-
+......................
+183
+AS
+Analysed salinity
+psu
+-
+......................
+184
+SALI
+Salinity increment
+psu
+-
+......................
+185
+EBT
+Estimated Bias in Temperature
+deg C
+-
+......................
+186
+EBS
+Estimated Bias in Salinity
+psu
+-
+......................
+187
+UVI
+Zonal Velocity increment (from balance operator)
+m/s per time step
+-
+......................
+188
+VVI
+Meridional Velocity increment (from balance operator)
+-
+-
+......................
+190
+SUBI
+Salinity increment (from salinity data)
+psu per time step
+-
+......................
+191
+SALE
+Salinity analysis error
+psu
+-
+......................
+192
+BSAL
+Background Salinity
+psu
+-
+......................
+194
+SALBE
+Salinity background error
+psu
+-
+......................
+199
+EBTA
+Estimated temperature bias from assimilation
+deg C
+-
+......................
+200
+EBSA
+Estimated salinity bias from assimilation
+psu
+-
+......................
+201
+LTI
+Temperature increment from relaxation term
+deg C per time step
+-
+......................
+202
+LSI
+Salinity increment from relaxation term
+-
+-
+......................
+203
+BZPGA
+Bias in the zonal pressure gradient (applied)
+Pa**m-1
+-
+......................
+204
+BMPGA
+Bias in the meridional pressure gradient (applied)
+Pa**m-1
+-
+......................
+205
+EBTL
+Estimated temperature bias from relaxation
+deg C
+-
+......................
+206
+EBSL
+Estimated salinity bias from relaxation
+psu
+-
+......................
+207
+FGBT
+First guess bias in temperature
+deg C
+-
+......................
+208
+FGBS
+First guess bias in salinity
+psu
+-
+......................
+209
+BPA
+Applied bias in pressure
+Pa
+-
+......................
+210
+FGBP
+FG bias in pressure
+Pa
+-
+......................
+211
+PTA
+Bias in temperature(applied)
+deg C
+-
+......................
+212
+PSA
+Bias in salinity (applied)
+psu
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_160 b/gribtables/local_table_2_version_160
new file mode 100755
index 0000000..ce76b7f
--- /dev/null
+++ b/gribtables/local_table_2_version_160
@@ -0,0 +1,654 @@
+ECMWF local table 2: Version Number 160 (ECMWF re-analysis statistics).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+127
+AT
+Atmospheric tide
+-
+Not GRIB data
+......................
+128
+BV
+Budget values
+-
+Not GRIB data
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+Orography at surface
+......................
+130
+T
+Temperature
+K
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+133
+Q
+Specific humidity
+kg kg**-1
+-
+......................
+134
+SP
+Surface pressure
+Pa
+-
+......................
+135
+W
+Vertical velocity
+Pa s**-1
+-
+......................
+136
+TCW
+Total column water
+kg m**-2
+Liquid + ice + vapour
+......................
+137
+PWC
+Precipitable water content
+kg m**-2
+-
+......................
+138
+VO
+Vorticity (relative)
+s**-1
+-
+......................
+139
+STL1
+Soil temperature level 1
+K
+-
+......................
+140
+SWL1
+Soil wetness level 1
+m
+-
+......................
+141
+SD
+Snow depth
+m of water
+-
+......................
+142
+LSP
+Large-scale precipitation
+kg m**-2 s**-1
+-
+......................
+143
+CP
+Convective precipitation
+kg m**-2 s**-1
+-
+......................
+144
+SF
+Snowfall
+kg m**-2 s**-1
+-
+......................
+145
+BLD
+Boundary layer dissipation
+W m**-2
+-
+......................
+146
+SSHF
+Surface sensible heat flux
+W m**-2
+-
+......................
+147
+SLHF
+Surface latent heat flux
+W m**-2
+-
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+-
+......................
+152
+LNSP
+Logarithm of surface pressure
+-
+-
+......................
+155
+D
+Divergence
+s**-1
+-
+......................
+156
+GH
+Height
+m
+Geopotential
+......................
+157
+R
+Relative humidity
+(0 - 1)
+-
+......................
+158
+TSP
+Tendency of surface pressure
+Pa s**-1
+-
+......................
+164
+TCC
+Total cloud cover
+(0 - 1)
+-
+......................
+165
+10U
+10 metre U wind component
+m s**-1
+-
+......................
+166
+10V
+10 metre V wind component
+m s**-1
+-
+......................
+167
+2T
+2 metre temperature
+K
+-
+......................
+168
+2D
+2 metre dewpoint temperature
+K
+-
+......................
+170
+STL2
+Soil temperature level 2
+K
+-
+......................
+171
+SWL2
+Soil wetness level 2
+m
+-
+......................
+172
+LSM
+Land-sea mask
+(0 - 1)
+-
+......................
+173
+SR
+Surface roughness
+m
+-
+......................
+174
+AL
+Albedo
+(0 - 1)
+-
+......................
+176
+SSR
+Surface solar radiation
+W m**-2
+-
+......................
+177
+STR
+Surface thermal radiation
+W m**-2
+-
+......................
+178
+TSR
+Top solar radiation
+W m**-2
+-
+......................
+179
+TTR
+Top thermal radiation
+W m**-2
+-
+......................
+180
+EWSS
+East-West surface stress
+N m**-2 s**-1
+-
+......................
+181
+NSSS
+North-South surface stress
+N m**-2 s**-1
+-
+......................
+182
+E
+Evaporation
+kg m**-2 s**-1
+-
+......................
+183
+STL3
+Soil temperature level 3
+K
+-
+......................
+184
+SWL3
+Soil wetness level 3
+m
+-
+......................
+185
+CCC
+Convective cloud cover
+(0 - 1)
+-
+......................
+186
+LCC
+Low cloud cover
+(0 - 1)
+-
+......................
+187
+MCC
+Medium cloud cover
+(0 - 1)
+-
+......................
+188
+HCC
+High cloud cover
+(0 - 1)
+-
+......................
+190
+EWOV
+East-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+191
+NSOV
+North-South component of sub-gridscale orographic variance
+m**2
+-
+......................
+192
+NWOV
+North-West/South-East component of sub-gridscale orographic variance
+m**2
+-
+......................
+193
+NEOV
+North-East/South-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+195
+LGWS
+Latitudinal component of gravity wave stress
+N m**-2 s
+-
+......................
+196
+MGWS
+Meridional component of gravity wave stress
+N m**-2 s
+-
+......................
+197
+GWD
+Gravity wave dissipation
+W m**-2 s
+-
+......................
+198
+SRC
+Skin reservoir content
+m of water
+-
+......................
+199
+VEG
+Percentage of vegetation
+%
+-
+......................
+200
+VSO
+Variance of sub-gridscale orography
+m**2
+-
+......................
+201
+MX2T
+Maximum temperature at 2 metres during averaging time
+K
+-
+......................
+202
+MN2T
+Minimium temperature at 2 metres during averaging time
+K
+-
+......................
+204
+PAW
+Precipitation analysis weights
+-
+-
+......................
+205
+RO
+Runoff
+kg m**-2 s**-1
+-
+......................
+206
+ZZ
+Standard deviation of geopotential
+m**2 s**-2
+-
+......................
+207
+TZ
+Covariance of temperature and geopotential
+K m**2 s**-2
+-
+......................
+208
+TT
+Standard deviation of temperature
+K
+-
+......................
+209
+QZ
+Covariance of specific humidity and geopotential
+m**2 s**-2
+-
+......................
+210
+QT
+Covariance of specific humidity and temperature
+K
+-
+......................
+211
+QQ
+Standard deviation of specific humidity
+(0 - 1)
+-
+......................
+212
+UZ
+Covariance of U component and geopotential
+m**3 s**-3
+-
+......................
+213
+UT
+Covariance of U component and temperature
+K m s**-1
+-
+......................
+214
+UQ
+Covariance of U component and specific humidity
+m s**-1
+-
+......................
+215
+UU
+Standard deviation of U velocity
+m s**-1
+-
+......................
+216
+VZ
+Covariance of V component and geopotential
+m**3 s**-3
+-
+......................
+217
+VT
+Covariance of V component and temperature
+K m s**-1
+-
+......................
+218
+VQ
+Covariance of V component and specific humidity
+m s**-1
+-
+......................
+219
+VU
+Covariance of V component and U component
+m**2 s**-2
+-
+......................
+220
+VV
+Standard deviation of V component
+m s**-1
+-
+......................
+221
+WZ
+Covariance of W component and geopotential
+Pa m**2 s**-3
+-
+......................
+222
+WT
+Covariance of W component and temperature
+K Pa s**-1
+-
+......................
+223
+WQ
+Covariance of W component and specific humidity
+Pa s**-1
+-
+......................
+224
+WU
+Covariance of W component and U component
+Pa m s**-2
+-
+......................
+225
+WV
+Covariance of W component and V component
+Pa m s**-2
+-
+......................
+226
+WW
+Standard deviation of vertical velocity
+Pa s**-1
+-
+......................
+228
+TP
+Total precipitation
+m
+-
+......................
+229
+IEWS
+Instantaneous X surface stress
+N m**-2
+-
+......................
+230
+INSS
+Instantaneous Y surface stress
+N m**-2
+-
+......................
+231
+ISHF
+Instantaneous surface heat flux
+W m**-2
+-
+......................
+232
+IE
+Instantaneous moisture flux
+kg m**-2 s**-1
+Evaporation
+......................
+233
+ASQ
+Apparent surface humidity
+kg kg**-1
+-
+......................
+234
+LSRH
+Logarithm of surface roughness length for heat
+-
+-
+......................
+235
+SKT
+Skin temperature
+K
+-
+......................
+236
+STL4
+Soil temperature level 4
+K
+-
+......................
+237
+SWL4
+Soil wetness level 4
+m
+-
+......................
+238
+TSN
+Temperature of snow layer
+K
+-
+......................
+239
+CSF
+Convective snowfall
+kg m**-2 s**-1
+-
+......................
+240
+LSF
+Large-scale snowfall
+kg m**-2 s**-1
+-
+......................
+241
+CLWCER
+Cloud liquid water content
+kg kg**-1
+-
+......................
+242
+CC
+Cloud cover
+(0 - 1)
+At given level
+......................
+243
+FAL
+Forecast albedo
+-
+-
+......................
+244
+FSR
+Forecast surface roughness
+m
+-
+......................
+245
+FLSR
+Forecast logarithm of surface roughness for heat
+-
+-
+......................
+246
+10WS
+10 metre wind speed
+m s**-1
+Irrespective of direction
+......................
+247
+MOFL
+Momentum flux
+N m**-2
+Irrespective of direction
+......................
+249
+-
+Gravity wave dissipation flux
+W m**-2
+Ignoring direction
+......................
+254
+HSD
+Heaviside beta function
+(0 - 1)
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_162 b/gribtables/local_table_2_version_162
new file mode 100755
index 0000000..b36b89b
--- /dev/null
+++ b/gribtables/local_table_2_version_162
@@ -0,0 +1,468 @@
+ECMWF local table 2: Version Number 162 (ECMWF re-analysis, ERA40).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+051
+-
+Surface geopotential
+m**2 s**-2
+-
+......................
+052
+-
+Surface pressure
+Pa
+-
+......................
+053
+-
+Vertical integral of mass of atmosphere
+kg m**-2
+-
+......................
+054
+-
+Vertical integral of temperature
+K kg m**-2
+-
+......................
+055
+-
+Vertical integral of total column water vapour
+kg m**-2
+-
+......................
+056
+-
+Vertical integral of total column liquid cloud water
+kg m**-2
+-
+......................
+057
+-
+Vertical integral of total column frozen cloud water
+kg m**-2
+-
+......................
+058
+-
+Vertical integral of total column ozone
+kg m**-2
+-
+......................
+059
+-
+Vertical integral of kinetic energy
+J m**-2
+-
+......................
+060
+-
+Vertical integral of thermal energy
+J m**-2
+-
+......................
+061
+-
+Vertical integral of dry static energy
+J m**-2
+-
+......................
+062
+-
+Vertical integral of moist static energy
+J m**-2
+-
+......................
+063
+-
+Vertical integral of total energy
+J m**-2
+-
+......................
+064
+-
+Vertical integral of energy conversion
+W m**-2
+-
+......................
+065
+-
+Vertical integral of eastward mass flux
+kg m**-1 s**-1
+-
+......................
+066
+-
+Vertical integral of northward mass flux
+kg m**-1 s**-1
+-
+......................
+067
+-
+Vertical integral of eastward kinetic energy flux
+W m**-2
+-
+......................
+068
+-
+Vertical integral of northward kinetic energy flux
+W m**-2
+-
+......................
+069
+-
+Vertical integral of eastward heat flux
+W m**-2
+-
+......................
+070
+-
+Vertical integral of northward heat flux
+W m**-2
+-
+......................
+071
+-
+Vertical integral of eastward water vapour flux
+kg m**-1 s**-1
+-
+......................
+072
+-
+Vertical integral of northward water vapour flux
+kg m**-1 s**-1
+-
+......................
+073
+-
+Vertical integral of eastward geopotential flux
+W m**-2
+-
+......................
+074
+-
+Vertical integral of northward geopotential flux
+W m**-2
+-
+......................
+075
+-
+Vertical integral of eastward total energy flux
+W m**-2
+-
+......................
+076
+-
+Vertical integral of northward total energy flux
+W m**-2
+-
+......................
+077
+-
+Vertical integral of eastward ozone flux
+kg m**-1 s**-1
+-
+......................
+078
+-
+Vertical integral of northward ozone flux
+kg m**-1 s**-1
+-
+......................
+081
+-
+Vertical integral of divergence of mass flux
+kg m**-2 s**-1
+-
+......................
+082
+-
+Vertical integral of divergence of kinetic energy flux
+W m**-2
+-
+......................
+083
+-
+Vertical integral of divergence of thermal energy flux
+W m**-2
+-
+......................
+084
+-
+Vertical integral of divergence of moisture flux
+kg m**-2 s**-1
+-
+......................
+085
+-
+Vertical integral of divergence of geopotential flux
+W m**-2
+-
+......................
+086
+-
+Vertical integral of divergence of total energy flux
+W m**-2
+-
+......................
+087
+-
+Vertical integral of divergence of ozone flux
+kg m**-2 s**-1
+-
+......................
+100
+-
+Tendency of short wave radiation
+K
+-
+......................
+101
+-
+Tendency of long wave radiation
+K
+-
+......................
+102
+-
+Tendency of clear sky short wave radiation
+K
+-
+......................
+103
+-
+Tendency of clear sky long wave radiation
+K
+-
+......................
+104
+-
+Updraught mass flux
+kg m**-2
+Model half levels
+......................
+105
+-
+Downdraught mass flux
+kg m**-2
+Model half levels
+......................
+106
+-
+Updraught detrainment rate
+kg m**-3
+Model half levels
+......................
+107
+-
+Downdraught detrainment rate
+kg m**-3
+Model half levels
+......................
+108
+-
+Total precipitation flux
+kg m**-2
+Model half levels
+......................
+109
+-
+Turbulent diffusion coefficient for heat
+m**2
+Model half levels
+......................
+110
+-
+Tendency of temperature due to physics
+K
+-
+......................
+111
+-
+Tendency of specific humidity due to physics
+kg kg**-1
+-
+......................
+112
+-
+Tendency of u component due to physics
+m s**-1
+-
+......................
+113
+-
+Tendency of v component due to physics
+m s**-1
+-
+......................
+206
+-
+Variance of geopotential
+m**4 s**-4
+-
+......................
+207
+-
+Covariance of geopotential/temperature
+m**2 K s**-2
+-
+......................
+208
+-
+Variance of temperature
+K**2
+-
+......................
+209
+-
+Covariance of geopotential/specific humidity
+m**2 s**-2
+-
+......................
+210
+-
+Covariance of temperature/specific humidity
+K
+-
+......................
+211
+-
+Variance of specific humidity
+-
+-
+......................
+212
+-
+Covariance of u component/geopotential
+M**3 s**-3
+-
+......................
+213
+-
+Covariance of u component/temperature
+m s**-1 K
+-
+......................
+214
+-
+Covariance of u component/specific humidity
+m s**-1
+-
+......................
+215
+-
+Variance of u component
+m**2 s**-2
+-
+......................
+216
+-
+Covariance of v component/geopotential
+M**3 s**-3
+-
+......................
+217
+-
+Covariance of v component/temperaure
+m s**-1 K
+-
+......................
+218
+-
+Covariance of v component/specific humidity
+m s**-1
+-
+......................
+219
+-
+Covariance of v component/u component
+m**2 s**-2
+-
+......................
+220
+-
+Variance of v component
+m**2 s**-2
+-
+......................
+221
+-
+Covariance of omega/geopotential
+m**2 Pa s**-3
+-
+......................
+222
+-
+Covariance of omega/temperature
+Pa s**-1 K
+-
+......................
+223
+-
+Covariance of omega/specific humidity
+Pa s**-1
+-
+......................
+224
+-
+Covariance of omega/u component
+m Pa s**-2
+-
+......................
+225
+-
+Covariance of omega/v component
+m Pa s**-2
+-
+......................
+226
+-
+Variance of omega
+Pa**2 s**-2
+-
+......................
+227
+-
+Variance of surface pressure
+Pa**2
+-
+......................
+229
+-
+Variance of relative humidity
+dimensionless
+-
+......................
+230
+-
+Covariance of u component/ozone
+m s**-1
+-
+......................
+231
+-
+Covariance of v component/ozone
+m s**-1
+-
+......................
+232
+-
+Covariance of omega/ozone
+Pa s**-1
+-
+......................
+233
+-
+Variance of ozone
+dimensionless
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_170 b/gribtables/local_table_2_version_170
new file mode 100755
index 0000000..727b680
--- /dev/null
+++ b/gribtables/local_table_2_version_170
@@ -0,0 +1,108 @@
+ECMWF local table 2: Version Number 170 (Seasonal Forecasting).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+-
+......................
+130
+T
+Temperature
+K
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+138
+VO
+Vorticity (relative)
+s**-1
+-
+......................
+140
+SWL1
+Soil wetness level 1
+m
+-
+......................
+141
+SD
+Snow depth
+m of water equivalent
+-
+......................
+149
+TSW
+Total soil moisture
+m
+-
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+-
+......................
+155
+D
+Divergence
+s**-1
+-
+......................
+171
+SWL2
+Soil wetness level 2
+m
+-
+......................
+179
+TTR
+Top thermal radiation
+W m-2
+-
+......................
+184
+SWL3
+Soil wetness level 3
+m
+-
+......................
+201
+MX2T
+Maximum temperature at 2 metres
+K
+Since previous postprocessing
+......................
+202
+MN2T
+Minimum temperature at 2 metres
+K
+Since previous postprocessing
+......................
+228
+TP
+Total precipitation
+m
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_171 b/gribtables/local_table_2_version_171
new file mode 100755
index 0000000..b05b99c
--- /dev/null
+++ b/gribtables/local_table_2_version_171
@@ -0,0 +1,1110 @@
+ECMWF local table 2: Version Number 171 (Anomalies).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+STRFA
+Stream function anomaly
+m**2 s**-1
+-
+......................
+002
+VPOTA
+Velocity potential anomaly
+m**2 s**-1
+-
+......................
+003
+-
+Potential temperature
+K
+-
+......................
+004
+-
+Equivalent potential temperature
+K
+-
+......................
+005
+-
+Saturated equivalent potential temperature
+K
+-
+......................
+011
+-
+U component of divergent wind
+m s**-1
+-
+......................
+012
+-
+V component of divergent wind
+m s**-1
+-
+......................
+013
+-
+U component of rotational wind
+m s**-1
+-
+......................
+014
+-
+V component of rotational wind
+m s**-1
+-
+......................
+021
+-
+Unbalanced component of temperature
+K
+-
+......................
+022
+-
+Unbalanced component of logarithm of surface pressure
+-
+-
+......................
+023
+-
+Unbalanced component of divergence
+s**-1
+-
+......................
+026
+-
+Lake cover
+(0 - 1)
+-
+......................
+027
+-
+Low vegetation cover
+(0 - 1)
+-
+......................
+028
+-
+High vegetation cover
+(0 - 1)
+-
+......................
+029
+-
+Type of low vegetation
+-
+Table index
+......................
+030
+-
+Type of high vegetation
+-
+Table index
+......................
+031
+-
+Sea-ice cover
+(0 - 1)
+-
+......................
+032
+-
+Snow albedo
+(0 - 1)
+-
+......................
+033
+-
+Snow density
+kg m**-3
+-
+......................
+034
+-
+Sea surface temperature
+K
+-
+......................
+035
+-
+Ice surface temperature layer 1
+K
+-
+......................
+036
+-
+Ice surface temperature layer 2
+K
+-
+......................
+037
+-
+Ice surface temperature layer 3
+K
+-
+......................
+038
+-
+Ice surface temperature layer 4
+K
+-
+......................
+039
+-
+Volumetric soil water layer 1
+m**3 m**-3
+-
+......................
+040
+-
+Volumetric soil water layer 2
+m**3 m**-3
+-
+......................
+041
+-
+Volumetric soil water layer 3
+m**3 m**-3
+-
+......................
+042
+-
+Volumetric soil water layer 4
+m**3 m**-3
+-
+......................
+043
+-
+Soil type
+-
+-
+......................
+044
+-
+Snow evaporation
+m of water
+Accumulated field
+......................
+045
+-
+Snowmelt
+m of water
+Accumulated field
+......................
+046
+-
+Solar duration
+s
+-
+......................
+047
+-
+Direct solar radiation
+w m**-2
+Incident on a plane perpendicular to the Sun's direction
+......................
+048
+-
+Magnitude of surface stress
+N m**-2 s
+Accumulated field
+......................
+049
+-
+10 metre wind gust
+m s**-1
+-
+......................
+050
+-
+Large-scale precipitation fraction
+s
+Accumulated field
+......................
+051
+-
+Maximum 2 metre temperature
+K
+During previous 24 hours
+......................
+052
+-
+Minimum 2 metre temperature
+K
+During previous 24 hours
+......................
+053
+-
+Montgomery potential
+m**2 s**-2
+-
+......................
+054
+-
+Pressure
+Pa
+-
+......................
+055
+-
+Mean 2 metre temperature in past 24 hours
+K
+6-hourly intervals
+......................
+056
+-
+Mean 2 metre dewpoint temperature in past 24 hours
+K
+6-hourly intervals
+......................
+057
+-
+Downward UV radiation at the surface
+w m**-2
+Ultra-violet band B
+......................
+058
+-
+Photosynthetically active radiation at the surface
+w m**-2
+-
+......................
+059
+-
+Convective available potential energy
+J kg**-1
+-
+......................
+060
+-
+Potential vorticity
+K m**2 kg**-1 s**-1
+-
+......................
+061
+-
+Total precipitation from observations
+Millimetres*100 + number of stations
+-
+......................
+062
+-
+Observation count
+-
+Count of observations used in calculating value at a gridpoint
+......................
+063
+-
+Start time for skin temperature difference
+s
+Seconds from reference time
+......................
+064
+-
+Finish time for skin temperature difference
+s
+Seconds from reference time
+......................
+065
+-
+Skin temperature difference
+K
+-
+......................
+078
+TCLWA
+Total column liquid water anomaly
+kg m**-2
+-
+......................
+079
+TCIWA
+Total column ice water anomaly
+kg m**-2
+-
+......................
+125
+-
+Vertically integrated total energy
+J m**-2
+Integrated over a number of model levels
+......................
+126
+-
+Generic parameter for sensitive area prediction
+Various
+Originating centre dependent
+......................
+127
+-
+Atmospheric tide
+-
+Not GRIB data
+......................
+128
+-
+Budget values
+-
+Not GRIB data
+......................
+129
+ZA
+Geopotential anomaly
+m**2 s**-2
+At the surface: orography
+......................
+130
+TA
+Temperature anomaly
+K
+-
+......................
+131
+UA
+U velocity anomaly
+m s**-1
+-
+......................
+132
+VA
+V velocity anomaly
+m s**-1
+-
+......................
+133
+-
+Specific humidity
+kg kg**-1
+-
+......................
+134
+-
+Surface pressure
+Pa
+-
+......................
+135
+-
+Vertical velocity
+Pa s**-1
+-
+......................
+136
+-
+Total column water
+kg m**-2
+Liquid + ice + vapour
+......................
+137
+-
+Total column water vapour
+kg m**-2
+-
+......................
+138
+-
+Vorticity (relative)
+s**-1
+-
+......................
+139
+-
+Soil temperature level 1
+K
+-
+......................
+140
+-
+Soil wetness level 1
+m of water
+-
+......................
+141
+-
+Snow depth
+m of water equivalent
+-
+......................
+142
+-
+Stratiform precipitation (Large-scale precipitation)
+m
+Accumulated field
+......................
+143
+-
+Convective precipitation
+m
+Accumulated field
+......................
+144
+-
+Snowfall (convective + stratiform)
+m of water equivalent
+Accumulated field
+......................
+145
+-
+Boundary layer dissipation
+W m**-2 s
+Accumulated field
+......................
+146
+-
+Surface sensible heat flux
+W m**-2 s
+Accumulated field
+......................
+147
+-
+Surface latent heat flux
+W m**-2 s
+Accumulated field
+......................
+148
+-
+Charnock
+-
+-
+......................
+149
+-
+Surface net radiation
+W m**-2 s
+Accumulated field
+......................
+150
+-
+Top net radiation
+-
+-
+......................
+151
+MSLA
+Mean sea level pressure anomaly
+Pa
+-
+......................
+152
+-
+Logarithm of surface pressure
+-
+-
+......................
+153
+-
+Short-wave heating rate
+K
+Accumulated field
+......................
+154
+-
+Long-wave heating rate
+K
+Accumulated field
+......................
+155
+-
+Divergence
+s**-1
+-
+......................
+156
+-
+Height
+m
+Geopotential height
+......................
+157
+-
+Relative humidity
+%
+-
+......................
+158
+-
+Tendency of surface pressure
+Pa s**-1
+-
+......................
+159
+-
+Boundary layer height
+m
+-
+......................
+160
+-
+Standard deviation of orography
+-
+-
+......................
+161
+-
+Anisotropy of sub-gridscale orography
+-
+-
+......................
+162
+-
+Angle of sub-gridscale orography
+rad
+-
+......................
+163
+-
+Slope of sub-gridscale orography
+-
+-
+......................
+164
+TCCA
+Total cloud cover anomaly
+(0 - 1)
+-
+......................
+165
+10UA
+10 metre U wind component anomaly
+m s**-1
+-
+......................
+166
+10VA
+10 metre V wind component anomaly
+m s**-1
+-
+......................
+167
+2TA
+2 metre temperature anomaly
+K
+-
+......................
+168
+-
+2 metre dewpoint temperature
+K
+-
+......................
+169
+-
+Surface solar radiation downwards
+W m**-2 s
+Accumulated field
+......................
+170
+-
+Soil temperature level 2
+K
+-
+......................
+171
+-
+Soil wetness level 2
+m of water
+Scaled: depth surf water layer 7cm deep
+......................
+172
+-
+Land-sea mask
+(0 - 1)
+-
+......................
+173
+-
+Surface roughness
+m
+-
+......................
+174
+-
+Albedo
+(0 - 1)
+-
+......................
+175
+-
+Surface thermal radiation downwards
+W m**-2 s
+Accumulated field
+......................
+176
+-
+Surface solar radiation
+W m**-2 s
+Accumulated field
+......................
+177
+-
+Surface thermal radiation
+W m**-2 s
+Accumulated field
+......................
+178
+-
+Top solar radiation
+W m**-2 s
+Accumulated field
+......................
+179
+-
+Top thermal radiation
+W m**-2 s
+Accumulated field
+......................
+180
+-
+East-West surface stress
+N m**-2 s
+Accumulated field
+......................
+181
+-
+North-South surface stress
+N m**-2 s
+Accumulated field
+......................
+182
+-
+Evaporation
+m of water
+Accumulated field
+......................
+183
+-
+Soil temperature level 3
+K
+-
+......................
+184
+-
+Soil wetness level 3
+m of water
+Scaled depth surf water 7cm deep
+......................
+185
+-
+Convective cloud cover
+(0 - 1)
+-
+......................
+186
+-
+Low cloud cover
+(0 - 1)
+-
+......................
+187
+-
+Medium cloud cover
+(0 - 1)
+-
+......................
+188
+-
+High cloud cover
+(0 - 1)
+-
+......................
+189
+SUNDA
+Sunshine duration anomaly
+s
+Accumulated field
+......................
+190
+-
+East-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+191
+-
+North-South component of sub-gridscale orographic variance
+m**2
+-
+......................
+192
+-
+North-West/South-East component of sub-gridscale orographic variance
+m**2
+-
+......................
+193
+-
+North-East/South-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+194
+-
+Brightness temperature
+K
+-
+......................
+195
+-
+Latitudinal component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+196
+-
+Meridional component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+197
+-
+Gravity wave dissipation
+W m**-2 s
+Accumulated field
+......................
+198
+-
+Skin reservoir content
+m of water
+-
+......................
+199
+-
+Vegetation fraction
+(0 - 1)
+-
+......................
+200
+-
+Variance of sub-gridscale orography
+m**2
+-
+......................
+201
+MX2TA
+Maximum temperature at 2 metres anomaly
+K
+Since previous post-processing
+......................
+202
+MN2TA
+Minimum temperature at 2 metres anomaly
+K
+Since previous post-processing
+......................
+203
+-
+Ozone mass mixing ratio
+kg kg**-1
+-
+......................
+204
+-
+Precipitation analysis weights
+-
+-
+......................
+205
+-
+Runoff
+m
+Accumulated field
+......................
+206
+-
+Total column ozone
+kg m**-2
+-
+......................
+207
+-
+10 metre wind speed
+m s**-1
+-
+......................
+208
+-
+Top net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+209
+-
+Top net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+210
+-
+Surface net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+211
+-
+Surface net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+212
+-
+Solar insolation
+W m**-2
+Accumulated field
+......................
+214
+-
+Diabatic heating by radiation
+K
+-
+......................
+215
+-
+Diabatic heating by vertical diffusion
+K
+-
+......................
+216
+-
+Diabatic heating by cumulus convection
+K
+-
+......................
+217
+-
+Diabatic heating by large-scale condensation
+K
+-
+......................
+218
+-
+Vertical diffusion of zonal wind
+m s**-1
+-
+......................
+219
+-
+Vertical diffusion of meridional wind
+m s**-1
+-
+......................
+220
+-
+East-West gravity wave drag tendency
+m s**-1
+-
+......................
+221
+-
+North-South gravity wave drag tendency
+m s**-1
+-
+......................
+222
+-
+Convective tendency of zonal wind
+m s**-1
+-
+......................
+223
+-
+Convective tendency of meridional wind
+m s**-1
+-
+......................
+224
+-
+Vertical diffusion of humidity
+kg kg**-1
+-
+......................
+225
+-
+Humidity tendency by cumulus convection
+kg kg**-1
+-
+......................
+226
+-
+Humidity tendency by large-scale condensation
+kg kg**-1
+-
+......................
+227
+-
+Change from removal of negative humidity
+kg kg**-1
+-
+......................
+228
+TPA
+Total precipitation anomaly
+m
+-
+......................
+229
+-
+Instantaneous X surface stress
+N m**-2
+-
+......................
+230
+-
+Instantaneous Y surface stress
+N m**-2
+-
+......................
+231
+-
+Instantaneous surface heat flux
+W m**-2
+-
+......................
+232
+-
+Instantaneous moisture flux
+kg m**-2 s
+Evaporation
+......................
+233
+-
+Apparent surface humidity
+kg kg**-1
+-
+......................
+234
+-
+Logarithm of surface roughness length for heat
+-
+-
+......................
+235
+-
+Skin temperature
+K
+-
+......................
+236
+-
+Soil temperature level 4
+K
+-
+......................
+237
+-
+Soil wetness level 4
+m
+Scaled to depth of surface water layer 7cm deep
+......................
+238
+-
+Temperature of snow layer
+K
+-
+......................
+239
+-
+Convective snowfall
+m of water equivalent
+Accumulated field
+......................
+240
+-
+Large-scale snowfall
+m of water equivalent
+Accumulated field
+......................
+241
+-
+Accumulated cloud fraction tendency
+(-1 to 1)
+-
+......................
+242
+-
+Accumulated liquid water tendency
+(-1 to 1)
+-
+......................
+243
+-
+Forecast albedo
+(0 - 1)
+-
+......................
+244
+-
+Forecast surface roughness
+m
+-
+......................
+245
+-
+Forecast logarithm of surface roughness for heat
+-
+-
+......................
+246
+-
+Cloud liquid water content
+kg kg**-1
+-
+......................
+247
+-
+Cloud ice water content
+kg kg**-1
+-
+......................
+248
+-
+Cloud cover
+(0 - 1)
+-
+......................
+249
+-
+Accumulated ice water tendency
+(-1 to 1)
+-
+......................
+250
+-
+Ice age
+(0 - 1)
+0 first-year, 1 multi-year
+......................
+251
+-
+Adiabatic tendency of temperature
+K
+-
+......................
+252
+-
+Adiabatic tendency of humidity
+kg kg**-1
+-
+......................
+253
+-
+Adiabatic tendency of zonal wind
+m s**-1
+-
+......................
+254
+-
+Adiabatic tendency of meridional wind
+m s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_172 b/gribtables/local_table_2_version_172
new file mode 100755
index 0000000..5185885
--- /dev/null
+++ b/gribtables/local_table_2_version_172
@@ -0,0 +1,222 @@
+ECMWF local table 2: Version Number 172 (Rate of accumulation).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+044
+-
+Snow evaporation
+m of water s**-1
+-
+......................
+045
+-
+Snowmelt
+m of water s**-1
+-
+......................
+048
+-
+Magnitude of surface stress
+N m**-2
+-
+......................
+050
+-
+Large-scale precipitation fraction
+-
+-
+......................
+142
+-
+Stratiform precipitation (Large-scale precipitation)
+m s**-1
+-
+......................
+143
+-
+Convective precipitation
+m s**-1
+-
+......................
+144
+-
+Snowfall (convective + stratiform)
+m of water equivalent s**-1
+-
+......................
+145
+-
+Boundary layer dissipation
+W m**-2
+-
+......................
+146
+-
+Surface sensible heat flux
+W m**-2
+-
+......................
+147
+-
+Surface latent heat flux
+W m**-2
+-
+......................
+149
+-
+Surface net radiation
+W m**-2
+-
+......................
+153
+-
+Short-wave heating rate
+K s**-1
+-
+......................
+154
+-
+Long-wave heating rate
+K s**-1
+-
+......................
+169
+-
+Surface solar radiation downwards
+W m**-2
+-
+......................
+175
+-
+Surface thermal radiation downwards
+W m**-2
+-
+......................
+176
+-
+Surface solar radiation
+W m**-2
+-
+......................
+177
+-
+Surface thermal radiation
+W m**-2
+-
+......................
+178
+-
+Top solar radiation
+W m**-2
+-
+......................
+179
+-
+Top thermal radiation
+W m**-2
+-
+......................
+180
+-
+East-West surface stress
+N m**-2
+-
+......................
+181
+-
+North-South surface stress
+N m**-2
+-
+......................
+182
+-
+Evaporation
+m of water s**-1
+-
+......................
+189
+-
+Sunshine duration
+-
+-
+......................
+195
+-
+Latitudinal component of gravity wave stress
+N m**-2
+-
+......................
+196
+-
+Meridional component of gravity wave stress
+N m**-2
+-
+......................
+197
+-
+Gravity wave dissipation
+W m**-2
+-
+......................
+205
+-
+Runoff
+m s**-1
+-
+......................
+208
+-
+Top net solar radiation, clear sky
+W m**-2
+-
+......................
+209
+-
+Top net thermal radiation, clear sky
+W m**-2
+-
+......................
+210
+-
+Surface net solar radiation, clear sky
+W m**-2
+-
+......................
+211
+-
+Surface net thermal radiation, clear sky
+W m**-2
+-
+......................
+212
+-
+Solar insolation
+W m**-2 s**-1
+-
+......................
+228
+-
+Total precipitation
+m s**-1
+-
+......................
+239
+-
+Convective snowfall
+m of water equivalent s**-1
+-
+......................
+240
+-
+Large-scale snowfall
+m of water equivalent s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_173 b/gribtables/local_table_2_version_173
new file mode 100755
index 0000000..8d653ef
--- /dev/null
+++ b/gribtables/local_table_2_version_173
@@ -0,0 +1,222 @@
+ECMWF local table 2: Version Number 173 (Anomalous rate of accumulation).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+044
+-
+Snow evaporation anomaly
+m of water s**-1
+-
+......................
+045
+-
+Snowmelt anomaly
+m of water s**-1
+-
+......................
+048
+-
+Magnitude of surface stress anomaly
+N m**-2
+-
+......................
+050
+-
+Large-scale precipitation fraction anomaly
+-
+-
+......................
+142
+-
+Stratiform precipitation (Large-scale precipitation) anomaly
+m s**-1
+-
+......................
+143
+-
+Convective precipitation anomaly
+m s**-1
+-
+......................
+144
+SFARA
+Snowfall (convective + stratiform) anomalous rate of accumulation
+m of water equivalent s**-1
+-
+......................
+145
+-
+Boundary layer dissipation anomaly
+W m**-2
+-
+......................
+146
+-
+Surface sensible heat flux anomaly
+W m**-2
+-
+......................
+147
+-
+Surface latent heat flux anomaly
+W m**-2
+-
+......................
+149
+-
+Surface net radiation anomaly
+W m**-2
+-
+......................
+153
+-
+Short-wave heating rate anomaly
+K s**-1
+-
+......................
+154
+-
+Long-wave heating rate anomaly
+K s**-1
+-
+......................
+169
+-
+Surface solar radiation downwards anomaly
+W m**-2
+-
+......................
+175
+-
+Surface thermal radiation downwards anomaly
+W m**-2
+-
+......................
+176
+-
+Surface solar radiation anomaly
+W m**-2
+-
+......................
+177
+-
+Surface thermal radiation anomaly
+W m**-2
+-
+......................
+178
+-
+Top solar radiation anomaly
+W m**-2
+-
+......................
+179
+-
+Top thermal radiation anomaly
+W m**-2
+-
+......................
+180
+-
+East-West surface stress anomaly
+N m**-2
+-
+......................
+181
+-
+North-South surface stress anomaly
+N m**-2
+-
+......................
+182
+-
+Evaporation anomaly
+m of water s**-1
+-
+......................
+189
+SUNDARA
+Sunshine duration anomalous rate of accumulation
+dimensionless
+-
+......................
+195
+-
+Latitudinal component of gravity wave stress anomaly
+N m**-2
+-
+......................
+196
+-
+Meridional component of gravity wave stress anomaly
+N m**-2
+-
+......................
+197
+-
+Gravity wave dissipation anomaly
+W m**-2
+-
+......................
+205
+-
+Runoff anomaly
+m s**-1
+-
+......................
+208
+-
+Top net solar radiation, clear sky anomaly
+W m**-2
+-
+......................
+209
+-
+Top net thermal radiation, clear sky anomaly
+W m**-2
+-
+......................
+210
+-
+Surface net solar radiation, clear sky anomaly
+W m**-2
+-
+......................
+211
+-
+Surface net thermal radiation, clear sky anomaly
+W m**-2
+-
+......................
+212
+-
+Solar insolation anomaly
+W m**-2 s**-1
+-
+......................
+228
+TPARA
+Total precipitation anomalous rate of accumulation
+m s**-1
+-
+......................
+239
+-
+Convective snowfall anomaly
+m of water equivalent s**-1
+-
+......................
+240
+-
+Large-scale snowfall anomaly
+m of water equivalent s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_174 b/gribtables/local_table_2_version_174
new file mode 100755
index 0000000..baa79b3
--- /dev/null
+++ b/gribtables/local_table_2_version_174
@@ -0,0 +1,222 @@
+ECMWF local table 2: Version Number 174 (Non-ECMWF seasonal forecast model).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+006
+-
+Total soil moisture
+m
+The depth over which it is integrated varies depending on soil type
+......................
+008
+SRO
+Surface runoff
+kg m**-2
+Accumulated field
+......................
+009
+SSRO
+Sub-surface runoff
+kg m**-2
+Accumulated field
+......................
+031
+-
+Fraction of sea-ice in sea
+(0 - 1)
+-
+......................
+034
+-
+Open-sea surface temperature
+K
+-
+......................
+039
+-
+Volumetric soil water layer 1
+m**3 m**-3
+0 - 10cm
+......................
+040
+-
+Volumetric soil water layer 2
+m**3 m**-3
+10 - 35cm
+......................
+041
+-
+Volumetric soil water layer 3
+m**3 m**-3
+35 - 100cm
+......................
+042
+-
+Volumetric soil water layer 4
+m**3 m**-3
+100 - 300cm
+......................
+049
+-
+10 metre wind gust over last 24 hours
+m s**-1
+-
+......................
+055
+-
+1.5m temperature - mean over last 24 hours
+K
+-
+......................
+083
+-
+Net primary productivity
+kg C m**-2 s**-1
+-
+......................
+085
+-
+10m U wind over land
+m s**-1
+-
+......................
+086
+-
+10m V wind over land
+m s**-1
+-
+......................
+087
+-
+1.5m temperature over land
+K
+-
+......................
+088
+-
+1.5m dewpoint temperature over land
+K
+-
+......................
+089
+-
+Top incoming solar radiation
+W m**-2 s
+Accumulated
+......................
+090
+-
+Top outgoing solar radiation
+W m**-2 s
+Accumulated
+......................
+094
+-
+Mean sea surface temperature
+K
+-
+......................
+095
+-
+1.5m specific humidity
+kg kg**-1
+-
+......................
+098
+-
+Sea-ice thickness
+m
+-
+......................
+099
+-
+Liquid water potential temperature
+K
+-
+......................
+110
+-
+Ocean ice concentration
+(0 - 1)
+-
+......................
+111
+-
+Ocean mean ice depth
+m
+-
+......................
+139
+-
+Soil temperature layer 1
+K
+0 - 10cm
+......................
+164
+-
+Average potential temperature in upper 293.4m
+degrees C
+-
+......................
+167
+-
+1.5m temperature
+K
+-
+......................
+168
+-
+1.5m dewpoint temperature
+K
+-
+......................
+170
+-
+Soil temperature layer 2
+K
+10 - 35cm
+......................
+172
+-
+Fractional land mask
+(0 - 1)
+-
+......................
+175
+-
+Average salinity in upper 293.4m
+psu
+-
+......................
+183
+-
+Soil temperature layer 3
+K
+35 - 100cm
+......................
+201
+-
+1.5m temperature - maximum over last 24 hours
+K
+-
+......................
+202
+-
+1.5m temperature - minimum over last 24 hours
+K
+-
+......................
+236
+-
+Soil temperature layer 4
+K
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_175 b/gribtables/local_table_2_version_175
new file mode 100755
index 0000000..eb9c120
--- /dev/null
+++ b/gribtables/local_table_2_version_175
@@ -0,0 +1,186 @@
+ECMWF local table 2: Version Number 175 (Non-ECMWF seasonal forecast model - anomalies).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+006
+-
+Total soil moisture
+m
+The depth over which it is integrated varies depending on soil type
+......................
+031
+-
+Fraction of sea-ice in sea
+(0 - 1)
+-
+......................
+034
+-
+Open-sea surface temperature
+K
+-
+......................
+039
+-
+Volumetric soil water layer 1
+m**3 m**-3
+0 - 10cm
+......................
+040
+-
+Volumetric soil water layer 2
+m**3 m**-3
+10 - 35cm
+......................
+041
+-
+Volumetric soil water layer 3
+m**3 m**-3
+35 - 100cm
+......................
+042
+-
+Volumetric soil water layer 4
+m**3 m**-3
+100 - 300cm
+......................
+049
+-
+10m wind gust over last 24 hours
+m s**-1
+-
+......................
+055
+-
+1.5m temperature - mean over last 24 hours
+K
+-
+......................
+083
+-
+Net primary productivity
+kg C m**-2 s**-1
+-
+......................
+085
+-
+10m U wind over land
+m s**-1
+-
+......................
+086
+-
+10m V wind over land
+m s**-1
+-
+......................
+087
+-
+1.5m temperature over land
+K
+-
+......................
+088
+-
+1.5m dewpoint temperature over land
+K
+-
+......................
+089
+-
+Top incoming solar radiation
+W m**-2 s
+Accumulated
+......................
+090
+-
+Top outgoing solar radiation
+W m**-2 s
+Accumulated
+......................
+110
+-
+Ocean ice concentration
+(0 - 1)
+-
+......................
+111
+-
+Ocean mean ice depth
+m
+-
+......................
+139
+-
+Soil temperature layer 1
+K
+0 - 10cm
+......................
+164
+-
+Average potential temperature in upper 293.4m
+degrees C
+-
+......................
+167
+-
+1.5m temperature
+K
+-
+......................
+168
+-
+1.5m dewpoint temperature
+K
+-
+......................
+170
+-
+Soil temperature layer 2
+K
+10 - 35cm
+......................
+172
+-
+Fractional land mask
+(0 - 1)
+-
+......................
+175
+-
+Average salinity in upper 293.4m
+psu
+-
+......................
+183
+-
+Soil temperature layer 3
+K
+35 - 100cm
+......................
+201
+-
+1.5m temperature - maximum over last 24 hours
+K
+-
+......................
+202
+-
+1.5m temperature - minimum over last 24 hours
+K
+-
+......................
+236
+-
+Soil temperature layer 4
+K
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_180 b/gribtables/local_table_2_version_180
new file mode 100755
index 0000000..5eec50c
--- /dev/null
+++ b/gribtables/local_table_2_version_180
@@ -0,0 +1,198 @@
+ECMWF local table 2: Version Number 180 (ECSN - HIRETYCS).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+At the surface=orography
+......................
+130
+T
+Temperature
+K
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+133
+Q
+Specific humidity
+kg kg**-1
+-
+......................
+134
+SP
+Surface pressure
+Pa
+-
+......................
+137
+TCWV
+Total column water vapour
+kg m**-2
+-
+......................
+138
+VO
+Vorticity (relative)
+s**-1
+-
+......................
+141
+SD
+Snow depth
+m of water equivalent
+-
+......................
+142
+LSP
+Large-scale precipitation
+m
+-
+......................
+143
+CP
+Convective precipitation
+m
+-
+......................
+144
+SF
+Snowfall
+m of water equivalent
+-
+......................
+146
+SSHF
+Surface sensible heat flux
+W m**-2 s
+-
+......................
+147
+SLHF
+Surface latent heat flux
+W m**-2 s
+-
+......................
+149
+TSW
+Total soil wetness
+m
+-
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+-
+......................
+155
+D
+Divergence
+s**-1
+-
+......................
+164
+TCC
+Total cloud cover
+(0 - 1)
+-
+......................
+165
+10U
+10 metre U wind component
+m s**-1
+-
+......................
+166
+10V
+10 metre V wind component
+m s**-1
+-
+......................
+167
+2T
+2 metre temperature
+K
+-
+......................
+168
+2D
+2 metre dewpoint temperature
+K
+-
+......................
+172
+LSM
+Land-sea mask
+(0 - 1)
+-
+......................
+176
+SSR
+Surface solar radiation
+J m**-2 s
+Net
+......................
+177
+STR
+Surface thermal radiation
+J m**-2 s
+Net
+......................
+178
+TSR
+Top solar radiation
+J m**-2 s
+Net
+......................
+179
+TTR
+Top thermal radiation
+J m**-2 s
+Net
+......................
+180
+EWSS
+East-West surface stress
+N m**-2 s
+-
+......................
+181
+NSSS
+North-South surface stress
+N m**-2 s
+-
+......................
+182
+E
+Evaporation
+m of water
+Surface
+......................
+205
+RO
+Runoff
+m
+Total
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_190 b/gribtables/local_table_2_version_190
new file mode 100755
index 0000000..f228338
--- /dev/null
+++ b/gribtables/local_table_2_version_190
@@ -0,0 +1,198 @@
+ECMWF local table 2: Version Number 190 (Seasonal to interannual ensemble forecasts).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+Instantaneous.Not geopotential height. At surface=orography(?).
+......................
+130
+T
+Temperature
+K
+Instantaneous
+......................
+131
+U
+U velocity
+m s**-1
+Instantaneous
+......................
+132
+V
+V velocity
+m s**-1
+Instantaneous
+......................
+133
+Q
+Specific humidity
+kg kg**-1
+Instantaneous
+......................
+139
+STL1
+Soil temperature level 1
+K
+Surface temperature over continents and Sea Surface Temperature over the oceans
+......................
+141
+SD
+Snow depth
+m of water
+Instantaneous
+......................
+146
+SSHF
+Surface sensible heat flux
+W m**-2 s
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+147
+SLHF
+Surface latent heat flux
+W m**-2 s
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+Instantaneous
+......................
+164
+TCC
+Total cloud cover
+(0 - 1)
+Instantaneous
+......................
+165
+10U
+10 metre U wind component
+m s**-1
+Instantaneous
+......................
+166
+10V
+10 metre V wind component
+m s**-1
+Instantaneous
+......................
+167
+2T
+2 metre temperature
+K
+Instantaneous
+......................
+168
+2D
+2 metre dewpoint temperature
+K
+Instantaneous
+......................
+169
+SSRD
+Downward surface solar radiation
+W m**-2 s (W m**-2 for monthly means)
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+170
+CAP
+Field capacity
+(0 - 1)
+-
+......................
+171
+WILT
+Wilting point
+(0 - 1)
+-
+......................
+172
+LSM
+Land-sea mask
+(0 - 1)
+-
+......................
+173
+SR
+Roughness length
+(0 - 1)
+-
+......................
+174
+AL
+Albedo
+(0 - 1)
+-
+......................
+175
+STRD
+Downward surface long wave radiation
+W m**-2 s (W m**-2 for monthly means)
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+176
+SSR
+Surface net solar radiation
+W m**-2 s (W m**-2 for monthly means)
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+177
+STR
+Surface net long wave radiation
+W m**-2 s (W m**-2 for monthly means)
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+178
+TSR
+Top net solar radiation
+W m**-2 s (W m**-2 for monthly means)
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+179
+TTR
+Top net long wave radiation
+W m**-2 s (W m**-2 for monthly means)
+Daily accumulation. Converted to flux in monthly means (units: W m**-2)
+......................
+182
+E
+Evaporation
+m (m s**-1 for monthly means)
+Daily accumulation. Converted to flux in monthly means with units: m s**-1
+......................
+201
+MX2T
+Maximum 2 metre temperature
+K
+Over a 24 hour period computed using instantaneous values at 06, 12, 18 and 24 GMT
+......................
+202
+MN2T
+Minimum 2 metre temperature
+K
+Over a 24 hour period computed using instantaneous values at  06, 12, 18 and 24 GMT
+......................
+228
+TP
+Total precipitation
+m (m s**-1 for monthly means)
+Daily accumulation. Converted to flux in monthly means with units: m s**-1
+......................
+229
+TSM
+Total soil moisture
+m**3 m**-3
+The depth over which it is integrated varies depending on the atmospheric model
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_200 b/gribtables/local_table_2_version_200
new file mode 100755
index 0000000..4e38579
--- /dev/null
+++ b/gribtables/local_table_2_version_200
@@ -0,0 +1,1164 @@
+ECMWF local table 2: Version Number 200 (Differences between first guess and analysis).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+STRF
+Stream function
+m**2 s**-1
+-
+......................
+002
+VPOT
+Velocity potential
+m**2 s**-1
+-
+......................
+003
+PT
+Potential temperature
+K
+-
+......................
+004
+EQPT
+Equivalent potential temperature
+K
+-
+......................
+005
+SEPT
+Saturated equivalent potential temperature
+K
+-
+......................
+011
+UDVW
+U component of divergent wind
+m s**-1
+-
+......................
+012
+VDVW
+V component of divergent wind
+m s**-1
+-
+......................
+013
+URTW
+U component of rotational wind
+m s**-1
+-
+......................
+014
+VRTW
+V component of rotational wind
+m s**-1
+-
+......................
+021
+UCTP
+Unbalanced component of temperature
+K
+-
+......................
+022
+UCLN
+Unbalanced component of logarithm of surface pressure
+-
+-
+......................
+023
+UCDV
+Unbalanced component of divergence
+s**-1
+-
+......................
+026
+CL
+Lake cover
+(0 - 1)
+-
+......................
+027
+CVL
+Low vegetation cover
+(0 - 1)
+-
+......................
+028
+CVH
+High vegetation cover
+(0 - 1)
+-
+......................
+029
+TVL
+Type of low vegetation
+-
+Table index
+......................
+030
+TVH
+Type of high vegetation
+-
+Table index
+......................
+031
+CI
+Sea-ice cover
+(0 - 1)
+-
+......................
+032
+ASN
+Snow albedo
+(0 - 1)
+-
+......................
+033
+RSN
+Snow density
+kg m**-3
+-
+......................
+034
+SSTK
+Sea surface temperature
+K
+-
+......................
+035
+ISTL1
+Ice surface temperature layer 1
+K
+-
+......................
+036
+ISTL2
+Ice surface temperature layer 2
+K
+-
+......................
+037
+ISTL3
+Ice surface temperature layer 3
+K
+-
+......................
+038
+ISTL4
+Ice surface temperature layer 4
+K
+-
+......................
+039
+SWVL1
+Volumetric soil water layer 1
+m**3 m**-3
+-
+......................
+040
+SWVL2
+Volumetric soil water layer 2
+m**3 m**-3
+-
+......................
+041
+SWVL3
+Volumetric soil water layer 3
+m**3 m**-3
+-
+......................
+042
+SWVL4
+Volumetric soil water layer 4
+m**3 m**-3
+-
+......................
+043
+SLT
+Soil type
+-
+-
+......................
+044
+ES
+Snow evaporation
+m of water
+Accumulated field
+......................
+045
+SMLT
+Snowmelt
+m of water
+Accumulated field
+......................
+046
+SDUR
+Solar duration
+s
+-
+......................
+047
+DSRP
+Direct solar radiation
+w m**-2
+Incident on a plane perpendicular to the Sun's direction
+......................
+048
+MAGSS
+Magnitude of surface stress
+N m**-2 s
+Accumulated field
+......................
+049
+10FG
+10 metre wind gust
+m s**-1
+-
+......................
+050
+LSPF
+Large-scale precipitation fraction
+s
+Accumulated field
+......................
+051
+MX2T24
+Maximum 2 metre temperature
+K
+During previous 24 hours
+......................
+052
+MN2T24
+Minimum 2 metre temperature
+K
+During previous 24 hours
+......................
+053
+MONT
+Montgomery potential
+m**2 s**-2
+-
+......................
+054
+PRES
+Pressure
+Pa
+-
+......................
+055
+MEAN2T24
+Mean 2 metre temperature in past 24 hours
+K
+6-hourly intervals
+......................
+056
+MN2D24
+Mean 2 metre dewpoint temperature in past 24 hours
+K
+6-hourly intervals
+......................
+057
+UVB
+Downward UV radiation at the surface
+w m**-2 s
+Ultra-violet band B. Accumulated field.
+......................
+058
+PAR
+Photosynthetically active radiation at the surface
+w m**-2 s
+Accumulated field.
+......................
+059
+CAPE
+Convective available potential energy
+J kg**-1
+-
+......................
+060
+PV
+Potential vorticity
+K m**2 kg**-1 s**-1
+-
+......................
+061
+TPO
+Total precipitation from observations
+Millimetres*100 + number of stations
+-
+......................
+062
+OBCT
+Observation count
+-
+Count of observations used in calculating value at a gridpoint
+......................
+063
+-
+Start time for skin temperature difference
+s
+Seconds from reference time
+......................
+064
+-
+Finish time for skin temperature difference
+s
+Seconds from reference time
+......................
+065
+-
+Skin temperature difference
+K
+-
+......................
+066
+-
+Leaf area index, low vegetation
+m**2 / m**2
+-
+......................
+067
+-
+Leaf area index, high vegetation
+m**2 / m**2
+-
+......................
+068
+-
+Minimum stomatal resistance, low vegetation
+s m**-1
+-
+......................
+069
+-
+Minimum stomatal resistance, high vegetation
+s m**-1
+-
+......................
+070
+-
+Biome cover, low vegetation
+(0 - 1)
+-
+......................
+071
+-
+Biome cover, high vegetation
+(0 - 1)
+-
+......................
+078
+-
+Total column liquid water
+kg m**-2
+-
+......................
+079
+-
+Total column ice water
+kg m**-2
+-
+......................
+121
+MX2T6
+Maximum temperature at 2 metres
+K
+During previous 6 hours
+......................
+122
+MN2T6
+Minimum temperature at 2 metres
+K
+During previous 6 hours
+......................
+123
+10FG6
+10 metre wind gust in the past 6 hours
+m s**-1
+During previous 6 hours
+......................
+125
+-
+Vertically integrated total energy
+J m**-2
+Integrated over a number of model levels
+......................
+126
+-
+Generic parameter for sensitive area prediction
+Various
+Originating centre dependent
+......................
+127
+AT
+Atmospheric tide
+-
+Not GRIB data (pseudo-GRIB)
+......................
+128
+BV
+Budget values
+-
+Not GRIB data (pseudo-GRIB)
+......................
+129
+Z
+Geopotential
+m**2 s**-2
+At the surface: orography
+......................
+130
+T
+Temperature
+K
+-
+......................
+131
+U
+U velocity
+m s**-1
+-
+......................
+132
+V
+V velocity
+m s**-1
+-
+......................
+133
+Q
+Specific humidity
+kg kg**-1
+-
+......................
+134
+SP
+Surface pressure
+Pa
+-
+......................
+135
+W
+Vertical velocity
+Pa s**-1
+-
+......................
+136
+TCW
+Total column water
+kg m**-2
+Liquid + ice + vapour
+......................
+137
+TCWV
+Total column water vapour
+kg m**-2
+-
+......................
+138
+VO
+Vorticity (relative)
+s**-1
+-
+......................
+139
+STL1
+Soil temperature level 1
+K
+Soil temperature (ST) before 19930804
+......................
+140
+SWL1
+Soil wetness level 1
+m of water
+Surface soil wetness (SSW) before 19930804
+......................
+141
+SD
+Snow depth
+m of water equivalent
+-
+......................
+142
+LSP
+Stratiform precipitation (Large-scale precipitation)
+m
+Accumulated field
+......................
+143
+CP
+Convective precipitation
+m
+Accumulated field
+......................
+144
+SF
+Snowfall (convective + stratiform)
+m of water equivalent
+Accumulated field
+......................
+145
+BLD
+Boundary layer dissipation
+W m**-2 s
+Accumulated field
+......................
+146
+SSHF
+Surface sensible heat flux
+W m**-2 s
+Accumulated field
+......................
+147
+SLHF
+Surface latent heat flux
+W m**-2 s
+Accumulated field
+......................
+148
+CHNK
+Charnock
+-
+Surface stress (SS) before 19980519
+......................
+149
+SNR
+Surface net radiation
+W m**-2 s
+Accumulated field
+......................
+150
+TNR
+Top net radiation
+-
+-
+......................
+151
+MSL
+Mean sea level pressure
+Pa
+-
+......................
+152
+LNSP
+Logarithm of surface pressure
+-
+-
+......................
+153
+SWHR
+Short-wave heating rate
+K
+Accumulated field
+......................
+154
+LWHR
+Long-wave heating rate
+K
+Accumulated field
+......................
+155
+D
+Divergence
+s**-1
+-
+......................
+156
+GH
+Height
+m
+Geopotential height
+......................
+157
+R
+Relative humidity
+%
+-
+......................
+158
+TSP
+Tendency of surface pressure
+Pa s**-1
+-
+......................
+159
+BLH
+Boundary layer height
+m
+-
+......................
+160
+SDOR
+Standard deviation of orography
+-
+-
+......................
+161
+ISOR
+Anisotropy of sub-gridscale orography
+-
+-
+......................
+162
+ANOR
+Angle of sub-gridscale orography
+rad
+-
+......................
+163
+SLOR
+Slope of sub-gridscale orography
+-
+-
+......................
+164
+TCC
+Total cloud cover
+(0 - 1)
+-
+......................
+165
+10U
+10 metre U wind component
+m s**-1
+-
+......................
+166
+10V
+10 metre V wind component
+m s**-1
+-
+......................
+167
+2T
+2 metre temperature
+K
+-
+......................
+168
+2D
+2 metre dewpoint temperature
+K
+-
+......................
+169
+SSRD
+Surface solar radiation downwards
+W m**-2 s
+Accumulated field
+......................
+170
+STL2
+Soil temperature level 2
+K
+Deep soil temperature (DST) before 19930804
+......................
+171
+SWL2
+Soil wetness level 2
+m of water
+Deep soil wetness (DSW) before 19930804. Scaled: depth surf water layer 7cm deep
+......................
+172
+LSM
+Land-sea mask
+(0 - 1)
+-
+......................
+173
+SR
+Surface roughness
+m
+-
+......................
+174
+AL
+Albedo
+(0 - 1)
+-
+......................
+175
+STRD
+Surface thermal radiation downwards
+W m**-2 s
+Accumulated field
+......................
+176
+SSR
+Surface solar radiation
+W m**-2 s
+Accumulated field
+......................
+177
+STR
+Surface thermal radiation
+W m**-2 s
+Accumulated field
+......................
+178
+TSR
+Top solar radiation
+W m**-2 s
+Accumulated field
+......................
+179
+TTR
+Top thermal radiation
+W m**-2 s
+Accumulated field
+......................
+180
+EWSS
+East-West surface stress
+N m**-2 s
+Accumulated field
+......................
+181
+NSSS
+North-South surface stress
+N m**-2 s
+Accumulated field
+......................
+182
+E
+Evaporation
+m of water
+Accumulated field
+......................
+183
+STL3
+Soil temperature level 3
+K
+Climatological deep soil temperature (CDST) before 19930804
+......................
+184
+SWL3
+Soil wetness level 3
+m of water
+Climatological deep soil wetness (CDSW) before 19930804.Scaled depth surf water 7cm deep
+......................
+185
+CCC
+Convective cloud cover
+(0 - 1)
+-
+......................
+186
+LCC
+Low cloud cover
+(0 - 1)
+-
+......................
+187
+MCC
+Medium cloud cover
+(0 - 1)
+-
+......................
+188
+HCC
+High cloud cover
+(0 - 1)
+-
+......................
+189
+SUND
+Sunshine duration
+s
+Accumulated field
+......................
+190
+EWOV
+East-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+191
+NSOV
+North-South component of sub-gridscale orographic variance
+m**2
+-
+......................
+192
+NWOV
+North-West/South-East component of sub-gridscale orographic variance
+m**2
+-
+......................
+193
+NEOV
+North-East/South-West component of sub-gridscale orographic variance
+m**2
+-
+......................
+194
+BTMP
+Brightness temperature
+K
+-
+......................
+195
+LGWS
+Latitudinal component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+196
+MGWS
+Meridional component of gravity wave stress
+N m**-2 s
+Accumulated field
+......................
+197
+GWD
+Gravity wave dissipation
+W m**-2 s
+Accumulated field
+......................
+198
+SRC
+Skin reservoir content
+m of water
+-
+......................
+199
+VEG
+Vegetation fraction
+(0 - 1)
+-
+......................
+200
+VSO
+Variance of sub-gridscale orography
+m**2
+-
+......................
+201
+MX2T
+Maximum temperature at 2 metres since previous post-processing
+K
+-
+......................
+202
+MN2T
+Minimum temperature at 2 metres since previous post-processing
+K
+-
+......................
+203
+O3
+Ozone mass mixing ratio
+kg kg**-1
+-
+......................
+204
+PAW
+Precipitation analysis weights
+-
+-
+......................
+205
+RO
+Runoff
+m
+Accumulated field
+......................
+206
+TCO3
+Total column ozone
+kg m**-2
+Before 20010612 was in Dobsons. 1 Dobson = 2.1415E-5 kg m**-2
+......................
+207
+10SI
+10 metre wind speed
+m s**-1
+-
+......................
+208
+TSRC
+Top net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+209
+TTRC
+Top net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+210
+SSRC
+Surface net solar radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+211
+STRC
+Surface net thermal radiation, clear sky
+W m**-2 s
+Accumulated field
+......................
+212
+TISR
+TOA incident solar radiation
+W m**-2 s
+Accumulated field
+......................
+214
+DHR
+Diabatic heating by radiation
+K
+-
+......................
+215
+DHVD
+Diabatic heating by vertical diffusion
+K
+-
+......................
+216
+DHCC
+Diabatic heating by cumulus convection
+K
+-
+......................
+217
+DHLC
+Diabatic heating large-scale condensation
+K
+-
+......................
+218
+VDZW
+Vertical diffusion of zonal wind
+m s**-1
+-
+......................
+219
+VDMW
+Vertical diffusion of meridional wind
+m s**-1
+-
+......................
+220
+EWGD
+East-West gravity wave drag tendency
+m s**-1
+-
+......................
+221
+NSGD
+North-South gravity wave drag tendency
+m s**-1
+-
+......................
+222
+CTZW
+Convective tendency of zonal wind
+m s**-1
+-
+......................
+223
+CTMW
+Convective tendency of meridional wind
+m s**-1
+-
+......................
+224
+VDH
+Vertical diffusion of humidity
+kg kg**-1
+-
+......................
+225
+HTCC
+Humidity tendency by cumulus convection
+kg kg**-1
+-
+......................
+226
+HTLC
+Humidity tendency by large-scale condensation
+kg kg**-1
+-
+......................
+227
+CRNH
+Change from removal of negative humidity
+kg kg**-1
+-
+......................
+228
+TP
+Total precipitation
+m
+Accumulated
+......................
+229
+IEWS
+Instantaneous X surface stress
+N m**-2
+-
+......................
+230
+INSS
+Instantaneous Y surface stress
+N m**-2
+-
+......................
+231
+ISHF
+Instantaneous surface heat flux
+W m**-2
+-
+......................
+232
+IE
+Instantaneous moisture flux
+kg m**-2 s
+Evaporation
+......................
+233
+ASQ
+Apparent surface humidity
+kg kg**-1
+-
+......................
+234
+LSRH
+Logarithm of surface roughness length for heat
+-
+-
+......................
+235
+SKT
+Skin temperature
+K
+-
+......................
+236
+STL4
+Soil temperature level 4
+K
+-
+......................
+237
+SWL4
+Soil wetness level 4
+m
+Scaled to depth of surface water layer 7cm deep
+......................
+238
+TSN
+Temperature of snow layer
+K
+-
+......................
+239
+CSF
+Convective snowfall
+m of water equivalent
+Accumulated field
+......................
+240
+LSF
+Large-scale snowfall
+m of water equivalent
+Accumulated field
+......................
+241
+ACF
+Accumulated cloud fraction tendency
+(-1 to 1)
+-
+......................
+242
+ALW
+Accumulated liquid water tendency
+(-1 to 1)
+-
+......................
+243
+FAL
+Forecast albedo
+(0 - 1)
+-
+......................
+244
+FSR
+Forecast surface roughness
+m
+-
+......................
+245
+FLSR
+Forecast logarithm of surface roughness for heat
+-
+-
+......................
+246
+CLWC
+Cloud liquid water content
+kg kg**-1
+-
+......................
+247
+CIWC
+Cloud ice water content
+kg kg**-1
+-
+......................
+248
+CC
+Cloud cover
+(0 - 1)
+-
+......................
+249
+AIW
+Accumulated ice water tendency
+(-1 to 1)
+-
+......................
+250
+ICE
+Ice age
+(0 - 1)
+0 first-year, 1 multi-year
+......................
+251
+ATTE
+Adiabatic tendency of temperature
+K
+-
+......................
+252
+ATHE
+Adiabatic tendency of humidity
+kg kg**-1
+-
+......................
+253
+ATZE
+Adiabatic tendency of zonal wind
+m s**-1
+-
+......................
+254
+ATMW
+Adiabatic tendency of meridional wind
+m s**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_201 b/gribtables/local_table_2_version_201
new file mode 100755
index 0000000..2649eac
--- /dev/null
+++ b/gribtables/local_table_2_version_201
@@ -0,0 +1,468 @@
+ECMWF local table 2: Version Number 201 (COSMO).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+-
+downward shortwave radiant flux density
+W m**-2
+-
+......................
+002
+-
+upward shortwave radiant flux density
+W m**-2
+-
+......................
+003
+-
+downward longwave radiant flux density
+W m**-2
+-
+......................
+004
+-
+upward longwave radiant flux density
+W m**-2
+-
+......................
+005
+APAB_S
+downwd photosynthetic active radiant flux density
+W m**-2
+-
+......................
+006
+-
+net shortwave flux
+W m**-2
+-
+......................
+007
+-
+net longwave flux
+W m**-2
+-
+......................
+008
+-
+total net radiative flux density
+W m**-2
+-
+......................
+009
+-
+downw shortw radiant flux density, cloudfree part
+W m**-2
+-
+......................
+010
+-
+upw shortw radiant flux density, cloudy part
+W m**-2
+-
+......................
+011
+-
+downw longw radiant flux density, cloudfree part
+W m**-2
+-
+......................
+012
+-
+upw longw radiant flux density, cloudy part
+W m**-2
+-
+......................
+013
+SOHR_RAD
+shortwave radiative heating rate
+K s**-1
+-
+......................
+014
+THHR_RAD
+longwave radiative heating rate
+K s**-1
+-
+......................
+015
+-
+total radiative heating rate
+W m**-2
+-
+......................
+016
+-
+soil heat flux, surface
+W m**-2
+-
+......................
+017
+-
+soil heat flux, bottom of layer
+W m**-2
+-
+......................
+029
+CLC
+fractional cloud cover
+(0-1)
+-
+......................
+030
+-
+cloud cover, grid scale
+(0-1)
+-
+......................
+031
+QC
+specific cloud water content
+kg kg**-1
+-
+......................
+032
+-
+cloud water content, grid scale, vert integrated
+kg m**-2
+-
+......................
+033
+QI
+specific cloud ice content, grid scale
+kg kg**-1
+-
+......................
+034
+-
+cloud ice content, grid scale, vert integrated
+kg m**-2
+-
+......................
+035
+-
+specific rainwater content, grid scale
+kg kg**-1
+-
+......................
+036
+-
+specific snow content, grid scale
+kg kg**-1
+-
+......................
+037
+-
+specific rainwater content, gs, vert. integrated
+kg m**-2
+-
+......................
+038
+-
+specific snow content, gs, vert. integrated
+kg m**-2
+-
+......................
+041
+TWATER
+total column water
+kg m**-2
+-
+......................
+042
+-
+vert. integral of divergence of tot. water content
+kg m**-2
+-
+......................
+050
+CH_CM_CL
+cloud covers CH_CM_CL (000...888)
+(0-1)
+-
+......................
+051
+-
+cloud cover CH (0..8)
+(0-1)
+-
+......................
+052
+-
+cloud cover CM (0..8)
+(0-1)
+-
+......................
+053
+-
+cloud cover CL (0..8)
+(0-1)
+-
+......................
+054
+-
+total cloud cover (0..8)
+(0-1)
+-
+......................
+055
+-
+fog (0..8)
+(0-1)
+-
+......................
+056
+-
+fog
+(0-1)
+-
+......................
+060
+-
+cloud cover, convective cirrus
+(0-1)
+-
+......................
+061
+-
+specific cloud water content, convective clouds
+kg kg**-1
+-
+......................
+062
+-
+cloud water content, conv clouds, vert integrated
+kg m**-2
+-
+......................
+063
+-
+specific cloud ice content, convective clouds
+kg kg**-1
+-
+......................
+064
+-
+cloud ice content, conv clouds, vert integrated
+kg m**-2
+-
+......................
+065
+-
+convective mass flux
+kg s**-1 m**-2
+-
+......................
+066
+-
+updraft velocity, convection
+m s**-1
+-
+......................
+067
+-
+entrainment parameter, convection
+m**-1
+-
+......................
+068
+HBAS_CON
+cloud base, convective clouds (above msl)
+m
+-
+......................
+069
+HTOP_CON
+cloud top, convective clouds (above msl)
+m
+-
+......................
+070
+-
+convective layers (00...77)  (BKE)
+(0-1)
+-
+......................
+071
+-
+KO-index
+(1)
+-
+......................
+072
+BAS_CON
+convection base index
+(1)
+-
+......................
+073
+TOP_CON
+convection top index
+(1)
+-
+......................
+074
+DT_CON
+convective temperature tendency
+K s**-1
+-
+......................
+075
+DQV_CON
+convective tendency of specific humidity
+s**-1
+-
+......................
+076
+-
+convective tendency of total heat
+J kg**-1 s**-1
+-
+......................
+077
+-
+convective tendency of total water
+s**-1
+-
+......................
+078
+DU_CON
+convective momentum tendency (X-component)
+m s**-2
+-
+......................
+079
+DV_CON
+convective momentum tendency (Y-component)
+m s**-2
+-
+......................
+080
+-
+convective vorticity tendency
+s**-2
+-
+......................
+081
+-
+convective divergence tendency
+s**-2
+-
+......................
+082
+HTOP_DC
+top of dry convection (above msl)
+m
+-
+......................
+083
+-
+dry convection top index
+(1)
+-
+......................
+084
+HZEROCL
+height of 0 degree Celsius isotherm above msl
+m
+-
+......................
+085
+SNOWLMT
+height of snow-fall limit
+m
+-
+......................
+099
+QRS_GSP
+spec. content of precip. particles
+kg kg**-1
+-
+......................
+100
+PRR_GSP
+surface precipitation rate, rain, grid scale
+kg s**-1 m**-2
+-
+......................
+101
+PRS_GSP
+surface precipitation rate, snow, grid scale
+kg s**-1 m**-2
+-
+......................
+102
+RAIN_GSP
+surface precipitation amount, rain, grid scale
+kg m**-2
+-
+......................
+111
+PRR_CON
+surface precipitation rate, rain, convective
+kg s**-1 m**-2
+-
+......................
+112
+PRS_CON
+surface precipitation rate, snow, convective
+kg s**-1 m**-2
+-
+......................
+113
+RAIN_CON
+surface precipitation amount, rain, convective
+kg m**-2
+-
+......................
+139
+PP
+deviation of pressure from reference value
+Pa
+-
+......................
+150
+-
+coefficient of horizontal diffusion
+m**2 s**-1
+-
+......................
+187
+VMAX_10M
+maximum wind velocity
+m s**-1
+-
+......................
+200
+W_I
+water content of interception store
+kg m**-2
+-
+......................
+203
+T_SNOW
+snow temperature
+K
+-
+......................
+215
+T_ICE
+ice surface temperature
+K
+-
+......................
+241
+CAPE_CON
+convective available potential energy
+J kg**-1
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_210 b/gribtables/local_table_2_version_210
new file mode 100755
index 0000000..5c093f1
--- /dev/null
+++ b/gribtables/local_table_2_version_210
@@ -0,0 +1,672 @@
+ECMWF local table 2: Version Number 210 (GEMS).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+AERMR01
+Aerosol type 1 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+002
+AERMR02
+Aerosol type 2 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+003
+AERMR03
+Aerosol type 3 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+004
+AERMR04
+Aerosol type 4 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+005
+AERMR05
+Aerosol type 5 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+006
+AERMR06
+Aerosol type 6 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+007
+AERMR07
+Aerosol type 7 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+008
+AERMR08
+Aerosol type 8 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+009
+AERMR09
+Aerosol type 9 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+010
+AERMR10
+Aerosol type 10 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+011
+AERMR11
+Aerosol type 11 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+012
+AERMR12
+Aerosol type 12 mixing ratio
+kg kg**-1
+prognostic 3D
+......................
+016
+AERGN01
+Aerosol type 1 source/gain accumulated
+kg m**-2
+diagnostic 2D
+......................
+017
+AERGN02
+Aerosol type 2 source/gain accumulated
+kg m**-2
+diagnostic 2D
+......................
+018
+AERGN03
+Aerosol type 3 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+019
+AERGN04
+Aerosol type 4 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+020
+AERGN05
+Aerosol type 5 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+021
+AERGN06
+Aerosol type 6 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+022
+AERGN07
+Aerosol type 7 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+023
+AERGN08
+Aerosol type 8 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+024
+AERGN09
+Aerosol type 9 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+025
+AERGN10
+Aerosol type 10 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+026
+AERGN11
+Aerosol type 11 source/gain accumulated
+kg m**-2
+diagnostic 3D
+......................
+027
+AERGN12
+Aerosol type 12 source/gain accumulated
+kg m**-2
+diagnostic 2D
+......................
+031
+AERLS01
+Aerosol type 1 sink/loss accumulated
+kg m**-2
+diagnostic 2D
+......................
+032
+AERLS02
+Aerosol type 2 sink/loss accumulated
+kg m**-2
+diagnostic 2D
+......................
+033
+AERLS03
+Aerosol type 3 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+034
+AERLS04
+Aerosol type 4 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+035
+AERLS05
+Aerosol type 5 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+036
+AERLS06
+Aerosol type 6 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+037
+AERLS07
+Aerosol type 7 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+038
+AERLS08
+Aerosol type 8 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+039
+AERLS09
+Aerosol type 9 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+040
+AERLS10
+Aerosol type 10 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+041
+AERLS11
+Aerosol type 11 sink/loss accumulated
+kg m**-2
+diagnostic 3D
+......................
+042
+AERLS12
+Aerosol type 12 sink/loss accumulated
+kg m**-2
+diagnostic 2D
+......................
+046
+AERPR
+Aerosol precursor mixing ratio
+kg kg**-1
+diagnostic 2D
+......................
+047
+AERSM
+Aerosol small mode mixing ratio
+kg kg**-1
+diagnostic 2D
+......................
+048
+AERLG
+Aerosol large mode mixing ratio
+kg kg**-1
+diagnostic 2D
+......................
+049
+AODPR
+Aerosol precursor optical depth
+dimensionless
+diagnostic 2D
+......................
+050
+AODSM
+Aerosol small mode optical depth
+dimensionless
+diagnostic 2D
+......................
+051
+AODLG
+Aerosol large mode optical depth
+dimensionless
+diagnostic 2D
+......................
+052
+AERDEP
+Dust emission potential
+kg s**2 m**-5
+climate field 2D
+......................
+053
+AERLTS
+Lifting threshold speed
+m s**-1
+climate field 2D
+......................
+054
+AERSCC
+Soil clay content
+%
+climate field 2D
+......................
+061
+CO2
+Carbon Dioxide
+kg kg**-1
+prognostic 3D
+......................
+062
+CH4
+Methane
+kg kg**-1
+prognostic 3D
+......................
+063
+N2O
+Nitrous oxide
+kg kg**-1
+prognostic 3D
+......................
+064
+TCCO2
+Total column Carbon Dioxide
+kg m**-2
+diagnostic 2D
+......................
+065
+TCCH4
+Total column Methane
+kg m**-2
+diagnostic 2D
+......................
+066
+TCN2O
+Total column Nitrous oxide
+kg m**-2
+diagnostic 2D
+......................
+067
+CO2OF
+Ocean flux of Carbon Dioxide
+kg m**-2 s**-1
+climate field 2D
+......................
+068
+CO2NBF
+Natural biosphere flux of Carbon Dioxide
+kg m**-2 s**-1
+climate field 2D
+......................
+069
+CO2APF
+Anthropogenic emissions of Carbon Dioxide
+kg m**-2 s**-1
+climate field 2D
+......................
+070
+CH4F
+Methane Surface Fluxes
+kg m**-2 s**-1
+-
+......................
+071
+kCH4
+Methane loss rate due to radical hydroxyl (OH)
+s**-1
+-
+......................
+080
+CO2FIRE
+Wildfire flux of Carbon Dioxide
+kg m**-2 s**-1
+-
+......................
+081
+COFIRE
+Wildfire flux of Carbon Monoxide
+kg m**-2 s**-1
+-
+......................
+082
+CH4FIRE
+Wildfire flux of Methane
+kg m**-2 s**-1
+-
+......................
+083
+NMHCFIRE
+Wildfire flux of Non-Methane Hydro-Carbons
+kg m**-2 s**-1
+-
+......................
+084
+H2FIRE
+Wildfire flux of Hydrogen
+kg m**-2 s**-1
+-
+......................
+085
+NOXFIRE
+Wildfire flux of Nitrogen Oxides NOx
+kg m**-2 s**-1
+-
+......................
+086
+N2OFIRE
+Wildfire flux of Nitrous Oxide
+kg m**-2 s**-1
+-
+......................
+087
+PM2P5FIRE
+Wildfire flux of Particulate Matter PM2.5
+kg m**-2 s**-1
+-
+......................
+088
+TPMFIRE
+Wildfire flux of Total Particulate Matter
+kg m**-2 s**-1
+-
+......................
+089
+TCFIRE
+Wildfire flux of Total Carbon in Aerosols
+kg m**-2 s**-1
+-
+......................
+090
+OCFIRE
+Wildfire flux of Organic Carbon
+kg m**-2 s**-1
+-
+......................
+091
+BCFIRE
+Wildfire flux of Black Carbon
+kg m**-2 s**-1
+-
+......................
+092
+CFIRE
+Wildfire overall flux of burnt Carbon
+kg m**-2 s**-1
+-
+......................
+093
+C4FFIRE
+Wildfire fraction of C4 plants
+dimensionless
+-
+......................
+094
+VEGFIRE
+Wildfire vegetation map index
+dimensionless
+-
+......................
+095
+CCFIRE
+Wildfire Combustion Completeness
+dimensionless
+-
+......................
+096
+FLFIRE
+Wildfire Fuel Load: Carbon per unit area
+kg m**-2
+-
+......................
+097
+BFFIRE
+Wildfire fraction of area burnt
+dimensionless
+-
+......................
+121
+NO2
+Nitrogen dioxide
+kg kg**-1
+prognostic 3D
+......................
+122
+SO2
+Sulphur dioxide
+kg kg**-1
+prognostic 3D
+......................
+123
+CO
+Carbon monoxide
+kg kg**-1
+prognostic 3D
+......................
+124
+HCHO
+Formaldehyde
+kg kg**-1
+prognostic 3D
+......................
+125
+TCNO2
+Total column Nitrogen dioxide
+kg m**-2
+diagnostic 2D
+......................
+126
+TCSO2
+Total column Sulphur dioxide
+kg m**-2
+diagnostic 2D
+......................
+127
+TCCO
+Total column Carbon monoxide
+kg m**-2
+diagnostic 2D
+......................
+128
+TCHCHO
+Total column Formaldehyde
+kg m**-2
+diagnostic 2D
+......................
+129
+NOX
+Nitrogen Oxides
+kg kg**-1
+-
+......................
+130
+TCNOX
+Total Column Nitrogen Oxides
+kg m**-2
+-
+......................
+131
+GRG1
+Reactive tracer 1 mass mixing ratio
+kg kg**-1
+-
+......................
+132
+TCGRG1
+Total column GRG tracer 1
+kg m**-2
+-
+......................
+133
+GRG2
+Reactive tracer 2 mass mixing ratio
+kg kg**-1
+-
+......................
+134
+TCGRG2
+Total column GRG tracer 2
+kg m**-2
+-
+......................
+135
+GRG3
+Reactive tracer 3 mass mixing ratio
+kg kg**-1
+-
+......................
+136
+TCGRG3
+Total column GRG tracer 3
+kg m**-2
+-
+......................
+137
+GRG4
+Reactive tracer 4 mass mixing ratio
+kg kg**-1
+-
+......................
+138
+TCGRG4
+Total column GRG tracer 4
+kg m**-2
+-
+......................
+139
+GRG5
+Reactive tracer 5 mass mixing ratio
+kg kg**-1
+-
+......................
+140
+TCGRG5
+Total column GRG tracer 5
+kg m**-2
+-
+......................
+141
+GRG6
+Reactive tracer 6 mass mixing ratio
+kg kg**-1
+-
+......................
+142
+TCGRG6
+Total column GRG tracer 6
+kg m**-2
+-
+......................
+143
+GRG7
+Reactive tracer 7 mass mixing ratio
+kg kg**-1
+-
+......................
+144
+TCGRG7
+Total column GRG tracer 7
+kg m**-2
+-
+......................
+145
+GRG8
+Reactive tracer 8 mass mixing ratio
+kg kg**-1
+-
+......................
+146
+TCGRG8
+Total column GRG tracer 8
+kg m**-2
+-
+......................
+147
+GRG9
+Reactive tracer 9 mass mixing ratio
+kg kg**-1
+-
+......................
+148
+TCGRG9
+Total column GRG tracer 9
+kg m**-2
+-
+......................
+149
+GRG10
+Reactive tracer 10 mass mixing ratio
+kg kg**-1
+-
+......................
+150
+TCGRG10
+Total column GRG tracer 10
+kg m**-2
+-
+......................
+181
+Ra
+Radon
+kg kg**-1
+prognostic 3D
+......................
+182
+SF6
+Sulphur Hexafluoride
+kg kg**-1
+prognostic 3D
+......................
+183
+TCRa
+Total column Radon
+kg m**-2
+diagnostic 2D
+......................
+184
+TCSF6
+Total column Sulphur Hexafluoride
+kg m**-2
+diagnostic 2D
+......................
+185
+SF6APF
+Anthropogenic Emissions of Sulphur Hexafluoride
+kg m**-2 s**-1
+-
+......................
+203
+GO3
+GEMS Ozone
+kg kg**-1
+prognostic 3D
+......................
+206
+GTCO3
+GEMS Total column ozone
+kg m**-2
+diagnostic 2D
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_211 b/gribtables/local_table_2_version_211
new file mode 100755
index 0000000..bac4a79
--- /dev/null
+++ b/gribtables/local_table_2_version_211
@@ -0,0 +1,90 @@
+ECMWF local table 2: Version Number 211 (GEMS Differences between first guess and analysis).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+046
+AERPR
+Aerosol precursor mixing ratio
+kg kg**-1
+diagnostic 2D
+......................
+047
+AERSM
+Aerosol small mode mixing ratio
+kg kg**-1
+diagnostic 2D
+......................
+048
+AERLG
+Aerosol large mode mixing ratio
+kg kg**-1
+diagnostic 2D
+......................
+049
+AODPR
+Aerosol precursor optical depth
+dimensionless
+diagnostic 2D
+......................
+050
+AODSM
+Aerosol small mode optical depth
+dimensionless
+diagnostic 2D
+......................
+051
+AODLG
+Aerosol large mode optical depth
+dimensionless
+diagnostic 2D
+......................
+061
+CO2
+Carbon Dioxide
+kg kg**-1
+prognostic 3D
+......................
+062
+CH4
+Methane
+kg kg**-1
+prognostic 3D
+......................
+063
+N2O
+Nitrous oxide
+kg kg**-1
+prognostic 3D
+......................
+121
+NO2
+Nitrogen dioxide
+kg kg**-1
+prognostic 3D
+......................
+122
+SO2
+Sulphur dioxide
+kg kg**-1
+prognostic 3D
+......................
+123
+CO
+Carbon monoxide
+kg kg**-1
+prognostic 3D
+......................
+124
+HCHO
+Formaldehyde
+kg kg**-1
+prognostic 3D
+......................
+203
+GO3
+GEMS Ozone
+kg kg**-1
+prognostic 3D
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_220 b/gribtables/local_table_2_version_220
new file mode 100755
index 0000000..f79cabb
--- /dev/null
+++ b/gribtables/local_table_2_version_220
@@ -0,0 +1,12 @@
+ECMWF local table 2: Version Number 220 (Observation count).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+228
+TPOC
+Total precipitacion observation count
+dimensionless
+-
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_228 b/gribtables/local_table_2_version_228
new file mode 100755
index 0000000..5437c8b
--- /dev/null
+++ b/gribtables/local_table_2_version_228
@@ -0,0 +1,84 @@
+ECMWF local table 2: Version Number 228 (Standard 2).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+001
+CIN
+Convective inhibition
+J kg**-1
+-
+......................
+002
+OROG
+Orography
+m
+-
+......................
+003
+ZUST
+Friction velocity
+m s**-1
+-
+......................
+039
+SM
+Soil Moisture
+kg m**-3
+-
+......................
+131
+U10N
+Neutral wind at 10 m x-component
+m s**-1
+Neutral wind at 10 m x-component
+......................
+132
+V10N
+Neutral wind at 10 m y-component
+m s**-1
+-
+......................
+139
+ST
+Soil Temperature
+K
+-
+......................
+141
+SD
+Snow Depth water equivalent
+m
+-
+......................
+144
+SF
+Snow Fall water equivalent
+kg m**-2
+Accumulated field
+......................
+164
+TCC
+Total Cloud Cover
+%
+-
+......................
+170
+CAP
+Field capacity
+kg m**-3
+-
+......................
+171
+WILT
+Wilting point
+kg m**-3
+-
+......................
+228
+TP
+Total Precipitation
+kg m**-2
+Accumulated field
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_230 b/gribtables/local_table_2_version_230
new file mode 100755
index 0000000..69785e7
--- /dev/null
+++ b/gribtables/local_table_2_version_230
@@ -0,0 +1,192 @@
+ECMWF local table 2: Version Number 230 (Parameters on coarse grid for variable resolution systems).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+044
+ESVAR
+Snow evaporation (variable resolution)
+m of water
+Accumulated field Interpolated from previous leg
+......................
+045
+SMLTVAR
+Snowmelt (variable resolution)
+m of water
+Accumulated field Interpolated from previous leg
+......................
+046
+SDURVAR
+Solar duration (variable resolution)
+s
+ Interpolated from previous leg
+......................
+057
+UVBVAR
+Downward UV radiation at the surface (variable resolution)
+w m**-2 s
+Ultra-violet band B. Accumulated field. Interpolated from previous leg
+......................
+058
+PARVAR
+Photosynthetically active radiation at the surface (variable resolution)
+w m**-2 s
+Accumulated field. Interpolated from previous leg
+......................
+142
+LSPVAR
+Stratiform precipitation (Large-scale precipitation) (variable resolution)
+m
+Accumulated field Interpolated from previous leg
+......................
+143
+CPVAR
+Convective precipitation (variable resolution)
+m
+Accumulated field Interpolated from previous leg
+......................
+144
+SFVAR
+Snowfall (convective + stratiform) (variable resolution)
+m of water equivalent
+Accumulated field Interpolated from previous leg
+......................
+145
+BLDVAR
+Boundary layer dissipation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+146
+SSHFVAR
+Surface sensible heat flux (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+147
+SLHFVAR
+Surface latent heat flux (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+169
+SSRDVAR
+Surface solar radiation downwards (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+175
+STRDVAR
+Surface thermal radiation downwards (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+176
+SSRVAR
+Surface solar radiation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+177
+STRVAR
+Surface thermal radiation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+178
+TSRVAR
+Top solar radiation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+179
+TTRVAR
+Top thermal radiation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+180
+EWSSVAR
+East-West surface stress (variable resolution)
+N m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+181
+NSSSVAR
+North-South surface stress (variable resolution)
+N m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+182
+EVAR
+Evaporation (variable resolution)
+m of water
+Accumulated field Interpolated from previous leg
+......................
+189
+SUNDVAR
+Sunshine duration (variable resolution)
+s
+Accumulated field Interpolated from previous leg
+......................
+195
+LGWSVAR
+Latitudinal component of gravity wave stress (variable resolution)
+N m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+196
+MGWSVAR
+Meridional component of gravity wave stress (variable resolution)
+N m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+197
+GWDVAR
+Gravity wave dissipation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+198
+SRCVAR
+Skin reservoir content (variable resolution)
+m of water
+ Interpolated from previous leg
+......................
+205
+ROVAR
+Runoff (variable resolution)
+m
+Accumulated field Interpolated from previous leg
+......................
+208
+TSRCVAR
+Top net solar radiation, clear sky (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+209
+TTRCVAR
+Top net thermal radiation, clear sky (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+210
+SSRCVAR
+Surface net solar radiation, clear sky (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+211
+STRCVAR
+Surface net thermal radiation, clear sky (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+212
+TISRVAR
+TOA incident solar radiation (variable resolution)
+W m**-2 s
+Accumulated field Interpolated from previous leg
+......................
+999
+.
+.
diff --git a/gribtables/local_table_2_version_234 b/gribtables/local_table_2_version_234
new file mode 100755
index 0000000..bd238ec
--- /dev/null
+++ b/gribtables/local_table_2_version_234
@@ -0,0 +1,30 @@
+ECMWF local table 2: Version Number 234 (Significance).
+Codes and data units for FM 92-VIII Ext.GRIB.
+......................
+139
+STS
+Surface temperature significance
+percentage
+-
+......................
+151
+MSLS
+Mean sea level pressure significance
+percentage
+-
+......................
+167
+2TS
+2 metre temperature significance
+percentage
+-
+......................
+228
+TPS
+Total precipitation significance
+percentage
+-
+......................
+999
+.
+.
diff --git a/gribtables/mars2netcdf.cfg b/gribtables/mars2netcdf.cfg
new file mode 100755
index 0000000..c7f2c87
--- /dev/null
+++ b/gribtables/mars2netcdf.cfg
@@ -0,0 +1,1906 @@
+info,table2=128,name=param,value=1,data=strf,short_name='STRF',long_name='Stream function',unit='m**2 s**-1'
+info,table2=128,name=param,value=2,data=vpot,short_name='VPOT',long_name='Velocity potential',unit='m**2 s**-1'
+info,table2=128,name=param,value=3,data=pt,short_name='PT',long_name='Potential temperature',unit='K'
+info,table2=128,name=param,value=4,data=eqpt,short_name='EQPT',long_name='Equivalent potential temperature',unit='K'
+info,table2=128,name=param,value=5,data=sept,short_name='SEPT',long_name='Saturated equivalent potential temperature',unit='K'
+info,table2=128,name=param,value=6,data=ssfr,short_name='SSFR',long_name='Soil sand fraction',unit='(0 - 1)'
+info,table2=128,name=param,value=7,data=scfr,short_name='SCFR',long_name='Soil clay fraction',unit='(0 - 1)'
+info,table2=128,name=param,value=8,data=sro,short_name='SRO',long_name='Surface runoff',unit='m'
+info,table2=128,name=param,value=9,data=ssro,short_name='SSRO',long_name='Sub-surface runoff',unit='m'
+info,table2=128,name=param,value=10,data=wind,short_name='WIND',long_name='Wind speed',unit='m s**-1'
+info,table2=128,name=param,value=11,data=udvw,short_name='UDVW',long_name='U component of divergent wind',unit='m s**-1'
+info,table2=128,name=param,value=12,data=vdvw,short_name='VDVW',long_name='V component of divergent wind',unit='m s**-1'
+info,table2=128,name=param,value=13,data=urtw,short_name='URTW',long_name='U component of rotational wind',unit='m s**-1'
+info,table2=128,name=param,value=14,data=vrtw,short_name='VRTW',long_name='V component of rotational wind',unit='m s**-1'
+info,table2=128,name=param,value=15,data=aluvp,short_name='ALUVP',long_name='UV visible albedo for direct radiation',unit='(0 - 1)'
+info,table2=128,name=param,value=16,data=aluvd,short_name='ALUVD',long_name='UV visible albedo for diffuse radiation',unit='(0 - 1)'
+info,table2=128,name=param,value=17,data=alnip,short_name='ALNIP',long_name='Near IR albedo for direct radiation',unit='(0 - 1)'
+info,table2=128,name=param,value=18,data=alnid,short_name='ALNID',long_name='Near IR albedo for diffuse radiation',unit='(0 - 1)'
+info,table2=128,name=param,value=19,data=uvcs,short_name='UVCS',long_name='Clear sky surface UV',unit='W m**-2 s'
+info,table2=128,name=param,value=20,data=parcs,short_name='PARCS',long_name='Clear sky surface photosynthetically active radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=21,data=uctp,short_name='UCTP',long_name='Unbalanced component of temperature',unit='K'
+info,table2=128,name=param,value=22,data=ucln,short_name='UCLN',long_name='Unbalanced component of logarithm of surface pressure',unit='-'
+info,table2=128,name=param,value=23,data=ucdv,short_name='UCDV',long_name='Unbalanced component of divergence',unit='s**-1'
+info,table2=128,name=param,value=24,data=24.128,short_name='None',long_name='Reserved for future unbalanced components',unit='-'
+info,table2=128,name=param,value=25,data=25.128,short_name='None',long_name='Reserved for future unbalanced components',unit='-'
+info,table2=128,name=param,value=26,data=cl,short_name='CL',long_name='Lake cover',unit='(0 - 1)'
+info,table2=128,name=param,value=27,data=cvl,short_name='CVL',long_name='Low vegetation cover',unit='(0 - 1)'
+info,table2=128,name=param,value=28,data=cvh,short_name='CVH',long_name='High vegetation cover',unit='(0 - 1)'
+info,table2=128,name=param,value=29,data=tvl,short_name='TVL',long_name='Type of low vegetation',unit='-'
+info,table2=128,name=param,value=30,data=tvh,short_name='TVH',long_name='Type of high vegetation',unit='-'
+info,table2=128,name=param,value=31,data=ci,short_name='CI',long_name='Sea-ice cover',unit='(0 - 1)'
+info,table2=128,name=param,value=32,data=asn,short_name='ASN',long_name='Snow albedo',unit='(0 - 1)'
+info,table2=128,name=param,value=33,data=rsn,short_name='RSN',long_name='Snow density',unit='kg m**-3'
+info,table2=128,name=param,value=34,data=sstk,short_name='SSTK',long_name='Sea surface temperature',unit='K'
+info,table2=128,name=param,value=35,data=istl1,short_name='ISTL1',long_name='Ice surface temperature layer 1',unit='K'
+info,table2=128,name=param,value=36,data=istl2,short_name='ISTL2',long_name='Ice surface temperature layer 2',unit='K'
+info,table2=128,name=param,value=37,data=istl3,short_name='ISTL3',long_name='Ice surface temperature layer 3',unit='K'
+info,table2=128,name=param,value=38,data=istl4,short_name='ISTL4',long_name='Ice surface temperature layer 4',unit='K'
+info,table2=128,name=param,value=39,data=swvl1,short_name='SWVL1',long_name='Volumetric soil water layer 1',unit='m**3 m**-3'
+info,table2=128,name=param,value=40,data=swvl2,short_name='SWVL2',long_name='Volumetric soil water layer 2',unit='m**3 m**-3'
+info,table2=128,name=param,value=41,data=swvl3,short_name='SWVL3',long_name='Volumetric soil water layer 3',unit='m**3 m**-3'
+info,table2=128,name=param,value=42,data=swvl4,short_name='SWVL4',long_name='Volumetric soil water layer 4',unit='m**3 m**-3'
+info,table2=128,name=param,value=43,data=slt,short_name='SLT',long_name='Soil type',unit='-'
+info,table2=128,name=param,value=44,data=es,short_name='ES',long_name='Snow evaporation',unit='m of water'
+info,table2=128,name=param,value=45,data=smlt,short_name='SMLT',long_name='Snowmelt',unit='m of water'
+info,table2=128,name=param,value=46,data=sdur,short_name='SDUR',long_name='Solar duration',unit='s'
+info,table2=128,name=param,value=47,data=dsrp,short_name='DSRP',long_name='Direct solar radiation',unit='w m**-2'
+info,table2=128,name=param,value=48,data=magss,short_name='MAGSS',long_name='Magnitude of surface stress',unit='N m**-2 s'
+info,table2=128,name=param,value=49,data=10fg,short_name='10FG',long_name='10 metre wind gust',unit='m s**-1'
+info,table2=128,name=param,value=50,data=lspf,short_name='LSPF',long_name='Large-scale precipitation fraction',unit='s'
+info,table2=128,name=param,value=51,data=mx2t24,short_name='MX2T24',long_name='Maximum temperature at 2 metres since last 24 hours',unit='K'
+info,table2=128,name=param,value=52,data=mn2t24,short_name='MN2T24',long_name='Minimum temperature at 2 metres since last 24 hours',unit='K'
+info,table2=128,name=param,value=53,data=mont,short_name='MONT',long_name='Montgomery potential',unit='m**2 s**-2'
+info,table2=128,name=param,value=54,data=pres,short_name='PRES',long_name='Pressure',unit='Pa'
+info,table2=128,name=param,value=55,data=mean2t24,short_name='MEAN2T24',long_name='Mean temperature at 2 metres since last 24 hours',unit='K'
+info,table2=128,name=param,value=56,data=mn2d24,short_name='MN2D24',long_name='Mean 2 metre dewpoint temperature in past 24 hours',unit='K'
+info,table2=128,name=param,value=57,data=uvb,short_name='UVB',long_name='Downward UV radiation at the surface',unit='w m**-2 s'
+info,table2=128,name=param,value=58,data=par,short_name='PAR',long_name='Photosynthetically active radiation at the surface',unit='w m**-2 s'
+info,table2=128,name=param,value=59,data=cape,short_name='CAPE',long_name='Convective available potential energy',unit='J kg**-1'
+info,table2=128,name=param,value=60,data=pv,short_name='PV',long_name='Potential vorticity',unit='K m**2 kg**-1 s**-1'
+info,table2=128,name=param,value=61,data=tpo,short_name='TPO',long_name='Total precipitation from observations',unit='Millimetres*100 + number of stations'
+info,table2=128,name=param,value=62,data=obct,short_name='OBCT',long_name='Observation count',unit='-'
+info,table2=128,name=param,value=63,data=63.128,short_name='None',long_name='Start time for skin temperature difference',unit='s'
+info,table2=128,name=param,value=64,data=64.128,short_name='None',long_name='Finish time for skin temperature difference',unit='s'
+info,table2=128,name=param,value=65,data=65.128,short_name='None',long_name='Skin temperature difference',unit='K'
+info,table2=128,name=param,value=66,data=66.128,short_name='None',long_name='Leaf area index, low vegetation',unit='m**2 / m**2'
+info,table2=128,name=param,value=67,data=67.128,short_name='None',long_name='Leaf area index, high vegetation',unit='m**2 / m**2'
+info,table2=128,name=param,value=68,data=68.128,short_name='None',long_name='Minimum stomatal resistance, low vegetation',unit='s m**-1'
+info,table2=128,name=param,value=69,data=69.128,short_name='None',long_name='Minimum stomatal resistance, high vegetation',unit='s m**-1'
+info,table2=128,name=param,value=70,data=70.128,short_name='None',long_name='Biome cover, low vegetation',unit='(0 - 1)'
+info,table2=128,name=param,value=71,data=71.128,short_name='None',long_name='Biome cover, high vegetation',unit='(0 - 1)'
+info,table2=128,name=param,value=72,data=issrd,short_name='ISSRD',long_name='Instantaneous surface solar radiation downwards',unit='w m**-2'
+info,table2=128,name=param,value=73,data=istrd,short_name='ISTRD',long_name='Instantaneous surface thermal radiation downwards',unit='w m**-2'
+info,table2=128,name=param,value=74,data=sdfor,short_name='SDFOR',long_name='Standard deviation of filtered subgrid orography',unit='m'
+info,table2=128,name=param,value=77,data=etadot,short_name='ETADOT',long_name='Vertical velocity in the hybrid eta vertical coordinate system',unit='s**-1'
+info,table2=128,name=param,value=78,data=tclw,short_name='TCLW',long_name='Total column liquid water',unit='kg m**-2'
+info,table2=128,name=param,value=79,data=tciw,short_name='TCIW',long_name='Total column ice water',unit='kg m**-2'
+info,table2=128,name=param,value=80,data=80.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=81,data=81.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=82,data=82.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=83,data=83.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=84,data=84.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=85,data=85.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=86,data=86.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=87,data=87.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=88,data=88.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=89,data=89.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=90,data=90.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=91,data=91.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=92,data=92.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=93,data=93.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=94,data=94.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=95,data=95.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=96,data=96.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=97,data=97.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=98,data=98.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=99,data=99.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=100,data=100.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=101,data=101.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=102,data=102.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=103,data=103.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=104,data=104.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=105,data=105.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=106,data=106.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=107,data=107.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=108,data=108.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=109,data=109.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=110,data=110.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=111,data=111.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=112,data=112.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=113,data=113.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=114,data=114.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=115,data=115.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=116,data=116.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=117,data=117.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=118,data=118.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=119,data=119.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=120,data=120.128,short_name='None',long_name='Experimental product',unit='-'
+info,table2=128,name=param,value=121,data=mx2t6,short_name='MX2T6',long_name='Maximum temperature at 2 metres since last 6 hours',unit='K'
+info,table2=128,name=param,value=122,data=mn2t6,short_name='MN2T6',long_name='Minimum temperature at 2 metres since last 6 hours',unit='K'
+info,table2=128,name=param,value=123,data=10fg6,short_name='10FG6',long_name='10 metre wind gust in the past 6 hours',unit='m s**-1'
+info,table2=128,name=param,value=124,data=emis,short_name='EMIS',long_name='Surface emissivity',unit='dimensionless'
+info,table2=128,name=param,value=125,data=125.128,short_name='None',long_name='Vertically integrated total energy',unit='J m**-2'
+info,table2=128,name=param,value=126,data=126.128,short_name='None',long_name='Generic parameter for sensitive area prediction',unit='Various'
+info,table2=128,name=param,value=127,data=at,short_name='AT',long_name='Atmospheric tide',unit='-'
+info,table2=128,name=param,value=128,data=bv,short_name='BV',long_name='Budget values',unit='-'
+info,table2=128,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=128,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=128,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=128,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=128,name=param,value=133,data=q,short_name='Q',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=128,name=param,value=134,data=sp,short_name='SP',long_name='Surface pressure',unit='Pa'
+info,table2=128,name=param,value=135,data=w,short_name='W',long_name='Vertical velocity',unit='Pa s**-1'
+info,table2=128,name=param,value=136,data=tcw,short_name='TCW',long_name='Total column water',unit='kg m**-2'
+info,table2=128,name=param,value=137,data=tcwv,short_name='TCWV',long_name='Total column water vapour',unit='kg m**-2'
+info,table2=128,name=param,value=138,data=vo,short_name='VO',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=128,name=param,value=139,data=stl1,short_name='STL1',long_name='Soil temperature level 1',unit='K'
+info,table2=128,name=param,value=140,data=swl1,short_name='SWL1',long_name='Soil wetness level 1',unit='m of water'
+info,table2=128,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water equivalent'
+info,table2=128,name=param,value=142,data=lsp,short_name='LSP',long_name='Stratiform precipitation (Large-scale precipitation)',unit='m'
+info,table2=128,name=param,value=143,data=cp,short_name='CP',long_name='Convective precipitation',unit='m'
+info,table2=128,name=param,value=144,data=sf,short_name='SF',long_name='Snowfall',unit='m of water equivalent'
+info,table2=128,name=param,value=145,data=bld,short_name='BLD',long_name='Boundary layer dissipation',unit='W m**-2 s'
+info,table2=128,name=param,value=146,data=sshf,short_name='SSHF',long_name='Surface sensible heat flux',unit='W m**-2 s'
+info,table2=128,name=param,value=147,data=slhf,short_name='SLHF',long_name='Surface latent heat flux',unit='W m**-2 s'
+info,table2=128,name=param,value=148,data=chnk,short_name='CHNK',long_name='Charnock',unit='-'
+info,table2=128,name=param,value=149,data=snr,short_name='SNR',long_name='Surface net radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=150,data=tnr,short_name='TNR',long_name='Top net radiation',unit='-'
+info,table2=128,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=128,name=param,value=152,data=lnsp,short_name='LNSP',long_name='Logarithm of surface pressure',unit='-'
+info,table2=128,name=param,value=153,data=swhr,short_name='SWHR',long_name='Short-wave heating rate',unit='K'
+info,table2=128,name=param,value=154,data=lwhr,short_name='LWHR',long_name='Long-wave heating rate',unit='K'
+info,table2=128,name=param,value=155,data=d,short_name='D',long_name='Divergence',unit='s**-1'
+info,table2=128,name=param,value=156,data=gh,short_name='GH',long_name='Gepotential Height',unit='gpm'
+info,table2=128,name=param,value=157,data=r,short_name='R',long_name='Relative humidity',unit='%'
+info,table2=128,name=param,value=158,data=tsp,short_name='TSP',long_name='Tendency of surface pressure',unit='Pa s**-1'
+info,table2=128,name=param,value=159,data=blh,short_name='BLH',long_name='Boundary layer height',unit='m'
+info,table2=128,name=param,value=160,data=sdor,short_name='SDOR',long_name='Standard deviation of orography',unit='-'
+info,table2=128,name=param,value=161,data=isor,short_name='ISOR',long_name='Anisotropy of sub-gridscale orography',unit='-'
+info,table2=128,name=param,value=162,data=anor,short_name='ANOR',long_name='Angle of sub-gridscale orography',unit='rad'
+info,table2=128,name=param,value=163,data=slor,short_name='SLOR',long_name='Slope of sub-gridscale orography',unit='-'
+info,table2=128,name=param,value=164,data=tcc,short_name='TCC',long_name='Total cloud cover',unit='(0 - 1)'
+info,table2=128,name=param,value=165,data=10u,short_name='10U',long_name='10 metre U wind component',unit='m s**-1'
+info,table2=128,name=param,value=166,data=10v,short_name='10V',long_name='10 metre V wind component',unit='m s**-1'
+info,table2=128,name=param,value=167,data=2t,short_name='2T',long_name='2 metre temperature',unit='K'
+info,table2=128,name=param,value=168,data=2d,short_name='2D',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=128,name=param,value=169,data=ssrd,short_name='SSRD',long_name='Surface solar radiation downwards',unit='W m**-2 s'
+info,table2=128,name=param,value=170,data=stl2,short_name='STL2',long_name='Soil temperature level 2',unit='K'
+info,table2=128,name=param,value=171,data=swl2,short_name='SWL2',long_name='Soil wetness level 2',unit='m of water'
+info,table2=128,name=param,value=172,data=lsm,short_name='LSM',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=128,name=param,value=173,data=sr,short_name='SR',long_name='Surface roughness',unit='m'
+info,table2=128,name=param,value=174,data=al,short_name='AL',long_name='Albedo',unit='(0 - 1)'
+info,table2=128,name=param,value=175,data=strd,short_name='STRD',long_name='Surface thermal radiation downwards',unit='W m**-2 s'
+info,table2=128,name=param,value=176,data=ssr,short_name='SSR',long_name='Surface solar radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=177,data=str,short_name='STR',long_name='Surface thermal radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=178,data=tsr,short_name='TSR',long_name='Top solar radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=179,data=ttr,short_name='TTR',long_name='Top thermal radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=180,data=ewss,short_name='EWSS',long_name='East-West surface stress',unit='N m**-2 s'
+info,table2=128,name=param,value=181,data=nsss,short_name='NSSS',long_name='North-South surface stress',unit='N m**-2 s'
+info,table2=128,name=param,value=182,data=e,short_name='E',long_name='Evaporation',unit='m of water'
+info,table2=128,name=param,value=183,data=stl3,short_name='STL3',long_name='Soil temperature level 3',unit='K'
+info,table2=128,name=param,value=184,data=swl3,short_name='SWL3',long_name='Soil wetness level 3',unit='m of water'
+info,table2=128,name=param,value=185,data=ccc,short_name='CCC',long_name='Convective cloud cover',unit='(0 - 1)'
+info,table2=128,name=param,value=186,data=lcc,short_name='LCC',long_name='Low cloud cover',unit='(0 - 1)'
+info,table2=128,name=param,value=187,data=mcc,short_name='MCC',long_name='Medium cloud cover',unit='(0 - 1)'
+info,table2=128,name=param,value=188,data=hcc,short_name='HCC',long_name='High cloud cover',unit='(0 - 1)'
+info,table2=128,name=param,value=189,data=sund,short_name='SUND',long_name='Sunshine duration',unit='s'
+info,table2=128,name=param,value=190,data=ewov,short_name='EWOV',long_name='East-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=128,name=param,value=191,data=nsov,short_name='NSOV',long_name='North-South component of sub-gridscale orographic variance',unit='m**2'
+info,table2=128,name=param,value=192,data=nwov,short_name='NWOV',long_name='North-West/South-East component of sub-gridscale orographic variance',unit='m**2'
+info,table2=128,name=param,value=193,data=neov,short_name='NEOV',long_name='North-East/South-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=128,name=param,value=194,data=btmp,short_name='BTMP',long_name='Brightness temperature',unit='K'
+info,table2=128,name=param,value=195,data=lgws,short_name='LGWS',long_name='Latitudinal component of gravity wave stress',unit='N m**-2 s'
+info,table2=128,name=param,value=196,data=mgws,short_name='MGWS',long_name='Meridional component of gravity wave stress',unit='N m**-2 s'
+info,table2=128,name=param,value=197,data=gwd,short_name='GWD',long_name='Gravity wave dissipation',unit='W m**-2 s'
+info,table2=128,name=param,value=198,data=src,short_name='SRC',long_name='Skin reservoir content',unit='m of water'
+info,table2=128,name=param,value=199,data=veg,short_name='VEG',long_name='Vegetation fraction',unit='(0 - 1)'
+info,table2=128,name=param,value=200,data=vso,short_name='VSO',long_name='Variance of sub-gridscale orography',unit='m**2'
+info,table2=128,name=param,value=201,data=mx2t,short_name='MX2T',long_name='Maximum temperature at 2 metres since previous post-processing',unit='K'
+info,table2=128,name=param,value=202,data=mn2t,short_name='MN2T',long_name='Minimum temperature at 2 metres since previous post-processing',unit='K'
+info,table2=128,name=param,value=203,data=o3,short_name='O3',long_name='Ozone mass mixing ratio',unit='kg kg**-1'
+info,table2=128,name=param,value=204,data=paw,short_name='PAW',long_name='Precipitation analysis weights',unit='-'
+info,table2=128,name=param,value=205,data=ro,short_name='RO',long_name='Runoff',unit='m'
+info,table2=128,name=param,value=206,data=tco3,short_name='TCO3',long_name='Total column ozone',unit='kg m**-2'
+info,table2=128,name=param,value=207,data=10si,short_name='10SI',long_name='10 metre wind speed',unit='m s**-1'
+info,table2=128,name=param,value=208,data=tsrc,short_name='TSRC',long_name='Top net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=128,name=param,value=209,data=ttrc,short_name='TTRC',long_name='Top net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=128,name=param,value=210,data=ssrc,short_name='SSRC',long_name='Surface net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=128,name=param,value=211,data=strc,short_name='STRC',long_name='Surface net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=128,name=param,value=212,data=tisr,short_name='TISR',long_name='TOA incident solar radiation',unit='W m**-2 s'
+info,table2=128,name=param,value=213,data=vimd,short_name='VIMD',long_name='Vertically integrated moisture divergence',unit='kg m**-2'
+info,table2=128,name=param,value=214,data=dhr,short_name='DHR',long_name='Diabatic heating by radiation',unit='K'
+info,table2=128,name=param,value=215,data=dhvd,short_name='DHVD',long_name='Diabatic heating by vertical diffusion',unit='K'
+info,table2=128,name=param,value=216,data=dhcc,short_name='DHCC',long_name='Diabatic heating by cumulus convection',unit='K'
+info,table2=128,name=param,value=217,data=dhlc,short_name='DHLC',long_name='Diabatic heating large-scale condensation',unit='K'
+info,table2=128,name=param,value=218,data=vdzw,short_name='VDZW',long_name='Vertical diffusion of zonal wind',unit='m s**-1'
+info,table2=128,name=param,value=219,data=vdmw,short_name='VDMW',long_name='Vertical diffusion of meridional wind',unit='m s**-1'
+info,table2=128,name=param,value=220,data=ewgd,short_name='EWGD',long_name='East-West gravity wave drag tendency',unit='m s**-1'
+info,table2=128,name=param,value=221,data=nsgd,short_name='NSGD',long_name='North-South gravity wave drag tendency',unit='m s**-1'
+info,table2=128,name=param,value=222,data=ctzw,short_name='CTZW',long_name='Convective tendency of zonal wind',unit='m s**-1'
+info,table2=128,name=param,value=223,data=ctmw,short_name='CTMW',long_name='Convective tendency of meridional wind',unit='m s**-1'
+info,table2=128,name=param,value=224,data=vdh,short_name='VDH',long_name='Vertical diffusion of humidity',unit='kg kg**-1'
+info,table2=128,name=param,value=225,data=htcc,short_name='HTCC',long_name='Humidity tendency by cumulus convection',unit='kg kg**-1'
+info,table2=128,name=param,value=226,data=htlc,short_name='HTLC',long_name='Humidity tendency by large-scale condensation',unit='kg kg**-1'
+info,table2=128,name=param,value=227,data=crnh,short_name='CRNH',long_name='Change from removal of negative humidity',unit='kg kg**-1'
+info,table2=128,name=param,value=228,data=tp,short_name='TP',long_name='Total precipitation',unit='m'
+info,table2=128,name=param,value=229,data=iews,short_name='IEWS',long_name='Instantaneous X surface stress',unit='N m**-2'
+info,table2=128,name=param,value=230,data=inss,short_name='INSS',long_name='Instantaneous Y surface stress',unit='N m**-2'
+info,table2=128,name=param,value=231,data=ishf,short_name='ISHF',long_name='Instantaneous surface heat flux',unit='W m**-2'
+info,table2=128,name=param,value=232,data=ie,short_name='IE',long_name='Instantaneous moisture flux',unit='kg m**-2 s'
+info,table2=128,name=param,value=233,data=asq,short_name='ASQ',long_name='Apparent surface humidity',unit='kg kg**-1'
+info,table2=128,name=param,value=234,data=lsrh,short_name='LSRH',long_name='Logarithm of surface roughness length for heat',unit='-'
+info,table2=128,name=param,value=235,data=skt,short_name='SKT',long_name='Skin temperature',unit='K'
+info,table2=128,name=param,value=236,data=stl4,short_name='STL4',long_name='Soil temperature level 4',unit='K'
+info,table2=128,name=param,value=237,data=swl4,short_name='SWL4',long_name='Soil wetness level 4',unit='m'
+info,table2=128,name=param,value=238,data=tsn,short_name='TSN',long_name='Temperature of snow layer',unit='K'
+info,table2=128,name=param,value=239,data=csf,short_name='CSF',long_name='Convective snowfall',unit='m of water equivalent'
+info,table2=128,name=param,value=240,data=lsf,short_name='LSF',long_name='Large-scale snowfall',unit='m of water equivalent'
+info,table2=128,name=param,value=241,data=acf,short_name='ACF',long_name='Accumulated cloud fraction tendency',unit='(-1 to 1)'
+info,table2=128,name=param,value=242,data=alw,short_name='ALW',long_name='Accumulated liquid water tendency',unit='(-1 to 1)'
+info,table2=128,name=param,value=243,data=fal,short_name='FAL',long_name='Forecast albedo',unit='(0 - 1)'
+info,table2=128,name=param,value=244,data=fsr,short_name='FSR',long_name='Forecast surface roughness',unit='m'
+info,table2=128,name=param,value=245,data=flsr,short_name='FLSR',long_name='Forecast logarithm of surface roughness for heat',unit='-'
+info,table2=128,name=param,value=246,data=clwc,short_name='CLWC',long_name='Cloud liquid water content',unit='kg kg**-1'
+info,table2=128,name=param,value=247,data=ciwc,short_name='CIWC',long_name='Cloud ice water content',unit='kg kg**-1'
+info,table2=128,name=param,value=248,data=cc,short_name='CC',long_name='Cloud cover',unit='(0 - 1)'
+info,table2=128,name=param,value=249,data=aiw,short_name='AIW',long_name='Accumulated ice water tendency',unit='(-1 to 1)'
+info,table2=128,name=param,value=250,data=ice,short_name='ICE',long_name='Ice age',unit='(0 - 1)'
+info,table2=128,name=param,value=251,data=atte,short_name='ATTE',long_name='Adiabatic tendency of temperature',unit='K'
+info,table2=128,name=param,value=252,data=athe,short_name='ATHE',long_name='Adiabatic tendency of humidity',unit='kg kg**-1'
+info,table2=128,name=param,value=253,data=atze,short_name='ATZE',long_name='Adiabatic tendency of zonal wind',unit='m s**-1'
+info,table2=128,name=param,value=254,data=atmw,short_name='ATMW',long_name='Adiabatic tendency of meridional wind',unit='m s**-1'
+info,table2=128,name=param,value=255,data=255.128,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=129,name=param,value=1,data=strf,short_name='STRF',long_name='Stream function',unit='m**2 s**-1'
+info,table2=129,name=param,value=2,data=vpot,short_name='VPOT',long_name='Velocity potential',unit='m**2 s**-1'
+info,table2=129,name=param,value=3,data=pt,short_name='PT',long_name='Potential temperature',unit='K'
+info,table2=129,name=param,value=4,data=eqpt,short_name='EQPT',long_name='Equivalent potential temperature',unit='K'
+info,table2=129,name=param,value=5,data=sept,short_name='SEPT',long_name='Saturated equivalent potential temperature',unit='K'
+info,table2=129,name=param,value=11,data=udvw,short_name='UDVW',long_name='U component of divergent wind',unit='m s**-1'
+info,table2=129,name=param,value=12,data=vdvw,short_name='VDVW',long_name='V component of divergent wind',unit='m s**-1'
+info,table2=129,name=param,value=13,data=urtw,short_name='URTW',long_name='U component of rotational wind',unit='m s**-1'
+info,table2=129,name=param,value=14,data=vrtw,short_name='VRTW',long_name='V component of rotational wind',unit='m s**-1'
+info,table2=129,name=param,value=21,data=uctp,short_name='UCTP',long_name='Unbalanced component of temperature',unit='K'
+info,table2=129,name=param,value=22,data=ucln,short_name='UCLN',long_name='Unbalanced component of logarithm of surface pressure',unit='-'
+info,table2=129,name=param,value=23,data=ucdv,short_name='UCDV',long_name='Unbalanced component of divergence',unit='s**-1'
+info,table2=129,name=param,value=24,data=24.129,short_name='None',long_name='Reserved for future unbalanced components',unit='-'
+info,table2=129,name=param,value=25,data=25.129,short_name='None',long_name='Reserved for future unbalanced components',unit='-'
+info,table2=129,name=param,value=26,data=cl,short_name='CL',long_name='Lake cover',unit='(0 - 1)'
+info,table2=129,name=param,value=27,data=cvl,short_name='CVL',long_name='Low vegetation cover',unit='(0 - 1)'
+info,table2=129,name=param,value=28,data=cvh,short_name='CVH',long_name='High vegetation cover',unit='(0 - 1)'
+info,table2=129,name=param,value=29,data=tvl,short_name='TVL',long_name='Type of low vegetation',unit='-'
+info,table2=129,name=param,value=30,data=tvh,short_name='TVH',long_name='Type of high vegetation',unit='-'
+info,table2=129,name=param,value=31,data=ci,short_name='CI',long_name='Sea-ice cover',unit='(0 - 1)'
+info,table2=129,name=param,value=32,data=asn,short_name='ASN',long_name='Snow albedo',unit='(0 - 1)'
+info,table2=129,name=param,value=33,data=rsn,short_name='RSN',long_name='Snow density',unit='kg m**-3'
+info,table2=129,name=param,value=34,data=sstk,short_name='SSTK',long_name='Sea surface temperature',unit='K'
+info,table2=129,name=param,value=35,data=istl1,short_name='ISTL1',long_name='Ice surface temperature layer 1',unit='K'
+info,table2=129,name=param,value=36,data=istl2,short_name='ISTL2',long_name='Ice surface temperature layer 2',unit='K'
+info,table2=129,name=param,value=37,data=istl3,short_name='ISTL3',long_name='Ice surface temperature layer 3',unit='K'
+info,table2=129,name=param,value=38,data=istl4,short_name='ISTL4',long_name='Ice surface temperature layer 4',unit='K'
+info,table2=129,name=param,value=39,data=swvl1,short_name='SWVL1',long_name='Volumetric soil water layer 1',unit='m**3 m**-3'
+info,table2=129,name=param,value=40,data=swvl2,short_name='SWVL2',long_name='Volumetric soil water layer 2',unit='m**3 m**-3'
+info,table2=129,name=param,value=41,data=swvl3,short_name='SWVL3',long_name='Volumetric soil water layer 3',unit='m**3 m**-3'
+info,table2=129,name=param,value=42,data=swvl4,short_name='SWVL4',long_name='Volumetric soil water layer 4',unit='m**3 m**-3'
+info,table2=129,name=param,value=43,data=slt,short_name='SLT',long_name='Soil type',unit='-'
+info,table2=129,name=param,value=44,data=es,short_name='ES',long_name='Snow evaporation',unit='m of water'
+info,table2=129,name=param,value=45,data=smlt,short_name='SMLT',long_name='Snowmelt',unit='m of water'
+info,table2=129,name=param,value=46,data=sdur,short_name='SDUR',long_name='Solar duration',unit='s'
+info,table2=129,name=param,value=47,data=dsrp,short_name='DSRP',long_name='Direct solar radiation',unit='w m**-2'
+info,table2=129,name=param,value=48,data=magss,short_name='MAGSS',long_name='Magnitude of surface stress',unit='N m**-2 s'
+info,table2=129,name=param,value=49,data=10fg,short_name='10FG',long_name='10 metre wind gust',unit='m s**-1'
+info,table2=129,name=param,value=50,data=lspf,short_name='LSPF',long_name='Large-scale precipitation fraction',unit='s'
+info,table2=129,name=param,value=51,data=mx2t24,short_name='MX2T24',long_name='Maximum 2 metre temperature',unit='K'
+info,table2=129,name=param,value=52,data=mn2t24,short_name='MN2T24',long_name='Minimum 2 metre temperature',unit='K'
+info,table2=129,name=param,value=53,data=mont,short_name='MONT',long_name='Montgomery potential',unit='m**2 s**-2'
+info,table2=129,name=param,value=54,data=pres,short_name='PRES',long_name='Pressure',unit='Pa'
+info,table2=129,name=param,value=55,data=mean2t24,short_name='MEAN2T24',long_name='Mean 2 metre temperature in past 24 hours',unit='K'
+info,table2=129,name=param,value=56,data=mn2d24,short_name='MN2D24',long_name='Mean 2 metre dewpoint temperature in past 24 hours',unit='K'
+info,table2=129,name=param,value=57,data=uvb,short_name='UVB',long_name='Downward UV radiation at the surface',unit='w m**-2 s'
+info,table2=129,name=param,value=58,data=par,short_name='PAR',long_name='Photosynthetically active radiation at the surface',unit='w m**-2 s'
+info,table2=129,name=param,value=59,data=cape,short_name='CAPE',long_name='Convective available potential energy',unit='J kg**-1'
+info,table2=129,name=param,value=60,data=pv,short_name='PV',long_name='Potential vorticity',unit='K m**2 kg**-1 s**-1'
+info,table2=129,name=param,value=61,data=tpo,short_name='TPO',long_name='Total precipitation from observations',unit='Millimetres*100 + number of stations'
+info,table2=129,name=param,value=62,data=obct,short_name='OBCT',long_name='Observation count',unit='-'
+info,table2=129,name=param,value=63,data=63.129,short_name='None',long_name='Start time for skin temperature difference',unit='s'
+info,table2=129,name=param,value=64,data=64.129,short_name='None',long_name='Finish time for skin temperature difference',unit='s'
+info,table2=129,name=param,value=65,data=65.129,short_name='None',long_name='Skin temperature difference',unit='K'
+info,table2=129,name=param,value=66,data=66.129,short_name='None',long_name='Leaf area index, low vegetation',unit='m**2 / m**2'
+info,table2=129,name=param,value=67,data=67.129,short_name='None',long_name='Leaf area index, high vegetation',unit='m**2 / m**2'
+info,table2=129,name=param,value=68,data=68.129,short_name='None',long_name='Minimum stomatal resistance, low vegetation',unit='s m**-1'
+info,table2=129,name=param,value=69,data=69.129,short_name='None',long_name='Minimum stomatal resistance, high vegetation',unit='s m**-1'
+info,table2=129,name=param,value=70,data=70.129,short_name='None',long_name='Biome cover, low vegetation',unit='(0 - 1)'
+info,table2=129,name=param,value=71,data=71.129,short_name='None',long_name='Biome cover, high vegetation',unit='(0 - 1)'
+info,table2=129,name=param,value=78,data=78.129,short_name='None',long_name='Total column liquid water',unit='kg m**-2'
+info,table2=129,name=param,value=79,data=79.129,short_name='None',long_name='Total column ice water',unit='kg m**-2'
+info,table2=129,name=param,value=80,data=80.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=81,data=81.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=82,data=82.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=83,data=83.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=84,data=84.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=85,data=85.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=86,data=86.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=87,data=87.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=88,data=88.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=89,data=89.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=90,data=90.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=91,data=91.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=92,data=92.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=93,data=93.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=94,data=94.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=95,data=95.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=96,data=96.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=97,data=97.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=98,data=98.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=99,data=99.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=100,data=100.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=101,data=101.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=102,data=102.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=103,data=103.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=104,data=104.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=105,data=105.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=106,data=106.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=107,data=107.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=108,data=108.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=109,data=109.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=110,data=110.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=111,data=111.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=112,data=112.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=113,data=113.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=114,data=114.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=115,data=115.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=116,data=116.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=117,data=117.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=118,data=118.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=119,data=119.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=120,data=120.129,short_name='None',long_name='Experimental product',unit='-'
+info,table2=129,name=param,value=121,data=mx2t6,short_name='MX2T6',long_name='Maximum temperature at 2 metres',unit='K'
+info,table2=129,name=param,value=122,data=mn2t6,short_name='MN2T6',long_name='Minimum temperature at 2 metres',unit='K'
+info,table2=129,name=param,value=123,data=10fg6,short_name='10FG6',long_name='10 metre wind gust in the past 6 hours',unit='m s**-1'
+info,table2=129,name=param,value=125,data=125.129,short_name='None',long_name='Vertically integrated total energy',unit='J m**-2'
+info,table2=129,name=param,value=126,data=126.129,short_name='None',long_name='Generic parameter for sensitive area prediction',unit='Various'
+info,table2=129,name=param,value=127,data=at,short_name='AT',long_name='Atmospheric tide',unit='-'
+info,table2=129,name=param,value=128,data=bv,short_name='BV',long_name='Budget values',unit='-'
+info,table2=129,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=129,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=129,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=129,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=129,name=param,value=133,data=q,short_name='Q',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=129,name=param,value=134,data=sp,short_name='SP',long_name='Surface pressure',unit='Pa'
+info,table2=129,name=param,value=135,data=w,short_name='W',long_name='Vertical velocity',unit='Pa s**-1'
+info,table2=129,name=param,value=136,data=tcw,short_name='TCW',long_name='Total column water',unit='kg m**-2'
+info,table2=129,name=param,value=137,data=tcwv,short_name='TCWV',long_name='Total column water vapour',unit='kg m**-2'
+info,table2=129,name=param,value=138,data=vo,short_name='VO',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=129,name=param,value=139,data=stl1,short_name='STL1',long_name='Soil temperature level 1',unit='K'
+info,table2=129,name=param,value=140,data=swl1,short_name='SWL1',long_name='Soil wetness level 1',unit='m of water'
+info,table2=129,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water equivalent'
+info,table2=129,name=param,value=142,data=lsp,short_name='LSP',long_name='Stratiform precipitation (Large-scale precipitation)',unit='m'
+info,table2=129,name=param,value=143,data=cp,short_name='CP',long_name='Convective precipitation',unit='m'
+info,table2=129,name=param,value=144,data=sf,short_name='SF',long_name='Snowfall (convective + stratiform)',unit='m of water equivalent'
+info,table2=129,name=param,value=145,data=bld,short_name='BLD',long_name='Boundary layer dissipation',unit='W m**-2 s'
+info,table2=129,name=param,value=146,data=sshf,short_name='SSHF',long_name='Surface sensible heat flux',unit='W m**-2 s'
+info,table2=129,name=param,value=147,data=slhf,short_name='SLHF',long_name='Surface latent heat flux',unit='W m**-2 s'
+info,table2=129,name=param,value=148,data=chnk,short_name='CHNK',long_name='Charnock',unit='-'
+info,table2=129,name=param,value=149,data=snr,short_name='SNR',long_name='Surface net radiation',unit='W m**-2 s'
+info,table2=129,name=param,value=150,data=tnr,short_name='TNR',long_name='Top net radiation',unit='-'
+info,table2=129,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=129,name=param,value=152,data=lnsp,short_name='LNSP',long_name='Logarithm of surface pressure',unit='-'
+info,table2=129,name=param,value=153,data=swhr,short_name='SWHR',long_name='Short-wave heating rate',unit='K'
+info,table2=129,name=param,value=154,data=lwhr,short_name='LWHR',long_name='Long-wave heating rate',unit='K'
+info,table2=129,name=param,value=155,data=d,short_name='D',long_name='Divergence',unit='s**-1'
+info,table2=129,name=param,value=156,data=gh,short_name='GH',long_name='Height',unit='m'
+info,table2=129,name=param,value=157,data=r,short_name='R',long_name='Relative humidity',unit='%'
+info,table2=129,name=param,value=158,data=tsp,short_name='TSP',long_name='Tendency of surface pressure',unit='Pa s**-1'
+info,table2=129,name=param,value=159,data=blh,short_name='BLH',long_name='Boundary layer height',unit='m'
+info,table2=129,name=param,value=160,data=sdor,short_name='SDOR',long_name='Standard deviation of orography',unit='-'
+info,table2=129,name=param,value=161,data=isor,short_name='ISOR',long_name='Anisotropy of sub-gridscale orography',unit='-'
+info,table2=129,name=param,value=162,data=anor,short_name='ANOR',long_name='Angle of sub-gridscale orography',unit='rad'
+info,table2=129,name=param,value=163,data=slor,short_name='SLOR',long_name='Slope of sub-gridscale orography',unit='-'
+info,table2=129,name=param,value=164,data=tcc,short_name='TCC',long_name='Total cloud cover',unit='(0 - 1)'
+info,table2=129,name=param,value=165,data=10u,short_name='10U',long_name='10 metre U wind component',unit='m s**-1'
+info,table2=129,name=param,value=166,data=10v,short_name='10V',long_name='10 metre V wind component',unit='m s**-1'
+info,table2=129,name=param,value=167,data=2t,short_name='2T',long_name='2 metre temperature',unit='K'
+info,table2=129,name=param,value=168,data=2d,short_name='2D',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=129,name=param,value=169,data=ssrd,short_name='SSRD',long_name='Surface solar radiation downwards',unit='W m**-2 s'
+info,table2=129,name=param,value=170,data=stl2,short_name='STL2',long_name='Soil temperature level 2',unit='K'
+info,table2=129,name=param,value=171,data=swl2,short_name='SWL2',long_name='Soil wetness level 2',unit='m of water'
+info,table2=129,name=param,value=172,data=lsm,short_name='LSM',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=129,name=param,value=173,data=sr,short_name='SR',long_name='Surface roughness',unit='m'
+info,table2=129,name=param,value=174,data=al,short_name='AL',long_name='Albedo',unit='(0 - 1)'
+info,table2=129,name=param,value=175,data=strd,short_name='STRD',long_name='Surface thermal radiation downwards',unit='W m**-2 s'
+info,table2=129,name=param,value=176,data=ssr,short_name='SSR',long_name='Surface solar radiation',unit='W m**-2 s'
+info,table2=129,name=param,value=177,data=str,short_name='STR',long_name='Surface thermal radiation',unit='W m**-2 s'
+info,table2=129,name=param,value=178,data=tsr,short_name='TSR',long_name='Top solar radiation',unit='W m**-2 s'
+info,table2=129,name=param,value=179,data=ttr,short_name='TTR',long_name='Top thermal radiation',unit='W m**-2 s'
+info,table2=129,name=param,value=180,data=ewss,short_name='EWSS',long_name='East-West surface stress',unit='N m**-2 s'
+info,table2=129,name=param,value=181,data=nsss,short_name='NSSS',long_name='North-South surface stress',unit='N m**-2 s'
+info,table2=129,name=param,value=182,data=e,short_name='E',long_name='Evaporation',unit='m of water'
+info,table2=129,name=param,value=183,data=stl3,short_name='STL3',long_name='Soil temperature level 3',unit='K'
+info,table2=129,name=param,value=184,data=swl3,short_name='SWL3',long_name='Soil wetness level 3',unit='m of water'
+info,table2=129,name=param,value=185,data=ccc,short_name='CCC',long_name='Convective cloud cover',unit='(0 - 1)'
+info,table2=129,name=param,value=186,data=lcc,short_name='LCC',long_name='Low cloud cover',unit='(0 - 1)'
+info,table2=129,name=param,value=187,data=mcc,short_name='MCC',long_name='Medium cloud cover',unit='(0 - 1)'
+info,table2=129,name=param,value=188,data=hcc,short_name='HCC',long_name='High cloud cover',unit='(0 - 1)'
+info,table2=129,name=param,value=189,data=sund,short_name='SUND',long_name='Sunshine duration',unit='s'
+info,table2=129,name=param,value=190,data=ewov,short_name='EWOV',long_name='East-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=129,name=param,value=191,data=nsov,short_name='NSOV',long_name='North-South component of sub-gridscale orographic variance',unit='m**2'
+info,table2=129,name=param,value=192,data=nwov,short_name='NWOV',long_name='North-West/South-East component of sub-gridscale orographic variance',unit='m**2'
+info,table2=129,name=param,value=193,data=neov,short_name='NEOV',long_name='North-East/South-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=129,name=param,value=194,data=btmp,short_name='BTMP',long_name='Brightness temperature',unit='K'
+info,table2=129,name=param,value=195,data=lgws,short_name='LGWS',long_name='Latitudinal component of gravity wave stress',unit='N m**-2 s'
+info,table2=129,name=param,value=196,data=mgws,short_name='MGWS',long_name='Meridional component of gravity wave stress',unit='N m**-2 s'
+info,table2=129,name=param,value=197,data=gwd,short_name='GWD',long_name='Gravity wave dissipation',unit='W m**-2 s'
+info,table2=129,name=param,value=198,data=src,short_name='SRC',long_name='Skin reservoir content',unit='m of water'
+info,table2=129,name=param,value=199,data=veg,short_name='VEG',long_name='Vegetation fraction',unit='(0 - 1)'
+info,table2=129,name=param,value=200,data=vso,short_name='VSO',long_name='Variance of sub-gridscale orography',unit='m**2'
+info,table2=129,name=param,value=201,data=mx2t,short_name='MX2T',long_name='Maximum temperature at 2 metres since previous post-processing',unit='K'
+info,table2=129,name=param,value=202,data=mn2t,short_name='MN2T',long_name='Minimum temperature at 2 metres since previous post-processing',unit='K'
+info,table2=129,name=param,value=203,data=o3,short_name='O3',long_name='Ozone mass mixing ratio',unit='kg kg**-1'
+info,table2=129,name=param,value=204,data=paw,short_name='PAW',long_name='Precipitation analysis weights',unit='-'
+info,table2=129,name=param,value=205,data=ro,short_name='RO',long_name='Runoff',unit='m'
+info,table2=129,name=param,value=206,data=tco3,short_name='TCO3',long_name='Total column ozone',unit='kg m**-2'
+info,table2=129,name=param,value=207,data=10si,short_name='10SI',long_name='10 metre wind speed',unit='m s**-1'
+info,table2=129,name=param,value=208,data=tsrc,short_name='TSRC',long_name='Top net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=129,name=param,value=209,data=ttrc,short_name='TTRC',long_name='Top net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=129,name=param,value=210,data=ssrc,short_name='SSRC',long_name='Surface net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=129,name=param,value=211,data=strc,short_name='STRC',long_name='Surface net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=129,name=param,value=212,data=tisr,short_name='TISR',long_name='TOA incident solar radiation',unit='W m**-2 s'
+info,table2=129,name=param,value=214,data=dhr,short_name='DHR',long_name='Diabatic heating by radiation',unit='K'
+info,table2=129,name=param,value=215,data=dhvd,short_name='DHVD',long_name='Diabatic heating by vertical diffusion',unit='K'
+info,table2=129,name=param,value=216,data=dhcc,short_name='DHCC',long_name='Diabatic heating by cumulus convection',unit='K'
+info,table2=129,name=param,value=217,data=dhlc,short_name='DHLC',long_name='Diabatic heating large-scale condensation',unit='K'
+info,table2=129,name=param,value=218,data=vdzw,short_name='VDZW',long_name='Vertical diffusion of zonal wind',unit='m s**-1'
+info,table2=129,name=param,value=219,data=vdmw,short_name='VDMW',long_name='Vertical diffusion of meridional wind',unit='m s**-1'
+info,table2=129,name=param,value=220,data=ewgd,short_name='EWGD',long_name='East-West gravity wave drag tendency',unit='m s**-1'
+info,table2=129,name=param,value=221,data=nsgd,short_name='NSGD',long_name='North-South gravity wave drag tendency',unit='m s**-1'
+info,table2=129,name=param,value=222,data=ctzw,short_name='CTZW',long_name='Convective tendency of zonal wind',unit='m s**-1'
+info,table2=129,name=param,value=223,data=ctmw,short_name='CTMW',long_name='Convective tendency of meridional wind',unit='m s**-1'
+info,table2=129,name=param,value=224,data=vdh,short_name='VDH',long_name='Vertical diffusion of humidity',unit='kg kg**-1'
+info,table2=129,name=param,value=225,data=htcc,short_name='HTCC',long_name='Humidity tendency by cumulus convection',unit='kg kg**-1'
+info,table2=129,name=param,value=226,data=htlc,short_name='HTLC',long_name='Humidity tendency by large-scale condensation',unit='kg kg**-1'
+info,table2=129,name=param,value=227,data=crnh,short_name='CRNH',long_name='Change from removal of negative humidity',unit='kg kg**-1'
+info,table2=129,name=param,value=228,data=tp,short_name='TP',long_name='Total precipitation',unit='m'
+info,table2=129,name=param,value=229,data=iews,short_name='IEWS',long_name='Instantaneous X surface stress',unit='N m**-2'
+info,table2=129,name=param,value=230,data=inss,short_name='INSS',long_name='Instantaneous Y surface stress',unit='N m**-2'
+info,table2=129,name=param,value=231,data=ishf,short_name='ISHF',long_name='Instantaneous surface heat flux',unit='W m**-2'
+info,table2=129,name=param,value=232,data=ie,short_name='IE',long_name='Instantaneous moisture flux',unit='kg m**-2 s'
+info,table2=129,name=param,value=233,data=asq,short_name='ASQ',long_name='Apparent surface humidity',unit='kg kg**-1'
+info,table2=129,name=param,value=234,data=lsrh,short_name='LSRH',long_name='Logarithm of surface roughness length for heat',unit='-'
+info,table2=129,name=param,value=235,data=skt,short_name='SKT',long_name='Skin temperature',unit='K'
+info,table2=129,name=param,value=236,data=stl4,short_name='STL4',long_name='Soil temperature level 4',unit='K'
+info,table2=129,name=param,value=237,data=swl4,short_name='SWL4',long_name='Soil wetness level 4',unit='m'
+info,table2=129,name=param,value=238,data=tsn,short_name='TSN',long_name='Temperature of snow layer',unit='K'
+info,table2=129,name=param,value=239,data=csf,short_name='CSF',long_name='Convective snowfall',unit='m of water equivalent'
+info,table2=129,name=param,value=240,data=lsf,short_name='LSF',long_name='Large-scale snowfall',unit='m of water equivalent'
+info,table2=129,name=param,value=241,data=acf,short_name='ACF',long_name='Accumulated cloud fraction tendency',unit='(-1 to 1)'
+info,table2=129,name=param,value=242,data=alw,short_name='ALW',long_name='Accumulated liquid water tendency',unit='(-1 to 1)'
+info,table2=129,name=param,value=243,data=fal,short_name='FAL',long_name='Forecast albedo',unit='(0 - 1)'
+info,table2=129,name=param,value=244,data=fsr,short_name='FSR',long_name='Forecast surface roughness',unit='m'
+info,table2=129,name=param,value=245,data=flsr,short_name='FLSR',long_name='Forecast logarithm of surface roughness for heat',unit='-'
+info,table2=129,name=param,value=246,data=clwc,short_name='CLWC',long_name='Cloud liquid water content',unit='kg kg**-1'
+info,table2=129,name=param,value=247,data=ciwc,short_name='CIWC',long_name='Cloud ice water content',unit='kg kg**-1'
+info,table2=129,name=param,value=248,data=cc,short_name='CC',long_name='Cloud cover',unit='(0 - 1)'
+info,table2=129,name=param,value=249,data=aiw,short_name='AIW',long_name='Accumulated ice water tendency',unit='(-1 to 1)'
+info,table2=129,name=param,value=250,data=ice,short_name='ICE',long_name='Ice age',unit='(0 - 1)'
+info,table2=129,name=param,value=251,data=atte,short_name='ATTE',long_name='Adiabatic tendency of temperature',unit='K'
+info,table2=129,name=param,value=252,data=athe,short_name='ATHE',long_name='Adiabatic tendency of humidity',unit='kg kg**-1'
+info,table2=129,name=param,value=253,data=atze,short_name='ATZE',long_name='Adiabatic tendency of zonal wind',unit='m s**-1'
+info,table2=129,name=param,value=254,data=atmw,short_name='ATMW',long_name='Adiabatic tendency of meridional wind',unit='m s**-1'
+info,table2=129,name=param,value=255,data=255.129,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=130,name=param,value=208,data=tsru,short_name='TSRU',long_name='Top solar radiation upward',unit='W m**-2'
+info,table2=130,name=param,value=209,data=ttru,short_name='TTRU',long_name='Top thermal radiation upward',unit='W m**-2'
+info,table2=130,name=param,value=210,data=tsuc,short_name='TSUC',long_name='Top solar radiation upward, clear sky',unit='W m**-2'
+info,table2=130,name=param,value=211,data=ttuc,short_name='TTUC',long_name='Top thermal radiation upward, clear sky',unit='W m**-2'
+info,table2=130,name=param,value=212,data=clw,short_name='CLW',long_name='Cloud liquid water',unit='kg kg**-1'
+info,table2=130,name=param,value=213,data=cf,short_name='CF',long_name='Cloud fraction',unit='(0 - 1)'
+info,table2=130,name=param,value=214,data=dhr,short_name='DHR',long_name='Diabatic heating by radiation',unit='K s**-1'
+info,table2=130,name=param,value=215,data=dhvd,short_name='DHVD',long_name='Diabatic heating by vertical diffusion',unit='K s**-1'
+info,table2=130,name=param,value=216,data=dhcc,short_name='DHCC',long_name='Diabatic heating by cumulus convection',unit='K s**-1'
+info,table2=130,name=param,value=217,data=dhlc,short_name='DHLC',long_name='Diabatic heating by large-scale condensation',unit='K s**-1'
+info,table2=130,name=param,value=218,data=vdzw,short_name='VDZW',long_name='Vertical diffusion of zonal wind',unit='m**2 s**-3'
+info,table2=130,name=param,value=219,data=vdmw,short_name='VDMW',long_name='Vertical diffusion of meridional wind',unit='m**2 s**-3'
+info,table2=130,name=param,value=220,data=ewgd,short_name='EWGD',long_name='East-West gravity wave drag',unit='m**2 s**-3'
+info,table2=130,name=param,value=221,data=nsgd,short_name='NSGD',long_name='North-South gravity wave drag',unit='m**2 s**-3'
+info,table2=130,name=param,value=222,data=ctzw,short_name='CTZW',long_name='Convective tendency of zonal wind',unit='m**2 s**-3'
+info,table2=130,name=param,value=223,data=ctmw,short_name='CTMW',long_name='Convective tendency of meridional wind',unit='m**2 s**-3'
+info,table2=130,name=param,value=224,data=vdh,short_name='VDH',long_name='Vertical diffusion of humidity',unit='kg kg**-1 s**-1'
+info,table2=130,name=param,value=225,data=htcc,short_name='HTCC',long_name='Humidity tendency by cumulus convection',unit='kg kg**-1 s**-1'
+info,table2=130,name=param,value=226,data=htlc,short_name='HTLC',long_name='Humidity tendency by large-scale condensation',unit='kg kg**-1 s**-1'
+info,table2=130,name=param,value=227,data=crnh,short_name='CRNH',long_name='Change from removal of negative humidity',unit='kg kg**-1 s**-1'
+info,table2=130,name=param,value=228,data=att,short_name='ATT',long_name='Adiabatic tendency of temperature',unit='K s**-1'
+info,table2=130,name=param,value=229,data=ath,short_name='ATH',long_name='Adiabatic tendency of humidity',unit='kg kg**-1 s**-1'
+info,table2=130,name=param,value=230,data=atzw,short_name='ATZW',long_name='Adiabatic tendency of zonal wind',unit='m**2 s**-3'
+info,table2=130,name=param,value=231,data=atmwax,short_name='ATMWAX',long_name='Adiabatic tendency of meridional wind',unit='m**2 s**-3'
+info,table2=130,name=param,value=232,data=mvv,short_name='MVV',long_name='Mean vertical velocity',unit='Pa s**-1'
+info,table2=130,name=param,value=255,data=255.130,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=131,name=param,value=1,data=2tag2,short_name='2TAG2',long_name='2m temperature anomaly of at least +2K',unit='%'
+info,table2=131,name=param,value=2,data=2tag1,short_name='2TAG1',long_name='2m temperature anomaly of at least +1K',unit='%'
+info,table2=131,name=param,value=3,data=2tag0,short_name='2TAG0',long_name='2m temperature anomaly of at least 0K',unit='%'
+info,table2=131,name=param,value=4,data=2talm1,short_name='2TALM1',long_name='2m temperature anomaly of at most -1K',unit='%'
+info,table2=131,name=param,value=5,data=2talm2,short_name='2TALM2',long_name='2m temperature anomaly of at most -2K',unit='%'
+info,table2=131,name=param,value=6,data=tpag20,short_name='TPAG20',long_name='Total precipitation anomaly of at least 20 mm',unit='%'
+info,table2=131,name=param,value=7,data=tpag10,short_name='TPAG10',long_name='Total precipitation anomaly of at least 10 mm',unit='%'
+info,table2=131,name=param,value=8,data=tpag0,short_name='TPAG0',long_name='Total precipitation anomaly of at least 0 mm',unit='%'
+info,table2=131,name=param,value=9,data=stag0,short_name='STAG0',long_name='Surface temperature anomaly of at least 0K',unit='%'
+info,table2=131,name=param,value=10,data=mslag0,short_name='MSLAG0',long_name='Mean sea level pressure anomaly of at least 0 Pa',unit='%'
+info,table2=131,name=param,value=15,data=h0dip,short_name='H0DIP',long_name='Heigth of 0 degree isotherm probability',unit='percentage'
+info,table2=131,name=param,value=16,data=hslp,short_name='HSLP',long_name='Heigth of snowfall limit probability',unit='percentage'
+info,table2=131,name=param,value=17,data=saip,short_name='SAIP',long_name='Showalter index probability',unit='percentage'
+info,table2=131,name=param,value=18,data=whip,short_name='WHIP',long_name='Whiting index probability',unit='percentage'
+info,table2=131,name=param,value=20,data=talm2,short_name='TALM2',long_name='Temperature anomaly less than -2 K',unit='%'
+info,table2=131,name=param,value=21,data=tag2,short_name='TAG2',long_name='Temperature anomaly of at least +2 K',unit='%'
+info,table2=131,name=param,value=22,data=talm8,short_name='TALM8',long_name='Temperature anomaly less than -8 K',unit='%'
+info,table2=131,name=param,value=23,data=talm4,short_name='TALM4',long_name='Temperature anomaly less than -4 K',unit='%'
+info,table2=131,name=param,value=24,data=tag4,short_name='TAG4',long_name='Temperature anomaly greater than +4 K',unit='%'
+info,table2=131,name=param,value=25,data=tag8,short_name='TAG8',long_name='Temperature anomaly greater than +8 K',unit='%'
+info,table2=131,name=param,value=49,data=10gp,short_name='10GP',long_name='10 metre wind gust probability',unit='percentage'
+info,table2=131,name=param,value=59,data=capep,short_name='CAPEP',long_name='Convective available potential energy probability',unit='percentage'
+info,table2=131,name=param,value=60,data=tpg1,short_name='TPG1',long_name='Total precipitation of at least 1 mm',unit='%'
+info,table2=131,name=param,value=61,data=tpg5,short_name='TPG5',long_name='Total precipitation of at least 5 mm',unit='%'
+info,table2=131,name=param,value=62,data=tpg10,short_name='TPG10',long_name='Total precipitation of at least 10 mm',unit='%'
+info,table2=131,name=param,value=63,data=tpg20,short_name='TPG20',long_name='Total precipitation of at least 20 mm',unit='%'
+info,table2=131,name=param,value=64,data=tpl01,short_name='TPL01',long_name='Total precipitation less than 0.1 mm',unit='%'
+info,table2=131,name=param,value=65,data=tprl1,short_name='TPRL1',long_name='Total precipitation rate less than 1 mm/day',unit='%'
+info,table2=131,name=param,value=66,data=tprg3,short_name='TPRG3',long_name='Total precipitation rate of at least 3 mm/day',unit='%'
+info,table2=131,name=param,value=67,data=tprg5,short_name='TPRG5',long_name='Total precipitation rate of at least 5 mm/day',unit='%'
+info,table2=131,name=param,value=68,data=10spg10,short_name='10SPG10',long_name='10 metre Wind speed of at least 10 m/s',unit='%'
+info,table2=131,name=param,value=69,data=10spg15,short_name='10SPG15',long_name='10 metre Wind speed of at least 15 m/s',unit='%'
+info,table2=131,name=param,value=70,data=10fgg15,short_name='10FGG15',long_name='10 metre Wind gust of at least 15 m/s',unit='%'
+info,table2=131,name=param,value=71,data=10fgg20,short_name='10FGG20',long_name='10 metre Wind gust of at least 20 m/s',unit='%'
+info,table2=131,name=param,value=72,data=10fgg25,short_name='10FGG25',long_name='10 metre Wind gust of at least 25 m/s',unit='%'
+info,table2=131,name=param,value=73,data=2tl273,short_name='2TL273',long_name='2 metre temperature less than 273.15 K',unit='%'
+info,table2=131,name=param,value=74,data=swhg2,short_name='SWHG2',long_name='Significant wave height of at least 2 m',unit='%'
+info,table2=131,name=param,value=75,data=swhg4,short_name='SWHG4',long_name='Significant wave height of at least 4 m',unit='%'
+info,table2=131,name=param,value=76,data=swhg6,short_name='SWHG6',long_name='Significant wave height of at least 6 m',unit='%'
+info,table2=131,name=param,value=77,data=swhg8,short_name='SWHG8',long_name='Significant wave height of at least 8 m',unit='%'
+info,table2=131,name=param,value=78,data=mwpg8,short_name='MWPG8',long_name='Mean wave period of at least 8 s',unit='%'
+info,table2=131,name=param,value=79,data=mwpg10,short_name='MWPG10',long_name='Mean wave period of at least 10 s',unit='%'
+info,table2=131,name=param,value=80,data=mwpg12,short_name='MWPG12',long_name='Mean wave period of at least 12 s',unit='%'
+info,table2=131,name=param,value=81,data=mwpg15,short_name='MWPG15',long_name='Mean wave period of at least 15 s',unit='%'
+info,table2=131,name=param,value=82,data=tpg40,short_name='TPG40',long_name='Total precipitation of at least 40 mm',unit='%'
+info,table2=131,name=param,value=83,data=tpg60,short_name='TPG60',long_name='Total precipitation of at least 60 mm',unit='%'
+info,table2=131,name=param,value=84,data=tpg80,short_name='TPG80',long_name='Total precipitation of at least 80 mm',unit='%'
+info,table2=131,name=param,value=85,data=tpg100,short_name='TPG100',long_name='Total precipitation of at least 100 mm',unit='%'
+info,table2=131,name=param,value=86,data=tpg150,short_name='TPG150',long_name='Total precipitation of at least 150 mm',unit='%'
+info,table2=131,name=param,value=87,data=tpg200,short_name='TPG200',long_name='Total precipitation of at least 200 mm',unit='%'
+info,table2=131,name=param,value=88,data=tpg300,short_name='TPG300',long_name='Total precipitation of at least 300 mm',unit='%'
+info,table2=131,name=param,value=129,data=zp,short_name='ZP',long_name='Geopotential probability',unit='%'
+info,table2=131,name=param,value=130,data=tap,short_name='TAP',long_name='Temperature anomaly probability',unit='percentage'
+info,table2=131,name=param,value=144,data=sfp,short_name='SFP',long_name='Snowfall (convective + stratiform) probability',unit='percentage'
+info,table2=131,name=param,value=164,data=tccp,short_name='TCCP',long_name='Total cloud cover probability',unit='percentage'
+info,table2=131,name=param,value=165,data=10sp,short_name='10SP',long_name='10 metre speed probability',unit='percentage'
+info,table2=131,name=param,value=167,data=2tp,short_name='2TP',long_name='2 metre temperature probability',unit='percentage'
+info,table2=131,name=param,value=201,data=mx2tp,short_name='MX2TP',long_name='Maximum 2 metre temperature probability',unit='percentage'
+info,table2=131,name=param,value=202,data=mn2tp,short_name='MN2TP',long_name='Minimum 2 metre temperature probability',unit='percentage'
+info,table2=131,name=param,value=228,data=tpp,short_name='TPP',long_name='Total precipitation probability',unit='percentage'
+info,table2=131,name=param,value=229,data=swhp,short_name='SWHP',long_name='Significant wave height probability',unit='percentage'
+info,table2=131,name=param,value=232,data=mwpp,short_name='MWPP',long_name='Mean wave period probability',unit='percentage'
+info,table2=131,name=param,value=255,data=255.131,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=132,name=param,value=49,data=10fgi,short_name='10FGI',long_name='10 metre wind gust index',unit='(-1 to 1)'
+info,table2=132,name=param,value=144,data=sfi,short_name='SFI',long_name='Snowfall index',unit='(-1 to 1)'
+info,table2=132,name=param,value=165,data=10wsi,short_name='10WSI',long_name='10 metre speed index',unit='(-1 to 1)'
+info,table2=132,name=param,value=167,data=2ti,short_name='2TI',long_name='2 metre temperature index',unit='(-1 to 1)'
+info,table2=132,name=param,value=200,data=maxswhi,short_name='MAXSWHI',long_name='Maximum of significant wave height index',unit='(-1 to 1)'
+info,table2=132,name=param,value=201,data=mx2ti,short_name='MX2TI',long_name='Maximum temperature at 2 metres index',unit='(-1 to 1)'
+info,table2=132,name=param,value=202,data=mn2ti,short_name='MN2TI',long_name='Minimum temperature at 2 metres index',unit='(-1 to 1)'
+info,table2=132,name=param,value=228,data=tpi,short_name='TPI',long_name='Total precipitation index',unit='(-1 to 1)'
+info,table2=132,name=param,value=255,data=255.132,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=133,name=param,value=1,data=2tplm10,short_name='2TPLM10',long_name='2m temperature probability less than -10 C',unit='%'
+info,table2=133,name=param,value=2,data=2tplm5,short_name='2TPLM5',long_name='2m temperature probability less than -5 C',unit='%'
+info,table2=133,name=param,value=3,data=2tpl0,short_name='2TPL0',long_name='2m temperature probability less than 0 C',unit='%'
+info,table2=133,name=param,value=4,data=2tpl5,short_name='2TPL5',long_name='2m temperature probability less than 5 C',unit='%'
+info,table2=133,name=param,value=5,data=2tpl10,short_name='2TPL10',long_name='2m temperature probability less than 10 C',unit='%'
+info,table2=133,name=param,value=6,data=2tpg25,short_name='2TPG25',long_name='2m temperature probability greater than 25 C',unit='%'
+info,table2=133,name=param,value=7,data=2tpg30,short_name='2TPG30',long_name='2m temperature probability greater than 30 C',unit='%'
+info,table2=133,name=param,value=8,data=2tpg35,short_name='2TPG35',long_name='2m temperature probability greater than 35 C',unit='%'
+info,table2=133,name=param,value=9,data=2tpg40,short_name='2TPG40',long_name='2m temperature probability greater than 40 C',unit='%'
+info,table2=133,name=param,value=10,data=2tpg45,short_name='2TPG45',long_name='2m temperature probability greater than 45 C',unit='%'
+info,table2=133,name=param,value=11,data=mn2tplm10,short_name='MN2TPLM10',long_name='Minimum 2 metre temperature probability less than -10 C',unit='%'
+info,table2=133,name=param,value=12,data=mn2tplm5,short_name='MN2TPLM5',long_name='Minimum 2 metre temperature probability less than -5 C',unit='%'
+info,table2=133,name=param,value=13,data=mn2tpl0,short_name='MN2TPL0',long_name='Minimum 2 metre temperature probability less than 0 C',unit='%'
+info,table2=133,name=param,value=14,data=mn2tpl5,short_name='MN2TPL5',long_name='Minimum 2 metre temperature probability less than 5 C',unit='%'
+info,table2=133,name=param,value=15,data=mn2tpl10,short_name='MN2TPL10',long_name='Minimum 2 metre temperature probability less than 10 C',unit='%'
+info,table2=133,name=param,value=16,data=mx2tpg25,short_name='MX2TPG25',long_name='Maximum 2 metre temperature probability greater than 25 C',unit='%'
+info,table2=133,name=param,value=17,data=mx2tpg30,short_name='MX2TPG30',long_name='Maximum 2 metre temperature probability greater than 30 C',unit='%'
+info,table2=133,name=param,value=18,data=mx2tpg35,short_name='MX2TPG35',long_name='Maximum 2 metre temperature probability greater than 35 C',unit='%'
+info,table2=133,name=param,value=19,data=mx2tpg40,short_name='MX2TPG40',long_name='Maximum 2 metre temperature probability greater than 40 C',unit='%'
+info,table2=133,name=param,value=20,data=mx2tpg45,short_name='MX2TPG45',long_name='Maximum 2 metre temperature probability greater than 45 C',unit='%'
+info,table2=133,name=param,value=21,data=10spg10,short_name='10SPG10',long_name='10 metre wind speed probability of at least 10 m/s',unit='%'
+info,table2=133,name=param,value=22,data=10spg15,short_name='10SPG15',long_name='10 metre wind speed probability of at least 15 m/s',unit='%'
+info,table2=133,name=param,value=23,data=10spg20,short_name='10SPG20',long_name='10 metre wind speed probability of at least 20 m/s',unit='%'
+info,table2=133,name=param,value=24,data=10spg35,short_name='10SPG35',long_name='10 metre wind speed probability of at least 35 m/s',unit='%'
+info,table2=133,name=param,value=25,data=10spg50,short_name='10SPG50',long_name='10 metre wind speed probability of at least 50 m/s',unit='%'
+info,table2=133,name=param,value=26,data=10gpg20,short_name='10GPG20',long_name='10 metre wind gust probability of at least 20 m/s',unit='%'
+info,table2=133,name=param,value=27,data=10gpg35,short_name='10GPG35',long_name='10 metre wind gust probability of at least 35 m/s',unit='%'
+info,table2=133,name=param,value=28,data=10gpg50,short_name='10GPG50',long_name='10 metre wind gust probability of at least 50 m/s',unit='%'
+info,table2=133,name=param,value=29,data=10gpg75,short_name='10GPG75',long_name='10 metre wind gust probability of at least 75 m/s',unit='%'
+info,table2=133,name=param,value=30,data=10gpg100,short_name='10GPG100',long_name='10 metre wind gust probability of at least 100 m/s',unit='%'
+info,table2=133,name=param,value=31,data=tppg1,short_name='TPPG1',long_name='Total precipitation probability of at least 1 mm',unit='%'
+info,table2=133,name=param,value=32,data=tppg5,short_name='TPPG5',long_name='Total precipitation probability of at least 5 mm',unit='%'
+info,table2=133,name=param,value=33,data=tppg10,short_name='TPPG10',long_name='Total precipitation probability of at least 10 mm',unit='%'
+info,table2=133,name=param,value=34,data=tppg20,short_name='TPPG20',long_name='Total precipitation probability of at least 20 mm',unit='%'
+info,table2=133,name=param,value=35,data=tppg40,short_name='TPPG40',long_name='Total precipitation probability of at least 40 mm',unit='%'
+info,table2=133,name=param,value=36,data=tppg60,short_name='TPPG60',long_name='Total precipitation probability of at least 60 mm',unit='%'
+info,table2=133,name=param,value=37,data=tppg80,short_name='TPPG80',long_name='Total precipitation probability of at least 80 mm',unit='%'
+info,table2=133,name=param,value=38,data=tppg100,short_name='TPPG100',long_name='Total precipitation probability of at least 100 mm',unit='%'
+info,table2=133,name=param,value=39,data=tppg150,short_name='TPPG150',long_name='Total precipitation probability of at least 150 mm',unit='%'
+info,table2=133,name=param,value=40,data=tppg200,short_name='TPPG200',long_name='Total precipitation probability of at least 200 mm',unit='%'
+info,table2=133,name=param,value=41,data=tppg300,short_name='TPPG300',long_name='Total precipitation probability of at least 300 mm',unit='%'
+info,table2=133,name=param,value=42,data=sfpg1,short_name='SFPG1',long_name='Snowfall probability of at least 1 mm',unit='%'
+info,table2=133,name=param,value=43,data=sfpg5,short_name='SFPG5',long_name='Snowfall probability of at least 5 mm',unit='%'
+info,table2=133,name=param,value=44,data=sfpg10,short_name='SFPG10',long_name='Snowfall probability of at least 10 mm',unit='%'
+info,table2=133,name=param,value=45,data=sfpg20,short_name='SFPG20',long_name='Snowfall probability of at least 20 mm',unit='%'
+info,table2=133,name=param,value=46,data=sfpg40,short_name='SFPG40',long_name='Snowfall probability of at least 40 mm',unit='%'
+info,table2=133,name=param,value=47,data=sfpg60,short_name='SFPG60',long_name='Snowfall probability of at least 60 mm',unit='%'
+info,table2=133,name=param,value=48,data=sfpg80,short_name='SFPG80',long_name='Snowfall probability of at least 80 mm',unit='%'
+info,table2=133,name=param,value=49,data=sfpg100,short_name='SFPG100',long_name='Snowfall probability of at least 100 mm',unit='%'
+info,table2=133,name=param,value=50,data=sfpg150,short_name='SFPG150',long_name='Snowfall probability of at least 150 mm',unit='%'
+info,table2=133,name=param,value=51,data=sfpg200,short_name='SFPG200',long_name='Snowfall probability of at least 200 mm',unit='%'
+info,table2=133,name=param,value=52,data=sfpg300,short_name='SFPG300',long_name='Snowfall probability of at least 300 mm',unit='%'
+info,table2=133,name=param,value=53,data=tccpg10,short_name='TCCPG10',long_name='Total Cloud Cover probability greater than 10%',unit='%'
+info,table2=133,name=param,value=54,data=tccpg20,short_name='TCCPG20',long_name='Total Cloud Cover probability greater than 20%',unit='%'
+info,table2=133,name=param,value=55,data=tccpg30,short_name='TCCPG30',long_name='Total Cloud Cover probability greater than 30%',unit='%'
+info,table2=133,name=param,value=56,data=tccpg40,short_name='TCCPG40',long_name='Total Cloud Cover probability greater than 40%',unit='%'
+info,table2=133,name=param,value=57,data=tccpg50,short_name='TCCPG50',long_name='Total Cloud Cover probability greater than 50%',unit='%'
+info,table2=133,name=param,value=58,data=tccpg60,short_name='TCCPG60',long_name='Total Cloud Cover probability greater than 60%',unit='%'
+info,table2=133,name=param,value=59,data=tccpg70,short_name='TCCPG70',long_name='Total Cloud Cover probability greater than 70%',unit='%'
+info,table2=133,name=param,value=60,data=tccpg80,short_name='TCCPG80',long_name='Total Cloud Cover probability greater than 80%',unit='%'
+info,table2=133,name=param,value=61,data=tccpg90,short_name='TCCPG90',long_name='Total Cloud Cover probability greater than 90%',unit='%'
+info,table2=133,name=param,value=62,data=tccpg99,short_name='TCCPG99',long_name='Total Cloud Cover probability greater than 99%',unit='%'
+info,table2=133,name=param,value=63,data=hccpg10,short_name='HCCPG10',long_name='High Cloud Cover probability greater than 10%',unit='%'
+info,table2=133,name=param,value=64,data=hccpg20,short_name='HCCPG20',long_name='High Cloud Cover probability greater than 20%',unit='%'
+info,table2=133,name=param,value=65,data=hccpg30,short_name='HCCPG30',long_name='High Cloud Cover probability greater than 30%',unit='%'
+info,table2=133,name=param,value=66,data=hccpg40,short_name='HCCPG40',long_name='High Cloud Cover probability greater than 40%',unit='%'
+info,table2=133,name=param,value=67,data=hccpg50,short_name='HCCPG50',long_name='High Cloud Cover probability greater than 50%',unit='%'
+info,table2=133,name=param,value=68,data=hccpg60,short_name='HCCPG60',long_name='High Cloud Cover probability greater than 60%',unit='%'
+info,table2=133,name=param,value=69,data=hccpg70,short_name='HCCPG70',long_name='High Cloud Cover probability greater than 70%',unit='%'
+info,table2=133,name=param,value=70,data=hccpg80,short_name='HCCPG80',long_name='High Cloud Cover probability greater than 80%',unit='%'
+info,table2=133,name=param,value=71,data=hccpg90,short_name='HCCPG90',long_name='High Cloud Cover probability greater than 90%',unit='%'
+info,table2=133,name=param,value=72,data=hccpg99,short_name='HCCPG99',long_name='High Cloud Cover probability greater than 99%',unit='%'
+info,table2=133,name=param,value=73,data=mccpg10,short_name='MCCPG10',long_name='Medium Cloud Cover probability greater than 10%',unit='%'
+info,table2=133,name=param,value=74,data=mccpg20,short_name='MCCPG20',long_name='Medium Cloud Cover probability greater than 20%',unit='%'
+info,table2=133,name=param,value=75,data=mccpg30,short_name='MCCPG30',long_name='Medium Cloud Cover probability greater than 30%',unit='%'
+info,table2=133,name=param,value=76,data=mccpg40,short_name='MCCPG40',long_name='Medium Cloud Cover probability greater than 40%',unit='%'
+info,table2=133,name=param,value=77,data=mccpg50,short_name='MCCPG50',long_name='Medium Cloud Cover probability greater than 50%',unit='%'
+info,table2=133,name=param,value=78,data=mccpg60,short_name='MCCPG60',long_name='Medium Cloud Cover probability greater than 60%',unit='%'
+info,table2=133,name=param,value=79,data=mccpg70,short_name='MCCPG70',long_name='Medium Cloud Cover probability greater than 70%',unit='%'
+info,table2=133,name=param,value=80,data=mccpg80,short_name='MCCPG80',long_name='Medium Cloud Cover probability greater than 80%',unit='%'
+info,table2=133,name=param,value=81,data=mccpg90,short_name='MCCPG90',long_name='Medium Cloud Cover probability greater than 90%',unit='%'
+info,table2=133,name=param,value=82,data=mccpg99,short_name='MCCPG99',long_name='Medium Cloud Cover probability greater than 99%',unit='%'
+info,table2=133,name=param,value=83,data=lccpg10,short_name='LCCPG10',long_name='Low Cloud Cover probability greater than 10%',unit='%'
+info,table2=133,name=param,value=84,data=lccpg20,short_name='LCCPG20',long_name='Low Cloud Cover probability greater than 20%',unit='%'
+info,table2=133,name=param,value=85,data=lccpg30,short_name='LCCPG30',long_name='Low Cloud Cover probability greater than 30%',unit='%'
+info,table2=133,name=param,value=86,data=lccpg40,short_name='LCCPG40',long_name='Low Cloud Cover probability greater than 40%',unit='%'
+info,table2=133,name=param,value=87,data=lccpg50,short_name='LCCPG50',long_name='Low Cloud Cover probability greater than 50%',unit='%'
+info,table2=133,name=param,value=88,data=lccpg60,short_name='LCCPG60',long_name='Low Cloud Cover probability greater than 60%',unit='%'
+info,table2=133,name=param,value=89,data=lccpg70,short_name='LCCPG70',long_name='Low Cloud Cover probability greater than 70%',unit='%'
+info,table2=133,name=param,value=90,data=lccpg80,short_name='LCCPG80',long_name='Low Cloud Cover probability greater than 80%',unit='%'
+info,table2=133,name=param,value=91,data=lccpg90,short_name='LCCPG90',long_name='Low Cloud Cover probability greater than 90%',unit='%'
+info,table2=133,name=param,value=92,data=lccpg99,short_name='LCCPG99',long_name='Low Cloud Cover probability greater than 99%',unit='%'
+info,table2=140,name=param,value=200,data=maxswh,short_name='MAXSWH',long_name='Maximum of significant wave height',unit='m'
+info,table2=140,name=param,value=217,data=tmax,short_name='TMAX',long_name='Period corresponding to maximum individual wave height',unit='s'
+info,table2=140,name=param,value=218,data=hmax,short_name='HMAX',long_name='Maximum individual wave height',unit='m'
+info,table2=140,name=param,value=219,data=wmb,short_name='WMB',long_name='Model bathymetry',unit='m'
+info,table2=140,name=param,value=220,data=mp1,short_name='MP1',long_name='Mean wave period based on first moment',unit='s'
+info,table2=140,name=param,value=221,data=mp2,short_name='MP2',long_name='Mean wave period based on second moment',unit='s'
+info,table2=140,name=param,value=222,data=wdw,short_name='WDW',long_name='Wave spectral directional width',unit='-'
+info,table2=140,name=param,value=223,data=p1ww,short_name='P1WW',long_name='Mean wave period based on first moment for wind waves',unit='s'
+info,table2=140,name=param,value=224,data=p2ww,short_name='P2WW',long_name='Mean wave period based on second moment for wind waves',unit='s'
+info,table2=140,name=param,value=225,data=dwww,short_name='DWWW',long_name='Wave spectral directional width for wind waves',unit='-'
+info,table2=140,name=param,value=226,data=p1ps,short_name='P1PS',long_name='Mean wave period based on first moment for swell',unit='s'
+info,table2=140,name=param,value=227,data=p2ps,short_name='P2PS',long_name='Mean wave period based on second moment for swell',unit='s'
+info,table2=140,name=param,value=228,data=dwps,short_name='DWPS',long_name='Wave spectral directional width for swell',unit='-'
+info,table2=140,name=param,value=229,data=swh,short_name='SWH',long_name='Significant wave height',unit='m'
+info,table2=140,name=param,value=230,data=mwd,short_name='MWD',long_name='Mean wave direction',unit='degrees'
+info,table2=140,name=param,value=231,data=pp1d,short_name='PP1D',long_name='Peak period of 1D spectra',unit='s'
+info,table2=140,name=param,value=232,data=mwp,short_name='MWP',long_name='Mean wave period',unit='s'
+info,table2=140,name=param,value=233,data=cdww,short_name='CDWW',long_name='Coefficient of drag with waves',unit='-'
+info,table2=140,name=param,value=234,data=shww,short_name='SHWW',long_name='Significant height of wind waves',unit='m'
+info,table2=140,name=param,value=235,data=mdww,short_name='MDWW',long_name='Mean direction of wind waves',unit='degrees'
+info,table2=140,name=param,value=236,data=mpww,short_name='MPWW',long_name='Mean period of wind waves',unit='s'
+info,table2=140,name=param,value=237,data=shts,short_name='SHTS',long_name='Significant height of total swell',unit='m'
+info,table2=140,name=param,value=238,data=mdts,short_name='MDTS',long_name='Mean direction of total swell',unit='degrees'
+info,table2=140,name=param,value=239,data=mpts,short_name='MPTS',long_name='Mean period of total swell',unit='s'
+info,table2=140,name=param,value=240,data=sdhs,short_name='SDHS',long_name='Standard deviation wave height',unit='m'
+info,table2=140,name=param,value=241,data=mu10,short_name='MU10',long_name='Mean of 10 metre wind speed',unit='m s**-1'
+info,table2=140,name=param,value=242,data=mdwi,short_name='MDWI',long_name='Mean wind direction',unit='degrees'
+info,table2=140,name=param,value=243,data=sdu,short_name='SDU',long_name='Standard deviation of 10 metre wind speed',unit='m s**-1'
+info,table2=140,name=param,value=244,data=msqs,short_name='MSQS',long_name='Mean square slope of waves',unit='dimensionless'
+info,table2=140,name=param,value=245,data=wind,short_name='WIND',long_name='10 metre wind speed',unit='m s**-1'
+info,table2=140,name=param,value=246,data=awh,short_name='AWH',long_name='Altimeter wave height',unit='m'
+info,table2=140,name=param,value=247,data=acwh,short_name='ACWH',long_name='Altimeter corrected wave height',unit='m'
+info,table2=140,name=param,value=248,data=arrc,short_name='ARRC',long_name='Altimeter range relative correction',unit='-'
+info,table2=140,name=param,value=249,data=dwi,short_name='DWI',long_name='10 metre wind direction',unit='degrees'
+info,table2=140,name=param,value=250,data=2dsp,short_name='2DSP',long_name='2D wave spectra (multiple)',unit='m**2 s radian**-1'
+info,table2=140,name=param,value=251,data=2dfd,short_name='2DFD',long_name='2D wave spectra (single)',unit='m**2 s radian**-1'
+info,table2=140,name=param,value=252,data=wsk,short_name='WSK',long_name='Wave spectral kurtosis',unit='-'
+info,table2=140,name=param,value=253,data=bfi,short_name='BFI',long_name='Benjamin-Feir index',unit='-'
+info,table2=140,name=param,value=254,data=wsp,short_name='WSP',long_name='Wave spectral peakedness',unit='s**-1'
+info,table2=140,name=param,value=255,data=255.140,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=150,name=param,value=129,data=129.150,short_name='None',long_name='Ocean potential temperature',unit='deg C'
+info,table2=150,name=param,value=130,data=130.150,short_name='None',long_name='Ocean salinity',unit='psu'
+info,table2=150,name=param,value=131,data=131.150,short_name='None',long_name='Ocean potential density',unit='kg m**-3 -1000'
+info,table2=150,name=param,value=133,data=133.150,short_name='None',long_name='Ocean U velocity',unit='m s**-1'
+info,table2=150,name=param,value=134,data=134.150,short_name='None',long_name='Ocean V velocity',unit='m s**-1'
+info,table2=150,name=param,value=135,data=135.150,short_name='None',long_name='Ocean W velocity',unit='m s**-1'
+info,table2=150,name=param,value=137,data=137.150,short_name='None',long_name='Richardson number',unit='-'
+info,table2=150,name=param,value=139,data=139.150,short_name='None',long_name='U*V product',unit='m s**-2'
+info,table2=150,name=param,value=140,data=140.150,short_name='None',long_name='U*T product',unit='m s**-1 deg C'
+info,table2=150,name=param,value=141,data=141.150,short_name='None',long_name='V*T product',unit='m s**-1 deg C'
+info,table2=150,name=param,value=142,data=142.150,short_name='None',long_name='U*U product',unit='m s**-2'
+info,table2=150,name=param,value=143,data=143.150,short_name='None',long_name='V*V product',unit='m s**-2'
+info,table2=150,name=param,value=144,data=144.150,short_name='None',long_name='UV - U~V~',unit='m s**-2'
+info,table2=150,name=param,value=145,data=145.150,short_name='None',long_name='UT - U~T~',unit='m s**-1 deg C'
+info,table2=150,name=param,value=146,data=146.150,short_name='None',long_name='VT - V~T~',unit='m s**-1 deg C'
+info,table2=150,name=param,value=147,data=147.150,short_name='None',long_name='UU - U~U~',unit='m s**-2'
+info,table2=150,name=param,value=148,data=148.150,short_name='None',long_name='VV - V~V~',unit='m s**-2'
+info,table2=150,name=param,value=152,data=152.150,short_name='None',long_name='Sea level',unit='m'
+info,table2=150,name=param,value=153,data=153.150,short_name='None',long_name='Barotropic stream function',unit='-'
+info,table2=150,name=param,value=154,data=154.150,short_name='None',long_name='Mixed layer depth',unit='m'
+info,table2=150,name=param,value=155,data=155.150,short_name='None',long_name='Depth',unit='m'
+info,table2=150,name=param,value=168,data=168.150,short_name='None',long_name='U stress',unit='Pa'
+info,table2=150,name=param,value=169,data=169.150,short_name='None',long_name='V stress',unit='Pa'
+info,table2=150,name=param,value=170,data=170.150,short_name='None',long_name='Turbulent kinetic energy input',unit='-'
+info,table2=150,name=param,value=171,data=171.150,short_name='None',long_name='Net surface heat flux',unit='-'
+info,table2=150,name=param,value=172,data=172.150,short_name='None',long_name='Surface solar radiation',unit='-'
+info,table2=150,name=param,value=173,data=173.150,short_name='None',long_name='P-E',unit='-'
+info,table2=150,name=param,value=180,data=180.150,short_name='None',long_name='Diagnosed sea surface temperature error',unit='deg C'
+info,table2=150,name=param,value=181,data=181.150,short_name='None',long_name='Heat flux correction',unit='W m**-2'
+info,table2=150,name=param,value=182,data=182.150,short_name='None',long_name='Observed sea surface temperature',unit='deg C'
+info,table2=150,name=param,value=183,data=183.150,short_name='None',long_name='Observed heat flux',unit='W m**-2'
+info,table2=150,name=param,value=255,data=255.150,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=151,name=param,value=129,data=ocpt,short_name='OCPT',long_name='Ocean potential temperature',unit='deg C'
+info,table2=151,name=param,value=130,data=s,short_name='S',long_name='Salinity',unit='psu'
+info,table2=151,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=151,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=151,name=param,value=133,data=wv,short_name='WV',long_name='W velocity',unit='m s**-1'
+info,table2=151,name=param,value=134,data=mst,short_name='MST',long_name='Modulus of strain rate tensor',unit='s**-1'
+info,table2=151,name=param,value=135,data=vvs,short_name='VVS',long_name='Vertical viscosity',unit='m**2 s**-1'
+info,table2=151,name=param,value=136,data=vdf,short_name='VDF',long_name='Vertical diffusivity',unit='m**2 s**-1'
+info,table2=151,name=param,value=137,data=dep,short_name='DEP',long_name='Depth',unit='m'
+info,table2=151,name=param,value=138,data=sth,short_name='STH',long_name='Sigma-theta',unit='kg m**-3'
+info,table2=151,name=param,value=139,data=rn,short_name='RN',long_name='Richardson number',unit='-'
+info,table2=151,name=param,value=140,data=uv,short_name='UV',long_name='UV product',unit='m**2 s**-2'
+info,table2=151,name=param,value=141,data=ut,short_name='UT',long_name='UT product',unit='m s**-1 degC'
+info,table2=151,name=param,value=142,data=vt,short_name='VT',long_name='VT product',unit='m s**-1 deg C'
+info,table2=151,name=param,value=143,data=uu,short_name='UU',long_name='UU product',unit='m**2 s**-2'
+info,table2=151,name=param,value=144,data=vv,short_name='VV',long_name='VV product',unit='m**2 s**-2'
+info,table2=151,name=param,value=145,data=sl,short_name='SL',long_name='Sea level',unit='m'
+info,table2=151,name=param,value=146,data=sl_1,short_name='SL_1',long_name='Sea level previous timestep',unit='m'
+info,table2=151,name=param,value=147,data=bsf,short_name='BSF',long_name='Barotropic stream function',unit='m**3 s**-1'
+info,table2=151,name=param,value=148,data=mld,short_name='MLD',long_name='Mixed layer depth',unit='m'
+info,table2=151,name=param,value=149,data=btp,short_name='BTP',long_name='Bottom Pressure (equivalent height)',unit='m'
+info,table2=151,name=param,value=150,data=sh,short_name='SH',long_name='Steric height',unit='m'
+info,table2=151,name=param,value=151,data=crl,short_name='CRL',long_name='Curl of Wind Stress',unit='N m**-3'
+info,table2=151,name=param,value=152,data=152.151,short_name='None',long_name='Divergence of wind stress',unit='Nm**-3'
+info,table2=151,name=param,value=153,data=tax,short_name='TAX',long_name='U stress',unit='N m**-2'
+info,table2=151,name=param,value=154,data=tay,short_name='TAY',long_name='V stress',unit='N m**-2'
+info,table2=151,name=param,value=155,data=tki,short_name='TKI',long_name='Turbulent kinetic energy input',unit='W m**-2'
+info,table2=151,name=param,value=156,data=nsf,short_name='NSF',long_name='Net surface heat flux',unit='W m**-2'
+info,table2=151,name=param,value=157,data=asr,short_name='ASR',long_name='Absorbed solar radiation',unit='W m**-2'
+info,table2=151,name=param,value=158,data=pme,short_name='PME',long_name='Precipitation - evaporation',unit='m s**-1'
+info,table2=151,name=param,value=159,data=sst,short_name='SST',long_name='Specified sea surface temperature',unit='deg C'
+info,table2=151,name=param,value=160,data=shf,short_name='SHF',long_name='Specified surface heat flux',unit='W m**-2'
+info,table2=151,name=param,value=161,data=dte,short_name='DTE',long_name='Diagnosed sea surface temperature error',unit='deg C'
+info,table2=151,name=param,value=162,data=hfc,short_name='HFC',long_name='Heat flux correction',unit='W m**-2'
+info,table2=151,name=param,value=163,data=20d,short_name='20D',long_name='20 degrees isotherm depth',unit='m'
+info,table2=151,name=param,value=164,data=tav300,short_name='TAV300',long_name='Average potential temperature in the upper 300m',unit='degrees C'
+info,table2=151,name=param,value=165,data=uba1,short_name='UBA1',long_name='Vertically integrated zonal velocity (previous time step)',unit='m**2 s**-1'
+info,table2=151,name=param,value=166,data=vba1,short_name='VBA1',long_name='Vertically Integrated meridional velocity (previous time step)',unit='m**2 s**-1'
+info,table2=151,name=param,value=167,data=ztr,short_name='ZTR',long_name='Vertically integrated zonal volume transport',unit='m**2 s**-1'
+info,table2=151,name=param,value=168,data=mtr,short_name='MTR',long_name='Vertically integrated meridional volume transport',unit='m**2 s**-1'
+info,table2=151,name=param,value=169,data=zht,short_name='ZHT',long_name='Vertically integrated zonal heat transport',unit='J m**-1 s**-1'
+info,table2=151,name=param,value=170,data=mht,short_name='MHT',long_name='Vertically integrated meridional heat transport',unit='J m**-1 s**-1'
+info,table2=151,name=param,value=171,data=umax,short_name='UMAX',long_name='U velocity maximum',unit='m s**-1'
+info,table2=151,name=param,value=172,data=dumax,short_name='DUMAX',long_name='Depth of the velocity maximum',unit='m'
+info,table2=151,name=param,value=173,data=smax,short_name='SMAX',long_name='Salinity maximum',unit='psu'
+info,table2=151,name=param,value=174,data=dsmax,short_name='DSMAX',long_name='Depth of salinity maximum',unit='m'
+info,table2=151,name=param,value=175,data=sav300,short_name='SAV300',long_name='Average salinity in the upper 300m',unit='psu'
+info,table2=151,name=param,value=176,data=ldp,short_name='LDP',long_name='Layer depth at scalar points',unit='m'
+info,table2=151,name=param,value=177,data=ldu,short_name='LDU',long_name='Layer depth at vector points',unit='m'
+info,table2=151,name=param,value=178,data=pti,short_name='PTI',long_name='Potential temperature increment',unit='deg C'
+info,table2=151,name=param,value=179,data=ptae,short_name='PTAE',long_name='Potential temperature analysis error',unit='deg C'
+info,table2=151,name=param,value=180,data=bpt,short_name='BPT',long_name='Background potential temperature',unit='deg C'
+info,table2=151,name=param,value=181,data=apt,short_name='APT',long_name='Analysed potential temperature',unit='deg C'
+info,table2=151,name=param,value=182,data=ptbe,short_name='PTBE',long_name='Potential temperature background error',unit='deg C'
+info,table2=151,name=param,value=183,data=as,short_name='AS',long_name='Analysed salinity',unit='psu'
+info,table2=151,name=param,value=184,data=sali,short_name='SALI',long_name='Salinity increment',unit='psu'
+info,table2=151,name=param,value=185,data=ebt,short_name='EBT',long_name='Estimated Bias in Temperature',unit='deg C'
+info,table2=151,name=param,value=186,data=ebs,short_name='EBS',long_name='Estimated Bias in Salinity',unit='psu'
+info,table2=151,name=param,value=187,data=uvi,short_name='UVI',long_name='Zonal Velocity increment (from balance operator)',unit='m/s per time step'
+info,table2=151,name=param,value=188,data=vvi,short_name='VVI',long_name='Meridional Velocity increment (from balance operator)',unit='-'
+info,table2=151,name=param,value=190,data=subi,short_name='SUBI',long_name='Salinity increment (from salinity data)',unit='psu per time step'
+info,table2=151,name=param,value=191,data=sale,short_name='SALE',long_name='Salinity analysis error',unit='psu'
+info,table2=151,name=param,value=192,data=bsal,short_name='BSAL',long_name='Background Salinity',unit='psu'
+info,table2=151,name=param,value=193,data=193.151,short_name='None',long_name='Reserved',unit='-'
+info,table2=151,name=param,value=194,data=salbe,short_name='SALBE',long_name='Salinity background error',unit='psu'
+info,table2=151,name=param,value=199,data=ebta,short_name='EBTA',long_name='Estimated temperature bias from assimilation',unit='deg C'
+info,table2=151,name=param,value=200,data=ebsa,short_name='EBSA',long_name='Estimated salinity bias from assimilation',unit='psu'
+info,table2=151,name=param,value=201,data=lti,short_name='LTI',long_name='Temperature increment from relaxation term',unit='deg C per time step'
+info,table2=151,name=param,value=202,data=lsi,short_name='LSI',long_name='Salinity increment from relaxation term',unit='-'
+info,table2=151,name=param,value=203,data=bzpga,short_name='BZPGA',long_name='Bias in the zonal pressure gradient (applied)',unit='Pa**m-1'
+info,table2=151,name=param,value=204,data=bmpga,short_name='BMPGA',long_name='Bias in the meridional pressure gradient (applied)',unit='Pa**m-1'
+info,table2=151,name=param,value=205,data=ebtl,short_name='EBTL',long_name='Estimated temperature bias from relaxation',unit='deg C'
+info,table2=151,name=param,value=206,data=ebsl,short_name='EBSL',long_name='Estimated salinity bias from relaxation',unit='psu'
+info,table2=151,name=param,value=207,data=fgbt,short_name='FGBT',long_name='First guess bias in temperature',unit='deg C'
+info,table2=151,name=param,value=208,data=fgbs,short_name='FGBS',long_name='First guess bias in salinity',unit='psu'
+info,table2=151,name=param,value=209,data=bpa,short_name='BPA',long_name='Applied bias in pressure',unit='Pa'
+info,table2=151,name=param,value=210,data=fgbp,short_name='FGBP',long_name='FG bias in pressure',unit='Pa'
+info,table2=151,name=param,value=211,data=pta,short_name='PTA',long_name='Bias in temperature(applied)',unit='deg C'
+info,table2=151,name=param,value=212,data=psa,short_name='PSA',long_name='Bias in salinity (applied)',unit='psu'
+info,table2=151,name=param,value=255,data=255.151,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=160,name=param,value=127,data=at,short_name='AT',long_name='Atmospheric tide',unit='-'
+info,table2=160,name=param,value=128,data=bv,short_name='BV',long_name='Budget values',unit='-'
+info,table2=160,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=160,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=160,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=160,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=160,name=param,value=133,data=q,short_name='Q',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=160,name=param,value=134,data=sp,short_name='SP',long_name='Surface pressure',unit='Pa'
+info,table2=160,name=param,value=135,data=w,short_name='W',long_name='Vertical velocity',unit='Pa s**-1'
+info,table2=160,name=param,value=136,data=tcw,short_name='TCW',long_name='Total column water',unit='kg m**-2'
+info,table2=160,name=param,value=137,data=pwc,short_name='PWC',long_name='Precipitable water content',unit='kg m**-2'
+info,table2=160,name=param,value=138,data=vo,short_name='VO',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=160,name=param,value=139,data=stl1,short_name='STL1',long_name='Soil temperature level 1',unit='K'
+info,table2=160,name=param,value=140,data=swl1,short_name='SWL1',long_name='Soil wetness level 1',unit='m'
+info,table2=160,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water'
+info,table2=160,name=param,value=142,data=lsp,short_name='LSP',long_name='Large-scale precipitation',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=143,data=cp,short_name='CP',long_name='Convective precipitation',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=144,data=sf,short_name='SF',long_name='Snowfall',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=145,data=bld,short_name='BLD',long_name='Boundary layer dissipation',unit='W m**-2'
+info,table2=160,name=param,value=146,data=sshf,short_name='SSHF',long_name='Surface sensible heat flux',unit='W m**-2'
+info,table2=160,name=param,value=147,data=slhf,short_name='SLHF',long_name='Surface latent heat flux',unit='W m**-2'
+info,table2=160,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=160,name=param,value=152,data=lnsp,short_name='LNSP',long_name='Logarithm of surface pressure',unit='-'
+info,table2=160,name=param,value=155,data=d,short_name='D',long_name='Divergence',unit='s**-1'
+info,table2=160,name=param,value=156,data=gh,short_name='GH',long_name='Height',unit='m'
+info,table2=160,name=param,value=157,data=r,short_name='R',long_name='Relative humidity',unit='(0 - 1)'
+info,table2=160,name=param,value=158,data=tsp,short_name='TSP',long_name='Tendency of surface pressure',unit='Pa s**-1'
+info,table2=160,name=param,value=164,data=tcc,short_name='TCC',long_name='Total cloud cover',unit='(0 - 1)'
+info,table2=160,name=param,value=165,data=10u,short_name='10U',long_name='10 metre U wind component',unit='m s**-1'
+info,table2=160,name=param,value=166,data=10v,short_name='10V',long_name='10 metre V wind component',unit='m s**-1'
+info,table2=160,name=param,value=167,data=2t,short_name='2T',long_name='2 metre temperature',unit='K'
+info,table2=160,name=param,value=168,data=2d,short_name='2D',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=160,name=param,value=170,data=stl2,short_name='STL2',long_name='Soil temperature level 2',unit='K'
+info,table2=160,name=param,value=171,data=swl2,short_name='SWL2',long_name='Soil wetness level 2',unit='m'
+info,table2=160,name=param,value=172,data=lsm,short_name='LSM',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=160,name=param,value=173,data=sr,short_name='SR',long_name='Surface roughness',unit='m'
+info,table2=160,name=param,value=174,data=al,short_name='AL',long_name='Albedo',unit='(0 - 1)'
+info,table2=160,name=param,value=176,data=ssr,short_name='SSR',long_name='Surface solar radiation',unit='W m**-2'
+info,table2=160,name=param,value=177,data=str,short_name='STR',long_name='Surface thermal radiation',unit='W m**-2'
+info,table2=160,name=param,value=178,data=tsr,short_name='TSR',long_name='Top solar radiation',unit='W m**-2'
+info,table2=160,name=param,value=179,data=ttr,short_name='TTR',long_name='Top thermal radiation',unit='W m**-2'
+info,table2=160,name=param,value=180,data=ewss,short_name='EWSS',long_name='East-West surface stress',unit='N m**-2 s**-1'
+info,table2=160,name=param,value=181,data=nsss,short_name='NSSS',long_name='North-South surface stress',unit='N m**-2 s**-1'
+info,table2=160,name=param,value=182,data=e,short_name='E',long_name='Evaporation',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=183,data=stl3,short_name='STL3',long_name='Soil temperature level 3',unit='K'
+info,table2=160,name=param,value=184,data=swl3,short_name='SWL3',long_name='Soil wetness level 3',unit='m'
+info,table2=160,name=param,value=185,data=ccc,short_name='CCC',long_name='Convective cloud cover',unit='(0 - 1)'
+info,table2=160,name=param,value=186,data=lcc,short_name='LCC',long_name='Low cloud cover',unit='(0 - 1)'
+info,table2=160,name=param,value=187,data=mcc,short_name='MCC',long_name='Medium cloud cover',unit='(0 - 1)'
+info,table2=160,name=param,value=188,data=hcc,short_name='HCC',long_name='High cloud cover',unit='(0 - 1)'
+info,table2=160,name=param,value=190,data=ewov,short_name='EWOV',long_name='East-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=160,name=param,value=191,data=nsov,short_name='NSOV',long_name='North-South component of sub-gridscale orographic variance',unit='m**2'
+info,table2=160,name=param,value=192,data=nwov,short_name='NWOV',long_name='North-West/South-East component of sub-gridscale orographic variance',unit='m**2'
+info,table2=160,name=param,value=193,data=neov,short_name='NEOV',long_name='North-East/South-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=160,name=param,value=195,data=lgws,short_name='LGWS',long_name='Latitudinal component of gravity wave stress',unit='N m**-2 s'
+info,table2=160,name=param,value=196,data=mgws,short_name='MGWS',long_name='Meridional component of gravity wave stress',unit='N m**-2 s'
+info,table2=160,name=param,value=197,data=gwd,short_name='GWD',long_name='Gravity wave dissipation',unit='W m**-2 s'
+info,table2=160,name=param,value=198,data=src,short_name='SRC',long_name='Skin reservoir content',unit='m of water'
+info,table2=160,name=param,value=199,data=veg,short_name='VEG',long_name='Percentage of vegetation',unit='%'
+info,table2=160,name=param,value=200,data=vso,short_name='VSO',long_name='Variance of sub-gridscale orography',unit='m**2'
+info,table2=160,name=param,value=201,data=mx2t,short_name='MX2T',long_name='Maximum temperature at 2 metres during averaging time',unit='K'
+info,table2=160,name=param,value=202,data=mn2t,short_name='MN2T',long_name='Minimium temperature at 2 metres during averaging time',unit='K'
+info,table2=160,name=param,value=204,data=paw,short_name='PAW',long_name='Precipitation analysis weights',unit='-'
+info,table2=160,name=param,value=205,data=ro,short_name='RO',long_name='Runoff',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=206,data=zz,short_name='ZZ',long_name='Standard deviation of geopotential',unit='m**2 s**-2'
+info,table2=160,name=param,value=207,data=tz,short_name='TZ',long_name='Covariance of temperature and geopotential',unit='K m**2 s**-2'
+info,table2=160,name=param,value=208,data=tt,short_name='TT',long_name='Standard deviation of temperature',unit='K'
+info,table2=160,name=param,value=209,data=qz,short_name='QZ',long_name='Covariance of specific humidity and geopotential',unit='m**2 s**-2'
+info,table2=160,name=param,value=210,data=qt,short_name='QT',long_name='Covariance of specific humidity and temperature',unit='K'
+info,table2=160,name=param,value=211,data=qq,short_name='QQ',long_name='Standard deviation of specific humidity',unit='(0 - 1)'
+info,table2=160,name=param,value=212,data=uz,short_name='UZ',long_name='Covariance of U component and geopotential',unit='m**3 s**-3'
+info,table2=160,name=param,value=213,data=ut,short_name='UT',long_name='Covariance of U component and temperature',unit='K m s**-1'
+info,table2=160,name=param,value=214,data=uq,short_name='UQ',long_name='Covariance of U component and specific humidity',unit='m s**-1'
+info,table2=160,name=param,value=215,data=uu,short_name='UU',long_name='Standard deviation of U velocity',unit='m s**-1'
+info,table2=160,name=param,value=216,data=vz,short_name='VZ',long_name='Covariance of V component and geopotential',unit='m**3 s**-3'
+info,table2=160,name=param,value=217,data=vt,short_name='VT',long_name='Covariance of V component and temperature',unit='K m s**-1'
+info,table2=160,name=param,value=218,data=vq,short_name='VQ',long_name='Covariance of V component and specific humidity',unit='m s**-1'
+info,table2=160,name=param,value=219,data=vu,short_name='VU',long_name='Covariance of V component and U component',unit='m**2 s**-2'
+info,table2=160,name=param,value=220,data=vv,short_name='VV',long_name='Standard deviation of V component',unit='m s**-1'
+info,table2=160,name=param,value=221,data=wz,short_name='WZ',long_name='Covariance of W component and geopotential',unit='Pa m**2 s**-3'
+info,table2=160,name=param,value=222,data=wt,short_name='WT',long_name='Covariance of W component and temperature',unit='K Pa s**-1'
+info,table2=160,name=param,value=223,data=wq,short_name='WQ',long_name='Covariance of W component and specific humidity',unit='Pa s**-1'
+info,table2=160,name=param,value=224,data=wu,short_name='WU',long_name='Covariance of W component and U component',unit='Pa m s**-2'
+info,table2=160,name=param,value=225,data=wv,short_name='WV',long_name='Covariance of W component and V component',unit='Pa m s**-2'
+info,table2=160,name=param,value=226,data=ww,short_name='WW',long_name='Standard deviation of vertical velocity',unit='Pa s**-1'
+info,table2=160,name=param,value=228,data=tp,short_name='TP',long_name='Total precipitation',unit='m'
+info,table2=160,name=param,value=229,data=iews,short_name='IEWS',long_name='Instantaneous X surface stress',unit='N m**-2'
+info,table2=160,name=param,value=230,data=inss,short_name='INSS',long_name='Instantaneous Y surface stress',unit='N m**-2'
+info,table2=160,name=param,value=231,data=ishf,short_name='ISHF',long_name='Instantaneous surface heat flux',unit='W m**-2'
+info,table2=160,name=param,value=232,data=ie,short_name='IE',long_name='Instantaneous moisture flux',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=233,data=asq,short_name='ASQ',long_name='Apparent surface humidity',unit='kg kg**-1'
+info,table2=160,name=param,value=234,data=lsrh,short_name='LSRH',long_name='Logarithm of surface roughness length for heat',unit='-'
+info,table2=160,name=param,value=235,data=skt,short_name='SKT',long_name='Skin temperature',unit='K'
+info,table2=160,name=param,value=236,data=stl4,short_name='STL4',long_name='Soil temperature level 4',unit='K'
+info,table2=160,name=param,value=237,data=swl4,short_name='SWL4',long_name='Soil wetness level 4',unit='m'
+info,table2=160,name=param,value=238,data=tsn,short_name='TSN',long_name='Temperature of snow layer',unit='K'
+info,table2=160,name=param,value=239,data=csf,short_name='CSF',long_name='Convective snowfall',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=240,data=lsf,short_name='LSF',long_name='Large-scale snowfall',unit='kg m**-2 s**-1'
+info,table2=160,name=param,value=241,data=clwcer,short_name='CLWCER',long_name='Cloud liquid water content',unit='kg kg**-1'
+info,table2=160,name=param,value=242,data=cc,short_name='CC',long_name='Cloud cover',unit='(0 - 1)'
+info,table2=160,name=param,value=243,data=fal,short_name='FAL',long_name='Forecast albedo',unit='-'
+info,table2=160,name=param,value=244,data=fsr,short_name='FSR',long_name='Forecast surface roughness',unit='m'
+info,table2=160,name=param,value=245,data=flsr,short_name='FLSR',long_name='Forecast logarithm of surface roughness for heat',unit='-'
+info,table2=160,name=param,value=246,data=10ws,short_name='10WS',long_name='10 metre wind speed',unit='m s**-1'
+info,table2=160,name=param,value=247,data=mofl,short_name='MOFL',long_name='Momentum flux',unit='N m**-2'
+info,table2=160,name=param,value=249,data=249.160,short_name='None',long_name='Gravity wave dissipation flux',unit='W m**-2'
+info,table2=160,name=param,value=254,data=hsd,short_name='HSD',long_name='Heaviside beta function',unit='(0 - 1)'
+info,table2=160,name=param,value=255,data=255.160,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=162,name=param,value=51,data=51.162,short_name='None',long_name='Surface geopotential',unit='m**2 s**-2'
+info,table2=162,name=param,value=52,data=52.162,short_name='None',long_name='Surface pressure',unit='Pa'
+info,table2=162,name=param,value=53,data=53.162,short_name='None',long_name='Vertical integral of mass of atmosphere',unit='kg m**-2'
+info,table2=162,name=param,value=54,data=54.162,short_name='None',long_name='Vertical integral of temperature',unit='K kg m**-2'
+info,table2=162,name=param,value=55,data=55.162,short_name='None',long_name='Vertical integral of total column water vapour',unit='kg m**-2'
+info,table2=162,name=param,value=56,data=56.162,short_name='None',long_name='Vertical integral of total column liquid cloud water',unit='kg m**-2'
+info,table2=162,name=param,value=57,data=57.162,short_name='None',long_name='Vertical integral of total column frozen cloud water',unit='kg m**-2'
+info,table2=162,name=param,value=58,data=58.162,short_name='None',long_name='Vertical integral of total column ozone',unit='kg m**-2'
+info,table2=162,name=param,value=59,data=59.162,short_name='None',long_name='Vertical integral of kinetic energy',unit='J m**-2'
+info,table2=162,name=param,value=60,data=60.162,short_name='None',long_name='Vertical integral of thermal energy',unit='J m**-2'
+info,table2=162,name=param,value=61,data=61.162,short_name='None',long_name='Vertical integral of dry static energy',unit='J m**-2'
+info,table2=162,name=param,value=62,data=62.162,short_name='None',long_name='Vertical integral of moist static energy',unit='J m**-2'
+info,table2=162,name=param,value=63,data=63.162,short_name='None',long_name='Vertical integral of total energy',unit='J m**-2'
+info,table2=162,name=param,value=64,data=64.162,short_name='None',long_name='Vertical integral of energy conversion',unit='W m**-2'
+info,table2=162,name=param,value=65,data=65.162,short_name='None',long_name='Vertical integral of eastward mass flux',unit='kg m**-1 s**-1'
+info,table2=162,name=param,value=66,data=66.162,short_name='None',long_name='Vertical integral of northward mass flux',unit='kg m**-1 s**-1'
+info,table2=162,name=param,value=67,data=67.162,short_name='None',long_name='Vertical integral of eastward kinetic energy flux',unit='W m**-2'
+info,table2=162,name=param,value=68,data=68.162,short_name='None',long_name='Vertical integral of northward kinetic energy flux',unit='W m**-2'
+info,table2=162,name=param,value=69,data=69.162,short_name='None',long_name='Vertical integral of eastward heat flux',unit='W m**-2'
+info,table2=162,name=param,value=70,data=70.162,short_name='None',long_name='Vertical integral of northward heat flux',unit='W m**-2'
+info,table2=162,name=param,value=71,data=71.162,short_name='None',long_name='Vertical integral of eastward water vapour flux',unit='kg m**-1 s**-1'
+info,table2=162,name=param,value=72,data=72.162,short_name='None',long_name='Vertical integral of northward water vapour flux',unit='kg m**-1 s**-1'
+info,table2=162,name=param,value=73,data=73.162,short_name='None',long_name='Vertical integral of eastward geopotential flux',unit='W m**-2'
+info,table2=162,name=param,value=74,data=74.162,short_name='None',long_name='Vertical integral of northward geopotential flux',unit='W m**-2'
+info,table2=162,name=param,value=75,data=75.162,short_name='None',long_name='Vertical integral of eastward total energy flux',unit='W m**-2'
+info,table2=162,name=param,value=76,data=76.162,short_name='None',long_name='Vertical integral of northward total energy flux',unit='W m**-2'
+info,table2=162,name=param,value=77,data=77.162,short_name='None',long_name='Vertical integral of eastward ozone flux',unit='kg m**-1 s**-1'
+info,table2=162,name=param,value=78,data=78.162,short_name='None',long_name='Vertical integral of northward ozone flux',unit='kg m**-1 s**-1'
+info,table2=162,name=param,value=81,data=81.162,short_name='None',long_name='Vertical integral of divergence of mass flux',unit='kg m**-2 s**-1'
+info,table2=162,name=param,value=82,data=82.162,short_name='None',long_name='Vertical integral of divergence of kinetic energy flux',unit='W m**-2'
+info,table2=162,name=param,value=83,data=83.162,short_name='None',long_name='Vertical integral of divergence of thermal energy flux',unit='W m**-2'
+info,table2=162,name=param,value=84,data=84.162,short_name='None',long_name='Vertical integral of divergence of moisture flux',unit='kg m**-2 s**-1'
+info,table2=162,name=param,value=85,data=85.162,short_name='None',long_name='Vertical integral of divergence of geopotential flux',unit='W m**-2'
+info,table2=162,name=param,value=86,data=86.162,short_name='None',long_name='Vertical integral of divergence of total energy flux',unit='W m**-2'
+info,table2=162,name=param,value=87,data=87.162,short_name='None',long_name='Vertical integral of divergence of ozone flux',unit='kg m**-2 s**-1'
+info,table2=162,name=param,value=100,data=100.162,short_name='None',long_name='Tendency of short wave radiation',unit='K'
+info,table2=162,name=param,value=101,data=101.162,short_name='None',long_name='Tendency of long wave radiation',unit='K'
+info,table2=162,name=param,value=102,data=102.162,short_name='None',long_name='Tendency of clear sky short wave radiation',unit='K'
+info,table2=162,name=param,value=103,data=103.162,short_name='None',long_name='Tendency of clear sky long wave radiation',unit='K'
+info,table2=162,name=param,value=104,data=104.162,short_name='None',long_name='Updraught mass flux',unit='kg m**-2'
+info,table2=162,name=param,value=105,data=105.162,short_name='None',long_name='Downdraught mass flux',unit='kg m**-2'
+info,table2=162,name=param,value=106,data=106.162,short_name='None',long_name='Updraught detrainment rate',unit='kg m**-3'
+info,table2=162,name=param,value=107,data=107.162,short_name='None',long_name='Downdraught detrainment rate',unit='kg m**-3'
+info,table2=162,name=param,value=108,data=108.162,short_name='None',long_name='Total precipitation flux',unit='kg m**-2'
+info,table2=162,name=param,value=109,data=109.162,short_name='None',long_name='Turbulent diffusion coefficient for heat',unit='m**2'
+info,table2=162,name=param,value=110,data=110.162,short_name='None',long_name='Tendency of temperature due to physics',unit='K'
+info,table2=162,name=param,value=111,data=111.162,short_name='None',long_name='Tendency of specific humidity due to physics',unit='kg kg**-1'
+info,table2=162,name=param,value=112,data=112.162,short_name='None',long_name='Tendency of u component due to physics',unit='m s**-1'
+info,table2=162,name=param,value=113,data=113.162,short_name='None',long_name='Tendency of v component due to physics',unit='m s**-1'
+info,table2=162,name=param,value=206,data=206.162,short_name='None',long_name='Variance of geopotential',unit='m**4 s**-4'
+info,table2=162,name=param,value=207,data=207.162,short_name='None',long_name='Covariance of geopotential/temperature',unit='m**2 K s**-2'
+info,table2=162,name=param,value=208,data=208.162,short_name='None',long_name='Variance of temperature',unit='K**2'
+info,table2=162,name=param,value=209,data=209.162,short_name='None',long_name='Covariance of geopotential/specific humidity',unit='m**2 s**-2'
+info,table2=162,name=param,value=210,data=210.162,short_name='None',long_name='Covariance of temperature/specific humidity',unit='K'
+info,table2=162,name=param,value=211,data=211.162,short_name='None',long_name='Variance of specific humidity',unit='-'
+info,table2=162,name=param,value=212,data=212.162,short_name='None',long_name='Covariance of u component/geopotential',unit='M**3 s**-3'
+info,table2=162,name=param,value=213,data=213.162,short_name='None',long_name='Covariance of u component/temperature',unit='m s**-1 K'
+info,table2=162,name=param,value=214,data=214.162,short_name='None',long_name='Covariance of u component/specific humidity',unit='m s**-1'
+info,table2=162,name=param,value=215,data=215.162,short_name='None',long_name='Variance of u component',unit='m**2 s**-2'
+info,table2=162,name=param,value=216,data=216.162,short_name='None',long_name='Covariance of v component/geopotential',unit='M**3 s**-3'
+info,table2=162,name=param,value=217,data=217.162,short_name='None',long_name='Covariance of v component/temperaure',unit='m s**-1 K'
+info,table2=162,name=param,value=218,data=218.162,short_name='None',long_name='Covariance of v component/specific humidity',unit='m s**-1'
+info,table2=162,name=param,value=219,data=219.162,short_name='None',long_name='Covariance of v component/u component',unit='m**2 s**-2'
+info,table2=162,name=param,value=220,data=220.162,short_name='None',long_name='Variance of v component',unit='m**2 s**-2'
+info,table2=162,name=param,value=221,data=221.162,short_name='None',long_name='Covariance of omega/geopotential',unit='m**2 Pa s**-3'
+info,table2=162,name=param,value=222,data=222.162,short_name='None',long_name='Covariance of omega/temperature',unit='Pa s**-1 K'
+info,table2=162,name=param,value=223,data=223.162,short_name='None',long_name='Covariance of omega/specific humidity',unit='Pa s**-1'
+info,table2=162,name=param,value=224,data=224.162,short_name='None',long_name='Covariance of omega/u component',unit='m Pa s**-2'
+info,table2=162,name=param,value=225,data=225.162,short_name='None',long_name='Covariance of omega/v component',unit='m Pa s**-2'
+info,table2=162,name=param,value=226,data=226.162,short_name='None',long_name='Variance of omega',unit='Pa**2 s**-2'
+info,table2=162,name=param,value=227,data=227.162,short_name='None',long_name='Variance of surface pressure',unit='Pa**2'
+info,table2=162,name=param,value=229,data=229.162,short_name='None',long_name='Variance of relative humidity',unit='dimensionless'
+info,table2=162,name=param,value=230,data=230.162,short_name='None',long_name='Covariance of u component/ozone',unit='m s**-1'
+info,table2=162,name=param,value=231,data=231.162,short_name='None',long_name='Covariance of v component/ozone',unit='m s**-1'
+info,table2=162,name=param,value=232,data=232.162,short_name='None',long_name='Covariance of omega/ozone',unit='Pa s**-1'
+info,table2=162,name=param,value=233,data=233.162,short_name='None',long_name='Variance of ozone',unit='dimensionless'
+info,table2=162,name=param,value=255,data=255.162,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=170,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=170,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=170,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=170,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=170,name=param,value=138,data=vo,short_name='VO',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=170,name=param,value=140,data=swl1,short_name='SWL1',long_name='Soil wetness level 1',unit='m'
+info,table2=170,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water equivalent'
+info,table2=170,name=param,value=149,data=tsw,short_name='TSW',long_name='Total soil moisture',unit='m'
+info,table2=170,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=170,name=param,value=155,data=d,short_name='D',long_name='Divergence',unit='s**-1'
+info,table2=170,name=param,value=171,data=swl2,short_name='SWL2',long_name='Soil wetness level 2',unit='m'
+info,table2=170,name=param,value=179,data=ttr,short_name='TTR',long_name='Top thermal radiation',unit='W m-2'
+info,table2=170,name=param,value=184,data=swl3,short_name='SWL3',long_name='Soil wetness level 3',unit='m'
+info,table2=170,name=param,value=201,data=mx2t,short_name='MX2T',long_name='Maximum temperature at 2 metres',unit='K'
+info,table2=170,name=param,value=202,data=mn2t,short_name='MN2T',long_name='Minimum temperature at 2 metres',unit='K'
+info,table2=170,name=param,value=228,data=tp,short_name='TP',long_name='Total precipitation',unit='m'
+info,table2=170,name=param,value=255,data=255.170,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=171,name=param,value=1,data=strfa,short_name='STRFA',long_name='Stream function anomaly',unit='m**2 s**-1'
+info,table2=171,name=param,value=2,data=vpota,short_name='VPOTA',long_name='Velocity potential anomaly',unit='m**2 s**-1'
+info,table2=171,name=param,value=3,data=3.171,short_name='None',long_name='Potential temperature',unit='K'
+info,table2=171,name=param,value=4,data=4.171,short_name='None',long_name='Equivalent potential temperature',unit='K'
+info,table2=171,name=param,value=5,data=5.171,short_name='None',long_name='Saturated equivalent potential temperature',unit='K'
+info,table2=171,name=param,value=11,data=11.171,short_name='None',long_name='U component of divergent wind',unit='m s**-1'
+info,table2=171,name=param,value=12,data=12.171,short_name='None',long_name='V component of divergent wind',unit='m s**-1'
+info,table2=171,name=param,value=13,data=13.171,short_name='None',long_name='U component of rotational wind',unit='m s**-1'
+info,table2=171,name=param,value=14,data=14.171,short_name='None',long_name='V component of rotational wind',unit='m s**-1'
+info,table2=171,name=param,value=21,data=21.171,short_name='None',long_name='Unbalanced component of temperature',unit='K'
+info,table2=171,name=param,value=22,data=22.171,short_name='None',long_name='Unbalanced component of logarithm of surface pressure',unit='-'
+info,table2=171,name=param,value=23,data=23.171,short_name='None',long_name='Unbalanced component of divergence',unit='s**-1'
+info,table2=171,name=param,value=26,data=26.171,short_name='None',long_name='Lake cover',unit='(0 - 1)'
+info,table2=171,name=param,value=27,data=27.171,short_name='None',long_name='Low vegetation cover',unit='(0 - 1)'
+info,table2=171,name=param,value=28,data=28.171,short_name='None',long_name='High vegetation cover',unit='(0 - 1)'
+info,table2=171,name=param,value=29,data=29.171,short_name='None',long_name='Type of low vegetation',unit='-'
+info,table2=171,name=param,value=30,data=30.171,short_name='None',long_name='Type of high vegetation',unit='-'
+info,table2=171,name=param,value=31,data=31.171,short_name='None',long_name='Sea-ice cover',unit='(0 - 1)'
+info,table2=171,name=param,value=32,data=32.171,short_name='None',long_name='Snow albedo',unit='(0 - 1)'
+info,table2=171,name=param,value=33,data=33.171,short_name='None',long_name='Snow density',unit='kg m**-3'
+info,table2=171,name=param,value=34,data=34.171,short_name='None',long_name='Sea surface temperature',unit='K'
+info,table2=171,name=param,value=35,data=35.171,short_name='None',long_name='Ice surface temperature layer 1',unit='K'
+info,table2=171,name=param,value=36,data=36.171,short_name='None',long_name='Ice surface temperature layer 2',unit='K'
+info,table2=171,name=param,value=37,data=37.171,short_name='None',long_name='Ice surface temperature layer 3',unit='K'
+info,table2=171,name=param,value=38,data=38.171,short_name='None',long_name='Ice surface temperature layer 4',unit='K'
+info,table2=171,name=param,value=39,data=39.171,short_name='None',long_name='Volumetric soil water layer 1',unit='m**3 m**-3'
+info,table2=171,name=param,value=40,data=40.171,short_name='None',long_name='Volumetric soil water layer 2',unit='m**3 m**-3'
+info,table2=171,name=param,value=41,data=41.171,short_name='None',long_name='Volumetric soil water layer 3',unit='m**3 m**-3'
+info,table2=171,name=param,value=42,data=42.171,short_name='None',long_name='Volumetric soil water layer 4',unit='m**3 m**-3'
+info,table2=171,name=param,value=43,data=43.171,short_name='None',long_name='Soil type',unit='-'
+info,table2=171,name=param,value=44,data=44.171,short_name='None',long_name='Snow evaporation',unit='m of water'
+info,table2=171,name=param,value=45,data=45.171,short_name='None',long_name='Snowmelt',unit='m of water'
+info,table2=171,name=param,value=46,data=46.171,short_name='None',long_name='Solar duration',unit='s'
+info,table2=171,name=param,value=47,data=47.171,short_name='None',long_name='Direct solar radiation',unit='w m**-2'
+info,table2=171,name=param,value=48,data=48.171,short_name='None',long_name='Magnitude of surface stress',unit='N m**-2 s'
+info,table2=171,name=param,value=49,data=49.171,short_name='None',long_name='10 metre wind gust',unit='m s**-1'
+info,table2=171,name=param,value=50,data=50.171,short_name='None',long_name='Large-scale precipitation fraction',unit='s'
+info,table2=171,name=param,value=51,data=51.171,short_name='None',long_name='Maximum 2 metre temperature',unit='K'
+info,table2=171,name=param,value=52,data=52.171,short_name='None',long_name='Minimum 2 metre temperature',unit='K'
+info,table2=171,name=param,value=53,data=53.171,short_name='None',long_name='Montgomery potential',unit='m**2 s**-2'
+info,table2=171,name=param,value=54,data=54.171,short_name='None',long_name='Pressure',unit='Pa'
+info,table2=171,name=param,value=55,data=55.171,short_name='None',long_name='Mean 2 metre temperature in past 24 hours',unit='K'
+info,table2=171,name=param,value=56,data=56.171,short_name='None',long_name='Mean 2 metre dewpoint temperature in past 24 hours',unit='K'
+info,table2=171,name=param,value=57,data=57.171,short_name='None',long_name='Downward UV radiation at the surface',unit='w m**-2'
+info,table2=171,name=param,value=58,data=58.171,short_name='None',long_name='Photosynthetically active radiation at the surface',unit='w m**-2'
+info,table2=171,name=param,value=59,data=59.171,short_name='None',long_name='Convective available potential energy',unit='J kg**-1'
+info,table2=171,name=param,value=60,data=60.171,short_name='None',long_name='Potential vorticity',unit='K m**2 kg**-1 s**-1'
+info,table2=171,name=param,value=61,data=61.171,short_name='None',long_name='Total precipitation from observations',unit='Millimetres*100 + number of stations'
+info,table2=171,name=param,value=62,data=62.171,short_name='None',long_name='Observation count',unit='-'
+info,table2=171,name=param,value=63,data=63.171,short_name='None',long_name='Start time for skin temperature difference',unit='s'
+info,table2=171,name=param,value=64,data=64.171,short_name='None',long_name='Finish time for skin temperature difference',unit='s'
+info,table2=171,name=param,value=65,data=65.171,short_name='None',long_name='Skin temperature difference',unit='K'
+info,table2=171,name=param,value=78,data=tclwa,short_name='TCLWA',long_name='Total column liquid water anomaly',unit='kg m**-2'
+info,table2=171,name=param,value=79,data=tciwa,short_name='TCIWA',long_name='Total column ice water anomaly',unit='kg m**-2'
+info,table2=171,name=param,value=125,data=125.171,short_name='None',long_name='Vertically integrated total energy',unit='J m**-2'
+info,table2=171,name=param,value=126,data=126.171,short_name='None',long_name='Generic parameter for sensitive area prediction',unit='Various'
+info,table2=171,name=param,value=127,data=127.171,short_name='None',long_name='Atmospheric tide',unit='-'
+info,table2=171,name=param,value=128,data=128.171,short_name='None',long_name='Budget values',unit='-'
+info,table2=171,name=param,value=129,data=za,short_name='ZA',long_name='Geopotential anomaly',unit='m**2 s**-2'
+info,table2=171,name=param,value=130,data=ta,short_name='TA',long_name='Temperature anomaly',unit='K'
+info,table2=171,name=param,value=131,data=ua,short_name='UA',long_name='U velocity anomaly',unit='m s**-1'
+info,table2=171,name=param,value=132,data=va,short_name='VA',long_name='V velocity anomaly',unit='m s**-1'
+info,table2=171,name=param,value=133,data=133.171,short_name='None',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=171,name=param,value=134,data=134.171,short_name='None',long_name='Surface pressure',unit='Pa'
+info,table2=171,name=param,value=135,data=135.171,short_name='None',long_name='Vertical velocity',unit='Pa s**-1'
+info,table2=171,name=param,value=136,data=136.171,short_name='None',long_name='Total column water',unit='kg m**-2'
+info,table2=171,name=param,value=137,data=137.171,short_name='None',long_name='Total column water vapour',unit='kg m**-2'
+info,table2=171,name=param,value=138,data=138.171,short_name='None',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=171,name=param,value=139,data=139.171,short_name='None',long_name='Soil temperature level 1',unit='K'
+info,table2=171,name=param,value=140,data=140.171,short_name='None',long_name='Soil wetness level 1',unit='m of water'
+info,table2=171,name=param,value=141,data=141.171,short_name='None',long_name='Snow depth',unit='m of water equivalent'
+info,table2=171,name=param,value=142,data=142.171,short_name='None',long_name='Stratiform precipitation (Large-scale precipitation)',unit='m'
+info,table2=171,name=param,value=143,data=143.171,short_name='None',long_name='Convective precipitation',unit='m'
+info,table2=171,name=param,value=144,data=144.171,short_name='None',long_name='Snowfall (convective + stratiform)',unit='m of water equivalent'
+info,table2=171,name=param,value=145,data=145.171,short_name='None',long_name='Boundary layer dissipation',unit='W m**-2 s'
+info,table2=171,name=param,value=146,data=146.171,short_name='None',long_name='Surface sensible heat flux',unit='W m**-2 s'
+info,table2=171,name=param,value=147,data=147.171,short_name='None',long_name='Surface latent heat flux',unit='W m**-2 s'
+info,table2=171,name=param,value=148,data=148.171,short_name='None',long_name='Charnock',unit='-'
+info,table2=171,name=param,value=149,data=149.171,short_name='None',long_name='Surface net radiation',unit='W m**-2 s'
+info,table2=171,name=param,value=150,data=150.171,short_name='None',long_name='Top net radiation',unit='-'
+info,table2=171,name=param,value=151,data=msla,short_name='MSLA',long_name='Mean sea level pressure anomaly',unit='Pa'
+info,table2=171,name=param,value=152,data=152.171,short_name='None',long_name='Logarithm of surface pressure',unit='-'
+info,table2=171,name=param,value=153,data=153.171,short_name='None',long_name='Short-wave heating rate',unit='K'
+info,table2=171,name=param,value=154,data=154.171,short_name='None',long_name='Long-wave heating rate',unit='K'
+info,table2=171,name=param,value=155,data=155.171,short_name='None',long_name='Divergence',unit='s**-1'
+info,table2=171,name=param,value=156,data=156.171,short_name='None',long_name='Height',unit='m'
+info,table2=171,name=param,value=157,data=157.171,short_name='None',long_name='Relative humidity',unit='%'
+info,table2=171,name=param,value=158,data=158.171,short_name='None',long_name='Tendency of surface pressure',unit='Pa s**-1'
+info,table2=171,name=param,value=159,data=159.171,short_name='None',long_name='Boundary layer height',unit='m'
+info,table2=171,name=param,value=160,data=160.171,short_name='None',long_name='Standard deviation of orography',unit='-'
+info,table2=171,name=param,value=161,data=161.171,short_name='None',long_name='Anisotropy of sub-gridscale orography',unit='-'
+info,table2=171,name=param,value=162,data=162.171,short_name='None',long_name='Angle of sub-gridscale orography',unit='rad'
+info,table2=171,name=param,value=163,data=163.171,short_name='None',long_name='Slope of sub-gridscale orography',unit='-'
+info,table2=171,name=param,value=164,data=tcca,short_name='TCCA',long_name='Total cloud cover anomaly',unit='(0 - 1)'
+info,table2=171,name=param,value=165,data=10ua,short_name='10UA',long_name='10 metre U wind component anomaly',unit='m s**-1'
+info,table2=171,name=param,value=166,data=10va,short_name='10VA',long_name='10 metre V wind component anomaly',unit='m s**-1'
+info,table2=171,name=param,value=167,data=2ta,short_name='2TA',long_name='2 metre temperature anomaly',unit='K'
+info,table2=171,name=param,value=168,data=168.171,short_name='None',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=171,name=param,value=169,data=169.171,short_name='None',long_name='Surface solar radiation downwards',unit='W m**-2 s'
+info,table2=171,name=param,value=170,data=170.171,short_name='None',long_name='Soil temperature level 2',unit='K'
+info,table2=171,name=param,value=171,data=171.171,short_name='None',long_name='Soil wetness level 2',unit='m of water'
+info,table2=171,name=param,value=172,data=172.171,short_name='None',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=171,name=param,value=173,data=173.171,short_name='None',long_name='Surface roughness',unit='m'
+info,table2=171,name=param,value=174,data=174.171,short_name='None',long_name='Albedo',unit='(0 - 1)'
+info,table2=171,name=param,value=175,data=175.171,short_name='None',long_name='Surface thermal radiation downwards',unit='W m**-2 s'
+info,table2=171,name=param,value=176,data=176.171,short_name='None',long_name='Surface solar radiation',unit='W m**-2 s'
+info,table2=171,name=param,value=177,data=177.171,short_name='None',long_name='Surface thermal radiation',unit='W m**-2 s'
+info,table2=171,name=param,value=178,data=178.171,short_name='None',long_name='Top solar radiation',unit='W m**-2 s'
+info,table2=171,name=param,value=179,data=179.171,short_name='None',long_name='Top thermal radiation',unit='W m**-2 s'
+info,table2=171,name=param,value=180,data=180.171,short_name='None',long_name='East-West surface stress',unit='N m**-2 s'
+info,table2=171,name=param,value=181,data=181.171,short_name='None',long_name='North-South surface stress',unit='N m**-2 s'
+info,table2=171,name=param,value=182,data=182.171,short_name='None',long_name='Evaporation',unit='m of water'
+info,table2=171,name=param,value=183,data=183.171,short_name='None',long_name='Soil temperature level 3',unit='K'
+info,table2=171,name=param,value=184,data=184.171,short_name='None',long_name='Soil wetness level 3',unit='m of water'
+info,table2=171,name=param,value=185,data=185.171,short_name='None',long_name='Convective cloud cover',unit='(0 - 1)'
+info,table2=171,name=param,value=186,data=186.171,short_name='None',long_name='Low cloud cover',unit='(0 - 1)'
+info,table2=171,name=param,value=187,data=187.171,short_name='None',long_name='Medium cloud cover',unit='(0 - 1)'
+info,table2=171,name=param,value=188,data=188.171,short_name='None',long_name='High cloud cover',unit='(0 - 1)'
+info,table2=171,name=param,value=189,data=sunda,short_name='SUNDA',long_name='Sunshine duration anomaly',unit='s'
+info,table2=171,name=param,value=190,data=190.171,short_name='None',long_name='East-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=171,name=param,value=191,data=191.171,short_name='None',long_name='North-South component of sub-gridscale orographic variance',unit='m**2'
+info,table2=171,name=param,value=192,data=192.171,short_name='None',long_name='North-West/South-East component of sub-gridscale orographic variance',unit='m**2'
+info,table2=171,name=param,value=193,data=193.171,short_name='None',long_name='North-East/South-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=171,name=param,value=194,data=194.171,short_name='None',long_name='Brightness temperature',unit='K'
+info,table2=171,name=param,value=195,data=195.171,short_name='None',long_name='Latitudinal component of gravity wave stress',unit='N m**-2 s'
+info,table2=171,name=param,value=196,data=196.171,short_name='None',long_name='Meridional component of gravity wave stress',unit='N m**-2 s'
+info,table2=171,name=param,value=197,data=197.171,short_name='None',long_name='Gravity wave dissipation',unit='W m**-2 s'
+info,table2=171,name=param,value=198,data=198.171,short_name='None',long_name='Skin reservoir content',unit='m of water'
+info,table2=171,name=param,value=199,data=199.171,short_name='None',long_name='Vegetation fraction',unit='(0 - 1)'
+info,table2=171,name=param,value=200,data=200.171,short_name='None',long_name='Variance of sub-gridscale orography',unit='m**2'
+info,table2=171,name=param,value=201,data=mx2ta,short_name='MX2TA',long_name='Maximum temperature at 2 metres anomaly',unit='K'
+info,table2=171,name=param,value=202,data=mn2ta,short_name='MN2TA',long_name='Minimum temperature at 2 metres anomaly',unit='K'
+info,table2=171,name=param,value=203,data=203.171,short_name='None',long_name='Ozone mass mixing ratio',unit='kg kg**-1'
+info,table2=171,name=param,value=204,data=204.171,short_name='None',long_name='Precipitation analysis weights',unit='-'
+info,table2=171,name=param,value=205,data=205.171,short_name='None',long_name='Runoff',unit='m'
+info,table2=171,name=param,value=206,data=206.171,short_name='None',long_name='Total column ozone',unit='kg m**-2'
+info,table2=171,name=param,value=207,data=207.171,short_name='None',long_name='10 metre wind speed',unit='m s**-1'
+info,table2=171,name=param,value=208,data=208.171,short_name='None',long_name='Top net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=171,name=param,value=209,data=209.171,short_name='None',long_name='Top net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=171,name=param,value=210,data=210.171,short_name='None',long_name='Surface net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=171,name=param,value=211,data=211.171,short_name='None',long_name='Surface net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=171,name=param,value=212,data=212.171,short_name='None',long_name='Solar insolation',unit='W m**-2'
+info,table2=171,name=param,value=214,data=214.171,short_name='None',long_name='Diabatic heating by radiation',unit='K'
+info,table2=171,name=param,value=215,data=215.171,short_name='None',long_name='Diabatic heating by vertical diffusion',unit='K'
+info,table2=171,name=param,value=216,data=216.171,short_name='None',long_name='Diabatic heating by cumulus convection',unit='K'
+info,table2=171,name=param,value=217,data=217.171,short_name='None',long_name='Diabatic heating by large-scale condensation',unit='K'
+info,table2=171,name=param,value=218,data=218.171,short_name='None',long_name='Vertical diffusion of zonal wind',unit='m s**-1'
+info,table2=171,name=param,value=219,data=219.171,short_name='None',long_name='Vertical diffusion of meridional wind',unit='m s**-1'
+info,table2=171,name=param,value=220,data=220.171,short_name='None',long_name='East-West gravity wave drag tendency',unit='m s**-1'
+info,table2=171,name=param,value=221,data=221.171,short_name='None',long_name='North-South gravity wave drag tendency',unit='m s**-1'
+info,table2=171,name=param,value=222,data=222.171,short_name='None',long_name='Convective tendency of zonal wind',unit='m s**-1'
+info,table2=171,name=param,value=223,data=223.171,short_name='None',long_name='Convective tendency of meridional wind',unit='m s**-1'
+info,table2=171,name=param,value=224,data=224.171,short_name='None',long_name='Vertical diffusion of humidity',unit='kg kg**-1'
+info,table2=171,name=param,value=225,data=225.171,short_name='None',long_name='Humidity tendency by cumulus convection',unit='kg kg**-1'
+info,table2=171,name=param,value=226,data=226.171,short_name='None',long_name='Humidity tendency by large-scale condensation',unit='kg kg**-1'
+info,table2=171,name=param,value=227,data=227.171,short_name='None',long_name='Change from removal of negative humidity',unit='kg kg**-1'
+info,table2=171,name=param,value=228,data=tpa,short_name='TPA',long_name='Total precipitation anomaly',unit='m'
+info,table2=171,name=param,value=229,data=229.171,short_name='None',long_name='Instantaneous X surface stress',unit='N m**-2'
+info,table2=171,name=param,value=230,data=230.171,short_name='None',long_name='Instantaneous Y surface stress',unit='N m**-2'
+info,table2=171,name=param,value=231,data=231.171,short_name='None',long_name='Instantaneous surface heat flux',unit='W m**-2'
+info,table2=171,name=param,value=232,data=232.171,short_name='None',long_name='Instantaneous moisture flux',unit='kg m**-2 s'
+info,table2=171,name=param,value=233,data=233.171,short_name='None',long_name='Apparent surface humidity',unit='kg kg**-1'
+info,table2=171,name=param,value=234,data=234.171,short_name='None',long_name='Logarithm of surface roughness length for heat',unit='-'
+info,table2=171,name=param,value=235,data=235.171,short_name='None',long_name='Skin temperature',unit='K'
+info,table2=171,name=param,value=236,data=236.171,short_name='None',long_name='Soil temperature level 4',unit='K'
+info,table2=171,name=param,value=237,data=237.171,short_name='None',long_name='Soil wetness level 4',unit='m'
+info,table2=171,name=param,value=238,data=238.171,short_name='None',long_name='Temperature of snow layer',unit='K'
+info,table2=171,name=param,value=239,data=239.171,short_name='None',long_name='Convective snowfall',unit='m of water equivalent'
+info,table2=171,name=param,value=240,data=240.171,short_name='None',long_name='Large-scale snowfall',unit='m of water equivalent'
+info,table2=171,name=param,value=241,data=241.171,short_name='None',long_name='Accumulated cloud fraction tendency',unit='(-1 to 1)'
+info,table2=171,name=param,value=242,data=242.171,short_name='None',long_name='Accumulated liquid water tendency',unit='(-1 to 1)'
+info,table2=171,name=param,value=243,data=243.171,short_name='None',long_name='Forecast albedo',unit='(0 - 1)'
+info,table2=171,name=param,value=244,data=244.171,short_name='None',long_name='Forecast surface roughness',unit='m'
+info,table2=171,name=param,value=245,data=245.171,short_name='None',long_name='Forecast logarithm of surface roughness for heat',unit='-'
+info,table2=171,name=param,value=246,data=246.171,short_name='None',long_name='Cloud liquid water content',unit='kg kg**-1'
+info,table2=171,name=param,value=247,data=247.171,short_name='None',long_name='Cloud ice water content',unit='kg kg**-1'
+info,table2=171,name=param,value=248,data=248.171,short_name='None',long_name='Cloud cover',unit='(0 - 1)'
+info,table2=171,name=param,value=249,data=249.171,short_name='None',long_name='Accumulated ice water tendency',unit='(-1 to 1)'
+info,table2=171,name=param,value=250,data=250.171,short_name='None',long_name='Ice age',unit='(0 - 1)'
+info,table2=171,name=param,value=251,data=251.171,short_name='None',long_name='Adiabatic tendency of temperature',unit='K'
+info,table2=171,name=param,value=252,data=252.171,short_name='None',long_name='Adiabatic tendency of humidity',unit='kg kg**-1'
+info,table2=171,name=param,value=253,data=253.171,short_name='None',long_name='Adiabatic tendency of zonal wind',unit='m s**-1'
+info,table2=171,name=param,value=254,data=254.171,short_name='None',long_name='Adiabatic tendency of meridional wind',unit='m s**-1'
+info,table2=171,name=param,value=255,data=255.171,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=172,name=param,value=44,data=44.172,short_name='None',long_name='Snow evaporation',unit='m of water s**-1'
+info,table2=172,name=param,value=45,data=45.172,short_name='None',long_name='Snowmelt',unit='m of water s**-1'
+info,table2=172,name=param,value=48,data=48.172,short_name='None',long_name='Magnitude of surface stress',unit='N m**-2'
+info,table2=172,name=param,value=50,data=50.172,short_name='None',long_name='Large-scale precipitation fraction',unit='-'
+info,table2=172,name=param,value=142,data=142.172,short_name='None',long_name='Stratiform precipitation (Large-scale precipitation)',unit='m s**-1'
+info,table2=172,name=param,value=143,data=143.172,short_name='None',long_name='Convective precipitation',unit='m s**-1'
+info,table2=172,name=param,value=144,data=144.172,short_name='None',long_name='Snowfall (convective + stratiform)',unit='m of water equivalent s**-1'
+info,table2=172,name=param,value=145,data=145.172,short_name='None',long_name='Boundary layer dissipation',unit='W m**-2'
+info,table2=172,name=param,value=146,data=146.172,short_name='None',long_name='Surface sensible heat flux',unit='W m**-2'
+info,table2=172,name=param,value=147,data=147.172,short_name='None',long_name='Surface latent heat flux',unit='W m**-2'
+info,table2=172,name=param,value=149,data=149.172,short_name='None',long_name='Surface net radiation',unit='W m**-2'
+info,table2=172,name=param,value=153,data=153.172,short_name='None',long_name='Short-wave heating rate',unit='K s**-1'
+info,table2=172,name=param,value=154,data=154.172,short_name='None',long_name='Long-wave heating rate',unit='K s**-1'
+info,table2=172,name=param,value=169,data=169.172,short_name='None',long_name='Surface solar radiation downwards',unit='W m**-2'
+info,table2=172,name=param,value=175,data=175.172,short_name='None',long_name='Surface thermal radiation downwards',unit='W m**-2'
+info,table2=172,name=param,value=176,data=176.172,short_name='None',long_name='Surface solar radiation',unit='W m**-2'
+info,table2=172,name=param,value=177,data=177.172,short_name='None',long_name='Surface thermal radiation',unit='W m**-2'
+info,table2=172,name=param,value=178,data=178.172,short_name='None',long_name='Top solar radiation',unit='W m**-2'
+info,table2=172,name=param,value=179,data=179.172,short_name='None',long_name='Top thermal radiation',unit='W m**-2'
+info,table2=172,name=param,value=180,data=180.172,short_name='None',long_name='East-West surface stress',unit='N m**-2'
+info,table2=172,name=param,value=181,data=181.172,short_name='None',long_name='North-South surface stress',unit='N m**-2'
+info,table2=172,name=param,value=182,data=182.172,short_name='None',long_name='Evaporation',unit='m of water s**-1'
+info,table2=172,name=param,value=189,data=189.172,short_name='None',long_name='Sunshine duration',unit='-'
+info,table2=172,name=param,value=195,data=195.172,short_name='None',long_name='Latitudinal component of gravity wave stress',unit='N m**-2'
+info,table2=172,name=param,value=196,data=196.172,short_name='None',long_name='Meridional component of gravity wave stress',unit='N m**-2'
+info,table2=172,name=param,value=197,data=197.172,short_name='None',long_name='Gravity wave dissipation',unit='W m**-2'
+info,table2=172,name=param,value=205,data=205.172,short_name='None',long_name='Runoff',unit='m s**-1'
+info,table2=172,name=param,value=208,data=208.172,short_name='None',long_name='Top net solar radiation, clear sky',unit='W m**-2'
+info,table2=172,name=param,value=209,data=209.172,short_name='None',long_name='Top net thermal radiation, clear sky',unit='W m**-2'
+info,table2=172,name=param,value=210,data=210.172,short_name='None',long_name='Surface net solar radiation, clear sky',unit='W m**-2'
+info,table2=172,name=param,value=211,data=211.172,short_name='None',long_name='Surface net thermal radiation, clear sky',unit='W m**-2'
+info,table2=172,name=param,value=212,data=212.172,short_name='None',long_name='Solar insolation',unit='W m**-2 s**-1'
+info,table2=172,name=param,value=228,data=228.172,short_name='None',long_name='Total precipitation',unit='m s**-1'
+info,table2=172,name=param,value=239,data=239.172,short_name='None',long_name='Convective snowfall',unit='m of water equivalent s**-1'
+info,table2=172,name=param,value=240,data=240.172,short_name='None',long_name='Large-scale snowfall',unit='m of water equivalent s**-1'
+info,table2=172,name=param,value=255,data=255.172,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=173,name=param,value=44,data=44.173,short_name='None',long_name='Snow evaporation anomaly',unit='m of water s**-1'
+info,table2=173,name=param,value=45,data=45.173,short_name='None',long_name='Snowmelt anomaly',unit='m of water s**-1'
+info,table2=173,name=param,value=48,data=48.173,short_name='None',long_name='Magnitude of surface stress anomaly',unit='N m**-2'
+info,table2=173,name=param,value=50,data=50.173,short_name='None',long_name='Large-scale precipitation fraction anomaly',unit='-'
+info,table2=173,name=param,value=142,data=142.173,short_name='None',long_name='Stratiform precipitation (Large-scale precipitation) anomaly',unit='m s**-1'
+info,table2=173,name=param,value=143,data=143.173,short_name='None',long_name='Convective precipitation anomaly',unit='m s**-1'
+info,table2=173,name=param,value=144,data=sfara,short_name='SFARA',long_name='Snowfall (convective + stratiform) anomalous rate of accumulation',unit='m of water equivalent s**-1'
+info,table2=173,name=param,value=145,data=145.173,short_name='None',long_name='Boundary layer dissipation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=146,data=146.173,short_name='None',long_name='Surface sensible heat flux anomaly',unit='W m**-2'
+info,table2=173,name=param,value=147,data=147.173,short_name='None',long_name='Surface latent heat flux anomaly',unit='W m**-2'
+info,table2=173,name=param,value=149,data=149.173,short_name='None',long_name='Surface net radiation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=153,data=153.173,short_name='None',long_name='Short-wave heating rate anomaly',unit='K s**-1'
+info,table2=173,name=param,value=154,data=154.173,short_name='None',long_name='Long-wave heating rate anomaly',unit='K s**-1'
+info,table2=173,name=param,value=169,data=169.173,short_name='None',long_name='Surface solar radiation downwards anomaly',unit='W m**-2'
+info,table2=173,name=param,value=175,data=175.173,short_name='None',long_name='Surface thermal radiation downwards anomaly',unit='W m**-2'
+info,table2=173,name=param,value=176,data=176.173,short_name='None',long_name='Surface solar radiation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=177,data=177.173,short_name='None',long_name='Surface thermal radiation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=178,data=178.173,short_name='None',long_name='Top solar radiation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=179,data=179.173,short_name='None',long_name='Top thermal radiation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=180,data=180.173,short_name='None',long_name='East-West surface stress anomaly',unit='N m**-2'
+info,table2=173,name=param,value=181,data=181.173,short_name='None',long_name='North-South surface stress anomaly',unit='N m**-2'
+info,table2=173,name=param,value=182,data=182.173,short_name='None',long_name='Evaporation anomaly',unit='m of water s**-1'
+info,table2=173,name=param,value=189,data=sundara,short_name='SUNDARA',long_name='Sunshine duration anomalous rate of accumulation',unit='dimensionless'
+info,table2=173,name=param,value=195,data=195.173,short_name='None',long_name='Latitudinal component of gravity wave stress anomaly',unit='N m**-2'
+info,table2=173,name=param,value=196,data=196.173,short_name='None',long_name='Meridional component of gravity wave stress anomaly',unit='N m**-2'
+info,table2=173,name=param,value=197,data=197.173,short_name='None',long_name='Gravity wave dissipation anomaly',unit='W m**-2'
+info,table2=173,name=param,value=205,data=205.173,short_name='None',long_name='Runoff anomaly',unit='m s**-1'
+info,table2=173,name=param,value=208,data=208.173,short_name='None',long_name='Top net solar radiation, clear sky anomaly',unit='W m**-2'
+info,table2=173,name=param,value=209,data=209.173,short_name='None',long_name='Top net thermal radiation, clear sky anomaly',unit='W m**-2'
+info,table2=173,name=param,value=210,data=210.173,short_name='None',long_name='Surface net solar radiation, clear sky anomaly',unit='W m**-2'
+info,table2=173,name=param,value=211,data=211.173,short_name='None',long_name='Surface net thermal radiation, clear sky anomaly',unit='W m**-2'
+info,table2=173,name=param,value=212,data=212.173,short_name='None',long_name='Solar insolation anomaly',unit='W m**-2 s**-1'
+info,table2=173,name=param,value=228,data=tpara,short_name='TPARA',long_name='Total precipitation anomalous rate of accumulation',unit='m s**-1'
+info,table2=173,name=param,value=239,data=239.173,short_name='None',long_name='Convective snowfall anomaly',unit='m of water equivalent s**-1'
+info,table2=173,name=param,value=240,data=240.173,short_name='None',long_name='Large-scale snowfall anomaly',unit='m of water equivalent s**-1'
+info,table2=173,name=param,value=255,data=255.173,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=174,name=param,value=6,data=6.174,short_name='None',long_name='Total soil moisture',unit='m'
+info,table2=174,name=param,value=8,data=sro,short_name='SRO',long_name='Surface runoff',unit='kg m**-2'
+info,table2=174,name=param,value=9,data=ssro,short_name='SSRO',long_name='Sub-surface runoff',unit='kg m**-2'
+info,table2=174,name=param,value=31,data=31.174,short_name='None',long_name='Fraction of sea-ice in sea',unit='(0 - 1)'
+info,table2=174,name=param,value=34,data=34.174,short_name='None',long_name='Open-sea surface temperature',unit='K'
+info,table2=174,name=param,value=39,data=39.174,short_name='None',long_name='Volumetric soil water layer 1',unit='m**3 m**-3'
+info,table2=174,name=param,value=40,data=40.174,short_name='None',long_name='Volumetric soil water layer 2',unit='m**3 m**-3'
+info,table2=174,name=param,value=41,data=41.174,short_name='None',long_name='Volumetric soil water layer 3',unit='m**3 m**-3'
+info,table2=174,name=param,value=42,data=42.174,short_name='None',long_name='Volumetric soil water layer 4',unit='m**3 m**-3'
+info,table2=174,name=param,value=49,data=49.174,short_name='None',long_name='10 metre wind gust over last 24 hours',unit='m s**-1'
+info,table2=174,name=param,value=55,data=55.174,short_name='None',long_name='1.5m temperature - mean over last 24 hours',unit='K'
+info,table2=174,name=param,value=83,data=83.174,short_name='None',long_name='Net primary productivity',unit='kg C m**-2 s**-1'
+info,table2=174,name=param,value=85,data=85.174,short_name='None',long_name='10m U wind over land',unit='m s**-1'
+info,table2=174,name=param,value=86,data=86.174,short_name='None',long_name='10m V wind over land',unit='m s**-1'
+info,table2=174,name=param,value=87,data=87.174,short_name='None',long_name='1.5m temperature over land',unit='K'
+info,table2=174,name=param,value=88,data=88.174,short_name='None',long_name='1.5m dewpoint temperature over land',unit='K'
+info,table2=174,name=param,value=89,data=89.174,short_name='None',long_name='Top incoming solar radiation',unit='W m**-2 s'
+info,table2=174,name=param,value=90,data=90.174,short_name='None',long_name='Top outgoing solar radiation',unit='W m**-2 s'
+info,table2=174,name=param,value=94,data=94.174,short_name='None',long_name='Mean sea surface temperature',unit='K'
+info,table2=174,name=param,value=95,data=95.174,short_name='None',long_name='1.5m specific humidity',unit='kg kg**-1'
+info,table2=174,name=param,value=98,data=98.174,short_name='None',long_name='Sea-ice thickness',unit='m'
+info,table2=174,name=param,value=99,data=99.174,short_name='None',long_name='Liquid water potential temperature',unit='K'
+info,table2=174,name=param,value=110,data=110.174,short_name='None',long_name='Ocean ice concentration',unit='(0 - 1)'
+info,table2=174,name=param,value=111,data=111.174,short_name='None',long_name='Ocean mean ice depth',unit='m'
+info,table2=174,name=param,value=139,data=139.174,short_name='None',long_name='Soil temperature layer 1',unit='K'
+info,table2=174,name=param,value=164,data=164.174,short_name='None',long_name='Average potential temperature in upper 293.4m',unit='degrees C'
+info,table2=174,name=param,value=167,data=167.174,short_name='None',long_name='1.5m temperature',unit='K'
+info,table2=174,name=param,value=168,data=168.174,short_name='None',long_name='1.5m dewpoint temperature',unit='K'
+info,table2=174,name=param,value=170,data=170.174,short_name='None',long_name='Soil temperature layer 2',unit='K'
+info,table2=174,name=param,value=172,data=172.174,short_name='None',long_name='Fractional land mask',unit='(0 - 1)'
+info,table2=174,name=param,value=175,data=175.174,short_name='None',long_name='Average salinity in upper 293.4m',unit='psu'
+info,table2=174,name=param,value=183,data=183.174,short_name='None',long_name='Soil temperature layer 3',unit='K'
+info,table2=174,name=param,value=201,data=201.174,short_name='None',long_name='1.5m temperature - maximum over last 24 hours',unit='K'
+info,table2=174,name=param,value=202,data=202.174,short_name='None',long_name='1.5m temperature - minimum over last 24 hours',unit='K'
+info,table2=174,name=param,value=236,data=236.174,short_name='None',long_name='Soil temperature layer 4',unit='K'
+info,table2=174,name=param,value=255,data=255.174,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=175,name=param,value=6,data=6.175,short_name='None',long_name='Total soil moisture',unit='m'
+info,table2=175,name=param,value=31,data=31.175,short_name='None',long_name='Fraction of sea-ice in sea',unit='(0 - 1)'
+info,table2=175,name=param,value=34,data=34.175,short_name='None',long_name='Open-sea surface temperature',unit='K'
+info,table2=175,name=param,value=39,data=39.175,short_name='None',long_name='Volumetric soil water layer 1',unit='m**3 m**-3'
+info,table2=175,name=param,value=40,data=40.175,short_name='None',long_name='Volumetric soil water layer 2',unit='m**3 m**-3'
+info,table2=175,name=param,value=41,data=41.175,short_name='None',long_name='Volumetric soil water layer 3',unit='m**3 m**-3'
+info,table2=175,name=param,value=42,data=42.175,short_name='None',long_name='Volumetric soil water layer 4',unit='m**3 m**-3'
+info,table2=175,name=param,value=49,data=49.175,short_name='None',long_name='10m wind gust over last 24 hours',unit='m s**-1'
+info,table2=175,name=param,value=55,data=55.175,short_name='None',long_name='1.5m temperature - mean over last 24 hours',unit='K'
+info,table2=175,name=param,value=83,data=83.175,short_name='None',long_name='Net primary productivity',unit='kg C m**-2 s**-1'
+info,table2=175,name=param,value=85,data=85.175,short_name='None',long_name='10m U wind over land',unit='m s**-1'
+info,table2=175,name=param,value=86,data=86.175,short_name='None',long_name='10m V wind over land',unit='m s**-1'
+info,table2=175,name=param,value=87,data=87.175,short_name='None',long_name='1.5m temperature over land',unit='K'
+info,table2=175,name=param,value=88,data=88.175,short_name='None',long_name='1.5m dewpoint temperature over land',unit='K'
+info,table2=175,name=param,value=89,data=89.175,short_name='None',long_name='Top incoming solar radiation',unit='W m**-2 s'
+info,table2=175,name=param,value=90,data=90.175,short_name='None',long_name='Top outgoing solar radiation',unit='W m**-2 s'
+info,table2=175,name=param,value=110,data=110.175,short_name='None',long_name='Ocean ice concentration',unit='(0 - 1)'
+info,table2=175,name=param,value=111,data=111.175,short_name='None',long_name='Ocean mean ice depth',unit='m'
+info,table2=175,name=param,value=139,data=139.175,short_name='None',long_name='Soil temperature layer 1',unit='K'
+info,table2=175,name=param,value=164,data=164.175,short_name='None',long_name='Average potential temperature in upper 293.4m',unit='degrees C'
+info,table2=175,name=param,value=167,data=167.175,short_name='None',long_name='1.5m temperature',unit='K'
+info,table2=175,name=param,value=168,data=168.175,short_name='None',long_name='1.5m dewpoint temperature',unit='K'
+info,table2=175,name=param,value=170,data=170.175,short_name='None',long_name='Soil temperature layer 2',unit='K'
+info,table2=175,name=param,value=172,data=172.175,short_name='None',long_name='Fractional land mask',unit='(0 - 1)'
+info,table2=175,name=param,value=175,data=175.175,short_name='None',long_name='Average salinity in upper 293.4m',unit='psu'
+info,table2=175,name=param,value=183,data=183.175,short_name='None',long_name='Soil temperature layer 3',unit='K'
+info,table2=175,name=param,value=201,data=201.175,short_name='None',long_name='1.5m temperature - maximum over last 24 hours',unit='K'
+info,table2=175,name=param,value=202,data=202.175,short_name='None',long_name='1.5m temperature - minimum over last 24 hours',unit='K'
+info,table2=175,name=param,value=236,data=236.175,short_name='None',long_name='Soil temperature layer 4',unit='K'
+info,table2=175,name=param,value=255,data=255.175,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=180,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=180,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=180,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=180,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=180,name=param,value=133,data=q,short_name='Q',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=180,name=param,value=134,data=sp,short_name='SP',long_name='Surface pressure',unit='Pa'
+info,table2=180,name=param,value=137,data=tcwv,short_name='TCWV',long_name='Total column water vapour',unit='kg m**-2'
+info,table2=180,name=param,value=138,data=vo,short_name='VO',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=180,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water equivalent'
+info,table2=180,name=param,value=142,data=lsp,short_name='LSP',long_name='Large-scale precipitation',unit='m'
+info,table2=180,name=param,value=143,data=cp,short_name='CP',long_name='Convective precipitation',unit='m'
+info,table2=180,name=param,value=144,data=sf,short_name='SF',long_name='Snowfall',unit='m of water equivalent'
+info,table2=180,name=param,value=146,data=sshf,short_name='SSHF',long_name='Surface sensible heat flux',unit='W m**-2 s'
+info,table2=180,name=param,value=147,data=slhf,short_name='SLHF',long_name='Surface latent heat flux',unit='W m**-2 s'
+info,table2=180,name=param,value=149,data=tsw,short_name='TSW',long_name='Total soil wetness',unit='m'
+info,table2=180,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=180,name=param,value=155,data=d,short_name='D',long_name='Divergence',unit='s**-1'
+info,table2=180,name=param,value=164,data=tcc,short_name='TCC',long_name='Total cloud cover',unit='(0 - 1)'
+info,table2=180,name=param,value=165,data=10u,short_name='10U',long_name='10 metre U wind component',unit='m s**-1'
+info,table2=180,name=param,value=166,data=10v,short_name='10V',long_name='10 metre V wind component',unit='m s**-1'
+info,table2=180,name=param,value=167,data=2t,short_name='2T',long_name='2 metre temperature',unit='K'
+info,table2=180,name=param,value=168,data=2d,short_name='2D',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=180,name=param,value=172,data=lsm,short_name='LSM',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=180,name=param,value=176,data=ssr,short_name='SSR',long_name='Surface solar radiation',unit='J m**-2 s'
+info,table2=180,name=param,value=177,data=str,short_name='STR',long_name='Surface thermal radiation',unit='J m**-2 s'
+info,table2=180,name=param,value=178,data=tsr,short_name='TSR',long_name='Top solar radiation',unit='J m**-2 s'
+info,table2=180,name=param,value=179,data=ttr,short_name='TTR',long_name='Top thermal radiation',unit='J m**-2 s'
+info,table2=180,name=param,value=180,data=ewss,short_name='EWSS',long_name='East-West surface stress',unit='N m**-2 s'
+info,table2=180,name=param,value=181,data=nsss,short_name='NSSS',long_name='North-South surface stress',unit='N m**-2 s'
+info,table2=180,name=param,value=182,data=e,short_name='E',long_name='Evaporation',unit='m of water'
+info,table2=180,name=param,value=205,data=ro,short_name='RO',long_name='Runoff',unit='m'
+info,table2=180,name=param,value=255,data=255.180,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=190,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=190,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=190,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=190,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=190,name=param,value=133,data=q,short_name='Q',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=190,name=param,value=139,data=stl1,short_name='STL1',long_name='Soil temperature level 1',unit='K'
+info,table2=190,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water'
+info,table2=190,name=param,value=146,data=sshf,short_name='SSHF',long_name='Surface sensible heat flux',unit='W m**-2 s'
+info,table2=190,name=param,value=147,data=slhf,short_name='SLHF',long_name='Surface latent heat flux',unit='W m**-2 s'
+info,table2=190,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=190,name=param,value=164,data=tcc,short_name='TCC',long_name='Total cloud cover',unit='(0 - 1)'
+info,table2=190,name=param,value=165,data=10u,short_name='10U',long_name='10 metre U wind component',unit='m s**-1'
+info,table2=190,name=param,value=166,data=10v,short_name='10V',long_name='10 metre V wind component',unit='m s**-1'
+info,table2=190,name=param,value=167,data=2t,short_name='2T',long_name='2 metre temperature',unit='K'
+info,table2=190,name=param,value=168,data=2d,short_name='2D',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=190,name=param,value=169,data=ssrd,short_name='SSRD',long_name='Downward surface solar radiation',unit='W m**-2 s (W m**-2 for monthly means)'
+info,table2=190,name=param,value=170,data=cap,short_name='CAP',long_name='Field capacity',unit='(0 - 1)'
+info,table2=190,name=param,value=171,data=wilt,short_name='WILT',long_name='Wilting point',unit='(0 - 1)'
+info,table2=190,name=param,value=172,data=lsm,short_name='LSM',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=190,name=param,value=173,data=sr,short_name='SR',long_name='Roughness length',unit='(0 - 1)'
+info,table2=190,name=param,value=174,data=al,short_name='AL',long_name='Albedo',unit='(0 - 1)'
+info,table2=190,name=param,value=175,data=strd,short_name='STRD',long_name='Downward surface long wave radiation',unit='W m**-2 s (W m**-2 for monthly means)'
+info,table2=190,name=param,value=176,data=ssr,short_name='SSR',long_name='Surface net solar radiation',unit='W m**-2 s (W m**-2 for monthly means)'
+info,table2=190,name=param,value=177,data=str,short_name='STR',long_name='Surface net long wave radiation',unit='W m**-2 s (W m**-2 for monthly means)'
+info,table2=190,name=param,value=178,data=tsr,short_name='TSR',long_name='Top net solar radiation',unit='W m**-2 s (W m**-2 for monthly means)'
+info,table2=190,name=param,value=179,data=ttr,short_name='TTR',long_name='Top net long wave radiation',unit='W m**-2 s (W m**-2 for monthly means)'
+info,table2=190,name=param,value=182,data=e,short_name='E',long_name='Evaporation',unit='m (m s**-1 for monthly means)'
+info,table2=190,name=param,value=201,data=mx2t,short_name='MX2T',long_name='Maximum 2 metre temperature',unit='K'
+info,table2=190,name=param,value=202,data=mn2t,short_name='MN2T',long_name='Minimum 2 metre temperature',unit='K'
+info,table2=190,name=param,value=228,data=tp,short_name='TP',long_name='Total precipitation',unit='m (m s**-1 for monthly means)'
+info,table2=190,name=param,value=229,data=tsm,short_name='TSM',long_name='Total soil moisture',unit='m**3 m**-3'
+info,table2=190,name=param,value=255,data=255.190,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=200,name=param,value=1,data=strf,short_name='STRF',long_name='Stream function',unit='m**2 s**-1'
+info,table2=200,name=param,value=2,data=vpot,short_name='VPOT',long_name='Velocity potential',unit='m**2 s**-1'
+info,table2=200,name=param,value=3,data=pt,short_name='PT',long_name='Potential temperature',unit='K'
+info,table2=200,name=param,value=4,data=eqpt,short_name='EQPT',long_name='Equivalent potential temperature',unit='K'
+info,table2=200,name=param,value=5,data=sept,short_name='SEPT',long_name='Saturated equivalent potential temperature',unit='K'
+info,table2=200,name=param,value=11,data=udvw,short_name='UDVW',long_name='U component of divergent wind',unit='m s**-1'
+info,table2=200,name=param,value=12,data=vdvw,short_name='VDVW',long_name='V component of divergent wind',unit='m s**-1'
+info,table2=200,name=param,value=13,data=urtw,short_name='URTW',long_name='U component of rotational wind',unit='m s**-1'
+info,table2=200,name=param,value=14,data=vrtw,short_name='VRTW',long_name='V component of rotational wind',unit='m s**-1'
+info,table2=200,name=param,value=21,data=uctp,short_name='UCTP',long_name='Unbalanced component of temperature',unit='K'
+info,table2=200,name=param,value=22,data=ucln,short_name='UCLN',long_name='Unbalanced component of logarithm of surface pressure',unit='-'
+info,table2=200,name=param,value=23,data=ucdv,short_name='UCDV',long_name='Unbalanced component of divergence',unit='s**-1'
+info,table2=200,name=param,value=24,data=24.200,short_name='None',long_name='Reserved for future unbalanced components',unit='-'
+info,table2=200,name=param,value=25,data=25.200,short_name='None',long_name='Reserved for future unbalanced components',unit='-'
+info,table2=200,name=param,value=26,data=cl,short_name='CL',long_name='Lake cover',unit='(0 - 1)'
+info,table2=200,name=param,value=27,data=cvl,short_name='CVL',long_name='Low vegetation cover',unit='(0 - 1)'
+info,table2=200,name=param,value=28,data=cvh,short_name='CVH',long_name='High vegetation cover',unit='(0 - 1)'
+info,table2=200,name=param,value=29,data=tvl,short_name='TVL',long_name='Type of low vegetation',unit='-'
+info,table2=200,name=param,value=30,data=tvh,short_name='TVH',long_name='Type of high vegetation',unit='-'
+info,table2=200,name=param,value=31,data=ci,short_name='CI',long_name='Sea-ice cover',unit='(0 - 1)'
+info,table2=200,name=param,value=32,data=asn,short_name='ASN',long_name='Snow albedo',unit='(0 - 1)'
+info,table2=200,name=param,value=33,data=rsn,short_name='RSN',long_name='Snow density',unit='kg m**-3'
+info,table2=200,name=param,value=34,data=sstk,short_name='SSTK',long_name='Sea surface temperature',unit='K'
+info,table2=200,name=param,value=35,data=istl1,short_name='ISTL1',long_name='Ice surface temperature layer 1',unit='K'
+info,table2=200,name=param,value=36,data=istl2,short_name='ISTL2',long_name='Ice surface temperature layer 2',unit='K'
+info,table2=200,name=param,value=37,data=istl3,short_name='ISTL3',long_name='Ice surface temperature layer 3',unit='K'
+info,table2=200,name=param,value=38,data=istl4,short_name='ISTL4',long_name='Ice surface temperature layer 4',unit='K'
+info,table2=200,name=param,value=39,data=swvl1,short_name='SWVL1',long_name='Volumetric soil water layer 1',unit='m**3 m**-3'
+info,table2=200,name=param,value=40,data=swvl2,short_name='SWVL2',long_name='Volumetric soil water layer 2',unit='m**3 m**-3'
+info,table2=200,name=param,value=41,data=swvl3,short_name='SWVL3',long_name='Volumetric soil water layer 3',unit='m**3 m**-3'
+info,table2=200,name=param,value=42,data=swvl4,short_name='SWVL4',long_name='Volumetric soil water layer 4',unit='m**3 m**-3'
+info,table2=200,name=param,value=43,data=slt,short_name='SLT',long_name='Soil type',unit='-'
+info,table2=200,name=param,value=44,data=es,short_name='ES',long_name='Snow evaporation',unit='m of water'
+info,table2=200,name=param,value=45,data=smlt,short_name='SMLT',long_name='Snowmelt',unit='m of water'
+info,table2=200,name=param,value=46,data=sdur,short_name='SDUR',long_name='Solar duration',unit='s'
+info,table2=200,name=param,value=47,data=dsrp,short_name='DSRP',long_name='Direct solar radiation',unit='w m**-2'
+info,table2=200,name=param,value=48,data=magss,short_name='MAGSS',long_name='Magnitude of surface stress',unit='N m**-2 s'
+info,table2=200,name=param,value=49,data=10fg,short_name='10FG',long_name='10 metre wind gust',unit='m s**-1'
+info,table2=200,name=param,value=50,data=lspf,short_name='LSPF',long_name='Large-scale precipitation fraction',unit='s'
+info,table2=200,name=param,value=51,data=mx2t24,short_name='MX2T24',long_name='Maximum 2 metre temperature',unit='K'
+info,table2=200,name=param,value=52,data=mn2t24,short_name='MN2T24',long_name='Minimum 2 metre temperature',unit='K'
+info,table2=200,name=param,value=53,data=mont,short_name='MONT',long_name='Montgomery potential',unit='m**2 s**-2'
+info,table2=200,name=param,value=54,data=pres,short_name='PRES',long_name='Pressure',unit='Pa'
+info,table2=200,name=param,value=55,data=mean2t24,short_name='MEAN2T24',long_name='Mean 2 metre temperature in past 24 hours',unit='K'
+info,table2=200,name=param,value=56,data=mn2d24,short_name='MN2D24',long_name='Mean 2 metre dewpoint temperature in past 24 hours',unit='K'
+info,table2=200,name=param,value=57,data=uvb,short_name='UVB',long_name='Downward UV radiation at the surface',unit='w m**-2 s'
+info,table2=200,name=param,value=58,data=par,short_name='PAR',long_name='Photosynthetically active radiation at the surface',unit='w m**-2 s'
+info,table2=200,name=param,value=59,data=cape,short_name='CAPE',long_name='Convective available potential energy',unit='J kg**-1'
+info,table2=200,name=param,value=60,data=pv,short_name='PV',long_name='Potential vorticity',unit='K m**2 kg**-1 s**-1'
+info,table2=200,name=param,value=61,data=tpo,short_name='TPO',long_name='Total precipitation from observations',unit='Millimetres*100 + number of stations'
+info,table2=200,name=param,value=62,data=obct,short_name='OBCT',long_name='Observation count',unit='-'
+info,table2=200,name=param,value=63,data=63.200,short_name='None',long_name='Start time for skin temperature difference',unit='s'
+info,table2=200,name=param,value=64,data=64.200,short_name='None',long_name='Finish time for skin temperature difference',unit='s'
+info,table2=200,name=param,value=65,data=65.200,short_name='None',long_name='Skin temperature difference',unit='K'
+info,table2=200,name=param,value=66,data=66.200,short_name='None',long_name='Leaf area index, low vegetation',unit='m**2 / m**2'
+info,table2=200,name=param,value=67,data=67.200,short_name='None',long_name='Leaf area index, high vegetation',unit='m**2 / m**2'
+info,table2=200,name=param,value=68,data=68.200,short_name='None',long_name='Minimum stomatal resistance, low vegetation',unit='s m**-1'
+info,table2=200,name=param,value=69,data=69.200,short_name='None',long_name='Minimum stomatal resistance, high vegetation',unit='s m**-1'
+info,table2=200,name=param,value=70,data=70.200,short_name='None',long_name='Biome cover, low vegetation',unit='(0 - 1)'
+info,table2=200,name=param,value=71,data=71.200,short_name='None',long_name='Biome cover, high vegetation',unit='(0 - 1)'
+info,table2=200,name=param,value=78,data=78.200,short_name='None',long_name='Total column liquid water',unit='kg m**-2'
+info,table2=200,name=param,value=79,data=79.200,short_name='None',long_name='Total column ice water',unit='kg m**-2'
+info,table2=200,name=param,value=80,data=80.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=81,data=81.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=82,data=82.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=83,data=83.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=84,data=84.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=85,data=85.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=86,data=86.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=87,data=87.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=88,data=88.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=89,data=89.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=90,data=90.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=91,data=91.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=92,data=92.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=93,data=93.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=94,data=94.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=95,data=95.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=96,data=96.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=97,data=97.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=98,data=98.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=99,data=99.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=100,data=100.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=101,data=101.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=102,data=102.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=103,data=103.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=104,data=104.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=105,data=105.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=106,data=106.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=107,data=107.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=108,data=108.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=109,data=109.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=110,data=110.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=111,data=111.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=112,data=112.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=113,data=113.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=114,data=114.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=115,data=115.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=116,data=116.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=117,data=117.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=118,data=118.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=119,data=119.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=120,data=120.200,short_name='None',long_name='Experimental product',unit='-'
+info,table2=200,name=param,value=121,data=mx2t6,short_name='MX2T6',long_name='Maximum temperature at 2 metres',unit='K'
+info,table2=200,name=param,value=122,data=mn2t6,short_name='MN2T6',long_name='Minimum temperature at 2 metres',unit='K'
+info,table2=200,name=param,value=123,data=10fg6,short_name='10FG6',long_name='10 metre wind gust in the past 6 hours',unit='m s**-1'
+info,table2=200,name=param,value=125,data=125.200,short_name='None',long_name='Vertically integrated total energy',unit='J m**-2'
+info,table2=200,name=param,value=126,data=126.200,short_name='None',long_name='Generic parameter for sensitive area prediction',unit='Various'
+info,table2=200,name=param,value=127,data=at,short_name='AT',long_name='Atmospheric tide',unit='-'
+info,table2=200,name=param,value=128,data=bv,short_name='BV',long_name='Budget values',unit='-'
+info,table2=200,name=param,value=129,data=z,short_name='Z',long_name='Geopotential',unit='m**2 s**-2'
+info,table2=200,name=param,value=130,data=t,short_name='T',long_name='Temperature',unit='K'
+info,table2=200,name=param,value=131,data=u,short_name='U',long_name='U velocity',unit='m s**-1'
+info,table2=200,name=param,value=132,data=v,short_name='V',long_name='V velocity',unit='m s**-1'
+info,table2=200,name=param,value=133,data=q,short_name='Q',long_name='Specific humidity',unit='kg kg**-1'
+info,table2=200,name=param,value=134,data=sp,short_name='SP',long_name='Surface pressure',unit='Pa'
+info,table2=200,name=param,value=135,data=w,short_name='W',long_name='Vertical velocity',unit='Pa s**-1'
+info,table2=200,name=param,value=136,data=tcw,short_name='TCW',long_name='Total column water',unit='kg m**-2'
+info,table2=200,name=param,value=137,data=tcwv,short_name='TCWV',long_name='Total column water vapour',unit='kg m**-2'
+info,table2=200,name=param,value=138,data=vo,short_name='VO',long_name='Vorticity (relative)',unit='s**-1'
+info,table2=200,name=param,value=139,data=stl1,short_name='STL1',long_name='Soil temperature level 1',unit='K'
+info,table2=200,name=param,value=140,data=swl1,short_name='SWL1',long_name='Soil wetness level 1',unit='m of water'
+info,table2=200,name=param,value=141,data=sd,short_name='SD',long_name='Snow depth',unit='m of water equivalent'
+info,table2=200,name=param,value=142,data=lsp,short_name='LSP',long_name='Stratiform precipitation (Large-scale precipitation)',unit='m'
+info,table2=200,name=param,value=143,data=cp,short_name='CP',long_name='Convective precipitation',unit='m'
+info,table2=200,name=param,value=144,data=sf,short_name='SF',long_name='Snowfall (convective + stratiform)',unit='m of water equivalent'
+info,table2=200,name=param,value=145,data=bld,short_name='BLD',long_name='Boundary layer dissipation',unit='W m**-2 s'
+info,table2=200,name=param,value=146,data=sshf,short_name='SSHF',long_name='Surface sensible heat flux',unit='W m**-2 s'
+info,table2=200,name=param,value=147,data=slhf,short_name='SLHF',long_name='Surface latent heat flux',unit='W m**-2 s'
+info,table2=200,name=param,value=148,data=chnk,short_name='CHNK',long_name='Charnock',unit='-'
+info,table2=200,name=param,value=149,data=snr,short_name='SNR',long_name='Surface net radiation',unit='W m**-2 s'
+info,table2=200,name=param,value=150,data=tnr,short_name='TNR',long_name='Top net radiation',unit='-'
+info,table2=200,name=param,value=151,data=msl,short_name='MSL',long_name='Mean sea level pressure',unit='Pa'
+info,table2=200,name=param,value=152,data=lnsp,short_name='LNSP',long_name='Logarithm of surface pressure',unit='-'
+info,table2=200,name=param,value=153,data=swhr,short_name='SWHR',long_name='Short-wave heating rate',unit='K'
+info,table2=200,name=param,value=154,data=lwhr,short_name='LWHR',long_name='Long-wave heating rate',unit='K'
+info,table2=200,name=param,value=155,data=d,short_name='D',long_name='Divergence',unit='s**-1'
+info,table2=200,name=param,value=156,data=gh,short_name='GH',long_name='Height',unit='m'
+info,table2=200,name=param,value=157,data=r,short_name='R',long_name='Relative humidity',unit='%'
+info,table2=200,name=param,value=158,data=tsp,short_name='TSP',long_name='Tendency of surface pressure',unit='Pa s**-1'
+info,table2=200,name=param,value=159,data=blh,short_name='BLH',long_name='Boundary layer height',unit='m'
+info,table2=200,name=param,value=160,data=sdor,short_name='SDOR',long_name='Standard deviation of orography',unit='-'
+info,table2=200,name=param,value=161,data=isor,short_name='ISOR',long_name='Anisotropy of sub-gridscale orography',unit='-'
+info,table2=200,name=param,value=162,data=anor,short_name='ANOR',long_name='Angle of sub-gridscale orography',unit='rad'
+info,table2=200,name=param,value=163,data=slor,short_name='SLOR',long_name='Slope of sub-gridscale orography',unit='-'
+info,table2=200,name=param,value=164,data=tcc,short_name='TCC',long_name='Total cloud cover',unit='(0 - 1)'
+info,table2=200,name=param,value=165,data=10u,short_name='10U',long_name='10 metre U wind component',unit='m s**-1'
+info,table2=200,name=param,value=166,data=10v,short_name='10V',long_name='10 metre V wind component',unit='m s**-1'
+info,table2=200,name=param,value=167,data=2t,short_name='2T',long_name='2 metre temperature',unit='K'
+info,table2=200,name=param,value=168,data=2d,short_name='2D',long_name='2 metre dewpoint temperature',unit='K'
+info,table2=200,name=param,value=169,data=ssrd,short_name='SSRD',long_name='Surface solar radiation downwards',unit='W m**-2 s'
+info,table2=200,name=param,value=170,data=stl2,short_name='STL2',long_name='Soil temperature level 2',unit='K'
+info,table2=200,name=param,value=171,data=swl2,short_name='SWL2',long_name='Soil wetness level 2',unit='m of water'
+info,table2=200,name=param,value=172,data=lsm,short_name='LSM',long_name='Land-sea mask',unit='(0 - 1)'
+info,table2=200,name=param,value=173,data=sr,short_name='SR',long_name='Surface roughness',unit='m'
+info,table2=200,name=param,value=174,data=al,short_name='AL',long_name='Albedo',unit='(0 - 1)'
+info,table2=200,name=param,value=175,data=strd,short_name='STRD',long_name='Surface thermal radiation downwards',unit='W m**-2 s'
+info,table2=200,name=param,value=176,data=ssr,short_name='SSR',long_name='Surface solar radiation',unit='W m**-2 s'
+info,table2=200,name=param,value=177,data=str,short_name='STR',long_name='Surface thermal radiation',unit='W m**-2 s'
+info,table2=200,name=param,value=178,data=tsr,short_name='TSR',long_name='Top solar radiation',unit='W m**-2 s'
+info,table2=200,name=param,value=179,data=ttr,short_name='TTR',long_name='Top thermal radiation',unit='W m**-2 s'
+info,table2=200,name=param,value=180,data=ewss,short_name='EWSS',long_name='East-West surface stress',unit='N m**-2 s'
+info,table2=200,name=param,value=181,data=nsss,short_name='NSSS',long_name='North-South surface stress',unit='N m**-2 s'
+info,table2=200,name=param,value=182,data=e,short_name='E',long_name='Evaporation',unit='m of water'
+info,table2=200,name=param,value=183,data=stl3,short_name='STL3',long_name='Soil temperature level 3',unit='K'
+info,table2=200,name=param,value=184,data=swl3,short_name='SWL3',long_name='Soil wetness level 3',unit='m of water'
+info,table2=200,name=param,value=185,data=ccc,short_name='CCC',long_name='Convective cloud cover',unit='(0 - 1)'
+info,table2=200,name=param,value=186,data=lcc,short_name='LCC',long_name='Low cloud cover',unit='(0 - 1)'
+info,table2=200,name=param,value=187,data=mcc,short_name='MCC',long_name='Medium cloud cover',unit='(0 - 1)'
+info,table2=200,name=param,value=188,data=hcc,short_name='HCC',long_name='High cloud cover',unit='(0 - 1)'
+info,table2=200,name=param,value=189,data=sund,short_name='SUND',long_name='Sunshine duration',unit='s'
+info,table2=200,name=param,value=190,data=ewov,short_name='EWOV',long_name='East-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=200,name=param,value=191,data=nsov,short_name='NSOV',long_name='North-South component of sub-gridscale orographic variance',unit='m**2'
+info,table2=200,name=param,value=192,data=nwov,short_name='NWOV',long_name='North-West/South-East component of sub-gridscale orographic variance',unit='m**2'
+info,table2=200,name=param,value=193,data=neov,short_name='NEOV',long_name='North-East/South-West component of sub-gridscale orographic variance',unit='m**2'
+info,table2=200,name=param,value=194,data=btmp,short_name='BTMP',long_name='Brightness temperature',unit='K'
+info,table2=200,name=param,value=195,data=lgws,short_name='LGWS',long_name='Latitudinal component of gravity wave stress',unit='N m**-2 s'
+info,table2=200,name=param,value=196,data=mgws,short_name='MGWS',long_name='Meridional component of gravity wave stress',unit='N m**-2 s'
+info,table2=200,name=param,value=197,data=gwd,short_name='GWD',long_name='Gravity wave dissipation',unit='W m**-2 s'
+info,table2=200,name=param,value=198,data=src,short_name='SRC',long_name='Skin reservoir content',unit='m of water'
+info,table2=200,name=param,value=199,data=veg,short_name='VEG',long_name='Vegetation fraction',unit='(0 - 1)'
+info,table2=200,name=param,value=200,data=vso,short_name='VSO',long_name='Variance of sub-gridscale orography',unit='m**2'
+info,table2=200,name=param,value=201,data=mx2t,short_name='MX2T',long_name='Maximum temperature at 2 metres since previous post-processing',unit='K'
+info,table2=200,name=param,value=202,data=mn2t,short_name='MN2T',long_name='Minimum temperature at 2 metres since previous post-processing',unit='K'
+info,table2=200,name=param,value=203,data=o3,short_name='O3',long_name='Ozone mass mixing ratio',unit='kg kg**-1'
+info,table2=200,name=param,value=204,data=paw,short_name='PAW',long_name='Precipitation analysis weights',unit='-'
+info,table2=200,name=param,value=205,data=ro,short_name='RO',long_name='Runoff',unit='m'
+info,table2=200,name=param,value=206,data=tco3,short_name='TCO3',long_name='Total column ozone',unit='kg m**-2'
+info,table2=200,name=param,value=207,data=10si,short_name='10SI',long_name='10 metre wind speed',unit='m s**-1'
+info,table2=200,name=param,value=208,data=tsrc,short_name='TSRC',long_name='Top net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=200,name=param,value=209,data=ttrc,short_name='TTRC',long_name='Top net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=200,name=param,value=210,data=ssrc,short_name='SSRC',long_name='Surface net solar radiation, clear sky',unit='W m**-2 s'
+info,table2=200,name=param,value=211,data=strc,short_name='STRC',long_name='Surface net thermal radiation, clear sky',unit='W m**-2 s'
+info,table2=200,name=param,value=212,data=tisr,short_name='TISR',long_name='TOA incident solar radiation',unit='W m**-2 s'
+info,table2=200,name=param,value=214,data=dhr,short_name='DHR',long_name='Diabatic heating by radiation',unit='K'
+info,table2=200,name=param,value=215,data=dhvd,short_name='DHVD',long_name='Diabatic heating by vertical diffusion',unit='K'
+info,table2=200,name=param,value=216,data=dhcc,short_name='DHCC',long_name='Diabatic heating by cumulus convection',unit='K'
+info,table2=200,name=param,value=217,data=dhlc,short_name='DHLC',long_name='Diabatic heating large-scale condensation',unit='K'
+info,table2=200,name=param,value=218,data=vdzw,short_name='VDZW',long_name='Vertical diffusion of zonal wind',unit='m s**-1'
+info,table2=200,name=param,value=219,data=vdmw,short_name='VDMW',long_name='Vertical diffusion of meridional wind',unit='m s**-1'
+info,table2=200,name=param,value=220,data=ewgd,short_name='EWGD',long_name='East-West gravity wave drag tendency',unit='m s**-1'
+info,table2=200,name=param,value=221,data=nsgd,short_name='NSGD',long_name='North-South gravity wave drag tendency',unit='m s**-1'
+info,table2=200,name=param,value=222,data=ctzw,short_name='CTZW',long_name='Convective tendency of zonal wind',unit='m s**-1'
+info,table2=200,name=param,value=223,data=ctmw,short_name='CTMW',long_name='Convective tendency of meridional wind',unit='m s**-1'
+info,table2=200,name=param,value=224,data=vdh,short_name='VDH',long_name='Vertical diffusion of humidity',unit='kg kg**-1'
+info,table2=200,name=param,value=225,data=htcc,short_name='HTCC',long_name='Humidity tendency by cumulus convection',unit='kg kg**-1'
+info,table2=200,name=param,value=226,data=htlc,short_name='HTLC',long_name='Humidity tendency by large-scale condensation',unit='kg kg**-1'
+info,table2=200,name=param,value=227,data=crnh,short_name='CRNH',long_name='Change from removal of negative humidity',unit='kg kg**-1'
+info,table2=200,name=param,value=228,data=tp,short_name='TP',long_name='Total precipitation',unit='m'
+info,table2=200,name=param,value=229,data=iews,short_name='IEWS',long_name='Instantaneous X surface stress',unit='N m**-2'
+info,table2=200,name=param,value=230,data=inss,short_name='INSS',long_name='Instantaneous Y surface stress',unit='N m**-2'
+info,table2=200,name=param,value=231,data=ishf,short_name='ISHF',long_name='Instantaneous surface heat flux',unit='W m**-2'
+info,table2=200,name=param,value=232,data=ie,short_name='IE',long_name='Instantaneous moisture flux',unit='kg m**-2 s'
+info,table2=200,name=param,value=233,data=asq,short_name='ASQ',long_name='Apparent surface humidity',unit='kg kg**-1'
+info,table2=200,name=param,value=234,data=lsrh,short_name='LSRH',long_name='Logarithm of surface roughness length for heat',unit='-'
+info,table2=200,name=param,value=235,data=skt,short_name='SKT',long_name='Skin temperature',unit='K'
+info,table2=200,name=param,value=236,data=stl4,short_name='STL4',long_name='Soil temperature level 4',unit='K'
+info,table2=200,name=param,value=237,data=swl4,short_name='SWL4',long_name='Soil wetness level 4',unit='m'
+info,table2=200,name=param,value=238,data=tsn,short_name='TSN',long_name='Temperature of snow layer',unit='K'
+info,table2=200,name=param,value=239,data=csf,short_name='CSF',long_name='Convective snowfall',unit='m of water equivalent'
+info,table2=200,name=param,value=240,data=lsf,short_name='LSF',long_name='Large-scale snowfall',unit='m of water equivalent'
+info,table2=200,name=param,value=241,data=acf,short_name='ACF',long_name='Accumulated cloud fraction tendency',unit='(-1 to 1)'
+info,table2=200,name=param,value=242,data=alw,short_name='ALW',long_name='Accumulated liquid water tendency',unit='(-1 to 1)'
+info,table2=200,name=param,value=243,data=fal,short_name='FAL',long_name='Forecast albedo',unit='(0 - 1)'
+info,table2=200,name=param,value=244,data=fsr,short_name='FSR',long_name='Forecast surface roughness',unit='m'
+info,table2=200,name=param,value=245,data=flsr,short_name='FLSR',long_name='Forecast logarithm of surface roughness for heat',unit='-'
+info,table2=200,name=param,value=246,data=clwc,short_name='CLWC',long_name='Cloud liquid water content',unit='kg kg**-1'
+info,table2=200,name=param,value=247,data=ciwc,short_name='CIWC',long_name='Cloud ice water content',unit='kg kg**-1'
+info,table2=200,name=param,value=248,data=cc,short_name='CC',long_name='Cloud cover',unit='(0 - 1)'
+info,table2=200,name=param,value=249,data=aiw,short_name='AIW',long_name='Accumulated ice water tendency',unit='(-1 to 1)'
+info,table2=200,name=param,value=250,data=ice,short_name='ICE',long_name='Ice age',unit='(0 - 1)'
+info,table2=200,name=param,value=251,data=atte,short_name='ATTE',long_name='Adiabatic tendency of temperature',unit='K'
+info,table2=200,name=param,value=252,data=athe,short_name='ATHE',long_name='Adiabatic tendency of humidity',unit='kg kg**-1'
+info,table2=200,name=param,value=253,data=atze,short_name='ATZE',long_name='Adiabatic tendency of zonal wind',unit='m s**-1'
+info,table2=200,name=param,value=254,data=atmw,short_name='ATMW',long_name='Adiabatic tendency of meridional wind',unit='m s**-1'
+info,table2=200,name=param,value=255,data=255.200,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=201,name=param,value=1,data=1.201,short_name='None',long_name='downward shortwave radiant flux density',unit='W m**-2'
+info,table2=201,name=param,value=2,data=2.201,short_name='None',long_name='upward shortwave radiant flux density',unit='W m**-2'
+info,table2=201,name=param,value=3,data=3.201,short_name='None',long_name='downward longwave radiant flux density',unit='W m**-2'
+info,table2=201,name=param,value=4,data=4.201,short_name='None',long_name='upward longwave radiant flux density',unit='W m**-2'
+info,table2=201,name=param,value=5,data=apab_s,short_name='APAB_S',long_name='downwd photosynthetic active radiant flux density',unit='W m**-2'
+info,table2=201,name=param,value=6,data=6.201,short_name='None',long_name='net shortwave flux',unit='W m**-2'
+info,table2=201,name=param,value=7,data=7.201,short_name='None',long_name='net longwave flux',unit='W m**-2'
+info,table2=201,name=param,value=8,data=8.201,short_name='None',long_name='total net radiative flux density',unit='W m**-2'
+info,table2=201,name=param,value=9,data=9.201,short_name='None',long_name='downw shortw radiant flux density, cloudfree part',unit='W m**-2'
+info,table2=201,name=param,value=10,data=10.201,short_name='None',long_name='upw shortw radiant flux density, cloudy part',unit='W m**-2'
+info,table2=201,name=param,value=11,data=11.201,short_name='None',long_name='downw longw radiant flux density, cloudfree part',unit='W m**-2'
+info,table2=201,name=param,value=12,data=12.201,short_name='None',long_name='upw longw radiant flux density, cloudy part',unit='W m**-2'
+info,table2=201,name=param,value=13,data=sohr_rad,short_name='SOHR_RAD',long_name='shortwave radiative heating rate',unit='K s**-1'
+info,table2=201,name=param,value=14,data=thhr_rad,short_name='THHR_RAD',long_name='longwave radiative heating rate',unit='K s**-1'
+info,table2=201,name=param,value=15,data=15.201,short_name='None',long_name='total radiative heating rate',unit='W m**-2'
+info,table2=201,name=param,value=16,data=16.201,short_name='None',long_name='soil heat flux, surface',unit='W m**-2'
+info,table2=201,name=param,value=17,data=17.201,short_name='None',long_name='soil heat flux, bottom of layer',unit='W m**-2'
+info,table2=201,name=param,value=29,data=clc,short_name='CLC',long_name='fractional cloud cover',unit='(0-1)'
+info,table2=201,name=param,value=30,data=30.201,short_name='None',long_name='cloud cover, grid scale',unit='(0-1)'
+info,table2=201,name=param,value=31,data=qc,short_name='QC',long_name='specific cloud water content',unit='kg kg**-1'
+info,table2=201,name=param,value=32,data=32.201,short_name='None',long_name='cloud water content, grid scale, vert integrated',unit='kg m**-2'
+info,table2=201,name=param,value=33,data=qi,short_name='QI',long_name='specific cloud ice content, grid scale',unit='kg kg**-1'
+info,table2=201,name=param,value=34,data=34.201,short_name='None',long_name='cloud ice content, grid scale, vert integrated',unit='kg m**-2'
+info,table2=201,name=param,value=35,data=35.201,short_name='None',long_name='specific rainwater content, grid scale',unit='kg kg**-1'
+info,table2=201,name=param,value=36,data=36.201,short_name='None',long_name='specific snow content, grid scale',unit='kg kg**-1'
+info,table2=201,name=param,value=37,data=37.201,short_name='None',long_name='specific rainwater content, gs, vert. integrated',unit='kg m**-2'
+info,table2=201,name=param,value=38,data=38.201,short_name='None',long_name='specific snow content, gs, vert. integrated',unit='kg m**-2'
+info,table2=201,name=param,value=41,data=twater,short_name='TWATER',long_name='total column water',unit='kg m**-2'
+info,table2=201,name=param,value=42,data=42.201,short_name='None',long_name='vert. integral of divergence of tot. water content',unit='kg m**-2'
+info,table2=201,name=param,value=50,data=ch_cm_cl,short_name='CH_CM_CL',long_name='cloud covers CH_CM_CL (000...888)',unit='(0-1)'
+info,table2=201,name=param,value=51,data=51.201,short_name='None',long_name='cloud cover CH (0..8)',unit='(0-1)'
+info,table2=201,name=param,value=52,data=52.201,short_name='None',long_name='cloud cover CM (0..8)',unit='(0-1)'
+info,table2=201,name=param,value=53,data=53.201,short_name='None',long_name='cloud cover CL (0..8)',unit='(0-1)'
+info,table2=201,name=param,value=54,data=54.201,short_name='None',long_name='total cloud cover (0..8)',unit='(0-1)'
+info,table2=201,name=param,value=55,data=55.201,short_name='None',long_name='fog (0..8)',unit='(0-1)'
+info,table2=201,name=param,value=56,data=56.201,short_name='None',long_name='fog',unit='(0-1)'
+info,table2=201,name=param,value=60,data=60.201,short_name='None',long_name='cloud cover, convective cirrus',unit='(0-1)'
+info,table2=201,name=param,value=61,data=61.201,short_name='None',long_name='specific cloud water content, convective clouds',unit='kg kg**-1'
+info,table2=201,name=param,value=62,data=62.201,short_name='None',long_name='cloud water content, conv clouds, vert integrated',unit='kg m**-2'
+info,table2=201,name=param,value=63,data=63.201,short_name='None',long_name='specific cloud ice content, convective clouds',unit='kg kg**-1'
+info,table2=201,name=param,value=64,data=64.201,short_name='None',long_name='cloud ice content, conv clouds, vert integrated',unit='kg m**-2'
+info,table2=201,name=param,value=65,data=65.201,short_name='None',long_name='convective mass flux',unit='kg s**-1 m**-2'
+info,table2=201,name=param,value=66,data=66.201,short_name='None',long_name='updraft velocity, convection',unit='m s**-1'
+info,table2=201,name=param,value=67,data=67.201,short_name='None',long_name='entrainment parameter, convection',unit='m**-1'
+info,table2=201,name=param,value=68,data=hbas_con,short_name='HBAS_CON',long_name='cloud base, convective clouds (above msl)',unit='m'
+info,table2=201,name=param,value=69,data=htop_con,short_name='HTOP_CON',long_name='cloud top, convective clouds (above msl)',unit='m'
+info,table2=201,name=param,value=70,data=70.201,short_name='None',long_name='convective layers (00...77)  (BKE)',unit='(0-1)'
+info,table2=201,name=param,value=71,data=71.201,short_name='None',long_name='KO-index',unit='(1)'
+info,table2=201,name=param,value=72,data=bas_con,short_name='BAS_CON',long_name='convection base index',unit='(1)'
+info,table2=201,name=param,value=73,data=top_con,short_name='TOP_CON',long_name='convection top index',unit='(1)'
+info,table2=201,name=param,value=74,data=dt_con,short_name='DT_CON',long_name='convective temperature tendency',unit='K s**-1'
+info,table2=201,name=param,value=75,data=dqv_con,short_name='DQV_CON',long_name='convective tendency of specific humidity',unit='s**-1'
+info,table2=201,name=param,value=76,data=76.201,short_name='None',long_name='convective tendency of total heat',unit='J kg**-1 s**-1'
+info,table2=201,name=param,value=77,data=77.201,short_name='None',long_name='convective tendency of total water',unit='s**-1'
+info,table2=201,name=param,value=78,data=du_con,short_name='DU_CON',long_name='convective momentum tendency (X-component)',unit='m s**-2'
+info,table2=201,name=param,value=79,data=dv_con,short_name='DV_CON',long_name='convective momentum tendency (Y-component)',unit='m s**-2'
+info,table2=201,name=param,value=80,data=80.201,short_name='None',long_name='convective vorticity tendency',unit='s**-2'
+info,table2=201,name=param,value=81,data=81.201,short_name='None',long_name='convective divergence tendency',unit='s**-2'
+info,table2=201,name=param,value=82,data=htop_dc,short_name='HTOP_DC',long_name='top of dry convection (above msl)',unit='m'
+info,table2=201,name=param,value=83,data=83.201,short_name='None',long_name='dry convection top index',unit='(1)'
+info,table2=201,name=param,value=84,data=hzerocl,short_name='HZEROCL',long_name='height of 0 degree Celsius isotherm above msl',unit='m'
+info,table2=201,name=param,value=85,data=snowlmt,short_name='SNOWLMT',long_name='height of snow-fall limit',unit='m'
+info,table2=201,name=param,value=99,data=qrs_gsp,short_name='QRS_GSP',long_name='spec. content of precip. particles',unit='kg kg**-1'
+info,table2=201,name=param,value=100,data=prr_gsp,short_name='PRR_GSP',long_name='surface precipitation rate, rain, grid scale',unit='kg s**-1 m**-2'
+info,table2=201,name=param,value=101,data=prs_gsp,short_name='PRS_GSP',long_name='surface precipitation rate, snow, grid scale',unit='kg s**-1 m**-2'
+info,table2=201,name=param,value=102,data=rain_gsp,short_name='RAIN_GSP',long_name='surface precipitation amount, rain, grid scale',unit='kg m**-2'
+info,table2=201,name=param,value=111,data=prr_con,short_name='PRR_CON',long_name='surface precipitation rate, rain, convective',unit='kg s**-1 m**-2'
+info,table2=201,name=param,value=112,data=prs_con,short_name='PRS_CON',long_name='surface precipitation rate, snow, convective',unit='kg s**-1 m**-2'
+info,table2=201,name=param,value=113,data=rain_con,short_name='RAIN_CON',long_name='surface precipitation amount, rain, convective',unit='kg m**-2'
+info,table2=201,name=param,value=139,data=pp,short_name='PP',long_name='deviation of pressure from reference value',unit='Pa'
+info,table2=201,name=param,value=150,data=150.201,short_name='None',long_name='coefficient of horizontal diffusion',unit='m**2 s**-1'
+info,table2=201,name=param,value=187,data=vmax_10m,short_name='VMAX_10M',long_name='maximum wind velocity',unit='m s**-1'
+info,table2=201,name=param,value=200,data=w_i,short_name='W_I',long_name='water content of interception store',unit='kg m**-2'
+info,table2=201,name=param,value=203,data=t_snow,short_name='T_SNOW',long_name='snow temperature',unit='K'
+info,table2=201,name=param,value=215,data=t_ice,short_name='T_ICE',long_name='ice surface temperature',unit='K'
+info,table2=201,name=param,value=241,data=cape_con,short_name='CAPE_CON',long_name='convective available potential energy',unit='J kg**-1'
+info,table2=201,name=param,value=255,data=255.201,short_name='None',long_name='Indicates a missing value',unit='-'
+info,table2=210,name=param,value=1,data=aermr01,short_name='AERMR01',long_name='Aerosol type 1 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=2,data=aermr02,short_name='AERMR02',long_name='Aerosol type 2 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=3,data=aermr03,short_name='AERMR03',long_name='Aerosol type 3 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=4,data=aermr04,short_name='AERMR04',long_name='Aerosol type 4 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=5,data=aermr05,short_name='AERMR05',long_name='Aerosol type 5 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=6,data=aermr06,short_name='AERMR06',long_name='Aerosol type 6 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=7,data=aermr07,short_name='AERMR07',long_name='Aerosol type 7 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=8,data=aermr08,short_name='AERMR08',long_name='Aerosol type 8 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=9,data=aermr09,short_name='AERMR09',long_name='Aerosol type 9 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=10,data=aermr10,short_name='AERMR10',long_name='Aerosol type 10 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=11,data=aermr11,short_name='AERMR11',long_name='Aerosol type 11 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=12,data=aermr12,short_name='AERMR12',long_name='Aerosol type 12 mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=16,data=aergn01,short_name='AERGN01',long_name='Aerosol type 1 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=17,data=aergn02,short_name='AERGN02',long_name='Aerosol type 2 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=18,data=aergn03,short_name='AERGN03',long_name='Aerosol type 3 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=19,data=aergn04,short_name='AERGN04',long_name='Aerosol type 4 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=20,data=aergn05,short_name='AERGN05',long_name='Aerosol type 5 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=21,data=aergn06,short_name='AERGN06',long_name='Aerosol type 6 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=22,data=aergn07,short_name='AERGN07',long_name='Aerosol type 7 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=23,data=aergn08,short_name='AERGN08',long_name='Aerosol type 8 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=24,data=aergn09,short_name='AERGN09',long_name='Aerosol type 9 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=25,data=aergn10,short_name='AERGN10',long_name='Aerosol type 10 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=26,data=aergn11,short_name='AERGN11',long_name='Aerosol type 11 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=27,data=aergn12,short_name='AERGN12',long_name='Aerosol type 12 source/gain accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=31,data=aerls01,short_name='AERLS01',long_name='Aerosol type 1 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=32,data=aerls02,short_name='AERLS02',long_name='Aerosol type 2 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=33,data=aerls03,short_name='AERLS03',long_name='Aerosol type 3 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=34,data=aerls04,short_name='AERLS04',long_name='Aerosol type 4 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=35,data=aerls05,short_name='AERLS05',long_name='Aerosol type 5 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=36,data=aerls06,short_name='AERLS06',long_name='Aerosol type 6 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=37,data=aerls07,short_name='AERLS07',long_name='Aerosol type 7 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=38,data=aerls08,short_name='AERLS08',long_name='Aerosol type 8 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=39,data=aerls09,short_name='AERLS09',long_name='Aerosol type 9 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=40,data=aerls10,short_name='AERLS10',long_name='Aerosol type 10 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=41,data=aerls11,short_name='AERLS11',long_name='Aerosol type 11 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=42,data=aerls12,short_name='AERLS12',long_name='Aerosol type 12 sink/loss accumulated',unit='kg m**-2'
+info,table2=210,name=param,value=46,data=aerpr,short_name='AERPR',long_name='Aerosol precursor mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=47,data=aersm,short_name='AERSM',long_name='Aerosol small mode mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=48,data=aerlg,short_name='AERLG',long_name='Aerosol large mode mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=49,data=aodpr,short_name='AODPR',long_name='Aerosol precursor optical depth',unit='dimensionless'
+info,table2=210,name=param,value=50,data=aodsm,short_name='AODSM',long_name='Aerosol small mode optical depth',unit='dimensionless'
+info,table2=210,name=param,value=51,data=aodlg,short_name='AODLG',long_name='Aerosol large mode optical depth',unit='dimensionless'
+info,table2=210,name=param,value=52,data=aerdep,short_name='AERDEP',long_name='Dust emission potential',unit='kg s**2 m**-5'
+info,table2=210,name=param,value=53,data=aerlts,short_name='AERLTS',long_name='Lifting threshold speed',unit='m s**-1'
+info,table2=210,name=param,value=54,data=aerscc,short_name='AERSCC',long_name='Soil clay content',unit='%'
+info,table2=210,name=param,value=61,data=co2,short_name='CO2',long_name='Carbon Dioxide',unit='kg kg**-1'
+info,table2=210,name=param,value=62,data=ch4,short_name='CH4',long_name='Methane',unit='kg kg**-1'
+info,table2=210,name=param,value=63,data=n2o,short_name='N2O',long_name='Nitrous oxide',unit='kg kg**-1'
+info,table2=210,name=param,value=64,data=tcco2,short_name='TCCO2',long_name='Total column Carbon Dioxide',unit='kg m**-2'
+info,table2=210,name=param,value=65,data=tcch4,short_name='TCCH4',long_name='Total column Methane',unit='kg m**-2'
+info,table2=210,name=param,value=66,data=tcn2o,short_name='TCN2O',long_name='Total column Nitrous oxide',unit='kg m**-2'
+info,table2=210,name=param,value=67,data=co2of,short_name='CO2OF',long_name='Ocean flux of Carbon Dioxide',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=68,data=co2nbf,short_name='CO2NBF',long_name='Natural biosphere flux of Carbon Dioxide',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=69,data=co2apf,short_name='CO2APF',long_name='Anthropogenic emissions of Carbon Dioxide',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=70,data=ch4f,short_name='CH4F',long_name='Methane Surface Fluxes',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=71,data=kch4,short_name='kCH4',long_name='Methane loss rate due to radical hydroxyl (OH)',unit='s**-1'
+info,table2=210,name=param,value=80,data=co2fire,short_name='CO2FIRE',long_name='Wildfire flux of Carbon Dioxide',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=81,data=cofire,short_name='COFIRE',long_name='Wildfire flux of Carbon Monoxide',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=82,data=ch4fire,short_name='CH4FIRE',long_name='Wildfire flux of Methane',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=83,data=nmhcfire,short_name='NMHCFIRE',long_name='Wildfire flux of Non-Methane Hydro-Carbons',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=84,data=h2fire,short_name='H2FIRE',long_name='Wildfire flux of Hydrogen',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=85,data=noxfire,short_name='NOXFIRE',long_name='Wildfire flux of Nitrogen Oxides NOx',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=86,data=n2ofire,short_name='N2OFIRE',long_name='Wildfire flux of Nitrous Oxide',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=87,data=pm2p5fire,short_name='PM2P5FIRE',long_name='Wildfire flux of Particulate Matter PM2.5',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=88,data=tpmfire,short_name='TPMFIRE',long_name='Wildfire flux of Total Particulate Matter',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=89,data=tcfire,short_name='TCFIRE',long_name='Wildfire flux of Total Carbon in Aerosols',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=90,data=ocfire,short_name='OCFIRE',long_name='Wildfire flux of Organic Carbon',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=91,data=bcfire,short_name='BCFIRE',long_name='Wildfire flux of Black Carbon',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=92,data=cfire,short_name='CFIRE',long_name='Wildfire overall flux of burnt Carbon',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=93,data=c4ffire,short_name='C4FFIRE',long_name='Wildfire fraction of C4 plants',unit='dimensionless'
+info,table2=210,name=param,value=94,data=vegfire,short_name='VEGFIRE',long_name='Wildfire vegetation map index',unit='dimensionless'
+info,table2=210,name=param,value=95,data=ccfire,short_name='CCFIRE',long_name='Wildfire Combustion Completeness',unit='dimensionless'
+info,table2=210,name=param,value=96,data=flfire,short_name='FLFIRE',long_name='Wildfire Fuel Load: Carbon per unit area',unit='kg m**-2'
+info,table2=210,name=param,value=97,data=bffire,short_name='BFFIRE',long_name='Wildfire fraction of area burnt',unit='dimensionless'
+info,table2=210,name=param,value=121,data=no2,short_name='NO2',long_name='Nitrogen dioxide',unit='kg kg**-1'
+info,table2=210,name=param,value=122,data=so2,short_name='SO2',long_name='Sulphur dioxide',unit='kg kg**-1'
+info,table2=210,name=param,value=123,data=co,short_name='CO',long_name='Carbon monoxide',unit='kg kg**-1'
+info,table2=210,name=param,value=124,data=hcho,short_name='HCHO',long_name='Formaldehyde',unit='kg kg**-1'
+info,table2=210,name=param,value=125,data=tcno2,short_name='TCNO2',long_name='Total column Nitrogen dioxide',unit='kg m**-2'
+info,table2=210,name=param,value=126,data=tcso2,short_name='TCSO2',long_name='Total column Sulphur dioxide',unit='kg m**-2'
+info,table2=210,name=param,value=127,data=tcco,short_name='TCCO',long_name='Total column Carbon monoxide',unit='kg m**-2'
+info,table2=210,name=param,value=128,data=tchcho,short_name='TCHCHO',long_name='Total column Formaldehyde',unit='kg m**-2'
+info,table2=210,name=param,value=129,data=nox,short_name='NOX',long_name='Nitrogen Oxides',unit='kg kg**-1'
+info,table2=210,name=param,value=130,data=tcnox,short_name='TCNOX',long_name='Total Column Nitrogen Oxides',unit='kg m**-2'
+info,table2=210,name=param,value=131,data=grg1,short_name='GRG1',long_name='Reactive tracer 1 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=132,data=tcgrg1,short_name='TCGRG1',long_name='Total column GRG tracer 1',unit='kg m**-2'
+info,table2=210,name=param,value=133,data=grg2,short_name='GRG2',long_name='Reactive tracer 2 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=134,data=tcgrg2,short_name='TCGRG2',long_name='Total column GRG tracer 2',unit='kg m**-2'
+info,table2=210,name=param,value=135,data=grg3,short_name='GRG3',long_name='Reactive tracer 3 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=136,data=tcgrg3,short_name='TCGRG3',long_name='Total column GRG tracer 3',unit='kg m**-2'
+info,table2=210,name=param,value=137,data=grg4,short_name='GRG4',long_name='Reactive tracer 4 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=138,data=tcgrg4,short_name='TCGRG4',long_name='Total column GRG tracer 4',unit='kg m**-2'
+info,table2=210,name=param,value=139,data=grg5,short_name='GRG5',long_name='Reactive tracer 5 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=140,data=tcgrg5,short_name='TCGRG5',long_name='Total column GRG tracer 5',unit='kg m**-2'
+info,table2=210,name=param,value=141,data=grg6,short_name='GRG6',long_name='Reactive tracer 6 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=142,data=tcgrg6,short_name='TCGRG6',long_name='Total column GRG tracer 6',unit='kg m**-2'
+info,table2=210,name=param,value=143,data=grg7,short_name='GRG7',long_name='Reactive tracer 7 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=144,data=tcgrg7,short_name='TCGRG7',long_name='Total column GRG tracer 7',unit='kg m**-2'
+info,table2=210,name=param,value=145,data=grg8,short_name='GRG8',long_name='Reactive tracer 8 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=146,data=tcgrg8,short_name='TCGRG8',long_name='Total column GRG tracer 8',unit='kg m**-2'
+info,table2=210,name=param,value=147,data=grg9,short_name='GRG9',long_name='Reactive tracer 9 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=148,data=tcgrg9,short_name='TCGRG9',long_name='Total column GRG tracer 9',unit='kg m**-2'
+info,table2=210,name=param,value=149,data=grg10,short_name='GRG10',long_name='Reactive tracer 10 mass mixing ratio',unit='kg kg**-1'
+info,table2=210,name=param,value=150,data=tcgrg10,short_name='TCGRG10',long_name='Total column GRG tracer 10',unit='kg m**-2'
+info,table2=210,name=param,value=181,data=ra,short_name='Ra',long_name='Radon',unit='kg kg**-1'
+info,table2=210,name=param,value=182,data=sf6,short_name='SF6',long_name='Sulphur Hexafluoride',unit='kg kg**-1'
+info,table2=210,name=param,value=183,data=tcra,short_name='TCRa',long_name='Total column Radon',unit='kg m**-2'
+info,table2=210,name=param,value=184,data=tcsf6,short_name='TCSF6',long_name='Total column Sulphur Hexafluoride',unit='kg m**-2'
+info,table2=210,name=param,value=185,data=sf6apf,short_name='SF6APF',long_name='Anthropogenic Emissions of Sulphur Hexafluoride',unit='kg m**-2 s**-1'
+info,table2=210,name=param,value=203,data=go3,short_name='GO3',long_name='GEMS Ozone',unit='kg kg**-1'
+info,table2=210,name=param,value=206,data=gtco3,short_name='GTCO3',long_name='GEMS Total column ozone',unit='kg m**-2'
+info,table2=211,name=param,value=46,data=aerpr,short_name='AERPR',long_name='Aerosol precursor mixing ratio',unit='kg kg**-1'
+info,table2=211,name=param,value=47,data=aersm,short_name='AERSM',long_name='Aerosol small mode mixing ratio',unit='kg kg**-1'
+info,table2=211,name=param,value=48,data=aerlg,short_name='AERLG',long_name='Aerosol large mode mixing ratio',unit='kg kg**-1'
+info,table2=211,name=param,value=49,data=aodpr,short_name='AODPR',long_name='Aerosol precursor optical depth',unit='dimensionless'
+info,table2=211,name=param,value=50,data=aodsm,short_name='AODSM',long_name='Aerosol small mode optical depth',unit='dimensionless'
+info,table2=211,name=param,value=51,data=aodlg,short_name='AODLG',long_name='Aerosol large mode optical depth',unit='dimensionless'
+info,table2=211,name=param,value=61,data=co2,short_name='CO2',long_name='Carbon Dioxide',unit='kg kg**-1'
+info,table2=211,name=param,value=62,data=ch4,short_name='CH4',long_name='Methane',unit='kg kg**-1'
+info,table2=211,name=param,value=63,data=n2o,short_name='N2O',long_name='Nitrous oxide',unit='kg kg**-1'
+info,table2=211,name=param,value=121,data=no2,short_name='NO2',long_name='Nitrogen dioxide',unit='kg kg**-1'
+info,table2=211,name=param,value=122,data=so2,short_name='SO2',long_name='Sulphur dioxide',unit='kg kg**-1'
+info,table2=211,name=param,value=123,data=co,short_name='CO',long_name='Carbon monoxide',unit='kg kg**-1'
+info,table2=211,name=param,value=124,data=hcho,short_name='HCHO',long_name='Formaldehyde',unit='kg kg**-1'
+info,table2=211,name=param,value=203,data=go3,short_name='GO3',long_name='GEMS Ozone',unit='kg kg**-1'
+info,table2=220,name=param,value=228,data=tpoc,short_name='TPOC',long_name='Total precipitacion observation count',unit='dimensionless'
+info,table2=228,name=param,value=1,data=cin,short_name='CIN',long_name='Convective inhibition',unit='J kg**-1'
+info,table2=228,name=param,value=2,data=orog,short_name='OROG',long_name='Orography',unit='m'
+info,table2=228,name=param,value=3,data=zust,short_name='ZUST',long_name='Friction velocity',unit='m s**-1'
+info,table2=228,name=param,value=39,data=sm,short_name='SM',long_name='Soil Moisture',unit='kg m**-3'
+info,table2=228,name=param,value=131,data=u10n,short_name='U10N',long_name='Neutral wind at 10 m x-component',unit='m s**-1'
+info,table2=228,name=param,value=132,data=v10n,short_name='V10N',long_name='Neutral wind at 10 m y-component',unit='m s**-1'
+info,table2=228,name=param,value=139,data=st,short_name='ST',long_name='Soil Temperature',unit='K'
+info,table2=228,name=param,value=141,data=sd,short_name='SD',long_name='Snow Depth water equivalent',unit='m'
+info,table2=228,name=param,value=144,data=sf,short_name='SF',long_name='Snow Fall water equivalent',unit='kg m**-2'
+info,table2=228,name=param,value=164,data=tcc,short_name='TCC',long_name='Total Cloud Cover',unit='%'
+info,table2=228,name=param,value=170,data=cap,short_name='CAP',long_name='Field capacity',unit='kg m**-3'
+info,table2=228,name=param,value=171,data=wilt,short_name='WILT',long_name='Wilting point',unit='kg m**-3'
+info,table2=228,name=param,value=228,data=tp,short_name='TP',long_name='Total Precipitation',unit='kg m**-2'
+info,table2=230,name=param,value=44,data=esvar,short_name='ESVAR',long_name='Snow evaporation (variable resolution)',unit='m of water'
+info,table2=230,name=param,value=45,data=smltvar,short_name='SMLTVAR',long_name='Snowmelt (variable resolution)',unit='m of water'
+info,table2=230,name=param,value=46,data=sdurvar,short_name='SDURVAR',long_name='Solar duration (variable resolution)',unit='s'
+info,table2=230,name=param,value=57,data=uvbvar,short_name='UVBVAR',long_name='Downward UV radiation at the surface (variable resolution)',unit='w m**-2 s'
+info,table2=230,name=param,value=58,data=parvar,short_name='PARVAR',long_name='Photosynthetically active radiation at the surface (variable resolution)',unit='w m**-2 s'
+info,table2=230,name=param,value=142,data=lspvar,short_name='LSPVAR',long_name='Stratiform precipitation (Large-scale precipitation) (variable resolution)',unit='m'
+info,table2=230,name=param,value=143,data=cpvar,short_name='CPVAR',long_name='Convective precipitation (variable resolution)',unit='m'
+info,table2=230,name=param,value=144,data=sfvar,short_name='SFVAR',long_name='Snowfall (convective + stratiform) (variable resolution)',unit='m of water equivalent'
+info,table2=230,name=param,value=145,data=bldvar,short_name='BLDVAR',long_name='Boundary layer dissipation (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=146,data=sshfvar,short_name='SSHFVAR',long_name='Surface sensible heat flux (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=147,data=slhfvar,short_name='SLHFVAR',long_name='Surface latent heat flux (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=169,data=ssrdvar,short_name='SSRDVAR',long_name='Surface solar radiation downwards (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=175,data=strdvar,short_name='STRDVAR',long_name='Surface thermal radiation downwards (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=176,data=ssrvar,short_name='SSRVAR',long_name='Surface solar radiation (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=177,data=strvar,short_name='STRVAR',long_name='Surface thermal radiation (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=178,data=tsrvar,short_name='TSRVAR',long_name='Top solar radiation (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=179,data=ttrvar,short_name='TTRVAR',long_name='Top thermal radiation (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=180,data=ewssvar,short_name='EWSSVAR',long_name='East-West surface stress (variable resolution)',unit='N m**-2 s'
+info,table2=230,name=param,value=181,data=nsssvar,short_name='NSSSVAR',long_name='North-South surface stress (variable resolution)',unit='N m**-2 s'
+info,table2=230,name=param,value=182,data=evar,short_name='EVAR',long_name='Evaporation (variable resolution)',unit='m of water'
+info,table2=230,name=param,value=189,data=sundvar,short_name='SUNDVAR',long_name='Sunshine duration (variable resolution)',unit='s'
+info,table2=230,name=param,value=195,data=lgwsvar,short_name='LGWSVAR',long_name='Latitudinal component of gravity wave stress (variable resolution)',unit='N m**-2 s'
+info,table2=230,name=param,value=196,data=mgwsvar,short_name='MGWSVAR',long_name='Meridional component of gravity wave stress (variable resolution)',unit='N m**-2 s'
+info,table2=230,name=param,value=197,data=gwdvar,short_name='GWDVAR',long_name='Gravity wave dissipation (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=198,data=srcvar,short_name='SRCVAR',long_name='Skin reservoir content (variable resolution)',unit='m of water'
+info,table2=230,name=param,value=205,data=rovar,short_name='ROVAR',long_name='Runoff (variable resolution)',unit='m'
+info,table2=230,name=param,value=208,data=tsrcvar,short_name='TSRCVAR',long_name='Top net solar radiation, clear sky (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=209,data=ttrcvar,short_name='TTRCVAR',long_name='Top net thermal radiation, clear sky (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=210,data=ssrcvar,short_name='SSRCVAR',long_name='Surface net solar radiation, clear sky (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=211,data=strcvar,short_name='STRCVAR',long_name='Surface net thermal radiation, clear sky (variable resolution)',unit='W m**-2 s'
+info,table2=230,name=param,value=212,data=tisrvar,short_name='TISRVAR',long_name='TOA incident solar radiation (variable resolution)',unit='W m**-2 s'
+info,table2=234,name=param,value=139,data=sts,short_name='STS',long_name='Surface temperature significance',unit='percentage'
+info,table2=234,name=param,value=151,data=msls,short_name='MSLS',long_name='Mean sea level pressure significance',unit='percentage'
+info,table2=234,name=param,value=167,data=2ts,short_name='2TS',long_name='2 metre temperature significance',unit='percentage'
+info,table2=234,name=param,value=228,data=tps,short_name='TPS',long_name='Total precipitation significance',unit='percentage'
diff --git a/gribtables/wmostd/table_2_version_001 b/gribtables/wmostd/table_2_version_001
new file mode 100755
index 0000000..13dbb09
--- /dev/null
+++ b/gribtables/wmostd/table_2_version_001
@@ -0,0 +1,771 @@
+WMO standard table 2: Version Number 3.
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+001
+P 
+Pressure
+Pa
+Pa
+......................
+002
+MSL
+Mean sea level pressure
+Pa
+Pa
+......................
+003
+None
+Pressure tendency         
+Pa s**-1
+Pa s**-1
+......................
+004
+PV 
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+005
+None 
+ICAO Standard Atmosphere reference height
+m
+m
+......................
+006
+Z
+Geopotential
+m**2 s**-2
+m**2 s**-2
+......................
+007
+GH
+Geopotential height
+gpm
+gpm
+......................
+008
+H
+Geometrical height
+m
+m
+......................
+009
+None
+Standard deviation of height
+m
+m
+......................
+010
+TCO3
+Total column ozone
+Dobson (kg m**-2)
+Dobson (kg m**-2)
+......................
+011
+T
+Temperature
+K
+K
+......................
+012
+None
+Virtual temperature
+K
+K
+......................
+013
+None
+Potential temperature
+K
+K
+......................
+014
+None
+Pseudo-adiabatic potential temperature
+K
+K
+......................
+015
+None
+Maximum temperature
+K
+K
+......................
+016
+None
+Minimum temperature
+K
+K
+......................
+017
+None
+Dewpoint temperature
+K
+K
+......................
+018
+None
+Dewpoint depression (or deficit)
+K
+K
+......................
+019
+None
+Lapse rate
+K s**-1
+K s**-1
+......................
+020
+None
+Visibility
+m
+m
+......................
+021
+None
+Radar spectra (1)
+-
+-
+......................
+022
+None
+Radar spectra (2)
+-
+-
+......................
+023
+None
+Radar spectra (3)
+-
+-
+......................
+024
+None
+Parcel lifted index (to 500 hPa)
+K
+K
+......................
+025
+None
+Temperature anomaly
+K
+K
+......................
+026
+None
+Pressure anomaly
+Pa
+Pa
+......................
+027
+None
+Geopotential height anomaly
+gpm
+gpm
+......................
+028
+None
+Wave spectra (1)
+-
+-
+......................
+029
+None
+Wave spectra (2)
+-
+-
+......................
+030
+None
+Wave spectra (3)
+-
+-
+......................
+031
+None
+Wind direction
+Degree true
+Degree true
+......................
+032
+None
+Wind speed
+m s**-1
+m s**-1
+......................
+033
+U
+U component of wind
+m s**-1
+m s**-1
+......................
+034
+V
+V component of wind
+m s**-1
+m s**-1
+......................
+035
+None
+Stream function
+m**2 s**-1
+m**2 s**-1
+......................
+036
+None
+Velocity potential
+m**2 s**-1
+m**2 s**-1
+......................
+037
+None
+Montgomery stream function
+m**2 s**-1
+m**2 s**-1
+......................
+038
+None
+Sigma coordinate vertical velocity
+s**-1
+s**-1
+......................
+039
+W
+Vertical velocity
+Pa s**-1
+Pa s**-1
+......................
+040
+None
+Vertical velocity
+m s**-1
+m s**-1
+......................
+041
+None
+Absolute vorticity
+s**-1
+s**-1
+......................
+042
+None
+Absolute divergence
+s**-1
+s**-1
+......................
+043
+VO
+Relative vorticity
+s**-1
+s**-1
+......................
+044
+D
+Relative divergence
+s**-1
+s**-1
+......................
+045
+None
+Vertical U component shear
+s**-1
+s**-1
+......................
+046
+None
+Vertical V component shear
+s**-1
+s**-1
+......................
+047
+None
+Direction of current
+Degree true
+Degree true
+......................
+048
+None
+Speed of current
+m s**-1
+m s**-1
+......................
+049
+None
+U component of current
+m s**-1
+m s**-1
+......................
+050
+None
+V component of current
+m s**-1
+m s**-1
+......................
+051
+Q
+Specific humidity
+kg kg**-1
+kg kg**-1
+......................
+052
+R
+Relative humidity
+%
+%
+......................
+053
+None
+Humidity mixing ratio
+kg m**-2
+kg m**-2
+......................
+054
+None
+Precipitable water content
+kg m**-2
+kg m**-2
+......................
+055
+None 
+Vapour pressure
+Pa
+Pa
+......................
+056
+None 
+Saturation deficit
+Pa
+Pa
+......................
+057
+E 
+Evaporation
+kg m**-2
+kg m**-2
+......................
+058
+CIWC
+Cloud ice
+kg m**-2
+kg m**-2
+......................
+059
+None
+Precipitation rate
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+060
+None
+Thunderstorm probability
+%
+%
+......................
+061
+TP
+Total precipitation
+kg m**-2
+kg m**-2
+......................
+062
+None
+Large-scale precipitation
+kg m**-2
+kg m**-2
+......................
+063
+None
+Convective precipitation
+kg m**-2
+kg m**-2
+......................
+064
+None
+Snowfall rate water equivalent
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+065
+SF
+Water equivalent of accumulated snow depth
+kg m**-2
+kg m**-2
+......................
+066
+SD
+Snow depth
+m (of water equivalent)
+m (of water equivalent)
+......................
+067
+None
+Mixed layer depth
+m
+m
+......................
+068
+None
+Transient thermocline depth
+m
+m
+......................
+069
+None
+Main thermocline depth
+m
+m
+......................
+070
+None
+Main thermocline anomaly
+m
+m
+......................
+071
+TCC
+Total cloud cover
+%
+%
+......................
+072
+CCC
+Convective cloud cover
+%
+%
+......................
+073
+LCC
+Low cloud cover
+%
+%
+......................
+074
+MCC
+Medium cloud cover
+%
+%
+......................
+075
+HCC
+High cloud cover
+%
+%
+......................
+076
+CLWC
+Cloud liquid water content
+kg kg**-1
+kg kg**-1
+......................
+077
+None
+Best lifted index (to 500 hPa)
+K
+K
+......................
+078
+CSF
+Convective snowfall
+kg m**-2
+kg m**-2
+......................
+079
+LSF
+Large-scale snowfall
+kg m**-2
+kg m**-2
+......................
+080
+None
+Water temperature
+K
+K
+......................
+081
+LSM
+Land cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+082
+None
+Deviation of sea level from mean
+m
+m
+......................
+083
+SR
+Surface roughness
+m
+m
+......................
+084
+AL
+Albedo
+-
+-
+......................
+085
+ST
+Surface temperature of soil
+K
+K
+......................
+086
+SSW
+Soil moisture content
+kg m**-2
+kg m**-2
+......................
+087
+VEG
+Percentage of vegetation
+%
+%
+......................
+088
+None
+Salinity
+kg kg**-1
+kg kg**-1
+......................
+089
+None
+Density
+kg m**-3
+kg kg**-1
+......................
+090
+RO
+Water run-off
+kg m**-2
+kg m**-2
+......................
+091
+None
+Ice cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+092
+None
+Ice thickness
+m
+m
+......................
+093
+None
+Direction of ice drift
+Degree true
+Degree true
+......................
+094
+None
+Speed of ice drift
+m s*-1
+m s*-1
+......................
+095
+None
+U component of ice drift
+m s**-1
+m s**-1
+......................
+096
+None
+V component of ice drift
+m s**-1
+m s**-1
+......................
+097
+None
+Ice growth rate
+m s**-1
+m s**-1
+......................
+098
+None
+Ice divergence
+s**-1
+s**-1
+......................
+099
+None
+Snowmelt
+kg m**-2
+kg m**-2
+......................
+100
+SWH
+Significant height, combined wind waves and swell
+m
+m
+......................
+101
+MDWW
+Mean direction of wind waves
+Degree true
+Degree true
+......................
+102
+SHWW
+Significant height of wind waves
+m
+m
+......................
+103
+MPWW
+Mean period of wind waves
+s
+s
+......................
+104
+None
+Direction of swell waves
+Degree true
+Degree true
+......................
+105
+None
+Significant height of swell waves
+m
+m
+......................
+106
+None
+Mean period of swell waves
+s
+s
+......................
+107
+MDPS
+Mean direction of primary swell
+Degree true
+Degree true
+......................
+108
+MPPS
+Mean period of primary swell
+s
+s
+......................
+109
+None
+Secondary wave direction
+Degree true
+Degree true
+......................
+110
+None
+Secondary wave period
+s
+s
+......................
+111
+None
+Net short-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+112
+None
+Net long-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+113
+None
+Net short-wave radiation flux(atmosphere top)
+W m**-2
+W m**-2
+......................
+114
+None
+Net long-wave radiation flux(atmosphere top)
+W m**-2
+W m**-2
+......................
+115
+None
+Long-wave radiation flux
+W m**-2
+W m**-2
+......................
+116
+None
+Short-wave radiation flux
+W m**-2
+W m**-2
+......................
+117
+None
+Global radiation flux
+W m**-2
+W m**-2
+......................
+118
+None
+Brightness temperature
+K
+K
+......................
+119
+None
+Radiance (with respect to wave number)
+W m**-1 sr**-1
+W m**-1 sr**-1
+......................
+120
+None
+Radiance (with respect to wave length)
+W m**-1 sr**-1
+W m**-3 sr**-1
+......................
+121
+SLHF
+Surface latent heat flux
+W m**-2
+W m**-2
+......................
+122
+SSHF
+Surface sensible heat flux
+W m**-2
+W m**-2
+......................
+123
+BLD
+Boundary layer dissipation
+W m**-2
+W m**-2
+......................
+124
+None
+Momentum flux, U component
+N m**-2
+N m**-2
+......................
+125
+None
+Momentum flux, V component
+N m**-2
+N m**-2
+......................
+126
+None
+Wind mixing energy
+J
+J
+......................
+127
+None
+Image data
+-
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/wmostd/table_2_version_002 b/gribtables/wmostd/table_2_version_002
new file mode 100755
index 0000000..0344d55
--- /dev/null
+++ b/gribtables/wmostd/table_2_version_002
@@ -0,0 +1,771 @@
+WMO standard table 2: Version Number 3.
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+001
+P 
+Pressure
+Pa
+Pa
+......................
+002
+MSL
+Mean sea level pressure
+Pa
+Pa
+......................
+003
+None
+Pressure tendency         
+Pa s**-1
+Pa s**-1
+......................
+004
+PV 
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+005
+None 
+ICAO Standard Atmosphere reference height
+m
+m
+......................
+006
+Z
+Geopotential
+m**2 s**-2
+m**2 s**-2
+......................
+007
+GH
+Geopotential height
+gpm
+gpm
+......................
+008
+H
+Geometrical height
+m
+m
+......................
+009
+None
+Standard deviation of height
+m
+m
+......................
+010
+TCO3
+Total column ozone
+Dobson (kg m**-2)
+Dobson (kg m**-2)
+......................
+011
+T
+Temperature
+K
+K
+......................
+012
+None
+Virtual temperature
+K
+K
+......................
+013
+None
+Potential temperature
+K
+K
+......................
+014
+None
+Pseudo-adiabatic potential temperature
+K
+K
+......................
+015
+None
+Maximum temperature
+K
+K
+......................
+016
+None
+Minimum temperature
+K
+K
+......................
+017
+None
+Dewpoint temperature
+K
+K
+......................
+018
+None
+Dewpoint depression (or deficit)
+K
+K
+......................
+019
+None
+Lapse rate
+K s**-1
+K s**-1
+......................
+020
+None
+Visibility
+m
+m
+......................
+021
+None
+Radar spectra (1)
+-
+-
+......................
+022
+None
+Radar spectra (2)
+-
+-
+......................
+023
+None
+Radar spectra (3)
+-
+-
+......................
+024
+None
+Parcel lifted index (to 500 hPa)
+K
+K
+......................
+025
+None
+Temperature anomaly
+K
+K
+......................
+026
+None
+Pressure anomaly
+Pa
+Pa
+......................
+027
+None
+Geopotential height anomaly
+gpm
+gpm
+......................
+028
+None
+Wave spectra (1)
+-
+-
+......................
+029
+None
+Wave spectra (2)
+-
+-
+......................
+030
+None
+Wave spectra (3)
+-
+-
+......................
+031
+None
+Wind direction
+Degree true
+Degree true
+......................
+032
+None
+Wind speed
+m s**-1
+m s**-1
+......................
+033
+U
+U component of wind
+m s**-1
+m s**-1
+......................
+034
+V
+V component of wind
+m s**-1
+m s**-1
+......................
+035
+None
+Stream function
+m**2 s**-1
+m**2 s**-1
+......................
+036
+None
+Velocity potential
+m**2 s**-1
+m**2 s**-1
+......................
+037
+None
+Montgomery stream function
+m**2 s**-1
+m**2 s**-1
+......................
+038
+None
+Sigma coordinate vertical velocity
+s**-1
+s**-1
+......................
+039
+W
+Vertical velocity
+Pa s**-1
+Pa s**-1
+......................
+040
+None
+Vertical velocity
+m s**-1
+m s**-1
+......................
+041
+None
+Absolute vorticity
+s**-1
+s**-1
+......................
+042
+None
+Absolute divergence
+s**-1
+s**-1
+......................
+043
+VO
+Relative vorticity
+s**-1
+s**-1
+......................
+044
+D
+Relative divergence
+s**-1
+s**-1
+......................
+045
+None
+Vertical U component shear
+s**-1
+s**-1
+......................
+046
+None
+Vertical V component shear
+s**-1
+s**-1
+......................
+047
+None
+Direction of current
+Degree true
+Degree true
+......................
+048
+None
+Speed of current
+m s**-1
+m s**-1
+......................
+049
+None
+U component of current
+m s**-1
+m s**-1
+......................
+050
+None
+V component of current
+m s**-1
+m s**-1
+......................
+051
+Q
+Specific humidity
+kg kg**-1
+kg kg**-1
+......................
+052
+R
+Relative humidity
+%
+%
+......................
+053
+None
+Humidity mixing ratio
+kg m**-2
+kg m**-2
+......................
+054
+None
+Precipitable content water
+kg m**-2
+kg m**-2
+......................
+055
+None 
+Vapour pressure
+Pa
+Pa
+......................
+056
+None 
+Saturation deficit
+Pa
+Pa
+......................
+057
+E 
+Evaporation
+kg m**-2
+kg m**-2
+......................
+058
+CIWC
+Cloud ice
+kg m**-2
+kg m**-2
+......................
+059
+None
+Precipitation rate
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+060
+None
+Thunderstorm probability
+%
+%
+......................
+061
+TP
+Total precipitation
+kg m**-2
+kg m**-2
+......................
+062
+None
+Large-scale precipitation
+kg m**-2
+kg m**-2
+......................
+063
+None
+Convective precipitation
+kg m**-2
+kg m**-2
+......................
+064
+None
+Snowfall rate water equivalent
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+065
+SF
+Water equivalent of accumulated snow depth
+kg m**-2
+kg m**-2
+......................
+066
+SD
+Snow depth
+m (of water equivalent)
+m (of water equivalent)
+......................
+067
+None
+Mixed layer depth
+m
+m
+......................
+068
+None
+Transient thermocline depth
+m
+m
+......................
+069
+None
+Main thermocline depth
+m
+m
+......................
+070
+None
+Main thermocline anomaly
+m
+m
+......................
+071
+TCC
+Total cloud cover
+%
+%
+......................
+072
+CCC
+Convective cloud cover
+%
+%
+......................
+073
+LCC
+Low cloud cover
+%
+%
+......................
+074
+MCC
+Medium cloud cover
+%
+%
+......................
+075
+HCC
+High cloud cover
+%
+%
+......................
+076
+CLWC
+Cloud liquid water content
+kg kg**-1
+kg kg**-1
+......................
+077
+None
+Best lifted index (to 500 hPa)
+K
+K
+......................
+078
+CSF
+Convective snowfall
+kg m**-2
+kg m**-2
+......................
+079
+LSF
+Large-scale snowfall
+kg m**-2
+kg m**-2
+......................
+080
+None
+Water temperature
+K
+K
+......................
+081
+LSM
+Land cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+082
+None
+Deviation of sea level from mean
+m
+m
+......................
+083
+SR
+Surface roughness
+m
+m
+......................
+084
+AL
+Albedo
+-
+-
+......................
+085
+ST
+Surface temperature of soil
+K
+K
+......................
+086
+SSW
+Soil moisture content
+kg m**-2
+kg m**-2
+......................
+087
+VEG
+Percentage of vegetation
+%
+%
+......................
+088
+None
+Salinity
+kg kg**-1
+kg kg**-1
+......................
+089
+None
+Density
+kg m**-3
+kg kg**-1
+......................
+090
+RO
+Water run-off
+kg m**-2
+kg m**-2
+......................
+091
+None
+Ice cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+092
+None
+Ice thickness
+m
+m
+......................
+093
+None
+Direction of ice drift
+Degree true
+Degree true
+......................
+094
+None
+Speed of ice drift
+m s*-1
+m s*-1
+......................
+095
+None
+U component of ice drift
+m s**-1
+m s**-1
+......................
+096
+None
+V component of ice drift
+m s**-1
+m s**-1
+......................
+097
+None
+Ice growth rate
+m s**-1
+m s**-1
+......................
+098
+None
+Ice divergence
+s**-1
+s**-1
+......................
+099
+None
+Snowmelt
+kg m**-2
+kg m**-2
+......................
+100
+SWH
+Significant height, combined wind waves and swell
+m
+m
+......................
+101
+MDWW
+Mean direction of wind waves
+Degree true
+Degree true
+......................
+102
+SHWW
+Significant height of wind waves
+m
+m
+......................
+103
+MPWW
+Mean period of wind waves
+s
+s
+......................
+104
+None
+Direction of swell waves
+Degree true
+Degree true
+......................
+105
+None
+Significant height of swell waves
+m
+m
+......................
+106
+None
+Mean period of swell waves
+s
+s
+......................
+107
+MDPS
+Mean direction of primary swell
+Degree true
+Degree true
+......................
+108
+MPPS
+Mean period of primary swell
+s
+s
+......................
+109
+None
+Secondary wave direction
+Degree true
+Degree true
+......................
+110
+None
+Secondary wave period
+s
+s
+......................
+111
+None
+Net short-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+112
+None
+Net long-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+113
+None
+Net short-wave radiation flux(atmosphere top)
+W m**-2
+W m**-2
+......................
+114
+None
+Net long-wave radiation flux(atmosphere top)
+W m**-2
+W m**-2
+......................
+115
+None
+Long-wave radiation flux
+W m**-2
+W m**-2
+......................
+116
+None
+Short-wave radiation flux
+W m**-2
+W m**-2
+......................
+117
+None
+Global radiation flux
+W m**-2
+W m**-2
+......................
+118
+None
+Brightness temperature
+K
+K
+......................
+119
+None
+Radiance (with respect to wave number)
+W m**-1 sr**-1
+W m**-1 sr**-1
+......................
+120
+None
+Radiance (with respect to wave length)
+W m**-1 sr**-1
+W m**-3 sr**-1
+......................
+121
+SLHF
+Surface latent heat flux
+W m**-2
+W m**-2
+......................
+122
+SSHF
+Surface sensible heat flux
+W m**-2
+W m**-2
+......................
+123
+BLD
+Boundary layer dissipation
+W m**-2
+W m**-2
+......................
+124
+None
+Momentum flux, U component
+N m**-2
+N m**-2
+......................
+125
+None
+Momentum flux, V component
+N m**-2
+N m**-2
+......................
+126
+None
+Wind mixing energy
+J
+J
+......................
+127
+None
+Image data
+-
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/wmostd/table_2_version_003 b/gribtables/wmostd/table_2_version_003
new file mode 100755
index 0000000..13dbb09
--- /dev/null
+++ b/gribtables/wmostd/table_2_version_003
@@ -0,0 +1,771 @@
+WMO standard table 2: Version Number 3.
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+001
+P 
+Pressure
+Pa
+Pa
+......................
+002
+MSL
+Mean sea level pressure
+Pa
+Pa
+......................
+003
+None
+Pressure tendency         
+Pa s**-1
+Pa s**-1
+......................
+004
+PV 
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+005
+None 
+ICAO Standard Atmosphere reference height
+m
+m
+......................
+006
+Z
+Geopotential
+m**2 s**-2
+m**2 s**-2
+......................
+007
+GH
+Geopotential height
+gpm
+gpm
+......................
+008
+H
+Geometrical height
+m
+m
+......................
+009
+None
+Standard deviation of height
+m
+m
+......................
+010
+TCO3
+Total column ozone
+Dobson (kg m**-2)
+Dobson (kg m**-2)
+......................
+011
+T
+Temperature
+K
+K
+......................
+012
+None
+Virtual temperature
+K
+K
+......................
+013
+None
+Potential temperature
+K
+K
+......................
+014
+None
+Pseudo-adiabatic potential temperature
+K
+K
+......................
+015
+None
+Maximum temperature
+K
+K
+......................
+016
+None
+Minimum temperature
+K
+K
+......................
+017
+None
+Dewpoint temperature
+K
+K
+......................
+018
+None
+Dewpoint depression (or deficit)
+K
+K
+......................
+019
+None
+Lapse rate
+K s**-1
+K s**-1
+......................
+020
+None
+Visibility
+m
+m
+......................
+021
+None
+Radar spectra (1)
+-
+-
+......................
+022
+None
+Radar spectra (2)
+-
+-
+......................
+023
+None
+Radar spectra (3)
+-
+-
+......................
+024
+None
+Parcel lifted index (to 500 hPa)
+K
+K
+......................
+025
+None
+Temperature anomaly
+K
+K
+......................
+026
+None
+Pressure anomaly
+Pa
+Pa
+......................
+027
+None
+Geopotential height anomaly
+gpm
+gpm
+......................
+028
+None
+Wave spectra (1)
+-
+-
+......................
+029
+None
+Wave spectra (2)
+-
+-
+......................
+030
+None
+Wave spectra (3)
+-
+-
+......................
+031
+None
+Wind direction
+Degree true
+Degree true
+......................
+032
+None
+Wind speed
+m s**-1
+m s**-1
+......................
+033
+U
+U component of wind
+m s**-1
+m s**-1
+......................
+034
+V
+V component of wind
+m s**-1
+m s**-1
+......................
+035
+None
+Stream function
+m**2 s**-1
+m**2 s**-1
+......................
+036
+None
+Velocity potential
+m**2 s**-1
+m**2 s**-1
+......................
+037
+None
+Montgomery stream function
+m**2 s**-1
+m**2 s**-1
+......................
+038
+None
+Sigma coordinate vertical velocity
+s**-1
+s**-1
+......................
+039
+W
+Vertical velocity
+Pa s**-1
+Pa s**-1
+......................
+040
+None
+Vertical velocity
+m s**-1
+m s**-1
+......................
+041
+None
+Absolute vorticity
+s**-1
+s**-1
+......................
+042
+None
+Absolute divergence
+s**-1
+s**-1
+......................
+043
+VO
+Relative vorticity
+s**-1
+s**-1
+......................
+044
+D
+Relative divergence
+s**-1
+s**-1
+......................
+045
+None
+Vertical U component shear
+s**-1
+s**-1
+......................
+046
+None
+Vertical V component shear
+s**-1
+s**-1
+......................
+047
+None
+Direction of current
+Degree true
+Degree true
+......................
+048
+None
+Speed of current
+m s**-1
+m s**-1
+......................
+049
+None
+U component of current
+m s**-1
+m s**-1
+......................
+050
+None
+V component of current
+m s**-1
+m s**-1
+......................
+051
+Q
+Specific humidity
+kg kg**-1
+kg kg**-1
+......................
+052
+R
+Relative humidity
+%
+%
+......................
+053
+None
+Humidity mixing ratio
+kg m**-2
+kg m**-2
+......................
+054
+None
+Precipitable water content
+kg m**-2
+kg m**-2
+......................
+055
+None 
+Vapour pressure
+Pa
+Pa
+......................
+056
+None 
+Saturation deficit
+Pa
+Pa
+......................
+057
+E 
+Evaporation
+kg m**-2
+kg m**-2
+......................
+058
+CIWC
+Cloud ice
+kg m**-2
+kg m**-2
+......................
+059
+None
+Precipitation rate
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+060
+None
+Thunderstorm probability
+%
+%
+......................
+061
+TP
+Total precipitation
+kg m**-2
+kg m**-2
+......................
+062
+None
+Large-scale precipitation
+kg m**-2
+kg m**-2
+......................
+063
+None
+Convective precipitation
+kg m**-2
+kg m**-2
+......................
+064
+None
+Snowfall rate water equivalent
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+065
+SF
+Water equivalent of accumulated snow depth
+kg m**-2
+kg m**-2
+......................
+066
+SD
+Snow depth
+m (of water equivalent)
+m (of water equivalent)
+......................
+067
+None
+Mixed layer depth
+m
+m
+......................
+068
+None
+Transient thermocline depth
+m
+m
+......................
+069
+None
+Main thermocline depth
+m
+m
+......................
+070
+None
+Main thermocline anomaly
+m
+m
+......................
+071
+TCC
+Total cloud cover
+%
+%
+......................
+072
+CCC
+Convective cloud cover
+%
+%
+......................
+073
+LCC
+Low cloud cover
+%
+%
+......................
+074
+MCC
+Medium cloud cover
+%
+%
+......................
+075
+HCC
+High cloud cover
+%
+%
+......................
+076
+CLWC
+Cloud liquid water content
+kg kg**-1
+kg kg**-1
+......................
+077
+None
+Best lifted index (to 500 hPa)
+K
+K
+......................
+078
+CSF
+Convective snowfall
+kg m**-2
+kg m**-2
+......................
+079
+LSF
+Large-scale snowfall
+kg m**-2
+kg m**-2
+......................
+080
+None
+Water temperature
+K
+K
+......................
+081
+LSM
+Land cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+082
+None
+Deviation of sea level from mean
+m
+m
+......................
+083
+SR
+Surface roughness
+m
+m
+......................
+084
+AL
+Albedo
+-
+-
+......................
+085
+ST
+Surface temperature of soil
+K
+K
+......................
+086
+SSW
+Soil moisture content
+kg m**-2
+kg m**-2
+......................
+087
+VEG
+Percentage of vegetation
+%
+%
+......................
+088
+None
+Salinity
+kg kg**-1
+kg kg**-1
+......................
+089
+None
+Density
+kg m**-3
+kg kg**-1
+......................
+090
+RO
+Water run-off
+kg m**-2
+kg m**-2
+......................
+091
+None
+Ice cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+092
+None
+Ice thickness
+m
+m
+......................
+093
+None
+Direction of ice drift
+Degree true
+Degree true
+......................
+094
+None
+Speed of ice drift
+m s*-1
+m s*-1
+......................
+095
+None
+U component of ice drift
+m s**-1
+m s**-1
+......................
+096
+None
+V component of ice drift
+m s**-1
+m s**-1
+......................
+097
+None
+Ice growth rate
+m s**-1
+m s**-1
+......................
+098
+None
+Ice divergence
+s**-1
+s**-1
+......................
+099
+None
+Snowmelt
+kg m**-2
+kg m**-2
+......................
+100
+SWH
+Significant height, combined wind waves and swell
+m
+m
+......................
+101
+MDWW
+Mean direction of wind waves
+Degree true
+Degree true
+......................
+102
+SHWW
+Significant height of wind waves
+m
+m
+......................
+103
+MPWW
+Mean period of wind waves
+s
+s
+......................
+104
+None
+Direction of swell waves
+Degree true
+Degree true
+......................
+105
+None
+Significant height of swell waves
+m
+m
+......................
+106
+None
+Mean period of swell waves
+s
+s
+......................
+107
+MDPS
+Mean direction of primary swell
+Degree true
+Degree true
+......................
+108
+MPPS
+Mean period of primary swell
+s
+s
+......................
+109
+None
+Secondary wave direction
+Degree true
+Degree true
+......................
+110
+None
+Secondary wave period
+s
+s
+......................
+111
+None
+Net short-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+112
+None
+Net long-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+113
+None
+Net short-wave radiation flux(atmosphere top)
+W m**-2
+W m**-2
+......................
+114
+None
+Net long-wave radiation flux(atmosphere top)
+W m**-2
+W m**-2
+......................
+115
+None
+Long-wave radiation flux
+W m**-2
+W m**-2
+......................
+116
+None
+Short-wave radiation flux
+W m**-2
+W m**-2
+......................
+117
+None
+Global radiation flux
+W m**-2
+W m**-2
+......................
+118
+None
+Brightness temperature
+K
+K
+......................
+119
+None
+Radiance (with respect to wave number)
+W m**-1 sr**-1
+W m**-1 sr**-1
+......................
+120
+None
+Radiance (with respect to wave length)
+W m**-1 sr**-1
+W m**-3 sr**-1
+......................
+121
+SLHF
+Surface latent heat flux
+W m**-2
+W m**-2
+......................
+122
+SSHF
+Surface sensible heat flux
+W m**-2
+W m**-2
+......................
+123
+BLD
+Boundary layer dissipation
+W m**-2
+W m**-2
+......................
+124
+None
+Momentum flux, U component
+N m**-2
+N m**-2
+......................
+125
+None
+Momentum flux, V component
+N m**-2
+N m**-2
+......................
+126
+None
+Wind mixing energy
+J
+J
+......................
+127
+None
+Image data
+-
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/wmostd/table_2_version_003.ecmwf b/gribtables/wmostd/table_2_version_003.ecmwf
new file mode 100755
index 0000000..2863028
--- /dev/null
+++ b/gribtables/wmostd/table_2_version_003.ecmwf
@@ -0,0 +1,771 @@
+WMO standard table 2: Version Number 3.
+Codes and data units for FM 92-X Ext.GRIB.
+......................
+001
+P 
+Pressure
+Pa
+Pa
+......................
+002
+MSL
+Mean sea level pressure
+Pa
+Pa
+......................
+003
+None
+Pressure tendency         
+Pa s**-1
+Pa s**-1
+......................
+004
+PV 
+Potential vorticity
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+005
+None 
+ICAO Standard Atmosphere reference height
+m
+m
+......................
+006
+Z
+Geopotential
+m**2 s**-2
+m**2 s**-2
+......................
+007
+GH
+Geopotential height
+gpm
+gpm
+......................
+008
+H
+Geometrical height
+m
+m
+......................
+009
+None
+Standard deviation of height
+m
+m
+......................
+010
+TCO3
+Total (column) ozone
+Dobson (kg m**-2)
+Dobson (kg m**-2)
+......................
+011
+T
+Temperature
+K
+K
+......................
+012
+None
+Virtual temperature
+K
+K
+......................
+013
+None
+Potential temperature
+K
+K
+......................
+014
+None
+Pseudo-adiabatic potential temperature
+K
+K
+......................
+015
+None
+Maximum temperature
+K
+K
+......................
+016
+None
+Minimum temperature
+K
+K
+......................
+017
+None
+Dew-point temperature
+K
+K
+......................
+018
+None
+Dew-point depression (or deficit)
+K
+K
+......................
+019
+None
+Lapse rate
+K s**-1
+K s**-1
+......................
+020
+None
+Visibility
+m
+m
+......................
+021
+None
+Radar spectra (1)
+-
+-
+......................
+022
+None
+Radar spectra (2)
+-
+-
+......................
+023
+None
+Radar spectra (3)
+-
+-
+......................
+024
+None
+Parcel lifted index (to 500 hPa)
+K
+K
+......................
+025
+None
+Temperature anomaly
+K
+K
+......................
+026
+None
+Pressure anomaly
+Pa
+Pa
+......................
+027
+None
+Geopotential height anomaly
+gpm
+gpm
+......................
+028
+None
+Wave spectra (1)
+-
+-
+......................
+029
+None
+Wave spectra (2)
+-
+-
+......................
+030
+None
+Wave spectra (3)
+-
+-
+......................
+031
+None
+Wind direction
+Degree true
+Degree true
+......................
+032
+None
+Wind speed
+m s**-1
+m s**-1
+......................
+033
+U
+U-component of wind
+m s**-1
+m s**-1
+......................
+034
+V
+V-component of wind
+m s**-1
+m s**-1
+......................
+035
+None
+Stream Function
+m**2 s**-1
+m**2 s**-1
+......................
+036
+None
+Velocity Potential
+m**2 s**-1
+m**2 s**-1
+......................
+037
+None
+Montgomery stream Function
+m**2 s**-1
+m**2 s**-1
+......................
+038
+None
+Sigma coordinate vertical velocity
+s**-1
+s**-1
+......................
+039
+W
+Vertical velocity
+Pa s**-1
+Pa s**-1
+......................
+040
+None
+Vertical velocity
+m s**-1
+m s**-1
+......................
+041
+None
+Absolute vorticity
+s**-1
+s**-1
+......................
+042
+None
+Absolute divergence
+s**-1
+s**-1
+......................
+043
+VO
+Relative vorticity
+s**-1
+s**-1
+......................
+044
+D
+Relative divergence
+s**-1
+s**-1
+......................
+045
+None
+Vertical u-component shear
+s**-1
+s**-1
+......................
+046
+None
+Vertical v-component shear
+s**-1
+s**-1
+......................
+047
+None
+Direction of current
+Degree true
+Degree true
+......................
+048
+None
+Speed of current
+m s**-1
+m s**-1
+......................
+049
+None
+U-component of current
+m s**-1
+m s**-1
+......................
+050
+None
+V-component of current
+m s**-1
+m s**-1
+......................
+051
+Q
+Specific humidity
+kg kg**-1
+kg kg**-1
+......................
+052
+R
+Relative humidity
+%
+%
+......................
+053
+None
+Humidity mixing ratio
+kg m**-2
+kg m**-2
+......................
+054
+None
+Precipitable water
+kg m**-2
+kg m**-2
+......................
+055
+None 
+Vapour pressure
+Pa
+Pa
+......................
+056
+None 
+Saturation deficit
+Pa
+Pa
+......................
+057
+E 
+Evaporation
+kg m**-2
+kg m**-2
+......................
+058
+CIWC
+Cloud ice
+kg m**-2
+kg m**-2
+......................
+059
+None
+Precipitation rate
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+060
+None
+Thunderstorm probability
+%
+%
+......................
+061
+TP
+Total precipitation
+kg m**-2
+kg m**-2
+......................
+062
+None
+Large scale precipitation (water)
+kg m**-2
+kg m**-2
+......................
+063
+None
+Convective precipitation (water)
+kg m**-2
+kg m**-2
+......................
+064
+None
+Snow fall rate water equivalent
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+065
+SF
+Water equivalentof accumulated snow depth
+kg m**-2
+kg m**-2
+......................
+066
+SD
+Snow depth
+m (of water equivalent)
+m (of water equivalent)
+......................
+067
+None
+Mixed layer depth
+m
+m
+......................
+068
+None
+Transient thermocline depth
+m
+m
+......................
+069
+None
+Main thermocline depth
+m
+m
+......................
+070
+None
+Main thermocline anomaly
+m
+m
+......................
+071
+TCC
+Total cloud cover
+%
+%
+......................
+072
+CCC
+Convective cloud cover
+%
+%
+......................
+073
+LCC
+Low cloud cover
+%
+%
+......................
+074
+MCC
+Medium cloud cover
+%
+%
+......................
+075
+HCC
+High cloud cover
+%
+%
+......................
+076
+CLWC
+Cloud liquid water content
+kg kg**-1
+kg kg**-1
+......................
+077
+None
+Best lifted index (to 500 hPa)
+K
+K
+......................
+078
+CSF
+Convective snow-fall
+kg m**-2
+kg m**-2
+......................
+079
+LSF
+Large scale snow-fall
+kg m**-2
+kg m**-2
+......................
+080
+None
+Water temperature
+K
+K
+......................
+081
+LSM
+Land cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+082
+None
+Deviation of sea-level from mean
+m
+m
+......................
+083
+SR
+Surface roughness
+m
+m
+......................
+084
+AL
+Albedo
+-
+-
+......................
+085
+ST
+Surface temperature of soil
+K
+K
+......................
+086
+SSW
+Soil moisture content
+kg m**-2
+kg m**-2
+......................
+087
+VEG
+Percentage of vegetation
+%
+%
+......................
+088
+None
+Salinity
+kg kg**-1
+kg kg**-1
+......................
+089
+None
+Density
+kg m**-3
+kg kg**-1
+......................
+090
+RO
+Water run-off
+kg m**-2
+kg m**-2
+......................
+091
+None
+Ice cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+092
+None
+Ice thickness
+m
+m
+......................
+093
+None
+Direction of ice drift
+Degree true
+Degree true
+......................
+094
+None
+Speed of ice drift
+m s*-1
+m s*-1
+......................
+095
+None
+U-component of ice drift
+m s**-1
+m s**-1
+......................
+096
+None
+V-component of ice drift
+m s**-1
+m s**-1
+......................
+097
+None
+Ice growth rate
+m s**-1
+m s**-1
+......................
+098
+None
+Ice divergence
+s**-1
+s**-1
+......................
+099
+None
+Snow melt
+kg m**-2
+kg m**-2
+......................
+100
+SWH
+Signific.height,combined wind waves+swell
+m
+m
+......................
+101
+MDWW
+Mean direction of wind waves
+Degree true
+Degree true
+......................
+102
+SHWW
+Significant height of wind waves
+m
+m
+......................
+103
+MPWW
+Mean period of wind waves
+s
+s
+......................
+104
+None
+Direction of swell waves
+Degree true
+Degree true
+......................
+105
+None
+Significant height of swell waves
+m
+m
+......................
+106
+None
+Mean period of swell waves
+s
+s
+......................
+107
+MDPS
+Mean direction of primary swell
+Degree true
+Degree true
+......................
+108
+MPPS
+Mean period of primary swell
+s
+s
+......................
+109
+None
+Secondary wave direction
+Degree true
+Degree true
+......................
+110
+None
+Secondary wave period
+s
+s
+......................
+111
+None
+Net short-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+112
+None
+Net long-wave radiation flux (surface)
+W m**-2
+W m**-2
+......................
+113
+None
+Net short-wave radiationflux(atmosph.top)
+W m**-2
+W m**-2
+......................
+114
+None
+Net long-wave radiation flux(atmosph.top)
+W m**-2
+W m**-2
+......................
+115
+None
+Long-wave radiation flux
+W m**-2
+W m**-2
+......................
+116
+None
+Short-wave radiation flux
+W m**-2
+W m**-2
+......................
+117
+None
+Global radiation flux
+W m**-2
+W m**-2
+......................
+118
+None
+Brightness temperature
+K
+K
+......................
+119
+None
+Radiance (with respect to wave number)
+W m**-1 sr**-1
+W m**-1 sr**-1
+......................
+120
+None
+Radiance (with respect to wave length)
+W m**-1 sr**-1
+W m**-3 sr**-1
+......................
+121
+SLHF
+(surface) Latent heat flux
+W m**-2
+W m**-2
+......................
+122
+SSHF
+(surface) Sensible heat flux
+W m**-2
+W m**-2
+......................
+123
+BLD
+Boundary layer dissipation
+W m**-2
+W m**-2
+......................
+124
+None
+Momentum flux, u-component
+N m**-2
+N m**-2
+......................
+125
+None
+Momentum flux, v-component
+N m**-2
+N m**-2
+......................
+126
+None
+Wind mixing energy
+J
+J
+......................
+127
+None
+Image data
+-
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtables/wmostd/table_2_version_003.mf b/gribtables/wmostd/table_2_version_003.mf
new file mode 100755
index 0000000..eec17a5
--- /dev/null
+++ b/gribtables/wmostd/table_2_version_003.mf
@@ -0,0 +1,771 @@
+Table 2 standard OMM: Version Numero 3.
+Codes et unites en phase avec FM 92-X Ext.GRIB.
+......................
+001
+P 
+Pression
+Pa
+Pa
+......................
+002
+PMER
+Pression reduite au niveau moyen dela mer
+Pa
+Pa
+......................
+003
+TDPS
+Tendance barometrique
+Pa s**-1
+Pa s**-1
+......................
+004
+TP 
+Tourbillon potentiel
+K m**2 kg**-1 s**-1
+K m**2 kg**-1 s**-1
+......................
+005
+HZ 
+Altitude en Atmosphere Standard OACI
+m
+m
+......................
+006
+Z
+Geopotentiel
+m**2 s**-2
+m**2 s**-2
+......................
+007
+H
+Hauteur geopotentielle
+gpm
+gpm
+......................
+008
+ALTITUDE
+Altitude (geometrique)
+m
+m
+......................
+009
+None
+Standard deviation of height
+m
+m
+......................
+010
+TCO3
+Total (column) ozone
+Dobson (kg m**-2)
+Dobson (kg m**-2)
+......................
+011
+T
+Temperature
+K
+K
+......................
+012
+None
+Virtual temperature
+K
+K
+......................
+013
+THETA
+Temperature potentielle
+K
+K
+......................
+014
+TPW
+Temperature potentielle pseudoadiabatique
+K
+K
+......................
+015
+TMAX
+Temperature maximale
+K
+K
+......................
+016
+TMIN
+Temperature minimale
+K
+K
+......................
+017
+TD
+Temperature du point de rosee
+K
+K
+......................
+018
+None
+Dew-point depression (or deficit)
+K
+K
+......................
+019
+None
+Lapse rate
+K s**-1
+K s**-1
+......................
+020
+None
+Visibility
+m
+m
+......................
+021
+None
+Radar spectra (1)
+-
+-
+......................
+022
+None
+Radar spectra (2)
+-
+-
+......................
+023
+None
+Radar spectra (3)
+-
+-
+......................
+024
+None
+Parcel lifted index (to 500 hPa)
+K
+K
+......................
+025
+None
+Temperature anomaly
+K
+K
+......................
+026
+None
+Pressure anomaly
+Pa
+Pa
+......................
+027
+None
+Geopotential height anomaly
+gpm
+gpm
+......................
+028
+None
+Wave spectra (1)
+-
+-
+......................
+029
+None
+Wave spectra (2)
+-
+-
+......................
+030
+None
+Wave spectra (3)
+-
+-
+......................
+031
+DD
+Direction du vent horizontal
+Degre
+Degre
+......................
+032
+FF
+Vitesse du vent horizontal
+m s**-1
+m s**-1
+......................
+033
+U
+Premiere composante (zonale) du vent
+m s**-1
+m s**-1
+......................
+034
+V
+Seconde composante (meridienne) du vent
+m s**-1
+m s**-1
+......................
+035
+None
+Stream Function
+m**2 s**-1
+m**2 s**-1
+......................
+036
+None
+Velocity Potential
+m**2 s**-1
+m**2 s**-1
+......................
+037
+None
+Montgomery stream Function
+m**2 s**-1
+m**2 s**-1
+......................
+038
+None
+Sigma coordinate vertical velocity
+s**-1
+s**-1
+......................
+039
+VV
+Vitesse verticale
+Pa s**-1
+Pa s**-1
+......................
+040
+None
+Vertical velocity
+m s**-1
+m s**-1
+......................
+041
+TA
+Tourbillon absolu
+s**-1
+s**-1
+......................
+042
+None
+Absolute divergence
+s**-1
+s**-1
+......................
+043
+TB
+Tourbillon relatif
+s**-1
+s**-1
+......................
+044
+DI
+Divergence relative
+s**-1
+s**-1
+......................
+045
+None
+Vertical u-component shear
+s**-1
+s**-1
+......................
+046
+None
+Vertical v-component shear
+s**-1
+s**-1
+......................
+047
+None
+Direction of current
+Degree true
+Degree true
+......................
+048
+None
+Speed of current
+m s**-1
+m s**-1
+......................
+049
+None
+U-component of current
+m s**-1
+m s**-1
+......................
+050
+None
+V-component of current
+m s**-1
+m s**-1
+......................
+051
+Q
+Humidite specifique
+kg kg**-1
+kg kg**-1
+......................
+052
+HU
+Humidite relative
+%
+%
+......................
+053
+R
+Rapport de melange de l'air humide
+kg m**-2
+kg m**-2
+......................
+054
+None
+Precipitable water
+kg m**-2
+kg m**-2
+......................
+055
+None 
+Vapour pressure
+Pa
+Pa
+......................
+056
+None 
+Saturation deficit
+Pa
+Pa
+......................
+057
+FLEVAP 
+Flux d'evaporation
+kg m**-2
+kg m**-2
+......................
+058
+CIWC
+Cloud ice
+kg m**-2
+kg m**-2
+......................
+059
+None
+Precipitation rate
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+060
+None
+Thunderstorm probability
+%
+%
+......................
+061
+PRECIP
+Precipitation totales (toutes formes)
+kg m**-2
+kg m**-2
+......................
+062
+PRLGE
+Precipitations liquides de grande echelle
+kg m**-2
+kg m**-2
+......................
+063
+PRLCV
+Precipitations liquides convectives
+kg m**-2
+kg m**-2
+......................
+064
+INTENNEIGE
+Equivalent en eau des chutes de neige
+kg m**-2 s**-1
+kg m**-2 s**-1
+......................
+065
+SF
+Water equivalentof accumulated snow depth
+kg m**-2
+kg m**-2
+......................
+066
+HTEURNEIGE
+Epaisseur de neige en equivalent eau
+m (of water equivalent)
+m (of water equivalent)
+......................
+067
+None
+Mixed layer depth
+m
+m
+......................
+068
+None
+Transient thermocline depth
+m
+m
+......................
+069
+None
+Main thermocline depth
+m
+m
+......................
+070
+None
+Main thermocline anomaly
+m
+m
+......................
+071
+NEBUL
+Nebulosite totale
+%
+%
+......................
+072
+NEBCON
+Nebulosite due a la convection
+%
+%
+......................
+073
+NEBBAS
+Nebulosite de l'etage inferieur
+%
+%
+......................
+074
+NEBMOY
+Nebulosite de l'etage moyen
+%
+%
+......................
+075
+NEBHAU
+Nebulosite de l'etage superieur
+%
+%
+......................
+076
+CLWC
+Cloud liquid water content
+kg kg**-1
+kg kg**-1
+......................
+077
+None
+Best lifted index (to 500 hPa)
+K
+K
+......................
+078
+PRNCV
+Precipitations neigeuses convectives
+kg m**-2
+kg m**-2
+......................
+079
+PRNGE
+Precipitations neigeuses de grandeechelle
+kg m**-2
+kg m**-2
+......................
+080
+None
+Water temperature
+K
+K
+......................
+081
+TERRE_MER
+Indicateur terre/mer (1=terre, 0=mer)
+(0 - 1)
+(0 - 1)
+......................
+082
+None
+Deviation of sea-level from mean
+m
+m
+......................
+083
+RUGOSITE
+Rugosite du sol
+m
+m
+......................
+084
+ALBEDO
+Albedo
+-
+-
+......................
+085
+ST
+Surface temperature of soil
+K
+K
+......................
+086
+RESERVE_EAU
+Contenu en eau
+kg m**-2
+kg m**-2
+......................
+087
+VEGETATION
+Vegetation (pourcentage)
+%
+%
+......................
+088
+None
+Salinity
+kg kg**-1
+kg kg**-1
+......................
+089
+None
+Density
+kg m**-3
+kg kg**-1
+......................
+090
+RO
+Water run-off
+kg m**-2
+kg m**-2
+......................
+091
+None
+Ice cover (1=land, 0=sea)
+(0 - 1)
+(0 - 1)
+......................
+092
+None
+Ice thickness
+m
+m
+......................
+093
+None
+Direction of ice drift
+Degree true
+Degree true
+......................
+094
+None
+Speed of ice drift
+m s*-1
+m s*-1
+......................
+095
+None
+U-component of ice drift
+m s**-1
+m s**-1
+......................
+096
+None
+V-component of ice drift
+m s**-1
+m s**-1
+......................
+097
+None
+Ice growth rate
+m s**-1
+m s**-1
+......................
+098
+None
+Ice divergence
+s**-1
+s**-1
+......................
+099
+NEIGE
+Precipitations neigeuses totales
+kg m**-2
+kg m**-2
+......................
+100
+SWH
+Hauteur significative vagues_mer+houle 
+m
+m
+......................
+101
+MDWW
+Direction moy. des vagues de la merduvent
+Degre
+Degre
+......................
+102
+SHWW
+Hauteur signif.des vagues de la merduvent
+m
+m
+......................
+103
+MPWW
+Periode moy. des vagues de la mer du vent
+s
+s
+......................
+104
+MDS
+Direction des vagues de la houle
+Degre
+Degre
+......................
+105
+SHS
+Hauteur signific. des vagues de la houle
+m
+m
+......................
+106
+MPS
+Periode moyenne des vagues de la houle
+s
+s
+......................
+107
+MDPS
+Direction moyenne de la houle primaire
+Degre
+Degre
+......................
+108
+MPPS
+Periode moyenne de la houle primaire
+s
+s
+......................
+109
+MDSS
+Direction moyenne de la houle secondaire
+Degre
+Degre
+......................
+110
+MPSS
+Periode moyenne de la houle secondaire
+s
+s
+......................
+111
+FLSOLAIRE
+Bilan ray. courtes long. d'ondes (au sol)
+W m**-2
+W m**-2
+......................
+112
+FLTHERM
+Bilan ray. grandes long. d'ondes (au sol)
+W m**-2
+W m**-2
+......................
+113
+FLSOLAIRE
+Bilan ray. courtes long. d'ondes (sommet)
+W m**-2
+W m**-2
+......................
+114
+FLTHERM
+Bilan ray. grandes long. d'ondes (sommet)
+W m**-2
+W m**-2
+......................
+115
+None
+Long-wave radiation flux
+W m**-2
+W m**-2
+......................
+116
+None
+Short-wave radiation flux
+W m**-2
+W m**-2
+......................
+117
+None
+Global radiation flux
+W m**-2
+W m**-2
+......................
+118
+None
+Brightness temperature
+K
+K
+......................
+119
+None
+Radiance (with respect to wave number)
+W m**-1 sr**-1
+W m**-1 sr**-1
+......................
+120
+None
+Radiance (with respect to wave length)
+W m**-1 sr**-1
+W m**-3 sr**-1
+......................
+121
+FLLAT
+Flux de chaleur latente
+W m**-2
+W m**-2
+......................
+122
+FLSEN
+Flux de chaleur sensible
+W m**-2
+W m**-2
+......................
+123
+BLD
+Boundary layer dissipation
+W m**-2
+W m**-2
+......................
+124
+None
+Momentum flux, u-component
+N m**-2
+N m**-2
+......................
+125
+None
+Momentum flux, v-component
+N m**-2
+N m**-2
+......................
+126
+None
+Wind mixing energy
+J
+J
+......................
+127
+None
+Image data
+-
+-
+......................
+255
+-
+Indicates a missing value
+-
+-
+......................
diff --git a/gribtemplates/localDefinitionTemplate_001_098_001 b/gribtemplates/localDefinitionTemplate_001_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_001_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_007_000_001 b/gribtemplates/localDefinitionTemplate_007_000_001
new file mode 100755
index 0000000..aad602c
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_007_000_001
@@ -0,0 +1,42 @@
+!
+!	KWBC localDefinitionTemplate_001
+!	--------------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+sectionLength			1	L3	n/a	ignore
+applicationIdentifier		41	I1	37	-
+type				42	I1	38	-
+identificationNumber		43	I1	39	-
+productIdentifier		44	I1	40	-
+spatialSmoothingOfProduct	45	I1	41	-
+!
+if_ge_46			-	IF_GT	45	sectionLength
+probProductDefinition		46	I1	42	-
+probabilityType			47	I1	43	-
+lowerLimit			48	I4	44	-
+upperLimit			52	I4	45	-
+padding				56	PAD	n/a	5
+endif_ge_46			-	ENDIF	if_ge_46
+!
+if_ge_61			-	IF_GT	60	sectionLength
+ensembleSize			61	I1	46	-
+clusterSize			62	I1	47	-
+numberOfClusters		63	I1	48	-
+clusteringMethod		64	I1	49	-
+northLatitudeOfCluster		65	S3	50	-
+southLatitudeOfCluster		68	S3	51	-
+westLongitudeOfCluster		71	S3	52	-
+eastLongitudeOfCluster		74	S3	53	-
+clusterMember1			77	I1	54	-
+clusterMember2			78	I1	55	-
+clusterMember3			79	I1	56	-
+clusterMember4			80	I1	57	-
+clusterMember5			81	I1	58	-
+clusterMember6			82	I1	59	-
+clusterMember7			83	I1	60	-
+clusterMember8			84	I1	61	-
+clusterMember9			85	I1	62	-
+clusterMember10			86	I1	63	-
+endif_ge_61			-	ENDIF	if_ge_61
diff --git a/gribtemplates/localDefinitionTemplate_007_002_000 b/gribtemplates/localDefinitionTemplate_007_002_000
new file mode 100755
index 0000000..aad602c
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_007_002_000
@@ -0,0 +1,42 @@
+!
+!	KWBC localDefinitionTemplate_001
+!	--------------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+sectionLength			1	L3	n/a	ignore
+applicationIdentifier		41	I1	37	-
+type				42	I1	38	-
+identificationNumber		43	I1	39	-
+productIdentifier		44	I1	40	-
+spatialSmoothingOfProduct	45	I1	41	-
+!
+if_ge_46			-	IF_GT	45	sectionLength
+probProductDefinition		46	I1	42	-
+probabilityType			47	I1	43	-
+lowerLimit			48	I4	44	-
+upperLimit			52	I4	45	-
+padding				56	PAD	n/a	5
+endif_ge_46			-	ENDIF	if_ge_46
+!
+if_ge_61			-	IF_GT	60	sectionLength
+ensembleSize			61	I1	46	-
+clusterSize			62	I1	47	-
+numberOfClusters		63	I1	48	-
+clusteringMethod		64	I1	49	-
+northLatitudeOfCluster		65	S3	50	-
+southLatitudeOfCluster		68	S3	51	-
+westLongitudeOfCluster		71	S3	52	-
+eastLongitudeOfCluster		74	S3	53	-
+clusterMember1			77	I1	54	-
+clusterMember2			78	I1	55	-
+clusterMember3			79	I1	56	-
+clusterMember4			80	I1	57	-
+clusterMember5			81	I1	58	-
+clusterMember6			82	I1	59	-
+clusterMember7			83	I1	60	-
+clusterMember8			84	I1	61	-
+clusterMember9			85	I1	62	-
+clusterMember10			86	I1	63	-
+endif_ge_61			-	ENDIF	if_ge_61
diff --git a/gribtemplates/localDefinitionTemplate_007_002_001 b/gribtemplates/localDefinitionTemplate_007_002_001
new file mode 100755
index 0000000..aad602c
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_007_002_001
@@ -0,0 +1,42 @@
+!
+!	KWBC localDefinitionTemplate_001
+!	--------------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+sectionLength			1	L3	n/a	ignore
+applicationIdentifier		41	I1	37	-
+type				42	I1	38	-
+identificationNumber		43	I1	39	-
+productIdentifier		44	I1	40	-
+spatialSmoothingOfProduct	45	I1	41	-
+!
+if_ge_46			-	IF_GT	45	sectionLength
+probProductDefinition		46	I1	42	-
+probabilityType			47	I1	43	-
+lowerLimit			48	I4	44	-
+upperLimit			52	I4	45	-
+padding				56	PAD	n/a	5
+endif_ge_46			-	ENDIF	if_ge_46
+!
+if_ge_61			-	IF_GT	60	sectionLength
+ensembleSize			61	I1	46	-
+clusterSize			62	I1	47	-
+numberOfClusters		63	I1	48	-
+clusteringMethod		64	I1	49	-
+northLatitudeOfCluster		65	S3	50	-
+southLatitudeOfCluster		68	S3	51	-
+westLongitudeOfCluster		71	S3	52	-
+eastLongitudeOfCluster		74	S3	53	-
+clusterMember1			77	I1	54	-
+clusterMember2			78	I1	55	-
+clusterMember3			79	I1	56	-
+clusterMember4			80	I1	57	-
+clusterMember5			81	I1	58	-
+clusterMember6			82	I1	59	-
+clusterMember7			83	I1	60	-
+clusterMember8			84	I1	61	-
+clusterMember9			85	I1	62	-
+clusterMember10			86	I1	63	-
+endif_ge_61			-	ENDIF	if_ge_61
diff --git a/gribtemplates/localDefinitionTemplate_007_098_001 b/gribtemplates/localDefinitionTemplate_007_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_007_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_007_098_011 b/gribtemplates/localDefinitionTemplate_007_098_011
new file mode 120000
index 0000000..4a9864d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_007_098_011
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_011
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_007_098_018 b/gribtemplates/localDefinitionTemplate_007_098_018
new file mode 120000
index 0000000..bcbadb0
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_007_098_018
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_018
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_0255_098_001 b/gribtemplates/localDefinitionTemplate_0255_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_0255_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_0255_098_018 b/gribtemplates/localDefinitionTemplate_0255_098_018
new file mode 120000
index 0000000..bcbadb0
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_0255_098_018
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_018
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_034_098_001 b/gribtemplates/localDefinitionTemplate_034_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_034_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_054_098_001 b/gribtemplates/localDefinitionTemplate_054_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_054_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_058_098_001 b/gribtemplates/localDefinitionTemplate_058_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_058_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_058_098_011 b/gribtemplates/localDefinitionTemplate_058_098_011
new file mode 120000
index 0000000..4a9864d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_058_098_011
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_011
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_001 b/gribtemplates/localDefinitionTemplate_074_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_004 b/gribtemplates/localDefinitionTemplate_074_098_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_011 b/gribtemplates/localDefinitionTemplate_074_098_011
new file mode 120000
index 0000000..4a9864d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_011
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_011
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_015 b/gribtemplates/localDefinitionTemplate_074_098_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_016 b/gribtemplates/localDefinitionTemplate_074_098_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_018 b/gribtemplates/localDefinitionTemplate_074_098_018
new file mode 120000
index 0000000..bcbadb0
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_018
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_018
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_074_098_021 b/gribtemplates/localDefinitionTemplate_074_098_021
new file mode 120000
index 0000000..b661d93
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_074_098_021
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_021
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_078_098_001 b/gribtemplates/localDefinitionTemplate_078_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_078_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_078_098_018 b/gribtemplates/localDefinitionTemplate_078_098_018
new file mode 120000
index 0000000..bcbadb0
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_078_098_018
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_018
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_078_098_191 b/gribtemplates/localDefinitionTemplate_078_098_191
new file mode 120000
index 0000000..f10204e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_078_098_191
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_191
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_080_098_028 b/gribtemplates/localDefinitionTemplate_080_098_028
new file mode 120000
index 0000000..e3dfea5
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_080_098_028
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_028
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_080_098_029 b/gribtemplates/localDefinitionTemplate_080_098_029
new file mode 120000
index 0000000..2ea3dc3
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_080_098_029
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_029
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_080_098_191 b/gribtemplates/localDefinitionTemplate_080_098_191
new file mode 120000
index 0000000..f10204e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_080_098_191
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_191
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_084_098_001 b/gribtemplates/localDefinitionTemplate_084_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_084_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_085_098_001 b/gribtemplates/localDefinitionTemplate_085_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_085_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_085_098_004 b/gribtemplates/localDefinitionTemplate_085_098_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_085_098_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_085_098_015 b/gribtemplates/localDefinitionTemplate_085_098_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_085_098_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_085_098_016 b/gribtemplates/localDefinitionTemplate_085_098_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_085_098_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_085_098_018 b/gribtemplates/localDefinitionTemplate_085_098_018
new file mode 120000
index 0000000..bcbadb0
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_085_098_018
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_018
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_085_098_021 b/gribtemplates/localDefinitionTemplate_085_098_021
new file mode 120000
index 0000000..b661d93
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_085_098_021
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_021
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_000_001 b/gribtemplates/localDefinitionTemplate_098_000_001
new file mode 100755
index 0000000..32e0947
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_001
@@ -0,0 +1,15 @@
+!
+!	localDefinitionTemplate_001
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+spareSetToZero			52	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_002 b/gribtemplates/localDefinitionTemplate_098_000_002
new file mode 100755
index 0000000..4340b68
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_002
@@ -0,0 +1,27 @@
+!
+!	localDefinitionTemplate_002
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+totalNumberOfClusters		51	I1	43	-
+spareSetToZero			52	PAD	n/a	1
+clusteringMethod		53	I1	44	-
+startTimeStep			54	I2	45	-
+endTimeStep			56	I2	46	-
+northernLatititudeOfDomain	58	S3	47	-
+westernLongititudeOfDomain	61	S3	48	-
+southernLatititudeOfDomain	64	S3	49	-
+easternLongititudeOfDomain	67	S3	50	-
+operationalForecastCluster	70	I1	51	-
+controlForecastCluster		71	I1	52	-
+numberOfForecastsInCluster	72	I1	53	-
+ensembleForecastNumbers		73	LP_I1	54	numberOfForecastsInCluster
+spareToEnsureFixedLength	-	PADTO	n/a	328
diff --git a/gribtemplates/localDefinitionTemplate_098_000_003 b/gribtemplates/localDefinitionTemplate_098_000_003
new file mode 100755
index 0000000..820d1b2
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_003
@@ -0,0 +1,15 @@
+!
+!	localDefinitionTemplate_003
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+band				50	I1	42	-
+functionCode			51	I1	43	-
+spareSetToZero			52	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_004 b/gribtemplates/localDefinitionTemplate_098_000_004
new file mode 100755
index 0000000..4ebc8d1
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_004
@@ -0,0 +1,89 @@
+!
+!	localDefinitionTemplate_004
+!	---------------------------
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+localDefinitionNumber			41	I1	37	-
+class					42	I1	38	-
+type					43	I1	39	-
+stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+! if stream == 1090
+if1 					-	IF_EQ	1090	stream
+ensembleMemberNumber			50	I2	42	-
+setToZeroForStream1090Unpacking		n/a	PAD	43	1
+endif1					-	ENDIF	if1
+! if stream != 1090
+if2 					-	IF_NEQ	1090	stream
+ensembleMemberNumber			50	I1	42	-
+setToZero				51	PAD	43	1
+endif2					-	ENDIF 	if2
+flagShowingPostAuxiliaryArrayInUse	52	F1	-	1
+systemNumber				53	I1	44	-
+methodNumber				54	I1	45	-
+!
+!  Coordinate structure definition
+!
+spaceUnitFlag				55	I1	46	-
+verticalCoordinateDefinition		56	I1	47	-
+horizontalCoordinateDefinition		57	I1	48	-
+timeUnitFlag				58	I1	49	-
+timeCoordinateDefinition		59	I1	50	-
+!
+!  Position definition:  mixed coordinates
+!
+mixedCoordinateFieldFlag		60	I1	51	-
+coordinate1Flag				61	I1	52	-
+averagingFlag				62	I1	53	-
+positionOfLevel1			63	S4	54	-
+positionOfLevel2			67	S4	55	-
+coordinate2Flag				71	I1	56	-
+averagingFlag				72	I1	57	-
+positionOfLevel1			73	S4	58	-
+positionOfLevel2			77	S4	59	-
+!
+!  Data grid definitions
+!
+coordinate3Flag				81	I1	60	-
+coordinate4Flag				82	I1	61	-
+coordinate4OfFirstGridPoint		83	S4	62	-
+coordinate3OfFirstGridPoint		87	S4	63	-
+coordinate4OfLastGridPoint		91	S4	64	-
+coordinate3OfLastGridPoint		95	S4	65	-
+iIncrement				99	S4	66	-
+jIncrement				103	S4	67	-
+flagForIrregularGridCoordinateList	107	I1	68	-
+flagForNormalOrStaggeredGrid		108	I1	69	-
+!
+!  Auxiliary information
+!
+flagForAnyFurtherInformation		109	I1	70	-
+numberInHorizontalCoordinates		110	I1	71	-
+numberInMixedCoordinateDefinition	111	I2	72	-
+numberInTheGridCoordinateList		113	I2	73	-
+numberInTheAuxiliaryArray		115	I2	74	-
+!
+!   Horizontal coordinate definition
+!
+horizontalCoordinateSupplement		-	LP_S4	-	numberInHorizontalCoordinates
+!
+!  Mixed coordinate definition
+!
+mixedCoordinateDefinition		-	LP_S4	-	numberInMixedCoordinateDefinition
+!
+!   Grid coordinate list
+!
+gridCoordinateList			-	LP_S4	-	numberInTheGridCoordinateList
+!
+!   Auxiliary array
+!
+auxiliaryArray				-	LP_I4	-	numberInTheAuxiliaryArray
+!
+!  Post-auxiliary array
+!
+if3 					-	IF_EQ	1	flagShowingPostAuxiliaryArrayInUse
+sizeOfPostAuxiliaryArray		-	I4	-	-
+arrayValues				-	LP_I4M1	-	sizeOfPostAuxiliaryArray
+endif3					-	ENDIF 	if3
diff --git a/gribtemplates/localDefinitionTemplate_098_000_005 b/gribtemplates/localDefinitionTemplate_098_000_005
new file mode 100755
index 0000000..cd6a40a
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_005
@@ -0,0 +1,19 @@
+!
+!	localDefinitionTemplate_005
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+decimalScaleFactor		52	S1	44	-
+thresholdIndicator		53	I1	45	-
+lowerThreshold			54	S2	46	-
+upperThreshold			56	S2	47	-
+spareSetToZero			58	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_006 b/gribtemplates/localDefinitionTemplate_098_000_006
new file mode 100755
index 0000000..2469a29
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_006
@@ -0,0 +1,20 @@
+!
+!	localDefinitionTemplate_006
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+zeroes				50	PAD	42	2
+dateOfSSTFieldUsed		52	D3	44	-
+typeOfSSTFieldUsed		55	I1	45	-
+countOfICEFieldsUsed		56	I1	46	-
+iceFieldDate+Satellite		57	LIST	47	countOfICEFieldsUsed
+dateOfIceFieldUsed		-	D3	-	-
+satelliteNumber			-	I1	-	-
+ENDLIST				-	ENDLIST	-	iceFieldDate+Satellite
diff --git a/gribtemplates/localDefinitionTemplate_098_000_007 b/gribtemplates/localDefinitionTemplate_098_000_007
new file mode 100755
index 0000000..55cf5ff
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_007
@@ -0,0 +1,17 @@
+!
+!	localDefinitionTemplate_007
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+domain				52	I1	44	-
+diagnosticNumber		53	I1	45	-
+spareSetToZero			54	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_008 b/gribtemplates/localDefinitionTemplate_098_000_008
new file mode 100755
index 0000000..2910ee0
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_008
@@ -0,0 +1,14 @@
+!
+!	localDefinitionTemplate_008
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+intervalBetweenTimes		50	I1	42	-
+unsignedIntegers		51	I1	43	12
diff --git a/gribtemplates/localDefinitionTemplate_098_000_009 b/gribtemplates/localDefinitionTemplate_098_000_009
new file mode 100755
index 0000000..be91a64
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_009
@@ -0,0 +1,40 @@
+!
+!	localDefinitionTemplate_009
+!	---------------------------
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+localDefinitionNumber			41	I1	37	-
+class					42	I1	38	-
+type					43	I1	39	-
+stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+forecastOrSingularVectorNumber		50	I2	42	-
+!
+!  These elements are set to zero for perturbed forecast
+!
+if1 					-	IF_EQ	60	type
+octetsSetToZero				52	PAD	n/a	41
+ksec1SetToZero				n/a	PAD	43	13
+endif1					-	ENDIF	if1
+!
+!  These elements are coded for singular vectors
+!
+if2 					-	IF_NEQ	60	type
+numberOfIterations			52	I2	43	-
+numberOfSingularVectorsComputed		54	I2	44	-
+normAtInitialTime			56	I1	45	-
+normAtFinalTime				57	I1	46	-
+multiplicationFactorForLatLong		58	I4	47	-
+northWestLatitudeOfLPOArea		62	S4	48	-
+northWestLongitudeOfLPOArea		66	S4	49	-
+southEastLatitudeOfLPOArea		70	S4	50	-
+southEastLongitudeOfLPOArea		74	S4	51	-
+accuracyMultipliedByFactor		78	I4	52	-
+numberOfSingularVectorsEvolved		82	I2	53	-
+!Ritz numbers:
+NINT(LOG10(RITZ)-5)			84	S4	54	-
+NINT(RITZ/(EXP(LOG(10.0*KSEC1(54))	88	S4	55	-
+endif2					-	ENDIF 	if2
+spareSetToZero				92	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_010 b/gribtemplates/localDefinitionTemplate_098_000_010
new file mode 100755
index 0000000..c8ee9fd
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_010
@@ -0,0 +1,31 @@
+!
+!	localDefinitionTemplate_010
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+centralClusterDefinition	52	I1	44	-
+parameterIndicator		53	I1	45	-
+levelIndicator			54	I1	46	-
+northLatitudeOfDomainOfTubing	55	S3	47	-
+westLongitudeOfDomainOfTubing	58	S3	48	-
+southLatitudeOfDomainOfTubing	61	S3	49	-
+eastLongitudeOfDomainOfTubing	64	S3	50	-
+numberOfOperationalForecastTube	67	I1	51	-
+numberOfControlForecastTube	68	I1	52	-
+heightOrPressureOfLevel		69	I2	53	-
+referenceStep			71	I2	54	-
+radiusOfCentralCluster		73	I2	55	-
+ensembleStandardDeviation	75	I2	56	-
+distanceFromTubeToEnsembleMean	77	I2	57	-
+numberOfForecastsInTube		79	I1	58	-
+ensembleForecastNumbers		80	LP_I1	59	numberOfForecastsInTube
+spareToEnsureFixedLength	-	PADTO	n/a	334
diff --git a/gribtemplates/localDefinitionTemplate_098_000_011 b/gribtemplates/localDefinitionTemplate_098_000_011
new file mode 100755
index 0000000..1e8c76d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_011
@@ -0,0 +1,25 @@
+!
+!	localDefinitionTemplate_011
+!	---------------------------
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+localDefinitionNumber			41	I1	37	-
+class					42	I1	38	-
+type					43	I1	39	-
+stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+classOfAnalysis				50	I1	42	-
+typeOfAnalysis				51	I1	43	-
+streamOfAnalysis			52	I2	44	-
+experimentVersionNumberOfAnalysis	54	A4	45	-
+yearOfAnalysis				58	I1	46	-
+monthOfAnalysis				59	I1	47	-
+dayOfAnalysis				60	I1	48	-
+hourOfAnalysis				61	I1	49	-
+minuteOfAnalysis			62	I1	50	-
+centuryOfAnalysis			63	I1	51	-
+originatingCentreOfAnalysis		64	I1	52	-
+subcentreOfAnalysis			65	I1	53	-
+spareSetToZero				66	PAD	n/a	7
diff --git a/gribtemplates/localDefinitionTemplate_098_000_013 b/gribtemplates/localDefinitionTemplate_098_000_013
new file mode 100755
index 0000000..b77671e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_013
@@ -0,0 +1,64 @@
+!
+!	localDefinitionTemplate_013
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+directionNumber			52	I1	44	-
+frequencyNumber			53	I1	45	-
+numberOfDirections		54	I1	46	-
+numberOfFrequencies		55	I1	47	-
+directionScalingFactor		56	I4	48	-
+frequencyScalingFactor		60	I4	49	-
+flag				64	F1	-	3
+!
+!  Old versions of wave 2D spectra direction and frequency do not
+!  have the systemNumber and methodNumber, and the flag is set to 0.
+!
+if0                             -       IF_EQ   0       flag
+spareSetToZero			65	PAD	n/a	36
+endif0                          -       ENDIF   if0
+!
+!  Old versions of wave 2D spectra direction and frequency do not
+!  have the systemNumber and methodNumber, and the flag is set to 0.
+!
+!
+scaledDirections		101	LP_I4	50	numberOfDirections
+scaledFrequencies		-	LP_I4	-	numberOfFrequencies
+!
+if1				-	IF_EQ	1	flag
+systemNumber			065	I2	-	-
+methodNumber			067	I2	-	-
+spareSetToZero1			069	PAD	n/a	32
+endif1				-	ENDIF	if1
+!
+if2             -   IF_EQ   2   flag
+systemNumber			065	I2  -   -
+methodNumber            067 I2  -   -
+referenceDate           069 I4  -   -
+climateDateFrom         073 I4  -   -
+climateDateTo           077 I4  -   -
+spareSetToZero2         081 PAD n/a 20
+endif2              -   ENDIF   if2
+!
+if3             -   IF_EQ   3   flag
+systemNumber            065 I2  -   -
+methodNumber            067 I2  -   -
+referenceDate           069 I4  -   -
+climateDateFrom         073 I4  -   -
+climateDateTo           077 I4  -   -
+legBaseDate             081 I4  -   -
+legBaseTime             085 I2  -   -
+legNumber               087 I1  -   -
+oceanAtmosphereCoupling 088 I1  -   -
+spareSetToZero3         089 PAD n/a 12
+endif3          -   ENDIF   if3
+
diff --git a/gribtemplates/localDefinitionTemplate_098_000_013.old b/gribtemplates/localDefinitionTemplate_098_000_013.old
new file mode 100755
index 0000000..5f66d54
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_013.old
@@ -0,0 +1,50 @@
+!
+!	localDefinitionTemplate_013
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+directionNumber			52	I1	44	-
+frequencyNumber			53	I1	45	-
+numberOfDirections		54	I1	46	-
+numberOfFrequencies		55	I1	47	-
+directionScalingFactor		56	I4	48	-
+frequencyScalingFactor		60	I4	49	-
+flag				64	F1	-	2
+!
+!  Old versions of wave 2D spectra direction and frequency do not
+!  have the systemNumber and methodNumber, and the flag is set to 0.
+!
+if0                             -       IF_EQ   0       flag
+spareSetToZero			65	PAD	n/a	36
+endif0                          -       ENDIF   if0
+!
+!  Old versions of wave 2D spectra direction and frequency do not
+!  have the systemNumber and methodNumber, and the flag is set to 0.
+!
+ifgt0				-	IF_GT	0	flag
+systemNumber			065	I2	-	-
+methodNumber			067	I2	-	-
+endifgt0			-	ENDIF	ifgt0
+!
+if1				-	IF_EQ	1	flag
+spareSetToZero1			069	PAD	n/a	32
+endif1				-	ENDIF	if1
+!
+if2				-	IF_EQ	2	flag
+referenceDate			069	I4	-	-
+climateDateFrom			073	I4	-	-
+climateDateTo			077	I4	-	-
+spareSetToZero2			081	PAD	n/a	20
+endif2				-	ENDIF	if2
+!
+scaledDirections		101	LP_I4	50	numberOfDirections
+scaledFrequencies		-	LP_I4	-	numberOfFrequencies
diff --git a/gribtemplates/localDefinitionTemplate_098_000_014 b/gribtemplates/localDefinitionTemplate_098_000_014
new file mode 100755
index 0000000..dbb0896
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_014
@@ -0,0 +1,20 @@
+!
+!	localDefinitionTemplate_014
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+channelNumber			52	I1	44	-
+scalingFactorForFrequencies	53	I4	45	-
+numberOfFrequencies		57	I1	46	-
+spareSetToZero			58	PAD	n/a	3
+listOfScaledFrequencies		61	LP_I4	47	numberOfFrequencies
+moreSpareSetToZero		-	PADTO	-	1080
diff --git a/gribtemplates/localDefinitionTemplate_098_000_015 b/gribtemplates/localDefinitionTemplate_098_000_015
new file mode 100755
index 0000000..ec115c5
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_015
@@ -0,0 +1,17 @@
+!
+!	localDefinitionTemplate_015
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I2	42	-
+total				56	I2	43	-
+systemNumber			52	I2	44	-
+methodNumber			54	I2	45	-
+spareSetToZero			58	PAD	n/a	3
diff --git a/gribtemplates/localDefinitionTemplate_098_000_016 b/gribtemplates/localDefinitionTemplate_098_000_016
new file mode 100755
index 0000000..77fc863
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_016
@@ -0,0 +1,20 @@
+!
+!	localDefinitionTemplate_016
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I2	42	-
+zero				n/a	PAD	43	1
+systemNumber			52	I2	44	-
+methodNumber			54	I2	45	-
+verifyingMonth			56	I4	46	-
+averagingPeriod			60	I1	47	-
+forecastMonth			61	I2	48	-
+spareSetToZero			63	PAD	n/a	18
diff --git a/gribtemplates/localDefinitionTemplate_098_000_017 b/gribtemplates/localDefinitionTemplate_098_000_017
new file mode 100755
index 0000000..73604fa
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_017
@@ -0,0 +1,22 @@
+!
+!	localDefinitionTemplate_017
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+dateOfSSTFieldUsed		52	D3	44	-
+typeOfSSTFieldUsed		55	I1	45	-
+countOfICEFieldsUsed		56	I1	46	-
+iceFieldDate+Satellite		57	LIST	47	countOfICEFieldsUsed
+dateOfIceFieldUsed		-	D3	-	-
+satelliteNumber			-	I1	-	-
+ENDLIST				-	ENDLIST	-	iceFieldDate+Satellite
+paddingToMultipleOf40Bytes	57	PADMULT	-	40
diff --git a/gribtemplates/localDefinitionTemplate_098_000_018 b/gribtemplates/localDefinitionTemplate_098_000_018
new file mode 100755
index 0000000..633be67
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_018
@@ -0,0 +1,22 @@
+!
+!	localDefinitionTemplate_018
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+dataOrigin			52	I1	44	-
+modelIdentifier			53	A4	45	-
+consensusCount			57	I1	46	-
+spareSetToZero			58	PAD	n/a	3
+wmoCentreIdentifiers		61	LIST	47	consensusCount
+ccccIdentifiers			-	A4	-	-
+ENDLIST				-	ENDLIST	-	wmoCentreIdentifiers
+unusedEntriesSetToBlanks	-	SP_TO	-	120
diff --git a/gribtemplates/localDefinitionTemplate_098_000_019 b/gribtemplates/localDefinitionTemplate_098_000_019
new file mode 100755
index 0000000..81f9fed
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_019
@@ -0,0 +1,23 @@
+!
+!	localDefinitionTemplate_019
+!	---------------------------
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+localDefinitionNumber			41	I1	37	-
+class					42	I1	38	-
+type					43	I1	39	-
+stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+number                  50	I1	42	-
+ensembleSize				51	I1	43	-
+versionNumberOfESuite 	52	I1	44	-
+implementationDate		53	I4	45	-
+numberOfReforecastYears	57	I3	46	-
+lengthOfClimate	60	I3	47	-
+reforecastSize	63	I3	48	-
+versionOfModelClimate	66	I3	49	-
+efiOrder				69	I1	50	-
+efiVersion				70	I1	51	-
+spareSetToZero				71	PAD	n/a	10
diff --git a/gribtemplates/localDefinitionTemplate_098_000_020 b/gribtemplates/localDefinitionTemplate_098_000_020
new file mode 100755
index 0000000..0e55b9a
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_020
@@ -0,0 +1,15 @@
+!
+!	localDefinitionTemplate_020
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+iteration			50	I1	42	-
+totalNumberOfIterations		51	I1	43	-
+spareSetToZero			52	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_021 b/gribtemplates/localDefinitionTemplate_098_000_021
new file mode 100755
index 0000000..134d7ae
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_021
@@ -0,0 +1,34 @@
+!
+!	localDefinitionTemplate_021
+!	---------------------------
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+localDefinitionNumber			41	I1	37	-
+class					42	I1	38	-
+type					43	I1	39	-
+stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+forecastOrSingularVectorNumber		50	I2	42	-
+numberOfIterations			52	I2	43	-
+numberOfSingularVectorsComputed		54	I2	44	-
+normAtInitialTime			56	I1	45	-
+normAtFinalTime				57	I1	46	-
+multiplicationFactorForLatLong		58	I4	47	-
+northWestLatitudeOfVerficationArea	62	S4	48	-
+northWestLongitudeOfVerficationArea	66	S4	49	-
+southEastLatitudeOfVerficationArea	70	S4	50	-
+southEastLongitudeOfVerficationArea	74	S4	51	-
+accuracyMultipliedByFactor		78	I4	52	-
+numberOfSingularVectorsEvolved		82	I2	53	-
+!Ritz numbers:
+NINT(LOG10(RITZ)-5)			84	S4	54	-
+NINT(RITZ/(EXP(LOG(10.0*KSEC1(54))	88	S4	55	-
+optimisationTime			92	I1	56	-
+forecastLeadTime			93	I1	57	-
+domain					94	A1	58	-
+methodNumber				95	I2	59	-
+totalNumberOfForecastsInEnsemble	97	I2	60	-
+shapeOfVerificationArea			99	I1	61	-
+spareSetToZero				100	PAD	n/a	1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_023 b/gribtemplates/localDefinitionTemplate_098_000_023
new file mode 100755
index 0000000..1ec5dd1
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_023
@@ -0,0 +1,27 @@
+!
+!	localDefinitionTemplate_023
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+ensembleNumber			50	I2	42	-
+totalNumber             81  I2  43  -
+systemNumber			52	I2	44	-
+methodNumber			54	I2	45	-
+verifyingMonth			56	I4	46	-
+averagingPeriod			60	I1	47	-
+forecastMonth			61	I2	48	-
+referenceDate			63	I4	49	-
+climateDateFrom			67	I4	50	-
+climateDateTo			71	I4	51	-
+unitsDecimalScaleFactor		75	S1	52	-
+thresholdIndicator		76	I1	53	-
+lowerThresholdValue		77	I2	54	-
+upperThresholdValue		79	I2	55	-
+spareSetToZero			83	PAD	56	2
diff --git a/gribtemplates/localDefinitionTemplate_098_000_023.old b/gribtemplates/localDefinitionTemplate_098_000_023.old
new file mode 100755
index 0000000..c68b337
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_023.old
@@ -0,0 +1,27 @@
+!
+!	localDefinitionTemplate_023
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+ensembleNumber			50	I2	42	-
+zero				n/a	PAD	43	1
+systemNumber			52	I2	44	-
+methodNumber			54	I2	45	-
+verifyingMonth			56	I4	46	-
+averagingPeriod			60	I1	47	-
+forecastMonth			61	I2	48	-
+referenceDate			63	I4	49	-
+climateDateFrom			67	I4	50	-
+climateDateTo			71	I4	51	-
+unitsDecimalScaleFactor		75	S1	52	-
+thresholdIndicator		76	I1	53	-
+lowerThresholdValue		77	I2	54	-
+upperThresholdValue		79	I2	55	-
+spareSetToZero			81	PAD	56	4
diff --git a/gribtemplates/localDefinitionTemplate_098_000_024 b/gribtemplates/localDefinitionTemplate_098_000_024
new file mode 100755
index 0000000..bc83b60
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_024
@@ -0,0 +1,16 @@
+!
+!	localDefinitionTemplate_024
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+satelliteIdentifier		50	I2	42	-
+instrumentIdentifier		52	I2	43	-
+channelNumber			54	I2	44	-
+functionCode			56	I1	45	-
diff --git a/gribtemplates/localDefinitionTemplate_098_000_025 b/gribtemplates/localDefinitionTemplate_098_000_025
new file mode 100755
index 0000000..14f4326
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_025
@@ -0,0 +1,15 @@
+!
+!	localDefinitionTemplate_025
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+componentIndex			50	I1	42	-
+numberOfComponents		51	I1	43	-
+modelErrorType			52	I1	44	-
diff --git a/gribtemplates/localDefinitionTemplate_098_000_026 b/gribtemplates/localDefinitionTemplate_098_000_026
new file mode 100755
index 0000000..3dd3f7d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_026
@@ -0,0 +1,17 @@
+!       localDefinitionTemplate_026
+!       ---------------------------
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+referenceDate                   52      I4      44      -
+climateDateFrom                 56      I4      45      -
+climateDateTo                   60      I4      46      -
+spareSetToZero                  64      PAD     n/a     6
diff --git a/gribtemplates/localDefinitionTemplate_098_000_026.old b/gribtemplates/localDefinitionTemplate_098_000_026.old
new file mode 100755
index 0000000..546ada2
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_026.old
@@ -0,0 +1,15 @@
+!       localDefinitionTemplate_026
+!       ---------------------------
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+referenceDate                   52      I4      44      -
+spareSetToZero                  56      PAD     n/a     1
diff --git a/gribtemplates/localDefinitionTemplate_098_000_027 b/gribtemplates/localDefinitionTemplate_098_000_027
new file mode 100755
index 0000000..328ca47
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_027
@@ -0,0 +1,27 @@
+!       localDefinitionTemplate_027
+!       ---------------------------
+!
+! # Forecasting Systems with Variable Resolution (replaced by definition 30)
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+oceanAtmosphereCoupling         52      I1      44      -
+spare                           53      I1      45      -
+padding                         54      PAD     n/a     2
+! VAriable Resolution (VAREPS)
+legBaseDate                     56      I4      46      -     ! yyyymmdd
+legBaseTime                     60      I2      47      -     ! hhmm
+legNumber                       62      I1      48      - 
+! For hindcasts
+referenceDate                   63      I4      49      -     ! 
+climateDateFrom                 67      I4      50      -     ! yyyymmdd (ensemble means of hindcasts)
+climateDateTo                   71      I4      51      -     ! yyyymmdd (ensemble means of hindcasts)
+spareSetToZero                  75      PAD     n/a    33
diff --git a/gribtemplates/localDefinitionTemplate_098_000_027.old b/gribtemplates/localDefinitionTemplate_098_000_027.old
new file mode 100755
index 0000000..630d92b
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_027.old
@@ -0,0 +1,26 @@
+!       localDefinitionTemplate_027
+!       ---------------------------
+!
+! # Forecasting Systems with Variable Resolution
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+systemNumber                    52      I2      44      -
+methodNumber                    54      I2      45      -     
+! VAriable Resolution (VAREPS)
+legBaseDate                     56      I4      46      -     ! yyyymmdd
+legBaseTime                     60      I2      47      -     ! hhmm
+legNumber                       62      I1      48      - 
+! For hindcasts
+referenceDate                   63      I4      46      -     ! 
+climateDateFrom                 67      I4      47      -     ! yyyymmdd (ensemble means of hindcasts)
+climateDateTo                   71      I4      48      -     ! yyyymmdd (ensemble means of hindcasts)
+spareSetToZero                  75      PAD     n/a    33
diff --git a/gribtemplates/localDefinitionTemplate_098_000_028 b/gribtemplates/localDefinitionTemplate_098_000_028
new file mode 100755
index 0000000..5a30d7d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_028
@@ -0,0 +1,24 @@
+!       localDefinitionTemplate_028
+!       ---------------------------
+!
+!
+! # COSMO group, Local area EPS
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+baseDateEPS                     52      I4      44      -
+baseTimeEPS                     56      I2      45      -
+numberOfRepresentativeMember    58      I1      46      -
+numberOfMembersInCluster        59      I1      47      -
+totalInitialConditions          60      I1      48      -
+spareSetToZero                  61      PAD     n/a     19
+!    + information about probabilities (they have already probabilities)
+!	+ information about clustering    (they save it as ASCII, at the moment...)
diff --git a/gribtemplates/localDefinitionTemplate_098_000_029 b/gribtemplates/localDefinitionTemplate_098_000_029
new file mode 100755
index 0000000..b767dac
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_029
@@ -0,0 +1,52 @@
+!
+!	localDefinitionTemplate_029
+!	---------------------------
+!
+! # COSMO Clustering Information
+!
+!Description			     Octet  Code   Ksec1	Count
+!-----------			     -----  ----   -----	-----
+!
+localDefinitionNumber          41     I1	37	-
+class                          42     I1	38	-
+type                           43     I1	39	-
+stream                         44     I2	40	-
+experimentVersionNumber	       46     A4	41	-
+number	                       50     I1	42	-
+totalNumberOfClusters          51     I1	43	-
+spareSetToZero	               52     PAD	n/a	1
+clusteringMethod               53     I1	44	-
+northernLatitudeOfDomain       54     S3    45  -
+westernLongitudeOfDomain       57     S3    46  -
+southernLatitudeOfDomain       60     S3    47  -
+easternLongitudeOfDomain       63     S3    48  -
+numberOfForecastsInCluster     66     I1    49  -
+numberOfParametersUsedForClustering			67     I1    50  -
+numberOfPressureLevelsUsedForClustering		68     I1    51  -
+numberOfStepsUsedForClustering			69     I1    52  -
+spareSetToZero                 70     PAD   n/a 10 
+!
+! EPS members
+listOfEnsembleForecastNumbers   -     LIST   - numberOfForecastsInCluster
+baseDateEPS                     -     I4     -  -
+baseTimeEPS                     -     I2     -  -
+number                          -     I1     -  -
+endListOfEnsembleForecastNumbers - ENDLIST   -  listOfEnsembleForecastNumbers
+!
+! Variables 
+listOfParametersUsedForClustering   -     LIST   - numberOfParametersUsedForClustering
+parameterCode                       -     I1     -  -
+tableCode                           -     I1     -  -
+endListOfParametersUsedForClustering - ENDLIST   -  listOfParametersUsedForClustering
+!
+! Pressure levels
+listOfPressureLevelsUsedForClustering   -     LIST   - numberOfPressureLevelsUsedForClustering
+pressureLevel                       -     I2     -  -
+endListOfPressureLevelsUsedForClustering - ENDLIST   -  listOfPressureLevelsUsedForClustering
+!
+! Steps
+listOfStepsUsedForClustering   -     LIST   - numberOfStepsUsedForClustering
+step                           -     I2     -  -
+endListOfStepsUsedForClustering - ENDLIST   -  listOfStepsUsedForClustering
+!
+spareToEnsureFixedLength	    -	PADTO	n/a	960
diff --git a/gribtemplates/localDefinitionTemplate_098_000_029.old b/gribtemplates/localDefinitionTemplate_098_000_029.old
new file mode 100755
index 0000000..140e63c
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_029.old
@@ -0,0 +1,27 @@
+!
+!	localDefinitionTemplate_029
+!	---------------------------
+!
+!Description			     Octet  Code   Ksec1	Count
+!-----------			     -----  ----   -----	-----
+!
+localDefinitionNumber          41     I1	37	-
+class                          42     I1	38	-
+type                           43     I1	39	-
+stream                         44     I2	40	-
+experimentVersionNumber	       46     A4	41	-
+number	                       50     I1	42	-
+totalNumberOfClusters          51     I1	43	-
+spareSetToZero	               52     PAD	n/a	1
+clusteringMethod               53     I1	44	-
+northernLatitudeOfDomain       54     S3    45  -
+westernLongitudeOfDomain       57     S3    46  -
+southernLatitudeOfDomain       60     S3    47  -
+easternLongitudeOfDomain       63     S3    48  -
+numberOfForecastsInCluster     66     I1    49 
+listOfEnsembleForecastNumbers   -     LIST   - numberOfForecastsInCluster
+baseDateEPS                     -     I4     -  -
+baseTimeEPS                     -     I2     -  -
+number                          -     I1     -  -
+endListOfEnsembleForecastNumbers - ENDLIST   -  listOfEnsembleForecastNumbers
+spareToEnsureFixedLength	    -	PADTO	n/a	960
diff --git a/gribtemplates/localDefinitionTemplate_098_000_030 b/gribtemplates/localDefinitionTemplate_098_000_030
new file mode 100755
index 0000000..978c602
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_030
@@ -0,0 +1,27 @@
+!       localDefinitionTemplate_030
+!       ---------------------------
+!
+! # Forecasting Systems with Variable Resolution
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+oceanAtmosphereCoupling         52      I1      44      -
+spare                           53      I1      45      -
+padding                         54      PAD     n/a     2
+! VAriable Resolution (VAREPS)
+legBaseDate                     56      I4      46      -     ! yyyymmdd
+legBaseTime                     60      I2      47      -     ! hhmm
+legNumber                       62      I1      48      - 
+! For hindcasts
+dateOfForecastRun               63      I4      49      -     ! 
+climateDateFrom                 67      I4      50      -     ! yyyymmdd (ensemble means of hindcasts)
+climateDateTo                   71      I4      51      -     ! yyyymmdd (ensemble means of hindcasts)
+spareSetToZero                  75      PAD     n/a    32
diff --git a/gribtemplates/localDefinitionTemplate_098_000_031 b/gribtemplates/localDefinitionTemplate_098_000_031
new file mode 100755
index 0000000..70541a5
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_031
@@ -0,0 +1,23 @@
+!       localDefinitionTemplate_031
+!       ---------------------------
+!
+! # EUROSIP Products 
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber           41      I1      37      -
+class                           42      I1      38      -
+type                            43      I1      39      -
+stream                          44      I2      40      -
+experimentVersionNumber         46      A4      41      -
+number                          50      I1      42      -
+total                           51      I1      43      -
+forecastMonth					52		I2		44		-
+dateOfForecastRun               54      I4      45      -     ! yyyymmdd 
+numberOfModels                  58      I1      46      -
+spareSetToZero                  59      PAD     n/a     42
+listOfModelIdentifiers          101     LIST    47      numberOfModels
+modelIdentifier                 -       I2      -       -
+ENDLIST                         -       ENDLIST -       listOfModelIdentifiers
+unusedEntriesSetToBlanks        -       SP_TO   -       240
diff --git a/gribtemplates/localDefinitionTemplate_098_000_032 b/gribtemplates/localDefinitionTemplate_098_000_032
new file mode 100755
index 0000000..b72fb03
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_032
@@ -0,0 +1,30 @@
+!
+!	localDefinitionTemplate_032
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+totalNumberOfClusters		51	I1	43	-
+spareSetToZero			52	PAD	n/a	1
+clusteringMethod		53	I1	44	-
+startTimeStep			54	I2	45	-
+endTimeStep			56	I2	46	-
+northernLatititudeOfDomain	58	S3	47	-
+westernLongititudeOfDomain	61	S3	48	-
+southernLatititudeOfDomain	64	S3	49	-
+easternLongititudeOfDomain	67	S3	50	-
+domain					70	A1	51	-
+operationalForecastCluster	71	I1	52	-
+controlForecastCluster		72	I1	53	-
+representativeMember        73  I1  54  -
+climatologicalRegime        74  I1  55  -
+numberOfForecastsInCluster	75	I1	56	-
+ensembleForecastNumbers		76	LP_I1	57	numberOfForecastsInCluster
+spareToEnsureFixedLength	-	PADTO	n/a	328
diff --git a/gribtemplates/localDefinitionTemplate_098_000_035 b/gribtemplates/localDefinitionTemplate_098_000_035
new file mode 100755
index 0000000..c5f944a
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_035
@@ -0,0 +1,31 @@
+!
+!	localDefinitionTemplate_035
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class						42	I1	38	-
+type						43	I1	39	-
+stream						44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+yearOfReference				50	I1	42	-
+monthOfReference			51	I1	43	-
+dayOfReference				52	I1	44	-
+hourOfReference				53	I1	45	-
+minuteOfReference			54	I1	46	-
+centuryOfReference			55	I1	47	-
+!
+numberOfForecasts			56	I1	48	-
+numberOfAnalysis			57	I1	49	-
+!
+listOfForecastSteps    	    -   LIST    -   numberOfForecasts
+forecastSteps		       	-   I3  -   -
+endListOfForecastSteps   	-   ENDLIST -   listOfForecastSteps
+!
+listOfAnalysis	    	    -   LIST    -   numberOfAnalysis
+analysisOffset		       	-   I3  -   -
+endListOfAnalysisteps   	-   ENDLIST -   listOfAnalysis
+spareToEnsureFixedLength    -       PADTO   n/a     120
+!
diff --git a/gribtemplates/localDefinitionTemplate_098_000_050 b/gribtemplates/localDefinitionTemplate_098_000_050
new file mode 100755
index 0000000..c43fb4d
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_050
@@ -0,0 +1,25 @@
+!
+!	localDefinitionTemplate_050
+!	---------------------------
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+localDefinitionNumber			41	I1	37	-
+class					42	I1	38	-
+type					43	I1	39	-
+stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+number					50	I1	42	-
+total					51	I1	43	-
+modelIdentifier				52	I1	44	-
+latitudeOfNorthWestCornerOfArea		53	S4	45	-
+longitudeOfNorthWestCornerOfArea	57	S4	46	-
+latitudeOfSouthEastCornerOfArea		61	S4	47	-
+longitudeOfSouthEastCornerOfArea	65	S4	48	-
+!reservedForECMWFAdditions
+originalParameterNumber			69	I1	49	-
+originalParameterNumber			70	I1	50	-
+spareSetToZeroOctets			71	PAD	n/a	46
+spareSetToZeroKsec1			n/a	PAD	51	10
+optionalData				117	BYTES	61	184
diff --git a/gribtemplates/localDefinitionTemplate_098_000_190 b/gribtemplates/localDefinitionTemplate_098_000_190
new file mode 100755
index 0000000..723679b
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_190
@@ -0,0 +1,19 @@
+!
+!	localDefinitionTemplate_190
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+zeroesForCompatibilityWithMars	50	PAD	42	2
+numberOfLocalDefinitions	52	I1	44	-
+localDefinitions		53	LIST	45	numberOfLocalDefinitions
+localDefinitionNumber		-	I1	-	-
+numberOfBytesInLocalDefinition	-	I2	-	-
+ENDLIST				-	ENDLIST	-	localDefinitions
+streamOfLocalDefinitionBytes	-	BYTES	-	numberOfBytesInLocalDefinition
diff --git a/gribtemplates/localDefinitionTemplate_098_000_191 b/gribtemplates/localDefinitionTemplate_098_000_191
new file mode 100755
index 0000000..3b1a4d7
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_191
@@ -0,0 +1,20 @@
+!
+!	localDefinitionTemplate_191
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+zeroForCompatibilityWithMars	50	PAD	42	2
+formatVersionMajorNumber	52	I1	44	-
+formatVersionMinorNumber	53	I1	45	-
+originalSubCentreIdentifier	54	I1	46	-
+setToZero			55	PAD	47	4
+numberOfBytesOfFreeFormatData   59	I2	51	-
+dataDescriptorBytes		61	BYTES	52	numberOfBytesOfFreeFormatData
+padToAMultipleOf80Bytes		60	PADFROM n/a	80
diff --git a/gribtemplates/localDefinitionTemplate_098_000_192 b/gribtemplates/localDefinitionTemplate_098_000_192
new file mode 100755
index 0000000..2d7a515
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_000_192
@@ -0,0 +1,18 @@
+!
+!	localDefinitionTemplate_192
+!	---------------------------
+!
+!Description			Octet	Code	Ksec1	Count
+!-----------			-----	----	-----	-----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+zeroForCompatibilityWithMars	50	PAD	42	2
+numberOfLocalDefinitions	52	I1	44	-
+listOfLocalDefinitions		-	LIST	-	numberOfLocalDefinitions
+localDefinitionLength		-	I2	-	-
+localDefinition			-	LOCAL	-	-
+endListOfLocalDefinitions	-	ENDLIST	-	listOfLocalDefinitions
diff --git a/gribtemplates/localDefinitionTemplate_098_231_001 b/gribtemplates/localDefinitionTemplate_098_231_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_231_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_231_004 b/gribtemplates/localDefinitionTemplate_098_231_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_231_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_231_015 b/gribtemplates/localDefinitionTemplate_098_231_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_231_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_231_016 b/gribtemplates/localDefinitionTemplate_098_231_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_231_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_232_001 b/gribtemplates/localDefinitionTemplate_098_232_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_232_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_232_004 b/gribtemplates/localDefinitionTemplate_098_232_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_232_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_232_015 b/gribtemplates/localDefinitionTemplate_098_232_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_232_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_232_016 b/gribtemplates/localDefinitionTemplate_098_232_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_232_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_233_001 b/gribtemplates/localDefinitionTemplate_098_233_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_233_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_233_004 b/gribtemplates/localDefinitionTemplate_098_233_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_233_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_233_015 b/gribtemplates/localDefinitionTemplate_098_233_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_233_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_233_016 b/gribtemplates/localDefinitionTemplate_098_233_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_233_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_234_004 b/gribtemplates/localDefinitionTemplate_098_234_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_234_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_234_015 b/gribtemplates/localDefinitionTemplate_098_234_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_234_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_234_016 b/gribtemplates/localDefinitionTemplate_098_234_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_234_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_235_004 b/gribtemplates/localDefinitionTemplate_098_235_004
new file mode 120000
index 0000000..21dd406
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_235_004
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_004
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_235_015 b/gribtemplates/localDefinitionTemplate_098_235_015
new file mode 120000
index 0000000..d4b5e2f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_235_015
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_015
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_235_016 b/gribtemplates/localDefinitionTemplate_098_235_016
new file mode 120000
index 0000000..6080b8e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_235_016
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_016
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_240_001 b/gribtemplates/localDefinitionTemplate_098_240_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_240_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_241_001 b/gribtemplates/localDefinitionTemplate_098_241_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_241_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_242_001 b/gribtemplates/localDefinitionTemplate_098_242_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_242_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_098_243_001 b/gribtemplates/localDefinitionTemplate_098_243_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_098_243_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_200_098_191 b/gribtemplates/localDefinitionTemplate_200_098_191
new file mode 120000
index 0000000..f10204e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_200_098_191
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_191
\ No newline at end of file
diff --git a/gribtemplates/localDefinitionTemplate_214_098_244 b/gribtemplates/localDefinitionTemplate_214_098_244
new file mode 100755
index 0000000..90cee6e
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_214_098_244
@@ -0,0 +1,142 @@
+!
+!	localDefinitionTemplate_244
+!	---------------------------
+!
+! # SREPS Short-Range EPS information
+! 
+! Last update: 20070223
+!
+!Description				Octet	Code	Ksec1	Count
+!-----------				-----	----	-----	-----
+!
+!
+! Compatibility with MARS
+!
+localDefinitionNumber			41	I1	37	-
+Class					42	I1	38	-
+Type					43	I1	39	-
+Stream					44	I2	40	-
+experimentVersionNumber			46	A4	41	-
+Number.					50	I1	42	-
+Total.					51	I1	43	-
+!
+! **_EXPERIMENT_**
+!
+************_EXPERIMENT_************	52	A4	44	-
+Experiment_Identifier			56	A8	45	-
+Sub-Experiment_Identifier		64	A8	47	-
+!
+! **_PRODUCT_**
+!
+************_PRODUCT_***************	72	A4	49	-
+Original_CodeTable_2_Version_Number	76	I1	50	-
+Original_Parameter_Iden_(CodeTable2)	77	I1	51	-
+Original_Parameter_Identifier		78	A8	52	-
+Product_Identifier			86	A8	54	-
+!
+! Thresholds and Distributions
+!
+Threshold_[Distribution]_(0=n,1=yes)	94	I2	56	-
+Threshold_[Distribution]_Units		96	A4	57	-
+At_least__[Distribut._Proportion_Of]	100	I4	58	-
+Less_Than_[To_Overall_Distribution]	104	I4	59	-
+!
+zeroForFutureProducts			108	PAD	60	40
+!
+! **_ENSEMBLE_**
+!
+************_ENSEMBLE_**************	148	A4	100	-
+Number_Combination_Ensembles_(1=no) 	152	I2	101	-
+Show_Combination_E._[2]_(0=no,1=yes)	154	I1	102	-
+Show_Combination_E._[3]_(0=no,1=yes)	155	I1	103	-
+Show_Combination_E._[4]_(0=no,1=yes)	156	I1	104	-
+zeroForFutureCombinations		157	PAD	105	7
+Total_Number_Members_Used		164	I2	112	-
+Total_Number_Members_Possible		166	I2	113	-
+Total_Number_Members_Missing		168	I2	114	-
+Ensemble_Combination_Number		170	I2	115	-
+Ensemble_Identifier			172	A8	116	-
+Local_Number_Members_Used		180	I2	118	-
+Local_Number_Members_Possible		182	I2	119	-
+Local_Number_Members_Missing		184	I2	120	-
+!
+listMembersUsed				-	LIST	-	Local_Number_Members_Used
+Used_Model_LBC				-	A4	-	-
+endlistMembersUsed			-	ENDLIST	-	listMembersUsed
+!
+listMembersMissing			-	LIST	-	Local_Number_Members_Missing
+Missing_Model_LBC			-	A4	-	-
+endlistMembersMissing			-	ENDLIST	-	listMembersMissing
+!
+! More than one Combination
+!
+listEnsembleCombination2		-	LIST	-	Show_Combination_E._[2]_(0=no,1=yes)
+Ensemble_Combinat._Number_(0=no)_[2]	-	I2	-	-
+Ensemble_Identifier_[2]			-	A8	-	-
+Local_Number_Members_Used_[2]		-	I2	-	-
+Local_Number_Members_Possible_[2]	-	I2	-	-
+Local_Number_Members_Missing_[2]	-	I2	-	-
+Date_[2]				-	D3	-	-
+Hour_[2]				-	I1	-	-
+Minute_[2]				-	I1	-	-
+Time_Range_One_[2]			-	I2	-	-
+Time_Range_Two_[2]			-	I2	-	-
+endlistEnsembleCombination2		-	ENDLIST	-	listEnsembleCombination2
+!
+listMembersUsed_[2]			-	LIST	-	Local_Number_Members_Used_[2]
+Used_Model_LBC_[2]			-	A4	-	-
+endlistMembersUsed_[2]			-	ENDLIST	-	listMembersUsed_[2]
+!
+listMembersMissing_[2]			-	LIST	-	Local_Number_Members_Missing_[2]
+Missing_Model_LBC_[2]			-	A4	-	-
+endlistMembersMissing_[2]		-	ENDLIST	-	listMembersMissing_[2]
+!
+listEnsembleCombination3		-	LIST	-	Show_Combination_E._[3]_(0=no,1=yes)
+Ensemble_Combinat._Number_(0=no)_[3]	-	I2	-	-
+Ensemble_Identifier_[3]			-	A8	-	-
+Local_Number_Members_Used_[3]		-	I2	-	-
+Local_Number_Members_Possible_[3]	-	I2	-	-
+Local_Number_Members_Missing_[3]	-	I2	-	-
+Date_[3]				-	D3	-	-
+Hour_[3]				-	I1	-	-
+Minute_[3]				-	I1	-	-
+Time_Range_One_[3]			-	I2	-	-
+Time_Range_Two_[3]			-	I2	-	-
+endlistEnsembleCombination3		-	ENDLIST	-	listEnsembleCombination3
+!
+listMembersUsed_[3]			-	LIST	-	Local_Number_Members_Used_[3]
+Used_Model_LBC_[3]			-	A4	-	-
+endlistMembersUsed_[3]			-	ENDLIST	-	listMembersUsed_[3]
+!
+listMembersMissing_[3]			-	LIST	-	Local_Number_Members_Missing_[3]
+Missing_Model_LBC_[3]			-	A4	-	-
+endlistMembersMissing_[3]		-	ENDLIST	-	listMembersMissing_[3]
+!
+listEnsembleCombination4		-	LIST	-	Show_Combination_E._[4]_(0=no,1=yes)
+Ensemble_Combinat._Number_(0=no)_[4]	-	I2	-	-
+Ensemble_Identifier_[4]			-	A8	-	-
+Local_Number_Members_Used_[4]		-	I2	-	-
+Local_Number_Members_Possible_[4]	-	I2	-	-
+Local_Number_Members_Missing_[4]	-	I2	-	-
+Date_[4]				-	D3	-	-
+Hour_[4]				-	I1	-	-
+Minute_[4]				-	I1	-	-
+Time_Range_One_[4]			-	I2	-	-
+Time_Range_Two_[4]			-	I2	-	-
+endlistEnsembleCombination4		-	ENDLIST	-	listEnsembleCombination4
+!
+listMembersUsed_[4]			-	LIST	-	Local_Number_Members_Used_[4]
+Used_Model_LBC_[4]			-	A4	-	-
+endlistMembersUsed_[4]			-	ENDLIST	-	listMembersUsed_[4]
+!
+listMembersMissing_[4]			-	LIST	-	Local_Number_Members_Missing_[4]
+Missing_Model_LBC_[4]			-	A4	-	-
+endlistMembersMissing_[4]		-	ENDLIST	-	listMembersMissing_[4]
+!
+! EXTRA INFORMATION like 191
+!
+*********_EXTRA_DATA_***************	-	A4	-	-
+Extra_Data_FreeFormat_(0=none)		-	I2	-	-
+Data_Descriptor_Bytes			-	BYTES	-	Extra_Data_FreeFormat_(0=none)
+padToAMultipleOf80Bytes			0	PADFROM	n/a	80
+!
diff --git a/gribtemplates/localDefinitionTemplate_214_098_245 b/gribtemplates/localDefinitionTemplate_214_098_245
new file mode 100755
index 0000000..3dcf801
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_214_098_245
@@ -0,0 +1,28 @@
+!
+!       localDefinitionTemplate_245
+!       ---------------------------
+!
+! # Members information of
+! # SREPS Short-Range EPS
+!
+! Last update: 20070323
+!
+!Description                    Octet   Code    Ksec1   Count
+!-----------                    -----   ----    -----   -----
+!
+localDefinitionNumber		41	I1	37	-
+class				42	I1	38	-
+type				43	I1	39	-
+stream				44	I2	40	-
+experimentVersionNumber		46	A4	41	-
+number				50	I1	42	-
+total				51	I1	43	-
+Model_Identifier		52	A8	44	-
+LBC_Initial_Conditions		60	A8	46	-
+Model_LBC_Member_Identifier	68	A4	48	-
+Model_Additional_Information    72      A8      49	-
+zeroForFutureDevelopments	80	PAD	51	20
+Extra_Data_FreeFormat_(0=none)	100	I2	71	-
+Data_Descriptor_Bytes		102	BYTES	72	Extra_Data_FreeFormat_(0=none)
+padToAMultipleOf80Bytes		0	PADFROM	n/a	80
+!
diff --git a/gribtemplates/localDefinitionTemplate_244_098_001 b/gribtemplates/localDefinitionTemplate_244_098_001
new file mode 120000
index 0000000..6bf031f
--- /dev/null
+++ b/gribtemplates/localDefinitionTemplate_244_098_001
@@ -0,0 +1 @@
+localDefinitionTemplate_098_000_001
\ No newline at end of file
diff --git a/install b/install
new file mode 100755
index 0000000..f08bbc9
--- /dev/null
+++ b/install
@@ -0,0 +1,61 @@
+#! /bin/sh
+
+umask 0
+
+PATH=/usr/bin:/bin:$PATH
+
+quit() {
+    echo "Exiting..."
+    exit 1
+}
+
+R64=`cat -s .r64`
+
+INSTALL_DIR=`cat -s .emos`
+
+echo
+echo "*******************************************************************"
+echo  "If you choose default directories for Tables or libemos$R64.a "
+echo  "you must have root permission to do that."
+echo "*******************************************************************"
+echo
+
+echo "Installing Tables, land-sea mask and EMOS library into $INSTALL_DIR ... "
+
+trap "" 2 3
+
+for i in `cat .list/gribtables` ; do
+    tar cf - $i | (cd $INSTALL_DIR; tar xf - )
+done
+for i in `cat .list/bufrtables` ; do
+    tar cf - $i | (cd $INSTALL_DIR; tar xf - )
+done
+for i in `cat .list/crextables` ; do
+    tar cf - $i | (cd $INSTALL_DIR; tar xf - )
+done
+for i in `cat .list/land_sea_mask` ; do
+    tar cf - $i | (cd $INSTALL_DIR; tar xf - )
+done
+for i in `cat .list/gribtemplates` ; do
+    tar cf - $i | (cd $INSTALL_DIR; tar xf - )
+done
+
+cp libemos$R64.a $INSTALL_DIR/.
+echo
+
+echo "*******************************************************************"
+echo
+echo "Installation complete!"
+echo
+echo "*******************************************************************"
+echo
+echo "   You can see examples for: decoding GRIB, BUFR, CREX products and"
+echo "interpolation in example directory. There is appropriate Makefile for"
+echo "each of them. You should invoke 'make' and start executable version"
+echo "of programs e.g.  agrdemo.F :"
+echo
+echo "./agrdemo -i data/latlon.grib"
+echo
+echo "*******************************************************************"
+
+exit 0
diff --git a/interpolation/0-INDEX-0 b/interpolation/0-INDEX-0
new file mode 100755
index 0000000..a9bd285
--- /dev/null
+++ b/interpolation/0-INDEX-0
@@ -0,0 +1,275 @@
+0-INDEX-0	mac	This file!
+Imakefile	mac	To build libspecgp.a
+Makefile	mac	To build libspecgp.a
+areachk.F	mac	Fixup input/output field area definitions.
+auresol.F	mac	Returns the default truncation for given lat/long grid
+bitmap.h	mac	Header for bitmap routines.
+chequal.F	mac	Compare ASCII character strings without regard to case.
+chkprec.F	mac	Check if precipitation threshold has been redefined
+clear_c.F	mac     Clear interpolation common blocks
+createSharedMemoryCoefficients.c mac Creates spectral to grid interpolation coefficients in shared memory.
+csum.F		mac	Implements the BLAS routine of the same name
+current.h	mac	Info about gaussian definition currently in common.
+ddstyle.F	mac	Create regular lat/lon subgrid by selecting points.
+debug.h		mac	Debug header
+defaults_for_table_001	mac  Parameter processing defaults for WMO table 1.
+defaults_for_table_128	mac  Parameter processing defaults for ECMWF table 128.
+dssarea.F	mac	Fixup field area specification (dissemination style).
+dummy.F		mac	Dummy routine to satisfy make. (VECTOR.F)
+dummy2.F	mac	Dummy routine to satisfy make. (NO_OPT.F)
+emosPrecision.c mac	Returns 64 if double-precision (64-bit) REALs in use.
+eulavgg.F       mac     Reverse the effects of ggvalue.F
+fft99.f		mac	Multiple fast real periodic fourier transform.
+fftchk.c        mac     Check truncation and longitude grid interval OK for FFT.
+freecf.F	mac	Set trigger to allow mutual memory flushing of types 6/7
+fixarea.F	mac	Fixup area definition to correspond to grid definitions
+fortdefs.h	mac	Defines for Fortran/C interface data types
+funcs.F		mac	Fortran functions used by ocean interpolation (intocn)
+gb2gb.F		mac	Interpolate lat/lon GRIB to lat/lon: dissemination style
+getconf.F	mac	Decides how to handle legendre coefficients.
+ggintrp.F	mac	Finds value at a point by interpolation in a gaussian field.
+ggrotat.F	mac	Generates a rotated gaussian grid.
+ggvalue.F	mac	Rotates one line of latitude in a gaussian grid.
+gmapbit.c	mac	Get a bit from a given position in a bitmap.
+grdynam.h	mac	Dynamically allocated work space arrays(grid to grid).
+grfixed.h	mac	Fixed work space array definitions
+grspace.h	mac	Work space array definitions
+hgengg.F	mac	Lat/longs (before rot) for rotated gaussian grid.
+hgengrd.F	mac	Lat/longs (before rot) for rotated grid.
+hgengrw.F	mac	Lat/longs (before rot) for rotated grid for winds.
+hgenll.F	mac	Lat/longs (before rot) for rotated lat/long grid.
+hgenllw.F	mac	Calculates lat/longs (before rotation) for wind fields.
+hgetlsm.F	mac	Read old land-sea mask values from file.
+hirlam.F	mac	Rotated lat/lon from reduced gauss using 12-point interpolation.
+hirlamw.F	mac	Rotated lat/lon U/V from reduced gauss using 12-point interpolation.
+hirlsm.F	mac	As hirlam.F but using land-sea masks.
+hll2ll.F	mac	Creates rotated lat/lon from lat/lon using 12-pt interpn
+hll2llw.F	mac	Rotated U and V lat/lon from lat/lon using 12-pt interpn
+hll2xyz.F	mac	Converts array of lat/longs to (x,y,z) coordinates.
+hnei12.F	mac	Finds 12 neighbours for horizontal interpolation.
+hneill.F	mac	Finds 12 neighbours for lat/lon horizontal interpolation
+hntfap.F	mac	Prepare to interpolate packed input field.
+hntfaph.F	mac	Prepare to interpolate packed input field.
+hntfaps.F	mac	Prepare to interpolate packed input field.
+hntfau.F	mac	Prepare to interpolate unpacked input field.
+hntfauh.F	mac	Prepare to interpolate unpacked input field.
+hntfaus.F	mac	Prepare to interpolate unpacked input field.
+hntfbu.F	mac	Interpolate unpacked input field.
+hpshgpw.F	mac	Rotates grid about y-axis and calculates angle between local axes.
+hrg2gg.F	mac	Rotated gauss from reduced gauss using 12-point interpolation.
+hrg2ggw.F	mac	Rotated U and V gauss from reduced gauss using 12-point interpolation.
+hrg2ll.F	mac	Rotated lat/lon from reduced gauss using 12-point interpolation.
+hrg2llw.F	mac	Rotated lat/lon wind from a reduced gauss using 12-point interpolation.
+hsp2gg.F	mac	Finds a gaussian grid for a given spectral truncation.
+hwts12.F	mac	Interpolation weightings for horizontal interpolation.
+hwtsll.F	mac	Interpolation lat/lon weightings for horizontal interpolation.
+hwtslsm.F	mac	As hwts12.F but using land-sea masks.
+iafree.F	mac	Deallocate heap space used by grid-pt to grid-pt interpolation.
+iagcntl.F	mac	Control interpolation regular gaussian or lat/long fields.
+iaidef.F	mac	Generate input field definition from GRIB definition.
+iainit.F	mac	Initialise common decks for grid-pt to grid-pt interpolation.
+iaintgg.F	mac	Control interpolation GRIB -> gaussian
+iaintll.F	mac	Control interpolation GRIB -> regular lat/long
+iaogdef.F	mac	Set the output field definition variables.
+iaoldef.F	mac	Set the output field definition for a regular lat/long
+iarcntl.F	mac	Control interpolation of quasi regular gaussian -> gaussian or lat/long
+iareset.F	mac	Generate the output field definition.
+iarmem.F	mac	Acquires heap space for expanded REAL fields.
+ibasini.F	mac	Ensure basic interpolation setup is done.
+igalloc.F	mac	Allocates heap space.
+igbess.F	mac	Computes initial approximations to gaussian latitudes.
+igdins.F	mac	Calculate distance between points in output latitude array and its N/S neighbours in input latitude array
+igdiwe.F	mac	Calculate distance between points in output latitude array and its W/E neighbours in input latitude array
+igglat.F	mac	Compute gaussian latitudes for a given truncation.
+iggmem.F	mac	Acquires heap space.
+iggrid.F	mac	Generate lat/long points for a gaussian truncation and area.
+igint.F		mac	Calculate unnormalised interpolation wts between regular grids
+igintr.F	mac	Calculate interpolation wts for one line of lat for regular grids
+iglgrid.F	mac	Generate lat/long points for regular lat/long grid
+iglrev.F	mac	Reverses rows or columns of a rectangular matrix
+iglsize.F	mac	Evaluate array sizes for regular lat/long and area
+iglsm01.F	mac	Process one lat row from 10 minute land sea mask
+iglsmb.F	mac	Calculate effects of land-sea masks on unnormalised wts for a quasi regular input and a  regular output
+iglsmd.F	mac	Generate the land sea mask file info
+iglsmr.F	mac	Calculate effects of land-sea masks for one lat on the unnormalised interpolation weights.
+iglsmst.F	mac	Process one line of latitude from standard land sea mask file
+ignorm.F	mac	Normalise the array of interpolation weights.
+igplsm.F	mac	Force an interpolated land sea mask to a real 0-1 field
+igpoleg.F	mac	Calculate values at pole of regular lat/long field when input is gaussian
+igpolew.F	mac	Calculate values at pole of regular lat/long field when input is gaussian (for a wind field).
+igprec.F	mac	Additional interpolation for precipitation
+igscan.F	mac	Transform a regular field between scanning modes
+igsetup.F	mac	Setup GRIB sections 1, 2, 4 for the new interpolation product.
+igsize.F	mac	Evaluate array sizes for a gaussian truncation and area
+igtog.F		mac	Interpolation between regular input and output
+igtogr.F	mac	interpolation for one latitude using two neighbouring lines
+igtran.F	mac	Transposes a rectangular matrix.
+init_cm.F	mac	Initialize default values in interpolation common decks
+insane.F	mac	Check consistency of interpolation options.
+intf.F		mac	Make user interpolation request.
+intf.h		mac	Header for intf, intfa, intfb and intfc.
+intfa.F		mac	Prepare to interpolate input field.
+intfap.F	mac	Prepare to interpolate packed input field.
+intfau.F	mac	Prepare to interpolate unpacked input field.
+intfb.F		mac	Interpolate input field.
+intfbp.F	mac	Interpolate packed input field.
+intfbu.F	mac	Interpolate unpacked input field.
+intfc.F		mac	Move input field to output field.
+intin.F		mac	Handle user request parameters for input data
+intisl.F	mac	Perform ISLSCP processing
+intisl.h	mac	Defines for ISLSCP processing
+intlog.h        mac     Common block for interpolation diagnostics logging.
+intlog.F	mac	Logs error messages from interpolation routines.
+intlogd.F	mac	Toggle display flag for error messages from interpolation
+intlogr.F	mac	Logs error messages containing real number
+intlogs.c	mac	Save MARS server display function pointer.
+intocn.F	mac	Interpolates ocean field.
+intout.F	mac	Handle user request parameters for output data
+intpnum.F	mac	Returns INTP_CYCLE
+intuvdh.F 	mac	Encodes/decodes data into/from GRIB code.
+intuvf.F	mac	Make user interpolation request for U/V fields.
+intuvgh.F	mac	U & V reduced gaussian to rotated GRIB U & V.
+intuvp.F	mac	Interpolate packed U/V fields.
+intuvph.F	mac	Interpolate spectral vort/div or U/V to U and V.
+intuvs.F	mac	Create GRIB U/V from GRIB VO/D without interpolation.
+intuvu.F	mac	Interpolate unpacked U/V fields.
+intuvxh.F	mac	Interpolate wind component spectral field to grid point.
+intvect.F	mac	Interpolate vector fields (winds).
+intwave.F	mac	interpolates quasi-reg lat/long wave field to regular lat/long
+irdiwe.F	mac	Calculate distance between points in long array and its W/E neighbours for a quasi regular input and regular field
+irgmem.F	mac	Acquires heap space for quasi regular to regular
+irgrid.F	mac	Generate lat points and start points for a quasi regular gaussian
+irgtog.F	mac	interpolates quasi regular input to regular output
+irint.F		mac	Calculate unnormalised wts for quasi reg to reg
+irintr.F	mac	Calculate unnormalised wts for quasi reg to reg, 1 lat
+irlrev.F	mac	Reverses rows or columns of a quasi regular matrix
+irlsmb.F	mac	Calculate effects of land-sea mask on unnormalised interpolation weights for regular input and output fields.
+irprec.F	mac	Extra interpolation for precipitation when input is quasi regular 
+irscan.F	mac	Transforms scanning modes for quasi regular field
+irsize.F	mac	Evaluate array sizes for a quasi reg gaussian
+iscrsz.F	mac	Calculate scratch space size for unpacking GRIBs.
+islproc.F	mac	Generates point from four neighbours using lsm types.
+issame.F	mac	Check whether input and output fields are same.
+jacobi.F	mac	Rotates spectral fields by latitude.
+jacobif.F	mac	Rotates spectral fields by latitude (Fujitsu only).
+jagggp.F	mac	Converts spectral input fields to a gaussian grid
+jallgp.F	mac	Converts spectral input fields to lat/long grid
+jallwn.F	mac	Converts spectral input fields to lat/long grid (U & V)
+jchmod.c        mac     Gives Fortran callable chmod (for Fujitsu).
+jdebug.F	mac	Checks whether the debug flag is to be turned on.
+jfindfn.F 	mac	Create full pathname and open file.
+jfindfn3.F 	mac	Version of jfindfn.F which calls PBxxxx3 routines
+jfindir.F	mac	Find directory name defined by an environment variable.
+jgetgg.F	mac	Reads the definition of a gaussian grid.
+jgglat.F	mac	Computes gaussian lines of latitude for given truncation
+jindex.c	mac	Returns length of a character string (+ embedded blanks)
+jintend.F	mac	Deallocates heap memoryallocated by JINTLL/JINTGG.
+jintgg.F	mac	Converts spectral input fields to gaussian.
+jintll.F	mac	Converts spectral input fields to lat/long grid.
+jjset99.F	mac	Update of set99.f which gives a return status.
+jmakgg.F	mac	Makes legendre functions for latitudes(gaussian).
+jmakgg3.F	mac	Version of jmakgg.F which calls PBxxxx3 routines
+jmakll.F	mac	Makes legendre functions for latitudes(regular lat/lon).
+jmakll3.F	mac	Version of jmakll.F which calls PBxxxx3 routines
+jmemhan.F	mac	Handles dynamic memory allocation
+jmkofgg.F	mac	Builds up offsets into storage array for gaussian grid.
+jmovgg.F	mac	Moves gausssian grid point data from array to array.
+jmovll.F	mac	Moves grid point data from array to array.
+jmvugg.F	mac	Moves gaussian grid point data from array to array.
+jmvull.F	mac	Moves grid point data from array to array.
+jnorsgg.F	mac	Determines latitude in gaussian grid N or S of given latitude 
+jnumgg.F	mac	Returns number of points in each latitude of gaussian grid.
+jnumggq.F	mac	Simplified interface to JNUMGG.
+jopngg.F	mac	Finds a file of legendre polynomials for grid/truncation
+jopnggf.F	mac	Open interpolation coefficients file on Fujitsu.
+jopnggsm.c	mac	Handle file of legendre polynomials as memory mapped.
+jopnll.F	mac	Finds a file of legendre polynomials for grid/truncation
+jopnllf.F	mac	Open interpolation coefficients file on Fujitsu.
+jopnllsm.c	mac	Handle file of legendre polynomials as memory mapped.
+jparam2.h	mac	Hold trigger to allow memory flushing of types 6/7
+jparams.h	mac	PARAMETER definitions.
+jsgggp.F        mac     Converts stretched spectral fields to a gaussian grids.
+jsllgp.F        mac     Converts stretched spectral fields to a lat/long grids.
+jstrll.F        mac     Converts stretched spectral fields to a lat/long grids.
+jstrwll.F       mac     Converts stretched spectral winds to a lat/long grids.
+strlat.F        mac     Transform stretched <-> real lats; calculate map factor
+jreadgg.F	mac	Reads legendre functions for one latitude(gaussian).
+jreadll.F	mac	Reads legendre functions for one latitude(lat/long).
+jsh2sh.F	mac	Changes resolution of a field of spectral coefficients.
+jspleg1.F	mac	Calculates the legendre functions for one latitude.
+jsppole.F	mac	Calculates fourier coefficient for U or V at pole.
+jsymgg.F	mac	Converts spectral input fields to gaussian grid.
+jsymll.F	mac	Converts spectral input fields to lat/long grid.
+jtimer.c	mac	Time task processing.
+juvpole.F	mac	Creates polar wind U or V for lat/long from U/V spectral
+jvod2uv.F	mac	Interpolate spectral vort/div to spectral U/V.
+jwindll.F	mac	Converts spectral to lat/long grid for wind U and V.
+jwscal.F	mac	Applies scale factor to all latitudes except the poles
+kintrg.F	mac	Interpolate reduced gaussian to new reduced gaussian
+knfrom4.F	mac	Generates new field point from four nearest neighbours
+krg2rg.F        mac     Interpolate field from reduced gaussian grid to another
+krg2rgu.F       mac     Interpolate unpacked reduced gaussian to reduced gaussian
+lgrpr4.F	mac	Print information from Section 4 of GRIB code
+ll2xyz.F	mac	Convert lat/long coords to (x,y,z)
+lrekam.F	mac	Reverses rotations carried out by makerl.F.
+lsmfld.F	mac	Determines whether field is for 'land-sea mask' treatment.
+lsm_red.F	mac	Lookup filename for N160 reduced gaussian lsm file.
+make.dep	mac	Header file dependencies.
+makemap.c	mac	Build a bitmap from a definition given in a file.
+makerl.F	mac	Rotates an array of spherical harmonic coefficients.
+memreq.h	mac	Memory request definitions
+mkbitmp.F	mac	Select points using a bitmap.
+mkframe.F	mac	Remove points from inside a frame boundary.
+my_ialloc.c	mac	Allocates storage for a file.
+newisl.F	mac	Interpolate field on old lsm mask to one on new lsm
+ngintrp.F	mac	Finds value at a pt by interpolation in a gaussian field
+ngrotat.F	mac	Generates a rotated gaussian grid.
+ngvalue.F	mac	Rotates one line of latitude in a gaussian grid.
+nifld.common	mac	Input field common block.
+nmakgg.F	mac     Make interpolation coeffs one lat at a time for gaussian grids
+nmakll.F	mac     Make interpolation coeffs one lat at a time for lat/long grids
+nofld.common	mac	Output field common block.
+nptwe32.F	mac	32-bit REAL version of numptwe.F
+numptns.F	mac	Calculate number of grid points in range from north to south
+numptwe.F	mac	Calculate number of grid points in range from west to east
+oceanp.F	mac	Interpolate GRIB ocean field.
+options_sgimips	mac	Extra stuff for make(SGI)
+options_sun4	mac	Extra stuff for make(SUN)
+ouspace.h	mac	Work space array definitions(unpacked real data)
+parim.h		mac	PARAMETER definitions
+pddefs.F	mac	Setup interpolation using parameter dependent options.
+ppallow.F	mac	Checks if the rotation coefficients can go into mrfs.
+precip.F	mac	Says if field is to have 'precipitation' treatment.
+qpassm.f	mac	One pass through data for multiple FFT analysis.
+rddefs.c	mac	Read request defaults from file
+rename_unlink.c mac	Provide Fortran interface to rename/unlink.
+reset_c.F	mac	Reset interpolation handling options using GRIB product
+rgauss_*.h	mac	Definitions for reduced gaussian grids.
+rpassm.f	mac	One pass through data for multiple FFT synthesis.
+rphi.F		mac	Rotates spectral coefficients by longitude.
+set99.f		mac	Computes factors of n & trig functions FOR FFT99.
+sharedMemoryCharacteristics.c mac Determines the shared memory characteristics (size/key/number of latitudes) for a set of spectral to grid interpolation coefficients.
+sharedmemory.h	mac	Defines for shared memory interpolation coefficients.
+showmap.c	mac	Display a rectangular bitmap.
+smread.c	mac	Gets interpolation coefficients in a shared memory array
+soffset.c	mac	Find offsets of GRIB sections 0,1,...
+sources.xxx	mac	Sources for library on platform xxx (ALPHA,CRAY,.. ).
+sprotat.F	mac	Rotates a spherical harmonic GRIB field.
+sscal.F		mac	Implements the BLAS routine of the same name
+tatorgg.F       mac     Reverse the effects of ggrotat.F
+valpina.c	mac	Find real index of point in feild described by a bitmap.
+waveidx.F	mac	Find nearest-neighbours for wave field interpolation
+wavexxx.F	mac	Interpolates wave fields (except 2D spectra)
+w251idx.F	mac	Find nearest-neighbour for wave 2dsp (251) field interpolation
+wv2di32.F	mac	32-bit REAL version of wv2didx.F
+wv2didx.F	mac	Find nearest-neighbour for wave 2dsp field interpolation
+wv2dint.F	mac	interpolation of quasi-regular lat/long wave 2D spectra fields
+wv2dppp.F	mac	Interface to WV2DINT used by dissemination program.
+wv2dx32.F	mac	32-bit REAL version of wv2dxxx.F
+wv2dxxx.F	mac	Interpolates 2dsp fields
+wvqlidx.F	mac	Find nearest-neighbours for quasi-regular lat/long waves
+wvqlint.F	mac	Handle interpolation of quasi-regular lat/long wave fields
+xrotate.F	mac	Rotate about x-axis.
+xyz2ll.F	mac	Convert (x,y,z) coords to lat/long.
+yrotate.F	mac	Rotate about y-axis.
+zzz		mac	Directory containing 'useful' programs.
diff --git a/interpolation/Imakefile b/interpolation/Imakefile
new file mode 100755
index 0000000..78eb3c2
--- /dev/null
+++ b/interpolation/Imakefile
@@ -0,0 +1,17 @@
+#define DoNormalLib YES
+
+SRCS.F = areachk.F chequal.F clear_c.F csum.F fft99.F fixarea.F iafree.F iagcntl.F iaidef.F iainit.F iaintgg.F iaintll.F iaogdef.F iaoldef.F iarcntl.F iareset.F iarmem.F ibasini.F igalloc.F igbess.F igdins.F igdiwe.F igglat.F iggmem.F iggrid.F igint.F igintr.F iglgrid.F iglrev.F iglsize.F iglsm01.F iglsmb.F iglsmd.F iglsmr.F iglsmst.F ignorm.F igplsm.F igpoleg.F igpolew.F igprec.F igscan.F igsetup.F igsize.F igtog.F igtogr.F igtran.F init_cm.F insane.F intf.F intfa.F intfap.F intfau.F in [...]
+OBJS.F = $(SRCS.F:.F=.o)
+
+SRCS.c = jmalloc.c my_ialloc.c rddefs.c jopnggsm.c jopnllsm.c intlogs.c fftchk.c
+OBJS.c = $(SRCS.c:.c=.o)
+
+SRCS = $(SRCS.F) $(SRCS.c)
+OBJS = $(OBJS.F) $(OBJS.c)
+
+NormalFortranObjectRule()
+NormalLibraryObjectRule()
+NormalLibraryTarget(specgp,$(OBJS))
+InstallLibrary(specgp,$(WHERE))
+
+DependTarget()
diff --git a/interpolation/Makefile b/interpolation/Makefile
new file mode 100755
index 0000000..c5290ac
--- /dev/null
+++ b/interpolation/Makefile
@@ -0,0 +1,241 @@
+#
+#                                 Makefile for libemos/interpolation
+#
+LIBRARY      = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F90  = $(SOURCES.F90:.F90=.o) 
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+VECTOR.o     = $(VECTOR.F:.F=.o)
+NO_OPT.o     = $(NO_OPT.F:.F=.o)
+OBJECTS      = $(OBJECTS.F90) $(OBJECTS.F) $(OBJECTS.f) $(VECTOR.o) $(NO_OPT.o) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+$(VECTOR.o): $(VECTOR.F)
+	$(FC) $(VECTFFLAGS) -c $<
+
+$(NO_OPT.o): $(NO_OPT.F)
+	$(FC) $(VECTFFLAGS) -c $<
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) *.f
+# DO NOT DELETE
+
+areachk.o: parim.h nifld.common nofld.common
+auresol.o: parim.h nifld.common nofld.common
+chkprec.o: parim.h nifld.common
+clear_c.o: parim.h nifld.common nofld.common grfixed.h current.h
+ddstyle.o: jparams.h parim.h nofld.common
+dssarea.o: parim.h nifld.common nofld.common
+fixarea.o: parim.h nifld.common nofld.common grfixed.h intf.h
+freecf.o: jparam2.h
+gb2gb.o: jparams.h parim.h nofld.common
+getconf.o: nifld.common parim.h jparams.h
+ggintrp.o: parim.h
+ggrotat.o: parim.h
+hgengg.o: parim.h nofld.common
+hgengrd.o: parim.h
+hgengrw.o: parim.h
+hgenll.o: parim.h
+hgenllw.o: parim.h
+hgetlsm.o: parim.h nifld.common nofld.common
+hirlam.o: parim.h nifld.common nofld.common
+hirlamw.o: parim.h nifld.common nofld.common jparams.h
+hirlsm.o: parim.h nifld.common nofld.common
+hll2ll.o: parim.h
+hll2llw.o: parim.h
+hnei12.o: parim.h
+hneill.o: parim.h
+hntfap.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfaph.o: parim.h nifld.common nofld.common grfixed.h intf.h jparams.h
+hntfaph.o: current.h
+hntfaps.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfau.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfauh.o: parim.h nifld.common nofld.common grfixed.h intf.h jparams.h
+hntfauh.o: current.h intlog.h
+hntfaus.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfbu.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hrg2gg.o: parim.h
+hrg2ggw.o: parim.h
+hrg2ll.o: parim.h
+hrg2llw.o: parim.h nifld.common nofld.common
+hsp2gg.o: parim.h
+iafree.o: parim.h memreq.h nifld.common nofld.common
+iagcntl.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iaidef.o: parim.h nifld.common
+iainit.o: parim.h memreq.h nifld.common nofld.common grfixed.h
+iaintgg.o: parim.h nifld.common nofld.common grfixed.h ouspace.h
+iaintll.o: parim.h nifld.common nofld.common grfixed.h ouspace.h
+iaogdef.o: parim.h nofld.common
+iaoldef.o: parim.h nofld.common
+iarcntl.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iareset.o: parim.h nofld.common
+iarmem.o: parim.h nifld.common nofld.common ouspace.h
+ibasini.o: parim.h nifld.common nofld.common intf.h
+igalloc.o: parim.h memreq.h
+igbess.o: jparams.h parim.h
+igdins.o: parim.h
+igdiwe.o: parim.h
+igglat.o: jparams.h parim.h
+iggmem.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iggrid.o: parim.h
+igint.o: parim.h
+igintr.o: parim.h
+iglgrid.o: parim.h
+iglrev.o: parim.h
+iglsize.o: parim.h
+iglsm01.o: parim.h jparams.h
+iglsmb.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iglsmd.o: parim.h
+iglsmr.o: parim.h
+iglsmst.o: parim.h jparams.h
+ignorm.o: parim.h
+igplsm.o: parim.h
+igpoleg.o: parim.h nifld.common
+igpolew.o: parim.h nifld.common
+igprec.o: parim.h nifld.common
+igscan.o: parim.h
+igsetup.o: parim.h nifld.common nofld.common
+igsize.o: parim.h
+igtog.o: parim.h nifld.common nofld.common
+igtogr.o: parim.h nifld.common nofld.common
+igtran.o: parim.h
+init_cm.o: parim.h nifld.common nofld.common grfixed.h current.h
+insane.o: parim.h nifld.common nofld.common grfixed.h
+intf.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfa.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfap.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfau.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfb.o: parim.h nifld.common nofld.common grfixed.h intf.h jparams.h
+intfbp.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfbu.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfc.o: parim.h nifld.common nofld.common grfixed.h
+intin.o: parim.h nifld.common nofld.common grfixed.h current.h
+intisl.o: parim.h intisl.h nifld.common nofld.common
+intlog.o: parim.h intlog.h
+intlogd.o: intlog.h
+intlogr.o: parim.h intlog.h
+intocn.o: parim.h
+intout.o: parim.h nifld.common nofld.common grfixed.h current.h
+intpnum.o: grprs.h
+intuvdh.o: parim.h intf.h nifld.common nofld.common
+intuvf.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvgh.o: parim.h nifld.common nofld.common grfixed.h intf.h intlog.h
+intuvgh.o: current.h
+intuvp.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvph.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvs.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvu.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvxh.o: parim.h nifld.common nofld.common intf.h current.h
+intvect.o: parim.h nifld.common nofld.common intf.h current.h
+intwave.o: parim.h nifld.common nofld.common intf.h grfixed.h
+irdiwe.o: parim.h
+irgmem.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+irgrid.o: parim.h nifld.common
+irgtog.o: parim.h nifld.common nofld.common
+irint.o: parim.h
+irintr.o: parim.h
+irlrev.o: parim.h
+irlsmb.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+irprec.o: parim.h nifld.common
+irscan.o: parim.h
+irsize.o: parim.h
+iscrsz.o: parim.h nifld.common nofld.common grfixed.h
+islproc.o: intisl.h parim.h nifld.common nofld.common
+issame.o: parim.h nifld.common nofld.common grfixed.h
+jacobi.o: jparams.h parim.h
+jacobif.o: jparams.h parim.h
+jagggp.o: jparams.h parim.h current.h nifld.common nofld.common grfixed.h
+jallgp.o: jparams.h parim.h nifld.common
+jallwn.o: jparams.h parim.h nifld.common
+jdebug.o: jparams.h jparam2.h
+jgetgg.o: parim.h nifld.common nofld.common grfixed.h intf.h rgauss_032.h
+jgetgg.o: rgauss_048.h rgauss_080.h rgauss_080_19940113.h rgauss_128.h
+jgetgg.o: rgauss_160.h rgauss_160_19931222.h rgauss_200.h rgauss_256.h
+jgetgg.o: rgauss_320.h rgauss_400.h rgauss_512.h rgauss_1024.h
+jgglat.o: jparams.h parim.h
+jintgg.o: jparams.h parim.h
+jintll.o: jparams.h parim.h
+jjset99.o: jparams.h parim.h
+jmakgg.o: jparams.h parim.h
+jmakgg3.o: jparams.h parim.h
+jmakll.o: jparams.h parim.h
+jmakll3.o: jparams.h parim.h
+jmemhan.o: jparams.h jparam2.h parim.h
+jmovgg.o: jparams.h parim.h
+jmovll.o: jparams.h parim.h
+jmvugg.o: jparams.h parim.h
+jmvull.o: jparams.h parim.h
+jnorsgg.o: parim.h
+jnumgg.o: jparams.h parim.h
+jnumggq.o: jparams.h parim.h
+jopngg.o: parim.h
+jopnggf.o: parim.h jparams.h jparam2.h
+jopnll.o: parim.h
+jopnllf.o: parim.h jparams.h jparam2.h
+jreadgg.o: jparams.h parim.h
+jreadll.o: jparams.h parim.h
+jsgggp.o: jparams.h parim.h current.h nifld.common nofld.common grfixed.h
+jsllgp.o: jparams.h parim.h nifld.common
+jspleg1.o: jparams.h
+jstrll.o: jparams.h parim.h nifld.common
+jstrwll.o: jparams.h parim.h nifld.common
+jsymgg.o: jparams.h parim.h nifld.common
+jsymll.o: jparams.h parim.h nifld.common
+juvpole.o: jparams.h parim.h current.h nofld.common grfixed.h
+jwindll.o: jparams.h parim.h nifld.common
+jwscal.o: jparams.h
+kintrg.o: intisl.h parim.h nifld.common nofld.common
+knfrom4.o: intisl.h parim.h nifld.common
+krg2rg.o: parim.h intisl.h nifld.common nofld.common
+krg2rgu.o: parim.h intisl.h nifld.common nofld.common
+lrekam.o: parim.h nofld.common
+lsmfld.o: parim.h nifld.common nofld.common
+makerl.o: parim.h nofld.common
+mkbitmp.o: parim.h jparams.h nofld.common
+mkframe.o: parim.h jparams.h
+newisl.o: intisl.h parim.h
+ngintrp.o: parim.h
+ngrotat.o: parim.h intf.h
+nmakgg.o: jparams.h parim.h
+nmakll.o: jparams.h parim.h
+oceanp.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+oceanp.o: intf.h
+pddefs.o: parim.h nifld.common
+ppallow.o: jparams.h parim.h
+precip.o: parim.h nifld.common nofld.common
+reset_c.o: parim.h nifld.common nofld.common grfixed.h current.h
+rphi.o: jparams.h
+set99.o: jparams.h
+sprotat.o: parim.h
+tatorgg.o: parim.h
+w251idx.o: parim.h
+waveidx.o: parim.h
+wavexxx.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+wv2di32.o: parim.h
+wv2didx.o: parim.h
+wv2dint.o: parim.h
+wv2dx32.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+wv2dxxx.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+wvqlidx.o: parim.h
+wvqlint.o: parim.h
+zprec.o: parim.h nifld.common
diff --git a/interpolation/Makefile.in b/interpolation/Makefile.in
new file mode 100755
index 0000000..bdffc3c
--- /dev/null
+++ b/interpolation/Makefile.in
@@ -0,0 +1,46 @@
+#
+#                                 Makefile for libemos/interpolation
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+LIB =depl
+CNAME = comp
+
+LIBRARY      = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F90  = $(SOURCES.F90:.F90=.o) 
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+VECTOR.o     = $(VECTOR.F:.F=.o)
+NO_OPT.o     = $(NO_OPT.F:.F=.o)
+OBJECTS      = $(OBJECTS.F90) $(OBJECTS.F) $(OBJECTS.f) $(VECTOR.o) $(NO_OPT.o) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+$(VECTOR.o): $(VECTOR.F)
+	$(FC) $(VECTFFLAGS) -c $<
+
+$(NO_OPT.o): $(NO_OPT.F)
+	$(FC) $(NOOPTFFLAGS) -c $<
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) *.f
diff --git a/interpolation/Makefile.shared b/interpolation/Makefile.shared
new file mode 100755
index 0000000..3f67d9e
--- /dev/null
+++ b/interpolation/Makefile.shared
@@ -0,0 +1,40 @@
+#
+#                                 Makefile for libemos/interpolation
+#
+LIBRARY      = ../lib$(LIB)$(R64).so
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+PROFILE=$(SHLIB)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.f    = $(SOURCES.f:.f=.o)
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+VECTOR.o     = $(VECTOR.F:.F=.o)
+NO_OPT.o     = $(NO_OPT.F:.F=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.f) $(VECTOR.o) $(NO_OPT.o) $(OBJECTS.c)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(LD) $(DYNLINKFLAGS) $? -o $@
+
+$(VECTOR.o): $(VECTOR.F)
+	$(FC) $(VECTFFLAGS) -c $<
+
+$(NO_OPT.o): $(NO_OPT.F)
+	$(FC) $(VECTFFLAGS) -c $<
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) *.f
diff --git a/interpolation/areachk.F b/interpolation/areachk.F
new file mode 100755
index 0000000..c178df0
--- /dev/null
+++ b/interpolation/areachk.F
@@ -0,0 +1,466 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+C
+C---->
+C**** AREACHK
+C
+C     Purpose
+C     -------
+C
+C     Fixup input/output field area definitions according to grid
+C     specification.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+C
+C     Input
+C     -----
+C
+C     For latitude/longitude grids:
+C     EW    =  East-west grid interval (degrees)
+C     NS    =  North-south grid interval (degrees)
+C
+C     For gaussian grids:
+C     EW    =  gaussian grid number
+C     NS    =  0
+C
+C     NORTH =  North latitude (degrees)
+C     WEST  =  West longitude (degrees)
+C     SOUTH =  South latitude (degrees)
+C     EAST  =  East longitude (degrees)
+C
+C     For spherical harmonics:
+C     EW    =  0
+C     NS    =  0
+C     NORTH =  0
+C     WEST  =  0
+C     SOUTH =  0
+C     EAST  =  0
+C
+C
+C     Output
+C     ------
+C
+C     NORTH =  North latitude, adjusted if necessary (degrees)
+C     WEST  =  West longitude, adjusted if necessary (degrees)
+C     SOUTH =  South latitude, adjusted if necessary (degrees)
+C     EAST  =  East longitude, adjusted if necessary (degrees)
+C
+C
+C     Method
+C     ------
+C
+C     If default (0/0/0/0) selected for input, input area is set
+C       - to global for lat/long grid 
+C       - to global for gaussian grid 
+C
+C     Output area is adjusted to fit the given grid by expanding
+C     the area if necessary.
+C
+C
+C     Externals
+C     ---------
+C
+C     DSSAREA - Fixup input/output field area (dissemination style).
+C     JGETGG  - Reads the definition of a gaussian grid.
+C     JNORSGG - Finds the lat row in a gauss grid N or S of given lat
+C     INTLOG  - Logs error messages.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Apr 1996
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 19200 )
+      REAL RRMULT
+#if (defined hp) && (!defined INTEGER_8)
+      INTEGER NP90, NP360, NFACTOR
+      PARAMETER ( NFACTOR = 10 )
+#else
+      INTEGER*8 NP90, NP360, NFACTOR
+      PARAMETER ( NFACTOR = 1000 )
+#endif
+      PARAMETER ( NP90    = JP90*NFACTOR )
+      PARAMETER ( NP360   = JP360*NFACTOR )
+      PARAMETER ( RRMULT  = (PPMULT*NFACTOR) )
+C
+C     Function arguments
+C
+      REAL EW, NS, NORTH, WEST, SOUTH, EAST
+C
+C     Local variables
+C
+#if (defined hp) && (!defined INTEGER_8)
+      INTEGER INORTH, IWEST, ISOUTH, IEAST, IEW, INS
+      INTEGER TNORTH, TWEST, TSOUTH, TEAST
+      INTEGER NWEST, NEAST
+#else
+      INTEGER*8 INORTH, IWEST, ISOUTH, IEAST, IEW, INS
+      INTEGER*8 TNORTH, TWEST, TSOUTH, TEAST
+      INTEGER*8 NWEST, NEAST
+#endif
+      CHARACTER*12 YFLAG
+      INTEGER NGAUSS, NOLD, IRET, KPTS
+      DIMENSION KPTS(JPGTRUNC*2)
+      DATA NOLD /0/
+      REAL RNORTH, RSOUTH
+      LOGICAL LDEFIN, LGAUSS, LSPHERE, LSUBAR, LINSIDE
+      REAL RGAUSS
+      DIMENSION RGAUSS(JPGTRUNC*2)
+      REAL*8 DEW, DNS, DNORTH, DWEST, DSOUTH, DEAST
+C
+C     Externals
+C
+      INTEGER JNORSGG, DSSAREA
+C
+      SAVE NOLD, RGAUSS
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      AREACHK = 0
+      LINSIDE=.FALSE.
+      LGAUSS  = ( NS.EQ.0.0 )
+      LSPHERE = ( (EW.EQ.0.0).AND.(NS.EQ.0.0) )
+
+C     Force grid points inside required area
+       CALL GETENV('MARS_INTERPOLATION_INWARDS', YFLAG)
+       IF( YFLAG(1:1).EQ.'1' ) LINSIDE = .TRUE.
+
+C     Don't adjust area if rotation specified
+C
+      IF( LNOROTA ) GOTO 900
+C
+C     If dissemination style areas required ...
+C
+      IF( (LNOSTYLE.AND.(NOSTYLE.EQ.JPSDISM)).OR.LINSIDE ) THEN
+        AREACHK = DSSAREA( EW, NS, NORTH, WEST, SOUTH, EAST )
+        GOTO 900
+      ENDIF
+C
+C     If it's gaussian, pick up the gaussian grid definitions unless
+C     they have already been retrieved.
+C
+      IF( LGAUSS.AND..NOT.LSPHERE ) THEN
+        NGAUSS = NINT( EW )
+#if (defined hp) && (!defined INTEGER_8)
+        IF( NGAUSS.GE.256 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'AREACHK: unsafe to use 32-bit HP version for gaussian = ',
+     X      NGAUSS)
+          AREACHK = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+#endif
+        IF( NGAUSS.GT.JPGTRUNC ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'AREACHK: Gaussian grid number ', NGAUSS)
+          CALL INTLOG(JP_ERROR,
+     X      'AREACHK: exceeds current expected maximum ', JPGTRUNC)
+          AREACHK = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+        IF( NGAUSS.NE.NOLD ) THEN
+          NOLD = NGAUSS
+          CALL JGETGG( NOLD, 'F', RGAUSS, KPTS, IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'AREACHK: Failed to pick up gaussian ', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        'AREACHK: definitions for resolution = ', NOLD)
+            AREACHK = JPROUTINE + 2
+            GOTO 900
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Fixup area if default (0/0/0/0).
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+
+
+C Sinisa added if input area is not global
+C because of stagered grids
+      LSUBAR = ( (NIAREA(1).NE.0).AND.(NIAREA(2).NE.0).AND.
+     X           (NIAREA(3).NE.0).AND.(NIAREA(4).NE.0) ) 
+
+          LSTAGGL  = .FALSE.
+      IF( LSUBAR ) THEN
+        IF(IABS(JP360 - NIAREA(4) - NIAREA(2)).LT.1000) THEN
+          LSTAGGL  = .TRUE.
+        ENDIF
+      ENDIF
+
+      LDEFIN = ( (NORTH.EQ.0).AND.(WEST.EQ.0).AND.
+     X           (SOUTH.EQ.0).AND.(EAST.EQ.0) ) 
+C
+      IF( LDEFIN ) THEN
+C
+        IF( .NOT.LGAUSS ) THEN
+C
+C         Regular lat/long grid ..
+C
+          NORTH = 90.0
+          WEST  = 0
+          SOUTH = -NORTH
+          EAST  = 360.0 - EW
+C
+        ELSE IF( LSPHERE ) THEN
+C
+C         Spherical harmonics
+C
+          NORTH = 90.0
+          WEST  = 0
+          SOUTH = -90.0
+          EAST  = 360.0
+C
+C
+        ELSE
+C
+C         Gaussian grid ..
+C
+          INORTH = JNORSGG( 90.0, RGAUSS, NGAUSS, 0)
+          NORTH  = RGAUSS(INORTH)
+          WEST   = 0
+          ISOUTH = JNORSGG( -90.0, RGAUSS, NGAUSS, 1)
+          SOUTH  = -NORTH
+          EAST   = 360.0 - 90.0/FLOAT(NGAUSS)
+        ENDIF
+      ENDIF
+C
+      IF( LSPHERE ) GOTO 900
+C
+C     Don't fixup area for ocean products
+C
+CTim      IF( NILOCAL.EQ.4 ) GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Fixup west-east area to correspond to the grid.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( .NOT.LGAUSS ) THEN
+C
+C       Regular lat/long grid only ..
+C
+        DEW = EW
+        IEW = DNINT( DBLE(DEW * RRMULT) )
+C
+      ELSE
+C
+C       Gaussian grid ..
+C
+        IEW = DNINT( (DBLE(NP90) / DBLE(NGAUSS)) )
+C
+      ENDIF
+C
+C     Standardise range so that WEST and EAST are >= 0,
+C     and EAST > WEST.
+C
+      IF( WEST.LT.0.0 ) THEN
+        WEST = WEST + 360.0
+        EAST = EAST + 360.0
+      ENDIF
+      IF( EAST.GE.WEST ) THEN
+        DEAST = EAST
+      ELSE
+        DEAST = EAST + 360.0
+      ENDIF
+C
+      DWEST = WEST
+      IEAST = DNINT( DEAST * DBLE(RRMULT) + 0.1 )
+      TEAST = IEAST
+      IWEST =  DINT( DWEST * DBLE(RRMULT) + 0.1 )
+      TWEST = IWEST
+C
+C     Round east boundary to nearest gridpoint eastwards,
+C     and west boundary to nearest gridpoint westwards.
+C
+      NEAST = (IEAST+IEW-1) / IEW
+      IEAST = NEAST * IEW
+
+
+        IF(.NOT.LSTAGGL.AND.LSUBAR.AND.IEAST.GT.TEAST) THEN
+           IEAST = IEAST - IEW
+        ENDIF
+
+
+      NWEST = IWEST / IEW
+      IWEST = NWEST * IEW
+
+c Sinisa to add 1 point if we have stagered global field
+        IF(.NOT.LSTAGGL.AND.LSUBAR.AND.IWEST.LT.TWEST) THEN
+             IWEST = IWEST + IEW
+        ENDIF
+C
+C     Try to catch special case: global west-east with wrap-around.
+C
+      IF( (IEAST-IWEST).GE.NP360 ) THEN
+        IF( LGAUSS) THEN
+          IEAST = IWEST + (4*NGAUSS-1)*IEW
+        ELSE
+          IEAST = IWEST + NP360 - IEW
+        ENDIF
+      ENDIF
+C
+C     Ensure East and West still in range (0,360)
+C
+      IF( IEAST.GT.NP360 ) THEN
+        IEAST = IEAST - NP360
+        IWEST = IWEST - NP360
+      ENDIF
+      IF( IWEST.LT.-NP360 ) THEN
+        IEAST = IEAST + NP360
+        IWEST = IWEST + NP360
+      ENDIF
+C
+C     Ensure East-West spread is not greater than 360
+C
+      IF( (IEAST-IWEST).GT.NP360 ) THEN
+        IF( LGAUSS) THEN
+          IEAST = IWEST + (4*NGAUSS-1)*IEW
+        ELSE
+          IEAST = IWEST + NP360 - IEW
+        ENDIF
+      ENDIF
+C
+C     Apply adjustment when east and west boundaries are the same
+C     longitude (0/360) to give a global grid.
+C
+      IF( ( (IWEST.EQ.-NP360).AND.(IEAST.EQ.0)     ).OR.
+     X    ( (IWEST.EQ.0)     .AND.(IEAST.EQ.NP360) ).OR.
+     X    ( (IWEST.EQ.NP360) .AND.(IEAST.EQ.NP360) ) ) THEN
+        IWEST = 0
+        IF( LGAUSS) THEN
+          IEAST = (4*NGAUSS-1)*IEW
+        ELSE
+          IEAST = NP360 - IEW
+        ENDIF
+      ENDIF
+C
+      WEST  = DBLE(IWEST) / RRMULT
+      EAST  = DBLE(IEAST) / RRMULT
+C
+      IF( (EAST.LT.WEST).OR.(EAST.GT.360.0) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'AREACHK: Faulty longitude limits', JPQUIET)
+        CALL INTLOGR(JP_ERROR,'AREACHK: East = ', EAST)
+        CALL INTLOGR(JP_ERROR,'AREACHK: West = ', WEST)
+        AREACHK = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Fixup north-south area to correspond to the grid.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+c for ocean fields, adjust ew but not ns boundaries
+      IF( NILOCAL.EQ.4 ) GOTO 900
+C
+      IF( .NOT.LGAUSS ) THEN
+C
+C       Regular lat/long grid only ..
+C
+C       Round north boundary to nearest gridpoint northwards.
+C
+        DNS = NS
+        INS = DNINT( DBLE(DNS * RRMULT) )
+        DNORTH = NORTH
+        INORTH = DNINT( DBLE(DNORTH * RRMULT) )
+        TNORTH = INORTH
+        IF( INORTH.GE.0 ) THEN
+          INORTH = (INORTH+INS-1) / INS
+        ELSE
+          INORTH = INORTH / INS
+        ENDIF
+        INORTH = INORTH * INS
+
+        IF( INORTH.GT.NP90 ) INORTH = NP90
+        IF( INORTH.LT.-NP90 ) INORTH = -NP90
+
+        IF(.NOT.LSTAGGL.AND.LSUBAR.AND.INORTH.GT.TNORTH) THEN
+             INORTH = INORTH - INS
+        ENDIF
+
+        NORTH = DBLE(INORTH) / RRMULT
+C
+C       Round south boundary to nearest gridpoint southwards.
+C
+        DSOUTH = SOUTH
+        ISOUTH = DNINT( DBLE(DSOUTH * RRMULT) )
+        TSOUTH = ISOUTH
+        IF( ISOUTH.GE.0 ) THEN
+          ISOUTH = ISOUTH / INS
+        ELSE
+          ISOUTH = (ISOUTH-INS+1) / INS
+        ENDIF
+        ISOUTH = ISOUTH * INS
+
+        IF( ISOUTH.GT.NP90 ) ISOUTH = NP90
+        IF( ISOUTH.LT.-NP90 ) ISOUTH = -NP90
+
+        IF(.NOT.LSTAGGL.AND.LSUBAR.AND.ISOUTH.LT.TSOUTH) THEN
+             ISOUTH = ISOUTH + INS
+        ENDIF
+
+
+        SOUTH = DBLE(ISOUTH) / RRMULT
+C
+      ELSE
+C
+C       Gaussian grid ..
+C
+C       Round north boundary to nearest gridpoint northwards.
+C
+        RNORTH = NORTH
+        INORTH = JNORSGG( RNORTH, RGAUSS, NGAUSS, 1)
+        NORTH  = RGAUSS(INORTH)
+C
+C       Round south boundary to nearest gridpoint southwards.
+C
+        RSOUTH = SOUTH
+        ISOUTH = JNORSGG( RSOUTH, RGAUSS, NGAUSS, 0)
+        SOUTH  = RGAUSS(ISOUTH)
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/auresol.F b/interpolation/auresol.F
new file mode 100755
index 0000000..b4e3999
--- /dev/null
+++ b/interpolation/auresol.F
@@ -0,0 +1,167 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION AURESOL(NS,EW)
+C
+C---->
+C**** AURESOL
+C
+C     Purpose
+C     -------
+C
+C     Returns the default truncation for a given
+C     latitude--longitude grid resolution.
+C
+C
+C     Interface
+C     ---------
+C
+C     KTRUNC = AURESOL(NS,EW)
+C
+C     Input
+C     -----
+C
+C     NS     = north-south grid increment in degrees
+C     EW     = east-west   grid increment in degrees
+C
+C     Output
+C     ------
+C
+C     KTRUNC = Triangular truncation (e.g. 106 for T106)
+C
+C
+C     Method
+C     ------
+C
+C       Grid increment           Truncation
+C       --------------           ----------
+C
+C       [2.5 and greater          T63
+C
+C       [1.5 to 2.5[              T106
+C
+C       [0.6 to 1.5[              T213
+C
+C       [0.4 to 0.6[              T319
+C
+C       [0.3 to 0.4[              T511
+C
+C       [0.15 to 0.3[             T799
+C
+C       [0   to 0.15[             T1023
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers ECMWF Mar 1998
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C     Modifications
+C     -------------
+C
+C     S.Curic     ECMWF        April 2005
+C     Add T799 and T1023
+C
+C ------------------------------------------------------------------
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      REAL NS, EW
+C
+C     Local variables
+C
+C     Function statement(s)
+C
+      REAL STEP
+C
+      STEP = MIN(ABS(NS),ABS(EW))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     2.5 and greater -> T63
+C
+      IF( STEP.GE.2.5 ) THEN
+        AURESOL = 63
+        GOTO 900
+      ENDIF
+C
+C     1.5 to 2.5      -> T106
+C
+      IF( STEP.GE.1.5 ) THEN
+        AURESOL = 106
+        GOTO 900
+      ENDIF
+C
+C     0.6 to 1.5      -> T213
+C
+      IF( STEP.GE.0.6 ) THEN
+        AURESOL = 213
+        GOTO 900
+      ENDIF
+C
+C     0.4 to 0.6      -> T319
+C
+      IF( STEP.GE.0.4 ) THEN
+        AURESOL = 319
+        GOTO 900
+      ENDIF
+C
+C     0.3 to 0.4      -> T511
+C
+      IF( STEP.GE.0.3 ) THEN
+        AURESOL = 511
+        GOTO 900
+      ENDIF
+C
+C     0.15 to 0.3      -> T799
+C
+      IF( STEP.GE.0.15 ) THEN
+        AURESOL = 799
+        GOTO 900
+      ENDIF
+
+C
+C     0.09 to 0.15      -> T1279
+C
+      IF( STEP.GE.0.09 ) THEN
+        AURESOL = 1279
+        GOTO 900
+      ENDIF
+C
+C     less than 0.09   -> T2047
+C
+      AURESOL = 2047
+
+C
+  900 CONTINUE
+C
+      END
diff --git a/interpolation/bitmap.h b/interpolation/bitmap.h
new file mode 100755
index 0000000..63b203e
--- /dev/null
+++ b/interpolation/bitmap.h
@@ -0,0 +1,39 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef BITMAP_H
+#define BITMAP_H
+
+#ifdef INTEGER_IS_LONG
+#define fortint long
+#else
+#define fortint int
+#endif
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define MAKEMAP makemap
+#define SHOWMAP showmap
+#define GMAPBIT gmapbit
+#else
+#define MAKEMAP makemap_
+#define SHOWMAP showmap_
+#define GMAPBIT gmapbit_
+#endif
+
+int MAKEMAP(char * , int * , int * , char ** , int );
+void SHOWMAP(char ** , int * , int * );
+int GMAPBIT( char ** , int * , int * , int * );
+int findNumber(char * , int , int , int * , char );
+char findDelimiter(char * , int , int );
+int findCharacter(char * , int , int , char );
+void setBit(char * , int , int , int , int );
+void copyRow(char * , int , int , int , int );
+
+#endif          /* End of BITMAP_H */
diff --git a/interpolation/chequal.F b/interpolation/chequal.F
new file mode 100755
index 0000000..2e8f5b6
--- /dev/null
+++ b/interpolation/chequal.F
@@ -0,0 +1,86 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION CHEQUAL( HIN, KFIRST, KLAST, HCOMP)
+C
+C---->
+C**** CHEQUAL
+C
+C     Purpose
+C     -------
+C
+C     Compare two ASCII character strings without regard to case.
+C
+C
+C     Interface
+C     ---------
+C
+C     Input
+C     -----
+C
+C     HIN   - First string
+C     KFIRST- position of first character in string for comparison
+C     KLAST - position of last character in string for comparison
+C     HCOMP - Second string
+C
+C
+C     Method
+C     ------
+C
+C     Compare values as uppercase letters.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers       ECMWF        January 1995.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      CHARACTER*(*) HIN, HCOMP
+      INTEGER  KFIRST, KLAST, LOOP, ITEMP1, ITEMP2, ITEMPA
+#ifdef rs6000
+
+      ITEMPA = ICHAR( 'a' )
+#else
+      DATA ITEMPA/97/
+C                |
+C                v
+C     ITEMPA = ICHAR( 'a' )
+#endif
+
+      CHEQUAL = .FALSE.
+
+      IF( KFIRST .GT. KLAST ) RETURN
+
+      DO 110 LOOP =  KFIRST, KLAST
+        ITEMP1 = ICHAR( HIN(LOOP:LOOP) )
+        IF ( ITEMP1 .LT. ITEMPA ) ITEMP1 = ITEMP1 + 32
+
+        ITEMP2 = ICHAR( HCOMP(LOOP:LOOP) )
+        IF ( ITEMP2 .LT. ITEMPA) ITEMP2 = ITEMP2 + 32
+
+        IF ( ITEMP1 .NE. ITEMP2 ) RETURN
+  110 CONTINUE
+
+      CHEQUAL = .TRUE.
+
+      RETURN
+      END
diff --git a/interpolation/chkout.F b/interpolation/chkout.F
new file mode 100755
index 0000000..7d57721
--- /dev/null
+++ b/interpolation/chkout.F
@@ -0,0 +1,35 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION CHKOUT()
+C
+C---->
+C*****CHKOUT*
+C
+C     PURPOSE
+C     -------
+C     check if intout  has been called
+C     LINTOUT      - Flag to say whether or not intout  has been called
+C
+C     Function argument
+C
+
+#include "parim.h"
+#include "nofld.common"
+
+      CHKOUT = 0
+      IF(LINTOUT) THEN
+         CHKOUT = 1
+         CALL INTLOG(JP_DEBUG,'CHKOUT: INTOUT has been called'
+     X   ,JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/chkprec.F b/interpolation/chkprec.F
new file mode 100755
index 0000000..dd3d31b
--- /dev/null
+++ b/interpolation/chkprec.F
@@ -0,0 +1,102 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE CHKPREC()
+C
+C---->
+C**** CHKPREC
+C
+C     Purpose
+C     -------
+C
+C     Determines whether or not the current field is to be
+C     considered for 'precipitation' treatment.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL CHKPREC()
+C
+C     Input
+C     -----
+C
+C     None
+C
+C
+C     Output
+C     ------
+C
+C     Sets the precipitation threshold if give by environment variable
+C     PRECIPITATION_THRESHOLD. Otherwise gives it a default value.
+C
+C
+C     Method
+C     ------
+C
+C     See below.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs messages
+C
+C     Uses common block nifld.common
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     December 2003
+C
+C----<
+C
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Local variables
+C
+      CHARACTER*20 PTHRESH
+      INTEGER IBLANK
+      LOGICAL LFIRST
+      DATA LFIRST/.TRUE./
+      SAVE LFIRST
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( LFIRST ) THEN
+        LFIRST = .FALSE.
+        CALL GETENV('PRECIPITATION_THRESHOLD',PTHRESH)
+        IBLANK = INDEX(PTHRESH, ' ')
+        IF( IBLANK.GT.1 ) THEN
+          READ(PTHRESH,'(F15.8)') ZPRECIP
+        ELSE
+          ZPRECIP = 0.00005
+        ENDIF
+C
+        CALL INTLOGR(JP_DEBUG,
+     X    'CHKPREC: PRECIPITATION_THRESHOLD = ',ZPRECIP)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/clear_c.F b/interpolation/clear_c.F
new file mode 100755
index 0000000..fb19f4d
--- /dev/null
+++ b/interpolation/clear_c.F
@@ -0,0 +1,187 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+#define INT_MISSING -2147483647
+
+      SUBROUTINE CLEAR_C( )
+C
+C---->
+C**** CLEAR_C
+C
+C     Purpose
+C     -------
+C
+C     Sets start values for parameters in common block.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL CLEAR_C()
+C
+C
+C     Method
+C     ------
+C
+C     Hard coded defaults.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers       ECMWF        August 1994.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "current.h"
+C
+C     Local variables
+C
+      INTEGER IRET, LOOP
+C
+C     ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Set default processing flag settings.
+C
+      LCHANGE   = .TRUE.
+      LSMCHNG   = .TRUE.
+      LSM       = .TRUE.
+      LPREC     = .FALSE.
+      LWIND     = .FALSE.
+C
+C     Set default area indexes.
+C
+      NINS  = 0
+      NIWE  = 0
+      NO1NS = 0
+      NO1WE = 0
+      NONS  = 0
+      NOWE  = 0
+C
+C     Defaults for output GRIB record ..
+C     .. ECMWF local code table 128
+C     .. level 500 hPa
+C
+      NOPARAM = 0
+      NOTABLE = 128
+      NOLEVT  = 100
+      NOLEVEL = 500
+      NOHFUNC = 'A'
+C
+C     Turn off all flags indicating that user has given a value.
+C
+      LSMPARSET = .FALSE.
+      LSMSET    = .FALSE.
+      LPRECSET  = .FALSE.
+      LWINDSET  = .FALSE.
+      LNIGAUS   = .FALSE.
+      LNGSPEC   = .FALSE.
+      LIGIVEL   = .FALSE.
+      LIGIVEP   = .FALSE.
+      LOGIVEL   = .FALSE.
+      LOGIVEP   = .FALSE.
+      LNOAREA   = .FALSE.
+      LNORESO   = .FALSE.
+      LNOGAUS   = .FALSE.
+      LNOACC    = .FALSE.
+      LNOREPR   = .FALSE.
+      LNOTABL   = .FALSE.
+      LNOPARA   = .FALSE.
+      LNOLEVL   = .FALSE.
+      LNOLEVT   = .FALSE.
+      LNOGRID   = .FALSE.
+      LNOFRAME  = .FALSE.
+      LNOSTYLE  = .FALSE.
+      LARESOL   = .FALSE.
+      LINTOUT   = .FALSE.
+      LIMISSV   = .FALSE.
+cs double interpolation
+      LDOUBLE   = .FALSE.
+C
+      RMISSGV   = REAL(INT_MISSING)
+C
+C     Clear input and output gaussian grid definitions
+C
+      NIGAUSS = 0
+      NOGAUSS = 0
+      DO 110 LOOP = 1, JPLAT
+        RIGAUSS(LOOP) = 0.0
+        MILLEN(LOOP) = 0
+  110 CONTINUE
+C
+      DO 120 LOOP = 1, JPLAT
+        ROGAUSS(LOOP) = 0.0
+        NOLPTS(LOOP) = 0
+  120 CONTINUE
+C
+C     Clear information about gaussian field definitions
+C
+      NGSPEC  = 0
+      NIGAUSO = 0
+      NOGAUSO = 0
+      HIGAUST = 'X'
+      HOGAUST = 'X'
+C
+C     Clear rotation angle values.
+C
+      NOROTA(1) = 0
+      NOROTA(2) = 0
+      LNOROTA   = .FALSE.
+      LO12PT = .TRUE.
+      LMETHOD = .FALSE.
+      LNNLSM = .FALSE.
+C
+C     Clear style and frame values
+C
+      NOFRAME = 0
+      NOSTYLE = JPSMARS
+C
+C     Clear flags showing how to deal with legendre coefficients
+C
+      LFILEIO = .FALSE.
+      LMEMORY = .FALSE.
+      LSHARED = .FALSE.
+      LON_FLY = .FALSE.
+      LMAPPED = .FALSE.
+      LIFIRST = .TRUE.
+C
+C     Clear fields for ISLSCP processing
+C
+      IF( LNIISCL ) THEN
+        CALL JFREE(NIPOGRB)
+        CALL JFREE(NIPNGRB) 
+      ENDIF
+      LNIISCL = .FALSE.
+C
+C     ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/consint.F90 b/interpolation/consint.F90
new file mode 100755
index 0000000..2ad20b0
--- /dev/null
+++ b/interpolation/consint.F90
@@ -0,0 +1,424 @@
+SUBROUTINE CONSINT (KLAT_IN, KLON_IN, PLAT_IN, KIN,&
+                         & KLAT_OUT,KLON_OUT,PLAT_OUT,KOUT,&
+                         & PFLD_IN, PFLD_OUT, &
+                         & LDPAR)
+
+!    Purpose.
+!    --------
+!      Conserving bicubic interpolation of grid field from model 
+!      resolution to grid defined by input parameter. Assumes the 
+!      whole field is in memory.
+
+!    Explicit arguments:
+!    -------------------
+
+!    Input:
+!      KLAT_IN  - number of latitude rows of the input grid
+!      KLON_IN  - number of longitudes for each row of the input grid
+!      PLAT_IN  - latitude (degrees) of each row of the input grid
+!      KIN      - size of input array
+!      KLAT_OUT - number of latitude rows of the output grid
+!      KLON_OUT - number of longitudes for each row of the output grid
+!      PLAT_OUT - latitude (degrees) of each row of the output grid
+!      KOUT     - size of output array
+!      PFLD_IN  - array of grid values at input resolution
+
+!    Output:
+!      PFLD_OUT - array of interpolated values
+
+!    Optional:
+!      LDPAR    - parity for extra-polar calculations
+!                 .TRUE. for scalar fields
+!                 .FASE. for vector fields
+
+!    Author.
+!    -------
+!      E. Holm - modification of GRID_BICUBIC by Y.Tremolet
+
+!    Modifications.
+!    --------------
+!      Original: 27/05/04
+!      20050507 Elias Holm: Introduce order and limiter in call and
+!                           generalize code for up to quintic interpolation
+!        Y.Tremolet    26-Jan-2005 Added optional arguments
+!      20080204 Elias Holm: Surface pressure on input/output and
+!                           simplified
+!      20081015 Elias Holm: Simplify and reorder calculations for speed
+!      20101230 Elias Holm: Simplified version without pressure thickness 
+!                           weighting
+!      20110125 Elias Holm: Latitude inputs in degrees
+!     ------------------------------------------------------------------
+
+IMPLICIT NONE
+
+INTEGER,INTENT(IN)    :: KLAT_IN 
+INTEGER,INTENT(IN)    :: KLON_IN(KLAT_IN) 
+REAL   ,INTENT(IN)    :: PLAT_IN(KLAT_IN) 
+INTEGER,INTENT(IN)    :: KIN 
+INTEGER,INTENT(IN)    :: KLAT_OUT 
+INTEGER,INTENT(IN)    :: KLON_OUT(KLAT_OUT) 
+REAL   ,INTENT(IN)    :: PLAT_OUT(KLAT_OUT) 
+INTEGER,INTENT(IN)    :: KOUT 
+REAL   ,INTENT(IN)    :: PFLD_IN(KIN)
+REAL   ,INTENT(OUT)   :: PFLD_OUT(KOUT) 
+LOGICAL, OPTIONAL, INTENT(IN)    :: LDPAR
+
+INTEGER :: IND_IN  (KLAT_IN)
+INTEGER :: ILON_IN (-2:KLAT_IN+3)
+REAL    :: ZLAT_IN (-2:KLAT_IN+3)
+REAL    :: ZLON_IN (-2:KLAT_IN+3)
+REAL    :: ZDLAT_IN(-2:KLAT_IN+3), ZDLATI_IN(-2:KLAT_IN+3)
+REAL    :: ZDLON_IN(-2:KLAT_IN+3), ZDLONI_IN(-2:KLAT_IN+3)
+REAL    :: ZHLAT_IN(-2:KLAT_IN+3)
+REAL    :: ZHLON_IN(-2:KLAT_IN+3)
+REAL    :: ZDHLAT_IN(-2:KLAT_IN+3), ZDHLATI_IN(-2:KLAT_IN+3)
+REAL    :: ZG_IN   (-2:KLAT_IN+3)
+INTEGER :: ILAT_IO  (0:KLAT_OUT)
+REAL    :: ZLAT_OUT (0:KLAT_OUT), ZLON_OUT (1:KLAT_OUT)
+REAL    :: ZDLAT_OUT(1:KLAT_OUT), ZDLON_OUT(1:KLAT_OUT)
+REAL    :: ZHLAT_OUT(1:KLAT_OUT), ZHLON_OUT(1:KLAT_OUT)
+REAL    :: ZG_OUT   (1:KLAT_OUT)
+
+INTEGER :: J, JLAT, JLON, JNUM, JINX, JINY, JINYD, JOUTY,IRET
+INTEGER :: JXMAX_IN, JXMAX_OUT, JYMAX_OUT, IBL
+INTEGER :: JBL, IBL_OUT, JINYSTA, JINYEND, IBLATSTA_OUT(1:KLAT_OUT)
+INTEGER :: IBLATEND_OUT(1:KLAT_OUT), IBLON_OUT(1:KLAT_OUT)
+REAL    :: ZSUM, ZOUT, ZX, ZY, ZY2, ZDHI
+REAL    :: ZC(0:3), ZDC, ZDL, ZDLL, ZDR, ZDRR, ZCC2, ZCC3
+REAL    :: ZMINMOD, ZFRAC, ZCURVLIM, ZLIML, ZLIMR, ZLIM
+REAL    :: ZPARITY, ZPRIMADD
+REAL, ALLOCATABLE :: ZPRIMX(:,:), ZPRIMY(:,:), ZPRIM(:,:), ZFLD_IN(:)
+REAL, ALLOCATABLE :: ZDIFX(:,:), ZDIFY(:,:), ZOUTPRE(:)
+
+REAL    :: RPI, RD2R
+
+!     ------------------------------------------------------------------
+ZMINMOD(ZDC)=(0.5+SIGN(0.5,ZDC))*MIN(1.,ABS(ZDC))
+ZFRAC(ZDC,ZDR)=ZDC/SIGN(ABS(ZDR)+1.E-30,ZDR)
+ZCURVLIM(ZDL,ZDR)=SIGN(MIN(ABS(ZDL),ABS(ZDR)/3.),ZDL)
+
+
+!     *    0. CONSTANTS AND FUNCTIONS
+
+RPI=ACOS(-1.)
+RD2R=RPI/180.
+ZCC2=1.0/1536.
+ZCC3=1.0/15360.
+
+ZPARITY=1.0
+IF (PRESENT(LDPAR)) THEN
+  IF (.NOT.LDPAR) ZPARITY=-1.0
+ENDIF
+
+ALLOCATE(ZFLD_IN(KIN))
+DO J=1,KIN
+  ZFLD_IN(J)=PFLD_IN(J)
+ENDDO
+
+!     *    1. INPUT GRID AND FIELD
+
+!*         1.1 Geometry of input grid
+!              Assuming lat_(j+.5) = 0.5*(lat_(j) + lat_(j+1))
+
+ZLAT_IN(0)      = SIGN(RPI/2.,RD2R*PLAT_IN(1))
+ZLAT_IN(KLAT_IN)= SIGN(RPI/2.,RD2R*PLAT_IN(KLAT_IN))
+JNUM=1
+JXMAX_IN=0
+DO JLAT=1,KLAT_IN
+  IF (JLAT<KLAT_IN) ZLAT_IN(JLAT)=RD2R*0.5*(PLAT_IN(JLAT)+PLAT_IN(JLAT+1))
+  ZDLAT_IN(JLAT)=ABS(ZLAT_IN(JLAT-1)-ZLAT_IN(JLAT))
+  ILON_IN(JLAT)=KLON_IN(JLAT)
+  ZDLON_IN(JLAT)=2.*RPI/ILON_IN(JLAT)
+  IND_IN(JLAT)=JNUM
+  JNUM=JNUM+ILON_IN(JLAT)
+  JXMAX_IN=MAX(JXMAX_IN,ILON_IN(JLAT))
+!              Starting longitude (must be less or equal to zero)
+  ZLON_IN(JLAT)=-ZDLON_IN(JLAT)/2.
+!              Scale factors
+  ZHLON_IN(JLAT) = (SIN(ZLAT_IN(JLAT-1))-SIN(ZLAT_IN(JLAT)))/ZDLAT_IN(JLAT)
+  ZHLAT_IN(JLAT) = 1.
+  ZG_IN(JLAT)=ZHLON_IN(JLAT)*ZHLAT_IN(JLAT)*ZDLON_IN(JLAT)*ZDLAT_IN(JLAT)
+ENDDO
+
+!          1.1.1 Extension over poles
+! Starting longitude for extension over the poles for even ILON_IN is 0.,
+! and for odd ILON_IN shift by half a gridcell to -RPI/ILON_IN.
+
+DO JINY = 1, 3
+  ILON_IN (1-JINY)       = ILON_IN (JINY)
+  ZDLAT_IN(1-JINY)       = ZDLAT_IN(JINY)
+  ZDLON_IN(1-JINY)       = ZDLON_IN(JINY)
+  ZHLAT_IN(1-JINY)       = ZHLAT_IN(JINY)
+  ZHLON_IN(1-JINY)       = ZHLON_IN(JINY)
+  ZG_IN   (1-JINY)       = ZG_IN   (JINY)
+  ZLAT_IN (1-JINY)       = 2.*ZLAT_IN(0)-ZLAT_IN(JINY-1)
+  ZLON_IN(1-JINY)        = ZLON_IN(JINY)&
+                          &+MOD(ILON_IN(1-JINY),2)*RPI/ILON_IN(1-JINY)
+  ILON_IN (KLAT_IN+JINY) = ILON_IN (KLAT_IN+1-JINY)
+  ZDLAT_IN(KLAT_IN+JINY) = ZDLAT_IN(KLAT_IN+1-JINY)
+  ZDLON_IN(KLAT_IN+JINY) = ZDLON_IN(KLAT_IN+1-JINY)
+  ZHLAT_IN(KLAT_IN+JINY) = ZHLAT_IN(KLAT_IN+1-JINY)
+  ZHLON_IN(KLAT_IN+JINY) = ZHLON_IN(KLAT_IN+1-JINY)
+  ZG_IN   (KLAT_IN+JINY) = ZG_IN   (KLAT_IN+1-JINY)
+  ZLAT_IN (KLAT_IN+JINY) = 2.*ZLAT_IN(KLAT_IN)-ZLAT_IN(KLAT_IN-JINY)
+  ZLON_IN (KLAT_IN+JINY) = ZLON_IN (KLAT_IN+1-JINY)&
+                          &+MOD(ILON_IN(KLAT_IN+JINY),2)*RPI/ILON_IN(KLAT_IN+JINY)
+ENDDO
+
+!              1.1.2 Inverses
+ZDLONI_IN(:)=1./ZDLON_IN(:)
+ZDLATI_IN(:)=1./ZDLAT_IN(:)
+ZDHLAT_IN(:)=ZDLAT_IN(:)*ZHLAT_IN(:)
+ZDHLATI_IN(:)=1./ZDHLAT_IN(:)
+
+!*         1.2 Primitive function of input field with respect to longitude
+!              Valid at grid-cell longitude boundaries.
+!              Make an extension zone of +/-3 grid-cells for interpolation.
+!              The extension over the poles shifts fields by RPI.
+
+!          1.2.1 Primitive function
+ALLOCATE(ZPRIMX(-2:JXMAX_IN+3,-2:KLAT_IN+3))
+ALLOCATE(ZDIFX (-2:JXMAX_IN+2,-2:KLAT_IN+3))
+
+DO JLAT=1,KLAT_IN
+  ZSUM=0.
+  DO JLON=1,ILON_IN(JLAT)
+    ZSUM=ZSUM+ZFLD_IN(IND_IN(JLAT)-1+JLON)*ZG_IN(JLAT)
+    ZPRIMX(JLON,JLAT)=ZSUM
+  ENDDO
+ENDDO
+
+!          1.2.2 The extension over the poles shifts fields by RPI.
+
+DO JINY = 1, 3
+  ZSUM=0.
+  DO JLON=1,ILON_IN(1-JINY)
+    JINX = 1 + MOD( ILON_IN(1-JINY)/2 + JLON - 1, ILON_IN(1-JINY) )
+    ZSUM=ZSUM+ZPARITY*ZFLD_IN(IND_IN(JINY)-1+JINX)*ZG_IN(1-JINY)
+    ZPRIMX(JLON,1-JINY) = ZSUM
+  ENDDO
+  ZSUM=0.
+  DO JLON=1,ILON_IN(KLAT_IN+JINY)
+    JINX = 1+MOD( ILON_IN(KLAT_IN+JINY)/2 + JLON - 1, ILON_IN(KLAT_IN+JINY) )
+    ZSUM=ZSUM+ZPARITY*ZFLD_IN(IND_IN(KLAT_IN+1-JINY)-1+JINX)*ZG_IN(KLAT_IN+JINY)
+    ZPRIMX(JLON,KLAT_IN+JINY) = ZSUM
+  ENDDO
+ENDDO
+
+!          1.2.3 Extension in x-direction
+
+DO JINX = 1, 3
+  DO JLAT=-2,KLAT_IN+3
+    ZPRIMX(1-JINX            ,JLAT) =-ZPRIMX(ILON_IN(JLAT),JLAT)&
+                                    &+ZPRIMX(ILON_IN(JLAT)+1-JINX,JLAT)
+    ZPRIMX(ILON_IN(JLAT)+JINX,JLAT) = ZPRIMX(ILON_IN(JLAT),JLAT)&
+                                    &+ZPRIMX(JINX,JLAT)
+  ENDDO
+ENDDO
+
+!              1.2.5 Difference of primitive function
+
+DO JLAT=-2,KLAT_IN+3
+  DO JLON=-2,ILON_IN(JLAT)+2
+    ZDIFX(JLON,JLAT)=ZPRIMX(JLON+1,JLAT)-ZPRIMX(JLON,JLAT)
+  ENDDO
+ENDDO
+
+
+
+!     *    2. OUTPUT GRID AND FIELD
+
+!*         2.1 Geometry of output grid
+!              Output grid can be finer or coarser than input grid.
+!              Therefore dimensioning [KLAT_IN/KLAT_OUT]+4+1
+!              to allow for 4th order interpolation of primitive
+!              function wrt latitude at top and bottom of grid-cell
+!              boundaries (output latitudes).
+
+!          2.1.1 Grid blocks with constant longitude spacing
+
+IBL_OUT = 1
+IBLATSTA_OUT(1) = 1
+IBLON_OUT(1) = KLON_OUT(1)
+DO JLAT=2,KLAT_OUT
+  IF((KLON_OUT(JLAT)/=KLON_OUT(JLAT-1)) .OR. (JLAT == KLAT_OUT/2))THEN
+    IBL_OUT = IBL_OUT + 1
+    IBLATEND_OUT(IBL_OUT-1) = JLAT-1
+    IBLATSTA_OUT(IBL_OUT) = JLAT
+    IBLON_OUT(IBL_OUT) = KLON_OUT(JLAT)
+  ENDIF
+ENDDO
+IBLATEND_OUT(IBL_OUT)=KLAT_OUT
+
+!          2.1.2 Latitudes and scale factors
+
+ZLAT_OUT(0)       = SIGN(RPI/2.,RD2R*PLAT_OUT(1))
+ZLAT_OUT(KLAT_OUT)= SIGN(RPI/2.,RD2R*PLAT_OUT(KLAT_OUT))
+DO JLAT=1,KLAT_OUT
+  IF (JLAT<KLAT_OUT) ZLAT_OUT(JLAT)=RD2R*0.5*(PLAT_OUT(JLAT)+PLAT_OUT(JLAT+1))
+  ZDLAT_OUT(JLAT)=ABS(ZLAT_OUT(JLAT-1)-ZLAT_OUT(JLAT))
+  ZDLON_OUT(JLAT)=2.*RPI/KLON_OUT(JLAT)
+!              Starting longitude (must be less or equal to zero)
+  ZLON_OUT(JLAT)=-ZDLON_OUT(JLAT)/2.
+!              Scale factors
+  ZHLON_OUT(JLAT) = ABS(SIN(ZLAT_OUT(JLAT-1))-SIN(ZLAT_OUT(JLAT)))/ZDLAT_OUT(JLAT)
+  ZHLAT_OUT(JLAT) = 1.
+  ZG_OUT(JLAT) = ZHLON_OUT(JLAT)*ZHLAT_OUT(JLAT)*ZDLON_OUT(JLAT)*ZDLAT_OUT(JLAT)
+ENDDO
+
+!          2.1.3 Closest input row above each output row
+
+ILAT_IO(0)=0
+DO JLAT=1,KLAT_OUT
+  ILAT_IO(JLAT)=ILAT_IO(JLAT-1)
+  DO WHILE (ZLAT_IN(ILAT_IO(JLAT)) > ZLAT_OUT(JLAT))
+    ILAT_IO(JLAT)=ILAT_IO(JLAT)+1
+  ENDDO
+  ILAT_IO(JLAT)=ILAT_IO(JLAT)-1
+ENDDO
+JXMAX_OUT=0
+JYMAX_OUT=0
+DO JBL=1, IBL_OUT
+  JXMAX_OUT = MAX(JXMAX_OUT,IBLON_OUT(JBL))
+  JYMAX_OUT = MAX(JYMAX_OUT,IBLATEND_OUT(JBL)-IBLATSTA_OUT(JBL)+1)
+ENDDO
+
+  
+!*         2.2 Interpolation of primitive function
+
+JNUM=0
+ALLOCATE(ZPRIM(0:JXMAX_OUT,-3:3+KLAT_IN))
+ALLOCATE(ZDIFY(1:JXMAX_OUT,-3:3+KLAT_IN))
+ALLOCATE(ZPRIMY(0:JXMAX_OUT,0:JYMAX_OUT))
+ALLOCATE(ZOUTPRE(0:JXMAX_OUT))
+DO JBL=1, IBL_OUT
+
+!          2.2.1 Interpolate PF of input field with respect to longitude
+!                to output grid-cell longitude boundaries.
+!                (output longitude / input latitude)
+
+  JINYSTA=ILAT_IO(IBLATSTA_OUT(JBL)-1)
+  JINYEND=ILAT_IO(IBLATEND_OUT(JBL))
+  JINYD=JINYEND-JINYSTA
+  DO JLON=0,IBLON_OUT(JBL)
+    ZPRIM(JLON,-3)=0.
+    ZOUTPRE(JLON)=ZLON_OUT(IBLATSTA_OUT(JBL))+JLON*ZDLON_OUT(IBLATSTA_OUT(JBL))
+  ENDDO
+  DO JINY=JINYSTA-2,JINYEND+3
+    DO JLON=0,IBLON_OUT(JBL)
+      ZOUT =  ZOUTPRE(JLON)-ZLON_IN(JINY)
+      ZPRIMADD=0.
+      IF (ZOUT<0.) THEN
+        ZOUT    = ZOUT+ILON_IN(JINY)*ZDLON_IN(JINY)
+        ZPRIMADD=-ZPRIMX(ILON_IN(JINY),JINY)
+      ENDIF
+      IF (ZOUT>ILON_IN(JINY)*ZDLON_IN(JINY)) THEN
+        ZOUT    = ZOUT-ILON_IN(JINY)*ZDLON_IN(JINY)
+        ZPRIMADD= ZPRIMX(ILON_IN(JINY),JINY)
+      ENDIF
+      JINX=INT(ZOUT*ZDLONI_IN(JINY))
+      ZX=-1.+2.*(ZOUT-JINX*ZDLON_IN(JINY))*ZDLONI_IN(JINY)
+!          2.2.1.1 Basic coefficients
+      ZDLL=ZDIFX(JINX-2,JINY)
+      ZDL =ZDIFX(JINX-1,JINY)
+      ZDC =ZDIFX(JINX  ,JINY)
+      ZDR =ZDIFX(JINX+1,JINY)
+      ZDRR=ZDIFX(JINX+2,JINY)
+      ZC(0) = (ZPRIMX(JINX+1,JINY)+ZPRIMX(JINX  ,JINY))*.5
+      ZC(1) = ZDC*.5
+!          2.2.1.2 Economization of the power series (5th to 3rd order)
+      ZC(2)=(130.*(ZDR-ZDL)-17.*(ZDRR-ZDLL))*ZCC2
+      ZC(3)=(452.*(ZDR-2.*ZDC+ZDL)-33.*(ZDRR-2.*ZDC+ZDLL))*ZCC3
+!          2.2.1.3 Limiting
+      ZC(3) = ZCURVLIM(ZC(3),ZC(2))
+      ZLIMR = ZMINMOD( ZFRAC( (ZDR-ZDC)*.5,       2.*( ZC(2)+ZC(3) ) ) )
+      ZLIML = ZMINMOD( ZFRAC( (ZDL-ZDC)*.5, ZLIMR*2.*(-ZC(2)+ZC(3) ) ) )
+      ZLIM  = ZLIMR*ZLIML
+      ZC(2) = ZLIM*ZC(2)
+      ZC(3) = ZLIM*ZC(3)
+!          2.2.1.5 Evaluation
+      ZPRIM(JLON,JINY-JINYSTA)= ZC(0)+ZC(1)*ZX   &
+                 & +(ZX*ZX-1.)*(ZC(2)+ZC(3)*ZX)   &
+                 & +ZPRIMADD
+    ENDDO
+  ENDDO
+
+!          2.2.2  Differentiate wrt longitude
+
+  DO JINY=-2,3+JINYD
+    ZDHI = 1./(ZDLON_OUT(IBLATSTA_OUT(JBL))*ZHLON_IN(JINYSTA+JINY))
+    DO JLON=IBLON_OUT(JBL),1,-1
+      ZPRIM(JLON,JINY) = (ZPRIM(JLON,JINY)-ZPRIM(JLON-1,JINY))*ZDHI
+    ENDDO
+  ENDDO
+
+!          2.2.3 PF wrt latitude and scalefactor*cellarea (G=h_y, dA=dy ==> G*dA)
+!                (output longitude / input latitude)
+
+  DO JINY=-2,3+JINYD
+    DO JLON=1, IBLON_OUT(JBL)
+      ZPRIM(JLON,JINY)= ZPRIM(JLON,JINY-1)+ZPRIM(JLON,JINY)
+    ENDDO
+  ENDDO
+  DO JINY=-2,2+JINYD
+    DO JLON=1, IBLON_OUT(JBL)
+      ZDIFY(JLON,JINY) = (ZPRIM(JLON,JINY+1)-ZPRIM(JLON,JINY))*ZDHLATI_IN(JINYSTA+JINY+1)
+    ENDDO
+  ENDDO
+
+!          2.2.4 Interpolation PF to output latitude cell boundaries
+
+  DO JOUTY = 0, IBLATEND_OUT(JBL)-IBLATSTA_OUT(JBL)+1
+    JLAT =         JOUTY+IBLATSTA_OUT(JBL)-1
+    JINY = ILAT_IO(JOUTY+IBLATSTA_OUT(JBL)-1)-JINYSTA
+    ZY=-1.+2.*(-ZLAT_OUT(JLAT)+ZLAT_IN(JINYSTA+JINY))*ZDLATI_IN(JINYSTA+JINY+1)
+    ZY2 = (ZY*ZY-1.)
+    DO JLON=1, IBLON_OUT(JBL)
+!          2.2.4.1 Basic coefficients
+      ZDLL=ZDIFY(JLON,JINY-2)
+      ZDL =ZDIFY(JLON,JINY-1)
+      ZDC =ZDIFY(JLON,JINY  )
+      ZDR =ZDIFY(JLON,JINY+1)
+      ZDRR=ZDIFY(JLON,JINY+2)
+      ZC(0) = (ZPRIM(JLON,JINY+1)+ZPRIM(JLON,JINY))*.5
+      ZC(1) = ZDC*.5
+!          2.2.1.2 Economization of the power series (5th to 3rd order)
+      ZC(2)=(130.*(ZDR-ZDL)-17.*(ZDRR-ZDLL))*ZCC2
+      ZC(3)=(452.*(ZDR-2.*ZDC+ZDL)-33.*(ZDRR-2.*ZDC+ZDLL))*ZCC3
+!          2.2.1.3 Limiting
+      ZC(3) = ZCURVLIM(ZC(3),ZC(2))
+      ZLIMR = ZMINMOD( ZFRAC( (ZDR-ZDC)*.5,       2.*( ZC(2)+ZC(3) ) ) )
+      ZLIML = ZMINMOD( ZFRAC( (ZDL-ZDC)*.5, ZLIMR*2.*(-ZC(2)+ZC(3) ) ) )
+      ZLIM  = ZLIMR*ZLIML
+      ZC(2) = ZLIM*ZC(2)
+      ZC(3) = ZLIM*ZC(3)
+!          2.2.5.4 Back to real coefficients
+      ZC(1:3) = ZDHLAT_IN(JINYSTA+JINY+1)*ZC(1:3)
+!          2.2.4.5 Evaluation
+      ZPRIMY(JLON,JOUTY)= ZC(0)+ZC(1)*ZY+ZY2*(ZC(2)+ZC(3)*ZY)
+    ENDDO
+  ENDDO
+
+!          2.2.5 Take difference of primitive function to get output field
+!                (output longitude / output latitude)
+
+  DO JOUTY = 1, IBLATEND_OUT(JBL)-IBLATSTA_OUT(JBL)+1
+    JLAT = JOUTY+IBLATSTA_OUT(JBL)-1
+    ZDHI = 1./(ZDLAT_OUT(JLAT)*ZHLAT_OUT(JLAT))
+    DO JLON=1, IBLON_OUT(JBL)
+      JNUM=JNUM+1
+      PFLD_OUT(JNUM) =  (ZPRIMY(JLON,JOUTY)-ZPRIMY(JLON,JOUTY-1))*ZDHI
+    ENDDO
+  ENDDO
+ENDDO
+IF (ALLOCATED(ZPRIM ))  DEALLOCATE(ZPRIM )
+IF (ALLOCATED(ZPRIMY))  DEALLOCATE(ZPRIMY)
+IF (ALLOCATED(ZDIFY))   DEALLOCATE(ZDIFY)
+IF (ALLOCATED(ZOUTPRE)) DEALLOCATE(ZOUTPRE)
+
+IF (ALLOCATED(ZPRIMX)) DEALLOCATE(ZPRIMX)
+IF (ALLOCATED(ZFLD_IN)) DEALLOCATE(ZFLD_IN)
+IF (ALLOCATED(ZDIFX)) DEALLOCATE(ZDIFX)
+
+
+END SUBROUTINE CONSINT
diff --git a/interpolation/createSharedMemoryCoefficients.c b/interpolation/createSharedMemoryCoefficients.c
new file mode 100755
index 0000000..3d60256
--- /dev/null
+++ b/interpolation/createSharedMemoryCoefficients.c
@@ -0,0 +1,195 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/sem.h>
+
+extern int debugSet;
+
+#include "sharedmemory.h"
+#include "fortdefs.h"
+
+void createSharedMemoryCoefficients(
+     fortint Type,       /* SP2LL, SP2QG, .. */
+     fortint Truncation, /* spectral truncation */
+     fortreal Grid,      /* grid spacing or gaussian number */
+     fortint Numlat,     /* number of latitudes in the shared memory array */
+     key_t memoryKey,    /* shared memory key */
+     int size)           /* size of the shared memory */
+{
+int type = (int) Type;
+struct sembuf bufs[1];
+union semun {
+  int             val;
+  struct semid_ds *buf;
+  ushort          *array;
+} semvalues;
+fortreal * array;
+int shmflg, shmid;
+char * shmaddr;
+int status, i, oldmask;
+char mode[] = "00666";
+fortint gaussianNumber, one = 1, first = 1, returnCode;
+int semaphoreId, value;
+fortreal northPole = 90.0;
+
+/*
+// If the semaphore for the shared memory already exists,
+// wait for it to become ready to read, and return
+*/
+    if( DEBUG ) printf("createSharedMemoryCoefficients: see if shared memory semaphore exists\n");
+    semaphoreId = semget(memoryKey,1,0);
+
+    if( semaphoreId != -1 ) {
+      bufs[0].sem_num = 0;
+      bufs[0].sem_op  = -READY_TO_READ;
+      bufs[0].sem_flg = 0;
+      if( DEBUG ) printf("createSharedMemoryCoefficients: wait for shared memory semaphore\n");
+      status = semop(semaphoreId,bufs,(size_t)1);
+
+      semvalues.val = READY_TO_READ;
+      value = semctl((int)semaphoreId, (int)0, (int)SETVAL,semvalues);
+      if( DEBUG ) printf("createSharedMemoryCoefficients: set shared memory semaphore readable\n");
+      return;
+    }
+/*
+// Create semaphore for the shared memory array
+*/
+    if( DEBUG ) {
+      printf("createSharedMemoryCoefficients: have to create shared memory segment\n");
+      printf("createSharedMemoryCoefficients: so create shared memory semaphore\n");
+    }
+    oldmask = umask(000);
+    semaphoreId = semget(memoryKey,1,IPC_CREAT | 0666);
+    if( semaphoreId == -1 ) {
+      perror("creator: failed to create smaphore");
+      exit(1);
+    }
+    (void) umask(oldmask);
+/*
+// Create shared segment id
+*/
+    if( DEBUG ) printf("createSharedMemoryCoefficients: get shared memory segment\n");
+    (void) umask(0);
+    shmflg = IPC_CREAT | 0666;
+    shmid = shmget(memoryKey, (size_t)size, shmflg);
+    if ( shmid < 0 ) {
+       perror("shmget error");
+       exit(1);
+    }
+/*
+// Attach the shared segment
+*/
+    if( DEBUG ) printf("createSharedMemoryCoefficients: attach shared memory segment\n");
+    shmaddr = (char *) NULL;
+    shmflg = 0;
+    array = (fortreal *) shmat( shmid, shmaddr, shmflg);
+    if ( array == (fortreal *) -1 ) {
+       perror("shmat error");
+       exit(1);
+    }
+/*
+// Put some data into the shared segment
+*/
+    if( DEBUG ) printf("createSharedMemoryCoefficients: put data into the shared segment\n");
+    returnCode = 0;
+
+    JDEBUG();
+
+    switch( type ) {
+
+      case SP2LL:
+        if( DEBUG ) printf("createSharedMemoryCoefficients: call NMAKLL for SP2LL\n");
+        NMAKLL( &Truncation, &Grid, &northPole, &Numlat, array, &returnCode);
+        if( returnCode ) {
+          printf("Problem with NMAKLL, return code = %d\n", returnCode);
+          exit(1);
+        }
+        break;
+
+      case SP2RG:
+      case SP2QG:
+/*
+*/
+       {
+        char htype[2];
+        fortreal * plat;
+        fortint * kpts;
+
+        gaussianNumber = (fortint) Grid;
+
+        plat = (fortreal *) malloc( gaussianNumber*2*sizeof(fortreal));
+        if( plat == NULL ) {
+          perror("createSharedMemoryCoefficients: plat malloc problem");
+          exit(1);
+        }
+
+        kpts = (fortint *) malloc( gaussianNumber*2*sizeof(fortint));
+        if( kpts == NULL ) {
+          perror("createSharedMemoryCoefficients: kpts malloc problem");
+          exit(1);
+        }
+
+        if( type == SP2RG ) {
+          if( DEBUG ) printf("createSharedMemoryCoefficients: handle SP2RG\n");
+          strcpy(htype,"F");
+        }
+        else {
+          if( DEBUG ) printf("createSharedMemoryCoefficients: handle SP2QG\n");
+          strcpy(htype,"R");
+        }
+
+        if( DEBUG ) printf("createSharedMemoryCoefficients: call JGETGG\n");
+        JGETGG(&gaussianNumber, &htype, plat, kpts, &returnCode, one);
+        if( returnCode ) {
+          printf("Problem with JGETGG, return code = %d\n", returnCode);
+          exit(1);
+        }
+        if( DEBUG ) printf("createSharedMemoryCoefficients: call NMAKGG\n");
+        NMAKGG(&Truncation, &first, plat, &Numlat, array, &returnCode);
+        if( returnCode ) {
+          printf("Problem with NMAKGG, return code = %d\n", returnCode);
+          exit(1);
+        }
+
+        free(plat);
+        free(kpts);
+        break;
+       }
+/*
+*/
+      default:
+        printf("creator: Type %d not yet handled\n", type);
+        exit(1);
+    }
+/*
+// Set the semaphore to make the memory readable for cooperating processes
+*/
+    if( DEBUG ) printf("createSharedMemoryCoefficients: set semaphore to make memory readable\n");
+    semvalues.val = READY_TO_READ;
+    value = semctl((int)semaphoreId, (int)0, (int)SETVAL,semvalues);
+/*
+// Detach the shared segment
+*/
+    if( DEBUG ) printf("createSharedMemoryCoefficients: detach the shared segment\n");
+    status = shmdt(array);
+    if ( status < 0 ) {
+       perror("shmdt error");
+       exit(1);
+    }
+
+    return;
+}
diff --git a/interpolation/csum.F b/interpolation/csum.F
new file mode 100755
index 0000000..d1dae7a
--- /dev/null
+++ b/interpolation/csum.F
@@ -0,0 +1,84 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      COMPLEX FUNCTION CSUM (KN, UVEC, KNCX)                         
+C                                                                       
+C---->
+C**** *CSUM* - ROUTINE WHICH IMPLEMENTS THE BLAS ROUTINE OF THE         
+C              SAME NAME                                                
+C                                                                       
+C     PURPOSE.                                                          
+C     --------                                                          
+C                                                                       
+C     SIMPLE REPLACEMENT FOR IBM                                        
+C                                                                       
+C**   INTERFACE.                                                        
+C     ----------                                                        
+C                                                                       
+C     * CV = CSUM (KN, UVEC, KNCX) *                                    
+C                                                                       
+C                                                                       
+C     METHOD.                                                           
+C     -------                                                           
+C                                                                       
+C     CREATE COMPLEX SUM OF COMPLEX VECTOR                              
+C                                                                       
+C     EXTERNALS.                                                        
+C     ----------                                                        
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C     REFERENCE.                                                        
+C     ----------                                                        
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C     AUTHOR.                                                           
+C     -------                                                           
+C                                                                       
+C     K. FIELDING         * ECMWF *     FEB 1992.                       
+C                                                                       
+C     MODIFICATIONS.                                                    
+C     --------------                                                    
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C     COMMON BLOCKS USED                                                
+C     -------------------                                               
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C----<
+      INTEGER KN, KNCX                                                  
+      COMPLEX UVEC (*)                                               
+C                                                                       
+      INTEGER IP                                                        
+      COMPLEX CHOLD                                                  
+C                                                                       
+C     1.    MAIN LOOP OF CODE                                           
+C           ----------------------------------------------              
+C                                                                       
+  100 CONTINUE                                                          
+#ifndef CRAY
+      CHOLD = (0.0D0, 0.0D0)                                            
+#else
+      CHOLD = (0.0, 0.0)                                            
+#endif
+C                                                                       
+      DO 110 IP = 0, KN - 1                                             
+         CHOLD = CHOLD + UVEC (1 + IP * KNCX)                           
+  110 CONTINUE                                                          
+C                                                                       
+      CSUM = CHOLD                                                      
+C                                                                       
+C     END OF ROUTINE                                                    
+C                                                                       
+      RETURN                                                            
+      END                                                               
diff --git a/interpolation/current.h b/interpolation/current.h
new file mode 100755
index 0000000..6d0488f
--- /dev/null
+++ b/interpolation/current.h
@@ -0,0 +1,55 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "current.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains information about gaussian field definitions
+C     currently held in common blocks.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "current.h"
+C
+C     Common block usage
+C     __________________
+C
+C     NIGAUSO - Resolution of input gaussian field definition
+C               currently held in RIGAUSS, MILLEN.
+C     NOGAUSO - Resolution of output gaussian field definition
+C               currently held in ROGAUSS, NOLPTS.
+C     HIGAUST - Type (R,F,U) of input gaussian field definition
+C               currently held in RIGAUSS, MILLEN.
+C     HOGAUST - Type (R,F,U) of output gaussian field definition
+C               currently held in ROGAUSS, NOLPTS.
+C     HIGAUST
+C     HOGAUST
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers     ECMWF        Sep 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C     _______________________________________________________
+C
+C
+      COMMON /CURRENT_STATE/ NIGAUSO, NOGAUSO, HIGAUST, HOGAUST
+      SAVE /CURRENT_STATE/
+      INTEGER NIGAUSO,NOGAUSO
+      CHARACTER*1 HIGAUST, HOGAUST
diff --git a/interpolation/ddstyle.F b/interpolation/ddstyle.F
new file mode 100755
index 0000000..56574eb
--- /dev/null
+++ b/interpolation/ddstyle.F
@@ -0,0 +1,185 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DDSTYLE(FIELD,IN_EW,IN_NS,OUT_EW,OUT_NS,KRET)
+C
+C---->
+C**** DDSTYLE
+C
+C     Purpose
+C     -------
+C
+C     Create a subgrid of an input regular latitude/longitude
+C     grid by selecting points (dissemination style).
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL DDSTYLE(FIELD,IN_EW,IN_NS,OUT_EW,OUT_NS,KRET)
+C
+C     Input
+C     -----
+C
+C     FIELD   - Input regular latitude/longitude gridpoint field.
+C     IN_EW   - East-west increment of input field (degrees * 10*5).
+C     IN_NS   - North-south increment of input field (degrees * 10*5).
+C     OUT_EW  - East-west increment of output field (degrees * 10*5).
+C     OUT_NS  - North-south increment of output field (degrees * 10*5).
+C
+C
+C     Output
+C     ------
+C
+C     FIELD   - Output regular latitude/longitude gridpoint field.
+C     KRET    - Return status code
+C               0 = OK
+C
+C
+C     Method
+C     ------
+C
+C     Area boundaries for output field are adjusted (by shrinking)
+C     if necessary to fit the grid.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs output messages
+C     JDEBUG  - Checks whether the debug flag is to be turned on.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1999
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+#include "nofld.common"
+C
+C     Subroutine arguments
+C
+      REAL FIELD(*)
+      INTEGER IN_EW,IN_NS,OUT_EW,OUT_NS,KRET
+C
+C     Local variables
+C
+      INTEGER N, INC_EW,INC_NS,N_EW,N_NS,LOOPO,LOOPI,NEXT
+      INTEGER NWEST,NEAST, NUM_EW
+      REAL NORTH,WEST,SOUTH,EAST
+      LOGICAL LDEBUG
+C
+C     Externals
+C
+C ------------------------------------------------------------------
+C     Section 1. Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+
+      KRET = 0
+C
+      CALL JDEBUG( )
+      LDEBUG = ( NDBG.GT.0 )
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'DDSTYLE: input E-W increment = ', IN_EW)
+        CALL INTLOG(JP_DEBUG,'DDSTYLE: input N-S increment = ', IN_NS)
+        CALL INTLOG(JP_DEBUG,'DDSTYLE: output E-W increment = ', OUT_EW)
+        CALL INTLOG(JP_DEBUG,'DDSTYLE: output N-S increment = ', OUT_NS)
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 2. Check that output grid is a subset of the input grid.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Fixup input/output field area definitions according to grid
+C     specification.
+C
+      NORTH = REAL(NOAREA(1)) / PPMULT
+      WEST  = REAL(NOAREA(2)) / PPMULT
+      SOUTH = REAL(NOAREA(3)) / PPMULT
+      EAST  = REAL(NOAREA(4)) / PPMULT
+C
+      NWEST = NOAREA(2)
+      NEAST = NOAREA(4)
+      IF( NWEST.LT.0 ) NWEST = NWEST + 36000000
+      IF( NEAST.LT.0 ) NEAST = NEAST + 36000000
+      IF( NEAST.LT.NWEST ) NEAST = NEAST + 36000000
+C
+C     Check increments
+C
+      INC_EW = OUT_EW / IN_EW
+      IF( (INC_EW*IN_EW).NE.OUT_EW ) THEN
+         KRET = 1
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'DDSTYLE: East-west step not multiple of input',JPQUIET)
+          CALL INTLOG(JP_ERROR,'DDSTYLE: Requested step  = ',OUT_EW)
+          CALL INTLOG(JP_ERROR,'DDSTYLE: Input GRIB step = ',IN_EW)
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      INC_NS = OUT_NS / IN_NS
+      IF( (INC_NS*IN_NS).NE.OUT_NS ) THEN
+         KRET = 1
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_ERROR,
+     X     'DDSTYLE: North-south step not multiple of input',JPQUIET)
+          CALL INTLOG(JP_ERROR,'DDSTYLE: Requested step  = ',OUT_NS)
+          CALL INTLOG(JP_ERROR,'DDSTYLE: Input GRIB step = ',IN_NS)
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      N_EW = ( (NEAST - NWEST) / OUT_EW ) + 1
+      N_NS = ( (NOAREA(1) - NOAREA(3)) / OUT_NS ) + 1
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'DDSTYLE: No. of E_W output pts = ', N_EW)
+        CALL INTLOG(JP_DEBUG,'DDSTYLE: No. of N-S output pts = ', N_NS)
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 3. Generate new grid.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Select points for new grid.
+C
+      NUM_EW = NINT((EAST-WEST)*PPMULT)/IN_EW + 1
+C
+      NEXT = 1
+      DO LOOPO = 1, N_NS*INC_NS, INC_NS
+        N = (LOOPO-1)*NUM_EW
+        DO LOOPI = 1, N_EW*INC_EW, INC_EW
+          FIELD(NEXT) = FIELD(N+LOOPI)
+          NEXT = NEXT + 1
+        ENDDO
+      ENDDO
+C
+C ------------------------------------------------------------------
+C     Section 9. Return.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/debug.h b/interpolation/debug.h
new file mode 100755
index 0000000..2d21c38
--- /dev/null
+++ b/interpolation/debug.h
@@ -0,0 +1,97 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "debug.h" - This include file contains a set of basic constants
+C                 interpolation
+C
+C     PURPOSE
+C     _______
+C
+C     Basic constants for the interpolation library
+C
+C     INTERFACE
+C     _________
+C
+C     #include "debug.h"
+C
+C     Input parameters
+C     ________________
+C
+C     NONE
+C
+C     Common block usage
+C     __________________
+C
+C     NONE
+C
+C     EXTERNALS
+C     _________
+C
+C     NONE
+C
+C     METHOD
+C     ______
+C
+C     NONE
+C
+C     REFERENCE
+C     _________
+C
+C     NONE
+C
+C     COMMENTS
+C     ________
+C
+C     Contains sections 0 to 4
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Dec 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     NONE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Area definitions which are really local
+C     _______________________________________________________
+C
+      COMMON /DEBUG/ IIAREA, IOAREA
diff --git a/interpolation/defaults_for_table_001 b/interpolation/defaults_for_table_001
new file mode 100755
index 0000000..fba24df
--- /dev/null
+++ b/interpolation/defaults_for_table_001
@@ -0,0 +1,11 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+002     n     n     n     n       # MSL
+033     y     y     n     n       # U
+034     y     y     n     n       # V
+061     y     n     y     n       # TP
+062     y     n     y     n       # LSP
+063     y     n     y     n       # CP
+064     y     n     y     n       # SF
+065     y     n     y     n       # WESF
+081     n     n     n     y       # LSM
diff --git a/interpolation/defaults_for_table_128 b/interpolation/defaults_for_table_128
new file mode 100755
index 0000000..76dd6d0
--- /dev/null
+++ b/interpolation/defaults_for_table_128
@@ -0,0 +1,14 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+131     y     y     n     n       # U
+132     y     y     n     n       # V
+142     y     n     y     n       # LSP
+143     y     n     y     n       # CP
+144     y     n     y     n       # SF
+151     n     n     n     n       # MSL
+165     y     y     n     n       # 10U
+166     y     y     n     n       # 10V
+172     n     n     n     y       # LSM
+228     y     n     y     n       # TTP
+239     y     n     y     n       # CSF
+240     y     n     y     n       # LSF
diff --git a/interpolation/dssarea.F b/interpolation/dssarea.F
new file mode 100755
index 0000000..8e9d093
--- /dev/null
+++ b/interpolation/dssarea.F
@@ -0,0 +1,509 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION DSSAREA( EW, NS, NORTH, WEST, SOUTH, EAST )
+C
+C---->
+C**** DSSAREA
+C
+C     Purpose
+C     -------
+C
+C     Fixup input/output field area definitions according to grid
+C     specification (dissemination style).
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = DSSAREA( EW, NS, NORTH, WEST, SOUTH, EAST )
+C
+C     Input
+C     -----
+C
+C     For latitude/longitude grids:
+C     EW    =  East-west grid interval (degrees)
+C     NS    =  North-south grid interval (degrees)
+C
+C     For gaussian grids:
+C     EW    =  gaussian grid number
+C     NS    =  0
+C
+C     NORTH =  North latitude (degrees)
+C     WEST  =  West longitude (degrees)
+C     SOUTH =  South latitude (degrees)
+C     EAST  =  East longitude (degrees)
+C
+C     For spherical harmonics:
+C     EW    =  0
+C     NS    =  0
+C     NORTH =  0
+C     WEST  =  0
+C     SOUTH =  0
+C     EAST  =  0
+C
+C
+C     Output
+C     ------
+C
+C     NORTH =  North latitude, adjusted if necessary (degrees)
+C     WEST  =  West longitude, adjusted if necessary (degrees)
+C     SOUTH =  South latitude, adjusted if necessary (degrees)
+C     EAST  =  East longitude, adjusted if necessary (degrees)
+C
+C     The function returns 0 if OK.
+C     Otherwise a non-zero is returned and the values NORTH, WEST,
+C     SOUTH, and EAST are left unchanged.
+C
+C
+C     Method
+C     ------
+C
+C     If default (0/0/0/0) selected for input, input area is set
+C       - to global for lat/long grid 
+C       - to global for gaussian grid 
+C
+C     Output area is adjusted:
+C
+C     (1) by shrinking to fit the default dissemination 0.5x0.5 grid
+C         on its north and west boundaries.
+C     (2) by calculating the east boundary from the new west as an
+C         integral number of new grid west-east increments to fit
+C         inside the specified area.
+C     (3) by calculating the south boundary from the new north as an
+C         integral number of new grid north-south increments to fit
+C         inside the specified area.
+C
+C
+C     Externals
+C     ---------
+C
+C     JGETGG  - Reads the definition of a gaussian grid.
+C     JNORSGG - Finds the lat row in a gauss grid N or S of given lat
+C     INTLOG  - Logs error messages.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1999
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 19200 )
+      REAL*8 RRMULT
+#if (defined hp) && (!defined INTEGER_8)
+      INTEGER NP90, NP360, NFACTOR
+      PARAMETER ( NFACTOR = 10 )
+#else
+      INTEGER*8 NP90, NP360, NFACTOR
+      PARAMETER ( NFACTOR = 1000 )
+#endif
+      INTEGER NR90
+      PARAMETER ( NR90    = 90 )
+      PARAMETER ( NP90    = JP90*NFACTOR )
+      PARAMETER ( NP360   = JP360*NFACTOR )
+      PARAMETER ( RRMULT  = (PPMULT*NFACTOR) )
+C
+C     Function arguments
+C
+      REAL EW, NS, NORTH, WEST, SOUTH, EAST
+C
+C     Local variables
+C
+#if (defined hp) && (!defined INTEGER_8)
+      INTEGER INORTH, IWEST, ISOUTH, IEAST, IEW, INS
+      INTEGER NWEST, NEAST
+#else
+      INTEGER*8 INORTH, IWEST, ISOUTH, IEAST, IEW, INS
+      INTEGER*8 NWEST, NEAST
+#endif
+      INTEGER NGAUSS, NOLD, IRET, KPTS, NWEPTS, NNSPTS
+      DIMENSION KPTS(JPGTRUNC*2)
+      DATA NOLD /0/
+      REAL RNORTH, RSOUTH
+      REAL ONORTH, OWEST, OSOUTH, OEAST
+      LOGICAL LDEFIN, LGAUSS, LSPHERE
+      REAL RGAUSS, RESEW
+      DIMENSION RGAUSS(JPGTRUNC*2)
+      REAL*8 DEW, DNS, DNORTH, DWEST, DSOUTH, DEAST
+      REAL*8 EPS
+C
+C     Externals
+C
+      INTEGER JNORSGG
+C
+      SAVE NOLD, RGAUSS
+C
+C     Statement functions
+C
+      REAL*8 A
+      REAL B
+      REAL*8 X
+      REAL Y
+C
+      LOGICAL GREATER
+      LOGICAL SMALLER
+C
+      GREATER(A,B) = ( (A-DBLE(B)).GT.EPS )
+      SMALLER(X,Y) = ( (DBLE(Y)-X).GT.EPS )
+C
+      DATA EPS/1E-5/
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: input w-e   = ', EW)
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: input n-s   = ', NS)
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: input north = ', NORTH)
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: input south = ', SOUTH)
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: input west  = ', WEST)
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: input east  = ', EAST)
+C
+      ONORTH = NORTH
+      OSOUTH = SOUTH
+      OWEST  = WEST
+      OEAST  = EAST
+C
+      DSSAREA = 0
+      LGAUSS  = ( NS.EQ.0.0 )
+      LSPHERE = ( (EW.EQ.0.0).AND.(NS.EQ.0.0) )
+C
+C     If it's gaussian, pick up the gaussian grid definitions unless
+C     they have already been retrieved.
+C
+      IF( LGAUSS.AND..NOT.LSPHERE ) THEN
+        NGAUSS = NINT( EW )
+#if (defined hp) && (!defined INTEGER_8)
+        IF( NGAUSS.GE.256 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'DSSAREA: unsafe to use 32-bit HP version for gaussian = ',
+     X      NGAUSS)
+          DSSAREA = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+#endif
+        IF( NGAUSS.GT.JPGTRUNC ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'DSSAREA: Gaussian grid number ', NGAUSS)
+          CALL INTLOG(JP_ERROR,
+     X      'DSSAREA: exceeds current expected maximum ', JPGTRUNC)
+          DSSAREA = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+        IF( NGAUSS.NE.NOLD ) THEN
+          NOLD = NGAUSS
+          CALL JGETGG( NOLD, 'F', RGAUSS, KPTS, IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'DSSAREA: Failed to pick up gaussian ', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        'DSSAREA: definitions for resolution = ', NOLD)
+            DSSAREA = JPROUTINE + 1
+            GOTO 900
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Fixup area if default (0/0/0/0).
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      LDEFIN = ( (NORTH.EQ.0).AND.(WEST.EQ.0).AND.
+     X           (SOUTH.EQ.0).AND.(EAST.EQ.0) ) 
+C
+      IF( LDEFIN ) THEN
+C
+        IF( .NOT.LGAUSS ) THEN
+C
+C         Regular lat/long grid ..
+C
+          NORTH = 90.0
+          WEST  = 0
+          SOUTH = -NORTH
+          EAST  = 360.0 - EW
+C
+        ELSE IF( LSPHERE ) THEN
+C
+C         Spherical harmonics
+C
+          NORTH = 90.0
+          WEST  = 0
+          SOUTH = -90.0
+          EAST  = 360.0
+C
+C
+        ELSE
+C
+C         Gaussian grid ..
+C
+          INORTH = JNORSGG( 90.0, RGAUSS, NGAUSS, 0)
+          NORTH  = RGAUSS(INORTH)
+          WEST   = 0
+          ISOUTH = JNORSGG( -90.0, RGAUSS, NGAUSS, 1)
+          SOUTH  = RGAUSS(ISOUTH)
+          EAST   = 360.0 - 90.0/REAL(NGAUSS)
+        ENDIF
+C
+        GOTO 900
+      ENDIF
+C
+      IF( LSPHERE ) GOTO 900
+C
+C     Don't fixup area for ocean products
+C
+      IF( NILOCAL.EQ.4 ) GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Fixup west-east area to correspond to the grid.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( EAST.GT.360.0.AND.EAST.LT.361.0 ) THEN
+        CALL INTLOGR(JP_WARN,
+     X    'DSSAREA: Faulty East lon limits', EAST)
+        EAST = 360.0
+        CALL INTLOGR(JP_WARN,
+     X    'DSSAREA: Changed East to', EAST)
+      ENDIF
+c
+      IF( (WEST.LT.-360.0).OR.(WEST.GT.360.0).OR.
+     X    (EAST.LT.-360.0).OR.(EAST.GT.360.0) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'DSSAREA: Faulty input langitude limits', JPQUIET)
+        CALL INTLOGR(JP_ERROR,'DSSAREA: West = ', WEST)
+        CALL INTLOGR(JP_ERROR,'DSSAREA: East = ', EAST)
+        NORTH = ONORTH
+        SOUTH = OSOUTH
+        WEST  = OWEST
+        EAST  = OEAST
+        DSSAREA = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      IF( .NOT. LGAUSS ) THEN
+C
+C       Regular lat/long grid only ..
+C
+        DEW = JPDISTP * RRMULT
+        IEW = DNINT( DBLE(DEW) )
+        RESEW = EW
+C
+      ELSE
+C
+C       Gaussian grid ..
+C
+        DEW = DBLE(NP90) / DBLE(NGAUSS)
+        IEW = DNINT( DBLE(DEW) )
+        RESEW = DBLE(NR90) / DBLE(NGAUSS)
+C
+      ENDIF
+C
+C     Ensure West < East
+C
+      IF( WEST.GT.EAST ) WEST = WEST - 360.0
+      DWEST = WEST
+      IWEST = DNINT( DBLE(DWEST * RRMULT) )
+C
+C     Find west boundary to nearest dissemination gridpoint eastwards.
+C     From this value, calculate the east limit using the requested
+C     grid increment.
+C
+      IF( IWEST.GT.0 ) THEN
+        NWEST =  DINT(DBLE(IWEST + IEW - 1) / DEW)
+        IWEST = DNINT(DBLE(NWEST) * DEW)
+      ELSE
+        NWEST =  DINT(DBLE(-IWEST) / DEW)
+        IWEST = DNINT(DBLE(-NWEST) * DEW)
+      ENDIF
+C
+      DWEST = DBLE(IWEST)/RRMULT
+C
+      DEAST = EAST
+C
+      NWEPTS = NINT( (DEAST - DWEST) / RESEW )
+      DEAST  = DWEST + (NWEPTS*RESEW)
+      IF( GREATER(DEAST,EAST) ) DEAST = DEAST - RESEW
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: calculated west  = ', DWEST)
+      CALL INTLOGR(JP_DEBUG,'DSSAREA: calculated east  = ', DEAST)
+      IEAST = DNINT( DBLE(DEAST * RRMULT) )
+C
+C     Try to catch special case: global west-east with wrap-around.
+C
+      IF( (IEAST-IWEST).GE.NP360 ) THEN
+        IF( LGAUSS) THEN
+          IEAST = IWEST + (4*NGAUSS-1)*RESEW*RRMULT
+        ELSE
+          IEAST = IWEST + NP360 - RESEW*RRMULT
+        ENDIF
+      ENDIF
+C
+C     Ensure East and West still in range (0,360)
+C
+      IF( IEAST.GT.NP360 ) THEN
+        IEAST = IEAST - NP360
+        IWEST = IWEST - NP360
+      ENDIF
+      IF( IWEST.LT.-NP360 ) THEN
+        IEAST = IEAST + NP360
+        IWEST = IWEST + NP360
+      ENDIF
+C
+C     Ensure East-West spread is not greater than 360
+C
+      IF( (IEAST-IWEST).GT.NP360 ) THEN
+        IF( LGAUSS) THEN
+          IEAST = IWEST + (4*NGAUSS-1)*IEW
+        ELSE
+          IEAST = IWEST + NP360 - IEW
+        ENDIF
+      ENDIF
+C
+C     Apply adjustment when east and west boundaries are the same
+C     longitude (0/360) to give a global grid.
+C
+      IF( ( (IWEST.EQ.-NP360).AND.(IEAST.EQ.0)     ) .OR.
+     X    ( (IWEST.EQ.0)     .AND.(IEAST.EQ.NP360) ) .OR.
+     X    ( (IWEST.EQ.NP360) .AND.(IEAST.EQ.NP360) )  ) THEN
+        IWEST = 0
+        IF( LGAUSS) THEN
+          IEAST = (4*NGAUSS-1)*IEW
+        ELSE
+          IEAST = NP360 - IEW
+        ENDIF
+      ENDIF
+C
+      DWEST  = DBLE(IWEST) / RRMULT
+      DEAST  = DBLE(IEAST) / RRMULT
+      WEST  = DBLE(IWEST) / RRMULT
+      EAST  = DBLE(IEAST) / RRMULT
+C
+      IF( (EAST.LT.WEST).OR.(EAST.GT.360.0) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'DSSAREA: Faulty calculated longitude limits', JPQUIET)
+        CALL INTLOGR(JP_ERROR,'DSSAREA: East = ', EAST)
+        CALL INTLOGR(JP_ERROR,'DSSAREA: West = ', WEST)
+        NORTH = ONORTH
+        SOUTH = OSOUTH
+        WEST  = OWEST
+        EAST  = OEAST
+        DSSAREA = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Fixup north-south area to correspond to the grid.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( NORTH.LT.SOUTH ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'DSSAREA: Faulty input latitude limits', JPQUIET)
+        CALL INTLOGR(JP_ERROR,'DSSAREA: North = ', NORTH)
+        CALL INTLOGR(JP_ERROR,'DSSAREA: South = ', SOUTH)
+        DSSAREA = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+cs
+      IF( NORTH.GT.90.0 ) THEN
+        CALL INTLOGR(JP_WARN,
+     X    'DSSAREA: Faulty North lat limits', NORTH)
+        NORTH = 90.0
+        CALL INTLOGR(JP_WARN,
+     X    'DSSAREA: Changed North to', NORTH)
+      ENDIF
+cs
+      IF( SOUTH.LT.-90.0 ) THEN
+        CALL INTLOGR(JP_WARN,
+     X    'DSSAREA: Faulty South lat limits', SOUTH)
+        SOUTH = -90.0
+        CALL INTLOGR(JP_WARN,
+     X    'DSSAREA: Changed South to', SOUTH)
+      ENDIF
+        
+      IF( .NOT.LGAUSS ) THEN
+C
+C       Regular lat/long grid only ..
+C
+        DNS = JPDISTP * RRMULT
+        INS = DNINT( DBLE(DNS) )
+C
+C       Find north boundary to nearest dissemination gridpoint south.
+C       From this value, calculate the south limit using the requested
+C       grid increment.
+C
+        DNORTH = NORTH
+        INORTH = DNINT( DBLE(DNORTH * RRMULT) )
+        IF( INORTH.GE.0 ) THEN
+          INORTH = INORTH / INS
+        ELSE
+          INORTH = (INORTH-INS+1) / INS
+        ENDIF
+        INORTH = INORTH * INS
+        IF( INORTH .GT. NP90 ) INORTH = NP90
+        IF( INORTH .LT. -NP90 ) INORTH = -NP90
+        NORTH = DBLE(INORTH) / RRMULT
+C
+        DNORTH = NORTH
+        DSOUTH = SOUTH
+        NNSPTS = NINT( (DNORTH - DSOUTH) / NS )
+        DSOUTH = DNORTH - (NNSPTS* NS)
+        IF( SMALLER(DSOUTH,SOUTH) ) DSOUTH = DSOUTH + NS
+        CALL INTLOGR(JP_DEBUG,'DSSAREA: calculated north = ', DNORTH)
+        CALL INTLOGR(JP_DEBUG,'DSSAREA: calculated south = ', DSOUTH)
+        ISOUTH = DNINT( DBLE(DSOUTH * RRMULT) )
+
+        IF( ISOUTH .GT. NP90 ) ISOUTH = NP90
+        IF( ISOUTH .LT. -NP90 ) ISOUTH = -NP90
+        SOUTH = DBLE(ISOUTH) / RRMULT
+C
+      ELSE
+C
+C       Gaussian grid ..
+C
+C       Round north boundary to nearest gridpoint southwards.
+C
+        RNORTH = NORTH
+        INORTH = JNORSGG( RNORTH, RGAUSS, NGAUSS, 0)
+        NORTH  = RGAUSS(INORTH)
+C
+C       Round south boundary to nearest gridpoint northwards.
+C
+        RSOUTH = SOUTH
+        ISOUTH = JNORSGG( RSOUTH, RGAUSS, NGAUSS, 1)
+        SOUTH  = RGAUSS(ISOUTH)
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/dummy.F b/interpolation/dummy.F
new file mode 100755
index 0000000..98672e1
--- /dev/null
+++ b/interpolation/dummy.F
@@ -0,0 +1,18 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DUMMY()
+C---->
+C
+C     Dummy routine to satisfy makefile.
+C
+C----<
+      RETURN
+      END
diff --git a/interpolation/dummy2.F b/interpolation/dummy2.F
new file mode 100755
index 0000000..5d64c87
--- /dev/null
+++ b/interpolation/dummy2.F
@@ -0,0 +1,18 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE DUMMY2()
+C---->
+C
+C     Dummy routine to satisfy makefile.
+C
+C----<
+      RETURN
+      END
diff --git a/interpolation/emosPrecision.c b/interpolation/emosPrecision.c
new file mode 100755
index 0000000..64a1918
--- /dev/null
+++ b/interpolation/emosPrecision.c
@@ -0,0 +1,24 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+int emosPrecision() {
+/*
+// Returns:
+//   64 if double-precision (64-bit) option has been used for REALs,
+//   64 if compiled on CRAY, (REALs are at least 64-bit precision),
+//   32 otherwise.
+*/
+#ifdef REAL_8
+  return (64);
+#else
+  return (32);
+#endif
+}
diff --git a/interpolation/estima.F b/interpolation/estima.F
new file mode 100755
index 0000000..63b9474
--- /dev/null
+++ b/interpolation/estima.F
@@ -0,0 +1,150 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ESTIMA()
+C---->
+C**** ESTIMA
+C
+C     Purpose
+C     -------
+C
+C     Calculate size of scratch space required for output field of
+C     interpolation.
+C     
+C
+C     Interface
+C     ---------
+C
+C     ISIZE = ESTIMA()
+C
+C
+C     Input
+C     -----
+C
+C     Values in common blocks "nofld.common".
+C
+C
+C     Output
+C     ------
+C
+C     Size as number of values (words).
+C     Returns 0 if output type not recognised.
+C
+C
+C     Method
+C     ------
+C
+C     Depends on output grid type.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message
+C     JNORSGG - Calculate gaussian latitude
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Feb 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Local variables
+C
+      INTEGER LOOP
+      REAL PNORTH, PWEST, PSOUTH, PEAST, GRID, TEMP
+C
+C     Externals
+C
+      EXTERNAL JNORSGG, NUMPTWE
+      INTEGER JNORSGG, NUMPTWE
+C
+C     Statement functions
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      ESTIMA = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Spherical harmonic field
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPSPHERE).OR.
+     X    (NOREPR.EQ.JPSTRSH).OR.
+     X    (NOREPR.EQ.JPSPHROT) ) THEN
+cs        ESTIMA = (NORESO+1) * (NORESO+4)
+        ESTIMA = (NORESO+1) * (NORESO+2)
+        CALL INTLOG(JP_DEBUG,'ESTIMA: spherical harmonic = ',ESTIMA)
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.  gaussian field
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF(NOGAUSS.GT.0) THEN
+       ESTIMA = NOGAUSS * NOGAUSS * 8
+        CALL INTLOG(JP_DEBUG,'ESTIMA: Gaussian Number = ', NOGAUSS)
+       CALL INTLOG(JP_DEBUG,'ESTIMA: any gaussian= ',ESTIMA)
+       GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Regular lat/long field
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C
+cs        print*,'NOGRID(1) ',NOGRID(1),'  NOGRID(2) ',NOGRID(2)
+cs        ESTIMA = NINT((JP360/NOGRID(1) + 1) * (JP180 / NOGRID(2) + 1))
+        ESTIMA = (JP360/NOGRID(1) + 1) * (JP180 / NOGRID(2) + 1)
+        CALL INTLOG(JP_DEBUG,'ESTIMA: Regular lat/long = ',ESTIMA)
+      ENDIF
+
+      IF(NILOCAL.EQ.4) THEN
+        IF(NOGRID(1).GT.0.AND.NOGRID(1).GT.0) THEN
+          ESTIMA = (JP360/NOGRID(1) + 1) * (JP180 / NOGRID(2) + 1)*2
+        ELSE
+          ESTIMA = 36099382
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'ESTIMA: OCEAN field = ',ESTIMA)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'ESTIMA: number of points in output field = ',ESTIMA)
+C
+      RETURN
+      END
diff --git a/interpolation/eulavgg.F b/interpolation/eulavgg.F
new file mode 100755
index 0000000..f8725f1
--- /dev/null
+++ b/interpolation/eulavgg.F
@@ -0,0 +1,145 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE EULAVGG(NEWFLD, NEXT, INROW, RLAT, RLON,
+     X                   POLELAT, POLELON, FIELD, NGAUSS, TYPE)
+C
+C---->
+C**** EULAVGG
+C
+C     PURPOSE
+C     _______
+C
+C     Generates values along a latitude in a rotated gaussian grid.
+C     (reverses the operations carried out by GGVALUE).
+C
+C     INTERFACE
+C     _________
+C
+C     CALL EULAVGG(NEWFLD, NEXT, INROW, RLAT, RLON,
+C    X             POLELAT, POLELON, FIELD, NGAUSS, TYPE)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     NEWFLD  - the field of values being created
+C     NEXT    - start offset of the latitude row being created
+C     INROW   - the number of points in the latitude row
+C     RLAT    = target point latitude in the rotated grid
+C     RLON    = target point longitude in the rotated grid
+C     POLELAT = latitude of the rotated South Pole
+C     POLELON = longitude of the rotated South Pole
+C     FIELD   = original unrotated gaussian field values
+C     NGAUSS  = original unrotated gaussian field number
+C     TYPE    = original unrotated gaussian field type
+C             = 'F' for full (regular) gaussian field
+C             = 'R' for reduced (quasi) gaussian field
+C
+C     Output parameters
+C     ________________
+C
+C     NEWFLD(NEXT) to NEWFLD(NEXT+INROW-1) contains the latitude row
+C     values.
+C
+C
+C     METHOD
+C     ______
+C
+C     Rotates the lat/long positions of points along the latitude row
+C     in a rotated gaussian grid back to positions in the unrotated grid
+C     and then interpolates vsalue from the original grid.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     LL2XYZ  - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     GGINTRP - Interpolates a value from an existing grid.
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     The input field is assumed to be global in extent, and a known
+C     definition, either N160 or N80 (reduced or regular).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      REAL NEWFLD, RLAT, RLON, POLELAT, POLELON, FIELD
+      DIMENSION NEWFLD(*), RLON(*), FIELD(*)
+      INTEGER NEXT, INROW, NGAUSS
+      CHARACTER*1 TYPE
+C
+C     Parameters
+      INTEGER JPMAXGG
+      PARAMETER( JPMAXGG = 1280 )
+C
+C     Local variables
+      REAL X(JPMAXGG), Y(JPMAXGG), Z(JPMAXGG)
+      REAL RX(JPMAXGG),RY(JPMAXGG),RZ(JPMAXGG)
+      REAL OLAT(JPMAXGG),OLON(JPMAXGG)
+      INTEGER LOOP
+C
+C     Adjust the target row points longitude to add back the longitude
+C     rotation
+      DO LOOP = 1, INROW
+        OLON(LOOP) = RLON(LOOP) - POLELON
+        IF( OLON(LOOP).LT.0.0 )   OLON(LOOP) = OLON(LOOP) + 360.0
+        IF( OLON(LOOP).GE.360.0 ) OLON(LOOP) = OLON(LOOP) - 360.0
+      ENDDO
+C
+C     Convert the target row points lat/long to (x,y,z) coordinates
+      CALL LL2XYZ(RLAT,OLON,X,Y,Z,INROW)
+C
+C     Rotate the target row points forward through the original latitude
+C     rotation
+      CALL YROTATE((90.0+POLELAT),X,Y,Z,RX,RY,RZ,INROW)
+C
+C     Convert the target row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (after longitude rotation)
+      CALL XYZ2LL(RX,RY,RZ,OLAT,OLON,INROW)
+C
+C     Interpolate the rotated grid to the target row points
+      CALL GGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,FIELD,NGAUSS,TYPE)
+C
+      RETURN
+      END
diff --git a/interpolation/fft99.F b/interpolation/fft99.F
new file mode 100755
index 0000000..caf38cf
--- /dev/null
+++ b/interpolation/fft99.F
@@ -0,0 +1,330 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE FFT99(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+C
+C---->
+C**** FFT99
+C
+C     PURPOSE
+C     _______
+C
+C     Multiple fast real periodic transform.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL FFT99(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     A      - the array containing input data
+C     WORK   - an area of size (N+1)*MIN(LOT,64)
+C     TRIGS  - a previously prepared list of trig function values
+C     IFAX   - a previously prepared list of factors of N
+C     INC    - the increment within each data 'vector'
+C              (e.g. INC=1 for consecutively stored data)
+C     JUMP   - the increment between the start of each data vector
+C     N      - the length of the data vectors
+C     LOT    - the number of data vectors
+C     ISIGN  -  +1 for transform from spectral to gridpoint
+C            -  -1 for transform from gridpoint to spectral
+C
+C     Output parameters
+C     ________________
+C
+C     A      - the array containing output data
+C
+C
+C     Method
+C     ______
+C     
+C     Ordering of coefficients:
+C         A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2)
+C         where B(0) = B(N/2)=0; (N+2) locations required
+C
+C     Ordering of data:
+C         X(N-1),X(0),X(1),X(2),...,X(N-1),X(0)
+C         i.e. explicit cyclic continuity; (N+2) locations required
+C
+C     Vectorization is achieved by doing the transforms in parallel
+C
+C     N must be composed of factors 2,3 & 5 but does not have to be even
+C
+C     
+C     Real transform of length N performed by removing redundant
+C     operations from complex transform of length N
+C     Definition of transforms:
+C
+C     ISIGN = +1:
+C         X(J) = SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N))
+C         where C(K) = A(K)+I*B(K) and C(N-K) = A(K)-I*B(K)
+C
+C     ISIGN = -1:
+C         A(K) = (1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N))
+C         B(K) = -(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N))
+C
+C     Externals
+C     _________
+C
+C     RPASSM  - Performs one pass through data as part of multiple real
+C               FFT (fourier analysis) routine.
+C     QPASSM  - Performs one pass through data as part of multiple real
+C               FFT (fourier synthesis) routine.
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     Tidy up of code in older version of same routine.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+      REAL A, WORK, TRIGS
+      INTEGER IFAX, INC, JUMP, N, LOT, ISIGN
+      DIMENSION A(N),WORK(N),TRIGS(N),IFAX(10)
+C
+C     Local variables
+      INTEGER NFAX, NX, NBLOX, NVEX, ISTART, NB, IA, I, J
+      INTEGER LA, IGO, K, IFAC, IERR, IBASE, JBASE, JJ, II
+      INTEGER IX, IZ
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Ensure factorization of N has been done.
+      IF(IFAX(10).NE.N) CALL SET99(TRIGS,IFAX,N)
+C
+      NFAX = IFAX(1)
+      IF (MOD(N,2).EQ.1) THEN
+        NX = N
+      ELSE
+        NX = N + 1
+      ENDIF
+C
+C     Calculate number of blocks of 64 vectors and number of vectors
+C     'left over'. This remainder is transformed first.
+C
+      NBLOX = 1 + (LOT-1)/64
+      NVEX  = LOT-(NBLOX-1)*64
+C
+      IF (ISIGN.EQ.1) THEN
+C
+C ------------------------------------------------------------------
+C     Section 2.   Spectral to gridpoint transform.
+C ------------------------------------------------------------------
+C
+  200   CONTINUE
+C
+C       Loop through the blocks of vectors
+        ISTART = 1
+        DO 270 NB = 1,NBLOX
+          IA = ISTART
+          I  = ISTART
+          DO 210 J = 1,NVEX
+            A(I+INC) = 0.5*A(I)
+            I        = I + JUMP
+  210     CONTINUE
+C
+          IF (MOD(N,2).NE.1) THEN
+            I = ISTART + N*INC
+            DO 220 J = 1,NVEX
+              A(I) = 0.5*A(I)
+              I    = I + JUMP
+  220       CONTINUE
+          ENDIF
+C
+          IA  = ISTART + INC
+          LA  = 1
+          IGO = 1
+C
+C         Work through the factors
+          DO 230 K = 1,NFAX
+            IFAC = IFAX(K+1)
+            IERR = -1
+            IF (IGO.NE.-1) THEN
+              CALL RPASSM(A(IA),A(IA+LA*INC),WORK(1),WORK(IFAC*LA+1),
+     X          TRIGS,INC,1,JUMP,NX,NVEX,N,IFAC,LA,IERR)
+            ELSE
+              CALL RPASSM(WORK(1),WORK(LA+1),A(IA),A(IA+IFAC*LA*INC),
+     X          TRIGS,1,INC,NX,JUMP,NVEX,N,IFAC,LA,IERR)
+            ENDIF
+C
+            IF (IERR.NE.0) GO TO 950
+C
+            LA  = IFAC*LA
+            IGO = -IGO
+            IA  = ISTART + INC
+  230     CONTINUE
+C
+C         If necessary, copy results back to A
+C         
+          IF (MOD(NFAX,2).NE.0) THEN
+            IBASE = 1
+            JBASE = IA
+            DO 250 JJ = 1,NVEX
+              I = IBASE
+              J = JBASE
+              DO 240 II = 1,N
+                A(J) = WORK(I)
+                I    = I + 1
+                J    = J + INC
+  240         CONTINUE
+              IBASE = IBASE + NX
+              JBASE = JBASE + JUMP
+  250       CONTINUE
+          ENDIF
+C
+C         Fill in cyclic boundary values (ie repeat the data vector
+C         end points at opposite end of the vector)
+C         
+          IX = ISTART
+          IZ = ISTART + N*INC
+CDIR$ IVDEP
+          DO 260 J = 1,NVEX
+            A(IX)     = A(IZ)
+            A(IZ+INC) = A(IX+INC)
+            IX        = IX + JUMP
+            IZ        = IZ + JUMP
+  260     CONTINUE
+C
+C         Adjust pointers for next block
+          ISTART = ISTART + NVEX*JUMP
+          NVEX   = 64
+  270   CONTINUE
+C
+      ELSE
+C
+C ------------------------------------------------------------------
+C     Section 3.   Gridpoint to spectral transform.
+C ------------------------------------------------------------------
+C
+  300   CONTINUE
+C
+C       Loop through the blocks of vectors
+        ISTART = 1
+        DO 390 NB  =  1,NBLOX
+          IA  = ISTART + INC
+          LA  = N
+          IGO = 1
+C
+          DO 310 K = 1,NFAX
+            IFAC = IFAX(NFAX+2-K)
+            LA   = LA/IFAC
+            IERR = -1
+            IF (IGO.NE.-1) THEN
+              CALL QPASSM(A(IA),A(IA+IFAC*LA*INC),WORK(1),WORK(LA+1),
+     X          TRIGS,INC,1,JUMP,NX,NVEX,N,IFAC,LA,IERR)
+            ELSE
+              CALL QPASSM(WORK(1),WORK(IFAC*LA+1),A(IA),A(IA+LA*INC),
+     X          TRIGS,1,INC,NX,JUMP,NVEX,N,IFAC,LA,IERR)
+            ENDIF
+            IF (IERR.NE.0) GO TO 950
+            IGO = -IGO
+            IA  = ISTART + INC
+  310     CONTINUE
+C
+C         If necessary, copy results back to A
+C         
+          IF (MOD(NFAX,2).NE.0) THEN
+            IBASE = 1
+            JBASE = IA
+            DO 330 JJ = 1,NVEX
+              I = IBASE
+              J = JBASE
+              DO 320 II = 1,N
+                A(J) = WORK(I)
+                I    = I + 1
+                J    = J + INC
+  320         CONTINUE
+              IBASE = IBASE + NX
+              JBASE = JBASE + JUMP
+  330       CONTINUE
+          ENDIF
+C
+C         Shift A(0) and fill in zero imaginary parts
+C         
+          IX = ISTART
+          DO 340 J = 1,NVEX
+            A(IX)     = A(IX+INC)
+            A(IX+INC) = 0.0
+            IX        = IX + JUMP
+  340     CONTINUE
+C
+          IF (MOD(N,2).NE.1) THEN
+            IZ = ISTART + (N+1)*INC
+            DO 350 J = 1,NVEX
+              A(IZ) = 0.0
+              IZ    = IZ + JUMP
+  350       CONTINUE
+C
+          ENDIF
+C
+C         Adjust pointers for next block
+          ISTART = ISTART + NVEX*JUMP
+          NVEX   = 64
+  390   CONTINUE
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900   CONTINUE
+C
+      RETURN
+C
+C     Error messages
+C     
+  950 CONTINUE
+      GO TO (960,970,980) IERR
+C
+  960 CONTINUE
+      WRITE(*,*) 'Vector length greater than 64, = ', NVEX
+      GO TO 900
+  970 CONTINUE
+      WRITE(*,*) 'Factor not handled, =', IFAC
+      GO TO 900
+  980 CONTINUE
+      WRITE(*,*) 'Factor only handled if LA*IFAC=N. Factor = ', IFAC
+C
+      END
diff --git a/interpolation/fftchk.c b/interpolation/fftchk.c
new file mode 100755
index 0000000..dccd8c7
--- /dev/null
+++ b/interpolation/fftchk.c
@@ -0,0 +1,63 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "fortint.h"
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define FFTCHK fftchk
+#else
+#define FFTCHK fftchk_
+#endif
+#endif
+
+#ifdef REAL_8
+fortint FFTCHK(fortint * trunc, double * longinc)
+#else
+fortint FFTCHK(fortint * trunc, float * longinc)
+#endif
+{
+/*   Checks if the given truncation and longitude increment can be handled
+     by the FFT routine used in the interpolation scheme.
+
+     Returns 1 if it can, otherwise 0.
+
+     For calculation purposes, the number of longitude points has to be
+     greater than 2*(output truncation) to ensure that the fourier
+     transform is exact. For more information see page 10 in:
+
+      E.C.M.W.F. Research Department technical memorandum no. 56
+                 "The forecast and analysis post-processing package"
+                 May 1982. J.Haseler.
+
+*/
+long nlonpts = (long) ( (360.0/(*longinc)) + 0.5 );
+
+/*  Set number of longitude points > 2*truncation   */
+    while( nlonpts < 2*(*trunc) ) nlonpts *= 2;
+
+/*  Look for allowed factors: 8, 6, 5, 4 ,3 , 2 */
+
+/*  Check 6 first */
+    while( nlonpts%6 == 0 ) nlonpts /= 6;
+
+/*  8 only allowed once as a factor */
+    if( nlonpts%8 == 0 ) nlonpts /= 8;
+
+    while( nlonpts%5 == 0 ) nlonpts /= 5;
+    while( nlonpts%4 == 0 ) nlonpts /= 4;
+    while( nlonpts%3 == 0 ) nlonpts /= 3;
+    while( nlonpts%2 == 0 ) nlonpts /= 2;
+
+    if( nlonpts != 1) return (fortint) 0;
+
+    return (fortint) 1;
+}
diff --git a/interpolation/fixarea.F b/interpolation/fixarea.F
new file mode 100755
index 0000000..0b53422
--- /dev/null
+++ b/interpolation/fixarea.F
@@ -0,0 +1,513 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION FIXAREA( )
+C
+C---->
+C**** FIXAREA
+C
+C     Purpose
+C     -------
+C
+C     Fixup input/output field area definitions.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = FIXAREA( )
+C
+C     Input
+C     -----
+C
+C     None.
+C
+C
+C     Output
+C     ------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     If default (0/0/0/0) selected for input, input area is set
+C       - to global for spherical harmonics 
+C       - to global for lat/long grid 
+C       - to global for gaussian grid 
+C
+C     If default (0/0/0/0) selected for output, output area is set
+C       - to same as input area for lat/long grid 
+C       - to same as input area for regular gaussian grid 
+C       - to global for reduced gaussian grid 
+C
+C     (Currently, subareas are not supported for reduced gaussian fields.
+C      Should work OK; but need to correct setup of values in GRIB
+C      product for number of points in each latitude row)
+C
+C     Output area is adjusted to fit the given grid step.
+C
+C
+C     Externals
+C     ---------
+C
+C     AREACHK - Match input/output field area definitions according to
+C               grid specification.
+C     GETENV   - Get value of an environment variable
+C     INTLOG   - Logs output messages
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Jan 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 19200 )
+C
+C     Local variables
+C
+      INTEGER INORTH, ISOUTH, IEAST
+      INTEGER ITEMP, IRET
+      REAL EW, NS, NORTH, SOUTH, EAST, WEST, FACTOR3, FACTOR4
+      LOGICAL LDEFIN, LDEFOUT, LGLOBAL, LOVERDE
+      CHARACTER*20 OVERIDE
+      INTEGER IBLANK
+C
+C     Externals
+C
+      INTEGER AREACHK
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      FIXAREA = 0
+      LGLOBAL = .FALSE.
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Fixup input area if default (0/0/0/0).
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Fixup input ocean area definition
+C
+      IF( NILOCAL.EQ.4 ) THEN
+        FACTOR3 = 0.0
+        FACTOR4 = 0.0
+C
+        IF( NIFORM.EQ.1 ) THEN
+          IF( ISEC1(60).EQ.1 ) FACTOR3 = 1.0
+          IF( ISEC1(60).EQ.2 ) THEN
+            IF( ISEC1(47).EQ.160 ) FACTOR3 = 1000.0
+          ENDIF
+          IF( ISEC1(60).EQ.3 ) FACTOR3 = 1000000.0
+          IF( ISEC1(60).EQ.4 ) FACTOR3 = 1000000.0
+C
+          IF( ISEC1(61).EQ.1 ) FACTOR4 = 1.0
+          IF( ISEC1(61).EQ.2 ) THEN
+            IF( ISEC1(47).EQ.160 ) FACTOR4 = 1000.0
+          ENDIF
+          IF( ISEC1(61).EQ.3 ) FACTOR4 = 1000000.0
+          IF( ISEC1(61).EQ.4 ) FACTOR4 = 1000000.0
+C
+          IF( (FACTOR3.EQ.0).OR.(FACTOR4.EQ.0) ) THEN
+            FIXAREA = 2
+            GOTO 900
+          ENDIF
+          NORTH = REAL(ISEC1(62))/FACTOR4
+          WEST  = REAL(ISEC1(63))/FACTOR3
+          SOUTH = REAL(ISEC1(64))/FACTOR4
+          EAST  = REAL(ISEC1(65))/FACTOR3
+        ELSE
+          IF( NIOCO3.EQ.1 ) FACTOR3 = 1.0
+          IF( NIOCO3.EQ.2 ) THEN
+            IF( NIVCDEF.EQ.160 ) FACTOR3 = 1000.0
+          ENDIF
+          IF( NIOCO3.EQ.3 ) FACTOR3 = 1000000.0
+          IF( NIOCO3.EQ.4 ) FACTOR3 = 1000000.0
+C
+          IF( NIOCO4.EQ.1 ) FACTOR4 = 1.0
+          IF( NIOCO4.EQ.2 ) THEN
+            IF( NIVCDEF.EQ.160 ) FACTOR4 = 1000.0
+          ENDIF
+          IF( NIOCO4.EQ.3 ) FACTOR4 = 1000000.0
+          IF( NIOCO4.EQ.4 ) FACTOR4 = 1000000.0
+C
+          IF( (FACTOR3.EQ.0).OR.(FACTOR4.EQ.0) ) THEN
+            FIXAREA = 2
+            GOTO 900
+          ENDIF
+          NORTH = REAL(NIOCO4F)/FACTOR4
+          WEST  = REAL(NIOCO3F)/FACTOR3
+          SOUTH = REAL(NIOCO4L)/FACTOR4
+          EAST  = REAL(NIOCO3L)/FACTOR3
+        ENDIF
+        NIAREA(1) = NINT( NORTH * PPMULT + 0.1)
+        NIAREA(2) = NINT( WEST  * PPMULT + 0.1)
+        NIAREA(3) = NINT( SOUTH * PPMULT + 0.1)
+        NIAREA(4) = NINT( EAST  * PPMULT + 0.1)
+        GOTO 300
+      ENDIF
+C
+C Sinisa bug fix for grid global fields
+C       If input is lat/lon, check if it is global to within
+C       a tolerance of 0.1 degrees
+       IF ( NIREPR .EQ. JPREGULAR ) THEN
+          IF ( NIAREA(4).GT.0 ) THEN
+            IEAST = NIAREA(4)
+          ELSE
+            IEAST = JP360 + NIAREA(4)
+          ENDIF
+         IF(NIAREA(1).EQ.JP90.AND.NIAREA(3).EQ.-JP90.AND.
+     X      NIAREA(2).EQ.0.AND.
+     X      IABS(JP360 - IEAST - NIGRID(1)).LT.1000) THEN
+              NIAREA(1) = 0.
+              NIAREA(2) = 0.
+              NIAREA(3) = 0.
+              NIAREA(4) = 0.
+csinisa
+cs          ELSEIF(IABS(JP360 - IEAST - NIGRID(1)).LT.1000) THEN
+cs              NOAREA(1) = NIAREA(1)
+cs              NOAREA(2) = 0
+cs              NOAREA(3) = NIAREA(3)
+cs              NOAREA(4) = 36000000
+          ENDIF
+        ENDIF
+
+      LDEFIN = ( (NIAREA(1) .EQ. 0) .AND. (NIAREA(2) .EQ. 0) .AND.
+     X           (NIAREA(3) .EQ. 0) .AND. (NIAREA(4) .EQ. 0) ) 
+
+C
+      IF( LDEFIN ) THEN
+C
+        IF ( (NIREPR.EQ.JPSPHERE) .OR. (NIREPR.EQ.JPSPHROT) ) THEN
+C
+C         Spectral input ..
+          EW = 0.0
+          NS = 0.0
+C
+        ELSE IF ( NIREPR .EQ. JPREGULAR ) THEN
+C
+C         Regular lat/long grid ..
+          EW = FLOAT( NIGRID(1) ) / PPMULT
+          NS = FLOAT( NIGRID(2) ) / PPMULT
+C
+        ELSE
+C
+C         Gaussian grid ..
+          EW = FLOAT( NIGAUSS )
+          NS = 0.0
+        ENDIF
+C
+        NORTH = 0.0
+        WEST  = 0.0
+        SOUTH = 0.0
+        EAST  = 0.0
+        IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+        IF( IRET.NE.0 ) THEN
+          FIXAREA = IRET
+          GOTO 900
+        ENDIF
+        NIAREA(1) = NINT( NORTH * PPMULT + 0.1)
+        NIAREA(2) = NINT( WEST  * PPMULT + 0.1)
+        NIAREA(3) = NINT( SOUTH * PPMULT + 0.1)
+        NIAREA(4) = NINT( EAST  * PPMULT + 0.1)
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Fixup output area if default (0/0/0/0).
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     See if environment variable has been specified to override
+C     output area specification
+C
+      LOVERDE = .FALSE.
+      CALL GETENV('OVERRIDE_OUTPUT_AREA', OVERIDE)
+      IBLANK = INDEX(OVERIDE, ' ')
+      IF( IBLANK.GT.1 ) THEN
+        IF( OVERIDE(1:2).EQ.'ON' ) THEN
+          LOVERDE = .TRUE.
+          CALL INTLOG(JP_DEBUG,
+     X      'FIXAREA: OVERRIDE_OUTPUT_AREA is ON',JPQUIET)
+        ENDIF
+      ENDIF
+C
+      LDEFOUT = ( (NOAREA(1) .EQ. 0) .AND. (NOAREA(2) .EQ. 0) .AND.
+     X            (NOAREA(3) .EQ. 0) .AND. (NOAREA(4) .EQ. 0) )
+     X          .OR. LOVERDE
+C
+C     Fixup output ocean area definition
+C
+      IF( NILOCAL.EQ.4 ) THEN
+        IF( LDEFOUT ) THEN
+          IF( NIFORM.EQ.1 ) THEN
+              SOUTH  = REAL(ISEC1(64))/FACTOR4
+              NORTH  = REAL(ISEC1(62))/FACTOR4
+              WEST   = REAL(ISEC1(63))/FACTOR3
+              EAST   = REAL(ISEC1(65))/FACTOR3
+
+              EW = FLOAT( NOGRID(1) ) / PPMULT
+              NS = FLOAT( NOGRID(2) ) / PPMULT
+
+            IF( ISEC1(60).EQ.3 ) THEN
+              WEST  = 0.0
+              EAST  = 360.0
+              IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+              IF ( IRET .NE. 0 ) THEN
+                 FIXAREA = IRET
+                 GOTO 900
+              ENDIF
+            ELSEIF( ISEC1(60).EQ.4 ) THEN
+              WEST  = -90.0
+              EAST  =  90.0
+            ENDIF
+
+            IF( ISEC1(61).EQ.3 ) THEN
+              SOUTH  = 0.0
+              NORTH  = 360.0
+            ELSEIF( ISEC1(61).EQ.4 ) THEN
+              SOUTH  = -90.0
+              NORTH  =  90.0
+            ENDIF
+          ELSE
+              NORTH = REAL(NIOCO4F)/FACTOR4
+              WEST  = REAL(NIOCO3F)/FACTOR3
+              SOUTH = REAL(NIOCO4L)/FACTOR4
+              EAST  = REAL(NIOCO3L)/FACTOR3
+              EW = FLOAT( NOGRID(1) ) / PPMULT
+              NS = FLOAT( NOGRID(2) ) / PPMULT
+            IF( NIOCO3.EQ.3 ) THEN
+              WEST  = 0.0
+              EAST  = 360.0
+              IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+              IF ( IRET .NE. 0 ) THEN
+                 FIXAREA = IRET
+                 GOTO 900
+              ENDIF
+            ELSEIF( NIOCO3.EQ.4 ) THEN
+              WEST  = -90.0
+              EAST  =  90.0
+            ENDIF
+
+            IF( NIOCO4.EQ.3 ) THEN
+              SOUTH  = 0.0
+              NORTH  = 360.0
+            ELSEIF( NIOCO4.EQ.4 ) THEN
+              SOUTH  = -90.0
+              NORTH  =  90.0
+            ENDIF
+          ENDIF
+
+          NOAREA(1) = NINT( NORTH * PPMULT + 0.1)
+          NOAREA(2) = NINT( WEST  * PPMULT + 0.1)
+          NOAREA(3) = NINT( SOUTH * PPMULT + 0.1)
+          NOAREA(4) = NINT( EAST  * PPMULT + 0.1)
+        ELSE
+          NORTH = REAL(NOAREA(1)) / PPMULT
+          WEST  = REAL(NOAREA(2)) / PPMULT
+          SOUTH = REAL(NOAREA(3)) / PPMULT
+          EAST  = REAL(NOAREA(4)) / PPMULT
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      IF( LDEFOUT ) THEN
+C
+C       If input is gaussian, check if it is global to within
+C       a tolerance of 0.1 degrees.
+C
+        IF ( (NIREPR.EQ.JPGAUSSIAN) .OR. (NIREPR.EQ.JPQUASI) ) THEN
+          LGLOBAL = .TRUE.
+          INORTH    = NINT( RIGAUSS(1) * PPMULT )
+          IF( IABS(NIAREA(1)-INORTH).GT.1000) LGLOBAL = .FALSE.
+          ISOUTH    = - INORTH
+          IF( IABS(NIAREA(3)-ISOUTH).GT.1000) LGLOBAL = .FALSE.
+          IF( NIAREA(2).NE.0 ) LGLOBAL = .FALSE.
+C Sinisa added case east less than 0
+          IF ( NIAREA(4).GT.0 ) THEN
+            IEAST = NIAREA(4)
+          ELSE
+            IEAST = JP360 + NIAREA(4)
+          ENDIF
+          IEAST = JP360 - (JP90/NIGAUSS)
+          IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+             IF( IABS(JP360 - IEAST - (JP90/NIGAUSS)).GT.1000)
+     X          LGLOBAL = .FALSE.
+          ENDIF
+        ENDIF
+C
+C       Spectral output ..
+C
+C       .. skip section fitting output area to grid
+C
+        IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) GOTO 900
+C
+C       Regular lat/long grid ..
+C
+        IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+          IF( LDEFIN .OR. LGLOBAL.OR.(NIREPR.EQ.JPREDLL) ) THEN
+            EW = FLOAT( NOGRID(1) ) / PPMULT
+            NS = FLOAT( NOGRID(2) ) / PPMULT
+            NORTH = 90.0
+            WEST  = 0.0
+            SOUTH = -NORTH
+            EAST  = 360.0
+C
+C           Use GRIB header values for reduced lat/long grids
+C           (maybe 'Mediterranean' sub-area).
+C
+            IF( NIREPR.EQ.JPREDLL ) THEN
+              NORTH = REAL(NIAREA(1))/PPMULT
+              WEST  = REAL(NIAREA(2))/PPMULT
+              SOUTH = REAL(NIAREA(3))/PPMULT
+              EAST  = REAL(NIAREA(4))/PPMULT
+            ENDIF
+            IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+            IF ( IRET .NE. 0 ) THEN
+               FIXAREA = IRET
+               GOTO 900
+            ENDIF
+            NOAREA(1) = NINT( NORTH * PPMULT + 0.1)
+            NOAREA(2) = NINT( WEST  * PPMULT + 0.1)
+            NOAREA(3) = NINT( SOUTH * PPMULT + 0.1)
+            NOAREA(4) = NINT( EAST  * PPMULT + 0.1)
+C
+          ELSE
+            NOAREA(1) = NIAREA(1)
+            NOAREA(2) = NIAREA(2)
+            NOAREA(3) = NIAREA(3)
+            NOAREA(4) = NIAREA(4)
+          ENDIF
+C
+        ENDIF
+C
+C       Gaussian ..
+C
+        IF ( (NOREPR.EQ.JPGAUSSIAN) .OR. (NOREPR.EQ.JPQUASI) ) THEN
+C
+C         Is output grid specification the same as the input?
+          IF( NIGAUSS.EQ.NOGAUSS) THEN
+            IF( (NOREPR.EQ.JPGAUSSIAN) .AND. LGLOBAL ) THEN
+              NOAREA(1) = JP90
+              NOAREA(2) = 0
+              NOAREA(3) = -JP90
+              NOAREA(4) = JP360 - (JP90/NOGAUSS)
+            ELSE
+              NOAREA(1) = NIAREA(1)
+              NOAREA(2) = NIAREA(2)
+              NOAREA(3) = NIAREA(3)
+              NOAREA(4) = NIAREA(4)
+           ENDIF
+C
+C           Skip section fitting output area to grid
+            GOTO 900
+C
+          ELSE
+C
+C           Different grid resolutions
+            EW = FLOAT( NOGAUSS )
+            NS = 0.0
+            IF( (NOREPR.EQ.JPGAUSSIAN) .AND. LGLOBAL ) THEN
+              NORTH = 90.0
+              WEST  = 0.0
+              SOUTH = -90.0
+              EAST  = 360.0 - (360.0/(EW*4.0))
+            ELSE
+              NORTH = FLOAT( NIAREA(1) ) / PPMULT
+              WEST  = FLOAT( NIAREA(2) ) / PPMULT
+              SOUTH = FLOAT( NIAREA(3) ) / PPMULT
+              EAST  = FLOAT( NIAREA(4) ) / PPMULT
+            ENDIF
+            IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+            IF ( IRET .NE. 0 ) THEN
+               FIXAREA = IRET
+               GOTO 900
+            ENDIF
+            NOAREA(1) = NINT( NORTH * PPMULT + 0.1)
+            NOAREA(2) = NINT( WEST  * PPMULT + 0.1)
+            NOAREA(3) = NINT( SOUTH * PPMULT + 0.1)
+            NOAREA(4) = NINT( EAST  * PPMULT + 0.1)
+C
+C           If regular lat/long input, check if output west longitude
+C           reachs to full globe
+            IF (NIREPR .EQ. JPREGULAR) THEN
+              ITEMP = NIAREA(4)+NIGRID(1)
+              IF ( ITEMP.EQ.JP360 ) NOAREA(4) = JP360 - (JP90/NOGAUSS)
+            ENDIF
+C
+            IF (NIREPR .EQ. JPSPHERE) NOAREA(4) = JP360 - (JP90/NOGAUSS)
+            IF (NIREPR .EQ. JPSPHROT) NOAREA(4) = JP360 - (JP90/NOGAUSS)
+          ENDIF
+        ENDIF
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 4.   Now fixup output areas to correspond to the grid.
+C ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C       Regular lat/long grid ..
+        EW = FLOAT( NOGRID(1) ) / PPMULT
+        NS = FLOAT( NOGRID(2) ) / PPMULT
+C
+      ELSE
+C
+C       Gaussian grid ..
+        EW = FLOAT( NOGAUSS )
+        NS = 0.0
+      ENDIF
+C
+      NORTH = FLOAT( NOAREA(1) ) / PPMULT
+      WEST  = FLOAT( NOAREA(2) ) / PPMULT
+      SOUTH = FLOAT( NOAREA(3) ) / PPMULT
+      EAST  = FLOAT( NOAREA(4) ) / PPMULT
+      IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+      IF ( IRET .NE. 0 ) THEN
+         FIXAREA = IRET
+         GOTO 900
+      ENDIF
+      NOAREA(1) = NINT( NORTH * PPMULT + 0.1)
+      NOAREA(2) = NINT( WEST  * PPMULT + 0.1)
+      NOAREA(3) = NINT( SOUTH * PPMULT + 0.1)
+      NOAREA(4) = NINT( EAST  * PPMULT + 0.1)
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/fortdefs.h b/interpolation/fortdefs.h
new file mode 100755
index 0000000..e74f77c
--- /dev/null
+++ b/interpolation/fortdefs.h
@@ -0,0 +1,22 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FORTDEFS_H
+#define FORTDEFS_H
+
+#ifdef REAL_8
+#define fortreal long double
+#define fortint  int
+#else
+#define fortreal float
+#define fortint  int
+#endif
+
+#endif /* end of FORTDEFS_H */
diff --git a/interpolation/fortint.h b/interpolation/fortint.h
new file mode 100755
index 0000000..07e247c
--- /dev/null
+++ b/interpolation/fortint.h
@@ -0,0 +1,22 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifdef INTEGER_IS_INT
+#define fortint int
+#define JPointer int *
+#else
+#if defined hpR64 || defined hpiaR64
+#define fortint long long
+#define JPointer long long *
+#else
+#define fortint long
+#define JPointer long *
+#endif
+#endif
diff --git a/interpolation/freecf.F b/interpolation/freecf.F
new file mode 100755
index 0000000..f79e09f
--- /dev/null
+++ b/interpolation/freecf.F
@@ -0,0 +1,102 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE FREECF(KFLAG)
+C
+C---->
+C**** FREECF
+C
+C     PURPOSE
+C     _______
+C
+C     This routine sets the flag controlling handling of spectral
+C     to grid interpolation coefficients memory.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL FREECF(KFLAG)
+C
+C     Input parameters
+C     ________________
+C
+C     KFLAG - Flag indicating whether flushing of memory is done or not
+C              = 1 to turn on flushing
+C              = any other value to turn off flushing (default)
+C
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCSPGP - flag LFREECF
+C
+C
+C     Method
+C     ______
+C
+C     Sets flags LFREECF and NFREECF
+C
+C
+C     Externals
+C     _________
+C
+C     None
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF       March 1998
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparam2.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KFLAG
+C
+      IF( KFLAG.EQ.1 ) THEN
+        LFREECF = .TRUE.
+        NFREECF = 11041967
+      ELSE
+        LFREECF = .FALSE.
+        NFREECF = 11041967
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/funcs.F b/interpolation/funcs.F
new file mode 100755
index 0000000..beb385f
--- /dev/null
+++ b/interpolation/funcs.F
@@ -0,0 +1,145 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+C---->
+C
+C     Functions used in ocean field interpolation.
+C
+C     FUNCTION INTDN(XVAL)
+C
+C     Rounds XVAL to the largest integer less than or equal to XVAL
+C     ie truncates downwards rather than towards zero.
+C
+C     FUNCTION LENA(HSTRING)
+C
+C     Returns the length of a string, ignoring blank characters at end
+C
+C     FUNCTION HDEGS(RVAL)
+C
+C     Writes a real number into a string, in a way suitable for degs lat/long.
+C     RVAL   The real number
+C
+C     FUNCTION HMETRES(RVAL)
+C
+C     Writes a real number into a string, in a way suitable for metres depth.
+C     RVAL   The real number
+C
+C----<
+
+      INTEGER FUNCTION INTDN(XVAL)
+C
+C   Rounds XVAL to the largest integer less than or equal to XVAL
+C   ie truncates downwards rather than towards zero.
+C
+      IF((XVAL.GE.0.0).OR.(XVAL.EQ.FLOAT(INT(XVAL)))) THEN
+         INTDN = INT(XVAL)
+      ELSE
+         INTDN = INT(XVAL) - 1
+      ENDIF
+      RETURN
+      END
+
+      INTEGER FUNCTION INTUP(XVAL)
+C
+C   Rounds XVAL to the largest integer greater than or equal to XVAL
+C   ie truncates upwards rather than away from zero.
+C
+      IF(XVAL.EQ.FLOAT(INT(XVAL))) THEN
+         INTUP=INT(XVAL)
+      ELSEIF(XVAL.GE.0) THEN
+         INTUP=INT(XVAL+1)
+      ELSE
+         INTUP=INT(XVAL)
+      ENDIF
+      RETURN
+      END
+
+      INTEGER FUNCTION LENA(HSTRING)
+C
+C   Returns the length of a string, ignoring blank characters at end
+C
+      CHARACTER*(*) HSTRING
+
+      DO 100 J=LEN(HSTRING),1,-1
+         IF(HSTRING(J:J).NE.' ') GOTO 150
+  100 CONTINUE
+      J=0
+  150 CONTINUE
+      LENA=J
+
+      RETURN
+      END
+
+      FUNCTION HDEGS(RVAL)
+C   Writes a real number into a string, in a way suitable for degs lat/long.
+C     RVAL   The real number
+C
+      CHARACTER*6 HDEGS
+
+      IF(RVAL.GE.0) THEN
+         IF(RVAL.LT.10.0) THEN
+            WRITE(HDEGS,'(F4.2)') RVAL
+         ELSEIF(RVAL.LT.100.0) THEN
+            WRITE(HDEGS,'(F4.1)') RVAL
+         ELSEIF(RVAL.LT.1000.0) THEN
+            WRITE(HDEGS,'(F5.1)') RVAL
+         ELSE
+            WRITE(HDEGS,'(F5.0)') RVAL
+         ENDIF
+      ELSE
+         IF(RVAL.GT.-10.0) THEN
+            WRITE(HDEGS,'(F5.2)') RVAL
+         ELSEIF(RVAL.GT.-100.0) THEN
+            WRITE(HDEGS,'(F5.1)') RVAL
+         ELSEIF(RVAL.GT.-1000.0) THEN
+            WRITE(HDEGS,'(F6.1)') RVAL
+         ELSE
+            WRITE(HDEGS,'(F6.0)') RVAL
+         ENDIF
+      ENDIF
+
+      RETURN
+      END
+
+
+      FUNCTION HMETRES(RVAL)
+C   Writes a real number into a string, in a way suitable for metres depth.
+C     RVAL   The real number
+C
+      CHARACTER*6 HMETRES
+
+      IF(RVAL.GE.0) THEN
+         IF(RVAL.LE.9.99) THEN
+            IF(INT(RVAL*10)*10.EQ.INT(RVAL*100)) THEN
+               WRITE(HMETRES,'(F3.1)') RVAL
+            ELSE
+               WRITE(HMETRES,'(F4.2)') RVAL
+            ENDIF
+         ELSEIF(RVAL.LE.99.9) THEN
+            WRITE(HMETRES,'(F4.1)') RVAL
+         ELSEIF(RVAL.LE.999.0) THEN
+            WRITE(HMETRES,'(F4.0)') RVAL
+         ELSE
+            WRITE(HMETRES,'(F5.0)') RVAL
+         ENDIF
+      ELSE
+         IF(RVAL.GE.-9.99) THEN
+            WRITE(HMETRES,'(F5.2)') RVAL
+         ELSEIF(RVAL.GE.-99.9) THEN
+            WRITE(HMETRES,'(F5.1)') RVAL
+         ELSEIF(RVAL.GE.-999.0) THEN
+            WRITE(HMETRES,'(F5.0)') RVAL
+         ELSE
+            WRITE(HMETRES,'(F6.0)') RVAL
+         ENDIF
+      ENDIF
+
+      RETURN
+      END
diff --git a/interpolation/gasetup.F b/interpolation/gasetup.F
new file mode 100755
index 0000000..cd401ca
--- /dev/null
+++ b/interpolation/gasetup.F
@@ -0,0 +1,617 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GASETUP( KSEC1, KSEC2, KSEC3, KSEC4, ZASEC3)
+C
+C---->
+C**** GASETUP
+C
+C     Purpose
+C     -------
+C
+C     Setup GRIB sections 2 and 4 for the new interpolation product.
+C
+C     Added because of merging with grib_api
+C
+C     Interface
+C     ---------
+C
+C     IRET GASETUP( KSEC2, KSEC4)
+C
+C     Input
+C     -----
+C
+C     KSEC1   - Section 1 values (for GRIB_API)
+C     KSEC2   - Section 2 values (for GRIB_API)
+C     KSEC3   - Section 3 values (for GRIB_API)
+C     KSEC4   - Section 4 values (for GRIB_API)
+C
+C     Output
+C     ------
+C
+C     KSEC1   - Modified section 2 values (for GRI_API)
+C     KSEC2   - Modified section 2 values (for GRI_API)
+C     KSEC3   - Modified section 3 values (for GRI_API)
+C     KSEC4   - Modified section 4 values (for GRI_API)
+C
+C     Method
+C     ------
+C
+C     Use common block values and existing values from the original GRIB
+C     product used for interpolation.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG   - Logs messages.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+C
+C     Parameter(s)
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19100 )
+C
+C     Function arguments
+C
+      INTEGER KSEC1, KSEC2,KSEC3, KSEC4, REPRES, NOPAAPI
+      REAL ZASEC3
+      DIMENSION KSEC1(*), KSEC2(*),KSEC3(*), KSEC4(*), ZASEC3(*)
+C
+C     Local variables
+C
+      LOGICAL LIROTAT, LOROTAT, LFRAME, LBITMAP
+      INTEGER ILOOP, ITEMP
+C
+C***********************************************************************
+C     Section 1.   Startup.
+C***********************************************************************
+C
+ 100  CONTINUE
+C
+      GASETUP = 0
+C
+C     Check a recognized data representation type is being processed
+        
+       REPRES = NOREPR
+C
+      IF ( (NOREPR .NE.JPREGULAR  ) .AND.
+     X     (NOREPR .NE.JPREGROT   ) .AND.
+     X     (NOREPR .NE.JPGAUSSIAN ) .AND.
+     X     (NOREPR .NE.JPFGGROT   ) .AND.
+     X     (NOREPR .NE.JPQUASI    ) .AND.
+     X     (NOREPR .NE.JPQGGROT   ) .AND.
+     X     (NOREPR .NE.JPSPHROT   ) .AND.
+     X     (NOREPR .NE.JPREDLL   ) .AND.
+     X     (NOREPR .NE.JPSPHERE   ) ) GOTO 910
+C
+C     Set flags if input is rotated or if a rotation angle has been given
+C
+      LIROTAT = (NIREPR.EQ.JPSPHROT).OR.
+     X          (NIREPR.EQ.JPREGROT).OR.
+     X          (NIREPR.EQ.JPFGGROT).OR.
+     X          (NIREPR.EQ.JPQGGROT)
+C
+      LOROTAT = ((NOROTA(1).NE.-9000000).AND.(NOROTA(1).NE.0)).OR.
+     X          (NOROTA(2).NE.0)
+C
+C***********************************************************************
+C     Section 2.   Setup output product section 2.
+C***********************************************************************
+C
+ 300  CONTINUE
+C
+C     Data representation type
+C
+C     Adjust output representation type if field is rotated
+C
+      IF( LIROTAT.OR.LOROTAT ) THEN
+        KSEC2(1) = NOREPR
+        IF(NOREPR.EQ.JPREGULAR )  KSEC2(1) = JPREGROT
+        IF(NOREPR.EQ.JPSPHERE )   KSEC2(1) = JPSPHROT
+        IF(NOREPR.EQ.JPQUASI )    KSEC2(1) = JPFGGROT
+        IF(NOREPR.EQ.JPQGGROT )   KSEC2(1) = JPFGGROT
+        IF(NOREPR.EQ.JPGAUSSIAN ) KSEC2(1) = JPFGGROT
+C
+      ELSE
+C
+        IF( (NOREPR.EQ.JPQUASI).OR.(NOREPR.EQ.JPQGGROT) ) THEN
+          KSEC2(1) = JPGAUSSIAN
+        ELSE
+          KSEC2(1) = NOREPR
+        ENDIF
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.1. Setup section 2 for lat/long, equidistant
+C                  cylindrical or plate carre grids.
+C***********************************************************************
+C
+ 310  CONTINUE
+C
+      IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C       For south to north grids, only global area allowed (eg KWBC SST)
+C
+cs        IF( KSEC2(4).LT.KSEC2(7) ) THEN
+cs          IF((NOAAPI(1).NE.(-NOAAPI(3))).AND.(NOAAPI(3).NE.JP90)) THEN
+cs            CALL INTLOG(JP_ERROR,
+cs     X        'GASETUP: Subareas not allowed interpolating',JPQUIET)
+cs            CALL INTLOG(JP_ERROR,
+cs     X        'GASETUP: grids running from south to north',JPQUIET)
+cs            GASETUP = JPROUTINE + 2
+cs            GOTO 900
+cs          ENDIF
+cs        ENDIF
+C
+C       Number of points along a parallel
+C
+        KSEC2(2) = NOWE
+C
+C       Number of points along a meridian
+C
+        KSEC2(3) = NONS
+C
+C       Latitude and longitude of first grid point
+C
+        IF( NOAAPI(1).GE.0 ) THEN
+          KSEC2(4) = (NOAAPI(1)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(4) = (NOAAPI(1)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAAPI(2).GE.0 ) THEN
+          KSEC2(5) = (NOAAPI(2)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(5) = (NOAAPI(2)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       Resolution flag, increments are given
+C
+        KSEC2(6) = 128
+C
+C       Latitude and longitude of last grid point
+C
+        IF( NOAAPI(3).GE.0 ) THEN
+          KSEC2(7) = (NOAAPI(3)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(7) = (NOAAPI(3)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAAPI(4).GE.0 ) THEN
+          KSEC2(8) = (NOAAPI(4)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(8) = (NOAAPI(4)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       Flip latitudes if they run from south to north
+C       Set scanning mode flags
+C
+        IF( KSEC2(4).LT.KSEC2(7) ) THEN
+          IF( LNOGRID ) THEN
+            ITEMP = KSEC2(7)
+            KSEC2(7) = KSEC2(4)
+            KSEC2(4) = ITEMP
+            KSEC2(11) = 0
+          ELSE
+            KSEC2(11) = 64
+          ENDIF
+        ELSE
+          KSEC2(11) = NOSCNM
+        ENDIF
+C
+C       i and j  direction increments
+C
+        KSEC2(9)  = (NOGRID(1) + (JPMICRO/2)) / JPMICRO
+        KSEC2(10) = (NOGRID(2) + (JPMICRO/2)) / JPMICRO
+C
+C       Following left same as for input product
+C       - no.of vertical coordinate parameters,
+C       - lat/long of southern pole of rotation
+C       - lat/long of pole of stretching
+C
+C       If rotated, put in new lat/long of southern pole of rotation
+C
+        IF( LIROTAT.OR.LOROTAT ) THEN
+          IF( NOROTA(1).GE.0 ) THEN
+            KSEC2(13) = (NOROTA(1) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(13) = (NOROTA(1) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+          IF( NOROTA(2).GE.0 ) THEN
+            KSEC2(14) = (NOROTA(2) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(14) = (NOROTA(2) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+        ENDIF
+C
+C       Regular grid flag
+C
+        KSEC2(17) = 0
+C
+C       Following left same as for input product
+C       - earth flag
+C       - components flag
+C     Set the components flag for rotated U and V coefficients
+C
+        IF(LUVCOMP) THEN
+          KSEC2(19) = 8
+        ENDIF
+
+C       - reserved fields
+C
+C     OCEAN
+        IF(LOCEAN) THEN
+c there is always bitmap for ocean
+         ZASEC3(2) = RMISSGV
+         KSEC3(2)  = int(RMISSGV)
+         KSEC1(5)  = 192
+c-------------------
+          KSEC1(37) = 4
+          KSEC1(60) = NIOCO3
+          KSEC1(61) = NIOCO4
+          KSEC1(62) = NOOCO4F
+          KSEC1(63) = NOOCO3F
+          KSEC1(64) = NOOCO4L
+          KSEC1(65) = NOOCO3L
+          KSEC1(66) = NOOIINC
+          KSEC1(67) = NOOJINC
+          KSEC1(68) = NOOIRGR  
+          KSEC1(69) = NOONOST  
+          KSEC1(71) = 0  
+          KSEC1(72) = 0  
+          KSEC1(73) = 0  
+          KSEC1(74) = 0  
+        ENDIF
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.2. Setup section 2 for gaussian grids.
+C***********************************************************************
+C
+ 320  CONTINUE
+C
+      IF ( (NOREPR.EQ.JPGAUSSIAN).OR.
+     X     (NOREPR.EQ.JPFGGROT).OR.
+     X     (NOREPR.EQ.JPQUASI).OR.
+     X     (NOREPR.EQ.JPQGGROT) ) THEN
+C
+C       Number of points along a parallel
+C
+C       For a regular gaussian grid only
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(2) = NOWE
+        ELSE
+          KSEC2(2) = 0
+        ENDIF
+C
+C       Number of points along a meridian
+C
+        KSEC2(3) = NONS
+C
+C       Latitude and longitude of first grid point
+C
+        IF( NOAAPI(1).GE.0 ) THEN
+          KSEC2(4) = (NOAAPI(1)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(4) = (NOAAPI(1)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAAPI(2).GE.0 ) THEN
+          KSEC2(5) = (NOAAPI(2)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(5) = (NOAAPI(2)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       Resolution flag
+C
+C       For a regular gaussian grid only, increments are given
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(6) = 128
+        ELSE
+          KSEC2(6) = 0
+        ENDIF
+C
+C       Latitude and longitude of last grid point
+C
+        IF( NOAAPI(3).GE.0 ) THEN
+          KSEC2(7) = (NOAAPI(3)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(7) = (NOAAPI(3)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAAPI(4).GE.0 ) THEN
+          KSEC2(8) = (NOAAPI(4)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(8) = (NOAAPI(4)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       i direction increment
+C
+C       For a regular gaussian grid, only 
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(9) = (((JP90)/NOGAUSS)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(9) = 0
+        ENDIF
+C
+C       Number of parallels between a pole and the Equator
+C
+        KSEC2(10) = NOGAUSS
+C
+C       Scanning mode flags
+C
+        KSEC2(11) = NOSCNM
+C
+C       Following left same as for input product
+C       - no.of vertical coordinate parameters,
+C       - lat/long of southern pole of rotation
+C       - lat/long of pole of stretching
+C
+C       If rotated, put in new lat/long of southern pole of rotation
+C
+        IF( LIROTAT.OR.LOROTAT ) THEN
+          IF( NOROTA(1).GE.0 ) THEN
+            KSEC2(13) = (NOROTA(1) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(13) = (NOROTA(1) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+          IF( NOROTA(2).GE.0 ) THEN
+            KSEC2(14) = (NOROTA(2) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(14) = (NOROTA(2) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+        ENDIF
+C
+C       Regular grid flag
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(17) = 0
+        ELSE
+          KSEC2(17) = 1
+        ENDIF
+C
+C       Following left same as for input product
+C       - earth flag
+C       - components flag
+C     Set the components flag for rotated U and V coefficients
+C
+        IF(LUVCOMP) THEN
+          KSEC2(19) = 8
+        ENDIF
+
+C       - reserved fields
+C
+C       For reduced grid, move in number of points along each parallel
+C
+          IF( (NOREPR.EQ.JPQUASI) .OR.
+     X        (NOREPR.EQ.JPQGGROT) ) THEN
+          DO 325 ILOOP = 1, KSEC2(3)
+            KSEC2(22+ILOOP) = NOLPTS(ILOOP)
+ 325      CONTINUE
+        ENDIF
+C
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.3. Setup section 2 for spherical harmonic coefficients.
+C***********************************************************************
+C
+ 330  CONTINUE
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+C
+C       I, K, M pentagonal resolution parameters
+C
+        KSEC2(2) = NORESO
+        KSEC2(3) = NORESO
+        KSEC2(4) = NORESO
+C
+C       Representation type, associated legendre functions of the
+C                            first kind
+        KSEC2(5) = 1
+C
+C       Representation mode, complex packing
+C
+        KSEC2(6) = 2
+C
+C       Following left same as for input product
+C       - reserved words 7-11
+C       - no.of vertical coordinate parameters,
+C       - lat/long of southern pole of rotation
+C       - lat/long of pole of stretching
+C       - reserved words 17-22
+C
+C       If rotated, put in new lat/long of southern pole of rotation
+C
+        IF( LIROTAT.OR.LOROTAT ) THEN
+          IF( NOROTA(1).GE.0 ) THEN
+            KSEC2(13) = (NOROTA(1) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(13) = (NOROTA(1) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+          IF( NOROTA(2).GE.0 ) THEN
+            KSEC2(14) = (NOROTA(2) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(14) = (NOROTA(2) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.   Setup output bitmap section 3.
+C***********************************************************************
+      IF(ISEC1(5).EQ.192) THEN
+         KSEC3(2)  = NINT(RMISSGV)
+         ZASEC3(2) = RMISSGV
+cs         KSEC3(2)  = ISEC3(2)
+cs         ZASEC3(2) = ZSEC3(2)
+         KSEC1(5)  = 192
+         ISEC1(5)  = 0
+      ENDIF
+C
+C***********************************************************************
+C     Section 4.   Setup output product section 4.
+C***********************************************************************
+C
+ 400  CONTINUE
+C
+C     Number of values to be packed
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        KSEC4(1) = (NORESO + 1) * (NORESO + 2)
+      ELSE IF( (NOREPR.EQ.JPQUASI).OR.(NOREPR.EQ.JPQGGROT) ) THEN
+        KSEC4(1) = NOPCNT
+      ELSE
+        KSEC4(1) = NOWE * NONS
+      ENDIF
+C
+C     If all the values are missing, set the count of values negative
+C
+      IF(NOMISS.NE.0) THEN
+        KSEC4(1) = -KSEC4(1)
+      ENDIF
+C
+C     Number of bits used for each packed value
+C
+      IF(LNOACC) THEN
+        KSEC4(2) = NOACC
+      ELSE
+        KSEC4(2) = NIACC
+      ENDIF
+C
+C     Type of data, spherical harmonic = 128, grid point = 0
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        KSEC4(3) = 128
+      ELSE
+        KSEC4(3) = 0
+      ENDIF
+C
+C     Type of packing, spherical harmonic = complex
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        KSEC4(4) = 1
+      ELSE
+        KSEC4(4) = 4
+      ENDIF
+
+C     Sinisa added jpeg packing just for merging with grib_api
+        IF( NOHFUNC.EQ.'C' ) THEN
+c  spectral complex
+            KSEC4(4) = 1
+        ELSEIF( NOHFUNC.EQ.'S'.AND.NOREPR.EQ.JPSPHERE ) THEN
+c  spectral simple
+            KSEC4(4) = 2
+        ELSEIF( NOHFUNC.EQ.'J' ) THEN
+c  grid jpeg
+            KSEC4(4) = 3
+        ELSEIF( NOHFUNC.EQ.'S' ) THEN
+c  grid simple
+            KSEC4(4) = 4
+        ELSEIF( NOHFUNC.EQ.'K' ) THEN
+c  grid second order
+            KSEC4(4) = 7
+        ENDIF
+C
+C     Type of data = floating point
+C
+      KSEC4(5) = 0
+C
+C     Additional flags indicator = none
+C
+      KSEC4(6) = 0
+C
+C     Reserved word, set to 0
+C
+      KSEC4(7) = 0
+C
+C     Following set to simplest case
+C     - no.of values indicator
+C     - secondary bitmaps indicator
+C     - values width indicator
+C     - no.of bits for 2nd order values
+C
+      KSEC4(8)  = 0
+      KSEC4(9)  = 0
+      KSEC4(10) = 0
+      KSEC4(11) = 0
+C     
+C     Reserved words, set to 0
+C
+      KSEC4(12) = 0
+      KSEC4(13) = 0
+      KSEC4(14) = 0
+      KSEC4(15) = 0
+C
+C     If spherical harmonics, set following for complex packing
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+C
+C       KSEC4(16), pointer to start of packed data, setup by packing
+C       KSEC4(17), scaling factor P, unchanged from input
+C       KSEC4(18), pentagonal resolution parameter J for packing of subset,
+C                  unchanged from input
+C       KSEC4(19), pentagonal resolution parameter K for packing of subset,
+C                  unchanged from input
+C       KSEC4(20), pentagonal resolution parameter M for packing of subset,
+C                  unchanged from input
+C
+      ELSE
+        DO 410 ILOOP = 16, 20
+          KSEC4(ILOOP) = 0
+ 410    CONTINUE
+      ENDIF
+C
+C     Words 21-33 reserved, set to zero.
+C
+      DO 420 ILOOP = 21, 33
+        KSEC4(ILOOP) = 0
+ 420  CONTINUE
+C
+C***********************************************************************
+C     Section 9.   Closedown
+C***********************************************************************
+C
+ 900  CONTINUE
+C
+      RETURN
+C
+C     Invalid data represntation type
+C
+ 910  CONTINUE
+      CALL INTLOG(JP_ERROR,
+     X  'GASETUP: Data representation type not recognized: ',NOREPR)
+      CALL INTLOG(JP_ERROR,
+     X  'GASETUP: Only the following types are recognized:',JPQUIET)
+      CALL INTLOG(JP_ERROR,'GASETUP: Lat/long grid = ', JPREGULAR)
+      CALL INTLOG(JP_ERROR,'GASETUP: Lat/long (rotated) = ', JPREGROT)
+      CALL INTLOG(JP_ERROR,'GASETUP: regular gaussian = ', JPGAUSSIAN)
+      CALL INTLOG(JP_ERROR,'GASETUP: reg gauss rotated = ', JPFGGROT)
+      CALL INTLOG(JP_ERROR,'GASETUP: reduced gaussian = ', JPQUASI)
+      CALL INTLOG(JP_ERROR,'GASETUP: red gauss rotated = ', JPQUASI)
+      CALL INTLOG(JP_ERROR,'GASETUP: spherical harmonic = ', JPSPHERE)
+      CALL INTLOG(JP_ERROR,'GASETUP: spectral (rotated) = ', JPSPHROT)
+C
+      GASETUP = JPROUTINE + 1
+      RETURN
+      END
diff --git a/interpolation/gb2gb.F b/interpolation/gb2gb.F
new file mode 100755
index 0000000..077eab2
--- /dev/null
+++ b/interpolation/gb2gb.F
@@ -0,0 +1,367 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GB2GB(
+     X  INGRIB,INSIZE,OUTGRIB,OUTSIZE,OUT_EW,OUT_NS,OUTAREA)
+C
+C---->
+C**** GB2GB
+C
+C     Purpose
+C     -------
+C
+C     Create a subset of an input regular latitude/longitude
+C     gridpoint field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = GB2GB(INGRIB,INSIZE,OUTGRIB,OUTSIZE,OUT_EW,OUT_NS,OUTAREA)
+C
+C     Input
+C     -----
+C
+C     INGRIB  - Input regular latitude/longitude gridpoint field in GRIB
+C               format. 
+C     INSIZE  - Size in words (integers) of input GRIB product.
+C     OUT_EW  - East-west increment of output field (millidegrees).
+C     OUT_NS  - North-south increment of output field (millidegrees).
+C     OUTAREA - Area boundaries for output field (N/W/S/E millidegrees).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output regular latitude/longitude gridpoint field in GRIB
+C               format.
+C     OUTSIZE - Size in words (integers) of output GRIB product.
+C
+C     Returns - length in words (integers) of output GRIB product if OK,
+C               negative if error.
+C
+C
+C     Method
+C     ------
+C
+C     Area boundaries for output field are adjusted if necessary to fit
+C     the grid (N/W/S/E millidegrees).
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Unpack and pack GRIB products.
+C     AREACHK - Fixup input/output field area according to grid
+C     INTLOG  - Logs output messages
+C     JDEBUG  - Checks whether the debug flag is to be turned on.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     March 1999
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      INTEGER INGRIB,INSIZE,OUTGRIB,OUTSIZE,OUT_EW,OUT_NS,OUTAREA
+      DIMENSION INGRIB(*),OUTGRIB(OUTSIZE),OUTAREA(4)
+C
+C     Local variables
+C
+      INTEGER ISEC0,ISEC1,ISEC2,ISEC3,ISEC4
+      DIMENSION ISEC0(2),ISEC1(1024),ISEC2(1024),ISEC3(2),ISEC4(512)
+      INTEGER ILENP,ILENG,IWORD,IRET,IPOINT
+C
+      REAL PSEC2,PSEC3,PSEC4
+      DIMENSION PSEC2(512),PSEC3(2),PSEC4(1)
+C
+      INTEGER NVALSI,NVALSO
+      REAL ZSEC4I,ZSEC4O
+      DIMENSION ZSEC4I(1),ZSEC4O(1)
+      POINTER ( NPOINTI, ZSEC4I )
+      POINTER ( NPOINTO, ZSEC4O )
+C
+      INTEGER AREA(4)
+      INTEGER INC_EW,INC_NS,N_EW,N_NS,I_EW,I_NS,LOOPO,LOOPI,NEXT
+      INTEGER NWEST,NEAST,OWEST,OEAST
+      REAL EW,NS,NORTH,WEST,SOUTH,EAST
+      LOGICAL LDEBUG, LDUDEW
+      CHARACTER*1 HFUNC
+C
+C     Externals
+C
+      INTEGER  AREACHK
+      EXTERNAL AREACHK
+C
+C ------------------------------------------------------------------
+C     Section 1. Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      GB2GB = -1
+C
+      CALL JDEBUG( )
+      LDEBUG = ( NDBG.GT.0 )
+C
+      DO LOOPO = 1, 4
+        AREA(LOOPO) = OUTAREA(LOOPO)
+      ENDDO
+C
+C     Unpack input GRIB header.
+C
+      IRET = 1
+      ISEC3(2) = 1E-21
+      PSEC3(2) = 1.0E-21
+      CALL GRIBEX(ISEC0,ISEC1,ISEC2,PSEC2,ISEC3,PSEC3,ISEC4,
+     X            PSEC4,ILENP,INGRIB,INSIZE,IWORD,'J',IRET)
+      IF( IRET.GT.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,'GB2GB: GRIBEX "J" option error',IRET)
+        GOTO 900
+      ENDIF
+C
+C     Ensure that it is a regular latitude/longitude grid.
+C
+      IF( ISEC2(1).NE.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,
+     X      'GB2GB: Input not regular lat/long. Type =',ISEC2(1))
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 2. Check that output grid is a subset of the input grid.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Fixup input/output field area definitions according to grid
+C     specification.
+C
+      EW    = REAL(OUT_EW) / 1000.0
+      NS    = REAL(OUT_NS) / 1000.0
+      NORTH = REAL(AREA(1)) / 1000.0
+      WEST  = REAL(AREA(2)) / 1000.0
+      SOUTH = REAL(AREA(3)) / 1000.0
+      EAST  = REAL(AREA(4)) / 1000.0
+      IRET = AREACHK( EW, NS, NORTH, WEST, SOUTH, EAST )
+      IF( IRET.NE.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,'GB2GB: AREACHK failed:',IRET)
+        GOTO 900
+      ENDIF
+C
+      OUT_EW = NINT(EW * 1000.0)
+      OUT_NS = NINT(NS * 1000.0)
+      AREA(1) = NINT(NORTH * 1000.0)
+      AREA(2) = NINT(WEST  * 1000.0)
+      AREA(3) = NINT(SOUTH * 1000.0)
+      AREA(4) = NINT(EAST  * 1000.0)
+C
+C     Check (sub)area limits
+C
+C     North and south ..
+C
+      IF( (AREA(1).GT.ISEC2(4)) .OR.
+     X    (AREA(3).LT.ISEC2(7)) ) THEN
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'GB2GB: North/south outside input GRIB area',JPQUIET)
+          CALL INTLOG(JP_ERROR,'GB2GB: Requested north  = ',OUTAREA(1))
+          CALL INTLOG(JP_ERROR,'GB2GB: Requested south  = ',OUTAREA(3))
+          CALL INTLOG(JP_ERROR,'GB2GB: Input GRIB north = ',ISEC2(4))
+          CALL INTLOG(JP_ERROR,'GB2GB: Input GRIB south = ',ISEC2(7))
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     East and west ..
+C
+      NWEST = AREA(2)
+      NEAST = AREA(4)
+      OWEST = ISEC2(5)
+      OEAST = ISEC2(8)
+C
+      LDUDEW = 
+     X  ((NWEST.LT.0).AND.(OWEST.LT.0).AND.(NWEST.LT.OWEST)).OR.
+     X  ((NWEST.GT.0).AND.(OWEST.GT.0).AND.(NWEST.LT.OWEST)).OR.
+     X  ((NWEST.LT.0).AND.(OWEST.GT.0).AND.(NWEST.LT.(OWEST-36000))).OR.
+     X  ((NWEST.GT.0).AND.(OWEST.LT.0).AND.(NWEST.LT.(OWEST+36000))).OR.
+     X  ((NEAST.LT.0).AND.(OEAST.LT.0).AND.(NEAST.GT.OEAST)).OR.
+     X  ((NEAST.GT.0).AND.(OEAST.GT.0).AND.(NEAST.GT.OEAST)).OR.
+     X  ((NEAST.LT.0).AND.(OEAST.GT.0).AND.(NEAST.GT.(OEAST-36000))).OR.
+     X  ((NEAST.GT.0).AND.(OEAST.LT.0).AND.(NEAST.GT.(OEAST+36000)))
+C
+      IF( LDUDEW ) THEN
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'GB2GB: East/west outside input GRIB area',JPQUIET)
+          CALL INTLOG(JP_ERROR,'GB2GB: Requested west  = ',OUTAREA(2))
+          CALL INTLOG(JP_ERROR,'GB2GB: Requested east  = ',OUTAREA(4))
+          CALL INTLOG(JP_ERROR,'GB2GB: Input GRIB west = ',ISEC2(5))
+          CALL INTLOG(JP_ERROR,'GB2GB: Input GRIB east = ',ISEC2(8))
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      IF( NWEST.LT.0 ) NWEST = NWEST + 360000
+      IF( NEAST.LT.0 ) NEAST = NEAST + 360000
+      IF( NEAST.LT.NWEST ) NEAST = NEAST + 360000
+      IF( OWEST.LT.0 ) OWEST = OWEST + 360000
+      IF( OEAST.LT.0 ) OEAST = OEAST + 360000
+      IF( OEAST.LT.OWEST ) OEAST = OEAST + 360000
+C
+C     Check increments
+C
+      INC_EW = OUT_EW / ISEC2(9)
+      IF( (INC_EW*ISEC2(9)).NE.OUT_EW ) THEN
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'GB2GB: East-west step not multiple of input grid',JPQUIET)
+          CALL INTLOG(JP_ERROR,'GB2GB: Requested step  = ',OUT_EW)
+          CALL INTLOG(JP_ERROR,'GB2GB: Input GRIB step = ',ISEC2(9))
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+      INC_NS = OUT_NS / ISEC2(10)
+      IF( (INC_NS*ISEC2(10)).NE.OUT_NS ) THEN
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_ERROR,
+     X     'GB2GB: North-south step not multiple of input grid',JPQUIET)
+          CALL INTLOG(JP_ERROR,'GB2GB: Requested step  = ',OUT_NS)
+          CALL INTLOG(JP_ERROR,'GB2GB: Input GRIB step = ',ISEC2(10))
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 3. Generate new grid.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Get memory for input GRIB values.
+C
+      NVALSI = ISEC2(2)*ISEC2(3)
+      CALL JMEMHAN(3,NPOINTI,NVALSI,1,IRET)
+      IF( IRET.NE.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,'GB2GB: JMEMHAN failed for input',IRET)
+        GOTO 900
+      ENDIF
+C
+C     Get memory for output GRIB values.
+C
+      N_EW = ( (NEAST - NWEST) / OUT_EW ) + 1
+      N_NS = ( (AREA(1) - AREA(3)) / OUT_NS ) + 1
+      NVALSO = N_EW * N_NS
+      CALL JMEMHAN(4,NPOINTO,NVALSO,1,IRET)
+      IF( IRET.NE.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,'GB2GB: JMEMHAN failed for output',IRET)
+        GOTO 900
+      ENDIF
+C
+C     Unpack input GRIB values.
+C
+      IRET = 1
+      CALL GRIBEX(ISEC0,ISEC1,ISEC2,PSEC2,ISEC3,PSEC3,ISEC4,
+     X            ZSEC4I,NVALSI,INGRIB,INSIZE,IWORD,'D',IRET)
+      IF( IRET.GT.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,'GB2GB: GRIBEX "D" option error',IRET)
+        GOTO 900
+      ENDIF
+C
+C     Select points for new grid.
+C
+      I_EW = (NWEST / ISEC2(9) ) + 1
+      I_NS = ((90000-AREA(1)) / ISEC2(10) ) + 1
+C
+      NEXT = 1
+      DO LOOPO = I_NS, (I_NS-1+N_NS*INC_NS),INC_NS
+        DO LOOPI = I_EW, (I_EW-1+N_EW*INC_EW),INC_EW
+          IPOINT = MOD(ISEC2(2)+LOOPI-1,ISEC2(2))+1
+          ZSEC4O(NEXT) = ZSEC4I((LOOPO-1)*ISEC2(2)+IPOINT)
+          NEXT = NEXT + 1
+        ENDDO
+      ENDDO
+C
+C ------------------------------------------------------------------
+C     Section 4. Pack new grid into GRIB.
+C ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      ISEC2(2)  = N_EW
+      ISEC2(3)  = N_NS
+      ISEC2(4)  = OUTAREA(1)
+      ISEC2(5)  = OUTAREA(2)
+      ISEC2(7)  = OUTAREA(3)
+      ISEC2(8)  = OUTAREA(4)
+      ISEC2(9)  = OUT_EW
+      ISEC2(10) = OUT_NS
+C
+      ISEC4(1)  = N_NS * N_EW
+      IF( (NOACC.GT.0).AND.(NOACC.LT.30) ) ISEC4(2) = NOACC
+C
+C     PACKING specified can be second-order, simple or archive value
+C
+      IF( NOHFUNC.EQ.'K' ) THEN
+        HFUNC = 'K'
+        ISEC4(4)  = 64
+        ISEC4(6)  = 16
+        ISEC4(9)  = 32
+        ISEC4(10) = 16
+        ISEC4(12) = 8
+        ISEC4(13) = 4
+        ISEC4(14) = 0
+        ISEC4(15) = -1
+      ELSE IF( NOHFUNC.EQ.'S' ) THEN
+        HFUNC = 'C'
+        ISEC4(4)  = 0
+        ISEC4(6)  = 0
+      ELSE IF( NOHFUNC.EQ.'A' ) THEN
+        IF( ISEC4(4).EQ.64 ) THEN
+          HFUNC = 'K'
+        ELSE
+          HFUNC = 'C'
+        ENDIF
+      ENDIF
+C
+      IRET = 1
+      CALL GRIBEX(ISEC0,ISEC1,ISEC2,PSEC2,ISEC3,PSEC3,ISEC4,
+     X            ZSEC4O,NVALSO,OUTGRIB,OUTSIZE,IWORD,HFUNC,IRET)
+      IF( IRET.GT.0 ) THEN
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_ERROR,'GB2GB: GRIBEX "C" option error',IRET)
+        GOTO 900
+      ENDIF
+      GB2GB = IWORD
+C
+C ------------------------------------------------------------------
+C     Section 9. Return.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/getconf.F b/interpolation/getconf.F
new file mode 100755
index 0000000..935b2cd
--- /dev/null
+++ b/interpolation/getconf.F
@@ -0,0 +1,166 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GETCONF( )
+C
+C---->
+C**** GETCONF
+C
+C     PURPOSE
+C     _______
+C
+C     This routine looks for environment variable CONFIG_INTERP to
+C     decide how to handle legendre coefficients.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL GETCONF( )
+C
+C     Input parameters
+C     ________________
+C
+C     None.
+C
+C     Output parameters
+C     ________________
+C
+C     Sets flags in common block JDCFLAGS (see nifld.common):
+C
+C       LFILEIO, LMEMORY, LSHARED, LON_FLY, LMAPPED
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG, JDCFLAGS
+C
+C
+C     Method
+C     ______
+C
+C     Looks for environment variable CONFIG_INTERP to decide how to
+C     handle legendre coefficients. The variable contains entries in
+C     the format:
+C
+C       col 1
+C         |
+C         v
+C         FILEIO   to read coefficents from a file one latitude at a time
+C         MEMORY   to read all coefficents from a file into memory
+C         SHARED   to read coefficents from a memory-mapped file
+C         ON_FLY   to generate coefficents for each latitude 'on the fly'
+C
+C     Externals
+C     _________
+C
+C     JDEBUG   - Checks environment variable to switch on/off debug
+C     INTLOG   - Logs output messages
+C     GETENV   - Get value of an environment variable
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF      Jan 2000
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+#include "nifld.common"
+#include "parim.h"
+#include "jparams.h"
+C
+C     Parameters
+C
+C     Local variables
+C
+      CHARACTER*20 CONFIG
+      INTEGER IBLANK
+C
+      LOGICAL LDEBUG
+      SAVE LDEBUG
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.    Initialization.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( LIFIRST ) THEN
+C
+        LIFIRST = .FALSE.
+C
+        CALL JDEBUG( )
+        LDEBUG = NDBG.GT.0
+C
+C       Read the configuration information
+C
+        CALL GETENV('CONFIG_INTERP', CONFIG)
+        IBLANK = INDEX(CONFIG, ' ')
+        IF( IBLANK.GT.6 ) THEN
+C
+          IF( CONFIG(1:6).EQ.'FILEIO' ) LFILEIO = .TRUE.
+          IF( CONFIG(1:6).EQ.'MEMORY' ) LMEMORY = .TRUE.
+          IF( CONFIG(1:6).EQ.'SHARED' ) LSHARED = .TRUE.
+          IF( CONFIG(1:6).EQ.'ON_FLY' ) LON_FLY = .TRUE.
+          IF( CONFIG(1:6).EQ.'MAPPED' ) LMAPPED = .TRUE.
+          IF( LDEBUG ) THEN
+            CALL INTLOG(JP_DEBUG,
+     X      'GETCONF: Legendre coefficents via: '//CONFIG(1:6),JPQUIET)
+          ENDIF
+        ELSE
+#ifdef _uxp__
+           IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'GETCONF: Default legendre coeff handling: MEMORY',JPQUIET)
+          LMEMORY = .TRUE.
+#elif defined IBM_POWER4
+           IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'GETCONF: Default legendre coeff handling: MAPPED',JPQUIET)
+          LMAPPED = .TRUE.
+#else
+           IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'GETCONF: Default legendre coeff handling: FILEIO',JPQUIET)
+          LFILEIO = .TRUE.
+#endif
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine.
+C     -----------------------------------------------------------------|
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/gettru.F b/interpolation/gettru.F
new file mode 100755
index 0000000..c81a8af
--- /dev/null
+++ b/interpolation/gettru.F
@@ -0,0 +1,30 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GETTRU()
+C
+C---->
+C*****GETTRU*
+C
+C     PURPOSE
+C     -------
+C
+C      Finding Corresponding Truncation 
+C
+#include "parim.h"
+#include "nofld.common"
+
+      GETTRU = NORESO
+
+        CALL INTLOG(JP_DEBUG,
+     X 'GETTRU: Corresponding Truncation',GETTRU)
+C
+      RETURN
+      END
diff --git a/interpolation/ggintrp.F b/interpolation/ggintrp.F
new file mode 100755
index 0000000..7488294
--- /dev/null
+++ b/interpolation/ggintrp.F
@@ -0,0 +1,305 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,NGAUSS,TYPE,FIELD)
+C
+C---->
+C**** GGINTRP
+C
+C     PURPOSE
+C     _______
+C
+C     Finds values at the points of a row by interpolation within a
+C     gaussian field.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL GGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,NGAUSS,TYPE,FIELD)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     NEWFLD  - The field of values being created
+C     NEXT    - Start offset of the latitude row being created
+C     INROW   - The number of points in the latitude row
+C     OLAT    - Latitude of target point
+C     OLON    - Longitude of target point
+C     FIELD   - Original gaussian field
+C     NGAUSS  - Gaussian field number
+C     TYPE    - Original unrotated gaussian field type
+C               = 'F' for full (regular) gaussian field
+C               = 'R' for reduced (quasi) gaussian field
+C
+C     Output parameters
+C     ________________
+C
+C     NEWFLD(NEXT) to NEWFLD(NEXT+INROW-1) contains the latitude row
+C     values.
+C
+C
+C     METHOD
+C     ______
+C
+C     Uses distance weighted values of 4 neighbouring points unless
+C     within small distance of one of the neighbours, in which case
+C     the value at that point is used.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     JGETGG  - Gets gaussian grid definition.
+C     JMKOFGG - Builds offsets to start of each latitude row in the
+C               gaussian grid.
+C     JNORSGG - Find nearest north/south latitude in the gaussian grid.
+C     INTLOG  - Logs output messages
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None.
+C
+C
+C     COMMENTS
+C     ________
+C
+C     Some loops have been split and simplified to help with
+C     vectorisation on VPP.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPFACTR, JPMAXGG
+      PARAMETER( JPFACTR = 10000 )
+      PARAMETER( JPMAXGG = 4096 )
+      REAL JPEPS
+      PARAMETER( JPEPS = 1E-2)
+C
+C     Function arguments
+C
+      REAL NEWFLD, OLAT, OLON, FIELD
+      DIMENSION NEWFLD(*), OLAT(*), OLON(*), FIELD(*)
+      INTEGER NEXT, INROW, NGAUSS
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      INTEGER LOOP, IVALUE
+      INTEGER NORTH, SOUTH, IWESTN, IWESTS, IEASTN, IEASTS
+      REAL NSTEP, SSTEP
+      DIMENSION NORTH(JPMAXGG), SOUTH(JPMAXGG)
+      DIMENSION IWESTN(JPMAXGG), IWESTS(JPMAXGG)
+      DIMENSION IEASTN(JPMAXGG), IEASTS(JPMAXGG)
+      DIMENSION NSTEP(JPMAXGG), SSTEP(JPMAXGG)
+      REAL DNORTH, DSOUTH, DWESTN, DWESTS, DEASTN, DEASTS
+      DIMENSION DNORTH(JPMAXGG), DSOUTH(JPMAXGG)
+      DIMENSION DWESTN(JPMAXGG), DWESTS(JPMAXGG)
+      DIMENSION DEASTN(JPMAXGG), DEASTS(JPMAXGG)
+      REAL GLATS(JPMAXGG/2)
+      INTEGER NGPTS(JPMAXGG/2)
+      INTEGER KOFSET(JPMAXGG/2)
+      INTEGER KRET, OLDGAUS
+      DATA OLDGAUS/0/
+      CHARACTER*1 OLDTYPE
+      DATA OLDTYPE/' '/
+      SAVE OLDGAUS, OLDTYPE, GLATS, NGPTS, KOFSET
+#ifdef __uxp__
+      REAL ONW, ONE, OSW, OSE
+      DIMENSION ONW(JPMAXGG), ONE(JPMAXGG), OSW(JPMAXGG), OSE(JPMAXGG)
+#endif
+C
+C     Externals
+C
+      INTEGER JNORSGG
+      EXTERNAL JNORSGG
+#ifndef __uxp__
+C
+C     Statement function
+C
+      INTEGER X, Y
+      REAL OFIELD
+      OFIELD(X,Y) = FIELD(KOFSET(X)+Y)
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Get gaussian grid definition (first time only)
+C
+      IF ( (OLDGAUS.NE.NGAUSS).OR.(OLDTYPE.NE.TYPE) ) THEN
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'GGINTRP: Get gaussian grid type:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+        CALL INTLOG(JP_DEBUG, 'GGINTRP: grid number:',NGAUSS)
+C
+        CALL JGETGG(NGAUSS,TYPE,GLATS,NGPTS,KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'GGINTRP: Failed to get gaussian grid definition:',JPQUIET)
+          CALL INTLOG(JP_ERROR, 'GGINTRP: grid type:',JPQUIET)
+          CALL INTLOG(JP_ERROR, TYPE,JPQUIET)
+          CALL INTLOG(JP_ERROR, 'GGINTRP: grid number:',NGAUSS)
+          STOP 
+        ENDIF
+C
+C       Build array of offsets in field to start of each latitude line
+C
+        CALL INTLOG(JP_DEBUG,'GGINTRP: Build row offsets',JPQUIET)
+        IF( TYPE.EQ.'R') THEN
+          CALL JMKOFGG(TYPE,1,NGAUSS*2,0.0,360.0,NGAUSS,NGPTS,KOFSET)
+        ELSE
+          CALL JMKOFGG(TYPE,1,NGAUSS*2,0.0,(360.0-(90.0/NGAUSS)),
+     X                 NGAUSS,NGPTS,KOFSET)
+        ENDIF
+        OLDGAUS = NGAUSS
+        OLDTYPE = TYPE
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Find latitudes of grid lines to north and south of
+C                the points and calculate grid interval along lines.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      DO LOOP = 1, INROW
+        NORTH(LOOP) = JNORSGG( OLAT(LOOP), GLATS, NGAUSS, 1)
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        SOUTH(LOOP) = MIN( NORTH(LOOP)+1, NGAUSS*2)
+        DNORTH(LOOP) = ABS(GLATS(NORTH(LOOP)) - OLAT(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        DSOUTH(LOOP) = 1.0 - DNORTH(LOOP)
+        NSTEP(LOOP) = 360.0/FLOAT(NGPTS(NORTH(LOOP)))
+        SSTEP(LOOP) = 360.0/FLOAT(NGPTS(SOUTH(LOOP)))
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 3. Find neighbouring points.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      DO LOOP = 1, INROW
+C
+C       Calculate normalised distance west and east to neighbouring
+C       points on lines to north and south of the point
+C
+        IWESTN(LOOP) = INT(OLON(LOOP)/NSTEP(LOOP))
+        IWESTS(LOOP) = INT(OLON(LOOP)/SSTEP(LOOP))
+        IEASTN(LOOP) = IWESTN(LOOP) + 1
+        IEASTS(LOOP) = IWESTS(LOOP) + 1
+C
+        DWESTN(LOOP) =
+     X   ABS((OLON(LOOP) - FLOAT(IWESTN(LOOP))*NSTEP(LOOP))/NSTEP(LOOP))
+        DEASTN(LOOP) = 1.0 - DWESTN(LOOP)
+C
+        DWESTS(LOOP) =
+     X   ABS((OLON(LOOP) - FLOAT(IWESTS(LOOP))*SSTEP(LOOP))/SSTEP(LOOP))
+        DEASTS(LOOP) = 1.0 - DWESTS(LOOP)
+C
+C       Adjust west and east for longitude wrap-around
+C
+        IVALUE=NGPTS(NORTH(LOOP))
+        IF( IEASTN(LOOP).GE.IVALUE) THEN
+          IEASTN(LOOP) = IEASTN(LOOP) - IVALUE
+          IF( IWESTN(LOOP).GE.IVALUE) IWESTN(LOOP) = IWESTN(LOOP)-IVALUE
+        ENDIF
+C
+        IVALUE=NGPTS(SOUTH(LOOP))
+        IF( IEASTS(LOOP).GE.IVALUE) THEN
+          IEASTS(LOOP) = IEASTS(LOOP) - IVALUE
+          IF( IWESTS(LOOP).GE.IVALUE) IWESTS(LOOP) = IWESTS(LOOP)-IVALUE
+        ENDIF
+C
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 4. Interpolate using neighbouring points.
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+C       Use bi-linear interpolation from four neighbouring points.
+C
+#ifdef __uxp__
+      DO LOOP = 1, INROW
+        ONW(LOOP) =
+     X    FIELD(KOFSET(NORTH(LOOP))+IWESTN(LOOP)) * DEASTN(LOOP)
+        ONE(LOOP) =
+     X    FIELD(KOFSET(NORTH(LOOP))+IEASTN(LOOP)) * DWESTN(LOOP)
+        OSW(LOOP) =
+     X    FIELD(KOFSET(SOUTH(LOOP))+IWESTS(LOOP)) * DEASTS(LOOP)
+        OSE(LOOP) =
+     X    FIELD(KOFSET(SOUTH(LOOP))+IEASTS(LOOP)) * DWESTS(LOOP)
+C
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        NEWFLD(NEXT+LOOP-1) = 
+     X        (ONW(LOOP) + ONE(LOOP)) * DSOUTH(LOOP) +
+     X        (OSW(LOOP) + OSE(LOOP)) * DNORTH(LOOP)
+      ENDDO
+#else
+      DO LOOP = 1, INROW
+        NEWFLD(NEXT+LOOP-1) =
+     X    ( ( OFIELD(NORTH(LOOP),IWESTN(LOOP)) * DEASTN(LOOP) +
+     X        OFIELD(NORTH(LOOP),IEASTN(LOOP)) * DWESTN(LOOP) )
+     X      * DSOUTH(LOOP) +
+     X      ( OFIELD(SOUTH(LOOP),IWESTS(LOOP)) * DEASTS(LOOP) +
+     X        OFIELD(SOUTH(LOOP),IEASTS(LOOP)) * DWESTS(LOOP) )
+     X      * DNORTH(LOOP) )
+      ENDDO
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 9. Closedown.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/ggrotat.F b/interpolation/ggrotat.F
new file mode 100755
index 0000000..0c0419c
--- /dev/null
+++ b/interpolation/ggrotat.F
@@ -0,0 +1,235 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GGROTAT(OLDFLD, NEWFLD, NUMPTS, POLELAT, POLELON,
+     X                         TYPE, NGAUSS)
+C
+C---->
+C**** GGROTAT
+C
+C     PURPOSE
+C     _______
+C
+C     Generates a rotated gaussian grid.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = GGROTAT(OLDFLD,NEWFLD,NUMPTS,POLELAT,POLELON,TYPE,NGAUSS)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     OLDFLD  = Original gaussian grid field.
+C     NUMPTS  = Total number of points in the original field.
+C     POLELAT = Latitude of the South Pole of rotation.
+C     POLELON = Longitude of the South Pole of rotation.
+C     TYPE    = 'R' if the gaussian field is reduced (quasi) gaussian.
+C             = 'F' if the gaussian field is regular (full) gaussian.
+C     NGAUSS  = Gaussian grid number (number of latitude rows between
+C               the pole and the equator).
+C
+C     Output parameters
+C     ________________
+C    
+C     NEWFLD  = New gaussian grid field.
+C               (This can be the same array as OLDFLD).
+C
+C     Function returns zero if interpolation ran OK.
+C
+C
+C     METHOD
+C     ______
+C
+C     The nearest gaussian latitude row is found.
+C
+C     Work space is dynamically allocated. It is retained for future
+C     calls.
+C
+C     EXTERNALS
+C     _________
+C
+C     JGETGG  - Pickup the gaussian grid definition.
+C     GGVALUE - Calculates the interpolated value at a point of the new
+C               gaussian grid.
+C     INTLOG  - Logs output messages
+C     INTLOGR - Logs output messages
+C     JMEMHAN - Dynamically allocate work array
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     The input field is assumed to be global in extent, and a known
+C     definition, either N160 or N80 (reduced or regular).
+C     The output field has the same type and dimensions as the input
+C     field.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMAXGG
+      PARAMETER( JPROUTINE = 38500 )
+      PARAMETER (JPMAXGG = 1280)
+C
+C     Subroutine arguments
+C
+      REAL OLDFLD, NEWFLD, POLELAT, POLELON
+      INTEGER NUMPTS, NGAUSS
+      DIMENSION OLDFLD(NUMPTS), NEWFLD(NUMPTS)
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      REAL GLATS(JPMAXGG)
+      INTEGER NGPTS(JPMAXGG)
+      INTEGER OLDGAUS
+      DATA OLDGAUS/0/
+      CHARACTER*1 OLDTYPE
+      DATA OLDTYPE/' '/
+      SAVE GLATS, NGPTS, OLDGAUS, OLDTYPE
+C
+      INTEGER NEXT, NEXLAT, INROW, LOOP, KRET
+      REAL STEPLON, CUTOFF, RLAT, RLON
+      DIMENSION RLON(JPMAXGG*2)
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      REAL DUMI
+      POINTER (IDUMI, DUMI)
+      DIMENSION DUMI(1)
+      SAVE IDUMI, ISIZE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      GGROTAT = 0
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'GGROTAT: Number of pts in original field = ',NUMPTS)
+      CALL INTLOGR(JP_DEBUG,
+     X  'GGROTAT: Latitude of the South Pole of rotation = ',POLELAT)
+      CALL INTLOGR(JP_DEBUG,
+     X  'GGROTAT: Longitude of the South Pole of rotation = ',POLELON)
+      CALL INTLOG(JP_DEBUG,'GGROTAT: Get gaussian grid type:',JPQUIET)
+      CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+      CALL INTLOG(JP_DEBUG,'GGROTAT: grid number:',NGAUSS)
+C
+C     Get gaussian grid definition (first time only)
+C
+      IF( (OLDGAUS.NE.NGAUSS).OR.(OLDTYPE.NE.TYPE)) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'GGROTAT: Get definitions for gaussian grid type:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+        CALL INTLOG(JP_DEBUG,'GGROTAT: grid number:',NGAUSS)
+C
+        CALL JGETGG(NGAUSS,TYPE,GLATS,NGPTS,KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'GGROTAT: Failed to get gaussian grid definition:',JPQUIET)
+          GGROTAT = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+        OLDGAUS = NGAUSS
+        OLDTYPE = TYPE
+      ENDIF
+C
+C     Allocate work space if not already done.
+C
+      IF( ISIZE.LT.NUMPTS ) THEN
+        ISIZE = NUMPTS
+        CALL JMEMHAN(18,IDUMI,ISIZE,1,KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'GGROTAT: Memory allocation failed: status = ',KRET)
+          GGROTAT = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Move the original field to the work array
+C
+      DO LOOP = 1, NUMPTS
+        DUMI(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 2. Work through latitude lines from north to south
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO NEXLAT = 1, NGAUSS*2
+        INROW = NGPTS(NEXLAT)
+        STEPLON = 360.0/INROW
+        RLAT = GLATS(NEXLAT)
+C
+C       Fill in longitudes along current line of latitude
+C
+        DO LOOP = 1, INROW
+          RLON(LOOP) = (LOOP-1)*STEPLON
+        ENDDO
+C
+C       Rotate the current line of latitude
+C
+        CALL GGVALUE(NEWFLD,NEXT,INROW,RLAT,RLON,
+     X               POLELAT,POLELON,NGAUSS,TYPE,DUMI)
+C
+        NEXT = NEXT + INROW
+C
+      ENDDO
+       NUMPTS = NEXT
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,'GGROTAT: Return from GGROTAT:',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/ggvalue.F b/interpolation/ggvalue.F
new file mode 100755
index 0000000..d2060c2
--- /dev/null
+++ b/interpolation/ggvalue.F
@@ -0,0 +1,153 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE GGVALUE(NEWFLD, NEXT, INROW, RLAT, RLON,
+     X                   POLELAT, POLELON, NGAUSS, TYPE, FIELD)
+C
+C---->
+C**** GGVALUE
+C
+C     PURPOSE
+C     _______
+C
+C     Rotates one line of latitude in a gaussian grid.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL GGVALUE(NEWFLD, NEXT, INROW, RLAT, RLON,
+C    X             POLELAT, POLELON, NGAUSS, TYPE, FIELD)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     NEWFLD  - The field of values being created
+C     NEXT    - Start offset of the latitude row being created
+C     INROW   - The number of points in the latitude row
+C     RLAT    - Target point latitude in the rotated grid
+C     RLON    - Target point longitude in the rotated grid
+C     POLELAT - Latitude of the rotated South Pole
+C     POLELON - Longitude of the rotated South Pole
+C     FIELD   - Original unrotated gaussian field values
+C     NGAUSS  - Original unrotated gaussian field number
+C     TYPE    - Original unrotated gaussian field type
+C               = 'F' for full (regular) gaussian field
+C               = 'R' for reduced (quasi) gaussian field
+C
+C     Output parameters
+C     ________________
+C
+C     NEWFLD(NEXT) to NEWFLD(NEXT+INROW-1) contains the latitude row
+C     values.
+C
+C
+C     METHOD
+C     ______
+C
+C     Rotates the lat/long positions of points along a latitude row in
+C     a rotated gaussian grid back to positions in the unrotated grid
+C     and then interpolates values from the original grid.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     LL2XYZ  - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     GGINTRP - Interpolates a value from an existing grid.
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     The input field is assumed to be global in extent, and a known
+C     definition, either N160 or N80 (reduced or regular).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPMAXGG
+      PARAMETER( JPMAXGG = 1280 )
+C
+C     Function arguments
+C
+      REAL NEWFLD, RLAT, RLON, POLELAT, POLELON, FIELD
+      DIMENSION NEWFLD(*), RLON(*), FIELD(*)
+      INTEGER NEXT, INROW, NGAUSS
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      REAL X(JPMAXGG), Y(JPMAXGG), Z(JPMAXGG)
+      REAL RX(JPMAXGG),RY(JPMAXGG),RZ(JPMAXGG)
+      REAL OLAT(JPMAXGG),OLON(JPMAXGG)
+      INTEGER LOOP
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL LL2XYZ(RLAT,RLON,X,Y,Z,INROW)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLELAT),X,Y,Z,RX,RY,RZ,INROW)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (after longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,OLAT,OLON,INROW)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, INROW
+        OLON(LOOP) = OLON(LOOP) + POLELON
+        IF( OLON(LOOP).LT.0.0 )   OLON(LOOP) = OLON(LOOP) + 360.0
+        IF( OLON(LOOP).GE.360.0 ) OLON(LOOP) = OLON(LOOP) - 360.0
+      ENDDO
+C
+C     Interpolate the original unrotated grid to the points in the
+C     rotated line
+C
+      CALL GGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,NGAUSS,TYPE,FIELD)
+C
+      RETURN
+      END
diff --git a/interpolation/global.F b/interpolation/global.F
new file mode 100755
index 0000000..e6d701a
--- /dev/null
+++ b/interpolation/global.F
@@ -0,0 +1,34 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION GLOBAL()
+C
+C---->
+C*****GLOBAL*
+C
+C     PURPOSE
+C     -------
+C     LGLOBL      - Flag to say if output grid is global
+C
+C     Function argument
+C
+
+#include "parim.h"
+#include "nofld.common"
+
+      GLOBAL = 0
+      IF(LGLOBL) THEN
+         GLOBAL = 1
+         CALL INTLOG(JP_DEBUG,'GLOBAL: Output Grid is Global'
+     X   ,JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/gmapbit.c b/interpolation/gmapbit.c
new file mode 100755
index 0000000..5a9ddcd
--- /dev/null
+++ b/interpolation/gmapbit.c
@@ -0,0 +1,43 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "bitmap.h"
+
+fortint GMAPBIT(
+  char ** bitmap,
+  fortint * columnCount,
+  fortint * row,
+  fortint * column) {
+/*
+// Returns the bit at position (row,column) of bitmap.
+//
+// Called from FORTRAN:
+//
+// VALUE = GMAPBIT(BITMAP,COLCNT,N,M)
+//
+// where:
+//
+// BITMAP is an array containing the bitmap.
+// COLCNT is the number of values per row.
+// N is the row number (starting from 1)
+// M is the column number (starting from 1)
+//
+*/
+int bitNumber, byte, bit;
+char value;
+
+  bitNumber = ((*row)-1)*(*columnCount) + ((*column)-1);
+  byte = bitNumber / 8;
+  bit  = bitNumber % 8;
+  value = ((*bitmap)[byte] >> (7-bit)) & 0x01;
+
+  return (fortint) value;
+}
diff --git a/interpolation/grdynam.h b/interpolation/grdynam.h
new file mode 100755
index 0000000..b736a73
--- /dev/null
+++ b/interpolation/grdynam.h
@@ -0,0 +1,169 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "grdynam.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains all the dynamic work space array definitions
+C     for grid point to grid point interpolation.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "grdynam.h"
+C
+C     Common block usage
+C     __________________
+C
+C     GRID_POINT
+C
+C     NILATGP      - POINTER to array MILATG.
+C     NILONGP      - POINTER to array MILONG.
+C     NILSMP       - POINTER to array MILSM.
+C     NINPNTP      - POINTER to array RINPNT.
+C     NISTRTP      - POINTER to array MISTRT.
+C     NNSDISTP     - POINTER to array MNSDIST.
+C     NNSINDP      - POINTER to array MNSIND.
+C     NMAXP        - POINTER to array RMAX.
+C     NOLATGP      - POINTER to array MOLATG.
+C     NOLONGP      - POINTER to array MOLONG.
+C     NOLSMP       - POINTER to array MOLSM.
+C     NWEDISTP     - POINTER to array MWEDIST.
+C     NWEINDP      - POINTER to array MWEIND.
+C     NWFACTP      - POINTER to array WFACT.
+C
+C     MILATG       - Dynamic array of length (NINS) (see nifld.common)
+C                    which holds the values of the input field
+C                    latitudes.
+C     MILONG       - Dynamic array of length (NIWE + 1) (see
+C                    nifld.common) which holds the values of the
+C                    input field longitudes.
+C     MILSM        - Dynamic array of length (NIWE, 2) (see
+C                    nifld.common) used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MISTRT       - Dynamic array of length (NINS) (see nifld.common)
+C                    which holds the array offsets of the start of
+C                    each latitude line for a quasi regular Gaussian
+C                    input field. No space is assigned to this array
+C                    for a regular input field.
+C     MNSDIST      - Dynamic array of length (2, NONS) (see
+C                    nofld.common) which holds the distances to
+C                    neighbouring latitude lines of the input field
+C                    from the associated line of latitude in the
+C                    output field.
+C     MNSIND       - Dynamic array of length (2, NONS) (see
+C                    nofld.common) which holds the latitude line
+C                    numbers (array offset) of the input field
+C                    associated with each line of latitude in the
+C                    output field.
+C     MOLATG       - Dynamic array of length (NONS) (see nofld.common)
+C                    which holds the values of the output field
+C                    latitudes.
+C     MOLONG       - Dynamic array of length (NOWE) (see nofld.common)
+C                    which holds the values of the output field
+C                    longitudes.
+C     MOLSM        - Dynamic array of length (NOWE) (see nofld.common)
+C                    used in calculating the effects of the land sea
+C                    mask on interpolation.
+C     MWEDIST      - Dynamic array of length (2, NONS) for a regular
+C                    input field and of length (2, 2 * NONS * NOWE)
+C                    (see nofld.common) for a quasi regular Gaussian
+C                    input field. This array holds the distances to
+C                    neighbouring longitude points of the input field
+C                    from the associated longitude points in the
+C                    output field.
+C     MWEIND       - Dynamic array of length (2, NONS) for a regular
+C                    input field and of length (2, 2 * NONS * NOWE)
+C                    (see nofld.common) for a quasi regular Gaussian
+C                    input field. This array holds the longitude
+C                    points (array offset) from the input field
+C                    associated with each longitude point in the
+C                    output field.
+C     RINPNT       - Dynamic array of length (NOWE) (see nofld.common)
+C                    used to aid vectorisation in processing
+C                    precipitation fields.
+C     RMAX         - Dynamic array of length (NOWE) (see nofld.common)
+C                    used to aid vectorisation in processing
+C                    precipitation fields.
+C     WFACT        - Dynamic array of length (4, NOWE * NONS) (see
+C                    nofld.common) which holds the interpolation
+C                    weights for each point in the output field.
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        June 1996
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Pointer variable declaration and common
+C     -----------------------------------------------------------------|
+C
+#ifdef POINTER_64
+      INTEGER*8
+#else
+      INTEGER
+#endif
+     1   NILONGP, NILATGP, NOLONGP, NOLATGP, NNSINDP, NNSDISTP,
+     2   NWEINDP, NWEDISTP, NISTRTP, NILSMP, NOLSMP, NWFACTP,
+     3   NMAXP, NINPNTP
+C
+      COMMON /GRID_POINT/
+     1   NILONGP, NILATGP, NOLONGP, NOLATGP, NNSINDP, NNSDISTP,
+     2   NWEINDP, NWEDISTP, NISTRTP, NILSMP, NOLSMP, NWFACTP,
+     3   NMAXP, NINPNTP
+C
+      SAVE /GRID_POINT/
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Pointer and array combination
+C                Array dimensions are in nifld.common and
+C                nofld.common
+C     -----------------------------------------------------------------|
+C
+      INTEGER MILONG, MOLONG, MILATG, MOLATG, MNSIND, MNSDIST,
+     1   MWEIND, MWEDIST, MISTRT, MILSM, MOLSM
+C
+      REAL WFACT, RMAX, RINPNT
+C
+      POINTER (NILONGP, MILONG (NIWE + 1) )
+      POINTER (NOLONGP, MOLONG (NOWE) )
+      POINTER (NILATGP, MILATG (NINS) )
+      POINTER (NOLATGP, MOLATG (NONS) )
+      POINTER (NNSINDP, MNSIND (2, NONS) )
+      POINTER (NNSDISTP, MNSDIST (2, NONS) )
+C
+      POINTER (NWFACTP, WFACT (4, NOWE * NONS) )
+ 
+C     These arrays are only used as (2, NOWE) for regular input
+C
+      POINTER (NWEINDP, MWEIND (2, 2 * NOWE * NONS) )
+      POINTER (NWEDISTP, MWEDIST (2, 2 * NOWE * NONS) )
+C
+C     These arrays are not used for regular input
+C
+      POINTER (NISTRTP, MISTRT (NINS) )
+C
+C     These arrays are not used unless OLSM is .TRUE.
+C
+      POINTER (NILSMP, MILSM (NIWE, 2) )
+      POINTER (NOLSMP, MOLSM (NOWE) )
+C
+C     Works space for precipitation
+C
+      POINTER (NMAXP, RMAX (NOWE) )
+      POINTER (NINPNTP, RINPNT (NOWE) )
diff --git a/interpolation/grfixed.h b/interpolation/grfixed.h
new file mode 100755
index 0000000..8d9cb57
--- /dev/null
+++ b/interpolation/grfixed.h
@@ -0,0 +1,77 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "grfixed.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains all the fixed work space array definitions for
+C     grid point to grid point interpolation.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "grfixed.h"
+C
+C     Common block usage
+C     __________________
+C
+C     FIXED_INTS
+C
+C     MEXPAND      - Array of length JPLG01 (see parim.h) used to
+C                    expand one latitude line of the 10 minute land
+C                    sea mask file to have one word per bit for
+C                    improved efficiency.
+C     MILLEN       - Array of length JPLAT (see parim.h) containing
+C                    a quasi regular Gaussian field latitude line
+C                    length definition. This array may be provided by
+C                    the interpolation definition routines.
+C     MWORK        - Array of length JPLONG (see parim.h) used to
+C                    read one latitude line of a standard land sea
+C                    mask file.
+C
+C     FIXED_REAL
+C
+C     RIGAUSS      - Array of length JPLAT (see parim.h) containing a
+C                    full definition of the Gaussian latitudes for an
+C                    input field Gaussian truncation.
+C     ROGAUSS      - Array of length JPLAT (see parim.h) containing a
+C                    full definition of the Gaussian latitudes for an
+C                    output field Gaussian truncation.
+C
+C     Author
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        June 1996
+C
+C
+C     _______________________________________________________
+C
+C*    Section 1. Fixed length arrays
+C     _______________________________________________________
+C
+      INTEGER MILLEN(JPLAT), MWORK(JPLONG), MEXPAND(JPLG01)
+C
+      REAL RIGAUSS(JPLAT), ROGAUSS(JPLAT), ROREDLL(JPLAT)
+C
+      COMMON /FIXED_INTS/ MWORK, MILLEN, MEXPAND
+C
+      SAVE /FIXED_INTS/
+C
+      COMMON /FIXED_REAL/ RIGAUSS, ROGAUSS, ROREDLL
+C
+      SAVE /FIXED_REAL/
+C
diff --git a/interpolation/grprs.h b/interpolation/grprs.h
new file mode 100755
index 0000000..dc4e010
--- /dev/null
+++ b/interpolation/grprs.h
@@ -0,0 +1,16 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Common blocks holding default or user supplied values for printing.
+C
+      LOGICAL GRPRSET
+      INTEGER GRPRSM
+C
+      COMMON /GRPRSCM/ GRPRSM, GRPRSET
diff --git a/interpolation/grspace.h b/interpolation/grspace.h
new file mode 100755
index 0000000..f0ed44d
--- /dev/null
+++ b/interpolation/grspace.h
@@ -0,0 +1,20 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "grspace.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains all the work space array definitions for
+C     grid point to grid point interpolation.
+C
+#include "grfixed.h"
+#include "grdynam.h"
diff --git a/interpolation/hgengg.F b/interpolation/hgengg.F
new file mode 100755
index 0000000..d18a900
--- /dev/null
+++ b/interpolation/hgengg.F
@@ -0,0 +1,294 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HGENGG(AREA,POLE,KGNNEW,HGTYPE,KNPTS,GNLATS,
+     X                        IGSIZE,RLAT,RLON,NUMPTS)
+C
+C---->
+C**** HGENGG
+C
+C     Purpose
+C     -------
+C
+C     This routine calculates the original latitude and longitude
+C     values (before rotation) for a rotated gaussian grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HGENGG(AREA,POLE,KGNNEW,HGTYPE,KNPTS,IGSIZE,
+C    X              RLAT,RLON,NUMPTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     AREA    - Limits of area (N/W/S/E)
+C     POLE    - Pole of rotation (lat/long)
+C     KGNNEW  - Gaussian number for field
+C     HGTYPE  - Type of new gaussian field
+C               'F' = full, ie regular
+C               'R' = reduced, ie quasi-regular
+C     KNPTS   - Array containing number of points at each latitude
+C     GNLATS  - Array containing list of gaussian latitudes
+C     IGSIZE  - The size of the array to fill with the gaussian field
+C     NUMPTWE - Calculate number of grid pts in range from west to east
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     RLAT  - Vector of orginal latitude values for the points in
+C             the rotated grid.
+C     RLON  - Vector of orginal longitude values for the points in
+C             the rotated grid.
+C     NUMPTS - Number of points in new field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     The vector of points runs from West to East in rows, the rows
+C     run from North to South.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JDEBUG  - Tests if debug output required.
+C     HLL2XYZ - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      February 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      REAL JSCALE
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+      PARAMETER (JSCALE  = 1000.0 )
+C
+C     Function arguments
+C
+      CHARACTER*1 HGTYPE
+      INTEGER KGNNEW,KNPTS(KGNNEW*2),IGSIZE,NUMPTS
+      REAL AREA(4),POLE(2),RLAT(*),RLON(*), GNLATS(KGNNEW*2)
+C
+C     Local variables
+C
+      INTEGER LOOP, LOOPI, LOOPO, IGRIDNI, NLON
+      INTEGER ISIZE, ISIZOLD, NBYTES
+      REAL GRID, X(1), Y(1), Z(1)
+      REAL RX(1), RY(1), RZ(1)
+      POINTER( IPX, X )
+      POINTER( IPY, Y )
+      POINTER( IPZ, Z )
+      POINTER( IPRX, RX )
+      POINTER( IPRY, RY )
+      POINTER( IPRZ, RZ )
+C
+      DATA ISIZOLD/-1/
+      SAVE ISIZOLD,IPX,IPY,IPZ,IPRX,IPRY,IPRZ
+C
+C     Externals
+C
+      INTEGER NUMPTWE
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement functions
+C
+      REAL A, B
+      LOGICAL SOUTHOF
+      SOUTHOF(A,B) = ((A) - (B)).GT.-1E-4
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HGENGG = 0
+C
+      CALL JDEBUG()
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Calculate current grid latitudes and longitudes
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      GRID = 360.0 / REAL(KGNNEW*4)
+      IGRIDNI = NINT(GRID*JSCALE)
+C
+      NUMPTS = 0
+      NOPCNT = 0
+      NONS   = 0
+      NOWE   = 0
+      NO1NS  = 0
+C
+      DO LOOPO = 1, KGNNEW*2
+C
+C       Generate points inside the area only.
+C
+        IF( SOUTHOF(AREA(JNORTH),GNLATS(LOOPO)).AND.
+     X      SOUTHOF(GNLATS(LOOPO),AREA(JSOUTH)) ) THEN
+C
+          IF( NO1NS.EQ.0 ) NO1NS = LOOPO
+          NONS = NONS + 1
+C
+C         Grid step varies for a reduced (quasi-regular) gaussian grid
+C
+          IF( HGTYPE.EQ.'R' ) THEN
+            GRID = 360.0 / REAL(KNPTS(LOOPO))
+            IGRIDNI = NINT(GRID*JSCALE)
+          ENDIF
+C
+          NLON = NUMPTWE(AREA(JWEST),AREA(JEAST),GRID)
+          NOWE = NLON
+          DO LOOPI = 1, NLON
+            NUMPTS = NUMPTS + 1
+            RLAT(NUMPTS) = GNLATS(LOOPO)
+            RLON(NUMPTS) = AREA(JWEST)+REAL((LOOPI-1)*IGRIDNI)/JSCALE
+          ENDDO
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Get some space for rotating the lat/longs
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      NOPCNT = NUMPTS
+      ISIZE  = NUMPTS
+      IF( ISIZE.GT.ISIZOLD ) THEN
+C
+        IF( ISIZOLD.GT.0 ) CALL JFREE(IPX)
+C
+        NBYTES = 6*ISIZE*JPRLEN
+C
+        IPX = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPX = IPX/(1024*1024*1024*4)
+#endif
+        IF( IPX.EQ.0 ) THEN
+          CALL INTLOG(JP_WARN,'HGENGG: Memory allocate fail',JPQUIET)
+          HGENGG = 1
+          GOTO 900
+        ENDIF
+C
+        IPY  = IPX  + (ISIZE*JPRLEN)
+        IPZ  = IPY  + (ISIZE*JPRLEN)
+        IPRX = IPZ  + (ISIZE*JPRLEN)
+        IPRY = IPRX + (ISIZE*JPRLEN)
+        IPRZ = IPRY + (ISIZE*JPRLEN)
+C
+        ISIZOLD = ISIZE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Calculate the lat/longs before rotation
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL HLL2XYZ(RLAT,RLON,X,Y,Z,ISIZE)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLE(JLAT)),X,Y,Z,RX,RY,RZ,ISIZE)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (but still containing the
+C     longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,RLAT,RLON,ISIZE)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, ISIZE
+        RLON(LOOP) = RLON(LOOP) + POLE(JLON)
+        IF( RLON(LOOP).LT.0.0 )   RLON(LOOP) = RLON(LOOP) + 360.0
+        IF( RLON(LOOP).GE.360.0 ) RLON(LOOP) = RLON(LOOP) - 360.0
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hgengrd.F b/interpolation/hgengrd.F
new file mode 100755
index 0000000..ab3420f
--- /dev/null
+++ b/interpolation/hgengrd.F
@@ -0,0 +1,255 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HGENGRD(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+C
+C---->
+C**** HWTS12
+C
+C     Purpose
+C     -------
+C
+C     This routine calculates the original latitude and longitude
+C     values (before rotation) for a rotated grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HGENGRD(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     AREA - Limits of area (N/W/S/E)
+C     POLE - Pole of rotation (lat/long)
+C     GRID - Grid increments (i/j)
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NLON  - Number of points along a parallel in the rotated grid.
+C     NLAT  - Number of points along a meridien in the rotated grid.
+C     RLAT  - Vector of orginal latitude values for the points in
+C             the rotated grid.
+C     RLON  - Vector of orginal longitude values for the points in
+C             the rotated grid.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     The vector of points runs from West to East in rows, the rows
+C     run from North to South.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JDEBUG  - Tests if debug output required.
+C     HLL2XYZ - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      REAL JSCALE
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+      PARAMETER (JSCALE  = 1000.0 )
+C
+C     Function arguments
+C
+      REAL AREA(4),POLE(2),GRID(2), RLAT(*),RLON(*)
+      INTEGER NLON,NLAT
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, LOOPI, LOOPO, IGRIDNI, IGRIDNJ
+      INTEGER ISIZE, ISIZOLD, NBYTES
+      REAL ZLAT, X(1), Y(1), Z(1)
+      REAL RX(1), RY(1), RZ(1)
+      POINTER( IPX, X )
+      POINTER( IPY, Y )
+      POINTER( IPZ, Z )
+      POINTER( IPRX, RX )
+      POINTER( IPRY, RY )
+      POINTER( IPRZ, RZ )
+C
+      DATA ISIZOLD/-1/
+      SAVE ISIZOLD,IPX,IPY,IPZ,IPRX,IPRY,IPRZ
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HGENGRD = 0
+C
+      CALL JDEBUG()
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Calculate current grid latitudes and longitudes
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+
+      IGRIDNI = NINT(GRID(JW_E)*JSCALE)
+      IGRIDNJ = NINT(GRID(JN_S)*JSCALE)
+C
+      NEXT = 1
+      DO LOOPO = 1, NLAT
+        ZLAT = AREA(JNORTH) - REAL((LOOPO-1)*IGRIDNJ)/JSCALE
+        DO LOOPI = 1, NLON
+          RLON(NEXT) = AREA(JWEST) + REAL((LOOPI-1)*IGRIDNI)/JSCALE
+          IF( RLON(NEXT).LT.0.0 ) RLON(NEXT) = RLON(NEXT) + 360.0
+          RLAT(NEXT) = ZLAT
+          NEXT = NEXT + 1
+        ENDDO
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Get some space for rotating the lat/longs
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      ISIZE = NLAT *NLON
+      IF( ISIZE.GT.ISIZOLD ) THEN
+C
+        IF( ISIZOLD.GT.0 ) CALL JFREE(IPX)
+C
+        NBYTES = 6*ISIZE*JPRLEN
+C
+        IPX = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPX = IPX/(1024*1024*1024*4)
+#endif
+        IF( IPX.EQ.0 ) THEN
+          CALL INTLOG(JP_WARN,'HGENGRD: Memory allocate fail',JPQUIET)
+          HGENGRD = 1
+          GOTO 900
+        ENDIF
+C
+        IPY  = IPX  + (ISIZE*JPRLEN)
+        IPZ  = IPY  + (ISIZE*JPRLEN)
+        IPRX = IPZ  + (ISIZE*JPRLEN)
+        IPRY = IPRX + (ISIZE*JPRLEN)
+        IPRZ = IPRY + (ISIZE*JPRLEN)
+C
+        ISIZOLD = ISIZE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Calculate the lat/longs before rotation
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL HLL2XYZ(RLAT,RLON,X,Y,Z,ISIZE)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLE(JLAT)),X,Y,Z,RX,RY,RZ,ISIZE)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (but still containing the
+C     longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,RLAT,RLON,ISIZE)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, ISIZE
+        RLON(LOOP) = RLON(LOOP) + POLE(JLON)
+        IF( RLON(LOOP).LT.0.0 )   RLON(LOOP) = RLON(LOOP) + 360.0
+        IF( RLON(LOOP).GE.360.0 ) RLON(LOOP) = RLON(LOOP) - 360.0
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hgengrw.F b/interpolation/hgengrw.F
new file mode 100755
index 0000000..291a930
--- /dev/null
+++ b/interpolation/hgengrw.F
@@ -0,0 +1,257 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HGENGRW(AREA,POLE,GRID,NLON,NLAT,
+     X                         RCLAT,RCLON,RLAT,RLON)
+C
+C---->
+C**** HWTS12
+C
+C     Purpose
+C     -------
+C
+C     This routine calculates the original latitude and longitude
+C     values (before rotation) for a rotated grid for wind fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HGENGRW(AREA,POLE,GRID,NLON,NLAT,RCLAT,RCLON,RLAT,RLON)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     AREA - Limits of area (N/W/S/E)
+C     POLE - Pole of rotation (lat/long)
+C     GRID - Grid increments (i/j)
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NLON  - Number of points along a parallel in the rotated grid.
+C     NLAT  - Number of points along a meridien in the rotated grid.
+C     RCLAT - Vector of latitude values for the points in current grid.
+C     RCLON - Vector of longitude values for the points in current grid.
+C     RLAT  - Vector of orginal latitude values for the points in
+C             the rotated grid.
+C     RLON  - Vector of orginal longitude values for the points in
+C             the rotated grid.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     The vector of points runs from West to East in rows, the rows
+C     run from North to South.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JDEBUG  - Tests if debug output required.
+C     HLL2XYZ - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      REAL JSCALE
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+      PARAMETER (JSCALE  = 1000.0 )
+C
+C     Function arguments
+C
+      REAL AREA(4),POLE(2),GRID(2), RCLAT(*),RCLON(*),RLAT(*),RLON(*)
+      INTEGER NLON,NLAT
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, LOOPI, LOOPO, IGRIDNI, IGRIDNJ
+      INTEGER ISIZE, ISIZOLD, NBYTES
+      REAL ZLAT, X(1), Y(1), Z(1)
+      REAL RX(1), RY(1), RZ(1)
+      POINTER( IPX, X )
+      POINTER( IPY, Y )
+      POINTER( IPZ, Z )
+      POINTER( IPRX, RX )
+      POINTER( IPRY, RY )
+      POINTER( IPRZ, RZ )
+C
+      DATA ISIZOLD/-1/
+      SAVE ISIZOLD,IPX,IPY,IPZ,IPRX,IPRY,IPRZ
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HGENGRW = 0
+C
+      CALL JDEBUG()
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Calculate current grid latitudes and longitudes
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+      IGRIDNI = NINT(GRID(JW_E)*JSCALE)
+      IGRIDNJ = NINT(GRID(JN_S)*JSCALE)
+C
+      NEXT = 1
+      DO LOOPO = 1, NLAT
+        ZLAT = AREA(JNORTH) - REAL((LOOPO-1)*IGRIDNJ)/JSCALE
+        DO LOOPI = 1, NLON
+          RCLON(NEXT) = AREA(JWEST) + REAL((LOOPI-1)*IGRIDNI)/JSCALE
+          IF( RCLON(NEXT).LT.0.0 ) RCLON(NEXT) = RCLON(NEXT) + 360.0
+          RCLAT(NEXT) = ZLAT
+          NEXT = NEXT + 1
+        ENDDO
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Get some space for rotating the lat/longs
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      ISIZE = NLAT *NLON
+      IF( ISIZE.GT.ISIZOLD ) THEN
+C
+        IF( ISIZOLD.GT.0 ) CALL JFREE(IPX)
+C
+        NBYTES = 6*ISIZE*JPRLEN
+C
+        IPX = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPX = IPX/(1024*1024*1024*4)
+#endif
+        IF( IPX.EQ.0 ) THEN
+          CALL INTLOG(JP_WARN,'HGENGRW: Memory allocate fail',JPQUIET)
+          HGENGRW = 1
+          GOTO 900
+        ENDIF
+C
+        IPY  = IPX  + (ISIZE*JPRLEN)
+        IPZ  = IPY  + (ISIZE*JPRLEN)
+        IPRX = IPZ  + (ISIZE*JPRLEN)
+        IPRY = IPRX + (ISIZE*JPRLEN)
+        IPRZ = IPRY + (ISIZE*JPRLEN)
+C
+        ISIZOLD = ISIZE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Calculate the lat/longs before rotation
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL HLL2XYZ(RCLAT,RCLON,X,Y,Z,ISIZE)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLE(JLAT)),X,Y,Z,RX,RY,RZ,ISIZE)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (but still containing the
+C     longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,RLAT,RLON,ISIZE)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, ISIZE
+        RLON(LOOP) = RLON(LOOP) + POLE(JLON)
+        IF( RLON(LOOP).LT.0.0 )   RLON(LOOP) = RLON(LOOP) + 360.0
+        IF( RLON(LOOP).GE.360.0 ) RLON(LOOP) = RLON(LOOP) - 360.0
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hgenll.F b/interpolation/hgenll.F
new file mode 100755
index 0000000..ac2fcb0
--- /dev/null
+++ b/interpolation/hgenll.F
@@ -0,0 +1,254 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HGENLL(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+C
+C---->
+C**** HGENLL
+C
+C     Purpose
+C     -------
+C
+C     This routine calculates the original latitude and longitude
+C     values (before rotation) for a rotatedlat/long grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HGENLL(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     AREA - Limits of area (N/W/S/E)
+C     POLE - Pole of rotation (lat/long)
+C     GRID - Grid increments (i/j)
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NLON  - Number of points along a parallel in the rotated grid.
+C     NLAT  - Number of points along a meridien in the rotated grid.
+C     RLAT  - Vector of orginal latitude values for the points in
+C             the rotated grid.
+C     RLON  - Vector of orginal longitude values for the points in
+C             the rotated grid.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     The vector of points runs from West to East in rows, the rows
+C     run from North to South.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JDEBUG  - Tests if debug output required.
+C     HLL2XYZ - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      REAL JSCALE
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+      PARAMETER (JSCALE  = 1000.0 )
+C
+C     Function arguments
+C
+      REAL AREA(4),POLE(2),GRID(2), RLAT(*),RLON(*)
+      INTEGER NLON,NLAT
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, LOOPI, LOOPO, IGRIDNI, IGRIDNJ
+      INTEGER ISIZE, ISIZOLD, NBYTES
+      REAL ZLAT, X(1), Y(1), Z(1)
+      REAL RX(1), RY(1), RZ(1)
+      POINTER( IPX, X )
+      POINTER( IPY, Y )
+      POINTER( IPZ, Z )
+      POINTER( IPRX, RX )
+      POINTER( IPRY, RY )
+      POINTER( IPRZ, RZ )
+C
+      DATA ISIZOLD/-1/
+      SAVE ISIZOLD,IPX,IPY,IPZ,IPRX,IPRY,IPRZ
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HGENLL = 0
+C
+      CALL JDEBUG()
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Calculate current grid latitudes and longitudes
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+      IGRIDNI = NINT(GRID(JW_E)*JSCALE)
+      IGRIDNJ = NINT(GRID(JN_S)*JSCALE)
+C
+      NEXT = 1
+      DO LOOPO = 1, NLAT
+        ZLAT = AREA(JNORTH) - REAL((LOOPO-1)*IGRIDNJ)/JSCALE
+        DO LOOPI = 1, NLON
+          RLON(NEXT) = AREA(JWEST) + REAL((LOOPI-1)*IGRIDNI)/JSCALE
+          IF( RLON(NEXT).LT.0.0 ) RLON(NEXT) = RLON(NEXT) + 360.0
+          RLAT(NEXT) = ZLAT
+          NEXT = NEXT + 1
+        ENDDO
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Get some space for rotating the lat/longs
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      ISIZE = NLAT *NLON
+      IF( ISIZE.GT.ISIZOLD ) THEN
+C
+        IF( ISIZOLD.GT.0 ) CALL JFREE(IPX)
+C
+        NBYTES = 6*ISIZE*JPRLEN
+C
+        IPX = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPX = IPX/(1024*1024*1024*4)
+#endif
+        IF( IPX.EQ.0 ) THEN
+          CALL INTLOG(JP_WARN,'HGENLL: Memory allocate fail',JPQUIET)
+          HGENLL = 1
+          GOTO 900
+        ENDIF
+C
+        IPY  = IPX  + (ISIZE*JPRLEN)
+        IPZ  = IPY  + (ISIZE*JPRLEN)
+        IPRX = IPZ  + (ISIZE*JPRLEN)
+        IPRY = IPRX + (ISIZE*JPRLEN)
+        IPRZ = IPRY + (ISIZE*JPRLEN)
+C
+        ISIZOLD = ISIZE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Calculate the lat/longs before rotation
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL HLL2XYZ(RLAT,RLON,X,Y,Z,ISIZE)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLE(JLAT)),X,Y,Z,RX,RY,RZ,ISIZE)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (but still containing the
+C     longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,RLAT,RLON,ISIZE)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, ISIZE
+        RLON(LOOP) = RLON(LOOP) + POLE(JLON)
+        IF( RLON(LOOP).LT.0.0 )   RLON(LOOP) = RLON(LOOP) + 360.0
+        IF( RLON(LOOP).GE.360.0 ) RLON(LOOP) = RLON(LOOP) - 360.0
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hgenllw.F b/interpolation/hgenllw.F
new file mode 100755
index 0000000..d1d96e0
--- /dev/null
+++ b/interpolation/hgenllw.F
@@ -0,0 +1,257 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HGENLLW(AREA,POLE,GRID,NLON,NLAT,
+     X                         RCLAT,RCLON,RLAT,RLON)
+C
+C---->
+C**** HGENLLW
+C
+C     Purpose
+C     -------
+C
+C     This routine calculates the original latitude and longitude
+C     values (before rotation) for a rotated grid for wind fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HGENLLW(AREA,POLE,GRID,NLON,NLAT,RCLAT,RCLON,RLAT,RLON)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     AREA - Limits of area (N/W/S/E)
+C     POLE - Pole of rotation (lat/long)
+C     GRID - Grid increments (i/j)
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NLON  - Number of points along a parallel in the rotated grid.
+C     NLAT  - Number of points along a meridien in the rotated grid.
+C     RCLAT - Vector of latitude values for the points in current grid.
+C     RCLON - Vector of longitude values for the points in current grid.
+C     RLAT  - Vector of orginal latitude values for the points in
+C             the rotated grid.
+C     RLON  - Vector of orginal longitude values for the points in
+C             the rotated grid.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     The vector of points runs from West to East in rows, the rows
+C     run from North to South.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JDEBUG  - Tests if debug output required.
+C     HLL2XYZ - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      REAL JSCALE
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+      PARAMETER (JSCALE  = 1000.0 )
+C
+C     Function arguments
+C
+      REAL AREA(4),POLE(2),GRID(2), RCLAT(*),RCLON(*),RLAT(*),RLON(*)
+      INTEGER NLON,NLAT
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, LOOPI, LOOPO, IGRIDNI, IGRIDNJ
+      INTEGER ISIZE, ISIZOLD, NBYTES
+      REAL ZLAT, X(1), Y(1), Z(1)
+      REAL RX(1), RY(1), RZ(1)
+      POINTER( IPX, X )
+      POINTER( IPY, Y )
+      POINTER( IPZ, Z )
+      POINTER( IPRX, RX )
+      POINTER( IPRY, RY )
+      POINTER( IPRZ, RZ )
+C
+      DATA ISIZOLD/-1/
+      SAVE ISIZOLD,IPX,IPY,IPZ,IPRX,IPRY,IPRZ
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HGENLLW = 0
+C
+      CALL JDEBUG()
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Calculate current grid latitudes and longitudes
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + INT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + INT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+      IGRIDNI = NINT(GRID(JW_E)*JSCALE)
+      IGRIDNJ = NINT(GRID(JN_S)*JSCALE)
+C
+      NEXT = 1
+      DO LOOPO = 1, NLAT
+        ZLAT = AREA(JNORTH) - REAL((LOOPO-1)*IGRIDNJ)/JSCALE
+        DO LOOPI = 1, NLON
+          RCLON(NEXT) = AREA(JWEST) + REAL((LOOPI-1)*IGRIDNI)/JSCALE
+          IF( RCLON(NEXT).LT.0.0 ) RCLON(NEXT) = RCLON(NEXT) + 360.0
+          RCLAT(NEXT) = ZLAT
+          NEXT = NEXT + 1
+        ENDDO
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Get some space for rotating the lat/longs
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      ISIZE = NLAT *NLON
+      IF( ISIZE.GT.ISIZOLD ) THEN
+C
+        IF( ISIZOLD.GT.0 ) CALL JFREE(IPX)
+C
+        NBYTES = 6*ISIZE*JPRLEN
+C
+        IPX = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPX = IPX/(1024*1024*1024*4)
+#endif
+        IF( IPX.EQ.0 ) THEN
+          CALL INTLOG(JP_WARN,'HGENLLW: Memory allocate fail',JPQUIET)
+          HGENLLW = 1
+          GOTO 900
+        ENDIF
+C
+        IPY  = IPX  + (ISIZE*JPRLEN)
+        IPZ  = IPY  + (ISIZE*JPRLEN)
+        IPRX = IPZ  + (ISIZE*JPRLEN)
+        IPRY = IPRX + (ISIZE*JPRLEN)
+        IPRZ = IPRY + (ISIZE*JPRLEN)
+C
+        ISIZOLD = ISIZE
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Calculate the lat/longs before rotation
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL HLL2XYZ(RCLAT,RCLON,X,Y,Z,ISIZE)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLE(JLAT)),X,Y,Z,RX,RY,RZ,ISIZE)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (but still containing the
+C     longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,RLAT,RLON,ISIZE)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, ISIZE
+        RLON(LOOP) = RLON(LOOP) + POLE(JLON)
+        IF( RLON(LOOP).LT.0.0 )   RLON(LOOP) = RLON(LOOP) + 360.0
+        IF( RLON(LOOP).GE.360.0 ) RLON(LOOP) = RLON(LOOP) - 360.0
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hgetlsm.F b/interpolation/hgetlsm.F
new file mode 100755
index 0000000..7255515
--- /dev/null
+++ b/interpolation/hgetlsm.F
@@ -0,0 +1,216 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HGETLSM(KGAUSS,OLDLSM,KSIZE)
+C
+C---->
+C**** HGETLSM
+C
+C     Purpose
+C     -------
+C
+C     This routine reads a file of reduced gaussian field land-sea
+C     mask values.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HGETLSM(KGAUSS,OLDLSM,KSIZE)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KGAUSS - Gaussian number of the reduced gaussian field
+C     KSIZE  - Number of bytes to read into OLDLSM
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     OLDLSM - The array of values for the reduced gaussian field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     Gets pathname from HIRLAM_LSM_PATH and reads land-sea mask
+C     from a file.
+C
+C
+C     Externals
+C     ---------
+C
+C     GETENV  - Read environment variable
+C     INTLOG  - Log error message.
+C     PBOPEN  - Open land-sea mask file
+C     PBREAD  - Read land-sea mask file
+C     PBCLOSE - Close land-sea mask file
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      March 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     Replace PBOPEN, etc by PBOPEN3, etc on VPP.
+C     J.D.Chambers      ECMWF      December 2001
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      INTEGER KGAUSS, KSIZE
+      REAL OLDLSM(*)
+
+
+C
+C     Local variables
+C
+      CHARACTER*256 FILENAME
+      CHARACTER*256 YPNORMAS,YENVBACK
+      CHARACTER*56 YPNORMAL
+      CHARACTER*7 VPP
+      CHARACTER*4 YGAUSS
+      INTEGER IOFFS, IOFFSET, IUNIT, IRET
+      PARAMETER (YPNORMAL ='/usr/local/lib/metaps/tables/interpolation')
+
+#ifdef TABLE_PATH
+      DATA YPNORMAS / TABLE_PATH /
+#else
+      DATA YPNORMAS / '' /
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HGETLSM = 0
+C
+      CALL JDEBUG()
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Build the land-sea mask file pathname
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C
+C     See if the environment variable points to a directory
+C
+C
+      FILENAME = YPNORMAL
+C
+      IOFFSET = INDEX(YPNORMAS,' ') - 1
+      IF(IOFFSET.GT.0) THEN
+          FILENAME = YPNORMAS(1:IOFFSET)//'/land_sea_mask/'
+      ENDIF
+
+      CALL GETENV('HIRLAM_LSM_PATH', YENVBACK)
+      IOFFSET = INDEX(YENVBACK,' ') - 1
+      IF(IOFFSET.GT.0) THEN
+          FILENAME = YENVBACK(1:IOFFSET)//'/land_sea_mask/'
+      ENDIF
+C
+C     Complete the filename
+C
+      IOFFS = INDEX(FILENAME,' ')
+      FILENAME(IOFFS:(IOFFS+7)) = '/LSM_GG_'
+      IOFFS = INDEX(FILENAME,' ')
+      WRITE(YGAUSS,'(I4.4)') KGAUSS
+      FILENAME(IOFFS:(IOFFS+4)) = YGAUSS
+C
+      IOFFS = INDEX(FILENAME,' ')
+      CALL INTLOG(JP_DEBUG,'HGETLSM: land-sea mask filename',JPQUIET)
+      CALL INTLOG(JP_DEBUG,'HGETLSM: ' // FILENAME(1:(IOFFS-1)),JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Read the land-sea mask values
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+#ifdef __uxp__
+      CALL PBOPEN3(IUNIT,FILENAME(1:(IOFFS-1)),'r',IRET)
+#else
+      CALL PBOPEN(IUNIT,FILENAME(1:(IOFFS-1)),'r',IRET)
+#endif
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_DEBUG,'HGETLSM: PBOPEN Iret',IRET)
+        CALL INTLOG(JP_DEBUG,'HGETLSM: PBOPEN failed',JPQUIET)
+        HGETLSM = 3
+        GOTO 900
+      ENDIF
+C
+#ifdef __uxp__
+      CALL PBREAD3(IUNIT,OLDLSM,KSIZE,IRET)
+#else
+      CALL PBREAD(IUNIT,OLDLSM,KSIZE,IRET)
+#endif
+      IF( IRET.NE.KSIZE ) THEN
+        CALL INTLOG(JP_DEBUG,'HGETLSM: PBREAD failed',JPQUIET)
+        HGETLSM = 3
+        GOTO 900
+      ENDIF
+C
+#ifdef __uxp__
+      CALL PBCLOSE3(IUNIT,IRET)
+#else
+      CALL PBCLOSE(IUNIT,IRET)
+#endif
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_DEBUG,'HGETLSM: PBCLOSE failed',JPQUIET)
+        HGETLSM = 3
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hirlam.F b/interpolation/hirlam.F
new file mode 100755
index 0000000..79b2ac5
--- /dev/null
+++ b/interpolation/hirlam.F
@@ -0,0 +1,653 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HIRLAM(L12PNT,OLDFLD,KOUNT,KGAUSS,AREA,POLE,
+     X                        GRID,NEWFLD,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HIRLAM
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated regular lat/long field from a
+C     gaussian field using 12-point horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HIRLAM(L12PNT,OLDFLD,KOUNT,KGAUSS,AREA,POLE,
+C    X              GRID,NEWFLD,KSIZE,NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C              = .TRUE. for 12-point horizontal
+C              = .FALSE. for 4-point
+C     OLDFLD - The array of values from the gaussian field
+C     KOUNT  - Number of values in OLDFLD
+C     KGAUSS - Gaussian number of the gaussian field
+C     AREA   - Limits of output area (N/W/S/E)
+C     POLE   - Pole of rotation (lat/long)
+C     GRID   - Output lat/long grid increments (we/ns)
+C     KSIZE  - The size of the output array to fill with the regular
+C              lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLD - The array of values for the regular lat/long field 
+C     NLON   - Number of longitudes in the regular lat/long field
+C     NLAT   - Number of latitudes in the regular lat/long field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     nifld.common
+C     nofld.common
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGENGRD - Calculates original lat/long (before rotation) for
+C               a rotated grid
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C     CHKPREC - Check if precipitation threshold has been redefined
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KOUNT, KGAUSS, KSIZE, NLON, NLAT
+      REAL AREA(4), POLE(2), GRID(2), OLDFLD(*), NEWFLD(KSIZE)
+C
+C     Local variables
+C
+      INTEGER NEXT,LOOP,IRET,NLEN,IOGAUSS,IOREPR,NBYTES,NUMBER
+      INTEGER NEAREST, NEND, ITEMP, COUNT
+C
+      CHARACTER*12 YFLAG
+      LOGICAL LNEW, LFIRST, LVEGGY
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RLAT(1),RLON(1)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+C
+      REAL OLD(KOUNT)
+C
+      DATA IOGAUSS/-1/,IOREPR/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, ILLOLD/-1/
+      DATA NUMBER/-1/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE IOGAUSS,IOREPR, IGGOLD, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD, IPRLAT, IPRLON
+      SAVE NUMBER
+C
+C     Externals
+C
+      INTEGER HNEI12, HGENGRD
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HIRLAM = 0
+C
+      CALL JDEBUG()
+C
+      IF( L12PNT ) THEN
+        CALL INTLOG(JP_DEBUG,'HIRLAM: 12-pt interpolation',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'HIRLAM:  4-pt interpolation',JPQUIET)
+      ENDIF
+C
+      CALL CHKPREC()
+      IF( LPREC )THEN
+        CALL INTLOG(JP_DEBUG,
+     X   'HIRLAM: precipitation threshold applied',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X   'HIRLAM: precipitation threshold not applied',JPQUIET)
+      ENDIF
+C    Are we handling vegetation parameter
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+      IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'HIRLAM: nearest neighbour processing (vegetation)',JPQUIET)
+C
+
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      IGG = KGAUSS*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAM: Memory allocation fail',JPQUIET)
+          HIRLAM = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        IOGAUSS = -1
+        IOREPR  = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in the original field.
+C
+      IF( (KGAUSS.NE.IOGAUSS).OR.(IOREPR.NE.NIREPR) ) THEN
+        IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'HIRLAM: trying for regular gaussian N',KGAUSS)
+          CALL JGETGG(KGAUSS,'F',GLATS,KPTS,IRET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'HIRLAM: trying for reduced gaussian N',KGAUSS)
+          CALL JGETGG(KGAUSS,'R',GLATS,KPTS,IRET)
+        ENDIF
+C
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HIRLAM: JGETGG failed to get gaussian data',JPQUIET)
+          HIRLAM = 2
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGAUSS*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+        NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+C
+C     Check whether number of gaussian points agrees with grid
+C     specification. If not and grid is N80/N160, try the 12-pt
+C     specification.
+C
+        IF( NUMBER.NE.KOUNT ) THEN
+          IF( (KGAUSS.EQ.80).OR.(KGAUSS.EQ.160) ) THEN
+            ITEMP  = NGSPEC
+            NGSPEC = 12
+            IF( NIREPR.EQ.JPQUASI ) THEN
+              CALL INTLOG(JP_DEBUG,
+     X          'HIRLAM: trying for 12-pt reduced gaussian N',KGAUSS)
+              CALL JGETGG(KGAUSS,'R',GLATS,KPTS,IRET)
+            ELSE
+              CALL INTLOG(JP_DEBUG,
+     X          'HIRLAM: trying for 12-pt regular gaussian N',KGAUSS)
+              CALL JGETGG(KGAUSS,'F',GLATS,KPTS,IRET)
+            ENDIF
+            NGSPEC = ITEMP
+C
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'HIRLAM: JGETGG failed to get gaussian data',JPQUIET)
+              HIRLAM = 2
+              GOTO 900
+            ENDIF
+C
+            IOFFS(1) = 1
+            DO LOOP = 2, (KGAUSS*2+1)
+              IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+            ENDDO
+            NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+C
+            IF( NUMBER.NE.KOUNT ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'HIRLAM: Given number of points =',KOUNT)
+              CALL INTLOG(JP_ERROR,
+     X          'HIRLAM: Expected number of pts =',NUMBER)
+              HIRLAM = 4
+              GOTO 900
+            ENDIF
+          ELSE
+C
+            CALL INTLOG(JP_ERROR,
+     X          'HIRLAM: Given number of points =',KOUNT)
+            CALL INTLOG(JP_ERROR,
+     X          'HIRLAM: Expected number of pts =',NUMBER)
+            HIRLAM = 4
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        IOGAUSS = KGAUSS
+        IOREPR  = NIREPR
+      ENDIF
+C
+C     Preserve the input field
+C     (in case OLDFLD and NEWFLD are the same arrays)
+C
+      NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+      DO LOOP = 1, NUMBER
+        OLD(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E)) ! DJ Mar-05
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S)) ! DJ Mar-05
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HIRLAM: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HIRLAM: Required size = = ',NLEN)
+        HIRLAM = 5
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 2*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAM: Memory allocation fail',JPQUIET)
+          HIRLAM = 6
+          GOTO 900
+        ENDIF
+C
+        IPRLAT = IPRLON + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENGRD(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLAM: HGENGRD failed to get lat/lon grid data',JPQUIET)
+        HIRLAM = 7
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAM: Memory allocation fail',JPQUIET)
+          HIRLAM = 8
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGAUSS,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLAM: HNEI12 failed to find neighbours',JPQUIET)
+        HIRLAM = 9
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+C
+C     See if any of the neighbours are missing
+C
+          COUNT = 0
+          IF( NOTEQ(OLD(NEIGH( 1,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 2,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 3,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 4,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 5,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 6,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 7,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 8,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 9,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH(10,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH(11,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH(12,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+C
+C         Interpolate using twelve neighbours if none are missing
+C
+        IF( LVEGGY) THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE
+          IF( COUNT.EQ.12) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X        OLD(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X        OLD(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X        OLD(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X        OLD(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X        OLD(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X        OLD(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X        OLD(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X        OLD(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( COUNT.EQ.0 ) THEN
+            NEWFLD(LOOP) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+          ENDIF
+       ENDIF
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+C
+C     See if any of the neighbours are missing
+C
+          COUNT = 0
+          IF( NOTEQ(OLD(NEIGH( 1,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 2,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 3,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 4,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+C
+C         Interpolate using four neighbours if none are missing
+C
+c          IF( COUNT.EQ.4.AND.LVEGGY.EQV.(.FALSE.) ) THEN
+        IF( LVEGGY) THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE
+          IF( COUNT.EQ.4) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( COUNT.EQ.0 ) THEN
+            NEWFLD(LOOP) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+          ENDIF
+       ENDIF
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 )  
+     X        NEWFLD(LOOP) = OLD(NEIGH(NEXT,LOOP))
+          ENDDO
+C
+        ENDIF
+C
+C       Remove precipitation if less than a 'trace' or if nearest
+C       neighbour is less than a trace
+C
+        IF( LPREC ) THEN
+          IF( NEWFLD(LOOP).LT.ZPRECIP ) THEN
+            NEWFLD(LOOP) = 0.0
+          ELSE
+            NEAREST = 1
+            NEND = 12
+            IF( KSCHEME(LOOP).NE.JP12PT ) NEND = 4
+            DO NEXT = 2, NEND
+              IF( PWTS( NEXT,LOOP).GT.PWTS( NEAREST,LOOP) )
+     X          NEAREST = NEXT
+            ENDDO
+            IF( OLD(NEIGH(NEAREST,LOOP)).LT.ZPRECIP ) NEWFLD(LOOP) = 0.0
+          ENDIF
+        ENDIF
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hirlamw.F b/interpolation/hirlamw.F
new file mode 100755
index 0000000..a48bfa4
--- /dev/null
+++ b/interpolation/hirlamw.F
@@ -0,0 +1,631 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HIRLAMW(L12PNT,OLDFLDU,OLDFLDV,KOUNT,KGAUSS,AREA,
+     X                        POLE,GRID,NEWFLDU,NEWFLDV,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HIRLAMW
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated regular lat/long field from a
+C     gaussian field using 12-point horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HIRLAMW(L12PNT,OLDFLDU,OLDFLDV,KOUNT,KGAUSS,AREA,
+C    X               POLE,GRID,NEWFLDU,NEWFLDV,KSIZE,NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C              = .TRUE. for 12-point horizontal
+C              = .FALSE. for 4-point
+C     OLDFLDU - The array of values from the gaussian U field
+C     OLDFLDV - The array of values from the gaussian V field
+C     KOUNT   - Number of values in OLDFLDU/V
+C     KGAUSS  - Gaussian number for the gaussian field
+C     AREA    - Limits of output area (N/W/S/E)
+C     POLE    - Pole of rotation (lat/long)
+C     GRID    - Output lat/long grid increments (we/ns)
+C     KSIZE   - The size of the output array to fill with the regular
+C               lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLDU - The array of values for the regular lat/long U field 
+C     NEWFLDV - The array of values for the regular lat/long V field 
+C     NLON    - Number of longitudes in the regular lat/long field
+C     NLAT    - Number of latitudes in the regular lat/long field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     nifld.common
+C     nofld.common
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGENGRW - Calculates original lat/long (before rotation) for
+C               a rotated grid for wind fields.
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "jparams.h"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KOUNT, KGAUSS, KSIZE, NLON, NLAT
+      REAL AREA(4), POLE(2), GRID(2)
+      REAL OLDFLDU(*), OLDFLDV(*)
+      REAL NEWFLDU(KSIZE), NEWFLDV(KSIZE)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, IRET, NLEN, NPREV, NBYTES, NUMBER
+      INTEGER COUNTU, COUNTV, NEAREST
+C
+      LOGICAL LNEW, LFIRST
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RCLAT(1),RCLON(1),RLAT(1),RLON(1),RDIR(1),C(1),S(1),U(1),V(1)
+      POINTER (IPRCLAT, RCLAT)
+      POINTER (IPRCLON, RCLON)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+      POINTER (IPRDIR, RDIR)
+      POINTER (IPC, C)
+      POINTER (IPS, S)
+      POINTER (IPU, U)
+      POINTER (IPV, V)
+C
+      REAL OLDU(KOUNT), OLDV(KOUNT)
+C
+      DATA NPREV/-1/
+      DATA NUMBER/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, ILLOLD/-1/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NPREV, IGGOLD, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD,IPRCLAT,IPRCLON,IPRLAT,IPRLON,IPRDIR
+      SAVE IPC, IPS, IPU, IPV
+      SAVE NUMBER
+C
+C     Externals
+C
+      INTEGER HNEI12, HGENGRW
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement functions
+C
+      REAL X, RADIAN
+      REAL A, B
+      LOGICAL NOTEQ
+C
+C     Convert degrees to radians
+C
+      RADIAN(X) = (X) * 0.0174532925
+C
+C     Tests that A is not (almost) equal to B
+C
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HIRLAMW = 0
+C
+      CALL JDEBUG()
+C
+      IF( L12PNT ) THEN
+        CALL INTLOG(JP_DEBUG,'HIRLAMW: 12-pt interpolation',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'HIRLAMW:  4-pt interpolation',JPQUIET)
+      ENDIF
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      IGG = KGAUSS*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAMW: Memory allocate fail',JPQUIET)
+          HIRLAMW = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        NPREV = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in original fields.
+C
+      IF( KGAUSS.NE.NPREV ) THEN
+        IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+          CALL JGETGG(KGAUSS,'F',GLATS,KPTS,IRET)
+        ELSE
+          CALL JGETGG(KGAUSS,'R',GLATS,KPTS,IRET)
+        ENDIF
+C
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HIRLAMW: JGETGG failed to get gaussian data',JPQUIET)
+          HIRLAMW = 2
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGAUSS*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+C
+        NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+        IF( NUMBER.NE.KOUNT ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAMW: Given no. of points =',KOUNT)
+          CALL INTLOG(JP_ERROR,'HIRLAMW: Expected no. of pts =',NUMBER)
+          HIRLAMW = 3
+          GOTO 900
+        ENDIF
+C
+        NPREV = KGAUSS
+      ENDIF
+C
+C     Preserve the input fields
+C     (in case OLDFLDx and NEWFLDx are the same arrays)
+C
+      DO LOOP = 1, NUMBER
+        OLDU(LOOP) = OLDFLDU(LOOP)
+        OLDV(LOOP) = OLDFLDV(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HIRLAMW: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HIRLAMW: Required size = = ',NLEN)
+        HIRLAMW = 5
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 9*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAMW: Memory allocate fail',JPQUIET)
+          HIRLAMW = 6
+          GOTO 900
+        ENDIF
+C
+        IPRLAT  = IPRLON + (ILL*JPRLEN)
+        IPRCLON = IPRLAT + (ILL*JPRLEN)
+        IPRCLAT = IPRCLON + (ILL*JPRLEN)
+        IPRDIR  = IPRCLAT + (ILL*JPRLEN)
+        IPC     = IPRDIR + (ILL*JPRLEN)
+        IPS     = IPC    + (ILL*JPRLEN)
+        IPU     = IPS    + (ILL*JPRLEN)
+        IPV     = IPU    + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENGRW(AREA,POLE,GRID,NLON,NLAT,RCLAT,RCLON,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLAMW: HGENGRW failed to get lat/lon grid data',JPQUIET)
+        HIRLAMW = 7
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLAMW: Memory allocate fail',JPQUIET)
+          HIRLAMW = 8
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGAUSS,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLAMW: HNEI12 failed to find neighbours',JPQUIET)
+        HIRLAMW = 9
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+C
+C     See if any of the neighbours are missing
+C
+          COUNTU = 0
+          IF( NOTEQ(OLDU(NEIGH( 1,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 2,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 3,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 4,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 5,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 6,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 7,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 8,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 9,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH(10,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH(11,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH(12,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          COUNTV = 0
+          IF( NOTEQ(OLDV(NEIGH( 1,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 2,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 3,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 4,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 5,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 6,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 7,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 8,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 9,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH(10,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH(11,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH(12,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+C
+C         Interpolate using twelve neighbours if none are missing
+C
+          IF( (COUNTU.EQ.12).AND.(COUNTV.EQ.12) ) THEN
+C
+            U(LOOP) =
+     X        OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X        OLDU(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X        OLDU(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X        OLDU(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X        OLDU(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X        OLDU(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X        OLDU(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X        OLDU(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X        OLDU(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+            V(LOOP) =
+     X        OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X        OLDV(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X        OLDV(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X        OLDV(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X        OLDV(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X        OLDV(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X        OLDV(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X        OLDV(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X        OLDV(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( (COUNTU.EQ.0).OR.(COUNTV.EQ.0) ) THEN
+            U(LOOP) = RMISSGV
+            V(LOOP) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+            U(LOOP) = OLDU(NEIGH( NEAREST,LOOP))
+            V(LOOP) = OLDV(NEIGH( NEAREST,LOOP))
+          ENDIF
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+C
+C     See if any of the neighbours are missing
+C
+          COUNTU = 0
+          IF( NOTEQ(OLDU(NEIGH( 1,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 2,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 3,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          IF( NOTEQ(OLDU(NEIGH( 4,LOOP)),RMISSGV) ) COUNTU = COUNTU + 1
+          COUNTV = 0
+          IF( NOTEQ(OLDV(NEIGH( 1,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 2,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 3,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+          IF( NOTEQ(OLDV(NEIGH( 4,LOOP)),RMISSGV) ) COUNTV = COUNTV + 1
+C
+C         Interpolate using four neighbours if none are missing
+C
+          IF( (COUNTU.EQ.4).AND.(COUNTV.EQ.4) ) THEN
+C
+            U(LOOP) =
+     X        OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+            V(LOOP) =
+     X        OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( (COUNTU.EQ.0).OR.(COUNTV.EQ.0) ) THEN
+            U(LOOP) = RMISSGV
+            V(LOOP) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            U(LOOP) = OLDU(NEIGH( NEAREST,LOOP))
+            V(LOOP) = OLDV(NEIGH( NEAREST,LOOP))
+          ENDIF
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 ) THEN
+              U(LOOP) = OLDU(NEIGH(NEXT,LOOP))
+              V(LOOP) = OLDV(NEIGH(NEXT,LOOP))
+            ENDIF
+          ENDDO
+C
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 5.  Adjust the U and V components to new (rotated) axes
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = 0.0
+      ENDDO
+C
+      CALL HPSHGPW(RLON,RLAT,RCLON,RCLAT,RDIR,NLEN,POLE)
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = -RADIAN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        C(LOOP) = COS(RDIR(LOOP))
+        S(LOOP) = SIN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        IF( NOTEQ(U(LOOP),RMISSGV).AND.NOTEQ(V(LOOP),RMISSGV) ) THEN
+          NEWFLDU(LOOP) = U(LOOP)*C(LOOP) - V(LOOP)*S(LOOP)
+          NEWFLDV(LOOP) = U(LOOP)*S(LOOP) + V(LOOP)*C(LOOP)
+        ELSE
+          NEWFLDU(LOOP) = RMISSGV
+          NEWFLDV(LOOP) = RMISSGV
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hirlsm.F b/interpolation/hirlsm.F
new file mode 100755
index 0000000..ab482c6
--- /dev/null
+++ b/interpolation/hirlsm.F
@@ -0,0 +1,982 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HIRLSM(L12PNT,OLDFLD,KOUNT,KGAUSS,AREA,
+     X                        POLE,GRID,NEWFLD,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HIRLSM
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated regular lat/long field from a
+C     reduced gaussian field using 12-point horizontal interpolation
+C     and land-sea masks.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HIRLSM(L12PNT,OLDFLD,KOUNT,KGAUSS,AREA,
+C    X              POLE,GRID,NEWFLD,KSIZE,NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C              = .TRUE. for 12-point horizontal
+C              = .FALSE. for 4-point
+C     OLDFLD - Array of values from the (old) reduced gaussian field
+C     KOUNT  - Number of values in OLDFLD
+C     KGAUSS - Gaussian number of the reduced gaussian field
+C     AREA   - Limits of output area (N/W/S/E)
+C     POLE   - Pole of rotation (lat/long)
+C     GRID   - Output lat/long grid increments (we/ns)
+C     KSIZE  - The size of the output array to fill with the regular
+C              lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLD - The array of values for the regular lat/long field 
+C     NLON   - Number of longitudes in the regular lat/long field
+C     NLAT   - Number of latitudes in the regular lat/long field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     nifld.common
+C     nofld.common
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGETLSM - Reads values for gaussian land-sea mask
+C     HGENGRD - Calculates original lat/long (before rotation) for
+C               a rotated grid
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C     HWTSLSM - Calculates LSM weightings for points for interpolation
+C     CHKPREC - Check if precipitation threshold has been redefined
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KOUNT, KGAUSS, KSIZE, NLON, NLAT
+      REAL AREA(4), POLE(2), GRID(2), OLDFLD(*)
+      REAL NEWFLD(KSIZE)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, loop1, IRET, NLEN, NPREV, NBYTES, NUMBER
+      INTEGER NEAREST, NEND, COUNT, INUM
+      INTEGER IOSIZE, INSIZE, NJPR,  NJPB
+      INTEGER NEWSIZE
+      REAL OLDAREA(4), OLDPOLE(2), OLDGRID(2)
+      REAL OLDLSM(1)
+      POINTER (IPOLDLS, OLDLSM )
+C
+      CHARACTER*12 YFLAG, Y1FLAG, Y2FLAG
+      LOGICAL LNEW, LFIRST, LNEWSPC, LOLDNEW, LVEGGY, LSOIL
+      LOGICAL LITAL, LVEGGY2
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1), KSCHEMEN(1)
+      REAL PWTS(12,1)
+      REAL PWTSN(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPKSCHEN, KSCHEMEN)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+      POINTER (IPPWTSN,  PWTSN)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RLAT(1),RLON(1)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+C
+      REAL OLD(KOUNT)
+C
+      REAL NEWLSM(1)
+      POINTER (IPNEWLS, NEWLSM)
+C
+      DATA OLDAREA/4*-1.0/, OLDPOLE/2*-1.0/, OLDGRID/2*-1.0/
+      DATA NPREV/-1/, IOSIZE/-1/, INSIZE/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, ILLOLD/-1/, IPNEWLS/-1/, IPOLDLS/-1/
+      DATA NUMBER/-1/
+C
+      SAVE OLDAREA, OLDPOLE, OLDGRID
+      SAVE LNEW, LFIRST, IOSIZE, INSIZE, IPNEWLS, IPOLDLS
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS, IPPWTSN,IPKSCHEN
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NPREV, IGGOLD, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD, IPRLAT, IPRLON
+      SAVE NUMBER
+C
+C     Externals
+C
+      INTEGER HGETLSM, HNEI12, HGENGRD
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HIRLSM = 0
+C
+      CALL JDEBUG()
+C
+      IF( L12PNT ) THEN
+        CALL INTLOG(JP_DEBUG,'HIRLSM: 12-pt interpolation',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'HIRLSM:  4-pt interpolation',JPQUIET)
+      ENDIF
+C
+      CALL CHKPREC()
+      IF( LPREC )THEN
+        CALL INTLOG(JP_DEBUG,
+     X   'HIRLSM: precipitation threshold applied',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X   'HIRLSM: precipitation threshold not applied',JPQUIET)
+      ENDIF
+
+
+C    Are we handling vegetation parameter
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+
+
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+      IF( LMETHOD ) LVEGGY = .TRUE.
+
+C special procesing for soil parameters
+      LSOIL = .FALSE.
+      CALL GETENV('SOIL_PARAM', Y1FLAG)
+
+      CALL GETENV('NEAREST_NEIGHBOUR_NEW', Y2FLAG)
+C     Fields with bitmap (as SST) and VEGGY Parameters are treated 
+C     with a corrected nearest neighbour method matching LSM
+C     Force nearest neighbour for same type lsm processing 
+c      with INTOUT parameter
+      LVEGGY2 = .FALSE.
+      IF( Y2FLAG(1:1).EQ.'1'.OR.LNNLSM ) THEN
+         LITAL = .TRUE.
+         IF(LVEGGY) LVEGGY2 = .TRUE.
+         LVEGGY = .FALSE.
+      ELSE
+         LITAL = .FALSE.
+        IF( LVEGGY.AND.Y1FLAG(1:1).EQ.'1' ) THEN
+            LSOIL  = .TRUE.
+            LVEGGY = .FALSE.
+        ENDIF
+      ENDIF
+
+      IF( LSOIL ) CALL INTLOG(JP_DEBUG,
+     X  'HIRLSM: nearest neighbour processing (SOIL)',JPQUIET)
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'HIRLSM: nearest neighbour processing (vegetation)',JPQUIET)
+
+      IF( LITAL ) CALL INTLOG(JP_DEBUG,
+     X  'HIRLSM: new nearest neighbour processing',JPQUIET)
+C
+
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      IGG = KGAUSS*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLSM: Memory allocation fail',JPQUIET)
+          HIRLSM = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        NPREV = -1
+C
+      ENDIF
+C
+C     Has gaussian grid changed from last time through?
+C
+      LOLDNEW = (KGAUSS.NE.NPREV)
+C
+C     Build up offsets to start of each latitude in the original field.
+C
+      IF( LOLDNEW ) THEN
+        CALL JGETGG(KGAUSS,'R',GLATS,KPTS,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HIRLSM: JGETGG failed to get gaussian data',JPQUIET)
+          HIRLSM = 1
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGAUSS*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+C
+        NPREV = KGAUSS
+      ENDIF
+C
+      NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+      IF( NUMBER.NE.KOUNT ) THEN
+        CALL INTLOG(JP_ERROR,'HIRLSM: Given number of points =',KOUNT)
+        CALL INTLOG(JP_ERROR,'HIRLSM: Expected number of pts =',NUMBER)
+        HIRLSM = 1
+        GOTO 900
+      ENDIF
+C
+C     Preserve the input field
+C     (in case OLDFLD and NEWFLD are the same arrays)
+C
+      DO LOOP = 1, NUMBER
+        OLD(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C
+C     If old land-sea mask has changed, pick up different land-sea mask
+C
+      IF( LOLDNEW ) THEN
+C
+C       Allocate memory for old land-sea mask
+C
+        IF( IOSIZE.LT.(NUMBER*JPRLEN) ) THEN
+          IOSIZE = NUMBER*JPRLEN
+          IF( IPOLDLS.GT.0 ) CALL JFREE(IPOLDLS)
+          IPOLDLS = JMALLOC(IOSIZE)
+          IF( IPOLDLS.EQ.0 ) THEN
+            CALL INTLOG(JP_ERROR,'HIRLSM: Memory allocate fail',JPQUIET)
+            HIRLSM = 1
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C       Read values for different land-sea mask in memory
+C
+        NEWSIZE = NUMBER*JPRLEN
+        IRET = HGETLSM(KGAUSS,OLDLSM,NEWSIZE)
+cs        IRET = HGETLSM(KGAUSS,OLDLSM,IOSIZE)
+
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HIRLSM: HGETLSM failed to get land-sea mask data',JPQUIET)
+          HIRLSM = 1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C Sinisa put nint instead int
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E)) ! SC Aug-2005
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S)) ! SC Aug-2005
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HIRLSM: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HIRLSM: Required size = = ',NLEN)
+        HIRLSM = 2
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 2*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLSM: Memory allocation fail',JPQUIET)
+          HIRLSM = 2
+          GOTO 900
+        ENDIF
+C
+        IPRLAT = IPRLON + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENGRD(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLSM: HGENGRD failed to get lat/lon grid data',JPQUIET)
+        HIRLSM = 2
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NJPR=17
+        NJPB=14
+        IF (LITAL.AND.L12PNT) THEN
+          NJPR=29
+          NJPB=15
+        ENDIF
+        NBYTES = (NJPR*JPRLEN + NJPB*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLSM: Memory allocation fail',JPQUIET)
+          HIRLSM = 3
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+        IF (LITAL.AND.L12PNT) THEN
+          IPPWTSN  = IPNEIGH + (12*ILL*JPBYTES)
+          IPKSCHEN = IPPWTSN  + (12*ILL*JPRLEN)
+        ENDIF
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Create the new land-sea mask
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Create new land-sea mask if specification has changed
+C
+      LNEWSPC = .FALSE.
+      IF( AREA(1).NE.OLDAREA(1) ) LNEWSPC = .TRUE.
+      IF( AREA(2).NE.OLDAREA(2) ) LNEWSPC = .TRUE.
+      IF( AREA(3).NE.OLDAREA(3) ) LNEWSPC = .TRUE.
+      IF( AREA(4).NE.OLDAREA(4) ) LNEWSPC = .TRUE.
+      IF( GRID(1).NE.OLDGRID(1) ) LNEWSPC = .TRUE.
+      IF( GRID(2).NE.OLDGRID(2) ) LNEWSPC = .TRUE.
+      IF( POLE(1).NE.OLDPOLE(1) ) LNEWSPC = .TRUE.
+      IF( POLE(2).NE.OLDPOLE(2) ) LNEWSPC = .TRUE.
+C
+      IF( .NOT.LNEWSPC ) GOTO 500
+C
+      OLDAREA(1) = AREA(1)
+      OLDAREA(2) = AREA(2)
+      OLDAREA(3) = AREA(3)
+      OLDAREA(4) = AREA(4)
+      OLDGRID(1) = GRID(1)
+      OLDGRID(2) = GRID(2)
+      OLDPOLE(1) = POLE(1)
+      OLDPOLE(2) = POLE(2)
+C
+C     Allocate memory for new land-sea mask
+C
+      IF( INSIZE.LT.(NLEN*JPRLEN) ) THEN
+        INSIZE = NLEN*JPRLEN
+        IF( IPNEWLS.GT.0 ) CALL JFREE(IPNEWLS)
+        IPNEWLS = JMALLOC(INSIZE)
+        IF( IPNEWLS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HIRLSM: Memory allocation fail',JPQUIET)
+          HIRLSM = 4
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Find neighbours.
+C     (Note: 4-point scheme is used for land-sea mask interpolation).
+C
+      IRET = HNEI12(.FALSE.,NLEN,RLAT,RLON,KGAUSS,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLSM: HNEI12 failed to find neighbours',JPQUIET)
+        HIRLSM = 4
+        GOTO 900
+      ENDIF
+C
+C     Perform the interpolation for the new land-sea mask.
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+          NEWLSM(LOOP) =
+     X      OLDLSM(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDLSM(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDLSM(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDLSM(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDLSM(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDLSM(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDLSM(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDLSM(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDLSM(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDLSM(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDLSM(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDLSM(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+C
+          NEWLSM(LOOP) =
+     X      OLDLSM(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDLSM(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDLSM(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDLSM(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 )  
+     X        NEWLSM(LOOP) = OLDLSM(NEIGH(NEXT,LOOP))
+          ENDDO
+C
+        ENDIF
+C
+      ENDDO
+
+C
+C     -----------------------------------------------------------------|
+C     Section 5.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     Fin neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGAUSS,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HIRLSM: HNEI12 failed to find neighbours',JPQUIET)
+        HIRLSM = 5
+        GOTO 900
+      ENDIF
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTSLSM
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   OLDLSM,NEWLSM,PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      IF (LITAL.AND.L12PNT) THEN
+        DO LOOP = 1, NLEN
+          IF (KSCHEME(LOOP).EQ.JP12PT) THEN
+            KSCHEMEN(LOOP)=JP4PT
+          ELSE
+            KSCHEMEN(LOOP)=KSCHEME(LOOP)
+          ENDIF
+        ENDDO
+        CALL HWTSLSM
+     X  (NLEN,KSCHEMEN,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   OLDLSM,NEWLSM,PWTSN)
+      ENDIF
+
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+C
+C     See if any of the neighbours are missing
+C
+          COUNT = 0
+          IF( NOTEQ(OLD(NEIGH( 1,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 2,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 3,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 4,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 5,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 6,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 7,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 8,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 9,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH(10,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH(11,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH(12,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+C
+C         Interpolate using twelve neighbours if none are missing
+C
+        IF( LVEGGY) THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE IF( LSOIL ) THEN
+          IF(NEWLSM(LOOP).GE.0.5)THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 2,LOOP)).GE.0.5 ) NEAREST = 2
+            ENDIF
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 3,LOOP)).GE.0.5 ) NEAREST = 3
+            ENDIF
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 4,LOOP)).GE.0.5 ) NEAREST = 4
+            ENDIF
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 5,LOOP)).GE.0.5 ) NEAREST = 5
+            ENDIF
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 6,LOOP)).GE.0.5 ) NEAREST = 6
+            ENDIF
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 7,LOOP)).GE.0.5 ) NEAREST = 7
+            ENDIF
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 8,LOOP)).GE.0.5 ) NEAREST = 8
+            ENDIF
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 9,LOOP)).GE.0.5 ) NEAREST = 9
+            ENDIF
+            IF( PWTS( 10,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 10,LOOP)).GE.0.5 ) NEAREST = 10
+            ENDIF
+            IF( PWTS( 11,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 11,LOOP)).GE.0.5 ) NEAREST = 11
+            ENDIF
+            IF( PWTS( 12,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 12,LOOP)).GE.0.5 ) NEAREST = 12
+            ENDIF
+          ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 2,LOOP)).LT.0.5)  NEAREST = 2
+            ENDIF
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 3,LOOP)).LT.0.5)  NEAREST = 3
+            ENDIF
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 4,LOOP)).LT.0.5)  NEAREST = 4
+            ENDIF
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 5,LOOP)).LT.0.5)  NEAREST = 5
+            ENDIF
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 6,LOOP)).LT.0.5)  NEAREST = 6
+            ENDIF
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 7,LOOP)).LT.0.5)  NEAREST = 7
+            ENDIF
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 8,LOOP)).LT.0.5)  NEAREST = 8
+            ENDIF
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 9,LOOP)).LT.0.5)  NEAREST = 9
+            ENDIF
+            IF( PWTS( 10,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 10,LOOP)).LT.0.5)  NEAREST = 10
+            ENDIF
+            IF( PWTS( 11,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 11,LOOP)).LT.0.5)  NEAREST = 11
+            ENDIF
+            IF( PWTS( 12,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 12,LOOP)).LT.0.5)  NEAREST = 12
+            ENDIF
+          ENDIF
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE
+          IF( COUNT.EQ.12 .AND..NOT.LVEGGY2) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X        OLD(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X        OLD(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X        OLD(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X        OLD(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X        OLD(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X        OLD(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X        OLD(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X        OLD(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( COUNT.EQ.0 .AND..NOT.LVEGGY2) THEN
+            NEWFLD(LOOP) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+
+
+      IF(LITAL)THEN     !land point
+           IF(NEWLSM(LOOP).GE.0.5)THEN     !land point
+            INUM=0
+            DO NEXT=1,4
+              IF(OLDLSM(NEIGH( NEXT,LOOP)).GE.0.5)THEN
+                INUM=INUM+1
+                IF( INUM.GE.2)THEN
+                  IF(PWTSN( NEXT,LOOP).GT.PWTSN(NEAREST,LOOP)) THEN
+                    NEAREST = NEXT
+                  ENDIF
+                ELSEIF( INUM.EQ.1) THEN
+                  NEAREST = NEXT
+                ENDIF
+              ENDIF
+            ENDDO
+
+            ELSE  !sea point
+
+            INUM=0
+            DO NEXT=1,4
+              IF(OLDLSM(NEIGH( NEXT,LOOP)).LT.0.5)THEN
+                INUM=INUM+1
+                IF( INUM.GE.2)THEN
+                  IF(PWTSN( NEXT,LOOP).GT.PWTSN(NEAREST,LOOP)) THEN
+                    NEAREST = NEXT
+                  ENDIF
+                ELSEIF( INUM.EQ.1) THEN
+                  NEAREST = NEXT
+                ENDIF
+              ENDIF
+            ENDDO
+
+            ENDIF  !end if sea/land
+       ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+       ENDIF
+
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+
+          ENDIF
+        ENDIF
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+C
+C     See if any of the neighbours are missing
+C
+          COUNT = 0
+          IF( NOTEQ(OLD(NEIGH( 1,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 2,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 3,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(OLD(NEIGH( 4,LOOP)),RMISSGV) ) COUNT = COUNT + 1
+C
+C         Interpolate using four neighbours if none are missing
+C
+        IF( LVEGGY) THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE IF( LSOIL ) THEN
+          IF(NEWLSM(LOOP).GE.0.5)THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 2,LOOP)).GE.0.5)  NEAREST = 2
+            ENDIF
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 3,LOOP)).GE.0.5)  NEAREST = 3
+            ENDIF
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 4,LOOP)).GE.0.5)  NEAREST = 4
+            ENDIF
+          ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 2,LOOP)).LT.0.5)  NEAREST = 2
+            ENDIF
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 3,LOOP)).LT.0.5)  NEAREST = 3
+            ENDIF
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                IF(OLDLSM(NEIGH( 4,LOOP)).LT.0.5)  NEAREST = 4
+            ENDIF
+          ENDIF
+          NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE
+          IF( COUNT.EQ.4 .AND. .NOT.LVEGGY2) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( COUNT.EQ.0 .AND. .NOT.LVEGGY2) THEN
+            NEWFLD(LOOP) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            IF(LITAL)THEN     !land point
+               IF(NEWLSM(LOOP).GE.0.5)THEN     !land point
+                  INUM=0
+                  DO NEXT=1,4
+                    IF(OLDLSM(NEIGH( NEXT,LOOP)).GE.0.5)THEN
+                      INUM=INUM+1
+                      IF( INUM.GE.2)THEN
+                        IF(PWTS( NEXT,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                          NEAREST = NEXT
+                        ENDIF
+                      ELSEIF( INUM.EQ.1) THEN
+                        NEAREST = NEXT
+                      ENDIF
+                    ENDIF
+                  ENDDO
+
+                ELSE  !sea point
+
+                 INUM=0
+                 DO NEXT=1,4
+                   IF(OLDLSM(NEIGH( NEXT,LOOP)).LT.0.5)THEN
+                     INUM=INUM+1
+                     IF( INUM.GE.2)THEN
+                       IF(PWTS( NEXT,LOOP).GT.PWTS(NEAREST,LOOP)) THEN
+                         NEAREST = NEXT
+                       ENDIF
+                     ELSEIF( INUM.EQ.1) THEN
+                       NEAREST = NEXT
+                     ENDIF
+                   ENDIF
+                 ENDDO
+
+                 ENDIF  !end if sea/land
+       ELSE
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+       ENDIF
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+          ENDIF
+       ENDIF
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 )  
+     X        NEWFLD(LOOP) = OLD(NEIGH(NEXT,LOOP))
+          ENDDO
+C
+        ENDIF
+C
+C       Remove precipitation if less than a 'trace' or if nearest
+C       neighbour is less than a trace
+C
+        IF( LPREC ) THEN
+          IF( NEWFLD(LOOP).LT.ZPRECIP ) THEN
+            NEWFLD(LOOP) = 0.0
+          ELSE
+            NEAREST = 1
+            NEND = 12
+            IF( KSCHEME(LOOP).NE.JP12PT ) NEND = 4
+            DO NEXT = 2, NEND
+              IF( PWTS( NEXT,LOOP).GT.PWTS( NEAREST,LOOP) )
+     X          NEAREST = NEXT
+            ENDDO
+            IF( OLD(NEIGH(NEAREST,LOOP)).LT.ZPRECIP ) NEWFLD(LOOP) = 0.0
+          ENDIF
+        ENDIF
+C
+C       For sea-ice cover, ensure no values are outside the range (0,1)
+C
+        IF( (NIPARAM.EQ.31).AND.(NITABLE.EQ.128) ) THEN
+          IF( NOTEQ( NEWFLD(LOOP),RMISSGV) ) THEN 
+            IF( NEWFLD(LOOP).GT.1.0 ) NEWFLD(LOOP) = 1.0
+            IF( NEWFLD(LOOP).LT.0.0 ) NEWFLD(LOOP) = 0.0
+          ENDIF
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hll2ll.F b/interpolation/hll2ll.F
new file mode 100755
index 0000000..6bcb760
--- /dev/null
+++ b/interpolation/hll2ll.F
@@ -0,0 +1,460 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HLL2LL(L12PNT,OLDFLD,OLDGRID,AREA,POLE,GRID,
+     X                        NEWFLD,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HLL2LL
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated regular lat/long field from a
+C     global regular lat/long field using 12-point horizontal
+C     interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HLL2LL(L12PNT,OLDFLD,OLDGRID,AREA,POLE,GRID,NEWFLD,KSIZE,
+C    X              NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT  - Chooses between 12-point and 4-point interpolation
+C     OLDFLD  - The array of values from the regular lat/long field
+C     OLDGRID - Grid increments (i/j) for the global lat/long field
+C     AREA    - Limits of area (N/W/S/E) for the new lat/long field
+C     POLE    - Pole of rotation (lat/long) for the new lat/long field
+C     GRID    - Grid increments (i/j) for the new lat/long field
+C     KSIZE   - The size of the array to fill with the new
+C               lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLD - The array of values for the regular lat/long field 
+C     NLON   - Number of longitudes in the regular lat/long field
+C     NLAT   - Number of latitudes in the regular lat/long field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     HGENLL  - Calculates original lat/long (before rotation) for
+C               a rotated grid
+C     HNEILL  - Finds neighbours for points for interpolation
+C     HWTSLL  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      November 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KSIZE, NLON, NLAT
+      REAL OLDGRID(2),AREA(4),POLE(2),GRID(2),OLDFLD(*),NEWFLD(KSIZE)
+C
+C     Local variables
+C
+      integer loopx
+      INTEGER NEXT, LOOP, IRET, NLEN, NPREV, NBYTES, NUMBER
+      INTEGER NOLDLAT, NOLDLON, NEAREST
+C
+      CHARACTER*12 YFLAG
+      LOGICAL LNEW, LFIRST, LVEGGY
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      REAL PREGRID(2)
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RLAT(1),RLON(1)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+C
+      REAL OLD(1)
+      POINTER (IOLD,   OLD)
+C
+      DATA NPREV/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA ILLOLD/-1/, IOLD/-1/
+      DATA PREGRID/2*0.0/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NPREV, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD, IPRLAT, IPRLON, IOLD
+      SAVE PREGRID
+C
+C     Externals
+C
+      INTEGER HNEILL, HGENLL
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HLL2LL = 0
+C
+      CALL JDEBUG()
+
+      IF( L12PNT ) THEN
+        CALL INTLOG(JP_DEBUG,'HLL2LL: 12-pt interpolation',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'HLL2LL:  4-pt interpolation',JPQUIET)
+      ENDIF
+C
+      CALL CHKPREC()
+      IF( LPREC )THEN
+        CALL INTLOG(JP_DEBUG,
+     X   'HLL2LL: precipitation threshold applied',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X   'HLL2LL: precipitation threshold not applied',JPQUIET)
+      ENDIF
+C    Are we handling vegetation parameter
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+      IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'HLL2LL: nearest neighbour processing (vegetation)',JPQUIET)
+
+      NOLDLAT = 1 + NINT(180.0/OLDGRID(1))
+      NOLDLON = NINT(360.0/OLDGRID(2))
+      NUMBER  = NOLDLAT * NOLDLON
+C
+      IF( (OLDGRID(1).NE.PREGRID(1)).OR.
+     X    (OLDGRID(2).NE.PREGRID(2)) ) THEN
+C
+C       Allocate memory to hold the input field
+C       (in case OLDFLD and NEWFLD are the same arrays)
+C
+        IF( IOLD.GT.0 ) CALL JFREE(IOLD)
+C
+        NBYTES = NUMBER * JPRLEN
+C
+        IOLD = JMALLOC(NBYTES)
+#ifdef hpR64
+        IOLD = IOLD/(1024*1024*1024*4)
+#endif
+        IF( IOLD.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HLL2LL: Memory allocation fail',JPQUIET)
+          HLL2LL = 3
+          GOTO 900
+        ENDIF
+C
+        PREGRID(1) = OLDGRID(1)
+        PREGRID(2) = OLDGRID(2)
+C
+      ENDIF
+C
+C     Preserve the input field
+C
+      DO LOOP = 1, NUMBER
+        OLD(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E)) ! SC
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S)) ! SC
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HLL2LL: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HLL2LL: Required size = ',NLEN)
+        HLL2LL = 4
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 2*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HLL2LL: Memory allocation fail',JPQUIET)
+          HLL2LL = 5
+          GOTO 900
+        ENDIF
+C
+        IPRLAT = IPRLON + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENLL(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HLL2LL: HGENLL failed to get lat/lon grid data',JPQUIET)
+        HLL2LL = 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HLL2LL: Memory allocation fail',JPQUIET)
+          HLL2LL = 7
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEILL(L12PNT,NLEN,RLAT,RLON,OLDGRID,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HLL2LL: HNEILL failed to find neighbours',JPQUIET)
+        HLL2LL = 8
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTSLL
+     X  (NLEN,KSCHEME,KLA,PDLAT,oldgrid(2),pdlo0,PDLO1,PDLO2,PDLO3,
+     X   NEIGH,PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( LVEGGY) THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE
+          IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X        OLD(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X        OLD(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X        OLD(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X        OLD(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X        OLD(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X        OLD(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X        OLD(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X        OLD(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+          ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+          ELSE
+            DO NEXT = 1, 4  
+              IF( NEIGH(NEXT,LOOP).NE.0 )
+     X          NEWFLD(LOOP) = OLD(NEIGH(NEXT,LOOP))
+            ENDDO
+C
+          ENDIF
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hll2llw.F b/interpolation/hll2llw.F
new file mode 100755
index 0000000..86bbecc
--- /dev/null
+++ b/interpolation/hll2llw.F
@@ -0,0 +1,492 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HLL2LLW(L12PNT,OLDFLDU,OLDFLDV,
+     X                         OLDGRID,AREA,POLE,GRID,
+     X                         NEWFLDU,NEWFLDV,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HLL2LLW
+C
+C     Purpose
+C     -------
+C
+C     This routine creates rotated U and V regular lat/long fields from
+C     U and V global regular lat/long field using 12-point horizontal
+C     interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HLL2LLW(L12PNT,OLDFLDU,OLDFLDV,
+C    X               OLDGRID,AREA,POLE,GRID,
+C    X               NEWFLDU,NEWFLDV,KSIZE,
+C    X               NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT  - Chooses between 12-point and 4-point interpolation
+C     OLDFLDU - Array of values from the old global lat/long U field
+C     OLDFLDV - Array of values from the old global lat/long V field
+C     OLDGRID - Grid increments (i/j) for the old global lat/long field
+C     AREA    - Limits of area (N/W/S/E) for the new lat/long fields
+C     POLE    - Pole of rotation (lat/long) for the new lat/long fields
+C     GRID    - Grid increments (i/j) for the new lat/long fields
+C     KSIZE   - The size of the array to fill with the new
+C               lat/long fields
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLDU - The array of values for the new U lat/long field 
+C     NEWFLDV - The array of values for the new V lat/long field 
+C     NLON    - Number of longitudes in the regular lat/long fields
+C     NLAT    - Number of latitudes in the regular lat/long fields
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     HGENLL  - Calculates original lat/long (before rotation) for
+C               a rotated grid
+C     HNEILL  - Finds neighbours for points for interpolation
+C     HWTSLL  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      December 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KSIZE, NLON, NLAT
+      REAL OLDGRID(2),AREA(4),POLE(2),GRID(2)
+      REAL OLDFLDU(*),OLDFLDV(*),NEWFLDU(KSIZE),NEWFLDV(KSIZE)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, IRET, NLEN, NPREV, NBYTES, NUMBER
+      INTEGER NOLDLAT, NOLDLON
+C
+      LOGICAL LNEW, LFIRST
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      REAL PREGRID(2)
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RCLAT(1),RCLON(1),RLAT(1),RLON(1),RDIR(1),C(1),S(1),U(1),V(1)
+      POINTER (IPRCLAT, RCLAT)
+      POINTER (IPRCLON, RCLON)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+      POINTER (IPRDIR, RDIR)
+      POINTER (IPC, C)
+      POINTER (IPS, S)
+      POINTER (IPU, U)
+      POINTER (IPV, V)
+C
+      REAL OLDU(1)
+      POINTER (IOLDU, OLDU)
+      REAL OLDV(1)
+      POINTER (IOLDV, OLDV)
+C
+      DATA NPREV/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA ILLOLD/-1/, IOLDU/-1/, IOLDV/-1/
+      DATA PREGRID/2*0.0/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NPREV, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD, IPRLAT, IPRLON, IOLDU, IOLDV
+      SAVE IPC, IPS, IPU, IPV
+      SAVE PREGRID
+C
+C     Externals
+C
+      INTEGER HNEILL, HGENLL
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement function
+C
+      REAL A, RADIAN
+C
+C     Convert degrees to radians
+C
+      RADIAN(A) = (A) * 0.0174532925
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HLL2LLW = 0
+C
+      CALL JDEBUG()
+      NOLDLAT = 1 + NINT(180.0/OLDGRID(1))
+      NOLDLON = NINT(360.0/OLDGRID(2))
+      NUMBER  = NOLDLAT * NOLDLON
+C
+      IF( (OLDGRID(1).NE.PREGRID(1)).OR.
+     X    (OLDGRID(2).NE.PREGRID(2)) ) THEN
+C
+C       Allocate memory to hold the input fields
+C       (in case OLDFLDU/OLDFLDV and NEWFLDU/NEWFLDV are the same arrays)
+C
+        IF( IOLDU.GT.0 ) THEN
+          CALL JFREE(IOLDU)
+          CALL JFREE(IOLDV)
+        ENDIF
+C
+        NBYTES = NUMBER * JPRLEN
+C
+        IOLDU = JMALLOC(NBYTES)
+        IOLDV = JMALLOC(NBYTES)
+#ifdef hpR64
+        IOLDU = IOLDU/(1024*1024*1024*4)
+        IOLDV = IOLDV/(1024*1024*1024*4)
+#endif
+        IF( (IOLDU.EQ.0).OR.(IOLDV.EQ.0) ) THEN
+          CALL INTLOG(JP_ERROR,'HLL2LLW: Memory allocate fail',JPQUIET)
+          HLL2LLW = 3
+          GOTO 900
+        ENDIF
+C
+        PREGRID(1) = OLDGRID(1)
+        PREGRID(2) = OLDGRID(2)
+C
+      ENDIF
+C
+C     Preserve the input fields
+C
+      DO LOOP = 1, NUMBER
+        OLDU(LOOP) = OLDFLDU(LOOP)
+        OLDV(LOOP) = OLDFLDV(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + INT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + INT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HLL2LLW: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HLL2LLW: Required size = ',NLEN)
+        HLL2LLW = 4
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 9*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HLL2LLW: Memory allocate fail',JPQUIET)
+          HLL2LLW = 5
+          GOTO 900
+        ENDIF
+C
+        IPRLAT  = IPRLON  + (ILL*JPRLEN)
+        IPRCLON = IPRLAT  + (ILL*JPRLEN)
+        IPRCLAT = IPRCLON + (ILL*JPRLEN)
+        IPRDIR  = IPRCLAT + (ILL*JPRLEN)
+        IPC     = IPRDIR  + (ILL*JPRLEN)
+        IPS     = IPC     + (ILL*JPRLEN)
+        IPU     = IPS     + (ILL*JPRLEN)
+        IPV     = IPU     + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENLL(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HLL2LLW: HGENLL failed to get lat/lon grid data',JPQUIET)
+        HLL2LLW = 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HLL2LLW: Memory allocate fail',JPQUIET)
+          HLL2LLW = 7
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEILL(L12PNT,NLEN,RLAT,RLON,OLDGRID,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HLL2LLW: HNEILL failed to find neighbours',JPQUIET)
+        HLL2LLW = 8
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTSLL
+     X  (NLEN,KSCHEME,KLA,PDLAT,OLDGRID(2),PDLO0,PDLO1,PDLO2,PDLO3,
+     X   NEIGH,PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+          U(LOOP) =
+     X      OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDU(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDU(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDU(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDU(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDU(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDU(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDU(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDU(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+          V(LOOP) =
+     X      OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDV(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDV(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDV(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDV(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDV(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDV(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDV(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDV(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+          U(LOOP) =
+     X      OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+          V(LOOP) =
+     X      OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+        ELSE
+          DO NEXT = 1, 4  
+            IF( NEIGH(NEXT,LOOP).NE.0 ) THEN
+              U(LOOP) = OLDU(NEIGH(NEXT,LOOP))
+              V(LOOP) = OLDV(NEIGH(NEXT,LOOP))
+            ENDIF
+          ENDDO
+C
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 5.  Adjust the U and V components to new (rotated) axes
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = 0.0
+      ENDDO
+C
+      CALL HPSHGPW(RLON,RLAT,RCLON,RCLAT,RDIR,NLEN,POLE)
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = -RADIAN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        C(LOOP) = COS(RDIR(LOOP))
+        S(LOOP) = SIN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        NEWFLDU(LOOP) = U(LOOP)*C(LOOP) - V(LOOP)*S(LOOP)
+        NEWFLDV(LOOP) = U(LOOP)*S(LOOP) + V(LOOP)*C(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hll2xyz.F b/interpolation/hll2xyz.F
new file mode 100755
index 0000000..32e5e55
--- /dev/null
+++ b/interpolation/hll2xyz.F
@@ -0,0 +1,84 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE HLL2XYZ(RLAT,RLONG,X,Y,Z,INROW)
+C---->
+C**** HLL2XYZ
+C
+C     Purpose
+C     -------
+C
+C     Converts an array of latitude/longitude values to an
+C     array of (x,y,z) coordinates.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL HLL2XYZ(RLAT,RLONG,X,Y,Z,INROW)
+C
+C     Input
+C     -----
+C
+C     RLAT  - Array of latitudes.
+C     RLONG - Array of corresponding longitudes.
+C     INROW - Count of latitudes/longitudes.
+C
+C
+C     Output
+C     ------
+C
+C     (X,Y,Z) - Array of coordinates.
+C
+C
+C     Method
+C     ------
+C
+C     Z axis is the polar axis directed from south to north.
+C     X and Y axes are in the equatorial plane and have origin at the
+C     centre of the Earth. The X axis passes through (O north, 0 east).
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      REAL RLAT,RLONG,X,Y,Z
+      DIMENSION RLAT(*),RLONG(*),X(*),Y(*),Z(*)
+      INTEGER INROW
+C
+C     Local variables
+C
+      REAL FACTOR
+      DATA FACTOR/0.017453293/
+      INTEGER LOOP
+C
+      DO LOOP = 1, INROW
+        X(LOOP) = COS(RLAT(LOOP)*FACTOR) * COS(RLONG(LOOP)*FACTOR)
+        Y(LOOP) = COS(RLAT(LOOP)*FACTOR) * SIN(RLONG(LOOP)*FACTOR)
+        Z(LOOP) = SIN(RLAT(LOOP)*FACTOR)
+      ENDDO
+C
+      RETURN
+      END
+
diff --git a/interpolation/hnei12.F b/interpolation/hnei12.F
new file mode 100755
index 0000000..8e6f598
--- /dev/null
+++ b/interpolation/hnei12.F
@@ -0,0 +1,462 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNEI12
+     X  (L12PNT,KLEN,RLAT,RLON,KGAUSS,KPTS,PLATIN,
+     X   KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+C
+C---->
+C**** HNEI12
+C
+C     Purpose
+C     -------
+C
+C     This routine accepts a vector of points and finds the 12
+C     neighbours for each point suitable for horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNEI12(L12PNT,KLEN,RLAT,RLON,KGAUSS,KPTS,PLATIN,
+C    X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C              = .TRUE. for 12-point horizontal
+C              = .FALSE. for 4-point
+C     KLEN   - Number of points along the vector
+C     RLAT   - List of latitudes for points.
+C     RLON   - List of longitudes for points.
+C     KGAUSS - Original gaussian field number.
+C     KPTS   - List giving number of points in each latitude in original
+C              gaussian field.
+C     PLATIN - Original gaussian field latitudes (north and south).
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KSCHEME - Flag showing interpolation scheme to use for point
+C               0 = 12-point
+C               1 = 4-point bilinear
+C               2 = nearest neighbour
+C     PDLAT   - Meridian linear weight.
+C     PDLO0   - Zonal linear weight for the latitude of point 5.
+C     PDLO1   - Zonal linear weight for the latitude of point 1.
+C     PDLO2   - Zonal linear weight for the latitude of point 3.
+C     PDLO3   - Zonal linear weight for the latitude of point 11.
+C     KLA     - Latitude number in original field of latitude north of
+C               each point in the vector.
+C     NEIGH   - List of indices in the original field of neighbouring
+C               point values for each point in the vector.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JNORSGG - Finds gaussian latitude north or south of given latitude
+C     JDEBUG  - Tests if debug output required.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     ECMWF Meteorological Bulletin M1.6/7
+C     IFS Documentation
+C     Part VI: Technical and Computational Procedures (CY21R4)
+C     March 2000
+C     Section 2.3
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KLEN, KGAUSS, KPTS(KGAUSS*2)
+      REAL RLAT(KLEN), RLON(KLEN), PLATIN(KGAUSS*2)
+C
+      INTEGER KLA(KLEN), KSCHEME(KLEN)
+      REAL PDLAT(KLEN),PDLO0(KLEN),PDLO1(KLEN),PDLO2(KLEN),PDLO3(KLEN)
+      INTEGER NEIGH(12,*)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, NBYTES
+      INTEGER NLAT0, NLAT1, NLAT2, NLAT3, NLAT(12), NLONG(12)
+      REAL STEP0, STEP1, STEP2, STEP3
+      INTEGER NPREV, ISIZE, ISIZOLD, IOFFSET(1)
+      POINTER( IPOFF, IOFFSET )
+C
+      DATA ISIZOLD/-1/, NPREV/-1/
+      SAVE ISIZOLD,IPOFF,NPREV
+C
+C     Externals
+C
+      INTEGER JNORSGG
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HNEI12 = 0
+C
+      CALL JDEBUG()
+C
+C     Get memory for offset array.
+C
+      ISIZE = KGAUSS*2 + 1
+      IF( ISIZE.GT.ISIZOLD ) THEN
+C
+        IF( ISIZOLD.GT.0 ) CALL JFREE(IPOFF)
+C
+        NBYTES = ISIZE * JPBYTES
+        IPOFF = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPOFF = IPOFF/(1024*1024*1024*4)
+#endif
+        IF( IPOFF.EQ.0 ) THEN
+          CALL INTLOG(JP_WARN,'HNEI12: Memory allocate fail ',JPQUIET)
+          HNEI12 = 1
+          GOTO 900
+        ENDIF
+C
+        ISIZOLD = ISIZE
+        NPREV = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in the original field.
+C
+      IF( KGAUSS.NE.NPREV ) THEN
+        IOFFSET(1) = 1
+        DO LOOP = 2, (KGAUSS*2+1)
+          IOFFSET(LOOP) = IOFFSET(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+        NPREV = KGAUSS
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Section 2.  Loop through points along the vector.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      DO NEXT = 1,KLEN
+C
+C       Clear current neighbour indices
+C
+        DO LOOP = 1, 12
+          NEIGH(LOOP,NEXT) = 0
+        ENDDO
+C
+C       Find latitude numbers for neighbours.
+C
+C       First find latitude numbers to north and south of the point
+C
+C     -----------------------------------------------------------------|
+C       Section 3. Nearest neighbour to be used.
+C     -----------------------------------------------------------------|
+C
+  300   CONTINUE
+C
+        IF( RLAT(NEXT).GT.PLATIN(1) ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'HNEI12: Nearest neighbour to south used for point ',NEXT)
+C
+C         Above northern latitude of original field, so use nearest
+C         neighbour (point 3 or 4)
+C
+          STEP2 = 360.0 / REAL(KPTS(1))
+          NLONG( 3) = 1 + INT(RLON(NEXT)/STEP2)
+          IF( NLONG( 3).GT.KPTS(1) ) NLONG( 3) = 1
+          NLONG( 4) = NLONG(3) + 1
+          IF( NLONG( 4).GT.KPTS(1) ) NLONG( 4) = 1
+C
+          IF( ABS((RLON(NEXT) - REAL(NLONG(3)-1)*STEP2 )) .LE.
+     X        ABS((RLON(NEXT) - REAL(NLONG(4)-1)*STEP2 )) ) THEN
+            NEIGH(3,NEXT) = NLONG(3)
+          ELSE
+            NEIGH(4,NEXT) = NLONG(4)
+          ENDIF
+          KSCHEME(NEXT) = JPNEARN
+          GOTO 600
+        ENDIF
+C
+        IF( RLAT(NEXT).LT.PLATIN(KGAUSS*2) ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'HNEI12: Nearest neighbour to north used for point ',NEXT)
+C
+C         Below southern latitude of original field, so use nearest
+C         neighbour (point 1 or 2)
+C
+          STEP1 = 360.0 / REAL(KPTS(KGAUSS*2))
+          NLONG( 1) = 1 + INT(RLON(NEXT)/STEP1)
+          IF( NLONG( 1).GT.KPTS(KGAUSS*2) ) NLONG( 1) = 1
+          NLONG( 2) = NLONG(1) + 1
+          IF( NLONG( 2).GT.KPTS(KGAUSS*2) ) NLONG( 2) = 1
+C
+          IF( ABS((RLON(NEXT) - REAL(NLONG(1)-1)*STEP1 )) .LE.
+     X        ABS((RLON(NEXT) - REAL(NLONG(2)-1)*STEP1 )) ) THEN
+            NEIGH(1,NEXT) = IOFFSET(KGAUSS*2) + NLONG(1) - 1
+          ELSE
+            NEIGH(2,NEXT) = IOFFSET(KGAUSS*2) + NLONG(2) - 1
+          ENDIF
+          KSCHEME(NEXT) = JPNEARN
+          GOTO 600
+        ENDIF
+C
+        NLAT1 = JNORSGG(RLAT(NEXT),PLATIN,KGAUSS,1)
+        NLAT2 = JNORSGG(RLAT(NEXT),PLATIN,KGAUSS,0)
+C
+        IF( NLAT2.EQ.NLAT1) NLAT2 = NLAT1 + 1
+C
+C       Find outer latitude numbers to north and south of the point
+C
+        NLAT0 = NLAT1 - 1
+        NLAT3 = NLAT2 + 1
+C
+C     -----------------------------------------------------------------|
+C       Section 4. 4-point bilinear to be used.
+C     -----------------------------------------------------------------|
+C
+  400   CONTINUE
+C
+        IF( (NLAT0.EQ.0).OR.(NLAT3.GT.KGAUSS*2).OR.(.NOT.L12PNT) ) THEN
+Cjdc      CALL INTLOG(JP_DEBUG,
+Cjdc X      'HNEI12: 4-pt bilinear interpolation used for point ',NEXT)
+C
+C         Between two northern latitudes or two southern latitudes of
+C         original field, so use 4-point bilinear interpolation
+C         (points 1, 2, 3 and 4)
+C
+C         Points 1 and 2
+C
+          STEP1 = 360.0 / REAL(KPTS(NLAT1))
+          NLONG(1) = 1 + INT(RLON(NEXT)/STEP1)
+          IF( NLONG(1).GT.KPTS(NLAT1) ) NLONG(1) = 1
+          NLONG(2) = NLONG(1) + 1
+          IF( NLONG(2).GT.KPTS(NLAT1) ) NLONG(2) = 1
+C
+          NEIGH(1,NEXT) = IOFFSET(NLAT1) + NLONG(1) - 1
+          NEIGH(2,NEXT) = IOFFSET(NLAT1) + NLONG(2) - 1
+C
+C         Points 3 and 4
+C
+          STEP2 = 360.0 / REAL(KPTS(NLAT2))
+          NLONG( 3) = 1 + INT(RLON(NEXT)/STEP2)
+          IF( NLONG( 3).GT.KPTS(NLAT2) ) NLONG( 3) = 1
+          NLONG( 4) = NLONG(3) + 1
+          IF( NLONG( 4).GT.KPTS(NLAT2) ) NLONG( 4) = 1
+C
+          NEIGH(3,NEXT) = IOFFSET(NLAT2) + NLONG(3) - 1
+          NEIGH(4,NEXT) = IOFFSET(NLAT2) + NLONG(4) - 1
+C
+C         Calculate zonal linear weights for the latitudes.
+C
+          PDLO1(NEXT) = ( RLON(NEXT) - REAL(NLONG(1)-1)*STEP1 ) / STEP1
+          PDLO2(NEXT) = ( RLON(NEXT) - REAL(NLONG(3)-1)*STEP2 ) / STEP2
+C
+          KLA(NEXT) = NLAT1
+          PDLAT(NEXT) = ( RLAT(NEXT) - PLATIN(NLAT1) ) /
+     X                  ( PLATIN(NLAT2) - PLATIN(NLAT1) )
+C
+          KSCHEME(NEXT) = JP4PT
+          GOTO 600
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Section 5. 12-point interpolation to be used.
+C     -----------------------------------------------------------------|
+C
+  500   CONTINUE
+C
+        KSCHEME(NEXT) = JP12PT
+C
+        KLA(NEXT) = NLAT1
+        PDLAT(NEXT) = ( RLAT(NEXT) - PLATIN(NLAT1) ) /
+     X                ( PLATIN(NLAT2) - PLATIN(NLAT1) )
+C
+C       Northernmost
+C
+        NLAT(5) = NLAT0
+        NLAT(6) = NLAT0
+C
+C       Northern
+C
+        NLAT(7) = NLAT1
+        NLAT(1) = NLAT1
+        NLAT(2) = NLAT1
+        NLAT(8) = NLAT1
+C
+C       Southern
+C
+        NLAT( 9) = NLAT2
+        NLAT( 3) = NLAT2
+        NLAT( 4) = NLAT2
+        NLAT(10) = NLAT2
+C
+C       Southernmost
+C
+        NLAT(11) = NLAT3
+        NLAT(12) = NLAT3
+C
+C     -----------------------------------------------------------------|
+C       Find longitude numbers for neighbours.
+C     -----------------------------------------------------------------|
+C
+C       Northernmost
+C
+        STEP0 = 360.0 / REAL(KPTS(NLAT0))
+        NLONG(5) = 1 + INT(RLON(NEXT)/STEP0)
+        IF( NLONG(5).GT.KPTS(NLAT0) ) NLONG(5) = 1
+        NLONG(6) = NLONG(5) + 1
+        IF( NLONG(6).GT.KPTS(NLAT0) ) NLONG(6) = 1
+C
+C       Northern
+C
+        STEP1 = 360.0 / REAL(KPTS(NLAT1))
+        NLONG(1) = 1 + INT(RLON(NEXT)/STEP1)
+        IF( NLONG(1).GT.KPTS(NLAT1) ) NLONG(1) = 1
+        NLONG(7) = NLONG(1) - 1
+        IF( NLONG(7).LT.1 ) NLONG(7) = KPTS(NLAT1)
+        NLONG(2) = NLONG(1) + 1
+        IF( NLONG(2).GT.KPTS(NLAT1) ) NLONG(2) = 1
+        NLONG(8) = NLONG(2) + 1
+        IF( NLONG(8).GT.KPTS(NLAT1) ) NLONG(8) = 1
+C
+C       Southern
+C
+        STEP2 = 360.0 / REAL(KPTS(NLAT2))
+        NLONG( 3) = 1 + INT(RLON(NEXT)/STEP2)
+        IF( NLONG( 3).GT.KPTS(NLAT2) ) NLONG( 3) = 1
+        NLONG( 9) = NLONG(3) - 1
+        IF( NLONG( 9).LT.1 ) NLONG( 9) = KPTS(NLAT2)
+        NLONG( 4) = NLONG(3) + 1
+        IF( NLONG( 4).GT.KPTS(NLAT2) ) NLONG( 4) = 1
+        NLONG(10) = NLONG(4) + 1
+        IF( NLONG(10).GT.KPTS(NLAT2) ) NLONG(10) = 1
+C
+C       Southernmost
+C
+        STEP3 = 360.0 / REAL(KPTS(NLAT3))
+        NLONG(11) = 1 + INT(RLON(NEXT)/STEP3)
+        IF( NLONG(11).GT.KPTS(NLAT3) ) NLONG(11) = 1
+        NLONG(12) = NLONG(11) + 1
+        IF( NLONG(12).GT.KPTS(NLAT3) ) NLONG(12) = 1
+C
+C     -----------------------------------------------------------------|
+C       Calculate zonal linear weights for the latitudes.
+C     -----------------------------------------------------------------|
+C
+        PDLO0(NEXT) = ( RLON(NEXT) - REAL(NLONG(5)-1)*STEP0 ) / STEP0
+C
+        PDLO1(NEXT) = ( RLON(NEXT) - REAL(NLONG(1)-1)*STEP1 ) / STEP1
+C
+        PDLO2(NEXT) = ( RLON(NEXT) - REAL(NLONG(3)-1)*STEP2 ) / STEP2
+C
+        PDLO3(NEXT) = ( RLON(NEXT) - REAL(NLONG(11)-1)*STEP3 ) / STEP3
+C
+C     -----------------------------------------------------------------|
+C       Store indices of the neighbours.
+C     -----------------------------------------------------------------|
+C
+        DO LOOP = 1, 12
+          NEIGH(LOOP,NEXT) = IOFFSET(NLAT(LOOP)) + NLONG(LOOP) - 1
+        ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 6.  End of loop along vector of points.
+C     -----------------------------------------------------------------|
+C
+  600   CONTINUE
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hneill.F b/interpolation/hneill.F
new file mode 100755
index 0000000..91f9f90
--- /dev/null
+++ b/interpolation/hneill.F
@@ -0,0 +1,395 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNEILL
+     X  (L12PNT,KLEN,RLAT,RLON,OLDGRID,
+     X   KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+C
+C---->
+C**** HNEILL
+C
+C     Purpose
+C     -------
+C
+C     This routine accepts a vector of points and finds the 12
+C     neighbours for each point suitable for horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNEILL(L12PNT,KLEN,RLAT,RLON,OLDGRID,
+C    X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT  - Chooses between 12-point and 4-point interpolation
+C               = .TRUE. for 12-point horizontal
+C               = .FALSE. for 4-point
+C     KLEN    - Number of points along the vector
+C     RLAT    - List of latitudes for points.
+C     RLON    - List of longitudes for points.
+C     OLDGRID - Grid increments (i/j) for the global lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KSCHEME - Flag showing interpolation scheme to use for point
+C               0 = 12-point
+C               1 = 4-point bilinear
+C               2 = nearest neighbour
+C     PDLAT   - Meridian linear weight.
+C     PDLO0   - Zonal linear weight for the latitude of point 5.
+C     PDLO1   - Zonal linear weight for the latitude of point 1.
+C     PDLO2   - Zonal linear weight for the latitude of point 3.
+C     PDLO3   - Zonal linear weight for the latitude of point 11.
+C     KLA     - Latitude number in original field of latitude north of
+C               each point in the vector.
+C     NEIGH   - List of indices in the original field of neighbouring
+C               point values for each point in the vector.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JDEBUG  - Tests if debug output required.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C
+C
+C     Reference
+C     ---------
+C
+C     ECMWF Meteorological Bulletin M1.6/7
+C     IFS Documentation
+C     Part VI: Technical and Computational Procedures (CY21R4)
+C     March 2000
+C     Section 2.3
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KLEN
+      REAL OLDGRID(2), RLAT(KLEN), RLON(KLEN)
+C
+      INTEGER KLA(KLEN), KSCHEME(KLEN)
+      REAL PDLAT(KLEN),PDLO0(KLEN),PDLO1(KLEN),PDLO2(KLEN),PDLO3(KLEN)
+      INTEGER NEIGH(12,*)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, NBYTES, NOLDLAT, NOLDLON
+      INTEGER NLAT0, NLAT1, NLAT2, NLAT3, NLAT(12), NLONG(12)
+      INTEGER NLONG1, NLONG2, NLONG5
+      REAL PLATINC, PLONINC
+      INTEGER NPREV, ISIZE, ISIZOLD
+C
+      DATA ISIZOLD/-1/, NPREV/-1/
+      SAVE ISIZOLD,NPREV
+C
+C     Externals
+C
+      INTEGER JNORSGG
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement functions
+C
+      INTEGER ILAT, NUMLAT, NUMLON
+      REAL LAT, LON, PLATIN, LATSTEP, LONSTEP
+C
+      PLATIN(ILAT,LATSTEP) = 90.0 - REAL(ILAT-1)*LATSTEP
+      NUMLAT(LAT,LATSTEP)  = 1 + NINT((90.0 - LAT)/LATSTEP)
+      NUMLON(LON,LONSTEP)  = 1 + NINT(LON/LONSTEP )
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HNEILL = 0
+C
+      CALL JDEBUG()
+C
+      PLATINC = OLDGRID(1)
+      PLONINC = OLDGRID(2)
+      NOLDLAT = 1 + NINT(180.0/PLATINC)
+      NOLDLON = NINT(360.0/PLONINC)
+C
+C     -----------------------------------------------------------------|
+C       Section 2.  Loop through points along the vector.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      DO NEXT = 1,KLEN
+C
+C       Clear current neighbour indices
+C
+        DO LOOP = 1, 12
+          NEIGH(LOOP,NEXT) = 0
+        ENDDO
+C
+C     -----------------------------------------------------------------|
+C       Section 3. Find latitude numbers for neighbours.
+C     -----------------------------------------------------------------|
+C
+  300   CONTINUE
+C
+C       First find latitude numbers to north and south of the point
+C
+        NLAT1 = NUMLAT(RLAT(NEXT),PLATINC)
+        NLAT2 = NLAT1 + 1
+C
+C       Find outer latitude numbers further north and south of the point
+C
+        NLAT0 = NLAT1 - 1
+        NLAT3 = NLAT2 + 1
+C
+C     -----------------------------------------------------------------|
+C       Section 4. Nearest neighbour to be used.
+C     -----------------------------------------------------------------|
+C
+  400   CONTINUE
+C
+        IF( (NLAT1.LT.1).OR.(NLAT2.GT.NOLDLAT) ) THEN
+C
+C         On northern/southern latitude of original field, so use
+C         nearest neighbours (point 1 or 2)
+C
+          IF( NLAT1.LT.1 ) NLAT1 = 1
+C
+          IF( NLAT2.GT.NOLDLAT ) NLAT1 = NOLDLAT
+C
+          NLONG(1) = NUMLON(RLON(NEXT),PLONINC)
+          NLONG1   = NLONG(1)
+          IF( NLONG(1).GT.NOLDLON ) NLONG(1) = 1
+          NLONG(2) = NLONG(1) + 1
+          NLONG2   = NLONG(2)
+          IF( NLONG(2).GT.NOLDLON ) NLONG(2) = 1
+C
+          IF( ABS((RLON(NEXT) - REAL(NLONG1-1)*PLONINC )) .LE.
+     X        ABS((RLON(NEXT) - REAL(NLONG2-1)*PLONINC )) ) THEN
+            NEIGH(1,NEXT) = (NLAT1-1)*NOLDLON + NLONG(1)
+          ELSE
+            NEIGH(1,NEXT) = (NLAT1-1)*NOLDLON + NLONG(2)
+          ENDIF
+          KSCHEME(NEXT) = JPNEARN
+          GOTO 700
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Section 5. 4-point bilinear to be used.
+C     -----------------------------------------------------------------|
+C
+  500   CONTINUE
+C
+        IF( (NLAT0.LT.1).OR.(NLAT3.GT.NOLDLAT).OR.
+     X      (.NOT.L12PNT) ) THEN
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'HNEILL: 4-pt bilinear interpolation used for point ',NEXT)
+C
+C         Between two northern latitudes or two southern latitudes of
+C         original field, so use 4-point bilinear interpolation
+C         (points 1, 2, 3 and 4)
+C
+C         Points 1 and 2
+C
+          NLONG(1) = NUMLON(RLON(NEXT),PLONINC)
+          NLONG1   = NLONG(1)
+          IF( NLONG(1).GT.NOLDLON ) NLONG(1) = 1
+C
+          NEIGH(1,NEXT) = (NLAT1-1)*NOLDLON + NLONG(1) + 1
+          NEIGH(2,NEXT) = NEIGH(1,NEXT) + 1
+C
+C         Points 3 and 4
+C
+          NLONG( 3) = NLONG(1)
+C
+          NEIGH(3,NEXT) = (NLAT2-1)*NOLDLON + NLONG(3) + 1
+          NEIGH(4,NEXT) = NEIGH(3,NEXT) + 1
+C
+C         Calculate zonal linear weights for the latitudes.
+C
+          PDLO1(NEXT) = (RLON(NEXT)-REAL(NLONG1-1)*PLONINC) / PLONINC
+          PDLO2(NEXT) = PDLO1(NEXT)
+C
+          KLA(NEXT) = NLAT1
+          PDLAT(NEXT) = (PLATIN(NLAT1,PLATINC)-RLAT(NEXT)) / PLATINC
+C
+          KSCHEME(NEXT) = JP4PT
+          GOTO 700
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Section 6. 12-point interpolation to be used.
+C     -----------------------------------------------------------------|
+C
+  600   CONTINUE
+C
+        KSCHEME(NEXT) = JP12PT
+C
+        KLA(NEXT) = NLAT1
+        PDLAT(NEXT) = (PLATIN(NLAT1,PLATINC)-RLAT(NEXT)) / PLATINC
+C
+C       Northernmost
+C
+        NLAT(5) = NLAT0
+        NLAT(6) = NLAT0
+C
+C       Northern
+C
+        NLAT(7) = NLAT1
+        NLAT(1) = NLAT1
+        NLAT(2) = NLAT1
+        NLAT(8) = NLAT1
+C
+C       Southern
+C
+        NLAT( 9) = NLAT2
+        NLAT( 3) = NLAT2
+        NLAT( 4) = NLAT2
+        NLAT(10) = NLAT2
+C
+C       Southernmost
+C
+        NLAT(11) = NLAT3
+        NLAT(12) = NLAT3
+C
+C       Find longitude numbers for neighbours.
+C
+C       Northernmost
+C
+        NLONG(5) = NUMLON(RLON(NEXT),PLONINC)
+        NLONG5 = NLONG(5)
+        IF( NLONG(5).GT.NOLDLON ) NLONG(5) = 1
+        NLONG(6) = NLONG(5) + 1
+        IF( NLONG(6).GT.NOLDLON ) NLONG(6) = 1
+C
+C       Northern
+C
+        NLONG(1) = NLONG(5)
+        NLONG(7) = NLONG(1) - 1
+        IF( NLONG(7).LT.1 ) NLONG(7) = NOLDLON
+        NLONG(2) = NLONG(1) + 1
+        IF( NLONG(2).GT.NOLDLON ) NLONG(2) = 1
+        NLONG(8) = NLONG(2) + 1
+        IF( NLONG(8).GT.NOLDLON ) NLONG(8) = 1
+C
+C       Southern
+C
+        NLONG( 3) = NLONG(1)
+        NLONG( 9) = NLONG(7)
+        NLONG( 4) = NLONG(2)
+        NLONG(10) = NLONG(8)
+C
+C       Southernmost
+C
+        NLONG(11) = NLONG(5)
+        NLONG(12) = NLONG(11) + 1
+        IF( NLONG(12).GT.NOLDLON ) NLONG(12) = 1
+C
+C       Calculate zonal linear weights for the latitudes.
+C
+        PDLO0(NEXT) = (RLON(NEXT)-REAL(NLONG5-1)*PLONINC) / PLONINC
+        PDLO1(NEXT) = PDLO0(NEXT)
+        PDLO2(NEXT) = PDLO0(NEXT)
+        PDLO3(NEXT) = PDLO0(NEXT)
+C
+C       Store indices of the neighbours.
+C
+        DO LOOP = 1, 12
+          NEIGH(LOOP,NEXT) = NOLDLON*(NLAT(LOOP)-1) + NLONG(LOOP)
+        ENDDO
+C
+  700  CONTINUE
+C
+      ENDDO
+C
+C     End of loop along vector of points.
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfap.F b/interpolation/hntfap.F
new file mode 100755
index 0000000..74fd1c4
--- /dev/null
+++ b/interpolation/hntfap.F
@@ -0,0 +1,133 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFAP(INGRIB,INLEN)
+C
+C---->
+C**** HNTFAP
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFAP(INGRIB,INLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in interpolation.
+C
+C
+C     Method
+C     ------
+C
+C     Calls HNTFAPS to handle rotation when input and output fields
+C     are both spectral.
+C
+C     Calls HNTFAPH in all other cases.
+C
+C
+C     Externals
+C     ---------
+C
+C     HNTFAPS - Handle rotation when input and output fields
+C               are both spectral.
+C     HNTFAPH - Handle rotation in all other cases.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     January 31, 2001
+C
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0.   Variables
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40100 )
+C
+C     Function arguments
+C
+      INTEGER INGRIB(*),INLEN
+C
+C     Local variables
+C
+      INTEGER IRET
+C
+C     Externals
+C
+      INTEGER  HNTFAPS, HNTFAPH
+      EXTERNAL HNTFAPS, HNTFAPH
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HNTFAP = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Split handling in case there are rotations to do.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Is the interpolation from SH to SH?
+C
+      IF( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X    ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)) ) THEN
+C
+        IRET = HNTFAPS(INGRIB,INLEN)
+C
+      ELSE
+C
+        IRET = HNTFAPH(INGRIB,INLEN)
+C
+      ENDIF
+C
+      IF( IRET.NE.0 ) HNTFAP = JPROUTINE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfaph.F b/interpolation/hntfaph.F
new file mode 100755
index 0000000..ba3147f
--- /dev/null
+++ b/interpolation/hntfaph.F
@@ -0,0 +1,578 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFAPH(INGRIB,INLEN)
+C
+C---->
+C**** HNTFAPH
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate to grid point field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFAPH(INGRIB,INLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in interpolation.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack field.
+C
+C     If the input is a spectral field and the output is a rotated
+C     grid-point field, create a global reduced gaussian field and
+C     then create the rotated grid-point field from it.
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     FIXAREA - Fixup input/output field area definitions.
+C     HSP2GG  - Find suitable gaussian grid for spectral truncation
+C     HIRLAM  - Creates rotated lat/long field from reduced gaussian
+C     HIRLSM  - Creates rotated lat/long field from reduced gaussian
+C               using land-sea mask
+C     HRG2GG  - Creates rotated gaussian field from reduced gaussian
+C     HLL2LL  - Creates rotated lat/long field from lat/long field
+C     LSMFLD  - Determines whether a field is to be interpolated using
+C               a land-sea mask
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     January 31, 2001
+C
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0.   Variables
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INGRIB(*),INLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "jparams.h"
+#include "current.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40110 )
+C
+C     Local variables
+C
+      LOGICAL LUSELSM, LDEBUG, LSP2RGG, LLATOUT
+      INTEGER NUMPTS, NGAUSS, NLON, NLAT, NUVFLAG, NTRUNC, NCOUNT
+      INTEGER IWORD, IERR, LOOP, IRET, ISIZE, KPTS(JPGTRUNC*2)
+      INTEGER ISHIZE
+      INTEGER ITEMP,K,I,J,IM,JM
+      REAL PLATS(JPGTRUNC*2),AREA(4),GRID(2),POLE(2),WEST,EAST
+      REAL OLDGRID(2)
+      REAL TEMP(1440,1440)
+      CHARACTER*1 HOLDTYP
+C
+      REAL SWORK(1), RGGRID(1), ZNFLDO(1)
+#ifdef POINTER_64
+      INTEGER*8 ISWORK, IRGGRID, IZNFLDO
+#endif
+      POINTER ( ISWORK, SWORK)
+      POINTER ( IRGGRID, RGGRID)
+      POINTER ( IZNFLDO, ZNFLDO )
+C
+      SAVE IZNFLDO,ISWORK, IRGGRID
+C
+C     Externals
+C
+      INTEGER HSP2GG, HIRLAM, HIRLSM, HRG2GG, HLL2LL, FIXAREA,PDDEFS
+      INTEGER HSP2GG2,HSP2GG3
+      LOGICAL LSMFLD
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HNTFAPH = 0
+C
+C     Check if debug option turned on
+C
+      CALL JDEBUG()
+      LDEBUG = ( NDBG.NE.0 )
+C
+      LSP2RGG = .FALSE.
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Decode data from the GRIB code
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Decode data from GRIB code (no checking)
+C
+      IERR  =  0
+      CALL GRSVCK(0)
+C
+      IERR = 1
+      IWORD = INLEN
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            ZNFELDI, JPEXPAND, INGRIB, INLEN, IWORD, 'D',IERR)
+
+      IF (ISEC2(11).EQ.64) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'HNTFAPH: Scanning flag west-east/south-north',ISEC2(11))
+        ITEMP = NIAREA(1)
+        NIAREA(1) = NIAREA(3)
+        NIAREA(3) = ITEMP
+
+        IM = ISEC2(2)
+        JM = ISEC2(3)
+         K=0
+         DO J=JM,1,-1
+           DO I=1,IM
+              K=K+1
+              TEMP(I,J) = ZNFELDI(K)
+           END DO
+         END DO
+         K=0
+         DO J=1,JM
+           DO I=1,IM
+              K=K+1
+              ZNFELDI(K) = TEMP(I,J)
+           END DO
+         END DO
+
+      ENDIF
+
+C
+      IF( IERR.LT.0) THEN
+        IF( (IERR.EQ.-2).OR.(IERR.EQ.-4) ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAPH: Use missing value',JPQUIET)
+          LIMISSV = .TRUE.
+        ELSE
+          CALL INTLOG(JP_ERROR,'HNTFAPH: GRIBEX decoding fail.',IERR)
+          HNTFAPH = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+      ELSE IF( IERR.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,'HNTFAPH: GRIBEX decoding failed.',IERR)
+        HNTFAPH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      NCOUNT = ISEC4(1)
+C
+      LLATOUT = (NOREPR.EQ.JPREGROT).OR.(NOREPR.EQ.JPREGULAR)
+C
+      IF( .NOT.LNOROTA ) GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Handle rotation, if necessary.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'HNTFAPH: Rotate field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'HNTFAPH: South pole lat  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'HNTFAPH: South pole long ',NOROTA(2))
+      ENDIF
+C
+C     Fill area limits (handles case when default 0/0/0/0 given)
+C
+      IRET = FIXAREA()
+      IF( IRET.NE.0 ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X    'HNTFAPH: area fixup failed',JPQUIET)
+        HNTFAPH = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+      AREA(1) = REAL(NOAREA(1))/PPMULT
+      AREA(2) = REAL(NOAREA(2))/PPMULT
+      AREA(3) = REAL(NOAREA(3))/PPMULT
+      AREA(4) = REAL(NOAREA(4))/PPMULT
+C
+      GRID(1) = REAL(NOGRID(1))/PPMULT
+      GRID(2) = REAL(NOGRID(2))/PPMULT
+C
+      POLE(1) = REAL(NOROTA(1))/PPMULT
+      POLE(2) = REAL(NOROTA(2))/PPMULT
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Spectral to rotated grid-point
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+
+      IF( (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT) ) THEN
+C
+C       Convert spectral to suitable global reduced gaussian grid
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'HNTFAPH: Spectral to suitable reduced gaussian',JPQUIET)
+C
+        NIRESO = ISEC2(2)
+        NTRUNC = ISEC2(2)
+      IF(LNORESO) THEN
+         NTRUNC = NORESO
+         IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAPH: problem getting data for reduced grid',NTRUNC)
+            HNTFAPH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+         IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAPH: Spectral truncation:', NTRUNC)
+          CALL INTLOG(JP_DEBUG,'HNTFAPH: Gaussian number : ',NGAUSS)
+         ENDIF
+        GOTO 401
+       ENDIF
+       IF(LARESOL ) THEN
+        IF(LLATOUT) THEN
+         IRET = HSP2GG2(NTRUNC,GRID(1),GRID(2),NGAUSS,KPTS,PLATS,ISIZE)
+        ELSE
+         IRET = HSP2GG3(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+        ENDIF
+         IF( IRET.NE.0 ) THEN
+           IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X       'HNTFAPH: problem getting data for reduced grid',NTRUNC)
+           HNTFAPH = JPROUTINE + 4
+           GOTO 900
+         ENDIF
+       ENDIF
+c---------------------------------------------------------------------
+C       Truncate if a smaller resolution has been requested
+C
+  401 CONTINUE
+      IF( NTRUNC.LT.NIRESO ) THEN
+       IF( LDEBUG ) THEN
+       CALL INTLOG(JP_DEBUG,'HNTFAPH: Truncation changed from: ',NIRESO)
+       CALL INTLOG(JP_DEBUG,'HNTFAPH: to: ',NTRUNC)
+       CALL INTLOG(JP_DEBUG,'HNTFAPH: Gaussian number is : ',NGAUSS)
+       ENDIF
+C
+            ISHIZE =  (NTRUNC+1)*(NTRUNC+4)
+              CALL JMEMHAN( 3, IZNFLDO, ISHIZE, 1, IERR)
+              IF( IERR.NE.0 ) THEN
+                CALL INTLOG(JP_FATAL,
+     X            'HNTFAPH: Get scratch space failed',JPQUIET)
+                HNTFAPH = JPROUTINE + 4
+                GOTO 900
+              ENDIF
+C
+C         Generate spherical harmonics with output truncation
+C
+          CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NTRUNC )
+C
+C         Move new spherical harmonics to 'input' array
+C
+          DO LOOP = 1, ISHIZE
+            ZNFELDI(LOOP) = ZNFLDO(LOOP)
+          ENDDO
+
+      ELSE
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'HNTFAPH: Spectral to suitable reduced gaussian',JPQUIET)
+C
+          NTRUNC = ISEC2(2)
+          IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAPH: problem getting data for reduced grid',NTRUNC)
+            HNTFAPH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+         IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAPH: Spectral truncation:', NTRUNC)
+          CALL INTLOG(JP_DEBUG,'HNTFAPH: Gaussian number : ',NGAUSS)
+         ENDIF
+      ENDIF
+C
+C       Dynamically allocate memory for global reduced gaussian grid
+C
+        CALL JMEMHAN( 18, IRGGRID, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: memory alloc for reduced grid fail',JPQUIET)
+          HNTFAPH = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+C       Set flag to show field is not a wind component
+C
+        NUVFLAG = 0
+C
+C       Create the reduced gaussian grid
+C
+        HOLDTYP = HOGAUST
+        WEST = 0.0
+        EAST = 360.0 - (360.0/(NGAUSS*4))
+        CALL JAGGGP(ZNFELDI,NTRUNC,PLATS(1),PLATS(NGAUSS*2),WEST,
+     X              EAST,NGAUSS,'R',KPTS,RGGRID,NUVFLAG,IRET)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: spectral to reduced gaussian failed',JPQUIET)
+          HNTFAPH = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+        HOGAUST = HOLDTYP
+C
+        NCOUNT = 0
+        DO LOOP = 1, (NGAUSS*2)
+          NCOUNT= NCOUNT + KPTS(LOOP)
+        ENDDO
+C
+        LSP2RGG = .TRUE.
+C
+        IF( NOREPR.EQ.JPFGGROT ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'HNTFAPH: Convert gaussian to rotated gaussian',JPQUIET)
+C
+          GOTO 600
+C
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Gaussian to rotated lat/long
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF( (LSP2RGG.AND.LLATOUT) .OR.
+     X    ( (NIREPR.EQ.JPGAUSSIAN).AND.LLATOUT) .OR.
+     X    ( (NIREPR.EQ.JPQUASI).AND.LLATOUT)    ) THEN
+C
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_DEBUG,'HNTFAPH: Gauss to lat/lon',JPQUIET)
+C
+C       Dynamically allocate memory for rotated lat/long grid
+C
+        NLON = 1 + NINT((AREA(JPEAST)  - AREA(JPWEST)) /
+     X         GRID(JPWESTEP)) !SC
+        NLAT = 1 + NINT((AREA(JPNORTH) - AREA(JPSOUTH)) /
+     X         GRID(JPNSSTEP)) !SC
+C
+        NOWE = NLON
+        NONS = NLAT
+C
+        NUMPTS = NLON * NLAT
+        ISIZE  = NUMPTS
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: memory alloc for lat/long grid fail',JPQUIET)
+          HNTFAPH = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        LUSELSM = LSMFLD()
+C
+C       If original field was spectral, ...
+C
+        IF( LSP2RGG ) THEN
+          IF( LUSELSM ) THEN
+            IRET = HIRLSM(LO12PT,RGGRID,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                    SWORK,ISIZE,NLON,NLAT)
+          ELSE
+            IRET = HIRLAM(LO12PT,RGGRID,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                    SWORK,ISIZE,NLON,NLAT)
+          ENDIF
+C
+        ELSE
+C
+C       If original field was gaussian, ...
+C
+          IRET = PDDEFS()
+          NGAUSS = ISEC2(10)
+cs          IF( LUSELSM ) THEN
+          IF( LSM ) THEN
+            IRET = HIRLSM(LO12PT,ZNFELDI,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                    SWORK,ISIZE,NLON,NLAT)
+          ELSE
+            IRET = HIRLAM(LO12PT,ZNFELDI,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                    SWORK,ISIZE,NLON,NLAT)
+          ENDIF
+C
+        ENDIF
+C
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: HIRLAM rotation failed',JPQUIET)
+          HNTFAPH = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        ISEC2(1) = JPREGROT
+        ISEC4(1) = NOWE * NONS
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Gaussian to rotated gaussian
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+      IF( (LSP2RGG.AND.(NOREPR.EQ.JPFGGROT)) .OR.
+     X    (LSP2RGG.AND.(NOREPR.EQ.JPQGGROT)) .OR.
+     X    (((NIREPR.EQ.JPQUASI).OR.(NIREPR.EQ.JPGAUSSIAN)) .AND.
+     X     (NOREPR.EQ.JPFGGROT).OR.(NOREPR.EQ.JPQGGROT)) ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'HNTFAPH: Gaussian to reduced gaussian',JPQUIET)
+C
+C       Dynamically allocate memory for rotated lat/long grid
+C
+        ISIZE = NOGAUSS * NOGAUSS * 8 
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: memory alloc for gaussian grid fail',JPQUIET)
+          HNTFAPH = JPROUTINE + 8
+          GOTO 900
+        ENDIF
+C
+C       If original field was spectral, ...
+C
+        IF( LSP2RGG ) THEN
+          IRET = HRG2GG(LO12PT,RGGRID,NGAUSS,AREA,POLE,
+     X                  NOGAUSS,HOGAUST,SWORK,ISIZE,NUMPTS)
+C
+        ELSE
+C
+C       If original field was gaussian, ...
+C
+          NGAUSS = ISEC2(10)
+          IRET = HRG2GG(LO12PT,ZNFELDI,NGAUSS,AREA,POLE,
+     X                  NOGAUSS,HOGAUST,SWORK,ISIZE,NUMPTS)
+        ENDIF
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: HRG2GG rotation failed',JPQUIET)
+          HNTFAPH = JPROUTINE + 8
+          GOTO 900
+        ENDIF
+C
+        IF( (NOREPR.EQ.JPQUASI).OR.
+     X      (NOREPR.EQ.JPQGGROT).OR.
+     X      (NOREPR.EQ.JPFGGROT).OR.
+     X      (NOREPR.EQ.JPGAUSSIAN) ) THEN
+          ISEC2(1) = JPFGGROT
+        ELSE
+          ISEC2(1) = NOREPR
+        ENDIF
+C
+        ISEC4(1) = NUMPTS
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.   Lat/long to rotated lat/long
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+      IF( (NIREPR.EQ.JPREGULAR) ) THEN
+C
+C       Dynamically allocate memory for rotated lat/long grid
+C
+        NLON = 1 + NINT((AREA(JPEAST)  - AREA(JPWEST)) /
+     X         GRID(JPWESTEP))
+        NLAT = 1 + NINT((AREA(JPNORTH) - AREA(JPSOUTH)) /
+     X         GRID(JPNSSTEP))
+C
+        NOWE = NLON
+        NONS = NLAT
+C
+        NUMPTS = NLON * NLAT
+        ISIZE  = NUMPTS
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: memory alloc for lat/long grid fail',JPQUIET)
+          HNTFAPH = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        OLDGRID(1) = REAL(NIGRID(1))/100000.0
+        OLDGRID(2) = REAL(NIGRID(2))/100000.0
+        IRET = HLL2LL(LO12PT,ZNFELDI,OLDGRID,AREA,POLE,GRID,SWORK,ISIZE,
+     X                NLON,NLAT)
+C
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAPH: HLL2LL rotation failed',JPQUIET)
+          HNTFAPH = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        ISEC2(1) = JPREGROT
+        ISEC4(1) = NOWE * NONS
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 8.   Move rotated field back into field original array.
+C     -----------------------------------------------------------------|
+C
+  800 CONTINUE
+C
+      DO LOOP = 1, NUMPTS
+        ZNFELDI(LOOP) = SWORK(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfaps.F b/interpolation/hntfaps.F
new file mode 100755
index 0000000..ddccd50
--- /dev/null
+++ b/interpolation/hntfaps.F
@@ -0,0 +1,463 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFAPS(INGRIB,INLEN)
+C
+C---->
+C**** HNTFAPS
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input spectral field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFAPS(INGRIB,INLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in rotation.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack field.
+C
+C     Rotate the field values if necessary.
+C
+C     Some rotation coefficients cannot be created because the
+C     algorithm does not converge for rotations which are smaller
+C     than a limit which depends on the spectral truncation.
+C
+C     If the rotation is too small, it has to be split into three
+C     steps (two forward and one backward).
+C
+C     Current know limits are:
+C
+C     Truncation    Max South pole lat   Minimum rotation
+C     ----------    ------------------   ----------------
+C         63          -89.5                  0.5
+C        106          -85                    5.0
+C        159          -77                   13.0
+C        213          -68                   22.0
+C        319          -51                   39.0
+C        511          -30.5                 59.5
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C     RPHI    - Rotate a spectral field by longitude.
+#ifdef __uxp__
+C     JACOBIF - Rotates spectral coefficients by latitude.
+#else
+C     JACOBI  - Rotates spectral coefficients by latitude.
+#endif
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     January 31, 2001
+C
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0.   Variables
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INGRIB(*),INLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40120 )
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+6) )
+C
+C     Local variables
+C
+      REAL POLELAT, POLELON
+      CHARACTER*1 TYPE
+      INTEGER IWORD, IERR, KPR
+      INTEGER NUMPTS, NGAUSS
+      INTEGER ISIZE, NBYTES, ITRUNC, LOOP, IRET
+      DATA ISIZE/0/
+C
+      REAL SWORK
+      DIMENSION SWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 ISWORK
+#endif
+      POINTER ( ISWORK, SWORK)
+C
+      REAL*8 DWORK
+      DIMENSION DWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 IDWORK
+#endif
+      POINTER ( IDWORK, DWORK)
+C
+      REAL*8 DATA
+      DIMENSION DATA(1)
+#ifdef POINTER_64
+      INTEGER*8 IDATA
+#endif
+      POINTER ( IDATA, DATA)
+C
+      SAVE ISIZE, ISWORK, IDWORK, IDATA
+C
+      REAL*8 DLON, DLAT, LATLIM
+      LOGICAL LOK, LSPLIT
+#ifdef CRAY
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+#endif
+C
+C     Externals
+C
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      HNTFAPS = 0
+      IERR = 0
+      KPR = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Decode data from the GRIB code
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Decode data from GRIB code (no checking)
+C
+      IWORD = INLEN
+      IERR  =  0
+      CALL GRSVCK(0)
+      IERR = 1
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            ZNFELDI, JPEXPAND, INGRIB, INLEN, IWORD, 'D',IERR)
+C
+      IF( IERR.LT.0) THEN
+        IF( (IERR.EQ.-2).OR.(IERR.EQ.-4) ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAPS: Use missing value',JPQUIET)
+          LIMISSV = .TRUE.
+        ELSE
+          CALL INTLOG(JP_ERROR,'HNTFAPS: GRIBEX decoding fail.',IERR)
+          HNTFAPS = IERR
+          GOTO 900
+        ENDIF
+      ELSE IF( IERR.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,'HNTFAPS: GRIBEX decoding failed.',IERR)
+        HNTFAPS = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Handle rotation, if necessary.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Is a rotation of the SH required?
+C
+      IF( LNOROTA ) THEN
+C
+C       Avoid rotating U or V spectral coefficients
+C
+        IF( (NIPARAM.EQ.JP_U).OR.(NIPARAM.EQ.JP_V) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HNTFAPS: Unable to rotate spectral U or V:',NIPARAM)
+          HNTFAPS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+C       Dynamically allocate memory for workspace.
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        ISIZE =  (2*(JPNM+1)*(JPNM+6))*2
+        CALL JMEMHAN( 11, IDWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFAPS: memory allocation fail',IDWORK)
+          HNTFAPS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        ISIZE =  JPLEN*2
+        CALL JMEMHAN( 15, IDATA, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFAPS: memory allocation fail',IDATA)
+          HNTFAPS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'HNTFAPS: Rotate SH field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'HNTFAPS: South pole latitude  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'HNTFAPS: South pole longitude ',NOROTA(2))
+        IF ( NOREPR.EQ.JPSPHERE )  NOREPR = JPSPHROT
+        IF ( NOREPR.EQ.JPREGULAR )  NOREPR = JPREGROT
+        ITRUNC = ISEC2(2)
+C
+C       Some rotation coefficients cannot be created because the
+C       algorithm does not converge for rotations which are smaller
+C       than a limit which depends on the spectral truncation.
+C
+        IF( ITRUNC.LE.63 ) THEN
+          LATLIM = -89.5
+        ELSE IF( ITRUNC.LE.106 ) THEN
+          LATLIM = -85.0
+        ELSE IF( ITRUNC.LE.159 ) THEN
+          LATLIM = -77.0
+        ELSE IF( ITRUNC.LE.213 ) THEN
+          LATLIM = -68.0
+        ELSE IF( ITRUNC.LE.319 ) THEN
+          LATLIM = -51.0
+        ELSE IF( ITRUNC.LE.511 ) THEN
+#ifdef __uxp__
+          LATLIM = -30.5
+#else
+          LATLIM = -29.5
+#endif
+        ELSE
+          HNTFAPS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+        CALL INTLOGR(JP_DEBUG,
+     X    'HNTFAPS: South pole latitude limit = ',LATLIM)
+C
+        POLELAT = (REAL(NOROTA(1))/JPMULT)
+C
+C       If the rotation is too small, it has to be split into three
+C       steps (two forward and one backward).
+C
+        LSPLIT = POLELAT.LT.LATLIM
+        IF( LSPLIT ) THEN
+          DLAT = -90.0 - LATLIM
+          CALL INTLOG(JP_DEBUG,
+     X      'HNTFAPS: Rotation has been split into three steps',JPQUIET)
+        ELSE
+          DLAT = -90.0 - POLELAT
+        ENDIF
+#if (defined CRAY) || (defined REAL_8)
+C
+C       Double precision REALs
+C
+        DLON = - REAL(NOROTA(2))/JPMULT
+C
+C       Rotate the spectral field by longitude.
+C
+        CALL RPHI( ZNFELDI, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+        IF( LSPLIT ) THEN
+C
+C         Two rotations forward ..
+C
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAPS: Twice forward through angle ', DLAT)
+#if (!defined __uxp__)
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X       'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+C
+C         .. and one backward
+C
+          DLAT = -90.0 - ( (LATLIM*2.0) - POLELAT)
+          DLAT= -DLAT
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAPS: Once backward through angle ', DLAT)
+        ENDIF
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+        LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+#else
+C
+C       Single precision REALs; so convert to double precision.
+C
+        DLAT = -90.0 - DBLE(NOROTA(1))/JPMULT
+        DLON = - DBLE(NOROTA(2))/JPMULT
+C
+C       Expand spectral coefficients to REAL*8
+C
+        DO LOOP = 1, ISEC4(1)
+          DATA(LOOP) = DBLE(ZNFELDI(LOOP))
+        ENDDO
+C
+C       Rotate the spectral field by longitude.
+        CALL RPHI( DATA, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+        IF( LSPLIT ) THEN
+C
+C         Two rotations forward ..
+C
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAPS: Twice forward through angle ', DLAT)
+#if (!defined __uxp__)
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAPS: Spectral rotation failed',JPQUIET)
+            HNTFAPS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+C
+C         .. and one backward
+C
+          DLAT = -90.0 - ( (LATLIM*2.0) - POLELAT)
+          DLAT= -DLAT
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAPS: Once backward through angle ', DLAT)
+        ENDIF
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( DATA, ITRUNC, DWORK, DLAT)
+#else
+        LOK = JACOBIF(DATA, ITRUNC, DWORK, DLAT)
+#endif
+#endif
+C
+        IF( .NOT.LOK ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFAPS: Rotation failed',JPQUIET)
+          HNTFAPS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+#if (!defined CRAY) && (!defined REAL_8)
+C
+C       Single precision REALs; repack spectral coefficients to REAL*4.
+C
+        DO LOOP = 1, ISEC4(1)
+          ZNFELDI(LOOP) = SNGL(DATA(LOOP))
+        ENDDO
+#endif
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfau.F b/interpolation/hntfau.F
new file mode 100755
index 0000000..a9b4f2a
--- /dev/null
+++ b/interpolation/hntfau.F
@@ -0,0 +1,137 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFAU(INGRIB,INLEN)
+C
+C---->
+C**** HNTFAU
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFAU(INGRIB,INLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (unpacked).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in interpolation.
+C
+C
+C     Method
+C     ------
+C
+C     Calls HNTFAUS to handle rotation when input and output fields
+C     are both spectral.
+C
+C     Calls HNTFAUH in all other cases.
+C
+C
+C     Externals
+C     ---------
+C
+C     HNTFAUS - Handle rotation when input and output fields
+C               are both spectral.
+C     HNTFAUH - Handle rotation in all other cases.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     January 31, 2001
+C
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0.   Variables
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40130 )
+C
+C     Function arguments
+C
+      INTEGER INGRIB(*),INLEN
+C
+C     Local variables
+C
+      INTEGER IRET
+C
+C     Externals
+C
+      INTEGER  HNTFAUS, HNTFAUH
+      EXTERNAL HNTFAUS, HNTFAUH
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HNTFAU = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Split handling in case there are rotations to do.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Is the interpolation from SH to SH?
+C
+      IF( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X    ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)) ) THEN
+C
+        IRET = HNTFAUS(INGRIB,INLEN)
+C
+      ELSE
+C
+        IF( LIMISSA ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAU: Use missing value',JPQUIET)
+          LIMISSV = .TRUE.
+        ENDIF
+        IRET = HNTFAUH(INGRIB,INLEN)
+C
+      ENDIF
+C
+      IF( IRET.NE.0 ) HNTFAU = JPROUTINE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfauh.F b/interpolation/hntfauh.F
new file mode 100755
index 0000000..d66141f
--- /dev/null
+++ b/interpolation/hntfauh.F
@@ -0,0 +1,530 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFAUH(FLDIN,INLEN)
+C
+C---->
+C**** HNTFAUH
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFAUH( FLDIN,INLEN)
+C
+C     Input
+C     -----
+C
+C     FLDIN  - Input field (unpacked).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in interpolation.
+C
+C
+C     Method
+C     ------
+C
+C     If the input is a spectral field and the output is a rotated
+C     grid-point field, create a global reduced gaussian field and
+C     then create the rotated grid-point field from it.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     FIXAREA - Fixup input/output field area definitions.
+C     HSP2GG  - Find suitable gaussian grid for spectral truncation
+C     HIRLAM  - Creates rotated lat/long field from reduced gaussian
+C     HIRLSM  - Creates rotated lat/long field from reduced gaussian
+C               using a land-sea mask
+C     HRG2GG  - Creates rotated gaussian field from reduced gaussian
+C     LSMFLD  - Determines whether a field is to be interpolated using
+C               a land-sea mask
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2001
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INLEN
+      REAL FLDIN(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "jparams.h"
+#include "current.h"
+#include "intlog.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40150 )
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+2) )
+C
+C     Local variables
+C
+      LOGICAL LUSELSM, LLATOUT, LSP2RGG
+      INTEGER NUMPTS, NGAUSS, NLON, NLAT, NUVFLAG, NTRUNC, NCOUNT
+      INTEGER IWORD, IERR, LOOP, IRET, ISIZE, KPTS(JPGTRUNC*2)
+      INTEGER ITEMP,K,I,J,IM,JM
+      INTEGER ISHIZE
+      REAL PLATS(JPGTRUNC*2),AREA(4),GRID(2),POLE(2),WEST,EAST
+      REAL TEMP(1440,1440)
+      CHARACTER*1 HOLDTYP
+C
+      REAL SWORK(1), RGGRID(1), ZNFLDO(1)
+#ifdef POINTER_64
+      INTEGER*8 ISWORK, IRGGRID, IZNFLDO
+#endif
+      POINTER ( ISWORK, SWORK)
+      POINTER ( IRGGRID, RGGRID)
+      POINTER ( IZNFLDO, ZNFLDO )
+C
+      SAVE ISWORK, IRGGRID, IZNFLDO
+C
+C     Externals
+C
+      INTEGER HSP2GG, HIRLAM, HIRLSM, HRG2GG, FIXAREA, PDDEFS
+      INTEGER HSP2GG2,HSP2GG3
+      LOGICAL LSMFLD
+C
+      REAL POLELAT, POLELON
+      CHARACTER*1 TYPE
+      INTEGER NBYTES, ITRUNC
+      DATA ISIZE/0/
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HNTFAUH = 0
+      IRET    = 0
+C
+      NCOUNT = INLEN
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Store input data.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'HNTFAUH: ZNFELDI allocate fail',JPQUIET)
+          HNTFAUH = IRET
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     Move unpacked values in from user array
+C
+      DO LOOP = 1, INLEN
+        ZNFELDI( LOOP ) = FLDIN( LOOP )
+      ENDDO
+      IF (NISCNM.EQ.64) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'HNTFAUH: Scanning flag west-east/south-north',NISCNM)
+        ITEMP = NIAREA(1)
+        NIAREA(1) = NIAREA(3)
+        NIAREA(3) = ITEMP
+
+        IM = NIWE
+        JM = NINS
+         K=0
+         DO J=JM,1,-1
+           DO I=1,IM
+              K=K+1
+              TEMP(I,J) = ZNFELDI(K)
+           END DO
+         END DO
+         K=0
+         DO J=1,JM
+           DO I=1,IM
+              K=K+1
+              ZNFELDI(K) = TEMP(I,J)
+           END DO
+         END DO
+
+      ENDIF
+C
+      LLATOUT = (NOREPR.EQ.JPREGROT).OR.(NOREPR.EQ.JPREGULAR)
+C     -----------------------------------------------------------------|
+C*    Section 3.   Handle rotation, if necessary.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Is rotation required?
+C
+      IF( LNOROTA ) THEN
+C
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: Rotate field.',JPQUIET)
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: South pole lat  ',NOROTA(1))
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: South pole long ',NOROTA(2))
+        ENDIF
+C
+C       Fill area limits (handles case when default 0/0/0/0 given)
+C
+        IRET = FIXAREA()
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'HNTFAUH: area fixup failed',JPQUIET)
+          HNTFAUH = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+        AREA(1) = REAL(NOAREA(1))/PPMULT
+        AREA(2) = REAL(NOAREA(2))/PPMULT
+        AREA(3) = REAL(NOAREA(3))/PPMULT
+        AREA(4) = REAL(NOAREA(4))/PPMULT
+C
+        GRID(1) = REAL(NOGRID(1))/PPMULT
+        GRID(2) = REAL(NOGRID(2))/PPMULT
+C
+        POLE(1) = REAL(NOROTA(1))/PPMULT
+        POLE(2) = REAL(NOROTA(2))/PPMULT
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Spectral to rotated grid-point
+C     -----------------------------------------------------------------|
+C
+  400   CONTINUE
+C
+        LSP2RGG = .FALSE.
+      IF( (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT) ) THEN
+C
+C         Convert spectral to suitable global reduced gaussian grid
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'HNTFAUH: Spectral to suitable reduced gaussian',JPQUIET)
+C
+          NTRUNC = NIRESO
+c---------------------------------------------------------------------
+      IF(LNORESO) THEN
+         NTRUNC = NORESO
+         IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: problem getting data for reduced grid',NTRUNC)
+            HNTFAUH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+         IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: Spectral truncation:', NTRUNC)
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: Gaussian number : ',NGAUSS)
+         ENDIF
+        GOTO 401
+       ENDIF
+
+       IF(LARESOL ) THEN
+        IF(LLATOUT) THEN
+         IRET = HSP2GG2(NTRUNC,GRID(1),GRID(2),NGAUSS,KPTS,PLATS,ISIZE)
+        ELSE
+         IRET = HSP2GG3(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+        ENDIF
+         IF( IRET.NE.0 ) THEN
+           IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X       'HNTFAUH: problem getting data for reduced grid',NTRUNC)
+           HNTFAUH = JPROUTINE + 4
+           GOTO 900
+         ENDIF
+       ENDIF
+c---------------------------------------------------------------------
+cs            IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+cs            IF( IRET.NE.0 ) THEN
+cs              IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+cs     X         'HNTFAUH: problem getting data for reduced gridl',NTRUNC)
+cs              HNTFAUH = JPROUTINE + 4
+cs              GOTO 900
+cs            ENDIF
+
+cs         NCOUNT = ISIZE
+c---------------------------------------------------------------------
+C       Truncate if a smaller resolution has been requested
+C
+  401 CONTINUE
+      IF( NTRUNC.LT.NIRESO ) THEN
+       IF( LDEBUG ) THEN
+       CALL INTLOG(JP_DEBUG,'HNTFAUH: Truncation changed from: ',NIRESO)
+       CALL INTLOG(JP_DEBUG,'HNTFAUH: to: ',NTRUNC)
+       CALL INTLOG(JP_DEBUG,'HNTFAUH: Gaussian number is : ',NGAUSS)
+       ENDIF
+C
+            ISHIZE =  (NTRUNC+1)*(NTRUNC+4)
+              CALL JMEMHAN( 3, IZNFLDO, ISHIZE, 1, IERR)
+              IF( IERR.NE.0 ) THEN
+                CALL INTLOG(JP_FATAL,
+     X            'HNTFAUH: Get scratch space failed',JPQUIET)
+                HNTFAUH = JPROUTINE + 4
+                GOTO 900
+              ENDIF
+C
+C         Generate spherical harmonics with output truncation
+C
+          CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NTRUNC )
+C
+C         Move new spherical harmonics to 'input' array
+C
+          DO LOOP = 1, ISHIZE
+            ZNFELDI(LOOP) = ZNFLDO(LOOP)
+          ENDDO
+
+      ELSE
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'HNTFAUH: Spectral to suitable reduced gaussian',JPQUIET)
+C
+          NTRUNC = NIRESO
+          IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,PLATS,ISIZE)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: problem getting data for reduced grid',NTRUNC)
+            HNTFAUH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+         IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: Spectral truncation:', NTRUNC)
+          CALL INTLOG(JP_DEBUG,'HNTFAUH: Gaussian number : ',NGAUSS)
+         ENDIF
+       ENDIF
+c---------------------------------------------------------------------
+C
+C         Dynamically allocate memory for global reduced gaussian grid
+C
+          CALL JMEMHAN( 18, IRGGRID, ISIZE, 1, IRET)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: memory alloc for reduced grid fail',JPQUIET)
+            HNTFAUH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+C         Set flag to show field is not a wind component
+C
+          NUVFLAG = 0
+C
+C         Create the reduced gaussian grid
+C
+          HOLDTYP = HOGAUST
+          WEST = 0.0
+          EAST = 360.0 - (360.0/(NGAUSS*4))
+          CALL JAGGGP(ZNFELDI,NTRUNC,PLATS(1),PLATS(NGAUSS*2),WEST,
+     X                EAST,NGAUSS,'R',KPTS,RGGRID,NUVFLAG,IRET)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: spectral to reduced gaussian failed',JPQUIET)
+            HNTFAUH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+          HOGAUST = HOLDTYP
+
+        NCOUNT = 0
+        DO LOOP = 1, (NGAUSS*2)
+          NCOUNT= NCOUNT + KPTS(LOOP)
+        ENDDO
+C
+          LSP2RGG = .TRUE.
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Complete the spectral to rotated lat/long
+C     -----------------------------------------------------------------|
+C
+  500     CONTINUE
+C
+          IF( NOREPR.EQ.JPREGROT ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X        'HNTFAUH: Convert gaussian to rotated lat/long',JPQUIET)
+C
+            GOTO 700
+C
+          ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Complete the spectral to rotated gaussian
+C     -----------------------------------------------------------------|
+C
+  600   CONTINUE
+C
+          IF( NOREPR.EQ.JPFGGROT ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X        'HNTFAUH: Convert gaussian to rotated gaussian',JPQUIET)
+C
+            GOTO 800
+          ENDIF
+
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.   Gaussian to rotated lat/long
+C     -----------------------------------------------------------------|
+C
+  700   CONTINUE
+C
+        IF( (LSP2RGG.AND.(NOREPR.EQ.JPREGROT)) .OR.
+     X      ( ((NIREPR.EQ.JPQUASI).OR.(NIREPR.EQ.JPGAUSSIAN)) .AND.
+     X      (NOREPR.EQ.JPREGROT) ) ) THEN
+          IF( LDEBUG )
+     X      CALL INTLOG(JP_DEBUG,'HNTFAUH: Gauss to lat/lon',JPQUIET)
+C
+C         Dynamically allocate memory for rotated lat/long grid
+C
+          NLON = 1 + NINT(FLOAT((NOAREA(JPEAST)  - NOAREA(JPWEST))) /
+     X           NOGRID(JPWESTEP))
+          NLAT = 1 + NINT(FLOAT((NOAREA(JPNORTH) - NOAREA(JPSOUTH))) /
+     X           NOGRID(JPNSSTEP))
+C
+          NUMPTS = NLON * NLAT
+          ISIZE  = NUMPTS
+          CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: memory alloc for lat/long grid fail',JPQUIET)
+            HNTFAUH = JPROUTINE + 7
+            GOTO 900
+          ENDIF
+C
+          LUSELSM = LSMFLD()
+C
+C         If original field was spectral, ...
+C
+          IF( LSP2RGG ) THEN
+            IF( LUSELSM ) THEN
+              IRET = HIRLSM(LO12PT,RGGRID,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                      SWORK,ISIZE,NLON,NLAT)
+            ELSE
+              IRET = HIRLAM(LO12PT,RGGRID,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                      SWORK,ISIZE,NLON,NLAT)
+            ENDIF
+C
+          ELSE
+C
+C         If original field was gaussian, ...
+C
+          IRET = PDDEFS()
+            NGAUSS = NIGAUSS
+cs            IF( LUSELSM ) THEN
+            IF( LSM ) THEN
+              IRET = HIRLSM(LO12PT,ZNFELDI,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                      SWORK,ISIZE,NLON,NLAT)
+            ELSE
+              IRET = HIRLAM(LO12PT,ZNFELDI,NCOUNT,NGAUSS,AREA,POLE,GRID,
+     X                      SWORK,ISIZE,NLON,NLAT)
+            ENDIF
+C
+          ENDIF
+C
+cs   setting size of output field
+          OUTLROT = NLON * NLAT
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: HIRLAM rotation failed',JPQUIET)
+            HNTFAUH = JPROUTINE + 7
+            GOTO 900
+          ENDIF
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 8.   Gaussian to rotated gaussian
+C     -----------------------------------------------------------------|
+C
+  800   CONTINUE
+C
+        IF( (LSP2RGG.AND.(NOREPR.EQ.JPFGGROT)) .OR.
+     X      (((NIREPR.EQ.JPQUASI).OR.(NIREPR.EQ.JPGAUSSIAN)) .AND.
+     X      (NOREPR.EQ.JPFGGROT)) ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'HNTFAUH: Gaussian to reduced gaussian',JPQUIET)
+C
+C         Dynamically allocate memory for rotated lat/long grid
+C
+          ISIZE = NOGAUSS * NOGAUSS * 8 
+          CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: memory alloc for gaussian grid fail',JPQUIET)
+            HNTFAUH = JPROUTINE + 8
+            GOTO 900
+          ENDIF
+C
+C         If original field was spectral, ...
+C
+          IF( LSP2RGG ) THEN
+            IRET = HRG2GG(LO12PT,RGGRID,NGAUSS,AREA,POLE,
+     X                    NOGAUSS,HOGAUST,SWORK,ISIZE,NUMPTS)
+C
+          ELSE
+C
+C         If original field was gaussian, ...
+C
+            NGAUSS = NIGAUSS
+            IRET = HRG2GG(LO12PT,ZNFELDI,NGAUSS,AREA,POLE,
+     X                    NOGAUSS,HOGAUST,SWORK,ISIZE,NUMPTS)
+          ENDIF
+cs   setting size of output field
+          OUTLROT = NUMPTS
+          IF( IRET.NE.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'HNTFAUH: HRG2GG rotation failed',JPQUIET)
+            HNTFAUH = JPROUTINE + 8
+            GOTO 900
+          ENDIF
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+C       Move rotated field back into field original array.
+C
+        DO LOOP = 1, NUMPTS
+          ZNFELDI(LOOP) = SWORK(LOOP)
+        ENDDO
+C
+      ENDIF
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfaus.F b/interpolation/hntfaus.F
new file mode 100755
index 0000000..0554025
--- /dev/null
+++ b/interpolation/hntfaus.F
@@ -0,0 +1,449 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFAUS(FLDIN,INLEN)
+C
+C---->
+C**** HNTFAUS
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFAUS( FLDIN,INLEN)
+C
+C     Input
+C     -----
+C
+C     FLDIN  - Input field (unpacked).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in rotation.
+C
+C
+C     Method
+C     ------
+C
+C     Rotate the field values if necessary.
+C
+C     Some rotation coefficients cannot be created because the
+C     algorithm does not converge for rotations which are smaller
+C     than a limit which depends on the spectral truncation.
+C
+C     If the rotation is too small, it has to be split into three
+C     steps (two forward and one backward).
+C
+C     Current know limits are:
+C
+C     Truncation    Max South pole lat   Minimum rotation
+C     ----------    ------------------   ----------------
+C         63          -89.5                  0.5
+C        106          -85                    5.0
+C        159          -77                   13.0
+C        213          -68                   22.0
+C        319          -51                   39.0
+C        511          -30.5                 59.5
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C     RPHI    - Rotate a spectral field by longitude.
+#ifdef __uxp__
+C     JACOBIF - Rotates spectral coefficients by latitude.
+#else
+C     JACOBI  - Rotates spectral coefficients by latitude.
+#endif
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2001
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INLEN
+      REAL FLDIN(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40140 )
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+6) )
+C
+C     Local variables
+C
+      REAL POLELAT, POLELON
+      CHARACTER*1 TYPE
+      INTEGER NUMPTS, NGAUSS
+      INTEGER ISIZE, NBYTES, ITRUNC, LOOP, IRET
+      DATA ISIZE/0/
+C
+      REAL SWORK
+      DIMENSION SWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 ISWORK
+#endif
+      POINTER ( ISWORK, SWORK)
+C
+      REAL*8 DWORK
+      DIMENSION DWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 IDWORK
+#endif
+      POINTER ( IDWORK, DWORK )
+C
+      REAL*8 DATA
+      DIMENSION DATA(1)
+#ifdef POINTER_64
+      INTEGER*8 IDATA
+#endif
+      POINTER ( IDATA, DATA)
+C
+      SAVE ISIZE, ISWORK, IDWORK, IDATA
+C
+      REAL*8 DLON, DLAT, LATLIM
+      LOGICAL LOK, LSPLIT
+#ifdef CRAY
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+#endif
+C
+C     Externals
+      INTEGER GGROTAT
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      HNTFAUS = 0
+      IRET = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Store data internally.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'HNTFAUS: ZNFELDI allocate fail',JPQUIET)
+          HNTFAUS = IRET
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     Move unpacked values in from user array
+C
+      DO LOOP = 1, INLEN
+        ZNFELDI( LOOP ) = FLDIN( LOOP )
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Handle rotation, if necessary.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Is a rotation of the SH required?
+C
+      IF( LNOROTA ) THEN
+C
+C       Avoid rotating U or V spectral coefficients
+C
+        IF( (NIPARAM.EQ.JP_U).OR.(NIPARAM.EQ.JP_V) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HNTFAUS: Unable to rotate spectral U or V:',NIPARAM)
+          HNTFAUS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+C       Dynamically allocate memory for workspace.
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        NUMPTS = INLEN
+        ISIZE = NUMPTS*2
+        CALL JMEMHAN( 11, IDWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFAUS: memory allocation fail',IDWORK)
+          HNTFAUS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        ISIZE = JPLEN*2
+        CALL JMEMHAN( 15, IDATA, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFAUS: memory allocation fail',IDATA)
+          HNTFAUS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'HNTFAUS: Rotate SH field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'HNTFAUS: South pole latitude  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'HNTFAUS: South pole longitude ',NOROTA(2))
+        IF ( NOREPR.EQ.JPSPHERE )  NOREPR = JPSPHROT
+        IF ( NOREPR.EQ.JPREGULAR )  NOREPR = JPREGROT
+        ITRUNC = NIRESO
+C
+C       Some rotation coefficients cannot be created because the
+C       algorithm does not converge for rotations which are smaller
+C       than a limit which depends on the spectral truncation.
+C
+        IF( ITRUNC.LE.63 ) THEN
+          LATLIM = -89.5
+        ELSE IF( ITRUNC.LE.106 ) THEN
+          LATLIM = -85.0
+        ELSE IF( ITRUNC.LE.159 ) THEN
+          LATLIM = -77.0
+        ELSE IF( ITRUNC.LE.213 ) THEN
+          LATLIM = -68.0
+        ELSE IF( ITRUNC.LE.319 ) THEN
+          LATLIM = -51.0
+        ELSE IF( ITRUNC.LE.511 ) THEN
+#ifdef __uxp__
+          LATLIM = -30.5
+#else
+          LATLIM = -29.5
+#endif
+        ELSE
+          HNTFAUS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+        CALL INTLOGR(JP_DEBUG,
+     X    'HNTFAUS: South pole latitude limit = ',LATLIM)
+C
+        POLELAT = (REAL(NOROTA(1))/JPMULT)
+C
+C       If the rotation is too small, it has to be split into three
+C       steps (two forward and one backward).
+C
+        LSPLIT = POLELAT.LT.LATLIM
+        IF( LSPLIT ) THEN
+          DLAT = -90.0 - LATLIM
+          CALL INTLOG(JP_DEBUG,
+     X      'HNTFAUS: Rotation has been split into three steps',JPQUIET)
+        ELSE
+          DLAT = -90.0 - POLELAT
+        ENDIF
+#if (defined CRAY) || (defined REAL_8)
+C
+C       Double precision REALs
+C
+        DLON = - REAL(NOROTA(2))/JPMULT
+C
+C       Rotate the spectral field by longitude.
+        CALL RPHI( ZNFELDI, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+        IF( LSPLIT ) THEN
+C
+C         Two rotations forward ..
+C
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAUS: Twice forward through angle ', DLAT)
+#if (!defined __uxp__)
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X       'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+C
+C         .. and one backward
+C
+          DLAT = -90.0 - ( (LATLIM*2.0) - POLELAT)
+          DLAT= -DLAT
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAUS: Once backward through angle ', DLAT)
+        ENDIF
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+        LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+#else
+C
+C       Single precision REALs; so convert to double precision.
+C
+        DLAT = -90.0 - DBLE(NOROTA(1))/JPMULT
+        DLON = - DBLE(NOROTA(2))/JPMULT
+C
+C       Expand spectral coefficients to REAL*8
+C
+        DO LOOP = 1, NUMPTS
+          DATA(LOOP) = DBLE(ZNFELDI(LOOP))
+        ENDDO
+C
+C       Rotate the spectral field by longitude.
+C
+        CALL RPHI( DATA, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+        IF( LSPLIT ) THEN
+C
+C         Two rotations forward ..
+C
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAUS: Twice forward through angle ', DLAT)
+#if (!defined __uxp__)
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFAUS: Spectral rotation failed',JPQUIET)
+            HNTFAUS = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+C
+C         .. and one backward
+C
+          DLAT = -90.0 - ( (LATLIM*2.0) - POLELAT)
+          DLAT= -DLAT
+          CALL INTLOGR(JP_DEBUG,
+     X      'HNTFAUS: Once backward through angle ', DLAT)
+        ENDIF
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( DATA, ITRUNC, DWORK, DLAT)
+#else
+        LOK = JACOBIF(DATA, ITRUNC, DWORK, DLAT)
+#endif
+#endif
+C
+        IF( .NOT.LOK ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFAUS: Rotation failed',JPQUIET)
+          HNTFAUS = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+#if (!defined CRAY) && (!defined REAL_8)
+C
+C       Single precision REALs; repack spectral coefficients to REAL*4.
+C
+        DO LOOP = 1, NUMPTS
+          ZNFELDI(LOOP) = SNGL(DATA(LOOP))
+        ENDDO
+#endif
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hntfbu.F b/interpolation/hntfbu.F
new file mode 100755
index 0000000..eed80b7
--- /dev/null
+++ b/interpolation/hntfbu.F
@@ -0,0 +1,432 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HNTFBU( FLDIN,INLEN,FLDOUT,OUTLEN)
+C
+C---->
+C**** HNTFBU
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HNTFBU( FLDIN,INLEN,FLDOUT,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     FLDIN  - Input field (unpacked).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     FLDOUT  - Output field (unpacked).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routines; then repack if GRIB output.
+C
+C     Currently, subareas are not supported for reduced gaussian fields.
+C     (Works OK; but need to setup values in GRIB product for number of
+C      points in each latitude row)
+C
+C
+C     Externals
+C     ---------
+C
+C     IARCNTL - Control interp. quasi reg.Gauss -> Gaussian or lat/long
+C     IAGCNTL - Control interpolation reg.Gaussian or lat/long fields.
+C     JSH2SH  - Changes resolution of a field of spectral coefficients.
+C     JALLGP  - Converts spectral input fields to lat/long grid fields.
+C     JALLWN  - Converts spectral input wind fields to lat/long grids.
+C     JAGGGP  - Converts spectral input fields to a gaussian grid field.
+C     IBASINI - Ensure basic interpolation setup is done.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     JMEMHAN - Handles memory allocation.
+C     IGLSIZE - Evaluate array sizes for reg. lat/long and area.
+C     IGSIZE  - Evaluate array sizes for a regular Gaussian.
+C     IRSIZE  - Evaluate array sizes for a quasi reg Gaussian.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     ISCRSZ  - Calculate number of values in generated field.
+C     INTLOG  - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INLEN,OUTLEN
+      REAL FLDIN(*),FLDOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      INTEGER JPALLOC, JPSCR16
+      PARAMETER (JPROUTINE = 26600 )
+      PARAMETER (JPALLOC = 1 )
+      PARAMETER (JPSCR16 = 16 )
+C
+C     Local variables
+C
+      INTEGER IERR, ISIZE, IUV
+      REAL PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      LOGICAL OIWEGLOBE, OINPOLE, OISPOLE
+      LOGICAL OOWEGLOBE, OONPOLE, OOSPOLE
+      INTEGER KILN, KITOTAL, KOLN, KOTOTAL, KPR, KERR
+      INTEGER LOOP
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDO
+#endif
+      REAL ZNFLDO
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+C
+C     Externals
+      INTEGER IGLSIZE, IGSIZE, IRSIZE, IARCNTL, IAGCNTL
+      INTEGER FIXAREA, ISCRSZ
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      HNTFBU = 0
+      IERR = 0
+      KPR = 0
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'HNTFBU: znfeldi allocate fail',JPQUIET)
+          HNTFBU = IERR
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Interpolation spherical harmonics to spherical
+C                  harmonics
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF ( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X     ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)) ) THEN
+C
+C       Get scratch space for interpolation
+C
+        ISIZE = ISCRSZ()
+        IF ( ISIZE .LE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFBU: Get scratch space failed',ISIZE)
+          HNTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        CALL JMEMHAN( JPSCR16, IZNFLDO, ISIZE, JPALLOC, IERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFBU: Get scratch space fail',JPQUIET)
+          HNTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NORESO )
+C
+        GOTO 700
+C
+C     If not spectral -> spectral transformation, make sure the input
+C     and output area definitions have been setup.
+C
+      ELSE
+C
+C       Fixup area definition to correspond to grid definitions
+C
+        IERR = FIXAREA()
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HNTFBU: Fixup area definition failed.',JPQUIET)
+          HNTFBU = JPROUTINE + 9
+          GOTO 900
+        ENDIF
+C
+C       Setup geographical limits
+C
+        PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+        PWEST  = FLOAT( NOAREA(2) ) / PPMULT
+        PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+        PEAST  = FLOAT( NOAREA(4) ) / PPMULT
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 4.   Interpolation spherical harmonics to grid point.
+C ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF ( (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT) ) THEN
+C
+        ISIZE = ISCRSZ()
+        IF ( ISIZE .LE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFBU: Get scratch space failed',ISIZE)
+          HNTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL JMEMHAN( JPSCR16, IZNFLDO, ISIZE, JPALLOC, IERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'HNTFBU: Get scratch space fail',JPQUIET)
+          HNTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+C       If rotation involved, it has already been done (in hntfau)
+C       and values are in znfeldi.
+C
+        IF( LNOROTA ) THEN
+          DO LOOP = 1, ISIZE
+            FLDOUT(LOOP) = ZNFELDI(LOOP)
+          ENDDO
+          OUTLEN = ISIZE
+          GOTO 900
+        ENDIF
+C
+C       Get scratch space for interpolation
+C
+C
+C       Setup wind flag
+        IF ( LWIND ) THEN
+          IUV = 1
+        ELSE
+          IUV = 0
+        ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 4.1  Interpolation spherical harmonics to grid point.
+C ------------------------------------------------------------------
+C
+  410 CONTINUE
+C
+        IF ( NOREPR.EQ.JPREGULAR ) THEN
+C
+C         -> latitude/longitude grid
+C
+          PLONINC = FLOAT( NOGRID(1) ) / PPMULT
+          PLATINC = FLOAT( NOGRID(2) ) / PPMULT
+          IF ( LWIND ) THEN
+            CALL JALLWN( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+          ELSE
+            CALL JALLGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+          ENDIF
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFBU: Interpolation of gaussian field failed.',JPQUIET)
+            HNTFBU = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF ( NOREPR .EQ. JPGAUSSIAN) THEN
+C
+C         -> regular gaussian grid
+C
+          CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                 NOGAUSS, 'U', NOLPTS, ZNFLDO, IUV, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFBU: Interpolation of gaussian field failed.',JPQUIET)
+            HNTFBU = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF ( NOREPR .EQ. JPQUASI) THEN
+C
+C         -> reduced gaussian grid
+C
+          CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                 NOGAUSS, 'U', NOLPTS, ZNFLDO, IUV, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HNTFBU: Interpolation of gaussian field failed.',JPQUIET)
+            HNTFBU = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C       Dropthrough => unrecognized output field type
+C
+        IERR   = JPROUTINE + 1
+        CALL INTLOG(JP_ERROR,
+     X    'HNTFBU: Unrecognized output field type.',NOREPR)
+        HNTFBU = IERR
+        GOTO 900
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 5.   Interpolate Gaussian grid to grid point.
+C ------------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C     Setup flags for input and output fields
+C
+      KERR = 1
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IRSIZE( NIGAUSS, NIAREA, MILLEN, NIWE, NINS, KILN,
+     X                 KITOTAL, RIGAUSS, OIWEGLOBE, OINPOLE, OISPOLE,
+     X                 KPR, KERR)
+      ELSE IF ( NIREPR .EQ. JPGAUSSIAN ) THEN
+          IERR = IGSIZE( NIGAUSS, NIAREA, NIWE, NINS, KILN, RIGAUSS,
+     X                    OIWEGLOBE, OINPOLE, OISPOLE, KPR, KERR)
+      ELSE
+        IERR = IGLSIZE( NIGRID, NIAREA, NIWE, NINS, KILN, OIWEGLOBE,
+     X                  OINPOLE, OISPOLE, KPR, KERR)
+      ENDIF
+C
+      NONS = 0
+      NOWE = 0
+      IF (NOREPR .EQ. JPQUASI) THEN
+        IERR = IRSIZE( NOGAUSS, NOAREA, NOLPTS, NOWE, NONS, KOLN,
+     X                 KOTOTAL, ROGAUSS, OOWEGLOBE, OONPOLE, OOSPOLE,
+     X                 KPR, KERR)
+      ELSE IF ( NOREPR .EQ. JPGAUSSIAN ) THEN
+          IERR = IGSIZE( NOGAUSS, NOAREA, NOWE, NONS, KOLN, ROGAUSS,
+     X                    OOWEGLOBE, OONPOLE, OOSPOLE, KPR, KERR)
+      ELSE
+        IERR = IGLSIZE( NOGRID, NOAREA, NOWE, NONS, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR, KERR)
+      ENDIF
+C
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HNTFBU: Interpolation of gaussian field failed.',IERR)
+        HNTFBU = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C     Section 5.1  Interpolate reduced Gaussian grid to grid point.
+C ------------------------------------------------------------------
+C
+  510 CONTINUE
+C
+C
+      ISIZE = ISCRSZ()
+      IF ( ISIZE .LE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'HNTFBU: Get scratch space failed.',ISIZE)
+        HNTFBU = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      CALL JMEMHAN( JPSCR16, IZNFLDO, ISIZE, JPALLOC, IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'HNTFBU: Get scratch space fail.',JPQUIET)
+        HNTFBU = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IARCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                  OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR ,KERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HNTFBU: Interpolation of gaussian field failed.',IERR)
+          HNTFBU = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        GOTO 700
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 6.   Interpolate regular grid point to grid point.
+C ------------------------------------------------------------------
+C
+  600 CONTINUE
+C
+      IERR = IAGCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                OONPOLE, OOSPOLE, KPR, KERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HNTFBU: Interpolation of gaussian field failed.',IERR)
+        HNTFBU = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 7.   Move unpacked values to user array.
+C ------------------------------------------------------------------
+C
+  700 CONTINUE
+C
+      DO 710 LOOP = 1, ISIZE
+        FLDOUT( LOOP ) = ZNFLDO( LOOP )
+ 710  CONTINUE
+C
+C     Return the number of values, the unpacked array length
+C
+      OUTLEN = ISIZE
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/hpshgpw.F b/interpolation/hpshgpw.F
new file mode 100755
index 0000000..cf44c6a
--- /dev/null
+++ b/interpolation/hpshgpw.F
@@ -0,0 +1,225 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE HPSHGPW(OLDLON,OLDLAT,NEWLON,NEWLAT,
+     X                   PDIRI,NUMPTS,POLE)
+C
+C---->
+C**** HPSHGPW
+C
+C     Purpose
+C     -------
+C
+C     Rotates a grid of points about the y-axis and calculates the
+C     angular change between local axes at each grid point.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL HPSHGPW(OLDLON,OLDLAT,NEWLON,NEWLAT,PDIRI,NUMPTS,POLE)
+C
+C     Input
+C     -----
+C
+C     OLDLON - Array of longitudes to be rotated (degrees)
+C     OLDLAT - Array of latitudes to be rotated (degrees)
+C     NUMPTS - Number of gridpoints to be rotated
+C     PDIRI  - Array of initial orientation angles, eg wind directions
+C              (degrees)
+C     POLE   - (Lat,long) of new south pole, measured in old grid
+C
+C
+C     Output
+C     ------
+C
+C     NEWLON - Array of rotated longitudes (degrees, -180 < angle <= 180 )
+C     NEWLAT - Array of rotated latitudes (degrees)
+C     PDIRI  - Array of modified orientation angles, changed to allow for
+C              the angles between coordinate axes at each point before and
+C              after rotation (degrees, -180 < angle <= 180 )
+C
+C
+C     Method
+C     ------
+C
+C     Rotates a grid of points about the y-axis and calculates the
+C     angular change to local axes at each grid point.
+C
+C     The z-axis is the polar axis, increasing from south to north.
+C     The x-axis is line from the centre of the globe through (0N, 0E),
+C     increasing from the centre out to (0N, 0E).
+C     The y-axis is line from the centre of the globe through (0N, 90E),
+C     increasing from the centre out to (0N, 90E).
+C
+C     The sign of the angular change between local axes at each grid point
+C     is such that it denotes the angle of rotation to be applied to the
+C     old coordinate system to let its axes coincide with the new one. The
+C     angle is measured in the old coordinate system, so increments to
+C     angles in PDIRI are positive for anti-clockwise rotation from old
+C     x-axis to new one.
+C
+C     As a consequence, if the initial values in PDIRI are wind directions
+C     ddd in the old coordinate system (measured to conform to meteorological
+C     use), the output values of PDIRI will be ddd in the new coordinate system
+C     (modulo 360).
+C
+C     Note that the meteorological use of ddd has effectively the opposite
+C     sign to the mathematically usual way of defining angles.
+C
+C     The angles between the coordinate axes at each point may be obtained
+C     by calling the routine with the values in PDIRI all set to zero on input.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     G.J.Cats            15 DEC 88.
+C
+C
+C     Modified
+C     --------
+C
+C     P.O'Sullivan        30/3/93 (wind and nonwind)
+C
+C     J.D.Chambers        October 1999
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      REAL EPSILON
+      PARAMETER( EPSILON = 1E-5)
+C                 `---------------> tolerance used for checking
+C                                   proximity to +/-90.0 and 180.0
+C
+C     Subroutine arguments
+C
+      REAL OLDLON, OLDLAT, NEWLON, NEWLAT, PDIRI, POLE(2)
+      DIMENSION OLDLON(*), OLDLAT(*), NEWLON(*), NEWLAT(*), PDIRI(*)
+      INTEGER NUMPTS
+C
+C     Local variables
+C
+      INTEGER NXTPT
+      REAL SINTHE, COSTHE, THETA
+      REAL ZLAT, SINLAT, COSLAT
+      REAL ZLON, SINLON, COSLON
+      REAL ZNEW, LATNEW, NCOSLAT, COSNEW, LONNEW, COSDEL, DELTA, ZDIV
+C
+C     Statement functions
+C
+      REAL A
+      REAL RADIAN, DEGREE, NORMAL
+      REAL LONGMOD
+C
+C     Convert degrees to radians
+C
+      RADIAN(A) = (A) * 0.01745329252
+C
+C     Convert radians to degrees
+C
+      DEGREE(A) = (A) * 57.295779513
+C
+C     Normalise value such as sin or cos to range (-1,1)
+C
+      NORMAL(A) = MAX(MIN((A),1.0),-1.0)
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+      LONGMOD = -POLE(2)
+      THETA  = RADIAN(POLE(1))
+      SINTHE = -SIN(THETA)
+      COSTHE = -COS(THETA)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Handle each point separately (longitude,latitude)
+C     -----------------------------------------------------------------|
+C
+      DO NXTPT = 1, NUMPTS
+C
+        ZLAT   = RADIAN(OLDLAT(NXTPT))
+        SINLAT = SIN(ZLAT)
+        COSLAT = COS(ZLAT)
+C
+        ZLON = OLDLON(NXTPT) + LONGMOD
+        IF( ZLON.GT.180.0 ) ZLON = ZLON - 360.0
+        IF( ABS(ZLON + 180.0).LT.EPSILON ) ZLON = 180.0
+        ZLON   = RADIAN(ZLON)
+        SINLON = SIN(ZLON)
+        COSLON = COS(ZLON)
+C
+C       Calculate z coordinate of point after rotation and hence
+C       its latitude after rotation since:
+C         z = sin(lat)
+C
+        ZNEW = SINTHE*SINLAT+COSTHE*COSLAT*COSLON
+        ZNEW = NORMAL(ZNEW)
+        IF( ABS(ZNEW -1.0).LT.EPSILON ) Then
+          LATNEW = 1.5707963268
+          NEWLAT(NXTPT) = 90.0
+          NCOSLAT = 0.0
+        ELSE IF( ABS(ZNEW +1.0).LT.EPSILON ) THEN
+          LATNEW = -1.5707963268
+          NEWLAT(NXTPT) = -90.0
+          NCOSLAT = 0.0
+        ELSE
+          LATNEW = ASIN(ZNEW)
+          NEWLAT(NXTPT) = DEGREE(LATNEW)
+          NCOSLAT = COS(LATNEW)
+        ENDIF
+C
+C       Calculate x coordinate of point after rotation and hence
+C       its longitude after rotation since:
+C         x = cos(lat).cos(lon)
+C         cos(lon) = x / cos(lat)
+C
+        IF( NCOSLAT.EQ.0.0 ) NCOSLAT = 1.0
+        ZDIV = 1.0 / NCOSLAT
+C
+        COSNEW = ( (SINTHE*COSLAT*COSLON-COSTHE*SINLAT) ) * ZDIV
+        COSNEW = NORMAL(COSNEW)
+        LONNEW = SIGN(ACOS(COSNEW),ZLON)
+        NEWLON(NXTPT) = DEGREE(LONNEW)
+C
+C       Use cosine rule from spherical trigonometry to find angle
+C       between the directions of the meridians before and after
+C       rotation.
+C
+        COSDEL = SINTHE*SINLON*SIN(LONNEW)+COSLON*COSNEW
+        COSDEL = NORMAL(COSDEL)
+        DELTA  = SIGN(ACOS(COSDEL),-COSTHE*ZLON)
+C
+C       Change the orientation angle (keep it in the range -180 to 180)
+C
+        PDIRI(NXTPT) = PDIRI(NXTPT) - DEGREE(DELTA)
+        IF( PDIRI(NXTPT).GT.180.0 ) PDIRI(NXTPT) = PDIRI(NXTPT) - 360.0
+        IF( PDIRI(NXTPT).LE.-180.0) PDIRI(NXTPT) = PDIRI(NXTPT) + 360.0
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+      RETURN
+      END
diff --git a/interpolation/hrg2gg.F b/interpolation/hrg2gg.F
new file mode 100755
index 0000000..559fb2f
--- /dev/null
+++ b/interpolation/hrg2gg.F
@@ -0,0 +1,557 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HRG2GG(L12PNT,OLDFLD,KGNOLD,AREA,POLE,
+     X                        KGNNEW,HGTYPE,NEWFLD,KSIZE,NUMPTS)
+C
+C---->
+C**** HRG2GG
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated gaussian field from a reduced
+C     gaussian field using 12-point horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HRG2GG(L12PNT,OLDFLD,KGNOLD,AREA,POLE,
+C    X              KGNNEW,HGTYPE,NEWFLD,KSIZE,NUMPTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C     OLDFLD - Array of values from the old (reduced) gaussian field
+C     KGNOLD - Gaussian number for the old gaussian field
+C     AREA   - Limits of area (N/W/S/E)
+C     POLE   - Pole of rotation (lat/long)
+C     KGNNEW - Gaussian number for the new gaussian field
+C     HGTYPE - Type of new gaussian field
+C              'F' = full, ie regular
+C              'R' = reduced, ie quasi-regular
+C     KSIZE  - The size of the array to fill with the regular
+C              lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLD - The array of values for the gaussian field 
+C     NUMPTS - Number of points in the new gaussian field.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGENGG  - Calculates original lat/long (before rotation) for
+C               a rotated gaussian grid
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      February 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KGNOLD, KGNNEW, KSIZE, NUMPTS
+      REAL AREA(4), POLE(2), OLDFLD(*), NEWFLD(KSIZE)
+      CHARACTER*1 HGTYPE
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, IRET, NLEN, NOPREV, NNPREV, NBYTES, NUMBER
+      INTEGER NEAREST
+      CHARACTER*1 NNTYPE
+C
+      CHARACTER*12 YFLAG
+      LOGICAL LNEW, LFIRST, LVEGGY
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD, INN, INNOLD
+      INTEGER KPTS(1), KNPTS(1)
+      REAL GLATS(1), GNLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPKNPTS,  KNPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+      POINTER (IPGNLATS, GNLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RLAT(1),RLON(1)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+C
+      REAL OLD(1)
+      POINTER (IOLD,   OLD)
+C
+      DATA NOPREV/-1/, NNPREV/-1/, NNTYPE/' '/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, INNOLD/-1/, ILLOLD/-1/, IOLD/-1/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NOPREV,NNPREV,NNTYPE
+      SAVE IGGOLD,INNOLD,IPKPTS,IPKNPTS,IPIOFFS,IPGLATS,IPGNLATS
+      SAVE ILLOLD, IPRLAT, IPRLON, IOLD
+C
+C     Externals
+C
+      INTEGER HNEI12, HGENGG
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HRG2GG = 0
+C
+      CALL JDEBUG()
+
+      IF( L12PNT ) THEN
+        CALL INTLOG(JP_DEBUG,'HRG2GG: 12-pt interpolation',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'HRG2GG:  4-pt interpolation',JPQUIET)
+      ENDIF
+C
+      CALL CHKPREC()
+      IF( LPREC )THEN
+        CALL INTLOG(JP_DEBUG,
+     X   'HRG2GG: precipitation threshold applied',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X   'HRG2GG: precipitation threshold not applied',JPQUIET)
+      ENDIF
+C    Are we handling vegetation parameter
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+      IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'HRG2GG: nearest neighbour processing (vegetation)',JPQUIET)
+
+
+C
+C     Dynamically allocate memory for old gaussian grid information.
+C
+      IGG = KGNOLD*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GG: Memory allocation fail',JPQUIET)
+          HRG2GG = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        NOPREV = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in the original field.
+C
+      IF( KGNOLD.NE.NOPREV ) THEN
+        CALL JGETGG(KGNOLD,'R',GLATS,KPTS,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HRG2GG: JGETGG failed to get gaussian data',JPQUIET)
+          HRG2GG = 2
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGNOLD*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+C
+C       Allocate memory to hold the input field
+C       (in case OLDFLD and NEWFLD are the same arrays)
+C
+        IF( IOLD.GT.0 ) CALL JFREE(IOLD)
+C
+        NUMBER = (IOFFS(KGNOLD*2+1) - 1)
+        NBYTES = NUMBER * JPRLEN
+C
+        IOLD = JMALLOC(NBYTES)
+#ifdef hpR64
+        IOLD = IOLD/(1024*1024*1024*4)
+#endif
+        IF( IOLD.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GG: Memory allocation fail',JPQUIET)
+          HRG2GG = 3
+          GOTO 900
+        ENDIF
+C
+        NOPREV = KGNOLD
+      ENDIF
+C
+C     Preserve the input field
+C
+      NUMBER = (IOFFS(KGNOLD*2+1) - 1)
+      DO LOOP = 1, NUMBER
+        OLD(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      INN = KGNNEW*2
+C
+      IF( INN.GT.INNOLD ) THEN
+C
+        IF( INNOLD.GT.0 ) CALL JFREE(IPKNPTS)
+C
+        NBYTES = (INN*JPRLEN) + (INN*JPBYTES)
+C
+        IPKNPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKNPTS = IPKNPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKNPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GG: Memory allocation fail',JPQUIET)
+          HRG2GG = 1
+          GOTO 900
+        ENDIF
+C
+        IPGNLATS = IPKNPTS  + (INN*JPBYTES)
+C
+        INNOLD = INN
+        NNPREV = -1
+      ENDIF
+C
+      IF( HGTYPE.EQ.'F' ) THEN
+        IF( (KGNNEW.NE.NNPREV).OR.(HGTYPE.NE.NNTYPE) ) THEN
+          NLEN = KGNNEW * KGNNEW * 8
+          CALL JGETGG(KGNNEW,'F',GNLATS,KNPTS,IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HRG2GG: JGETGG failed to get gaussian data',JPQUIET)
+            HRG2GG = 2
+            GOTO 900
+          ENDIF
+          NNPREV = KGNNEW
+          NNTYPE = HGTYPE
+        ENDIF
+      ELSE
+        IF( (KGNNEW.NE.NNPREV).OR.(HGTYPE.NE.NNTYPE) ) THEN
+          CALL JGETGG(KGNNEW,'R',GNLATS,KNPTS,IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HRG2GG: JGETGG failed to get gaussian data',JPQUIET)
+            HRG2GG = 2
+            GOTO 900
+          ENDIF
+C
+          NLEN = 0
+          DO LOOP = 1, KGNNEW*2
+            NLEN = NLEN + KNPTS(LOOP)
+          ENDDO
+          NNPREV = KGNNEW
+          NNTYPE = HGTYPE
+        ENDIF
+      ENDIF
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HRG2GG: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HRG2GG: Required size = ',NLEN)
+        HRG2GG = 4
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 2*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GG: Memory allocation fail',JPQUIET)
+          HRG2GG = 5
+          GOTO 900
+        ENDIF
+C
+        IPRLAT = IPRLON + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENGG(AREA,POLE,KGNNEW,HGTYPE,KNPTS,GNLATS,ILL,
+     X              RLAT,RLON,NUMPTS)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2GG: HGENGG failed to get lat/lon grid data',JPQUIET)
+        HRG2GG = 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GG: Memory allocation fail',JPQUIET)
+          HRG2GG = 7
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGNOLD,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2GG: HNEI12 failed to find neighbours',JPQUIET)
+        HRG2GG = 8
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+       IF( LVEGGY) THEN
+            NEAREST = 1
+            IF( PWTS( 2,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 2
+            IF( PWTS( 3,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 3
+            IF( PWTS( 4,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 4
+            IF( PWTS( 5,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 5
+            IF( PWTS( 6,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 6
+            IF( PWTS( 7,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 7
+            IF( PWTS( 8,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 8
+            IF( PWTS( 9,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST = 9
+            IF( PWTS(10,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =10
+            IF( PWTS(11,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =11
+            IF( PWTS(12,LOOP).GT.PWTS(NEAREST,LOOP) ) NEAREST =12
+            NEWFLD(LOOP) = OLD(NEIGH( NEAREST,LOOP))
+        ELSE
+          IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X        OLD(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X        OLD(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X        OLD(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X        OLD(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X        OLD(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X        OLD(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X        OLD(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X        OLD(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+          ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+            NEWFLD(LOOP) =
+     X        OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X        OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X        OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X        OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+          ELSE
+            DO NEXT = 1, 4
+              IF( NEIGH(NEXT,LOOP).NE.0 )  
+     X          NEWFLD(LOOP) = OLD(NEIGH(NEXT,LOOP))
+            ENDDO
+C
+         ENDIF
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hrg2ggw.F b/interpolation/hrg2ggw.F
new file mode 100755
index 0000000..16a95f5
--- /dev/null
+++ b/interpolation/hrg2ggw.F
@@ -0,0 +1,588 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HRG2GGW(L12PNT,OLDFLDU,OLDFLDV,KSIZEUV,
+     X                         KGNOLD,AREA,POLE,KGNNEW,HGTYPE,
+     X                         NEWFLDU,NEWFLDV,KSIZE,NUMPTS)
+C
+C---->
+C**** HRG2GGW
+C
+C     Purpose
+C     -------
+C
+C     This routine creates rotated gaussian U and V fields from
+C     reduced U and V gaussian fields using 12-point horizontal
+C     interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     INTEGER FUNCTION HRG2GGW(L12PNT,OLDFLDU,OLDFLDV,KSIZEUV,
+C    X                         KGNOLD,AREA,POLE,KGNNEW,HGTYPE,
+C    X                         NEWFLDU,NEWFLDV,KSIZE,NUMPTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT  - Chooses between 12-point and 4-point interpolation
+C     OLDFLDU - Array of values from the old (reduced) gaussian U field
+C     OLDFLDV - Array of values from the old (reduced) gaussian V field
+C     KSIZEUV - Number of values in each old (reduced) gaussian field
+C     KGNOLD  - Gaussian number for the old gaussian field
+C     AREA    - Limits of area (N/W/S/E)
+C     POLE    - Pole of rotation (lat/long)
+C     KGNNEW  - Gaussian number for the new gaussian field
+C     HGTYPE  - Type of new gaussian field
+C               'F' = full, ie regular
+C               'R' = reduced, ie quasi-regular
+C     KSIZE   - The size of the array to fill with the regular
+C               lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLDU - The array of values for the new U gaussian field 
+C     NEWFLDV - The array of values for the new V gaussian field 
+C     NUMPTS  - Number of points in each new gaussian field.
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGENGG  - Calculates original lat/long (before rotation) for
+C               a rotated gaussian grid
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      November 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KSIZEUV, KGNOLD, KGNNEW, KSIZE, NUMPTS
+      REAL AREA(4), POLE(2), OLDFLDU(*), OLDFLDV(*)
+      REAL NEWFLDU(KSIZE),NEWFLDV(KSIZE)
+      CHARACTER*1 HGTYPE
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, IRET, NLEN, NOPREV, NNPREV, NBYTES, NUMBER
+      CHARACTER*1 NNTYPE
+C
+      LOGICAL LNEW, LFIRST
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD, INN, INNOLD
+      INTEGER KPTS(1), KNPTS(1)
+      REAL GLATS(1), GNLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPKNPTS,  KNPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+      POINTER (IPGNLATS, GNLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RCLAT(1),RCLON(1),RLAT(1),RLON(1),RDIR(1),C(1),S(1),U(1),V(1)
+      POINTER (IPRCLAT, RCLAT)
+      POINTER (IPRCLON, RCLON)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+      POINTER (IPRDIR, RDIR)
+      POINTER (IPC, C)
+      POINTER (IPS, S)
+      POINTER (IPU, U)
+      POINTER (IPV, V)
+C
+      REAL OLDU(1)
+      POINTER (IOLDU, OLDU)
+      REAL OLDV(1)
+      POINTER (IOLDV, OLDV)
+C
+      DATA NOPREV/-1/, NNPREV/-1/, NNTYPE/' '/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, INNOLD/-1/, ILLOLD/-1/, IOLDU/-1/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NOPREV,NNPREV,NNTYPE
+      SAVE IGGOLD,INNOLD,IPKPTS,IPKNPTS,IPIOFFS,IPGLATS,IPGNLATS
+      SAVE ILLOLD, IPRLAT, IPRLON, IOLDU, IOLDV
+      SAVE IPC, IPS, IPU, IPV
+C
+C     Externals
+C
+      INTEGER HNEI12, HGENGG
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement function
+C
+      REAL A, RADIAN
+C
+C     Convert degrees to radians
+C
+      RADIAN(A) = (A) * 0.0174532925
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HRG2GGW = 0
+C
+      CALL JDEBUG()
+C
+C     Dynamically allocate memory for old gaussian grid information.
+C
+      IGG = KGNOLD*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GGW: Memory allocate fail',JPQUIET)
+          HRG2GGW = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        NOPREV = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in the original field.
+C
+      IF( KGNOLD.NE.NOPREV ) THEN
+        CALL JGETGG(KGNOLD,'R',GLATS,KPTS,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HRG2GGW: JGETGG failed to get gaussian data',JPQUIET)
+          HRG2GGW = 2
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGNOLD*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+C
+C       Allocate memory to hold the input fields
+C       (in case OLDFLDU/OLDFLDV and NEWFLD are the same arrays)
+C
+        IF( IOLDU.GT.0 ) THEN
+          CALL JFREE(IOLDU)
+          CALL JFREE(IOLDV)
+        ENDIF
+C
+        NUMBER = (IOFFS(KGNOLD*2+1) - 1)
+        NBYTES = NUMBER * JPRLEN
+C
+        IOLDU = JMALLOC(NBYTES)
+        IOLDV = JMALLOC(NBYTES)
+#ifdef hpR64
+        IOLDU = IOLDU/(1024*1024*1024*4)
+        IOLDV = IOLDV/(1024*1024*1024*4)
+#endif
+        IF( (IOLDU.EQ.0).OR.(IOLDV.EQ.0) ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GGW: Memory allocate fail',JPQUIET)
+          HRG2GGW = 3
+          GOTO 900
+        ENDIF
+C
+        NOPREV = KGNOLD
+      ENDIF
+C
+C     Preserve the input fields
+C
+      NUMBER = (IOFFS(KGNOLD*2+1) - 1)
+      DO LOOP = 1, NUMBER
+        OLDU(LOOP) = OLDFLDU(LOOP)
+        OLDV(LOOP) = OLDFLDV(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      INN = KGNNEW*2
+C
+      IF( INN.GT.INNOLD ) THEN
+C
+        IF( INNOLD.GT.0 ) CALL JFREE(IPKNPTS)
+C
+        NBYTES = (INN*JPRLEN) + (INN*JPBYTES)
+C
+        IPKNPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKNPTS = IPKNPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKNPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GGW: Memory allocate fail',JPQUIET)
+          HRG2GGW = 1
+          GOTO 900
+        ENDIF
+C
+        IPGNLATS = IPKNPTS  + (INN*JPBYTES)
+C
+        INNOLD = INN
+        NNPREV = -1
+      ENDIF
+C
+      IF( HGTYPE.EQ.'F' ) THEN
+        IF( (KGNNEW.NE.NNPREV).OR.(HGTYPE.NE.NNTYPE) ) THEN
+          NLEN = KGNNEW * KGNNEW * 8
+          CALL JGETGG(KGNNEW,'F',GNLATS,KNPTS,IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HRG2GGW: JGETGG failed to get gaussian data',JPQUIET)
+            HRG2GGW = 2
+            GOTO 900
+          ENDIF
+          NNPREV = KGNNEW
+          NNTYPE = HGTYPE
+        ENDIF
+      ELSE
+        IF( (KGNNEW.NE.NNPREV).OR.(HGTYPE.NE.NNTYPE) ) THEN
+          CALL JGETGG(KGNNEW,'R',GNLATS,KNPTS,IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'HRG2GGW: JGETGG failed to get gaussian data',JPQUIET)
+            HRG2GGW = 2
+            GOTO 900
+          ENDIF
+C
+          NLEN = 0
+          DO LOOP = 1, KGNNEW*2
+            NLEN = NLEN + KNPTS(LOOP)
+          ENDDO
+          NNPREV = KGNNEW
+          NNTYPE = HGTYPE
+        ENDIF
+      ENDIF
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HRG2GGW: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HRG2GGW: Required size = ',NLEN)
+        HRG2GGW = 4
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 9*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GGW: Memory allocate fail',JPQUIET)
+          HRG2GGW = 5
+          GOTO 900
+        ENDIF
+C
+        IPRLAT = IPRLON + (ILL*JPRLEN)
+        IPRCLON = IPRLAT + (ILL*JPRLEN)
+        IPRCLAT = IPRCLON + (ILL*JPRLEN)
+        IPRDIR  = IPRCLAT + (ILL*JPRLEN)
+        IPC     = IPRDIR + (ILL*JPRLEN)
+        IPS     = IPC    + (ILL*JPRLEN)
+        IPU     = IPS    + (ILL*JPRLEN)
+        IPV     = IPU    + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENGG(AREA,POLE,KGNNEW,HGTYPE,KNPTS,GNLATS,ILL,
+     X              RLAT,RLON,NUMPTS)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2GGW: HGENGG failed to get lat/lon grid data',JPQUIET)
+        HRG2GGW = 6
+        GOTO 900
+      ENDIF
+C
+      NLEN = NUMPTS
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2GGW: Memory allocate fail',JPQUIET)
+          HRG2GGW = 7
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGNOLD,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2GGW: HNEI12 failed to find neighbours',JPQUIET)
+        HRG2GGW = 8
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+          U(LOOP) =
+     X      OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDU(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDU(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDU(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDU(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDU(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDU(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDU(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDU(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+          V(LOOP) =
+     X      OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDV(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDV(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDV(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDV(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDV(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDV(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDV(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDV(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+          U(LOOP) =
+     X      OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+          V(LOOP) =
+     X      OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 ) THEN
+              U(LOOP) = OLDU(NEIGH(NEXT,LOOP))
+              V(LOOP) = OLDV(NEIGH(NEXT,LOOP))
+            ENDIF
+          ENDDO
+C
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 5.  Adjust the U and V components to new (rotated) axes
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = 0.0
+      ENDDO
+C
+      CALL HPSHGPW(RLON,RLAT,RCLON,RCLAT,RDIR,NLEN,POLE)
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = -RADIAN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        C(LOOP) = COS(RDIR(LOOP))
+        S(LOOP) = SIN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        NEWFLDU(LOOP) = U(LOOP)*C(LOOP) - V(LOOP)*S(LOOP)
+        NEWFLDV(LOOP) = U(LOOP)*S(LOOP) + V(LOOP)*C(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hrg2ll.F b/interpolation/hrg2ll.F
new file mode 100755
index 0000000..1098149
--- /dev/null
+++ b/interpolation/hrg2ll.F
@@ -0,0 +1,443 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HRG2LL(L12PNT,OLDFLD,KGAUSS,AREA,POLE,GRID,
+     X                        NEWFLD,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HRG2LL
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated regular lat/long field from a
+C     reduced gaussian field using 12-point horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HRG2LL(L12PNT,OLDFLD,KGAUSS,AREA,POLE,GRID,NEWFLD,KSIZE,
+C    X              NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C     OLDFLD - The array of values from the reduced gaussian field
+C     KGAUSS - Gaussian number for the reduced gaussian field
+C     AREA   - Limits of area (N/W/S/E)
+C     POLE   - Pole of rotation (lat/long)
+C     GRID   - Grid increments (i/j)
+C     KSIZE  - The size of the array to fill with the regular
+C              lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLD - The array of values for the regular lat/long field 
+C     NLON   - Number of longitudes in the regular lat/long field
+C     NLAT   - Number of latitudes in the regular lat/long field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGENLL  - Calculates original lat/long (before rotation) for
+C               a rotated grid
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KGAUSS, KSIZE, NLON, NLAT
+      REAL AREA(4), POLE(2), GRID(2), OLDFLD(*), NEWFLD(KSIZE)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, IRET, NLEN, NPREV, NBYTES, NUMBER
+C
+      LOGICAL LNEW, LFIRST
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RLAT(1),RLON(1)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+C
+      REAL OLD(1)
+      POINTER (IOLD,   OLD)
+C
+      DATA NPREV/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, ILLOLD/-1/, IOLD/-1/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NPREV, IGGOLD, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD, IPRLAT, IPRLON, IOLD
+C
+C     Externals
+C
+      INTEGER HNEI12, HGENLL
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HRG2LL = 0
+C
+      CALL JDEBUG()
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      IGG = KGAUSS*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LL: Memory allocation fail',JPQUIET)
+          HRG2LL = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        NPREV = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in the original field.
+C
+      IF( KGAUSS.NE.NPREV ) THEN
+        CALL JGETGG(KGAUSS,'R',GLATS,KPTS,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HRG2LL: JGETGG failed to get gaussian data',JPQUIET)
+          HRG2LL = 2
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGAUSS*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+C
+C       Allocate memory to hold the input field
+C       (in case OLDFLD and NEWFLD are the same arrays)
+C
+        IF( IOLD.GT.0 ) CALL JFREE(IOLD)
+C
+        NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+        NBYTES = NUMBER * JPRLEN
+C
+        IOLD = JMALLOC(NBYTES)
+#ifdef hpR64
+        IOLD = IOLD/(1024*1024*1024*4)
+#endif
+        IF( IOLD.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LL: Memory allocation fail',JPQUIET)
+          HRG2LL = 3
+          GOTO 900
+        ENDIF
+C
+        NPREV = KGAUSS
+      ENDIF
+C
+C     Preserve the input field
+C
+      NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+      DO LOOP = 1, NUMBER
+        OLD(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + NINT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + NINT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HRG2LL: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HRG2LL: Required size = ',NLEN)
+        HRG2LL = 4
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 2*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LL: Memory allocation fail',JPQUIET)
+          HRG2LL = 5
+          GOTO 900
+        ENDIF
+C
+        IPRLAT = IPRLON + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENLL(AREA,POLE,GRID,NLON,NLAT,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2LL: HGENLL failed to get lat/lon grid data',JPQUIET)
+        HRG2LL = 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LL: Memory allocation fail',JPQUIET)
+          HRG2LL = 7
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+        LNEW   = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGAUSS,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2LL: HNEI12 failed to find neighbours',JPQUIET)
+        HRG2LL = 8
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+          NEWFLD(LOOP) =
+     X      OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLD(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLD(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLD(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLD(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLD(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLD(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLD(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLD(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+          NEWFLD(LOOP) =
+     X      OLD(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLD(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLD(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLD(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 )  
+     X        NEWFLD(LOOP) = OLD(NEIGH(NEXT,LOOP))
+          ENDDO
+C
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hrg2llw.F b/interpolation/hrg2llw.F
new file mode 100755
index 0000000..564f3bc
--- /dev/null
+++ b/interpolation/hrg2llw.F
@@ -0,0 +1,520 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HRG2LLW(L12PNT,OLDFLDU,OLDFLDV,KGAUSS,AREA,POLE,
+     X                         GRID,NEWFLDU,NEWFLDV,KSIZE,NLON,NLAT)
+C
+C---->
+C**** HRG2LLW
+C
+C     Purpose
+C     -------
+C
+C     This routine creates a rotated regular lat/long field from a
+C     reduced gaussian field using 12-point horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HRG2LLW(L12PNT,OLDFLDU,OLDFLDV,KGAUSS,AREA,POLE,GRID,
+C    X               NEWFLDU,NEWFLDV,KSIZE,NLON,NLAT)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     L12PNT - Chooses between 12-point and 4-point interpolation
+C     OLDFLDU - The array of values from the reduced gaussian U field
+C     OLDFLDV - The array of values from the reduced gaussian V field
+C     KGAUSS  - Gaussian number for the reduced gaussian field
+C     AREA    - Limits of area (N/W/S/E)
+C     POLE    - Pole of rotation (lat/long)
+C     GRID    - Grid increments (i/j)
+C     KSIZE   - The size of the array to fill with the regular
+C               lat/long field
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     NEWFLDU - The array of values for the regular lat/long U field 
+C     NEWFLDV - The array of values for the regular lat/long V field 
+C     NLON    - Number of longitudes in the regular lat/long field
+C     NLAT    - Number of latitudes in the regular lat/long field
+C
+C     Returns 0 if function successful, non-zero otherwise.
+C
+C     Common block usage
+C     ------------------
+C
+C     nifld.common
+C     nofld.common
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C     The 12-point interpolation is not possible if either of the top
+C     two rows is above the original field northern latitude. The
+C     nearest neighbour is used if both rows are above, and a 4-pt
+C     bilinear interpolation is used if the top row is above.
+C     Similarily, if either of the bottom two rows is below the original
+C     field southern latitude.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     JMALLOC - Dynamically allocate memory
+C     JFREE   - Free dynamically allocated memory
+C     JGETGG  - Reads the definition of a gaussian grid
+C     HGENLLW - Calculates original lat/long (before rotation) for
+C               a rotated grid for wind fields.
+C     HNEI12  - Finds neighbours for points for interpolation
+C     HWTS12  - Calculates weightings for points for interpolation
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JNORTH, JSOUTH, JWEST, JEAST, JW_E, JN_S, JLAT, JLON
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+      PARAMETER (JNORTH = 1 )
+      PARAMETER (JWEST  = 2 )
+      PARAMETER (JSOUTH = 3 )
+      PARAMETER (JEAST  = 4 )
+      PARAMETER (JW_E  = 1 )
+      PARAMETER (JN_S  = 2 )
+      PARAMETER (JLAT  = 1 )
+      PARAMETER (JLON  = 2 )
+C
+C     Function arguments
+C
+      LOGICAL L12PNT
+      INTEGER KGAUSS, KSIZE, NLON, NLAT
+      REAL AREA(4), POLE(2), GRID(2)
+      REAL OLDFLDU(*), OLDFLDV(*)
+      REAL NEWFLDU(KSIZE), NEWFLDV(KSIZE)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP, IRET, NLEN, NPREV, NBYTES, NUMBER
+C
+      LOGICAL LNEW, LFIRST
+      INTEGER KSCHEME(1),NEIGH(12,1), KLA(1)
+      REAL PWTS(12,1)
+      POINTER (IPKSCHE, KSCHEME)
+      POINTER (IPNEIGH, NEIGH)
+      POINTER (IPKLA,   KLA)
+      POINTER (IPPWTS,  PWTS)
+C
+      REAL PDLO0(1),PDLO1(1),PDLO2(1),PDLO3(1),PDLAT(1)
+      POINTER (IPPDLO0, PDLO0)
+      POINTER (IPPDLO1, PDLO1)
+      POINTER (IPPDLO2, PDLO2)
+      POINTER (IPPDLO3, PDLO3)
+      POINTER (IPPDLAT, PDLAT)
+C
+      INTEGER IGG, IGGOLD
+      INTEGER KPTS(1)
+      REAL GLATS(1)
+      INTEGER IOFFS(1)
+      POINTER (IPKPTS,  KPTS)
+      POINTER (IPIOFFS, IOFFS)
+      POINTER (IPGLATS, GLATS)
+C
+      INTEGER ILL, ILLOLD
+      REAL RCLAT(1),RCLON(1),RLAT(1),RLON(1),RDIR(1),C(1),S(1),U(1),V(1)
+      POINTER (IPRCLAT, RCLAT)
+      POINTER (IPRCLON, RCLON)
+      POINTER (IPRLAT, RLAT)
+      POINTER (IPRLON, RLON)
+      POINTER (IPRDIR, RDIR)
+      POINTER (IPC, C)
+      POINTER (IPS, S)
+      POINTER (IPU, U)
+      POINTER (IPV, V)
+C
+      REAL OLDU(1), OLDV(1)
+      POINTER (IOLDU, OLDU)
+      POINTER (IOLDV, OLDV)
+C
+      DATA NPREV/-1/
+      DATA LNEW/.FALSE./, LFIRST/.TRUE./
+      DATA IGGOLD/-1/, ILLOLD/-1/, IOLDU/-1/, IOLDV/-1/
+C
+      SAVE LNEW, LFIRST
+      SAVE IPKSCHE, IPNEIGH, IPKLA, IPPWTS
+      SAVE IPPDLO0, IPPDLO1, IPPDLO2, IPPDLO3, IPPDLAT
+      SAVE NPREV, IGGOLD, IPKPTS, IPIOFFS, IPGLATS
+      SAVE ILLOLD,IPRCLAT,IPRCLON,IPRLAT,IPRLON,IPRDIR,IOLDU,IOLDV
+      SAVE IPC, IPS, IPU, IPV
+C
+C     Externals
+C
+      INTEGER HNEI12, HGENLLW
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     Statement function
+C
+      REAL A, RADIAN
+C
+C     Convert degrees to radians
+C
+      RADIAN(A) = (A) * 0.0174532925
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HRG2LLW = 0
+C
+      CALL JDEBUG()
+C
+C     Dynamically allocate memory for gaussian grid information.
+C
+      IGG = KGAUSS*2
+C
+      IF( IGG.GT.IGGOLD ) THEN
+C
+        IF( IGGOLD.GT.0 ) CALL JFREE(IPKPTS)
+C
+        NBYTES = (IGG*JPRLEN) + (2*IGG+1)*JPBYTES
+C
+        IPKPTS = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPKPTS = IPKPTS/(1024*1024*1024*4)
+#endif
+        IF( IPKPTS.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LLW: Memory allocate fail',JPQUIET)
+          HRG2LLW = 1
+          GOTO 900
+        ENDIF
+C
+        IPGLATS = IPKPTS  + (IGG*JPBYTES)
+        IPIOFFS = IPGLATS + (IGG*JPRLEN)
+C
+        IGGOLD = IGG
+        NPREV = -1
+C
+      ENDIF
+C
+C     Build up offsets to start of each latitude in original fields.
+C
+      IF( KGAUSS.NE.NPREV ) THEN
+        CALL JGETGG(KGAUSS,'R',GLATS,KPTS,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'HRG2LLW: JGETGG failed to get gaussian data',JPQUIET)
+          HRG2LLW = 2
+          GOTO 900
+        ENDIF
+C
+        IOFFS(1) = 1
+        DO LOOP = 2, (KGAUSS*2+1)
+          IOFFS(LOOP) = IOFFS(LOOP-1) + KPTS(LOOP-1)
+        ENDDO
+C
+C       Allocate memory to preserve the input fields
+C       (in case OLDFLDx and NEWFLDx are the same arrays)
+C
+        IF( IOLDU.GT.0 ) CALL JFREE(IOLDU)
+C
+        NUMBER = (IOFFS(KGAUSS*2+1) - 1)
+        NBYTES = 2 * NUMBER * JPRLEN
+C
+        IOLDU = JMALLOC(NBYTES)
+#ifdef hpR64
+        IOLDU = IOLDU/(1024*1024*1024*4)
+#endif
+        IF( IOLDU.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LLW: Memory allocate fail',JPQUIET)
+          HRG2LLW = 3
+          GOTO 900
+        ENDIF
+        IOLDV = IOLDU + (NUMBER * JPRLEN)
+C
+        NPREV = KGAUSS
+      ENDIF
+C
+C     Preserve the input fields
+C
+      DO LOOP = 1, NUMBER
+        OLDU(LOOP) = OLDFLDU(LOOP)
+        OLDV(LOOP) = OLDFLDV(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 2.  Generate the lat/long points for the output grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NLON = 1 + INT((AREA(JEAST) - AREA(JWEST)) / GRID(JW_E))
+      NLAT = 1 + INT((AREA(JNORTH) - AREA(JSOUTH)) / GRID(JN_S))
+C
+      NLEN = NLON * NLAT
+
+      NOWE = NLON
+      NONS = NLAT
+C
+C     Check that given array is big enough for the new field.
+C
+      IF( NLEN.GT.KSIZE ) THEN
+        CALL INTLOG(JP_ERROR,'HRG2LLW: Given array size = ',KSIZE)
+        CALL INTLOG(JP_ERROR,'HRG2LLW: Required size = ',NLEN)
+        HRG2LLW = 4
+        GOTO 900
+      ENDIF
+C
+C     Dynamically allocate memory for lat/long arrays.
+C
+      ILL = NLEN
+      IF( ILL.GT.ILLOLD ) THEN
+C
+        LNEW = .TRUE.
+C
+        IF( ILLOLD.GT.0 ) CALL JFREE(IPRLON)
+C
+        NBYTES = 9*ILL*JPRLEN
+C
+        IPRLON = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPRLON = IPRLON/(1024*1024*1024*4)
+#endif
+        IF( IPRLON.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LLW: Memory allocate fail',JPQUIET)
+          HRG2LLW = 5
+          GOTO 900
+        ENDIF
+C
+        IPRLAT  = IPRLON + (ILL*JPRLEN)
+        IPRCLON = IPRLAT + (ILL*JPRLEN)
+        IPRCLAT = IPRCLON + (ILL*JPRLEN)
+        IPRDIR  = IPRCLAT + (ILL*JPRLEN)
+        IPC     = IPRDIR + (ILL*JPRLEN)
+        IPS     = IPC    + (ILL*JPRLEN)
+        IPU     = IPS    + (ILL*JPRLEN)
+        IPV     = IPU    + (ILL*JPRLEN)
+C
+        ILLOLD = ILL
+C
+      ENDIF
+C
+      IRET = HGENLLW(AREA,POLE,GRID,NLON,NLAT,RCLAT,RCLON,RLAT,RLON)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2LLW: HGENLLW failed to get lat/lon grid data',JPQUIET)
+        HRG2LLW = 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 3.  Find neighbours for each point for interpolation.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Dynamically allocate memory for interpolation arrays.
+C
+      IF( LNEW ) THEN
+C
+        IF( .NOT.LFIRST ) CALL JFREE(IPPDLO0)
+C
+        NBYTES = (17*JPRLEN + 14*JPBYTES) * ILL
+C
+        IPPDLO0 = JMALLOC(NBYTES)
+#ifdef hpR64
+        IPPDLO0 = IPPDLO0/(1024*1024*1024*4)
+#endif
+        IF( IPPDLO0.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'HRG2LLW: Memory allocate fail',JPQUIET)
+          HRG2LLW = 7
+          GOTO 900
+        ENDIF
+C
+        IPPDLO1 = IPPDLO0 + (ILL*JPRLEN)
+        IPPDLO2 = IPPDLO1 + (ILL*JPRLEN)
+        IPPDLO3 = IPPDLO2 + (ILL*JPRLEN)
+        IPPDLAT = IPPDLO3 + (ILL*JPRLEN)
+        IPPWTS  = IPPDLAT + (ILL*JPRLEN)
+        IPKSCHE = IPPWTS  + (12*ILL*JPRLEN)
+        IPKLA   = IPKSCHE + (ILL*JPBYTES)
+        IPNEIGH = IPKLA   + (ILL*JPBYTES)
+C
+        LFIRST = .FALSE.
+C
+      ENDIF
+C
+C     Find neighbours.
+C
+      IRET = HNEI12(L12PNT,NLEN,RLAT,RLON,KGAUSS,KPTS,GLATS,
+     X              KSCHEME,PDLAT,PDLO0,PDLO1,PDLO2,PDLO3,KLA,NEIGH)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HRG2LLW: HNEI12 failed to find neighbours',JPQUIET)
+        HRG2LLW = 8
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.  Perform the 12-point horizontal interpolation.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Setup the 12-point horizontal interpolation weights
+C
+      CALL HWTS12
+     X  (NLEN,KSCHEME,KLA,PDLAT,GLATS,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C     Calculate the interpolated grid point values
+C
+      DO LOOP = 1, NLEN
+        IF( KSCHEME(LOOP).EQ.JP12PT ) THEN
+          U(LOOP) =
+     X      OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDU(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDU(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDU(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDU(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDU(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDU(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDU(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDU(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+          V(LOOP) =
+     X      OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP) +
+     X      OLDV(NEIGH( 5,LOOP)) * PWTS( 5,LOOP) +
+     X      OLDV(NEIGH( 6,LOOP)) * PWTS( 6,LOOP) +
+     X      OLDV(NEIGH( 7,LOOP)) * PWTS( 7,LOOP) +
+     X      OLDV(NEIGH( 8,LOOP)) * PWTS( 8,LOOP) +
+     X      OLDV(NEIGH( 9,LOOP)) * PWTS( 9,LOOP) +
+     X      OLDV(NEIGH(10,LOOP)) * PWTS(10,LOOP) +
+     X      OLDV(NEIGH(11,LOOP)) * PWTS(11,LOOP) +
+     X      OLDV(NEIGH(12,LOOP)) * PWTS(12,LOOP)
+C
+        ELSE IF( KSCHEME(LOOP).EQ.JP4PT ) THEN
+          U(LOOP) =
+     X      OLDU(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDU(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDU(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDU(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+          V(LOOP) =
+     X      OLDV(NEIGH( 1,LOOP)) * PWTS( 1,LOOP) +
+     X      OLDV(NEIGH( 2,LOOP)) * PWTS( 2,LOOP) +
+     X      OLDV(NEIGH( 3,LOOP)) * PWTS( 3,LOOP) +
+     X      OLDV(NEIGH( 4,LOOP)) * PWTS( 4,LOOP)
+C
+        ELSE
+          DO NEXT = 1, 4
+            IF( NEIGH(NEXT,LOOP).NE.0 ) THEN
+              U(LOOP) = OLDU(NEIGH(NEXT,LOOP))
+              V(LOOP) = OLDV(NEIGH(NEXT,LOOP))
+            ENDIF
+          ENDDO
+C
+        ENDIF
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 5.  Adjust the U and V components to new (rotated) axes
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = 0.0
+      ENDDO
+C
+      CALL HPSHGPW(RCLON,RCLAT,RLON,RLAT,RDIR,NLEN,POLE)
+C
+      DO LOOP = 1, NLEN
+        RDIR(LOOP) = RADIAN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        C(LOOP) = COS(RDIR(LOOP))
+        S(LOOP) = SIN(RDIR(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, NLEN
+        NEWFLDU(LOOP) = U(LOOP)*C(LOOP) - V(LOOP)*S(LOOP)
+        NEWFLDV(LOOP) = U(LOOP)*S(LOOP) + V(LOOP)*C(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hsp2gg.F b/interpolation/hsp2gg.F
new file mode 100755
index 0000000..d112785
--- /dev/null
+++ b/interpolation/hsp2gg.F
@@ -0,0 +1,181 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HSP2GG(KTRUNC,KGAUSS,KPTS,PLATS,KSIZE)
+C
+C---->
+C**** HSP2GG
+C
+C     Purpose
+C     -------
+C
+C     This routine finds a suitable gaussian grid for a given
+C     spectral truncation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HSP2GG(KTRUNC,KGAUSS,KPTS,KSIZE)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KTRUNC - The spectral truncation
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KGAUSS - The gaussian number
+C     KPTS   - Array giving number of points along each line of latitude
+C              in the reduced gaussian grid (both hemispheres)
+C     PLATS  - Array giving gaussian latitudes (both hemispheres)
+C     KSIZE  - The number of points in the reduced gaussian grid
+C
+C     Returns 0 if all OK, otherwise there is an error.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     None
+C
+C
+C     Externals
+C     ---------
+C
+C     JGETGG - Reads the definition of a gaussian grid
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      February 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     S.Curic     ECMWF      March 2005
+C     Added checking for a automatic trancation T255, T399, T799, T2047 
+C     and corresponding gaussian grid.
+C
+C     S.Curic     ECMWF      April 2008
+C     Added checking for a automatic trancation T1279
+C     and corresponding gaussian grid.
+C
+C
+C     S.Curic     ECMWF      Semptember 2009
+C     Match T255 and T213 against N128 instead of N160
+C     upon Alan Geer request
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      INTEGER KTRUNC, KGAUSS, KPTS(*), KSIZE
+      REAL PLATS(*)
+C
+C     Local variables
+C
+      INTEGER LOOP, IRET
+C
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HSP2GG = 0
+C
+      IF( (KTRUNC.EQ.2047).OR.(KTRUNC.EQ.2048) ) THEN      ! Mariano
+        KGAUSS = 1024
+      ELSE IF( (KTRUNC.EQ.1279).OR.(KTRUNC.EQ.1280) ) THEN ! Jan Haseler
+        KGAUSS = 640
+      ELSE IF( (KTRUNC.EQ.799).OR.(KTRUNC.EQ.800) ) THEN   ! Oper 2005
+        KGAUSS = 400
+      ELSE IF( (KTRUNC.EQ.639).OR.(KTRUNC.EQ.640) ) THEN
+        KGAUSS = 320
+      ELSE IF( (KTRUNC.EQ.511).OR.(KTRUNC.EQ.512) ) THEN   ! Oper 2004
+        KGAUSS = 256
+      ELSE IF( (KTRUNC.EQ.399).OR.(KTRUNC.EQ.400) ) THEN   ! Enfo 2005
+        KGAUSS = 200
+      ELSE IF( (KTRUNC.EQ.319).OR.(KTRUNC.EQ.320) ) THEN
+        KGAUSS = 160
+      ELSE IF( (KTRUNC.EQ.255).OR.(KTRUNC.EQ.256) ) THEN   ! Enfo 2004
+        KGAUSS = 128
+      ELSE IF( (KTRUNC.EQ.213).OR.(KTRUNC.EQ.214) ) THEN
+        KGAUSS = 128
+      ELSE IF( (KTRUNC.EQ.159).OR.(KTRUNC.EQ.160) ) THEN
+        KGAUSS = 80
+      ELSE IF( (KTRUNC.EQ.106).OR.(KTRUNC.EQ.107) ) THEN
+        KGAUSS = 80
+      ELSE IF( (KTRUNC.EQ.95) .OR.(KTRUNC.EQ.96 ) ) THEN
+        KGAUSS = 48
+      ELSE IF( (KTRUNC.EQ.63) .OR.(KTRUNC.EQ.64 ) ) THEN
+        KGAUSS = 48
+      ELSE
+        CALL INTLOG(JP_ERROR,'HSP2GG: Unmatched truncation',KTRUNC)
+        HSP2GG = 1
+        GOTO 900
+      ENDIF
+C
+C     Get the reduced gaussian grid information and count the
+C     number of points.
+C
+      CALL JGETGG(KGAUSS,'R',PLATS,KPTS,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HSP2GG: JGETGG failed to get gaussian data',JPQUIET)
+        HSP2GG = 2
+        GOTO 900
+      ENDIF
+C
+      KSIZE = 0
+      DO LOOP = 1, KGAUSS*2
+        KSIZE = KSIZE + KPTS(LOOP)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hsp2gg2.F b/interpolation/hsp2gg2.F
new file mode 100755
index 0000000..661b90b
--- /dev/null
+++ b/interpolation/hsp2gg2.F
@@ -0,0 +1,224 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HSP2GG2(KTRUNC,NS,EW,KGAUSS,KPTS,PLATS,KSIZE)
+C
+C---->
+C**** HSP2GG2
+C
+C     Purpose
+C     -------
+C
+C     This routine finds a suitable gaussian grid for a given
+C     spectral truncation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HSP2GG2(KTRUNC,KGAUSS,KPTS,KSIZE)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KTRUNC - The spectral truncation
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KGAUSS - The gaussian number
+C     KPTS   - Array giving number of points along each line of latitude
+C              in the reduced gaussian grid (both hemispheres)
+C     PLATS  - Array giving gaussian latitudes (both hemispheres)
+C     KSIZE  - The number of points in the reduced gaussian grid
+C
+C     Returns 0 if all OK, otherwise there is an error.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     None
+C
+C
+C     Externals
+C     ---------
+C
+C     JGETGG - Reads the definition of a gaussian grid
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      February 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     S.Curic     ECMWF      March 2005
+C     Added checking for a automatic trancation T255, T399, T799, T2047 
+C     and corresponding gaussian grid.
+C
+C     S.Curic     ECMWF      April 2008
+C     Added checking for a automatic trancation T1279
+C     and corresponding gaussian grid.
+C
+C
+C     S.Curic     ECMWF      Semptember 2009
+C     Match T255 and T213 against N128 instead of N160
+C     upon Alan Geer request
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      INTEGER KTRUNC, KGAUSS, KPTS(*), KSIZE
+      REAL NS, EW, STEP
+      REAL PLATS(*)
+#include "jparams.h"
+C
+C     Local variables
+C
+      INTEGER LOOP, IRET
+      LOGICAL LDEBUG
+C
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+      STEP = MIN(ABS(NS),ABS(EW))
+C
+  100 CONTINUE
+C
+      HSP2GG2 = 0
+c
+      CALL JDEBUG()
+      LDEBUG = ( NDBG.NE.0 )
+
+C     2.5 and greater -> T63
+C
+      IF( STEP.GE.2.5 ) THEN
+        KTRUNC = 63
+        KGAUSS  = 48
+        GOTO 890
+      ENDIF
+C
+C     1.5 to 2.5      -> T106
+C
+      IF( STEP.GE.1.5 ) THEN
+        KTRUNC = 106
+        KGAUSS = 80
+        GOTO 890
+      ENDIF
+C
+C     0.6 to 1.5      -> T213
+C
+      IF( STEP.GE.0.6 ) THEN
+        KTRUNC = 213
+        KGAUSS  = 128
+        GOTO 890
+      ENDIF
+C
+C     0.4 to 0.6      -> T319
+C
+      IF( STEP.GE.0.4 ) THEN
+        KTRUNC = 319
+        KGAUSS  = 160
+        GOTO 890
+      ENDIF
+C
+C     0.3 to 0.4      -> T511
+C
+      IF( STEP.GE.0.3 ) THEN
+        KTRUNC  = 511
+        KGAUSS  = 256
+        GOTO 890
+      ENDIF
+C
+C     0.15 to 0.3      -> T799
+C
+      IF( STEP.GE.0.15 ) THEN
+        KTRUNC  = 799
+        KGAUSS  = 400
+        GOTO 890
+      ENDIF
+
+C
+C     0.09 to 0.15      -> T1279
+C
+      IF( STEP.GE.0.09 ) THEN
+        KTRUNC  = 1279
+        KGAUSS  = 640
+        GOTO 890
+      ENDIF
+c
+      KTRUNC  = 2047
+      KGAUSS  = 1024
+C
+C     Get the reduced gaussian grid information and count the
+C     number of points.
+C
+  890 CONTINUE
+      CALL JGETGG(KGAUSS,'R',PLATS,KPTS,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HSP2GG2: JGETGG failed to get gaussian data',JPQUIET)
+        HSP2GG2 = 2
+        GOTO 900
+      ENDIF
+C
+      KSIZE = 0
+      DO LOOP = 1, KGAUSS*2
+        KSIZE = KSIZE + KPTS(LOOP)
+      ENDDO
+
+      IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X    'HSP2GG2: Corresponding Spectral Truncation:',KTRUNC)
+          CALL INTLOG(JP_DEBUG,
+     X    'HSP2GG2: Corresponding Gaussian Number:',KGAUSS)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hsp2gg3.F b/interpolation/hsp2gg3.F
new file mode 100755
index 0000000..b8ef2a9
--- /dev/null
+++ b/interpolation/hsp2gg3.F
@@ -0,0 +1,191 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION HSP2GG3(KTRUNC,KGAUSS,KPTS,PLATS,KSIZE)
+C
+C---->
+C**** HSP2GG3
+C
+C     Purpose
+C     -------
+C
+C     This routine finds a suitable gaussian grid for a given
+C     spectral truncation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = HSP2GG3(KTRUNC,KGAUSS,KPTS,KSIZE)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KTRUNC - The spectral truncation
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KGAUSS - The gaussian number
+C     KPTS   - Array giving number of points along each line of latitude
+C              in the reduced gaussian grid (both hemispheres)
+C     PLATS  - Array giving gaussian latitudes (both hemispheres)
+C     KSIZE  - The number of points in the reduced gaussian grid
+C
+C     Returns 0 if all OK, otherwise there is an error.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     None
+C
+C
+C     Externals
+C     ---------
+C
+C     JGETGG - Reads the definition of a gaussian grid
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      February 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     S.Curic     ECMWF      March 2005
+C     Added checking for a automatic trancation T255, T399, T799, T2047 
+C     and corresponding gaussian grid.
+C
+C     S.Curic     ECMWF      April 2008
+C     Added checking for a automatic trancation T1279
+C     and corresponding gaussian grid.
+C
+C
+C     S.Curic     ECMWF      Semptember 2009
+C     Match T255 and T213 against N128 instead of N160
+C     upon Alan Geer request
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      INTEGER KTRUNC, KGAUSS, KPTS(*), KSIZE
+      REAL PLATS(*)
+#include "jparams.h"
+C
+C     Local variables
+C
+      INTEGER LOOP, IRET
+      LOGICAL LDEBUG
+C
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HSP2GG3 = 0
+
+      CALL JDEBUG()
+      LDEBUG = ( NDBG.NE.0 )
+C
+      IF(KGAUSS.EQ.1024) THEN      ! Mariano
+        KTRUNC = 2047
+      ELSEIF(KTRUNC.EQ.640) THEN ! Jan Haseler
+        KTRUNC = 1279
+      ELSEIF(KGAUSS.EQ.400) THEN   ! Oper 2005
+        KTRUNC = 799
+      ELSEIF(KGAUSS.EQ.320) THEN
+        KTRUNC = 639
+      ELSEIF(KGAUSS.EQ.256) THEN   ! Oper 2004
+        KTRUNC = 511
+      ELSEIF(KGAUSS.EQ.200) THEN   ! Enfo 2005
+        KTRUNC = 399
+      ELSEIF(KGAUSS.EQ.160) THEN
+        KTRUNC = 319
+      ELSEIF(KGAUSS.EQ.128) THEN   ! Enfo 2004
+        KTRUNC = 255
+      ELSEIF(KGAUSS.EQ.128) THEN
+        KTRUNC = 213
+      ELSEIF(KGAUSS.EQ.80) THEN
+        KTRUNC = 159
+      ELSEIF(KGAUSS.EQ.48) THEN
+        KTRUNC = 95
+      ELSEIF(KGAUSS.EQ.48) THEN
+        KTRUNC = 63
+      ELSE
+        CALL INTLOG(JP_ERROR,'HSP2GG3: Unmatched truncation',KTRUNC)
+        HSP2GG3 = 1
+        GOTO 900
+      ENDIF
+C
+C     Get the reduced gaussian grid information and count the
+C     number of points.
+C
+      CALL JGETGG(KGAUSS,'R',PLATS,KPTS,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'HSP2GG3: JGETGG failed to get gaussian data',JPQUIET)
+        HSP2GG3 = 2
+        GOTO 900
+      ENDIF
+C
+      KSIZE = 0
+      DO LOOP = 1, KGAUSS*2
+        KSIZE = KSIZE + KPTS(LOOP)
+      ENDDO
+
+      IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X    'HSP2GG3: Output Gaussian number :',KGAUSS)
+          CALL INTLOG(JP_DEBUG,
+     X    'HSP2GG3: Corresponding Spectral Truncation:',KTRUNC)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/hwts12.F b/interpolation/hwts12.F
new file mode 100755
index 0000000..8858f49
--- /dev/null
+++ b/interpolation/hwts12.F
@@ -0,0 +1,290 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE HWTS12
+     X  (KLEN,KSCHEME,KLA,PDLAT,PLATIN,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C---->
+C**** HWTS12
+C
+C     Purpose
+C     -------
+C
+C     This routine accepts a vector of points and calculates the
+C     interpolation weightings for each point suitable for the
+C     horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL HWTS12
+C    X  (KLEN,KSCHEME,KLA,PDLAT,PLATIN,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+C    X   PWTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KLEN    - Number of points along the vector.
+C     KSCHEME - Flag showing interpolation scheme to use for point
+C               0 = 12-point
+C               1 = 4-point bilinear
+C               2 = nearest neighbour
+C     KLA     - Latitude number in original field of latitude north of
+C               point in the vector.
+C     PDLAT   - Meridian linear weight.
+C     PLATIN  - Gaussian latitudes.
+C     PDLO0   - Zonal linear weight for the latitude of point 5.
+C     PDLO1   - Zonal linear weight for the latitude of point 1.
+C     PDLO2   - Zonal linear weight for the latitude of point 3.
+C     PDLO3   - Zonal linear weight for the latitude of point 11.
+C     NEIGH   - List of indices in the original field of neighbouring
+C               point values.
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     PWTS   - Weights for interpolation.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Reference
+C     ---------
+C
+C     ECMWF Meteorological Bulletin M1.6/7
+C     IFS Documentation
+C     Part VI: Technical and Computational Procedures (CY21R4)
+C     March 2000
+C     Section 2.3
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+C
+C     Function arguments
+C
+      INTEGER KLEN, KSCHEME(KLEN), KLA(KLEN)
+      REAL PDLAT(KLEN), PLATIN(*)
+      REAL PDLO0(KLEN), PDLO1(KLEN), PDLO2(KLEN), PDLO3(KLEN)
+      INTEGER NEIGH(12,*)
+      REAL PWTS(12,*)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP
+      INTEGER ILA0G, ILA1G, ILA2G, ILA3G
+      REAL ZDLAT, ZDY, ZDY10, ZDY21, ZDY32
+      REAL ZDLO1, ZDLO2, ZWXN0, ZWXN1, ZWXN2, ZWXN3
+      REAL ZWY0, ZWY1, ZWY2, ZWY3
+      REAL ZWXNN, ZCXNN, ZWXSS, ZCXSS
+      REAL ZWXS0, ZWXS1, ZWXS2, ZWXS3
+C
+C     Inline functions
+C
+      REAL ALPHA, F2, F3, F4
+C
+      F2(ALPHA) = ((ALPHA+1.0) * (ALPHA-2.0) * (ALPHA-1.0))/2.0
+C
+      F3(ALPHA) = - ((ALPHA+1.0) * (ALPHA-2.0) * ALPHA)/2.0
+C
+      F4(ALPHA) = (ALPHA * (ALPHA-1.0) * (ALPHA+1.0))/6.0
+C
+C     -----------------------------------------------------------------|
+C     Process each point in the vector.
+C     -----------------------------------------------------------------|
+C
+      DO NEXT = 1,KLEN
+C
+C       Clear the weights for the current point
+C
+        DO LOOP = 1, 12
+          PWTS(LOOP,NEXT) = 0.0
+        ENDDO
+C
+C       Use appropriate interpolation scheme for the current point
+C
+C     -----------------------------------------------------------------|
+C       Nearest point selection
+C     -----------------------------------------------------------------|
+C
+        IF( KSCHEME(NEXT).EQ.JPNEARN ) THEN
+C
+          DO LOOP = 1, 4
+            IF( NEIGH(LOOP,NEXT).NE.0 ) PWTS(LOOP,NEXT) = 1.0
+          ENDDO
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C       4-point interpolation
+C     -----------------------------------------------------------------|
+C
+        ELSE IF( KSCHEME(NEXT).EQ.JP4PT ) THEN
+C
+          PWTS(1,NEXT) = (1.0 - PDLO2(NEXT)) * (1.0 - PDLAT(NEXT))
+          PWTS(2,NEXT) = PDLO2(NEXT) * (1.0 - PDLAT(NEXT))
+          PWTS(3,NEXT) = (1.0 - PDLO1(NEXT)) * PDLAT(NEXT)
+          PWTS(4,NEXT) = PDLO1(NEXT) * PDLAT(NEXT)
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C       12-point interpolation
+C     -----------------------------------------------------------------|
+C
+        ELSE
+C
+C         Setup latitude numbers for the 4 rows.
+C
+          ILA1G = KLA(NEXT)
+          ILA0G = ILA1G - 1
+          ILA2G = ILA1G + 1
+          ILA3G = ILA1G + 2
+C
+C         Setup the weights between rows.
+C
+          ZDLAT = PDLAT(NEXT)
+          ZDY   = ZDLAT * (PLATIN(ILA2G) - PLATIN(ILA1G))
+          ZDY10 =          PLATIN(ILA1G) - PLATIN(ILA0G)
+          ZDY21 =          PLATIN(ILA2G) - PLATIN(ILA1G)
+          ZDY32 =          PLATIN(ILA3G) - PLATIN(ILA2G)
+C
+C     -----------------------------------------------------------------|
+C         Polynomial in x-direction.
+C     -----------------------------------------------------------------|
+C
+C         Northern parallel
+C
+          ZDLO1 = PDLO1(NEXT)
+          ZWXN1 = F2(ZDLO1)
+          ZWXN2 = F3(ZDLO1)
+          ZWXN3 = F4(ZDLO1)
+          ZWXN0 = 1.0 - ZWXN1 - ZWXN2 - ZWXN3
+C
+C         Southern parallel
+C
+          ZDLO2 = PDLO2(NEXT)
+          ZWXS1 = F2(ZDLO2)
+          ZWXS2 = F3(ZDLO2)
+          ZWXS3 = F4(ZDLO2)
+          ZWXS0 = 1.0 - ZWXS1 - ZWXS2 - ZWXS3
+C
+C     -----------------------------------------------------------------|
+C         Polynomial in y-direction.
+C     -----------------------------------------------------------------|
+C
+          ZWY3 = ((ZDY+ZDY10) * (ZDY) * (ZDY-ZDY21)) /
+     X           ((ZDY10+ZDY21+ZDY32) * (ZDY21+ZDY32) * (ZDY32))
+          ZWY2 = ((ZDY+ZDY10) * (ZDY) * (ZDY-ZDY21-ZDY32)) /
+     X           ((ZDY10+ZDY21) * (ZDY21) * (-ZDY32))
+          ZWY1 = ((ZDY+ZDY10) * (ZDY-ZDY21) * (ZDY-ZDY21-ZDY32)) /
+     X           ((ZDY10) * (-ZDY21) * (-ZDY21-ZDY32))
+          ZWY0 = 1.0 - ZWY1 - ZWY2 - ZWY3
+C
+C     -----------------------------------------------------------------|
+C         Linear parts for extreme rows.
+C     -----------------------------------------------------------------|
+C
+C         Northernmost
+C
+          ZWXNN = PDLO0(NEXT)
+          ZCXNN = 1.0 - PDLO0(NEXT)
+C
+C         Southernmost
+C
+          ZWXSS = PDLO3(NEXT)
+          ZCXSS = 1.0 - PDLO3(NEXT)
+C
+C     -----------------------------------------------------------------|
+C         Weights for 12 points interpolation.
+C     -----------------------------------------------------------------|
+C
+          PWTS( 1,NEXT) = ZWXN1 * ZWY1
+          PWTS( 2,NEXT) = ZWXN2 * ZWY1
+          PWTS( 3,NEXT) = ZWXS1 * ZWY2
+          PWTS( 4,NEXT) = ZWXS2 * ZWY2
+          PWTS( 5,NEXT) = ZCXNN * ZWY0
+          PWTS( 6,NEXT) = ZWXNN * ZWY0
+          PWTS( 7,NEXT) = ZWXN0 * ZWY1
+          PWTS( 8,NEXT) = ZWXN3 * ZWY1
+          PWTS( 9,NEXT) = ZWXS0 * ZWY2
+          PWTS(10,NEXT) = ZWXS3 * ZWY2
+          PWTS(11,NEXT) = ZCXSS * ZWY3
+          PWTS(12,NEXT) = ZWXSS * ZWY3
+C
+          GOTO 900
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       End of processing for current point in vector.
+C     -----------------------------------------------------------------|
+C
+  900   CONTINUE
+C
+      ENDDO
+C
+      RETURN
+      END
diff --git a/interpolation/hwtsll.F b/interpolation/hwtsll.F
new file mode 100755
index 0000000..8d8e11c
--- /dev/null
+++ b/interpolation/hwtsll.F
@@ -0,0 +1,290 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE HWTSLL
+     X  (KLEN,KSCHEME,KLA,PDLAT,PLATINC,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   PWTS)
+C
+C---->
+C**** HWTSLL
+C
+C     Purpose
+C     -------
+C
+C     This routine accepts a vector of points and calculates the
+C     interpolation weightings for each point suitable for the
+C     horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL HWTSLL
+C    X  (KLEN,KSCHEME,KLA,PDLAT,PLATINC,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+C    X   PWTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KLEN    - Number of points along the vector.
+C     KSCHEME - Flag showing interpolation scheme to use for point
+C               0 = 12-point
+C               1 = 4-point bilinear
+C               2 = nearest neighbour
+C     KLA     - Latitude number in original field of latitude north of
+C               point in the vector.
+C     PDLAT   - Meridian linear weight.
+C     PLATINC - Increment between latitudes.
+C     PDLO0   - Zonal linear weight for the latitude of point 5.
+C     PDLO1   - Zonal linear weight for the latitude of point 1.
+C     PDLO2   - Zonal linear weight for the latitude of point 3.
+C     PDLO3   - Zonal linear weight for the latitude of point 11.
+C     NEIGH   - List of indices in the original field of neighbouring
+C               point values.
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     PWTS   - Weights for interpolation.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Reference
+C     ---------
+C
+C     ECMWF Meteorological Bulletin M1.6/7
+C     IFS Documentation
+C     Part VI: Technical and Computational Procedures (CY21R4)
+C     March 2000
+C     Section 2.3
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+C
+C     Function arguments
+C
+      INTEGER KLEN, KSCHEME(KLEN), KLA(KLEN)
+      REAL PDLAT(KLEN), PLATINC
+      REAL PDLO0(KLEN), PDLO1(KLEN), PDLO2(KLEN), PDLO3(KLEN)
+      INTEGER NEIGH(12,*)
+      REAL PWTS(12,*)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP
+      INTEGER ILA0G, ILA1G, ILA2G, ILA3G
+      REAL ZDLAT, ZDY, ZDY10, ZDY21, ZDY32
+      REAL ZDLO1, ZDLO2, ZWXN0, ZWXN1, ZWXN2, ZWXN3
+      REAL ZWY0, ZWY1, ZWY2, ZWY3
+      REAL ZWXNN, ZCXNN, ZWXSS, ZCXSS
+      REAL ZWXS0, ZWXS1, ZWXS2, ZWXS3
+C
+C     Inline functions
+C
+      REAL ALPHA, F2, F3, F4
+C
+      F2(ALPHA) = ((ALPHA+1.0) * (ALPHA-2.0) * (ALPHA-1.0))/2.0
+C
+      F3(ALPHA) = - ((ALPHA+1.0) * (ALPHA-2.0) * ALPHA)/2.0
+C
+      F4(ALPHA) = (ALPHA * (ALPHA-1.0) * (ALPHA+1.0))/6.0
+C
+C     -----------------------------------------------------------------|
+C     Process each point in the vector.
+C     -----------------------------------------------------------------|
+C
+      DO NEXT = 1,KLEN
+C
+C       Clear the weights for the current point
+C
+        DO LOOP = 1, 12
+          PWTS(LOOP,NEXT) = 0.0
+        ENDDO
+C
+C       Use appropriate interpolation scheme for the current point
+C
+C     -----------------------------------------------------------------|
+C       Nearest point selection
+C     -----------------------------------------------------------------|
+C
+        IF( KSCHEME(NEXT).EQ.JPNEARN ) THEN
+C
+          DO LOOP = 1, 4
+            IF( NEIGH(LOOP,NEXT).NE.0 ) PWTS(LOOP,NEXT) = 1.0
+          ENDDO
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C       4-point interpolation
+C     -----------------------------------------------------------------|
+C
+        ELSE IF( KSCHEME(NEXT).EQ.JP4PT ) THEN
+C
+          PWTS(1,NEXT) = (1.0 - PDLO2(NEXT)) * (1.0 - PDLAT(NEXT))
+          PWTS(2,NEXT) = PDLO2(NEXT) * (1.0 - PDLAT(NEXT))
+          PWTS(3,NEXT) = (1.0 - PDLO1(NEXT)) * PDLAT(NEXT)
+          PWTS(4,NEXT) = PDLO1(NEXT) * PDLAT(NEXT)
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C       12-point interpolation
+C     -----------------------------------------------------------------|
+C
+        ELSE
+C
+C         Setup latitude numbers for the 4 rows.
+C
+          ILA1G = KLA(NEXT)
+          ILA0G = ILA1G - 1
+          ILA2G = ILA1G + 1
+          ILA3G = ILA1G + 2
+C
+C         Setup the weights between rows.
+C
+          ZDLAT = PDLAT(NEXT)
+          ZDY   = ZDLAT * PLATINC
+          ZDY10 = PLATINC
+          ZDY21 = PLATINC
+          ZDY32 = PLATINC
+C
+C     -----------------------------------------------------------------|
+C         Polynomial in x-direction.
+C     -----------------------------------------------------------------|
+C
+C         Northern parallel
+C
+          ZDLO1 = PDLO1(NEXT)
+          ZWXN1 = F2(ZDLO1)
+          ZWXN2 = F3(ZDLO1)
+          ZWXN3 = F4(ZDLO1)
+          ZWXN0 = 1.0 - ZWXN1 - ZWXN2 - ZWXN3
+C
+C         Southern parallel
+C
+          ZDLO2 = PDLO2(NEXT)
+          ZWXS1 = F2(ZDLO2)
+          ZWXS2 = F3(ZDLO2)
+          ZWXS3 = F4(ZDLO2)
+          ZWXS0 = 1.0 - ZWXS1 - ZWXS2 - ZWXS3
+C
+C     -----------------------------------------------------------------|
+C         Polynomial in y-direction.
+C     -----------------------------------------------------------------|
+C
+          ZWY3 = ((ZDY+ZDY10) * (ZDY) * (ZDY-ZDY21)) /
+     X           ((ZDY10+ZDY21+ZDY32) * (ZDY21+ZDY32) * (ZDY32))
+          ZWY2 = ((ZDY+ZDY10) * (ZDY) * (ZDY-ZDY21-ZDY32)) /
+     X           ((ZDY10+ZDY21) * (ZDY21) * (-ZDY32))
+          ZWY1 = ((ZDY+ZDY10) * (ZDY-ZDY21) * (ZDY-ZDY21-ZDY32)) /
+     X           ((ZDY10) * (-ZDY21) * (-ZDY21-ZDY32))
+          ZWY0 = 1.0 - ZWY1 - ZWY2 - ZWY3
+C
+C     -----------------------------------------------------------------|
+C         Linear parts for extreme rows.
+C     -----------------------------------------------------------------|
+C
+C         Northernmost
+C
+          ZWXNN = PDLO0(NEXT)
+          ZCXNN = 1.0 - PDLO0(NEXT)
+C
+C         Southernmost
+C
+          ZWXSS = PDLO3(NEXT)
+          ZCXSS = 1.0 - PDLO3(NEXT)
+C
+C     -----------------------------------------------------------------|
+C         Weights for 12 points interpolation.
+C     -----------------------------------------------------------------|
+C
+          PWTS( 1,NEXT) = ZWXN1 * ZWY1
+          PWTS( 2,NEXT) = ZWXN2 * ZWY1
+          PWTS( 3,NEXT) = ZWXS1 * ZWY2
+          PWTS( 4,NEXT) = ZWXS2 * ZWY2
+          PWTS( 5,NEXT) = ZCXNN * ZWY0
+          PWTS( 6,NEXT) = ZWXNN * ZWY0
+          PWTS( 7,NEXT) = ZWXN0 * ZWY1
+          PWTS( 8,NEXT) = ZWXN3 * ZWY1
+          PWTS( 9,NEXT) = ZWXS0 * ZWY2
+          PWTS(10,NEXT) = ZWXS3 * ZWY2
+          PWTS(11,NEXT) = ZCXSS * ZWY3
+          PWTS(12,NEXT) = ZWXSS * ZWY3
+C
+          GOTO 900
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       End of processing for current point in vector.
+C     -----------------------------------------------------------------|
+C
+  900   CONTINUE
+C
+      ENDDO
+C
+      RETURN
+      END
diff --git a/interpolation/hwtslsm.F b/interpolation/hwtslsm.F
new file mode 100755
index 0000000..fe0900f
--- /dev/null
+++ b/interpolation/hwtslsm.F
@@ -0,0 +1,487 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE HWTSLSM
+     X  (KLEN,KSCHEME,KLA,PDLAT,PLATIN,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+     X   LSMOLD,LSMNEW,PWTS)
+C
+C---->
+C**** HWTSLSM
+C
+C     Purpose
+C     -------
+C
+C     This routine accepts a vector of points and calculates the
+C     interpolation weightings for each point suitable for the
+C     horizontal interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL HWTSLSM
+C    X  (KLEN,KSCHEME,KLA,PDLAT,PLATIN,PDLO0,PDLO1,PDLO2,PDLO3,NEIGH,
+C    X   LSMOLD,LSMNEW,PWTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KLEN    - Number of points along the vector.
+C     KSCHEME - Flag showing interpolation scheme to use for point
+C               0 = 12-point
+C               1 = 4-point bilinear
+C               2 = nearest neighbour
+C     KLA     - Latitude number in original field of latitude north of
+C               point in the vector.
+C     PDLAT   - Meridian linear weight.
+C     PLATIN  - Gaussian latitudes.
+C     PDLO0   - Zonal linear weight for the latitude of point 5.
+C     PDLO1   - Zonal linear weight for the latitude of point 1.
+C     PDLO2   - Zonal linear weight for the latitude of point 3.
+C     PDLO3   - Zonal linear weight for the latitude of point 11.
+C     NEIGH   - List of indices in the original field of neighbouring
+C               point values.
+C     LSMOLD  - Array of land-sea mask values ( a reduced gaussian
+C               field which matches the reduced gaussian field to be
+C               used for interpolation)
+C     LSMNEW  - Vector of land-sea mask values for the input points
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     PWTS   - Weights for interpolation.
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Numbering of the points (I is the interpolation point):
+C
+C                   13       5       6      14
+C
+C                    7       1       2       8
+C                               (I)
+C                    9       3       4      10
+C
+C                   15      11      12      16
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Reference
+C     ---------
+C
+C     ECMWF Meteorological Bulletin M1.6/7
+C     IFS Documentation
+C     Part VI: Technical and Computational Procedures (CY21R4)
+C     March 2000
+C     Section 2.3
+C
+C
+C     Comments
+C     --------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      March 2001
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JP12PT, JP4PT, JPNEARN
+      PARAMETER (JP12PT  = 0)
+      PARAMETER (JP4PT   = 1)
+      PARAMETER (JPNEARN = 2)
+C
+C     Function arguments
+C
+      INTEGER KLEN, KSCHEME(KLEN), KLA(KLEN)
+      REAL PDLAT(KLEN), PLATIN(*)
+      REAL PDLO0(KLEN), PDLO1(KLEN), PDLO2(KLEN), PDLO3(KLEN)
+      REAL LSMNEW(KLEN)
+      INTEGER NEIGH(12,*)
+      REAL LSMOLD(*),PWTS(12,*)
+C
+C     Local variables
+C
+      INTEGER NEXT, LOOP
+      INTEGER ILA0G, ILA1G, ILA2G, ILA3G
+      INTEGER IMKOUT, IMKIN1, IMKIN2, IMKIN3, IMKIN4, IMKIN5, IMKIN6
+      INTEGER IMKIN7, IMKIN8, IMKIN9, IMKIN10, IMKIN11, IMKIN12
+      REAL ZDLAT, ZDY, ZDY10, ZDY21, ZDY32
+      REAL ZDLO, ZDLO1, ZDLO2, ZDLO3, ZWXN0, ZWXN1, ZWXN2, ZWXN3
+      REAL ZWY0, ZWY1, ZWY2, ZWY3
+      REAL ZWXNN, ZCXNN, ZWXSS, ZCXSS
+      REAL ZWXS0, ZWXS1, ZWXS2, ZWXS3
+      REAL ZWY, ZCY, ZWXN, ZCXN, ZWXS, ZCXS
+      REAL ZWLSI1, ZWLSI2, ZWLSI3, ZWLSI4, ZWLSI5, ZWLSI6
+      REAL ZWLSI7, ZWLSI8, ZWLSI9, ZWLSI10, ZWLSI11, ZWLSI12
+      REAL ZWLSI13, ZWLSI14, ZWLSI15, ZWLSI16, ZWLSI17
+      REAL ZEPSIL
+      DATA ZEPSIL/1.E-5/
+C
+C     Inline functions
+C
+      REAL A, B, ADJUST
+      REAL ALPHA, BETA, GAMMA, DELTA, EPSILON, F2, F3, F4
+C
+      ADJUST(A,B) = 1.0 - INT(B + ZEPSIL)*(1.0 - A)
+C
+      F2(ALPHA,BETA,GAMMA,DELTA,EPSILON) =
+     X  ALPHA * ((1.0 + BETA*GAMMA) *
+     X  (1.0 + DELTA*(GAMMA-2.0)) *
+     X  (1.0 + EPSILON*(GAMMA-3.0))) /
+     X  ((1.0 - 2.0*DELTA) * (1.0 - 3.0*EPSILON))
+C
+      F3(ALPHA,BETA,GAMMA,DELTA,EPSILON) =
+     X  ALPHA * ((1.0 + BETA*GAMMA) *
+     X  (1.0 + DELTA*(GAMMA - 1.0)) *
+     X  (1.0 + EPSILON*(GAMMA - 3.0))) /
+     X  ((1.0 + BETA) * (1.0 - 2.0*EPSILON))
+C
+      F4(ALPHA,BETA,GAMMA,DELTA,EPSILON) =
+     X  ALPHA * ((1.0 + BETA*GAMMA) *
+     X  (1.0 + DELTA*(GAMMA - 1.0)) *
+     X  (1.0 + EPSILON*(GAMMA - 2.0))) /
+     X  ((1.0 + 2.0*BETA) * (1.0 + DELTA))
+C
+C     -----------------------------------------------------------------|
+C     Process each point in the vector.
+C     -----------------------------------------------------------------|
+C
+      DO NEXT = 1,KLEN
+C
+C       Clear the weights for the current point
+C
+        DO LOOP = 1, 12
+          PWTS(LOOP,NEXT) = 0.0
+        ENDDO
+C
+C       Use appropriate interpolation scheme for the current point
+C
+C     -----------------------------------------------------------------|
+C
+C       Nearest point selection
+C
+C     -----------------------------------------------------------------|
+C
+        IF( KSCHEME(NEXT).EQ.JPNEARN ) THEN
+C
+          DO LOOP = 1, 4
+            IF( NEIGH(LOOP,NEXT).NE.0 ) PWTS(LOOP,NEXT) = 1.0
+          ENDDO
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C
+C       4-point interpolation
+C
+C     -----------------------------------------------------------------|
+C
+        ELSE IF( KSCHEME(NEXT).EQ.JP4PT ) THEN
+C
+C     -----------------------------------------------------------------|
+C         Initialise the lsm weights
+C     -----------------------------------------------------------------|
+C
+          ZWLSI1  = 1.0
+          ZWLSI2  = 1.0
+          ZWLSI3  = 1.0
+          ZWLSI4  = 1.0
+C
+          ZWLSI14 = 0.0
+          ZWLSI15 = 0.0
+          ZWLSI17 = 0.0
+C
+C         Modify the weights according to whether or not the target
+C         point matches its neighbours
+C
+          IMKOUT = NINT(LSMNEW(NEXT))
+C
+          IMKIN1 = NINT(LSMOLD(NEIGH(1,NEXT)))
+          IF( IMKIN1.NE.IMKOUT ) ZWLSI1 = 0.0
+C
+          IMKIN2 = NINT(LSMOLD(NEIGH(2,NEXT)))
+          IF( IMKIN2.NE.IMKOUT ) ZWLSI2 = 0.0
+C
+          IMKIN3 = NINT(LSMOLD(NEIGH(3,NEXT)))
+          IF( IMKIN3.NE.IMKOUT ) ZWLSI3 = 0.0
+C
+          IMKIN4 = NINT(LSMOLD(NEIGH(4,NEXT)))
+          IF( IMKIN4.NE.IMKOUT ) ZWLSI4 = 0.0
+C
+          IF( IMKIN1.NE.IMKOUT) ZWLSI1 = 0.0
+          IF( IMKIN2.NE.IMKOUT) ZWLSI2 = 0.0
+          IF( IMKIN3.NE.IMKOUT) ZWLSI3 = 0.0
+          IF( IMKIN4.NE.IMKOUT) ZWLSI4 = 0.0
+C
+          ZWLSI14 = MIN(ZWLSI1 + ZWLSI2, 1.0)
+          ZWLSI15 = MIN(ZWLSI3 + ZWLSI4, 1.0)
+          ZWLSI17 = MIN(ZWLSI14 + ZWLSI15, 1.0)
+C
+          ZWLSI1 = ADJUST(ZWLSI1,ZWLSI14)
+          ZWLSI2 = ADJUST(ZWLSI2,ZWLSI14)
+          ZWLSI3 = ADJUST(ZWLSI3,ZWLSI15)
+          ZWLSI4 = ADJUST(ZWLSI4,ZWLSI15)
+C
+          ZWLSI14 = ADJUST(ZWLSI17,ZWLSI14)
+          ZWLSI15 = ADJUST(ZWLSI17,ZWLSI15)
+C
+C     -----------------------------------------------------------------|
+C         Weights for bilinear interpolation.
+C     -----------------------------------------------------------------|
+C
+      
+          ZWY = ZWLSI15 * (1.0 + ZWLSI14 * (PDLAT(NEXT) - 1.0))
+          ZCY = 1.0 - ZWY
+C
+          ZWXN = ZWLSI2 * (1.0 + ZWLSI1 * (PDLO1(NEXT) - 1.0))
+          ZCXN = 1.0 - ZWXN
+C
+          ZWXS = ZWLSI4 * (1.0 + ZWLSI3 * (PDLO2(NEXT) - 1.0))
+          ZCXS = 1.0 - ZWXS
+C
+          PWTS(1,NEXT) = ZCXN * ZCY
+          PWTS(2,NEXT) = ZWXN * ZCY
+          PWTS(3,NEXT) = ZCXS * ZWY
+          PWTS(4,NEXT) = ZWXS * ZWY
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C
+C       12-point interpolation
+C
+C     -----------------------------------------------------------------|
+C
+        ELSE
+C
+C     -----------------------------------------------------------------|
+C         Initialise the lsm weights
+C     -----------------------------------------------------------------|
+C
+          ZWLSI1  = 1.0
+          ZWLSI2  = 1.0
+          ZWLSI3  = 1.0
+          ZWLSI4  = 1.0
+          ZWLSI5  = 1.0
+          ZWLSI6  = 1.0
+          ZWLSI7  = 1.0
+          ZWLSI8  = 1.0
+          ZWLSI9  = 1.0
+          ZWLSI10 = 1.0
+          ZWLSI11 = 1.0
+          ZWLSI12 = 1.0
+C
+          ZWLSI13 = 0.0
+          ZWLSI14 = 0.0
+          ZWLSI15 = 0.0
+          ZWLSI16 = 0.0
+          ZWLSI17 = 0.0
+C
+C         Modify the weights according to whether or not the target
+C         point matches its neighbours
+C
+          IMKOUT = NINT(LSMNEW(NEXT))
+C
+          IMKIN1 = NINT(LSMOLD(NEIGH(1,NEXT)))
+          IF( IMKIN1.NE.IMKOUT ) ZWLSI1 = 0.0
+C
+          IMKIN2 = NINT(LSMOLD(NEIGH(2,NEXT)))
+          IF( IMKIN2.NE.IMKOUT ) ZWLSI2 = 0.0
+C
+          IMKIN3 = NINT(LSMOLD(NEIGH(3,NEXT)))
+          IF( IMKIN3.NE.IMKOUT ) ZWLSI3 = 0.0
+C
+          IMKIN4 = NINT(LSMOLD(NEIGH(4,NEXT)))
+          IF( IMKIN4.NE.IMKOUT ) ZWLSI4 = 0.0
+C
+          IMKIN5 = NINT(LSMOLD(NEIGH(5,NEXT)))
+          IF( IMKIN5.NE.IMKOUT ) ZWLSI5 = 0.0
+C
+          IMKIN6 = NINT(LSMOLD(NEIGH(6,NEXT)))
+          IF( IMKIN6.NE.IMKOUT ) ZWLSI6 = 0.0
+C
+          IMKIN7 = NINT(LSMOLD(NEIGH(7,NEXT)))
+          IF( IMKIN7.NE.IMKOUT ) ZWLSI7 = 0.0
+C
+          IMKIN8 = NINT(LSMOLD(NEIGH(8,NEXT)))
+          IF( IMKIN8.NE.IMKOUT ) ZWLSI8 = 0.0
+C
+          IMKIN9 = NINT(LSMOLD(NEIGH(9,NEXT)))
+          IF( IMKIN9.NE.IMKOUT ) ZWLSI9 = 0.0
+C
+          IMKIN10 = NINT(LSMOLD(NEIGH(10,NEXT)))
+          IF( IMKIN10.NE.IMKOUT ) ZWLSI10 = 0.0
+C
+          IMKIN11 = NINT(LSMOLD(NEIGH(11,NEXT)))
+          IF( IMKIN11.NE.IMKOUT ) ZWLSI11 = 0.0
+C
+          IMKIN12 = NINT(LSMOLD(NEIGH(12,NEXT)))
+          IF( IMKIN12.NE.IMKOUT ) ZWLSI12 = 0.0
+C
+          ZWLSI13 = MIN(ZWLSI5+ZWLSI6                  ,1.0)
+          ZWLSI14 = MIN(ZWLSI7+ZWLSI1+ZWLSI2+ZWLSI8    ,1.0)
+          ZWLSI15 = MIN(ZWLSI9+ZWLSI3+ZWLSI4+ZWLSI10   ,1.0)
+          ZWLSI16 = MIN(ZWLSI11+ZWLSI12                ,1.0)
+          ZWLSI17 = MIN(ZWLSI13+ZWLSI14+ZWLSI15+ZWLSI16,1.0)
+C
+          ZWLSI1  = ADJUST(ZWLSI1,ZWLSI14)
+          ZWLSI2  = ADJUST(ZWLSI2,ZWLSI14)
+          ZWLSI3  = ADJUST(ZWLSI3,ZWLSI15)
+          ZWLSI4  = ADJUST(ZWLSI4,ZWLSI15)
+          ZWLSI5  = ADJUST(ZWLSI5,ZWLSI13)
+          ZWLSI6  = ADJUST(ZWLSI6,ZWLSI13)
+          ZWLSI7  = ADJUST(ZWLSI7,ZWLSI14)
+          ZWLSI8  = ADJUST(ZWLSI8,ZWLSI14)
+          ZWLSI9  = ADJUST(ZWLSI9,ZWLSI15)
+          ZWLSI10 = ADJUST(ZWLSI10,ZWLSI15)
+          ZWLSI11 = ADJUST(ZWLSI11,ZWLSI16)
+          ZWLSI12 = ADJUST(ZWLSI12,ZWLSI16)
+C
+          ZWLSI13 = ADJUST(ZWLSI13,ZWLSI17)
+          ZWLSI14 = ADJUST(ZWLSI14,ZWLSI17)
+          ZWLSI15 = ADJUST(ZWLSI15,ZWLSI17)
+          ZWLSI16 = ADJUST(ZWLSI16,ZWLSI17)
+C
+C         Setup latitude numbers for the 4 rows.
+C
+          ILA1G = KLA(NEXT)
+          ILA0G = ILA1G - 1
+          ILA2G = ILA1G + 1
+          ILA3G = ILA1G + 2
+C
+C         Setup the weights between rows.
+C
+          ZDLAT = PDLAT(NEXT)
+          ZDY   = ZDLAT * (PLATIN(ILA2G) - PLATIN(ILA1G))
+          ZDY10 =          PLATIN(ILA1G) - PLATIN(ILA0G)
+          ZDY21 =          PLATIN(ILA2G) - PLATIN(ILA1G)
+          ZDY32 =          PLATIN(ILA3G) - PLATIN(ILA2G)
+C
+C     -----------------------------------------------------------------|
+C         Polynomial in x-direction.
+C     -----------------------------------------------------------------|
+C
+C         Northern parallel
+C
+          ZDLO1 = PDLO1(NEXT)
+          ZWXN1 = F2(ZWLSI1,ZWLSI7,ZDLO1,ZWLSI2,ZWLSI8)
+          ZWXN2 = F3(ZWLSI2,ZWLSI7,ZDLO1,ZWLSI1,ZWLSI8)
+          ZWXN3 = F4(ZWLSI8,ZWLSI7,ZDLO1,ZWLSI1,ZWLSI2)
+          ZWXN0 = 1.0 - ZWXN1 - ZWXN2 - ZWXN3
+C
+C         Southern parallel
+C
+          ZDLO2 = PDLO2(NEXT)
+          ZWXS1 = F2(ZWLSI3,ZWLSI9,ZDLO2,ZWLSI4,ZWLSI10)
+          ZWXS2 = F3(ZWLSI4,ZWLSI9,ZDLO2,ZWLSI3,ZWLSI10)
+          ZWXS3 = F4(ZWLSI10,ZWLSI9,ZDLO2,ZWLSI3,ZWLSI4)
+          ZWXS0 = 1.0 - ZWXS1 - ZWXS2 - ZWXS3
+C
+C     -----------------------------------------------------------------|
+C         Polynomial in y-direction.
+C     -----------------------------------------------------------------|
+C
+          ZWY1 = ZWLSI14*((1.0 + ZWLSI13*(ZDY + ZDY10 - 1.0)) *
+     X           (1.0 + ZWLSI15*(ZDY - ZDY21 - 1.0)) *
+     X           (1.0 + ZWLSI16*(ZDY - ZDY21 - ZDY32 - 1.0))) /
+     X           ((1.0 + ZWLSI13*(ZDY10 - 1.0)) *
+     X           (1.0 + ZWLSI15*( -ZDY21 - 1.0)) *
+     X           (1.0 + ZWLSI16*( -ZDY21 - ZDY32 - 1.0)))
+          ZWY2 = ZWLSI15*((1.0 + ZWLSI13*(ZDY + ZDY10 - 1.0)) *
+     X           (1.0 + ZWLSI14*(ZDY - 1.0)) *
+     X           (1.0 + ZWLSI16*(ZDY - ZDY21 - ZDY32 - 1.0))) /
+     X           ((1.0 + ZWLSI13*(ZDY10 + ZDY21 - 1.0)) *
+     X           (1.0 + ZWLSI14*(ZDY21 - 1.0)) *
+     X           (1.0 + ZWLSI16*( -ZDY32 - 1.0)))
+          ZWY3 = ZWLSI16*((1.0 + ZWLSI13*(ZDY + ZDY10 - 1.0)) *
+     X           (1.0 + ZWLSI14*(ZDY - 1.0)) *
+     X           (1.0 + ZWLSI15*(ZDY - ZDY21 - 1.0))) /
+     X           ((1.0 + ZWLSI13*(ZDY10 + ZDY21 + ZDY32 - 1.0)) *
+     X           (1.0 + ZWLSI14*(ZDY21 + ZDY32 - 1.0)) *
+     X           (1.0 + ZWLSI15*(ZDY32 - 1.0)))
+          ZWY0 = 1.0 - ZWY1 - ZWY2 - ZWY3
+C
+C     -----------------------------------------------------------------|
+C         Linear parts for extreme rows.
+C     -----------------------------------------------------------------|
+C
+C         Northernmost
+C
+          ZDLO  = PDLO0(NEXT)
+          ZWXNN = ZWLSI6 * (1.0 + ZWLSI5 * (ZDLO - 1.0))
+          ZCXNN = 1.0 - ZWXNN
+C
+C         Southernmost
+C
+          ZDLO3 = PDLO3(NEXT)
+          ZWXSS = ZWLSI12 * (1.0 + ZWLSI11 * (ZDLO3 - 1.0))
+          ZCXSS = 1.0 - ZWXSS
+C
+C     -----------------------------------------------------------------|
+C         Weights for 12 points interpolation.
+C     -----------------------------------------------------------------|
+C
+          PWTS( 1,NEXT) = ZWXN1 * ZWY1
+          PWTS( 2,NEXT) = ZWXN2 * ZWY1
+          PWTS( 3,NEXT) = ZWXS1 * ZWY2
+          PWTS( 4,NEXT) = ZWXS2 * ZWY2
+          PWTS( 5,NEXT) = ZCXNN * ZWY0
+          PWTS( 6,NEXT) = ZWXNN * ZWY0
+          PWTS( 7,NEXT) = ZWXN0 * ZWY1
+          PWTS( 8,NEXT) = ZWXN3 * ZWY1
+          PWTS( 9,NEXT) = ZWXS0 * ZWY2
+          PWTS(10,NEXT) = ZWXS3 * ZWY2
+          PWTS(11,NEXT) = ZCXSS * ZWY3
+          PWTS(12,NEXT) = ZWXSS * ZWY3
+C
+          GOTO 900
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       End of processing for current point in vector.
+C     -----------------------------------------------------------------|
+C
+  900   CONTINUE
+C
+      ENDDO
+C
+      RETURN
+      END
diff --git a/interpolation/iafree.F b/interpolation/iafree.F
new file mode 100755
index 0000000..d59011a
--- /dev/null
+++ b/interpolation/iafree.F
@@ -0,0 +1,267 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAFREE (KPR, KERR)
+C
+C---->
+C**** *IAFREE*
+C
+C     PURPOSE
+C     _______
+C
+C     Deallocate heap space used by grid-pt to grid-pt interpolation.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAFREE (KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     Cray error codes
+C
+C     -1     HPDEALLC block is already free (Warning only).
+C
+C     21201  HPDEALLC attempt to free block at address outside the
+C            bounds of the heap.
+C     21202  HPDEALLC attempt to free block at address which was not
+C            the beginning of a block.
+C     21203  HPDEALLC returning any other non zero code.
+C
+C     Errors 21201 and 21202 should not occur and any occurrence
+C     of one of these errors should be reported to Meteorological
+C     Applications.
+C
+C     Common block usage
+C     __________________
+C
+C     memreq.h     - This file contains the memory request
+C                    definition variables.
+C
+C     MADDR        - The base addresses of the currently allocated
+C                    memory segments used and reset.
+C     MREQUEST     - The sizes of the current memory requests used
+C                    and reset.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG    - Logs messages.
+C
+C     Cray
+C
+C     ABORTX    - Standard routine to kill task.
+C     HPDEALLC  - Cray library routine to deallocate heap space.
+C
+C     Sun and SGI
+C
+C     JFREE     - "Unix" routine to deallocate heap space.
+C
+C     METHOD
+C     ______
+C
+C     The required heap space is allocated.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     None.
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      May 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF       Aug 1994
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "memreq.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Dummy arguments
+C
+      INTEGER KPR, KERR
+C
+C     Local variables
+C
+      INTEGER IABORT, IERROR
+C
+      INTEGER JLEVEL
+C
+      INTEGER JPROUTINE
+C
+      PARAMETER (JPROUTINE = 21200)
+C
+C     External functions
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAFREE: Section 1.',JPQUIET)
+C
+      IAFREE = 0
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,
+     X 'IAFREE: Free all heap space.',JPQUIET)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Free acquired space.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAFREE: Section 2.',JPQUIET)
+C
+      IABORT = 0
+      IERROR = 0
+C
+      DO 210 JLEVEL = JPLEVEL, 1, -1
+C
+         IF (MREQUEST (JLEVEL) .GT. 0) THEN
+C
+#ifdef CRAY
+            CALL HPDEALLC (MADDR (JLEVEL), IERROR, IABORT)
+C
+            IF (IERROR .EQ. -4) THEN
+              IAFREE = - 1
+              IF (KERR .GE. 0) CALL INTLOG(JP_ERROR,
+     X          'IAFREE: Already free, the block at ', MADDR (JLEVEL))
+C
+            ELSE IF (IERROR .NE. 0) THEN
+C
+              IF (IERROR .EQ. -3) THEN
+C
+                IAFREE = JPROUTINE + 1
+C
+                IF (KERR .GE. 0) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'IAFREE: Heap deallocation failed.',IERROR)
+                  CALL INTLOG(JP_ERROR,
+     X              'IAFREE: Block outside heap.',MADDR(JLEVEL))
+                ENDIF
+              ELSE IF (IERROR .EQ. -5) THEN
+C
+                IAFREE = JPROUTINE + 2
+C
+                IF (KERR .GE. 0) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'IAFREE: Heap deallocation failed.',IERROR)
+                  CALL INTLOG(JP_ERROR,
+     X              'IAFREE: Not at start of block.',MADDR(JLEVEL))
+                ENDIF
+              ELSE
+C
+                IAFREE = JPROUTINE + 3
+C
+                IF (KERR .GE. 0) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'IAFREE: Heap deallocation failed.',IERROR)
+                  CALL INTLOG(JP_ERROR,
+     X              'IAFREE: Attempt to free block at: ',MADDR(JLEVEL))
+                ENDIF
+              ENDIF
+C
+              IF (KERR .EQ. 0) CALL ABORTX ('IAFREE')
+              GO TO 900
+            ENDIF
+#else
+            CALL JFREE (MADDR (JLEVEL) )
+#endif
+C
+            MREQUEST (JLEVEL) = 0
+            MADDR (JLEVEL) = 0
+C
+         ENDIF
+C
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAFREE: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iagcntl.F b/interpolation/iagcntl.F
new file mode 100755
index 0000000..e1d08fe
--- /dev/null
+++ b/interpolation/iagcntl.F
@@ -0,0 +1,717 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAGCNTL(PIFELD, KILEN, POFELD, KOLEN, KILN,
+     X   OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE, OONPOLE,
+     X   OOSPOLE, KPR, KERR)
+C
+C---->
+C**** *IAGCNTL*
+C
+C     PURPOSE
+C     _______
+C
+C     The global controlling routine for interpolating between
+C     regular Gaussian or latitude/longitude fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAGCNTL(PIFELD, KILEN, POFELD, KOLEN, KILN, OIWEGLOBE,
+C    X   OINPOLE, OISPOLE, KOLN, OOWEGLOBE, OONPOLE, OOSPOLE, KPR,
+C    X   KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PIFELD     - The input field provided by the calling routine.
+C
+C     KILEN      - The length of the input field.
+C
+C     KOLEN      - The length of the output field.
+C
+C     KILN       - The Northern line number of the input field within
+C                  its Gaussian field.
+C
+C     OIWEGLOBE  - A flag indicating whether the input field is
+C                  global West to East.
+C
+C     OINPOLE    - A flag indicating whether the North pole is
+C                  included in the input field.
+C
+C     OISPOLE    - A flag indicating whether the South pole is
+C                  include in the input field.
+C
+C     KOLN       - The Northern line number of the output field
+C                  within its Gaussian field.
+C
+C     OOWEGLOBE  - A flag indicating whether the output field is
+C                  global West to East.
+C
+C     OONPOLE    - A flag indicating whether the North pole is
+C                  include in the output field.
+C
+C     OOSPOLE    - A flag indicating whether the South pole is
+C                  include in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     POFELD     - The output field returned to the calling routine.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     21801 The input data representation was not valid when the
+C           grid was generated. This should not happen as the data
+C           representation has been previously validated.
+C     21802 The output data representation was not valid when the
+C           grid was generated. This should not happen as the data
+C           representation has been previously validated.
+C     21803 Attempt to produce global West-East field where the input
+C           field was not global.
+C     21804 Attempt to produce global North-South field where the
+C           input field was not global.
+C
+C     Common block usage
+C     __________________
+C
+C     grspace.h    - The include file contains all the array space
+C                    for grid to grid interpolation.
+C
+C     RIGAUSS      - Real array of input field Gaussian latitudes is
+C                    used.
+C     ROGAUSS      - Real array of output field Gaussian latitudes is
+C                    used.
+C
+C     MILATG       - The input field latitudes.
+C     MILONG       - The input field longitudes.
+C     MNSDIST      - The distances to neighbouring latitude lines of
+C                    the input field from the associated line of
+C                    latitude in the output field.
+C     MNSIND       - The latitude line numbers (array offset) of the
+C                    input field associated with each line of
+C                    latitude in the output field.
+C     MOLATG       - The output field latitudes.
+C     MOLONG       - The output field longitudes.
+C     MWEDIST      - This array holds the distances to neighbouring
+C                    longitude points of the input field from the
+C                    associated longitude points in the output field.
+C     MWEIND       - This array holds the longitude points (array
+C                    offset) from the input field associated with
+C                    each longitude point in the output field.
+C     RINPNT       - Array used to aid vectorisation in processing
+C                    precipitation fields.
+C     RMAX         - Array used to aid vectorisation in normalising
+C                    interpolation weights and processing
+C                    precipitation fields.
+C     WFACT        - The array of interpolation weights for each
+C                    point in the output field.
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     LCHANGE      - Process change flag is used and set.
+C     LSMCHNG      - LSM change flag is used and set.
+C     LSM          - LSM usage flag is used.
+C     LSMPAR       - LSM parameter flag is used.
+C     LPREC        - Precipitation flag is used.
+C     LWIND        - Wind flag is used.
+C     LSTAGGL      - Staggered grid flag
+C
+C     NIAREA       - Input field area definition (N/W/S/E) is used.
+C     NIGAUSS      - Input field Gaussian truncation is used.
+C     NIGRID       - Input field grid definition (WE/NS) is used.
+C     NINS         - Number of grid points in NS direction for input
+C                    field is used.
+C     NIREPR       - Input field representation is used.
+C     NIWE         - Number of grid points in WE direction for input
+C                    field is used.
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOAREA       - Output field area definition (N/W/S/E) is used.
+C     NOGAUSS      - Output field Gaussian truncation is used.
+C     NOGRID       - Output field grid definition (WE/NS) is used.
+C     NONS         - Number of grid points in NS direction for output
+C                    field is used.
+C     NOREPR       - Output field representation is used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is used.
+C
+C     EXTERNALS
+C     _________
+C
+C     ABORTX     - Standard routine to kill task.
+C     IGDINS     - Calculate the distances between points in an
+C                  output latitude array and its North and South
+C                  neighbours in the input latitude array.
+C     IGDIWE     - Calculate the distances between points in an
+C                  output longitude array and its West and East
+C                  neighbours in the input longitude array.
+C     IGGMEM     - This routine acquires heap space.
+C     IGGRID     - Generate the arrays of latitude and longitude
+C                  points for a Gaussian truncation and area.
+C     IGINT      - Calculate the basic unnormalised interpolation
+C                  weights.
+C     IGLGRID    - Generate the arrays of latitude and longitude
+C                  points for a regular latitude/longitude grid.
+C     IGLSIZE    - Evaluate the array sizes for a regular
+C                  latitude/longitude grid and area.
+C     IGLSMB     - Calculate the effects of the land-sea masks on
+C                  the unnormalised interpolation weights.
+C     IGLSMD     - Generate the land sea mask file information.
+C     IGNORM     - Normalise the array of interpolation weights.
+C     IGPLSM     - Force an interpolated land sea mask field back
+C                  to a real 0-1 field.
+C     IGPOLEG    - Calculates the values at the pole of a regular
+C                  latitude/longitude field when the input is a
+C                  Gaussian field.
+C     IGPOLEW    - Calculates the values at the pole of a regular
+C                  latitude/longitude wind field when the input is
+C                  a Gaussian field.
+C     IGPREC     - Perform additional interpolation for
+C                  precipitation fields.
+C     ZPREC      - Perform additional interpolation processes
+C                  for precipitation
+C     IGSIZE     - Evaluate the array sizes for a Gaussian
+C                  truncation and area.
+C     IGTOG      - Perform basic interpolation between regular input
+C                  and output fields.
+C     INTLOG       - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This is purely a controlling routine with all the work being
+C     performed in the external routines.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     None
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      May 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.Chambers        ECMWF       Oct 1998
+C     Allow field type for rotated grids.
+C
+C     S.Curic           ECMWF       Oct 2005
+C     Add zprec routine that Perform checking
+C     of precipitation
+
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 21800)
+C
+C     Function arguments
+C
+      LOGICAL OIWEGLOBE, OINPOLE, OISPOLE, OOWEGLOBE, OONPOLE, OOSPOLE
+      INTEGER KILEN, KOLEN, KILN, KOLN, KPR, KERR
+      REAL PIFELD(KILEN), POFELD(KOLEN)
+C
+C     Local variables
+C
+      LOGICAL LFAIL, LERROR, LDEBUG, LREGIN, LREGOUT
+      LOGICAL GINSPOLE, GIGLOBE, GISTAND, GONSPOLE, GOGLOBE, GOSTAND
+      LOGICAL GPREC,LSM_VALUES
+      CHARACTER*120 YIFILE, YOFILE
+      CHARACTER*12 YFLAG
+      INTEGER IIOFF, IIREC, IOOFF, IOREC, IERR
+C
+C     Working copies of area and grid arrays that may be changed
+C
+      INTEGER IILGRID(2), IILLINE(2), IOLGRID(2), IOLLINE(2)
+C
+C     External functions
+C
+      INTEGER IGDINS, IGDIWE, IGGMEM, IGGRID, IGINT, IGLGRID,
+     X   IGLSMB, IGLSMD, IGNORM, IGPLSM, IGPOLEG, IGPOLEW, IGPREC,
+     X   IGTOG, ZPREC
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IAGCNTL = 0
+      IERR = 0
+C
+C     Set all flag variables
+C
+      LDEBUG  = (KPR.GE.1)
+      LFAIL   = (KERR.EQ.0)
+      LERROR  = (KERR.GE.0)
+      LREGIN  = (NIREPR.EQ.JPREGULAR).OR.(NIREPR.EQ.JPREGROT)
+      LREGOUT = (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT)
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'IAGCNTL: Input field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IAGCNTL: Representation = ',NIREPR)
+        IF( NIWE.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IAGCNTL: Number W-E = ',NIWE)
+        IF( NINS.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IAGCNTL: Number N-S = ',NINS)
+        IF( (NIREPR.EQ.JPGAUSSIAN).OR.(NIREPR.EQ.JPQUASI) )
+     X    CALL INTLOG(JP_DEBUG,'IAGCNTL: Gaussian truncation= ',NIGAUSS)
+        IF( LREGIN.AND.(NIGRID(1).NE.0) ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Grid WE = ',NIGRID(1))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Grid NS = ',NIGRID(2))
+        ENDIF
+        IF( NIAREA(1).NE.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area North = ',NIAREA(1))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area West  = ',NIAREA(2))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area South = ',NIAREA(3))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area East  = ',NIAREA(4))
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'IAGCNTL: Output field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IAGCNTL: Representation = ',NOREPR)
+        IF( NOWE.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IAGCNTL: Number W-E = ',NOWE)
+        IF( NONS.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IAGCNTL: Number N-S = ',NONS)
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) )
+     X    CALL INTLOG(JP_DEBUG,'IAGCNTL: Gaussian truncation= ',NOGAUSS)
+        IF( LREGOUT.AND.(NOGRID(1).NE.0) ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Grid WE = ',NOGRID(1))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Grid NS = ',NOGRID(2))
+        ENDIF
+        IF( NOAREA(1).NE.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area North = ',NOAREA(1))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area West  = ',NOAREA(2))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area South = ',NOAREA(3))
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Area East  = ',NOAREA(4))
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'IAGCNTL: Control flag status:',JPQUIET)
+C
+        IF( LSMCHNG ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: LSM change TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: LSM change FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSM ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: LSM flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: LSM flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LWIND ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Wind flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Wind flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LPREC ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Precipitn flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Precipitn flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSMPAR ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: LSM param flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: LSM param flag FALSE',JPQUIET)
+        ENDIF
+        IF( LSTAGGL ) THEN
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Staggered flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAGCNTL: Staggered flag FALSE',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     The change of definition option spans sections 2 to 3
+C
+      IF( LCHANGE ) THEN
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Calculate space requirement.
+C     -----------------------------------------------------------------|
+C
+  200   CONTINUE
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 2.',JPQUIET)
+C
+C       Get the required memory
+C
+        IAGCNTL = IGGMEM(KPR, KERR)
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+C       Input grid definition
+C
+        IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+C
+          IAGCNTL = IGGRID(NIGAUSS, NIAREA, KILN, RIGAUSS,
+     X                     MILONG,NIWE,MILATG,NINS,OIWEGLOBE,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        ELSEIF( LREGIN ) THEN
+C
+          IAGCNTL = IGLGRID(NIGRID, NIAREA, MILONG, NIWE, MILATG,
+     X                      NINS,OIWEGLOBE,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        ELSE
+C
+          IAGCNTL = JPROUTINE + 1
+          IF( LERROR ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IAGCNTL: Illegal input representation = ',NIREPR)
+            IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X        'IAGCNTL: Interpolation failing.',JPQUIET)
+          ENDIF
+          GOTO 900
+C
+        ENDIF
+C
+C       Is the input field global
+C
+        GINSPOLE = OINPOLE.AND.OISPOLE
+        GIGLOBE  = OIWEGLOBE.AND.GINSPOLE
+C
+C       Is the output field global North South
+C
+        GONSPOLE = OONPOLE.AND.OOSPOLE
+        GOGLOBE  = OOWEGLOBE.AND.GONSPOLE
+
+        IF(GOGLOBE.AND.NOAREA(2).EQ.0) THEN
+            LGLOBL = .TRUE.
+        ELSE
+            LGLOBL = .FALSE.
+        ENDIF
+C
+C       Output grid definition
+C
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+C
+          IAGCNTL = IGGRID(NOGAUSS, NOAREA, KOLN, ROGAUSS,
+     X                     MOLONG,NOWE,MOLATG,NONS,OOWEGLOBE,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        ELSEIF( LREGOUT ) THEN
+C
+          IAGCNTL = IGLGRID(NOGRID, NOAREA, MOLONG, NOWE, MOLATG,
+     X                      NONS,OOWEGLOBE,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        ELSE
+C
+          IAGCNTL = JPROUTINE + 2
+          IF( LERROR ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IAGCNTL: Illegal output representation = ',NOREPR)
+            IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X        'IAGCNTL: Interpolation failing.',JPQUIET)
+          ENDIF
+          GOTO 900
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Create output to input grid mapping and distance arrays
+C     -----------------------------------------------------------------|
+C
+  300   CONTINUE
+C
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 3.',JPQUIET)
+C
+C       First check that the input and output fields are compatible.
+C
+        IF( .NOT.GIGLOBE ) THEN
+C
+          IF( .NOT.OIWEGLOBE ) THEN
+C
+C           Cannot produce global output field if input not global
+C
+            IF( OOWEGLOBE ) THEN
+              IAGCNTL = JPROUTINE + 3
+              IF( LERROR ) THEN
+                CALL INTLOG(JP_ERROR,
+     X           'IAGCNTL: Cannot produce global output from',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IAGCNTL: non-global input.  The W-E input',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IAGCNTL: direction was not global.',JPQUIET)
+                IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X            'IAGCNTL: Interpolation failing.',JPQUIET)
+              ENDIF
+              GOTO 900
+            ENDIF
+C
+          ENDIF
+C
+c Sinisa added NOT.LSTAGGL just for the sake of staggered grids
+C
+          IF( .NOT.GINSPOLE.AND.(.NOT.LSTAGGL) ) THEN
+C
+C           Cannot produce global output field if input not global
+C
+            IF( GONSPOLE ) THEN
+              IAGCNTL = JPROUTINE + 4
+              IF( LERROR ) THEN
+                CALL INTLOG(JP_ERROR,
+     X           'IAGCNTL: Cannot produce global output from',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IAGCNTL: non-global input.  The N-S input',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IAGCNTL: direction was not global.',JPQUIET)
+                IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X            'IAGCNTL: Interpolation failing.',JPQUIET)
+              ENDIF
+              GOTO 900
+            ENDIF
+C
+          ENDIF
+C
+        ENDIF
+C
+        IAGCNTL = IGDINS(MILATG, NINS, MOLATG, NONS, OINPOLE, OISPOLE,
+     X                   MNSIND, MNSDIST, KPR, KERR)
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        IAGCNTL = IGDIWE(MILONG, NIWE, MOLONG, NOWE, OIWEGLOBE,
+     X                   MWEIND, MWEDIST, KPR, KERR)
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+C       The end of primary initialisation
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4. Create normalised weight arrays
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 4.',JPQUIET)
+C
+C     The following code is affected by the Land Sea mask flag
+C
+      IF( LCHANGE.OR.LSMCHNG ) THEN
+C
+        IAGCNTL = IGINT(MWEDIST, NOWE, MNSDIST, NONS, WFACT, KPR, KERR)
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        IF( LSM ) THEN
+C
+          IAGCNTL = IGLSMD(NIDATE,NIREPR,NIGRID,NIGAUSS,NIAREA,KILN,
+     X                    YIFILE,GISTAND,IILGRID,IILLINE,IIREC,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+          IAGCNTL = IGLSMD(NODATE,NOREPR,NOGRID,NOGAUSS,NOAREA,KOLN,
+     X                    YOFILE,GOSTAND,IOLGRID,IOLLINE,IOREC,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+          IAGCNTL = IGLSMB(GISTAND, YIFILE, IIREC, IILGRID, IILLINE,
+     X                    GOSTAND,YOFILE,IOREC,IOLGRID,IOLLINE,KPR,KERR)
+          IF( IAGCNTL.GT.0 ) GOTO 900
+C
+        ENDIF
+C
+C     Normalise the weights
+C
+        IAGCNTL = IGNORM(WFACT, RMAX, NOWE, NONS, KPR, KERR)
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+C     This marks the end of a change to the specification
+C     Clear the Change flags LCHANGE and LSMCHNG
+C
+        LCHANGE = .FALSE.
+        LSMCHNG = .FALSE.
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5. Basic interpolation from input to output field
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 5.',JPQUIET)
+C
+      IAGCNTL = IGTOG(PIFELD, NIWE, NINS, NOWE, NONS, MWEIND, MNSIND,
+     X                WFACT, POFELD, KPR, KERR)
+      IF( IAGCNTL.GT.0 ) GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 6. Additional interpolations from input to output field
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 6.',JPQUIET)
+C
+C     Precipitation field
+C
+C     Force processing without neighbour check
+        GPREC = .FALSE.
+        CALL GETENV('PRECIPITATION_NEIGHBOUR_CHECK', YFLAG)
+        IF( YFLAG(1:1).EQ.'0' ) GPREC = .TRUE.
+
+      IF( LPREC ) THEN
+C
+        IF( GPREC ) THEN
+          IAGCNTL = ZPREC(POFELD, NOWE, NONS, KPR, KERR)
+        ELSE
+          IAGCNTL = IGPREC(PIFELD, NIWE, NINS, POFELD, NOWE, NONS,
+     X                   MWEIND, MNSIND, WFACT, RMAX, RINPNT, KPR, KERR)
+        ENDIF
+C
+        IF( IAGCNTL.GT.0 ) GOTO 900
+      ENDIF
+C
+C     Special code for poles if Gaussian input and regular output
+C
+C     North pole
+C
+C    Sinisa add pole point for staggerd lat-lon grids
+      IF( (NIREPR.EQ.JPREGULAR.AND.LSTAGGL).AND.
+     X    LREGOUT               .AND.
+     X    OINPOLE               .AND.
+     X    OONPOLE ) THEN
+C
+        IIOFF = 1
+        IOOFF = 1
+C
+        IF( LWIND ) THEN
+          IAGCNTL = IGPOLEW(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                      NOWE, MWEIND, MWEDIST, KPR, KERR)
+        ELSE
+           IAGCNTL = IGPOLEG(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                       NOWE, KPR, KERR)
+        ENDIF
+      ENDIF
+
+      IF( (NIREPR.EQ.JPGAUSSIAN).AND.
+     X    LREGOUT               .AND.
+     X    OINPOLE               .AND.
+     X    OONPOLE ) THEN
+C
+        IIOFF = 1
+        IOOFF = 1
+C
+        IF( LWIND ) THEN
+          IAGCNTL = IGPOLEW(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                      NOWE, MWEIND, MWEDIST, KPR, KERR)
+        ELSE
+           IAGCNTL = IGPOLEG(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                       NOWE, KPR, KERR)
+        ENDIF
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+      ENDIF
+C
+C     South pole
+C
+C    Sinisa add south pole point for staggerd lat-lon grids
+      IF( (NIREPR.EQ.JPREGULAR.AND.LSTAGGL).AND.
+     X    LREGOUT               .AND.
+     X    OISPOLE               .AND.
+     X    OOSPOLE ) THEN
+C
+        IIOFF = (NINS - 1) * NIWE + 1
+        IOOFF = (NONS - 1) * NOWE + 1
+C
+        IF( LWIND ) THEN
+          IAGCNTL = IGPOLEW(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                      NOWE, MWEIND, MWEDIST, KPR, KERR)
+        ELSE
+          IAGCNTL = IGPOLEG(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                      NOWE, KPR, KERR)
+C
+        ENDIF
+      ENDIF
+      IF( (NIREPR.EQ.JPGAUSSIAN).AND.
+     X    LREGOUT               .AND.
+     X    OISPOLE               .AND.
+     X    OOSPOLE ) THEN
+C
+        IIOFF = (NINS - 1) * NIWE + 1
+        IOOFF = (NONS - 1) * NOWE + 1
+C
+        IF( LWIND ) THEN
+          IAGCNTL = IGPOLEW(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                      NOWE, MWEIND, MWEDIST, KPR, KERR)
+        ELSE
+          IAGCNTL = IGPOLEG(PIFELD(IIOFF), NIWE, POFELD(IOOFF),
+     X                      NOWE, KPR, KERR)
+        ENDIF
+        IF( IAGCNTL.GT.0 ) GOTO 900
+C
+      ENDIF
+C
+C     LSM field - must be 0 or 1
+C
+C     Force processing real LSM
+        LSM_VALUES = .FALSE.
+        CALL GETENV('LSM_VALUES', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LSM_VALUES = .TRUE.
+
+      IF( .NOT.LSM_VALUES.AND.LSMPAR ) THEN
+        IAGCNTL = IGPLSM(POFELD, NOWE * NONS, KPR, KERR)
+        IF( IAGCNTL.GT.0 ) GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IAGCNTL: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iaidef.F b/interpolation/iaidef.F
new file mode 100755
index 0000000..dc683a8
--- /dev/null
+++ b/interpolation/iaidef.F
@@ -0,0 +1,553 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAIDEF (KSEC1, KSEC2, KIAREA, KLLEN, OICHNG,
+     1   KPR, KERR)
+C
+C---->
+C**** *IAIDEF*
+C
+C     PURPOSE
+C     _______
+C
+C     Generate an input field definition from the GRIB definition.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAIDEF (KSEC1, KSEC2, KIAREA, KLLEN, OICHNG, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KSEC1      - The GRIB Section 1 array for the input field.
+C
+C     KSEC2      - The GRIB Section 2 array for the input field.
+C
+C     KIAREA     - The previous input field area used for comparison.
+C
+C     KLLEN      - The previous latitude line lengths for a quasi
+C                  regular Gaussian field used for comparison.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KIAREA     - The area for this field.
+C
+C     KLLEN      - The latitude line lengths for a quasi regular
+C                  Gaussian field.
+C
+C     OICHNG     - A flag indicating whether the field definition has
+C                  changed since the previous call to this routine.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     21701 The data representation was not valid.
+C     21702 The scan mode was not valid.
+C
+C     Common block usage
+C     __________________
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     LSMCHNG      - LSM change flag is set.
+C     LSM          - LSM usage flag is set.
+C     LSMPAR       - LSM parameter flag is set.
+C     LPREC        - Precipitation flag is set.
+C     LWIND        - Wind flag is set.
+C
+C     NIGAUSS      - Input field Gaussian truncation is used and set.
+C     NIGRID       - Input field grid definition (WE/NS) is used and
+C                    set.
+C     NINS         - Number of grid points in NS direction for input
+C                    field is used and set.
+C     NIPARAM      - Input field parameter number is used and set.
+C     NIREPR       - Input field representation is used and set.
+C     NISCNM       - Input field scanning mode is set.
+C     NITABLE      - Input field table number is used and set.
+C     NIWE         - Number of grid points in WE direction for input
+C                    field is used and set.
+C
+C     EXTERNALS
+C     _________
+C
+C     PRECIP       - Says if field is to have 'precipitation' treatment
+C     SETPAR       - Standard routine used to generate "missing" data
+C                    values for GRIB fields.
+C     INTLOG       - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine uses sections 1 and 2 of the input GRIB field to
+C     generate the input field definition. This definition is
+C     compared with the previous field definition to see if any
+C     change of definition has occurred.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Subroutine arguments
+      LOGICAL OICHNG
+      INTEGER KPR, KERR
+      INTEGER KSEC1 (JPGRIB_ISEC1), KSEC2 (JPGRIB_ISEC2), KIAREA (4)
+      INTEGER KLLEN (*)
+C
+C     Local variables
+      LOGICAL GNLSM
+      INTEGER ITEMP, IMISS, IWEST, IEAST, IERR
+      INTEGER JSET
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 21700)
+C
+C     External functions
+C
+      LOGICAL PRECIP
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAIDEF: Section 1.',JPQUIET)
+C
+      IAIDEF = 0
+      IERR = 0
+      OICHNG = .FALSE.
+C
+C     Get GRIB missing data value
+C
+      CALL SETPAR (ITEMP, IMISS, KPR)
+C
+C     _______________________________________________________
+C
+C*    Section 2. Set Grib Section 2 variables and check consistency
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAIDEF: Section 2.',JPQUIET)
+C
+C     Representation
+C
+      IF (KSEC2 (JPSEC2_REP) .EQ. JPGAUSSIAN .AND.
+     1   KSEC2 (JPSEC2_QUASI) .EQ. 1) THEN
+         ITEMP = JPQUASI
+      ELSE
+         ITEMP = KSEC2 (JPSEC2_REP)
+      ENDIF
+C
+      IF (ITEMP .NE. NIREPR) THEN
+         NIREPR = ITEMP
+         OICHNG = .TRUE.
+      ENDIF
+C
+C     Only grid point input data allowed now
+C
+      IF (NIREPR .NE. JPQUASI .AND. NIREPR .NE. JPGAUSSIAN .AND.
+     X  NIREPR .NE. JPREGULAR) THEN
+        IAIDEF = JPROUTINE + 1
+        IF (KERR .GE. 0) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'IAIDEF: Illegal input representation = ',NIREPR)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAIDEF: Interpolation failing.',JPQUIET)
+        ENDIF
+        GO TO 900
+      ENDIF
+C
+C     scan mode
+C
+      NISCNM  = KSEC2 (JPSEC2_SCAN)
+C
+      IF (NISCNM .NE. 0) THEN
+        IAIDEF = JPROUTINE + 2
+        IF (KERR .GE. 0) THEN
+          CALL INTLOG(JP_ERROR,'IAIDEF: Illegal scan mode = ',NISCNM)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAIDEF: Interpolation failing.',JPQUIET)
+        ENDIF
+        GO TO 900
+      ENDIF
+C
+C     Number of lines North-South and West-East
+C
+      IF (KSEC2 (JPSEC2_NLAT) .NE. NINS) THEN
+        NINS = KSEC2 (JPSEC2_NLAT)
+        OICHNG = .TRUE.
+      ENDIF
+C
+      IF (NIREPR.NE.JPQUASI .AND. KSEC2(JPSEC2_NLONG).NE.NIWE) THEN
+        NIWE = KSEC2 (JPSEC2_NLONG)
+        OICHNG = .TRUE.
+      ENDIF
+C
+C     North, South, West and East limits
+C
+      IF (KSEC2 (JPSEC2_NORTH) * 10 .NE. KIAREA (JPNORTH) ) THEN
+        KIAREA (JPNORTH) = KSEC2 (JPSEC2_NORTH) * 10
+        OICHNG = .TRUE.
+      ENDIF
+C
+      IF (KSEC2 (JPSEC2_SOUTH) * 10 .NE. KIAREA (JPSOUTH) ) THEN
+        KIAREA (JPSOUTH) = KSEC2 (JPSEC2_SOUTH) * 10
+        OICHNG = .TRUE.
+      ENDIF
+C
+      IWEST = KSEC2 (JPSEC2_WEST) * 10
+C
+C     Make West and East points an ordered pair
+C
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IEAST = 0
+      ELSE
+        IEAST = KSEC2 (JPSEC2_EAST) * 10
+C
+        IF (IEAST .LT. IWEST) THEN
+          IF (IEAST .LE. 0) THEN
+            IEAST = IEAST + JP360
+          ELSE
+            IWEST = IWEST - JP360
+          ENDIF
+        ENDIF
+      ENDIF
+C
+      IF (IEAST .NE. KIAREA (JPEAST) ) THEN
+        KIAREA (JPEAST) = IEAST
+        OICHNG = .TRUE.
+      ENDIF
+C
+      IF (IWEST .NE. KIAREA (JPWEST) ) THEN
+        KIAREA (JPWEST) = IWEST
+        OICHNG = .TRUE.
+      ENDIF
+C
+      IF (NIREPR .EQ. JPREGULAR) THEN
+C
+C       Direction increments for regular grids
+C
+        IF (KSEC2 (JPSEC2_DLONG) .EQ. IMISS) THEN
+          ITEMP = (KIAREA (JPEAST) - KIAREA (JPWEST) ) / NIWE + 1
+        ELSE
+          ITEMP = KSEC2 (JPSEC2_DLONG) * 10
+        ENDIF
+C
+        IF (NIGRID (JPWESTEP) .NE. ITEMP) THEN
+          NIGRID (JPWESTEP) = ITEMP
+          OICHNG = .TRUE.
+        ENDIF
+C
+        IF (KSEC2 (JPSEC2_DLAT) .EQ. IMISS) THEN
+          ITEMP = (KIAREA (JPNORTH) - KIAREA (JPSOUTH) ) / NINS + 1
+        ELSE
+          ITEMP = KSEC2 (JPSEC2_DLAT) * 10
+        ENDIF
+C
+        IF (NIGRID (JPNSSTEP) .NE. ITEMP) THEN
+          NIGRID (JPNSSTEP) = ITEMP
+          OICHNG = .TRUE.
+        ENDIF
+C
+      ELSE IF (NIREPR .EQ. JPGAUSSIAN) THEN
+C
+        IF (NIGAUSS .NE. KSEC2 (JPSEC2_GTRUNC) ) THEN
+          NIGAUSS = KSEC2 (JPSEC2_GTRUNC)
+          OICHNG = .TRUE.
+        ENDIF
+C
+      ELSE IF (NIREPR .EQ. JPQUASI) THEN
+C
+        IF (NIGAUSS .NE. KSEC2 (JPSEC2_GTRUNC) ) THEN
+          NIGAUSS = KSEC2 (JPSEC2_GTRUNC)
+          NIWE = NIGAUSS * 4
+          OICHNG = .TRUE.
+        ENDIF
+C
+C     Set line length definitions for Quasi regular field
+C
+        DO 210 JSET = 1, NINS
+          IF (KLLEN (JSET) .NE. KSEC2 (JPSEC2_QUDEF + JSET) ) THEN
+            KLLEN (JSET) = KSEC2 (JPSEC2_QUDEF + JSET)
+            OICHNG = .TRUE.
+          ENDIF
+  210   CONTINUE
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 3. Set Grib Section 1 variables and flags
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAIDEF: Section 3.',JPQUIET)
+C
+      NITABLE = KSEC1 (JPSEC1_TABLE)
+      NIPARAM = KSEC1 (JPSEC1_PARAM)
+C
+C     Setup ECMWF local definition number and stream if applicable
+C
+      IF( KSEC1(24).EQ.1 ) THEN
+        NILOCAL = KSEC1(37)
+        NISTREM = KSEC1(40)
+      ELSE
+        NILOCAL = 0
+        NISTREM = 0
+      ENDIF
+C
+      LPREC = PRECIP()
+C
+      IF (NITABLE .EQ. 1) THEN
+C
+C       WMO International table for meteorological parameters
+C
+        LWIND = NIPARAM .EQ. JP_WMO_U .OR. NIPARAM .EQ. JP_WMO_V
+C
+        LSMPAR = NIPARAM .EQ. JP_WMO_LSM
+C
+        GNLSM = .NOT. (NIPARAM .EQ. JP_WMO_MSL .OR. LSMPAR)
+C
+        IF (GNLSM .NEQV. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = GNLSM
+        ENDIF
+C
+      ELSE IF (NITABLE .EQ. 128) THEN
+C
+C       ECMWF local code table 2 for meteorological parameters
+C
+        LWIND = NIPARAM .EQ. JP_U .OR. NIPARAM .EQ. JP_V .OR.
+     X      NIPARAM .EQ. JP_10U .OR. NIPARAM .EQ. JP_10V
+C
+        LSMPAR = NIPARAM .EQ. JP_LSM
+C
+        GNLSM = .NOT. (NIPARAM .EQ. JP_MSL .OR. LSMPAR)
+C
+        IF (GNLSM .NEQV. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = GNLSM
+        ENDIF
+C
+      ELSE IF (NITABLE .EQ. 129) THEN
+C
+C       ECMWF local code table for gradients of parameters
+C
+        LWIND = .FALSE.
+        LSMPAR = .FALSE.
+C
+        IF (.NOT. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = .TRUE.
+        ENDIF
+C
+      ELSE IF (NITABLE .EQ. 130) THEN
+C
+C       ECMWF local code table for ASTEX experiments
+C
+        LWIND = .FALSE.
+        LSMPAR = .FALSE.
+C
+        IF (.NOT. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = .TRUE.
+        ENDIF
+C
+      ELSE IF (NITABLE .EQ. 131) THEN
+C
+C       ECMWF local code table for probability forecasts
+C
+        LWIND = .FALSE.
+        LSMPAR = .FALSE.
+C
+        IF (.NOT. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = .TRUE.
+        ENDIF
+C
+      ELSE IF (NITABLE .EQ. 140) THEN
+C
+C       ECMWF local code table for wave models
+C
+        LWIND = .FALSE.
+        LSMPAR = .FALSE.
+C
+        IF (.NOT. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = .TRUE.
+        ENDIF
+C
+      ELSE IF (NITABLE .EQ. 150) THEN
+C
+C       ECMWF local code table ocean data
+C
+        LWIND = .FALSE.
+        LSMPAR = .FALSE.
+C
+        IF (.NOT. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = .TRUE.
+        ENDIF
+C
+      ELSE
+C
+C       Unexpected code table found
+C
+        LWIND = .FALSE.
+        LSMPAR = .FALSE.
+C
+        IF (.NOT. LSM) THEN
+          LSMCHNG = .TRUE.
+          LSM = .TRUE.
+        ENDIF
+C
+      ENDIF
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'IAIDEF: Input field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IAIDEF: Parameter value = ',NIPARAM)
+        CALL INTLOG(JP_DEBUG,'IAIDEF: Representation = ',NIREPR)
+        IF (NIWE .NE. 0) CALL INTLOG(JP_DEBUG,
+     X    'IAIDEF: Number W-E = ',NIWE)
+        IF (NINS .NE. 0) CALL INTLOG(JP_DEBUG,
+     X    'IAIDEF: Number N-S = ',NINS)
+        IF (NIREPR .EQ. JPGAUSSIAN .OR. NIREPR .EQ. JPQUASI)
+     X    CALL INTLOG(JP_DEBUG,'IAIDEF: Gaussian truncation = ',NIGAUSS)
+        IF (NIREPR .EQ. JPREGULAR .AND. NIGRID (1) .NE. 0) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Grid WE = ',NIGRID (1))
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Grid NS = ',NIGRID (2))
+        ENDIF
+        IF (KIAREA (1) .NE. 0) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Area North = ',KIAREA(1))
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Area West  = ',KIAREA(2))
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Area South = ',KIAREA(3))
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Area East  = ',KIAREA(4))
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'IAIDEF: Control flag status:',JPQUIET)
+C
+        IF( OICHNG ) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF:Input fld change TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAIDEF:Input fld change FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSMCHNG ) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: LSM change TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAIDEF: LSM change FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSM ) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: LSM flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAIDEF: LSM flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LWIND ) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Wind flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Wind flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LPREC ) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Precipitn flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAIDEF: Precipitn flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSMPAR ) THEN
+          CALL INTLOG(JP_DEBUG,'IAIDEF: LSM param flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IAIDEF: LSM param flag FALSE',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAIDEF: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iainit.F b/interpolation/iainit.F
new file mode 100755
index 0000000..17ea573
--- /dev/null
+++ b/interpolation/iainit.F
@@ -0,0 +1,211 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAINIT (KPR, KERR)
+C
+C---->
+C**** *IAINIT*
+C
+C     PURPOSE
+C     _______
+C
+C     Initialise common decks for grid-pt to grid-pt interpolation.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAINIT (KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     grfixed.h    - The include file contains all the array space
+C                    for grid to grid interpolation.
+C
+C     MILLEN       - The array of latitude line lengths for a quasi
+C                    regular Gaussian grid is set.
+C
+C     memreq.h     - This file contains the memory request
+C                    definition variables.
+C
+C     MADDR        - The base addresses of the currently allocated
+C                    memory segments are set.
+C     MREQUEST     - The sizes of the current memory requests are set.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG   - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     Initialise common decks for grid-pt to grid-pt interpolation:
+C                - memory access arrays,
+C                - quasi regular definition.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     None.
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF       Aug 1994
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "memreq.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Dummy arguments
+C
+      INTEGER KPR, KERR
+C
+C     Local variables
+C
+      INTEGER JSET
+C
+      INTEGER JPROUTINE
+C
+      PARAMETER (JPROUTINE = 21100)
+C
+C     External functions
+C
+C     Transform definition variables that must be preserved
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAINIT: Section 1.',JPQUIET)
+C
+      IAINIT = 0
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,
+     X  'IAINIT : Grid-pt to grid-pt common decks initialised',JPQUIET)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Initialise memory access arrays.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAINIT: Section 2.',JPQUIET)
+C
+      DO 210 JSET = 1, JPLEVEL
+         MREQUEST (JSET) = 0
+         MADDR (JSET) = 0
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Initialise quasi regular definition
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAINIT: Section 3.',JPQUIET)
+C
+      DO 310 JSET = 1, JPLAT
+         MILLEN (JSET) = 0
+  310 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IAINIT: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iaintgg.F b/interpolation/iaintgg.F
new file mode 100755
index 0000000..35003de
--- /dev/null
+++ b/interpolation/iaintgg.F
@@ -0,0 +1,552 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAINTGG (KIFELD, KILEN, PWEST, PEAST, PNORTH,
+     1   PSOUTH, KGAUSS, KOFELD, KOLEN, KOBITS, KPR, KERR)
+C
+C---->
+C**** *IAINTGG*
+C
+C     PURPOSE
+C     _______
+C
+C     The controlling routine for interpolating between a GRIB input
+C     field and a Gaussian output field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAINTGG (KIFELD, KILEN, PWEST, PEAST, PNORTH, PSOUTH,
+C    1   KGAUSS, KOFELD, KOLEN, KOBITS, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KIFELD     - The input field provided by the calling routine.
+C
+C     KILEN      - The length of the input field.
+C
+C     PWEST      - The Western limit of the output field area.
+C
+C     PEAST      - The Eastern limit of the output field area.
+C
+C     PNORTH     - The Northern limit of the output field area.
+C
+C     PSOUTH     - The Southern limit of the output field area.
+C
+C     KGAUSS     - The Gaussian truncation for the output field.
+C
+C     KOLEN      - The length of the output field.
+C
+C     KOBITS     - The number of bits used for packing the output array.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KOFELD     - The output field returned to the calling routine.
+C
+C     KOLEN      - The amount of the output array used for the packed
+C                  GRIB field.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     21501 The number of bits requested was outside the allowed
+C           range 0 to 24.
+C     21502 The input data representation was not valid when the GRIB
+C           field had been expanded.
+C
+C     Common block usage
+C     __________________
+C
+C     grfixed.h    - The include file contains all the array space
+C                    for grid to grid interpolation.
+C
+C     MILLEN       - The array of latitude line lengths for a quasi
+C                    regular input field is used.
+C     RIGAUSS      - Real array of input field Gaussian latitudes is
+C                    used.
+C     ROGAUSS      - Real array of output field Gaussian latitudes is
+C                    used.
+C
+C     ouspace.h    - This file contains the work space array
+C                    definitions for the arrays to hold the unpacked
+C                    real data from GRIB fields.
+C
+C     RIFELD       - The expanded input field is set and used.
+C     ROFELD       - The expanded output field is set and used.
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     LCHANGE      - Process change flag is set.
+C
+C     NIAREA       - Input field area definition (N/W/S/E) is set.
+C     NIGAUSS      - Input field Gaussian truncation is used.
+C     NIGRID       - Input field grid definition (WE/NS) is used.
+C     NINS         - Number of grid points in NS direction for input
+C                    field is used.
+C     NIREPR       - Input field representation is used.
+C     NIWE         - Number of grid points in WE direction for input
+C                    field is used.
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOACC        - Number of packing bits to be used for output
+C                    GRIB field is set.
+C     NOAREA       - Output field area definition (N/W/S/E) is set.
+C     NOGAUSS      - Output field Gaussian truncation is set.
+C     NONS         - Number of grid points in NS direction for output
+C                    field is set and used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is set and used.
+C
+C     EXTERNALS
+C     _________
+C
+C     ABORTX     - Standard routine to kill task.
+C     GRIBEX     - Standard routine to unpack or pack a GRIB field.
+C     IAGCNTL    - Perform regular grid to grid point interpolation.
+C     IARCNTL    - Perform regular grid to grid point interpolation.
+C     IAIDEF     - Initialise the input field definition variables
+C                  from a GRIB definition
+C     IAOGDEF    - Initialise the output field definition variables
+C                  from the user supplied values.
+C     IARESET    - Create the output field definition in GRIB format.
+C     IARMEM     - Get space for the unpacked input and output
+C                  fields.
+C     IGLSIZE    - Evaluate the array sizes for a regular
+C                  latitude/longitude grid and area.
+C     IGSIZE     - Evaluate the array sizes for a Gaussian truncation
+C                  and area.
+C     IRSIZE     - Evaluate the array sizes for a quasi regular
+C                  Gaussian field.
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This is purely a controlling routine with all the work being
+C     performed in the external routines.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 7 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "ouspace.h"
+C
+C     Function arguments
+C
+      INTEGER KGAUSS, KILEN, KOLEN, KOBITS, KPR, KERR
+      REAL PWEST, PEAST, PNORTH, PSOUTH
+      INTEGER KIFELD (*), KOFELD (*)
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+      LOGICAL GIWEGLOBE, GINPOLE, GISPOLE, GOWEGLOBE, GONPOLE,
+     1   GOSPOLE, GICHNG, GOCHNG
+      INTEGER IILN, ITOTAL, IOLN
+      INTEGER IIAREA (4), IOAREA (4)
+      INTEGER JLAT, JSET
+      INTEGER IERR
+      INTEGER ISEC0 (JPGRIB_ISEC0), ISEC1 (JPGRIB_ISEC1)
+      INTEGER ISEC2 (JPGRIB_ISEC2), ISEC3 (JPGRIB_ISEC3)
+      INTEGER ISEC4 (JPGRIB_ISEC4)
+      INTEGER ZSEC2 (JPGRIB_RSEC2), ZSEC3 (JPGRIB_RSEC3)
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 21500)
+C
+C     External functions
+C
+      INTEGER IAGCNTL, IARCNTL, IAIDEF, IAOGDEF, IARESET, IARMEM,
+     1   IGLSIZE, IGSIZE, IRSIZE
+C
+C     Transform definition variables that must be preserved
+C
+      SAVE IILN, IIAREA, IOLN, IOAREA, ITOTAL
+      SAVE GIWEGLOBE, GINPOLE, GISPOLE, GOWEGLOBE, GONPOLE,
+     1   GOSPOLE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 1.',JPQUIET)
+C
+      IAINTGG = 0
+C
+      IERR = 0
+C
+      IF (KPR .GE. 1) THEN
+         CALL INTLOG(JP_DEBUG,'IAINTGG: Input parameters',JPQUIET)
+         CALL INTLOG(JP_DEBUG,'IAINTGG: Input array length = ',KILEN)
+         CALL INTLOG(JP_DEBUG,'IAINTGG: Output array length = ',KOLEN)
+         CALL INTLOG(JP_DEBUG,'IAINTGG: Gaussian truncation = ',KGAUSS)
+         CALL INTLOG(JP_DEBUG,'IAINTGG: Out field packing bits=',KOBITS)
+         CALL INTLOGR(JP_DEBUG,'IAINTGG: Area North = ',PNORTH)
+         CALL INTLOGR(JP_DEBUG,'IAINTGG: Area West = ',PWEST)
+         CALL INTLOGR(JP_DEBUG,'IAINTGG: Area South = ',PSOUTH)
+         CALL INTLOGR(JP_DEBUG,'IAINTGG: Area East = ',PEAST)
+      ENDIF
+C
+      IF (KOBITS .LT. 0 .OR. KOBITS .GT. 24) THEN
+        IAINTGG = JPROUTINE + 1
+        IF (KERR .GE. 0) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'IAINTGG: No. bits requested = ',KOBITS)
+          CALL INTLOG(JP_ERROR,
+     X      'IAINTGG: Range allowed is <0 - 24>',JPQUIET)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAINTGG: Interpolation failing.',JPQUIET)
+        ENDIF
+        GO TO 900
+      ENDIF
+C
+      NOACC = KOBITS
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Input grid definition from GRIB file
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 2.',JPQUIET)
+C
+C     Unpack GRIB sections 0, 1 and 2 only
+C
+      IERR = KERR
+C
+C     CALL GRSDBG (KPR)
+C
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X   RIFELD, 1, KIFELD, KILEN, KOLEN, 'I', IERR)
+C
+      IF (IERR .NE. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+      IERR = IAIDEF (ISEC1, ISEC2, IIAREA, MILLEN, GICHNG, KPR, KERR)
+C
+      IF (IERR .GT. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+      IF (GICHNG) THEN
+C
+        DO 210 JSET = 1, 4
+          NIAREA (JSET) = IIAREA (JSET)
+  210   CONTINUE
+C
+        IF (NIREPR .EQ. JPGAUSSIAN) THEN
+C
+          IERR = IGSIZE (NIGAUSS, NIAREA, NIWE, NINS, IILN, RIGAUSS,
+     1         GIWEGLOBE, GINPOLE, GISPOLE, KPR, KERR)
+C
+          IF (IERR .GT. 0) THEN
+            IAINTGG = IERR
+            GO TO 900
+          ENDIF
+C
+          ITOTAL = NIWE * NINS
+C
+        ELSE IF (NIREPR .EQ. JPQUASI) THEN
+C
+          IERR = IRSIZE (NIGAUSS, NIAREA, MILLEN, NIWE, NINS, IILN,
+     1         ITOTAL, RIGAUSS, GIWEGLOBE, GINPOLE, GISPOLE, KPR, KERR)
+C
+          IF (IERR .GT. 0) THEN
+            IAINTGG = IERR
+            GO TO 900
+          ENDIF
+C
+        ELSE IF (NIREPR .EQ. JPREGULAR) THEN
+C
+          IERR = IGLSIZE (NIGRID, NIAREA, NIWE, NINS, IILN, GIWEGLOBE,
+     X         GINPOLE, GISPOLE, KPR, KERR)
+C
+          IF (IERR .GT. 0) THEN
+            IAINTGG = IERR
+            GO TO 900
+          ENDIF
+C
+          ITOTAL = NIWE * NINS
+C
+        ELSE
+C
+          IAINTGG = JPROUTINE + 2
+          IF (KERR .GE. 0) CALL INTLOG(JP_ERROR,
+     X      'IAINTGG: Invalid input representation = ',NIREPR)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAINTGG: Interpolation failing.',JPQUIET)
+          GO TO 900
+C
+        ENDIF
+      ELSE
+        IF (NIREPR .NE. JPQUASI) THEN
+          ITOTAL = NIWE * NINS
+        ELSE
+          ITOTAL = 0
+          DO 220 JLAT = 1, NINS
+            ITOTAL = ITOTAL + MILLEN (JLAT)
+  220     CONTINUE
+        ENDIF
+      ENDIF
+C
+      LCHANGE = LCHANGE .OR. GICHNG
+C
+C     _______________________________________________________
+C
+C*    Section 3. Output field definiton from parameters
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 3.',JPQUIET)
+C
+      IERR = IAOGDEF (PWEST, PEAST, PNORTH, PSOUTH, KGAUSS, IOAREA,
+     1   GOCHNG, GIWEGLOBE, GINPOLE, GISPOLE, NIAREA, KPR, KERR)
+C
+      IF (IERR .GT. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+      IF (GOCHNG) THEN
+C
+        DO 310 JSET = 1, 4
+          NOAREA (JSET) = IOAREA (JSET)
+  310   CONTINUE
+C
+        NOWE = 0
+        NONS = 0
+C
+        IERR = IGSIZE (NOGAUSS, NOAREA, NOWE, NONS, IOLN, ROGAUSS,
+     1      GOWEGLOBE, GONPOLE, GOSPOLE, KPR, KERR)
+C
+        IF (IERR .GT. 0) THEN
+          IAINTGG = IERR
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+      LCHANGE = LCHANGE .OR. GOCHNG
+C
+C     _______________________________________________________
+C
+C*    Section 4. Get space for REAL input and output arrays
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 4.',JPQUIET)
+C
+      IF (LCHANGE) THEN
+C
+        IERR = IARMEM (ITOTAL, NOWE * NONS, KPR, KERR)
+C
+        IF (IERR .GT. 0) THEN
+          IAINTGG = IERR
+          GO TO 900
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 5. Fully unpack the GRIB array
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 5.',JPQUIET)
+C
+      IERR = KERR
+C
+C     CALL GRSDBG (KPR)
+C
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X   RIFELD, ITOTAL, KIFELD, KILEN, KOLEN, 'D', IERR)
+C
+      IF (IERR .NE. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 6. Basic interpolation from input to output field
+C     _______________________________________________________
+C
+  600 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 6.',JPQUIET)
+C
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IARCNTL (RIFELD, ITOTAL, ROFELD, NOWE * NONS, IILN,
+     X      GIWEGLOBE, GINPOLE, GISPOLE, IOLN, GOWEGLOBE, GONPOLE,
+     X      GOSPOLE, KPR, KERR)
+      ELSE
+        IERR = IAGCNTL (RIFELD, ITOTAL, ROFELD, NOWE * NONS, IILN,
+     X      GIWEGLOBE, GINPOLE, GISPOLE, IOLN, GOWEGLOBE, GONPOLE,
+     X      GOSPOLE, KPR, KERR)
+      ENDIF
+C
+      IF (IERR .NE. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 7. Repack GRIB code
+C     _______________________________________________________
+C
+  700 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 7.',JPQUIET)
+C
+      IERR = IARESET (ISEC2, ISEC4, NOWE * NONS, KPR, KERR)
+C
+      IF (IERR .NE. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+      IERR = KERR
+C
+C     CALL GRSDBG (KPR)
+C
+C     PACKING specified can be second-order, simple or archive value
+C
+      IF( NOHFUNC.EQ.'K' ) THEN
+        HFUNC = 'K'
+        ISEC4(4)  = 64
+        ISEC4(6)  = 16
+        ISEC4(9)  = 32
+        ISEC4(10) = 16
+        ISEC4(12) = 8
+        ISEC4(13) = 4
+        ISEC4(14) = 0
+        ISEC4(15) = -1
+      ELSE IF( NOHFUNC.EQ.'S' ) THEN
+        HFUNC = 'C'
+        ISEC4(4)  = 0
+        ISEC4(6)  = 0
+      ELSE IF( NOHFUNC.EQ.'A' ) THEN
+        IF( ISEC4(4).EQ.64 ) THEN
+          HFUNC = 'K'
+        ELSE
+          HFUNC = 'C'
+        ENDIF
+      ENDIF
+C
+      IF( LIMISSV ) THEN
+        ISEC1(5) = 192
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+      ENDIF
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X   ROFELD, NOWE * NONS, KOFELD, KOLEN, KOLEN, HFUNC, IERR)
+C
+      IF (IERR .NE. 0) THEN
+        IAINTGG = IERR
+        GO TO 900
+      ENDIF
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,
+     X  'IAINTGG: Output field length is ',KOLEN)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTGG: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iaintll.F b/interpolation/iaintll.F
new file mode 100755
index 0000000..ea05749
--- /dev/null
+++ b/interpolation/iaintll.F
@@ -0,0 +1,577 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAINTLL (KIFELD, KILEN, PWEST, PEAST, PNORTH,
+     1   PSOUTH, PNSINC, PWEINC, KOFELD, KOLEN, KOBITS, KPR, KERR)
+C
+C---->
+C**** *IAINTLL*
+C
+C     PURPOSE
+C     _______
+C
+C     The global controlling routine for interpolating between a GRIB
+C     input field and a regular latitude longitude output field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAINTLL (KIFELD, KILEN, PWEST, PEAST, PNORTH, PSOUTH,
+C    1   PNSINC, PWEINC, KOFELD, KOLEN, KOBITS, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KIFELD     - The input field provided by the calling routine.
+C
+C     KILEN      - The length of the input field.
+C
+C     PWEST      - The Western limit of the output field area.
+C
+C     PEAST      - The Eastern limit of the output field area.
+C
+C     PNORTH     - The Northern limit of the output field area.
+C
+C     PSOUTH     - The Southern limit of the output field area.
+C
+C     PNSINC     - The North-South stride for the output field.
+C
+C     PWEINC     - The West-East stride for the output field.
+C
+C     KOLEN      - The length of the output field.
+C
+C     KOBITS     - The number of bits used for packing the output array.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KOFELD     - The output field returned to the calling routine.
+C
+C     KOLEN      - The amount of the output array used for the packed
+C                  GRIB field.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     21301 The number of bits requested was outside the allowed
+C           range 0 to 24.
+C     21302 The input data representation was not valid when the GRIB
+C           field had been expanded.
+C
+C     Common block usage
+C     __________________
+C
+C     grfixed.h    - The include file contains all the array space
+C                    for grid to grid interpolation.
+C
+C     MILLEN       - The array of latitude line lengths for a quasi
+C                    regular input field is used.
+C     RIGAUSS      - Real array of input field Gaussian latitudes is
+C                    used.
+C
+C     ouspace.h    - This file contains the work space array
+C                    definitions for the arrays to hold the unpacked
+C                    real data from GRIB fields.
+C
+C     RIFELD       - The expanded input field is set and used.
+C     ROFELD       - The expanded output field is set and used.
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     LCHANGE      - Process change flag is set.
+C
+C     NIAREA       - Input field area definition (N/W/S/E) is set.
+C     NIGAUSS      - Input field Gaussian truncation is used.
+C     NIGRID       - Input field grid definition (WE/NS) is used.
+C     NINS         - Number of grid points in NS direction for input
+C                    field is used.
+C     NIREPR       - Input field representation is used.
+C     NIWE         - Number of grid points in WE direction for input
+C                    field is used.
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOACC        - Number of packing bits to be used for output
+C                    GRIB field is set.
+C     NOAREA       - Output field area definition (N/W/S/E) is set.
+C     NOGRID       - Output field grid definition (WE/NS) is used..
+C     NONS         - Number of grid points in NS direction for output
+C                    field is set and used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is set and used.
+C
+C     EXTERNALS
+C     _________
+C
+C     ABORTX     - Standard routine to kill task.
+C     GRIBEX     - Standard routine to unpack or pack a GRIB field.
+C     IAGCNTL    - Perform regular grid to grid point interpolation.
+C     IARCNTL    - Perform regular grid to grid point interpolation.
+C     IAIDEF     - Initialise the input field definition variables
+C                  from a GRIB definition
+C     IAOLDEF    - Initialise the output field definition variables
+C                  from the user supplied values.
+C     IARESET    - Create the output field definition in GRIB format.
+C     IARMEM     - Get space for the unpacked input and output
+C                  fields.
+C     IGLSIZE    - Evaluate the array sizes for a regular
+C                  latitude/longitude grid and area.
+C     IGSIZE     - Evaluate the array sizes for a Gaussian truncation
+C                  and area.
+C     IRSIZE     - Evaluate the array sizes for a quasi regular
+C                  Gaussian field.
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This is purely a controlling routine with all the work being
+C     performed in the external routines.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 7 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "ouspace.h"
+C
+C     Dummy arguments
+C
+      INTEGER KILEN, KOLEN, KOBITS, KPR, KERR
+C
+      REAL PWEST, PEAST, PNORTH, PSOUTH, PNSINC, PWEINC
+C
+      INTEGER KIFELD (*), KOFELD (*)
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+      LOGICAL GIWEGLOBE, GINPOLE, GISPOLE, GOWEGLOBE, GONPOLE,
+     1   GOSPOLE, GICHNG, GOCHNG
+C
+      INTEGER IILN, ITOTAL, IOLN
+C
+      INTEGER IIAREA (4), IOAREA (4)
+C
+      INTEGER JLAT, JSET
+C
+      INTEGER IERR
+C
+      INTEGER ISEC0 (JPGRIB_ISEC0), ISEC1 (JPGRIB_ISEC1)
+      INTEGER ISEC2 (JPGRIB_ISEC2), ISEC3 (JPGRIB_ISEC3)
+      INTEGER ISEC4 (JPGRIB_ISEC4)
+C
+      INTEGER ZSEC2 (JPGRIB_RSEC2), ZSEC3 (JPGRIB_RSEC3)
+C
+      INTEGER JPROUTINE
+C
+      PARAMETER (JPROUTINE = 21300)
+C
+C     External functions
+C
+      INTEGER IAGCNTL, IARCNTL, IAIDEF, IAOLDEF, IARESET, IARMEM,
+     1   IGSIZE, IGLSIZE, IRSIZE
+C
+C     Transform definition variables that must be preserved
+C
+      SAVE IILN, IIAREA, IOLN, IOAREA, ITOTAL
+      SAVE GIWEGLOBE, GINPOLE, GISPOLE, GOWEGLOBE, GONPOLE,
+     1   GOSPOLE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 1.',JPQUIET)
+C
+      IAINTLL = 0
+C
+      IERR = 0
+C
+      IF (KPR .GE. 1) THEN
+         CALL INTLOG(JP_DEBUG,'IAINTLL: Input parameters',JPQUIET)
+         CALL INTLOG(JP_DEBUG,'IAINTLL: Input array length = ',KILEN)
+         CALL INTLOG(JP_DEBUG,'IAINTLL: Output array length = ',KOLEN)
+         CALL INTLOG(JP_DEBUG,'IAINTLL: Out field packing bits=',KOBITS)
+         CALL INTLOGR(JP_DEBUG,'IAINTLL: W-E increment is ',PWEINC)
+         CALL INTLOGR(JP_DEBUG,'IAINTLL: N-S increment is ',PNSINC)
+         CALL INTLOGR(JP_DEBUG,'IAINTLL: Area North = ',PNORTH)
+         CALL INTLOGR(JP_DEBUG,'IAINTLL: Area West = ',PWEST)
+         CALL INTLOGR(JP_DEBUG,'IAINTLL: Area South = ',PSOUTH)
+         CALL INTLOGR(JP_DEBUG,'IAINTLL: Area East = ',PEAST)
+      ENDIF
+C
+      IF (KOBITS .LT. 0 .OR. KOBITS .GT. 24) THEN
+C
+        IAINTLL = JPROUTINE + 1
+        IF (KERR .GE. 0) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'IAINTLL: No. bits requested = ',KOBITS)
+          CALL INTLOG(JP_ERROR,
+     X      'IAINTLL: Range allowed is <0 - 24>',JPQUIET)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAINTLL: Interpolation failing.',JPQUIET)
+        ENDIF
+        GO TO 900
+C
+      ENDIF
+C
+      NOACC = KOBITS
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Input grid definition from GRIB file
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 2.',JPQUIET)
+C
+C     Unpack GRIB sections 0, 1 and 2 only
+C
+      IERR = KERR
+C
+C     CALL GRSDBG (KPR)
+C
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     1   RIFELD, 1, KIFELD, KILEN, KOLEN, 'I', IERR)
+C
+      IF (IERR .NE. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+      IERR = IAIDEF (ISEC1, ISEC2, IIAREA, MILLEN, GICHNG, KPR, KERR)
+C
+      IF (IERR .GT. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+      IF (GICHNG) THEN
+C
+        DO 210 JSET = 1, 4
+          NIAREA (JSET) = IIAREA (JSET)
+  210   CONTINUE
+C
+        IF (NIREPR .EQ. JPGAUSSIAN) THEN
+C
+          IERR = IGSIZE (NIGAUSS, NIAREA, NIWE, NINS, IILN, RIGAUSS,
+     1         GIWEGLOBE, GINPOLE, GISPOLE, KPR, KERR)
+C
+          IF (IERR .GT. 0) THEN
+            IAINTLL = IERR
+            GO TO 900
+          ENDIF
+C
+          ITOTAL = NIWE * NINS
+C
+        ELSE IF (NIREPR .EQ. JPQUASI) THEN
+C
+          IERR = IRSIZE (NIGAUSS, NIAREA, MILLEN, NIWE, NINS, IILN,
+     1         ITOTAL, RIGAUSS, GIWEGLOBE, GINPOLE, GISPOLE, KPR, KERR)
+C
+          IF (IERR .GT. 0) THEN
+            IAINTLL = IERR
+            GO TO 900
+          ENDIF
+C
+        ELSE IF (NIREPR .EQ. JPREGULAR) THEN
+C
+          IERR = IGLSIZE (NIGRID, NIAREA, NIWE, NINS, IILN,
+     1         GIWEGLOBE, GINPOLE, GISPOLE, KPR, KERR)
+C
+          IF (IERR .GT. 0) THEN
+            IAINTLL = IERR
+            GO TO 900
+          ENDIF
+C
+          ITOTAL = NIWE * NINS
+C
+        ELSE
+C
+          IAINTLL = JPROUTINE + 2
+          IF (KERR .GE. 0) CALL INTLOG(JP_ERROR,
+     X      'IAINTLL: Invalid input representation = ',NIREPR)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAINTLL: Interpolation failing.',JPQUIET)
+
+          GO TO 900
+C
+        ENDIF
+C
+      ELSE
+        IF (NIREPR .NE. JPQUASI) THEN
+          ITOTAL = NIWE * NINS
+        ELSE
+          ITOTAL = 0
+          DO 220 JLAT = 1, NINS
+            ITOTAL = ITOTAL + MILLEN (JLAT)
+  220     CONTINUE
+        ENDIF
+      ENDIF
+C
+      LCHANGE = LCHANGE .OR. GICHNG
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Output field definiton from parameters
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 3.',JPQUIET)
+C
+      IERR = IAOLDEF (PWEST, PEAST, PNORTH, PSOUTH, PNSINC, PWEINC,
+     1   IOAREA, GOCHNG, GIWEGLOBE, GINPOLE, GISPOLE, NIAREA, KPR,
+     2   KERR)
+C
+      IF (IERR .GT. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+      IF (GOCHNG) THEN
+C
+         DO 310 JSET = 1, 4
+            NOAREA (JSET) = IOAREA (JSET)
+  310    CONTINUE
+C
+         NOWE = 0
+         NONS = 0
+C
+         IERR = IGLSIZE (NOGRID, NOAREA, NOWE, NONS, IOLN, GOWEGLOBE,
+     1      GONPOLE, GOSPOLE, KPR, KERR)
+C
+         IF (IERR .GT. 0) THEN
+            IAINTLL = IERR
+            GO TO 900
+         ENDIF
+      ENDIF
+C
+      LCHANGE = LCHANGE .OR. GOCHNG
+C
+C     _______________________________________________________
+C
+C
+C*    Section 4. Get space for REAL input and output arrays
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 4.',JPQUIET)
+C
+      IF (LCHANGE) THEN
+C
+         IERR = IARMEM (ITOTAL, NOWE * NONS, KPR, KERR)
+C
+         IF (IERR .GT. 0) THEN
+            IAINTLL = IERR
+            GO TO 900
+         ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 5. Fully unpack the GRIB array
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 5.',JPQUIET)
+C
+      IERR = KERR
+C
+C     CALL GRSDBG (KPR)
+C
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     1   RIFELD, ITOTAL, KIFELD, KILEN, KOLEN, 'D', IERR)
+C
+      IF (IERR .NE. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 6. Basic interpolation from input to output field
+C     _______________________________________________________
+C
+  600 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 6.',JPQUIET)
+C
+      IF (NIREPR .EQ. JPQUASI) THEN
+         IERR = IARCNTL (RIFELD, ITOTAL, ROFELD, NOWE * NONS, IILN,
+     1      GIWEGLOBE, GINPOLE, GISPOLE, IOLN, GOWEGLOBE, GONPOLE,
+     1      GOSPOLE, KPR, KERR)
+      ELSE
+         IERR = IAGCNTL (RIFELD, ITOTAL, ROFELD, NOWE * NONS, IILN,
+     1      GIWEGLOBE, GINPOLE, GISPOLE, IOLN, GOWEGLOBE, GONPOLE,
+     1      GOSPOLE, KPR, KERR)
+      ENDIF
+C
+      IF (IERR .NE. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 7. Repack GRIB code
+C     _______________________________________________________
+C
+  700 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 7.',JPQUIET)
+C
+      IERR = IARESET (ISEC2, ISEC4, NOWE * NONS, KPR, KERR)
+C
+      IF (IERR .NE. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+      IERR = KERR
+C
+C     CALL GRSDBG (KPR)
+C
+C     PACKING specified can be second-order, simple or archive value
+C
+      IF( NOHFUNC.EQ.'K' ) THEN
+        HFUNC = 'K'
+        ISEC4(4)  = 64
+        ISEC4(6)  = 16
+        ISEC4(9)  = 32
+        ISEC4(10) = 16
+        ISEC4(12) = 8
+        ISEC4(13) = 4
+        ISEC4(14) = 0
+        ISEC4(15) = -1
+      ELSE IF( NOHFUNC.EQ.'S' ) THEN
+        HFUNC = 'C'
+        ISEC4(4)  = 0
+        ISEC4(6)  = 0
+      ELSE IF( NOHFUNC.EQ.'A' ) THEN
+        IF( ISEC4(4).EQ.64 ) THEN
+          HFUNC = 'K'
+        ELSE
+          HFUNC = 'C'
+        ENDIF
+      ENDIF
+C
+      IF( LIMISSV ) THEN
+        ISEC1(5) = 192
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+      ENDIF
+      CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     1   ROFELD, NOWE * NONS, KOFELD, KOLEN, KOLEN, HFUNC, IERR)
+C
+      IF (IERR .NE. 0) THEN
+         IAINTLL = IERR
+         GO TO 900
+      ENDIF
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,
+     X  'IAINTLL: Output array length = ',KOLEN)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAINTLL: Section 9.',JPQUIET)
+C
+ 9002 FORMAT (' IAINTLL ERROR', I6, ' - Input representation', I6,
+     1   ' is not valid')
+C
+      RETURN
+      END
diff --git a/interpolation/iaogdef.F b/interpolation/iaogdef.F
new file mode 100755
index 0000000..c990cee
--- /dev/null
+++ b/interpolation/iaogdef.F
@@ -0,0 +1,421 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAOGDEF (PWEST, PEAST, PNORTH, PSOUTH,
+     1   KGAUSS, KAREA, OCHNG, OIWEGLOBE, OINPOLE, OISPOLE,
+     2   KIAREA, KPR, KERR)
+C
+C---->
+C**** *IAOGDEF*
+C
+C     PURPOSE
+C     _______
+C
+C     Set the output field definition variables.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAOGDEF (PWEST, PEAST, PNORTH, PSOUTH, KGAUSS, KAREA,
+C    1   OCHNG, OIWEGLOBE, OINPOLE, OISPOLE, KIAREA, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PWEST      - The Western limit of the output field area.
+C
+C     PEAST      - The Eastern limit of the output field area.
+C
+C     PNORTH     - The Northern limit of the output field area.
+C
+C     PSOUTH     - The Southern limit of the output field area.
+C
+C     KGAUSS     - The Gaussian truncation for the output field.
+C
+C     KAREA      - The previous output field area used for checking
+C                  for definition changes.
+C
+C     OIWEGLOBE  - Flag indicating whether the INPUT field spans the
+C                  globe in the West-East direction.
+C
+C     OINPOLE    - Flag indicating whether the INPUT field includes
+C                  the North polar line of latitude.
+C
+C     OISPOLE    - Flag indicating whether the INPUT field includes
+C                  the South polar line of latitude.
+C
+C     KIAREA     - The input field area which will be used for an
+C                  uninitialised output field area when the input
+C                  field is not global.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KAREA      - The output field area if the definition has changed.
+C
+C     OCHNG      - A flag variable indicating whether the definition
+C                  has changed.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     21601 An illegal Gaussian truncation was requested.
+C     21602 The default West-East output limits for a non-global
+C           input field did not match the increment.
+C     21603 Default North-South limits were specified for a
+C           non-global input field. This is not allowed for a
+C           Gaussian output field.
+C
+C     Common block usage
+C     __________________
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOGAUSS      - Output field Gaussian truncation is set.
+C     NOREPR       - Output field representation is set.
+C     NOSCNM       - Output field scanning mode is set.
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     Check the output definition against the previous definition and
+C     update appropriate definition variables.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nofld.common"
+C
+C     Subroutine arguments
+C
+      LOGICAL OCHNG, OIWEGLOBE, OINPOLE, OISPOLE
+      INTEGER KGAUSS, KPR, KERR
+      INTEGER KAREA (4), KIAREA (4)
+      REAL PWEST, PEAST, PNORTH, PSOUTH
+C
+C     Local variables
+      LOGICAL GLOBE, GNS
+      INTEGER INORTH, ISOUTH, IWEST, IEAST, IWEINC, IWETMP, ITEMP
+      INTEGER IERR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 21600)
+C
+C     External functions
+C
+C     Transform definition variables that must be preserved
+C
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOGDEF: Section 1.',JPQUIET)
+C
+      IAOGDEF = 0
+C
+      IERR = 0
+C
+      OCHNG = .FALSE.
+C
+      GNS = OINPOLE .AND. OISPOLE
+C
+      GLOBE = OIWEGLOBE .AND. GNS
+C
+      IF (KPR .GE. 1) THEN
+         CALL INTLOG(JP_DEBUG,'IAOGDEF: Input parameters',JPQUIET)
+         CALL INTLOG(JP_DEBUG,'IAOGDEF: Gaussian truncation = ',KGAUSS)
+         CALL INTLOGR(JP_DEBUG,'IAOGDEF: Area North = ',PNORTH)
+         CALL INTLOGR(JP_DEBUG,'IAOGDEF: Area West = ',PWEST)
+         CALL INTLOGR(JP_DEBUG,'IAOGDEF: Area South = ',PSOUTH)
+         CALL INTLOGR(JP_DEBUG,'IAOGDEF: Area East = ',PEAST)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Convert parameters to integer
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOGDEF: Section 2.',JPQUIET)
+C
+C     Representation
+C
+      IF (NOREPR .NE. JPGAUSSIAN) THEN
+         NOREPR = JPGAUSSIAN
+         OCHNG = .TRUE.
+      ENDIF
+C
+      NOSCNM = 0
+C
+C     North, South, West and East limits
+C
+      INORTH = NINT (PNORTH * PPMULT)
+      ISOUTH = NINT (PSOUTH * PPMULT)
+      IWEST = NINT (PWEST * PPMULT)
+      IEAST = NINT (PEAST * PPMULT)
+C
+C     Direction increments for regular grids
+C
+      IWEINC = JP90 / KGAUSS
+C
+      IF (IWEINC * KGAUSS .NE. JP90) THEN
+        IAOGDEF = JPROUTINE + 1
+        IF (KERR .GE. 0) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'IAOGDEF: Illegal gaussian truncation = ',KGAUSS)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IAOGDEF: Interpolation failing.',JPQUIET)
+        ENDIF
+        GO TO 900
+      ENDIF
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Adjust grid stride and area
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOGDEF: Section 3.',JPQUIET)
+C
+C     Global field if all area limits are 0
+C
+      IF (INORTH .EQ. 0 .AND. ISOUTH .EQ. 0 .AND.
+     X  IWEST .EQ. 0 .AND. IEAST .EQ. 0) THEN
+C
+        INORTH = JP90
+        ISOUTH = - JP90
+C
+        IF (GLOBE) THEN
+C
+          IWEST = 0
+          IEAST = JP360 - IWEINC
+C
+        ELSE
+          IF (GNS) THEN
+C
+            IWEST = KIAREA (JPWEST)
+            IEAST = KIAREA (JPEAST)
+C
+            IF (MOD (IEAST - IWEST, IWEINC) .NE. 0) THEN
+              IAOGDEF = JPROUTINE + 2
+              IF (KERR .GE. 0) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'IAOGDEF: West-East increment ', IWEINC)
+                CALL INTLOG(JP_ERROR,
+     X            'IAOGDEF: does not match the range from ',IWEST)
+                CALL INTLOG(JP_ERROR,
+     X            'IAOGDEF: to ',IEAST)
+                IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X            'IAOGDEF: Interpolation failing.',JPQUIET)
+              ENDIF
+              GO TO 900
+            ENDIF
+          ELSE
+            IAOGDEF = JPROUTINE + 3
+              IF (KERR .GE. 0) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'IAOGDEF: Must specify a range if Gaussian',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IAOGDEF: output and non-global input.',JPQUIET)
+                IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X            'IAOGDEF: Interpolation failing.',JPQUIET)
+              ENDIF
+              GO TO 900
+          ENDIF
+        ENDIF
+C
+      ELSE
+C
+C     Try to produce fields representable in GRIB for 0.5625 degree
+C     strides
+C
+        IF (IEAST .LT. IWEST) THEN
+          IF (IEAST .LE. 0) THEN
+            IEAST = IEAST + JP360
+          ELSE
+            IWEST = IWEST - JP360
+          ENDIF
+        ENDIF
+C
+        GLOBE = IEAST - IWEST + IWEINC .EQ. JP360 .OR.
+     X      IEAST - IWEST + IWEINC .EQ. 0
+C
+        IF (MOD (IWEINC, 10) .EQ. 5 .AND. .NOT. GLOBE) THEN
+          IWETMP = IWEINC * 2
+        ELSE
+          IWETMP = IWEINC
+        ENDIF
+C
+        IF (MOD (IEAST - IWEST, IWETMP) .NE. 0) THEN
+C
+          IF (MOD (IEAST, IWETMP) .NE. 0) THEN
+C
+            ITEMP = ABS (IEAST) / IWETMP
+C
+            IF (IEAST .GT. 0) THEN
+              IEAST = (ITEMP + 1) * IWETMP
+              IF (IEAST .GT. JP360) IEAST = IEAST - IWETMP
+            ELSE
+              IEAST = - ITEMP * IWETMP
+            ENDIF
+          ENDIF
+C
+          IF (MOD (IWEST, IWETMP) .NE. 0) THEN
+C
+            ITEMP = ABS (IWEST) / IWETMP
+C
+            IF (IWEST .LT. 0) THEN
+              IWEST = - (ITEMP + 1) * IWETMP
+              IF (IWEST .LT. - JP360) IWEST = IWEST + IWETMP
+            ELSE
+              IWEST = ITEMP * IWETMP
+            ENDIF
+          ENDIF
+        ENDIF
+      ENDIF
+C
+      IF (NOGAUSS .NE. KGAUSS) THEN
+        NOGAUSS = KGAUSS
+        OCHNG = .TRUE.
+      ENDIF
+C
+      IF (KAREA (JPNORTH) .NE. INORTH) THEN
+        KAREA (JPNORTH) = INORTH
+        OCHNG = .TRUE.
+      ENDIF
+C
+      IF (KAREA (JPSOUTH) .NE. ISOUTH) THEN
+        KAREA (JPSOUTH) = ISOUTH
+        OCHNG = .TRUE.
+      ENDIF
+C
+      IF (IWEST .NE. KAREA (JPWEST) ) THEN
+        KAREA (JPWEST) = IWEST
+        OCHNG = .TRUE.
+      ENDIF
+C
+      IF (IEAST .NE. KAREA (JPEAST) ) THEN
+        KAREA (JPEAST) = IEAST
+        OCHNG = .TRUE.
+      ENDIF
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Output field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Representation is ',NOREPR)
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Gaussian truncation is ',NOGAUSS)
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Area North is ',KAREA(1))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Area West  is ',KAREA(2))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Area South is ',KAREA(3))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOGDEF: Area East  is ',KAREA(4))
+        IF( OCHNG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IAOGDEF: Output field change is TRUE.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IAOGDEF: Output field change is TRUE.',JPQUIET)
+        ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOGDEF: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iaoldef.F b/interpolation/iaoldef.F
new file mode 100755
index 0000000..2419457
--- /dev/null
+++ b/interpolation/iaoldef.F
@@ -0,0 +1,471 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IAOLDEF (PWEST, PEAST, PNORTH, PSOUTH,
+     1   PNSINC, PWEINC, KAREA, OCHNG, OIWEGLOBE, OINPOLE, OISPOLE,
+     2   KIAREA, KPR, KERR)
+C
+C---->
+C**** *IAOLDEF*
+C
+C     PURPOSE
+C     _______
+C
+C     Set the output field definition variables for a regular
+C     latitude longitude field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IAOLDEF (PWEST, PEAST, PNORTH, PSOUTH, PNSINC, PWEINC,
+C    1   KAREA, OCHNG, OIWEGLOBE, OINPOLE, OISPOLE, KIAREA, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PWEST      - The Western limit of the output field area.
+C
+C     PEAST      - The Eastern limit of the output field area.
+C
+C     PNORTH     - The Northern limit of the output field area.
+C
+C     PSOUTH     - The Southern limit of the output field area.
+C
+C     PNSINC     - The North-South stride for the output field.
+C
+C     PWEINC     - The West-East stride for the output field.
+C
+C     KAREA      - The previous output field area used for checking
+C                  for definition changes.
+C
+C     OIWEGLOBE  - Flag indicating whether the INPUT field spans the
+C                  globe in the West-East direction.
+C
+C     OINPOLE    - Flag indicating whether the INPUT field includes
+C                  the North polar line of latitude.
+C
+C     OISPOLE    - Flag indicating whether the INPUT field includes
+C                  the South polar line of latitude.
+C
+C     KIAREA     - The input field area which will be used for an
+C                  uninitialised output field area when the input
+C                  field is not global.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KAREA      - The output field area if the definition has changed.
+C
+C     OCHNG      - A flag variable indicating whether the definition
+C                  has changed.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOGRID       - Output field grid definition (WE/NS) is set.
+C     NOREPR       - Output field representation is set.
+C     NOSCNM       - Output field scanning mode is set.
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     Check the output definition against the previous definition and
+C     update appropriate definition variables.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nofld.common"
+C
+C     Subroutine arguments
+      LOGICAL OCHNG, OIWEGLOBE, OINPOLE, OISPOLE
+      INTEGER KPR, KERR
+      INTEGER KAREA (4), KIAREA (4)
+      REAL PWEST, PEAST, PNORTH, PSOUTH, PNSINC, PWEINC
+C
+C     Local variables
+      LOGICAL GLOBE
+      INTEGER INORTH, ISOUTH, IWEST, IEAST, IWEINC, INSINC, IWETMP,
+     1   INSTMP, ITEMP
+      INTEGER IERR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 21400)
+C
+C     External functions
+C
+C     Transform definition variables that must be preserved
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOLDEF: Section 1.',JPQUIET)
+C
+      IAOLDEF = 0
+C
+      IERR = 0
+C
+      OCHNG = .FALSE.
+C
+      GLOBE = OIWEGLOBE .AND. OINPOLE .AND. OISPOLE
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IAOLDEF: Input parameters.',JPQUIET)
+        CALL INTLOGR(JP_DEBUG,'IAOLDEF: W-E increment is ',PWEINC)
+        CALL INTLOGR(JP_DEBUG,'IAOLDEF: N-S increment is ',PNSINC)
+        CALL INTLOGR(JP_DEBUG,'IAOLDEF: AREA North ',PNORTH)
+        CALL INTLOGR(JP_DEBUG,'IAOLDEF: AREA West ',PWEST)
+        CALL INTLOGR(JP_DEBUG,'IAOLDEF: AREA South ',PSOUTH)
+        CALL INTLOGR(JP_DEBUG,'IAOLDEF: AREA East ',PEAST)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Convert parameters to integer
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOLDEF: Section 2.',JPQUIET)
+C
+C     Representation
+C
+      IF (NOREPR .NE. JPREGULAR) THEN
+         NOREPR = JPREGULAR
+         OCHNG = .TRUE.
+      ENDIF
+C
+      NOSCNM = 0
+C
+C     North, South, West and East limits
+C
+      INORTH = NINT (PNORTH * PPMULT)
+      ISOUTH = NINT (PSOUTH * PPMULT)
+      IWEST = NINT (PWEST * PPMULT)
+      IEAST = NINT (PEAST * PPMULT)
+C
+C     Direction increments for regular grids
+C
+      IWEINC = NINT (ABS (PWEINC) * PPMULT)
+      IWEINC = MAX (IWEINC, JPMIN)
+C
+      INSINC = NINT (ABS (PNSINC) * PPMULT)
+      INSINC = MAX (INSINC, JPMIN)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Adjust grid stride and area
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOLDEF: Section 3.',JPQUIET)
+C
+C     Global field if all area limits are 0
+C
+      IF (INORTH .EQ. 0 .AND. ISOUTH .EQ. 0 .AND.
+     1   IWEST .EQ. 0 .AND. IEAST .EQ. 0) THEN
+C
+         IF (GLOBE) THEN
+C
+  310 CONTINUE
+            IF (MOD (JP90, IWEINC) .EQ. 0) GO TO 320
+               IWEINC = IWEINC - 1
+               GO TO 310
+  320 CONTINUE
+C
+            IF (MOD (JP90, INSINC) .EQ. 0) GO TO 330
+               INSINC = INSINC - 1
+               GO TO 320
+  330 CONTINUE
+C
+            INORTH = JP90
+            ISOUTH = - JP90
+            IWEST = 0
+            IEAST = JP360 - IWEINC
+C
+         ELSE
+C
+            IF (OINPOLE) THEN
+               INORTH = JP90
+            ELSE
+               INORTH = KIAREA (JPNORTH)
+            ENDIF
+C
+            IF (OISPOLE) THEN
+               ISOUTH = - JP90
+            ELSE
+               ISOUTH = KIAREA (JPSOUTH)
+            ENDIF
+C
+            IF (OIWEGLOBE) THEN
+C
+  340 CONTINUE
+               IF (MOD (JP90, IWEINC) .EQ. 0) GO TO 350
+                  IWEINC = IWEINC - 1
+                  GO TO 340
+  350 CONTINUE
+C
+               IWEST = 0
+               IEAST = JP360 - IWEINC
+            ELSE
+               IWEST = KIAREA (JPWEST)
+               IEAST = KIAREA (JPEAST)
+C
+  360 CONTINUE
+               IF (MOD (IEAST - IWEST, IWEINC) .EQ. 0) GO TO 370
+                  IWEINC = IWEINC - 1
+                  GO TO 360
+  370 CONTINUE
+C
+            ENDIF
+C
+  380 CONTINUE
+            IF (MOD (INORTH - ISOUTH, INSINC) .EQ. 0) GO TO 390
+               INSINC = INSINC - 1
+               GO TO 380
+  390 CONTINUE
+C
+         ENDIF
+      ELSE
+C
+C     Try to produce fields representable in GRIB for 0.5625 degree
+C     strides
+C
+         IF (IEAST .LT. IWEST) THEN
+            IF (IEAST .LE. 0) THEN
+               IEAST = IEAST + JP360
+            ELSE
+               IWEST = IWEST - JP360
+            ENDIF
+         ENDIF
+C
+         GLOBE = IEAST - IWEST + IWEINC .EQ. JP360 .OR.
+     1      IEAST - IWEST + IWEINC .EQ. 0
+C
+         IF (MOD (IWEINC, 10) .EQ. 5 .AND. .NOT. GLOBE) THEN
+            IWETMP = IWEINC * 2
+         ELSE
+            IWETMP = IWEINC
+         ENDIF
+C
+         IF (MOD (IEAST - IWEST, IWETMP) .NE. 0) THEN
+C
+            IF (MOD (IEAST, IWETMP) .NE. 0) THEN
+C
+               ITEMP = ABS (IEAST) / IWETMP
+C
+               IF (IEAST .GT. 0) THEN
+                  IEAST = (ITEMP + 1) * IWETMP
+                  IF (IEAST .GT. JP360) IEAST = IEAST - IWETMP
+               ELSE
+                  IEAST = - ITEMP * IWETMP
+               ENDIF
+            ENDIF
+C
+            IF (MOD (IWEST, IWETMP) .NE. 0) THEN
+C
+               ITEMP = ABS (IWEST) / IWETMP
+C
+               IF (IWEST .LT. 0) THEN
+                  IWEST = - (ITEMP + 1) * IWETMP
+                  IF (IWEST .LT. - JP360) IWEST = IWEST + IWETMP
+               ELSE
+                  IWEST = ITEMP * IWETMP
+               ENDIF
+            ENDIF
+         ENDIF
+C
+         IF (MOD (INSINC, 10) .EQ. 5) THEN
+            INSTMP = INSINC * 2
+         ELSE
+            INSTMP = INSINC
+         ENDIF
+C
+         IF (MOD (INORTH - ISOUTH, INSTMP) .NE. 0) THEN
+C
+            IF (MOD (INORTH, INSTMP) .NE. 0) THEN
+C
+               ITEMP = ABS (INORTH) / INSTMP
+C
+               IF (INORTH .GT. 0) THEN
+                  INORTH = (ITEMP + 1) * INSTMP
+                  IF (INORTH .GT. JP90) INORTH = INORTH - INSTMP
+               ELSE
+                  INORTH = - ITEMP * INSTMP
+               ENDIF
+            ENDIF
+C
+            IF (MOD (ISOUTH, INSTMP) .NE. 0) THEN
+C
+               ITEMP = ABS (ISOUTH) / INSTMP
+C
+               IF (ISOUTH .LT. 0) THEN
+                  ISOUTH = - (ITEMP + 1) * INSTMP
+                  IF (ISOUTH .LT. - JP90) ISOUTH = ISOUTH + INSTMP
+               ELSE
+                  ISOUTH = ITEMP * INSTMP
+               ENDIF
+            ENDIF
+         ENDIF
+C
+      ENDIF
+C
+      IF (NOGRID (JPWESTEP) .NE. IWEINC) THEN
+         NOGRID (JPWESTEP) = IWEINC
+         OCHNG = .TRUE.
+      ENDIF
+C
+      IF (NOGRID (JPNSSTEP) .NE. INSINC) THEN
+         NOGRID (JPNSSTEP) = INSINC
+         OCHNG = .TRUE.
+      ENDIF
+C
+      IF (KAREA (JPNORTH) .NE. INORTH) THEN
+         KAREA (JPNORTH) = INORTH
+         OCHNG = .TRUE.
+      ENDIF
+C
+      IF (KAREA (JPSOUTH) .NE. ISOUTH) THEN
+         KAREA (JPSOUTH) = ISOUTH
+         OCHNG = .TRUE.
+      ENDIF
+C
+      IF (IWEST .NE. KAREA (JPWEST) ) THEN
+         KAREA (JPWEST) = IWEST
+         OCHNG = .TRUE.
+      ENDIF
+C
+      IF (IEAST .NE. KAREA (JPEAST) ) THEN
+         KAREA (JPEAST) = IEAST
+         OCHNG = .TRUE.
+      ENDIF
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Output field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Representation is ',NOREPR)
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Grid W-E is ', NOGRID(1))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Grid N-S is ', NOGRID(2))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Area North is ',KAREA(1))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Area West  is ',KAREA(2))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Area South is ',KAREA(3))
+        CALL INTLOG(JP_DEBUG,
+     X    'IAOLDEF: Area East  is ',KAREA(4))
+C
+        IF ( OCHNG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IAOLDEF: Output field change is TRUE.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IAOLDEF: Output field change is FALSE.',JPQUIET)
+        ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IAOLDEF: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iarcntl.F b/interpolation/iarcntl.F
new file mode 100755
index 0000000..9c2bfad
--- /dev/null
+++ b/interpolation/iarcntl.F
@@ -0,0 +1,691 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IARCNTL(PIFELD, KILEN, POFELD, KOLEN, KILN,
+     1   OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE, OONPOLE,
+     2   OOSPOLE, KPR, KERR)
+C
+C---->
+C**** *IARCNTL*
+C
+C     Purpose
+C     -------
+C
+C     The global controlling routine for interpolating between a quasi
+C     regular Gaussian input field and a regular Gaussian or
+C     latitude/longitude output field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IERR = IARCNTL(PIFELD, KILEN, POFELD, KOLEN, KILN, OIWEGLOBE,
+C    1   OINPOLE, OISPOLE, KOLN, OOWEGLOBE, OONPOLE, OOSPOLE, KPR,
+C    2   KERR)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     PIFELD    - The input field provided by the calling routine.
+C
+C     KILEN     - The length of the input field.
+C
+C     KOLEN     - The length of the output field.
+C
+C     KILN      - The Northern line number of the input field within
+C                  its Gaussian field.
+C
+C     OIWEGLOBE - A flag indicating whether the input field is
+C                 global West to East.
+C
+C     OINPOLE   - A flag indicating whether the North pole is
+C                 included in the input field.
+C
+C     OISPOLE   - A flag indicating whether the South pole is
+C                 include in the input field.
+C
+C     KOLN      - The Northern line number of the output field
+C                 within its Gaussian field.
+C
+C     OOWEGLOBE - A flag indicating whether the output field is
+C                 global West to East.
+C
+C     OONPOLE   - A flag indicating whether the North pole is
+C                 include in the output field.
+C
+C     OOSPOLE   - A flag indicating whether the South pole is
+C                 include in the output field.
+C
+C     KPR       - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR      - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     POFELD - The output field returned to the calling routine.
+C
+C
+C     Return value
+C     ------------
+C
+C     The error indicator (INTEGER).
+C
+C
+C     Error and Warning Return Values
+C     -------------------------------
+C
+C     21901 The input data representation was not valid when the
+C           grid was generated. This should not happen as the data
+C           representation has been previously validated.
+C     21902 The output data representation was not valid when the
+C           grid was generated. This should not happen as the data
+C           representation has been previously validated.
+C     21903 Attempt to produce global West-East field where the input
+C           field was not global.
+C     21904 Attempt to produce global North-South field where the
+C           input field was not global.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     grspace.h    - The include file contains all the array space
+C                    for grid to grid interpolation.
+C
+C     MILLEN       - The array of quasi regular Gaussian field
+C                    latitude line length definition.
+C     RIGAUSS      - Real array of input field Gaussian latitudes is
+C                    used.
+C     ROGAUSS      - Real array of output field Gaussian latitudes is
+C                    used.
+C
+C     MILATG       - The input field latitudes.
+C     MILONG       - The input field longitudes.
+C     MISTRT       - The array offsets for the start of each latitude
+C                    line for a quasi regular Gaussian input field.
+C     MNSDIST      - The distances to neighbouring latitude lines of
+C                    the input field from the associated line of
+C                    latitude in the output field.
+C     MNSIND       - The latitude line numbers (array offset) of the
+C                    input field associated with each line of
+C                    latitude in the output field.
+C     MOLATG       - The output field latitudes.
+C     MOLONG       - The output field longitudes.
+C     MWEDIST      - This array holds the distances to neighbouring
+C                    longitude points of the input field from the
+C                    associated longitude points in the output field.
+C     MWEIND       - This array holds the longitude points (array
+C                    offset) from the input field associated with
+C                    each longitude point in the output field.
+C     RINPNT       - Array used to aid vectorisation in processing
+C                    precipitation fields.
+C     RMAX         - Array used to aid vectorisation in normalising
+C                    interpolation weights and processing
+C                    precipitation fields.
+C     WFACT        - The array of interpolation weights for each
+C                    point in the output field.
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     LCHANGE      - Process change flag is used and set.
+C     LSMCHNG      - LSM change flag is used and set.
+C     LSM          - LSM usage flag is used.
+C     LSMPAR       - LSM parameter flag is used.
+C     LPREC        - Precipitation flag is used.
+C     LWIND        - Wind flag is used.
+C
+C     NIAREA       - Input field area definition (N/W/S/E) is used.
+C     NIGAUSS      - Input field Gaussian truncation is used.
+C     NIGRID       - Input field grid definition (WE/NS) is used.
+C     NINS         - Number of grid points in NS direction for input
+C                    field is used.
+C     NIREPR       - Input field representation is used.
+C     NIWE         - Number of grid points in WE direction for input
+C                    field is used.
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOAREA       - Output field area definition (N/W/S/E) is used.
+C     NOGAUSS      - Output field Gaussian truncation is used.
+C     NOGRID       - Output field grid definition (WE/NS) is used.
+C     NONS         - Number of grid points in NS direction for output
+C                    field is used.
+C     NOREPR       - Output field representation is used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is used.
+C
+C
+C     Externals
+C     ---------
+C
+C     ABORTX     - Standard routine to kill task.
+C     IGDINS     - Calculate the distances between points in an
+C                  output latitude array and its North and South
+C                  neighbours in the input latitude array.
+C     IGGRID     - Generate the arrays of latitude and longitude
+C                  points for a Gaussian truncation and area.
+C     IGLGRID    - Generate the arrays of latitude and longitude
+C                  points for a regular latitude longitude grid.
+C     IGLSIZE    - Evaluate the array sizes for a regular
+C                  latitude/longitude field.
+C     IGLSMD     - Generate the land sea mask file information.
+C     IGNORM     - Normalise the array of interpolation weights.
+C     IGPLSM     - Force an interpolated land sea mask field back to
+C                  a real 0-1 field.
+C     IGPOLEG    - Calculate the values at the pole of a regular
+C                  latitude/longitude field when the input is a
+C                  Gaussian field.
+C     IGPOLEW    - Calculates the values at the pole of a regular
+C                  latitude/longitude wind field when the input is a
+C                  Gaussian field.
+C     IGSIZE     - Evaluate the array sizes for a Gaussian field.
+C     IRDIWE     - Calculate the distances between points in an
+C                  output longitude array and its West and East
+C                  neighbours in the input longitude array for a
+C                  quasi regular input field and regular output field.
+C     IRGMEM     - This routine acquires heap space for quasi regular
+C                  to regular interpolation.
+C     IRGRID     - Generate the arrays of latitude points and the
+C                  starting points of the lines of latitude for a
+C                  quasi regular Gaussian grid.
+C     IRGTOG     - Perform basic interpolation between the input and
+C                  output fields for a quasi regular input field and
+C                  a regular output field.
+C     IRINT      - Calculate the basic unnormalised interpolation
+C                  weights when interpolating from a quasi regular
+C                  grid to a regular grid.
+C     IRLSMB     - Calculate the effects of the land-sea masks on the
+C                  unnormalised interpolation weights for a quasi
+C                  regular input field and regular output field.
+C     IRPREC     - Perform additional interpolation processes for
+C                  precipitation fields when the input field is Quasi
+C                  regular.
+C     ZPREC      - Perform additional interpolation processes
+C                  for precipitation
+C     IRSIZE     - Evaluate the array sizes for a quasi regular
+C                  Gaussian field.
+C     INTLOG     - Logs messages.
+C
+C
+C     Method
+C     ------
+C     This is purely a controlling routine with all the work being
+C     performed in the external routines.
+C
+C
+C     Reference
+C     ---------
+C     None
+C
+C
+C     Comments
+C     --------
+C     None
+C
+C
+C     Author
+C     ------
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C
+C     Modifications
+C     -------------
+C     J.Chambers        ECMWF       Oct 1998
+C     Allow field type for rotated grids.
+C
+C     S.Curic           ECMWF       Oct 2005
+C     Add zprec routine that Perform checking
+C     of precipitation
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 21900)
+C
+C     Function arguments
+C
+      LOGICAL OIWEGLOBE, OINPOLE, OISPOLE, OOWEGLOBE, OONPOLE, OOSPOLE
+      INTEGER KILEN, KOLEN, KILN, KOLN, KPR, KERR
+      REAL PIFELD(KILEN), POFELD(KOLEN)
+C
+C     Local variables
+C
+      LOGICAL LFAIL, LERROR, LDEBUG, LREGOUT
+      LOGICAL GINSPOLE, GIGLOBE, GISTAND, GONSPOLE, GOGLOBE, GOSTAND
+      LOGICAL GPREC,LSM_VALUES
+      CHARACTER*120 YIFILE, YOFILE
+      CHARACTER*12 YFLAG
+      INTEGER IIOFF, IINDEX, IOOFF
+      INTEGER IIREC, IOREC, IERR
+C
+C     Working copies of area and grid arrays that may be changed
+C
+      INTEGER IILGRID(2), IILLINE(2), IOLGRID(2), IOLLINE(2)
+C
+C     External functions
+C
+      INTEGER IGDINS, IGGRID, IGLGRID, IGLSMD, IGNORM, IGPLSM,
+     X   IGPOLEG, IGPOLEW,
+     X   IRDIWE, IRGMEM, IRGRID, IRGTOG, IRINT, IRLSMB, IRPREC,
+     X   ZPREC
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IARCNTL = 0
+      IERR = 0
+C
+C     Set all flag variables
+C
+      LDEBUG  = (KPR.GE.1)
+      LFAIL   = (KERR.EQ.0)
+      LERROR  = (KERR.GE.0)
+      LREGOUT = (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT)
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'IARCNTL: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'IARCNTL: Input field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IARCNTL: Representation = ',NIREPR)
+        IF( NINS.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IARCNTL: Number N-S = ',NINS)
+        CALL INTLOG(JP_DEBUG,'IARCNTL: Gaussian truncation= ',NIGAUSS)
+        IF( NIAREA(1).NE.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area North = ',NIAREA(1))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area West  = ',NIAREA(2))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area South = ',NIAREA(3))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area East  = ',NIAREA(4))
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'IARCNTL: Output field definition parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IARCNTL: Representation = ',NOREPR)
+        IF( NOWE.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IARCNTL: Number W-E = ',NOWE)
+        IF( NONS.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IARCNTL: Number N-S = ',NONS)
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) )
+     X    CALL INTLOG(JP_DEBUG,'IARCNTL: Gaussian truncation= ',NOGAUSS)
+        IF( LREGOUT.AND.NOGRID(1).NE.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Grid WE = ',NOGRID(1))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Grid NS = ',NOGRID(2))
+        ENDIF
+        IF( NOAREA(1).NE.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area North = ',NOAREA(1))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area West  = ',NOAREA(2))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area South = ',NOAREA(3))
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Area East  = ',NOAREA(4))
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'IARCNTL: Control flag status:',JPQUIET)
+C
+        IF( LSMCHNG ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: LSM change TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IARCNTL: LSM change FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSM ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: LSM flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IARCNTL: LSM flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LWIND ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Wind flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Wind flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LPREC ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Precipitn flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IARCNTL: Precipitn flag FALSE',JPQUIET)
+        ENDIF
+C
+        IF( LSMPAR ) THEN
+          CALL INTLOG(JP_DEBUG,'IARCNTL: LSM param flag TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IARCNTL: LSM param flag FALSE',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     The change of parameter option spans sections 2 to 3
+C
+      IF( LCHANGE ) THEN
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Get space and define grids.
+C     -----------------------------------------------------------------|
+C
+  200   CONTINUE
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IARCNTL: Section 2.',JPQUIET)
+C
+C       Get the required memory
+C
+        IARCNTL = IRGMEM(KPR, KERR)
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+C       Input field definition
+C
+        IF( NIREPR.EQ.JPQUASI ) THEN
+C
+          IARCNTL = IRGRID(NIAREA, MILLEN, KILN, RIGAUSS, MISTRT,
+     X                     MILATG, NINS, OIWEGLOBE, KPR, KERR)
+          IF( IARCNTL.GT.0 ) GOTO 900
+C
+C         Is the input field global
+C
+          GINSPOLE = OINPOLE.AND.OISPOLE
+          GIGLOBE  = OIWEGLOBE.AND.GINSPOLE
+C
+        ELSE
+C
+          IARCNTL = JPROUTINE + 1
+          IF( LERROR ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IARCNTL: Illegal input data representation = ',NIREPR)
+            IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X        'IARCNTL: Interpolation failing.',JPQUIET)
+          ENDIF
+          GOTO 900
+C
+        ENDIF
+C
+C       Output grid definition
+C
+C       Is the output field global North South
+C
+        GONSPOLE = OONPOLE.AND.OOSPOLE
+        GOGLOBE  = OOWEGLOBE.AND.GONSPOLE
+
+        IF(GOGLOBE.AND.NOAREA(2).EQ.0) THEN
+            LGLOBL = .TRUE.
+        ELSE
+            LGLOBL = .FALSE.
+        ENDIF
+
+C
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+C
+          IARCNTL = IGGRID(NOGAUSS, NOAREA, KOLN, ROGAUSS,
+     X                     MOLONG,NOWE,MOLATG,NONS,OOWEGLOBE,KPR,KERR)
+          IF( IARCNTL.GT.0 ) GOTO 900
+C
+        ELSEIF ( LREGOUT ) THEN
+C
+          IARCNTL = IGLGRID(NOGRID, NOAREA, MOLONG, NOWE, MOLATG,
+     X                      NONS, OOWEGLOBE, KPR, KERR)
+          IF( IARCNTL.GT.0 ) GOTO 900
+C
+        ELSE
+C
+          IARCNTL = JPROUTINE + 2
+          IF( LERROR ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IARCNTL: Illegal output data representation = ',NIREPR)
+            IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X        'IARCNTL: Interpolation failing.',JPQUIET)
+          ENDIF
+          GOTO 900
+C
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Create output to input grid mapping and distance arrays
+C     -----------------------------------------------------------------|
+C
+  300   CONTINUE
+C
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_DEBUG,'IARCNTL: Section 3.',JPQUIET)
+C
+C       First check that the input and output fields are compatible.
+C
+        IF( .NOT.GIGLOBE ) THEN
+C
+          IF( .NOT.OIWEGLOBE ) THEN
+C
+C           Cannot produce global output field if input field not global
+C
+            IF( OOWEGLOBE ) THEN
+              IARCNTL = JPROUTINE + 3
+              IF( LERROR ) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'IARCNTL: Cannot produce global output from',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IARCNTL: non-global input.  The W-E input',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IARCNTL: direction was not global.',JPQUIET)
+                IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X            'IARCNTL: Interpolation failing.',JPQUIET)
+              ENDIF
+              GOTO 900
+            ENDIF
+C
+          ENDIF
+C
+          IF( .NOT.GINSPOLE ) THEN
+C
+C           Cannot produce global output field if input field not global
+C
+            IF( GONSPOLE ) THEN
+              IARCNTL = JPROUTINE + 4
+              IF( LERROR ) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'IARCNTL: Cannot produce global output from',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IARCNTL: non-global input.  The N-S input',JPQUIET)
+                CALL INTLOG(JP_ERROR,
+     X            'IARCNTL: direction was not global.',JPQUIET)
+                IF( LFAIL ) CALL INTLOG(JP_FATAL,
+     X            'IARCNTL: Interpolation failing.',JPQUIET)
+              ENDIF
+              GOTO 900
+            ENDIF
+C
+          ENDIF
+C
+        ENDIF
+C
+        IARCNTL = IGDINS(MILATG, NINS, MOLATG, NONS, OINPOLE,
+     X                   OISPOLE, MNSIND, MNSDIST, KPR, KERR)
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+        IARCNTL = IRDIWE(MILLEN, NINS, MNSIND, NONS, MILONG, NIWE,
+     X                   MOLONG, NOWE, MWEIND, MWEDIST, KPR, KERR)
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+C     The end of primary initialisation
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4. Create normalised weight arrays
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IARCNTL: Section 4.',JPQUIET)
+C
+C     The following code is affected by the Land Sea mask flag
+C
+      IF( LCHANGE.OR.LSMCHNG ) THEN
+C
+        IARCNTL = IRINT(MWEDIST, NOWE, MNSDIST, NONS, WFACT, KPR, KERR)
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+        IF( LSM ) THEN
+C
+          IARCNTL = IGLSMD(NIDATE,NIREPR,NIGRID,NIGAUSS,NIAREA,KILN,
+     X                    YIFILE,GISTAND,IILGRID,IILLINE,IIREC,KPR,KERR)
+          IF( IARCNTL.GT.0 ) GOTO 900
+C
+          IARCNTL = IGLSMD(NODATE,NOREPR,NOGRID,NOGAUSS,NOAREA,KOLN,
+     X                    YOFILE,GOSTAND,IOLGRID,IOLLINE,IOREC,KPR,KERR)
+          IF( IARCNTL.GT.0 ) GOTO 900
+C
+          IARCNTL = IRLSMB(GISTAND, YIFILE, IIREC, IILGRID, IILLINE,
+     X                    GOSTAND,YOFILE,IOREC,IOLGRID,IOLLINE,KPR,KERR)
+          IF( IARCNTL.GT.0 ) GOTO 900
+C
+        ENDIF
+C
+C       Normalise the weights
+C
+        IARCNTL = IGNORM(WFACT, RMAX, NOWE, NONS, KPR, KERR)
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+C       This marks the end of a change to the specfication
+C       Clear the Change flags LCHANGE and LSMCHNG
+C
+        LCHANGE = .FALSE.
+        LSMCHNG = .FALSE.
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5. Interpolate from input to output field
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IARCNTL: Section 5.',JPQUIET)
+C
+C     Perform basic interpolation
+C
+      IARCNTL = IRGTOG(PIFELD, MISTRT, NINS, NOWE, NONS, MWEIND,
+     X                 MNSIND, WFACT, POFELD, KPR, KERR)
+      IF( IARCNTL.GT.0 ) GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 6. Additional interpolations from input to output field
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IARCNTL: Section 6.',JPQUIET)
+C
+C     Precipitation field
+C
+C     Force processing without neighbour check
+        GPREC = .FALSE.
+        CALL GETENV('PRECIPITATION_NEIGHBOUR_CHECK', YFLAG)
+        IF( YFLAG(1:1).EQ.'0' ) GPREC = .TRUE.
+
+      IF( LPREC ) THEN
+C
+        IF( GPREC ) THEN
+          IARCNTL = ZPREC(POFELD, NOWE, NONS, KPR, KERR)
+        ELSE
+          IARCNTL = IRPREC(PIFELD, MISTRT, NINS, POFELD, NOWE, NONS,
+     X                   MWEIND, MNSIND, WFACT, RMAX, RINPNT, KPR, KERR)
+        ENDIF
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+      ENDIF
+C
+C     Special code for poles if Gaussian input and regular output
+C
+C     North pole
+C
+      IF( (NIREPR.EQ.JPQUASI).AND.
+     X    LREGOUT            .AND.
+     X    OINPOLE            .AND.
+     X    OONPOLE ) THEN
+C
+        IIOFF = MISTRT(1)
+        IOOFF = 1
+        IINDEX = (JP_I_N - 1) * NOWE + 1
+C
+        IF( LWIND ) THEN
+          IARCNTL = IGPOLEW(PIFELD(IIOFF), MILLEN(1),
+     X                      POFELD(IOOFF), NOWE, MWEIND(1,IINDEX),
+     X                      MWEDIST(1,IINDEX), KPR, KERR)
+        ELSE
+          IARCNTL = IGPOLEG(PIFELD(IIOFF), MILLEN(1),
+     X                      POFELD(IOOFF), NOWE, KPR, KERR)
+        ENDIF
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+      ENDIF
+C
+C     South pole
+C
+      IF( (NIREPR.EQ.JPQUASI).AND.
+     X    LREGOUT            .AND.
+     X    OISPOLE            .AND.
+     X    OOSPOLE ) THEN
+C
+        IIOFF = MISTRT(NINS)
+        IOOFF = (NONS - 1) * NOWE + 1
+        IINDEX = ( (NONS - 1) * 2 + JP_I_S - 1) * NOWE + 1
+C
+        IF( LWIND ) THEN
+          IARCNTL = IGPOLEW(PIFELD(IIOFF), MILLEN(NINS),
+     X                      POFELD(IOOFF), NOWE, MWEIND(1,IINDEX),
+     X                      MWEDIST(1,IINDEX), KPR, KERR)
+        ELSE
+          IARCNTL = IGPOLEG(PIFELD(IIOFF), MILLEN(NINS),
+     X                      POFELD(IOOFF), NOWE, KPR, KERR)
+        ENDIF
+C
+        IF( IARCNTL.GT.0 ) GOTO 900
+C
+      ENDIF
+C
+C     LSM field - must be 0 or 1
+C
+C     Force processing real LSM
+        LSM_VALUES = .FALSE.
+        CALL GETENV('LSM_VALUES', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LSM_VALUES = .TRUE.
+
+      IF( .NOT.LSM_VALUES.AND.LSMPAR ) THEN
+        IARCNTL = IGPLSM(POFELD, NOWE * NONS, KPR, KERR)
+        IF( IARCNTL.GT.0 ) GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IARCNTL: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iareset.F b/interpolation/iareset.F
new file mode 100755
index 0000000..915a648
--- /dev/null
+++ b/interpolation/iareset.F
@@ -0,0 +1,307 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IARESET (KSEC2, KSEC4, KVALUES, KPR, KERR)
+C
+C---->
+C**** *IARESET*
+C
+C     PURPOSE
+C     _______
+C
+C     Generate the output field definition.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IARESET (KSEC2, KSEC4, KVALUES, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KSEC2      - The GRIB Section 2 array for the input field.
+C
+C     KSEC4      - The GRIB Section 4 array for the input field.
+C
+C     KVALUES    - The number of values in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KSEC2      - The modified GRIB Section 2 array for the output
+C                  field.
+C
+C     KSEC4      - The modified GRIB Section 4 array for the output
+C                  field.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NOACC        - Number of packing bits to be used for output
+C                    GRIB field is used.
+C     NOAREA       - Output field area definition (N/W/S/E) is used.
+C     NOGAUSS      - Output field Gaussian truncation is used.
+C     NOGRID       - Output field grid definition (WE/NS) is used.
+C     NONS         - Number of grid points in NS direction for output
+C                    field is used.
+C     NOREPR       - Output field representation is used.
+C     NOSCNM       - Output field scanning mode is used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is used.
+C
+C     EXTERNALS
+C     _________
+C
+C     SETPAR       - Standard routine used to generate "missing" data
+C                    values for GRIB fields.
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine modifies sections 2 and 4 of the GRIB definition
+C     to match the output field.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 4 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nofld.common"
+C
+C     Dummy arguments
+      INTEGER KVALUES, KPR, KERR
+      INTEGER KSEC2 (JPGRIB_ISEC2), KSEC4 (JPGRIB_ISEC4)
+C
+C     Local variables
+      INTEGER IWEINC, ITEMP, IMISS, IERR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24200)
+C
+C     External functions
+C
+C     Transform definition variables that must be preserved
+C
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARESET: Section 1.',JPQUIET)
+C
+      IARESET = 0
+      IERR = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IARESET: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'IARESET: No.bits for output field packing = ',NOACC)
+        CALL INTLOG(JP_DEBUG,
+     X    'IARESET: No.values to be packed = ',KVALUES)
+        IF (NOREPR .EQ. JPREGULAR) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IARESET: West-East stride = ', NOGRID (JPWESTEP))
+          CALL INTLOG(JP_DEBUG,
+     X      'IARESET: North-South stride = ', NOGRID (JPNSSTEP))
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IARESET: Gaussian truncation = ',NOGAUSS)
+        ENDIF
+      ENDIF
+C
+C     Get GRIB missing data value
+C
+      CALL SETPAR (ITEMP, IMISS, KPR)
+C
+C     Representation
+C
+      KSEC2 (JPSEC2_REP) = NOREPR
+      KSEC2 (JPSEC2_SCAN) = NOSCNM
+C
+C     _______________________________________________________
+C
+C*    Section 2. Set Grib Section 2 regular grid variables
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (NOREPR .EQ. JPREGULAR) THEN
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARESET: Section 2.',JPQUIET)
+C
+         KSEC2 (JPSEC2_QUASI) = 0
+C
+         KSEC2 (JPSEC2_NLONG) = NOWE
+         KSEC2 (JPSEC2_NLAT) = NONS
+C
+         KSEC2 (JPSEC2_NORTH) = NOAREA (JPNORTH) / 10
+         KSEC2 (JPSEC2_WEST) = NOAREA (JPWEST) / 10
+         KSEC2 (JPSEC2_SOUTH) = NOAREA (JPSOUTH) / 10
+C
+         IF (MOD (NOAREA (JPEAST), 10) .EQ. 5) THEN
+            KSEC2 (JPSEC2_EAST) = NOAREA (JPEAST) / 10 + 1
+         ELSE
+            KSEC2 (JPSEC2_EAST) = NOAREA (JPEAST) / 10
+         ENDIF
+C
+         IF (MOD (NOGRID (JPWESTEP), 10) .EQ. 5 .OR.
+     X      MOD (NOGRID (JPNSSTEP), 10) .EQ. 5) THEN
+C
+            KSEC2 (JPSEC2_RESOL) = 0
+            KSEC2 (JPSEC2_DLONG) = IMISS
+            KSEC2 (JPSEC2_DLAT) = IMISS
+C
+         ELSE
+C
+            KSEC2 (JPSEC2_RESOL) = 128
+            KSEC2 (JPSEC2_DLONG) = NOGRID (JPWESTEP) / 10
+            KSEC2 (JPSEC2_DLAT) = NOGRID (JPNSSTEP) / 10
+C
+         ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 3. Set Grib Section 2 Gaussian values
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      ELSE IF (NOREPR .EQ. JPGAUSSIAN) THEN
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARESET: Section 3.',JPQUIET)
+C
+         KSEC2 (JPSEC2_QUASI) = 0
+C
+         KSEC2 (JPSEC2_GTRUNC) = NOGAUSS
+         KSEC2 (JPSEC2_NLONG) = NOWE
+         KSEC2 (JPSEC2_NLAT) = NONS
+C
+         KSEC2 (JPSEC2_NORTH) = NOAREA (JPNORTH) / 10
+         KSEC2 (JPSEC2_WEST) = NOAREA (JPWEST) / 10
+         KSEC2 (JPSEC2_SOUTH) = NOAREA (JPSOUTH) / 10
+C
+         IF (MOD (NOAREA (JPEAST), 10) .EQ. 5) THEN
+            KSEC2 (JPSEC2_EAST) = NOAREA (JPEAST) / 10 + 1
+         ELSE
+            KSEC2 (JPSEC2_EAST) = NOAREA (JPEAST) / 10
+         ENDIF
+C
+         IWEINC = JP90 / NOGAUSS
+C
+         IF (MOD (IWEINC, 10) .EQ. 5) THEN
+C
+            KSEC2 (JPSEC2_RESOL) = 0
+            KSEC2 (JPSEC2_DLONG) = IMISS
+C
+         ELSE
+C
+            KSEC2 (JPSEC2_RESOL) = 128
+            KSEC2 (JPSEC2_DLONG) = IWEINC / 10
+C
+         ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 4. Set Grib Section 4 values
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARESET: Section 4.',JPQUIET)
+C
+      KSEC4 (JPSEC4_NVALUE) = KVALUES
+C
+      IF (NOACC .NE. 0) KSEC4 (JPSEC4_NBITS) = NOACC
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARESET: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iarmem.F b/interpolation/iarmem.F
new file mode 100755
index 0000000..0451fea
--- /dev/null
+++ b/interpolation/iarmem.F
@@ -0,0 +1,237 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IARMEM (KIMEM, KOMEM, KPR, KERR)
+C
+C---->
+C**** *IARMEM*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine acquires heap space for expanded REAL fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IARMEM (KIMEM, KOMEM, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KIMEM      - Space required for input field.
+C
+C     KOMEM      - Space required for output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     NINS         - Number of grid points in NS direction for input
+C                    field (used in ouspace.h).
+C     NIWE         - Number of grid points in WE direction for input
+C                    field (used in ouspace.h).
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NONS         - Number of grid points in NS direction for output
+C                    field (used in ouspace.h).
+C     NOWE         - Number of grid points in WE direction for output
+C                    field (used in ouspace.h).
+C
+C     ouspace.h    - This file contains the work space array
+C                    definitions for the arrays to hold the unpacked
+C                    real data from GRIB fields.
+C
+C     NIFELD       - POINTER to array RIFELD.
+C     NOFELD       - POINTER to array ROFELD.
+C
+C     RIFELD       - Dynamic array of length (NIWE * NINS)
+C                    (see nifld.common) which holds the expanded
+C                    input field.
+C     ROFELD       - Dynamic array of length (NOWE * NONS)
+C                    (see nofld.common) which holds the expanded
+C                    output field.
+C
+C     EXTERNALS
+C     _________
+C
+C     IGALLOC    - Get a heap allocation for array space.
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine calculates how much heap space is required. It
+C     then calls IGALLOC to acquire the required space. Finally the
+C     POINTERs to the arrays in ouspace.h are initialised to allow
+C     the use of the dynamic arrays.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "ouspace.h"
+C
+C     Dummy arguments
+      INTEGER KIMEM, KOMEM, KPR, KERR
+C
+C     Local variables
+      INTEGER IBASE, IERR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24100)
+C
+C     External functions
+      INTEGER IGALLOC
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARMEM: Section 1.',JPQUIET)
+C
+      IARMEM = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IARMEM: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IARMEM: Input fld space = ',KIMEM)
+        CALL INTLOG(JP_DEBUG,'IARMEM: Output fld space = ',KOMEM)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Calculate memory required and get heap
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARMEM: Section 2.',JPQUIET)
+C
+C     Get the required memory
+C
+      IERR = IGALLOC (JPGRIB_SPACE, (KIMEM + KOMEM) * JPRLEN, IBASE,
+     1   KPR, KERR)
+C
+      IF (IERR .GT. 0) THEN
+         IARMEM = IERR
+         GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Initialise base addresses for POINTER arrays
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARMEM: Section 3.',JPQUIET)
+C
+      NIFELD = IBASE
+      NOFELD = NIFELD + KIMEM * JPRLEN
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IARMEM: Output base addresses.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IARMEM: Input fld base address = ',NIFELD)
+        CALL INTLOG(JP_DEBUG,'IARMEM: Output fld base address= ',NOFELD)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IARMEM: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/ibasini.F b/interpolation/ibasini.F
new file mode 100755
index 0000000..3e121f6
--- /dev/null
+++ b/interpolation/ibasini.F
@@ -0,0 +1,206 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IBASINI(KFORCE)
+C
+C---->
+C**** IBASINI
+C  
+C     Purpose
+C     -------
+C
+C     Ensures basic initialisation of common blocks is done
+C  
+C     Interface
+C     ---------
+C
+C     IRET = IBASINI(KFORCE)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KFORCE  = 1, to force initialisation of common blocks.
+C             = 0, to check if initialisation of common blocks is done
+C                  already (and do it if not already done).
+C  
+C  
+C     Method
+C     ------
+C
+C     NJDCDOT in nifld.common is checked/set.
+C
+C     Looks for environment variable INTERP_GEN_COEFFS which gives
+C     the name of a file containing the cutoff spectral truncation
+C     above which interpolation coefficients are generated 'on the
+C     fly'. Variable NICOMP is set with this value in nifld.common.
+C     The file contains entries for each computer architecture in
+C     format:
+C
+C       col 1
+C         |
+C         v
+C         FUJITSU 319
+C         sgimips 213
+C         hppa 213
+C         DEFAULT 106
+C
+C     If no matching $ARCH value, the DEFAULT value is used.
+C     If no matching $ARCH and no DEFAULT value, a hard-code value is used.
+C
+C     Looks for environment variable USE_HIRLAM_12POINT to determine
+C     whether or not the Hiralm 12-point horizontal interpolation is
+C     to be used for rotations.
+C
+C
+C     Externals
+C     ---------
+C
+C     CLEAR_C - Clear common block variables
+C     RDDEFS  - Read interpolation handling default values
+C     GETENV  - Get value of an environment variable
+C     JINDEX  - Returns length of character string
+C  
+C  
+C     Author
+C     ------
+C
+C     J.D.Chambers       ECMWF        August 1994.
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+C
+C     Function arguments
+C
+      INTEGER KFORCE
+C
+C     Local variables
+C
+      CHARACTER*120 LINE
+      CHARACTER*20 ARCH, USEHIR
+      CHARACTER*256 CONFIG
+      INTEGER IMAGIC, IRET, ICONFIG, IBLANK, LOOP
+      DATA ICONFIG/69/
+      DATA IMAGIC/1952999238/
+C
+C     Externals
+C
+      INTEGER RDDEFS, JINDEX
+C
+C     -----------------------------------------------------------------|
+C     Section 1. Force initialisation if requested.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF ( KFORCE .EQ. 1 ) NJDCDOT = 0
+C
+C     See if basic initialisation has already been done or not
+C
+      IF ( NJDCDOT .NE. IMAGIC ) THEN
+C
+C       Clear common block variables
+C
+        CALL CLEAR_C()
+C
+        IRET = 1
+        CALL IAINIT(0,IRET)
+C
+C       Set interpolation handling default values
+C       (Replaces old call to rddefs)
+C
+        NILOCAL = 0
+        NISTREM = 0
+        NIFORM = 1
+        NOFORM = 1
+        NITABLE = 128
+        NOTABLE = 128
+        NIPARAM = 0
+        DO LOOP = 1,4
+          NIAREA(LOOP) = 0
+          NOAREA(LOOP) = 0
+        ENDDO
+        NISCNM = 0
+        NOSCNM = 0
+C
+C       Set default value for truncation above which interpolation
+C       coefficients are to be computed dynamically
+C
+        NICOMP = 319
+C
+C       Now see if this default value has been modified in a
+C       configuration file
+C
+        CALL GETENV('INTERP_GEN_COEFFS', CONFIG)
+        IBLANK = JINDEX(CONFIG)
+        IF( IBLANK.GE.1 ) THEN
+C
+C         Open the configuration file
+C
+          OPEN( ICONFIG, FILE=CONFIG, STATUS='OLD', ERR=200)
+          CALL GETENV('ARCH', ARCH)
+          IBLANK = JINDEX(ARCH)
+          IF( IBLANK.LT.1 ) ARCH = 'DEFAULT'
+          IBLANK = JINDEX(ARCH)
+C
+C         Look for matching 'arch'
+C
+  110     CONTINUE
+          READ( ICONFIG, '(A)', END= 200) LINE
+          IF( ARCH(1:IBLANK).EQ.LINE(1:IBLANK) ) THEN
+            READ(LINE(IBLANK+1:),'(1X,I3)') NICOMP
+            GOTO 200
+          ENDIF
+C
+C         Pickup default (will be used if no matching 'arch')
+C
+          IF( (LINE(1:7).EQ.'DEFAULT').OR.
+     X        (LINE(1:7).EQ.'default') )
+     X      READ(LINE(IBLANK+1:),'(1X,I3)') NICOMP
+C
+          GOTO 110
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 2. See if Hirlam 12-point horizontal interpolation to be
+C                use for rotations (default = 'yes').
+C     -----------------------------------------------------------------|
+C
+  200   CONTINUE
+C
+        LUSEHIR = .TRUE.
+        CALL GETENV('USE_HIRLAM_12POINT', USEHIR)
+        IF( (USEHIR(1:3).EQ.'OFF').OR.(USEHIR(1:2).EQ.'NO') )
+     X    LUSEHIR = .FALSE.
+C
+C     -----------------------------------------------------------------|
+C     Section 9. Return
+C     -----------------------------------------------------------------|
+C
+  900   CONTINUE
+C
+C       Set 'magic number' to show basic initialisation has been done
+C
+        NJDCDOT = IMAGIC
+C
+      ENDIF
+C
+      IBASINI = 0
+C
+      RETURN
+      END
diff --git a/interpolation/igalloc.F b/interpolation/igalloc.F
new file mode 100755
index 0000000..7b8c4ab
--- /dev/null
+++ b/interpolation/igalloc.F
@@ -0,0 +1,346 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGALLOC (KLEVEL, KREQUEST, KADDR, KPR, KERR)
+C
+C---->
+C**** *IGALLOC*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine allocates heap space.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGALLOC (KLEVEL, KREQUEST, KADDR, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KLEVEL     - The heap block number.
+C
+C     KREQUEST   - The amount of heap space required.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KADDR      - The base address of the heap space allocated.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     Cray error codes
+C
+Cray  -1    HPDEALLC block is already free (Warning only).
+Cray
+Cray  24301 HPDEALLC attempt to free block at address outside the
+Cray        bounds of the heap.
+Cray  24302 HPDEALLC attempt to free block at address which was not
+Cray        the beginning of a block.
+Cray  24303 HPDEALLC returning any other non zero code.
+Cray  24304 HPALLOC request was not greater than 0 words.
+Cray  24305 HPALLOC called and not enough memory was available.
+Cray  24306 HPALLOC The memory arena has been truncated by a user
+Cray        ssbreak(2) call.
+Cray  24307 HPALLOC returning any other non zero code.
+Cray
+Cray  Errors 24301, 24302 and 24304 should not occur and any occurrence
+Cray  of one of these errors should be reported to Meteorological
+Cray  Applications.
+C
+C     Sun and SGI error codes
+C
+C     24301 MALLOC memory allocation failed.
+C
+C     Common block usage
+C     __________________
+C
+C     memreq.h  - This file contains the memory request definition
+C                 variables.
+C
+C     MADDR     - The base addresses of the currently allocated
+C                 memory segments are modified.
+C     MREQUEST  - The sizes of the current memory requests are modified.
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     Cray externals
+C
+Cray  HPALLOC   - Cray library routine to allocate heap space.
+Cray  HPDEALLC  - Cray library routine to de-allocate heap space.
+C
+C     Sun and SGI externals
+C
+C     JFREE     - Unix routine to free heap space.
+C     JMALLOC   - Unix routine to acquire heap space.
+C
+C     METHOD
+C     ______
+C
+C     The heap block number is used to indicate which heap is being
+C     modified. Currently heap 1 is used to acquire space for
+C     expanding GRIB arrays into real arrays and heap 2 is used for
+C     internal space during the interpolation process.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "memreq.h"
+C
+C     Function arguments
+C
+      INTEGER KLEVEL, KREQUEST, KPR, KERR
+#if (defined POINTER_64)
+      INTEGER*8 KADDR
+#else
+      INTEGER KADDR
+#endif
+C
+C     Local variables
+C
+      INTEGER IABORT, IERROR
+#ifdef POINTER_64
+      INTEGER*8 IDUMMY
+#else
+      INTEGER IDUMMY
+#endif
+      DATA IDUMMY/0/
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24300)
+C
+C     External functions
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      EXTERNAL JMALLOC
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IGALLOC = 0
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGALLOC: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGALLOC: Heap number = ',KLEVEL)
+        CALL INTLOG(JP_DEBUG,'IGALLOC: Heap request = ',KREQUEST)
+        CALL INTLOG(JP_DEBUG,'IGALLOC: Current heap =',MREQUEST(KLEVEL))
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Calculate arrays of weights
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IABORT = 0
+      IERROR = 0
+C
+      IF( MREQUEST(KLEVEL).LT.KREQUEST.AND.MREQUEST(KLEVEL).GT.0) THEN
+C
+C       Memory required is greater than that currently allocated
+C
+C       Return any heap in use for spectral -> grid point operations
+C
+        CALL JMEMHAN(1,IDUMMY,IDUMMY,0,IERROR)
+        CALL JMEMHAN(2,IDUMMY,IDUMMY,0,IERROR)
+C
+#ifdef CRAY
+Cray
+        CALL HPDEALLC(MADDR(KLEVEL),IERROR,IABORT)
+        IF( IERROR.EQ.-4 ) THEN
+          IGALLOC = - 1
+          CALL INTLOG(JP_ERROR,
+     X      'IGALLOC: Attempt to free block already free.',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'IGALLOC: at address = ',MADDR(KLEVEL))
+Cray
+        ELSE IF( IERROR.NE.0 ) THEN
+Cray
+          IF( IERROR.EQ.-3 ) THEN
+Cray
+            IGALLOC = JPROUTINE + 1
+            IF( KERR.GE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Heap dealloc fail, error = ',IERROR)
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Block outside heap at addr = ', MADDR(KLEVEL))
+            ENDIF
+Cray
+          ELSE IF( IERROR.EQ.-5 ) THEN
+Cray
+            IGALLOC = JPROUTINE + 2
+            IF( KERR.GE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Heap dealloc fail, error = ',IERROR)
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Addr not at start of block = ', MADDR(KLEVEL))
+            ENDIF
+Cray
+          ELSE
+Cray
+            IGALLOC = JPROUTINE + 3
+            IF( KERR.GE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Heap dealloc fail, error = ',IERROR)
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Attempt to free block addr = ', MADDR(KLEVEL))
+            ENDIF
+Cray
+          ENDIF
+Cray
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X          'IGALLOC: Interpolation failed.',IGALLOC)
+          GOTO 900
+Cray
+        ENDIF
+#else
+        CALL JFREE (MADDR (KLEVEL) )
+#endif
+      ENDIF
+C
+C     First request for memory.
+C
+      IF( MREQUEST(KLEVEL).LT.KREQUEST ) THEN
+C
+C       Return any heap in use for spectral -> grid point operations
+C
+        CALL JMEMHAN(1,IDUMMY,IDUMMY,0,IERROR)
+        CALL JMEMHAN(2,IDUMMY,IDUMMY,0,IERROR)
+C
+#ifdef CRAY
+        CALL HPALLOC(MADDR(KLEVEL),KREQUEST,IERROR,IABORT)
+Cray
+        IF( IERROR.NE.0 ) THEN
+Cray
+          IF( IERROR.EQ.-1 ) THEN
+            IGALLOC = JPROUTINE + 4
+            IF( KERR.GE.0 ) CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Negative memory request = ',KREQUEST)
+Cray
+          ELSE IF( IERROR.EQ.-2 ) THEN
+            IGALLOC = JPROUTINE + 5
+            IF( KERR.GE.0 ) CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Heap alloc failed = ',IERROR)
+Cray
+          ELSE IF( IERROR.EQ.-8 ) THEN
+            IGALLOC = JPROUTINE + 6
+            IF( KERR.GE.0 ) CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Heap alloc failed = ',IERROR)
+Cray
+          ELSE
+Cray
+            IGALLOC = JPROUTINE + 7
+            IF( KERR.GE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Heap alloc failed = ',IERROR)
+              CALL INTLOG(JP_ERROR,
+     X          'IGALLOC: Memory requested = ', KREQUEST)
+            ENDIF
+          ENDIF
+Cray
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X        'IGALLOC: Interpolation failed.',IGALLOC)
+Cray
+          GOTO 900
+Cray
+        ENDIF
+#else
+        MADDR(KLEVEL) = JMALLOC(KREQUEST)
+#ifdef hpR64
+        MADDR(KLEVEL) = MADDR(KLEVEL)/(1024*1024*1024*4)
+#endif
+        IF( MADDR(KLEVEL).EQ.0 ) THEN
+C
+          IGALLOC = JPROUTINE + 8
+          CALL INTLOG(JP_ERROR,'IGALLOC: Memory requested = ',KREQUEST)
+          CALL INTLOG(JP_ERROR,
+     X      'IGALLOC: No more memory available from system.',JPQUIET)
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X      'IGALLOC: Interpolation failed.',IGALLOC)
+          GOTO 900
+        ENDIF
+#endif
+C
+        KADDR = MADDR(KLEVEL)
+        MREQUEST(KLEVEL) = KREQUEST
+C
+      ELSE
+C
+C       Memory required is <= to that already allocated
+C
+        KADDR = MADDR(KLEVEL)
+C
+      ENDIF
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGALLOC: Return heap address = ',KADDR)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGALLOC: Section 9.',JPQUIET)
+
+      RETURN
+      END
diff --git a/interpolation/igbess.F b/interpolation/igbess.F
new file mode 100755
index 0000000..3b71717
--- /dev/null
+++ b/interpolation/igbess.F
@@ -0,0 +1,179 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGBESS(KTRUNC, PBESJ0, KPR, KERR)
+C
+C---->
+C**** *IGBESS*
+C
+C     PURPOSE
+C     _______
+C
+C     Computes initial approximations to Gaussian latitudes.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGBESS(KTRUNC, PBESJ0, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KTRUNC     - This is the number of zeros of the J0 Bessel
+C                  function required.
+C
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PBESJ0     - The output array of zeros of the J0 Bessel function.
+C
+C     Return Value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The first JPLOOK values are obtained from a look-up table
+C     (ZPBES). Any additional values requested are approximated by
+C     adding PI (3.14159...) to the previous value.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     This routine is adapted from that in the old Marsint library.
+C     The interface and the variable names have been modified.
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KTRUNC, KPR, KERR
+      REAL PBESJ0 (*)
+C
+C     Local variables
+      INTEGER ILOOK
+      INTEGER JAPPRX, JLOOK
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24400)
+      REAL ZPBES (JPLOOK)
+      DATA ZPBES        /   2.4048255577E0,   5.5200781103E0,
+     1    8.6537279129E0,  11.7915344391E0,  14.9309177086E0,
+     2   18.0710639679E0,  21.2116366299E0,  24.3524715308E0,
+     3   27.4934791320E0,  30.6346064684E0,  33.7758202136E0,
+     4   36.9170983537E0,  40.0584257646E0,  43.1997917132E0,
+     5   46.3411883717E0,  49.4826098974E0,  52.6240518411E0,
+     6   55.7655107550E0,  58.9069839261E0,  62.0484691902E0,
+     7   65.1899648002E0,  68.3314693299E0,  71.4729816036E0,
+     8   74.6145006437E0,  77.7560256304E0,  80.8975558711E0,
+     9   84.0390907769E0,  87.1806298436E0,  90.3221726372E0,
+     A   93.4637187819E0,  96.6052679510E0,  99.7468198587E0,
+     1  102.8883742542E0, 106.0299309165E0, 109.1714896498E0,
+     2  112.3130502805E0, 115.4546126537E0, 118.5961766309E0,
+     3  121.7377420880E0, 124.8793089132E0, 128.0208770059E0,
+     4  131.1624462752E0, 134.3040166383E0, 137.4455880203E0,
+     5  140.5871603528E0, 143.7287335737E0, 146.8703076258E0,
+     6  150.0118824570E0, 153.1534580192E0, 156.2950342685E0 /
+C
+C     _______________________________________________________
+C
+C*    Section 1. Extract initial values from look up table
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGBESS: Section 1.',JPQUIET)
+C
+      IGBESS = 0
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,
+     X  'IGBESS: No.values requested = ',KTRUNC)
+C
+      ILOOK = MIN (KTRUNC, JPLOOK)
+C
+      DO 110 JLOOK = 1, ILOOK
+        PBESJ0(JLOOK) = ZPBES(JLOOK)
+  110 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 2. Approximate any extra values required
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF(KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGBESS: Section 2.',JPQUIET)
+C
+      DO 210 JAPPRX = ILOOK + 1, KTRUNC
+        PBESJ0(JAPPRX) = PBESJ0(JPLOOK) + PPI*(JAPPRX - ILOOK)
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF(KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGBESS: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igdins.F b/interpolation/igdins.F
new file mode 100755
index 0000000..ef0d472
--- /dev/null
+++ b/interpolation/igdins.F
@@ -0,0 +1,309 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGDINS (KILATG, KINS, KOLATG, KONS, ONPOLE,
+     1   OSPOLE, KNSIND, KNSDIST, KPR, KERR)
+C
+C---->
+C**** *IGDINS*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the distances between points in an output latitude
+C     array and its North and South neighbours in the input latitude
+C     array.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGDINS (KILATG, KINS, KOLATG, KONS, ONPOLE, OSPOLE,
+C    1   KNSIND, KNSDIST, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KILATG     - The array of input latitudes.
+C
+C     KINS       - The number of points in the North-South direction
+C                  in the input field.
+C
+C     KOLATG     - The array of output latitudes.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     ONPOLE     - This variable will be true if the input field
+C                  includes the most Northerly line of latitude for
+C                  the field type. This means latitude 90 North for
+C                  a regular field and the first line of a Gaussian
+C                  field.
+C
+C     OSPOLE     - This variable will be true if the input field
+C                  includes the most Southerly line of latitude for
+C                  the field type. This means latitude 90 South for
+C                  a regular field and the last line of a Gaussian
+C                  field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KNSIND     - This array will contain the array offsets of the
+C                  North and South points in the input array required
+C                  for interpolation.
+C
+C     KNSDIST    - This array will contain the distances to lines
+C                  in input field from the associated lines of
+C                  latitude in the output field.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     24501 An output latitude was found that was outside the area
+C           spanned by the input latitudes.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine will create the arrays of offsets and distance as
+C     two arrays of length (2, Number of output latitudes).
+C
+C     If an input Gaussian grid includes the "polar" line and the
+C     output field includes a line of latitude between this "polar"
+C     line and the pole then the position of this "polar" Gaussian
+C     line is assumed to be at the pole for that line of latitude only.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      LOGICAL ONPOLE, OSPOLE
+      INTEGER KINS, KONS, KPR, KERR
+      INTEGER KILATG (KINS), KOLATG (KONS)
+      INTEGER KNSIND (2, KONS), KNSDIST (2, KONS)
+C
+C     Local variables
+      INTEGER IBASE
+      INTEGER JOUT, JINP
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24500)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGDINS: Section 1.',JPQUIET)
+C
+      IGDINS = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGDINS: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGDINS: No.input fld lines = ',KINS)
+        CALL INTLOG(JP_DEBUG,'IGDINS: No.output fld lines = ',KONS)
+        CALL INTLOG(JP_DEBUG,'IGDINS: Input fld spread from ',KILATG(1))
+        CALL INTLOG(JP_DEBUG,'IGDINS: to ', KILATG(KINS))
+        CALL INTLOG(JP_DEBUG,'IGDINS: Outpt fld spread from ',KOLATG(1))
+        CALL INTLOG(JP_DEBUG,'IGDINS: to ', KOLATG(KONS))
+C
+        IF ( ONPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGDINS: N. pole in inpt field.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGDINS: N.pole NOT in inpt fld',JPQUIET)
+        ENDIF
+C
+        IF ( OSPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGDINS: S. pole in inpt field.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGDINS: S.pole NOT in inpt fld',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Select points along a line of meridian
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGDINS: Section 2.',JPQUIET)
+C
+C     Last latitude found to be used as start of search
+C     for next latitude
+C
+      IBASE = 1
+C
+      DO 220 JOUT = 1, KONS
+C
+C       Allow special code for points beyond North limit of
+C       Gaussian grid which has all points up to pole
+C
+C       Sinisa remove check for pole - already exist in iagcntl
+        IF (IBASE .EQ. 1 .AND. KOLATG(JOUT).GT.KILATG (1) ) THEN
+C
+          KNSIND (JP_I_N, JOUT) = 1
+          KNSIND (JP_I_S, JOUT) = 2
+          IBASE = 1
+C
+          KNSDIST (JP_I_N, JOUT) = JP90 - KOLATG (JOUT)
+          KNSDIST (JP_I_S, JOUT) = KOLATG (JOUT) - KILATG (2)
+C
+          GO TO 220
+C
+        ENDIF
+C
+        DO 210 JINP = IBASE, KINS - 1
+C
+C         This test allows the exact match at both ends to be treated
+C         correctly. Although the point is checked for equality at
+C         both ends the first test will be used except for the South
+C         Gaussian limit.
+C
+          IF (KOLATG (JOUT) .LE. KILATG (JINP) .AND.
+     X         KOLATG (JOUT) .GE. KILATG (JINP + 1) ) THEN
+C
+            KNSIND (JP_I_N, JOUT) = JINP
+            KNSIND (JP_I_S, JOUT) = JINP + 1
+            IBASE = JINP
+C
+            KNSDIST (JP_I_N, JOUT) = KILATG (JINP) -
+     X            KOLATG (JOUT)
+            KNSDIST (JP_I_S, JOUT) = KOLATG (JOUT) -
+     X            KILATG (JINP + 1)
+C
+            GO TO 220
+C
+          ENDIF
+C
+  210   CONTINUE
+C
+C       Allow special code for points beyond South limit of
+C       Gaussian grid which has all points up to pole
+C
+C       Sinisa remove check for pole - already exist in iagcntl
+        IF (KOLATG (JOUT) .LT. KILATG (KINS) ) THEN
+C
+          KNSIND (JP_I_N, JOUT) = KINS - 1
+          KNSIND (JP_I_S, JOUT) = KINS
+          IBASE = KINS
+C
+          KNSDIST (JP_I_N, JOUT) = KILATG (KINS - 1) -
+     X         KOLATG (JOUT)
+          KNSDIST (JP_I_S, JOUT) = KOLATG (JOUT) - JP90
+C
+        ELSE
+C
+          IGDINS = JPROUTINE + 1
+          IF (KERR .GE. 0) THEN
+            CALL INTLOGR(JP_ERROR,
+     X        'IGDINS: Output lat. value ',REAL(KOLATG(JOUT))/PPMULT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGDINS: outside input range = ',REAL(KILATG(1))/PPMULT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGDINS: to ',REAL(KILATG(KINS))/PPMULT)
+          ENDIF
+C
+          IF (KERR .EQ. 0) CALL INTLOGR(JP_FATAL,
+     X      'IGDINS: Interpolation failing.',IGDINS)
+C
+          GO TO 900
+C
+        ENDIF
+C
+  220 CONTINUE
+C
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGDINS: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igdiwe.F b/interpolation/igdiwe.F
new file mode 100755
index 0000000..a19c500
--- /dev/null
+++ b/interpolation/igdiwe.F
@@ -0,0 +1,384 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGDIWE (KILONG, KIWE, KOLONG, KOWE, OWEGLOBE,
+     1   KWEIND, KWEDIST, KPR, KERR)
+C
+C---->
+C**** *IGDIWE*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the distances between points in an output longitude
+C     array and its West and East neighbours in the input longitude
+C     array.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGDIWE (KILONG, KIWE, KOLONG, KOWE, OWEGLOBE, KWEIND,
+C    1   KWEDIST, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KILONG     - The array of input longitudes.
+C
+C     KIWE       - The number of points in the West-East direction in
+C                  the input field.
+C
+C     KOLONG     - The array of output longitudes.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     OWEGLOBE   - This variable will be true if the input array of
+C                  longitudes spans the globe.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KWEIND     - This array will contain the array offsets of the
+C                  West and East points in the input array required
+C                  for interpolation.
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     24601 An output longitude was found that was outside the range
+C           spanned by the input longitudes.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine will create the arrays of offsets and distance
+C     as two arrays of length (2, Number of output longitudes).
+C     This will be used for all latitude rows when both the input
+C     and output grids are regular.
+C
+C     This routine is used to provide the values for one line of
+C     latitude for quasi regular Gaussian input fields.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      LOGICAL OWEGLOBE
+      INTEGER KIWE, KOWE, KPR, KERR
+      INTEGER KILONG (KIWE + 1), KOLONG (KOWE)
+      INTEGER KWEIND (2, KOWE), KWEDIST (2, KOWE)
+C
+C     Local variables
+      INTEGER IBASE, ILOW, IUP
+      INTEGER JINP, JOUT
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24600)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGDIWE: Section 1.',JPQUIET)
+C
+      IGDIWE = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGDIWE: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGDIWE: No.input fld pts = ',KIWE)
+        CALL INTLOG(JP_DEBUG,'IGDIWE: No.output fld pts = ',KOWE)
+        CALL INTLOG(JP_DEBUG,'IGDIWE: Input fld spread from ',KILONG(1))
+        CALL INTLOG(JP_DEBUG,'IGDIWE: to ',KILONG(KIWE))
+        CALL INTLOG(JP_DEBUG,'IGDIWE: Output spread from ',KOLONG(1))
+        CALL INTLOG(JP_DEBUG,'IGDIWE: to ',KOLONG(KOWE))
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IGDIWE: Input W-E fld is global',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IGDIWE: Input W-E fld is NOT global',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Select points around a line of latitude.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGDIWE: Section 2.',JPQUIET)
+C
+      IF (OWEGLOBE) THEN
+C
+        DO 230 JINP = 1, KIWE
+C
+C       NOTE that point number 1 is repeated as point KIWE + 1
+C       to simplify the wrap around case
+C
+          ILOW = KILONG (JINP)
+          IUP = KILONG (JINP + 1)
+C
+          IF (IUP .GT. ILOW) THEN
+C
+C           Normal case IUP > ILOW
+C
+            DO 210 JOUT = 1, KOWE
+C
+              IF (KOLONG(JOUT).GE.ILOW .AND.  KOLONG(JOUT).LT.IUP) THEN
+C
+C               Longitude point found
+C
+                KWEIND (JP_I_W, JOUT) = JINP
+C
+                IF (JINP .LT. KIWE) THEN
+                  KWEIND (JP_I_E, JOUT) = JINP + 1
+                ELSE
+                  KWEIND (JP_I_E, JOUT) = 1
+                ENDIF
+C
+                KWEDIST (JP_I_W, JOUT) = KOLONG (JOUT) - ILOW
+                KWEDIST (JP_I_E, JOUT) = IUP - KOLONG (JOUT)
+C
+              ENDIF
+C
+  210       CONTINUE
+C
+          ELSE
+C
+C           Wrap around case
+C
+            DO 220 JOUT = 1, KOWE
+C
+              IF (KOLONG (JOUT) .GE. ILOW) THEN
+C
+C               Longitude point found between ILOW and 3600000
+C
+                KWEIND (JP_I_W, JOUT) = JINP
+C
+                IF (JINP .LT. KIWE) THEN
+                  KWEIND (JP_I_E, JOUT) = JINP + 1
+                ELSE
+                  KWEIND (JP_I_E, JOUT) = 1
+                ENDIF
+C
+                KWEDIST (JP_I_W, JOUT) = KOLONG (JOUT) - ILOW
+                KWEDIST (JP_I_E, JOUT) = IUP + JP360 - KOLONG (JOUT)
+C
+              ENDIF
+C
+Cjdc          IF (KOLONG (JOUT) .LT. IUP) THEN
+              IF (KOLONG (JOUT) .LE. IUP) THEN
+C
+C               Longitude point found between 0 and IUP
+C
+                KWEIND (JP_I_W, JOUT) = JINP
+C
+                IF (JINP .LT. KIWE) THEN
+                  KWEIND (JP_I_E, JOUT) = JINP + 1
+                ELSE
+                  KWEIND (JP_I_E, JOUT) = 1
+                ENDIF
+C
+                KWEDIST (JP_I_W, JOUT) = KOLONG (JOUT) + JP360 - ILOW
+                KWEDIST (JP_I_E, JOUT) = IUP - KOLONG (JOUT)
+C
+              ENDIF
+C
+  220       CONTINUE
+C
+          ENDIF
+C
+  230   CONTINUE
+C
+      ELSE
+C
+C       Pointer to last point found if input grid is not global
+C
+        IBASE = 1
+C
+        DO 250 JOUT = 1, KOWE
+C
+          DO 240 JINP = IBASE, KIWE - 1
+C
+            ILOW = KILONG (JINP)
+            IUP = KILONG (JINP + 1)
+C
+C           Normal case IUP > ILOW
+C
+Cjdc        IF (KOLONG(JOUT).GE.ILOW .AND. KOLONG(JOUT).LT.IUP) THEN
+            IF (KOLONG(JOUT).GE.ILOW .AND. KOLONG(JOUT).LE.IUP) THEN
+C
+C             Longitude point found
+C
+              KWEIND (JP_I_W, JOUT) = JINP
+              KWEIND (JP_I_E, JOUT) = JINP + 1
+              IBASE = JINP
+C
+              KWEDIST (JP_I_W, JOUT) = KOLONG (JOUT) - ILOW
+              KWEDIST (JP_I_E, JOUT) = IUP - KOLONG (JOUT)
+C
+              GO TO 250
+C
+C           Wrap around case
+C
+            ELSE IF (IUP .LT. ILOW) THEN
+C
+              IF (KOLONG (JOUT) .GE. ILOW) THEN
+C
+C               Longitude point found between ILOW and 3600000
+C
+                KWEIND (JP_I_W, JOUT) = JINP
+                KWEIND (JP_I_E, JOUT) = JINP + 1
+                IBASE = JINP
+C
+                KWEDIST (JP_I_W, JOUT) = KOLONG (JOUT) - ILOW
+                KWEDIST (JP_I_E, JOUT) = IUP + JP360 - KOLONG (JOUT)
+C
+                GO TO 250
+C
+              ENDIF
+C
+Cjdc          IF (KOLONG (JOUT) .LT. IUP) THEN
+              IF (KOLONG (JOUT) .LE. IUP) THEN
+C
+C               Longitude point found between 0 and IUP
+C
+                KWEIND (JP_I_W, JOUT) = JINP
+                KWEIND (JP_I_E, JOUT) = JINP + 1
+                IBASE = JINP
+C
+                KWEDIST (JP_I_W, JOUT) = KOLONG (JOUT) + JP360 - ILOW
+                KWEDIST (JP_I_E, JOUT) = IUP - KOLONG (JOUT)
+C
+                GO TO 250
+C
+              ENDIF
+C
+            ENDIF
+C
+  240     CONTINUE
+C
+C         This statement will be reached if the output grid does not
+C         fit within the input grid.
+C
+          IGDIWE = JPROUTINE + 1
+          IF (KERR .GE. 0) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IGDIWE: Output long. value number = ',JOUT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGDIWE: Output long. value ',REAL(KOLONG(JOUT))/PPMULT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGDIWE: outside input range = ',REAL(KILONG(1))/PPMULT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGDIWE: to ',REAL(KILONG(KIWE))/PPMULT)
+          ENDIF
+C
+          IF (KERR .EQ. 0) CALL INTLOGR(JP_FATAL,
+     X      'IGDIWE: Interpolation failing.',IGDIWE)
+C
+          GO TO 900
+C
+  250   CONTINUE
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGDIWE: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igglat.F b/interpolation/igglat.F
new file mode 100755
index 0000000..1671ba8
--- /dev/null
+++ b/interpolation/igglat.F
@@ -0,0 +1,282 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGGLAT(KLAT, PGAUSS, KPR, KERR)
+C
+C---->
+C**** *IGGLAT*
+C
+C     PURPOSE
+C     _______
+C
+C     Compute Gaussian lines of latitude for a given truncation.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGGLAT(KLAT, PGAUSS, KPR, KERR)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KLAT - The number of lines of latitude from pole to pole.
+C
+C     KPR  - Debug print switch:
+C            0, No debugging output.
+C            1, Produce debugging output.
+C
+C     KERR - Error control flag.
+C            -ve, No error message. Return error code.
+C            0  , Hard failure with error message.
+C            +ve, Print error message. Return error code.
+C
+C
+C     Output parameters
+C     ________________
+C
+C     PGAUSS - The Gaussian lines of latitude for truncation KLAT/2
+C
+C
+C     Return value
+C     ____________
+C
+C     0     - OK
+C     24701 - The calculation of Gaussian lines of latitude failed.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R) - Logs messages.
+C     IGBESS    - This routine is used to generate initial
+C                 approximations to the Gaussian latitudes.
+C
+C
+C     METHOD
+C     ______
+C
+C     IGBESS is used to provide zeros of the Bessel function J0,
+C     which are used as starting approximations to the Gaussian
+C     latitudes. Newton iteration is used to generate the latitudes
+C     from these approximations.
+C
+C     Calculated latitudes are stored internally and reused if a
+C     later call asks for the same calculation.
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     This routine is adapted from that in the old Marsint library.
+C     The interface and the variable names have been modified.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.Chambers        ECMWF       Aug 1998
+C     Add reuse of calculated latitudes.
+C
+C----<
+C     -------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Function arguments
+C
+      INTEGER KLAT, KPR, KERR
+      REAL PGAUSS (*)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24700)
+C     -------------------------------------------------------
+C     The convergence criteria is machine dependent
+C     -------------------------------------------------------
+C
+      REAL PACRCY
+#ifdef REAL_8
+      PARAMETER (PACRCY = 1.0E-14)
+#else
+      PARAMETER (PACRCY = 1.0E-7)
+#endif
+C
+C     Local variables
+C
+      LOGICAL LDEBUG
+      INTEGER ITRUNC, IERR
+      INTEGER JLAT, JITER, JLN, LOOP, JOLDLAT
+      REAL ZRADDEG, ZCON, ZLAT, ZROOT
+      REAL ZKM1, ZKM2, ZLN, ZFUNC, ZDERIV, ZMOVE
+      REAL ROLDGS
+      DIMENSION ROLDGS(JPGTRUNC*2)
+C
+      SAVE JOLDLAT, ROLDGS
+C
+C     Externals
+C
+      INTEGER IGBESS
+C
+C     -------------------------------------------------------
+C*    Section 1. Set constants and get initial approximation.
+C     -------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IGGLAT = 0
+      LDEBUG = ( KPR.GE.1 )
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'IGGLAT: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X  'IGGLAT: No.lines lat from pole to pole = ',KLAT)
+      ENDIF
+C
+C     Using previously calculated values if truncation is the same.
+C
+      IF( KLAT.EQ.JOLDLAT ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'IGGLAT: Using previously calculated values',JPQUIET)
+        DO LOOP = 1, KLAT
+          PGAUSS(LOOP) = ROLDGS(LOOP)
+        ENDDO
+        GOTO 900
+      ENDIF
+C
+      JOLDLAT = KLAT
+C
+      ZRADDEG = 180.0/PPI
+C
+      ZCON   = (PPONE - (PPTWO / PPI) ** 2) * PPQUART
+C
+      ZLAT   = KLAT
+      ITRUNC = KLAT/2
+C
+      IERR = IGBESS(ITRUNC, PGAUSS, KPR, KERR)
+C
+      IF( IERR.GT.0 ) THEN
+         IGGLAT = IERR
+         GOTO 900
+      ENDIF
+C
+C     -------------------------------------------------------
+C*    Section 2. Compute abscissae
+C     -------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGGLAT: Section 2.',JPQUIET)
+C
+      DO 240 JLAT = 1, ITRUNC
+C
+C       First approximation for ZROOT
+C
+        ZROOT = COS(PGAUSS(JLAT) / SQRT( (ZLAT+PPHALF)**2 + ZCON) )
+C
+C       Perform loop of Newton iterations
+C
+        DO 220 JITER = 1, JPMAXITER
+C
+          ZKM2 = PPONE
+          ZKM1 = ZROOT
+C
+C         Compute Legendre polynomial
+C
+          DO 210 JLN = 2, KLAT
+C
+            ZLN = JLN
+C
+            ZFUNC = ( (PPTWO * ZLN - PPONE) * ZROOT * ZKM1 -
+     1              (ZLN - PPONE) * ZKM2) / ZLN
+C
+            ZKM2 = ZKM1
+            ZKM1 = ZFUNC
+C
+  210     CONTINUE
+C
+C         Perform Newton iteration
+C
+          ZDERIV = (ZLAT * (ZKM2 - ZROOT * ZFUNC) ) /
+     1             (PPONE - ZROOT ** 2)
+C
+          ZMOVE = ZFUNC / ZDERIV
+          ZROOT = ZROOT - ZMOVE
+C
+C         Leave iteration loop when sufficient accuracy achieved.
+C
+          IF( ABS(ZMOVE).LE.PACRCY ) GOTO 230
+C
+  220   CONTINUE
+C
+C       Routine fails if no convergence after JPMAXITER iterations.
+C
+        IGGLAT = JPROUTINE + 1
+C
+        IF( KERR.GE.0 ) CALL INTLOG(JP_ERROR,
+     X    'IGGLAT: Calculation of Gaussian lats failed.',JPQUIET)
+C
+        IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X    'IGGLAT: interpolation failed.',IGGLAT)
+C
+        GOTO 900
+C
+  230   CONTINUE
+C
+C*      Set North and South values using symmetry.
+C
+        PGAUSS(JLAT) = ASIN(ZROOT) * ZRADDEG
+        PGAUSS(KLAT + 1 - JLAT) = - PGAUSS(JLAT)
+C
+  240 CONTINUE
+C
+      IF( KLAT.NE.(ITRUNC*2) ) PGAUSS(ITRUNC + 1) = PPZERO
+C
+C     Store calculated values for re-use
+C
+      DO LOOP = 1, KLAT
+        ROLDGS(LOOP) = PGAUSS(LOOP)
+      ENDDO
+C
+C     -------------------------------------------------------
+C*    Section 9. Return to calling routine.
+C     -------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGGLAT: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iggmem.F b/interpolation/iggmem.F
new file mode 100755
index 0000000..ba442e0
--- /dev/null
+++ b/interpolation/iggmem.F
@@ -0,0 +1,331 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGGMEM (KPR, KERR)
+C
+C---->
+C**** *IGGMEM*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine acquires heap space.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGGMEM (KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     NINS         - Number of grid points in NS direction for input
+C                    field (used in grspace.h).
+C     NIWE         - Number of grid points in WE direction for input
+C                    field (used in grspace.h).
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NONS         - Number of grid points in NS direction for output
+C                    field (used in grspace.h).
+C     NOWE         - Number of grid points in WE direction for output
+C                    field (used in grspace.h).
+C
+C     grspace.h    - This file contains all the work space array
+C                    definitions for grid point to grid point
+C                    interpolation.
+C
+C     GRID_POINT
+C
+C     NILATGP      - POINTER to array MILATG.
+C     NILONGP      - POINTER to array MILONG.
+C     NILSMP       - POINTER to array MILSM.
+C     NINPNTP      - POINTER to array RINPNT.
+C     NISTRTP      - POINTER to array MISTRT.
+C     NNSDISTP     - POINTER to array MNSDIST.
+C     NNSINDP      - POINTER to array MNSIND.
+C     NMAXP        - POINTER to array RMAX.
+C     NOLATGP      - POINTER to array MOLATG.
+C     NOLONGP      - POINTER to array MOLONG.
+C     NOLSMP       - POINTER to array MOLSM.
+C     NWEDISTP     - POINTER to array MWEDIST.
+C     NWEINDP      - POINTER to array MWEIND.
+C     NWFACTP      - POINTER to array WFACT.
+C
+C     MILATG       - Dynamic array of length (NINS) (see nifld.common)
+C                    which holds the values of the input field
+C                    latitudes.
+C     MILONG       - Dynamic array of length (NIWE + 1) (see
+C                    nifld.common) which holds the values of the
+C                    input field longitudes.
+C     MILSM        - Dynamic array of length (NIWE, 2) (see
+C                    nifld.common) used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MISTRT       - Dynamic array of length (NINS) (see nifld.common)
+C                    which holds the array offsets of the start of
+C                    each latitude line for a quasi regular Gaussian
+C                    input field. No space is assigned to this array
+C                    for a regular input field.
+C     MNSDIST      - Dynamic array of length (2, NONS) (see
+C                    nofld.common) which holds the distances to
+C                    neighbouring latitude lines of the input field
+C                    from the associated line of latitude in the
+C                    output field.
+C     MNSIND       - Dynamic array of length (2, NONS) (see
+C                    nofld.common) which holds the latitude line
+C                    numbers (array offset) of the input field
+C                    associated with each line of latitude in the
+C                    output field.
+C     MOLATG       - Dynamic array of length (NONS) (see nofld.common)
+C                    which holds the values of the output field
+C                    latitudes.
+C     MOLONG       - Dynamic array of length (NOWE) (see nofld.common)
+C                    which holds the values of the output field
+C                    longitudes.
+C     MOLSM        - Dynamic array of length (NOWE) (see nofld.common)
+C                    used in calculating the effects of the land sea
+C                    mask on interpolation.
+C     MWEDIST      - Dynamic array of length (2, NONS) for a regular
+C                    input field and of length (2, 2 * NONS * NOWE)
+C                    (see nofld.common) for a quasi regular Gaussian
+C                    input field. This array holds the distances to
+C                    neighbouring longitude points of the input field
+C                    from the associated longitude points in the
+C                    output field.
+C     MWEIND       - Dynamic array of length (2, NONS) for a regular
+C                    input field and of length (2, 2 * NONS * NOWE)
+C                    (see nofld.common) for a quasi regular Gaussian
+C                    input field. This array holds the longitude
+C                    points (array offset) from the input field
+C                    associated with each longitude point in the
+C                    output field.
+C     RINPNT       - Dynamic array of length (NOWE) (see nofld.common)
+C                    used to aid vectorisation in processing
+C                    precipitation fields.
+C     RMAX         - Dynamic array of length (NOWE) (see nofld.common)
+C                    used to aid vectorisation in processing
+C                    precipitation fields.
+C     WFACT        - Dynamic array of length (4, NOWE * NONS) (see
+C                    nofld.common) which holds the interpolation
+C                    weights for each point in the output field.
+C
+C     EXTERNALS
+C     _________
+C
+C     IGALLOC    - Get a heap allocation for array space.
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine calculates how much heap space is required. It
+C     then calls IGALLOC to acquire the required space. Finally the
+C     POINTERs to the arrays in grspace.h are initialised to allow
+C     the use of the dynamic arrays.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C     Dummy arguments
+C
+      INTEGER KPR, KERR
+C
+C     Local variables
+C
+#ifdef POINTER_64
+      INTEGER*8 IBASE
+#else
+      INTEGER IBASE
+#endif
+      INTEGER IREQUEST, IERR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 22100)
+C
+C     External functions
+C
+      INTEGER IGALLOC
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGGMEM: Section 1.',JPQUIET)
+C
+      IGGMEM = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Calculate memory required and get heap
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGGMEM: Section 2.',JPQUIET)
+C
+C     REAL arrays (This may change for double precision version)
+C
+      IREQUEST = 4 * NOWE * NONS * JPRLEN
+C
+C     REAL arrays for precipitation calculations
+C
+      IREQUEST = IREQUEST + 2 * NOWE * JPRLEN
+C
+C     Fixed integer fields
+C
+      IREQUEST = IREQUEST + (NIWE + 1 + NINS + NOWE + 5 * NONS) *
+     1  JPILEN
+C
+C     Regular input fields (These change for reduced Gaussian fields)
+C
+      IREQUEST = IREQUEST + 4 * NOWE * JPILEN
+C
+C     Fields for LSM calculations
+C
+      IREQUEST = IREQUEST + (2 * NIWE + NOWE) * JPILEN
+C
+C     Get the required memory
+C
+      IERR = IGALLOC (JPINNER, IREQUEST, IBASE, KPR, KERR)
+C
+      IF( IERR .GT. 0) THEN
+         IGGMEM = IERR
+         GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Initialise base addresses for POINTER arrays
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGGMEM: Section 3.',JPQUIET)
+C
+C     REAL arrays first to ease conversion to DOUBLE PRECISION
+C
+      NWFACTP = IBASE
+C
+C     Precipitation REAL arrays
+C
+      NMAXP = NWFACTP + 4 * NOWE * NONS * JPRLEN
+      NINPNTP = NMAXP + NOWE * JPRLEN
+C
+C     This offset may change if DOUBLE PRECISION
+C
+      NILONGP = NINPNTP + NOWE * JPRLEN
+C
+      NILATGP  = NILONGP + (NIWE + 1) * JPILEN
+      NOLONGP = NILATGP + NINS * JPILEN
+      NOLATGP  = NOLONGP + NOWE * JPILEN
+      NNSINDP = NOLATGP + NONS * JPILEN
+      NNSDISTP = NNSINDP + 2 * NONS * JPILEN
+C
+C     These fields change for quasi regular Gaussian input
+C
+      NWEINDP = NNSDISTP + 2 * NONS * JPILEN
+      NWEDISTP = NWEINDP + 2 * NOWE * JPILEN
+      NISTRTP  = NWEDISTP + 2 * NOWE * JPILEN
+C
+C     MISTRT is not use for regular input grids
+C     LSM arrays
+C
+      NILSMP = NISTRTP
+C
+      NOLSMP = NILSMP + 2 * NIWE * JPILEN
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Output base addresses.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: WFACT address = ',NWFACTP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: RMAX address = ',NMAXP )
+        CALL INTLOG(JP_DEBUG,'IGGMEM: RINPNT address = ',NINPNTP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Input long. address = ',NILONGP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Input lat. address = ',NILATGP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Output long. address = ',NOLONGP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Output lat. address = ',NOLATGP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: NS offset = ',NNSINDP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: NS address = ',NNSDISTP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: WE offset = ',NWEINDP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: WE address = ',NWEDISTP)
+        CALL INTLOG(JP_DEBUG,
+     X    'IGGMEM: Line start array address = ',NISTRTP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Input LSM address = ',NILSMP)
+        CALL INTLOG(JP_DEBUG,'IGGMEM: Output LSM address = ',NOLSMP)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGGMEM: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iggrid.F b/interpolation/iggrid.F
new file mode 100755
index 0000000..a784cd5
--- /dev/null
+++ b/interpolation/iggrid.F
@@ -0,0 +1,271 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGGRID (KGTRUNC, KAREA, KLN, PGAUSS, KLONG,
+     1   KNWE, KLATG, KNNS, OWEGLOBE, KPR, KERR)
+C
+C---->
+C**** *IGGRID*
+C
+C     PURPOSE
+C     _______
+C
+C     Generate the arrays of latitude and longitude points for a
+C     Gaussian truncation and area.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGGRID (KGTRUNC, KAREA, KLN, PGAUSS, KLONG, KNWE, KLATG,
+C    1   KNNS, OWEGLOBE, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KGTRUNC    - The Gaussian truncation.
+C
+C     KAREA      - The area definition (N, W, S, E) provided by the
+C                  calling routine.
+C
+C     KLN        - The Northern Gaussian latitude number for this area.
+C
+C     PGAUSS     - The full list of Gaussian latitudes for this
+C                  truncation.
+C
+C     KNWE       - The number of points in the West-East direction in
+C                  this field.
+C
+C     KNNS       - The number of points in the North-South direction
+C                  in this field.
+C
+C     OWEGLOBE   - This variable will be true if the array of
+C                  longitudes spans the globe and it is an input grid.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KLONG      - The array of longitudes for this Gaussian
+C                  truncation and area. If OWEGLOBE is true the
+C                  West-East field array has element KNWE + 1 set
+C                  equal to element 1 to help with recognising where
+C                  an output grid "wraps around" the break in the
+C                  input grid.
+C
+C     KLATG      - The array of latitudes for this Gaussian
+C                  truncation and area.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The arrays KLONG and KLATG are generated using the information
+C     provided by the other parameters. Note that Gaussian latitudes
+C     will be stored as NINT (PGAUSS * 1.0E4).
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      LOGICAL OWEGLOBE
+      INTEGER KGTRUNC, KNWE, KNNS, KLN, KPR, KERR
+      INTEGER KAREA (4)
+      INTEGER KLONG (KNWE + 1), KLATG (KNNS)
+      REAL PGAUSS (*)
+C
+C     Local variables
+C
+      INTEGER ILNSTR, IEAST, IWEST
+      INTEGER JLONG, JLAT
+      REAL*8 RWEST, RKKK, RLNSTR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24800)
+C
+C     Function externals
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGGRID: Section 1.',JPQUIET)
+C
+      IGGRID = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGGRID: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGGRID: Northern Gaussian line is ',KLN)
+        CALL INTLOG(JP_DEBUG,'IGGRID: No.long.pts = ',KNWE)
+        CALL INTLOG(JP_DEBUG,'IGGRID: No.lat. pts = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IGGRID: Area North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IGGRID: Area West  = ', KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IGGRID: Area South = ', KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IGGRID: Area East  = ', KAREA(4))
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IGGRID: Input W-E fld is global.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IGGRID: Input W-E fld is NOT global.',JPQUIET)
+        ENDIF
+      ENDIF
+C
+      IF(KNWE.GT.0.AND.OWEGLOBE) THEN
+          RLNSTR = (REAL(JP360)*10000.0) / REAL(KNWE)
+      ELSE
+          RLNSTR = (REAL(JP90)*10000.0) / REAL(KGTRUNC)
+      ENDIF
+
+      IEAST = KAREA(JPEAST)
+      IWEST = KAREA(JPWEST)
+C
+C     _______________________________________________________
+C
+C*    Section 2. Generate points around a line of latitude.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGGRID: Section 2.',JPQUIET)
+C
+C     Standardise range so that EAST > WEST
+C
+      IF (IEAST .LT. IWEST ) THEN
+C
+         IF (IEAST .LT. 0) THEN
+            IEAST = IEAST + JP360
+         ELSE
+            IWEST = IWEST - JP360
+         ENDIF
+C
+      ENDIF
+C
+      RWEST = REAL(IWEST)*10000.0
+C
+C     Generate points in standardised range (0, jp360)
+C
+      DO 210 JLONG = 1, KNWE
+C
+         RKKK = RWEST + RLNSTR * (JLONG - 1)
+         KLONG (JLONG) = NINT(RKKK/10000.0)
+C
+         IF (KLONG (JLONG) .LT. 0) KLONG(JLONG) = KLONG(JLONG) + JP360
+C
+  210 CONTINUE
+C
+C     Add first point to end of list if global
+C
+      IF (OWEGLOBE) KLONG(KNWE + 1) = KLONG (1)
+C
+C     _______________________________________________________
+C
+C*    Section 3. Generate points along a line of meridian
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGGRID: Section 3.',JPQUIET)
+C
+      DO 320 JLAT = 1, KNNS
+C
+         KLATG (JLAT) = NINT (PGAUSS (JLAT + KLN - 1) * PPMULT)
+C
+  320 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGGRID: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igint.F b/interpolation/igint.F
new file mode 100755
index 0000000..27b0ff8
--- /dev/null
+++ b/interpolation/igint.F
@@ -0,0 +1,217 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGINT (KWEDIST, KOWE, KNSDIST, KONS, PWFACT,
+     1   KPR, KERR)
+C
+C---->
+C**** *IGINT*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the basic unnormalised interpolation weights when
+C     interpolating between regular grids.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGINT (KWEDIST, KOWE, KNSDIST, KONS, PWFACT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field. This distance is the
+C                  same for every line of latitude for a regular
+C                  input field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KNSDIST    - This array holds the distances to lines in input
+C                  field from the associated lines of latitude in the
+C                  output field. The array is dimensioned (2, KONS).
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PWFACT     - The unnormalised array of interpolating weights to
+C                  the four neighbouring points for every output point.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     IGINTR     - Calculate the basic unnormalised interpolation
+C                  weights for one line of latitude when
+C                  interpolating between regular grids.
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The weights are evaluated as the size of the opposing rectangle.
+C     It is trivial to show that this is equivalent to weighting by
+C     the inverse size of the rectangle of which the input point forms
+C     part.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KOWE, KONS, KPR, KERR
+      INTEGER KWEDIST (2, KOWE), KNSDIST (2, KONS)
+      REAL PWFACT (4, KOWE, KONS)
+C
+C     Local variables
+      INTEGER IPR, IERR
+      INTEGER JOLAT
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 22200)
+C
+C     External functions
+      INTEGER IGINTR
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGINT: Section 1.',JPQUIET)
+C
+      IGINT = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGINT: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGINT: No.output longitudes = ',KOWE)
+        CALL INTLOG(JP_DEBUG,'IGINT: No.output latitudes = ',KONS)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Calculate arrays of weights
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGINT: Section 2.',JPQUIET)
+C
+C     Main loop over latitudes
+C
+      IPR = KPR
+C
+      DO 220 JOLAT = 1, KONS
+C
+         IERR = IGINTR (KWEDIST, KOWE, KNSDIST (1, JOLAT),
+     1      PWFACT (1, 1, JOLAT), IPR, KERR)
+C
+         IF (IERR .GT. 0) THEN
+            IGINT = IERR
+            GO TO 900
+         ENDIF
+C
+         IPR = KPR - 1
+C
+  220 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGINT: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igintr.F b/interpolation/igintr.F
new file mode 100755
index 0000000..d262337
--- /dev/null
+++ b/interpolation/igintr.F
@@ -0,0 +1,199 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGINTR (KWEDIST, KOWE, KNSDIST, PWFACT, KPR,
+     1   KERR)
+C
+C---->
+C**** *IGINTR*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the basic unnormalised interpolation weights for one
+C     line of latitude when interpolating between regular grids.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGINTR (KWEDIST, KOWE, KNSDIST, PWFACT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KNSDIST    - This array gives the distances to the latitude of
+C                  the lines North and South in the input field from
+C                  the line of latitude of the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PWFACT     - The unnormalised array of interpolating weights to
+C                  the four neighbouring points for every point of the
+C                  output line of latitude.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The weights are evaluated as the size of the opposing rectangle.
+C     It is trivial to show that this is equivalent to weighting by
+C     the inverse size of the rectangle of which the input point forms
+C     part.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KOWE, KPR, KERR
+      INTEGER KWEDIST (2, KOWE), KNSDIST (2)
+      REAL PWFACT (4, KOWE)
+C
+C     Local variables
+      INTEGER JOLON
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 22300)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGINTR: Section 1.',JPQUIET)
+C
+      IGINTR = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGINTR: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGINTR: No.output longitudes = ',KOWE)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Calculate arrays of weights
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGINTR: Section 2.',JPQUIET)
+C
+      DO 210 JOLON = 1, KOWE
+C
+C     The unnormalised weights are the size of the opposing rectangle.
+C
+         PWFACT (JP_I_NW, JOLON) =
+     1      REAL (KWEDIST (JP_I_E, JOLON) ) * REAL (KNSDIST (JP_I_S) )
+         PWFACT (JP_I_NE, JOLON) =
+     1      REAL (KWEDIST (JP_I_W, JOLON) ) * REAL (KNSDIST (JP_I_S) )
+         PWFACT (JP_I_SW, JOLON) =
+     1      REAL (KWEDIST (JP_I_E, JOLON) ) * REAL (KNSDIST (JP_I_N) )
+         PWFACT (JP_I_SE, JOLON) =
+     1      REAL (KWEDIST (JP_I_W, JOLON) ) * REAL (KNSDIST (JP_I_N) )
+C
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGINTR: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglgrid.F b/interpolation/iglgrid.F
new file mode 100755
index 0000000..099ea45
--- /dev/null
+++ b/interpolation/iglgrid.F
@@ -0,0 +1,258 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLGRID (KSTRIDE, KAREA, KLONG, KNWE, KLATG,
+     1   KNNS, OWEGLOBE, KPR, KERR)
+C
+C---->
+C**** *IGLGRID*
+C
+C     PURPOSE
+C     _______
+C
+C     Generate the arrays of latitude and longitude points for a
+C     regular latitude longitude grid.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLGRID (KSTRIDE, KAREA, KLONG, KNWE, KLATG, KNNS,
+C    1   OWEGLOBE, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KSTRIDE    - The grid definition (WE, NS) provided by the
+C                  calling routine.
+C
+C     KAREA      - The area definition (N, W, S, E) provided by the
+C                  calling routine.
+C
+C     KNWE       - The number of points in the West-East direction in
+C                  this field.
+C
+C     KNNS       - The number of points in the North-South direction
+C                  in this field.
+C
+C     OWEGLOBE   - This variable will be true if the array of
+C                  longitudes spans the globe and this is an input
+C                  field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KLONG      - The array of longitudes for the stride and area.
+C                  If OEWGLOBE is true the West-East field array has
+C                  element KNWE + 1 set equal to element 1 to help
+C                  with recognising where an output grid 
+C                  "wraps around" the break in the input grid.
+C
+C     KLATG      - The array of latitudes for the stride and area.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The arrays of longitudes and latitudes are generated using the
+C     information provided by the other parameters.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      LOGICAL OWEGLOBE
+      INTEGER KNWE, KNNS, KPR, KERR
+      INTEGER KSTRIDE (2), KAREA (4)
+      INTEGER KLONG (KNWE + 1), KLATG (KNNS)
+C
+C     Local variables
+      INTEGER IEAST, IWEST
+      INTEGER JLONG, JLAT
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 24900)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLGRID: Section 1.',JPQUIET)
+C
+      IGLGRID = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLGRID: No.long.pts = ',KNWE)
+        CALL INTLOG(JP_DEBUG,'IGLGRID: No.lat. pts = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Grid stride WE = ',KSTRIDE(1))
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Grid stride NS = ',KSTRIDE(2))
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Area North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Area West  = ', KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Area South = ', KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IGLGRID: Area East  = ', KAREA(4))
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IGLGRID: Input W-E fld is global.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IGLGRID: Input W-E fld is NOT global.',JPQUIET)
+        ENDIF
+      ENDIF
+C
+      IEAST = KAREA (JPEAST)
+      IWEST = KAREA (JPWEST)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Generate points around a line of latitude.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLGRID: Section 2.',JPQUIET)
+C
+C     Standardise range so that EAST > WEST
+C
+      IF (IEAST .LT. IWEST ) THEN
+C
+         IF (IEAST .LT. 0) THEN
+            IEAST = IEAST + JP360
+         ELSE
+            IWEST = IWEST - JP360
+         ENDIF
+C
+      ENDIF
+C
+C     Generate points in standardised range (0, jp360)
+C
+      DO 210 JLONG = 1, KNWE
+C
+         KLONG (JLONG) = IWEST + KSTRIDE (JPWESTEP) * (JLONG - 1)
+C
+         IF (KLONG (JLONG) .LT. 0)
+     1      KLONG (JLONG) = KLONG (JLONG) + JP360
+C
+  210 CONTINUE
+C
+C     Add first point to end of list if global
+C
+      IF (OWEGLOBE)
+     1   KLONG (KNWE + 1) = KLONG (1)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Generate points along a line of meridian
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLGRID: Section 3.',JPQUIET)
+C
+      DO 310 JLAT = 1, KNNS
+C
+         KLATG (JLAT) = KAREA (JPNORTH) -
+     1      KSTRIDE (JPNSSTEP) * (JLAT - 1)
+C
+  310 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLGRID: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglrev.F b/interpolation/iglrev.F
new file mode 100755
index 0000000..d3e4434
--- /dev/null
+++ b/interpolation/iglrev.F
@@ -0,0 +1,242 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLREV (PMAT, KCOL, KROW, KDIR, KPR, KERR)
+C
+C---->
+C**** *IGLREV*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine reverses either the rows or the columns of a
+C     rectangular matrix.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLREV (PMAT, KCOL, KROW, KDIR, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PMAT       - The input matrix of dimension (KCOL, KROW).
+C
+C     KCOL       - The length of the first dimension of PMAT.
+C
+C     KROW       - The length of the second dimension of PMAT.
+C
+C     KDIR       - 1    Reverses the order in each column.
+C                       West-East reversal for meteorological fields.
+C                  2    Reverses the order in each row.
+C                       North-South reversal for meteorological fields.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PMAT       - The transformed matrix.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     KDIR = 1 is implemented by swapping elements within each column
+C              of the matrix.
+C
+C     KDIR = 2 is implemented by reversing the order of the columns.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+C
+      INTEGER KCOL, KROW, KDIR, KPR, KERR
+C
+      REAL PMAT (KCOL, KROW)
+C
+C     Local variables
+C
+      INTEGER IHALF
+C
+      INTEGER JSTEP, JMOVE
+C
+      REAL ZTEMP
+C
+      INTEGER JPROUTINE
+C
+      PARAMETER (JPROUTINE = 7300)
+C
+C     External functions
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGLREV: Section 1.',JPQUIET)
+C
+      IGLREV = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRSCAN: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRSCAN: First matrix dimension is ',KCOL)
+        CALL INTLOG(JP_DEBUG,'IRSCAN: Second matrix dimension is ',KROW)
+        CALL INTLOG(JP_DEBUG,'IRSCAN: Direction value is ',KDIR)
+        CALL INTLOG(JP_DEBUG,'IRSCAN: Input parameters.',JPQUIET)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Matrix COLUMN reversal (Field row interchange - WE)
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGLREV: Section 2.',JPQUIET)
+C
+      IF (KDIR .EQ. 1) THEN
+C
+         IHALF = KCOL / 2
+C
+         DO 220 JMOVE = 1, IHALF
+C
+            DO 210 JSTEP = 1, KROW
+C
+               ZTEMP = PMAT (KCOL + 1 - JMOVE, JSTEP)
+               PMAT (KCOL + 1 - JMOVE, JSTEP) = PMAT (JMOVE, JSTEP)
+               PMAT (JMOVE, JSTEP) = ZTEMP
+C
+  210       CONTINUE
+C
+  220    CONTINUE
+C
+      ELSE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Matrix ROW reversal (Field column interchange - NS)
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGLREV: Section 3.',JPQUIET)
+C
+         IHALF = KROW / 2
+C
+         DO 320 JMOVE = 1, IHALF
+C
+            DO 310 JSTEP = 1, KCOL
+C
+               ZTEMP = PMAT (JSTEP, KROW + 1 - JMOVE)
+               PMAT (JSTEP, KROW + 1 - JMOVE) = PMAT (JSTEP, JMOVE)
+               PMAT (JSTEP, JMOVE) = ZTEMP
+C
+  310       CONTINUE
+C
+  320    CONTINUE
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGLREV: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglsize.F b/interpolation/iglsize.F
new file mode 100755
index 0000000..c863ec4
--- /dev/null
+++ b/interpolation/iglsize.F
@@ -0,0 +1,410 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLSIZE(KSTRIDE, KAREA, KNWE, KNNS, KLN,
+     1   OWEGLOBE, ONPOLE, OSPOLE, KPR, KERR)
+C
+C---->
+C**** *IGLSIZE*
+C
+C     PURPOSE
+C     _______
+C
+C     Evaluate the array sizes for a regular latitude/longitude grid
+C     and area.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLSIZE(KSTRIDE, KAREA, KNWE, KNNS, KLN, OWEGLOBE,
+C    1   ONPOLE, OSPOLE, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KSTRIDE    - The field grid definition (WE, NS).
+C
+C     KAREA      - The field area definition (N, W, S, E) provided by
+C                  the calling routine.
+C
+C     KNWE       - The number of points in the West-East direction in
+C                  the field. This will be zero for an output field.
+C
+C     KNNS       - The number of points in the North-South direction
+C                  in the field. This will be zero for an output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KNWE       - The number of points in the West-East direction in
+C                  the field.
+C
+C     KNNS       - The number of points in the North-South direction
+C                  in the field.
+C
+C     KLN        - The line number of the Northern latitude. This
+C                  value is used during land sea mask processing to
+C                  evaluate offsets in the "standard" files.
+C
+C     OWEGLOBE   - This variable will be true if the array of
+C                  longitudes spans the globe.
+C
+C     ONPOLE     - This variable will be true if the North polar line
+C                  of latitude is included in the grid.
+C
+C     OSPOLE     - This variable will be true if the South polar line
+C                  of latitude is included in the grid.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     -1    The West-East range does not match the stride and number
+C           of points.
+C     -2    The North-South range does not match the stride and
+C           number of points.
+C
+C     The two problems above could be caused by known deficiencies
+C     in the GRIB representation of ranges and strides. They will be
+C     treated as WARNING values.
+C
+C     25101 A global field is requested with an inappropriate
+C           West-East stride.
+C     25102 A global field is requested with an inappropriate
+C           North-South stride.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     If all elements of array KAREA are zero then limits for the
+C     appropriate global grid are generated.
+C
+C     Otherwise it is assumed that all the limits in KAREA have been
+C     validated and the sizes of the arrays required are calculated.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 4 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers   ECMWF   March 1999
+C     Use tolerance when testing E-W and N-S global span.
+C
+C----<
+C     _______________________________________________________
+C
+C     Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      LOGICAL OWEGLOBE, ONPOLE, OSPOLE
+      INTEGER KNWE, KNNS, KLN, KPR, KERR
+      INTEGER KSTRIDE(2), KAREA(4)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPEPSI
+      PARAMETER (JPROUTINE = 25100)
+      PARAMETER (JPEPSI = 50)
+C                          `---> represents 0.5 millidegree to allow for
+C                                grid step being off by upto 0.5 millidgrees
+C
+C
+C     Local variables
+C
+      INTEGER IEAST, IWEST, IREACH, INORTH, ISOUTH
+C
+C     _______________________________________________________
+C
+C     Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSIZE: Section 1.',JPQUIET)
+C
+      IGLSIZE = 0
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Input parameters.',JPQUIET)
+         IF( KNWE.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X     'IGLSIZE: No.long pts = ',KNWE)
+         IF( KNNS.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X     'IGLSIZE: No.lat. pts = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Grid WE stride = ',KSTRIDE(1))
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Grid NS stride = ',KSTRIDE(2))
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Area North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Area West  = ', KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Area South = ', KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Area East  = ', KAREA(4))
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 2. Generate global limits if no limits set
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSIZE: Section 2.',JPQUIET)
+C
+      IF( (KAREA(JPEAST).EQ.0 )  .AND.
+     X    (KAREA(JPWEST).EQ.0 )  .AND.
+     X    (KAREA(JPNORTH).EQ.0 ) .AND.
+     X    (KAREA(JPSOUTH).EQ.0 ) ) THEN
+C
+        IF( MOD(JP360,KSTRIDE(JPWESTEP)).NE.0 ) THEN
+          IGLSIZE = JPROUTINE + 1
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOGR(JP_ERROR,
+     X        'IGLSIZE: West-East stride for global grid = ',
+     X        REAL(KSTRIDE(JPWESTEP))/PPMULT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGLSIZE: This is not a factor of ',
+     X        REAL(JP360)/PPMULT)
+          ENDIF
+C
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X      'IGLSIZE: Interpolation failed.',IGLSIZE)
+C
+          GO TO 900
+        ENDIF
+C
+        IF( MOD(JP180,KSTRIDE(JPNSSTEP)).NE.0 ) THEN
+          IGLSIZE = JPROUTINE + 2
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOGR(JP_ERROR,
+     X        'IGLSIZE: North-South stride for global grid = ',
+     X        REAL(KSTRIDE(JPNSSTEP))/PPMULT)
+            CALL INTLOGR(JP_ERROR,
+     X        'IGLSIZE: This is not a factor of ',
+     X        REAL(JP180)/PPMULT)
+          ENDIF
+C
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X      'IGLSIZE: Interpolation failed.',IGLSIZE)
+C
+          GO TO 900
+        ENDIF
+C
+        KAREA(JPNORTH) = JP90
+        KAREA(JPWEST) = 0
+        KAREA(JPSOUTH) = - JP90
+        KAREA(JPEAST) = JP360 - KSTRIDE(JPWESTEP)
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 3. Standardise West-East limits and check for
+C                West-East global fields
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSIZE: Section 3.',JPQUIET)
+C
+C     Force both KAREA(JPWEST) and KAREA(JPEAST) into standard
+C     range (0 to JP360)
+C
+      IF( KAREA(JPWEST).LT.0 ) KAREA(JPWEST) = KAREA(JPWEST) + JP360
+C
+      IF( KAREA(JPEAST).LT.0 ) KAREA(JPEAST) = KAREA(JPEAST) + JP360
+C
+C     Standardise range so that EAST > WEST
+C
+      IEAST = KAREA(JPEAST)
+      IWEST = KAREA(JPWEST)
+C
+      IF( IEAST.LT.IWEST ) THEN
+C
+        IF( IEAST.LT.0 ) THEN
+          IEAST = IEAST + JP360
+          KAREA(JPEAST) = IEAST
+        ELSE
+          IWEST = IWEST - JP360
+          KAREA(JPWEST) = IWEST
+        ENDIF
+C
+      ENDIF
+C
+      IF( KNWE.EQ.0 ) THEN
+C
+C       Is it a global grid ?
+C
+        IREACH = IEAST - IWEST + KSTRIDE(JPWESTEP)
+C
+        OWEGLOBE = IREACH.GE.JP360
+C
+C       Number of points along line is
+C
+        KNWE = NINT( FLOAT(IREACH) / FLOAT(KSTRIDE(JPWESTEP)) )
+C
+      ELSE
+C
+C       Number of points is set (input field)
+C
+        IF( ABS(IWEST+(KNWE-1)*KSTRIDE(JPWESTEP)-IEAST).GT.
+     X      ((KNWE-1)*JPEPSI) ) THEN
+C
+C         WARNING of possible mismatch
+C
+          IGLSIZE = - 1
+          CALL INTLOGR(JP_WARN,
+     X      'IGLSIZE: West-East range = ',REAL(KAREA(JPWEST))/PPMULT)
+          CALL INTLOGR(JP_WARN,
+     X      'IGLSIZE: to = ',REAL(KAREA(JPEAST))/PPMULT)
+          CALL INTLOG(JP_WARN,
+     X      'IGLSIZE: Does not match no. of pts = ',KNWE)
+          CALL INTLOGR(JP_WARN,
+     X      'IGLSIZE: and stride = ',REAL(KSTRIDE(JPWESTEP))/PPMULT)
+C
+        ENDIF
+C
+        OWEGLOBE = ABS((KNWE * KSTRIDE(JPWESTEP))-JP360).LT.
+     X             (KNWE*JPEPSI)
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 4. Generate points along a line of meridian
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSIZE: Section 4.',JPQUIET)
+C
+      INORTH = KAREA(JPNORTH)
+      ISOUTH = KAREA(JPSOUTH)
+      IF( INORTH.LT.ISOUTH ) THEN
+        INORTH = KAREA(JPSOUTH)
+        ISOUTH = KAREA(JPNORTH)
+      ENDIF
+C
+      IF( KNNS.EQ.0 ) THEN
+C
+C     Number of lines not set (output field)
+C
+        IREACH = INORTH - ISOUTH + KSTRIDE(JPNSSTEP)
+C
+        KNNS = NINT( FLOAT(IREACH) / FLOAT(KSTRIDE(JPNSSTEP)) )
+C
+      ELSE
+C
+C       Number of lines is set (input field)
+C
+        IF(
+     X    ABS(INORTH-(KNNS-1)*KSTRIDE(JPNSSTEP)-ISOUTH)
+     X    .GT.((KNNS-1)*JPEPSI) ) THEN
+C
+C     WARNING of possible mismatch
+C
+          IGLSIZE = - 2
+          CALL INTLOGR(JP_WARN,
+     X      'IGLSIZE: North-South range = ',REAL(INORTH)/PPMULT)
+          CALL INTLOGR(JP_WARN,
+     X      'IGLSIZE: to = ',REAL(ISOUTH)/PPMULT)
+          CALL INTLOG(JP_WARN,
+     X      'IGLSIZE: Does not match no. of pts = ',KNNS)
+          CALL INTLOGR(JP_WARN,
+     X      'IGLSIZE: and stride = ',REAL(KSTRIDE(JPNSSTEP))/PPMULT)
+C
+         ENDIF
+C
+      ENDIF
+C
+      KLN = (JP90 - INORTH ) / KSTRIDE(JPNSSTEP) + 1
+C
+C     Check if North and South poles within grid
+C
+      ONPOLE = INORTH.EQ.JP90
+      OSPOLE = ISOUTH.EQ.(- JP90)
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Output parameters.',JPQUIET)
+        IF( KNWE.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IGLSIZE: No.long pts = ',KNWE)
+        IF( KNNS.NE.0 ) CALL INTLOG(JP_DEBUG,
+     X    'IGLSIZE: No.lat. pts = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Northern line no. =',KLN)
+C
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: W-E fld is global',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: W-E fld is NOT global',JPQUIET)
+        ENDIF
+C
+        IF( ONPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: N pole is in fld.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: N pole is NOT in fld.',JPQUIET)
+        ENDIF
+C
+        IF( OSPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: S pole is in fld.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: S pole is NOT in fld.',JPQUIET)
+        ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSIZE: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglsm01.F b/interpolation/iglsm01.F
new file mode 100755
index 0000000..cadb183
--- /dev/null
+++ b/interpolation/iglsm01.F
@@ -0,0 +1,280 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLSM01 (KUNIT, KNWE, KLONG, KLATV,
+     1   KEXPAND, KLEN, KLSM)
+C
+C---->
+C**** *IGLSM01*
+C
+C     PURPOSE
+C     _______
+C
+C     Read and process one latitude row from the 10 minute land sea
+C     mask.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLSM01 (KUNIT, KNWE, KLONG, KLATV, KEXPAND,
+C    1   KLEN, KLSM)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT      - The unit number of the land sea mask file.
+C     KNWE       - The number of points in the West-East direction
+C                  for this line of latitude.
+C     KLONG      - The array of longitude points for this line of
+C                  latitude.
+C     KLATV      - The latitude for which the land sea mask is
+C                  required.
+C     KEXPAND    - Fixed array of length JPLG01 (The number of items
+C                  in one latitude of the 10 minute land sea mask).
+C                  This is used to improve efficiency.
+C     KLEN       - The length of a full line of latitude in the file.
+C
+C     Output parameters
+C     ________________
+C
+C     KLSM       - The land-sea mask for the specified longitude
+C                  points at this line of latitude.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C     0 + OK
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     25501 Unexpected end of file found when positioning or reading
+C           land sea mask file.
+C     25502 Error return code when positioning or reading land sea
+C           mask file.
+C     25503 Attempt to extract bits beyond array bounds in routine
+C           INXBIT.
+C       :
+C       :
+C
+C     Any error in this routine should be reported to Meteorological
+C     Applications.
+C
+C     Common block usage
+C     __________________
+C
+C     NONE
+C
+C     EXTERNALS
+C     _________
+C
+C     INXBIT     - Standard library routine to extract bits from
+C                  a packed array.
+C     PBREAD     - Standard library routine to read an unstructured
+C                  file.
+C     PBSEEK     - Standard library routine to position a file
+C                  before performing a transfer.
+C     INTLOG(R)  - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The latitude value is used to select which line is required
+C     from the 10 minute land sea mask file. This line is then read
+C     into a buffer and the bit extraction routine used to expand the
+C     line to contain one bit per word. The required words are then
+C     extracted from this array.
+C
+C     The 10 minute land sea mask file contains 1080 lines of 2160
+C     values with each value stored as one bit. (Each line of latitude
+C     is packed in 68*32 = 2176 bits). Each value consists
+C     of a 0 for sea or a 1 for land. The bits are assumed to be in
+C     the centre of a 10 minute square (e.g. the first value is
+C     assumed to be at 0  5' East and 89  55' North).
+C
+C     To reduce system overheads involved in multiple PBSEEKS and
+C     PBREADS, the whole file is read into an array on the first call.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF       Oct 1996
+C     The whole file is read into an array on the first call.
+C     Number of function arguments reduced.
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "jparams.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 25500)
+      INTEGER JPRAWSZ
+      PARAMETER (JPRAWSZ = 73440 )
+C
+C     Function arguments
+      INTEGER KUNIT, KLATV, KLEN, KNWE
+      INTEGER KLONG (KNWE), KLSM (KNWE)
+      INTEGER KEXPAND (JPLG01)
+C
+C     Local variables
+      INTEGER ILAT, IOFF, IERR, JLON
+      INTEGER LENRAW, RAWMASK, RAWSIZE, IFIRST
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      DIMENSION RAWMASK(1)
+#ifdef POINTER_64
+      INTEGER*8 IRAWMSK
+#endif
+      POINTER ( IRAWMSK, RAWMASK )
+      SAVE IRAWMSK, ISIZE
+C
+      DATA RAWSIZE/JPRAWSZ/
+C
+      DATA IFIRST/0/
+      SAVE IFIRST
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IGLSM01 = 0
+C
+      IF( NDBG.GT.2 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGLSM01: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSM01: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSM01: Latitude value = ',KLATV)
+        CALL INTLOG(JP_DEBUG,'IGLSM01: Input rec len(words) = ',KLEN)
+        CALL INTLOG(JP_DEBUG,'IGLSM01: No.long pts = ',KNWE)
+      ENDIF
+C
+C     If it is the first time through, read in the whole land-sea
+C     mask file
+
+      IF( IFIRST.EQ.0 ) THEN
+        IFIRST = 10
+C
+C       Find the file length
+C
+        CALL PBSEEK (KUNIT, 0, 2, LENRAW)
+        IF ( LENRAW.LT.0 ) THEN
+          IGLSM01 = JPROUTINE + 1
+          CALL INTLOG(JP_FATAL,
+     X      'IGLSM01: Error finding length of LSM file',JPQUIET)
+          GO TO 900
+        ENDIF
+C
+C       Rewind the file
+C
+        CALL INTLOG(JP_DEBUG,'IGLSM01: Rewind the LSM file.',JPQUIET)
+        CALL PBSEEK (KUNIT, 0, 0, IERR)
+        IF (IERR .NE. 0) THEN
+          IGLSM01 = JPROUTINE + 2
+          CALL INTLOG(JP_FATAL,
+     X      'IGLSM01: Error rewinding LSM file',JPQUIET)
+          GO TO 900
+        ENDIF
+C
+C       Allocate memory for the array (first time only)
+C
+          IF( ISIZE.EQ.0 ) THEN
+            ISIZE = ((JPRAWSZ*2+JPRLEN-1)*JPILEN)/JPRLEN
+            CALL JMEMHAN( 13, IRAWMSK, ISIZE, 1, IERR)
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'IGLSM01: Memory allocation error.',IRAWMSK)
+              IGLSM01 = JPROUTINE + 4
+              GOTO 900
+            ENDIF
+          ENDIF
+C
+C       Read the file
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'IGLSM01: Read the LSM file of byte size = ',LENRAW)
+        CALL PBREAD (KUNIT, RAWMASK, LENRAW, IERR)
+        IF (IERR .NE. LENRAW) THEN
+          IGLSM01 = JPROUTINE + 3
+          CALL INTLOG(JP_FATAL,'IGLSM01: Unexpected EOF while',JPQUIET)
+          CALL INTLOG(JP_FATAL,'IGLSM01: reading LSM file.',JPQUIET)
+          GO TO 900
+        ENDIF
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. Read one line of 10 minute land-sea mask
+C                and expand into an unpacked array
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF(NDBG.GT.2) CALL INTLOG(JP_DEBUG,'IGLSM01: Section 2.',JPQUIET)
+C
+      ILAT = MIN ( ( (JP90 - KLATV) * JPML01) / JPMULT + 1, JPLT01)
+      IOFF = (ILAT - 1)*KLEN*JPBYTES*8
+C
+      CALL INXBIT (RAWMASK, RAWSIZE, IOFF, KEXPAND, JPLG01, JPBITS, 1,
+     X   'D', IERR)
+C
+      IF (IERR .NE. 0) THEN
+        IGLSM01 = JPROUTINE + 5
+        CALL INTLOG(JP_FATAL,'IGLSM01: Attempt to extract LSM',JPQUIET)
+        CALL INTLOG(JP_FATAL,'IGLSM01: beyond array bounds.',JPQUIET)
+        CALL INTLOG(JP_FATAL,'IGLSM01: Interpolation failed.',IGLSM01)
+        GO TO 900
+      ENDIF
+C
+C     Transfer expanded bitmask line to land sea mask array
+C
+      DO 210 JLON = 1, KNWE
+        IOFF = (KLONG (JLON) * JPML01) / JPMULT + 1
+        KLSM (JLON) = KEXPAND (IOFF)
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF(NDBG.GT.2) CALL INTLOG(JP_DEBUG,'IGLSM01: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglsmb.F b/interpolation/iglsmb.F
new file mode 100755
index 0000000..d2d0449
--- /dev/null
+++ b/interpolation/iglsmb.F
@@ -0,0 +1,471 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLSMB( OISTAND, HIFILE, KIREC, KIGRID, KILINE,
+     X   OOSTAND, HOFILE, KOREC, KOGRID, KOLINE, KPR, KERR)
+C
+C---->
+C**** *IGLSMB*
+C
+C     PURPOSE
+C     -------
+C
+C     Calculate the effects of the land-sea masks on the unnormalised
+C     interpolation weights for regular input and output fields.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IERR = IGLSMB( OISTAND, HIFILE, KIREC, KIGRID, KILINE, OOSTAND,
+C    X   HOFILE, KOREC, KOGRID, KOLINE, KPR, KERR)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     OISTAND - Flag indicating whether the input land-sea mask
+C               is a pre-stored "standard" field.
+C
+C     HIFILE  - The filename for the input land-sea mask.
+C
+C     KIREC   - The length of one latitude record in the input file.
+C
+C     KIGRID  - An array of length 2 giving the row and column
+C               strides in a pre-stored land sea mask file for the
+C               input grid.
+C
+C     KILINE  - An array of length 2 giving the offsets of the
+C               Northern and Western starting points in a
+C               pre-stored land sea mask file for the input grid.
+C
+C     OOSTAND - Flag indicating whether the output land-sea mask
+C               is a prestored "standard" field.
+C
+C     HOFILE  - The filename for the output land-sea mask.
+C
+C     KOREC   - The length of one latitude record in the output file.
+C
+C     KOGRID  - An array of length 2 giving the row and column
+C               strides in a pre-stored land sea mask file for the
+C               output grid.
+C
+C     KOLINE  - An array of length 2 giving the offsets of the
+C               Northern and Western starting points in a
+C               pre-stored land sea mask file for the output grid.
+C
+C     KPR     - The debug print switch.
+C               0  , No debugging output.
+C               1  , Produce debugging output.
+C
+C     KERR    - The error control flag.
+C               -ve, No error message. Return error code.
+C               0  , Hard failure with error message.
+C               +ve, Print error message. Return error code.
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     The common variable WFACT is modified by this routine.
+C
+C     An error indicator
+C
+C     22401 An error exit was returned from the I/O routine PBOPEN.
+C     22402 An error exit was returned from the I/O routine PBCLOSE.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     NINS         - Number of grid points in NS direction for input
+C                    field (used in grspace.h).
+C     NIWE         - Number of grid points in WE direction for input
+C                    field is used.
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NONS         - Number of grid points in NS direction for output
+C                    field is used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is used.
+C
+C     grspace.h    - This file contains all the work space array
+C                    definitions for grid point to grid point
+C                    interpolation.
+C
+C     MEXPAND      - Array of length JPLG01 (see parim.h) used to
+C                    expand one latitude line of the 10 minute land
+C                    sea mask file to have one word per bit for
+C                    improved efficiency.
+C     MWORK        - Array of length JPLONG (see parim.h) used to
+C                    read one latitude line of a standard land sea
+C                    mask file.
+C
+C     MILATG       - The input field latitudes.
+C     MILONG       - The input field longitudes.
+C     MILSM        - Work array used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MNSIND       - The latitude line numbers (array offset) of the
+C                    input field associated with each line of
+C                    latitude in the output field.
+C     MOLATG       - The output field latitudes.
+C     MOLONG       - The output field longitudes.
+C     MOLSM        - Work array used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MWEIND       - This array holds the longitude points (array
+C                    offset) from the input field associated with
+C                    each longitude point in the output field.
+C     WFACT        - The interpolation weights for each point in the
+C                    output field.
+C
+C
+C     Externals
+C     ---------
+C
+C     ABORTX    - Standard routine to kill task.
+C     IGLSM01   - Read and process one latitude row from the 10
+C                 minute land sea mask.
+C     IGLSMR    - Calculate the effects of the land-sea masks for one
+C                 line of latitude on the unnormalised interpolation
+C                 weights.
+C     IGLSMST   - Read and process one line of latitude from a
+C                 standard land sea mask file.
+C     PBCLOSE   - Close a land sea mask file after processing.
+C     PBOPEN    - Open a land sea mask file for processing.
+C     INTLOG(R) - Logs messages.
+C     JINDEX    - Returns length of character string
+C
+C
+C     Method
+C     ------
+C
+C     All the land sea mask data is in (0-1) form. If a point in the
+C     input field has a different land sea mask value from the
+C     corresponding point in the output field then its interpolating
+C     weight is multiplied by a scaling factor. This scaling factor
+C     is currently 0.2 so that the effect of such points in the final
+C     interpolation is reduced.
+C
+C     The land-sea mask files are kept open between calls to this
+C     routine.
+C
+C
+C     Reference
+C     ---------
+C     None
+C
+C
+C     Comments
+C     --------
+C     None
+C
+C
+C     AUTHOR
+C     ------
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C
+C     Modifications
+C     -------------
+C
+C     J.D.Chambers      ECMWF       Oct 1996
+C     Reduced number of parameters in call to IGLSMST and IGLSM01
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C     Dummy arguments
+      LOGICAL OISTAND, OOSTAND
+      CHARACTER *(*) HIFILE, HOFILE
+      INTEGER KIREC, KOREC, KPR, KERR
+      INTEGER KIGRID(2), KILINE(2), KOGRID(2), KOLINE(2)
+C
+C     Local variables
+      INTEGER IIUNIT, IOUNIT, IIFILE, IOFILE
+      INTEGER ILATN, ILATS, IISTRIDE, IOSTRIDE, IOFF, IPR, IERR
+      INTEGER JOLAT
+      CHARACTER*80 XHIFILE, XHOFILE
+      CHARACTER*2 NEWFILE, MSKFILE
+      INTEGER XIIUNIT, XIOUNIT, II
+      DATA XIIUNIT/0/
+      DATA XIOUNIT/0/
+      SAVE  XHIFILE, XHOFILE, XIIUNIT, XIOUNIT
+C
+C     Multiplication factor for unlike land-sea masks
+C
+      REAL PPLSM
+      PARAMETER (PPLSM = 0.2E0)
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 22400)
+C
+C     External functions
+      INTEGER IGLSMR, IGLSMST, IGLSM01, JINDEX
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSMB: Section 1.',JPQUIET)
+C
+      IGLSMB = 0
+C
+      IIFILE = JINDEX(HIFILE)
+      IOFILE = JINDEX(HOFILE)
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGLSMB: Input parameters are:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSMB: Land sea mask file name:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,HIFILE(1: IIFILE),JPQUIET)
+        IF( OISTAND ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSMB: Stnd fld flag = TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSMB: Stnd fld flag = FALSE',JPQUIET)
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'IGLSMB: LSM file rec len = ',KIREC)
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid stride WE = ',KIGRID(1))
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid stride NS = ',KIGRID(2))
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid start N = ',KILINE(1))
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid start W = ',KILINE(2))
+C
+        CALL INTLOG(JP_DEBUG,'IGLSMB: Output parameters are:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSMB: Land sea mask file name:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,HOFILE(1: IIFILE),JPQUIET)
+        IF( OOSTAND ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSMB: Stnd fld flag = TRUE',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSMB: Stnd fld flag = FALSE',JPQUIET)
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'IGLSMB: LSM file rec len = ',KOREC)
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid stride WE = ',KOGRID(1))
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid stride NS = ',KOGRID(2))
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid start N = ',KOLINE(1))
+        CALL INTLOG(JP_DEBUG,'IGLSMB: The grid start W = ',KOLINE(2))
+      ENDIF
+C
+      IF( MILONG(2).GE.MILONG(1) ) THEN
+        IISTRIDE = MILONG(2) - MILONG(1)
+      ELSE
+        IISTRIDE = MILONG(2) + JP360 - MILONG(1)
+      ENDIF
+C
+      IF( MOLONG(2).GE.MOLONG(1) ) THEN
+        IOSTRIDE = MOLONG(2) - MOLONG(1)
+      ELSE
+        IOSTRIDE = MOLONG(2) + JP360 - MOLONG(1)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Open files for input and output land sea masks
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSMB: Section 2.',JPQUIET)
+C
+C     See if first time through or input land sea mask filename has
+C     changed since last access
+C
+      II = JINDEX(HIFILE)
+      IF( XHIFILE(1:II).NE.HIFILE(1:II) ) THEN
+C
+C       Open input land sea mask file
+C
+        IF( XIIUNIT.NE.0 ) CALL PBCLOSE(XIIUNIT,IERR)
+        CALL PBOPEN(IIUNIT, HIFILE, 'r', IERR)
+        IF( IERR.NE.0 ) THEN
+          IGLSMB = JPROUTINE + 1
+C
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOG(JP_ERROR,'IGLSMB: PBOPEN error = ',IERR)
+            CALL INTLOG(JP_ERROR,'IGLSMB: trying to open file:',JPQUIET)
+            CALL INTLOG(JP_ERROR, HIFILE(1:IIFILE) ,JPQUIET)
+C
+            IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X        'IGLSMB: Interpolation failed.',JPQUIET)
+          ENDIF
+          GOTO 900
+        ENDIF
+        XIIUNIT = IIUNIT
+        XHIFILE(1:II) = HIFILE(1:II)
+        NEWFILE(1:1) = 'Y'
+C
+C     Just rewind if same file still in use
+C
+      ELSE
+        IIUNIT = XIIUNIT
+        NEWFILE(1:1) = 'N'
+      ENDIF
+C
+C     See if first time through or output land sea mask filename has
+C     changed since last access
+C
+      II = JINDEX(HOFILE)
+      IF( XHOFILE(1:II).NE.HOFILE(1:II) ) THEN
+C
+C       Open output land sea mask file
+C
+        IF( XIOUNIT.NE.0 ) CALL PBCLOSE(XIOUNIT,IERR)
+        CALL PBOPEN(IOUNIT, HOFILE, 'r', IERR)
+        IF( IERR.NE.0 ) THEN
+          IGLSMB = JPROUTINE + 1
+C
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOG(JP_ERROR,'IGLSMB: PBOPEN error = ',IERR)
+            CALL INTLOG(JP_ERROR,'IGLSMB: trying to open file:',JPQUIET)
+            CALL INTLOG(JP_ERROR, HOFILE(1:IOFILE) ,JPQUIET)
+C
+            IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X        'IGLSMB: Interpolation failed.',JPQUIET)
+            GOTO 900
+          ENDIF
+        ENDIF
+        XIOUNIT = IOUNIT
+        XHOFILE(1:II) = HOFILE(1:II)
+        NEWFILE(2:2) = 'Y'
+C
+C     Just rewind if same file still in use
+C
+      ELSE
+        IOUNIT = XIOUNIT
+        NEWFILE(2:2) = 'N'
+      ENDIF
+C     -----------------------------------------------------------------|
+C*    Section 3. Calculate arrays of weights
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSMB: Section 3.',JPQUIET)
+C
+      IPR = KPR
+C
+      DO JOLAT = 1, NONS
+C
+C       Get line for output array
+C
+        IF( OOSTAND ) THEN
+C
+          IOFF = (KOLINE(JPNORTH) + (JOLAT - 1) * KOGRID(JPNSSTEP)
+     X         - 1) * KOREC
+C
+          MSKFILE(2:2) = 'O'
+          MSKFILE(1:1) = NEWFILE(2:2)
+          IERR = IGLSMST(IOUNIT, IOFF, NOWE, KOLINE(JPWEST),
+     X                   KOGRID(JPWESTEP), KOREC, MOLSM, MSKFILE)
+          NEWFILE(2:2) = 'N'
+C
+        ELSE
+          IERR = IGLSM01(IOUNIT, NOWE, MOLONG, MOLATG(JOLAT),
+     X                   MEXPAND, KOREC, MOLSM)
+        ENDIF
+C
+        IF( IERR.GT.0 ) THEN
+          IGLSMB = IERR
+          GOTO 900
+        ENDIF
+C
+        ILATN = MNSIND(JP_I_N, JOLAT)
+        ILATS = MNSIND(JP_I_S, JOLAT)
+C
+C       Get lines for input array
+C
+        IF( OISTAND ) THEN
+C
+          IOFF = (KILINE(JPNORTH) + (ILATN - 1) * KIGRID(JPNSSTEP)
+     X             - 1) * KIREC
+C
+          MSKFILE(2:2) = 'I'
+          MSKFILE(1:1) = NEWFILE(1:1)
+          IERR = IGLSMST(IIUNIT, IOFF, NIWE, KILINE(JPWEST),
+     X         KIGRID(JPWESTEP), KIREC, MILSM(1, JP_I_N), MSKFILE)
+          NEWFILE(1:1) = 'N'
+C
+          IF( IERR.GT.0 ) THEN
+            IGLSMB = IERR
+            GOTO 900
+          ENDIF
+C
+          IOFF = (KILINE(JPNORTH) + (ILATS - 1) * KIGRID(JPNSSTEP)
+     X         - 1) * KIREC
+C
+          MSKFILE(2:2) = 'I'
+          MSKFILE(1:1) = NEWFILE(1:1)
+          IERR = IGLSMST(IIUNIT, IOFF, NIWE, KILINE(JPWEST),
+     X         KIGRID(JPWESTEP), KIREC, MILSM(1, JP_I_S), MSKFILE)
+          NEWFILE(1:1) = 'N'
+C
+        ELSE
+C
+          IERR = IGLSM01(IIUNIT, NIWE, MILONG, MILATG(ILATN),
+     X         MEXPAND, KIREC, MILSM(1, JP_I_N))
+C
+          IF( IERR.GT.0 ) THEN
+            IGLSMB = IERR
+            GOTO 900
+          ENDIF
+C
+          IERR = IGLSM01(IIUNIT, NIWE, MILONG, MILATG(ILATS),
+     X         MEXPAND, KIREC, MILSM(1, JP_I_S))
+C
+        ENDIF
+C
+        IF( IERR.GT.0 ) THEN
+          IGLSMB = IERR
+          GOTO 900
+        ENDIF
+C
+C       Now modify the unormalised weight for land-sea mask
+C
+        IERR = IGLSMR(MILSM(1, JP_I_N), MILSM(1, JP_I_S), MOLSM,
+     X      MWEIND, MWEIND, NOWE, WFACT(1,(JOLAT - 1) * NOWE + 1),
+     X      IPR, KERR)
+C
+        IF( IERR.GT.0 ) THEN
+          IGLSMB = IERR
+          GOTO 900
+        ENDIF
+C
+        IPR = KPR - 1
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGLSMB: Section 9.',JPQUIET)
+C
+ 9001 FORMAT(' IGLSMB ERROR', I6, ' - ', A, ' returned code', I6 /
+     1   21X, ' when ', A, 'ing file - ', A)
+C
+C
+      RETURN
+      END
diff --git a/interpolation/iglsmd.F b/interpolation/iglsmd.F
new file mode 100755
index 0000000..71cf8f9
--- /dev/null
+++ b/interpolation/iglsmd.F
@@ -0,0 +1,491 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLSMD(KDATE,KREPR,KGRID,KGAUSS,KAREA,KLN,
+     X   HFILE, OSTAND, KOGRID, KOLINE, KNREC, KPR, KERR)
+C
+C---->
+C**** *IGLSMD*
+C
+C     PURPOSE
+C     _______
+C
+C     Generate the land sea mask file information.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLSMD(KDATE,KREPR,KGRID,KGAUSS,KAREA,KLN,
+C    X          HFILE, OSTAND, KOGRID, KOLINE, KNREC, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KDATE      - The field date in YYMMDD format
+C
+C     KREPR      - The field representation.
+C
+C     KGRID      - The latitude/longitude field grid definition
+C                  (WE, NS) or Gaussian truncation.
+C
+C     KAREA      - The field area definition (N, W, S, E).
+C
+C     KLN        - The Northern line number. This is mainly used for
+C                  Gaussian grids.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     HFILE      - The filename for the land-sea mask.
+C
+C     OSTAND     - Flag indicating whether the land-sea mask is
+C                  a prestored "standard" field.
+C
+C     KOGRID     - The grid stride (WE, NS) in a pre-stored
+C                  "standard" land sea mask file.
+C
+C     KOLINE     - The offsets (N, W) of the first points in a
+C                  pre-stored "standard" land sea mask file.
+C
+C     KNREC      - The file line length for the input array. This is
+C                  used for positioning and transfer purposes.
+C
+C     Return value
+C     ____________
+C
+C     The status indicator (INTEGER).
+C          = 0 if OK,
+C          = 25201 if data representation type is not valid.
+C          = 25202 if unable to locate lsm file for reduced gaussian
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     GETENV     - Standard routine to get environmental variable.
+C     INDEX      - Intrinsic routine to find position of substring.
+C     LEN        - Intrinsic routine to find length of string.
+C     INTLOG(R)  - Logs messages.
+C     EMOSNUM    - Gives current EMOSLIB version number.
+C
+C     METHOD
+C     ______
+C
+C     NOTE This routine is highly machine dependent as the path and
+C     file names for all land sea mask files are in the text. GETENV
+C     is used to allow the specification of an alternate directory
+C     for the storage of land sea masks (variable MARS_LSM_PATH).
+C
+C     The grid definition is compared with the definitions of the
+C     pre-stored land sea mask files. If a match is found then the
+C     appropriate filename is returned and the stride and offset
+C     arrays are set to appropriate values. If no match is found then
+C     the name of the basic 10 minute 0-1 land sea mask file is
+C     returned.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 5 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        7 Feb 96
+C     Add lookup for reduced gaussian fields
+C
+C     J.D.Chambers     ECMWF       Nov 98
+C     Change default pathnames.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      CHARACTER *(*) HFILE
+      LOGICAL OSTAND
+      INTEGER KDATE, KREPR, KGAUSS, KLN, KNREC, KPR, KERR
+      INTEGER KGRID(2), KAREA(4), KOGRID(2), KOLINE(2)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 25200)
+      INTEGER JPFILES
+      INTEGER JPN80, JPR160, JP0P5LL, JP0P25LL
+      PARAMETER (JPFILES = 4)
+      PARAMETER (JPN80 = 1)
+      PARAMETER (JPR160 = 2)
+      PARAMETER (JP0P5LL = 3)
+      PARAMETER (JP0P25LL = 4)
+C
+      INTEGER JPNORMAL
+      CHARACTER YPENVIRON*13, YPNORMAL*44, YPNORMAS*256
+      PARAMETER (YPENVIRON = 'MARS_LSM_PATH')
+#ifdef CRAY
+      PARAMETER (JPNORMAL = 30)
+      PARAMETER (YPNORMAL = '/tmp/emos_sms/tables/lsm_64bit')
+#endif
+
+#ifdef __uxp__
+      PARAMETER (JPNORMAL = 14)
+      PARAMETER (YPNORMAL = '/mrfs/postproc')
+#endif
+
+#if (!defined CRAY) && (!defined __uxp__)
+      PARAMETER (JPNORMAL = 42)
+      PARAMETER (YPNORMAL ='/usr/local/lib/metaps/tables/interpolation')
+#endif
+
+
+#ifdef TABLE_PATH
+      DATA YPNORMAS / TABLE_PATH /
+#else
+      DATA YPNORMAS / '' /
+#endif
+C
+C     Local variables
+C
+      CHARACTER*6 YEMOSNM,YFLAG,YFLAG1
+      INTEGER IEMOSNM
+      INTEGER ILSTRIDE, IRET, IOFFSET
+      LOGICAL LDEBUG, L10MIN, L025
+C
+      CHARACTER*80 YBASE, YENVBACK
+C
+C     List of standard filenames       - YFILES
+C     File for 10 minute land sea mask - YLSM10
+C
+      CHARACTER*40 YFILES (JPFILES), YLSM10
+C
+      INTEGER IBASELEN, ILSM10LEN
+      INTEGER IFILELEN (JPFILES)
+C
+C     External functions
+C
+      INTEGER EMOSNUM, LSM_RED
+      EXTERNAL EMOSNUM, LSM_RED
+C
+      DATA YLSM10 / 'lsm_xx_lsm10m01' /
+      DATA ILSM10LEN / 15 /
+      DATA YFILES/'lsm_xx_lsmn080','lsm_xx_lsmr160',
+     X    'lsm_xx_lsm0p5deg', 'lsm_xx_lsm0p25deg'/
+      DATA IFILELEN/ 14, 14, 16, 17 /
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      L10MIN = .FALSE.
+C     Force processing with 10min lsm with env variable
+        CALL GETENV('LSM_10MIN', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) L10MIN = .TRUE.
+
+      IF( L10MIN ) CALL INTLOG(JP_DEBUG,
+     X  'IGLSMD: Forcing processing with 10 min',JPQUIET)
+
+      L025 = .FALSE.
+C     Processing with 0.25 Predefined lsm Enable
+        CALL GETENV('LSM_025', YFLAG1)
+        IF( YFLAG1(1:1).EQ.'1' ) L025 = .TRUE.
+
+      IF( L025 ) CALL INTLOG(JP_DEBUG,
+     X 'IGLSMD: Processing with 0.25 Predefined LSM Enabled',JPQUIET)
+
+      IGLSMD = 0
+      LDEBUG = ( KPR.GE.1 )
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Date = ',KDATE)
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Grid representation = ',KREPR)
+        CALL INTLOG(JP_DEBUG,'IGLSMD: N line number = ', KLN)
+C
+        IF( (KREPR.EQ.JPGAUSSIAN).OR.
+     X      (KREPR.EQ.JPQUASI)   .OR.
+     X      (KREPR.EQ.JPQGGROT)  .OR.
+     X      (KREPR.EQ.JPFGGROT) ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSMD: Gaussian trunc = ',KGAUSS)
+        ELSE IF( (KREPR.EQ.JPREGULAR).OR.(KREPR.EQ.JPREGROT) ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSMD: Grid WE = ',KGRID(1))
+          CALL INTLOG(JP_DEBUG,'IGLSMD: Grid NS = ',KGRID(2))
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Area North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Area West  = ', KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Area South = ', KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IGLSMD: Area East  = ', KAREA(4))
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Check environment variable for path of land sea masks.
+C
+C                GETENV returns a blank value if the environmental
+C                variable is not set. This is true for C90, Sun and
+C                SGI.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF ( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGLSMD: Section 2.',JPQUIET)
+C
+      CALL GETENV( YPENVIRON, YENVBACK)
+C
+      IF( YENVBACK.EQ.' ' ) THEN
+#ifdef __uxp__
+C
+C       On Fujitsus, need to build different pathname for vpp300,
+C       vpp700, vpp700e and vpp5000
+C
+        CALL GETENV ('HOST', YENVBACK)
+        IF( YENVBACK(1:7).EQ.'vpp5000' )THEN
+          YBASE = '/vpp5000' // YPNORMAL
+          IBASELEN = JPNORMAL + LEN('/vpp5000')
+        ELSE IF( YENVBACK(1:7).EQ.'vpp700e' )THEN
+          YBASE = '/vpp700e' // YPNORMAL
+          IBASELEN = JPNORMAL + LEN('/vpp700e')
+        ELSE IF( YENVBACK(1:6).EQ.'vpp700' )THEN
+          YBASE = '/vpp700' // YPNORMAL
+          IBASELEN = JPNORMAL + LEN('/vpp700')
+        ELSE
+          YBASE = YPNORMAL
+		  IBASELEN = JPNORMAL
+        ENDIF
+#else
+         IOFFSET = INDEX(YPNORMAS,' ') - 1
+         IF(IOFFSET.GT.0) THEN
+           YBASE = YPNORMAS(1:IOFFSET)//'/land_sea_mask/'
+cs           IBASELEN = LEN(YBASE)
+cs big fix by Iain Russel
+           IBASELEN = INDEX(YBASE,' ') - 1
+         ELSE
+           YBASE = YPNORMAL
+		   IBASELEN = JPNORMAL
+         ENDIF
+#endif
+      ELSE
+        YBASE = YENVBACK
+        IBASELEN  = INDEX (YENVBACK, ' ') - 1
+        IF( IBASELEN.LT.0 ) IBASELEN = LEN (YENVBACK)
+        IF( IBASELEN.EQ.0 ) THEN
+#ifdef __uxp__
+C
+C         On Fujitsus, need to build different pathname for vpp300,
+C         vpp700, vpp700e and vpp5000
+C
+          CALL GETENV ('HOST', YENVBACK)
+          IF( YENVBACK(1:7).EQ.'vpp5000' )THEN
+            YBASE = '/vpp5000' // YPNORMAL
+            IBASELEN = JPNORMAL + LEN('/vpp5000')
+          ELSE IF( YENVBACK(1:7).EQ.'vpp700e' )THEN
+            YBASE = '/vpp700e' // YPNORMAL
+            IBASELEN = JPNORMAL + LEN('/vpp700e')
+          ELSE IF( YENVBACK(1:6).EQ.'vpp700' )THEN
+            YBASE = '/vpp700' // YPNORMAL
+            IBASELEN = JPNORMAL + LEN('/vpp700')
+          ELSE
+            YBASE = YPNORMAL
+            IBASELEN = JPNORMAL
+          ENDIF
+#else
+          YBASE = YPNORMAL
+          IBASELEN = JPNORMAL
+#endif
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 3. Standard Gaussian grids - N80
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF( (KREPR.EQ.JPGAUSSIAN).OR.
+     X    (KREPR.EQ.JPFGGROT) ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGLSMD: Section 3.',JPQUIET)
+C
+        ILSTRIDE = JP90 / KGAUSS
+        KOGRID (JPWESTEP) = 1
+        KOGRID (JPNSSTEP) = 1
+        KOLINE (JPWEST) = KAREA (JPWEST) / ILSTRIDE + 1
+        KOLINE (JPNORTH) = KLN
+C
+        IF( KGAUSS.EQ.80 ) THEN
+C
+          HFILE = YBASE(1:IBASELEN) // '/' //
+     X              YFILES(JPN80)(1:IFILELEN(JPN80) )
+          OSTAND = .TRUE.
+          KNREC = 320
+C
+        ELSE
+C
+          HFILE = YBASE(1:IBASELEN) // '/' // YLSM10(1:ILSM10LEN)
+          OSTAND = .FALSE.
+          KNREC = JPPACK
+C
+        ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 4. Standard reduced Gaussian grids - R160
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+      ELSE IF( KREPR.EQ.JPQUASI ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGLSMD: Section 4.',JPQUIET)
+C
+        KOGRID(JPWESTEP) = 1
+        KOGRID(JPNSSTEP) = 1
+        KOLINE(JPWEST)   = 1
+        KOLINE(JPNORTH)  = KLN
+C
+        IF( KGAUSS.EQ.160 ) THEN
+#ifdef CRAY
+          IRET = LSM_RED(KGAUSS,KDATE,64,HFILE)
+#else
+          IRET = LSM_RED(KGAUSS,KDATE,32,HFILE)
+#endif
+          IF( IRET.EQ.0 ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'IGLSMD: LSM_RED unable to locate lsm file.',JPQUIET)
+            IGLSMD = JPROUTINE + 2
+            GOTO 900
+          ENDIF
+          OSTAND = .TRUE.
+          KNREC = 0
+        ELSE
+C
+          HFILE = YBASE(1:IBASELEN) // '/' // YLSM10(1:ILSM10LEN)
+          OSTAND = .FALSE.
+          KNREC = JPPACK
+C
+        ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 5. Latitude/longitude grids
+C
+C                The standard 0.5 degree grid is used for any
+C                grid which has a stride which is a multiple of
+C                0.5 and North and South limits which are a
+C                multiple of 0.5
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+      ELSE IF( (KREPR.EQ.JPREGULAR).OR.(KREPR.EQ.JPREGROT) ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGLSMD: Section 5.',JPQUIET)
+C
+        IF( MOD(KGRID(JPNSSTEP),JP0P5).EQ.0 .AND.
+     1      MOD(KGRID(JPWESTEP),JP0P5).EQ.0 .AND.
+     2      MOD(KAREA(JPNORTH), JP0P5).EQ.0 .AND.
+     3      MOD(KAREA(JPWEST),  JP0P5).EQ.0 .AND.
+     4      .NOT.L10MIN ) THEN
+C
+          HFILE = YBASE(1:IBASELEN) // '/' //
+     1         YFILES(JP0P5LL) (1: IFILELEN (JP0P5LL) )
+          OSTAND = .TRUE.
+          KNREC = 720
+C
+          KOGRID(JPWESTEP) = KGRID(JPWESTEP) / JP0P5
+          KOGRID(JPNSSTEP) = KGRID(JPNSSTEP) / JP0P5
+          KOLINE(JPWEST)   = KAREA(JPWEST) / JP0P5 + 1
+          KOLINE(JPNORTH)  = (JP90 - KAREA(JPNORTH) ) / JP0P5 + 1
+C
+        ELSE
+C
+          HFILE = YBASE(1:IBASELEN) // '/' // YLSM10(1:ILSM10LEN)
+          OSTAND = .FALSE.
+          KNREC = JPPACK
+C
+          KOGRID (JPWESTEP) = 1
+          KOGRID (JPNSSTEP) = 1
+          KOLINE (JPWEST) = 1
+          KOLINE (JPNORTH) = KLN
+C
+        ENDIF
+      ELSE
+        IGLSMD = JPROUTINE + 1
+        IF( KERR.GE.0 ) CALL INTLOG(JP_ERROR,
+     X     'IGLSMD: Invalid data representation = ',KREPR)
+C
+        IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X     'IGLSMD: Interpolation failed.',IGLSMD)
+C       GOTO 900
+      ENDIF
+
+      IF( L025 ) THEN
+        IF( KGRID(JPNSSTEP).EQ.JP0P25.AND.
+     1      KGRID(JPWESTEP).EQ.JP0P25.AND.
+     2      MOD(KAREA(JPNORTH), JP0P25).EQ.0 .AND.
+     3      MOD(KAREA(JPWEST),  JP0P25).EQ.0 .AND.
+     4      .NOT.L10MIN ) THEN
+C
+          HFILE = YBASE(1:IBASELEN) // '/' //
+     1       YFILES(JP0P25LL) (1: IFILELEN (JP0P25LL) )
+          OSTAND = .TRUE.
+          KNREC = 1440
+C
+            KOGRID(JPWESTEP) = 1
+            KOGRID(JPNSSTEP) = 1
+            KOLINE(JPWEST)   = KAREA(JPWEST) / JP0P25 + 1
+            KOLINE(JPNORTH)  = (JP90 - KAREA(JPNORTH) ) / JP0P25 + 1
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'IGLSMD: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglsmr.F b/interpolation/iglsmr.F
new file mode 100755
index 0000000..2fd35fa
--- /dev/null
+++ b/interpolation/iglsmr.F
@@ -0,0 +1,232 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLSMR (KILSMN, KILSMS, KOLSM, KNINDEX,
+     1   KSINDEX, KOWE, PWFACT, KPR, KERR)
+C
+C---->
+C**** *IGLSMR*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the effects of the land sea masks for one line of
+C     latitude on the unnormalised interpolation weights.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLSMR (KILSMN, KILSMS, KOLSM, KNINDEX, KSINDEX,
+C    1   KOWE, PWFACT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KILSMN     - The land sea mask for the line of latitude of the
+C                  input field North of the output row.
+C
+C     KILSMS     - The land sea mask for the line of latitude of the
+C                  input field South of the output row.
+C
+C     KOLSM      - The land sea mask for the current line of latitude
+C                  of the output field.
+C
+C     KNINDEX    - This array contains the array offsets of the West
+C                  and East points in the input line of latitude North
+C                  of the current output field line of latitude.
+C
+C     KSINDEX    - This array contains the array offsets of the West
+C                  and East points in the input line of latitude South
+C                  of the current output field line of latitude.
+C
+C     KOWE       - The number of output field points in the West-East
+C                  direction for this line of latitude.
+C
+C     PWFACT     - The array of interpolating weights to the four
+C                  neighbouring points for every output point in this
+C                  line of latitude.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PWFACT     - The modified array of interpolating weights to the
+C                  four neighbouring points for every output point in
+C                  this line of latitude.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     Every time that a point in the input array has a land-sea mask
+C     value (0-1) that does not match the corresponding output point
+C     its interpolating value is multiplied by a scaling factor
+C     (currently 0.2). This reduces the influence of such points on
+C     the final interpolation.
+C
+C     The parameter list is designed to allow for quasi regular input
+C     fields with different grid spacing in the Northern and Southern
+C     lines of latitude.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KOWE, KPR, KERR
+      INTEGER KNINDEX (2, KOWE), KSINDEX (2, KOWE)
+      INTEGER KILSMN (*), KILSMS (*), KOLSM (KOWE)
+      REAL PWFACT (4, KOWE)
+C
+C     Local variables
+      INTEGER JOLON
+C
+C     Multiplication factor for unlike land-sea masks
+      REAL PPLSM
+      PARAMETER (PPLSM = 0.2E0)
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 25300)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLSMR: Section 1.',JPQUIET)
+C
+      IGLSMR = 0
+C
+      IF (KPR .GE. 1) 
+     X  CALL INTLOG(JP_DEBUG,'IGLSMR: No. of output longitudes = ',KOWE)
+C
+C     _______________________________________________________
+C
+C*    Section 2. Calculate arrays of weights
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLSMR: Section 2.',JPQUIET)
+C
+C     Now modify the unormalised weight for land-sea mask
+C
+      DO 210 JOLON = 1, KOWE
+C
+         IF (KILSMN (KNINDEX (JP_I_W, JOLON)) .NE.
+     1      KOLSM (JOLON) )
+     2         PWFACT (JP_I_NW, JOLON) =
+     3            PWFACT (JP_I_NW, JOLON) * PPLSM
+C
+         IF (KILSMN (KNINDEX (JP_I_E, JOLON)) .NE.
+     1      KOLSM (JOLON) )
+     2         PWFACT (JP_I_NE, JOLON) =
+     3            PWFACT (JP_I_NE, JOLON) * PPLSM
+C
+         IF (KILSMS (KSINDEX (JP_I_W, JOLON)) .NE.
+     1      KOLSM (JOLON) )
+     2         PWFACT (JP_I_SW, JOLON) =
+     3            PWFACT (JP_I_SW, JOLON) * PPLSM
+C
+         IF (KILSMS (KSINDEX (JP_I_E, JOLON)) .NE.
+     1      KOLSM (JOLON) )
+     2         PWFACT (JP_I_SE, JOLON) =
+     3            PWFACT (JP_I_SE, JOLON) * PPLSM
+C
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGLSMR: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/iglsmst.F b/interpolation/iglsmst.F
new file mode 100755
index 0000000..535ce7c
--- /dev/null
+++ b/interpolation/iglsmst.F
@@ -0,0 +1,336 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGLSMST (KUNIT, KOFF, KNWE, KFIRST, KSTRIDE,
+     1   KLEN, KLSM, NEWFILE)
+C
+C---->
+C**** *IGLSMST*
+C
+C     PURPOSE
+C     _______
+C
+C     Read and process one line of latitude from a standard land sea
+C     mask file.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGLSMST (KUNIT, KOFF, KNWE, KFIRST, KSTRIDE,
+C    1   KLEN, KLSM)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT      - The unit number of the land sea mask file.
+C     KOFF       - The word offset within the file of the required
+C                  line. This is used to position the file.
+C     KNWE       - The number of points in the West-East direction
+C                  for this line of latitude.
+C     KFIRST     - The position of the first land sea mask point
+C                  required within the array.
+C     KSTRIDE    - The distance between the longitude points required.
+C     KLEN       - The length of a full latitude row of the land sea
+C                  mask file.
+C     NEWFILE    - 'YI' if the input land-sea mask file is to be
+C                       accessed and it has changed
+C                  'NI' if the input land-sea mask file is to be
+C                       accessed and it has not changed
+C                  'YO' if the output land-sea mask file is to be
+C                       accessed and it has not changed
+C                  'NO' if the output land-sea mask file is to be
+C                       accessed and it has not changed
+C
+C     Output parameters
+C     ________________
+C
+C     KLSM       - The array of land sea mask values for this
+C                  latitude value and set of longitude points.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     25401 Unexpected end of file found when positioning or reading
+C           land sea mask file.
+C     25402 Error return code when positioning or reading land sea
+C           mask file.
+C
+C     Any error in this routine should be reported to Meteorological
+C     Applications.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     PBREAD     - Standard library routine to read unstructured
+C                  files.
+C     PBSEEK     - Standard library routine to position an
+C                  unstructured file.
+C     INTLOG(R)  - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     A full standard latitude line is transferred to the work array
+C     and then the required points copied into the output array.
+C
+C     The land sea mask file is assumed to use one integer word for
+C     each value even though these values can only be 0 or 1. This
+C     gives a gain in efficiency at a cost in file size.
+C
+C     To reduce system overheads involved in multiple PBSEEKS and
+C     PBREADS, the whole file is read into an array on the first call.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF       Oct 1996
+C     The whole file is read into an array on the first call.
+C     Number of function arguments reduced.
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        June 1999
+C     Use bitmaps for landsea masks
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "jparams.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 25400)
+      INTEGER JPRAWSZ
+      PARAMETER (JPRAWSZ = (JPLONG*JPLAT+(JPBITS-1))/JPBITS )
+C
+C     Function arguments
+C
+      INTEGER KUNIT, KOFF, KFIRST, KSTRIDE, KLEN, KNWE
+      INTEGER KLSM (KNWE)
+      CHARACTER*2 NEWFILE
+C
+C     Local variables
+C
+      INTEGER JDCSIZE, JDCINDX, JDCPNT, JDCRET, JLSM
+      DIMENSION JLSM(1440)
+C                      `-------> good upto 0.25 degree latitude step
+C
+      INTEGER IPOINT, IERR, ISIZE
+      DATA ISIZE/0/
+      INTEGER JLON
+      INTEGER LENRAW, IFIRST, IFILE, INDEX
+      DIMENSION LENRAW(2)
+      DIMENSION IFILE(2)
+      INTEGER NRAWMSK
+      DIMENSION NRAWMSK(1)
+#ifdef POINTER_64
+      INTEGER*8 IRAWMSK
+#endif
+      POINTER (IRAWMSK, NRAWMSK )
+      DATA IFILE/0,0/
+      SAVE IFILE, LENRAW, IRAWMSK, ISIZE
+C
+C     Statement function
+C
+      INTEGER I, J
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IGLSMST = 0
+C
+      IF( NDBG.GT.2) THEN
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Word offset in file = ',KOFF)
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Input rec len(words)= ',KLEN)
+        CALL INTLOG(JP_DEBUG,'IGLSMST: No. of longitude pts = ',KNWE)
+        CALL INTLOG(JP_DEBUG,'IGLSMST: First point in line = ',KFIRST)
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Stride along line = ',KSTRIDE)
+      ENDIF
+C
+C     If the input or output land-sea mask file has changed, reset
+C     the stored unit
+C
+      IF( NEWFILE(2:2).EQ.'I' ) THEN
+        IF( NEWFILE(1:1).EQ.'Y' ) THEN
+          INDEX = 1
+          IFILE(INDEX) = KUNIT
+          IFIRST = 0
+          CALL INTLOG(JP_DEBUG,'IGLSMST: New input LSM file.',JPQUIET)
+        ELSE
+          INDEX = 1
+          IFIRST = 1
+        ENDIF
+      ENDIF
+C
+      IF( NEWFILE(2:2).EQ.'O' ) THEN
+        IF( NEWFILE(1:1).EQ.'Y' ) THEN
+          INDEX = 2
+          IFILE(INDEX) = KUNIT
+          IFIRST = 0
+          CALL INTLOG(JP_DEBUG,'IGLSMST: New output LSM file.',JPQUIET)
+        ELSE
+          INDEX = 2
+          IFIRST = 2
+        ENDIF
+      ENDIF
+C
+C     If it is the first time through, read in the whole land-sea
+C     mask file
+C
+      IF( IFIRST.EQ.0 ) THEN
+C
+C       Find the file length
+C
+        CALL PBSEEK (KUNIT, 0, 2, LENRAW(INDEX))
+        IF ( LENRAW(INDEX).LT.0 ) THEN
+          IGLSMST = JPROUTINE + 1
+          CALL INTLOG(JP_FATAL,
+     X      'IGLSMST: Error finding length of LSM file',JPQUIET)
+          GO TO 900
+        ENDIF
+C
+C       Rewind the file
+C
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Rewind the LSM file.',JPQUIET)
+        CALL PBSEEK (KUNIT, 0, 0, IERR)
+        IF ( IERR.NE.0 ) THEN
+          IGLSMST = JPROUTINE + 2
+          CALL INTLOG(JP_FATAL,
+     X      'IGLSMST: Error rewinding LSM file',JPQUIET)
+          GO TO 900
+        ENDIF
+C
+C     Allocate memory for the array (first time only)
+C
+        IF( ISIZE.EQ.0 ) THEN
+          ISIZE = JPRAWSZ*2
+          CALL JMEMHAN( 12, IRAWMSK, ISIZE, 1, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IGLSMST: Memory allocation error.',IRAWMSK)
+            IGLSMST = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C       Read the file (ignore end-of-file).
+C
+        CALL INTLOG(JP_DEBUG,'IGLSMST: Read the LSM file',LENRAW(INDEX))
+        CALL PBREAD(KUNIT, NRAWMSK((INDEX-1)*JPRAWSZ+1),
+     X              LENRAW(INDEX), IERR)
+C
+        IF( IERR.NE.LENRAW(INDEX) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'IGLSMST: Land-sea mask file read error.',JPQUIET)
+          IGLSMST = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C     Section 2. Transfer file to land sea mask array
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF( NDBG.GT.2) CALL INTLOG(JP_DEBUG,'IGLSMST: Section 2.',JPQUIET)
+C
+C     Needs whole line of land sea mask with no adjustment
+C
+      IF( (KLEN.EQ.KNWE).AND.(KFIRST.EQ.1) ) THEN
+        JDCSIZE = (LENRAW(INDEX)*8+(JPBITS-1))/JPBITS
+        JDCINDX = (INDEX-1)*JPRAWSZ+(KOFF/JPBITS) + 1
+        JDCPNT = MOD(KOFF,JPBITS)
+        CALL INXBIT(NRAWMSK(JDCINDX), JDCSIZE, JDCPNT,
+     X              KLSM, KNWE, JPBITS, 1, 'D', JDCRET)
+        IF( JDCRET.NE.0 ) THEN
+          IGLSMST = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+      ELSE
+C
+C     Needs part of land sea mask array or different starting
+C     point
+C
+C       Unpack whole latitude
+C
+        JDCSIZE = (LENRAW(INDEX)*8+(JPBITS-1))/JPBITS
+        JDCINDX = (INDEX-1)*JPRAWSZ+(KOFF/JPBITS) + 1
+        JDCPNT = MOD(KOFF,JPBITS)
+        CALL INXBIT(NRAWMSK(JDCINDX), JDCSIZE, JDCPNT,
+     X              JLSM, KLEN, JPBITS, 1, 'D', JDCRET)
+        IF( JDCRET.NE.0 ) THEN
+          IGLSMST = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+C       Select required points
+C
+        DO 220 JLON = 1, KNWE
+          IPOINT = MOD(KLEN + KFIRST + KSTRIDE*(JLON-1) - 1, KLEN) + 1
+          KLSM(JLON) = JLSM(IPOINT)
+  220   CONTINUE
+
+
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF( NDBG.GT.2) CALL INTLOG(JP_DEBUG,'IGLSMST: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/ignorm.F b/interpolation/ignorm.F
new file mode 100755
index 0000000..d275e91
--- /dev/null
+++ b/interpolation/ignorm.F
@@ -0,0 +1,207 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGNORM (PWFACT, PSUM, KOWE, KONS, KPR, KERR)
+C
+C---->
+C**** *IGNORM*
+C
+C     PURPOSE
+C     _______
+C
+C     Normalise the array of interpolation weights.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGNORM (PWFACT, PSUM, KOWE, KONS, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PWFACT     - The array of unnormalised interpolating weights to
+C                  the four neighbouring points for every output point.
+C
+C     PSUM       - Work array used to aid vectorisation.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PWFACT     - The normalised array of interpolating weights to
+C                  the four neighbouring points for every output point.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The four weights for each output point are normalised to have a
+C     sum of one.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KOWE, KONS, KPR, KERR
+      REAL PWFACT (4, KOWE, KONS), PSUM (KOWE)
+C
+C     Local variables
+      INTEGER JOLAT, JOLON, JDIR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 25600)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGNORM: Section 1.',JPQUIET)
+C
+      IGNORM = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGNORM: No of output longitudes = ',KOWE)
+        CALL INTLOG(JP_DEBUG,'IGALLOC: No of output lattudes = ',KONS)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Calculate arrays of weights
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGNORM: Section 2.',JPQUIET)
+C
+      DO 260 JOLAT = 1, KONS
+C
+         DO 210 JOLON = 1, KOWE
+C
+            PSUM (JOLON) = PPZERO
+C
+  210    CONTINUE
+C
+         DO 230 JDIR = 1, 4
+            DO 220 JOLON = 1, KOWE
+C
+               PSUM (JOLON) = PSUM (JOLON) +
+     1            PWFACT (JDIR, JOLON, JOLAT)
+C
+  220       CONTINUE
+  230    CONTINUE
+C
+         DO 250 JDIR = 1, 4
+            DO 240 JOLON = 1, KOWE
+C
+               PWFACT (JDIR, JOLON, JOLAT) =
+     1            PWFACT (JDIR, JOLON, JOLAT) / PSUM (JOLON)
+C
+  240       CONTINUE
+  250    CONTINUE
+C
+  260 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGNORM: Section 9.',JPQUIET)
+C
+C
+      RETURN
+      END
diff --git a/interpolation/igplsm.F b/interpolation/igplsm.F
new file mode 100755
index 0000000..8b84caa
--- /dev/null
+++ b/interpolation/igplsm.F
@@ -0,0 +1,181 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGPLSM (POFELD, KLEN, KPR, KERR)
+C
+C---->
+C**** *IGPLSM*
+C
+C     PURPOSE
+C     _______
+C
+C     Force an interpolated land sea mask field back to a real 0-1
+C     field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGPLSM (POFELD, KLEN, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     POFELD     - The output field as previously calculated.
+C
+C     KLEN       - The length of the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     POFELD     - The 0-1 land sea mask output field
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The intrinsic routine ANINT is used to create a real array of
+C     the nearest integer value to the interpolated field. An
+C     additional check is that all values less than zero are forced
+C     to zero and all values greater than one are forced to one.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Feb 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KLEN, KPR, KERR
+      REAL POFELD (KLEN)
+C
+C     Local variables
+      INTEGER JLEN
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 25700)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGPLSM: Section 1.',JPQUIET)
+C
+      IGPLSM = 0
+C
+      IF (KPR .GE. 1)
+     X  CALL INTLOG(JP_DEBUG,'IGPLSM: Total fld len = ',KLEN)
+C
+C
+C     _______________________________________________________
+C
+C*    Section 2. Force land sea mask to nearest integer (0 or 1)
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGPLSM: Section 2.',JPQUIET)
+C
+      DO 210 JLEN = 1, KLEN
+C
+         POFELD (JLEN) = ANINT (POFELD (JLEN) )
+C
+         IF (POFELD (JLEN) .LT. PPZERO) POFELD (JLEN) = PPZERO
+         IF (POFELD (JLEN) .GT. PPONE) POFELD (JLEN) = PPONE
+C
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGPLSM: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igpoleg.F b/interpolation/igpoleg.F
new file mode 100755
index 0000000..3305ddf
--- /dev/null
+++ b/interpolation/igpoleg.F
@@ -0,0 +1,189 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGPOLEG(PIFELD, KIWE, POFELD, KOWE, KPR, KERR)
+C
+C---->
+C**** *IGPOLEG*
+C
+C     Purpose
+C     -------
+C
+C     Calculate the values at the pole of a regular
+C     latitude/longitude field when the input is a Gaussian field.
+C
+C     This routine is used for any field except a wind field.
+C
+C     Interface
+C     ---------
+C
+C     IERR = IGPOLEG(PIFELD, KIWE, POFELD, KOWE, KPR, KERR)
+C
+C     Input parameters
+C     ----------------
+C
+C     PIFELD     - A "polar" row of the input field provided by the
+C                  calling routine.
+C
+C     KIWE       - The number of points in the West-East direction in
+C                  the input field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     -----------------
+C
+C     POFELD     - The corresponding "polar" row of the output field
+C                  returned to the calling routine.
+C
+C     Return value
+C     ------------
+C
+C     The error indicator (INTEGER).
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C     Externals
+C     ---------
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     Method
+C     ------
+C
+C     A Gaussian field does not have a line of latitude at the pole
+C     so this routine forces all the values on the polar line of
+C     latitude to the average of the values at the nearest Gaussian
+C     line in the input field.
+C
+C     This method was originally implemented by
+C
+C     K. RIDER            * ECMWF *     OCTOBER 1991.
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C     Comments
+C     --------
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     Author
+C     ------
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     Modifications
+C     -------------
+C
+C     Allow for missing data values
+C     J.D.Chambers      ECMWF       August 2000
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Function arguments
+C
+      INTEGER KIWE, KOWE, KPR, KERR
+      REAL PIFELD(KIWE), POFELD(KOWE)
+C
+C     Local variables
+C
+      INTEGER JILON, JOLON, COUNT
+      REAL ZSUM
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGPOLEG: Section 1.',JPQUIET)
+C
+      IGPOLEG = 0
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGPOLEG: No. of input fld longs. = ',KIWE)
+        CALL INTLOG(JP_DEBUG,'IGPOLEG: No.of output fld longs. = ',KOWE)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Use average value for non-winds
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGPOLEG: Section 2.',JPQUIET)
+C
+      ZSUM = PPZERO
+      COUNT = 0
+C
+      IF( LIMISSV ) THEN
+        DO JILON = 1, KIWE
+          IF( NOTEQ(PIFELD(JILON),RMISSGV) ) THEN
+            ZSUM = ZSUM + PIFELD(JILON)
+            COUNT = COUNT + 1
+          ENDIF
+        ENDDO
+      ELSE
+        DO JILON = 1, KIWE
+          ZSUM = ZSUM + PIFELD(JILON)
+          COUNT = COUNT + 1
+        ENDDO
+      ENDIF
+C
+      IF( COUNT.GT.0 ) THEN
+        ZSUM = ZSUM / REAL(COUNT)
+      ELSE
+        ZSUM = RMISSGV
+      ENDIF
+C
+      DO JOLON = 1, KOWE
+         POFELD(JOLON) = ZSUM
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGPOLEG: Section 9.',JPQUIET)
+C
+C
+      RETURN
+      END
diff --git a/interpolation/igpolew.F b/interpolation/igpolew.F
new file mode 100755
index 0000000..bf6e737
--- /dev/null
+++ b/interpolation/igpolew.F
@@ -0,0 +1,220 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGPOLEW(PIFELD, KIWE, POFELD, KOWE, KWEIND,
+     1   KWEDIST, KPR, KERR)
+C
+C---->
+C**** *IGPOLEW*
+C
+C     Purpose
+C     -------
+C
+C     Calculates the values at the pole of a regular
+C     latitude/longitude wind field when the input is a Gaussian field.
+C
+C     This routine is only used for a wind field.
+C
+C     Interface
+C     ---------
+C
+C     IERR = IGPOLEW(PIFELD, KIWE, POFELD, KOWE, KWEIND, KWEDIST,
+C    1   KPR, KERR)
+C
+C     Input parameters
+C     ----------------
+C
+C     PIFELD     - A "polar" row of the input field provided by the
+C                  calling routine.
+C
+C     KIWE       - The number of points in the West-East direction in
+C                  the input field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KWEIND     - This array contains the array offsets of the West
+C                  and East points in the input array required for
+C                  interpolation.
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     -----------------
+C
+C     POFELD     - The corresponding "polar" row of the output field
+C                  returned to the calling routine.
+C
+C     Return value
+C     ------------
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C
+C     None
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C     Externals
+C     ---------
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     Method
+C     ------
+C
+C     A Gaussian field does not have a line of latitude at the pole
+C     so this routine performs a linear interpolation of points on the
+C     nearest Gaussian line and then puts these values into the output
+C     array. The intention is to provide U and V values at the pole
+C     which have a "directional" value.
+C
+C     This method was originally implemented by
+C
+C     K. RIDER            * ECMWF *     OCTOBER 1991.
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C     Comments
+C     --------
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     Author
+C     ------
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     Modifications
+C     -------------
+C
+C     Allow for missing data values
+C     J.D.Chambers      ECMWF       August 2000
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Function arguments
+C
+      INTEGER KIWE, KOWE, KPR, KERR
+      INTEGER KWEIND(2, KOWE), KWEDIST(2, KOWE)
+      REAL PIFELD(KIWE), POFELD(KOWE)
+C
+C     Local variables
+C
+      INTEGER JOLON, COUNT
+      REAL ZLOW, ZHIGH
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGPOLEW: Section 1.',JPQUIET)
+C
+      IGPOLEW = 0
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGPOLEW: No.input fld longs = ',KIWE)
+        CALL INTLOG(JP_DEBUG,'IGPOLEW: No.output fld longs = ',KOWE)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Interpolation code for winds
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGPOLEW: Section 2.',JPQUIET)
+C
+      DO JOLON = 1, KOWE
+C
+C       Compute weigths for west and east neighbours
+C
+        ZLOW = REAL(KWEDIST(JP_I_E,JOLON)) /
+     X      REAL(KWEDIST(JP_I_E,JOLON) + KWEDIST(JP_I_W,JOLON) )
+C
+        ZHIGH = PPONE - ZLOW
+C
+C       Count non-missing data values
+C
+        IF( LIMISSV ) THEN
+          COUNT = 0
+          IF( NOTEQ(PIFELD(KWEIND(JP_I_W,JOLON)),RMISSGV) )
+     X      COUNT = COUNT + 1
+          IF( NOTEQ(PIFELD(KWEIND(JP_I_E,JOLON)),RMISSGV) )
+     X      COUNT = COUNT + 1
+        ELSE
+          COUNT = 2
+        ENDIF
+C
+C       Interpolate using both neighbours if neither is missing
+C
+        IF( COUNT.EQ.2 ) THEN
+          POFELD(JOLON) = ZLOW  * PIFELD(KWEIND(JP_I_W,JOLON)) +
+     X                    ZHIGH * PIFELD(KWEIND(JP_I_E,JOLON))
+C
+C       Set missing if all neighbours are missing
+C
+        ELSE IF( COUNT.EQ.0 ) THEN
+          POFELD(JOLON) = RMISSGV
+C
+C       Otherwise, use the nearest neighbour
+C
+        ELSE IF( ZLOW.GT.ZHIGH ) THEN
+          POFELD(JOLON) = PIFELD(KWEIND(JP_I_W,JOLON))
+        ELSE
+          POFELD(JOLON) = PIFELD(KWEIND(JP_I_E,JOLON))
+        ENDIF
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGPOLEW: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igprec.F b/interpolation/igprec.F
new file mode 100755
index 0000000..6cc47e8
--- /dev/null
+++ b/interpolation/igprec.F
@@ -0,0 +1,292 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGPREC (PIFELD, KIWE, KINS, POFELD, KOWE, KONS,
+     1   KWEIND, KNSIND, PWFACT, PMAX, PINPNT, KPR, KERR)
+C
+C---->
+C**** *IGPREC*
+C
+C     PURPOSE
+C     _______
+C
+C     Perform additional interpolation processes for precipitation
+C     fields.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGPREC (PIFELD, KIWE, KINS, POFELD, KOWE, KONS, KWEIND,
+C    1   KNSIND, PWFACT, PMAX, PINPNT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PIFELD     - The input field provided by the calling routine.
+C
+C     KIWE       - The number of points in the West-East direction in
+C                  the input field.
+C
+C     KINS       - The number of points in the North-South direction
+C                  in the input field.
+C
+C     POFELD     - The output field as previously calculated.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KWEIND     - This array contains the array offsets of the West
+C                  and East points in the input array required for
+C                  interpolation.
+C
+C     KNSIND     - This array contains the array offsets of the North
+C                  and South points in the input array required for
+C                  interpolation.
+C
+C     PWFACT     - The array of interpolating weights to the four
+C                  neighbouring points for every output point.
+C
+C     PMAX       - Work array used to aid vectorisation.
+C
+C     PINPNT     - Work array used to aid vectorisation.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     POFELD     - The output field as modified to allow for
+C                  precipitation.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)  - Logs messages.
+C     CHKPREC - Check if precipitation threshold has been redefined
+C
+C
+C     METHOD
+C     ______
+C
+C     The precipitation at a point is set to zero in the following
+C     circumstances.
+C
+C     1  The interpolated precipitation is less than a threshold value.
+C
+C     2  There is no precipitation at the neighbouring point with the
+C        highest interpolating weight.
+C
+C     NOTE that this operation is performed before the special
+C     routines for the poles when interpolating from Gaussian grids
+C     to global latitude/longitude fields. The polar values for
+C     precipitation, during such interpolations, will always be the
+C     average value of the nearest Gaussian line with no threshold
+C     check.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Dummy arguments
+      INTEGER KIWE, KOWE, KINS, KONS, KPR, KERR
+      INTEGER KWEIND (2, KOWE), KNSIND (2, KONS)
+      REAL PIFELD (KIWE, KINS), POFELD (KOWE, KONS)
+      REAL PWFACT (4, KOWE, KONS)
+      REAL PMAX (KOWE), PINPNT (KOWE)
+C
+C     Local variables
+      LOGICAL LAT_RAIN
+      INTEGER ILAT, IDIR
+      INTEGER JOLAT, JOLON, JNS, JWE
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 22500)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGPREC: Section 1.',JPQUIET)
+C
+      IGPREC = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_ERROR,'IGPREC: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_ERROR,'IGPREC: No.input fld longitudes = ',KIWE)
+        CALL INTLOG(JP_ERROR,'IGPREC: No.input fld latitudes = ',KINS)
+        CALL INTLOG(JP_ERROR,'IGPREC: No.output fld longitudes = ',KOWE)
+        CALL INTLOG(JP_ERROR,'IGPREC: No.output fld latitudes = ',KONS)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. eliminate output precipitation based on
+C                interpolation threshhold
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGPREC: Section 2.',JPQUIET)
+C
+      CALL CHKPREC()
+C
+      DO 360 JOLAT = 1, KONS
+C
+        LAT_RAIN = .FALSE.
+C
+        DO 210 JOLON = 1, KOWE
+C
+          IF (POFELD (JOLON, JOLAT) .LT. ZPRECIP) THEN
+            POFELD (JOLON, JOLAT) = PPZERO
+          ELSE
+            LAT_RAIN = .TRUE.
+          ENDIF
+C
+  210   CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 3. eliminate output precipitation based on
+C                "nearest" point.
+C
+C                Do not bother if there is no precipitation on this
+C                line of latitude
+C     _______________________________________________________
+C
+  300   CONTINUE
+C
+        IF ((KPR.GE.1).AND.(JOLAT.EQ.1)) CALL INTLOG(JP_DEBUG,
+     X    'IGPREC: Section 3.',JPQUIET)
+C
+        IF (LAT_RAIN) THEN
+C
+          DO 310 JOLON = 1, KOWE
+C
+            PMAX (JOLON) = PPZERO
+C
+  310     CONTINUE
+C
+          DO 340 JNS = 1, 2
+C
+            ILAT = KNSIND (JNS, JOLAT)
+C
+            DO 330 JWE = 1, 2
+C
+              IDIR = (JNS - 1) * 2 + JWE
+C
+              DO 320 JOLON = 1, KOWE
+C
+                IF (PWFACT(IDIR, JOLON, JOLAT) .GT.  PMAX(JOLON)) THEN
+                  PMAX (JOLON) = PWFACT (IDIR, JOLON, JOLAT)
+                  PINPNT (JOLON) = PIFELD (KWEIND (JWE, JOLON), ILAT)
+                ENDIF
+C
+  320         CONTINUE
+C
+  330       CONTINUE
+C
+  340     CONTINUE
+C
+          DO 350 JOLON = 1, KOWE
+            IF (PINPNT(JOLON).LT.ZPRECIP) POFELD(JOLON,JOLAT) = PPZERO
+  350     CONTINUE
+C
+        ENDIF
+C
+  360 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGPREC: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igscan.F b/interpolation/igscan.F
new file mode 100755
index 0000000..601dfe3
--- /dev/null
+++ b/interpolation/igscan.F
@@ -0,0 +1,359 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGSCAN (PMAT, KNWE, KNNS, KSCAN, OINFIELD,
+     1   KPR, KERR)
+C
+C---->
+C**** *IGSCAN*
+C
+C     PURPOSE
+C     _______
+C
+C     Transform a regular field between the specified external
+C     scanning mode and a standard internal scanning mode.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGSCAN (PMAT, KNWE, KNNS, KSCAN, OINFIELD, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PMAT       - The input matrix of dimension (KNWE * KNNS).
+C
+C     KNWE       - The number of points in the West-East direction.
+C
+C     KNNS       - The number of points in the North-South direction.
+C
+C     KSCAN      - A standard GRIB byte variable with bits 1 to 3
+C                  separately significant. This means that the final
+C                  value is the sum of the bit settings.
+C
+C                  128 , Set if points scan East to West.
+C                   64 , Set if points scan South to North.
+C                   32 , Set if points in the North South direction
+C                        are consecutive.
+C
+C     OINFIELD   - Flag variable which is TRUE for an input field and
+C                  FALSE for an output field.
+C                  This determines the order in which the
+C                  transformations are applied.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PMAT       - The transposed matrix.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     7101  The scanning mode was not in the range 0 to 255.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     ABORTX     - Standard routine to kill task.
+C     IGTRAN	 - Routine to transpose a rectangular matrix.
+C     IGLREV     - Routine to reverse the elements within each row or
+C                  each column of a rectangular matrix.
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     KSCAN = 128 is implemented by swapping elements within each
+C                 column of the matrix.
+C
+C     KSCAN = 64 is implemented by reversing the order of the columns.
+C
+C     KSCAN = 32 is implemented by transposing the matrix.
+C
+C     An input matrix is transposed before the two reversal stages
+C     are performed.
+C
+C     An output matrix has the matrix transposition as the final step.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+C
+      LOGICAL OINFIELD
+C
+      INTEGER KNWE, KNNS, KSCAN, KPR, KERR
+C
+      REAL PMAT (KNWE * KNNS)
+C
+C     Local variables
+C
+      LOGICAL GNSMOD, GWEMOD, GTRMOD
+C
+      INTEGER ISCAN, IDIR, IERR
+C
+      INTEGER JPMOVE
+      PARAMETER (JPMOVE = (JPLAT + JPLONG) / 2)
+C
+      INTEGER IMOVE (JPMOVE)
+C
+      INTEGER JPROUTINE
+C
+      PARAMETER (JPROUTINE = 7100)
+C
+C     External functions
+C
+      INTEGER IGTRAN, IGLREV
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation - Evaluate scan modes
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGSCAN: Section 1.',JPQUIET)
+C
+      IGSCAN = 0
+C
+      IF (KPR .GE. 1) THEN
+         CALL INTLOG(JP_DEBUG,'IGSCAN: Input parameters',JPQUIET)
+         CALL INTLOG(JP_DEBUG,'IGSCAN: Longitude points are ',KNWE)
+         CALL INTLOG(JP_DEBUG,'IGSCAN: Latitude lines are ',KNNS)
+         CALL INTLOG(JP_DEBUG,'IGSCAN: Scan mode is ',KSCAN)
+         IF ( OINFIELD ) THEN
+           CALL INTLOG(JP_DEBUG,
+     X       'IGSCAN: Input field transformation is TRUE',JPQUIET)
+         ELSE
+           CALL INTLOG(JP_DEBUG,
+     X       'IGSCAN: Input field transformation is FALSE',JPQUIET)
+         ENDIF
+      ENDIF
+C
+      IF (KSCAN .LT. 0 .OR. KSCAN .GE. 256) THEN
+         IGSCAN = JPROUTINE + 1
+         IF (KERR .GE. 0) CALL INTLOG(JP_ERROR,
+     X    'IGSCAN: Scan mode is not in range 0 to 255 = ',KSCAN)
+         IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X    'IGSCAN: Interpolation fails.',IGSCAN)
+         GO TO 900
+      ENDIF
+C
+C     Zero KSCAN means no transformation
+C
+      IF (KSCAN .EQ. 0) GO TO 900
+C
+      ISCAN = KSCAN
+      GWEMOD = .FALSE.
+      GNSMOD = .FALSE.
+C
+      IF (ISCAN .GE. 128) THEN
+         ISCAN = ISCAN - 128
+         GWEMOD = .TRUE.
+      ENDIF
+C
+      IF (ISCAN .GE. 64) THEN
+         ISCAN = ISCAN - 64
+         GNSMOD = .TRUE.
+      ENDIF
+C
+      GTRMOD = ISCAN .GE. 32
+C
+C     _______________________________________________________
+C
+C*    Section 2. Input field
+C
+C                Potential operations in order are
+C
+C                1 Transpose matrix
+C                2 Modify West East mode
+C                3 Modify North South mode
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGSCAN: Section 2.',JPQUIET)
+C
+      IF (OINFIELD) THEN
+C
+         IF (GTRMOD) THEN
+C
+            IERR = IGTRAN (PMAT, KNNS, KNWE, IMOVE, JPMOVE, KPR, KERR)
+C
+            IF (IERR .NE. 0) THEN
+               IGSCAN = IERR
+               GO TO 900
+            ENDIF
+C
+         ENDIF
+C
+         IF (GWEMOD) THEN
+C
+            IDIR = 1
+C
+            IERR = IGLREV (PMAT, KNWE, KNNS, IDIR, KPR, KERR)
+C
+            IF (IERR .NE. 0) THEN
+               IGSCAN = IERR
+               GO TO 900
+            ENDIF
+C
+         ENDIF
+C
+         IF (GNSMOD) THEN
+C
+            IDIR = 2
+C
+            IERR = IGLREV (PMAT, KNWE, KNNS, IDIR, KPR, KERR)
+C
+            IF (IERR .NE. 0) THEN
+               IGSCAN = IERR
+               GO TO 900
+            ENDIF
+C
+         ENDIF
+C
+      ELSE
+C
+C     _______________________________________________________
+C
+C*    Section 3. Output field
+C
+C                Potential operations in order are
+C
+C                1 Modify West East mode
+C                2 Modify North South mode
+C                3 Transpose matrix
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGSCAN: Section 3.',JPQUIET)
+C
+         IF (GWEMOD) THEN
+C
+            IDIR = 1
+C
+            IERR = IGLREV (PMAT, KNWE, KNNS, IDIR, KPR, KERR)
+C
+            IF (IERR .NE. 0) THEN
+               IGSCAN = IERR
+               GO TO 900
+            ENDIF
+C
+         ENDIF
+C
+         IF (GNSMOD) THEN
+C
+            IDIR = 2
+C
+            IERR = IGLREV (PMAT, KNWE, KNNS, IDIR, KPR, KERR)
+C
+            IF (IERR .NE. 0) THEN
+               IGSCAN = IERR
+               GO TO 900
+            ENDIF
+C
+         ENDIF
+C
+         IF (GTRMOD) THEN
+C
+            IERR = IGTRAN (PMAT, KNWE, KNNS, IMOVE, JPMOVE, KPR, KERR)
+C
+            IF (IERR .NE. 0) THEN
+               IGSCAN = IERR
+               GO TO 900
+            ENDIF
+C
+         ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGSCAN: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igsetup.F b/interpolation/igsetup.F
new file mode 100755
index 0000000..5be9b6a
--- /dev/null
+++ b/interpolation/igsetup.F
@@ -0,0 +1,630 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGSETUP( KSEC1, KSEC2, KSEC4)
+C
+C---->
+C**** IGSETUP
+C
+C     Purpose
+C     -------
+C
+C     Setup GRIB sections 1, 2 and 4 for the new interpolation product.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET IGSETUP( KSEC1, KSEC2, KSEC4)
+C
+C     Input
+C     -----
+C
+C     KSEC1   - Section 1 values (for GRIBEX)
+C     KSEC2   - Section 2 values (for GRIBEX)
+C     KSEC3   - Section 4 values (for GRIBEX)
+C
+C     Output
+C     ------
+C
+C     KSEC1   - Modified section 1 values (for GRIBEX)
+C     KSEC2   - Modified section 2 values (for GRIBEX)
+C     KSEC3   - Modified section 4 values (for GRIBEX)
+C
+C     Method
+C     ------
+C
+C     Use common block values and existing values from the original GRIB
+C     product used for interpolation.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG   - Logs messages.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameter(s)
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19100 )
+C
+C     Function arguments
+C
+      INTEGER KSEC1, KSEC2, KSEC4
+      DIMENSION KSEC1(*), KSEC2(*), KSEC4(*)
+C
+C     Local variables
+C
+      LOGICAL LIROTAT, LOROTAT
+      INTEGER ILOOP, ITEMP
+C
+C***********************************************************************
+C     Section 1.   Startup.
+C***********************************************************************
+C
+ 100  CONTINUE
+C
+      IGSETUP = 0
+C
+C     Check a recognized data representation type is being processed
+C
+      IF ( (NOREPR .NE.JPREGULAR  ) .AND.
+     X     (NOREPR .NE.JPREGROT   ) .AND.
+     X     (NOREPR .NE.JPGAUSSIAN ) .AND.
+     X     (NOREPR .NE.JPFGGROT   ) .AND.
+     X     (NOREPR .NE.JPQUASI    ) .AND.
+     X     (NOREPR .NE.JPQGGROT   ) .AND.
+     X     (NOREPR .NE.JPSPHROT   ) .AND.
+     X     (NOREPR .NE.JPSPHERE   ) ) GOTO 910
+C
+C     Set flags if input is rotated or if a rotation angle has been given
+C
+      LIROTAT = (NIREPR.EQ.JPSPHROT).OR.
+     X          (NIREPR.EQ.JPREGROT).OR.
+     X          (NIREPR.EQ.JPFGGROT).OR.
+     X          (NIREPR.EQ.JPQGGROT)
+C
+      LOROTAT = ((NOROTA(1).NE.-9000000).AND.(NOROTA(1).NE.0)).OR.
+     X          (NOROTA(2).NE.0)
+C
+C***********************************************************************
+C     Section 2.   Setup output product section 1.
+C***********************************************************************
+C
+ 200  CONTINUE
+C
+C     Setup output if not given by input GRIB message
+C     (ie input is 'unpacked').
+C
+      IF ( NIFORM .NE. 1 ) THEN
+C
+C       Code table ( same as input )
+C
+        KSEC1(1) = NOTABLE
+C
+C       Originating centre = ECMWF
+C
+        KSEC1(2) = 98
+C
+C       Generating process ID = 255
+C       Grid definition       = 255
+C
+        KSEC1(3) = 255
+        KSEC1(4) = 255
+C
+C       Parameter
+C
+        KSEC1(6) = NOPARAM
+C
+C       Level
+C
+        KSEC1(7) = NOLEVT
+        KSEC1(8) = NOLEVEL
+        KSEC1(9) = 0
+C
+C       Dummy date and time ( 1 Jan 1990, 1200 )
+C
+        KSEC1(10) = 90
+        KSEC1(11) = 1
+        KSEC1(12) = 1
+        KSEC1(13) = 12
+        KSEC1(14) = 0
+C
+C       Dummy verifying time (initialised analysis)
+C
+        KSEC1(15) = 1
+        KSEC1(16) = 0
+        KSEC1(17) = 0
+        KSEC1(18) = 1
+        KSEC1(19) = 0
+        KSEC1(20) = 0
+C
+C       Century ( = 20 )
+C
+        KSEC1(21) = 20
+C
+C       Lots of zeroes
+C
+        DO 210 ILOOP = 22, 36
+          KSEC1(ILOOP) = 0
+  210   CONTINUE
+C
+C     Allow for user specified output field values when input is packed
+C
+      ELSE
+C
+C       Code table
+C
+        KSEC1(1) = NOTABLE
+C
+C       Parameter
+C
+        IF( LNOPARA ) KSEC1(6) = NOPARAM
+C
+C       Level
+C
+        IF( LNOLEVT ) KSEC1(7) = NOLEVT
+        IF( LNOLEVL ) THEN
+          KSEC1(8) = NOLEVEL
+          KSEC1(9) = 0
+        ENDIF
+      ENDIF
+C
+C     Section 2 included, section 3 omitted
+C
+      KSEC1(5) = 128
+C
+C     Rest of section 1 kept unchanged from input product
+C
+C***********************************************************************
+C     Section 3.   Setup output product section 2.
+C***********************************************************************
+C
+ 300  CONTINUE
+C
+C     Data representation type
+C
+C     Adjust output representation type if field is rotated
+C
+      IF( LIROTAT.OR.LOROTAT ) THEN
+        KSEC2(1) = NOREPR
+        IF(NOREPR.EQ.JPREGULAR )  KSEC2(1) = JPREGROT
+        IF(NOREPR.EQ.JPSPHERE )   KSEC2(1) = JPSPHROT
+        IF(NOREPR.EQ.JPQUASI )    KSEC2(1) = JPFGGROT
+        IF(NOREPR.EQ.JPQGGROT )   KSEC2(1) = JPFGGROT
+        IF(NOREPR.EQ.JPGAUSSIAN ) KSEC2(1) = JPFGGROT
+C
+      ELSE
+C
+        IF( (NOREPR.EQ.JPQUASI).OR.(NOREPR.EQ.JPQGGROT) ) THEN
+          KSEC2(1) = JPGAUSSIAN
+        ELSE
+          KSEC2(1) = NOREPR
+        ENDIF
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.1. Setup section 2 for lat/long, equidistant
+C                  cylindrical or plate carre grids.
+C***********************************************************************
+C
+ 310  CONTINUE
+C
+      IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C       For south to north grids, only global area allowed (eg KWBC SST)
+C
+cs        IF( KSEC2(4).LT.KSEC2(7) ) THEN
+cs          IF((NOAREA(1).NE.(-NOAREA(3))).AND.(NOAREA(3).NE.JP90)) THEN
+cs            CALL INTLOG(JP_ERROR,
+cs     X        'IGSETUP: Subareas not allowed interpolating',JPQUIET)
+cs            CALL INTLOG(JP_ERROR,
+cs     X        'IGSETUP: grids running from south to north',JPQUIET)
+cs            IGSETUP = JPROUTINE + 2
+cs            GOTO 900
+cs          ENDIF
+cs        ENDIF
+
+C
+C       Number of points along a parallel
+C
+        KSEC2(2) = NOWE
+C
+C       Number of points along a meridian
+C
+        KSEC2(3) = NONS
+C
+C       Latitude and longitude of first grid point
+C
+        IF( NOAREA(1).GE.0 ) THEN
+          KSEC2(4) = (NOAREA(1)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(4) = (NOAREA(1)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAREA(2).GE.0 ) THEN
+          KSEC2(5) = (NOAREA(2)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(5) = (NOAREA(2)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       Resolution flag, increments are given
+C
+        KSEC2(6) = 128
+C
+C       Latitude and longitude of last grid point
+C
+        IF( NOAREA(3).GE.0 ) THEN
+          KSEC2(7) = (NOAREA(3)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(7) = (NOAREA(3)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAREA(4).GE.0 ) THEN
+          KSEC2(8) = (NOAREA(4)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(8) = (NOAREA(4)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       Flip latitudes if they run from south to north
+C       Set scanning mode flags
+C
+        IF( KSEC2(4).LT.KSEC2(7) ) THEN
+          IF( LNOGRID ) THEN
+            ITEMP = KSEC2(7)
+            KSEC2(7) = KSEC2(4)
+            KSEC2(4) = ITEMP
+            KSEC2(11) = 0
+          ELSE
+            KSEC2(11) = 64
+          ENDIF
+        ELSE
+          KSEC2(11) = NOSCNM
+        ENDIF
+C
+C       i and j  direction increments
+C
+        KSEC2(9)  = (NOGRID(1) + (JPMICRO/2)) / JPMICRO
+        KSEC2(10) = (NOGRID(2) + (JPMICRO/2)) / JPMICRO
+C
+C       Following left same as for input product
+C       - no.of vertical coordinate parameters,
+C       - lat/long of southern pole of rotation
+C       - lat/long of pole of stretching
+C
+C       If rotated, put in new lat/long of southern pole of rotation
+C
+        IF( LIROTAT.OR.LOROTAT ) THEN
+          IF( NOROTA(1).GE.0 ) THEN
+            KSEC2(13) = (NOROTA(1) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(13) = (NOROTA(1) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+          IF( NOROTA(2).GE.0 ) THEN
+            KSEC2(14) = (NOROTA(2) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(14) = (NOROTA(2) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+        ENDIF
+C
+C       Regular grid flag
+C
+        KSEC2(17) = 0
+C
+C       Following left same as for input product
+C       - earth flag
+C       - components flag
+C       - reserved fields
+C
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.2. Setup section 2 for gaussian grids.
+C***********************************************************************
+C
+ 320  CONTINUE
+C
+      IF ( (NOREPR.EQ.JPGAUSSIAN).OR.
+     X     (NOREPR.EQ.JPFGGROT).OR.
+     X     (NOREPR.EQ.JPQUASI).OR.
+     X     (NOREPR.EQ.JPQGGROT) ) THEN
+C
+C       Number of points along a parallel
+C
+C       For a regular gaussian grid only
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(2) = NOWE
+        ELSE
+          KSEC2(2) = 0
+        ENDIF
+C
+C       Number of points along a meridian
+C
+        KSEC2(3) = NONS
+C
+C       Latitude and longitude of first grid point
+C
+        IF( NOAREA(1).GE.0 ) THEN
+          KSEC2(4) = (NOAREA(1)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(4) = (NOAREA(1)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAREA(2).GE.0 ) THEN
+          KSEC2(5) = (NOAREA(2)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(5) = (NOAREA(2)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       Resolution flag
+C
+C       For a regular gaussian grid only, increments are given
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(6) = 128
+        ELSE
+          KSEC2(6) = 0
+        ENDIF
+C
+C       Latitude and longitude of last grid point
+C
+        IF( NOAREA(3).GE.0 ) THEN
+          KSEC2(7) = (NOAREA(3)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(7) = (NOAREA(3)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+        IF( NOAREA(4).GE.0 ) THEN
+          KSEC2(8) = (NOAREA(4)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(8) = (NOAREA(4)-(JPMICRO/2)) / JPMICRO
+        ENDIF
+C
+C       i direction increment
+C
+C       For a regular gaussian grid, only 
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(9) = (((JP90)/NOGAUSS)+(JPMICRO/2)) / JPMICRO
+        ELSE
+          KSEC2(9) = 0
+        ENDIF
+C
+C       Number of parallels between a pole and the Equator
+C
+        KSEC2(10) = NOGAUSS
+C
+C       Scanning mode flags
+C
+        KSEC2(11) = NOSCNM
+C
+C       Following left same as for input product
+C       - no.of vertical coordinate parameters,
+C       - lat/long of southern pole of rotation
+C       - lat/long of pole of stretching
+C
+C       If rotated, put in new lat/long of southern pole of rotation
+C
+        IF( LIROTAT.OR.LOROTAT ) THEN
+          IF( NOROTA(1).GE.0 ) THEN
+            KSEC2(13) = (NOROTA(1) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(13) = (NOROTA(1) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+          IF( NOROTA(2).GE.0 ) THEN
+            KSEC2(14) = (NOROTA(2) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(14) = (NOROTA(2) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+        ENDIF
+C
+C       Regular grid flag
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+          KSEC2(17) = 0
+        ELSE
+          KSEC2(17) = 1
+        ENDIF
+C
+C       Following left same as for input product
+C       - earth flag
+C       - components flag
+C       - reserved fields
+C
+C       For reduced grid, move in number of points along each parallel
+C
+          IF( (NOREPR.EQ.JPQUASI) .OR.
+     X        (NOREPR.EQ.JPQGGROT) ) THEN
+          DO 325 ILOOP = 1, KSEC2(3)
+            KSEC2(22+ILOOP) = NOLPTS(ILOOP+NO1NS-1)
+ 325      CONTINUE
+        ENDIF
+C
+      ENDIF
+C
+C***********************************************************************
+C     Section 3.3. Setup section 2 for spherical harmonic coefficients.
+C***********************************************************************
+C
+ 330  CONTINUE
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+C
+C       I, K, M pentagonal resolution parameters
+C
+        KSEC2(2) = NORESO
+        KSEC2(3) = NORESO
+        KSEC2(4) = NORESO
+C
+C       Representation type, associated legendre functions of the
+C                            first kind
+        KSEC2(5) = 1
+C
+C       Representation mode, complex packing
+C
+        KSEC2(6) = 2
+C
+C       Following left same as for input product
+C       - reserved words 7-11
+C       - no.of vertical coordinate parameters,
+C       - lat/long of southern pole of rotation
+C       - lat/long of pole of stretching
+C       - reserved words 17-22
+C
+C       If rotated, put in new lat/long of southern pole of rotation
+C
+        IF( LIROTAT.OR.LOROTAT ) THEN
+          IF( NOROTA(1).GE.0 ) THEN
+            KSEC2(13) = (NOROTA(1) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(13) = (NOROTA(1) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+          IF( NOROTA(2).GE.0 ) THEN
+            KSEC2(14) = (NOROTA(2) + (JPMICRO/2)) / JPMICRO
+          ELSE
+            KSEC2(14) = (NOROTA(2) - (JPMICRO/2)) / JPMICRO
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C***********************************************************************
+C     Section 4.   Setup output product section 4.
+C***********************************************************************
+C
+ 400  CONTINUE
+C
+C     Number of values to be packed
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        KSEC4(1) = (NORESO + 1) * (NORESO + 2)
+      ELSE IF( (NOREPR.EQ.JPQUASI).OR.(NOREPR.EQ.JPQGGROT) ) THEN
+        KSEC4(1) = NOPCNT
+      ELSE
+        KSEC4(1) = NOWE * NONS
+      ENDIF
+C
+C     If all the values are missing, set the count of values negative
+C
+      IF(NOMISS.NE.0) THEN
+        KSEC4(1) = -KSEC4(1)
+      ENDIF
+C
+C     Number of bits used for each packed value
+C
+      KSEC4(2) = NOACC
+C
+C     Type of data, spherical harmonic = 128, grid point = 0
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        KSEC4(3) = 128
+      ELSE
+        KSEC4(3) = 0
+      ENDIF
+C
+C     Type of packing, spherical harmonic = complex
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        KSEC4(4) = 64
+      ELSE
+        KSEC4(4) = 0
+      ENDIF
+C
+C     Type of data = floating point
+C
+      KSEC4(5) = 0
+C
+C     Additional flags indicator = none
+C
+      KSEC4(6) = 0
+C
+C     Reserved word, set to 0
+C
+      KSEC4(7) = 0
+C
+C     Following set to simplest case
+C     - no.of values indicator
+C     - secondary bitmaps indicator
+C     - values width indicator
+C     - no.of bits for 2nd order values
+C
+      KSEC4(8)  = 0
+      KSEC4(9)  = 0
+      KSEC4(10) = 0
+      KSEC4(11) = 0
+C     
+C     Reserved words, set to 0
+C
+      KSEC4(12) = 0
+      KSEC4(13) = 0
+      KSEC4(14) = 0
+      KSEC4(15) = 0
+C
+C     If spherical harmonics, set following for complex packing
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+C
+C       KSEC4(16), pointer to start of packed data, setup by packing
+C       KSEC4(17), scaling factor P, unchanged from input
+C       KSEC4(18), pentagonal resolution parameter J for packing of subset,
+C                  unchanged from input
+C       KSEC4(19), pentagonal resolution parameter K for packing of subset,
+C                  unchanged from input
+C       KSEC4(20), pentagonal resolution parameter M for packing of subset,
+C                  unchanged from input
+C
+      ELSE
+        DO 410 ILOOP = 16, 20
+          KSEC4(ILOOP) = 0
+ 410    CONTINUE
+      ENDIF
+C
+C     Words 21-33 reserved, set to zero.
+C
+      DO 420 ILOOP = 21, 33
+        KSEC4(ILOOP) = 0
+ 420  CONTINUE
+C
+C***********************************************************************
+C     Section 9.   Closedown
+C***********************************************************************
+C
+ 900  CONTINUE
+C
+      RETURN
+C
+C     Invalid data represntation type
+C
+ 910  CONTINUE
+      CALL INTLOG(JP_ERROR,
+     X  'IGSETUP: Data representation type not recognized: ',NOREPR)
+      CALL INTLOG(JP_ERROR,
+     X  'IGSETUP: Only the following types are recognized:',JPQUIET)
+      CALL INTLOG(JP_ERROR,'IGSETUP: Lat/long grid = ', JPREGULAR)
+      CALL INTLOG(JP_ERROR,'IGSETUP: Lat/long (rotated) = ', JPREGROT)
+      CALL INTLOG(JP_ERROR,'IGSETUP: regular gaussian = ', JPGAUSSIAN)
+      CALL INTLOG(JP_ERROR,'IGSETUP: reg gauss rotated = ', JPFGGROT)
+      CALL INTLOG(JP_ERROR,'IGSETUP: reduced gaussian = ', JPQUASI)
+      CALL INTLOG(JP_ERROR,'IGSETUP: red gauss rotated = ', JPQUASI)
+      CALL INTLOG(JP_ERROR,'IGSETUP: spherical harmonic = ', JPSPHERE)
+      CALL INTLOG(JP_ERROR,'IGSETUP: spectral (rotated) = ', JPSPHROT)
+C
+      IGSETUP = JPROUTINE + 1
+      RETURN
+      END
diff --git a/interpolation/igsize.F b/interpolation/igsize.F
new file mode 100755
index 0000000..9700e00
--- /dev/null
+++ b/interpolation/igsize.F
@@ -0,0 +1,408 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGSIZE(KGTRUNC, KAREA, KNWE, KNNS, KLN,
+     X   PGAUSS, OWEGLOBE, ONPOLE, OSPOLE, KPR, KERR)
+C
+C---->
+C**** *IGSIZE*
+C
+C     Purpose
+C     -------
+C     Evaluate the array sizes for a Gaussian truncation and area.
+C
+C
+C     Interface
+C     ---------
+C     IERR = IGSIZE(KGTRUNC, KAREA, KNWE, KNNS, KLN,
+C    X              PGAUSS, OWEGLOBE, ONPOLE, OSPOLE, KPR, KERR)
+C
+C
+C     Input parameters
+C     ----------------
+C     KGTRUNC - The Gaussian truncation.
+C     KAREA   - The field area definition (N, W, S, E) provided by
+C               the calling routine.
+C     KNWE    - The number of points in the West-East direction in
+C               the field. This will be zero for an output field.
+C     KNNS    - The number of points in the North-South direction
+C               in the field. This will be zero for an output field.
+C     KPR     - The debug print switch.
+C                0  , No debugging output.
+C                1  , Produce debugging output.
+C     KERR    - The error control flag.
+C                -ve, No error message. Return error code.
+C                0  , Hard failure with error message.
+C                +ve, Print error message. Return error code.
+C
+C
+C     Output parameters
+C     -----------------
+C     KAREA    - The North and South values will be modified to
+C                contain the values of the Gaussian latitudes used.
+C     KNWE     - The number of points in the West-East direction in
+C                the field.
+C     KNNS     - The number of points in the North-South direction
+C                in the field.
+C     KLN      - The Northern Gaussian latitude number for this area.
+C     PGAUSS   - The full list of Gaussian latitudes for this
+C                truncation.
+C     OWEGLOBE - This variable will be true if the array of
+C                longitudes spans the globe.
+C     ONPOLE   - This variable will be true if the North polar line
+C                of latitude is included in the grid.
+C     OSPOLE   - This variable will be true if the South polar line
+C                of latitude is included in the grid.
+C
+C
+C     Return value
+C     ------------
+C     The error indicator (INTEGER).
+C
+C
+C     Error and Warning Return Values
+C     -------------------------------
+C     -1 The Eastern limit of the range did not have the expected
+C        value. The Western value will be assumed to be correct. This
+C        could arise because of known deficiencies in the GRIB
+C        representation and will be treated as a WARNING error.
+C
+C     22501 The specified number of lines of latitude did not match
+C           the Gaussian lines nearest the North and South values
+C           provided.
+C
+C
+C     Common block usage
+C     ------------------
+C     None
+C
+C
+C     Externals
+C     ---------
+C     IGGLAT   - Compute Gaussian lines of latitude for a given
+C                truncation.
+C     INTLOG(R) - Logs messages.
+C
+C
+C     Method
+C     ------
+C     If all the elements of the array KAREA are zero then a standard
+C     global grid is generated and all elements of the array KAREA are
+C     rewritten with the appropriate values. Otherwise it is assumed
+C     that the West and East limits in KAREA have been validated. If
+C     the number of longitude points is provided a warning will be
+C     given if the West to East range does not match the number of
+C     longitude points times the stride.
+C
+C     If the number of lines of longitude and latitude are not set on
+C     entry then the North and South limits in KAREA will be expanded
+C     outward to the next Gaussian latitudes. If the number of lines
+C     of longitude and latitude are set on entry then the nearest
+C     points to the North and South limits provided are chosen. It is
+C     an error if these points do not provide the correct number of
+C     latitudes. The revised North and South limits are written back
+C     into the array KAREA.
+C
+C
+C     Reference
+C     ---------
+C     None
+C
+C
+C     Comments
+C     --------
+C     None
+C
+C
+C     Author
+C     ------
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C
+C     Modifications
+C     -------------
+C     Allow for unusual NCEP gaussian grids
+C     J.D.Chambers   ECMWF   October 2000
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER(JPROUTINE = 22500)
+C
+C     Function arguments
+C
+      LOGICAL OWEGLOBE, ONPOLE, OSPOLE
+      INTEGER KGTRUNC, KNWE, KNNS, KLN, KPR, KERR, KAREA(4)
+      REAL PGAUSS(*)
+C
+C     Local variables
+C
+      INTEGER ILNSTR, IEAST, IWEST, IREACH, ILATNUM, IGAUSS
+      INTEGER INDIST, ISDIST, ILS, IERR, JLAT
+      LOGICAL LPRINT
+C
+C     Function externals
+C
+      INTEGER IGGLAT
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IGSIZE = 0
+      LPRINT = KPR.GE.1
+C
+      IF( LPRINT ) THEN
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Gaussian truncation = ',KGTRUNC)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: No.long pts = ',KNWE)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: No.lat. pts = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Area North = ',KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Area West  = ',KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Area South = ',KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Area East  = ',KAREA(4))
+      ENDIF
+C
+      ILNSTR = JP90 / KGTRUNC
+      ILATNUM = KGTRUNC * 2
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. If all elements of KAREA are missing generate
+C                a global field
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IGSIZE: Section 2.',JPQUIET)
+C
+      IF( (KAREA(JPEAST).EQ.0) .AND.
+     X    (KAREA(JPWEST).EQ.0) .AND.
+     X    (KAREA(JPNORTH).EQ.0).AND.
+     X    (KAREA(JPSOUTH).EQ.0) ) THEN
+C
+        KAREA(JPNORTH) = JP90
+        KAREA(JPWEST)  = 0
+        KAREA(JPSOUTH) = - JP90
+        KAREA(JPEAST)  = JP360 - ILNSTR
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Generate points around a line of latitude.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IGSIZE: Section 3.',JPQUIET)
+C
+C     Force both KAREA(JPWEST) and KAREA(JPEAST) into standard
+C     range (0 to JP360)
+C
+      IF( KAREA(JPWEST).LT.0 ) KAREA(JPWEST) = KAREA(JPWEST) + JP360
+      IF( KAREA(JPEAST).LT.0 ) KAREA(JPEAST) = KAREA(JPEAST) + JP360
+C
+C     Standardise range so that EAST > WEST
+C
+      IEAST = KAREA(JPEAST)
+      IWEST = KAREA(JPWEST)
+C
+      IF( IEAST.LT.IWEST ) THEN
+        IF( IEAST.LT.0 ) THEN
+          IEAST = IEAST + JP360
+          KAREA(JPEAST) = IEAST
+        ELSE
+          IWEST = IWEST - JP360
+          KAREA(JPWEST) = IWEST
+        ENDIF
+      ENDIF
+C
+      IF( KNWE.EQ.0 ) THEN
+C
+C       Is it a global grid ?
+C
+        IREACH   = IEAST - IWEST + ILNSTR
+        OWEGLOBE = IREACH.GE.JP360
+C
+C       Number of points along line is
+C
+        KNWE = NINT( FLOAT(IREACH) / FLOAT(ILNSTR) )
+C
+      ELSE
+C
+C       Number of points is set (input field)
+C
+        IF( (IWEST + (KNWE - 1)*ILNSTR).NE.IEAST ) THEN
+C
+C         Warn of possible mismatch
+C
+          IGSIZE = - 1
+          CALL INTLOG(JP_WARN,
+     X      'IGSIZE: West-East range does not match the',JPQUIET)
+          CALL INTLOG(JP_WARN,
+     X      'IGSIZE: number of points and the stride.',JPQUIET)
+          CALL INTLOGR(JP_WARN,
+     X      'IGSIZE: West = ',REAL(KAREA(JPWEST))/PPMULT)
+          CALL INTLOGR(JP_WARN,
+     X      'IGSIZE: East = ',REAL(KAREA(JPEAST))/PPMULT)
+          CALL INTLOG(JP_WARN,'IGSIZE: No. of points = ',KNWE)
+          CALL INTLOGR(JP_WARN,'IGSIZE: Stride = ',REAL(ILNSTR)/PPMULT)
+        ENDIF
+C
+C       NCEP products for DEMETER are pseudo gaussian
+C       (regular N48 in longitude direction, N47 in latitude direction)
+C
+        OWEGLOBE = KNWE.GE.(KGTRUNC*4)
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4. Generate points along a line of meridian
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IGSIZE: Section 4.',JPQUIET)
+C
+C     Generate full Gaussian latitudes for this truncation
+C
+      IERR = IGGLAT(ILATNUM, PGAUSS, KPR, KERR)
+C
+      IF( IERR.GT.0 ) THEN
+        IGSIZE = IERR
+        GOTO 900
+      ENDIF
+C
+C     Find Gaussian lines corresponding to given North and South points
+C
+C     Number of lines not set (output field)
+C
+      IF( KNNS.EQ.0 ) THEN
+        KLN = 0
+        ILS = ILATNUM
+C
+        DO JLAT = 2, ILATNUM
+          IGAUSS = NINT(PGAUSS(JLAT) * PPMULT)
+C
+          IF( (KLN.EQ.0).AND.((KAREA(JPNORTH)-IGAUSS).GT.1000) ) THEN
+            KLN = JLAT - 1
+            KAREA(JPNORTH) = NINT(PGAUSS(KLN) * PPMULT)
+          ENDIF
+C
+          IF( (ILS.EQ.ILATNUM).AND.(KAREA(JPSOUTH).GE.IGAUSS) ) THEN
+            ILS = JLAT
+            KAREA(JPSOUTH) = NINT(PGAUSS(ILS) * PPMULT)
+          ENDIF
+        ENDDO
+C
+        KNNS = ILS - KLN + 1
+C
+      ELSE
+C
+C       Number of lines set (input field)
+C
+        KLN = 1
+        ILS = 1
+C
+        INDIST = ABS(NINT(PGAUSS(1) * PPMULT) - KAREA(JPNORTH) )
+        ISDIST = ABS(NINT(PGAUSS(1) * PPMULT) - KAREA(JPSOUTH) )
+C
+        DO JLAT = 2, ILATNUM
+C
+          IF( (ABS(NINT(PGAUSS(JLAT)*PPMULT) - KAREA(JPNORTH) ) )
+     X         .LT.INDIST) THEN
+            KLN    = JLAT
+            INDIST = ABS(NINT(PGAUSS(JLAT) * PPMULT) - KAREA(JPNORTH) )
+          ENDIF
+C
+          IF( (ABS(NINT(PGAUSS(JLAT)*PPMULT) - KAREA(JPSOUTH) ) )
+     X         .LT.ISDIST) THEN
+            ILS    = JLAT
+            ISDIST = ABS(NINT(PGAUSS(JLAT) * PPMULT) - KAREA(JPSOUTH) )
+          ENDIF
+C
+        ENDDO
+C
+        IF( KNNS.NE.(ILS - KLN + 1) ) THEN
+          IGSIZE = JPROUTINE + 1
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X          'IGSIZE: No.of lines specified = ',KNNS)
+            CALL INTLOG(JP_ERROR,
+     X          'IGSIZE: does not match the',JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X          'IGSIZE: Gaussian line limits = ', KLN)
+            CALL INTLOG(JP_ERROR,
+     X          'IGSIZE: and ',ILS)
+          ENDIF
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X        'Interpolation failed.', JPQUIET)
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+      ONPOLE = KLN.EQ.1
+      OSPOLE = ILS.EQ.ILATNUM
+C
+      KAREA(JPNORTH) = NINT(PGAUSS(KLN) * PPMULT)
+      KAREA(JPSOUTH) = NINT(PGAUSS(ILS) * PPMULT)
+C
+      IF( LPRINT ) THEN
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Output parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: No.long pts = ',KNWE)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: No.lat. pts = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: Stride along lat = ',ILNSTR)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: North line number = ',KLN)
+        CALL INTLOG(JP_DEBUG,'IGSIZE: South line number = ',ILS)
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IGSIZE: Field is global West-East.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IGSIZE: Field is NOT global West-East.',JPQUIET)
+        ENDIF
+        IF( ONPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IGSIZE: North Pole is in field.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IGSIZE: North Pole NOT is in field.',JPQUIET)
+        ENDIF
+        IF( OSPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IGSIZE: South Pole is in field.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IGSIZE: South Pole NOT is in field.',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IGSIZE: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igtog.F b/interpolation/igtog.F
new file mode 100755
index 0000000..3584a7e
--- /dev/null
+++ b/interpolation/igtog.F
@@ -0,0 +1,276 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGTOG (PIFELD, KIWE, KINS, KOWE, KONS, KWEIND,
+     1   KNSIND, PWFACT, POFELD, KPR, KERR)
+C
+C---->
+C**** *IGTOG*
+C
+C     Purpose
+C     -------
+C
+C     Perform basic interpolation between regular input and output
+C     fields.
+C
+C     Interface
+C     ---------
+C
+C     IERR = IGTOG (PIFELD, KIWE, KINS, KOWE, KONS, KWEIND, KNSIND,
+C    1   PWFACT, POFELD, KPR, KERR)
+C
+C     Input parameters
+C     ----------------
+C
+C     PIFELD     - The input field provided by the calling routine.
+C
+C     KIWE       - The number of points in the West-East direction in
+C                  the input field.
+C
+C     KINS       - The number of points in the North-South direction
+C                  in the input field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KWEIND     - This array contains the array offsets of the West
+C                  and East points in the input array required for
+C                  interpolation.
+C
+C     KNSIND     - This array contains the array offsets of the North
+C                  and South points in the input array required for
+C                  interpolation.
+C
+C     PWFACT     - The array of interpolating weights to the four
+C                  neighbouring points for every output point.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     -----------------
+C
+C     POFELD     - The output field returned to the calling routine.
+C
+C     Return value
+C     ------------
+C
+C     The error indicator (INTEGER).
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C     Externals
+C     ---------
+C
+C     INTLOG(R)  - Logs messages.
+C
+C     Method
+C     ------
+C
+C     This routine performs basic linear interpolation using the four
+C     neighbouring points in the input array to generate the output
+C     array.
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C     Comments
+C     --------
+C
+C     None
+C
+C     Author
+C     ------
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     Modifications
+C     -------------
+C
+C     Allow for missing data values
+C     J.D.Chambers      ECMWF       August 2000
+C
+C     Force nearest neighbour processing with env variable or
+C     INTOUT parameter
+C     S.Curic           ECMWF       September 2005
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      INTEGER KIWE, KINS, KOWE, KONS, KPR, KERR
+      INTEGER KWEIND (2, KOWE), KNSIND (2, KONS)
+      REAL PIFELD (KIWE, KINS), POFELD (KOWE, KONS)
+      REAL PWFACT (4, KOWE, KONS)
+C
+C     Local variables
+C
+      INTEGER ILATN, ILATS, JOLAT, JOLON, COUNT
+      CHARACTER*12 YFLAG
+      REAL NEAREST
+      LOGICAL LVEGGY
+C
+C     External functions
+C
+      INTEGER IGTOGR
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGTOG: Section 1.',JPQUIET)
+C
+      IGTOG = 0
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IGTOG: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGTOG: No.input fld longitudes = ',KIWE)
+        CALL INTLOG(JP_DEBUG,'IGTOG: No.input fld latitudes  = ',KINS)
+        CALL INTLOG(JP_DEBUG,'IGTOG: No.output fld longitudes = ',KOWE)
+        CALL INTLOG(JP_DEBUG,'IGTOG: No.output fld latitudes  = ',KONS)
+      ENDIF
+C
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+        IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'IGTOG: nearest neighbour processing (vegetation)',JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Basic interpolation
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGTOG: Section 2.',JPQUIET)
+C
+      DO JOLAT = 1, KONS
+C
+        ILATN = KNSIND(JP_I_N,JOLAT)
+        ILATS = KNSIND(JP_I_S,JOLAT)
+C
+        DO JOLON = 1, KOWE
+C
+C         Count non-missing data values
+C
+          IF( LIMISSV ) THEN
+            COUNT = 0
+            IF( NOTEQ(PIFELD(KWEIND(JP_I_W,JOLON),ILATN), RMISSGV) )
+     X        COUNT = COUNT + 1
+            IF( NOTEQ(PIFELD(KWEIND(JP_I_W,JOLON),ILATS), RMISSGV) )
+     X        COUNT = COUNT + 1
+            IF( NOTEQ(PIFELD(KWEIND(JP_I_E,JOLON),ILATN), RMISSGV) )
+     X        COUNT = COUNT + 1
+            IF( NOTEQ(PIFELD(KWEIND(JP_I_E,JOLON),ILATS), RMISSGV) )
+     X        COUNT = COUNT + 1
+          ELSE
+            COUNT = 4
+          ENDIF
+C
+C         Interpolate using four neighbours if none are missing
+C
+          IF( (COUNT.EQ.4).AND.(.NOT.LVEGGY) ) THEN
+            POFELD(JOLON,JOLAT) =
+     X        PIFELD(KWEIND(JP_I_W,JOLON),ILATN) *
+     X          PWFACT(JP_I_NW,JOLON,JOLAT) +
+     X        PIFELD(KWEIND(JP_I_W,JOLON),ILATS) *
+     X          PWFACT(JP_I_SW,JOLON,JOLAT) +
+     X        PIFELD(KWEIND(JP_I_E,JOLON),ILATN) *
+     X          PWFACT(JP_I_NE,JOLON,JOLAT) +
+     X        PIFELD(KWEIND(JP_I_E,JOLON),ILATS) *
+     X          PWFACT(JP_I_SE,JOLON,JOLAT)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( COUNT.EQ.0 ) THEN
+            POFELD(JOLON,JOLAT) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            NEAREST = PWFACT(JP_I_NW,JOLON,JOLAT)
+            POFELD(JOLON,JOLAT) = 
+     X        PIFELD(KWEIND(JP_I_W,JOLON),ILATN)
+C
+            IF( PWFACT(JP_I_NE,JOLON,JOLAT).GT.NEAREST ) THEN
+              NEAREST = PWFACT(JP_I_NE,JOLON,JOLAT)
+              POFELD(JOLON,JOLAT) = 
+     X          PIFELD(KWEIND(JP_I_E,JOLON),ILATN)
+            ENDIF
+C
+            IF( PWFACT(JP_I_SW,JOLON,JOLAT).GT.NEAREST ) THEN
+              NEAREST = PWFACT(JP_I_SW,JOLON,JOLAT)
+              POFELD(JOLON,JOLAT) = 
+     X          PIFELD(KWEIND(JP_I_W,JOLON),ILATS)
+            ENDIF
+C
+            IF( PWFACT(JP_I_SE,JOLON,JOLAT).GT.NEAREST ) THEN
+              NEAREST = PWFACT(JP_I_SE,JOLON,JOLAT)
+              POFELD(JOLON,JOLAT) = 
+     X          PIFELD(KWEIND(JP_I_E,JOLON),ILATS)
+            ENDIF
+C
+          ENDIF
+C
+        ENDDO
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGTOG: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igtogr.F b/interpolation/igtogr.F
new file mode 100755
index 0000000..ffca362
--- /dev/null
+++ b/interpolation/igtogr.F
@@ -0,0 +1,258 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGTOGR (PIFELDN, PIFELDS, KNINDEX, KSINDEX,
+     1   PWFACT, KOWE, POFELD, KPR, KERR)
+C
+C---->
+C**** *IGTOGR*
+C
+C     Purpose
+C     -------
+C
+C     Perform basic interpolation for one line of latitude of the
+C     output field using its two neighbouring input field lines of
+C     latitude.
+C
+C     Interface
+C     ---------
+C
+C     IERR = IGTOGR (PIFELDN, PIFELDS, KNINDEX, KSINDEX, PWFACT,
+C    1   KOWE, POFELD, KPR, KERR)
+C
+C     Input parameters
+C     ----------------
+C
+C     PIFELDN    - The line of latitude of the input field North of
+C                  the output row.
+C
+C     PIFELDS    - The line of latitude of the input field South of
+C                  the output row.
+C
+C     KNINDEX    - This array contains the array offsets of the West
+C                  and East points in the input array North of the
+C                  output row.
+C
+C     KSINDEX    - This array contains the array offsets of the West
+C                  and East points in the input array South of the
+C                  output row.
+C
+C     PWFACT     - The array of interpolating weights to the four
+C                  neighbouring points for every output point of this
+C                  line of latitude.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     -----------------
+C
+C     POFELD     - The interpolated output field line of latitude
+C                  returned to the calling routine.
+C
+C     Return value
+C     ------------
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     -------------------------------
+C
+C     None
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C     Externals
+C     ---------
+C
+C     INTLOG   - Logs messages.
+C
+C     Method
+C     ------
+C
+C     This routine performs basic linear interpolation using the four
+C     neighbouring points in the input array to generate the output
+C     array.
+C
+C     The parameter list is designed to allow for quasi regular input
+C     fields with different grid spacing in the Northern and Southern
+C     lines of latitude.
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C     Comments
+C     --------
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     Author
+C     ------
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     Modifications
+C     -------------
+C
+C     Allow for missing data values
+C     J.D.Chambers      ECMWF       August 2000
+C
+C     Force nearest neighbour processing with env variable or
+C     INTOUT parameter
+C     S.Curic           ECMWF       September 2005
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      INTEGER KOWE, KPR, KERR
+      INTEGER KNINDEX (2, KOWE), KSINDEX (2, KOWE)
+      REAL PIFELDN (*), PIFELDS (*), POFELD (KOWE)
+      REAL PWFACT (4, KOWE)
+C
+C     Local variables
+C
+      INTEGER JOLON, COUNT
+      CHARACTER*12 YFLAG
+      REAL NEAREST
+      LOGICAL LVEGGY
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IGTOGR = 0
+C
+      IF( KPR.GE.1 ) THEN
+         CALL INTLOG(JP_DEBUG,'IGTOGR: Section 1.',JPQUIET)
+         CALL INTLOG(JP_DEBUG,'IGTOGR: Input parameters.',JPQUIET)
+         CALL INTLOG(JP_DEBUG,
+     X     'IGTOGR:  Number of output field longitudes is -',KOWE)
+      ENDIF
+C
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+        IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'IGTOGR: nearest neighbour processing (vegetation)',JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Basic interpolation
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGTOGR: Section 2.',JPQUIET)
+C
+      DO JOLON = 1, KOWE
+C
+C       Count non-missing data values
+C
+        IF( LIMISSV ) THEN
+          COUNT = 0
+          IF( NOTEQ(PIFELDN(KNINDEX(JP_I_W,JOLON)),RMISSGV) )
+     X      COUNT = COUNT + 1
+          IF( NOTEQ(PIFELDN(KNINDEX(JP_I_E,JOLON)),RMISSGV) )
+     X      COUNT = COUNT + 1
+          IF( NOTEQ(PIFELDN(KSINDEX(JP_I_W,JOLON)),RMISSGV) )
+     X      COUNT = COUNT + 1
+          IF( NOTEQ(PIFELDN(KSINDEX(JP_I_E,JOLON)),RMISSGV) )
+     X      COUNT = COUNT + 1
+        ELSE
+          COUNT = 4
+        ENDIF
+C
+C       Interpolate using four neighbours if none are missing
+C
+        IF( (COUNT.EQ.4).AND.(.NOT.LVEGGY) ) THEN
+          POFELD(JOLON) =
+     X      PIFELDN(KNINDEX(JP_I_W,JOLON)) * PWFACT(JP_I_NW,JOLON) +
+     X      PIFELDN(KNINDEX(JP_I_E,JOLON)) * PWFACT(JP_I_NE,JOLON) +
+     X      PIFELDS(KSINDEX(JP_I_W,JOLON)) * PWFACT(JP_I_SW,JOLON) +
+     X      PIFELDS(KSINDEX(JP_I_E,JOLON)) * PWFACT(JP_I_SE,JOLON)
+C
+C       Set missing if all neighbours are missing
+C
+        ELSE IF( COUNT.EQ.0 ) THEN
+          POFELD(JOLON) = RMISSGV
+C
+C       Otherwise, use the nearest neighbour
+C
+        ELSE
+          NEAREST = PWFACT(JP_I_NW,JOLON)
+          POFELD(JOLON) = PIFELDN(KNINDEX(JP_I_W,JOLON))
+C
+          IF( PWFACT(JP_I_NE,JOLON).GT.NEAREST ) THEN
+            NEAREST = PWFACT(JP_I_NE,JOLON)
+            POFELD(JOLON) = PIFELDN(KNINDEX(JP_I_E,JOLON))
+          ENDIF
+C
+          IF( PWFACT(JP_I_SW,JOLON).GT.NEAREST ) THEN
+            NEAREST = PWFACT(JP_I_SW,JOLON)
+            POFELD(JOLON) = PIFELDS(KSINDEX(JP_I_W,JOLON))
+          ENDIF
+C
+          IF( PWFACT(JP_I_SE,JOLON).GT.NEAREST ) THEN
+            NEAREST = PWFACT(JP_I_SE,JOLON)
+            POFELD(JOLON) = PIFELDS(KSINDEX(JP_I_E,JOLON))
+          ENDIF
+        ENDIF
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IGTOGR: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/igtran.F b/interpolation/igtran.F
new file mode 100755
index 0000000..db76b98
--- /dev/null
+++ b/interpolation/igtran.F
@@ -0,0 +1,345 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IGTRAN (PMAT, KINCOL, KINROW, KMOVE, KLEN,
+     1   KPR, KERR)
+C
+C---->
+C**** *IGTRAN*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine transposes a rectangular matrix.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IGTRAN (PMAT, KINCOL, KINROW, KMOVE, KLEN, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PMAT       - The input matrix of length KINCOL * KINROW.
+C
+C     KINCOL     - The length of the first dimension on entry and
+C                  second dimension on exit.
+C
+C     KINROW     - The length of the second dimension on entry and
+C                  first dimension on exit.
+C
+C     KMOVE      - Work array used to store information to speed up
+C                  the process.
+C
+C     KLEN       - Length of array KMOVE. The recommended length is
+C                  (KINCOL + KINROW) / 2.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  (No longer used, kept for backward compatibility.
+C                   Used to be used as follows:
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.)
+C
+C     Output parameters
+C     ________________
+C
+C     PMAT       - The transposed matrix.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     7401  KLEN was less than 1.
+C     7402  A failure during transposition (should never happen).
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG     - Generate log messages.
+C
+C
+C     METHOD
+C     ______
+C
+C     This algorithm uses the cyclic structure of transposition to
+C     perform a transposition in place with a minimum amount of work
+C     storage.
+C
+C     REFERENCE
+C     _________
+C
+C     Esko G. Cate and David W. Twigg      Analysis of In-Situ
+C                                          Transposition
+C     CACM Algorithm 513
+C
+C
+C     COMMENTS
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF       Sept 1995
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      INTEGER KINCOL, KINROW, KLEN, KPR, KERR
+      INTEGER KMOVE(KLEN)
+      REAL PMAT (KINCOL * KINROW)
+C
+C     Local variables
+      INTEGER ICOUNT, IRMULC, IR0, IR1, IR2, IPOINT, IKMI, IP1, IP2,
+     X   IRMCM1, IP1C, IP2C, IROWP1, ICOLM1, ISTART
+      INTEGER JST, JINROW, JINCOL
+      REAL ZMIP1, ZMIP1C, ZTEMP
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 7400)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGTRAN: Section 1.',JPQUIET)
+C
+      IGTRAN = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IGTRAN: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IGTRAN: 1st matrix dimension = ',KINCOL)
+        CALL INTLOG(JP_DEBUG,'IGTRAN: 2nd matrix dimension = ',KINROW)
+        CALL INTLOG(JP_DEBUG,'IGTRAN: Work array length = ',KLEN)
+        CALL INTLOG(JP_DEBUG,
+     X    'IGTRAN: Recommended length = ',(KINCOL + KINROW) / 2)
+      ENDIF
+C
+      IF (KINCOL .LE. 1 .OR. KINROW .LE. 1) GO TO 900
+C
+C     _______________________________________________________
+C
+C*    Section 2. Rectangular transposition setup
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGTRAN: Section 2.',JPQUIET)
+C
+      IF (KINCOL .NE. KINROW) THEN
+C
+        IF (KLEN .LT. 1) THEN
+          IGTRAN = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,'IGTRAN: Work array size = ',KLEN)
+          CALL INTLOG(JP_ERROR,'IGTRAN: Must be at least 1.',JPQUIET)
+          GO TO 900
+        ENDIF
+C
+        ICOUNT = 2
+        IRMULC = KINCOL * KINROW
+        IRMCM1 = IRMULC - 1
+C
+        DO 210 JST = 1, KLEN
+          KMOVE (JST) = 0
+  210   CONTINUE
+C
+        IF (KINCOL .GT. 2 .AND. KINROW .GT. 2) THEN
+C
+C         Calculate the number of fixed points, Euclids algorithm
+C         for GCD (m - 1, n - 1)
+C
+          IR2 = KINCOL - 1
+          IR1 = KINROW - 1
+C
+  220     CONTINUE
+          IR0 = MOD (IR2, IR1)
+          IR2 = IR1
+          IR1 = IR0
+          IF (IR0 .NE. 0) GO TO 220
+C
+          ICOUNT = ICOUNT + IR2 - 1
+C
+        ENDIF
+C
+C       Set initial values for search
+C
+        ISTART = 1
+        IPOINT = KINCOL
+C
+C       At least one loop must be rearranged so branch into loop
+C
+        GO TO 330
+C
+C     _______________________________________________________
+C
+C*    Section 3. Rectangular transposition main loop
+C     _______________________________________________________
+C
+  310   CONTINUE
+C
+C       Search for loops to rearrange
+C
+        IKMI = IRMCM1 - ISTART
+        ISTART = ISTART + 1
+C
+        IF (ISTART .GT. IKMI) THEN
+          IGTRAN = JPROUTINE + 2
+          CALL INTLOG(JP_ERROR,
+     X        'IGTRAN: Fail during transposition.',JPQUIET)
+          GO TO 900
+        ENDIF
+C
+        IPOINT = IPOINT + KINCOL
+C
+        IF (IPOINT .GT. IRMCM1) IPOINT = IPOINT - IRMCM1
+C
+        IP2 = IPOINT
+C
+        IF (ISTART .EQ. IP2) GO TO 310
+C
+        IF (ISTART .GT. KLEN) THEN
+C
+  320     CONTINUE
+C
+C         Loop exit condition
+C
+          IF (IP2 .LE. ISTART .OR. IP2 .GE. IKMI)  THEN
+            IF (IP2 .NE. ISTART) THEN
+              GO TO 310
+            ELSE
+              GO TO 330
+            ENDIF
+          ENDIF
+          IP1 = IP2
+          IP2 = KINCOL * IP1 - IRMCM1 * (IP1 / KINROW)
+          GO TO 320
+        ENDIF
+C
+        IF (KMOVE (ISTART) .NE. 0) GO TO 310
+C
+C       Rearrange the elements of a loop and its companion loop
+C
+C       Entry into loop on first pass
+C
+  330   CONTINUE
+C
+        IP1 = ISTART
+        IKMI = IRMCM1 - ISTART
+        ZMIP1 = PMAT (IP1 + 1)
+        IP1C = IKMI
+        ZMIP1C = PMAT (IP1C + 1)
+C
+  340   CONTINUE
+        IP2 = KINCOL * IP1 - IRMCM1 * (IP1 / KINROW)
+        IP2C = IRMCM1 - IP2
+C
+        IF (IP1 .LE. KLEN) KMOVE (IP1) = 2
+        IF (IP1C .LE. KLEN) KMOVE (IP1C) = 2
+C
+        ICOUNT = ICOUNT + 2
+C
+C       Loop exit conditions
+C
+        IF (IP2 .EQ. ISTART) GO TO 360
+        IF (IP2 .EQ. IKMI) GO TO 350
+C
+        PMAT (IP1 + 1) = PMAT(IP2 + 1)
+        PMAT (IP1C + 1) = PMAT(IP2C + 1)
+        IP1 = IP2
+        IP1C = IP2C
+C
+        GO TO 340
+C
+  350   CONTINUE
+C
+        ZTEMP = ZMIP1
+        ZMIP1 = ZMIP1C
+        ZMIP1C = ZTEMP
+C
+  360   CONTINUE
+C
+        PMAT (IP1 + 1) = ZMIP1
+        PMAT (IP1C + 1) = ZMIP1C
+C
+        IF (ICOUNT .LT. IRMULC) GO TO 310
+C
+      ELSE
+C
+C     _______________________________________________________
+C
+C*    Section 4. Square transposition
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+        IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IGTRAN: Section 4.',JPQUIET)
+C
+C       Square matrix so exchange elements a(i,j) and a(j,i)
+C
+        ICOLM1 = KINCOL - 1
+C
+        DO 420 JINCOL = 1, ICOLM1
+C
+          IROWP1 = JINCOL + 1
+C
+          DO 410 JINROW = IROWP1, KINROW
+C
+            IP1 = JINCOL + (JINROW - 1) * KINCOL
+            IP2 = JINROW + (JINCOL - 1) * KINROW
+C
+            ZTEMP = PMAT (IP1)
+            PMAT (IP1) = PMAT (IP2)
+            PMAT (IP2) = ZTEMP
+C
+  410     CONTINUE
+  420   CONTINUE
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IGTRAN: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/init_cm.F b/interpolation/init_cm.F
new file mode 100755
index 0000000..bff9b77
--- /dev/null
+++ b/interpolation/init_cm.F
@@ -0,0 +1,309 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INIT_CM( KPARAM, KVAL )
+C---->
+C**** INIT_CM
+C
+C     Purpose
+C     -------
+C
+C     Initialise common block values used by interpolation.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INIT_CM( KPARAM, KVAL )
+C
+C     Input
+C     -----
+C
+C     KPARAM - Flag indicating common block element to update.
+C     KVAL   - Value for element.
+C
+C
+C     Output
+C     ------
+C
+C     Common block entry updated.
+C
+C
+C     Method
+C     ------
+C
+C     1      NIFORM
+C     2      NOFORM
+C     3      NITABLE
+C     4      NIPARAM
+C     5      NIRESO
+C     6      NORESO
+C     7      NOACC
+C     8      NIGRID(1)
+C     9      NIGRID(2)
+C     10     NOGRID(1)
+C     11     NOGRID(2)
+C     12     NIGAUSS, RIGAUSS, MILLEN, NINS, NIGAUSO, HIGAUST
+C     13     NOGAUSS, ROGAUSS, NOLPTS, NONS, NOGAUSO, HOGAUST
+C     14     NIAREA(1)
+C     15     NIAREA(2)
+C     16     NIAREA(3)
+C     17     NIAREA(4)
+C     18     NOAREA(1)
+C     19     NOAREA(2)
+C     20     NOAREA(3)
+C     21     NOAREA(4)
+C     22     NISCNM
+C     23     NOSCNM
+C     24     LSM
+C     25     LWIND
+C     26     LPREC
+C     27     RIGAUSS, MILLEN, NINS, NIGAUSO, HIGAUST
+C     28     ROGAUSS, NOLPTS, NONS, NOGAUSO, HOGAUST
+C     29     LSMPAR
+C
+C     99     Display current values in common block.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER KPARAM, KVAL
+C
+C     Local variables
+C
+      INTEGER IRET, LOOP
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "current.h"
+C
+      INIT_CM = 0
+C
+      IF ( KPARAM .EQ.1 ) NIFORM = KVAL
+C
+      IF ( KPARAM .EQ.2 ) NOFORM = KVAL
+C
+      IF ( KPARAM .EQ.3 ) NITABLE = KVAL
+C
+      IF ( KPARAM .EQ.4 ) NIPARAM = KVAL
+C
+      IF ( KPARAM .EQ.5 ) NIRESO = KVAL
+C
+      IF ( KPARAM .EQ.6 ) NORESO = KVAL
+C
+      IF ( KPARAM .EQ.7 ) NOACC = KVAL
+C
+      IF ( KPARAM .EQ.8 ) NIGRID(1) = KVAL
+C
+      IF ( KPARAM .EQ.9 ) NIGRID(2) = KVAL
+C
+      IF ( KPARAM .EQ.10) NOGRID(1) = KVAL
+C
+      IF ( KPARAM .EQ.11) NOGRID(2) = KVAL
+C
+      IF ( KPARAM .EQ.12) THEN
+        NIGAUSS = KVAL
+        IF( (NIGAUSO.NE.NIGAUSS).OR.(HIGAUST.NE.'F') ) THEN
+          CALL JGETGG( NIGAUSS, 'F', RIGAUSS, MILLEN, IRET)
+          IF ( IRET .NE. 0 ) THEN
+            WRITE(*,*) 'INIT_CM: JGETGG failed for NIGAUSS'
+            INIT_CM = IRET
+            GOTO 900
+          ENDIF
+          NINS = 2*NIGAUSS
+          NIGAUSO = NIGAUSS
+          HIGAUST = 'F'
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.13) THEN
+        NOGAUSS = KVAL
+        IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+          CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+          IF ( IRET .NE. 0 ) THEN
+            WRITE(*,*) 'INIT_CM: JGETGG failed for NOGAUSS'
+            INIT_CM = IRET
+            GOTO 900
+          ENDIF
+          NONS = 2*NOGAUSS
+          NOGAUSO = NOGAUSS
+          HOGAUST = 'F'
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.14) NIAREA(1) = KVAL
+C
+      IF ( KPARAM .EQ.15) NIAREA(2) = KVAL
+C
+      IF ( KPARAM .EQ.16) NIAREA(3) = KVAL
+C
+      IF ( KPARAM .EQ.17) NIAREA(4) = KVAL
+C
+      IF ( KPARAM .EQ.18) NOAREA(1) = KVAL
+C
+      IF ( KPARAM .EQ.19) NOAREA(2) = KVAL
+C
+      IF ( KPARAM .EQ.20) NOAREA(3) = KVAL
+C
+      IF ( KPARAM .EQ.21) NOAREA(4) = KVAL
+C
+      IF ( KPARAM .EQ.22) NISCNM    = KVAL
+C
+      IF ( KPARAM .EQ.23) NOSCNM    = KVAL
+C
+      IF ( KPARAM .EQ.24) THEN
+        IF ( KVAL .EQ. 1) THEN
+          LSM       = .TRUE.
+        ELSE
+          LSM       = .FALSE.
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.25) THEN
+        IF ( KVAL .EQ. 1) THEN
+          LWIND     = .TRUE.
+        ELSE
+          LWIND     = .FALSE.
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.26) THEN
+        IF ( KVAL .EQ. 1) THEN
+          LPREC     = .TRUE.
+        ELSE
+          LPREC     = .FALSE.
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.27) THEN
+        IF ( KVAL .EQ. 1) THEN
+          IF( (NIGAUSO.NE.NIGAUSS).OR.(HIGAUST.NE.'R') ) THEN
+            CALL JGETGG( NIGAUSS, 'R', RIGAUSS, MILLEN, IRET)
+            IF ( IRET .NE. 0 ) THEN
+              WRITE(*,*) 'INIT_CM: JGETGG failed for NIGAUSS'
+              INIT_CM = IRET
+              GOTO 900
+            ENDIF
+            NINS = 2*NIGAUSS
+            NIGAUSO = NIGAUSS
+            HIGAUST = 'R'
+          ENDIF
+        ELSE
+          WRITE(*,*) 'No user input supported for reduced gaussian grid'
+          INIT_CM = 999
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.28) THEN
+        IF ( KVAL .EQ. 1) THEN
+          IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'R') ) THEN
+            CALL JGETGG( NOGAUSS, 'R', ROGAUSS, NOLPTS, IRET)
+            IF ( IRET .NE. 0 ) THEN
+              WRITE(*,*) 'INIT_CM: JGETGG failed for NIGAUSS'
+              INIT_CM = IRET
+              GOTO 900
+            ENDIF
+            NONS = 2*NOGAUSS
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'R'
+          ENDIF
+        ELSE
+          WRITE(*,*) 'No user input supported for reduced gaussian grid'
+          INIT_CM = 999
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.29) THEN
+        IF ( KVAL .EQ. 1) THEN
+          LSMPAR    = .TRUE.
+        ELSE
+          LSMPAR    = .FALSE.
+        ENDIF
+      ENDIF
+C
+      IF ( KPARAM .EQ.99) THEN
+        WRITE(*,*) ' LCHANGE   = ', LCHANGE
+        WRITE(*,*) ' LSMCHNG   = ', LSMCHNG
+        WRITE(*,*) ' LSMSET    = ', LSMSET
+        WRITE(*,*) ' LSMPARSET = ', LSMPARSET
+        WRITE(*,*) ' LPRECSET  = ', LPRECSET
+        WRITE(*,*) ' LWINDSET  = ', LWINDSET
+        WRITE(*,*) ' NINS      = ', NINS
+        WRITE(*,*) ' NIWE      = ', NIWE
+        WRITE(*,*) ' NO1NS     = ', NO1NS
+        WRITE(*,*) ' NO1WE     = ', NO1WE
+        WRITE(*,*) ' NONS      = ', NONS
+        WRITE(*,*) ' NOWE      = ', NOWE
+C
+        WRITE(*,*) ' NIFORM    = ', NIFORM
+        WRITE(*,*) ' NOFORM    = ', NOFORM
+        WRITE(*,*) ' NITABLE   = ', NITABLE
+        WRITE(*,*) ' NIPARAM   = ', NIPARAM
+        WRITE(*,*) ' NIRESO    = ', NIRESO
+        WRITE(*,*) ' NORESO    = ', NORESO
+        WRITE(*,*) ' LNORESO   = ', LNORESO
+        WRITE(*,*) ' NOACC     = ', NOACC 
+        WRITE(*,*) ' LNOACC    = ', LNOACC 
+        WRITE(*,*) ' NIGRID(1) = ', NIGRID(1)
+        WRITE(*,*) ' NIGRID(2) = ', NIGRID(2)
+        WRITE(*,*) ' NOGRID(1) = ', NOGRID(1)
+        WRITE(*,*) ' NOGRID(2) = ', NOGRID(2)
+        WRITE(*,*) ' NIGAUSS   = ', NIGAUSS
+        WRITE(*,*) ' NOGAUSS   = ', NOGAUSS
+        WRITE(*,*) ' LNOGAUS   = ', LNOGAUS
+        WRITE(*,*) ' NIAREA(1) = ', NIAREA(1)
+        WRITE(*,*) ' NIAREA(2) = ', NIAREA(2)
+        WRITE(*,*) ' NIAREA(3) = ', NIAREA(3)
+        WRITE(*,*) ' NIAREA(4) = ', NIAREA(4)
+        WRITE(*,*) ' NOAREA(1) = ', NOAREA(1)
+        WRITE(*,*) ' NOAREA(2) = ', NOAREA(2)
+        WRITE(*,*) ' NOAREA(3) = ', NOAREA(3)
+        WRITE(*,*) ' NOAREA(4) = ', NOAREA(4)
+        WRITE(*,*) ' NISCNM    = ', NISCNM   
+        WRITE(*,*) ' NOSCNM    = ', NOSCNM   
+        WRITE(*,*) ' LSM       = ', LSM      
+        WRITE(*,*) ' LWIND     = ', LWIND    
+        WRITE(*,*) ' LPREC     = ', LPREC    
+        WRITE(*,*) ' LSMPAR    = ', LSMPAR   
+      ENDIF
+C
+      IF ( KPARAM .GT.99) THEN
+        DO 110 LOOP = 1, NINS
+          WRITE(*,*) ' RIGAUSS(',LOOP,'), MILLEN(',LOOP,')=',
+     X                 RIGAUSS(LOOP), MILLEN(LOOP)
+  110   CONTINUE
+        DO 120 LOOP = 1, NONS
+          WRITE(*,*) ' ROGAUSS(',LOOP,'), NOLPTS(',LOOP,')=',
+     X                 ROGAUSS(LOOP), NOLPTS(LOOP)
+  120   CONTINUE
+      ENDIF
+C
+ 900  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/insane.F b/interpolation/insane.F
new file mode 100755
index 0000000..c5478f3
--- /dev/null
+++ b/interpolation/insane.F
@@ -0,0 +1,550 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INSANE( )
+C
+C---->
+C**** INSANE
+C
+C     Purpose
+C     -------
+C
+C     Check interpolate options before processing.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INSANE( )
+C
+C     Input
+C     -----
+C
+C     Common blocks nifld.common and nofld.common
+C
+C
+C     Output
+C     ------
+C
+C     Returns: 0 if no problems spotted.
+C              -1 if output is same as the input
+C
+C
+C     Method
+C     ------
+C
+C     See below!
+C
+C
+C     Externals
+C     ---------
+C
+C     ISSAME  - Checks if input specification is same as output.
+C     INTLOG  - Logs error messages.
+C     INTLOGR - Logs error messages.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Feb 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 27200 )
+      INTEGER JPMAXRES
+      PARAMETER (JPMAXRES = JPSTRUNC)
+C
+C     Local variables
+C
+      CHARACTER*12 YFLAG,YFLAG1
+      INTEGER IERR, MINGRID
+      REAL GRIDINT
+      LOGICAL LINCHECK,LNLIMIT
+C
+C     Externals
+      LOGICAL ISSAME
+      INTEGER FFTCHK
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INSANE = 0
+      IERR = 0
+C
+C     Exit if output is same as input ...
+C
+      IF ( ISSAME() ) THEN
+        INSANE = -1
+        GOTO 900
+      ENDIF
+C
+C     Check output packing accuracy requested (packed output only)
+C
+      IF ( NOFORM .EQ. 1 ) THEN
+        IF ( (NOACC .GT. 30) .OR. (NOACC .LT. 1) ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X        'INSANE: Invalid output packing given ',NOACC)
+          NOACC = 16
+          CALL INTLOG(JP_DEBUG,
+     X        'INSANE: Changed to ',NOACC)
+cs          CALL INTLOG(JP_ERROR,
+cs     X      'Sorry!: Invalid output packing given',NOACC)
+cs          IERR   = JPROUTINE + 1
+cs          CALL INTLOG(JP_ERROR,
+cs     X      '        Must be between 1 and 30 bits per value.',IERR)
+cs          INSANE = IERR
+cs          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Check valid input/output representations.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Input
+C
+      IF ( (NIREPR .NE. JPREGULAR ) .AND.
+     X     (NIREPR .NE. JPREDLL   ) .AND.
+     X     (NIREPR .NE. JPSPHERE  ) .AND.
+     X     (NIREPR .NE. JPSPHROT  ) .AND.
+     X     (NIREPR .NE. JPGAUSSIAN) .AND.
+     X     (NIREPR .NE. JPSTRSH   ) .AND.
+     X     (NIREPR .NE. JPSTRGG   ) .AND.
+     X     (NIREPR .NE. JPQUASI   ) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Invalid input representation.', NIREPR)
+        INSANE = JPROUTINE + 21
+        GOTO 900
+      ENDIF
+C
+C     Output
+C
+      IF ( (NOREPR .NE. JPREGULAR ) .AND.
+     X     (NOREPR .NE. JPREGROT  ) .AND.
+     X     (NOREPR .NE. JPSPHERE  ) .AND.
+     X     (NOREPR .NE. JPSPHROT  ) .AND.
+     X     (NOREPR .NE. JPGAUSSIAN) .AND.
+     X     (NOREPR .NE. JPSTRSH   ) .AND.
+     X     (NOREPR .NE. JPSTRGG   ) .AND.
+     X     (NOREPR .NE. JPQUASI   ) .AND.
+     X     (NOREPR .NE. JPFGGROT  ) .AND.
+     X     (NOREPR .NE. JPQGGROT  ) .AND.
+     X     (NOREPR .NE. JPREDLL   ) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Invalid output representation.', NOREPR)
+        INSANE = JPROUTINE + 22
+        GOTO 900
+      ENDIF
+C
+C     Input / output combination
+C
+      IF ( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+        IF ( (NIREPR.NE.JPSPHERE).AND.(NIREPR.NE.JPSPHROT) ) THEN
+C
+C         Set flag to discontinue attempts at interpolation, ie
+C         force output to be same as input
+C
+          INSANE = -1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Check spectral to grid options.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      MINGRID = JP0P5 / 5
+C
+      IF ( (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT) ) THEN
+C
+C       Check resolution not too large
+C
+        IF( (NOREPR.NE.JPSPHERE).AND.(NIRESO.GT.JPMAXRES) ) THEN
+C
+C         Problem unless a suitable truncation is on-the-way
+C
+          IF( LARESOL.OR.LNORESO ) THEN
+            IF( MIN(NOGRID(1),NOGRID(2)).LT.MINGRID ) THEN
+              CALL INTLOG(JP_ERROR,
+     X        'Sorry!: Despite truncation,', JPQUIET)
+              CALL INTLOG(JP_ERROR,
+     X        '        spectral to grid transformation', JPQUIET)
+              CALL INTLOG(JP_ERROR,
+     X        '        cannot be done (grid too fine).', JPQUIET)
+              CALL INTLOG(JP_ERROR,
+     X        '        Grid west-east (* 10**-5)   = ', NOGRID(1))
+              CALL INTLOG(JP_ERROR,
+     X        '        Grid north-south (* 10**-5) = ', NOGRID(2))
+              CALL INTLOG(JP_ERROR,
+     X        '        Minimum allowed (* 10**-5)  = ', MINGRID)
+              IERR   = JPROUTINE + 31
+              INSANE = IERR
+              GOTO 900
+            ENDIF
+C
+          ELSE
+C
+            CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Spectral truncation too large for ', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X      '        spectral to grid transformation.', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X      '        Truncation given = ', NIRESO)
+            CALL INTLOG(JP_ERROR,
+     X      '        Max. truncation handled = ', JPMAXRES)
+            IERR   = JPROUTINE + 31
+            INSANE = IERR
+            GOTO 900
+          ENDIF
+C
+        ENDIF
+C
+C       Check resolution not too small
+C
+        IF ( (NOREPR .NE. JPSPHERE) .AND. (NIRESO .LE. 0) ) THEN
+          IERR   = JPROUTINE + 32
+          CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Spectral truncation too small for ', JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      '        spectral to grid transformation.', JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      '        Truncation given = ', NIRESO)
+          CALL INTLOG(JP_ERROR,
+     X      '        Truncation must be > ', 0)
+          INSANE = IERR
+          GOTO 900
+        ENDIF
+C
+C       Check grid interval
+C
+        IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C         Not too small
+C
+C if env variable 1 no check of incterval
+      LNLIMIT = .TRUE.
+      CALL GETENV('INCREMENT_NO_LIMIT', YFLAG)
+      IF(YFLAG1(1:1).EQ.'1' ) LNLIMIT = .FALSE.
+
+C
+        IF(LNLIMIT) THEN
+          IF( (NOGRID(1).LT.MINGRID).OR.(NOGRID(2).LT.MINGRID) ) THEN
+            IERR   = JPROUTINE + 33
+            CALL INTLOG(JP_ERROR,
+     X        'Sorry!: Grid interval too small for ', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        '        spectral to grid transformation.', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        '         Latitude interval given = ', NOGRID(1))
+            CALL INTLOG(JP_ERROR,
+     X        '        Longitude interval given = ', NOGRID(2))
+            CALL INTLOG(JP_ERROR,
+     X        '         Min. interval handled = ', MINGRID)
+            INSANE = IERR
+            GOTO 900
+          ENDIF
+       ELSE
+          CALL INTLOG(JP_DEBUG,
+     X    'INSANE: Increments checking disabled',JPQUIET)
+       ENDIF
+C
+C         Not too large
+C
+          IF ( (NOGRID(1).GT.JP90) .OR. (NOGRID(2).GT.JP90) ) THEN
+            IERR   = JPROUTINE + 34
+            CALL INTLOG(JP_ERROR,
+     X        'Sorry!: Grid interval too large for ', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        '        spectral to grid transformation.', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        '         Latitude interval given = ', NOGRID(1))
+            CALL INTLOG(JP_ERROR,
+     X        '        Longitude interval given = ', NOGRID(2))
+            CALL INTLOG(JP_ERROR,
+     X        '         Max. interval handled = ', JP90)
+            INSANE = IERR
+            GOTO 900
+          ENDIF
+C
+C         A multiple of 0.0005
+C
+C if env variable 1 no check of increments
+      LINCHECK = .FALSE.
+      CALL GETENV('INCREMENT_CHECK', YFLAG)
+      IF(YFLAG(1:1).EQ.'1' ) LINCHECK = .TRUE.
+
+      IF( LINCHECK ) CALL INTLOG(JP_DEBUG,
+     X  'INSANE: Increments checking disabled',JPQUIET)
+C
+        IF(.NOT.LINCHECK) THEN
+          IF ( (MOD(NOGRID(1),5).NE.0) .OR.
+     X         (MOD(NOGRID(2),5).NE.0) ) THEN
+            IERR   = JPROUTINE + 35
+            CALL INTLOG(JP_ERROR, 
+     X        'Sorry!: Grid must be a multiple of 0.0005 ', JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        '         Latitude interval given = ', NOGRID(1))
+            CALL INTLOG(JP_ERROR,
+     X        '        Longitude interval given = ', NOGRID(2))
+            INSANE = IERR
+            GOTO 900
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C       Check if combination of truncation and longitude grid interval
+C       can be handled by the FFT algorithm.
+C
+        IERR = 1
+        GRIDINT = -1.0
+C
+        IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+          GRIDINT = FLOAT(NOGRID(2))/FLOAT(JPMULT)
+          IERR = FFTCHK( NIRESO, GRIDINT )
+          IF ( IERR.NE.1 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Invalid combination of spectral number = ', NIRESO)
+            CALL INTLOGR(JP_ERROR,
+     X        '        and longitude grid interval = ', GRIDINT)
+            CALL INTLOG(JP_ERROR,
+     X        '        for FFT algorithm in use.', JPQUIET)
+            INSANE = JPROUTINE + 36
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        IF ( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          GRIDINT = 360.0/FLOAT(NOGAUSS)
+          IERR = FFTCHK( NIRESO, GRIDINT )
+          IF ( IERR.NE.1 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Invalid combination of spectral number = ', NIRESO)
+            CALL INTLOGR(JP_ERROR,
+     X        '        and longitude grid intvl = ', GRIDINT)
+            CALL INTLOG(JP_ERROR,
+     X        '        from gaussian number = ', NOGAUSS)
+              CALL INTLOG(JP_ERROR,
+     X          '        for FFT algorithm in use.', JPQUIET)
+            INSANE = JPROUTINE + 37
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Check legal area definition.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Don't check area for ocean products
+C
+      IF( NILOCAL.EQ.4 ) GOTO 900
+C
+      IF ( (NOAREA(1).GT.JP90).OR.(NOAREA(1).LT.-JP90) ) THEN
+        IERR   = JPROUTINE + 41
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Output area definition illegal',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    '        Northern limit given as ', NOAREA(1))
+        INSANE = IERR
+        GOTO 900
+      ENDIF
+C
+      IF ( (NOAREA(3).GT.JP90).OR.(NOAREA(3).LT.-JP90) ) THEN
+        IERR   = JPROUTINE + 42
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Output area definition illegal',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    '        Southern limit given as ', NOAREA(3))
+        INSANE = IERR
+        GOTO 900
+      ENDIF
+C
+      IF ( (NOAREA(2).GT.JP360).OR.(NOAREA(2).LT.-JP360) ) THEN
+        IERR   = JPROUTINE + 43
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Output area definition illegal',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    '        Western limit given as ', NOAREA(2))
+        INSANE = IERR
+        GOTO 900
+      ENDIF
+C
+      IF ( (NOAREA(4).GT.JP360).OR.(NOAREA(4).LT.-JP360) ) THEN
+        IERR   = JPROUTINE + 44
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Output area definition illegal',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    '        Eastern limit given as ', NOAREA(4))
+        INSANE = IERR
+        GOTO 900
+      ENDIF
+C
+C     Subarea not supported for reduced gaussian grids
+C
+      IF( LNOAREA.AND.
+     X    ((NOREPR.EQ.JPQUASI).OR.
+     X     (NOREPR.EQ.JPQGGROT).OR.
+     X     (NOREPR.EQ.JPSTRGG)) ) THEN
+        IERR   = JPROUTINE + 45
+        CALL INTLOG(JP_ERROR,
+     X    'Sorry!: Subarea not supported for reduced gaussian grids',
+     X    JPQUIET)
+        INSANE = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Check legal gaussian grid definition.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     If input is quasi- regular gaussian, a grid definition must be
+C     supplied in a GRIB record or by the caller, or the grid must be
+C     a known definition.
+C
+      IF ( (NIREPR.EQ.JPQUASI) ) THEN
+        IF ( (.NOT. (LIGIVEL.AND.LIGIVEP)) .AND.
+     X       (.NOT. (NIFORM.EQ.1))       ) THEN
+          IF (
+     x         (NIGAUSS.NE.32) .AND.
+     x         (NIGAUSS.NE.48) .AND.
+     x         (NIGAUSS.NE.64) .AND.
+     x         (NIGAUSS.NE.80) .AND.
+     x         (NIGAUSS.NE.128).AND.
+     X         (NIGAUSS.NE.160).AND.
+     X         (NIGAUSS.NE.200).AND.
+     X         (NIGAUSS.NE.256).AND.
+     X         (NIGAUSS.NE.320).AND.
+     X         (NIGAUSS.NE.400).AND.
+     X         (NIGAUSS.NE.512).AND.
+     X         (NIGAUSS.NE.640).AND.
+     X         (NIGAUSS.NE.1024) ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'Sorry!: No definition for quasi gauss. input',NIGAUSS)
+            INSANE = JPROUTINE + 51
+            GOTO 900
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Check legal rotation definition.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+C     Check for rotation.
+C
+      IF ( LNOROTA ) THEN
+C
+C       Only allowed rotations are:
+C        - spectral to regular lat/long
+C        - regular gaussian to regular lat/long
+C        - reduced gaussian to regular lat/long
+C
+        IF( ((NOREPR.NE.JPREGROT).AND.(NOREPR.NE.JPREGULAR)).OR.
+     X      ((NIREPR.NE.JPSPHERE)  .AND.
+     X       (NIREPR.NE.JPGAUSSIAN).AND.
+     X       (NIREPR.NE.JPQUASI)) ) THEN
+Cjdc      CALL INTLOG(JP_ERROR,
+Cjdc X      'Sorry!: Only allowed rotations are:',JPQUIET)
+Cjdc      CALL INTLOG(JP_ERROR,
+Cjdc X      '        spectral to regular lat/long, or',JPQUIET)
+Cjdc      CALL INTLOG(JP_ERROR,
+Cjdc X      '        regular gaussian to regular lat/long',JPQUIET)
+Cjdc      CALL INTLOG(JP_ERROR,
+Cjdc X      '        reduced gaussian to regular lat/long',JPQUIET)
+          INSANE = JPROUTINE + 61
+          GOTO 900
+        ENDIF
+C
+C       Check rotation angles.
+C
+        IF ( (NOROTA(1).LT.-JP360) .OR. (NOROTA(1).GT.JP360) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Rotation longitude out of range = ',NOROTA(1))
+          INSANE = JPROUTINE + 62
+          GOTO 900
+        ENDIF
+C
+        IF ( (NOROTA(2).LT.-JP180) .OR. (NOROTA(2).GT.JP180) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Rotation longitude out of range = ',NOROTA(2))
+          INSANE = JPROUTINE + 63
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.   Check legal definition for table, parameter, level
+C                  type.
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+C     Table
+C
+c      IF ( (NOTABLE.LT.0) .OR. (NOTABLE.GT.255) ) THEN
+      IF (NOTABLE.LT.0) THEN
+        CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Table definition out of range = ', NOTABLE)
+        INSANE = JPROUTINE + 71
+        GOTO 900
+      ENDIF
+C
+C     Parameter
+C
+cs      IF ( (NOPARAM.LT.0) .OR. (NOPARAM.GT.255) ) THEN
+      IF ( NOPARAM.LT.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X      'Sorry!: Parameter definition out of range = ', NOPARAM)
+        INSANE = JPROUTINE + 72
+        GOTO 900
+      ENDIF
+C
+C     Level type
+C
+      IF ( (NOLEVT.LT.0) .OR. (NOLEVT.GT.255) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X      'Sorry!:  Level type definition out of range = ', NOLEVT)
+        INSANE = JPROUTINE + 73
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intf.F b/interpolation/intf.F
new file mode 100755
index 0000000..000cdd6
--- /dev/null
+++ b/interpolation/intf.F
@@ -0,0 +1,467 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       INTEGER FUNCTION INTF( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C---->
+C**** INTF
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTF( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C     FLDIN  - Input field (unpacked).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C     FLDOUT  - Output field (unpacked).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routines.
+C
+C
+C     Externals
+C     ---------
+C
+C     IBASINI - Ensure basic interpolation setup is done.
+C     INSANE  - Ensure no outrageous values given for interpolation.
+C     PDDEFS  - Setup interpolation using parameter dependent options.
+C     PRECIP  - Says if field is to have 'precipitation' treatment
+C     INTFAU  - Prepare to interpolate unpacked input field.
+C     INTFAP  - Prepare to interpolate packed input field.
+C     HNTFAU  - Prepare to interpolate unpacked input field (using
+C               Hirlam 12-point for rotations).
+C     HNTFAP  - Prepare to interpolate packed input field (using
+C               Hirlam 12-point for rotations).
+C     INTFB   - Interpolate input field.
+C     INTLOG  - Log error message.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     INTWAVE - Interpolate quasi-regular lat/long wave field
+C               to a regular lat/long field.
+C     OCEANP  - Interpolate GRIB ocean field.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+      REAL FLDIN(*),FLDOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "current.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26000 )
+C
+C     Local variables
+C
+      INTEGER IWORD, IRET, IORIGLN, ISAME
+      INTEGER LOOP, IIHOLD, IOHOLD
+      DIMENSION IIHOLD(4), IOHOLD(4)
+      INTEGER NUMTABL, NUMPROD
+      LOGICAL L98WAVE, LUNROT
+      LOGICAL LIQUASI
+      CHARACTER*6 YFLAG
+      INTEGER IOS
+      INTEGER LENMED, ISIZE
+C
+C     Externals
+C
+      INTEGER IBASINI, PDDEFS, INSANE
+      INTEGER INTFAU, INTFAP, INTFB, HNTFAU, HNTFAP
+      INTEGER INTWAVE2,INTWAVE,INTWAVU, OCEANP, OCEANU, RESET_C
+      INTEGER FIXAREA
+      LOGICAL PRECIP
+
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTF = 0
+      IRET = 0
+      IORIGLN = OUTLEN
+      NOMISS = 0
+      LUNROT = .FALSE.
+      OUTLROT = 0
+
+C
+C     Save input and output area definitions
+C
+      DO 110 LOOP = 1, 4
+        IIHOLD(LOOP) = NIAREA(LOOP)
+        IOHOLD(LOOP) = NOAREA(LOOP)
+  110 CONTINUE
+C
+C     Check if debug option turned on
+C
+      CALL JDEBUG()
+C
+C     If the input is a set of U and V rotated lat/long fields,
+C     set return length to zero and do not copy input to output
+C
+      IF( (NIREPR.EQ.JPREGULAR).AND.LWIND.AND.LNOROTA ) THEN
+        OUTLEN = 0
+        IRET   = 0
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: Input U and V rotated lat/long fields ...',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: ... no further interpolation has been done',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Prepare to interpolate input field.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Ensure that basic initialisation has been done
+C
+      IRET = IBASINI(0)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTF: basic initialisation fail.',JPQUIET)
+        INTF = IRET
+        GOTO 900
+      ENDIF
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+       LACCUR = .FALSE.
+      IF( NIFORM.EQ.1 ) THEN
+        IF( IZNJDCI.NE.1952999238 ) THEN
+          CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_WARN,'INTF: ZNFELDI allocation fail',JPQUIET)
+            INTF = IRET
+            GOTO 900
+          ENDIF
+          IZNJDCI = 1952999238
+        ENDIF
+C
+C       Unpack the field headers for packed input.
+C
+        CALL INTLOG(JP_DEBUG, 'INTF: Unpack GRIB headers.',JPQUIET)
+        IRET = 1
+        IWORD = 0
+        CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X              ZNFELDI, JPEXPAND, INGRIB, INLEN, IWORD, 'J',IRET)
+C
+        IF( (IRET.NE.0).AND.(IRET.NE.811) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTF: Failed to unpack GRIB heders.',JPQUIET)
+          INTF = IRET
+          GOTO 900
+        ENDIF
+C
+C       Reset interpolation handling options using GRIB values.
+C
+        IRET = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,
+     X      'INTF: Setup of interp. options from GRIB failed',JPQUIET)
+          INTF = IRET
+          GOTO 900
+        ENDIF
+C end of NIFORM = 1
+       LACCUR = .TRUE.
+      ENDIF
+C
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+cs   Regular Gaussian has to be set here for unpacked fields
+      IF( NIFORM.NE.1 ) THEN
+cs    this is for merging with grib_api
+        LUVCOMP = .FALSE.
+        IF( NOREPR.EQ.JPNOTYPE ) THEN
+         IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+            CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'INTF: JGETGG failed, NOGAUSS = ',NOGAUSS)
+              INTF = IRET
+              GOTO 900
+            ENDIF
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'F'
+          ENDIF
+          NOREPR = JPGAUSSIAN
+        ENDIF
+      ENDIF
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF ( ISAME .GT. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTF: Interpolation cannot use given values.',JPQUIET)
+        INTF = ISAME
+        GOTO 900
+      ENDIF
+Cs setting of out Date
+      NODATE = NIDATE
+C
+C     If output is same as the input, set return length to zero and
+C     do not copy input to output
+C
+      IF( ISAME.EQ.-1 ) THEN
+        OUTLEN = 0
+        IRET   = 0
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: Output is same as the input.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: No interpolation carried out.',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     Set precipitation flag if user hasn't
+C
+      IF( .NOT.LPRECSET ) LPREC = PRECIP()
+C
+C     Handle packed fields
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Use special interpolation for:
+C                  - an ECMWF wave field.
+C                  - a reduced latitude-longitude field
+C     -----------------------------------------------------------------|
+C
+  300   CONTINUE
+C
+        NUMTABL = NITABLE
+        NUMPROD = NUMTABL*1000 + NIPARAM
+        L98WAVE = (NUMTABL.EQ.140).OR.
+     X            (NUMPROD.EQ.131229).OR.
+     X            (NUMPROD.EQ.131232).OR.
+     X            (NIREPR.EQ.26)
+      IF( L98WAVE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTF: Wave-type interpolation required.',JPQUIET)
+C
+        OUTLEN = IORIGLN
+        IF( NIFORM.EQ.1 ) THEN
+             IRET = INTWAVE2(INGRIB,INLEN,OUTGRIB,OUTLEN)
+cs             IRET = INTWAVE(INGRIB,INLEN,OUTGRIB,OUTLEN)
+        ELSE
+            IRET = INTWAVU(FLDIN,INLEN,FLDOUT,OUTLEN)
+        ENDIF
+          IF( IRET.EQ.0 ) THEN
+            CALL INTLOG(JP_DEBUG,
+     X        'INTF: Wave-type interpolated OK.',JPQUIET)
+          ELSE
+            CALL INTLOG(JP_DEBUG,
+     X        'INTF: Wave-type interpolation failed.',JPQUIET)
+          ENDIF
+          INTF = IRET
+          GOTO 900
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Use special interpolation for an ECMWF ocean field.
+C     -----------------------------------------------------------------|
+C
+  400   CONTINUE
+C
+        IF( ((ISEC1(24).EQ.1).AND.(ISEC1(37).EQ.4)).OR.LOCEAN ) THEN
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'INTF: Ocean field interpolation required.',JPQUIET)
+C
+          OUTLEN = IORIGLN
+          IF( NIFORM.EQ.1 ) THEN
+            IRET = OCEANP(INGRIB,INLEN,OUTGRIB,OUTLEN)
+          ELSE
+            IRET = OCEANU(FLDIN,INLEN,FLDOUT,OUTLEN)
+          ENDIF
+          IF( IRET.EQ.0 ) THEN
+            CALL INTLOG(JP_DEBUG,
+     X        'INTF: Ocean field interpolated OK.',JPQUIET)
+          ELSE
+            CALL INTLOG(JP_DEBUG,
+     X        'INTF: Ocean field interpolation failed.',JPQUIET)
+          ENDIF
+          INTF = IRET
+          GOTO 900
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.   Continue interpolation setup in other cases.
+C     -----------------------------------------------------------------|
+C
+  500   CONTINUE
+      IF( NIFORM.EQ.1 ) THEN
+C
+C       Unpack (and rotate) field if necessary
+C
+        IF( LUSEHIR ) THEN
+          IRET = HNTFAP(INGRIB,INLEN)
+        ELSE
+          IRET = INTFAP(INGRIB,INLEN)
+        ENDIF
+C
+C       If a bitmap encountered with some missing values (IRET=-4),
+C       product cannot be interpolated unless 'missingvalue'
+C       specified via INTIN
+C
+        IF( .NOT.LIMISSV ) THEN
+          IF( (IRET.NE.0).AND.(IRET.NE.-2) ) THEN
+            IF( IRET.EQ.-4 ) THEN
+              CALL INTLOG(JP_WARN,
+     X        'INTF: Product has bitmap and missing data.',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X        'INTF: Try Using INTIN "missingvalue" option',JPQUIET)
+            ENDIF
+            INTF = -4
+            GOTO 900
+          ENDIF
+        ELSE
+          IF( IRET.GT.0 ) THEN
+            CALL INTLOG(JP_WARN,
+     X        'INTF: Problems preparing for interpolation.',JPQUIET)
+            INTF = IRET
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C     Handle unpacked fields
+C
+      ELSE
+        LUNROT = .TRUE.
+        IF( LUSEHIR ) THEN
+          IRET = HNTFAU(FLDIN,INLEN)
+        ELSE
+          IRET = INTFAU(FLDIN,INLEN)
+        ENDIF
+      ENDIF
+C
+      IF( (IRET.NE.0).AND.(IRET.NE.-2) ) THEN
+        CALL INTLOG(JP_WARN,'INTF: Prepare interpolate fail',JPQUIET)
+        INTF = IRET
+        GOTO 900
+      ENDIF
+C
+C     Field values are now in ZNFELDI.
+C
+C     Setup output length same as input GRIB length in case straight
+C     copy is done later (ie input is transferred direct to output
+C     without postprocessing).
+C
+      OUTLEN = INLEN
+
+C
+C     Setup interpolation options based on parameter in field.
+C
+      IRET = PDDEFS()
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTF: Setup interpolation options from param failed',JPQUIET)
+        INTF = IRET
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 8.   Interpolate input field.
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+C     If all values missing, set flag to ensure all are missing in the
+C     interpolated field.
+C
+      IF( ISEC4(1).LT.0 ) NOMISS = ISEC4(1)
+C
+C     Perform the interpolation.
+C
+      CALL INTLOG(JP_DEBUG,'INTF: Perform the interpolation.',JPQUIET)
+C
+      OUTLEN = IORIGLN
+      IF( NIFORM.EQ.1 ) THEN
+        IRET = INTFB( INGRIB,INLEN,OUTGRIB,OUTLEN,FLDOUT)
+      ELSE
+        IRET = INTFB( ZNFELDI,INLEN,OUTGRIB,OUTLEN,FLDOUT)
+      ENDIF
+C
+      IF( LUNROT.AND.LNOROTA ) THEN
+          OUTLEN = OUTLROT
+      ENDIF
+C
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTF: Interpolation failed.',JPQUIET)
+        INTF = IRET
+        GOTO 900
+      ELSE
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: Interpolation finished successfully.',JPQUIET)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+C     Restore input and output area definitions
+C
+      DO 910 LOOP = 1, 4
+        NIAREA(LOOP) = IIHOLD(LOOP)
+        NOAAPI(LOOP) = NOAREA(LOOP)
+        NOAREA(LOOP) = IOHOLD(LOOP)
+  910 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intf.h b/interpolation/intf.h
new file mode 100755
index 0000000..0f5764a
--- /dev/null
+++ b/interpolation/intf.h
@@ -0,0 +1,30 @@
+C
+C     Parameters
+C
+      INTEGER JPEXPAND
+cs      PARAMETER (JPEXPAND = 1440 * 721 * 6)
+cs expanded for 0.1X0.1 resolution
+      PARAMETER (JPEXPAND = 3600*1801)
+C
+C     Local variables
+C
+      INTEGER ISEC0 (JPGRIB_ISEC0), ISEC1 (JPGRIB_ISEC1)
+      INTEGER ISEC2 (JPGRIB_ISEC2), ISEC3 (JPGRIB_ISEC3)
+      INTEGER ISEC4 (JPGRIB_ISEC4)
+      REAL ZSEC2 (JPGRIB_RSEC2), ZSEC3 (JPGRIB_RSEC3)
+      INTEGER IZNJDCI
+      LOGICAL LUSEHIR
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDI
+#endif 
+C
+      POINTER ( IZNFLDI, ZNFELDI )
+C
+C     Pointer for dynamically allocated array:
+C
+C     REAL ZNFELDI (JPEXPAND)
+C
+      COMMON /INTFCM/ ZSEC2, ZSEC3, IZNFLDI, IZNJDCI,
+     X                ISEC0, ISEC1, ISEC2, ISEC3, ISEC4, LUSEHIR
+C
+      REAL ZNFELDI(1)
diff --git a/interpolation/intfa.F b/interpolation/intfa.F
new file mode 100755
index 0000000..562774d
--- /dev/null
+++ b/interpolation/intfa.F
@@ -0,0 +1,182 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFA( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C---->
+C**** INTFA
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFA( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C     FLDIN  - Input field (unpacked).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C     FLDOUT  - Output field (unpacked).
+C
+C
+C     Method
+C     ------
+C
+C     Unpack field if GRIB).
+C
+C
+C     Externals
+C     ---------
+C
+C     IBASINI - Ensure basic interpolation setup is done.
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     PDDEFS  - Setup interpolation using parameter dependent options.
+C     INTLOG  - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Jan 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+      REAL FLDIN(*),FLDOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26100 )
+C
+C     Local variables
+C
+      INTEGER IWORD, IERR
+      INTEGER KPR
+      INTEGER LOOP
+C
+C     Externals
+      INTEGER IBASINI, RESET_C, PDDEFS
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      INTFA = 0
+      IERR = 0
+      KPR = 0
+C
+C     Check that basic initialisation has been done
+      IERR = IBASINI(0)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFA: basic initialisation fail',JPQUIET)
+        INTFA = IERR
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Decode data from the GRIB code
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'INTFA: ZNFELDI allocation fail',JPQUIET)
+          INTFA = IERR
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     If input is a GRIB product
+      If (NIFORM .EQ. 1) THEN
+C
+C       Decode data from GRIB code (no checking)
+C
+        IWORD = INLEN
+        IERR  =  0
+        CALL GRSVCK(0)
+        IERR = 1
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+        CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X              ZNFELDI, JPEXPAND, INGRIB, INLEN, IWORD, 'D',IERR)
+        IF ( IERR .NE. 0) THEN
+          CALL INTLOG(JP_ERROR, 'INTFA: GRIBEX decoding failed.',IERR)
+          INTFA = IERR
+          GOTO 900
+        ENDIF
+C
+C       Setup interpolation options from GRIB product characteristics
+        IERR = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFA: Setup interp. options from GRIB failed.',JPQUIET)
+          INTFA = IERR
+          GOTO 900
+        ENDIF
+C
+C     Otherwise, move unpacked values in from user array
+      ELSE
+        DO 210 LOOP = 1, INLEN
+          ZNFELDI( LOOP ) = FLDIN( LOOP )
+ 210    CONTINUE
+C
+      ENDIF
+C
+C     Setup interpolation options based on parameter in field.
+      IERR = PDDEFS()
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFA: Setup interp. options from parameter failed.',JPQUIET)
+        INTFA = IERR
+        GOTO 900
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      RETURN
+      END
diff --git a/interpolation/intfap.F b/interpolation/intfap.F
new file mode 100755
index 0000000..3950412
--- /dev/null
+++ b/interpolation/intfap.F
@@ -0,0 +1,519 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFAP(INGRIB,INLEN)
+C
+C---->
+C**** INTFAP
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFAP(INGRIB,INLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     Field unpacked values are in ZNFELDI, rotated if necessary.
+C
+C     Returns: 0, if OK. Otherwise, an error occured in interpolation.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack field.
+C
+C     Rotate the field values if necessary.
+C
+C     Some rotation coefficients cannot be created because the
+C     algorithm does not converge for rotations which are smaller
+C     than a limit which depends on the spectral truncation.
+C
+C     If the rotation is too small, it has to be split into three
+C     steps (two forward and one backward).
+C
+C     Current know limits are:
+C
+C     Truncation    Max South pole lat   Minimum rotation
+C     ----------    ------------------   ----------------
+C         63          -89.5                  0.5
+C        106          -85                    5.0
+C        159          -77                   13.0
+C        213          -68                   22.0
+C        319          -51                   39.0
+C        511          -30.5                 59.5
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C     RPHI    - Rotate a spectral field by longitude.
+#ifdef __uxp__
+C     JACOBIF - Rotates spectral coefficients by latitude.
+#else
+C     JACOBI  - Rotates spectral coefficients by latitude.
+#endif
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Jan 1995
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        Oct 2000
+C     Split rotations if less than minimum for the truncation
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0.   Variables
+C
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INGRIB(*),INLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26200 )
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+6) )
+C
+C     Local variables
+C
+      REAL POLELAT, POLELON
+      CHARACTER*1 TYPE
+      INTEGER NUMPTS, NGAUSS
+      INTEGER IWORD, IERR, KPR, NBYTES, ITRUNC, LOOP, IRET
+      INTEGER ISIZE
+      DATA ISIZE/0/
+C
+      REAL SWORK
+      DIMENSION SWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 ISWORK
+#endif
+      POINTER ( ISWORK, SWORK)
+C
+      REAL*8 DWORK
+      DIMENSION DWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 IDWORK
+#endif
+      POINTER ( IDWORK, DWORK)
+C
+      REAL*8 DATA
+      DIMENSION DATA(1)
+#ifdef POINTER_64
+      INTEGER*8 IDATA
+#endif
+      POINTER ( IDATA, DATA)
+C
+      SAVE ISIZE, ISWORK, IDWORK, IDATA
+C
+      REAL*8 DLON, DLAT, LATLIM
+      LOGICAL LOK, LSPLIT
+#ifdef CRAY
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+#endif
+C
+C     Externals
+      INTEGER NGROTAT
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INTFAP = 0
+      IERR = 0
+      KPR = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Decode data from the GRIB code
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Decode data from GRIB code (no checking)
+C
+      IWORD = INLEN
+      IERR  =  0
+      CALL GRSVCK(0)
+      IERR = 1
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            ZNFELDI, JPEXPAND, INGRIB, INLEN, IWORD, 'D',IERR)
+C
+      IF( IERR.LT.0) THEN
+        IF( (IERR.EQ.-2).OR.(IERR.EQ.-4) ) THEN
+          CALL INTLOG(JP_DEBUG,'INTFAP: Use missing value',JPQUIET)
+          LIMISSV = .TRUE.
+        ELSE
+          CALL INTLOG(JP_ERROR,'INTFAP: GRIBEX decoding fail.',IERR)
+          INTFAP = IERR
+          GOTO 900
+        ENDIF
+      ELSE IF( IERR.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFAP: GRIBEX decoding failed.',IERR)
+        INTFAP = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Handle spectral rotation, if necessary.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Is the interpolation from SH with a rotation of the SH first?
+C
+      IF( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X    LNOROTA ) THEN
+C
+C       Avoid rotating U or V spectral coefficients
+C
+        IF( (NIPARAM.EQ.131).OR.(NIPARAM.EQ.132) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFAP: Unable to rotate spectral U or V:',NIPARAM)
+          INTFAP = JPROUTINE + 6
+          GOTO 900
+        ENDIF
+C
+C       Dynamically allocate memory for workspace.
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        ISIZE =  (2*(JPNM+1)*(JPNM+6))*2
+        CALL JMEMHAN( 11, IDWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAP: memory allocation fail',IDWORK)
+          INTFAP = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        ISIZE =  JPLEN*2
+        CALL JMEMHAN( 15, IDATA, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAP: memory allocation fail',IDATA)
+          INTFAP = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'INTFAP: Rotate SH field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTFAP: South pole latitude  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'INTFAP: South pole longitude ',NOROTA(2))
+        IF ( NOREPR.EQ.JPSPHERE )  NOREPR = JPSPHROT
+        IF ( NOREPR.EQ.JPREGULAR )  NOREPR = JPREGROT
+        ITRUNC = ISEC2(2)
+C
+C       Some rotation coefficients cannot be created because the
+C       algorithm does not converge for rotations which are smaller
+C       than a limit which depends on the spectral truncation.
+C
+        IF( ITRUNC.LE.63 ) THEN
+          LATLIM = -89.5
+        ELSE IF( ITRUNC.LE.106 ) THEN
+          LATLIM = -85.0
+        ELSE IF( ITRUNC.LE.159 ) THEN
+          LATLIM = -77.0
+        ELSE IF( ITRUNC.LE.213 ) THEN
+          LATLIM = -68.0
+        ELSE IF( ITRUNC.LE.319 ) THEN
+          LATLIM = -51.0
+        ELSE IF( ITRUNC.LE.511 ) THEN
+#ifdef __uxp__
+          LATLIM = -30.5
+#else
+          LATLIM = -29.5
+#endif
+        ELSE
+          INTFAP = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+        CALL INTLOGR(JP_DEBUG,
+     X    'INTFAP: South pole latitude limit = ',LATLIM)
+C
+        POLELAT = (REAL(NOROTA(1))/JPMULT)
+C
+C       If the rotation is too small, it has to be split into three
+C       steps (two forward and one backward).
+C
+        LSPLIT = POLELAT.LT.LATLIM
+        IF( LSPLIT ) THEN
+          DLAT = -90.0 - LATLIM
+          CALL INTLOG(JP_DEBUG,
+     X      'INTFAP: Rotation has been split into three steps',JPQUIET)
+        ELSE
+          DLAT = -90.0 - POLELAT
+        ENDIF
+#if (defined CRAY) || (defined REAL_8)
+C
+C       Double precision REALs
+C
+        DLON = - REAL(NOROTA(2))/JPMULT
+C
+C       Rotate the spectral field by longitude.
+        CALL RPHI( ZNFELDI, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+        IF( LSPLIT ) THEN
+C
+C         Two rotations forward ..
+C
+          CALL INTLOGR(JP_DEBUG,
+     X      'INTFAP: Twice forward through angle ', DLAT)
+#if (!defined __uxp__)
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X       'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+C
+C         .. and one backward
+C
+          DLAT = -90.0 - ( (LATLIM*2.0) - POLELAT)
+          DLAT= -DLAT
+          CALL INTLOGR(JP_DEBUG,
+     X      'INTFAP: Once backward through angle ', DLAT)
+        ENDIF
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+        LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+#else
+C
+C       Single precision REALs; so convert to double precision.
+C
+        DLAT = -90.0 - DBLE(NOROTA(1))/JPMULT
+        DLON = - DBLE(NOROTA(2))/JPMULT
+C
+C       Expand spectral coefficients to REAL*8
+C
+        DO LOOP = 1, ISEC4(1)
+          DATA(LOOP) = DBLE(ZNFELDI(LOOP))
+        ENDDO
+C
+C       Rotate the spectral field by longitude.
+        CALL RPHI( DATA, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+        IF( LSPLIT ) THEN
+C
+C         Two rotations forward ..
+C
+          CALL INTLOGR(JP_DEBUG,
+     X      'INTFAP: Twice forward through angle ', DLAT)
+#if (!defined __uxp__)
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBI(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#else
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+          IF(.NOT.LOK) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFAP: Spectral rotation failed',JPQUIET)
+            INTFAP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+#endif
+C
+C         .. and one backward
+C
+          DLAT = -90.0 - ( (LATLIM*2.0) - POLELAT)
+          DLAT= -DLAT
+          CALL INTLOGR(JP_DEBUG,
+     X      'INTFAP: Once backward through angle ', DLAT)
+        ENDIF
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( DATA, ITRUNC, DWORK, DLAT)
+#else
+        LOK = JACOBIF(DATA, ITRUNC, DWORK, DLAT)
+#endif
+#endif
+C
+        IF(.NOT.LOK) THEN
+          CALL INTLOG(JP_ERROR,'INTFAP: Spectral rotation fail',JPQUIET)
+          INTFAP = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+#if (!defined CRAY) && (!defined REAL_8)
+C
+C       Single precision REALs; repack spectral coefficients to REAL*4.
+C
+        DO LOOP = 1, ISEC4(1)
+          ZNFELDI(LOOP) = SNGL(DATA(LOOP))
+        ENDDO
+#endif
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Handle gaussian rotation, if necessary.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Is the interpolation from gaussian with a rotation of the
+C     gaussian first?
+C
+      IF( ((NIREPR.EQ.JPGAUSSIAN).OR.(NIREPR.EQ.JPQUASI)) .AND.
+     X    LNOROTA ) THEN
+C
+        CALL INTLOG(JP_DEBUG,'INTFAP: Rotate gaussian field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTFAP: South pole latitude  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'INTFAP: South pole longitude ',NOROTA(2))
+C
+C       Dynamically allocate memory for workspace.
+C
+        NUMPTS = ISEC4(1)
+        ISIZE  = NUMPTS
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAP: memory allocation fail',ISWORK)
+          INTFAP = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+C       Rotate the gaussian field.
+C
+        POLELAT = REAL(NOROTA(1))/JPMULT
+        POLELON = REAL(NOROTA(2))/JPMULT
+        NGAUSS = ISEC2(3)/2
+        IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+          TYPE = 'F'
+        ELSE
+          TYPE = 'R'
+        ENDIF
+        IRET = NGROTAT(ZNFELDI,SWORK,NUMPTS,POLELAT,POLELON,TYPE,NGAUSS)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAP: Gaussian rotation fail',JPQUIET)
+          INTFAP = JPROUTINE + 5
+          GOTO 900
+        ENDIF
+C
+C       Move rotated field back into field original array.
+C
+        DO LOOP = 1, NUMPTS
+          ZNFELDI(LOOP) = SWORK(LOOP)
+        ENDDO
+C
+      ENDIF
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intfau.F b/interpolation/intfau.F
new file mode 100755
index 0000000..78a85f2
--- /dev/null
+++ b/interpolation/intfau.F
@@ -0,0 +1,326 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFAU(FLDIN,INLEN)
+C
+C---->
+C**** INTFAU
+C
+C     Purpose
+C     -------
+C
+C     Prepare to interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFAU( FLDIN,INLEN)
+C
+C     Input
+C     -----
+C
+C     FLDIN  - Input field (unpacked).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C    Field unpacked values are in ZNFELDI.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack field if GRIB.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Jan 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INLEN
+      REAL FLDIN(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26300 )
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+2) )
+C
+C     Local variables
+C
+      REAL POLELAT, POLELON
+      CHARACTER*1 TYPE
+      INTEGER NUMPTS, NGAUSS
+      INTEGER ISIZE, NBYTES, ITRUNC
+      DATA ISIZE/0/
+C
+      REAL SWORK
+      DIMENSION SWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 ISWORK
+#endif
+      POINTER ( ISWORK, SWORK)
+C
+      REAL*8 DWORK
+      DIMENSION DWORK(1)
+#ifdef POINTER_64
+      INTEGER*8 IDWORK
+#endif
+      POINTER ( IDWORK, DWORK )
+C
+      REAL*8 DATA
+      DIMENSION DATA(1)
+#ifdef POINTER_64
+      INTEGER*8 IDATA
+#endif
+      POINTER ( IDATA, DATA)
+C
+      SAVE ISIZE, ISWORK, IDWORK, IDATA
+C
+      REAL*8 DLON, DLAT
+      LOGICAL LOK
+#ifdef CRAY
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+#endif
+C
+C     Externals
+      INTEGER GGROTAT
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+      INTEGER IRET
+      INTEGER LOOP
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      INTFAU = 0
+      IRET = 0
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Decode data from the GRIB code
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'INTFAU: ZNFELDI allocate fail',JPQUIET)
+          INTFAU = IRET
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     Move unpacked values in from user array
+      DO 210 LOOP = 1, INLEN
+        ZNFELDI( LOOP ) = FLDIN( LOOP )
+ 210  CONTINUE
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Handle spectral rotation, if necessary.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Is the interpolation from SH with a rotation of the SH first?
+C
+      IF( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X    LNOROTA ) THEN
+C
+C       Avoid rotating U or V spectral coefficients
+C
+        IF( (NIPARAM.EQ.131).OR.(NIPARAM.EQ.132) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFAU: Unable to rotate spectral U or V:',NIPARAM)
+          INTFAU = JPROUTINE + 6
+          GOTO 900
+        ENDIF
+C
+C       Dynamically allocate memory for workspace.
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        NUMPTS = INLEN
+        ISIZE = NUMPTS*2
+        CALL JMEMHAN( 11, IDWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAU: memory allocation fail',IDWORK)
+          INTFAU = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+C       (Note the multiplication by 2 for REAL*8).
+C
+        ISIZE = JPLEN*2
+        CALL JMEMHAN( 15, IDATA, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAU: memory allocation fail',IDATA)
+          INTFAU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG,'INTFAU: Rotate SH field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTFAU: South pole latitude  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'INTFAU: South pole longitude ',NOROTA(2))
+        IF ( NOREPR.EQ.JPSPHERE )  NOREPR = JPSPHROT
+        IF ( NOREPR.EQ.JPREGULAR )  NOREPR = JPREGROT
+        ITRUNC = NIRESO
+#if (defined CRAY) || (defined REAL_8)
+        DLAT = -90.0 - REAL(NOROTA(1))/JPMULT
+        DLON = - REAL(NOROTA(2))/JPMULT
+C
+C       Rotate the spectral field by longitude.
+        CALL RPHI( ZNFELDI, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+#if (!defined __uxp__)
+        LOK = JACOBI( ZNFELDI, ITRUNC, DWORK, DLAT)
+#else
+        LOK = JACOBIF(ZNFELDI, ITRUNC, DWORK, DLAT)
+#endif
+#else
+        DLAT = -90.0 - DBLE(NOROTA(1))/JPMULT
+        DLON = - DBLE(NOROTA(2))/JPMULT
+C
+C       Expand spectral coefficients to REAL*8
+C
+        DO LOOP = 1, NUMPTS
+          DATA(LOOP) = DBLE(ZNFELDI(LOOP))
+        ENDDO
+C
+C       Rotate the spectral field by longitude.
+        CALL RPHI( DATA, ITRUNC, DWORK, DLON)
+C
+C       Rotate the spectral field by latitude.
+C
+#if (!defined __uxp__)
+        LOK = JACOBI( DATA, ITRUNC, DWORK, DLAT)
+#else
+        LOK = JACOBIF( DATA, ITRUNC, DWORK, DLAT)
+#endif
+#endif
+        IF(.NOT.LOK) THEN
+          CALL INTLOG(JP_ERROR,'INTFAU: Spectral rotation fail',JPQUIET)
+          INTFAU = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+#if (!defined CRAY) && (!defined REAL_8)
+C
+C       Repack spectral coefficients to REAL*4.
+C
+        DO LOOP = 1, NUMPTS
+          ZNFELDI(LOOP) = SNGL(DATA(LOOP))
+        ENDDO
+#endif
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 4.   Handle gaussian rotation, if necessary.
+C ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Is the interpolation from gaussian with a rotation of the
+C     gaussian first?
+C
+      IF( ((NIREPR.EQ.JPGAUSSIAN).OR.(NIREPR.EQ.JPQUASI)) .AND.
+     X    LNOROTA ) THEN
+C
+        CALL INTLOG(JP_DEBUG,'INTFAU: Rotate gaussian field.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTFAU: South pole latitude  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'INTFAU: South pole longitude ',NOROTA(2))
+        IF ( NOREPR.EQ.JPGAUSSIAN )  NOREPR = JPFGGROT
+        IF ( NOREPR.EQ.JPQUASI )     NOREPR = JPQGGROT
+C
+C       Dynamically allocate memory for workspace.
+C
+        NUMPTS = INLEN
+        ISIZE  = NUMPTS
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAU: memory allocation fail',ISWORK)
+          INTFAU = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+C       Rotate the gaussian field.
+C
+        POLELAT = REAL(NOROTA(1))/JPMULT
+        POLELON = REAL(NOROTA(2))/JPMULT
+        NGAUSS = NIGAUSS
+        IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+          TYPE = 'F'
+        ELSE
+          TYPE = 'R'
+        ENDIF
+        IRET = GGROTAT(ZNFELDI,SWORK,NUMPTS,POLELAT,POLELON,TYPE,NGAUSS)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFAU: Gaussian rotation fail',JPQUIET)
+          INTFAU = JPROUTINE + 5
+          GOTO 900
+        ENDIF
+C
+C       Move rotated field back into field original array.
+C
+        DO LOOP = 1, NUMPTS
+          ZNFELDI(LOOP) = SWORK(LOOP)
+        ENDDO
+        OUTLROT = NUMPTS
+C
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      RETURN
+      END
diff --git a/interpolation/intfb.F b/interpolation/intfb.F
new file mode 100755
index 0000000..8989c31
--- /dev/null
+++ b/interpolation/intfb.F
@@ -0,0 +1,1241 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFB( INGRIB,INLEN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C---->
+C**** INTFB
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFB( INGRIB,INLEN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C     FLDOUT  - Output field (unpacked).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routines; then repack if GRIB output.
+C
+C     Currently, subareas are not supported for reduced gaussian fields.
+C     (Works OK; but need to setup values in GRIB product for number of
+C      points in each latitude row)
+C
+C
+C     Externals
+C     ---------
+C
+C     IARCNTL - Control interp. quasi reg.Gauss -> Gaussian or lat/long
+C     IAGCNTL - Control interpolation reg.Gaussian or lat/long fields.
+C     JSH2SH  - Changes resolution of a field of spectral coefficients.
+C     JALLGP  - Converts spectral fields to lat/long grid fields.
+C     JALLWN  - Converts spectral wind fields to lat/long grids.
+C     JSLLGP  - Converts strectched spectral fields to lat/long grid fields.
+C     JAGGGP  - Converts spectral fields to a gaussian grid field.
+C     JSGGGP  - Converts strectched spectral fields to a gaussian grid field.
+C     IBASINI - Ensure basic interpolation setup is done.
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     IGSETUP - Setup GRIB sections for the output product.
+C     JMEMHAN - Handles memory allocation.
+C     IGLSIZE - Evaluate array sizes for reg. lat/long and area.
+C     IGSIZE  - Evaluate array sizes for a regular Gaussian.
+C     IRSIZE  - Evaluate array sizes for a quasi reg Gaussian.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     ISCRSZ  - Calculate number of values in generated field.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message (real value).
+C     OCEANP  - Interpolate GRIB ocean field.
+C     MKBITMP - Apply a bitmap to a rectangular field.
+C     MKFRAME - Create a 'frame' from a rectangular field.
+C     DDSTYLE - Create subgrid by selecting pts from rectangular grid.
+C     DSSAREA - Fixup field area (dissemination style).
+C     INTISL  - Interpolate a field using ISLSCP processing.
+C     KRG2RG  - Interpolate reduced gaussian to reduced gaussian (packed)
+C     KRG2RGU - Interpolate reduced gaussian to reduced gaussian (unpacked)
+C     KRG2RGD - Interpolate reduced gaussian to reduced gaussian
+c               using intermediate interpolation
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+      REAL FLDOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "jparams.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      INTEGER JUNPACK, JPREALB
+      PARAMETER (JPROUTINE = 26400 )
+      INTEGER JPIMISS,CLASMISS,KNEWMISS
+      PARAMETER (JPIMISS = -2147483647)
+      PARAMETER (CLASMISS = 9999)
+      REAL JPZMISS,NEWMISS
+      PARAMETER (JPZMISS = -2.1474836E+09)
+      PARAMETER (JUNPACK = 3000000)
+      PARAMETER (JPREALB = 8)
+C
+C     Local variables
+C
+      INTEGER NWEPTS, NNSPTS
+      REAL OLDS, OLDE
+      REAL EW, NS, NORTH, SOUTH, WEST, EAST, RTEMP
+      INTEGER IWORD, IERR, ILENF, ISIZE, IUV, IDISTEP
+      REAL PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      LOGICAL OIWEGLOBE, OINPOLE, OISPOLE
+      LOGICAL OOWEGLOBE, OONPOLE, OOSPOLE
+      LOGICAL LBITMP,LFRAME,LSTYLE,LGLOBAL,LSAMERS,LIQUASI
+      LOGICAL LOLDLSP, LOLDLSM
+      INTEGER INORTH, ISOUTH, IEAST, IWEST
+      INTEGER HOLDEW, HOLDNS, N_NOWE, N_NONS
+      INTEGER KILN, KITOTAL, KOLN, KOTOTAL, KPR, KERR
+      INTEGER LOOP, LOOPI, NEXT, ISWAP, NTRUNC, NTROLD, NTROLD2
+      INTEGER LENMED
+      INTEGER IOS, ILENS
+      REAL*8 DISSRES
+      REAL TEMP(2048)
+C
+      DATA NTROLD/-1/, NTROLD2/-1/
+      SAVE NTROLD, NTROLD2
+      CHARACTER*1 HTYPE
+      CHARACTER*1 HFUNC
+      CHARACTER*6 YFLAG
+
+#ifdef POINTER_64
+#ifndef FUJITSU
+      INTEGER*8 IZNFLDO
+#endif
+#endif
+      REAL ZNFLDO , RWORK
+      DIMENSION RWORK(JUNPACK)
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+      INTEGER NEWLSM(1), OLDLSM(1)
+      POINTER( NIPNGRB, NEWLSM )
+      POINTER( NIPOGRB, OLDLSM )
+      LOGICAL LFIRST
+      DATA LFIRST/.TRUE./
+      SAVE LFIRST
+C
+C     Externals
+C
+      INTEGER IGLSIZE, IGSIZE, IRSIZE, IARCNTL, IAGCNTL, DSSAREA
+      INTEGER IGSETUP, FIXAREA, ISCRSZ, OCEANP, AURESOL, MKBITMP
+      INTEGER INTISL, KRG2RG, KRG2RGU,KRG2RGZ, KRG2RGD, KRG2RGY
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INTFB = 0
+      IERR = 0
+C
+C     Check if debug option turned on
+      CALL JDEBUG()
+      KPR = NDBG
+C
+      LBITMP = LNOBITMP.AND.
+     X         ((NOREPR.EQ.JPREGROT).OR.(NOREPR.EQ.JPREGULAR).OR.
+     X          (NOREPR.EQ.JPGAUSSIAN))
+C
+      LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+C
+      LSTYLE = LNOSTYLE.AND.
+     X         (NOSTYLE.EQ.JPSDISM).AND.
+     X         (NOREPR.EQ.JPREGULAR)
+C
+      IF( .NOT.LWINDSET ) THEN
+        LWIND = ( ((NOTABLE.EQ.128).OR.(NOTABLE.EQ.129)).AND.
+     X            ((NOPARAM.EQ.131).OR.(NOPARAM.EQ.132).OR.
+     X            (NOPARAM.EQ.165).OR.(NOPARAM.EQ.166)) )
+      ENDIF
+      CALL INTLOG(JP_DEBUG,'INTFB: Wind flag = ', LWIND)
+      IF( LWIND ) THEN
+        IUV = 1
+      ELSE
+        IUV = 0
+      ENDIF
+C
+        IF(NIFORM.EQ.1) THEN
+          ILENS = ISEC4(1)
+        ELSE
+          ILENS = INLEN
+        ENDIF
+
+C
+C     If dissemination style selection of grid points is required,
+C     adjust the sub-area limits to the dissemination grid.
+C
+      IF( LSTYLE ) THEN
+        IDISTEP = NINT(JPDISTP*PPMULT)
+        EW    = NOGRID(1) / PPMULT
+        NS    = NOGRID(2) / PPMULT
+        NORTH = REAL(NOAREA(1)) / PPMULT
+        WEST  = REAL(NOAREA(2)) / PPMULT
+        SOUTH = REAL(NOAREA(3)) / PPMULT
+        EAST  = REAL(NOAREA(4)) / PPMULT
+C
+        IERR = DSSAREA( EW, NS, NORTH, WEST, SOUTH, EAST)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: DSSAREA failed:',IERR)
+          INTFB = IERR
+          GOTO 900
+        ENDIF
+C
+        N_NOWE = NINT((EAST-WEST)/EW) + 1
+        N_NONS = NINT((NORTH-SOUTH)/NS) + 1
+C
+        NOAREA(1) = NINT(NORTH * PPMULT)
+        NOAREA(2) = NINT(WEST  * PPMULT)
+        NOAREA(3) = NINT(SOUTH * PPMULT)
+        NOAREA(4) = NINT(EAST  * PPMULT)
+      ENDIF
+C
+C     If Hirlam 12-point rotation involved, it has already been done
+C     (in INTFAPH), so just copy values to array for packing.
+C
+      IF( LUSEHIR.AND.LNOROTA ) THEN
+        ISIZE = ISEC4(1)
+        IF( ISIZE.EQ.0 ) ISIZE = OUTLROT
+        CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'INTFB: Get scratch space fail',JPQUIET)
+          INTFB = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+        DO LOOP = 1, ISIZE
+          ZNFLDO(LOOP) = ZNFELDI(LOOP)
+        ENDDO
+        GOTO 700
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Special cases!
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, ierr)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: znfeldi allocate fail',JPQUIET)
+          INTFB = IERR
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     Is the interpolation from SH to grid point
+C
+      IF( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT).OR.
+     X     (NIREPR.EQ.JPSTRSH))
+     X    .AND.
+     X    ((NOREPR.NE.JPSPHERE).AND.(NOREPR.NE.JPSPHROT)) ) THEN
+C
+        NTRUNC = NORESO
+C
+C       Check whether a truncation is required before interpolation
+C
+        IF( .NOT.LNORESO ) THEN
+C
+C         If user did not supply a truncation value, see whether or
+C         not the 'autoresol' flag is set. If not, use the input
+C         truncation.
+C
+          IF( LARESOL ) THEN
+            IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+              EW = FLOAT(NOGRID(1))/PPMULT
+              NS = FLOAT(NOGRID(2))/PPMULT
+            ELSE
+              EW = 90.0/FLOAT(NOGAUSS)
+              NS = EW
+            ENDIF
+            NTRUNC = AURESOL(EW,NS)
+            IF( NTRUNC.NE.NTROLD ) THEN
+              NTROLD = NTRUNC
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: Resolution automatically set to ', NTRUNC)
+            ENDIF
+          ELSE
+            NTRUNC = NIRESO
+          ENDIF
+C
+        ELSE
+C
+C
+        ENDIF
+C
+C       Check whether the output resolution is greater than the input
+C
+        IF( NTRUNC.GT.NIRESO ) THEN
+C
+C         Issue warning if the output resolution was user-supplied
+C
+          IF( .NOT.LARESOL ) THEN
+C
+C           Revert to the input truncation
+C
+            IF( NIRESO.NE.NTROLD2 ) THEN
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: spectral -> grid point interpolation',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: User supplied resolution = ',NTRUNC)
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: Input field resolution   = ',NIRESO)
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: User supplied resolution ignored',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: Input field resolution has been used',JPQUIET)
+              NTROLD2 = NIRESO
+            ENDIF
+            NTRUNC = NIRESO
+C
+          ELSE
+C
+C           Revert to the input truncation if auto RESOL
+C
+            NTRUNC = NIRESO
+            IF( NTRUNC.NE.NTROLD2 ) THEN
+              NTROLD2 = NTRUNC
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: Automatic resolution selectn too high:',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X          'INTFB: Resolution reset to input resolution: ',NTRUNC)
+            ENDIF
+          ENDIF
+C
+        ENDIF
+C
+C       Truncate if a smaller resolution has been requested
+C
+        IF( NTRUNC.LT.NIRESO ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTFB: Spectral coefficents truncated to ', NTRUNC)
+C
+          ISIZE =  (NTRUNC+1)*(NTRUNC+4)
+          CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_FATAL,
+     X        'INTFB: Get scratch space failed',JPQUIET)
+            INTFB = JPROUTINE + 2
+            GOTO 900
+          ENDIF
+C
+C         Generate spherical harmonics with output truncation
+C
+          CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NTRUNC )
+C
+C         Move new spherical harmonics to 'input' array
+C
+          DO LOOP = 1, ISIZE
+            ZNFELDI(LOOP) = ZNFLDO(LOOP)
+          ENDDO
+C
+          NIRESO = NTRUNC
+C
+        ENDIF
+C
+      ENDIF
+C
+C     Is it an ocean field interpolation?
+C
+c sinisa this is all done in intf
+c      IF( (ISEC1(24).EQ.1)       .AND.
+c     X    (ISEC1(37).EQ.4)       .AND.
+c     X    (NIFORM.EQ.1)          .AND.
+c     X    (NOFORM.EQ.1) ) THEN
+c        IERR = OCEANP(INGRIB,INLEN,OUTGRIB,OUTLEN)
+c        IF( IERR.NE.0 ) THEN
+c          CALL INTLOG(JP_ERROR,
+c     X      'INTFB: Ocean interpolation failed.',JPQUIET)
+c          INTFB = JPROUTINE + 2
+c        ELSE
+c          CALL INTLOG(JP_DEBUG,
+c     X      'INTFB: Ocean interpolation finished successfully.',JPQUIET)
+c        ENDIF
+c        GOTO 900
+c      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Interpolation spherical harmonics to spherical
+C                  harmonics
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X    ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) ) THEN
+C
+C       Get scratch space for interpolation
+C
+        CALL INTLOG(JP_DEBUG,'INTFB: SH -> SH, input is ',NIRESO)
+        CALL INTLOG(JP_DEBUG,'INTFB:          output is ',NORESO)
+        ISIZE = ISCRSZ()
+        IF( ISIZE.LE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Get scratch space failed.',ISIZE)
+          INTFB = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Get scratch space fail.',JPQUIET)
+          INTFB = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NORESO )
+C
+        GOTO 700
+C
+C     If not spectral -> spectral transformation, make sure the input
+C     and output area definitions have been setup.
+C
+      ELSE
+C
+C       Fixup area definition to correspond to grid definitions
+C
+        IF( .NOT.LSTYLE ) THEN
+          IERR = FIXAREA()
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFB: Fixup area definition failed.',JPQUIET)
+            INTFB = JPROUTINE + 9
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C       Setup geographical limits
+C
+        PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+        PWEST  = FLOAT( NOAREA(2) ) / PPMULT
+        PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+        PEAST  = FLOAT( NOAREA(4) ) / PPMULT
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 4.   Interpolation spherical harmonics to grid point.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( (NIREPR.EQ.JPSPHERE).OR.
+     X    (NIREPR.EQ.JPSTRSH) .OR.
+     X    (NIREPR.EQ.JPSPHROT) ) THEN
+#ifndef REAL_8
+C
+C       Check that double precision floats are in use if spectral
+C       resolution is greater than T213
+C
+        IF( NIRESO.GT.213 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFB: Double precision must be used',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTFB: for spectral resolution ',NIRESO)
+          INTFB = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+#endif
+        CALL INTLOG(JP_DEBUG,'INTFB: SH -> grid point',JPQUIET)
+C
+C       Get scratch space for interpolation
+C       If dissemination style, space has to be for a 0.5x0.5 grid
+C
+        IF( LSTYLE ) THEN
+c to be consistant with product generation 
+           IF(NIRESO.EQ.1279) THEN
+              DISSRES = 0.125
+           ELSEIF(NIRESO.EQ.799) THEN
+              DISSRES = 0.25
+           ELSEIF(NIRESO.EQ.639) THEN
+              DISSRES = 0.25
+           ELSEIF(NIRESO.EQ.511) THEN
+              DISSRES = 0.5
+           ELSEIF(NIRESO.EQ.399) THEN
+              DISSRES = 0.5
+           ELSEIF(NIRESO.EQ.319) THEN
+              DISSRES = 0.5
+           ELSEIF(NIRESO.EQ.255) THEN
+              DISSRES = 0.5
+           ELSEIF(NIRESO.EQ.155) THEN
+              DISSRES = 1.5
+           ELSE
+              DISSRES = NOGRID(1) / PPMULT
+            CALL INTLOG(JP_WARN,'INTFB: Diss resol set to: ',NOGRID(1))
+           ENDIF
+          IDISTEP = NINT(DISSRES*PPMULT)
+C
+          HOLDEW = NOGRID(1)
+          HOLDNS = NOGRID(2)
+          NOGRID(1) = IDISTEP
+          NOGRID(2) = IDISTEP
+        ENDIF
+        ISIZE = ISCRSZ()
+        IF( ISIZE.LE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Get scratch space failed.',ISIZE)
+          INTFB = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Get scratch space fail.',JPQUIET)
+          INTFB = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        IF( LSTYLE ) THEN
+          NOGRID(1) = HOLDEW
+          NOGRID(2) = HOLDNS
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.1  Interpolation spherical harmonics to grid point.
+C     -----------------------------------------------------------------|
+C
+  410 CONTINUE
+C
+        IF( (NOREPR.EQ.JPREGULAR) .OR. (NOREPR.EQ.JPREGROT) ) THEN
+          CALL INTLOG(JP_DEBUG,'INTFB: SH -> lat/long',JPQUIET)
+C
+C         -> latitude/longitude grid
+C         If dissemination style, generated grid is 0.5x0.5
+C
+          IF( LSTYLE ) THEN
+            HOLDEW = NOGRID(1)
+            HOLDNS = NOGRID(2)
+            NOGRID(1) = IDISTEP
+            NOGRID(2) = IDISTEP
+          ENDIF
+          PLONINC = FLOAT( NOGRID(1) ) / PPMULT
+          PLATINC = FLOAT( NOGRID(2) ) / PPMULT
+C
+C         Special handling for stretched fields
+C
+          IF( RISTRET.NE.0 ) THEN
+            CALL JSLLGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+C
+          ELSE
+            IF( LWIND ) THEN
+              CALL JALLWN(ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    PLATINC, PLONINC, ZNFLDO, IERR)
+            ELSE
+              CALL JALLGP(ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    PLATINC, PLONINC, ZNFLDO, IERR)
+            ENDIF
+          ENDIF
+C
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFB: Interpolation to lat/long field failed.',JPQUIET)
+            INTFB = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+          IF( LSTYLE ) THEN
+            NOGRID(1) = HOLDEW
+            NOGRID(2) = HOLDNS
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+C
+C         -> regular gaussian grid
+C
+          CALL INTLOG(JP_DEBUG,'INTFB: SH -> regular gaussian.',JPQUIET)
+C
+C         Is it a user_regular_gaussian (or standard regular gaussian)..
+C
+          IF( LOGIVEL ) THEN
+            HTYPE = 'U'
+          ELSE
+            HTYPE = 'F'
+          ENDIF
+C
+C         Special handling for stretched fields
+C
+          IF( RISTRET.NE.0 ) THEN
+            CALL JSGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   NOGAUSS, HTYPE, NOLPTS, ZNFLDO, IUV, IERR)
+          ELSE
+            CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   NOGAUSS, HTYPE, NOLPTS, ZNFLDO, IUV, IERR)
+C
+          ENDIF
+          IF( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFB: Interpolation to gaussian field failed.',JPQUIET)
+            INTFB = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF( NOREPR.EQ.JPQUASI ) THEN
+C
+C         -> reduced gaussian grid
+C
+          CALL INTLOG(JP_DEBUG,'INTFB: SH -> quasi gaussian.',JPQUIET)
+C
+C         Is it a user_reduced_gaussian (or standard reduced gaussian)?
+C
+          IF( LOGIVEP ) THEN
+            HTYPE = 'U'
+          ELSE
+            HTYPE = 'R'
+          ENDIF
+C
+C         Special handling for stretched fields
+C
+          IF( RISTRET.NE.0 ) THEN
+            CALL JSGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   NOGAUSS, HTYPE, NOLPTS, ZNFLDO, IUV, IERR)
+          ELSE
+            CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   NOGAUSS, HTYPE, NOLPTS, ZNFLDO, IUV, IERR)
+          ENDIF
+          IF( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFB: Interpolation to quasi GG field failed.',JPQUIET)
+            INTFB = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C       Dropthrough => unrecognized output field type
+C
+        IERR  = JPROUTINE + 1
+        CALL INTLOG(JP_ERROR,
+     X    'INTFB: Unrecognized output field type.',NOREPR)
+        INTFB = IERR
+        GOTO 900
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 5.   Interpolate Gaussian grid to grid point.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C       If Hirlam 12-point rotation involved, it has already been done
+C       (in INTFAPH), so just copy values to array for packing.
+C
+        IF( LUSEHIR.AND.LNOROTA ) THEN
+C
+          ISIZE = ISCRSZ()
+          IF( ISIZE.LE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFB: Get scratch space fail',ISIZE)
+            INTFB = JPROUTINE + 5
+            GOTO 900
+          ENDIF
+          CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_FATAL,
+     X        'INTFB: Get scratch space failed',JPQUIET)
+            INTFB = JPROUTINE + 5
+            GOTO 900
+          ENDIF
+C
+          DO LOOP = 1, ISIZE
+            ZNFLDO(LOOP) = ZNFELDI(LOOP)
+          ENDDO
+          GOTO 700
+        ENDIF
+C
+C     Handle ISLSCP processing
+C
+      IF( LNIISCL ) THEN
+        CALL INTLOG(JP_DEBUG,'INTFB: Using ISLSCP processing',JPQUIET)
+        IERR = INTISL(OLDLSM, INGRIB, NEWLSM, OUTGRIB)
+        IF( IERR.LT.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: ISLSCP processing fail',NIGAUSS)
+          INTFB = JPROUTINE + 10
+          GOTO 900
+        ENDIF
+        OUTLEN = (IERR+JPBYTES-1)/JPBYTES
+        GOTO 900
+      ENDIF
+C
+C     Reduced gaussian to reduced gaussian
+C
+      LIQUASI = (NIREPR.EQ.JPQUASI)
+C
+      IF( (LIQUASI.AND.(NOREPR.EQ.JPQUASI)) ) THEN
+        IF( LDOUBLE ) THEN
+          CALL INTLOG(JP_DEBUG,'INTFB: RG to RG with intermediate'
+     X    ,JPQUIET)
+            IF(NIFORM.EQ.1)  THEN
+               IERR = KRG2RGD(INGRIB,OUTGRIB,NOMEGA,NOGAUSS)
+               IF(IERR.LT.0) THEN
+                 CALL INTLOG(JP_ERROR,
+     X             'INTFB: KRG2RGD processing failed',JPQUIET)
+                 INTFB = JPROUTINE + 10
+               ELSE
+                 OUTLEN = (IERR+JPBYTES-1)/JPBYTES
+               ENDIF
+             ELSE
+               CALL INTLOG(JP_DEBUG,
+     X         'INTF: RG to RG intermediate unpacked',JPQUIET)
+              IERR = KRG2RGZ(INGRIB,RWORK,NIGAUSS,NOMEGA)
+              IF(IERR.LT.0) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'INTFB: KRG2RGZ processing failed',JPQUIET)
+                INTFB = JPROUTINE + 10
+                GOTO 900
+              ELSE
+                OUTLEN = IERR
+              ENDIF
+C             Second step
+              LDOUBLE = .FALSE.
+              IERR = KRG2RGZ(RWORK,FLDOUT,NOMEGA,NOGAUSS)
+              LDOUBLE = .TRUE.
+              IF(IERR.LT.0) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'INTFB: KRG2RGZ processing failed',JPQUIET)
+                INTFB = JPROUTINE + 10
+                GOTO 900
+              ELSE
+                OUTLEN = IERR
+              ENDIF
+
+             ENDIF
+        ELSE
+            IF(NIFORM.EQ.1)  THEN
+              CALL INTLOG(JP_DEBUG,'INTFB: RG to RG packed',JPQUIET)
+              IERR = KRG2RG(INGRIB,OUTGRIB,NOGAUSS)
+              IF(IERR.LT.0) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'INTFB: KRG2RG processing failed',JPQUIET)
+                INTFB = JPROUTINE + 10
+              ELSE
+                OUTLEN = (IERR+JPBYTES-1)/JPBYTES
+              ENDIF
+            ELSE
+              CALL INTLOG(JP_DEBUG,'INTFB: RG to RG unpacked',JPQUIET)
+              IERR = KRG2RGU(INGRIB,FLDOUT,NIGAUSS,NOGAUSS)
+              IF(IERR.LT.0) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'INTFB: KRG2RGU processing failed',JPQUIET)
+                INTFB = JPROUTINE + 10
+              ELSE
+                OUTLEN = IERR
+              ENDIF
+            ENDIF
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Setup flags for input and output fields
+C
+      CALL INTLOG(JP_DEBUG,'INTFB: grid point -> grid point.',JPQUIET)
+      KERR = 1
+      IF( NIREPR .EQ. JPQUASI ) THEN
+        CALL INTLOG(JP_DEBUG,'INTFB: quasi input ',NIGAUSS)
+        IERR = IRSIZE( NIGAUSS, NIAREA, MILLEN, NIWE, NINS, KILN,
+     X                 KITOTAL, RIGAUSS, OIWEGLOBE, OINPOLE, OISPOLE,
+     X                 KPR, KERR)
+      ELSE IF( NIREPR.EQ.JPGAUSSIAN ) THEN
+        CALL INTLOG(JP_DEBUG,'INTFB: regular gauss input ',NIGAUSS)
+        IERR = IGSIZE( NIGAUSS, NIAREA, NIWE, NINS, KILN, RIGAUSS,
+     X                    OIWEGLOBE, OINPOLE, OISPOLE, KPR, KERR)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'INTFB: lat/long input lat ',NIGRID(1))
+        CALL INTLOG(JP_DEBUG,'INTFB: lat/long input long ',NIGRID(2))
+        IERR = IGLSIZE( NIGRID, NIAREA, NIWE, NINS, KILN, OIWEGLOBE,
+     X                  OINPOLE, OISPOLE, KPR, KERR)
+      ENDIF
+C
+      NONS = 0
+      NOWE = 0
+      IF( (NOREPR.EQ.JPQUASI).OR.(NOREPR.EQ.JPQGGROT) ) THEN
+        CALL INTLOG(JP_DEBUG,'INTFB: quasi output ',NOGAUSS)
+        IERR = IRSIZE( NOGAUSS, NOAREA, NOLPTS, NOWE, NONS, KOLN,
+     X                 KOTOTAL, ROGAUSS, OOWEGLOBE, OONPOLE, OOSPOLE,
+     X                 KPR, KERR)
+      ELSE IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+        CALL INTLOG(JP_DEBUG,'INTFB: regular gauss output ',NOGAUSS)
+        IERR = IGSIZE( NOGAUSS, NOAREA, NOWE, NONS, KOLN, ROGAUSS,
+     X                    OOWEGLOBE, OONPOLE, OOSPOLE, KPR, KERR)
+      ELSE
+        CALL INTLOG(JP_DEBUG,'INTFB: lat/long output lat ',NOGRID(1))
+        CALL INTLOG(JP_DEBUG,'INTFB: lat/long output long ',NOGRID(2))
+C
+C       If dissemination style, space has to be for a 0.5x0.5 grid
+C
+        IF( LSTYLE ) THEN
+          IF( NIREPR.EQ.JPQUASI ) THEN
+             IF(NIGAUSS.EQ.640) THEN
+                DISSRES = 0.125
+             ELSEIF(NIGAUSS.EQ.400) THEN
+                DISSRES = 0.25
+             ELSEIF(NIGAUSS.EQ.320) THEN
+                DISSRES = 0.25
+             ELSEIF(NIGAUSS.EQ.200) THEN
+                DISSRES = 0.5
+             ELSEIF(NIGAUSS.EQ.160) THEN
+                DISSRES = 0.5
+             ELSEIF(NIGAUSS.EQ.128) THEN
+                DISSRES = 0.5
+             ELSEIF(NIGAUSS.EQ.80) THEN
+                DISSRES = 1.5
+             ELSE
+                DISSRES = JPDISTP
+               CALL INTLOG(JP_WARN,'INTFB: Diss resol set to: ',
+     X          NINT(DISSRES*PPMULT))
+             ENDIF
+            IDISTEP = NINT(DISSRES*PPMULT)
+          ENDIF
+          HOLDEW = NOGRID(1)
+          HOLDNS = NOGRID(2)
+          If (.Not.LNOROTA) Then ! D.Jokic; Mar-2005
+          NOGRID(1) = IDISTEP
+          NOGRID(2) = IDISTEP
+          End if ! D.Jokic; Mar-2005
+        ENDIF
+        IERR = IGLSIZE( NOGRID, NOAREA, NOWE, NONS, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR, KERR)
+      ENDIF
+C
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFB: Setup of gaussian field flags failed.',IERR)
+        INTFB = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C     Section 5.1  Interpolate reduced Gaussian grid to grid point.
+C     -----------------------------------------------------------------|
+C
+  510 CONTINUE
+C
+      ISIZE = ISCRSZ()
+      IF( ISIZE.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFB: Get scratch space failed.',ISIZE)
+        INTFB = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFB: Get scratch space failed.',JPQUIET)
+        INTFB = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IF( NIREPR.EQ.JPQUASI ) THEN
+C
+C       If Hirlam 12-point rotation involved, it has already been done
+C       (in INTFAPH), so just copy values to array for packing.
+C
+       IF( LUSEHIR.AND.LNOROTA ) THEN
+         DO LOOP = 1, ISIZE
+           ZNFLDO(LOOP) = ZNFELDI(LOOP)
+         ENDDO
+       ELSE
+C        Sinisa - if double interpolation involved
+        IF( LDOUBLE ) THEN
+         IF( NOMEGA.EQ.NIGAUSS ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X   'INTFB: Input and Intermed. Gaussian number are same',JPQUIET)
+          CALL INTLOG(JP_DEBUG,
+     X    'INTFB: Double interpolation is not performed',JPQUIET)
+         ELSE
+	        IF(NIFORM.EQ.1)  THEN
+             CALL INTLOG(JP_DEBUG,
+     X      'INTFB: RG2RG to unpacked - double interpolation',JPQUIET)
+               IERR = KRG2RGY(INGRIB,RWORK,NOMEGA)
+               IF(IERR.LT.0) THEN
+                   CALL INTLOG(JP_ERROR,
+     X               'INTFB: KRG2RGY processing failed',JPQUIET)
+                   INTFB = JPROUTINE + 10
+                   GOTO 900
+               ELSE
+                   LENMED = IERR
+               ENDIF
+            ELSE
+               CALL INTLOG(JP_DEBUG,
+     X          'INTFB: RG to RG intermediate unpacked',JPQUIET)
+               IERR = KRG2RGZ(INGRIB,RWORK,NIGAUSS,NOMEGA)
+               IF(IERR.LT.0) THEN
+                 CALL INTLOG(JP_ERROR,
+     X             'INTFB: KRG2RGZ processing failed',JPQUIET)
+                 INTFB = JPROUTINE + 10
+                 GOTO 900
+               ELSE
+                 LENMED = IERR
+               ENDIF
+            ENDIF
+ 
+               DO LOOP = 1, LENMED
+                 ZNFELDI(LOOP) = RWORK(LOOP)
+               ENDDO
+            IERR = FIXAREA()
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'INTFB: Fixup area definition failed. DI',JPQUIET)
+              INTFB = JPROUTINE + 9
+              GOTO 900
+            ENDIF
+            CALL INTLOG(JP_DEBUG,
+     X           'INTFB: quasi input double interolation ',NIGAUSS)
+             CALL JGETGG( NIGAUSS, 'R', RIGAUSS, MILLEN, IERR)
+             IF ( IERR .NE. 0 ) THEN
+               CALL INTLOG(JP_ERROR,
+     X           'INTFB: JGETGG fail - double interpolation ',JPQUIET)
+                INTFB = JPROUTINE + 10
+               GOTO 900
+             ENDIF
+
+            IERR = IRSIZE( NIGAUSS, NIAREA, MILLEN, NIWE, NINS, KILN,
+     X                 KITOTAL, RIGAUSS, OIWEGLOBE, OINPOLE, OISPOLE,
+     X                 KPR, KERR)
+         ENDIF
+       ENDIF
+C
+C         If reduced gaussian to regular gaussian of same resolution,
+C         turn off the land-sea mask processing temporarily
+C
+          LSAMERS = (NIGAUSS.EQ.NOGAUSS)
+          LOLDLSM = LSM
+          LOLDLSP = LSMPAR
+          IF( (LIQUASI.AND.(NOREPR.EQ.JPGAUSSIAN).AND.LSAMERS) ) THEN
+            CALL INTLOG(JP_DEBUG,
+     X      'INTFB: turn off any LSM processing temporarily ', JPQUIET)
+            LSM    = .FALSE.
+            LSMPAR = .FALSE.
+          ENDIF
+          IERR = IARCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                    OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                    OONPOLE, OOSPOLE, KPR ,KERR)
+          LSM    = LOLDLSM
+          LSMPAR = LOLDLSP
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFB: Interpolation from quasi GG field failed',JPQUIET)
+            INTFB = JPROUTINE + 7
+            GOTO 900
+          ENDIF
+C
+          IF( LSTYLE ) THEN
+            NOGRID(1) = HOLDEW
+            NOGRID(2) = HOLDNS
+          ENDIF
+        ENDIF
+C
+        GOTO 700
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Interpolate regular grid point to grid point.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+      IERR = IAGCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                OONPOLE, OOSPOLE, KPR, KERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFB: Interpolation from regular field failed.',JPQUIET)
+        INTFB = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+C
+      IF( LSTYLE ) THEN
+        NOGRID(1) = HOLDEW
+        NOGRID(2) = HOLDNS
+      ENDIF
+
+
+C     -----------------------------------------------------------------|
+C*    Section 7.   Pack field into GRIB if necessary.
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+C     If dissemination 'style' selection has been chosen, select points.
+C
+      IF( LSTYLE ) THEN
+        CALL DDSTYLE(ZNFLDO,IDISTEP,IDISTEP,NOGRID(1),NOGRID(2),IERR)
+        IF( IERR.NE.0 ) THEN
+         CALL INTLOG(JP_ERROR,
+     X   'INTFB: Wrong requested grid increment for dissemination style'
+     X    ,JPQUIET)
+          INTFB = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+        NOWE = N_NOWE
+        NONS = N_NONS
+cs to check if it ruin gribex packing
+        ISIZE = NOWE*NONS
+      ENDIF
+C
+C     If a 'bitmap' has been specified, build the bitmap
+C
+
+        IF( LFRAME.OR.LBITMP.OR.LIMISSV ) THEN
+          ISEC1(5) = 192
+          ISEC3(2) = NINT(RMISSGV)
+          ZSEC3(2) = RMISSGV
+        ENDIF
+
+      IF( LBITMP ) THEN
+        IERR = MKBITMP(NOWE,NONS,ZNFLDO,RMISSGV)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Problem applying bitmap',JPQUIET)
+          INTFB = IERR
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     If a 'frame' has been specified, build the frame
+C
+      IF( LFRAME ) CALL MKFRAME(NOWE,NONS,ZNFLDO,RMISSGV,NOFRAME)
+
+C
+C     If the output is a GRIB product
+C
+      IF( NOFORM.EQ.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'INTFB: pack field for output',JPQUIET)
+C
+C       Setup GRIB sections for the output product
+C
+        IERR = IGSETUP( ISEC1, ISEC2, ISEC4 )
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Setup GRIB section fail',JPQUIET)
+          INTFB = IERR
+          GOTO 900
+        ENDIF
+C
+C
+C       If there are missing values, set all values to zero
+C
+        IF( NOMISS.NE.0 ) THEN
+          DO LOOP = 1, ISEC2(2)*ISEC2(3)
+            ZNFLDO(LOOP) = 0.0
+          ENDDO
+        ENDIF
+C
+C       Make adjustments for 'dissemination style'
+C
+        IF( LNOSTYLE.AND.(NOSTYLE.EQ.JPSDISM) ) THEN
+C
+C         Turn off use of ECMWF local definition
+C
+Cjdc      ISEC1(24) = 0
+C
+C         For regular lat/long or gaussian grids, calculate the grid
+C         i-direction increment using truncation
+C
+          IF( (ISEC2(1).NE.50).AND.(ISEC2(1).NE.60).AND.
+     X        (ISEC2(1).NE.70).AND.(ISEC2(1).NE.80) ) THEN
+C
+            IF( (ISEC2(1).NE.5).AND.(ISEC2(17).EQ.0) ) THEN
+              IF( NOSTYLE.NE.JPSDISM)
+     X          ISEC2(9) = (ISEC2(8) - ISEC2(5)) / (ISEC2(2) - 1)
+            ENDIF
+C
+          ENDIF
+C
+        ENDIF
+C
+C       Code data into GRIB
+C
+        ILENF = ISIZE
+        IERR = 1
+C
+C       If grid-point output, setup for 2nd order packing if requested.
+C
+        IF( (NOREPR.NE.JPSPHERE) .AND. (NOREPR.NE.JPSPHROT) ) THEN
+          HFUNC = 'C'
+          IF( NOHFUNC.EQ.'K' ) THEN
+            HFUNC = 'K'
+            ISEC4(4)  = 64
+            ISEC4(6)  = 16
+            ISEC4(9)  = 32
+            ISEC4(10) = 16
+            ISEC4(12) = 8
+            ISEC4(13) = 4
+            ISEC4(14) = 0
+            ISEC4(15) = -1
+C
+C
+            IF( NOREPR.EQ.JPQUASI ) THEN
+C
+C             Complex packing does not support sub-areas of reduced
+C             gaussian grids. If output is reduced gaussian, check if
+C             it is global to within a tolerance of 0.1 degrees.
+C
+              LGLOBAL = .TRUE.
+              INORTH    = NINT( ROGAUSS(1) * PPMULT )
+              IF( IABS(NOAREA(1)-INORTH).GT.1000) LGLOBAL = .FALSE.
+              ISOUTH    = - INORTH
+              IF( IABS(NOAREA(3)-ISOUTH).GT.1000) LGLOBAL = .FALSE.
+              IF( NOAREA(2).NE.0 ) LGLOBAL = .FALSE.
+              IEAST = JP360 - (JP90/NOGAUSS)
+              IF( IABS(NOAREA(4)-IEAST).GT.1000) LGLOBAL = .FALSE.
+C
+C             Use simple packing if not global.
+C
+              IF( .NOT. LGLOBAL ) THEN
+                HFUNC = 'C'
+                ISEC4(4)  = 0
+                ISEC4(6)  = 0
+              ENDIF
+            ENDIF
+C
+          ELSE IF( NOHFUNC.EQ.'S' ) THEN
+            ISEC4(4)  = 0
+            ISEC4(6)  = 0
+          ENDIF
+C
+        ELSE
+          HFUNC = 'C'
+          IF( NOHFUNC.EQ.'C' ) THEN
+            ISEC2(6) = 2
+            ISEC4(4) = 64
+          ELSE IF( NOHFUNC.EQ.'S' ) THEN
+            ISEC2(6) = 1
+            ISEC4(4) = 0
+          ENDIF
+        ENDIF
+C
+        IF( LIMISSV ) THEN
+          ISEC1(5) = 192
+          ISEC3(2) = NINT(RMISSGV)
+          ZSEC3(2) = RMISSGV
+        ENDIF
+C
+C       For interpolated regular lat/long field, flip latitudes if
+C       they run from south to north
+C       (handles special case , eg KWBC SST fields)
+C
+        IF( LNOGRID.AND.
+     X      (NOREPR.EQ.JPREGULAR).AND.
+     X      (NOAREA(1).LT.NOAREA(3)) ) THEN
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'INTFB: Flip latitudes to run North to South', JPQUIET)
+          DO LOOP = 1, ISEC2(3)/2
+            NEXT  = 1 + (LOOP - 1)*ISEC2(2)
+            ISWAP = (ISEC2(3) - LOOP)*ISEC2(2) + 1
+            DO LOOPI = 1, ISEC2(2)
+              RTEMP = ZNFLDO(ISWAP)
+              ZNFLDO(ISWAP) = ZNFLDO(NEXT)
+              ZNFLDO(NEXT) = RTEMP
+              NEXT  = NEXT + 1
+              ISWAP = ISWAP + 1
+            ENDDO
+          ENDDO
+        ENDIF
+C
+        CALL GRIBEX( ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X               ZNFLDO,ILENF,OUTGRIB,OUTLEN,IWORD,HFUNC,IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: GRIBEX encoding failed.',IERR)
+          INTFB = JPROUTINE + 5
+          GOTO 900
+        ENDIF
+        OUTLEN = IWORD
+C
+C       Switch off use of missing value
+C
+        LIMISSV = .FALSE.
+C
+      ELSE
+C
+C       Otherwise, move unpacked values to user array
+C
+        DO LOOP = 1, ISIZE
+          FLDOUT( LOOP ) = ZNFLDO( LOOP )
+        ENDDO
+C
+C       and return the number of values, the unpacked array length
+C
+        OUTLEN = ISIZE
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intfbp.F b/interpolation/intfbp.F
new file mode 100755
index 0000000..edfbe82
--- /dev/null
+++ b/interpolation/intfbp.F
@@ -0,0 +1,467 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFBP( INGRIB,INLEN,OUTGRIB,OUTLEN)
+C
+C---->
+C**** INTFBP
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFBP( INGRIB,INLEN,OUTGRIB,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routines; then repack if GRIB output.
+C
+C     Currently, subareas are not supported for reduced gaussian fields.
+C     (Works OK; but need to setup values in GRIB product for number of
+C      points in each latitude row)
+C
+C
+C     Externals
+C     ---------
+C
+C     IARCNTL - Control interp. quasi reg.Gauss -> Gaussian or lat/long
+C     IAGCNTL - Control interpolation reg.Gaussian or lat/long fields.
+C     JSH2SH  - Changes resolution of a field of spectral coefficients.
+C     JALLGP  - Converts spectral input fields to lat/long grid fields.
+C     JALLWN  - Converts spectral input wind fields to lat/long grids.
+C     JAGGGP  - Converts spectral input fields to a gaussian grid field.
+C     IBASINI - Ensure basic interpolation setup is done.
+C     GRIBEX  - Decode/encode GRIB product.
+C     GRSVCK  - Turn off GRIB checking
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     IGSETUP - Setup GRIB sections for the output product.
+C     JMEMHAN - Handles memory allocation.
+C     IGLSIZE - Evaluate array sizes for reg. lat/long and area.
+C     IGSIZE  - Evaluate array sizes for a regular Gaussian.
+C     IRSIZE  - Evaluate array sizes for a quasi reg Gaussian.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     ISCRSZ  - Calculate number of values in generated field.
+C     INTLOG  - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26500 )
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+      INTEGER IWORD, IERR, ILENF, ISIZE, IUV
+      REAL PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      LOGICAL OIWEGLOBE, OINPOLE, OISPOLE
+      LOGICAL OOWEGLOBE, OONPOLE, OOSPOLE
+      INTEGER KILN, KITOTAL, KOLN, KOTOTAL, KPR, KERR
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDO
+#endif
+      REAL ZNFLDO
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+C
+C     Externals
+C
+      INTEGER IGLSIZE, IGSIZE, IRSIZE, IARCNTL, IAGCNTL
+      INTEGER IGSETUP, FIXAREA, ISCRSZ
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      INTFBP = 0
+      IERR = 0
+      KPR = 0
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'INTFBP: ZNFELDI allocation fail',JPQUIET)
+          INTFBP = IERR
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Interpolation spherical harmonics to spherical
+C                  harmonics
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF ( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X     ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)) ) THEN
+C
+C       Get scratch space for interpolation
+        ISIZE = ISCRSZ()
+        IF ( ISIZE .LE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBP: Get scratch space failed',ISIZE)
+          INTFBP = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBP: Get scratch space fail',JPQUIET)
+          INTFBP = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NORESO )
+C
+        GOTO 700
+C
+C     If not spectral -> spectral transformation, make sure the input
+C     and output area definitions have been setup.
+C
+      ELSE
+C
+C       Fixup area definition to correspond to grid definitions
+        IERR = FIXAREA()
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFBP: Fixup area definition failed.',JPQUIET)
+          INTFBP = JPROUTINE + 9
+          GOTO 900
+        ENDIF
+C
+C       Setup geographical limits
+        PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+        PWEST  = FLOAT( NOAREA(2) ) / PPMULT
+        PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+        PEAST  = FLOAT( NOAREA(4) ) / PPMULT
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 4.   Interpolation spherical harmonics to grid point.
+C ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF ( (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT) ) THEN
+C
+C       Get scratch space for interpolation
+C
+        ISIZE = ISCRSZ()
+        IF ( ISIZE .LE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBP: Get scratch space failed',ISIZE)
+          INTFBP = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBP: Get scratch space fail',JPQUIET)
+          INTFBP = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+C       Setup wind flag
+C
+        IF( .NOT.LWINDSET ) THEN
+          LWIND = ( ( NOTABLE.EQ.128 ).AND.
+     X            ((NOPARAM.EQ.131).OR.(NOPARAM.EQ.132)) )
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'INTFBP: Wind flag = ', LWIND)
+        IF ( LWIND ) THEN
+          IUV = 1
+        ELSE
+          IUV = 0
+        ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 4.1  Interpolation spherical harmonics to grid point.
+C ------------------------------------------------------------------
+C
+  410 CONTINUE
+C
+        IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C         -> latitude/longitude grid
+C
+          PLONINC = FLOAT( NOGRID(1) ) / PPMULT
+          PLATINC = FLOAT( NOGRID(2) ) / PPMULT
+          IF ( LWIND ) THEN
+            CALL JALLWN( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+          ELSE
+            CALL JALLGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+          ENDIF
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFBP: Interpolation of gaussian field failed.',JPQUIET)
+            INTFBP = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF ( NOREPR .EQ. JPGAUSSIAN) THEN
+C
+C         -> regular gaussian grid
+C
+          CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                 NOGAUSS, 'U', NOLPTS, ZNFLDO, IUV, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFBP: Interpolation of gaussian field failed.',JPQUIET)
+            INTFBP = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF ( NOREPR .EQ. JPQUASI) THEN
+C
+C         -> reduced gaussian grid
+          CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                 NOGAUSS, 'U', NOLPTS, ZNFLDO, IUV, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFBP: Interpolation of gaussian field failed.',JPQUIET)
+            INTFBP = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C       Dropthrough => unrecognized output field type
+        IERR   = JPROUTINE + 1
+        CALL INTLOG(JP_ERROR,
+     X    'INTFBP: Unrecognized output field type.',NOREPR)
+        INTFBP = IERR
+        GOTO 900
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 5.   Interpolate Gaussian grid to grid point.
+C ------------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C     Setup flags for input and output fields
+      KERR = 1
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IRSIZE( NIGAUSS, NIAREA, MILLEN, NIWE, NINS, KILN,
+     X                 KITOTAL, RIGAUSS, OIWEGLOBE, OINPOLE, OISPOLE,
+     X                 KPR, KERR)
+      ELSE IF ( NIREPR .EQ. JPGAUSSIAN ) THEN
+          IERR = IGSIZE( NIGAUSS, NIAREA, NIWE, NINS, KILN, RIGAUSS,
+     X                    OIWEGLOBE, OINPOLE, OISPOLE, KPR, KERR)
+      ELSE
+        IERR = IGLSIZE( NIGRID, NIAREA, NIWE, NINS, KILN, OIWEGLOBE,
+     X                  OINPOLE, OISPOLE, KPR, KERR)
+      ENDIF
+C
+      NONS = 0
+      NOWE = 0
+      IF (NOREPR .EQ. JPQUASI) THEN
+        IERR = IRSIZE( NOGAUSS, NOAREA, NOLPTS, NOWE, NONS, KOLN,
+     X                 KOTOTAL, ROGAUSS, OOWEGLOBE, OONPOLE, OOSPOLE,
+     X                 KPR, KERR)
+      ELSE IF ( NOREPR .EQ. JPGAUSSIAN ) THEN
+          IERR = IGSIZE( NOGAUSS, NOAREA, NOWE, NONS, KOLN, ROGAUSS,
+     X                    OOWEGLOBE, OONPOLE, OOSPOLE, KPR, KERR)
+      ELSE
+        IERR = IGLSIZE( NOGRID, NOAREA, NOWE, NONS, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR, KERR)
+      ENDIF
+C
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFBP: Setup of gaussian field flags failed.',IERR)
+        INTFBP = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C     Section 5.1  Interpolate reduced Gaussian grid to grid point.
+C ------------------------------------------------------------------
+C
+  510 CONTINUE
+C
+C
+      ISIZE = ISCRSZ()
+      IF ( ISIZE .LE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFBP: Get scratch space failed.',ISIZE)
+        INTFBP = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      CALL JMEMHAN( 3, IZNFLDO, ISIZE, 1, IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFBP: Get scratch space fail.',JPQUIET)
+        INTFBP = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IARCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                  OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR ,KERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFBP: Interpolation of gaussian field failed.',IERR)
+          INTFBP = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        GOTO 700
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 6.   Interpolate regular grid point to grid point.
+C ------------------------------------------------------------------
+C
+  600 CONTINUE
+C
+      IERR = IAGCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                OONPOLE, OOSPOLE, KPR, KERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFBP: Interpolation of gaussian field failed.',IERR)
+        INTFBP = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 7.   Pack field into GRIB if necessary.
+C ------------------------------------------------------------------
+C
+  700 CONTINUE
+C
+C     Setup GRIB sections for the output product
+      IERR = IGSETUP( ISEC1, ISEC2, ISEC4 )
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFBP: Setup GRIB sections failed.',IERR)
+        INTFBP = IERR
+        GOTO 900
+      ENDIF
+C
+C     Code data into GRIB
+C
+      ILENF = ISIZE
+      IERR = 1
+C
+C     If grid-point output, setup for 2nd order packing if requested.
+C
+      IF( (NOREPR.NE.JPSPHERE) .AND. (NOREPR.NE.JPSPHROT) ) THEN
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'K' ) THEN
+          HFUNC = 'K'
+          ISEC4(4)  = 64
+          ISEC4(6)  = 16
+          ISEC4(9)  = 32
+          ISEC4(10) = 16
+          ISEC4(12) = 8
+          ISEC4(13) = 4
+          ISEC4(14) = 0
+          ISEC4(15) = -1
+        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+          ISEC4(4)  = 0
+          ISEC4(6)  = 0
+        ENDIF
+      ELSE
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'C' ) THEN
+          ISEC2(6) = 2
+          ISEC4(4) = 64
+        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+          ISEC2(6) = 1
+          ISEC4(4) = 0
+        ENDIF
+      ENDIF
+C
+      IF( LIMISSV ) THEN
+        ISEC1(5) = 192
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+      ENDIF
+      CALL GRIBEX( ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X             ZNFLDO,ILENF,OUTGRIB,OUTLEN,IWORD,HFUNC,IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFBP: GRIBEX encoding failed.',IERR)
+        INTFBP = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      OUTLEN = IWORD
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intfbu.F b/interpolation/intfbu.F
new file mode 100755
index 0000000..b5932d6
--- /dev/null
+++ b/interpolation/intfbu.F
@@ -0,0 +1,478 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFBU( FLDIN,INLEN,FLDOUT,OUTLEN)
+C
+C---->
+C**** INTFBU
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input field...
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFBU( FLDIN,INLEN,FLDOUT,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     FLDIN  - Input field (unpacked).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     FLDOUT  - Output field (unpacked).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routines; then repack if GRIB output.
+C
+C     Currently, subareas are not supported for reduced gaussian fields.
+C     (Works OK; but need to setup values in GRIB product for number of
+C      points in each latitude row)
+C
+C
+C     Externals
+C     ---------
+C
+C     IARCNTL - Control interp. quasi reg.Gauss -> Gaussian or lat/long
+C     IAGCNTL - Control interpolation reg.Gaussian or lat/long fields.
+C     JSH2SH  - Changes resolution of a field of spectral coefficients.
+C     JALLGP  - Converts spectral input fields to lat/long grid fields.
+C     JALLWN  - Converts spectral input wind fields to lat/long grids.
+C     JAGGGP  - Converts spectral input fields to a gaussian grid field.
+C     IBASINI - Ensure basic interpolation setup is done.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     JMEMHAN - Handles memory allocation.
+C     IGLSIZE - Evaluate array sizes for reg. lat/long and area.
+C     IGSIZE  - Evaluate array sizes for a regular Gaussian.
+C     IRSIZE  - Evaluate array sizes for a quasi reg Gaussian.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     ISCRSZ  - Calculate number of values in generated field.
+C     INTLOG  - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Aug 1994
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INLEN,OUTLEN
+      REAL FLDIN(*),FLDOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      INTEGER JPALLOC, JPSCR16
+      PARAMETER (JPROUTINE = 26600 )
+      PARAMETER (JPALLOC = 1 )
+      PARAMETER (JPSCR16 = 16 )
+C
+C     Local variables
+C
+      INTEGER IERR, ISIZE, IUV
+      REAL PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      REAL EW, NS, NORTH, SOUTH, WEST, EAST
+      REAL HNORTH, HSOUTH, HWEST, HEAST
+      LOGICAL OIWEGLOBE, OINPOLE, OISPOLE
+      LOGICAL OOWEGLOBE, OONPOLE, OOSPOLE
+      LOGICAL LSTYLE
+      INTEGER KILN, KITOTAL, KOLN, KOTOTAL, KPR, KERR
+      INTEGER LOOP
+      INTEGER HOLDEW, HOLDNS, N_NOWE, N_NONS, IDISTEP
+      REAL*8 DISSRES
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDO
+#endif
+      REAL ZNFLDO
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+C
+C     Externals
+      INTEGER IGLSIZE, IGSIZE, IRSIZE, IARCNTL, IAGCNTL
+      INTEGER FIXAREA, ISCRSZ
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      INTFBU = 0
+      IERR = 0
+      KPR = 0
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'INTFBU: znfeldi allocate fail',JPQUIET)
+          INTFBU = IERR
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Interpolation spherical harmonics to spherical
+C                  harmonics
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF ( ((NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)) .AND.
+     X     ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)) ) THEN
+
+C       Get scratch space for interpolation
+C
+        ISIZE = ISCRSZ()
+        IF ( ISIZE .LE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBU: Get scratch space failed',ISIZE)
+          INTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        CALL JMEMHAN( JPSCR16, IZNFLDO, ISIZE, JPALLOC, IERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBU: Get scratch space fail',JPQUIET)
+          INTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL SH2SH( ZNFELDI, NIRESO, ZNFLDO, NORESO )
+C
+        GOTO 700
+C
+C     If not spectral -> spectral transformation, make sure the input
+C     and output area definitions have been setup.
+C
+      ELSE
+       LSTYLE = LNOSTYLE.AND.
+     X         (NOSTYLE.EQ.JPSDISM).AND.
+     X         (NOREPR.EQ.JPREGULAR)
+
+        IF( LSTYLE ) THEN
+c to be consistant with product generation
+              IF(NIRESO.EQ.1279) THEN
+                 DISSRES = 0.125
+              ELSEIF(NIRESO.EQ.799) THEN
+                 DISSRES = 0.25
+              ELSEIF(NIRESO.EQ.639) THEN
+                 DISSRES = 0.25
+              ELSEIF(NIRESO.EQ.399) THEN
+                 DISSRES = 0.5
+              ELSEIF(NIRESO.EQ.319) THEN
+                 DISSRES = 0.5
+              ELSEIF(NIRESO.EQ.255) THEN
+                 DISSRES = 0.5
+              ELSEIF(NIRESO.EQ.155) THEN
+                 DISSRES = 1.5
+              ELSE
+                 DISSRES = NOGRID(1) / PPMULT
+            CALL INTLOG(JP_WARN,'INTFBU: Diss resol set to: ',NOGRID(1))
+              ENDIF
+            IDISTEP = NINT(DISSRES*PPMULT)
+            HOLDEW = NOGRID(1)
+            HOLDNS = NOGRID(2)
+            NOGRID(1) = IDISTEP
+            NOGRID(2) = IDISTEP
+         ENDIF
+C
+C       Setup geographical limits
+C
+        PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+        PWEST  = FLOAT( NOAREA(2) ) / PPMULT
+        PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+        PEAST  = FLOAT( NOAREA(4) ) / PPMULT
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 4.   Interpolation spherical harmonics to grid point.
+C ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF ( (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT) ) THEN
+C
+C       Get scratch space for interpolation
+C
+        ISIZE = ISCRSZ()
+        IF ( ISIZE .LE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBU: Get scratch space failed',ISIZE)
+          INTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        CALL JMEMHAN( JPSCR16, IZNFLDO, ISIZE, JPALLOC, IERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFBU: Get scratch space fail',JPQUIET)
+          INTFBU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+C       Setup wind flag
+C
+        IF( .NOT.LWINDSET ) THEN
+          LWIND = ( ( NOTABLE.EQ.128 ).AND.
+     X            ((NOPARAM.EQ.131).OR.(NOPARAM.EQ.132)) )
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'INTFBU: Wind flag = ', LWIND)
+        IF ( LWIND ) THEN
+          IUV = 1
+        ELSE
+          IUV = 0
+        ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 4.1  Interpolation spherical harmonics to grid point.
+C ------------------------------------------------------------------
+C
+  410 CONTINUE
+C
+        IF ( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C         -> latitude/longitude grid
+C
+          PLONINC = FLOAT( NOGRID(1) ) / PPMULT
+          PLATINC = FLOAT( NOGRID(2) ) / PPMULT
+          IF ( LWIND ) THEN
+            CALL JALLWN( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+          ELSE
+            CALL JALLGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                   PLATINC, PLONINC, ZNFLDO, IERR)
+          ENDIF
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFBU: Interpolation of gaussian field failed.',JPQUIET)
+            INTFBU = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF ( NOREPR .EQ. JPGAUSSIAN) THEN
+C
+C         -> regular gaussian grid
+C
+          CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                 NOGAUSS, 'F', NOLPTS, ZNFLDO, IUV, IERR)
+cs     X                 NOGAUSS, 'U', NOLPTS, ZNFLDO, IUV, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFBU: Interpolation of gaussian field failed.',JPQUIET)
+            INTFBU = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C
+        IF ( NOREPR .EQ. JPQUASI) THEN
+C
+C         -> reduced gaussian grid
+C
+          CALL JAGGGP( ZNFELDI, NIRESO, PNORTH, PSOUTH, PWEST, PEAST,
+     X                 NOGAUSS, 'U', NOLPTS, ZNFLDO, IUV, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTFBU: Interpolation of gaussian field failed.',JPQUIET)
+            INTFBU = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          GOTO 700
+C
+        ENDIF
+C
+C       Dropthrough => unrecognized output field type
+C
+        IERR   = JPROUTINE + 1
+        CALL INTLOG(JP_ERROR,
+     X    'INTFBU: Unrecognized output field type.',NOREPR)
+        INTFBU = IERR
+        GOTO 900
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 5.   Interpolate Gaussian grid to grid point.
+C ------------------------------------------------------------------
+C
+  500 CONTINUE
+C
+C     Setup flags for input and output fields
+C
+      KERR = 1
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IRSIZE( NIGAUSS, NIAREA, MILLEN, NIWE, NINS, KILN,
+     X                 KITOTAL, RIGAUSS, OIWEGLOBE, OINPOLE, OISPOLE,
+     X                 KPR, KERR)
+      ELSE IF ( NIREPR .EQ. JPGAUSSIAN ) THEN
+          IERR = IGSIZE( NIGAUSS, NIAREA, NIWE, NINS, KILN, RIGAUSS,
+     X                    OIWEGLOBE, OINPOLE, OISPOLE, KPR, KERR)
+      ELSE
+        IERR = IGLSIZE( NIGRID, NIAREA, NIWE, NINS, KILN, OIWEGLOBE,
+     X                  OINPOLE, OISPOLE, KPR, KERR)
+      ENDIF
+C
+      NONS = 0
+      NOWE = 0
+      IF (NOREPR .EQ. JPQUASI) THEN
+        IERR = IRSIZE( NOGAUSS, NOAREA, NOLPTS, NOWE, NONS, KOLN,
+     X                 KOTOTAL, ROGAUSS, OOWEGLOBE, OONPOLE, OOSPOLE,
+     X                 KPR, KERR)
+      ELSE IF ( NOREPR .EQ. JPGAUSSIAN ) THEN
+          IERR = IGSIZE( NOGAUSS, NOAREA, NOWE, NONS, KOLN, ROGAUSS,
+     X                    OOWEGLOBE, OONPOLE, OOSPOLE, KPR, KERR)
+      ELSE
+        IERR = IGLSIZE( NOGRID, NOAREA, NOWE, NONS, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR, KERR)
+      ENDIF
+C
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFBU: Interpolation of gaussian field failed.',IERR)
+        INTFBU = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C     Section 5.1  Interpolate reduced Gaussian grid to grid point.
+C ------------------------------------------------------------------
+C
+  510 CONTINUE
+C
+C
+      ISIZE = ISCRSZ()
+      IF ( ISIZE .LE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFBU: Get scratch space failed.',ISIZE)
+        INTFBU = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      CALL JMEMHAN( JPSCR16, IZNFLDO, ISIZE, JPALLOC, IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTFBU: Get scratch space fail.',JPQUIET)
+        INTFBU = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IF (NIREPR .EQ. JPQUASI) THEN
+        IERR = IARCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                  OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                  OONPOLE, OOSPOLE, KPR ,KERR)
+        IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTFBU: Interpolation of gaussian field failed.',IERR)
+          INTFBU = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        GOTO 700
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 6.   Interpolate regular grid point to grid point.
+C ------------------------------------------------------------------
+C
+  600 CONTINUE
+C
+      IERR = IAGCNTL( ZNFELDI, JPEXPAND, ZNFLDO, ISIZE, KILN,
+     X                OIWEGLOBE, OINPOLE, OISPOLE, KOLN, OOWEGLOBE,
+     X                OONPOLE, OOSPOLE, KPR, KERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTFBU: Interpolation of gaussian field failed.',IERR)
+        INTFBU = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C*    Section 7.   Move unpacked values to user array.
+C ------------------------------------------------------------------
+C
+  700 CONTINUE
+C     If dissemination 'style' selection has been chosen, select points.
+C
+      IF( LSTYLE ) THEN
+          NOGRID(1) = HOLDEW
+          NOGRID(2) = HOLDNS
+        CALL DDSTYLE(ZNFLDO,IDISTEP,IDISTEP,NOGRID(1),NOGRID(2),IERR)
+        IF( IERR.NE.0 ) THEN
+         CALL INTLOG(JP_ERROR,
+     X  'INTFBU: Wrong requested grid increment for dissemination style'
+     X   ,JPQUIET)
+         INTFBU = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+         PLONINC = FLOAT( NOGRID(1) ) / PPMULT
+         PLATINC = FLOAT( NOGRID(2) ) / PPMULT
+         PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+         PWEST  = FLOAT( NOAREA(2) ) / PPMULT
+         PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+         PEAST  = FLOAT( NOAREA(4) ) / PPMULT
+
+          N_NOWE = NINT((PEAST-PWEST)/PLONINC) + 1
+          N_NONS = NINT((PNORTH-PSOUTH)/PLATINC) + 1
+        NOWE = N_NOWE
+        NONS = N_NONS
+        ISIZE = NOWE*NONS
+      ENDIF
+c
+      DO 710 LOOP = 1, ISIZE
+        FLDOUT( LOOP ) = ZNFLDO( LOOP )
+ 710  CONTINUE
+C
+C     Return the number of values, the unpacked array length
+C
+      OUTLEN = ISIZE
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intfc.F b/interpolation/intfc.F
new file mode 100755
index 0000000..b460331
--- /dev/null
+++ b/interpolation/intfc.F
@@ -0,0 +1,125 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTFC( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C---->
+C**** INTFC
+C
+C     Purpose
+C     -------
+C
+C     Move input field to output field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTFC( INGRIB,INLEN,FLDIN,OUTGRIB,OUTLEN,FLDOUT)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C     FLDIN  - Input field (unpacked).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C     FLDOUT  - Output field (unpacked).
+C
+C
+C     Method
+C     ------
+C
+C     Move data (packed or unpacked) without special processing.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Jan 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+      REAL FLDIN(*),FLDOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26700 )
+C
+C     Local variables
+C
+      INTEGER LOOP
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+      INTFC = 0
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Move data from input to output.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     If input is a GRIB product
+      If (NIFORM .EQ. 1) THEN
+C
+C       Move packed values to user array
+        DO 210 LOOP = 1, INLEN
+          OUTGRIB( LOOP ) = INGRIB( LOOP )
+ 210    CONTINUE
+C
+      ELSE
+C
+C       Otherwise, move unpacked values to user array
+        DO 220 LOOP = 1, INLEN
+          FLDOUT( LOOP ) = FLDIN( LOOP )
+ 220    CONTINUE
+C
+      ENDIF
+C
+C     Return the number of values, the unpacked array length
+      OUTLEN = INLEN
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intin.F b/interpolation/intin.F
new file mode 100755
index 0000000..78a24dd
--- /dev/null
+++ b/interpolation/intin.F
@@ -0,0 +1,861 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTIN( HPARN, INTV, REALV, CHARV)
+C  
+C---->
+C**** INTIN
+C  
+C     Purpose
+C     -------
+C
+C     Change input field parameters in common block.
+C  
+C     Interface
+C     ---------
+C
+C     Input
+C     -----
+C
+C     HPARN - MARS parameter name.
+C     INTV  - MARS parameter value(s) (Integer).
+C     REALV - MARS parameter value(s) (Real).
+C     CHARV - MARS parameter value(s) (Character).
+C  
+C  
+C     Method
+C     ------
+C
+C     Recognise MARS paramter and reset appropriate common
+C     variable value(s).
+C
+C     Uses environment variable ISLSCP_OLD_LSM to locate old
+C     land-sea mask GRIB product file. If the variable is not set,
+C     uses /home/ma/emos/data/islscp_old_lsm.
+C  
+C
+C     Externals
+C     ---------
+C
+C     JDEBUG   - Check if debug switched on.
+C     IBASINI  - Check basic initialisation of common blocks is done
+C     CHEQUAL  - Compare two ASCII strings without regard to case.
+C     INTLOG   - Log error message.
+C     JMALLOC  - Dynamically allocate memory
+C     JFREE    - Free dynamically allocated memory
+C     GETENV   - Get value of an environment variable
+C  
+C  
+C     Author
+C     ------
+C
+C     J.D.Chambers       ECMWF        August 1994.
+C  
+C----<
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 28100)
+C
+C     Function arguments
+C
+      CHARACTER*(*) HPARN
+      CHARACTER*(*) CHARV
+      REAL REALV(*)
+      INTEGER INTV(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "current.h"
+#include "intf.h"
+C
+C     Local variables
+C
+      INTEGER ITEMP, I, IRET, ILOOP, ILAST, IGSIZE, IASIZE, IBLANK
+      INTEGER NEWGRIB(1), OLDGRIB(1)
+      POINTER( NIPNGRB, NEWGRIB )
+      POINTER( NIPOGRB, OLDGRIB )
+      LOGICAL LFOUND
+      CHARACTER*256 OLDLSM, ISLDEFL
+      CHARACTER*3 NUMBER
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      LOGICAL CHEQUAL
+      EXTERNAL CHEQUAL, JMALLOC
+C
+      DATA ISLDEFL/'/home/ma/emos/data/islscp_old_lsm'/
+      SAVE ISLDEFL
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTIN = 0
+      LFOUND = .FALSE.
+C
+C     Check if debug turned on
+      CALL JDEBUG()
+C
+C     Ensures basic initialisation of common blocks is done
+      CALL IBASINI(0)
+C
+      CALL INTLOG(JP_DEBUG, 'INTIN: option = ' // HPARN ,JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Decode request
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Request ISLSCP processing
+C
+      IF( CHEQUAL( HPARN, 1, 6, 'islscp') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: islscp = ' // CHARV ,JPQUIET)
+C
+        IF( CHEQUAL( CHARV, 1, 3, 'off' ) ) THEN
+          IF( LNIISCL ) THEN
+            CALL JFREE(NIPOGRB)
+            CALL JFREE(NIPNGRB) 
+            NIPOGRS = 0
+            NIPNGRS = 0
+          ENDIF
+          LNIISCL = .FALSE.
+          GOTO 900
+        ENDIF
+C
+        LNIISCL = .TRUE.
+C
+C       Pick up the old land-sea mask GRIB product
+C
+        CALL GETENV('ISLSCP_OLD_LSM',OLDLSM)
+        IBLANK = INDEX(OLDLSM, ' ')
+        IF( IBLANK.LT.2 ) THEN
+          IBLANK = INDEX(ISLDEFL, ' ') - 1
+          OLDLSM(1:IBLANK) = ISLDEFL(1:IBLANK)
+          IF( INTV(1).GT.0 ) THEN
+            OLDLSM(IBLANK+1:IBLANK+2) = '_n'
+            WRITE(NUMBER,'(I3.3)') INTV(1)
+            OLDLSM(IBLANK+3:IBLANK+5) = NUMBER(1:3)
+            IBLANK = IBLANK + 5
+          ENDIF
+        ENDIF
+        CALL INTLOG(JP_DEBUG,
+     X    'INTIN: old land-sea mask file name:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTIN: ' // OLDLSM(1:IBLANK),JPQUIET)
+C
+        CALL PBOPEN(NISLSCP,OLDLSM,'r',IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Problem processing islscp option',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: PBOPEN fail for old land-sea mask file',IRET)
+          CALL INTLOG(JP_ERROR,'INTIN: ' // OLDLSM(1:IBLANK),JPQUIET)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+C
+        CALL PBSIZE(NISLSCP,IGSIZE)
+        IF( IGSIZE.LE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Problem processing islscp option',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: PBSIZE fail new land-sea mask GRIB product',IGSIZE)
+          INTIN = IGSIZE
+          GOTO 900
+        ENDIF
+C
+        IF( NIPOGRS.LT.IGSIZE ) THEN
+          IF( NIPOGRB.NE.0 ) CALL JFREE(NIPOGRB)
+          NIPOGRS = IGSIZE 
+          NIPOGRB = JMALLOC(NIPOGRS)
+#ifdef hpR64
+          NIPOGRB = NIPOGRB/(1024*1024*1024*4)
+#endif
+          IF( NIPOGRB.EQ.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTIN: Problem processing islscp option',JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        'INTIN: JMALLOC fail old land-sea mask GRIB',JPQUIET)
+            INTIN = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        CALL PBGRIB(NISLSCP, OLDGRIB, IGSIZE, IASIZE, IRET)
+        IF( (IRET.NE.0).OR.(IGSIZE.NE.IASIZE) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Problem processing islscp option',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: PBREAD fail old land-sea mask GRIB',IRET)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+C
+        CALL PBCLOSE(NISLSCP, IRET)
+C
+C       Pick up the new land-sea mask GRIB product
+C
+        IBLANK = INDEX(CHARV, ' ') - 1
+        CALL INTLOG(JP_DEBUG,
+     X    'INTIN: new land-sea mask file name:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTIN: ' // CHARV,JPQUIET)
+C
+        CALL PBOPEN(NISLSCP,CHARV,'r',IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Problem processing islscp option',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: PBOPEN fail for new land-sea mask file',IRET)
+          CALL INTLOG(JP_ERROR,'INTIN: ' // CHARV,JPQUIET)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+C
+        CALL PBSIZE(NISLSCP,IGSIZE)
+        IF( IGSIZE.LE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Problem processing islscp option',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: PBSIZE fail new land-sea mask GRIB product',IGSIZE)
+          INTIN = IGSIZE
+          GOTO 900
+        ENDIF
+C
+        IF( NIPNGRS.LT.IGSIZE ) THEN
+          IF( NIPNGRB.NE.0 ) CALL JFREE(NIPNGRB)
+          NIPNGRS = IGSIZE
+          NIPNGRB = JMALLOC(NIPNGRS)
+#ifdef hpR64
+          NIPNGRB = NIPNGRB/(1024*1024*1024*4)
+#endif
+          IF( NIPNGRB.EQ.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTIN: Problem processing islscp option',JPQUIET)
+            CALL INTLOG(JP_ERROR,
+     X        'INTIN: JMALLOC fail new land-sea mask GRIB',JPQUIET)
+            INTIN = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        CALL PBGRIB(NISLSCP, NEWGRIB, IGSIZE, IASIZE, IRET)
+        IF( (IRET.NE.0).OR.(IGSIZE.NE.IASIZE) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Problem processing islscp option',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: PBREAD fail new land-sea mask GRIB',IRET)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+C
+        CALL PBCLOSE(NISLSCP, IRET)
+        GOTO 900
+C
+      ENDIF
+C
+C     Input or reset value used for missing points in bitmapped field.
+C
+      IF( CHEQUAL( HPARN, 1, 12, 'missingvalue') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTIN: missingvalue = ' // CHARV ,JPQUIET)
+        IF( CHEQUAL( CHARV, 1, 2, 'no') ) THEN
+          IF( LIMISSV ) LCHANGE = .TRUE.
+          LIMISSV = .FALSE.
+          RMISSGV   = -55555.0
+        ELSE
+          IF( .NOT.LIMISSV ) LCHANGE = .TRUE.
+          LIMISSV = .TRUE.
+          RMISSGV = REALV(1)
+        ENDIF
+        CALL INTLOGR(JP_DEBUG,'INTIN: missingvalue = ',RMISSGV)
+        GOTO 900
+      ENDIF
+
+C     missingval because can not be applied in Emos lib everywhere... 
+C
+      IF( CHEQUAL( HPARN, 1, 10, 'missingval') ) THEN
+        LFOUND = .TRUE.
+        LIMISSV = .FALSE.
+        CALL INTLOG(JP_DEBUG,'INTIN: missingval = ' // CHARV ,JPQUIET)
+        IF( CHEQUAL( CHARV, 1, 2, 'no') ) THEN
+          IF( LIMISSV ) LCHANGE = .TRUE.
+          RMISSGV   = -55555.0
+          LIMISSA = .FALSE.
+        ELSE
+          IF( .NOT.LIMISSV ) LCHANGE = .TRUE.
+          LIMISSA = .TRUE.
+          RMISSGV = REALV(1)
+        ENDIF
+        CALL INTLOGR(JP_DEBUG,'INTIN: missingval = ',RMISSGV)
+        ISEC1(5) = 192
+        GOTO 900
+      ENDIF
+C
+C     Input uselsm.
+C
+      IF ( CHEQUAL( HPARN, 1, 6, 'uselsm') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTIN: uselsm = ' // CHARV ,JPQUIET)
+        IF ( CHEQUAL( CHARV, 1, 2, 'no') ) THEN
+          IF ( LSM ) THEN
+            LCHANGE = .TRUE.
+            LSMCHNG = .TRUE.
+          ENDIF
+          LSM = .FALSE.
+        ELSE
+          IF ( .NOT. LSM ) THEN
+            LCHANGE = .TRUE.
+            LSMCHNG = .TRUE.
+          ENDIF
+          LSM = .TRUE.
+        ENDIF
+        LSMSET = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input useprecip.
+C
+      IF ( CHEQUAL( HPARN, 1, 9, 'useprecip') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTIN: useprecip = ' // CHARV ,JPQUIET)
+        IF ( CHEQUAL( CHARV, 1, 3, 'yes') ) THEN
+          IF ( .NOT. LPREC ) LCHANGE = .TRUE.
+          LPREC = .TRUE.
+        ELSE
+          IF ( LPREC ) LCHANGE = .TRUE.
+          LPREC = .FALSE.
+        ENDIF
+        LPRECSET = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input usewind.
+C
+      IF ( CHEQUAL( HPARN, 1, 7, 'usewind') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTIN: usewind = ' // CHARV ,JPQUIET)
+        IF ( CHEQUAL( CHARV, 1, 3, 'yes') ) THEN
+          IF ( .NOT. LWIND ) LCHANGE = .TRUE.
+          LWIND = .TRUE.
+        ELSE
+          IF ( LWIND ) LCHANGE = .TRUE.
+          LWIND = .FALSE.
+        ENDIF
+        LWINDSET = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input parameter.
+C
+      IF ( CHEQUAL( HPARN, 1, 9, 'parameter') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: parameter = ',INTV(1))
+        IF ( NIPARAM .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIPARAM = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input truncation.
+C
+      IF ( CHEQUAL( HPARN, 1, 10, 'truncation') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: truncation = ',INTV(1))
+        IF ( NIREPR .NE. JPSPHERE)  THEN
+          LCHANGE = .TRUE.
+          NIGAUSS = 0
+          NIGRID(1) = 0
+          NIGRID(2) = 0
+          NIAREA(1) = 0
+          NIAREA(2) = 0
+          NIAREA(3) = 0
+          NIAREA(4) = 0
+        ENDIF
+        NIREPR = JPSPHERE
+        IF ( NIRESO .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIRESO = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input reduced.
+C
+      IF ( CHEQUAL( HPARN, 1, 7, 'reduced') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: reduced = ',INTV(1))
+        IF ( NIGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIGAUSS = INTV(1)
+        LNIGAUS = .TRUE.
+        IF ( NIREPR .NE. JPQUASI ) THEN
+          LCHANGE = .TRUE.
+          NIRESO = 0
+          NIGRID(1) = 0
+          NIGRID(2) = 0
+        ENDIF
+        NIREPR = JPQUASI
+        IF( (NIGAUSO.NE.NIGAUSS).OR.(HIGAUST.NE.'R') ) THEN
+          CALL JGETGG( NIGAUSS, 'R', RIGAUSS, MILLEN, IRET)
+          IF ( IRET .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,'INTIN: JGETGG fail - NIGAUSS',JPQUIET)
+            INTIN = IRET
+            GOTO 900
+          ENDIF
+          NIGAUSO = NIGAUSS
+          HIGAUST = 'R'
+        ENDIF
+C
+        NIAREA(1) = INT( RIGAUSS(1) * PPMULT )
+        NIAREA(2) = 0
+        NIAREA(3) = INT( RIGAUSS(NIGAUSS*2) * PPMULT )
+c this gives differnt result from one in the grib header
+        NIAREA(4) = JP360 - JP360/MILLEN(NIGAUSS)
+C
+        NIPCNT = 0
+        Nins = NIGAUSS*2 ! Added by D. Jokic Mar-2005;
+        DO 230 ILOOP = 1, NIGAUSS*2
+          NIPCNT = NIPCNT + MILLEN(ILOOP)
+ 230    CONTINUE
+        GOTO 900
+      ENDIF
+C
+C     Input grid.
+C
+      IF ( CHEQUAL( HPARN, 1, 4, 'grid') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOGR(JP_DEBUG, 'INTIN: grid e-w = ',REALV(1))
+        CALL INTLOGR(JP_DEBUG, 'INTIN: grid n-s = ',REALV(2))
+        IF ( NIREPR .NE. JPREGULAR) THEN
+          LCHANGE = .TRUE.
+          NIGAUSS = 0
+          NIRESO = 0
+        ENDIF
+        NIREPR = JPREGULAR
+        DO 210 I = 1, 2
+          ITEMP = INT( REALV(I)*PPMULT)
+          IF ( NIGRID(I) .NE. ITEMP ) LCHANGE = .TRUE.
+          NIGRID(I) = ITEMP
+ 210    CONTINUE
+        GOTO 900
+      ENDIF
+C
+C     Reduced lat-lon Input grid.
+C
+      IF ( CHEQUAL( HPARN, 1, 7, 'redu_ll') ) THEN
+        LFOUND = .TRUE.
+cs        CALL INTLOGR(JP_DEBUG, 'INTIN: reduced_ll e-w = ',REALV(1))
+        CALL INTLOGR(JP_DEBUG, 'INTIN: reduced_ll n-s = ',REALV(2))
+        IF ( NIREPR .NE. JPREGULAR) THEN
+          LCHANGE = .TRUE.
+          NIGAUSS = 0
+          NIRESO = 0
+        ENDIF
+        NIREPR = JPREDLL
+        NINS = INTV(1)
+        DO 217 I = 1, 2
+          ITEMP = INT( REALV(I)*PPMULT)
+          IF ( NIGRID(I) .NE. ITEMP ) LCHANGE = .TRUE.
+          NIGRID(I) = ITEMP
+ 217    CONTINUE
+        GOTO 900
+      ENDIF
+C
+      IF ( CHEQUAL( HPARN, 1, 5, 'ocean') ) THEN
+        LFOUND = .TRUE.
+        LOCEAN = .TRUE.
+        CALL INTLOGR(JP_DEBUG, 'INTIN: Ocean field',JPQUIET)
+        NIOCO3  = INTV(1)
+        NIOCO4  = INTV(2)
+        NIOCO4F = INTV(3)
+        NIOCO3F = INTV(4)
+        NIOCO4L = INTV(5)
+        NIOCO3L = INTV(6)
+        NIOIINC = INTV(7)
+        NIOJINC = INTV(8)
+        NIOIRGR = INTV(9)
+        NIONOST = INTV(10)
+        NICOORN = INTV(11)
+        NIVCDEF = INTV(12)
+        NILOCAL = 4
+        GOTO 900
+      ENDIF
+
+      IF ( CHEQUAL( HPARN, 1, 5, 'local') ) THEN
+        LFOUND = .TRUE.
+        NILOCAL = INTV(1)
+        CALL INTLOGR(JP_DEBUG, 'INTIN: Local settings',NILOCAL)
+        GOTO 900
+      ENDIF
+c	  
+      IF ( CHEQUAL( HPARN, 1, 6, 'matrix') ) THEN
+        LFOUND = .TRUE.
+        NIMATR = INTV(1)
+        CALL INTLOGR(JP_DEBUG, 'INTIN: Matrix values',NIMATR)
+        GOTO 900
+      ENDIF
+C
+      IF ( CHEQUAL( HPARN, 1, 11, 'coord_ocean') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOGR(JP_DEBUG, 'INTIN: Ocean field grid Coordinate'
+     X     ,JPQUIET)
+        DO 249 ILOOP = 1, NICOORN
+          OCCOOR(ILOOP) = INTV(ILOOP)
+ 249    CONTINUE
+        GOTO 900
+      ENDIF
+C
+      IF ( CHEQUAL( HPARN, 1, 6, 'l_npts') ) THEN
+        LFOUND = .TRUE.
+C
+        DO 247 ILOOP = 1, NINS
+          MILLEN(ILOOP) = INTV(ILOOP)
+ 247    CONTINUE
+        GOTO 900
+      ENDIF
+C
+C     Input data format.
+C
+      IF ( CHEQUAL( HPARN, 1, 4, 'form') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: form = ' // CHARV ,JPQUIET)
+        IF ( CHEQUAL( CHARV, 1, 4, 'grib') ) THEN
+          IF ( NIFORM .EQ. 0 ) LCHANGE = .TRUE.
+          NIFORM = 1
+        ELSE
+          IF ( NIFORM .EQ. 1 ) LCHANGE = .TRUE.
+          NIFORM = 0
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Number of points along latitude and longitude
+C
+      IF ( CHEQUAL( HPARN, 1, 4, 'npts') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: pts along latitude = ',INTV(1))
+        CALL INTLOG(JP_DEBUG, 'INTIN: pts along longitude = ',INTV(2))
+        NIWE = INTV(1)
+        NINS = INTV(2)
+        GOTO 900
+      ENDIF
+
+      IF( CHEQUAL( HPARN, 1, 8, 'accuracy') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: Inpu accuracy = ',INTV(1))
+        NIACC = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input level.
+C
+      IF ( CHEQUAL( HPARN, 1, 5, 'level') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: level = ',INTV(1))
+        IF ( NILEVEL .NE. INTV(1) ) LCHANGE = .TRUE.
+        NILEVEL = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input Date.
+C
+      IF ( CHEQUAL( HPARN, 1, 4, 'date') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: Date = ',INTV(1))
+        IF ( NIDATE .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIDATE = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input level type.
+C
+      IF ( CHEQUAL( HPARN, 1, 7, 'levtype') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: levtype = ',INTV(1))
+        IF ( NILEVT .NE. INTV(1) ) LCHANGE = .TRUE.
+        NILEVT  = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input table.
+C
+      IF ( CHEQUAL( HPARN, 1, 5, 'table') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: table = ',INTV(1))
+        IF ( NITABLE .NE. INTV(1) ) LCHANGE = .TRUE.
+        NITABLE = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input regular (gaussian).
+C
+      IF ( CHEQUAL( HPARN, 1, 7, 'regular') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: regular = ',INTV(1))
+        NIREPR = JPGAUSSIAN
+        IF ( NIGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIGAUSS = INTV(1)
+        LNIGAUS = .TRUE.
+        IF ( NIREPR .NE. JPGAUSSIAN) THEN
+          LCHANGE = .TRUE.
+          NIRESO = 0
+          NIGRID(1) = 0
+          NIGRID(2) = 0
+        ENDIF
+        NIREPR = JPGAUSSIAN
+        IF( (NIGAUSO.NE.NIGAUSS).OR.(HIGAUST.NE.'F') ) THEN
+          CALL JGETGG( NIGAUSS, 'F', RIGAUSS, MILLEN, IRET)
+          IF ( IRET .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,'INTIN: JGETGG fail - NIGAUSS',JPQUIET)
+            INTIN = IRET
+            GOTO 900
+          ENDIF
+          NIGAUSO = NIGAUSS
+          HIGAUST = 'F'
+        ENDIF
+C
+        NIAREA(1) = INT( RIGAUSS(1) * PPMULT )
+        NIAREA(2) = 0
+        NIAREA(3) = INT( RIGAUSS(NIGAUSS*2) * PPMULT )
+        NIAREA(4) = JP360 - JP360/MILLEN(NIGAUSS)
+C
+        NIPCNT = 0
+        DO ILOOP = 1, NIGAUSS*2
+          NIPCNT = NIPCNT + MILLEN(ILOOP)
+        ENDDO
+        GOTO 900
+      ENDIF
+C
+C     Input area.
+C
+      IF ( CHEQUAL( HPARN, 1, 4, 'area') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOGR(JP_DEBUG, 'INTIN: north = ',REALV(1))
+        CALL INTLOGR(JP_DEBUG, 'INTIN: west  = ',REALV(2))
+        CALL INTLOGR(JP_DEBUG, 'INTIN: south = ',REALV(3))
+        CALL INTLOGR(JP_DEBUG, 'INTIN: east  = ',REALV(4))
+        DO 220 I = 1, 4
+          ITEMP = INT( REALV(I)*PPMULT)
+          IF ( NIAREA(I) .NE. ITEMP ) LCHANGE = .TRUE.
+          NIAREA(I) = ITEMP
+ 220    CONTINUE
+        GOTO 900
+      ENDIF
+C
+C     Input scan.
+C
+      IF ( CHEQUAL( HPARN, 1, 4, 'scan') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTIN: scan = ',INTV(1))
+        IF ( NISCNM .NE. INTV(1) ) LCHANGE = .TRUE.
+        NISCNM = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Input lsm_param.
+C
+      IF ( CHEQUAL( HPARN, 1, 9, 'lsm_param') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTIN: lsm_param = ' // CHARV ,JPQUIET)
+        IF ( CHEQUAL( CHARV, 1, 3, 'yes') ) THEN
+          IF ( .NOT. LSMPAR ) LCHANGE = .TRUE.
+          LSMPAR = .TRUE.
+        ELSE
+          IF ( LSMPAR ) LCHANGE = .TRUE.
+          LSMPAR = .FALSE.
+        ENDIF
+        LSMPARSET = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Set of LSM - merging with grib_api
+      IF ( CHEQUAL( HPARN, 1, 6, 'lsmset') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTIN: lsmset = ' // CHARV ,JPQUIET)
+        IF ( CHEQUAL( CHARV, 1, 2, 'no') ) THEN
+          IF ( LSM ) THEN
+            LCHANGE = .TRUE.
+            LSMCHNG = .TRUE.
+          ENDIF
+          LSM = .FALSE.
+          LSMSET = .TRUE.
+        ELSE
+          IF ( .NOT. LSM ) THEN
+            LCHANGE = .TRUE.
+            LSMCHNG = .TRUE.
+          ENDIF
+          LSM = .TRUE.
+          LSMSET = .FALSE.
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C
+C     Input user_regular_gaussian
+C
+C     (Ignore the call if the user_regular_gaussian value = 0.)
+      IF ( CHEQUAL( HPARN, 1, 21, 'user_regular_gaussian') ) THEN
+        LFOUND = .TRUE.
+        IF ( NIREPR .NE. JPGAUSSIAN) THEN
+          LCHANGE = .TRUE.
+          NIRESO = 0
+          NIGRID(1) = 0
+          NIGRID(2) = 0
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'INTIN: user_regular_gaussian = ',INTV(1))
+        IF ( NIGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIGAUSS = INTV(1)
+        NIREPR  = JPGAUSSIAN
+C
+        ILAST = NIGAUSS*2
+        DO 235 ILOOP = 1, ILAST
+          MILLEN(ILOOP) = NOGAUSS*4
+ 235    CONTINUE
+        NIGAUSO = NIGAUSS
+        HIGAUST = 'U'
+        LIGIVEP   = .TRUE.
+C
+        GOTO 900
+      ENDIF
+C
+C     Input user_reduced_gaussian
+C     (Ignore the call if the user_reduced_gaussian value = 0.)
+C
+      IF ( CHEQUAL( HPARN, 1, 21, 'user_reduced_gaussian') ) THEN
+        LFOUND = .TRUE.
+        IF ( NIREPR .NE. JPQUASI ) THEN
+          LCHANGE = .TRUE.
+          NIRESO = 0
+          NIGRID(1) = 0
+          NIGRID(2) = 0
+        ENDIF
+        IF ( INTV(1) .EQ. 0 ) GOTO 900
+        CALL INTLOG(JP_DEBUG,'INTIN: user_reduced_gaussian = ',INTV(1))
+        IF ( NIGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        NIGAUSS = INTV(1)
+        NIREPR  = JPQUASI
+        NIGAUSO = NIGAUSS
+        HIGAUST = 'U'
+        GOTO 900
+      ENDIF
+C
+C     Input g_pnts loading from grib_api.
+C
+      IF ( CHEQUAL( HPARN, 1, 7, 'ga_pnts') ) THEN
+        LFOUND = .TRUE.
+        IF ( NIGAUSS .LE. 0 ) THEN
+          IRET = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Impossible number of gaussian latitudes.',NIGAUSS)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+          CALL INTLOG(JP_DEBUG,
+     X      'INTIN: Reduced Gaussian - grib_api ',NIGAUSS)
+C
+cs        ILAST = NIGAUSS*2 + 1
+        ILAST = NIGAUSS*2
+        DO 241 ILOOP = 1, ILAST
+          MILLEN(ILOOP) = INTV(ILOOP)
+ 241    CONTINUE
+C
+        NIAREA(4) = JP360 - INT( JP360/MILLEN(NIGAUSS) )
+C
+        NIPCNT = 0
+        DO 251 ILOOP = 1, ILAST
+          NIPCNT = NIPCNT + MILLEN(ILOOP)
+ 251    CONTINUE
+        NIGAUSO = NIGAUSS
+        HIGAUST = 'U'
+        LIGIVEP = .TRUE.
+        GOTO 900
+      ENDIF
+cs end ga
+
+      IF ( CHEQUAL( HPARN, 1, 6, 'g_pnts') ) THEN
+        LFOUND = .TRUE.
+        IF ( NIGAUSS .LE. 0 ) THEN
+          IRET = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Impossible number of gaussian latitudes.',NIGAUSS)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+C
+        ILAST = NIGAUSS*2 + 1
+        DO 240 ILOOP = 1, NIGAUSS
+          MILLEN(ILOOP) = INTV(ILOOP)
+          ILAST = ILAST - 1
+          MILLEN(ILAST) = INTV(ILOOP)
+ 240    CONTINUE
+C
+        NIAREA(4) = JP360 - INT( JP360/MILLEN(NIGAUSS) )
+C
+        NIPCNT = 0
+        DO 250 ILOOP = 1, NIGAUSS*2
+          NIPCNT = NIPCNT + MILLEN(ILOOP)
+ 250    CONTINUE
+        NIGAUSO = NIGAUSS
+        HIGAUST = 'U'
+        LIGIVEP = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input g_lats.
+C
+      IF ( CHEQUAL( HPARN, 1, 6, 'g_lats') ) THEN
+        LFOUND = .TRUE.
+        IF ( NIGAUSS .LE. 0 ) THEN
+          IRET  = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTIN: Impossible number of gaussian latitudes.',NIGAUSS)
+          INTIN = IRET
+          GOTO 900
+        ENDIF
+C
+        ILAST = NIGAUSS*2 + 1
+        DO 260 ILOOP = 1, NIGAUSS
+          RIGAUSS(ILOOP) = REALV(ILOOP)
+          ILAST = ILAST - 1
+          RIGAUSS(ILAST) = -REALV(ILOOP)
+ 260    CONTINUE
+C
+        NIAREA(1) = INT( RIGAUSS(1) * PPMULT )
+        NIAREA(2) = 0
+        NIAREA(3) = INT( RIGAUSS(NIGAUSS*2) * PPMULT )
+        NIAREA(4) = JP360 - JP360/MILLEN(NIGAUSS)
+        NIGAUSO = NIGAUSS
+        HIGAUST = 'U'
+        LIGIVEL   = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*     Section 9.   Closedown.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+      IF( .NOT. LFOUND ) THEN
+        CALL INTLOG(JP_ERROR, 'INTIN: Unknown keyword used:', JPQUIET)
+        CALL INTLOG(JP_ERROR, HPARN, JPQUIET)
+        INTIN = JPROUTINE + 2
+      ENDIF
+      RETURN
+      END
diff --git a/interpolation/intisl.F b/interpolation/intisl.F
new file mode 100755
index 0000000..b5f8da1
--- /dev/null
+++ b/interpolation/intisl.F
@@ -0,0 +1,329 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTISL(OLDLSM, OLDFLD, NEWLSM, NEWFLD)
+C
+C---->
+C**** INTISL
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on an old land-sea mask to a field
+C     based on a different land-sea mask.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTISL(OLDLSM, OLDFLD, NEWLSM, NEWFLD)
+C
+C     Input
+C     -----
+C
+C     OLDLSM - Old land-sea mask in GRIB format
+C     OLDFLD - Old field in GRIB format
+C     NEWLSM - New land-sea mask in GRIB format
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - New field in GRIB format
+C
+C     Function returns:
+C       - the size in bytes of the new GRIB product if all is well
+C       - -1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack input GRIBS.
+C     Create new field and pack it into GRIB format.
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode and encode GRIB products.
+C     NEWISL  - Interpolate old field to new using both land-sea masks.
+C     JMALLOC - Dynamically allocate memory
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     August 2000
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER OLDLSM(*), OLDFLD(*), NEWLSM(*), NEWFLD(*)
+C
+#include "parim.h"
+#include "intisl.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPINTB, JPREALB
+      PARAMETER (JPINTB = 4)
+#ifdef REAL_8
+      PARAMETER (JPREALB = 8)
+#else
+      PARAMETER (JPREALB = 8)
+#endif
+C
+C     Local variables
+C
+      INTEGER IXSEC4(512)
+      INTEGER ILSEC0(2),ILSEC1(1024),ILSEC2(1024),ILSEC3(2),ILSEC4(512)
+      INTEGER IFSEC0(2),IFSEC1(1024),IFSEC2(1024),IFSEC3(2),IFSEC4(512)
+      INTEGER IMSEC0(2),IMSEC1(1024),IMSEC2(1024),IMSEC3(2),IMSEC4(512)
+      INTEGER NFSEC0(2),NFSEC1(1024),NFSEC2(1024),NFSEC3(2),NFSEC4(512)
+      INTEGER KLSEC4, KFSEC4, KMSEC4, KPSEC4, NEWTYPE
+#if (!defined __uxp__) && (!defined sgi)
+#ifdef POINTER_64
+      INTEGER*8 IZLSEC4, IZFSEC4, IZMSEC4, IPFSEC4
+#else
+      INTEGER IZLSEC4, IZFSEC4, IZMSEC4, IPFSEC4
+#endif
+#endif
+C
+      REAL ZDUMMY
+      REAL ZLSEC2(1500), ZLSEC3(2), ZLSEC4(1)
+      REAL ZFSEC2(1500), ZFSEC3(2), ZFSEC4(1)
+      REAL ZMSEC2(1500), ZMSEC3(2), ZMSEC4(1)
+      REAL PFSEC2(1500), PFSEC3(2), PFSEC4(1)
+C
+      POINTER( IZLSEC4, ZLSEC4 )
+      POINTER( IZFSEC4, ZFSEC4 )
+      POINTER( IZMSEC4, ZMSEC4 )
+      POINTER( IPFSEC4, PFSEC4 )
+C
+      INTEGER IRET, ILENB, IPUNP, IWORD
+C
+C     Externals
+C
+      INTEGER NEWISL
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      EXTERNAL NEWISL, JMALLOC
+C
+      DATA KLSEC4/0/, KFSEC4/0/, KMSEC4/0/, KPSEC4/0/
+      SAVE KLSEC4, KFSEC4, KMSEC4, KPSEC4
+      SAVE IZLSEC4, IZFSEC4, IZMSEC4, IPFSEC4
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTISL = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Dynamically allocate memory for the old land-sea mask
+C                  values and old field values.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Old land-sea mask
+C
+      IRET = 1
+      IPUNP = 1
+      ILENB = NIPOGRS
+      CALL GRIBEX (ILSEC0,ILSEC1,ILSEC2,ZLSEC2,ILSEC3,ZLSEC3,IXSEC4,
+     X             ZDUMMY,IPUNP,OLDLSM,ILENB,IWORD,'J',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'INTISL: Old lsm gribex return code = ',IRET
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+      IF( KLSEC4.LT.(IXSEC4(1)*JPREALB) ) THEN
+        IF( KLSEC4.NE.0 ) THEN
+          CALL JFREE(IZLSEC4)
+          CALL JFREE(IZFSEC4)
+        ENDIF
+        KLSEC4 = IXSEC4(1)*JPREALB
+        KFSEC4 = KLSEC4
+        CALL INTLOG(JP_DEBUG,'INTISL: Allocate old memory = ',KLSEC4)
+        IZLSEC4 = JMALLOC(KLSEC4)
+        IZFSEC4 = JMALLOC(KFSEC4)
+#ifdef hpR64
+        IZLSEC4 = IZLSEC4/(1024*1024*1024*4)
+        IZFSEC4 = IZFSEC4/(1024*1024*1024*4)
+#endif
+        IF( (IZLSEC4.EQ.0).OR.(IZFSEC4.EQ.0) ) THEN
+          CALL INTLOG(JP_ERROR,'INTISL: JMALLOC fail oldies',JPQUIET)
+          INTISL = -1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+      IRET = 1
+      IPUNP = IXSEC4(1)
+      ILENB = NIPOGRS
+      CALL GRIBEX (ILSEC0,ILSEC1,ILSEC2,ZLSEC2,ILSEC3,ZLSEC3,ILSEC4,
+     X             ZLSEC4,IPUNP,OLDLSM,ILENB,IWORD,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'INTISL: Old lsm gribex return code = ',IRET
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+C     Old field
+C
+      IRET = 1
+      IPUNP = IXSEC4(1)
+      ILENB = NIPOGRS
+      IF( LIMISSV ) THEN
+        IFSEC3(2) = NINT(RMISSGV)
+        ZFSEC3(2) = RMISSGV
+      ENDIF
+      CALL GRIBEX (IFSEC0,IFSEC1,IFSEC2,ZFSEC2,IFSEC3,ZFSEC3,IFSEC4,
+     X             ZFSEC4,IPUNP,OLDFLD,ILENB,IWORD,'D',IRET)
+      IF( ((IRET.EQ.-2).OR.(IRET.EQ.-4)).AND.
+     X    (LIMISSV.EQV.(.FALSE.)) ) THEN
+        WRITE(*,*) 'INTISL: Old field has a bitmap'
+        WRITE(*,*) 'INTISL: A missing value must be specified'
+        INTISL = -1
+        RETURN
+      ELSE IF( IRET.GT.0 ) THEN
+        WRITE(*,*) 'INTISL: Old field gribex return code = ',IRET
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Dynamically allocate memory for the master land-sea
+C                  mask values and new field values.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     New land-sea mask
+C
+      IRET = 1
+      IPUNP = 1
+      ILENB = NIPNGRS
+      CALL GRIBEX (IMSEC0,IMSEC1,IMSEC2,ZMSEC2,IMSEC3,ZMSEC3,IXSEC4,
+     X             ZDUMMY,IPUNP,NEWLSM,ILENB,IWORD,'J',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'INTISL: Master lsm gribex return code = ',IRET
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+C     Dynamically allocate memory for the master land-sea mask values
+C     and new field values
+C
+      IF( KMSEC4.LT.(IXSEC4(1)*JPREALB) ) THEN
+        IF( KMSEC4.NE.0 ) THEN
+          CALL JFREE(IZMSEC4)
+          CALL JFREE(IPFSEC4)
+        ENDIF
+        KMSEC4 = IXSEC4(1)*JPREALB
+        KPSEC4 = KMSEC4
+        CALL INTLOG(JP_DEBUG,'INTISL: Allocate new memory = ',KMSEC4)
+        IZMSEC4 = JMALLOC(KMSEC4)
+        IPFSEC4 = JMALLOC(KPSEC4)
+#ifdef hpR64
+        IZMSEC4 = IZMSEC4/(1024*1024*1024*4)
+        IPFSEC4 = IPFSEC4/(1024*1024*1024*4)
+#endif
+        IF( (IZMSEC4.EQ.0).OR.(IPFSEC4.EQ.0) ) THEN
+          CALL INTLOG(JP_ERROR,'INTISL: JMALLOC fail newies',JPQUIET)
+          INTISL = -1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+      IRET = 1
+      IPUNP = IXSEC4(1)
+      ILENB = NIPNGRS
+      CALL GRIBEX (IMSEC0,IMSEC1,IMSEC2,ZMSEC2,IMSEC3,ZMSEC3,IMSEC4,
+     X             ZMSEC4,IPUNP,NEWLSM,ILENB,IWORD,'D',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'INTISL: Master lsm gribex return code = ',IRET
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+C     Requested field must match the new land-sea mask
+C
+      NEWTYPE = NOREPR
+      IF( NOREPR.EQ.JPQUASI ) NEWTYPE = JPGAUSSIAN
+      IF( (NEWTYPE.NE.IMSEC2(1)).OR.
+     X    ((NOREPR.NE.JPQUASI).AND.(IMSEC2(17).NE.0)).OR.
+     X    ((NOREPR.EQ.JPQUASI).AND.(IMSEC2(17).NE.1)) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTISL: Land-sea mask not suitable',JPQUIET)
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Create new field and put in GRIB format
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IRET = NEWISL(ILSEC2, IMSEC2, ZLSEC4, ZFSEC4, ZMSEC4, PFSEC4)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'INTISL: New field creation failed'
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+      IRET = 1
+      IPUNP = IXSEC4(1)
+      ILENB = NIPNGRS
+C
+C     There may be 'missing' values in the new field if the old field
+C     has 'missing' values.
+C
+      IF( IFSEC1(5).EQ.192 ) THEN
+        IFSEC1(5) = 192
+        NFSEC3(1) = 0
+        NFSEC3(2) = INT(RMISSGV)
+        PFSEC3(1) = 0.0
+        PFSEC3(2) = RMISSGV
+      ENDIF
+C
+      CALL GRIBEX (IFSEC0,IFSEC1,IMSEC2,ZMSEC2,NFSEC3,PFSEC3,IMSEC4,
+     X             PFSEC4,IPUNP,NEWFLD,ILENB,IWORD,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'INTISL: New field gribex return code = ',IRET
+        INTISL = -1
+        RETURN
+      ENDIF
+C
+      INTISL = IWORD * JPINTB
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intisl.h b/interpolation/intisl.h
new file mode 100755
index 0000000..300e835
--- /dev/null
+++ b/interpolation/intisl.h
@@ -0,0 +1,28 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+#ifndef INTISL_H
+#define INTISL_H
+
+#define MISSING (-999.0)
+#define NJ      3
+#define NPOINTS 23
+#define NGAUSS  10
+#define SEA     0
+#define LAND    1
+#define MASTERTHRESHOLD  0.5
+#define OLDLSMTHRESHOLD  0.5
+#define NWEST 1
+#define NEAST 2
+#define SWEST 3
+#define SEAST 4
+#define NORTH 1
+#define SOUTH 2
+
+#endif
diff --git a/interpolation/intlog.F b/interpolation/intlog.F
new file mode 100755
index 0000000..40a9dd0
--- /dev/null
+++ b/interpolation/intlog.F
@@ -0,0 +1,163 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INTLOG(KLEVEL, MESSAGE, KNUM)
+C
+C---->
+C**** INTLOG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine logs error messages.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL INTLOG(KLEVEL, MESSAGE, KNUM)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KLEVEL   - Severity level for reported message
+C                = 0 for debug
+C                = 1 for information
+C                = 2 for warning
+C                = 3 for error
+C                = 4 for fatal
+C     MESSAGE  - Message text
+C     KNUM     - Message number
+C
+C
+C     Output parameters
+C     ________________
+C
+C     None.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     LDEBUG in /INTLOGC/ controls display of message
+C                 = 0 for no display
+C                 = 1 to display
+C
+C
+C     Method
+C     ______
+C
+C     Prints message and number if debug flag is 'on'.
+C
+C
+C     Externals
+C     _________
+C
+C     INTLOGT  - sends any ERROR, FATAL or WARN message to the
+C                MARS server.
+C
+C
+C     Comments
+C     ________
+C
+C     LDEBUG is toggled by a call to INTLOGD.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jul 1995
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      March 1996
+C     Prepare error message for MARS server.
+C
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Subroutine arguments.
+C
+      INTEGER KLEVEL, KNUM
+      CHARACTER *(*) MESSAGE
+C
+#include "intlog.h"
+C
+C     Local variables.
+C
+      CHARACTER*79 NEWMESS
+      INTEGER NLEV, LOOP
+      CHARACTER*5 TITLE(JP_FATAL+1)
+      DATA TITLE/'DEBUG',
+     X           'INFO ',
+     X           'WARN ',
+     X           'ERROR',
+     X           'FATAL'/
+      INTEGER IRET, ILEN
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Ensure valid level is used.
+      NLEV = KLEVEL + 1
+      IF ( KLEVEL .GT. JP_FATAL) NLEV = JP_FATAL + 1
+C
+      DO LOOP = 1, 79
+        NEWMESS(LOOP:LOOP) = ' '
+      ENDDO
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Prepare ERROR or FATAL message for MARS server.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      ILEN = LEN(MESSAGE)
+      IF( ILEN.GT.65 ) ILEN = 65
+      NEWMESS(1:ILEN) = MESSAGE(1:ILEN)
+      ILEN = ILEN + 1
+      IF(KNUM.NE.JPQUIET) THEN
+        IF( ABS(KNUM).LT.1000 ) THEN
+          WRITE(NEWMESS(ILEN:),'(I4)') KNUM
+        ELSE IF ( ABS(KNUM).LT.100000 ) THEN
+          WRITE(NEWMESS(ILEN:),'(I7)') KNUM
+        ELSE IF ( ABS(KNUM).LT.100000000 ) THEN
+          WRITE(NEWMESS(ILEN:),'(I10)') KNUM
+        ELSE
+          WRITE(NEWMESS(ILEN:),'(I15)') KNUM
+        ENDIF
+      ENDIF
+C
+C     Send the message
+C
+      IF( KLEVEL.GE.JP_WARN ) CALL INTLOGT(NEWMESS)
+C
+      IF( LDEBUG ) WRITE(*,9001) TITLE(NLEV),NEWMESS(1:66)
+ 9001 FORMAT('INTLOG ',A5,': ',A66)
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intlog.h b/interpolation/intlog.h
new file mode 100755
index 0000000..dfcc9b9
--- /dev/null
+++ b/interpolation/intlog.h
@@ -0,0 +1,14 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Common block.
+      COMMON /INTLOGC/ LDEBUG
+      SAVE /INTLOGC/
+      LOGICAL LDEBUG
diff --git a/interpolation/intlogd.F b/interpolation/intlogd.F
new file mode 100755
index 0000000..f1b426d
--- /dev/null
+++ b/interpolation/intlogd.F
@@ -0,0 +1,90 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INTLOGD(KONOFF)
+C
+C---->
+C**** INTLOGD
+C
+C     PURPOSE
+C     _______
+C
+C     This routine toggles the debug flag LDEBUG.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL INTLOG(KONOFF)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KONOFF   - value to set in the debug flag LDEBUG.
+C                = 0 for 'off'.
+C                = 1 for 'on'.
+C
+C
+C     Output parameters
+C     ________________
+C
+C     None.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     LDEBUG in /INTLOGC/ controls display of message
+C                 = 0 for no display
+C                 = 1 to display
+C
+C
+C     Method
+C     ______
+C
+C     Toggle flag.
+C
+C
+C     Externals
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     LDEBUG is toggled by a call to INTLOGD.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jul 1995
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     _______________________________________________________
+C
+C     Subroutine arguments.
+      INTEGER KONOFF
+#include "intlog.h"
+C
+      LDEBUG =  (KONOFF.EQ.1)
+C
+      RETURN
+      END
diff --git a/interpolation/intlogr.F b/interpolation/intlogr.F
new file mode 100755
index 0000000..9770f8d
--- /dev/null
+++ b/interpolation/intlogr.F
@@ -0,0 +1,160 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE INTLOGR(KLEVEL, MESSAGE, PNUM)
+C
+C---->
+C**** INTLOGR
+C
+C     PURPOSE
+C     _______
+C
+C     This routine logs error messages.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL INTLOGR(KLEVEL, MESSAGE, PNUM)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KLEVEL   - Severity level for reported message
+C                = 0 for debug
+C                = 1 for information
+C                = 2 for warning
+C                = 3 for error
+C                = 4 for fatal
+C     MESSAGE  - Message text
+C     PNUM     - Message number
+C
+C
+C     Output parameters
+C     ________________
+C
+C     None.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     LDEBUG in /INTLOGC/ controls display of message
+C                 = 0 for no display
+C                 = 1 to display
+C
+C
+C     Method
+C     ______
+C
+C     Prints message and number if debug flag is 'on'.
+C
+C
+C     Externals
+C     _________
+C
+C     INTLOGT  - sends any ERROR or FATAL message to the MARS server.
+C
+C
+C     Comments
+C     ________
+C
+C     LDEBUG is toggled by a call to INTLOGD.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jul 1995
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      March 1996
+C     Prepare error message for MARS server.
+C
+C
+C----<
+C     _______________________________________________________
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Subroutine arguments.
+C
+      INTEGER KLEVEL
+      REAL PNUM
+      CHARACTER *(*) MESSAGE
+C
+#include "intlog.h"
+C
+C     Local variables.
+C
+      CHARACTER*79 NEWMESS
+      INTEGER NLEV, LOOP
+      CHARACTER*5 TITLE(JP_FATAL+1)
+      DATA TITLE/'DEBUG',
+     X           'INFO ',
+     X           'WARN ',
+     X           'ERROR',
+     X           'FATAL'/
+      INTEGER IRET, ILEN
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Ensure valid level is used.
+      NLEV = KLEVEL + 1
+      IF ( KLEVEL .GT. JP_FATAL) NLEV = JP_FATAL + 1
+C
+      DO LOOP = 1, 79
+        NEWMESS(LOOP:LOOP) = ' '
+      ENDDO
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Prepare ERROR or FATAL message for MARS server.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      ILEN = LEN(MESSAGE)
+      IF( ILEN.GT.55 ) ILEN = 55
+      NEWMESS(1:ILEN) = MESSAGE
+      ILEN = ILEN + 1
+      IF( ABS(PNUM).LT.100000.0 ) THEN
+        WRITE(NEWMESS(ILEN:),'(F24.15)') PNUM
+      ELSE IF ( ABS(PNUM).LT.10000000000.0 ) THEN
+        WRITE(NEWMESS(ILEN:),'(F24.10)') PNUM
+      ELSE IF ( ABS(PNUM).LT.10000000000000.0 ) THEN
+        WRITE(NEWMESS(ILEN:),'(F24.7)') PNUM
+      ELSE
+        WRITE(NEWMESS(ILEN:),'(F25.2)') PNUM
+      ENDIF
+C
+C     Send the message
+C
+      IF( KLEVEL.GE.JP_WARN ) CALL INTLOGT(NEWMESS)
+C
+      IF( LDEBUG ) WRITE(*,9001) TITLE(NLEV),NEWMESS(1:66)
+ 9001 FORMAT('INTLOG ',A5,': ',A66)
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intlogs.c b/interpolation/intlogs.c
new file mode 100755
index 0000000..875a8b9
--- /dev/null
+++ b/interpolation/intlogs.c
@@ -0,0 +1,107 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef CRAY
+#include <fortran.h>
+#else
+#define _fcd char *
+#define _fcdtocp(a) a
+#define _fcdlen(a) strlen(a)
+#endif
+ 
+char *fcd2char();	/* fortran to c string convertion (alloc memory) */
+
+/* defines for FORTRAN subroutine */
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define INTLOGT intlogt
+#else
+#define INTLOGT intlogt_
+#endif
+#endif
+
+/* Pointer to display function */
+void (*g_pp_err_fn)(char * buffer) = 0;
+
+void intlogs(void (*pp_error)(char *)) {
+
+  g_pp_err_fn = pp_error;
+  return;
+}
+
+#define MAXMESSAGE 79
+
+void INTLOGT(char * message, long length) {
+char * buffer;
+int messageLen;
+
+#ifndef CRAY
+  messageLen = (length > MAXMESSAGE) ? MAXMESSAGE : length;
+  if( g_pp_err_fn != 0 ) {
+
+    buffer = (char*) malloc(messageLen+1);
+    if( buffer == NULL) {
+      perror("INTLOGT: malloc error");
+      return;
+    }
+
+    strncpy(buffer,message,messageLen);
+    buffer[messageLen] = '\0';
+    {
+     char * p;
+      p  = buffer + messageLen - 1;
+      while(*p == ' ') {
+        *p = '\0';
+        p--;
+      }
+    }
+    g_pp_err_fn(buffer);
+    free(buffer);
+
+  }
+#else
+char messagebuff[256];
+char * fmessage;
+char * p;
+
+  if( g_pp_err_fn != 0 ) {
+
+    if( (fmessage = fcd2char(message)) ) {
+      p  = fmessage + strlen(fmessage);
+
+      while(*p == ' ') {
+        *p = '\0';
+        p--;
+      }
+
+      g_pp_err_fn(fmessage);
+      free(fmessage);
+    }
+  }
+
+#endif
+
+  return;
+}
+
+
+void intlog2(char *msg) {
+	INTLOGT(msg,strlen(msg));
+}
+
+void intlog2ga(char *msg1, char *msg2) {
+	INTLOGT(msg1,strlen(msg1));
+	INTLOGT(msg2,strlen(msg2));
+}
diff --git a/interpolation/intocn.F b/interpolation/intocn.F
new file mode 100755
index 0000000..c55e6c1
--- /dev/null
+++ b/interpolation/intocn.F
@@ -0,0 +1,1070 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTOCN(HICODE,HSCODE,RTOP,RBOTT,RRIGHT,RLEFT,
+     *            RYRES,RXRES,
+     *            KSEC1,KSEC2,PSEC4,KLENP,KLENI,TARRAY,
+     *            XARR,YARR,NXP,NYP,PARRAY,IINTPOL,ISTAGP)
+C
+C---->
+C****  INTOCN  - interpolates grib ocean data
+C
+C
+C     PURPOSE
+C     -------
+C     Interpolates data to new grid, according to instructions.
+C     Missing data is flagged with -999.9; this information is
+C     passed to the new field.
+C
+C
+C     Interface.
+C     ----------
+C
+C     IRET = INTOCN(....)
+C
+C     Input parameters.
+C     -----------------
+C
+C     HICODE   Interpolation code
+C               'N'  No interpolation
+C               'R'  Interpolate only to make grid Regular
+C               'X'  Interpolate in x only
+C               'Y'  Interpolate in y only
+C               'F'  Interpolate in x and y (Full)
+C     HSCODE   Staggered grid code
+C               'D'  Drop every second row ('even' points)
+C               'X'  Augment to standard grid by x interpolation
+C               'Y'  Augment to standard grid by y interpolation
+C               'F'  Augment to standard grid by x-y interpolation
+C     RTOP     Top of output field domain        (degrees/metres/days)
+C     RBOTT    Bottom of output field domain              ( " )
+C     RRIGHT   Right of output field domain               ( " )
+C     RLEFT    Left of output field domain                ( " )
+C     RYRES    Resolution for y-interpolation     ( " )
+C     RXRES    Resolution for x-interpolation     ( " )
+C     KSEC1    Product definition block (+ high res. grid data)
+C     KSEC2    Grid description block
+C     PSEC4    Input data array
+C     KLENP    Size of input array
+C     KLENI    Size of scratch array (and also output array PARRAY)
+C     TARRAY   Scratch array for use during interpolation
+C
+C     Output parameters.
+C     ------------------
+C
+C     Returns 0 if the interpolation is successful, otherwise non-zero.
+C
+C     XARR     x cordinates of data values, or XO,XSTEP,
+C              0.0 for regular spacing
+C     YARR     y cordinates of data values, or YO,YSTEP,
+C              0.0 for regular spacing
+C     NXP      x dimension of output field
+C     NYP      y dimension of output field
+C     PARRAY   output field array
+C     IINTPOL  Flag for interpolation done
+C              = 0 if none,
+C              = 1 if x only,
+C              = 2 if y only,
+C              = 3 if x and y.
+C     ISTAGP   Flag to show processing done for staggered grid:
+C              = 0 if none
+C              = 2 if every second row dropped.
+C              = 3 if interpolated in x only.
+C              = 4 if interpolated in y only.
+C              = 5 if interpolated in x and y.
+C
+C
+C     Method.
+C     -------
+C     Convention is always to have output field array starting in bottom
+C     left hand corner of the field. The positional information for the
+C     data and for the axes is also given starting in the bottom left
+C     hand corner.  This means YARR and PSEC4 must be inverted for the
+C     default grib scanning, which starts in the top left hand corner.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INTLOG  - Logs warning messages.
+C     INTLOGR - Logs warning messages.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     T. Stockdale    ECMWF  23.02.93
+C
+C
+C     Modifications.
+C     --------------
+C
+C     T. Stockdale    ECMWF  20.05.93
+C     Revised for local grib.
+C
+C     J.D.Chambers    ECMWF  04.10.95
+C     Make into a function (remove STOPs).
+C
+C     T. Stockdale    ECMWF  26.09.02
+C     Drop odd points (not even) from E grid, for better land sea mask
+C
+C     T. Stockdale    ECMWF  07.10.02
+C     New standard code (matches latest rd version)
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Parameters
+      INTEGER JPROUTINE, JP_LONG
+      PARAMETER (JPROUTINE = 33300 )
+      PARAMETER (JP_LONG = 3 )
+C
+#include "parim.h"
+C
+C     Subroutine arguments.
+      CHARACTER*1 HICODE,HSCODE
+      REAL RTOP, RBOTT, RRIGHT, RLEFT, RYRES, RXRES
+      INTEGER KSEC1, KSEC2, KLENP, KLENI, NXP, NYP, IINTPOL, ISTAGP
+      DIMENSION KSEC1(*)
+      DIMENSION KSEC2(*)
+      REAL PSEC4, TARRAY, XARR, YARR, PARRAY
+      DIMENSION PSEC4(KLENP)
+      DIMENSION XARR(*), YARR(*)
+      DIMENSION TARRAY(KLENI), PARRAY(KLENI)
+C
+C     Local variables
+      INTEGER NX, NY, KLAT1, KLAT2, KLON1, KXINC, KYINC, ISTAG
+      INTEGER IIRREG, JGCL, J, I, JSKIP, NXLEFT, NXRIGH, IWRAP, JI
+      INTEGER JIP, JJ, IOFFSET, NEWPTS, JN, IPOS, IPOSM, JPOS
+      INTEGER IPOSP1M, JMIN, JMAX, JLEFT, JJP, JJEFF
+      INTEGER NYLEFTI, NYLEFT, NYRIGH
+      REAL XUNIT, YUNIT, RRVAL, RLVAL, RUVAL, RDVAL, RXIRES
+      REAL XSIGN, XRSIGN, XFPREV, XFPOSN, RPOS, RVALL, RVALR 
+      REAL XVAL, XOWEST, XORES, XPSIGN, RVAL, RYIRES, YFPREV, YFPOSN
+      REAL YSIGN, YPSIGN, YRSIGN, RMISS, EPS
+      REAL RVALB, RVALT, XOSOUT
+      LOGICAL LNEAREST
+C
+C     YSIGN    Flag for direction of y co-ords in data:
+C              +1 if co-ords are increasing with index of PSEC4,
+C              -1 if decreasing. 
+C     YPSIGN   Flag for direction of y co-ords in output field:
+C              +1 if co-ords are increasing up the page,
+C              -1 if decreasing. 
+C     YRSIGN   Flag for direction of y co-ords in output field relative
+C              to that in data: YSIGN*YPSIGN 
+C     IINTPOL  Flag for interpolation:
+C              0 = none,
+C              1 = x only,
+C              2 = y only,
+C              3 = x and y
+C     RMISS    Value for missing data
+C     EPS      Tolerance on missing data flag
+C
+C
+      EXTERNAL INTUP, INTDN, LENA, HDEGS, HMETRES
+      INTEGER  INTUP, INTDN, LENA
+      CHARACTER*6 HDEGS, HMETRES
+C
+C     Inline function - tests TRUE if A is a missing value
+      REAL A
+      LOGICAL MISSING
+      MISSING(A) = ( ABS(A-RMISS) .LT. EPS )
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      INTOCN = 0
+C
+C     Set key variables from GRIB header blocks.
+C
+      NX     = KSEC2(2)
+      NY     = KSEC2(3)
+C
+      KLAT1  = KSEC1(62)
+      KLAT2  = KSEC1(64)
+      KLON1  = KSEC1(63)
+      KXINC  = KSEC1(66)
+      KYINC  = KSEC1(67)
+C
+      ISTAG  = KSEC1(69)
+      IIRREG = KSEC1(68)
+      JGCL   = 74+KSEC1(71)+KSEC1(72)
+C
+      IF(KSEC1(60).EQ.1) THEN
+         XUNIT = 1.0/3600.0
+      ELSE
+         XUNIT = 1.0E-6
+      ENDIF
+C
+      IF(KSEC1(61).EQ.2) THEN
+         YUNIT = 1.0E-3
+      ELSE IF(KSEC1(61).EQ.1) THEN
+         YUNIT = 1.0/3600.0
+      ELSE
+         YUNIT = 1.0E-6
+      ENDIF
+C
+      IINTPOL = 0
+      RMISS   = -999.9
+      EPS     = 0.01
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Deal with staggered grid if present.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     The approach in this section is to replace the staggered grid by 
+C     a non-staggered version, either by interpolating the data onto new
+C     grid points or by simply dropping half of the data points. A new 
+C     version of PSEC4 is created, and parts of KSEC1 are modified.
+C     This enables the rest of INTOCN to treat the field in a consistent
+C     manner, BUT it means that KSEC1 and PSEC4 will be altered on
+C     leaving this subroutine (and presently in an inconsistent way).
+C 
+C     The interpolations coded in this section ignore the metric of the
+C     staggered grid, that is they simply average neighbouring values to
+C     find a new grid point value. The more general case can be added 
+C     later if desired.
+C
+C     Note: we prefer to drop odd points and keep even points, because
+C     the standard version of HOPE2 uses an external mask to define the
+C     land-sea mask of its even points. The mask for odd points then has
+C     to be interpolated, which is less accurate, so the plots look
+C     better if the even points are kept.
+C
+C
+      IF(ISTAG.EQ.1) THEN
+C
+C       Drop odd row points ...
+C
+        IF(HSCODE.EQ.'D') THEN
+          ISTAGP = 2
+          NY     = NY/2
+          KYINC  = KYINC*2
+          DO 210 J = 1,NY
+            DO 210 I = 1,NX
+              PSEC4(I+NX*(J-1)) = PSEC4(I+NX*((J-1)*2+1))
+  210     CONTINUE
+C
+C         Reset the grid coordinate list.
+C         Remove the y coordinates of the even rows,
+C         the x coordinates of the even rows, and also the first x
+C         coordinate of an even regular row.
+C
+          IF(IIRREG.EQ.2) THEN
+            KLON1=KSEC1(JGCL+1)
+            DO 212 J = 1,NY
+              KSEC1(JGCL+J) = KSEC1(JGCL+1+2*J)
+  212       CONTINUE
+C
+          ELSE IF(IIRREG.EQ.3) THEN
+            KLON1=KSEC1(JGCL+1)
+            JSKIP = JGCL+NX
+            DO 214 J = 1,NY
+              KSEC1(JSKIP+J) = KSEC1(JSKIP+NX+2*J)
+  214       CONTINUE
+          ENDIF
+C
+C*      Staggered grid: interpolation in x.
+C
+        ELSE IF(HSCODE.EQ.'X') THEN
+          ISTAGP = 3
+          NX     = NX*2
+          KXINC  = KXINC/2
+          IF(((NX*NY).GT.KLENI).OR.((NX*NY).GT.KLENP)) THEN
+            CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+            CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NY)
+            CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENP)
+            CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+            INTOCN = JPROUTINE + 17
+            GOTO 900
+          ENDIF
+C
+C         Expand the data into a temporary array, and then copy back
+C         into PSEC4. Note the treatment of the end points, which
+C         assumes a longitude wrap-round. Remember to mask land points
+C         so that either both points are missing or neither.
+C
+          DO 220 J = 1,NY,2
+            RRVAL = PSEC4(1+(J-1)*NX/2)
+            RLVAL = PSEC4(NX/2+(J-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(1+(J-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(2+(J-1)*NX) = PSEC4(1+(J-1)*NX/2)
+            DO 220 I = 2,NX/2
+              RRVAL = PSEC4(I  +(J-1)*NX/2)
+              RLVAL = PSEC4(I-1+(J-1)*NX/2)
+              IF(MISSING(RRVAL)) RLVAL = RMISS
+              IF(MISSING(RLVAL)) RRVAL = RMISS
+              TARRAY(I*2-1+(J-1)*NX) = (RRVAL+RLVAL)*0.5
+              TARRAY(I*2  +(J-1)*NX) = PSEC4(I  +(J-1)*NX/2)
+  220     CONTINUE
+C
+          DO 222 J = 2,NY,2
+            RRVAL = PSEC4(1+(J-1)*NX/2)
+            RLVAL = PSEC4(NX/2+(J-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(NX+(J-1)*NX) = (RLVAL+RRVAL)*0.5
+            TARRAY(NX-1+(J-1)*NX) = PSEC4(NX/2+(J-1)*NX/2)
+            DO 222 I = 1,NX/2-1
+              RRVAL = PSEC4(I+1+(J-1)*NX/2)
+              RLVAL = PSEC4(I  +(J-1)*NX/2)
+              IF(MISSING(RRVAL)) RLVAL = RMISS
+              IF(MISSING(RLVAL)) RRVAL = RMISS
+              TARRAY(I*2  +(J-1)*NX) = (RLVAL+RRVAL)*0.5
+              TARRAY(I*2-1+(J-1)*NX) = PSEC4(I  +(J-1)*NX/2)
+  222     CONTINUE
+          DO 224 J = 1,NY
+            DO 224 I = 1,NX
+              PSEC4(I+(J-1)*NX) = TARRAY(I+(J-1)*NX)
+  224     CONTINUE
+C
+C         Reset the grid coordinate list if necessary, again making
+C         use of a temporary array. Expand the x-coordinate list,
+C         and remove the x coordinate of the first even point if grid
+C         is regular in x.
+C
+          KLON1 = KSEC1(JGCL+1)
+          IF((IIRREG.EQ.1).OR.(IIRREG.EQ.3)) THEN
+            JSKIP = JGCL
+            DO 226 J = 1,NX/2
+              TARRAY(J*2-1) = KSEC1(JSKIP+J)
+              TARRAY(J*2)   = KSEC1(JSKIP+NX/2+J)
+  226       CONTINUE
+            DO 227 J = 1,NX
+              KSEC1(JSKIP+J) = TARRAY(J)
+  227       CONTINUE
+          ELSE IF((IIRREG.EQ.2)) THEN
+            DO 228 J = 1,NY
+              KSEC1(JGCL+J) = KSEC1(JGCL+1+J)
+  228       CONTINUE
+          ENDIF
+C
+C       Staggered grid: interpolation in y.
+C
+        ELSE IF(HSCODE.EQ.'Y') THEN
+          ISTAGP = 4
+          NX     = NX*2
+          KXINC  = KXINC/2
+          IF(((NX*NY).GT.KLENI).OR.((NX*NY).GT.KLENP)) THEN
+            CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+            CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NY)
+            CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENP)
+            CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+            INTOCN = JPROUTINE + 18
+            GOTO 900
+          ENDIF
+C
+C         Expand the data into a temporary array, and then copy back
+C         into PSEC4. For the polarmost rows, use X interpolation.
+C
+C         First the even rows...
+          DO 230 J = 2,NY-1,2
+            DO 230 I = 1,NX/2
+              RUVAL = PSEC4(I+(J-2)*NX/2)
+              RDVAL = PSEC4(I+(J  )*NX/2)
+              IF(MISSING(RUVAL)) RDVAL = RMISS
+              IF(MISSING(RDVAL)) RUVAL = RMISS
+              TARRAY(I*2  +(J-1)*NX) = (RDVAL+RUVAL)*0.5
+              TARRAY(I*2-1+(J-1)*NX) =  PSEC4(I+(J-1)*NX/2)
+  230     CONTINUE
+          RRVAL = PSEC4(1+(NY-1)*NX/2)
+          RLVAL = PSEC4(NX/2+(NY-1)*NX/2)
+          IF(MISSING(RRVAL)) RLVAL = RMISS
+          IF(MISSING(RLVAL)) RRVAL = RMISS
+          TARRAY(NX+(NY-1)*NX) = (RLVAL+RRVAL)*0.5
+          TARRAY(NX-1+(NY-1)*NX) = PSEC4(NX/2+(NY-1)*NX/2)
+          DO 231 I = 2,NX/2
+            RRVAL = PSEC4(I+1+(NY-1)*NX/2)
+            RLVAL = PSEC4(I+(NY-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(I*2+(NY-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(I*2-1+(NY-1)*NX) = PSEC4(I+(NY-1)*NX/2)
+  231     CONTINUE
+C   
+C         Then the odd rows
+          DO 232 J = 3,NY-1,2
+            RUVAL = PSEC4(NX/2+(J-2)*NX/2)
+            RDVAL = PSEC4(NX/2+(J  )*NX/2)
+            IF(MISSING(RUVAL)) RDVAL = RMISS
+            IF(MISSING(RDVAL)) RUVAL = RMISS
+            TARRAY(1+(J-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(2+(J-1)*NX) = PSEC4(1+(J-1)*NX/2)
+            DO 232 I = 1,NX/2
+              RUVAL = PSEC4(I+(J-2)*NX/2)
+              RDVAL = PSEC4(I+(J  )*NX/2)
+              IF(MISSING(RUVAL)) RDVAL = RMISS
+              IF(MISSING(RDVAL)) RUVAL = RMISS
+              TARRAY(I*2-1+(J-1)*NX) = (RDVAL+RUVAL)*0.5
+              TARRAY(I*2  +(J-1)*NX) =  PSEC4(I+(J-1)*NX/2)
+  232     CONTINUE
+C
+          RRVAL = PSEC4(1+(1-1)*NX/2)
+          RLVAL = PSEC4(NX/2+(1-1)*NX/2)
+          IF(MISSING(RRVAL)) RLVAL = RMISS
+          IF(MISSING(RLVAL)) RRVAL = RMISS
+          TARRAY(1+(1-1)*NX) = (RRVAL+RLVAL)*0.5
+          TARRAY(2+(1-1)*NX) = PSEC4(1+(1-1)*NX/2)
+          DO 233 I = 2,NX/2
+            RRVAL = PSEC4(I+(1-1)*NX/2)
+            RLVAL = PSEC4(I-1+(1-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(I*2-1+(1-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(I*2+(1-1)*NX) = PSEC4(I+(1-1)*NX/2)
+  233     CONTINUE
+
+          DO 234 J = 1,NY
+            DO 234 I = 1,NX
+              PSEC4(I+(J-1)*NX) = TARRAY(I+(J-1)*NX)
+  234     CONTINUE
+C
+C         Reset the grid coordinate list if necessary, again making
+C         use of a temporary array. Expand the x-coordinate list,
+C         and remove the x coordinate of the first even point if
+C         grid is regular in x.
+C
+          IF((IIRREG.EQ.1).OR.(IIRREG.EQ.3)) THEN
+            JSKIP = JGCL
+            DO 235 J = 1,NX/2
+              TARRAY(J*2-1) = KSEC1(JSKIP+J)
+              TARRAY(J*2)   = KSEC1(JSKIP+NX/2+J)
+  235       CONTINUE
+            DO 236 J = 1,NX
+              KSEC1(JSKIP+J) = TARRAY(J)
+  236       CONTINUE
+          ELSE IF((IIRREG.EQ.2)) THEN
+            DO 237 J = 1,NY
+              KSEC1(JGCL+J) = KSEC1(JGCL+1+J)
+  237       CONTINUE
+          ENDIF
+C
+C       Staggered grid: interpolation in x and y.
+C
+        ELSE IF(HSCODE.EQ.'F') THEN
+          ISTAGP = 5
+          CALL INTLOG(JP_ERROR,'INTOCN: Staggered grid opt. F',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: (interpolate x and y)',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: not yet implemented.',JPQUIET)
+          INTOCN = JPROUTINE + 1
+          GOTO 900
+        ELSE
+          CALL INTLOG(JP_ERROR,'INTOCN: Staggered grid option',JPQUIET)
+          CALL INTLOG(JP_ERROR,HSCODE,JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: not known.',JPQUIET)
+          INTOCN = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        ISTAG = 0
+C
+      ELSE
+         ISTAGP = 0
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Set X coordinates and interpolate in X.
+C     ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     The procedure is first to do the x interpolation (if any), and
+C     copy the result into a temporary array. The y interpolation is
+C     done in the next section.
+C
+C     The one complication here is to ensure proper longitude wrap-round
+C     where appropriate.
+C
+C     Some plot systems have difficulty controlling the data within the
+C     viewport. Because of this, and in the interests of efficiency, the
+C     data arrays are truncated even if no interpolation is being done.
+C
+C
+C     No interpolation in X.
+C
+      IF((HICODE.EQ.'N').OR.
+     *   ((HICODE.EQ.'R').AND.((IIRREG.EQ.0).OR.(IIRREG.EQ.2))).OR.
+     *   (HICODE.EQ.'Y') )  THEN
+C
+C       If x is longitude, set parameters up for wrap-round
+C       Wrap-round activated only if longitude range of data > 350 deg.
+C
+        IF((IIRREG.EQ.0).OR.(IIRREG.EQ.2)) THEN
+          RXIRES = KXINC*XUNIT
+          NXLEFT = INTDN((RLEFT-KLON1*XUNIT)/RXIRES+1)
+          NXRIGH = INTUP((RRIGHT-KLON1*XUNIT)/RXIRES+1)
+          NXP    = NXRIGH-NXLEFT+1
+          IF(NXP.LE.1) THEN
+            CALL INTLOG(JP_ERROR,'INTOCN: NXP negative = ',NXP)
+            INTOCN = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          XARR(1) = KLON1*XUNIT+(NXLEFT-1)*RXIRES
+          XARR(2) = KXINC*XUNIT
+          XARR(3) = 0.0
+          IF( (KSEC1(60).EQ.3) .AND. (KXINC*NX*XUNIT.GT.350.0) ) THEN
+            IWRAP = 1
+          ELSE
+            IWRAP = 0
+          ENDIF
+C
+        ELSE IF( (IIRREG.EQ.1) .OR. (IIRREG.EQ.3) ) THEN
+          NXP    = NX
+          NXLEFT = 1
+          JSKIP  = JGCL
+          DO 312 JI = 1,NXP
+            XARR(JI) = KSEC1(JSKIP+JI)*XUNIT
+  312     CONTINUE
+          IF( (KSEC1(60).EQ.3) .AND. (KXINC*NX*XUNIT.GT.350.0) ) THEN
+            IWRAP  = 1
+            INTOCN = JPROUTINE + 4
+            GOTO 900
+          ELSE
+            IWRAP  = 0
+          ENDIF
+        ENDIF
+C
+        IF((NXP*NY).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NY)
+          CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+          INTOCN = JPROUTINE + 5
+          GOTO 900
+        ENDIF
+C
+C       Copy the data into the temporary array
+C
+        DO 318 JI = 1,NXP
+          JIP = JI+NXLEFT-1
+          IF(IWRAP.EQ.1) THEN
+            IF(JIP.LE.0)  JIP = JIP+NX
+            IF(JIP.GT.NX) JIP = JIP-NX
+          ENDIF
+          IF((JIP.GE.1).AND.(JIP.LE.NX)) THEN
+            DO 316 JJ = 1,NY
+              TARRAY(JI+(JJ-1)*NXP) = PSEC4(JIP+(JJ-1)*NX)
+  316       CONTINUE
+          ELSE
+            DO 317 JJ = 1,NY
+              TARRAY(JI+(JJ-1)*NXP) = RMISS
+  317       CONTINUE
+          ENDIF
+  318   CONTINUE
+C
+C       Interpolation from a grid irregular in X.
+C     ---------------------------------------------
+C
+      ELSE IF(((HICODE.EQ.'R').OR.
+     *        (HICODE.EQ.'X').OR.
+     *        (HICODE.EQ.'F')    ).AND.
+     *       ((IIRREG.EQ.1).OR.(IIRREG.EQ.3))  ) THEN
+
+        XPSIGN = SIGN(1.0,(RRIGHT-RLEFT))
+        NXP    = NINT((RRIGHT-RLEFT)/RXRES*XPSIGN)+1
+        IF((NXP*NY).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NY)
+          CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+          INTOCN = JPROUTINE + 6
+          GOTO 900
+        ENDIF
+        RRIGHT  = RLEFT+RXRES*XPSIGN*(NXP-1)
+        XARR(1) = RLEFT
+        XARR(2) = RXRES*XPSIGN
+        XARR(3) = 0.0
+        IINTPOL = IINTPOL+1
+        IOFFSET = JGCL
+        XSIGN   = SIGN(1.0,((KSEC1(IOFFSET+2)-KSEC1(IOFFSET+1))*1.0))
+        XRSIGN  = XSIGN*XPSIGN
+        DO 321 JI = 1,NXP*NY
+          TARRAY(JI) = RMISS
+  321   CONTINUE
+C
+C       Work through the known (irregular) data points.
+C       Calculate the position of the point as a fractional number of
+C       points on the new regular grid
+C       (XFPOSN). If there are any points on the new grid between this
+C       point and the previous one (XFPREV), then set these points by
+C       interpolation between the two known points.
+        XFPREV= (KSEC1(IOFFSET+1)*XUNIT-RLEFT)/RXRES*XPSIGN - 0.5*XRSIGN
+        DO 324 JI = 1,NX
+          XFPOSN = (KSEC1(IOFFSET+JI)*XUNIT-RLEFT)/(RXRES*XPSIGN)
+          NEWPTS = INTDN((XFPOSN*XRSIGN))-INTDN((XFPREV*XRSIGN))
+          DO 323 JN = 1,NEWPTS
+            IPOS = (INTDN(XFPREV*XRSIGN)+JN)*XRSIGN+1
+            RPOS = (IPOS-1)*1.0
+            IF((IPOS.GE.1).AND.(IPOS.LE.NXP)) THEN
+              DO 322 JJ = 1,NY
+                RVALL = PSEC4(JI-1+NX*(JJ-1))
+                RVALR = PSEC4(JI+NX*(JJ-1))
+                IF(.NOT.MISSING(RVALL) .AND. .NOT.MISSING(RVALR) ) THEN
+                  XVAL = (XFPOSN-RPOS)/(XFPOSN-XFPREV)*RVALL
+     *                      +(RPOS-XFPREV)/(XFPOSN-XFPREV)*RVALR
+                ELSE
+                  XVAL = RMISS
+                ENDIF
+                TARRAY(IPOS+NXP*(JJ-1)) = XVAL
+  322         CONTINUE
+            ENDIF
+  323     CONTINUE
+          XFPREV = XFPOSN
+  324   CONTINUE
+
+C
+C     Interpolation from a grid regular in X.
+C
+      ELSE IF(((HICODE.EQ.'X').OR.(HICODE.EQ.'F')).AND.
+     *       ((IIRREG.EQ.0).OR.(IIRREG.EQ.2))    ) THEN
+
+        XPSIGN = SIGN(1.0,(RRIGHT-RLEFT))
+        NXP    = NINT((RRIGHT-RLEFT)/RXRES*XPSIGN)+1
+        IF((NXP*NY).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NY)
+          CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+          INTOCN = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+        RRIGHT  = RLEFT+RXRES*XPSIGN*(NXP-1)
+        XARR(1) = RLEFT
+        XARR(2) = RXRES*XPSIGN
+        XARR(3) = 0.0
+        IINTPOL = IINTPOL+1
+C
+C       Work through the new regular grid points. Calculate the position
+C       of the point as a fractional number of points on the old grid.
+C       Use this fractional number to estimate the value of the field
+C       at the new point
+C
+C       (Note that just to the right of the first point, RPOS will be
+C        eg 1.1, not 0.1)
+C
+        DO 330 JI = 1,NXP*NY
+          TARRAY(JI) = RMISS
+  330   CONTINUE
+C
+        XOWEST = KLON1*XUNIT
+        XORES  = KXINC*XUNIT
+        DO 3320 JI = 1,NXP
+          RPOS = (RLEFT+(JI-1)*RXRES-XOWEST)/XORES + 1
+          IPOS = INTDN(RPOS)
+C
+C         Check for out of bounds, and set to zero unless x is
+C         longitude, in which case attempt to wrap round.
+          IF( (IPOS.GE.1) .AND. ((IPOS+1).LE.NX) ) THEN
+            DO 3310 JJ = 1,NY
+              RVALL = PSEC4(IPOS+(JJ-1)*NX)
+              RVALR = PSEC4(IPOS+1+(JJ-1)*NX)
+              IF(.NOT. MISSING(RVALL) .AND. .NOT. MISSING(RVALR) ) THEN
+                RVAL = (IPOS+1-RPOS)*RVALL + (RPOS-IPOS)*RVALR
+C
+C             Do not set to missing if there is good data close by.
+              ELSEIF( (.NOT.MISSING(RVALL)) .AND.
+     X                ((IPOS+1-RPOS).GT.0.5) ) THEN
+                RVAL = RVALL
+              ELSEIF( (.NOT. MISSING(RVALR)).AND.
+     X                ((RPOS-IPOS).GT.0.5)) THEN
+                RVAL = RVALR
+              ELSE
+                RVAL = RMISS
+              ENDIF
+              TARRAY(JI+(JJ-1)*NXP) = RVAL
+ 3310       CONTINUE
+C
+          ELSEIF( KSEC1(60).EQ.JP_LONG ) THEN
+C
+C           This works only if the longitude points are equally spaced
+C           around the globe, ie the gap between the first and last
+C           points is equal to the gap between any other pair of
+C           adjacent points.
+C
+            IPOSM   = MOD(IPOS,NX)
+            IPOSP1M = MOD((IPOS+1),NX)
+            IF(IPOSM.LE.0)   IPOSM   = IPOSM+NX
+            IF(IPOSP1M.LE.0) IPOSP1M = IPOSP1M+NX
+            DO 3313 JJ = 1,NY
+              RVALL = PSEC4(IPOSM+(JJ-1)*NX)
+              RVALR = PSEC4(IPOSP1M+(JJ-1)*NX)
+              IF(.NOT. MISSING(RVALL) .AND. .NOT. MISSING(RVALR) ) THEN
+                RVAL = (IPOS+1-RPOS)*RVALL + (RPOS-IPOS)*RVALR
+C
+C             Do not set to missing if there is good data close by.
+              ELSEIF( (.NOT.MISSING(RVALL)) .AND.
+     X               ((IPOS+1-RPOS).GT.0.5) ) THEN
+                RVAL = RVALL
+              ELSEIF( (.NOT. MISSING(RVALR)).AND.
+     X                ((RPOS-IPOS).GT.0.5) ) THEN
+                RVAL = RVALR
+              ELSE
+                RVAL = RMISS
+              ENDIF
+              IF(RVAL.GT.1E6) THEN
+                RVAL = RMISS
+              ENDIF
+              TARRAY(JI+(JJ-1)*NXP) = RVAL
+ 3313       CONTINUE
+          ELSE
+            DO 3316 JJ = 1,NY
+              TARRAY(JI+(JJ-1)*NXP) = RMISS
+ 3316       CONTINUE
+          ENDIF
+ 3320    CONTINUE
+C
+      ELSE
+        CALL INTLOG(JP_ERROR,'INTOCN: Error in logic.',JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCN: HICODE = ',JPQUIET)
+        CALL INTLOG(JP_ERROR,HICODE,JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCN: IIRREG = ',IIRREG)
+        INTOCN = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 4 . Set Y coordinates and interpolate in Y.
+C     ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     The x-interpolated field in the temporary array is interpolated in
+C     y into the final output field array. Note that the field and the
+C     coordinate array are both inverted in the y direction during this
+C     section.
+C
+C     Some plot systems have difficulty controlling the data within the
+C     viewport. Because of this, and in the interests of efficiency, the
+C     data arrays are truncated even if no interpolation is being done.
+C
+C
+C     No interpolation in Y.
+C
+      IF((HICODE.EQ.'N').OR.
+     *   ((HICODE.EQ.'R').AND.((IIRREG.EQ.0).OR.(IIRREG.EQ.1))).OR.
+     *   (HICODE.EQ.'X') )  THEN
+C
+C       If y is longitude, set parameters up for wrap-round
+C       Wrap-round activated only if longitude range of data > 350 deg.
+C
+        IF((IIRREG.EQ.0).OR.(IIRREG.EQ.1)) THEN
+C
+C         Remember to invert calc of NYP if RYIRES -ve ... 22.04.94
+          RYIRES =  KYINC*YUNIT
+          IF(RYIRES.GT.0) THEN
+            NYLEFT = INTDN((RBOTT-KLAT1*YUNIT)/RYIRES+1)
+            NYRIGH = INTUP((RTOP-KLAT1*YUNIT)/RYIRES+1)
+            NYP = NYRIGH-NYLEFT+1
+          ELSE
+            NYRIGH = INTUP((RBOTT-KLAT1*YUNIT)/RYIRES+1)
+            NYLEFT = INTDN((RTOP-KLAT1*YUNIT)/RYIRES+1)
+            NYP = NYRIGH-NYLEFT+1
+          ENDIF
+          IF(NYP.LE.1) THEN
+            CALL INTLOG(JP_ERROR,'INTOCN: NYP negative = ',NYP)
+            INTOCN = JPROUTINE + 9
+            GOTO 900
+          ENDIF
+C
+C         Remember to invert yarr coordinates ... 06.07.93
+          YARR(1) = KLAT1*YUNIT+(NYRIGH-1)*RYIRES
+          YARR(2) = -KYINC*YUNIT
+          YARR(3) = 0.0
+C
+C         Remember NYLEFT is relative to the inverted array ... 19.01.96
+C         ... but be careful to do this exactly.   01.04.97
+          NYLEFTI=NYLEFT
+          NYLEFT=NY+1-NYRIGH
+          NYRIGH=NY+1-NYLEFTI
+C
+          IF((KSEC1(61).EQ.3) .AND. (KYINC*NY*YUNIT.GT.350.0) ) THEN
+            IWRAP = 1
+          ELSE
+            IWRAP = 0
+          ENDIF
+C
+        ELSE IF(IIRREG.EQ.2) THEN
+          IOFFSET = JGCL
+          YPSIGN  = SIGN(1.0,(RTOP-RBOTT))
+          YSIGN   = SIGN(1.0,((KSEC1(IOFFSET+2)-KSEC1(IOFFSET+1))*1.0))
+          YRSIGN  = YSIGN*YPSIGN
+          JMIN    = 0
+          DO 410 JI = 1,NY
+            YARR(JI) = KSEC1(IOFFSET+(NY+1-JI))*YUNIT
+            IF(YRSIGN.LT.0.0) THEN
+              IF((YARR(JI)-RBOTT)*YSIGN .GT. 0.0) JMIN = JI
+              IF((YARR(JI)-RTOP )*YSIGN .GT. 0.0) JMAX = JI+1
+            ELSE
+              IF((YARR(JI)-RTOP )*YSIGN .GT. 0.0) JMIN = JI
+              IF((YARR(JI)-RBOTT)*YSIGN .GT. 0.0) JMAX = JI+1
+            ENDIF
+  410     CONTINUE
+          IF(JMIN.EQ.0) THEN
+            CALL INTLOG(JP_ERROR,'INTOCN: Domain out of range.',JPQUIET)
+            CALL INTLOGR(JP_ERROR,'INTOCN: Requested Y = ',RBOTT)
+            CALL INTLOGR(JP_ERROR,'INTOCN: Data limit of Y = ',YARR(1))
+            INTOCN = JPROUTINE + 10
+            GOTO 900
+          ENDIF
+          IF(JMAX.EQ.NY+1) THEN
+            CALL INTLOG(JP_ERROR,'INTOCN: Domain out of range.',JPQUIET)
+            CALL INTLOGR(JP_ERROR,'INTOCN: Requested Y = ',RTOP)
+            CALL INTLOGR(JP_ERROR,'INTOCN: Data limit of Y = ',YARR(NY))
+            INTOCN = JPROUTINE + 11
+            GOTO 900
+          ENDIF
+C 
+          NYP    = (JMAX-JMIN)+1
+          NYLEFT = JMIN
+          DO 411 JI = 1,NYP
+            YARR(JI) = YARR(JI+(NYLEFT-1))
+  411     CONTINUE
+C
+          IF((KSEC1(61).EQ.3) .AND. (KYINC*NY*YUNIT.GT.350.0) ) THEN
+            IWRAP = 1
+            CALL INTLOG(JP_ERROR,'INTOCN: Irregular wrap-round',JPQUIET)
+            CALL INTLOG(JP_ERROR,'INTOCN: not yet implemented.',JPQUIET)
+            INTOCN = JPROUTINE + 12
+            GOTO 900
+          ELSE
+            IWRAP = 0
+          ENDIF
+C
+        ELSE IF(IIRREG.EQ.3) THEN
+          NYP    = NY
+          NYLEFT = 1
+          JSKIP  = JGCL+NX
+          DO 412 JI = 1,NYP
+            YARR(JI) = KSEC1(JSKIP+(NY+1-JI))*YUNIT
+  412     CONTINUE
+          IF((KSEC1(61).EQ.3) .AND. (KYINC*NY*YUNIT.GT.350.0) ) THEN
+            IWRAP = 1
+            CALL INTLOG(JP_ERROR,'INTOCN: Irregular wrap-round',JPQUIET)
+            CALL INTLOG(JP_ERROR,'INTOCN: not yet implemented.',JPQUIET)
+            INTOCN = JPROUTINE + 13
+            GOTO 900
+          ELSE
+            IWRAP = 0
+          ENDIF
+        ENDIF
+C
+        IF((NXP*NYP).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NYP)
+          CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+          INTOCN = JPROUTINE + 14
+          GOTO 900
+        ENDIF
+C
+C       Copy the data into the temporary array, and invert it at
+C       same time.
+C       Note: NYLEFT is the starting index in the inverted data array.
+C
+c       DO 416 JJ = 1,NYP
+c         DO 414 JI = 1,NXP
+c           PARRAY(JI+(JJ-1)*NXP) = TARRAY(JI+(NY-JJ)*NXP)
+c 414     CONTINUE
+c 416   CONTINUE
+C
+        DO 418 JJ = 1,NYP
+cc        JJP   = JJ+NYLEFT-1
+          JLEFT = NY-(NYLEFT-1)
+          JJP   = JLEFT-JJ+1
+          IF(IWRAP.EQ.1) THEN
+            IF(JJP.LE.0)  JJP = JJP+NY
+            IF(JJP.GT.NY) JJP = JJP-NY
+          ENDIF
+          IF((JJP.GE.1).AND.(JJP.LE.NY)) THEN
+            DO 416 JI = 1,NXP
+cc            PARRAY(JI+(NYP-JJ)*NXP) = TARRAY(JI+(JJP-1)*NXP)
+              PARRAY(JI+(JJ-1)*NXP)   = TARRAY(JI+(JJP-1)*NXP)
+  416       CONTINUE
+          ELSE
+            DO 417 JI = 1,NXP
+              PARRAY(JI+(NYP-JJ)*NXP) = RMISS
+  417       CONTINUE
+          ENDIF
+  418   CONTINUE
+C
+C     Interpolation from a grid irregular in Y.
+C
+      ELSE IF(((HICODE.EQ.'R').OR.
+     *        (HICODE.EQ.'Y').OR.
+     *        (HICODE.EQ.'F')    ).AND.
+     *       ((IIRREG.EQ.2).OR.(IIRREG.EQ.3))  ) THEN
+        YPSIGN = SIGN(1.0,(RTOP-RBOTT))
+        IF( YPSIGN.GT.0 ) THEN
+          NYP = NINT((RTOP-RBOTT+ 0.0001)/RYRES)+1 
+        ELSE
+          NYP = NINT((RBOTT-RTOP + 0.0001)/RYRES)+1 
+        ENDIF
+Cjdc    NYP = NINT((RTOP-RBOTT)/RYRES*YPSIGN)+1
+        IF((NXP*NYP).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NYP)
+          CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+          INTOCN = JPROUTINE + 15
+          GOTO 900
+        ENDIF
+        RTOP    = RBOTT+RYRES*YPSIGN*(NYP-1)
+        YARR(1) = RBOTT
+        YARR(2) = RYRES*YPSIGN
+        YARR(3) = 0.0
+        IINTPOL = IINTPOL+2
+        IF(IIRREG.EQ.2) THEN
+            IOFFSET = JGCL
+        ELSE IF(IIRREG.EQ.3) THEN
+            IOFFSET = JGCL+NX
+        ENDIF
+        YSIGN  = SIGN(1.0,((KSEC1(IOFFSET+2)-KSEC1(IOFFSET+1))*1.0))
+        YRSIGN = YSIGN*YPSIGN
+        DO 420 JI = 1,NXP*NYP
+          PARRAY(JI) = RMISS
+  420   CONTINUE
+C
+C       Work through the known (irregular) data points. Calculate the
+C       position of the point as a fractional number of points on the
+C       new regular grid (YFPOSN). If there are any points on the new
+C       grid between this point and the previous one (YFPREV), then set
+C       these points by interpolation between the two known points.
+C       Check that the points are in range.
+C       Note that we are willing to overlap slightly at the start, but
+C       must fiddle the array arguments to do this.
+C
+        YFPREV= (KSEC1(IOFFSET+1)*YUNIT-RBOTT)/RYRES*YPSIGN - 0.5*YRSIGN
+        DO 428 JJ = 1,NY
+          YFPOSN = (KSEC1(IOFFSET+JJ)*YUNIT-RBOTT)/RYRES*YPSIGN
+          NEWPTS =  INTDN((YFPOSN*YRSIGN)) -INTDN((YFPREV*YRSIGN))
+C
+C         INT truncates toward zero;
+C         INTDN truncates downwards in all cases
+C
+          DO 426 JN = 1,NEWPTS
+            IPOS = (INTDN(YFPREV*YRSIGN)+JN)*YRSIGN+1
+            RPOS = (IPOS-1)*1.0
+            IF((IPOS.GE.1).AND.(IPOS.LE.NYP)) THEN
+              JJEFF = JJ
+              IF(JJ.EQ.1) JJEFF = 2
+              DO 424 JI = 1,NXP
+                RVALL = TARRAY(JI+NXP*(JJEFF-2))
+                RVALR = TARRAY(JI+NXP*(JJ-1))
+                IF(.NOT.MISSING(RVALL) .AND. .NOT.MISSING(RVALR) ) THEN
+                  XVAL = (YFPOSN-RPOS)/(YFPOSN-YFPREV)*RVALL
+     *                      +(RPOS-YFPREV)/(YFPOSN-YFPREV)*RVALR
+                ELSE
+                  XVAL = RMISS
+                ENDIF
+                PARRAY(JI+NXP*(IPOS-1)) = XVAL
+  424         CONTINUE
+            ENDIF
+  426     CONTINUE
+          YFPREV = YFPOSN
+  428   CONTINUE
+C
+C
+C
+C     4.3  INTERPOLATION FROM A GRID REGULAR IN Y
+C     -------------------------------------------
+C
+      ELSEIF(((HICODE.EQ.'Y').OR.(HICODE.EQ.'F')).AND.
+     *       ((IIRREG.EQ.0).OR.(IIRREG.EQ.1))    ) THEN
+
+            LNEAREST=.TRUE.
+
+            YPSIGN=SIGN(1.,(RTOP-RBOTT))
+            NYP=NINT((RTOP-RBOTT)/RYRES*YPSIGN)+1
+            IF((NXP*NYP).GT.KLENI) THEN
+              CALL INTLOG(JP_ERROR,'INTOCN: Array too small.',JPQUIET)
+              CALL INTLOG(JP_ERROR,'INTOCN: Required = ',NXP*NYP)
+              CALL INTLOG(JP_ERROR,'INTOCN: Available = ',KLENI)
+              INTOCN = JPROUTINE + 19
+              GOTO 900
+            ENDIF
+            RTOP=RBOTT+RYRES*(NYP-1)*YPSIGN
+            YARR(1)=RBOTT
+            YARR(2)=RYRES*YPSIGN
+            YARR(3)=0.0
+C  Work through the new regular grid points. Calculate the position of
+C  the point as a fractional number of points on the old grid. Use this
+C  fractional number to estimate the value of the field at the new point
+            IINTPOL=IINTPOL+2
+            DO 335 JI=1,NXP*NYP
+               PARRAY(JI)=RMISS
+  335       CONTINUE
+            XOSOUT=KLAT1*YUNIT
+            XORES =KYINC*YUNIT
+            DO 3370 JJ=1,NYP
+               RPOS=(RBOTT+(JJ-1)*RYRES*YPSIGN-XOSOUT)/XORES + 1
+               JPOS=INTDN(RPOS)
+C  Check for out of bounds, and set to missing if this is the case
+               IF((JPOS.GE.1).AND.(JPOS+1.LE.NY)) THEN
+                 DO 3360 JI=1,NXP
+                    RVALB = TARRAY(JI+(JPOS-1)*NXP)
+                    RVALT = TARRAY(JI+(JPOS+1-1)*NXP)
+                    IF(.NOT.MISSING(RVALB).AND.
+     *                 .NOT.MISSING(RVALT)       ) THEN
+                       RVAL=(JPOS+1-RPOS)*RVALB
+     *                      +(RPOS-JPOS)*RVALT
+                    ELSEIF(LNEAREST) THEN
+                      IF((.NOT.MISSING(RVALB)) .AND.
+     *                   ((JPOS+1-RPOS).GT.0.5)  ) THEN
+                        RVAL=RVALB
+                      ELSEIF((.NOT.MISSING(RVALT)).AND.
+     *                   ((RPOS-JPOS).GT.0.5)  ) THEN
+                        RVAL=RVALT
+                      ELSE
+                        RVAL=RMISS
+                      ENDIF
+                    ELSE
+                      RVAL=RMISS
+                    ENDIF
+                    PARRAY(JI+(JJ-1)*NXP)=RVAL
+ 3360            CONTINUE
+               ELSE
+                  DO 3365 JI=1,NXP
+                     PARRAY(JI+(JJ-1)*NXP)=RMISS
+ 3365             CONTINUE
+               ENDIF
+ 3370       CONTINUE
+C
+C
+      ELSE
+        CALL INTLOG(JP_ERROR,'INTOCN: Error in logic.',JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCN: HICODE = ',JPQUIET)
+        CALL INTLOG(JP_ERROR,HICODE,JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCN: IIRREG = ',IIRREG)
+        INTOCN = JPROUTINE + 16
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Return.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/interpolation/intocnu.F b/interpolation/intocnu.F
new file mode 100755
index 0000000..badc9f9
--- /dev/null
+++ b/interpolation/intocnu.F
@@ -0,0 +1,1088 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTOCNU(HICODE,HSCODE,RTOP,RBOTT,RRIGHT,RLEFT,
+     *            RYRES,RXRES,
+     *            INOCEAN,KLENP,KLENI,TARRAY,
+     *            XARR,YARR,NXP,NYP,PARRAY,IINTPOL,ISTAGP)
+C
+C---->
+C****  INTOCNU  - interpolates grib ocean data
+C
+C
+C     PURPOSE
+C     -------
+C     Interpolates data to new grid, according to instructions.
+C     Missing data is flagged with -999.9; this information is
+C     passed to the new field.
+C
+C
+C     Interface.
+C     ----------
+C
+C     IRET = INTOCNU(....)
+C
+C     Input parameters.
+C     -----------------
+C
+C     HICODE   Interpolation code
+C               'N'  No interpolation
+C               'R'  Interpolate only to make grid Regular
+C               'X'  Interpolate in x only
+C               'Y'  Interpolate in y only
+C               'F'  Interpolate in x and y (Full)
+C     HSCODE   Staggered grid code
+C               'D'  Drop every second row ('even' points)
+C               'X'  Augment to standard grid by x interpolation
+C               'Y'  Augment to standard grid by y interpolation
+C               'F'  Augment to standard grid by x-y interpolation
+C     RTOP     Top of output field domain        (degrees/metres/days)
+C     RBOTT    Bottom of output field domain              ( " )
+C     RRIGHT   Right of output field domain               ( " )
+C     RLEFT    Left of output field domain                ( " )
+C     RYRES    Resolution for y-interpolation     ( " )
+C     RXRES    Resolution for x-interpolation     ( " )
+C     KSEC1    Product definition block (+ high res. grid data)
+C     INOCEAN    Input data array
+C     KLENP    Size of input array
+C     KLENI    Size of scratch array (and also output array PARRAY)
+C     TARRAY   Scratch array for use during interpolation
+C
+C     Output parameters.
+C     ------------------
+C
+C     Returns 0 if the interpolation is successful, otherwise non-zero.
+C
+C     XARR     x cordinates of data values, or XO,XSTEP,
+C              0.0 for regular spacing
+C     YARR     y cordinates of data values, or YO,YSTEP,
+C              0.0 for regular spacing
+C     NXP      x dimension of output field
+C     NYP      y dimension of output field
+C     PARRAY   output field array
+C     IINTPOL  Flag for interpolation done
+C              = 0 if none,
+C              = 1 if x only,
+C              = 2 if y only,
+C              = 3 if x and y.
+C     ISTAGP   Flag to show processing done for staggered grid:
+C              = 0 if none
+C              = 2 if every second row dropped.
+C              = 3 if interpolated in x only.
+C              = 4 if interpolated in y only.
+C              = 5 if interpolated in x and y.
+C
+C
+C     Method.
+C     -------
+C     Convention is always to have output field array starting in bottom
+C     left hand corner of the field. The positional information for the
+C     data and for the axes is also given starting in the bottom left
+C     hand corner.  This means YARR and INOCEAN must be inverted for the
+C     default grib scanning, which starts in the top left hand corner.
+C
+C
+C     Externals.
+C     ----------
+C
+C     INTLOG  - Logs warning messages.
+C     INTLOGR - Logs warning messages.
+C
+C
+C     Reference.
+C     ----------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     T. Stockdale    ECMWF  23.02.93
+C
+C
+C     Modifications.
+C     --------------
+C
+C     T. Stockdale    ECMWF  20.05.93
+C     Revised for local grib.
+C
+C     J.D.Chambers    ECMWF  04.10.95
+C     Make into a function (remove STOPs).
+C
+C     T. Stockdale    ECMWF  26.09.02
+C     Drop odd points (not even) from E grid, for better land sea mask
+C
+C     T. Stockdale    ECMWF  07.10.02
+C     New standard code (matches latest rd version)
+C
+C----<
+C     ------------------------------------------------------------------
+C*    Section 0 . Definition of variables. Data statements.
+C     ------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+C     Parameters
+      INTEGER JPROUTINE, JP_LONG
+      PARAMETER (JPROUTINE = 33300 )
+      PARAMETER (JP_LONG = 3 )
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Subroutine arguments.
+      CHARACTER*1 HICODE,HSCODE
+      REAL RTOP, RBOTT, RRIGHT, RLEFT, RYRES, RXRES
+      INTEGER KLENP, KLENI, NXP, NYP, IINTPOL, ISTAGP
+      REAL INOCEAN, TARRAY, XARR, YARR, PARRAY
+      DIMENSION INOCEAN(*)
+      DIMENSION XARR(*), YARR(*)
+      DIMENSION TARRAY(KLENI), PARRAY(KLENI)
+C
+C     Local variables
+      INTEGER NX, NY, KLAT1, KLAT2, KLON1, KXINC, KYINC, ISTAG
+      INTEGER IIRREG, JGCL, J, I, JSKIP, NXLEFT, NXRIGH, IWRAP, JI
+      INTEGER JIP, JJ, IOFFSET, NEWPTS, JN, IPOS, IPOSM, JPOS
+      INTEGER IPOSP1M, JMIN, JMAX, JLEFT, JJP, JJEFF
+      INTEGER NYLEFTI, NYLEFT, NYRIGH
+      REAL XUNIT, YUNIT, RRVAL, RLVAL, RUVAL, RDVAL, RXIRES
+      REAL XSIGN, XRSIGN, XFPREV, XFPOSN, RPOS, RVALL, RVALR 
+      REAL XVAL, XOWEST, XORES, XPSIGN, RVAL, RYIRES, YFPREV, YFPOSN
+      REAL YSIGN, YPSIGN, YRSIGN, RMISS, EPS
+      REAL RVALB, RVALT, XOSOUT
+      LOGICAL LNEAREST
+C
+C     YSIGN    Flag for direction of y co-ords in data:
+C              +1 if co-ords are increasing with index of INOCEAN
+C              -1 if decreasing. 
+C     YPSIGN   Flag for direction of y co-ords in output field:
+C              +1 if co-ords are increasing up the page,
+C              -1 if decreasing. 
+C     YRSIGN   Flag for direction of y co-ords in output field relative
+C              to that in data: YSIGN*YPSIGN 
+C     IINTPOL  Flag for interpolation:
+C              0 = none,
+C              1 = x only,
+C              2 = y only,
+C              3 = x and y
+C     RMISS    Value for missing data
+C     EPS      Tolerance on missing data flag
+C
+C
+      EXTERNAL INTUP, INTDN, LENA, HDEGS, HMETRES
+      INTEGER  INTUP, INTDN, LENA
+      CHARACTER*6 HDEGS, HMETRES
+C
+C     Inline function - tests TRUE if A is a missing value
+      REAL A
+      LOGICAL MISSING
+      MISSING(A) = ( ABS(RMISS-A) .LT. EPS )
+C
+C     ------------------------------------------------------------------
+C*    Section 1 . Set initial values.
+C     ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      INTOCNU = 0
+C
+C     Set key variables from GRIB header blocks.
+C
+      NX     = NIWE
+      NY     = NINS
+C
+cs Coordinate 4 of first grid point
+      KLAT1  = NIOCO4F
+cs Coordinate 4 of last grid point
+      KLAT2  = NIOCO4L
+cs Coordinate 3 of first grid point
+      KLON1  = NIOCO3F
+cs 	 i-increment
+      KXINC  = NIOIINC
+cs 	 j-increment
+      KYINC  = NIOJINC
+C
+cs 	 Flag for normal or staggered grid
+      ISTAG  = NIONOST
+cs 	 Flag for irregular grid coordinate list
+      IIRREG = NIOIRGR
+cs 71 Number of entries in the horizontal coordinate definition
+cs 72 Number of entries in mixed coordinate definition
+cs      JGCL   = 74+KSEC1(71)+KSEC1(72)
+         JGCL = 0
+C
+cs Coordinate 3 flag (x-axis, usually longitude).
+      IF(NIOCO3.EQ.1) THEN
+         XUNIT = 1.0/3600.0
+      ELSE
+         XUNIT = 1.0E-6
+      ENDIF
+C
+cs Coordinate 4 flag (y-axis, usually latitude).
+      IF(NIOCO4.EQ.2) THEN
+         YUNIT = 1.0E-3
+      ELSE IF(NIOCO4.EQ.1) THEN
+         YUNIT = 1.0/3600.0
+      ELSE
+         YUNIT = 1.0E-6
+      ENDIF
+C
+      IINTPOL = 0
+cs      RMISS   = 9999.0
+cs set it from grib_api
+      RMISS   = RMISSGV
+      EPS     = 0.1
+cs      EPS     = 0.01
+C
+C     ------------------------------------------------------------------
+C*    Section 2 . Deal with staggered grid if present.
+C     ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     The approach in this section is to replace the staggered grid by 
+C     a non-staggered version, either by interpolating the data onto new
+C     grid points or by simply dropping half of the data points. A new 
+C     version of INOCEAN is created, and parts of KSEC1 are modified.
+C     This enables the rest of INTOCNU to treat the field in a consistent
+C     manner, BUT it means that KSEC1 and INOCEAN will be altered on
+C     leaving this subroutine (and presently in an inconsistent way).
+C 
+C     The interpolations coded in this section ignore the metric of the
+C     staggered grid, that is they simply average neighbouring values to
+C     find a new grid point value. The more general case can be added 
+C     later if desired.
+C
+C     Note: we prefer to drop odd points and keep even points, because
+C     the standard version of HOPE2 uses an external mask to define the
+C     land-sea mask of its even points. The mask for odd points then has
+C     to be interpolated, which is less accurate, so the plots look
+C     better if the even points are kept.
+C
+C
+      IF(ISTAG.EQ.1) THEN
+C
+C       Drop odd row points ...
+C
+        IF(HSCODE.EQ.'D') THEN
+          ISTAGP = 2
+          NY     = NY/2
+          KYINC  = KYINC*2
+          DO 210 J = 1,NY
+            DO 210 I = 1,NX
+              INOCEAN(I+NX*(J-1)) = INOCEAN(I+NX*((J-1)*2+1))
+  210     CONTINUE
+C
+C         Reset the grid coordinate list.
+C         Remove the y coordinates of the even rows,
+C         the x coordinates of the even rows, and also the first x
+C         coordinate of an even regular row.
+C
+cs  Grid coordinate list
+          IF(IIRREG.EQ.2) THEN
+            KLON1 = OCCOOR(1)
+            DO 212 J = 1,NY
+              OCCOOR(J) = OCCOOR(1+2*J)
+  212       CONTINUE
+C
+          ELSE IF(IIRREG.EQ.3) THEN
+            KLON1 = OCCOOR(1)
+            JSKIP = NX
+            DO 214 J = 1,NY
+              OCCOOR(JSKIP+J) = OCCOOR(JSKIP+NX+2*J)
+  214       CONTINUE
+          ENDIF
+C
+C*      Staggered grid: interpolation in x.
+C
+        ELSE IF(HSCODE.EQ.'X') THEN
+          ISTAGP = 3
+          NX     = NX*2
+          KXINC  = KXINC/2
+          IF(((NX*NY).GT.KLENI).OR.((NX*NY).GT.KLENP)) THEN
+            CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+            CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NY)
+            CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENP)
+            CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+            INTOCNU = JPROUTINE + 17
+            GOTO 900
+          ENDIF
+C
+C         Expand the data into a temporary array, and then copy back
+C         into INOCEAN. Note the treatment of the end points, which
+C         assumes a longitude wrap-round. Remember to mask land points
+C         so that either both points are missing or neither.
+C
+          DO 220 J = 1,NY,2
+            RRVAL = INOCEAN(1+(J-1)*NX/2)
+            RLVAL = INOCEAN(NX/2+(J-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(1+(J-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(2+(J-1)*NX) = INOCEAN(1+(J-1)*NX/2)
+            DO 220 I = 2,NX/2
+              RRVAL = INOCEAN(I  +(J-1)*NX/2)
+              RLVAL = INOCEAN(I-1+(J-1)*NX/2)
+              IF(MISSING(RRVAL)) RLVAL = RMISS
+              IF(MISSING(RLVAL)) RRVAL = RMISS
+              TARRAY(I*2-1+(J-1)*NX) = (RRVAL+RLVAL)*0.5
+              TARRAY(I*2  +(J-1)*NX) = INOCEAN(I  +(J-1)*NX/2)
+  220     CONTINUE
+C
+          DO 222 J = 2,NY,2
+            RRVAL = INOCEAN(1+(J-1)*NX/2)
+            RLVAL = INOCEAN(NX/2+(J-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(NX+(J-1)*NX) = (RLVAL+RRVAL)*0.5
+            TARRAY(NX-1+(J-1)*NX) = INOCEAN(NX/2+(J-1)*NX/2)
+            DO 222 I = 1,NX/2-1
+              RRVAL = INOCEAN(I+1+(J-1)*NX/2)
+              RLVAL = INOCEAN(I  +(J-1)*NX/2)
+              IF(MISSING(RRVAL)) RLVAL = RMISS
+              IF(MISSING(RLVAL)) RRVAL = RMISS
+              TARRAY(I*2  +(J-1)*NX) = (RLVAL+RRVAL)*0.5
+              TARRAY(I*2-1+(J-1)*NX) = INOCEAN(I  +(J-1)*NX/2)
+  222     CONTINUE
+          DO 224 J = 1,NY
+            DO 224 I = 1,NX
+              INOCEAN(I+(J-1)*NX) = TARRAY(I+(J-1)*NX)
+  224     CONTINUE
+C
+C         Reset the grid coordinate list if necessary, again making
+C         use of a temporary array. Expand the x-coordinate list,
+C         and remove the x coordinate of the first even point if grid
+C         is regular in x.
+C
+          KLON1 = OCCOOR(1)
+          IF((IIRREG.EQ.1).OR.(IIRREG.EQ.3)) THEN
+            JSKIP = 0
+            DO 226 J = 1,NX/2
+              TARRAY(J*2-1) = OCCOOR(JSKIP+J)
+              TARRAY(J*2)   = OCCOOR(JSKIP+NX/2+J)
+  226       CONTINUE
+            DO 227 J = 1,NX
+              OCCOOR(JSKIP+J) = TARRAY(J)
+  227       CONTINUE
+          ELSE IF((IIRREG.EQ.2)) THEN
+            DO 228 J = 1,NY
+              OCCOOR(J) = OCCOOR(1+J)
+  228       CONTINUE
+          ENDIF
+C
+C       Staggered grid: interpolation in y.
+C
+        ELSE IF(HSCODE.EQ.'Y') THEN
+          ISTAGP = 4
+          NX     = NX*2
+          KXINC  = KXINC/2
+          IF(((NX*NY).GT.KLENI).OR.((NX*NY).GT.KLENP)) THEN
+            CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+            CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NY)
+            CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENP)
+            CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+            INTOCNU = JPROUTINE + 18
+            GOTO 900
+          ENDIF
+C
+C         Expand the data into a temporary array, and then copy back
+C         into INOCEAN. For the polarmost rows, use X interpolation.
+C
+C         First the even rows...
+          DO 230 J = 2,NY-1,2
+            DO 230 I = 1,NX/2
+              RUVAL = INOCEAN(I+(J-2)*NX/2)
+              RDVAL = INOCEAN(I+(J  )*NX/2)
+              IF(MISSING(RUVAL)) RDVAL = RMISS
+              IF(MISSING(RDVAL)) RUVAL = RMISS
+              TARRAY(I*2  +(J-1)*NX) = (RDVAL+RUVAL)*0.5
+              TARRAY(I*2-1+(J-1)*NX) =  INOCEAN(I+(J-1)*NX/2)
+  230     CONTINUE
+          RRVAL = INOCEAN(1+(NY-1)*NX/2)
+          RLVAL = INOCEAN(NX/2+(NY-1)*NX/2)
+          IF(MISSING(RRVAL)) RLVAL = RMISS
+          IF(MISSING(RLVAL)) RRVAL = RMISS
+          TARRAY(NX+(NY-1)*NX) = (RLVAL+RRVAL)*0.5
+          TARRAY(NX-1+(NY-1)*NX) = INOCEAN(NX/2+(NY-1)*NX/2)
+          DO 231 I = 2,NX/2
+            RRVAL = INOCEAN(I+1+(NY-1)*NX/2)
+            RLVAL = INOCEAN(I+(NY-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(I*2+(NY-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(I*2-1+(NY-1)*NX) = INOCEAN(I+(NY-1)*NX/2)
+  231     CONTINUE
+C   
+C         Then the odd rows
+          DO 232 J = 3,NY-1,2
+            RUVAL = INOCEAN(NX/2+(J-2)*NX/2)
+            RDVAL = INOCEAN(NX/2+(J  )*NX/2)
+            IF(MISSING(RUVAL)) RDVAL = RMISS
+            IF(MISSING(RDVAL)) RUVAL = RMISS
+            TARRAY(1+(J-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(2+(J-1)*NX) = INOCEAN(1+(J-1)*NX/2)
+            DO 232 I = 1,NX/2
+              RUVAL = INOCEAN(I+(J-2)*NX/2)
+              RDVAL = INOCEAN(I+(J  )*NX/2)
+              IF(MISSING(RUVAL)) RDVAL = RMISS
+              IF(MISSING(RDVAL)) RUVAL = RMISS
+              TARRAY(I*2-1+(J-1)*NX) = (RDVAL+RUVAL)*0.5
+              TARRAY(I*2  +(J-1)*NX) =  INOCEAN(I+(J-1)*NX/2)
+  232     CONTINUE
+C
+          RRVAL = INOCEAN(1+(1-1)*NX/2)
+          RLVAL = INOCEAN(NX/2+(1-1)*NX/2)
+          IF(MISSING(RRVAL)) RLVAL = RMISS
+          IF(MISSING(RLVAL)) RRVAL = RMISS
+          TARRAY(1+(1-1)*NX) = (RRVAL+RLVAL)*0.5
+          TARRAY(2+(1-1)*NX) = INOCEAN(1+(1-1)*NX/2)
+          DO 233 I = 2,NX/2
+            RRVAL = INOCEAN(I+(1-1)*NX/2)
+            RLVAL = INOCEAN(I-1+(1-1)*NX/2)
+            IF(MISSING(RRVAL)) RLVAL = RMISS
+            IF(MISSING(RLVAL)) RRVAL = RMISS
+            TARRAY(I*2-1+(1-1)*NX) = (RRVAL+RLVAL)*0.5
+            TARRAY(I*2+(1-1)*NX) = INOCEAN(I+(1-1)*NX/2)
+  233     CONTINUE
+
+          DO 234 J = 1,NY
+            DO 234 I = 1,NX
+              INOCEAN(I+(J-1)*NX) = TARRAY(I+(J-1)*NX)
+  234     CONTINUE
+C
+C         Reset the grid coordinate list if necessary, again making
+C         use of a temporary array. Expand the x-coordinate list,
+C         and remove the x coordinate of the first even point if
+C         grid is regular in x.
+C
+          IF((IIRREG.EQ.1).OR.(IIRREG.EQ.3)) THEN
+            JSKIP = 0
+            DO 235 J = 1,NX/2
+              TARRAY(J*2-1) = OCCOOR(JSKIP+J)
+              TARRAY(J*2)   = OCCOOR(JSKIP+NX/2+J)
+  235       CONTINUE
+            DO 236 J = 1,NX
+              OCCOOR(JSKIP+J) = TARRAY(J)
+  236       CONTINUE
+          ELSE IF((IIRREG.EQ.2)) THEN
+            DO 237 J = 1,NY
+              OCCOOR(J) = OCCOOR(1+J)
+  237       CONTINUE
+          ENDIF
+C
+C       Staggered grid: interpolation in x and y.
+C
+        ELSE IF(HSCODE.EQ.'F') THEN
+          ISTAGP = 5
+          CALL INTLOG(JP_ERROR,'INTOCNU: Staggered grid opt. F',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: (interpolate x and y)',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: not yet implemented.',JPQUIET)
+          INTOCNU = JPROUTINE + 1
+          GOTO 900
+        ELSE
+          CALL INTLOG(JP_ERROR,'INTOCNU: Staggered grid option',JPQUIET)
+          CALL INTLOG(JP_ERROR,HSCODE,JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: not known.',JPQUIET)
+          INTOCNU = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        ISTAG = 0
+C
+      ELSE
+         ISTAGP = 0
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 3 . Set X coordinates and interpolate in X.
+C     ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     The procedure is first to do the x interpolation (if any), and
+C     copy the result into a temporary array. The y interpolation is
+C     done in the next section.
+C
+C     The one complication here is to ensure proper longitude wrap-round
+C     where appropriate.
+C
+C     Some plot systems have difficulty controlling the data within the
+C     viewport. Because of this, and in the interests of efficiency, the
+C     data arrays are truncated even if no interpolation is being done.
+C
+C
+C     No interpolation in X.
+C
+      IF((HICODE.EQ.'N').OR.
+     *   ((HICODE.EQ.'R').AND.((IIRREG.EQ.0).OR.(IIRREG.EQ.2))).OR.
+     *   (HICODE.EQ.'Y') )  THEN
+C
+C       If x is longitude, set parameters up for wrap-round
+C       Wrap-round activated only if longitude range of data > 350 deg.
+C
+        IF((IIRREG.EQ.0).OR.(IIRREG.EQ.2)) THEN
+          RXIRES = KXINC*XUNIT
+          NXLEFT = INTDN((RLEFT-KLON1*XUNIT)/RXIRES+1)
+          NXRIGH = INTUP((RRIGHT-KLON1*XUNIT)/RXIRES+1)
+          NXP    = NXRIGH-NXLEFT+1
+          IF(NXP.LE.1) THEN
+            CALL INTLOG(JP_ERROR,'INTOCNU: NXP negative = ',NXP)
+            INTOCNU = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+          XARR(1) = KLON1*XUNIT+(NXLEFT-1)*RXIRES
+          XARR(2) = KXINC*XUNIT
+          XARR(3) = 0.0
+cs Coordinate 3 flag (x-axis, usually longitude).
+          IF( (NIOCO3.EQ.3) .AND. (KXINC*NX*XUNIT.GT.350.0) ) THEN
+            IWRAP = 1
+          ELSE
+            IWRAP = 0
+          ENDIF
+C
+        ELSE IF( (IIRREG.EQ.1) .OR. (IIRREG.EQ.3) ) THEN
+          NXP    = NX
+          NXLEFT = 1
+cs          JSKIP  = JGCL
+          JSKIP  = 0
+          DO 312 JI = 1,NXP
+            XARR(JI) = OCCOOR(JSKIP+JI)*XUNIT
+  312     CONTINUE
+cs Coordinate 3 flag (x-axis, usually longitude).
+          IF( (NIOCO3.EQ.3) .AND. (KXINC*NX*XUNIT.GT.350.0) ) THEN
+            IWRAP  = 1
+            INTOCNU = JPROUTINE + 4
+            GOTO 900
+          ELSE
+            IWRAP  = 0
+          ENDIF
+        ENDIF
+C
+        IF((NXP*NY).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NY)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+          INTOCNU = JPROUTINE + 5
+          GOTO 900
+        ENDIF
+C
+C       Copy the data into the temporary array
+C
+        DO 318 JI = 1,NXP
+          JIP = JI+NXLEFT-1
+          IF(IWRAP.EQ.1) THEN
+            IF(JIP.LE.0)  JIP = JIP+NX
+            IF(JIP.GT.NX) JIP = JIP-NX
+          ENDIF
+          IF((JIP.GE.1).AND.(JIP.LE.NX)) THEN
+            DO 316 JJ = 1,NY
+              TARRAY(JI+(JJ-1)*NXP) = INOCEAN(JIP+(JJ-1)*NX)
+  316       CONTINUE
+          ELSE
+            DO 317 JJ = 1,NY
+              TARRAY(JI+(JJ-1)*NXP) = RMISS
+  317       CONTINUE
+          ENDIF
+  318   CONTINUE
+C
+C       Interpolation from a grid irregular in X.
+C     ---------------------------------------------
+C
+      ELSE IF(((HICODE.EQ.'R').OR.
+     *        (HICODE.EQ.'X').OR.
+     *        (HICODE.EQ.'F')    ).AND.
+     *       ((IIRREG.EQ.1).OR.(IIRREG.EQ.3))  ) THEN
+
+        XPSIGN = SIGN(1.0,(RRIGHT-RLEFT))
+        NXP    = NINT((RRIGHT-RLEFT)/RXRES*XPSIGN)+1
+        IF((NXP*NY).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NY)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+          INTOCNU = JPROUTINE + 6
+          GOTO 900
+        ENDIF
+        RRIGHT  = RLEFT+RXRES*XPSIGN*(NXP-1)
+        XARR(1) = RLEFT
+        XARR(2) = RXRES*XPSIGN
+        XARR(3) = 0.0
+        IINTPOL = IINTPOL+1
+        IOFFSET = 0
+        XSIGN   = SIGN(1.0,((OCCOOR(IOFFSET+2)-OCCOOR(IOFFSET+1))*1.0))
+        XRSIGN  = XSIGN*XPSIGN
+        DO 321 JI = 1,NXP*NY
+          TARRAY(JI) = RMISS
+  321   CONTINUE
+C
+C       Work through the known (irregular) data points.
+C       Calculate the position of the point as a fractional number of
+C       points on the new regular grid
+C       (XFPOSN). If there are any points on the new grid between this
+C       point and the previous one (XFPREV), then set these points by
+C       interpolation between the two known points.
+        XFPREV= (OCCOOR(IOFFSET+1)*XUNIT-RLEFT)/RXRES*XPSIGN- 0.5*XRSIGN
+        DO 324 JI = 1,NX
+          XFPOSN = (OCCOOR(IOFFSET+JI)*XUNIT-RLEFT)/(RXRES*XPSIGN)
+          NEWPTS = INTDN((XFPOSN*XRSIGN))-INTDN((XFPREV*XRSIGN))
+          DO 323 JN = 1,NEWPTS
+            IPOS = (INTDN(XFPREV*XRSIGN)+JN)*XRSIGN+1
+            RPOS = (IPOS-1)*1.0
+            IF((IPOS.GE.1).AND.(IPOS.LE.NXP)) THEN
+              DO 322 JJ = 1,NY
+                RVALL = INOCEAN(JI-1+NX*(JJ-1))
+                RVALR = INOCEAN(JI+NX*(JJ-1))
+                IF(.NOT.MISSING(RVALL) .AND. .NOT.MISSING(RVALR) ) THEN
+                  XVAL = (XFPOSN-RPOS)/(XFPOSN-XFPREV)*RVALL
+     *                      +(RPOS-XFPREV)/(XFPOSN-XFPREV)*RVALR
+                ELSE
+                  XVAL = RMISS
+                ENDIF
+                TARRAY(IPOS+NXP*(JJ-1)) = XVAL
+  322         CONTINUE
+            ENDIF
+  323     CONTINUE
+          XFPREV = XFPOSN
+  324   CONTINUE
+
+C
+C     Interpolation from a grid regular in X.
+C
+      ELSE IF(((HICODE.EQ.'X').OR.(HICODE.EQ.'F')).AND.
+     *       ((IIRREG.EQ.0).OR.(IIRREG.EQ.2))    ) THEN
+
+        XPSIGN = SIGN(1.0,(RRIGHT-RLEFT))
+        NXP    = NINT((RRIGHT-RLEFT)/RXRES*XPSIGN)+1
+        IF((NXP*NY).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NY)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+          INTOCNU = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+        RRIGHT  = RLEFT+RXRES*XPSIGN*(NXP-1)
+        XARR(1) = RLEFT
+        XARR(2) = RXRES*XPSIGN
+        XARR(3) = 0.0
+        IINTPOL = IINTPOL+1
+C
+C       Work through the new regular grid points. Calculate the position
+C       of the point as a fractional number of points on the old grid.
+C       Use this fractional number to estimate the value of the field
+C       at the new point
+C
+C       (Note that just to the right of the first point, RPOS will be
+C        eg 1.1, not 0.1)
+C
+        DO 330 JI = 1,NXP*NY
+          TARRAY(JI) = RMISS
+  330   CONTINUE
+C
+        XOWEST = KLON1*XUNIT
+        XORES  = KXINC*XUNIT
+        DO 3320 JI = 1,NXP
+          RPOS = (RLEFT+(JI-1)*RXRES-XOWEST)/XORES + 1
+          IPOS = INTDN(RPOS)
+C
+C         Check for out of bounds, and set to zero unless x is
+C         longitude, in which case attempt to wrap round.
+          IF( (IPOS.GE.1) .AND. ((IPOS+1).LE.NX) ) THEN
+            DO 3310 JJ = 1,NY
+              RVALL = INOCEAN(IPOS+(JJ-1)*NX)
+              RVALR = INOCEAN(IPOS+1+(JJ-1)*NX)
+              IF(.NOT. MISSING(RVALL) .AND. .NOT. MISSING(RVALR) ) THEN
+                RVAL = (IPOS+1-RPOS)*RVALL + (RPOS-IPOS)*RVALR
+C
+C             Do not set to missing if there is good data close by.
+              ELSEIF( (.NOT.MISSING(RVALL)) .AND.
+     X                ((IPOS+1-RPOS).GT.0.5) ) THEN
+                RVAL = RVALL
+              ELSEIF( (.NOT. MISSING(RVALR)).AND.
+     X                ((RPOS-IPOS).GT.0.5)) THEN
+                RVAL = RVALR
+              ELSE
+                RVAL = RMISS
+              ENDIF
+              TARRAY(JI+(JJ-1)*NXP) = RVAL
+ 3310       CONTINUE
+C
+          ELSEIF( NIOCO3.EQ.JP_LONG ) THEN
+C
+C           This works only if the longitude points are equally spaced
+C           around the globe, ie the gap between the first and last
+C           points is equal to the gap between any other pair of
+C           adjacent points.
+C
+            IPOSM   = MOD(IPOS,NX)
+            IPOSP1M = MOD((IPOS+1),NX)
+            IF(IPOSM.LE.0)   IPOSM   = IPOSM+NX
+            IF(IPOSP1M.LE.0) IPOSP1M = IPOSP1M+NX
+            DO 3313 JJ = 1,NY
+              RVALL = INOCEAN(IPOSM+(JJ-1)*NX)
+              RVALR = INOCEAN(IPOSP1M+(JJ-1)*NX)
+              IF(.NOT. MISSING(RVALL) .AND. .NOT. MISSING(RVALR) ) THEN
+                RVAL = (IPOS+1-RPOS)*RVALL + (RPOS-IPOS)*RVALR
+C
+C             Do not set to missing if there is good data close by.
+              ELSEIF( (.NOT.MISSING(RVALL)) .AND.
+     X               ((IPOS+1-RPOS).GT.0.5) ) THEN
+                RVAL = RVALL
+              ELSEIF( (.NOT. MISSING(RVALR)).AND.
+     X                ((RPOS-IPOS).GT.0.5) ) THEN
+                RVAL = RVALR
+              ELSE
+                RVAL = RMISS
+              ENDIF
+              IF(RVAL.GT.1E6) THEN
+                RVAL = RMISS
+              ENDIF
+              TARRAY(JI+(JJ-1)*NXP) = RVAL
+ 3313       CONTINUE
+          ELSE
+            DO 3316 JJ = 1,NY
+              TARRAY(JI+(JJ-1)*NXP) = RMISS
+ 3316       CONTINUE
+          ENDIF
+ 3320    CONTINUE
+C
+      ELSE
+        CALL INTLOG(JP_ERROR,'INTOCNU: Error in logic.',JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCNU: HICODE = ',JPQUIET)
+        CALL INTLOG(JP_ERROR,HICODE,JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCNU: IIRREG = ',IIRREG)
+        INTOCNU = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 4 . Set Y coordinates and interpolate in Y.
+C     ------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     The x-interpolated field in the temporary array is interpolated in
+C     y into the final output field array. Note that the field and the
+C     coordinate array are both inverted in the y direction during this
+C     section.
+C
+C     Some plot systems have difficulty controlling the data within the
+C     viewport. Because of this, and in the interests of efficiency, the
+C     data arrays are truncated even if no interpolation is being done.
+C
+C
+C     No interpolation in Y.
+C
+      IF((HICODE.EQ.'N').OR.
+     *   ((HICODE.EQ.'R').AND.((IIRREG.EQ.0).OR.(IIRREG.EQ.1))).OR.
+     *   (HICODE.EQ.'X') )  THEN
+C
+C       If y is longitude, set parameters up for wrap-round
+C       Wrap-round activated only if longitude range of data > 350 deg.
+C
+        IF((IIRREG.EQ.0).OR.(IIRREG.EQ.1)) THEN
+C
+C         Remember to invert calc of NYP if RYIRES -ve ... 22.04.94
+          RYIRES =  KYINC*YUNIT
+          IF(RYIRES.GT.0) THEN
+            NYLEFT = INTDN((RBOTT-KLAT1*YUNIT)/RYIRES+1)
+            NYRIGH = INTUP((RTOP-KLAT1*YUNIT)/RYIRES+1)
+            NYP = NYRIGH-NYLEFT+1
+          ELSE
+            NYRIGH = INTUP((RBOTT-KLAT1*YUNIT)/RYIRES+1)
+            NYLEFT = INTDN((RTOP-KLAT1*YUNIT)/RYIRES+1)
+            NYP = NYRIGH-NYLEFT+1
+          ENDIF
+          IF(NYP.LE.1) THEN
+            CALL INTLOG(JP_ERROR,'INTOCNU: NYP negative = ',NYP)
+            INTOCNU = JPROUTINE + 9
+            GOTO 900
+          ENDIF
+C
+C         Remember to invert yarr coordinates ... 06.07.93
+          YARR(1) = KLAT1*YUNIT+(NYRIGH-1)*RYIRES
+          YARR(2) = -KYINC*YUNIT
+          YARR(3) = 0.0
+C
+C         Remember NYLEFT is relative to the inverted array ... 19.01.96
+C         ... but be careful to do this exactly.   01.04.97
+          NYLEFTI=NYLEFT
+          NYLEFT=NY+1-NYRIGH
+          NYRIGH=NY+1-NYLEFTI
+C
+          IF((NIOCO4.EQ.3) .AND. (KYINC*NY*YUNIT.GT.350.0) ) THEN
+            IWRAP = 1
+          ELSE
+            IWRAP = 0
+          ENDIF
+C
+        ELSE IF(IIRREG.EQ.2) THEN
+          IOFFSET = 0
+          YPSIGN  = SIGN(1.0,(RTOP-RBOTT))
+          YSIGN  = SIGN(1.0,((OCCOOR(IOFFSET+2)-OCCOOR(IOFFSET+1))*1.0))
+          YRSIGN  = YSIGN*YPSIGN
+          JMIN    = 0
+          DO 410 JI = 1,NY
+            YARR(JI) = OCCOOR((IOFFSET+NY+1-JI))*YUNIT
+            IF(YRSIGN.LT.0.0) THEN
+              IF((YARR(JI)-RBOTT)*YSIGN .GT. 0.0) JMIN = JI
+              IF((YARR(JI)-RTOP )*YSIGN .GT. 0.0) JMAX = JI+1
+            ELSE
+              IF((YARR(JI)-RTOP )*YSIGN .GT. 0.0) JMIN = JI
+              IF((YARR(JI)-RBOTT)*YSIGN .GT. 0.0) JMAX = JI+1
+            ENDIF
+  410     CONTINUE
+          IF(JMIN.EQ.0) THEN
+           CALL INTLOG(JP_ERROR,'INTOCNU: Domain out of range.',JPQUIET)
+           CALL INTLOGR(JP_ERROR,'INTOCNU: Requested Y = ',RBOTT)
+           CALL INTLOGR(JP_ERROR,'INTOCNU: Data limit of Y = ',YARR(1))
+           INTOCNU = JPROUTINE + 10
+           GOTO 900
+          ENDIF
+          IF(JMAX.EQ.NY+1) THEN
+           CALL INTLOG(JP_ERROR,'INTOCNU: Domain out of range.',JPQUIET)
+           CALL INTLOGR(JP_ERROR,'INTOCNU: Requested Y = ',RTOP)
+           CALL INTLOGR(JP_ERROR,'INTOCNU: Data limit of Y = ',YARR(NY))
+           INTOCNU = JPROUTINE + 11
+            GOTO 900
+          ENDIF
+C 
+          NYP    = (JMAX-JMIN)+1
+          NYLEFT = JMIN
+          DO 411 JI = 1,NYP
+            YARR(JI) = YARR(JI+(NYLEFT-1))
+  411     CONTINUE
+C
+          IF((NIOCO4.EQ.3) .AND. (KYINC*NY*YUNIT.GT.350.0) ) THEN
+           IWRAP = 1
+           CALL INTLOG(JP_ERROR,'INTOCNU: Irregular wrap-round',JPQUIET)
+           CALL INTLOG(JP_ERROR,'INTOCNU: not yet implemented.',JPQUIET)
+           INTOCNU = JPROUTINE + 12
+            GOTO 900
+          ELSE
+            IWRAP = 0
+          ENDIF
+C
+        ELSE IF(IIRREG.EQ.3) THEN
+          NYP    = NY
+          NYLEFT = 1
+          JSKIP  = NX
+          DO 412 JI = 1,NYP
+            YARR(JI) = OCCOOR(JSKIP+(NY+1-JI))*YUNIT
+  412     CONTINUE
+          IF((NIOCO4.EQ.3) .AND. (KYINC*NY*YUNIT.GT.350.0) ) THEN
+           IWRAP = 1
+           CALL INTLOG(JP_ERROR,'INTOCNU: Irregular wrap-round',JPQUIET)
+           CALL INTLOG(JP_ERROR,'INTOCNU: not yet implemented.',JPQUIET)
+           INTOCNU = JPROUTINE + 13
+           GOTO 900
+          ELSE
+           IWRAP = 0
+          ENDIF
+        ENDIF
+C
+        IF((NXP*NYP).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NYP)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+          INTOCNU = JPROUTINE + 14
+          GOTO 900
+        ENDIF
+C
+C       Copy the data into the temporary array, and invert it at
+C       same time.
+C       Note: NYLEFT is the starting index in the inverted data array.
+C
+c       DO 416 JJ = 1,NYP
+c         DO 414 JI = 1,NXP
+c           PARRAY(JI+(JJ-1)*NXP) = TARRAY(JI+(NY-JJ)*NXP)
+c 414     CONTINUE
+c 416   CONTINUE
+C
+        DO 418 JJ = 1,NYP
+cc        JJP   = JJ+NYLEFT-1
+          JLEFT = NY-(NYLEFT-1)
+          JJP   = JLEFT-JJ+1
+          IF(IWRAP.EQ.1) THEN
+            IF(JJP.LE.0)  JJP = JJP+NY
+            IF(JJP.GT.NY) JJP = JJP-NY
+          ENDIF
+          IF((JJP.GE.1).AND.(JJP.LE.NY)) THEN
+            DO 416 JI = 1,NXP
+cc            PARRAY(JI+(NYP-JJ)*NXP) = TARRAY(JI+(JJP-1)*NXP)
+              PARRAY(JI+(JJ-1)*NXP)   = TARRAY(JI+(JJP-1)*NXP)
+  416       CONTINUE
+          ELSE
+            DO 417 JI = 1,NXP
+              PARRAY(JI+(NYP-JJ)*NXP) = RMISS
+  417       CONTINUE
+          ENDIF
+  418   CONTINUE
+C
+C     Interpolation from a grid irregular in Y.
+C
+      ELSE IF(((HICODE.EQ.'R').OR.
+     *        (HICODE.EQ.'Y').OR.
+     *        (HICODE.EQ.'F')    ).AND.
+     *       ((IIRREG.EQ.2).OR.(IIRREG.EQ.3))  ) THEN
+        YPSIGN = SIGN(1.0,(RTOP-RBOTT))
+        IF( YPSIGN.GT.0 ) THEN
+          NYP = NINT((RTOP-RBOTT+ 0.0001)/RYRES)+1 
+        ELSE
+          NYP = NINT((RBOTT-RTOP + 0.0001)/RYRES)+1 
+        ENDIF
+Cjdc    NYP = NINT((RTOP-RBOTT)/RYRES*YPSIGN)+1
+        IF((NXP*NYP).GT.KLENI) THEN
+          CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NYP)
+          CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+          INTOCNU = JPROUTINE + 15
+          GOTO 900
+        ENDIF
+        RTOP    = RBOTT+RYRES*YPSIGN*(NYP-1)
+        YARR(1) = RBOTT
+        YARR(2) = RYRES*YPSIGN
+        YARR(3) = 0.0
+        IINTPOL = IINTPOL+2
+        IF(IIRREG.EQ.2) THEN
+            IOFFSET = 0
+        ELSE IF(IIRREG.EQ.3) THEN
+            IOFFSET = NX
+        ENDIF
+        YSIGN  = SIGN(1.0,((OCCOOR(IOFFSET+2)-OCCOOR(IOFFSET+1))*1.0))
+        YRSIGN = YSIGN*YPSIGN
+        DO 420 JI = 1,NXP*NYP
+          PARRAY(JI) = RMISS
+  420   CONTINUE
+C
+C       Work through the known (irregular) data points. Calculate the
+C       position of the point as a fractional number of points on the
+C       new regular grid (YFPOSN). If there are any points on the new
+C       grid between this point and the previous one (YFPREV), then set
+C       these points by interpolation between the two known points.
+C       Check that the points are in range.
+C       Note that we are willing to overlap slightly at the start, but
+C       must fiddle the array arguments to do this.
+C
+        YFPREV= (OCCOOR(IOFFSET+1)*YUNIT-RBOTT)/RYRES*YPSIGN- 0.5*YRSIGN
+        DO 428 JJ = 1,NY
+          YFPOSN = (OCCOOR(IOFFSET+JJ)*YUNIT-RBOTT)/RYRES*YPSIGN
+          NEWPTS =  INTDN((YFPOSN*YRSIGN)) -INTDN((YFPREV*YRSIGN))
+C
+C         INT truncates toward zero;
+C         INTDN truncates downwards in all cases
+C
+          DO 426 JN = 1,NEWPTS
+            IPOS = (INTDN(YFPREV*YRSIGN)+JN)*YRSIGN+1
+            RPOS = (IPOS-1)*1.0
+            IF((IPOS.GE.1).AND.(IPOS.LE.NYP)) THEN
+              JJEFF = JJ
+              IF(JJ.EQ.1) JJEFF = 2
+              DO 424 JI = 1,NXP
+                RVALL = TARRAY(JI+NXP*(JJEFF-2))
+                RVALR = TARRAY(JI+NXP*(JJ-1))
+                IF(.NOT.MISSING(RVALL) .AND. .NOT.MISSING(RVALR) ) THEN
+                  XVAL = (YFPOSN-RPOS)/(YFPOSN-YFPREV)*RVALL
+     *                      +(RPOS-YFPREV)/(YFPOSN-YFPREV)*RVALR
+                ELSE
+                  XVAL = RMISS
+                ENDIF
+                PARRAY(JI+NXP*(IPOS-1)) = XVAL
+  424         CONTINUE
+            ENDIF
+  426     CONTINUE
+          YFPREV = YFPOSN
+  428   CONTINUE
+C
+C
+C
+C     4.3  INTERPOLATION FROM A GRID REGULAR IN Y
+C     -------------------------------------------
+C
+      ELSEIF(((HICODE.EQ.'Y').OR.(HICODE.EQ.'F')).AND.
+     *       ((IIRREG.EQ.0).OR.(IIRREG.EQ.1))    ) THEN
+
+            LNEAREST=.TRUE.
+
+            YPSIGN=SIGN(1.,(RTOP-RBOTT))
+            NYP=NINT((RTOP-RBOTT)/RYRES*YPSIGN)+1
+            IF((NXP*NYP).GT.KLENI) THEN
+              CALL INTLOG(JP_ERROR,'INTOCNU: Array too small.',JPQUIET)
+              CALL INTLOG(JP_ERROR,'INTOCNU: Required = ',NXP*NYP)
+              CALL INTLOG(JP_ERROR,'INTOCNU: Available = ',KLENI)
+              INTOCNU = JPROUTINE + 19
+              GOTO 900
+            ENDIF
+            RTOP=RBOTT+RYRES*(NYP-1)*YPSIGN
+            YARR(1)=RBOTT
+            YARR(2)=RYRES*YPSIGN
+            YARR(3)=0.0
+C  Work through the new regular grid points. Calculate the position of
+C  the point as a fractional number of points on the old grid. Use this
+C  fractional number to estimate the value of the field at the new point
+            IINTPOL=IINTPOL+2
+            DO 335 JI=1,NXP*NYP
+               PARRAY(JI)=RMISS
+  335       CONTINUE
+            XOSOUT=KLAT1*YUNIT
+            XORES =KYINC*YUNIT
+            DO 3370 JJ=1,NYP
+               RPOS=(RBOTT+(JJ-1)*RYRES*YPSIGN-XOSOUT)/XORES + 1
+               JPOS=INTDN(RPOS)
+C  Check for out of bounds, and set to missing if this is the case
+               IF((JPOS.GE.1).AND.(JPOS+1.LE.NY)) THEN
+                 DO 3360 JI=1,NXP
+                    RVALB = TARRAY(JI+(JPOS-1)*NXP)
+                    RVALT = TARRAY(JI+(JPOS+1-1)*NXP)
+                    IF(.NOT.MISSING(RVALB).AND.
+     *                 .NOT.MISSING(RVALT)       ) THEN
+                       RVAL=(JPOS+1-RPOS)*RVALB
+     *                      +(RPOS-JPOS)*RVALT
+                    ELSEIF(LNEAREST) THEN
+                      IF((.NOT.MISSING(RVALB)) .AND.
+     *                   ((JPOS+1-RPOS).GT.0.5)  ) THEN
+                        RVAL=RVALB
+                      ELSEIF((.NOT.MISSING(RVALT)).AND.
+     *                   ((RPOS-JPOS).GT.0.5)  ) THEN
+                        RVAL=RVALT
+                      ELSE
+                        RVAL=RMISS
+                      ENDIF
+                    ELSE
+                      RVAL=RMISS
+                    ENDIF
+                    PARRAY(JI+(JJ-1)*NXP)=RVAL
+ 3360            CONTINUE
+               ELSE
+                  DO 3365 JI=1,NXP
+                     PARRAY(JI+(JJ-1)*NXP)=RMISS
+ 3365             CONTINUE
+               ENDIF
+ 3370       CONTINUE
+C
+C
+      ELSE
+        CALL INTLOG(JP_ERROR,'INTOCNU: Error in logic.',JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCNU: HICODE = ',JPQUIET)
+        CALL INTLOG(JP_ERROR,HICODE,JPQUIET)
+        CALL INTLOG(JP_ERROR,'INTOCNU: IIRREG = ',IIRREG)
+        INTOCNU = JPROUTINE + 16
+        GOTO 900
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 9 . Return.
+C     ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/interpolation/intout.F b/interpolation/intout.F
new file mode 100755
index 0000000..2a3795e
--- /dev/null
+++ b/interpolation/intout.F
@@ -0,0 +1,904 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTOUT( HPARN, INTV, REALV, CHARV)
+C  
+C---->
+C**** INTOUT
+C  
+C     Purpose
+C     -------
+C
+C     Change output field parameters in common block.
+C  
+C     Interface
+C     ---------
+C
+C     Input
+C     -----
+C
+C     HPARN - MARS parameter name.
+C     INTV  - MARS parameter value(s) (Integer).
+C     REALV - MARS parameter value(s) (Real).
+C     CHARV - MARS parameter value(s) (Character).
+C  
+C  
+C     Method
+C     ------
+C
+C     Recognise MARS paramter and reset appropriate common
+C     variable value(s).
+C  
+C
+C     Externals
+C     ---------
+C
+C     JDEBUG   - Check if debug switched on.
+C     IBASINI  - Check basic initialisation of common blocks is done.
+C     CHEQUAL  - Compare two ASCII strings without regard to case.
+C     INTLOG(R)- Log error message.
+C     IGGLAT   - Compute gaussian latitudes for given truncation.
+C  
+C  
+C     Author
+C     ------
+C
+C     J.D.Chambers       ECMWF        August 1994.
+C
+C     Modifications.
+C     --------------
+C
+C     S. Curic      ECMWF      28.05.07
+C     added jpeg packing just for merging with grib_api
+C  
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      CHARACTER*(*) HPARN
+      CHARACTER*(*) CHARV
+      REAL REALV(*)
+      INTEGER INTV(*)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 28200 )
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "current.h"
+C
+C     Local variables
+C
+      INTEGER ITEMP, I, IRET, ILOOP, ILAST, IFILE1
+      LOGICAL LFOUND
+C
+C     Externals
+C
+      LOGICAL CHEQUAL
+      EXTERNAL CHEQUAL
+      INTEGER IGGLAT, JINDEX
+      EXTERNAL IGGLAT, JINDEX
+C
+C     -----------------------------------------------------------------|
+C     Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTOUT  = 0
+      LFOUND = .FALSE.
+C
+C     Check if debug turned on
+      CALL JDEBUG()
+C
+C     Ensures basic initialisation of common blocks is done
+      CALL IBASINI(0)
+C
+      CALL INTLOG(JP_DEBUG, 'INTOUT: option = ' // HPARN ,JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C     Section 2.   Decode request
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Output grid.
+C
+      IF( CHEQUAL( HPARN, 1, 4, 'grid') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the grid values = 0.)
+        IF( (REALV(1) .EQ. 0) .OR. (REALV(2) .EQ. 0) ) GOTO 900
+        IF( (NOREPR.NE.JPREGULAR).AND.(NOREPR.NE.JPREGROT) ) THEN
+          LCHANGE = .TRUE.
+          NOGAUSS = 0
+        ENDIF
+        IF( LNOROTA ) THEN
+          NOREPR  = JPREGROT
+        ELSE
+          NOREPR  = JPREGULAR
+        ENDIF
+        LNOREPR = .TRUE.
+        CALL INTLOGR(JP_DEBUG, 'INTOUT: grid e-w = ',REALV(1))
+        CALL INTLOGR(JP_DEBUG, 'INTOUT: grid n-s = ',REALV(2))
+        DO I = 1, 2
+          ITEMP = INT( REALV(I)*PPMULT)
+          IF( NOGRID(I) .NE. ITEMP ) LCHANGE = .TRUE.
+          NOGRID(I) = ITEMP
+        ENDDO
+        LNOGRID = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output regular (gaussian).
+C
+      IF( CHEQUAL( HPARN, 1, 7, 'regular') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the gaussian value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOREPR .NE. JPGAUSSIAN ) THEN
+          LCHANGE = .TRUE.
+          NOGRID(1) = 0
+          NOGRID(2) = 0
+          LNOGRID = .FALSE.
+        ENDIF
+        IF( LNOROTA ) THEN
+          NOREPR  = JPFGGROT
+        ELSE
+          NOREPR  = JPGAUSSIAN
+        ENDIF
+        LNOREPR = .TRUE.
+        IF( NOGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: regular = ',INTV(1))
+        NOGAUSS = INTV(1)
+        LNOGAUS = .TRUE.
+        IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+          CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+          IF( IRET .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTOUT: JGETGG fail for NOGAUSS = ',NOGAUSS)
+            INTOUT = IRET
+            GOTO 900
+          ENDIF
+          NOGAUSO = NOGAUSS
+          HOGAUST = 'F'
+        ENDIF
+C
+        NONS = 2*NOGAUSS
+        GOTO 900
+      ENDIF
+C
+C     Output truncation.
+C
+      IF( CHEQUAL( HPARN, 1, 10, 'truncation') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the truncation value < 0.)
+        IF( INTV(1) .LT. 0 ) GOTO 900
+        IF( NOREPR .NE. JPSPHERE ) LCHANGE = .TRUE.
+        IF( .NOT. LNOREPR ) NOREPR  = JPSPHERE
+        LNOREPR = .TRUE.
+        IF( NORESO .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: truncation = ',INTV(1))
+        NORESO  = INTV(1)
+        LNORESO = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C
+C
+C     Output gaussian => same output type as input.
+C     Double Interpolation
+C
+      IF( CHEQUAL( HPARN, 1, 20, 'intermediate_gaussian') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the gaussian value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOMEGA .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTOUT: Intermediate gaussian = ',INTV(1))
+        NOMEGA = INTV(1)
+        LDOUBLE = .TRUE.
+c        NOREPR = JPNOTYPE
+c        LNOREPR = .TRUE.
+c        NONS = 2*NOGAUSS
+        GOTO 900
+      ENDIF
+C
+C     Interpolation method
+C
+      IF( CHEQUAL( HPARN, 1, 13, 'interpolation') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: interpolation = '
+     X   // CHARV ,JPQUIET)
+        IF( CHEQUAL( CHARV, 1, 17, 'nearest neighbour') ) THEN
+          IF( .NOT. LMETHOD ) LCHANGE = .TRUE.
+            LMETHOD = .TRUE.
+        ELSEIF( CHEQUAL( CHARV, 1, 8, 'bilinear') ) THEN
+          IF( .NOT. LO12PT ) LCHANGE = .TRUE.
+          LO12PT = .FALSE.
+        ELSEIF( CHEQUAL( CHARV, 1, 11, 'nearest lsm') ) THEN
+          IF( .NOT. LNNLSM ) LCHANGE = .TRUE.
+             LNNLSM = .TRUE.
+        ELSEIF( CHEQUAL( CHARV, 1, 3, 'off') ) THEN
+             LNNLSM = .FALSE.
+             LMETHOD = .FALSE.
+        ELSE
+          IF( LMETHOD ) LCHANGE = .TRUE.
+          LMETHOD = .FALSE.
+          LO12PT = .TRUE.
+          LNNLSM = .FALSE.
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+
+C     Output ito be generated by automatically selected truncation
+C     (autoresol).
+C
+      IF( CHEQUAL( HPARN, 1, 9, 'autoresol') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: autoresol (1 = on) = ',INTV(1))
+        IF( INTV(1).EQ.1 ) THEN
+          LARESOL = .TRUE.
+        ELSE
+          LARESOL = .FALSE.
+        ENDIF
+      ENDIF
+C
+C     Output data format.
+C
+      IF( CHEQUAL( HPARN, 1, 4, 'form') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: form = ' // CHARV ,JPQUIET)
+        IF( CHEQUAL( CHARV, 1, 4, 'grib') ) THEN
+          IF( NOFORM .EQ. 0 ) LCHANGE = .TRUE.
+          NOFORM = 1
+        ELSE
+          IF( NOFORM .EQ. 1 ) LCHANGE = .TRUE.
+          NOFORM = 0
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Input level.
+C
+      IF( CHEQUAL( HPARN, 1, 5, 'level') ) THEN
+        LFOUND = .TRUE.
+        IF( NOLEVEL .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: level = ',INTV(1))
+        NOLEVEL = INTV(1)
+        LNOLEVL = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input level type.
+C
+      IF( CHEQUAL( HPARN, 1, 7, 'levtype') ) THEN
+        LFOUND = .TRUE.
+        IF( NOLEVT .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: levtype = ',INTV(1))
+        NOLEVT  = INTV(1)
+        LNOLEVT = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input table.
+C
+      IF( CHEQUAL( HPARN, 1, 5, 'table') ) THEN
+        LFOUND = .TRUE.
+        IF( NOTABLE .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: table = ',INTV(1))
+        NOTABLE = INTV(1)
+        LNOTABL = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Input parameter.
+C
+      IF( CHEQUAL( HPARN, 1, 9, 'parameter') ) THEN
+        LFOUND = .TRUE.
+        IF( NOPARAM .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: parameter = ',INTV(1))
+        NOPARAM = INTV(1)
+        LNOPARA = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output accuracy.
+C
+      IF( CHEQUAL( HPARN, 1, 8, 'accuracy') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the truncation value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOACC .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: accuracy = ',INTV(1))
+        NOACC  = INTV(1)
+        LNOACC = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output gaussian => same output type as input.
+C
+      IF( CHEQUAL( HPARN, 1, 8, 'gaussian') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the gaussian value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: gaussian = ',INTV(1))
+        NOGAUSS = INTV(1)
+        LNOGAUS = .TRUE.
+        NOREPR = JPNOTYPE
+        LNOREPR = .TRUE.
+        NONS = 2*NOGAUSS
+        GOTO 900
+      ENDIF
+C
+C     Output area.
+C
+      IF( CHEQUAL( HPARN, 1, 4, 'area') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOGR(JP_DEBUG, 'INTOUT: north = ',REALV(1))
+        CALL INTLOGR(JP_DEBUG, 'INTOUT: west  = ',REALV(2))
+        CALL INTLOGR(JP_DEBUG, 'INTOUT: south = ',REALV(3))
+        CALL INTLOGR(JP_DEBUG, 'INTOUT: east  = ',REALV(4))
+        DO I = 1, 4
+          ITEMP = INT( REALV(I)*PPMULT)
+          IF( NOAREA(I) .NE. ITEMP ) LCHANGE = .TRUE.
+          NOAREA(I) = ITEMP
+        ENDDO
+        LNOAREA = (NOAREA(1).NE.0).OR.(NOAREA(2).NE.0).OR.
+     X            (NOAREA(3).NE.0).OR.(NOAREA(4).NE.0)
+        GOTO 900
+      ENDIF
+C
+C     Output scan.
+C
+      IF( CHEQUAL( HPARN, 1, 4, 'scan') ) THEN
+        LFOUND = .TRUE.
+        IF( NOSCNM .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: scan = ',INTV(1))
+        NOSCNM = INTV(1)
+        GOTO 900
+      ENDIF
+C
+C     Output packing.
+C
+C     Values for PACKING
+C       SIMPLE
+C       COMPLEX
+C       SECOND ORDER
+C       ARCHIVED VALUE
+C
+      IF( CHEQUAL( HPARN, 1, 7, 'packing') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: packing = ' // CHARV ,JPQUIET)
+        IF( CHEQUAL( CHARV, 1, 6, 'second') ) THEN
+          IF( NOHFUNC.NE.'K' ) LCHANGE = .TRUE.
+          NOHFUNC = 'K'
+        ELSE IF( CHEQUAL( CHARV, 1, 6, 'simple') ) THEN
+          IF( NOHFUNC.NE.'S' ) LCHANGE = .TRUE.
+          NOHFUNC = 'S'
+        ELSE IF( CHEQUAL( CHARV, 1, 7, 'archive') ) THEN
+          IF( NOHFUNC.NE.'A' ) LCHANGE = .TRUE.
+          NOHFUNC = 'A'
+        ELSE IF( CHEQUAL( CHARV, 1, 7, 'complex') ) THEN
+          IF( NOHFUNC.NE.'C' ) LCHANGE = .TRUE.
+          NOHFUNC = 'C'
+        ELSE IF( CHEQUAL( CHARV, 1, 4, 'jpeg') ) THEN
+          IF( NOHFUNC.NE.'J' ) LCHANGE = .TRUE.
+          NOHFUNC = 'J'
+        ELSE
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Invalid value for PACKING: ' // CHARV(1:6),JPQUIET)
+          LFOUND = .FALSE.
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Output reduced.
+C
+      IF( CHEQUAL( HPARN, 1, 7, 'reduced') ) THEN
+        LFOUND = .TRUE.
+C       (Ignore the call if the reduced value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: reduced = ',INTV(1))
+        NOGAUSS = INTV(1)
+        LNOGAUS = .TRUE.
+        IF( NOREPR .NE. JPQUASI ) THEN
+          LCHANGE = .TRUE.
+          NOGRID(1) = 0
+          NOGRID(2) = 0
+          LNOGRID = .FALSE.
+        ENDIF
+        IF( LNOROTA ) THEN
+          NOREPR  = JPQGGROT
+        ELSE
+          NOREPR  = JPQUASI
+        ENDIF
+        LNOREPR = .TRUE.
+        IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'R') ) THEN
+          CALL JGETGG( NOGAUSS, 'R', ROGAUSS, NOLPTS, IRET)
+          IF( IRET .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTOUT: JGETGG fail for NOGAUSS = ',NOGAUSS)
+            INTOUT = IRET
+            GOTO 900
+          ENDIF
+          NOGAUSO = NOGAUSS
+          HOGAUST = 'R'
+        ENDIF
+C
+        NOAREA(1) = INT( ROGAUSS(1) * PPMULT )
+        NOAREA(2) = 0
+        NOAREA(3) = INT( ROGAUSS(NOGAUSS*2) * PPMULT )
+        NOAREA(4) = JP360 - JP360/NOLPTS(NOGAUSS)
+        NOPCNT = 0
+        DO ILOOP = 1, NOGAUSS*2
+          NOPCNT = NOPCNT + NOLPTS(ILOOP)
+        ENDDO
+        GOTO 900
+      ENDIF
+C
+C     Output user_regular_gaussian
+C
+      IF( CHEQUAL( HPARN, 1, 21, 'user_regular_gaussian') ) THEN
+        LFOUND = .TRUE.
+        IF( NOREPR .NE. JPGAUSSIAN ) THEN
+          LCHANGE = .TRUE.
+          NOGRID(1) = 0
+          NOGRID(2) = 0
+          LNOGRID = .FALSE.
+        ENDIF
+C       (Ignore the call if the user_regular_gaussian value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTOUT: user_regular_gaussian = ',INTV(1))
+        NOGAUSS = INTV(1)
+        LNOGAUS = .TRUE.
+        IF( LNOROTA ) THEN
+          NOREPR  = JPFGGROT
+        ELSE
+          NOREPR  = JPGAUSSIAN
+        ENDIF
+        LNOREPR = .TRUE.
+C
+        ILAST = NOGAUSS*2
+        DO ILOOP = 1, ILAST
+          NOLPTS(ILOOP) = NOGAUSS*4
+        ENDDO
+        NOGAUSO = NOGAUSS
+        HOGAUST = 'U'
+        LOGIVEP   = .TRUE.
+C
+        GOTO 900
+      ENDIF
+C
+C     Output user_reduced_gaussian
+C
+      IF( CHEQUAL( HPARN, 1, 21, 'user_reduced_gaussian') ) THEN
+        LFOUND = .TRUE.
+        IF( NOREPR .NE. JPQUASI ) THEN
+          LCHANGE = .TRUE.
+          NOGRID(1) = 0
+          NOGRID(2) = 0
+          LNOGRID = .FALSE.
+        ENDIF
+C       (Ignore the call if the user_reduced_gaussian value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOGAUSS .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG,'INTOUT: user_reduced_gaussian = ',INTV(1))
+        NOGAUSS = INTV(1)
+        LNOGAUS = .TRUE.
+        IF( LNOROTA ) THEN
+          NOREPR  = JPQGGROT
+        ELSE
+          NOREPR  = JPQUASI
+        ENDIF
+        LNOREPR = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output g_pnts.
+C
+      IF( CHEQUAL( HPARN, 1, 6, 'g_pnts') ) THEN
+        LFOUND = .TRUE.
+        IF( NOGAUSS .LE. 0 ) THEN
+          IRET   = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Impossible number of gaussian latitudes.',NOGAUSS)
+          INTOUT = IRET
+          GOTO 900
+        ENDIF
+C
+        ILAST = NOGAUSS*2 + 1
+        DO ILOOP = 1, NOGAUSS
+          NOLPTS(ILOOP) = INTV(ILOOP)
+          ILAST = ILAST - 1
+          NOLPTS(ILAST) = INTV(ILOOP)
+        ENDDO
+C
+        NOPCNT = 0
+        DO ILOOP = 1, NOGAUSS*2
+          NOPCNT = NOPCNT + NOLPTS(ILOOP)
+        ENDDO
+        NOGAUSO = NOGAUSS
+        HOGAUST = 'U'
+        LOGIVEP = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output g_lats.
+C
+      IF( CHEQUAL( HPARN, 1, 6, 'g_lats') ) THEN
+        LFOUND = .TRUE.
+        IF( NOGAUSS .LE. 0 ) THEN
+          IRET   = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Impossible number of gaussian latitudes.',NOGAUSS)
+          INTOUT = IRET
+          GOTO 900
+        ENDIF
+C
+        ILAST = NOGAUSS*2 + 1
+        DO ILOOP = 1, NOGAUSS
+          ROGAUSS(ILOOP) = REALV(ILOOP)
+          ILAST = ILAST - 1
+          ROGAUSS(ILAST) = -REALV(ILOOP)
+        ENDDO
+C
+        NOAREA(1) = INT( ROGAUSS(1) * PPMULT )
+        NOAREA(2) = 0
+        NOAREA(3) = INT( ROGAUSS(NOGAUSS*2) * PPMULT )
+        NOAREA(4) = JP360 - JP360/NOLPTS(NOGAUSS)
+        NOGAUSO = NOGAUSS
+        HOGAUST = 'U'
+        LOGIVEL   = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output rotation.
+C
+      IF( CHEQUAL( HPARN, 1, 8, 'rotation') ) THEN
+        LFOUND = .TRUE.
+C
+        IF( CHEQUAL(CHARV,1,3,'off') ) THEN
+          LNOROTA = .FALSE.
+          NOROTA(1) = -99999999
+          NOROTA(2) = -99999999
+          IF( NOREPR.EQ.JPSPHROT ) NOREPR = JPSPHERE
+          IF( NOREPR.EQ.JPREGROT ) NOREPR = JPREGULAR
+          IF( NOREPR.EQ.JPQGGROT ) NOREPR = JPQUASI
+          IF( NOREPR.EQ.JPFGGROT ) NOREPR = JPGAUSSIAN
+        ELSE
+          LNOROTA = .TRUE.
+          CALL INTLOGR(JP_DEBUG, 'INTOUT: S.pole latitude  = ',REALV(1))
+          CALL INTLOGR(JP_DEBUG, 'INTOUT: S.pole longitude = ',REALV(2))
+          DO I = 1, 2
+            ITEMP = INT( REALV(I)*PPMULT)
+            IF( NOROTA(I) .NE. ITEMP ) LCHANGE = .TRUE.
+            NOROTA(I) = ITEMP
+          ENDDO
+          IF( NOREPR.EQ.JPSPHERE )   NOREPR = JPSPHROT
+          IF( NOREPR.EQ.JPREGULAR )  NOREPR = JPREGROT
+          IF( NOREPR.EQ.JPQUASI )    NOREPR = JPQGGROT
+          IF( NOREPR.EQ.JPGAUSSIAN ) NOREPR = JPFGGROT
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Interpolation scheme to use for rotations
+C
+      IF( CHEQUAL( HPARN, 1, 8, '12-point') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: 12-point = ' // CHARV ,JPQUIET)
+C
+        IF( CHEQUAL(CHARV,1,3,'yes') ) THEN
+          LO12PT = .TRUE.
+        ELSE
+          LO12PT = .FALSE.
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Output user_reduced_latlon
+C
+      IF( CHEQUAL( HPARN, 1, 19, 'user_reduced_latlon') ) THEN
+        LFOUND = .TRUE.
+        IF( NOREPR .NE. JPREDLL ) THEN
+          LCHANGE = .TRUE.
+          NOGRID(1) = 0
+Cjdc      NOGRID(2) = REALV(2)
+          LNOGRID = .FALSE.
+        ENDIF
+C       (Ignore the call if the user_reduced_latlon value = 0.)
+        IF( INTV(1) .EQ. 0 ) GOTO 900
+        IF( NOREDLL .NE. INTV(1) ) LCHANGE = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: user_reduced_latlon = ',INTV(1))
+        NOREDLL = INTV(1)
+        LNOREDL = .TRUE.
+        IF( LNOROTA ) THEN
+          NOREPR  = JPREDLROT
+        ELSE
+          NOREPR  = JPREDLL
+        ENDIF
+        LNOREPR = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output set raduced_laltlon 
+C
+      IF( CHEQUAL( HPARN, 1, 10, 'red_latlon') ) THEN
+        LFOUND = .TRUE.
+          NOGRID(1) = 0
+          NOGRID(2) = REALV(2)
+        IF( NOREPR .NE. JPREDLL ) THEN
+          LCHANGE = .TRUE.
+          LNOGRID = .FALSE.
+        ENDIF
+C       (Ignore the call if the user_reduced_latlon value = 0.)
+cs        IF( INTV(1) .EQ. 0 ) GOTO 900
+        CALL INTLOG(JP_DEBUG, 'INTOUT: reduced_latlon ns = ',NOGRID(2))
+cs        NOREDLL = INTV(1)
+        LNOREDL = .TRUE.
+        IF( LNOROTA ) THEN
+          NOREPR  = JPREDLROT
+        ELSE
+          NOREPR  = JPREDLL
+        ENDIF
+        LNOREPR = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output ll_pnts.
+C
+      IF( CHEQUAL( HPARN, 1, 7, 'll_pnts') ) THEN
+        LFOUND = .TRUE.
+        IF( NOREDLL .LE. 0 ) THEN
+          IRET   = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Impossible number of latitudes.',NOREDLL)
+          INTOUT = IRET
+          GOTO 900
+        ENDIF
+C
+        ILAST = NOREDLL
+        DO ILOOP = 1, NOREDLL
+          NOLPTS(ILOOP) = INTV(ILOOP)
+        ENDDO
+C
+        NOPCNT = 0
+        DO ILOOP = 1, NOREDLL-1
+          NOPCNT = NOPCNT + NOLPTS(ILOOP)
+        ENDDO
+        LOGIVEP = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output ll_lats.
+C
+      IF( CHEQUAL( HPARN, 1, 7, 'll_lats') ) THEN
+        LFOUND = .TRUE.
+        IF( NOREDLL .LE. 0 ) THEN
+          IRET   = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Impossible number of latitudes.',NOREDLL)
+          INTOUT = IRET
+          GOTO 900
+        ENDIF
+C
+        DO ILOOP = 1, NOREDLL
+          ROREDLL(ILOOP) = REALV(ILOOP)
+        ENDDO
+C
+        NOAREA(1) = INT( ROREDLL(1) * PPMULT )
+        NOAREA(2) = 0
+        NOAREA(3) = INT( ROREDLL(NOREDLL) * PPMULT )
+        NOAREA(4) = JP360 - JP360/NOLPTS(NOREDLL/2)
+        LOGIVEL   = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Reduced gaussian definition from file
+C
+      IF( CHEQUAL( HPARN, 1, 15, 'gauss_from_file') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG,
+     X    'INTOUT: gauss_from_file = ' // CHARV ,JPQUIET)
+C
+C       Open the input file
+C
+        CALL PBOPEN(IFILE1, CHARV, 'R', IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Unable to use gaussian definition file:',JPQUIET)
+          CALL INTLOG(JP_ERROR,CHARV,JPQUIET)
+          INTOUT = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+C       Read gaussian number, then number of points at each latitude
+C
+        CALL PBREAD(IFILE1, NOGAUSS, JPBYTES, IRET)
+        IF( IRET.NE.JPBYTES ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Problem reading gaussian no. from file:',JPQUIET)
+          CALL PBCLOSE(IFILE1, IRET)
+          INTOUT = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+        IF( NOGAUSS .LE. 0 ) THEN
+          IRET   = JPROUTINE + 1
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Impossible number of gaussian latitudes.',NOGAUSS)
+          INTOUT = IRET
+          GOTO 900
+        ENDIF
+C
+        CALL PBREAD(IFILE1, NOLPTS, JPBYTES*NOGAUSS, IRET)
+        IF( IRET.NE.JPBYTES*NOGAUSS ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Problem reading gaussian pts from file:',JPQUIET)
+          CALL PBCLOSE(IFILE1, IRET)
+          INTOUT = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+        CALL PBCLOSE(IFILE1, IRET)
+C
+        ILAST = NOGAUSS*2 + 1
+        DO ILOOP = 1, NOGAUSS
+          ILAST = ILAST - 1
+          NOLPTS(ILAST) = NOLPTS(ILOOP)
+        ENDDO
+C
+        NOPCNT = 0
+        DO ILOOP = 1, NOGAUSS*2
+          NOPCNT = NOPCNT + NOLPTS(ILOOP)
+        ENDDO
+        NOGAUSO = NOGAUSS
+        HOGAUST = 'U'
+        LOGIVEP = .TRUE.
+        LOGIVEL = .TRUE.
+C
+        IRET = IGGLAT(NOGAUSS*2, ROGAUSS, 0, 1)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: Problem calculating gaussian latitudes',JPQUIET)
+          INTOUT = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+C
+        IF( LNOROTA ) THEN
+          NOREPR = JPQGGROT
+        ELSE
+          NOREPR = JPQUASI
+        ENDIF
+        LNOREPR = .TRUE.
+C
+        GOTO 900
+      ENDIF
+C
+C     Output grid creation style
+C
+      IF( CHEQUAL( HPARN, 1, 5, 'style') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: style = ' // CHARV ,JPQUIET)
+        IF( CHEQUAL( CHARV, 1, 13, 'dissemination') ) THEN
+          ITEMP = JPSDISM
+        ELSE
+          ITEMP = JPSMARS
+        ENDIF
+        IF( NOSTYLE .NE. ITEMP ) LCHANGE = .TRUE.
+        NOSTYLE = ITEMP
+        LNOSTYLE = .TRUE.
+        GOTO 900
+      ENDIF
+C
+C     Output grid frame
+C
+      IF( CHEQUAL( HPARN, 1, 5, 'frame') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: frame = ',INTV(1))
+        ITEMP = INTV(1)
+        IF( NOFRAME .NE. ITEMP ) LCHANGE = .TRUE.
+        NOFRAME = ITEMP
+        LNOFRAME = (NOFRAME.GT.0)
+        GOTO 900
+      ENDIF
+C
+C     Output grid bitmap
+C
+      IF( CHEQUAL( HPARN, 1, 6, 'bitmap') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: bitmap = ' // CHARV ,JPQUIET)
+        ITEMP  = JINDEX(CHARV)
+        IF( ITEMP.LT.1 ) THEN
+          CALL INTLOG(JP_WARN,
+     X      'INTOUT: No bitmap filename given.',JPQUIET)
+          INTOUT = JPROUTINE + 1
+          GOTO 900
+        ELSE
+          IF( NOBITMP(1:ITEMP).NE.CHARV(1:ITEMP) ) LCHANGE = .TRUE.
+          NOBITMP = ' '
+          NOBITMP(1:ITEMP) = CHARV(1:ITEMP)
+          LNOBITMP = .TRUE.
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     Output gaussian grid specification
+C
+      IF( CHEQUAL( HPARN, 1, 13, 'specification') ) THEN
+        LFOUND = .TRUE.
+        CALL INTLOG(JP_DEBUG, 'INTOUT: specification = ', INTV(1))
+        IF( (INTV(1).NE.12).AND.(INTV(1).NE.18) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTOUT: invalid value for specification = ',INTV(1))
+          INTOUT = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+C
+        IF( NGSPEC.NE.INTV(1) ) THEN
+          LCHANGE = .TRUE.
+          NGSPEC  = INTV(1)
+          LNGSPEC = .TRUE.
+        ENDIF
+        IF( LNOGAUS ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTOUT: replace gaussian specification = ', NOGAUSS)
+          CALL JGETGG( NOGAUSS, 'R', ROGAUSS, NOLPTS, IRET)
+          IF( IRET .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTOUT: JGETGG fail for NOGAUSS = ',NOGAUSS)
+            INTOUT = IRET
+            GOTO 900
+          ENDIF
+          NOGAUSO = NOGAUSS
+          HOGAUST = 'R'
+C
+          IF( .NOT.LNOAREA ) THEN
+            CALL INTLOG(JP_DEBUG,
+     X        'INTOUT: now replace output area definition',JPQUIET)
+            NOAREA(1) = INT( ROGAUSS(1) * PPMULT )
+            NOAREA(2) = 0
+            NOAREA(3) = INT( ROGAUSS(NOGAUSS*2) * PPMULT )
+            NOAREA(4) = JP360 - JP360/NOLPTS(NOGAUSS)
+            NOPCNT = 0
+            DO ILOOP = 1, NOGAUSS*2
+              NOPCNT = NOPCNT + NOLPTS(ILOOP)
+            ENDDO
+            GOTO 900
+          ENDIF
+        ENDIF
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C      Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+      IF( .NOT. LFOUND ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTOUT: Unknown keyword or option used:', JPQUIET)
+        CALL INTLOG(JP_ERROR, HPARN, JPQUIET)
+        INTOUT = JPROUTINE + 2
+      ENDIF
+C
+C     Set flag to show function has been called
+      LINTOUT = .TRUE.
+      RETURN
+      END
diff --git a/interpolation/intpnum.F b/interpolation/intpnum.F
new file mode 100755
index 0000000..7cc0544
--- /dev/null
+++ b/interpolation/intpnum.F
@@ -0,0 +1,124 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTPNUM(KONOFF)
+C
+C---->
+C**** INTPNUM
+C
+C     Purpose
+C     -------
+C
+C     Returns current INTP_CYCLE version number.
+C
+C
+C     Interface
+C     ---------
+C
+C     INUM = INTPNUM(KONOFF)
+C
+C     Input
+C     -----
+C
+C     KONOFF - switch for displayed message
+C              = 0 if display is required on the first call
+C              = non-zero if display is not required
+C
+C
+C     Output
+C     ------
+C
+C     Returns a 6-digit version number, aaabbc, where:
+C       aaa = 3-digit major number
+C       bb  = 2-digit minor number
+C       c   = 1-digit spare number (normally 0)
+C     
+C
+C     Method
+C     ------
+C
+C     Reads a 6-digit version number from the environment variable
+C     INTP_CYCLE. If this does not give a 6-digit number, an internal
+C     hard-coded default value is used.
+C
+C     On the first call, the function (optionally) displays a message:
+C
+C       **************************************
+C       * INTP_CYCLE version number = aaabbc *
+C       **************************************
+C     
+C
+C     Externals
+C     ---------
+C
+C     None.
+C     
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1998
+C
+C
+C----<
+C ------------------------------------------------------------------
+C*    Section 0.   Variables.
+C ------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KONOFF
+C
+C     Local variables
+C
+      INTEGER INUMBER, ICOUNT, IOFFSET
+      SAVE INUMBER, ICOUNT
+      CHARACTER*38 CMESS
+      CHARACTER*20 YNUMBER
+C
+      DATA INUMBER/000010/, ICOUNT/0/
+      DATA CMESS/'* INTP_CYCLE version number = ****** *'/
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( ICOUNT.EQ.0 ) THEN
+C
+C       See if the environment variable has an override value
+C
+        CALL GETENV( 'INTP_CYCLE', YNUMBER)
+        IOFFSET = INDEX( YNUMBER, ' ')
+        IF( IOFFSET.EQ.7 ) THEN
+          READ(YNUMBER,'(I6.6)') INUMBER
+        ENDIF
+C
+C       First time through, display the message if required
+C
+        IF( KONOFF.EQ.0 ) THEN
+          WRITE(CMESS(31:36),'(I6.6)') INUMBER
+          WRITE(GRPRSM,*) '**************************************'
+          WRITE(GRPRSM,*) CMESS
+          WRITE(GRPRSM,*) '**************************************'
+        ENDIF
+        ICOUNT = 1
+      ENDIF
+C
+      INTPNUM = INUMBER
+C
+      RETURN
+      END
diff --git a/interpolation/intuvdh.F b/interpolation/intuvdh.F
new file mode 100755
index 0000000..dc80f35
--- /dev/null
+++ b/interpolation/intuvdh.F
@@ -0,0 +1,195 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVDH(PDATA,KSIZE,KGRIB,KGRBSZ,HOPER,KPARAM)
+C
+C---->
+C**** INTUVDH
+C
+C     Purpose
+C     -------
+C
+C     Encodes/decodes data into/from GRIB code.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVDH(PDATA,KSIZE,KGRIB,KGRBSZ,HOPER,KPARAM)
+C
+C     Input
+C     -----
+C
+C     PDATA - Unpacked field values (if encoding)
+C     KSIZE - Number of unpacked values (if encoding)
+C     KGRIB  - Input field in GRIB format (if decoding)
+C     KGRBSZ - Input field length (words) (if decoding)
+C     HOPER  - Coding option ('I', 'D' or 'C' only)
+C     KPARAM - Parameter number of the field (for encoding)
+C
+C
+C     Output
+C     ------
+C
+C     PDATA  - Unpacked field values (if decoding)
+C     KSIZE  - Number of unpacked values (if decoding)
+C     KGRIB  - Output field in GRIB format (if encoding)
+C     KGRBSZ - Output field length (words) (if encoding)
+C
+C
+C     Method
+C     ------
+C
+C     Uses arrays in intf.h for unpacking GRIB headers.
+C
+C
+C     Externals
+C     ---------
+C
+C     GRSVCK  - Turns off GRIBEX checking.
+C     GRIBEX  - Encode/decode GRIB product.
+C     IGSETUP - Setup GRIB sections for the output product.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2001
+C
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0.   Variables
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "intf.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      REAL PDATA(*)
+      INTEGER KSIZE,KGRIB(*),KGRBSZ, KPARAM
+      CHARACTER*1 HOPER
+C
+C     Local variables
+C
+      INTEGER IERR, IWORD
+      CHARACTER*1 HFUNC
+C
+C     Externals
+C
+      INTEGER IGSETUP
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTUVDH = IERR
+      IERR  =  0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Decode data from GRIB code (no checking).
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( HOPER.NE.'C' ) THEN
+        CALL GRSVCK(0)
+C
+        IERR = 1
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+        CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X              PDATA, KSIZE, KGRIB, KGRBSZ, IWORD, HOPER,IERR)
+C
+        INTUVDH = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Encode data into GRIB code.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Setup GRIB sections for the output product
+C
+      IERR = IGSETUP( ISEC1, ISEC2, ISEC4 )
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVDH: GRIB section setup fail',JPQUIET)
+        INTUVDH = IERR
+        GOTO 900
+      ENDIF
+C
+C     Code data into GRIB
+C
+      ISEC1(6) = KPARAM
+      IERR = 1
+C
+C     If grid-point output, setup for 2nd order packing if requested.
+C
+      IF( (NOREPR.NE.JPSPHERE) .AND. (NOREPR.NE.JPSPHROT) ) THEN
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'K' ) THEN
+          HFUNC = 'K'
+          ISEC4(4)  = 64
+          ISEC4(6)  = 16
+          ISEC4(9)  = 32
+          ISEC4(10) = 16
+          ISEC4(12) = 8
+          ISEC4(13) = 4
+          ISEC4(14) = 0
+          ISEC4(15) = -1
+        ELSE
+          ISEC4(4)  = 0
+          ISEC4(6)  = 0
+        ENDIF
+        IF( LIMISSV ) THEN
+          ISEC1(5) = 192
+          ISEC3(2) = NINT(RMISSGV)
+          ZSEC3(2) = RMISSGV
+        ENDIF
+      ELSE
+        ISEC1(5) = 128
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'C' ) THEN
+          ISEC2(6) = 2
+          ISEC4(4) = 64
+        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+          ISEC2(6) = 1
+          ISEC4(4) = 0
+        ENDIF
+      ENDIF
+C
+      CALL GRIBEX( ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X             PDATA,KSIZE,KGRIB,KGRBSZ,IWORD,HFUNC,IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVDH: GRIBEX encoding failed.',IERR)
+        INTUVDH = IERR
+        GOTO 900
+      ENDIF
+      KGRBSZ = IWORD
+      INTUVDH = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intuvf.F b/interpolation/intuvf.F
new file mode 100755
index 0000000..d87899c
--- /dev/null
+++ b/interpolation/intuvf.F
@@ -0,0 +1,321 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVF( KVGRIB, KDGRIB, INLEN,
+     X                         KUGRIBO, KVGRIBO, OUTLEN)
+C
+C---->
+C**** INTUVF
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input vorticity and divergence field to
+C     U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVF( KVGRIB, KDGRIB, INLEN, KUGRIBO,KVGRIBO,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     KVGRIB - Input vorticity field  (spectral, GRIB format).
+C     KDGRIB - Input divergence field (spectral, GRIB format).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     KUGRIBO - Output U field (GRIB format).
+C     KVGRIBO - Output V field (GRIB format).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Convert spectral vorticity/divergence to spectral U/V and then
+C     interpolate U and V to output fields.
+C
+C
+C     Externals
+C     ---------
+C
+C     IBASINI - Ensure basic interpolation setup is done.
+C     JVOD2UV - Converts spectral vorticity/divergence to spectral U/V.
+C     JMEMHAN - Allocate/deallocate scratch memory.
+C     INTFAU  - Prepare to interpolate unpacked input field.
+C     INTFBU  - Interpolate unpacked input field.
+C     INTLOG  - Log error message.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     INSANE  - Ensure no outrageous values given for interpolation.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Jan 1995
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER KVGRIB(*), KDGRIB(*), INLEN
+      INTEGER KUGRIBO(*), KVGRIBO(*), OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4
+      PARAMETER (JPROUTINE = 26800 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+C
+C     Local variables
+C
+      INTEGER IERR, KPR, ISZVD, ISZUV, IWORD, ISAME
+      INTEGER IPVORT, IPDIV, IP_U, IP_V
+#ifdef POINTER_64
+      INTEGER*8 IUV
+      INTEGER*8 IVD
+#endif
+      REAL UV, VD
+      POINTER ( IUV, UV )
+      POINTER ( IVD, VD )
+      DIMENSION UV( 1 ), VD( 1 )
+C
+C     Externals
+C
+      INTEGER INTFAU, INTFBU, RESET_C
+      INTEGER IBASINI, INSANE
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INTUVF = 0
+      IERR = 0
+      KPR = 0
+C
+C     Ensure that basic initialisation has been done
+C
+      IERR = IBASINI(0)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: basic initialise failed',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the vorticity/divergence fields.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Get scratch memory for vorticity/divergence unpacked fields.
+C     Vorticity/divergence memory areas are adjacent.
+C
+C     Need to establish input truncation, so unpack GRIB sections 1
+C     and 2.
+C
+      IERR = 1
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            VD(IPVORT), ISZVD, KVGRIB, INLEN, IWORD, 'I',IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: GRIBEX decoding failed.',IERR)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+      NIRESO = ISEC2(2)
+      ISZVD = (NIRESO+1)*(NIRESO+2)
+      IPVORT = 1
+      IPDIV  = 1 + ISZVD
+      CALL JMEMHAN( JPSCR4, IVD, ISZVD*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: Memory allocation fail.',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Decode data from GRIB code (no checking)
+C     Vorticity ...
+C
+      IWORD = INLEN
+      IERR  =  0
+      CALL GRSVCK(0)
+      IERR = 1
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            VD(IPVORT), ISZVD, KVGRIB, INLEN, IWORD, 'D',IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: GRIBEX decoding failed.',IERR)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Divergence ...
+C
+      IERR = 1
+      ISEC3(2) = NINT(RMISSGV)
+      ZSEC3(2) = RMISSGV
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            VD(IPDIV), ISZVD, KDGRIB, INLEN, IWORD, 'D',IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: GRIBEX decoding failed.',IERR)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+      IERR = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVF: Setup interp. options from GRIB failed.',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF( ISAME.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVF: Interpolation cannot use given values.',JPQUIET)
+        INTUVF = ISAME
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Convert spectral vorticity/divergence
+C                  to spectral U/V
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Get scratch memory for U and V spectral fields.
+C     U and V memory areas are adjacent.
+C
+      ISZUV = (NIRESO+1)*(NIRESO+4)
+      IP_U = 1
+      IP_V = 1 + ISZUV
+      CALL JMEMHAN( JPSCR3, IUV, ISZUV*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: Memory allocation fail.',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Generate U and V with same truncation as input fields.
+C
+      CALL JVOD2UV( VD(IPVORT), VD(IPDIV), NIRESO,
+     X              UV(IP_U), UV(IP_V), NIRESO)
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Interpolate U field.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Prepare to interpolate U field.
+C
+      NIFORM = 0
+      IERR = INTFAU( UV(IP_U), ISZUV, KUGRIBO, OUTLEN)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVF: Prepare to interpolate failed.',IERR)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Interpolate U field.
+C
+      IERR = INTFBU( UV(IP_U), ISZUV, KUGRIBO, OUTLEN)
+C
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: Interpolation failed.',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Interpolate V field.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     Prepare to interpolate V field.
+C
+      IERR = INTFAU( UV(IP_V), ISZUV, KVGRIBO, OUTLEN)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVF: Prepare to interpolate failed.',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     Interpolate V field.
+C
+      IERR = INTFBU( UV(IP_V), ISZUV, KVGRIBO, OUTLEN)
+C
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVF: Prepare to interpolate failed.',JPQUIET)
+        INTUVF = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+C     Return the scratch memory.
+C
+      CALL JMEMHAN( JPSCR3, IUV, ISZUV*2, JPDEALL, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: Memory deallocation fail',JPQUIET)
+        INTUVF = IERR
+      ENDIF
+C
+      CALL JMEMHAN( JPSCR4, IVD, ISZVD*2, JPDEALL, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVF: Memory deallocation fail',JPQUIET)
+        INTUVF = IERR
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/intuvgh.F b/interpolation/intuvgh.F
new file mode 100755
index 0000000..c64539a
--- /dev/null
+++ b/interpolation/intuvgh.F
@@ -0,0 +1,419 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVGH(KUGRIBI, KVGRIBI, INLEN,
+     X                         KUGRIBO, KVGRIBO,
+     X                         OUTLENU, OUTLENV)
+C
+C---->
+C**** INTUVGH
+C
+C     Purpose
+C     -------
+C
+C     Interpolate GRIB format input U and V component reduced gaussian
+C     fields to rotated GRIB format U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVGH(KUGRIBI,KVGRIBI,INLEN,KUGRIBO,KVGRIBO,OUTLENU,OUTLENV)
+C
+C     Input
+C     -----
+C
+C     KUGRIBI - Input U component field (reduced gaussian, GRIB format).
+C     KVGRIBI - Input V component field (reduced gaussian, GRIB format).
+C     INLEN   - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     KUGRIBO - Output U field (GRIB format).
+C     KVGRIBO - Output V field (GRIB format).
+C     OUTLENU - Output U field length (words).
+C     OUTLENV - Output V field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Use HIRLAM rotation scheme.
+C
+C     Note that a common block is used in intf.h to hold the U/V
+C     fields before interpolation.
+C
+C     Externals
+C     ---------
+C
+C     IBASINI - Ensure basic interpolation setup is done.
+C     INTUVDH - Encodes/decodes data into/from GRIB code.
+C     JMEMHAN - Allocate scratch memory.
+C     GRIBEX  - GRIB decoding/encoding.
+C     ISCRSZ  - Calculate number of values in generated field.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     INTLOG  - Log error message.
+C     MKFRAME - Create a 'frame' from a rectangular field.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     INSANE  - Ensure no outrageous values given for interpolation.
+C     HRG2GGW - Creates rotated gaussian U and V from reduced gaussian
+C     HLL2LLW - Creates rotated lat/long U and V from lat/long
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     October 2001
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER KUGRIBI(*), KVGRIBI(*), INLEN
+      INTEGER KUGRIBO(*), KVGRIBO(*), OUTLENU, OUTLENV
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "intlog.h"
+#include "current.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4,JPSCR5
+      PARAMETER (JPROUTINE = 40170 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+      PARAMETER (JPSCR5 = 5) 
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+      REAL OLDGRID(2), AREA(4), GRID(2), POLE(2)
+      LOGICAL LOLDWIND, LFRAME
+      INTEGER IRET,KPR,ISZOUV,ISIZE,ISAME,IPARAM
+      INTEGER LOOP, NGAUSS
+      INTEGER IPINU, IPINV, NUMPTS, NLON, NLAT, IN_U, IN_V
+#ifdef POINTER_64
+      INTEGER*8 IOLDUV, ISWORK
+#endif
+      REAL OLDUV, SWORK
+      POINTER ( IOUV, OLDUV(1) )
+      POINTER (ISWORK, SWORK(1) )
+C
+C     Externals
+C
+      INTEGER RESET_C,ISCRSZ,FIXAREA,IBASINI,INSANE,INTUVDH,HIRLAMW
+      INTEGER HRG2GGW, HLL2LLW
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INTUVGH = 0
+      IRET    = 0
+      KPR     = 0
+C
+      LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT))
+C
+C     Ensure that basic initialisation has been done
+C
+      IRET = IBASINI(0)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVGH: basic initialise failed',JPQUIET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the U/V fields.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Need to establish input characteristics, so unpack GRIB sections 1
+C     and 2.
+C
+      IPARAM = 0
+      IPINU  = 1
+      IRET = INTUVDH(OLDUV(IPINU),ISZOUV,KUGRIBI,INLEN,'I',IPARAM)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVGH: GRIB header decode failed',IRET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+C
+C     Check whether the input field is an ECMWF reduced gaussian or
+C     lat/long U field
+C
+      IF( (ISEC1(1).NE.128).OR.
+     X    ((ISEC1(6).NE.JP_U).AND.(ISEC1(6).NE.JP_10U)) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Input is not ECMWF U field.',JPQUIET)
+        INTUVGH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      IF( (ISEC2(1).NE.4).AND.
+     X    ((ISEC2(17).NE.0) .OR.(ISEC2(1).NE.0)) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Input not gaussian or lat/long.',JPQUIET)
+        INTUVGH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Get scratch memory for U/V unpacked fields.
+C     U/V memory areas are adjacent.
+C
+      IF( ISEC2(17).EQ.1 ) THEN
+        ISZOUV  = 0
+        DO LOOP = 1, ISEC2(3)
+          ISZOUV = ISZOUV + ISEC2(22+LOOP)
+        ENDDO
+      ELSE
+        ISZOUV = ISEC2(2) * ISEC2(3)
+      ENDIF
+C
+      IPINU = 1
+      IPINV = 1 + ISZOUV
+      CALL JMEMHAN( JPSCR4, IOUV, ISZOUV*2, JPALLOC, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Scratch memory type 4 allocation failed.',JPQUIET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+C
+C     Decode input U and V
+C
+      IRET = INTUVDH(OLDUV(IPINU),ISZOUV,KUGRIBI,INLEN,'D',IPARAM)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVGH: Vorticity decoding failed',IRET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+      IN_U = ISEC1(6)
+C
+      IRET = INTUVDH(OLDUV(IPINV),ISZOUV,KVGRIBI,INLEN,'D',IPARAM)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVGH: Divergence decoding failed',IRET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+      IN_V = ISEC1(6)
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+      IRET = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Setup interp. options from GRIB failed.',JPQUIET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+C
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF( ISAME.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Interpolation cannot use given values.',JPQUIET)
+        INTUVGH = ISAME
+        GOTO 900
+      ENDIF
+C
+      IRET = FIXAREA()
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVGH: Fixarea failed.',JPQUIET)
+        INTUVGH = IRET
+        GOTO 900
+      ENDIF
+C
+      LWIND = .TRUE.
+      LOLDWIND = LWINDSET
+      LWINDSET = .TRUE.
+C
+      DO LOOP = 1, 4
+        AREA(LOOP) = REAL(NOAREA(LOOP))/PPMULT
+      ENDDO
+      DO LOOP = 1, 2
+        GRID(LOOP) = REAL(NOGRID(LOOP))/PPMULT
+        POLE(LOOP) = REAL(NOROTA(LOOP))/PPMULT
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Generate interpolated lat/long U and V fields.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C       Dynamically allocate scrath space for rotated lat/long grid
+C
+        NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X         NOGRID(JPWESTEP))
+        NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X         NOGRID(JPNSSTEP))
+C
+        NOWE = NLON
+        NONS = NLAT
+        NUMPTS = NLON * NLAT
+        ISIZE  = NUMPTS * 2
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVGH: memory alloc for lat/long grid fail',JPQUIET)
+          INTUVGH = JPROUTINE + 3
+          GOTO 900
+        ENDIF
+C
+C       Rotate reduced gaussian to lat/long
+C
+        IF( (NIREPR.EQ.JPGAUSSIAN).OR.(NIREPR.EQ.JPQUASI) ) THEN
+          IRET = HIRLAMW(LO12PT,
+     X                   OLDUV(IPINU),OLDUV(IPINV),ISZOUV,
+     X                   NOGAUSS,AREA,POLE,GRID,
+     X                   SWORK,SWORK(1+NUMPTS),NUMPTS,NLON,NLAT)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVGH: HIRLAMW rotation failed',JPQUIET)
+            INTUVGH = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+C       Rotate lat/long to lat/long
+C
+        ELSE
+          OLDGRID(1) = REAL(NIGRID(1)) / PPMULT
+          OLDGRID(2) = REAL(NIGRID(2)) / PPMULT
+          IRET = HLL2LLW(LO12PT,OLDUV(IPINU),OLDUV(IPINV),
+     X                   OLDGRID,AREA,POLE,GRID,
+     X                   SWORK,SWORK(1+NUMPTS),NUMPTS,NLON,NLAT)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVGH: HLL2LLW rotation failed',JPQUIET)
+            INTUVGH = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+C       If a 'frame' has been specified, build the frame
+C
+        IF( LFRAME ) THEN
+          LIMISSV = .TRUE.
+          CALL MKFRAME(NLON,NLAT,SWORK,RMISSGV,NOFRAME)
+          CALL MKFRAME(NLON,NLAT,SWORK(1+NUMPTS),RMISSGV,NOFRAME)
+        ENDIF
+C
+      ELSE
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Generate interpolated gaussian U and V fields.
+C     -----------------------------------------------------------------|
+C
+  400   CONTINUE
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTUVGH: Gaussian to gaussian',JPQUIET)
+C
+C       Dynamically allocate memory for rotated gaussian grids
+C
+        NUMPTS = NOGAUSS * NOGAUSS
+        ISIZE = 2 * NUMPTS * 8 
+        CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X      'INTUVGH: memory alloc for gaussian grid fail',JPQUIET)
+          INTUVGH = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+        NGAUSS = ISEC2(10)
+        IRET = HRG2GGW(LO12PT,
+     X                 OLDUV(IPINU),OLDUV(IPINV),ISZOUV,
+     X                 NGAUSS,AREA,POLE,NOGAUSS,HOGAUST,
+     X                 SWORK,SWORK(1+ISIZE/2),ISIZE,NUMPTS)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'INTUVGH: HRG2GGW rotation failed',JPQUIET)
+            INTUVGH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Pack the fields into GRIB format
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF( ((NOREPR.EQ.JPQUASI).OR.
+     X     (NOREPR.EQ.JPQGGROT).OR.
+     X     (NOREPR.EQ.JPFGGROT).OR.
+     X     (NOREPR.EQ.JPGAUSSIAN)).AND.
+     X    ( (NOROTA(1).NE.9000000).AND.(NOROTA(2).NE.0) ) ) THEN
+        ISEC2(1) = JPFGGROT
+      ELSE
+        ISEC2(1) = NOREPR
+      ENDIF
+C
+      ISEC4(1) = NUMPTS
+C
+C     Reset the input format flag
+C
+      NIFORM = 1
+C
+C     Set the components flag for rotated U and V coefficients
+C
+      ISEC2(19) = 8
+C
+      IRET = INTUVDH(SWORK,NUMPTS,KUGRIBO,OUTLENU,'C',IN_U)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Wind component into GRIB encoding fail',IRET)
+        INTUVGH = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      IRET = INTUVDH(SWORK(1+(ISIZE/2)),NUMPTS,KVGRIBO,OUTLENV,'C',IN_V)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVGH: Wind component into GRIB encoding fail',IRET)
+        INTUVGH = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing and reset wind flag
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+      LWINDSET  = LOLDWIND
+C
+      RETURN
+      END
diff --git a/interpolation/intuvp.F b/interpolation/intuvp.F
new file mode 100755
index 0000000..87cfdc4
--- /dev/null
+++ b/interpolation/intuvp.F
@@ -0,0 +1,747 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVP( KVGRIB, KDGRIB, INLEN,
+     X                         KUGRIBO, KVGRIBO, OUTLEN)
+C
+C---->
+C**** INTUVP
+C
+C     Purpose
+C     -------
+C
+C     Interpolate GRIB format input vorticity and divergence field to
+C     GRIB format U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVP(KVGRIB,KDGRIB,INLEN,KUGRIBO,KVGRIBO,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     KVGRIB - Input vorticity field  (spectral, GRIB format).
+C     KDGRIB - Input divergence field (spectral, GRIB format).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     KUGRIBO - Output U field (GRIB format).
+C     KVGRIBO - Output V field (GRIB format).
+C     OUTLEN  - Length of each output U and V field (words).
+C
+C
+C     Method
+C     ------
+C
+C     Convert spectral vorticity/divergence to spectral U/V and then
+C     interpolate U and V to output fields.
+C
+C     Note that a common block is used in intf.h to hold the U/V
+C     fields before interpolation.
+C
+C     Externals
+C     ---------
+C
+C     IBASINI - Ensure basic interpolation setup is done.
+C     INTUVDH - Encodes/decodes data into/from GRIB code.
+C     INTUVXH - Interpolate U and V spectral components to grid point.
+C     JVOD2UV - Converts spectral vorticity/divergence to spectral U/V.
+C     JMEMHAN - Allocate scratch memory.
+C     ISCRSZ  - Calculate number of values in generated field.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     INTLOG  - Log error message.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     INSANE  - Ensure no outrageous values given for interpolation.
+C     GRSMKP  - P factor calculation switch for routine GRIBEX.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2001
+C     Rewritten to use more functions for processing.
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER KVGRIB(*), KDGRIB(*), INLEN
+      INTEGER KUGRIBO(*), KVGRIBO(*), OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4,JPSCR5
+      INTEGER JPVORT, JPDIVE
+      PARAMETER (JPROUTINE = 26900 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+      PARAMETER (JPSCR5 = 5) 
+      PARAMETER (JPVORT = 138) 
+      PARAMETER (JPDIVE = 155) 
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+      REAL EW, NS, DUMMY
+      LOGICAL LOLDWIND, LSPECUV
+      INTEGER IERR,KPR,ISZVD,ISZUV,IWORD,ISIZE,ILENF,ISAME,IDIVOFF
+      INTEGER NEXT, LOOP, MTRUNC, NTRUNC, NTROLD, NTROLD2, NPARAM
+      INTEGER NOLD, NLEN, NLENU, NLENV, HNORESO
+      INTEGER INRESO, IHOLD
+      LOGICAL LSTYLE
+      REAL NORTH, SOUTH, WEST, EAST
+C
+      LOGICAL LFIRST, LNEWUV
+      CHARACTER*3 EXTRA
+      DATA LFIRST/.TRUE./, LNEWUV/.TRUE./, EXTRA/'NO '/
+      SAVE LFIRST, LNEWUV
+C
+      DATA NTROLD/-1/, NTROLD2/-1/
+      SAVE NTROLD, NTROLD2
+      INTEGER IPVORT, IPDIV, IP_U, IP_V
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDO
+#endif
+      REAL ZNFLDO
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+#ifdef POINTER_64
+      INTEGER*8 IUV, IVD
+#endif
+      REAL UV, VD
+      POINTER ( IUV, UV )
+      POINTER ( IVD, VD )
+      DIMENSION UV( 1 ), VD( 1 )
+C
+C     Externals
+C
+      INTEGER RESET_C,ISCRSZ,FIXAREA,AURESOL,DSSAREA
+      INTEGER IBASINI, INSANE, INTUVDH, INTUVXH
+      INTEGER INTUVPH, INTUVGH
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INTUVP = 0
+      IERR    = 0
+      KPR     = 0
+C
+      IF( LFIRST ) THEN
+        CALL GETENV('IGNORE_UV_EXTRA_MODE', EXTRA)
+        IF((EXTRA(1:1).EQ.'Y').OR.(EXTRA(1:1).EQ.'y')) LNEWUV = .FALSE.
+        IF( LNEWUV ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVP: IGNORE_UV_EXTRA_MODE not turned on',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVP: IGNORE_UV_EXTRA_MODE turned on',JPQUIET)
+        ENDIF
+        LFIRST = .FALSE.
+      ENDIF
+C
+      LOLDWIND = LWINDSET
+cs      LSPECUV = (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)
+C
+C     Ensure that basic initialisation has been done
+C
+      IERR = IBASINI(0)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVP: basic initialise failed',JPQUIET)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+C
+C     Establish truncation of the input vorticity and divergence:
+C     unpack GRIB sections 1 and 2.
+C
+      NPARAM = JPVORT
+      ISZVD = 1
+      NLEN = INLEN
+      IERR = INTUVDH(DUMMY,ISZVD,KVGRIB,NLEN,'I',NPARAM)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVP: GRIB header decode failed',IERR)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+C
+C     If a rotation is required, check the input fields and call the
+C     appropriate interpolation
+C
+      IF( LUSEHIR.AND.LNOROTA ) THEN
+cs        LWIND = .TRUE.
+cs        LWINDSET = .TRUE.
+cs        IF( (ISEC1(6).EQ.JPVORT).AND.(ISEC2(1).EQ.JPSPHERE) ) THEN
+csC
+csC         Spectral vorticity/divergence to rotated U and V
+csC
+cs          NLEN  = INLEN
+cs          NLENU = OUTLEN
+cs          NLENV = OUTLEN
+cs          IERR = INTUVPH(KVGRIB,KDGRIB,NLEN,KUGRIBO,KVGRIBO,
+cs     X                   NLENU,NLENV)
+C
+cs        ELSE IF( ((ISEC1(6).EQ.JP_U).OR.(ISEC1(6).EQ.JP_10U)).AND.
+cs        IF( ((ISEC1(6).EQ.JP_U).OR.(ISEC1(6).EQ.JP_10U)).AND.
+        IF( (ISEC1(6).EQ.JP_10U).AND.
+     X           (ISEC2(1).EQ.JPGAUSSIAN) ) THEN
+C
+C         Gaussian U and V to rotated U and V
+C
+          NLEN  = INLEN
+          NLENU = OUTLEN
+          NLENV = OUTLEN
+          IERR = INTUVGH(KVGRIB,KDGRIB,NLEN,KUGRIBO,KVGRIBO,
+     X                   NLENU,NLENV)
+         IF( IERR.NE.0 ) THEN
+           CALL INTLOG(JP_ERROR,'INTUVP: Rotation failed',IERR)
+           GOTO 990
+        ENDIF
+        INTUVP = IERR
+           GOTO 900
+C
+cs        ELSE
+cs          CALL INTLOG(JP_ERROR,'INTUVP: Invalid rotation',IERR)
+cs         IERR = JPROUTINE + 1
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the vorticity/divergence fields.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Get scratch memory for vorticity/divergence unpacked fields.
+C     Vorticity/divergence memory areas are adjacent.
+C
+      INRESO = ISEC2(2)
+      ISZVD  = (INRESO+1)*(INRESO+4)
+      IPVORT = 1
+      IPDIV  = IPVORT + ISZVD
+      CALL JMEMHAN( JPSCR4, IVD, ISZVD*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: Scratch memory type 4 allocation failed.',JPQUIET)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+C
+C     Decode vorticity and divegence.
+C
+      NPARAM = JPVORT
+      NLEN = INLEN
+      IERR = INTUVDH(VD(IPVORT),ISZVD,KVGRIB,NLEN,'D',NPARAM)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVP: Vorticity decoding failed',IERR)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+C
+      NPARAM = JPDIVE
+      NLEN = INLEN
+      IERR = INTUVDH(VD(IPDIV),ISZVD,KDGRIB,NLEN,'D',NPARAM)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVP: Divergence decoding failed',IERR)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+      IHOLD = NIRESO
+      IERR = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: Setup interp. options from GRIB failed.',JPQUIET)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+      IF( IHOLD.NE.0 ) NIRESO = IHOLD
+C
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF( ISAME.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: Interpolation cannot use given values.',JPQUIET)
+        INTUVP = ISAME
+        GOTO 990
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Convert spectral vorticity/divergence to spectral U/V
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      LSPECUV = (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)
+      IF( LSPECUV ) THEN
+C
+C       Spectral U and V for Tn are to be generated from vorticity
+C       and divergence spectral T(n-1)
+C
+        IF( LARESOL.AND.LNEWUV ) THEN
+          IF( (NOGRID(1).NE.0).AND.(NOGRID(2).NE.0) ) THEN
+            EW = FLOAT(NOGRID(1))/PPMULT
+            NS = FLOAT(NOGRID(2))/PPMULT
+            NTRUNC = AURESOL(NS,EW) - 1
+          ELSE IF( NOGAUSS.NE.0 ) THEN
+            EW = 90.0/FLOAT(NOGAUSS)
+            NS = EW
+            NTRUNC = AURESOL(NS,EW) - 1
+          ELSE IF( LNORESO ) THEN
+            NTRUNC = NORESO - 1
+          ELSE
+            NTRUNC = INRESO - 1
+          ENDIF
+          IF( NTRUNC.GT.(INRESO-1) ) NTRUNC = INRESO - 1
+C
+        ELSE IF( LNORESO ) THEN
+          NTRUNC = NORESO - 1
+        ELSE
+          NTRUNC = INRESO - 1
+        ENDIF
+C
+        IF( LNEWUV ) THEN
+          MTRUNC = NTRUNC + 1
+        ELSE
+          NTRUNC = NTRUNC + 1
+          MTRUNC = NTRUNC
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Use old-style processing if IGNORE_UV_EXTRA_MODE = Y
+C     -----------------------------------------------------------------|
+C
+        IF( .NOT.LNEWUV ) THEN
+C
+          NIRESO = ISEC2(2)
+C
+          CALL INTLOG(JP_DEBUG,'INTUVP: vo/div truncation = ', NIRESO)
+C
+C         Get scratch memory for U and V spectral fields.
+C         U and V memory areas are adjacent.
+C
+          ISZUV = MAX((NIRESO+1)*(NIRESO+4),(NORESO+1)*(NORESO+4))
+          IP_U  = 1
+          IP_V  = IP_U + ISZUV
+C
+          ISIZE = ISZUV*2
+          CALL JMEMHAN( JPSCR3, IUV, ISIZE, JPALLOC, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: Scratch memory type 3 allocation failed',JPQUIET)
+            INTUVP = IERR
+            GOTO 900
+          ENDIF
+C
+C         Generate U and V with same truncation as input fields.
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVP: Make intermediate U/V with truncation = ', NIRESO)
+          CALL JVOD2UV(VD(IPVORT),VD(IPDIV),NIRESO,
+     X                 UV(IP_U),UV(IP_V),NIRESO)
+C
+C         Do spectral truncation for spectral output
+C
+          IF( LNORESO ) THEN
+C
+            CALL INTLOG(JP_DEBUG,
+     X        'INTUVP: Make U/V spectral output with truncation',NORESO)
+C
+            ISIZE =  (NORESO+1)*(NORESO+4)
+            CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE, JPALLOC, IERR)
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'INTUVP: Scratch memory type 5 allocn failed',JPQUIET)
+              INTUVP = JPROUTINE + 4
+              GOTO 900
+            ENDIF
+C
+            CALL SH2SH( UV(IP_U), NIRESO, ZNFLDO, NORESO )
+            DO LOOP = 1, (NORESO+1)*(NORESO+2)
+              UV(IP_U+LOOP-1) = ZNFLDO(LOOP)
+            ENDDO
+C
+            CALL SH2SH( UV(IP_V), NIRESO, ZNFLDO, NORESO )
+            IP_V = 1 + (NORESO+1)*(NORESO+4)
+            DO LOOP = 1, (NORESO+1)*(NORESO+2)
+              UV(IP_V+LOOP-1) = ZNFLDO(LOOP)
+            ENDDO
+C
+            NIRESO = NORESO
+C
+          ENDIF
+C
+C         Set GRIBEX flag to force recalculation of complex packing
+C         factor.
+C
+          CALL GRSMKP(1)
+C
+C         Code U into GRIB
+C
+          NPARAM = JP_U
+          NLENU = OUTLEN
+          IERR = INTUVDH(UV(IP_U),ISZUV,KUGRIBO,NLENU,'C',NPARAM)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: U encoding into GRIB failed.',IERR)
+            INTUVP = JPROUTINE + 4
+            GOTO 380
+          ENDIF
+C
+C         Code V into GRIB
+C
+          NPARAM = JP_V
+          NLENV = OUTLEN
+          IERR = INTUVDH(UV(IP_V),ISZUV,KVGRIBO,NLENV,'C',NPARAM)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: V encoding into GRIB failed.',IERR)
+            INTUVP = JPROUTINE + 4
+            GOTO 380
+          ENDIF
+C
+  380     CONTINUE
+C
+C         Turn off GRIBEX flag which forces recalculation of complex
+C         packing factor
+C
+          CALL GRSMKP(0)
+C
+          GOTO 900
+C
+C     -----------------------------------------------------------------|
+C       Use new-style processing if IGNORE_UV_EXTRA_MODE not set
+C     -----------------------------------------------------------------|
+C
+        ELSE
+C
+          CALL INTLOG(JP_DEBUG,'INTUVP: vo/div truncation = ', NTRUNC)
+          CALL INTLOG(JP_DEBUG,'INTUVP: U/V truncation    = ', MTRUNC)
+C
+C         Truncate vorticity and divergence to correspond to U/V
+C
+          ISIZE =  (MTRUNC+1)*(MTRUNC+4)
+          CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE*2, JPALLOC, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: Scratch memory type 5 allocation failed',JPQUIET)
+            INTUVP = JPROUTINE + 4
+            GOTO 990
+          ENDIF
+C
+          IPVORT = 1
+          IPDIV  = IPVORT + (INRESO+1)*(INRESO+4)
+          IDIVOFF = 1 + (NTRUNC+1)*(NTRUNC+4)
+C
+          CALL SH2SH( VD(IPVORT), INRESO, ZNFLDO, NTRUNC )
+C
+          CALL SH2SH( VD(IPDIV), INRESO, ZNFLDO(IDIVOFF), NTRUNC )
+C
+C         Get scratch memory for U and V spectral fields.
+C         U and V memory areas are adjacent.
+C
+          ISZUV = (MTRUNC+1)*(MTRUNC+4)
+          IP_U  = 1
+          IP_V  = IP_U + ISZUV
+C
+          ISIZE = ISZUV*2
+          CALL JMEMHAN( JPSCR3, IUV, ISIZE, JPALLOC, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: Scratch memory type 3 allocation failed',JPQUIET)
+            INTUVP = IERR
+            GOTO 990
+          ENDIF
+C
+C         Generate U and V spectral fields
+C
+          CALL JVOD2UV(ZNFLDO(IPVORT),ZNFLDO(IDIVOFF),NTRUNC,
+     X                 UV(IP_U),UV(IP_V),MTRUNC)
+C
+C         Set GRIBEX flag to force recalculation of complex packing
+C         factor.
+C         Preserve the original output truncation
+C
+          CALL GRSMKP(1)
+          HNORESO = NORESO
+C
+C         Code U into GRIB using the new truncation
+C
+          NORESO = MTRUNC
+          NPARAM = JP_U
+          NLENU = OUTLEN
+          IERR = INTUVDH(UV(IP_U),ISZUV,KUGRIBO,NLENU,'C',NPARAM)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: U encoding into GRIB failed.',IERR)
+            INTUVP = JPROUTINE + 4
+            GOTO 390
+          ENDIF
+C
+C         Code V into GRIB using the new truncation
+C
+          NPARAM = JP_V
+          NLENV = OUTLEN
+          IERR = INTUVDH(UV(IP_V),ISZUV,KVGRIBO,NLENV,'C',NPARAM)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVP: V encoding into GRIB failed.',IERR)
+            INTUVP = JPROUTINE + 4
+            GOTO 390
+          ENDIF
+C
+  390     CONTINUE
+C
+C         Turn off GRIBEX flag which forces recalculation of complex
+C         packing factor
+C         Restore the original output truncation
+C
+          CALL GRSMKP(0)
+          NORESO = HNORESO
+C
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Generate grid point GRIB format U and V fields.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C     Spectral U and V for Tn are to be generated from vorticity
+C     and divergence spectral T(n-1)
+C
+C     See whether or not the 'autoresol' flag is set.
+C     If not, use the input truncation.
+C
+      IF( LARESOL ) THEN
+        IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+          EW = FLOAT(NOGRID(1))/PPMULT
+          NS = FLOAT(NOGRID(2))/PPMULT
+        ELSE
+          EW = 90.0/FLOAT(NOGAUSS)
+          NS = EW
+        ENDIF
+        NTRUNC = AURESOL(EW,NS)
+        IF( NTRUNC.NE.NTROLD ) THEN
+          NTROLD = NTRUNC
+          CALL INTLOG(JP_WARN,
+     X      'INTUVP: Resolution automatically set to ', NTRUNC)
+        ENDIF
+      ELSE IF( LNORESO ) THEN
+        NTRUNC = NORESO
+      ELSE
+        NTRUNC = INRESO
+      ENDIF
+C
+C     Check whether the output resolution is greater than the input
+C
+      IF( NTRUNC.GT.INRESO ) THEN
+C
+C       Issue warning if the output resolution was user-supplied
+C
+        IF( .NOT.LARESOL ) THEN
+C
+C         Revert to the input truncation
+C
+          IF( INRESO.NE.NTROLD2 ) THEN
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: spectral -> grid point interpolation',JPQUIET)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: User supplied resolution = ',NTRUNC)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: Input field resolution   = ',INRESO)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: User supplied resolution ignored',JPQUIET)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: Input field resolution has been used',JPQUIET)
+            NTROLD2 = INRESO
+          ENDIF
+          NTRUNC = INRESO
+C
+        ELSE
+C
+C         Revert to the input truncation
+C
+          NTRUNC = INRESO
+          IF( NTRUNC.NE.NTROLD2 ) THEN
+            NTROLD2 = NTRUNC
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: Auto-resolution selection too high',JPQUIET)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVP: Resolution set to input resolution: ',NTRUNC)
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C     IF extra mode is in use, adjust the calculated truncation.
+C
+      MTRUNC = NTRUNC
+      IF( LNEWUV ) NTRUNC = MTRUNC - 1
+C
+      CALL INTLOG(JP_DEBUG,'INTUVP: vo/div truncation = ', NTRUNC)
+      CALL INTLOG(JP_DEBUG,'INTUVP: U/V truncation    = ', MTRUNC)
+C
+      ISIZE =  (MTRUNC+1)*(MTRUNC+4)
+      CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: Scratch memory type 5 allocation failed.',JPQUIET)
+        INTUVP = JPROUTINE + 4
+        GOTO 990
+      ENDIF
+C
+      IPVORT = 1
+      IPDIV = 1 + (INRESO+1)*(INRESO+4)
+      IDIVOFF = IPVORT + (NTRUNC+1)*(NTRUNC+4)
+C
+      CALL SH2SH( VD(IPDIV), INRESO, ZNFLDO(IDIVOFF), NTRUNC )
+C
+      CALL SH2SH( VD(IPVORT), INRESO, ZNFLDO, NTRUNC )
+C
+C     Get scratch memory for U and V spectral fields.
+C     U and V memory areas are adjacent.
+C
+      ISZUV = (MTRUNC+1)*(MTRUNC+4)
+      IP_U  = 1
+      IP_V  = IP_U + ISZUV
+C
+      ISIZE = ISZUV*2
+      CALL JMEMHAN( JPSCR3, IUV, ISIZE, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: Scratch memory type 3 allocation failed.',JPQUIET)
+        INTUVP = IERR
+        GOTO 990
+      ENDIF
+C
+C     Generate U and V spectral fields
+C
+      CALL JVOD2UV(ZNFLDO(IPVORT),ZNFLDO(IDIVOFF),NTRUNC,
+     X             UV(IP_U),UV(IP_V),MTRUNC)
+C
+       LSTYLE = LNOSTYLE.AND.
+     X         (NOSTYLE.EQ.JPSDISM).AND.
+     X         (NOREPR.EQ.JPREGULAR)
+C
+        IF( LSTYLE ) THEN
+            EW    = NOGRID(1) / PPMULT
+            NS    = NOGRID(2) / PPMULT
+            NORTH = REAL(NOAREA(1)) / PPMULT
+            WEST  = REAL(NOAREA(2)) / PPMULT
+            SOUTH = REAL(NOAREA(3)) / PPMULT
+            EAST  = REAL(NOAREA(4)) / PPMULT
+C
+            IERR = DSSAREA( EW, NS, NORTH, WEST, SOUTH, EAST)
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,'INTUVP: DSSAREA failed:',IERR)
+              INTUVP = JPROUTINE + 9
+              GOTO 900
+            ENDIF
+C
+            NOAREA(1) = NINT(NORTH * PPMULT)
+            NOAREA(2) = NINT(WEST  * PPMULT)
+            NOAREA(3) = NINT(SOUTH * PPMULT)
+            NOAREA(4) = NINT(EAST  * PPMULT)
+         ELSE
+C           Fixup area definition to correspond to grid definitions
+             IERR = FIXAREA()
+             IF ( IERR .NE. 0 ) THEN
+               CALL INTLOG(JP_ERROR,
+     X           'INTUVP: Fixup area definition failed.',JPQUIET)
+               INTUVP = IERR
+               GOTO 900
+             ENDIF
+         ENDIF
+
+cs      IERR = FIXAREA()
+cs      IF( IERR.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,'INTUVP: Fixarea failed.',JPQUIET)
+cs        INTUVP = IERR
+cs        GOTO 990
+cs      ENDIF
+C
+C     Get scratch space for interpolation
+      ISIZE = ISCRSZ()*2
+      IF( ISIZE.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVP: Get scratch space failed.',ISIZE)
+        INTUVP = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+      CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: Scratch memory(5) allocation failed.',JPQUIET)
+        INTUVP = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+C
+      LWIND = .TRUE.
+      LWINDSET = .TRUE.
+C
+C     Interpolate U and V
+C
+      NOLD = NIRESO
+      NIRESO = MTRUNC
+      NLENU = OUTLEN
+      NLENV = OUTLEN
+      IERR = INTUVXH(UV,ISZUV,ZNFLDO,KUGRIBO,KVGRIBO,NLENU,NLENV)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVP: U/V interpolation failed.',JPQUIET)
+        INTUVP = JPROUTINE + 6
+        GOTO 990
+      ENDIF
+C
+      NIRESO = NOLD
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      OUTLEN = NLENU
+C
+  990 CONTINUE
+C
+C     Clear change flags for next product processing and reset wind flag
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+      LWINDSET  = LOLDWIND
+      LWIND = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intuvph.F b/interpolation/intuvph.F
new file mode 100755
index 0000000..e59b415
--- /dev/null
+++ b/interpolation/intuvph.F
@@ -0,0 +1,547 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVPH( KFIELD1, KFIELD2, INLEN,
+     X                          KUGRIBO, KVGRIBO,
+     X                          OUTLENU, OUTLENV)
+C
+C---->
+C**** INTUVPH
+C
+C     Purpose
+C     -------
+C
+C     Interpolate GRIB format input spectral vorticity and divergence,
+C     or spectral U and V, fields to GRIB format U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVPH(KFIELD1,KFIELD2,INLEN,
+C                    KUGRIBO,KVGRIBO,OUTLENU,OUTLENV)
+C
+C     Input
+C     -----
+C
+C     KFIELD1 - Input vorticity or U field  (spectral, GRIB format).
+C     KFIELD2 - Input divergence or V field (spectral, GRIB format).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     KUGRIBO - Output U field (GRIB format).
+C     KVGRIBO - Output V field (GRIB format).
+C     OUTLENU - Output U field length (words).
+C     OUTLENV - Output V field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Convert spectral vorticity/divergence to spectral U/V and then
+C     interpolate U and V to output fields.
+C
+C     Note that a common block is used in intf.h to hold the U/V
+C     fields before interpolation.
+C
+C     Externals
+C     ---------
+C
+C     IBASINI - Ensure basic interpolation setup is done.
+C     INTUVDH - Encodes/decodes data into/from GRIB code.
+C     INTUVXH - Interpolate U or V component spectral field to grid point.
+C     JVOD2UV - Converts spectral vorticity/divergence to spectral U/V.
+C     JMEMHAN - Allocate scratch memory.
+C     GRIBEX  - GRIB decoding/encoding.
+C     ISCRSZ  - Calculate number of values in generated field.
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     INTLOG  - Log error message.
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     INSANE  - Ensure no outrageous values given for interpolation.
+C     GRSMKP  - P factor calculation switch for routine GRIBEX.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2001
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER KFIELD1(*), KFIELD2(*), INLEN
+      INTEGER KUGRIBO(*), KVGRIBO(*), OUTLENU, OUTLENV
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4,JPSCR5
+      PARAMETER (JPROUTINE = 40160 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+      PARAMETER (JPSCR5 = 5) 
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+      REAL EW, NS
+      LOGICAL LOLDWIND, LSPECUV
+      INTEGER IERR,KPR,ISZVD,ISZUV,IWORD,ISIZE,ILENF,ISAME,IPARAM
+      INTEGER NEXT, LOOP, MTRUNC, NTRUNC, NTROLD, NTROLD2, NPARAM
+      INTEGER MIRESO, MORESO, NOLD, NLEN
+C
+      LOGICAL LFIRST, LNEWUV
+      CHARACTER*3 EXTRA
+      DATA LFIRST/.TRUE./, LNEWUV/.TRUE./, EXTRA/'NO '/
+      SAVE LFIRST, LNEWUV
+C
+      DATA NTROLD/-1/, NTROLD2/-1/
+      SAVE NTROLD, NTROLD2
+      INTEGER IPVORT, IPDIV, IP_U, IP_V, IDIVOFF
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDO
+#endif
+      REAL ZNFLDO
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+#ifdef POINTER_64
+      INTEGER*8 IUV, IVD
+#endif
+      REAL UV, VD
+      POINTER ( IUV, UV )
+      POINTER ( IVD, VD )
+      DIMENSION UV( 1 ), VD( 1 )
+C
+C     Externals
+C
+      INTEGER RESET_C,ISCRSZ,FIXAREA,AURESOL
+      INTEGER IBASINI, INSANE, INTUVDH, INTUVXH
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTUVPH = 0
+      IERR    = 0
+      KPR     = 0
+C
+      IF( LFIRST ) THEN
+        CALL GETENV('IGNORE_UV_EXTRA_MODE', EXTRA)
+        IF((EXTRA(1:1).EQ.'Y').OR.(EXTRA(1:1).EQ.'y')) LNEWUV = .FALSE.
+        IF( LNEWUV ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVPH: IGNORE_UV_EXTRA_MODE not turned on',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVPH: IGNORE_UV_EXTRA_MODE turned on',JPQUIET)
+        ENDIF
+        LFIRST = .FALSE.
+      ENDIF
+C
+      MIRESO = NIRESO
+      MORESO = NORESO
+C
+      LOLDWIND = LWINDSET
+C
+C     Ensure that basic initialisation has been done
+C
+      IERR = IBASINI(0)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVPH: basic initialise failed',JPQUIET)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the input fields.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Need to establish input truncation, so unpack GRIB sections 1
+C     and 2.
+C
+      IPARAM = 0
+      ISZVD = 1
+      IERR = INTUVDH(VD(IPVORT),ISZVD,KFIELD1,INLEN,'I',IPARAM)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVPH: GRIB header decode failed',IERR)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+C     Check that the input is an ECMWF spectral field
+C
+      IF( (ISEC1(1).NE.128).OR.(ISEC2(1).NE.50) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVPH: Input is not ECMWF spectral field.',JPQUIET)
+        INTUVPH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Get scratch memory for input unpacked fields.
+C     Unpacked field memory areas are adjacent.
+C
+      NIRESO = ISEC2(2)
+      ISZVD  = (NIRESO+1)*(NIRESO+2)
+      IPVORT = 1
+      IPDIV  = 1 + ISZVD
+      CALL JMEMHAN( JPSCR4, IVD, ISZVD*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVPH: Scratch memory type 4 allocation failed.',JPQUIET)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+C     Decode input fields..
+C
+      IERR = INTUVDH(VD(IPVORT),ISZVD,KFIELD1,INLEN,'D',IPARAM)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVPH: Vorticity decoding failed',IERR)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+      IERR = INTUVDH(VD(IPDIV),ISZVD,KFIELD2,INLEN,'D',IPARAM)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVPH: Divergence decoding failed',IERR)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+      IERR = RESET_C( ISEC1, ISEC2, ZSEC2, ISEC4)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVPH: Setup interp. options from GRIB failed.',JPQUIET)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF( (ISAME.GT.0).AND.(ISAME.NE.27261) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVPH: Interpolation cannot use given values.',JPQUIET)
+        INTUVPH = ISAME
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Convert spectral vorticity/divergence
+C                  to spectral U/V
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Spectral U and V for Tn are to be generated from vorticity
+C     and divergence spectral T(n-1)
+C
+C     Get scratch memory for U and V spectral fields.
+C     The memory areas are adjacent.
+C
+      IF( ISEC1(6).EQ.155 ) THEN
+C
+C       Truncate vorticity and divergence to correspond to U/V
+C
+C
+        IF( LARESOL.AND.LNEWUV ) THEN
+          IF( (NOGRID(1).NE.0).AND.(NOGRID(2).NE.0) ) THEN
+            EW = FLOAT(NOGRID(1))/PPMULT
+            NS = FLOAT(NOGRID(2))/PPMULT
+            NTRUNC = AURESOL(NS,EW) - 1
+          ELSE IF( NOGAUSS.NE.0 ) THEN
+            EW = 90.0/FLOAT(NOGAUSS)
+            NS = EW
+            NTRUNC = AURESOL(NS,EW) - 1
+          ELSE IF( LNORESO ) THEN
+            NTRUNC = NORESO - 1
+          ELSE
+            NTRUNC = NIRESO - 1
+          ENDIF
+          IF( NTRUNC.GT.(NIRESO-1) ) NTRUNC = NIRESO - 1
+C
+        ELSE IF( LNORESO ) THEN
+          NTRUNC = NORESO - 1
+        ELSE
+          NTRUNC = NIRESO - 1
+        ENDIF
+C
+        IF( LNEWUV ) THEN
+          MTRUNC = NTRUNC + 1
+        ELSE
+          NTRUNC = NTRUNC + 1
+          MTRUNC = NTRUNC
+        ENDIF
+
+C
+C       Check whether the output resolution is greater than the input
+C
+        IF( NTRUNC.GT.NIRESO ) THEN
+C
+C         Issue warning if the output resolution was user-supplied
+C
+          IF( .NOT.LARESOL ) THEN
+C
+C           Revert to the input truncation
+C
+            IF( NIRESO.NE.NTROLD2 ) THEN
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: spectral -> grid point interpolation',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: User supplied resolution = ',NTRUNC)
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: Input field resolution   = ',NIRESO)
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: User supplied resolution ignored',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: Input field resolution has been used',JPQUIET)
+              NTROLD2 = NIRESO
+            ENDIF
+            NTRUNC = NIRESO
+C
+          ELSE
+C
+C           Revert to the input truncation
+C
+            NTRUNC = NIRESO
+            IF( NTRUNC.NE.NTROLD2 ) THEN
+              NTROLD2 = NTRUNC
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: Auto-resolution selection too high',JPQUIET)
+              CALL INTLOG(JP_WARN,
+     X          'INTUVPH: Resolution set to input resolution: ',NTRUNC)
+            ENDIF
+          ENDIF
+        ENDIF
+C
+C
+        CALL INTLOG(JP_DEBUG,'INTUVPH: vo/div truncation = ', NTRUNC)
+        CALL INTLOG(JP_DEBUG,'INTUVPH: U/V truncation    = ', MTRUNC)
+C
+        ISIZE =  (NTRUNC+1)*(NTRUNC+2)
+        CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE*2, JPALLOC, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVP: Scratch memory type 5 allocation failed.',JPQUIET)
+          INTUVPH = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+        CALL SH2SH( VD(IPVORT), NIRESO, ZNFLDO, NTRUNC )
+C
+        IDIVOFF = IPVORT + (NTRUNC+1)*(NTRUNC+2)
+        CALL SH2SH( VD(IPDIV), NIRESO, ZNFLDO(IDIVOFF), NTRUNC )
+C
+        NEXT = 0
+        DO LOOP = NTRUNC, 0, -1
+          NEXT = NEXT + LOOP + 1
+          ZNFLDO(IDIVOFF+NEXT*2-2) = 0
+          ZNFLDO(IDIVOFF+NEXT*2-1) = 0
+          ZNFLDO(IPVORT +NEXT*2-2) = 0
+          ZNFLDO(IPVORT +NEXT*2-1) = 0
+        ENDDO
+C
+        ISZUV = (MTRUNC+1)*(MTRUNC+2)
+        IP_U  = 1
+        IP_V  = 1 + ISZUV
+        CALL JMEMHAN( JPSCR3, IUV, ISZUV*2, JPALLOC, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVPH: Scratch memory type 3 allocation failed.',JPQUIET)
+            INTUVPH = IERR
+          GOTO 900
+        ENDIF
+C
+C       Generate U and V from vorticity and divergence,
+C
+        CALL JVOD2UV(ZNFLDO(IPVORT),ZNFLDO(IDIVOFF),NTRUNC,
+     X               UV(IP_U),UV(IP_V),MTRUNC)
+C
+      ELSE
+C
+C       Get scratch memory for U and V spectral fields.
+C       The memory areas are adjacent.
+C
+        NTRUNC = NIRESO
+        ISZUV = (NIRESO+1)*(NIRESO+2)
+        IP_U  = 1
+        IP_V  = 1 + ISZUV
+        CALL JMEMHAN( JPSCR3, IUV, ISZUV*2, JPALLOC, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVPH: Scratch memory type 3 allocation failed.',JPQUIET)
+          INTUVPH = IERR
+          GOTO 900
+        ENDIF
+C
+C       Transfer input spectral U and V to the memory areas.
+C
+        DO LOOP = 0, ISZUV-1
+          UV(IP_U + LOOP) = VD(IPVORT + LOOP)
+          UV(IP_V + LOOP) = VD(IPDIV  + LOOP)
+        ENDDO
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4. Handle spectral output.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( (LNORESO)            .AND.
+     X    ((NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)) ) THEN
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'INTUVPH: Produce spectral output with truncation',NORESO)
+C
+C       Set GRIBEX flag to force recalculation of complex packing factor
+C
+        CALL GRSMKP(1)
+C
+        ISIZE =  (NORESO+1)*(NORESO+2)
+        CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE*2, JPALLOC, IERR)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVPH: Scratch memory type 5 allocation failed.',JPQUIET)
+          INTUVPH = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+        IP_U = 1
+        CALL SH2SH( UV(1), NIRESO, ZNFLDO(IP_U), NORESO )
+C
+        IP_V = 1 + (NORESO+1)*(NORESO+2)
+        CALL SH2SH( UV(1+ISZUV), NIRESO, ZNFLDO(IP_V), NORESO )
+C
+        NIRESO = NORESO
+C
+      ENDIF
+C
+C     Has all processing been done (ie is the output spectral)?
+C
+      IF( (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT) ) THEN
+C
+C       Code U into GRIB
+C
+        IERR = INTUVDH(ZNFLDO(IP_U),ISZUV,KUGRIBO,OUTLENU,'C',JP_U)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVPH: U encoding into GRIB failed.',IERR)
+          INTUVPH = JPROUTINE + 4
+          GOTO 900
+        ENDIF
+C
+C       Code V into GRIB
+C
+        IERR = INTUVDH(ZNFLDO(IP_V),ISZUV,KVGRIBO,OUTLENV,'C',JP_V)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVPH: V encoding into GRIB failed.',IERR)
+          INTUVPH = JPROUTINE + 4
+          GOTO 490
+        ENDIF
+C
+  490   CONTINUE
+C
+C       Turn off GRIBEX flag which forces recalculation of complex
+C       packing factor
+C
+        CALL GRSMKP(0)
+C
+        GOTO 900
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Generate interpolated GRIB format U and V fields.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+C     Get scratch space for interpolation
+C
+      IERR = FIXAREA()
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVPH: Fixarea failed.',JPQUIET)
+        INTUVPH = IERR
+        GOTO 900
+      ENDIF
+C
+      ISIZE = ISCRSZ()*2
+      IF( ISIZE.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVPH: Get scratch space failed.',ISIZE)
+        INTUVPH = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVPH: Scratch memory(5) allocation failed.',JPQUIET)
+        INTUVPH = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+C
+      LWIND = .TRUE.
+      LWINDSET = .TRUE.
+C
+C     Interpolate U and V
+C
+      NOLD = NIRESO
+      NIRESO = MTRUNC
+      IERR = INTUVXH(UV,ISZUV,ZNFLDO,KUGRIBO,KVGRIBO,OUTLENU,OUTLENV)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVPH: U/V interpolation failed.',JPQUIET)
+        INTUVPH = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+      NIRESO = NOLD
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing and reset wind flag
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+      LWINDSET  = LOLDWIND
+      LWIND = .FALSE.
+C
+      NIRESO = MIRESO
+      NORESO = MORESO
+C
+      RETURN
+      END
diff --git a/interpolation/intuvs.F b/interpolation/intuvs.F
new file mode 100755
index 0000000..201ddc3
--- /dev/null
+++ b/interpolation/intuvs.F
@@ -0,0 +1,142 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVS( KVGRIB, KDGRIB, INLEN,
+     X                         KUGRIBO, KVGRIBO, OUTLEN)
+C
+C---->
+C**** INTUVS
+C
+C     Purpose
+C     -------
+C
+C     Convert GRIB format input vorticity and divergence field to
+C     GRIB format U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVS( KVGRIB, KDGRIB, INLEN, KUGRIBO,KVGRIBO,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     KVGRIB - Input vorticity field  (spectral, GRIB format).
+C     KDGRIB - Input divergence field (spectral, GRIB format).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     KUGRIBO - Output U field (GRIB format).
+C     KVGRIBO - Output V field (GRIB format).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Convert spectral vorticity/divergence to spectral U/V without
+C     subsequent interpolation.
+C
+C     Note that a common block is used in intf.h to hold the U/V
+C     fields before interpolation.
+C
+C     Externals
+C     ---------
+C
+C     INTUVP - Now does all the work!
+C     INTLOG - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Feb 1995
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF     February 2001
+C     Replace code by a call to intuvp.
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER KVGRIB(*), KDGRIB(*), INLEN
+      INTEGER KUGRIBO(*), KVGRIBO(*), OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26900 )
+C
+C     Local variables
+C
+      INTEGER IHOLD1, IHOLD2, IHOLD3
+      LOGICAL LHOLD4
+C
+C     Externals
+C
+      INTEGER INTUVP
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the vorticity/divergence fields.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Ensure output representation says 'spectral, no rotation'
+C
+      IHOLD1    = NOREPR
+      NOREPR    = JPSPHERE
+      IHOLD2    = NOROTA(1)
+      IHOLD3    = NOROTA(2)
+      NOROTA(1) = -9000000
+      NOROTA(2) = 0.0
+      LHOLD4    = LNOROTA
+      LNOROTA   = .FALSE.
+C
+      INTUVS =
+     X  INTUVP(KVGRIB,KDGRIB,INLEN,KUGRIBO,KVGRIBO,OUTLEN)
+C
+C     Restore output representation
+C
+      NOREPR    = IHOLD1
+      NOROTA(1) = IHOLD2
+      NOROTA(2) = IHOLD3
+      LNOROTA   = LHOLD4
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intuvu.F b/interpolation/intuvu.F
new file mode 100755
index 0000000..cb69227
--- /dev/null
+++ b/interpolation/intuvu.F
@@ -0,0 +1,861 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVU( PVYIN, PDVIN, INLEN,
+     X                         PUOUT, PVOUT, OUTLEN)
+C
+C---->
+C**** INTUVU
+C
+C     Purpose
+C     -------
+C
+C     Interpolate unpacked input vorticity and divergence field to
+C     unpacked U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IERR = INTUVU( PVYIN, PDVIN, INLEN, PUOUT,PVOUT,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     PVYIN  - Input vorticity field  (unpacked array).
+C     PDVIN  - Input divergence field (unpacked array).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     PUOUT  - Output U field (unpacked array).
+C     PVOUT  - Output V field (unpacked array).
+C     OUTLEN - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Convert spectral vorticity/divergence to spectral U/V and then
+C     interpolate U and V to output fields.
+C
+C
+C     Externals
+C     ---------
+C
+C     JVOD2UV - Converts spectral vorticity/divergence to spectral U/V.
+C     JMEMHAN - Allocate scratch memory.
+C     INTFAU  - Prepare to interpolate unpacked input field.
+C     INTFBU  - Interpolate unpacked input field.
+C     INTLOG  - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Feb 1995
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INLEN, OUTLEN
+      REAL PVYIN(INLEN), PDVIN(INLEN), PUOUT(*), PVOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "current.h"
+#include "intlog.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4, JPSCR5
+      PARAMETER (JPROUTINE = 27000 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+      PARAMETER (JPSCR5 = 5) 
+C
+C     Local variables
+C
+      INTEGER IIHOLD, IOHOLD
+      DIMENSION IIHOLD(4), IOHOLD(4)
+      CHARACTER*1 HOLDTYP
+      REAL EW, NS
+      LOGICAL LOLDWIND, LSPECUV, LSPCUVI, LSFCUVI
+      INTEGER IERR, KPR, ISZUV, ISIZE, NOLD, IDIVOFF
+      INTEGER NEXT, LOOP, MTRUNC, NTRUNC, NTROLD, NTROLD2, IPVORT
+      INTEGER KK, ISAME
+      INTEGER NLON, NLAT, NUMPTS, NGAUSS, NCOUNT, NUVFLAG
+      LOGICAL LSTYLE, LFRAME
+      REAL NORTH, SOUTH, WEST, EAST
+      REAL AREA(4), POLE(2), GRID(2)
+      INTEGER KPTS(JPGTRUNC*2)
+      REAL GLATS(JPGTRUNC*2)
+      REAL OLDGRID(2)
+C
+      LOGICAL LFIRST, LNEWUV
+      CHARACTER*3 EXTRA
+      DATA LFIRST/.TRUE./, LNEWUV/.TRUE./, EXTRA/'NO '/
+      SAVE LFIRST, LNEWUV
+C
+      DATA NTROLD/-1/, NTROLD2/-1/
+      SAVE NTROLD, NTROLD2
+      INTEGER IP_U, IP_V
+
+      REAL RGGRID, SWORK
+      POINTER (IRGGRID, RGGRID(1) )
+      POINTER (ISWORK, SWORK(1) )
+#ifdef POINTER_64
+      INTEGER*8 IZNFLDO
+#endif
+      REAL ZNFLDO
+      POINTER ( IZNFLDO, ZNFLDO )
+      DIMENSION ZNFLDO( 1 )
+#ifdef POINTER_64
+      INTEGER*8 IUV
+#endif
+      REAL UV
+      POINTER ( IUV, UV )
+      DIMENSION UV( 1 )
+C
+C     Externals
+C
+      INTEGER INTFAU,INTFBU,AURESOL,DSSAREA,FIXAREA
+      INTEGER HIRLAMW,HSP2GG
+      INTEGER INSANE
+      INTEGER HRG2GGW, HLL2LLW
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+      INTUVU = 0
+      IERR = 0
+      KPR = 0
+C
+C
+C     Save output area definitions
+C
+      DO 110 LOOP = 1, 4
+        IOHOLD(LOOP) = NOAREA(LOOP)
+  110 CONTINUE
+
+      LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+
+      IF( LFIRST ) THEN
+        CALL GETENV('IGNORE_UV_EXTRA_MODE', EXTRA)
+        IF((EXTRA(1:1).EQ.'Y').OR.(EXTRA(1:1).EQ.'y')) LNEWUV = .FALSE.
+        IF( LNEWUV ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVU: IGNORE_UV_EXTRA_MODE not turned on',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVU: IGNORE_UV_EXTRA_MODE turned on',JPQUIET)
+        ENDIF
+        LFIRST = .FALSE.
+      ENDIF
+C
+      NOLD = NIRESO
+C
+      LSPECUV = (NOREPR.EQ.JPSPHERE).OR.(NOREPR.EQ.JPSPHROT)
+      LSPCUVI = (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)
+      LSFCUVI = (.NOT.LSPCUVI).AND.LNOROTA
+
+C
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+cs   Regular Gaussian has to be set here
+        IF( NOREPR.EQ.JPNOTYPE ) THEN
+         IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+            CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IERR)
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'INTUVU: JGETGG failed, NOGAUSS = ',NOGAUSS)
+              INTUVU = IERR
+              GOTO 900
+            ENDIF
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'F'
+          ENDIF
+          NOREPR = JPGAUSSIAN
+        ENDIF
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Convert spectral vorticity/divergence to spectral U/V
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( LSPECUV ) THEN
+C
+C       Spectral U and V for Tn are to be generated from vorticity
+C       and divergence spectral T(n-1)
+C
+        IF( LARESOL.AND.LNEWUV ) THEN
+          IF( (NOGRID(1).NE.0).AND.(NOGRID(2).NE.0) ) THEN
+            EW = FLOAT(NOGRID(1))/PPMULT
+            NS = FLOAT(NOGRID(2))/PPMULT
+            NTRUNC = AURESOL(NS,EW) - 1
+          ELSE IF( NOGAUSS.NE.0 ) THEN
+            EW = 90.0/FLOAT(NOGAUSS)
+            NS = EW
+            NTRUNC = AURESOL(NS,EW) - 1
+          ELSE IF( LNORESO ) THEN
+            NTRUNC = NORESO - 1
+          ELSE
+            NTRUNC = NIRESO - 1
+          ENDIF
+          IF( NTRUNC.GT.(NIRESO-1) ) NTRUNC = NIRESO - 1
+C
+        ELSE IF( LNORESO ) THEN
+          NTRUNC = NORESO - 1
+        ELSE
+          NTRUNC = NIRESO - 1
+        ENDIF
+C
+        IF( LNEWUV ) THEN
+          MTRUNC = NTRUNC + 1
+        ELSE
+          NTRUNC = NTRUNC + 1
+          MTRUNC = NTRUNC
+        ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Use old-style processing if IGNORE_UV_EXTRA_MODE = Y
+C     -----------------------------------------------------------------|
+C
+        IF( .NOT.LNEWUV ) THEN
+C
+          CALL INTLOG(JP_DEBUG,'INTUVU: vo/div truncation = ', NIRESO)
+C
+C         Get scratch memory for U and V spectral fields.
+C         U and V memory areas are adjacent.
+C
+          ISZUV = (NIRESO+1)*(NIRESO+2)
+          IP_U = 1
+          IP_V = 1 + ISZUV
+          CALL JMEMHAN( JPSCR3, IUV, ISZUV*2, JPALLOC, IERR)
+          IF ( IERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,'INTUVU: Memory allocn fail',JPQUIET)
+            INTUVU = IERR
+            GOTO 900
+          ENDIF
+C
+C         Generate U and V with same truncation as input fields.
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'INTUVU: Make intermediate U/V with truncation = ', NIRESO)
+C
+          CALL JVOD2UV(PVYIN,PDVIN,NIRESO,UV(IP_U),UV(IP_V),NIRESO)
+C
+C         Is the output a truncated spectral field?
+C
+          IF( LNORESO ) THEN
+C
+            CALL INTLOG(JP_DEBUG,
+     X        'INTUVU: Produce spectral output with truncation',NORESO)
+C
+            ISIZE = (NORESO+1)*(NORESO+2)
+            CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE, JPALLOC, IERR)
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_FATAL,'INTUVU: Get scratch fail',JPQUIET)
+              INTUVU = JPROUTINE + 2
+              GOTO 900
+            ENDIF
+C
+            CALL SH2SH( UV(IP_U), NIRESO, ZNFLDO, NORESO )
+            DO LOOP = 1, ISIZE
+              PUOUT(LOOP) = ZNFLDO(LOOP)
+            ENDDO
+C
+            CALL SH2SH( UV(IP_V), NIRESO, ZNFLDO, NORESO )
+            DO LOOP = 1, ISIZE
+              PVOUT(LOOP) = ZNFLDO(LOOP)
+            ENDDO
+C
+            NIRESO = NORESO
+C
+            OUTLEN = ISZUV
+
+            GOTO 900
+C
+          ENDIF
+C
+C     -----------------------------------------------------------------|
+C       Use new-style processing if IGNORE_UV_EXTRA_MODE not set
+C     -----------------------------------------------------------------|
+C
+        ELSE
+C
+          CALL INTLOG(JP_DEBUG,'INTUVU: vo/div truncation = ', NTRUNC)
+          CALL INTLOG(JP_DEBUG,'INTUVU: U/V truncation    = ', MTRUNC)
+C
+C         Truncate vorticity and divergence to correspond to U/V
+C
+          ISIZE =  (MTRUNC+1)*(MTRUNC+2)
+          CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE*2, JPALLOC, IERR)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVU: Scratch memory type 5 allocn failed.',JPQUIET)
+            INTUVU = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+          IPVORT = 1
+          CALL SH2SH( PVYIN, NIRESO, ZNFLDO, NTRUNC )
+C
+          IDIVOFF = 1 + (NTRUNC+1)*(NTRUNC+2)
+          CALL SH2SH( PDVIN, NIRESO, ZNFLDO(IDIVOFF), NTRUNC )
+C
+C         Get scratch memory for U and V spectral fields.
+C         U and V memory areas are adjacent.
+C
+          ISZUV = (MTRUNC+1)*(MTRUNC+2)
+          IP_U = 1
+          IP_V = 1 + ISZUV
+C
+          ISIZE = ISZUV*2
+          CALL JMEMHAN( JPSCR3, IUV, ISIZE, JPALLOC, IERR)
+          IF ( IERR .NE. 0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTUVU: Scratch memory type 3 allocation failed.',JPQUIET)
+          INTUVU = IERR
+          GOTO 900
+        ENDIF
+C
+C       Generate U and V spectral fields
+C
+          CALL JVOD2UV(ZNFLDO(IPVORT),ZNFLDO(IDIVOFF),NTRUNC,
+     X                 UV(IP_U),UV(IP_V),MTRUNC)
+C
+          DO LOOP = 1, ISZUV
+            PUOUT(LOOP) = UV(LOOP)
+            PVOUT(LOOP) = UV(LOOP+ISZUV)
+          ENDDO
+C
+C
+          OUTLEN = ISZUV
+cs  added in case of packing after conversion
+          NORESO = MTRUNC
+C
+          GOTO 900
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Generate grid point GRIB format U and V fields.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+cs    this is for merging with grib_api
+      LUVCOMP = .FALSE.
+C     Spectral U and V for Tn are to be generated from vorticity
+C     and divergence spectral T(n-1)
+C
+C     See whether or not the 'autoresol' flag is set.
+C     If not, use the input truncation.
+C
+      IF( LARESOL ) THEN
+        IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+          EW = FLOAT(NOGRID(1))/PPMULT
+          NS = FLOAT(NOGRID(2))/PPMULT
+        ELSE
+          EW = 90.0/FLOAT(NOGAUSS)
+          NS = EW
+        ENDIF
+        NTRUNC = AURESOL(EW,NS)
+        IF( NTRUNC.NE.NTROLD ) THEN
+          NTROLD = NTRUNC
+          CALL INTLOG(JP_WARN,
+     X      'INTUVU: Resolution automatically set to ', NTRUNC)
+        ENDIF
+      ELSE IF( LNORESO ) THEN
+        NTRUNC = NORESO
+      ELSE
+        NTRUNC = NIRESO
+      ENDIF
+C
+C     Check whether the output resolution is greater than the input
+C
+      IF( NTRUNC.GT.NIRESO ) THEN
+C
+C       Issue warning if the output resolution was user-supplied
+C
+        IF( .NOT.LARESOL ) THEN
+C
+C         Revert to the input truncation
+C
+          IF( NIRESO.NE.NTROLD2 ) THEN
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: spectral -> grid point interpolation',JPQUIET)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: User supplied resolution = ',NTRUNC)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: Input field resolution   = ',NIRESO)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: User supplied resolution ignored',JPQUIET)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: Input field resolution has been used',JPQUIET)
+            NTROLD2 = NIRESO
+          ENDIF
+          NTRUNC = NIRESO
+C
+        ELSE
+C
+C         Revert to the input truncation
+C
+          NTRUNC = NIRESO
+          IF( NTRUNC.NE.NTROLD2 ) THEN
+            NTROLD2 = NTRUNC
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: Automatic resolution selectn too high',JPQUIET)
+            CALL INTLOG(JP_WARN,
+     X        'INTUVU: Resolution reset to input resolution: ',NTRUNC)
+          ENDIF
+C
+        ENDIF
+      ENDIF
+C
+C     IF extra mode is in use, adjust the calculated truncation.
+C
+      MTRUNC = NTRUNC
+      IF( LNEWUV ) NTRUNC = MTRUNC - 1
+C
+      CALL INTLOG(JP_DEBUG,'INTUVU: vo/div truncation = ', NTRUNC)
+      CALL INTLOG(JP_DEBUG,'INTUVU: U/V truncation    = ', MTRUNC)
+C
+      ISIZE = (MTRUNC+1)*(MTRUNC+2)
+      CALL JMEMHAN( JPSCR5, IZNFLDO, ISIZE*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,
+     X    'INTUVU: Get scratch space failed',JPQUIET)
+        INTUVU = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Adjust the vorticity and divergence by one wave number before
+C     conversion to U and V
+C
+      IPVORT = 1
+      IDIVOFF = 1 + (NTRUNC+1)*(NTRUNC+2)
+C
+      CALL SH2SH( PVYIN, NIRESO, ZNFLDO, NTRUNC )
+C
+      CALL SH2SH( PDVIN, NIRESO, ZNFLDO(IDIVOFF), NTRUNC )
+C
+C     Get scratch memory for U and V spectral fields.
+C     U and V memory areas are adjacent.
+C
+      ISZUV = (MTRUNC+1)*(MTRUNC+2)
+      IP_U  = 1
+      IP_V  = IP_U + ISZUV
+C
+      ISIZE = ISZUV*2
+      CALL JMEMHAN( JPSCR3, IUV, ISIZE, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: Scratch memory type 3 allocation failed.',JPQUIET)
+        INTUVU = IERR
+        GOTO 900
+      ENDIF
+C
+C     Generate U and V spectral fields
+C
+      CALL JVOD2UV(ZNFLDO(IPVORT),ZNFLDO(IDIVOFF),NTRUNC,
+     X             UV(IP_U),UV(IP_V),MTRUNC)
+C
+      NIRESO = MTRUNC
+C
+C
+      LSTYLE = LNOSTYLE.AND.
+     X         (NOSTYLE.EQ.JPSDISM).AND.
+     X         (NOREPR.EQ.JPREGULAR)
+C
+        IF( LSTYLE ) THEN
+            EW    = NOGRID(1) / PPMULT
+            NS    = NOGRID(2) / PPMULT
+            NORTH = REAL(NOAREA(1)) / PPMULT
+            WEST  = REAL(NOAREA(2)) / PPMULT
+            SOUTH = REAL(NOAREA(3)) / PPMULT
+            EAST  = REAL(NOAREA(4)) / PPMULT
+C
+            IERR = DSSAREA( EW, NS, NORTH, WEST, SOUTH, EAST)
+            IF( IERR.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,'INTUVU: DSSAREA failed:',IERR)
+              INTUVU = JPROUTINE + 9
+              GOTO 900
+            ENDIF
+C
+            NOAREA(1) = NINT(NORTH * PPMULT)
+            NOAREA(2) = NINT(WEST  * PPMULT)
+            NOAREA(3) = NINT(SOUTH * PPMULT)
+            NOAREA(4) = NINT(EAST  * PPMULT)
+         ELSE
+C           Fixup area definition to correspond to grid definitions
+             IERR = FIXAREA()
+             IF ( IERR .NE. 0 ) THEN
+               CALL INTLOG(JP_ERROR,
+     X           'INTUVU: Fixup area definition failed.',JPQUIET)
+               INTUVU = IERR
+               GOTO 900
+             ENDIF
+         ENDIF
+      DO KK = 1,4
+          NOAAPI(KK) = NOAREA(KK)
+      ENDDO
+
+      NIFORM = 0
+      NIPARAM = JP_U
+      LWIND = .TRUE.
+      LOLDWIND = LWINDSET
+      LWINDSET = .TRUE.
+C
+      IF(LSFCUVI)   GOTO 850
+      IF( LNOROTA ) GOTO 700
+
+C     -----------------------------------------------------------------|
+C*    Section 4.   Interpolate U field.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IERR = INTFAU( UV(IP_U), ISZUV, PUOUT, OUTLEN)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: Prepare to interpolate failed.',JPQUIET)
+        INTUVU = IERR
+        GOTO 900
+      ENDIF
+C
+      IERR = INTFBU( UV(IP_U), ISZUV, PUOUT, OUTLEN)
+C
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVU: Interpolation failed.',JPQUIET)
+        INTUVU = IERR
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Interpolate V field.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      NIPARAM = JP_V
+      IERR = INTFAU( UV(IP_V), ISZUV, PVOUT, OUTLEN)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: Prepare to interpolate failed.',JPQUIET)
+        INTUVU = IERR
+        GOTO 900
+      ENDIF
+C
+      IERR = INTFBU( UV(IP_V), ISZUV, PVOUT, OUTLEN)
+C
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: INTFBU interpolate failed.',JPQUIET)
+        INTUVU = IERR
+        GOTO 900
+      ENDIF 
+
+cs      GOTO 900
+       GOTO 890
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.  Initialise spectral to grid-point with rotation 
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+      IF( .NOT.LUSEHIR ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU : Unable to rotate spectral U or V:',JPQUIET)
+        INTUVU  = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+      IF( (NOREPR.NE.JPREGROT).AND.(NOREPR.NE.JPREGULAR) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU : For U/V, only regular lat/long',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU : output rotated grids allowed',JPQUIET)
+        INTUVU  = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+cs this is for merging with grib_api
+      LUVCOMP = .TRUE.
+      CALL INTLOG(JP_DEBUG,'INTUVU: Rotate the U & V fields',JPQUIET)
+      CALL INTLOG(JP_DEBUG,'INTUVU: South pole lat  ',NOROTA(1))
+      CALL INTLOG(JP_DEBUG,'INTUVU: South pole long ',NOROTA(2))
+C
+C     Fill area limits (handles case when default 0/0/0/0 given)
+C
+cssssssssss
+cs      IERR = FIXAREA()
+cs      IF( IERR.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,'INTUVU: area fixup failed',JPQUIET)
+cs        INTUVU = JPROUTINE + 3
+cs        GOTO 900
+cs      ENDIF
+C
+      AREA(1) = REAL(NOAREA(1))/PPMULT
+      AREA(2) = REAL(NOAREA(2))/PPMULT
+      AREA(3) = REAL(NOAREA(3))/PPMULT
+      AREA(4) = REAL(NOAREA(4))/PPMULT
+C
+      GRID(1) = REAL(NOGRID(1))/PPMULT
+      GRID(2) = REAL(NOGRID(2))/PPMULT
+C
+      POLE(1) = REAL(NOROTA(1))/PPMULT
+      POLE(2) = REAL(NOROTA(2))/PPMULT
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.   Convert spectral to suitable global reduced gaussian
+C     -----------------------------------------------------------------|
+C
+  800 CONTINUE
+C
+      NTRUNC = NIRESO
+      IERR = HSP2GG(NTRUNC,NGAUSS,KPTS,GLATS,ISIZE)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: problem getting data for reduced grid',NTRUNC)
+        INTUVU = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+      NCOUNT = ISIZE
+C
+C     Dynamically allocate memory for global reduced gaussian grid
+C
+      CALL JMEMHAN( 18, IRGGRID, (NCOUNT*2), 1, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: memory alloc for reduced grid fail',JPQUIET)
+        INTUVU = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Set flag to show field is a wind component
+C
+      NUVFLAG = 1
+C
+C     Create the reduced gaussian grid
+C
+      HOLDTYP = HOGAUST
+      WEST = 0.0
+      EAST = 360.0 - (360.0/(NGAUSS*4))
+C
+C     U component
+C
+      CALL JAGGGP(UV(IP_U),NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID,NUVFLAG,IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: spectral to reduced gaussian failed',JPQUIET)
+        INTUVU = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     V component
+C
+      CALL JAGGGP(UV(IP_V),NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID(1+NCOUNT),NUVFLAG,IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: spectral to reduced gaussian failed',JPQUIET)
+        INTUVU = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+
+      HOGAUST = HOLDTYP
+
+
+C     -----------------------------------------------------------------|
+C*    Section 8.   Rotate using 12-point horizontal interpolation
+C     -----------------------------------------------------------------|
+C
+  810 CONTINUE
+C
+C     Dynamically allocate memory for rotated lat/long grid
+C
+      NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X       NOGRID(JPWESTEP))
+      NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X       NOGRID(JPNSSTEP))
+C
+      NUMPTS = NLON * NLAT
+      ISIZE  = NUMPTS * 2
+      CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: memory alloc for lat/long grid fail',JPQUIET)
+        INTUVU = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+C
+      IERR = HIRLAMW(LO12PT,RGGRID,RGGRID(1+NCOUNT),NCOUNT,NGAUSS,AREA,
+     X               POLE,GRID,SWORK,SWORK(1+NUMPTS),NUMPTS,NLON,NLAT)
+C
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVU: HIRLAMW rotation failed',JPQUIET)
+        INTUVU = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+c
+      DO LOOP = 1, NUMPTS
+          PUOUT(LOOP) = SWORK(LOOP)
+          PVOUT(LOOP) = SWORK(LOOP+NUMPTS)
+      ENDDO
+
+      OUTLEN = NUMPTS
+
+cs       GOTO 900
+       GOTO 890
+c     -----------------------------------------------------------------|
+C*    Section 8.1   Grid to rotated grid  point
+C     -----------------------------------------------------------------|
+  850 CONTINUE
+C*    8.1a   Generate interpolated lat/long U and V fields.
+C     -----------------------------------------------------------------|
+C
+cs this is for merging with grib_api
+      LUVCOMP = .TRUE.
+C
+      IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C       Dynamically allocate scrath space for rotated lat/long grid
+C
+        NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X         NOGRID(JPWESTEP))
+        NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X         NOGRID(JPNSSTEP))
+C
+        NOWE = NLON
+        NONS = NLAT
+        OUTLEN = NLON * NLAT
+C
+C       Rotate reduced gaussian to lat/long
+C
+        IF( (NIREPR.EQ.JPGAUSSIAN).OR.(NIREPR.EQ.JPQUASI) ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTUVU: Rotate reduced gaussian to lat/long',JPQUIET)
+          IERR = HIRLAMW(LO12PT,
+     X                   PVYIN,PDVIN,INLEN,
+     X                   NOGAUSS,AREA,POLE,GRID,
+     X                   PUOUT,PVOUT,OUTLEN,NLON,NLAT)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVU: HIRLAMW rotation failed',JPQUIET)
+            INTUVU = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+C       Rotate lat/long to lat/long
+C
+        ELSE
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTUVU: Rotate lat/long to lat/long',JPQUIET)
+          OLDGRID(1) = REAL(NIGRID(1)) / PPMULT
+          OLDGRID(2) = REAL(NIGRID(2)) / PPMULT
+          IERR = HLL2LLW(LO12PT,PVYIN,PDVIN,
+     X                   OLDGRID,AREA,POLE,GRID,
+     X                   PUOUT,PVOUT,OUTLEN,NLON,NLAT)
+          IF( IERR.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVU: HLL2LLW rotation failed',JPQUIET)
+            INTUVU = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+      ELSE
+
+*    Section 8.1b   Generate interpolated gaussian U and V fields.
+C     -----------------------------------------------------------------|
+C
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTUVU: Rotate gaussian to gaussian',JPQUIET)
+C
+C       Dynamically allocate memory for rotated gaussian grids
+C
+        NUMPTS = NOGAUSS * NOGAUSS
+        OUTLEN = 2 * NUMPTS * 8
+C
+cs        NGAUSS = ISEC2(10)
+        IERR = HRG2GGW(LO12PT,
+     X                 PVYIN,PDVIN,INLEN,
+     X                 NIGAUSS,AREA,POLE,NOGAUSS,HOGAUST,
+     X                 PUOUT,PVOUT,OUTLEN,NUMPTS)
+        IF( IERR.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'INTUVU: HRG2GGW rotation failed',JPQUIET)
+            INTUVU = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+      ENDIF
+C
+  890 CONTINUE
+      IF( LFRAME ) THEN
+        NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X         NOGRID(JPWESTEP))
+        NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X         NOGRID(JPNSSTEP))
+        ISEC1(5) = 192
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+        LIMISSV = .TRUE.
+        CALL MKFRAME(NLON,NLAT,PUOUT,RMISSGV,NOFRAME)
+        CALL MKFRAME(NLON,NLAT,PVOUT,RMISSGV,NOFRAME)
+      ENDIF
+
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+      LWINDSET = LOLDWIND
+      DO 910 LOOP = 1, 4
+        NOAREA(LOOP) = IOHOLD(LOOP)
+  910 CONTINUE
+C
+      NIRESO = NOLD
+C
+      RETURN
+      END
diff --git a/interpolation/intuvxh.F b/interpolation/intuvxh.F
new file mode 100755
index 0000000..974bb61
--- /dev/null
+++ b/interpolation/intuvxh.F
@@ -0,0 +1,418 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVXH(PUVSH,KNVALS,ZNFLDO,KUGRIB,KVGRIB,
+     X                         OUTLENU,OUTLENV)
+C
+C---->
+C**** INTUVXH
+C
+C     Purpose
+C     -------
+C
+C     Interpolate U or V component spectral fields to grid point.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVXH(PUVSH,KNVALS,ZNFLDO,KUGRIB,KVGRIB,OUTLENU,OUTLENV)
+C
+C     Input
+C     -----
+C
+C     PUVSH  - Spectral U/V values. (U first)
+C     KNVALS - Number of values in each wind component field.
+C     ZNFLDO - Work array.
+C
+C
+C     Output
+C     ------
+C
+C     KUGRIB  - Output wind U component field (GRIB format).
+C     KVGRIB  - Output wind V component field (GRIB format).
+C     OUTLENU - Output U field length (words).
+C     OUTLENV - Output V field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     None.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTUVDH - Encode/decode data into/from GRIB code.
+C     INTFAU  - Prepare to interpolate unpacked input field.
+C     INTFBU  - Interpolate unpacked input field.
+C     INTLOG  - Log error message.
+C     MKFRAME - Create a 'frame' from a rectangular field.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2001
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+#include "current.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40170 )
+C
+C     Function arguments
+C
+      INTEGER KPARAM, KNVALS, KUGRIB(*), KVGRIB(*), OUTLENU, OUTLENV
+      REAL PUVSH(KNVALS*2), ZNFLDO(*)
+C
+C     Local variables
+C
+      LOGICAL LFRAME, LOLDWIND
+      INTEGER NPARAM, IRET, ILENF, NTRUNC, NGAUSS, ISIZE, NCOUNT
+      INTEGER NUVFLAG, NLON, NLAT, NUMPTS, NBYTES
+      REAL AREA(4), GRID(2), POLE(2), EAST, WEST
+      CHARACTER*1 HOLDTYP
+      INTEGER LOOP
+C
+      REAL RGGRID, SWORK
+      POINTER (IRGGRID, RGGRID(1) )
+      POINTER (ISWORK, SWORK(1) )
+C
+      INTEGER KPTS(JPGTRUNC*2)
+      REAL GLATS(JPGTRUNC*2)
+C
+C     Externals
+C
+      INTEGER FIXAREA, INTFAU, INTFBU, INTUVDH, HSP2GG
+      INTEGER HIRLAMW, JMALLOC
+C
+      DATA IRGGRID/-1/, ISWORK/-1/
+      SAVE IRGGRID, ISWORK
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTUVXH = 0
+C
+      LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+C
+      IF( LNOROTA ) GOTO 300
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Spectral to grid-point with no rotation
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'INTUVXH: Interoplate U & V fields with no rotation',JPQUIET)
+C
+C     Unpack and interpolate U field
+C
+      NIFORM = 0
+      NIPARAM = JP_U
+      LWIND = .TRUE.
+      LOLDWIND = LWINDSET
+      LWINDSET = .TRUE.
+C
+      IRET = INTFAU( PUVSH, KNVALS)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: Prepare to interpolate failed.',JPQUIET)
+        INTUVXH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTFBU( PUVSH, KNVALS, ZNFLDO, ILENF)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVXH: Interpolation failed.',JPQUIET)
+        INTUVXH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Unpack and interpolate V field
+C
+      NIPARAM = JP_V
+C
+      IRET = INTFAU( PUVSH(1+KNVALS), KNVALS)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: Prepare to interpolate failed.',JPQUIET)
+        INTUVXH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTFBU( PUVSH(1+KNVALS), KNVALS, ZNFLDO(1+ILENF), ILENF)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTUVXH: Interpolation failed.',JPQUIET)
+        INTUVXH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Reset the input format flag
+C
+      NIFORM = 1
+C
+C     Get some scratch memory for the U fields before interpolation
+C     (to prevent overwriting V in ZNFLDO during interpolation)
+C
+cs      ISIZE  = ILENF
+cs      CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+cs      IF( IRET.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'INTUVXH: memory alloc for scratch memory failed',JPQUIET)
+cs        INTUVXH = JPROUTINE + 2
+cs        GOTO 900
+cs      ENDIF
+C
+      LWINDSET = LOLDWIND
+C
+C
+C     If a 'frame' has been specified, build the frame
+C
+      IF( LFRAME ) THEN
+        LIMISSV = .TRUE.
+        NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X       NOGRID(JPWESTEP))
+        NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X       NOGRID(JPNSSTEP))
+        CALL MKFRAME(NLON,NLAT,ZNFLDO,RMISSGV,NOFRAME)
+        CALL MKFRAME(NLON,NLAT,ZNFLDO(1+ILENF),RMISSGV,NOFRAME)
+      ENDIF
+
+C     Code data into GRIB
+cs      DO LOOP = 1, ILENF
+cs        SWORK(LOOP) = ZNFLDO(LOOP)
+cs      ENDDO
+C
+cs      IRET = INTUVDH(SWORK,ILENF,KUGRIB,OUTLENU,'C',JP_U)
+      IRET = INTUVDH(ZNFLDO,ILENF,KUGRIB,OUTLENU,'C',JP_U)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: Wind component into GRIB encoding fail',IRET)
+        INTUVXH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTUVDH(ZNFLDO(1+ILENF),ILENF,KVGRIB,OUTLENV,'C',JP_V)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: Wind component into GRIB encoding fail',IRET)
+        INTUVXH = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Initialise spectral to grid-point with rotation
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( .NOT.LUSEHIR ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH : Unable to rotate spectral U or V:',JPQUIET)
+        INTUVXH  = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+      IF( (NOREPR.NE.JPREGROT).AND.(NOREPR.NE.JPREGULAR) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH : For U/V, only regular lat/long',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH : output rotated grids allowed',JPQUIET)
+        INTUVXH  = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+      CALL INTLOG(JP_DEBUG,'INTUVXH: Rotate the U & V fields',JPQUIET)
+      CALL INTLOG(JP_DEBUG,'INTUVXH: South pole lat  ',NOROTA(1))
+      CALL INTLOG(JP_DEBUG,'INTUVXH: South pole long ',NOROTA(2))
+C
+C     Fill area limits (handles case when default 0/0/0/0 given)
+C
+cs      IRET = FIXAREA()
+cs      IF( IRET.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,'INTUVXH: area fixup failed',JPQUIET)
+cs        INTUVXH = JPROUTINE + 3
+cs        GOTO 900
+cs      ENDIF
+C
+      AREA(1) = REAL(NOAREA(1))/PPMULT
+      AREA(2) = REAL(NOAREA(2))/PPMULT
+      AREA(3) = REAL(NOAREA(3))/PPMULT
+      AREA(4) = REAL(NOAREA(4))/PPMULT
+C
+      GRID(1) = REAL(NOGRID(1))/PPMULT
+      GRID(2) = REAL(NOGRID(2))/PPMULT
+C
+      POLE(1) = REAL(NOROTA(1))/PPMULT
+      POLE(2) = REAL(NOROTA(2))/PPMULT
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Convert spectral to suitable global reduced gaussian
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      NTRUNC = NIRESO
+      IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,GLATS,ISIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: problem getting data for reduced grid',NTRUNC)
+        INTUVXH = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+      NCOUNT = ISIZE
+C
+C     Dynamically allocate memory for global reduced gaussian grid
+C
+      CALL JMEMHAN( 18, IRGGRID, (NCOUNT*2), 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: memory alloc for reduced grid fail',JPQUIET)
+        INTUVXH = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Set flag to show field is a wind component
+C
+      NUVFLAG = 1
+C
+C     Create the reduced gaussian grid
+C
+      HOLDTYP = HOGAUST
+      WEST = 0.0
+      EAST = 360.0 - (360.0/(NGAUSS*4))
+C
+C     U component
+C
+      CALL JAGGGP(PUVSH,NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID,NUVFLAG,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: spectral to reduced gaussian failed',JPQUIET)
+        INTUVXH = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     V component
+C
+      CALL JAGGGP(PUVSH(1+KNVALS),NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID(1+NCOUNT),NUVFLAG,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: spectral to reduced gaussian failed',JPQUIET)
+        INTUVXH = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Rotate using 12-point horizontal interpolation
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     Dynamically allocate memory for rotated lat/long grid
+C
+      NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X       NOGRID(JPWESTEP))
+      NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X       NOGRID(JPNSSTEP))
+C
+      NUMPTS = NLON * NLAT
+      ISIZE  = NUMPTS * 2
+      CALL JMEMHAN( 11, ISWORK, ISIZE, 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: memory alloc for lat/long grid fail',JPQUIET)
+        INTUVXH = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+C
+      IRET = HIRLAMW(LO12PT,RGGRID,RGGRID(1+NCOUNT),NCOUNT,NGAUSS,AREA,
+     X               POLE,GRID,SWORK,SWORK(1+NUMPTS),NUMPTS,NLON,NLAT)
+C
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: HIRLAMW rotation failed',JPQUIET)
+        INTUVXH = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Pack the fields into GRIB format
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+C     Reset the input format flag
+C
+      NIFORM = 1
+C
+C     Set the components flag for rotated U and V coefficients
+C
+      ISEC2(19) = 8
+C
+C     If a 'frame' has been specified, build the frame
+C
+      IF( LFRAME ) THEN
+        LIMISSV = .TRUE.
+        CALL MKFRAME(NLON,NLAT,SWORK,RMISSGV,NOFRAME)
+        CALL MKFRAME(NLON,NLAT,SWORK(1+NUMPTS),RMISSGV,NOFRAME)
+      ENDIF
+C
+      IRET = INTUVDH(SWORK,NUMPTS,KUGRIB,OUTLENU,'C',JP_U)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: Wind component into GRIB encoding fail',IRET)
+        INTUVXH = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+      IRET = INTUVDH(SWORK(1+NUMPTS),NUMPTS,KVGRIB,OUTLENV,'C',JP_V)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTUVXH: Wind component into GRIB encoding fail',IRET)
+        INTUVXH = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intuvy.F b/interpolation/intuvy.F
new file mode 100755
index 0000000..b0d981b
--- /dev/null
+++ b/interpolation/intuvy.F
@@ -0,0 +1,137 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTUVY( PVIN, PDIN, INLEN,
+     X                         PUOUT, PVOUT, OUTLEN)
+C
+C---->
+C**** INTUVY
+C
+C     Purpose
+C     -------
+C
+C     Convert GRIB format input vorticity and divergence field to
+C     unpacked U and V fields.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTUVY( PVIN, PDIN, INLEN, PUOUT,PVOUT,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     KVIN - Input vorticity field  (spectral).
+C     KDIN - Input divergence field (spectral).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     KUOUT - Output U field
+C     KVOUT - Output V field
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Convert spectral vorticity/divergence to spectral U/V without
+C     subsequent interpolation.
+C
+C     Note that a common block is used in intf.h to hold the U/V
+C     fields before interpolation.
+C
+C     Externals
+C     ---------
+C
+C     INTUVU - Now does all the work!
+C     INTLOG - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     S.Curic     ECMWF     Dec 2006
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER  INLEN, OUTLEN
+      REAL     PVIN(INLEN), PDIN(INLEN), PUOUT(*), PVOUT(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26900 )
+C
+C     Local variables
+C
+      INTEGER IHOLD1, IHOLD2, IHOLD3
+      LOGICAL LHOLD4
+C
+C     Externals
+C
+      INTEGER INTUVU
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the vorticity/divergence fields.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Ensure output representation says 'spectral, no rotation'
+C
+      IHOLD1    = NOREPR
+      NOREPR    = JPSPHERE
+      IHOLD2    = NOROTA(1)
+      IHOLD3    = NOROTA(2)
+      NOROTA(1) = -9000000
+      NOROTA(2) = 0.0
+      LHOLD4    = LNOROTA
+      LNOROTA   = .FALSE.
+C
+      INTUVY =
+     X  INTUVU(PVIN,PDIN,INLEN,PUOUT,PVOUT,OUTLEN)
+C
+C     Restore output representation
+C
+      NOREPR    = IHOLD1
+      NOROTA(1) = IHOLD2
+      NOROTA(2) = IHOLD3
+      LNOROTA   = LHOLD4
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intvect.F b/interpolation/intvect.F
new file mode 100755
index 0000000..63cfac4
--- /dev/null
+++ b/interpolation/intvect.F
@@ -0,0 +1,511 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTVECT(PUFIELD,PVFIELD,KASIZE,
+     X                         KUGRIB,KVGRIB,OUTLEN)
+C
+C---->
+C**** INTVECT
+C
+C     Purpose
+C     -------
+C     Interpolate U or V component fields to grid point.
+C
+C
+C     Interface
+C     ---------
+C     IRET = INTVECT(PUFIELD,PVFIELD,KASIZE,
+C    X               KUGRIB,KVGRIB,OUTLEN)
+C
+C     Input
+C     -----
+C     PUFIELD - U values.
+C     PVFIELD - V values.
+C     KASIZE  - Size of input arrays
+C
+C
+C     Output
+C     ------
+C     KUGRIB - Output wind U component field (GRIB format).
+C     KVGRIB - Output wind V component field (GRIB format).
+C     OUTLEN - Output U field length (words).
+C
+C
+C     Method
+C     ------
+C     None.
+C
+C
+C     Externals
+C     ---------
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     IBASINI - Ensure basic interpolation setup is done.
+C     ISCRSZ  - Calculate number of values in generated field.
+C     INTUVDH - Encode/decode data into/from GRIB code.
+C     INTFAU  - Prepare to interpolate unpacked input field.
+C     INTFBU  - Interpolate unpacked input field.
+C     INTLOG  - Log error message.
+C     MKFRAME - Create a 'frame' from a rectangular field.
+C     INTUVGH - Interpolate GRIB U and V reduced gaussian to rotated GRIB
+C               U and V.
+C
+C
+C     Author
+C     ------
+C     J.D.Chambers     ECMWF     September 2004
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+#include "current.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40170 )
+C
+C     Function arguments
+C
+      INTEGER KPARAM, KASIZE, KUGRIB(*), KVGRIB(*), OUTLEN
+      REAL PUFIELD(KASIZE), PVFIELD(KASIZE)
+C
+C     Local variables
+C
+      LOGICAL LFRAME, LOLDWIND, LOMISSV
+      INTEGER NPARAM, IRET, ILENF, NTRUNC, NGAUSS, ISIZE, NCOUNT
+      INTEGER NUVFLAG, NLON, NLAT, NBYTES, NSIZE
+      INTEGER ISZVD, IHOLD, ISAME
+      INTEGER IN_U, IN_V
+      REAL DUMMY
+      REAL AREA(4), GRID(2), POLE(2), EAST, WEST
+      CHARACTER*1 HOLDTYP
+      INTEGER LOOP
+      INTEGER OUTLENO
+C
+      REAL RGGRID, SWORK, TWORK
+      POINTER (IRGGRID, RGGRID(1) )
+      POINTER (ISWORK, SWORK(1) )
+      POINTER (ITWORK, TWORK(1) )
+C
+      INTEGER KPTS(JPGTRUNC*2)
+      REAL GLATS(JPGTRUNC*2)
+
+      LOGICAL LFIRST, LNEWUV, LSPECUV
+      CHARACTER*3 EXTRA
+C
+C     Externals
+C
+      INTEGER FIXAREA, INTFAU, INTFBU, INTUVDH, HSP2GG, IBASINI
+      INTEGER HIRLAMW, ISCRSZ, RESET_C, INSANE, INTUVGH
+C
+      DATA IRGGRID/-1/, ISWORK/-1/, ITWORK/-1/
+      SAVE IRGGRID, ISWORK, ITWORK
+      DATA LFIRST/.TRUE./, LNEWUV/.TRUE./, EXTRA/'NO '/
+      SAVE LFIRST, LNEWUV
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTVECT = 0
+
+
+      IF( LFIRST ) THEN
+        CALL GETENV('IGNORE_UV_EXTRA_MODE', EXTRA)
+        IF((EXTRA(1:1).EQ.'Y').OR.(EXTRA(1:1).EQ.'y')) LNEWUV = .FALSE.
+        IF( LNEWUV ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTVECT: IGNORE_UV_EXTRA_MODE not turned on',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'INTVECT: IGNORE_UV_EXTRA_MODE turned on',JPQUIET)
+        ENDIF
+        LFIRST = .FALSE.
+      ENDIF
+C
+      LOLDWIND = LWINDSET
+C
+C     Ensure that basic initialisation has been done
+C
+      IRET = IBASINI(0)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: basic initialise failed',JPQUIET)
+        INTVECT = IRET
+        GOTO 900
+      ENDIF
+C
+C     Unpack GRIB sections 1 and 2.
+C
+      ISZVD = 1
+      IRET = INTUVDH(DUMMY,ISZVD,PUFIELD,KASIZE,'J',IN_U)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: GRIB header decode failed',IRET)
+        INTVECT = IRET
+        GOTO 900
+      ENDIF
+      NSIZE = ISEC4(1)
+      NIREPR = ISEC2(1)
+      LSPECUV = (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)
+      IF( LSPECUV ) NIRESO = ISEC2(2)
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+      IRET = RESET_C(ISEC1, ISEC2, ZSEC2, ISEC4)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: Setup interp. options from GRIB failed.',JPQUIET)
+        INTVECT = IRET
+        GOTO 900
+      ENDIF
+
+      IF(NIREPR.EQ.JPREGROT) THEN
+        OUTLEN = 0
+        IRET   = 0
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: Input U and V rotated lat/long fields ...',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'INTF: ... no interpolation has been done',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C       Only allowed rotations are:
+C        - spectral to regular lat/long
+C        - reduced gaussian to regular lat/long
+C
+      IF( LNOROTA ) THEN
+        IF( ((NOREPR.NE.JPREGROT).AND.(NOREPR.NE.JPREGULAR)).OR.
+     X      ((NIREPR.NE.JPSPHERE).AND.(NIREPR.NE.JPQUASI)) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTVECT: For vector fields, only allowed rotations are:',
+     X      JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTVECT: spectral to regular lat/long, or',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTVECT: reduced gaussian to regular lat/long',JPQUIET)
+          INTVECT = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF( (ISAME.GT.0).AND.(ISAME.NE.27261) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: Interpolation cannot use given values.',JPQUIET)
+        INTVECT = ISAME
+        GOTO 900
+      ENDIF
+C
+      LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+C
+C     Fill area limits (handles case when default 0/0/0/0 given)
+C
+      IRET = FIXAREA()
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: area fixup failed',JPQUIET)
+        INTVECT = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+      AREA(1) = REAL(NOAREA(1))/PPMULT
+      AREA(2) = REAL(NOAREA(2))/PPMULT
+      AREA(3) = REAL(NOAREA(3))/PPMULT
+      AREA(4) = REAL(NOAREA(4))/PPMULT
+C
+      GRID(1) = REAL(NOGRID(1))/PPMULT
+      GRID(2) = REAL(NOGRID(2))/PPMULT
+C
+      IF( LNOROTA ) THEN
+        POLE(1) = REAL(NOROTA(1))/PPMULT
+        POLE(2) = REAL(NOROTA(2))/PPMULT
+        CALL INTLOG(JP_DEBUG,'INTVECT: Rotate the U & V fields',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTVECT: South pole lat  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'INTVECT: South pole long ',NOROTA(2))
+      ELSE
+        NOROTA(1) = -9000000
+        NOROTA(2) = 0
+      ENDIF
+C
+      IF( .NOT. LSPECUV ) GOTO 500
+C
+C     Get some scratch memory for the U and V fields
+C
+      ILENF = NSIZE
+      ISIZE = ILENF * 2
+      CALL JMEMHAN( 11, ISWORK, NSIZE*2, 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: memory alloc for scratch memory failed',JPQUIET)
+        INTVECT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Unpack U field
+C
+      NIFORM = 0
+      NIPARAM = IN_U
+      LWIND = .TRUE.
+      LOLDWIND = LWINDSET
+      LWINDSET = .TRUE.
+C
+      IRET = INTUVDH(SWORK,NSIZE,PUFIELD,KASIZE,'D',NIPARAM)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: Vorticity decoding failed',IRET)
+        INTVECT = IRET
+        GOTO 900
+      ENDIF
+      IN_U = ISEC1(6)
+C
+C     Unpack V field
+C
+      NIPARAM = IN_V
+C
+      IRET = INTUVDH(SWORK(1+NSIZE),NSIZE,PVFIELD,KASIZE,'D',NIPARAM)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: Vorticity decoding failed',IRET)
+        INTVECT = IRET
+        GOTO 900
+      ENDIF
+      IN_V = ISEC1(6)
+C
+      IF( LNOROTA ) GOTO 300
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Spectral to grid-point with no rotation
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'INTVECT: Interpolate U & V fields with no rotation',JPQUIET)
+C
+      CALL JMEMHAN( 18, ITWORK, ISIZE, 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: memory alloc for scratch memory failed',JPQUIET)
+        INTVECT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Interpolate U field
+C
+      IRET = INTFAU(SWORK, NSIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: Prepare to interpolate failed.',JPQUIET)
+        INTVECT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTFBU(SWORK, NSIZE, TWORK, ILENF)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: Interpolation failed.',JPQUIET)
+        INTVECT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Interpolate V field
+C
+      IRET = INTFAU(SWORK(1+NSIZE),NSIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: Prepare to interpolate failed.',JPQUIET)
+        INTVECT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTFBU(SWORK(1+NSIZE),NSIZE, TWORK(1+ILENF), ILENF)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECT: Interpolation failed.',JPQUIET)
+        INTVECT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      GOTO 700
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Spectral to grid-point with rotation
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( .NOT.LUSEHIR ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT : Unable to rotate spectral U or V:',JPQUIET)
+        INTVECT  = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Convert spectral to suitable global reduced gaussian
+C
+      NTRUNC = NIRESO
+      IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,GLATS,ISIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: problem getting data for reduced grid',NTRUNC)
+        INTVECT = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+      NCOUNT = ISIZE
+C
+C     Dynamically allocate memory for global reduced gaussian grid
+C
+      CALL JMEMHAN( 18, IRGGRID, (NCOUNT*2), 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: memory alloc for reduced grid fail',JPQUIET)
+        INTVECT = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Set flag to show field is a wind component
+C
+      NUVFLAG = 1
+C
+C     Create the reduced gaussian grid
+C
+      HOLDTYP = HOGAUST
+      WEST = 0.0
+      EAST = 360.0 - (360.0/(NGAUSS*4))
+C
+C     U component spectral -> reduced gaussian
+C
+      CALL JAGGGP(SWORK,NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID,NUVFLAG,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: spectral to reduced gaussian failed',JPQUIET)
+        INTVECT = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     V component spectral -> reduced gaussian
+C
+      CALL JAGGGP(SWORK(1+NSIZE),NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID(1+NCOUNT),NUVFLAG,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: spectral to reduced gaussian failed',JPQUIET)
+        INTVECT = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     Rotate using 12-point horizontal interpolation
+C
+C     Dynamically allocate memory for rotated lat/long grid
+C
+      NLON = 1 + NINT((AREA(JPEAST)  - AREA(JPWEST)) /
+     X       GRID(JPWESTEP))                  ! SC
+      NLAT = 1 + NINT((AREA(JPNORTH) - AREA(JPSOUTH)) /
+     X       GRID(JPNSSTEP))                  ! SC
+C
+      ILENF = NLON * NLAT
+      ISIZE  = ILENF * 2
+      CALL JMEMHAN( 17, ITWORK, ISIZE, 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: memory alloc for lat/long grid fail',JPQUIET)
+        INTVECT = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+      IRET = HIRLAMW(LO12PT,RGGRID,RGGRID(1+NCOUNT),NCOUNT,NGAUSS,AREA,
+     X               POLE,GRID,TWORK,TWORK(1+ILENF),ILENF,NLON,NLAT)
+C
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: HIRLAMW rotation failed',JPQUIET)
+        INTVECT = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C     Set the components flag for rotated U and V coefficients
+C
+      ISEC2(19) = 8
+      NOWE = NLON
+      NONS = NLAT
+C
+      GOTO 700
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Reduced gaussian to grid-point
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      INTVECT =
+     X       INTUVGH(PUFIELD,PVFIELD,KASIZE,KUGRIB,KVGRIB,OUTLEN,OUTLEN)
+C
+      GOTO 900
+C
+C     -----------------------------------------------------------------|
+C*    Section 7.   Pack the fields into GRIB format
+C     -----------------------------------------------------------------|
+C
+  700 CONTINUE
+C
+C     Reset the input format flag
+C
+      NIFORM = 1
+C
+C     If a 'frame' has been specified, build the frame
+C
+      IF( LFRAME ) THEN
+        LOMISSV = LIMISSV
+        LIMISSV = .TRUE.
+        CALL MKFRAME(NLON,NLAT,TWORK,RMISSGV,NOFRAME)
+        CALL MKFRAME(NLON,NLAT,TWORK(1+ILENF),RMISSGV,NOFRAME)
+      ENDIF
+C
+      OUTLENO = OUTLEN
+      IRET = INTUVDH(TWORK,ILENF,KUGRIB,OUTLEN,'C',IN_U)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: Wind component into GRIB encoding fail',IRET)
+        INTVECT = JPROUTINE + 7
+        GOTO 900
+      ENDIF
+
+C
+      OUTLEN = OUTLENO
+      IRET = INTUVDH(TWORK(1+ILENF),ILENF,KVGRIB,OUTLEN,'C',IN_V)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECT: Wind component into GRIB encoding fail',IRET)
+        INTVECT = JPROUTINE + 7
+        GOTO 900
+      ENDIF
+C
+      IF( LFRAME ) LIMISSV = LOMISSV
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intvecy.F b/interpolation/intvecy.F
new file mode 100755
index 0000000..67cc67b
--- /dev/null
+++ b/interpolation/intvecy.F
@@ -0,0 +1,518 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTVECY(PUFIELD,PVFIELD,KASIZE,
+     X                         PUOUT,PVOUT,OUTLEN)
+C
+C---->
+C**** INTVECY
+C
+C     Purpose
+C     -------
+C     Interpolate U or V component fields to grid point.
+C
+C
+C     Interface
+C     ---------
+C     IRET = INTVECY(PUFIELD,PVFIELD,KASIZE,
+C    X               KUGRIB,KVGRIB,OUTLEN)
+C
+C     Input
+C     -----
+C     PUFIELD - U values.
+C     PVFIELD - V values.
+C     KASIZE  - Size of input arrays
+C
+C
+C     Output
+C     ------
+C     PUOUT - Output wind U component field
+C     PVOUT - Output wind V component field
+C     OUTLEN - Output U field length (words).
+C
+C
+C     Method
+C     ------
+C     None.
+C
+C
+C     Externals
+C     ---------
+C     RESET_C - Reset interpolation handling options using GRIB product.
+C     IBASINI - Ensure basic interpolation setup is done.
+C     ISCRSZ  - Calculate number of values in generated field.
+C     INTFAU  - Prepare to interpolate unpacked input field.
+C     INTFBU  - Interpolate unpacked input field.
+C     INTLOG  - Log error message.
+C     MKFRAME - Create a 'frame' from a rectangular field.
+C     INTUVGH - Interpolate GRIB U and V reduced gaussian to rotated GRIB
+C               U and V.
+C
+C
+C     Author
+C     ------
+C     S.Curic     ECMWF     December 2006
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+#include "current.h"
+#include "intlog.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 40170 )
+C
+C     Function arguments
+C
+      INTEGER KPARAM, KASIZE, OUTLEN
+      REAL PUFIELD(KASIZE), PVFIELD(KASIZE), PUOUT(*), PVOUT(*)
+C
+C     Local variables
+C
+      LOGICAL LFRAME, LOLDWIND, LOMISSV
+      INTEGER NPARAM, IRET, ILENF, NTRUNC, NGAUSS, ISIZE, NCOUNT
+      INTEGER NUVFLAG, NLON, NLAT, NBYTES, NSIZE
+      INTEGER IHOLD, ISAME
+      INTEGER IN_U, IN_V
+      INTEGER NUMPTS
+      REAL DUMMY
+      REAL AREA(4), GRID(2), POLE(2), EAST, WEST
+      REAL OLDGRID(2)
+      CHARACTER*1 HOLDTYP
+      INTEGER LOOP
+C
+      REAL RGGRID, SWORK, TWORK
+      POINTER (IRGGRID, RGGRID(1) )
+      POINTER (ISWORK, SWORK(1) )
+      POINTER (ITWORK, TWORK(1) )
+C
+      INTEGER KPTS(JPGTRUNC*2)
+      REAL GLATS(JPGTRUNC*2)
+
+      LOGICAL LFIRST, LNEWUV, LSPECUV
+      CHARACTER*3 EXTRA
+C
+C     Externals
+C
+      INTEGER FIXAREA, INTFAU, INTFBU, INTUVDH, HSP2GG, IBASINI
+      INTEGER HIRLAMW, ISCRSZ, RESET_C, INSANE, INTUVGH
+      INTEGER HRG2GGW, HLL2LLW
+C
+      DATA IRGGRID/-1/, ISWORK/-1/, ITWORK/-1/
+      SAVE IRGGRID, ISWORK, ITWORK
+      DATA LFIRST/.TRUE./, LNEWUV/.TRUE./, EXTRA/'NO '/
+      SAVE LFIRST, LNEWUV
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      INTVECY = 0
+      IF( LFIRST ) THEN
+        CALL GETENV('IGNORE_UV_EXTRA_MODE', EXTRA)
+        IF((EXTRA(1:1).EQ.'Y').OR.(EXTRA(1:1).EQ.'y')) LNEWUV = .FALSE.
+        IF( LNEWUV ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'INTVECY: IGNORE_UV_EXTRA_MODE not turned on',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'INTVECY: IGNORE_UV_EXTRA_MODE turned on',JPQUIET)
+        ENDIF
+        LFIRST = .FALSE.
+      ENDIF
+C
+      LOLDWIND = LWINDSET
+C
+C     Ensure that basic initialisation has been done
+C
+      IRET = IBASINI(0)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECY: basic initialise failed',JPQUIET)
+        INTVECY = IRET
+        GOTO 900
+      ENDIF
+C
+C
+cs      NSIZE = ISEC4(1)
+      NSIZE = KASIZE
+cs      NIREPR = ISEC2(1)
+      LSPECUV = (NIREPR.EQ.JPSPHERE).OR.(NIREPR.EQ.JPSPHROT)
+cs      IF( LSPECUV ) NIRESO = ISEC2(2)
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+cs      IRET = RESET_C(ISEC1, ISEC2, ZSEC2, ISEC4)
+cs      IF( IRET.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'INTVECY: Setup interp. options from GRIB failed.',JPQUIET)
+cs        INTVECY = IRET
+cs        GOTO 900
+cs      ENDIF
+C
+C       Only allowed rotations are:
+C        - spectral to regular lat/long
+C        - reduced gaussian to regular lat/long
+C
+      IF( LNOROTA ) THEN
+        IF( ((NOREPR.NE.JPREGROT).AND.(NOREPR.NE.JPREGULAR)).OR.
+     X      ((NIREPR.NE.JPSPHERE).AND.(NIREPR.NE.JPQUASI)) ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'INTVECY: For vector fields, only allowed rotations are:',
+     X      JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTVECY: spectral to regular lat/long, or',JPQUIET)
+          CALL INTLOG(JP_ERROR,
+     X      'INTVECY: reduced gaussian to regular lat/long',JPQUIET)
+          INTVECY = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Check that no outrageous values given for interpolation
+C
+      ISAME = INSANE()
+      IF( (ISAME.GT.0).AND.(ISAME.NE.27261) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: Interpolation cannot use given values.',JPQUIET)
+        INTVECY = ISAME
+        GOTO 900
+      ENDIF
+C
+      LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+C
+C     Fill area limits (handles case when default 0/0/0/0 given)
+C
+      IRET = FIXAREA()
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECY: area fixup failed',JPQUIET)
+        INTVECY = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+      AREA(1) = REAL(NOAREA(1))/PPMULT
+      AREA(2) = REAL(NOAREA(2))/PPMULT
+      AREA(3) = REAL(NOAREA(3))/PPMULT
+      AREA(4) = REAL(NOAREA(4))/PPMULT
+C
+      GRID(1) = REAL(NOGRID(1))/PPMULT
+      GRID(2) = REAL(NOGRID(2))/PPMULT
+C
+      IF( LNOROTA ) THEN
+        POLE(1) = REAL(NOROTA(1))/PPMULT
+        POLE(2) = REAL(NOROTA(2))/PPMULT
+        CALL INTLOG(JP_DEBUG,'INTVECY: Rotate the U & V fields',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'INTVECY: South pole lat  ',NOROTA(1))
+        CALL INTLOG(JP_DEBUG,'INTVECY: South pole long ',NOROTA(2))
+      ELSE
+        NOROTA(1) = -9000000
+        NOROTA(2) = 0
+      ENDIF
+C
+
+      IF( .NOT. LSPECUV ) GOTO 500
+C
+C     Get some scratch memory for the U and V fields
+C
+C     Unpack U field
+C
+      NIFORM = 0
+cs      NIPARAM = IN_U
+      LWIND = .TRUE.
+      LOLDWIND = LWINDSET
+      LWINDSET = .TRUE.
+C
+cs      IN_U = ISEC1(6)
+C
+C     Unpack V field
+C
+cs      NIPARAM = IN_V
+cs      IN_V = ISEC1(6)
+C
+      IF( LNOROTA ) GOTO 300
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Spectral to grid-point with no rotation
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'INTVECY: Interpolate U & V fields with no rotation',JPQUIET)
+C
+C
+C     Interpolate U field
+C
+      IRET = INTFAU(PUFIELD, KASIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: Prepare to interpolate failed.',JPQUIET)
+        INTVECY = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTFBU(PUFIELD, KASIZE, PUOUT, OUTLEN)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECY: Interpolation failed.',JPQUIET)
+        INTVECY = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Interpolate V field
+C
+      IRET = INTFAU(PVFIELD, KASIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: Prepare to interpolate failed.',JPQUIET)
+        INTVECY = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      IRET = INTFBU(PVFIELD, KASIZE, PVOUT, OUTLEN)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTVECY: Interpolation failed.',JPQUIET)
+        INTVECY = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      GOTO 700
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Spectral to grid-point with rotation
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( .NOT.LUSEHIR ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY : Unable to rotate spectral U or V:',JPQUIET)
+        INTVECY  = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Convert spectral to suitable global reduced gaussian
+C
+      NTRUNC = NIRESO
+      IRET = HSP2GG(NTRUNC,NGAUSS,KPTS,GLATS,ISIZE)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: problem getting data for reduced grid',NTRUNC)
+        INTVECY = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      NCOUNT = ISIZE
+C
+C     Dynamically allocate memory for global reduced gaussian grid
+C
+      CALL JMEMHAN( 18, IRGGRID, (NCOUNT*2), 1, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: memory alloc for reduced grid fail',JPQUIET)
+        INTVECY = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Set flag to show field is a wind component
+C
+      NUVFLAG = 1
+C
+C     Create the reduced gaussian grid
+C
+      HOLDTYP = HOGAUST
+      WEST = 0.0
+      EAST = 360.0 - (360.0/(NGAUSS*4))
+C
+C     U component spectral -> reduced gaussian
+C
+      CALL JAGGGP(PUFIELD,NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID,NUVFLAG,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: spectral to reduced gaussian failed',JPQUIET)
+        INTVECY = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     V component spectral -> reduced gaussian
+C
+      CALL JAGGGP(PVFIELD,NTRUNC,GLATS(1),GLATS(NGAUSS*2),WEST,
+     X            EAST,NGAUSS,'R',KPTS,RGGRID(1+NCOUNT),NUVFLAG,IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: spectral to reduced gaussian failed',JPQUIET)
+        INTVECY = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+      HOGAUST = HOLDTYP
+C
+C     Rotate using 12-point horizontal interpolation
+C
+C     Dynamically allocate memory for rotated lat/long grid
+C
+      NLON = 1 + NINT((AREA(JPEAST)  - AREA(JPWEST)) /
+     X       GRID(JPWESTEP))                  ! SC
+      NLAT = 1 + NINT((AREA(JPNORTH) - AREA(JPSOUTH)) /
+     X       GRID(JPNSSTEP))                  ! SC
+C
+      OUTLEN = NLON * NLAT
+C
+      IRET = HIRLAMW(LO12PT,RGGRID,RGGRID(1+NCOUNT),NCOUNT,NGAUSS,AREA,
+     X               POLE,GRID,PUOUT,PVOUT,OUTLEN,NLON,NLAT)
+C
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTVECY: HIRLAMW rotation failed',JPQUIET)
+        INTVECY = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+C
+C     Set the components flag for rotated U and V coefficients
+C
+cs      ISEC2(19) = 8
+      NOWE = NLON
+      NONS = NLAT
+      OUTLEN = NLAT*NLON
+
+C
+      GOTO 700
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Grid to grid  point
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C*    5a.   Generate interpolated lat/long U and V fields.
+C     -----------------------------------------------------------------|
+C
+C
+      IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+C       Dynamically allocate scrath space for rotated lat/long grid
+C
+        NLON = 1 + NINT(FLOAT(NOAREA(JPEAST)  - NOAREA(JPWEST)) /
+     X         NOGRID(JPWESTEP))
+        NLAT = 1 + NINT(FLOAT(NOAREA(JPNORTH) - NOAREA(JPSOUTH)) /
+     X         NOGRID(JPNSSTEP))
+C
+        NOWE = NLON
+        NONS = NLAT
+        OUTLEN = NLON * NLAT
+C
+C       Rotate reduced gaussian to lat/long
+C
+        IF( (NIREPR.EQ.JPGAUSSIAN).OR.(NIREPR.EQ.JPQUASI) ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTVECY: Rotate reduced gaussian to lat/long',JPQUIET)
+          IRET = HIRLAMW(LO12PT,
+     X                   PUFIELD,PVFIELD,KASIZE,
+     X                   NIGAUSS,AREA,POLE,GRID,
+     X                   PUOUT,PVOUT,OUTLEN,NLON,NLAT)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTUVGH: HIRLAMW rotation failed',JPQUIET)
+            INTUVGH = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+C
+C       Rotate lat/long to lat/long
+C
+        ELSE
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTVECY: Rotate lat/long to lat/long',JPQUIET)
+          OLDGRID(1) = REAL(NIGRID(1)) / PPMULT
+          OLDGRID(2) = REAL(NIGRID(2)) / PPMULT
+          IRET = HLL2LLW(LO12PT,PUFIELD,PVFIELD,
+     X                   OLDGRID,AREA,POLE,GRID,
+     X                   PUOUT,PVOUT,OUTLEN,NLON,NLAT)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'INTVECY: HLL2LLW rotation failed',JPQUIET)
+            INTVECY = JPROUTINE + 3
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+      ELSE
+C
+C*    Section 5b.   Generate interpolated gaussian U and V fields.
+C     -----------------------------------------------------------------|
+C
+  400   CONTINUE
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'INTVECY: Rotate gaussian to gaussian',JPQUIET)
+C
+C       Dynamically allocate memory for rotated gaussian grids
+C
+        NUMPTS = NOGAUSS * NOGAUSS
+        OUTLEN = 2 * NUMPTS * 8 
+C
+cs        NGAUSS = ISEC2(10)
+        IRET = HRG2GGW(LO12PT,
+     X                 PUFIELD,PVFIELD,KASIZE,
+     X                 NIGAUSS,AREA,POLE,NOGAUSS,HOGAUST,
+     X                 PUOUT,PVOUT,OUTLEN,NUMPTS)
+        IF( IRET.NE.0 ) THEN
+          IF( LDEBUG ) CALL INTLOG(JP_ERROR,
+     X        'INTVECY: HRG2GGW rotation failed',JPQUIET)
+            INTUVGH = JPROUTINE + 4
+            GOTO 900
+          ENDIF
+C
+      ENDIF
+C
+C
+  700 CONTINUE
+C
+C     Reset the input format flag
+C
+cs      NIFORM = 1
+C
+C     If a 'frame' has been specified, build the frame
+C
+      IF( LFRAME ) THEN
+        LOMISSV = LIMISSV
+        LIMISSV = .TRUE.
+        ISEC1(5) = 192
+        ISEC3(2) = NINT(RMISSGV)
+        ZSEC3(2) = RMISSGV
+        CALL MKFRAME(NLON,NLAT,PUOUT,RMISSGV,NOFRAME)
+        CALL MKFRAME(NLON,NLAT,PVOUT,RMISSGV,NOFRAME)
+        LIMISSV = LOMISSV
+      ENDIF
+
+      DO 910 LOOP = 1, 4
+        NOAAPI(LOOP) = NOAREA(LOOP)
+  910 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/intwave.F b/interpolation/intwave.F
new file mode 100755
index 0000000..73ebbd9
--- /dev/null
+++ b/interpolation/intwave.F
@@ -0,0 +1,542 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTWAVE(INGRIB,INLEN,OUTGRIB,OUTLEN)
+C
+C---->
+C**** INTWAVE
+C
+C     Purpose
+C     -------
+C
+C     Interpolate an ECMWF wave field wave field or a reduced
+C     latitude-longitude field
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTWAVE(INGRIB,INLEN,OUTGRIB,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routine; then repack into GRIB format.
+C
+C
+C     Externals
+C     ---------
+C
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     GRIBEX  - Decode/encode GRIB product.
+C     JMEMHAN - Handles memory allocation.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     INTLOG  - Log error message.
+C     WAVEXXX - Interpolate wave fields (except 2D spectra)
+C     WV2DXXX - Interpolate wave 2D spectra fields
+C     MKFRAME - Create a 'frame' from a rectangular field
+C     MKBITMP - Apply a bitmap to a rectangular field
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Sep 1996
+C
+C
+C     Modifications
+C     -------------
+C
+C     J.D.Chambers     ECMWF     Nov 1966
+C     Add interpolation of 2D spectra.
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        April 2004
+C     Handle reduced lat-long fields
+C
+C     S.Curic     ECMWF        April 2005
+C     Add support for frame and bitmap
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+#include "grfixed.h"
+#include "jparams.h"
+C
+C     Parameters
+      INTEGER JPROUTINE, JP2DSP, JP2DSPQ, JPMAXLT
+
+      PARAMETER (JPROUTINE = 40200 )
+      PARAMETER (JP2DSP  = 250 )
+C                           ^---- parameter number for 2D wave spectra (whole)
+      PARAMETER (JP2DSPQ = 251 )
+C                           ^---- parameter number for 2D wave spectra (single)
+      PARAMETER (JPMAXLT = 361 )
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+
+      REAL ZMISS
+      DATA ZMISS/-9999999.0/
+      INTEGER IWORD, IRET, ISIZE, NSPEC, LAT1, LOOP, IERR
+      INTEGER KNUM, NUM_E_W, NUM_N_S, NFULLNS, NFULLEW
+      REAL GRIDWE, GRIDNS, NORTH, SOUTH, WEST, EAST
+      INTEGER NUMPTS
+      DIMENSION NUMPTS(JPMAXLT)
+#ifdef POINTER_64
+      INTEGER*8 INEWAVE, IDISTNW, IZ2DSP, INEWIDX
+#endif
+      REAL NEWAVE
+      POINTER ( INEWAVE, NEWAVE )
+      DIMENSION NEWAVE( 1 )
+      REAL*4 DISTNEW
+      POINTER ( IDISTNW, DISTNEW )
+      DIMENSION DISTNEW( 1 )
+      REAL Z2DSP
+      POINTER ( IZ2DSP, Z2DSP )
+      DIMENSION Z2DSP( 1 )
+      INTEGER NEWIDX
+      POINTER ( INEWIDX, NEWIDX )
+      DIMENSION NEWIDX( 1 )
+      REAL RNLAT, RSLAT, STEP
+      INTEGER NUMTABL, NUMPROD
+      LOGICAL LCOEFFS, L98WAVE, LFRAME, LBITMP
+      LOGICAL LDEBUG
+C
+C     Externals
+      INTEGER WAVEXXX, WV2DXXX, AREACHK, FIXAREA
+      INTEGER NUMPTNS, NUMPTWE, JNORSGG, MKBITMP
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      INTWAVE = 0
+C
+      LCOEFFS = .FALSE.
+C
+C     Check if debug option turned on
+      CALL JDEBUG()
+      LDEBUG = NDBG.GT.0
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'INTWAVE: ZNFELDI allocate fail',JPQUIET)
+          INTWAVE= IRET
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     Unpack GRIB message headers (using ZMISS as missing data value).
+C
+      IRET = 1
+      ISEC3(2) = NINT(ZMISS)
+      ZSEC3(2) = ZMISS
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             ZNFELDI,JPEXPAND,INGRIB,INLEN,IWORD,'J',IRET)
+      IF( (IRET.NE.0).AND.(IRET.NE.811) ) THEN
+        CALL INTLOG(JP_ERROR,'INTWAVE: GRIBEX decoding failed.',JPQUIET)
+        INTWAVE = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Check that the field can be handled
+C
+      NUMTABL = ISEC1(2)*1000 + ISEC1(1)
+      NUMPROD = NUMTABL*1000 + ISEC1(6)
+      L98WAVE = (NUMTABL.EQ.98140).OR.
+     X          (NUMPROD.EQ.98131229).OR.
+     X          (NUMPROD.EQ.98131232).OR.
+     X          (NIREPR.EQ.26)
+      IF( .NOT.L98WAVE ) THEN
+        CALL INTLOG(JP_WARN,'INTWAVE: Not an ECMWF wave field',JPQUIET)
+        INTWAVE = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      IF( ISEC2(1).NE.0 ) THEN
+        CALL INTLOG(JP_WARN,
+     X    'INTWAVE: Not a lat/long field',JPQUIET)
+        INTWAVE = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+      IF( (ISEC2(6).NE.128) .OR. (ISEC2(10).LT.10) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTWAVE: Cannot handle longitude increment',ISEC2(10))
+        INTWAVE = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 2.   Sort out interpolation area.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NSPEC = 1
+      KNUM  = ISEC2(3)
+C
+C     Adjust (sub-)area limits to suit the grid
+C
+      IRET = FIXAREA()
+      IF ( IRET .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR, 'INTWAVE: FIXAREA failed.',JPQUIET)
+        INTWAVE = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      NORTH = FLOAT(NOAREA(1))/PPMULT
+      WEST  = FLOAT(NOAREA(2))/PPMULT
+      SOUTH = FLOAT(NOAREA(3))/PPMULT
+      EAST  = FLOAT(NOAREA(4))/PPMULT
+C
+C     Calculate the number of points E-W and N-S in new grid area
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN)) THEN
+        GRIDWE  = NOGAUSS
+        GRIDNS  = 0
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+        GRIDWE  = 360.0/NOLPTS((NOREDLL/2)+1)
+        GRIDNS  = FLOAT(NOGRID(2))/PPMULT
+      ELSE
+        GRIDWE  = FLOAT(NOGRID(1))/PPMULT
+        GRIDNS  = FLOAT(NOGRID(2))/PPMULT
+      ENDIF
+C
+      IRET = AREACHK(GRIDWE,GRIDNS,NORTH,WEST,SOUTH,EAST)
+      IF( IRET.NE.0 ) THEN
+        INTWAVE = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+      NOAREA(1) = NINT(NORTH*PPMULT)
+      NOAREA(2) = NINT(WEST*PPMULT)
+      NOAREA(3) = NINT(SOUTH*PPMULT)
+      NOAREA(4) = NINT(EAST*PPMULT)
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN)) THEN
+        GRIDWE  = 360.0/NOLPTS(NOGAUSS)
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = JNORSGG(SOUTH,ROGAUSS,NOGAUSS,1) - 
+     X            JNORSGG(NORTH,ROGAUSS,NOGAUSS,0) + 1
+        NFULLNS = NOGAUSS*2
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = NUMPTNS(NORTH,SOUTH,GRIDNS)
+        NFULLNS = NOREDLL
+      ELSE
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = NUMPTNS(NORTH,SOUTH,GRIDNS)
+        NFULLNS = NUM_N_S
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C     Section 3.   Interpolate wave fields other than 2D spectra.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Handle if not 2D spectra ..
+C
+      IF( (ISEC1(6).NE.JP2DSP).AND.(ISEC1(6).NE.JP2DSPQ) ) THEN
+       IF( LDEBUG ) THEN
+       CALL INTLOG(JP_DEBUG,
+     X 'INTWAVE: Interpolate wave fields other than 2D spectra',JPQUIET)
+       ENDIF
+C
+C       Get some scratch space for the interpolated field.
+C
+        ISIZE = NFULLEW * NUM_N_S
+        CALL JMEMHAN( 3, INEWAVE, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Get work space fail.',JPQUIET)
+          INTWAVE = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        ISIZE = NFULLEW * NFULLNS * 4
+        CALL JMEMHAN( 4, INEWIDX, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Get work space fail.',JPQUIET)
+          INTWAVE = JPROUTINE + 8
+          GOTO 900
+        ENDIF
+C
+        ISIZE = NFULLEW * NFULLNS * 10
+        CALL JMEMHAN( 5, IDISTNW, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Get work space fail.',JPQUIET)
+          INTWAVE = JPROUTINE + 9
+          GOTO 900
+        ENDIF
+
+C       Interpolate the field
+C
+        IRET = WAVEXXX(ISEC2,ISEC4,NUM_N_S,GRIDNS,GRIDWE,INGRIB,NEWIDX,
+     X                 DISTNEW,NEWAVE,NORTH,WEST,ZMISS)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Interpolation failed.',JPQUIET)
+          INTWAVE = JPROUTINE + 10
+          GOTO 900
+        ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 4.   Interpolate wave 2D spectra field.
+C ------------------------------------------------------------------
+C
+      ELSE
+C
+  400   CONTINUE
+
+      IF( LDEBUG ) THEN
+      CALL INTLOG(JP_DEBUG,
+     X 'INTWAVE: Interpolate wave 2D spectra field',JPQUIET)
+      ENDIF
+C
+C       Find number of 2D spectra values at each point
+C
+        IF( ISEC4(8).NE.0 ) LCOEFFS = .TRUE.
+        IF( (ISEC4(8).NE.0).AND.(ISEC1(6).NE.JP2DSPQ) ) THEN
+          NSPEC = ISEC4(50) * ISEC4(51)
+        ELSE
+          NSPEC = 1
+        ENDIF
+C
+C       Get some scratch space for the interpolated field.
+C
+        ISIZE = NSPEC * NFULLEW * NUM_N_S
+        CALL JMEMHAN( 3, INEWAVE, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Get work space fail.',JPQUIET)
+          INTWAVE = JPROUTINE + 11
+          GOTO 900
+        ENDIF
+C
+        ISIZE = NFULLEW * NFULLNS
+        CALL JMEMHAN( 4, INEWIDX, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Get work space fail.',JPQUIET)
+          INTWAVE = JPROUTINE + 12
+          GOTO 900
+        ENDIF
+C
+C       Interpolate the field
+C
+        IRET = WV2DXXX(ISEC2,ISEC4,NUM_N_S,GRIDNS,GRIDWE,
+     X                 INGRIB,NEWIDX,NEWAVE,NORTH,WEST,ZMISS)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE: Interpolation failed.',JPQUIET)
+          INTWAVE = JPROUTINE + 13
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 5.   Pack the interpolated field into GRIB.
+C ------------------------------------------------------------------
+C
+  500   CONTINUE
+
+C     If a 'bitmap' has been specified, build the bitmap
+C
+      LBITMP = LNOBITMP.AND.
+     X         ((NOREPR.EQ.JPREGROT).OR.(NOREPR.EQ.JPREGULAR).OR.
+     X          (NOREPR.EQ.JPGAUSSIAN))
+
+      IF( LBITMP ) THEN
+        CALL INTLOG(JP_DEBUG,'INTWAVE: MKBITMP is enabled',JPQUIET)
+        IERR = MKBITMP(NUM_E_W,NUM_N_S,NEWAVE,ZMISS)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Problem applying bitmap',JPQUIET)
+          GOTO 900
+        ENDIF
+      ENDIF
+C     If a 'frame' has been specified, build the frame
+C
+       LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+
+         CALL INTLOG(JP_DEBUG,'INTWAVE: NUM_E_W ',NUM_E_W)
+         CALL INTLOG(JP_DEBUG,'INTWAVE: NUM_N_S ',NUM_N_S)
+      IF( LFRAME ) THEN
+           CALL INTLOG(JP_DEBUG,'INTWAVE: MKFRAME is enabled',JPQUIET)
+           CALL INTLOG(JP_DEBUG,'INTWAVE: NOFRAME ',NOFRAME)
+         CALL MKFRAME(NUM_E_W,NUM_N_S,NEWAVE,ZMISS,NOFRAME) 
+      ENDIF
+C
+C     GRIB sections 2 and 3 (bitmap) included
+C
+      ISEC1(5) = 192
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPREDLL) ) THEN
+C
+C       Reduced gaussian or reduced lat/long with (possible) subarea
+C
+        IF( NOREPR.EQ.JPQUASI ) THEN
+          ISEC2(1) = JPGAUSSIAN
+          ISEC2(10)= NOGAUSS
+        ELSE
+          ISEC2(1) = JPREGULAR
+          ISEC2(10)= NINT(GRIDNS*1000.0)
+        ENDIF
+        ISEC2(2) = 255
+        ISEC2(3) = NUM_N_S
+        ISEC2(5) = NINT(WEST*1000.0)
+        ISEC2(6) = 0
+        ISEC2(8) = NINT(EAST*1000.0)
+        ISEC2(17)= 1
+        ISEC4(1) = 0
+C
+        LAT1 = 0
+ 510    CONTINUE
+        LAT1 = LAT1 + 1
+        IF( NOREPR.EQ.JPQUASI ) THEN
+          RNLAT = ROGAUSS(LAT1)
+          RSLAT = ROGAUSS(LAT1+NUM_N_S-1)
+        ELSE
+          RNLAT = 90.0 - (LAT1-1)*GRIDNS
+          RSLAT = 90.0 - (LAT1+NUM_N_S-2)*GRIDNS
+        ENDIF
+        IF( RNLAT.GT.NORTH ) GOTO 510
+C
+        ISEC2(4) = NINT(RNLAT*1000.0)
+        ISEC2(7) = NINT(RSLAT*1000.0)
+C
+        DO LOOP = LAT1, (NUM_N_S+LAT1-1)
+          ISEC2(23+LOOP-LAT1) = NOLPTS(LOOP)
+          ISEC4(1) = ISEC4(1) + ISEC2(23+LOOP-LAT1)
+        ENDDO
+C
+      ELSE
+C
+C       Regular gaussian or lat/long with (possible) subarea
+C
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+          ISEC2(1) = JPGAUSSIAN
+        ELSE
+          ISEC2(1) = JPREGULAR
+        ENDIF
+        ISEC2(2) = NUM_E_W
+        ISEC2(3) = NUM_N_S
+        ISEC2(4) = NINT(NORTH*1000.0)
+        ISEC2(5) = NINT(WEST*1000.0)
+        ISEC2(6) = 128
+        ISEC2(7) = NINT(SOUTH*1000.0)
+        ISEC2(8) = NINT(EAST*1000.0)
+        ISEC2(9) = NINT(GRIDWE*1000.0)
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+          ISEC2(10) = NOGAUSS
+        ELSE
+          ISEC2(10) = NINT(GRIDNS*1000.0)
+        ENDIF
+        ISEC2(17)= 0
+        ISEC4(1) = NUM_E_W * NUM_N_S
+      ENDIF
+C
+C     Use -9999999 as missing data value.
+C
+      ISEC3(2) = NINT(ZMISS)
+      ZSEC3(2) = ZMISS
+C
+      ISEC4(1) = ISEC4(1) * NSPEC
+      ISEC4(2) = NOACC
+      IF( LCOEFFS ) ISEC4(6)  = 16
+C            `-----> wave fields have additional flags for
+C                    NC1 and NC2 coefficients (floats stored
+C                    in integer array isec4)
+      IRET = 1
+C
+C     If grid-point output, setup for 2nd order packing if requested.
+C
+      IF( (NOREPR.NE.JPSPHERE) .AND. (NOREPR.NE.JPSPHROT) ) THEN
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'K' ) THEN
+          HFUNC = 'K'
+          ISEC4(4)  = 64
+          ISEC4(6)  = 16
+          ISEC4(9)  = 32
+          ISEC4(10) = 16
+          ISEC4(12) = 8
+          ISEC4(13) = 4
+          ISEC4(14) = 0
+          ISEC4(15) = -1
+        ELSE
+          ISEC4(4)  = 0
+        ENDIF
+      ELSE
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'C' ) THEN
+          ISEC2(6) = 2
+          ISEC4(4) = 64
+        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+          ISEC2(6) = 1
+          ISEC4(4) = 0
+        ENDIF
+
+      ENDIF
+
+C
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             NEWAVE,ISEC4(1),OUTGRIB,OUTLEN,IWORD,HFUNC,IRET)
+C
+      IF ( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTWAVE: GRIBEX encoding failed.',IRET)
+        INTWAVE = JPROUTINE + 14
+        GOTO 900
+      ENDIF
+      OUTLEN = IWORD
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intwave2.F b/interpolation/intwave2.F
new file mode 100755
index 0000000..167c864
--- /dev/null
+++ b/interpolation/intwave2.F
@@ -0,0 +1,567 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTWAVE2(INGRIB,INLEN,OUTGRIB,OUTLEN)
+C
+C---->
+C**** INTWAVE2
+C
+C     Purpose
+C     -------
+C
+C     Interpolate an ECMWF wave field wave field or a reduced
+C     latitude-longitude field
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTWAVE2(INGRIB,INLEN,OUTGRIB,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routine; then repack into GRIB format.
+C
+C
+C     Externals
+C     ---------
+C
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     GRIBEX  - Decode/encode GRIB product.
+C     JMEMHAN - Handles memory allocation.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     INTLOG  - Log error message.
+C     WAVEXX1 - Interpolate wave fields (except 2D spectra)
+C     WV2DXXX - Interpolate wave 2D spectra fields
+C     MKFRAME - Create a 'frame' from a rectangular field
+C     MKBITMP - Apply a bitmap to a rectangular field
+C
+C
+C     Author
+C     ------
+C
+C     S.Curic     ECMWF     Jun 2009
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INGRIB(*),OUTGRIB(*),INLEN,OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+#include "grfixed.h"
+#include "jparams.h"
+C
+C     Parameters
+      INTEGER JPROUTINE, JP2DSP, JP2DSPQ, JPMAXLT
+
+      PARAMETER (JPROUTINE = 40200 )
+      PARAMETER (JP2DSP  = 250 )
+C                           ^---- parameter number for 2D wave spectra (whole)
+      PARAMETER (JP2DSPQ = 251 )
+C                           ^---- parameter number for 2D wave spectra (single)
+      PARAMETER (JPMAXLT = 1801 )
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+
+      REAL ZMISS
+      DATA ZMISS/-9999999.0/
+      INTEGER IWORD, IRET, ISIZE, NSPEC, LAT1, LOOP, IERR
+      INTEGER KNUM, NUM_E_W, NUM_N_S, NFULLNS, NFULLEW
+      REAL GRIDWE, GRIDNS, NORTH, SOUTH, WEST, EAST
+      INTEGER NUMPTS
+      DIMENSION NUMPTS(JPMAXLT)
+#ifdef POINTER_64
+      INTEGER*8 INEWAVE, IDISTNW, IZ2DSP, INEWIDX
+#endif
+      REAL NEWAVE
+      POINTER ( INEWAVE, NEWAVE )
+      DIMENSION NEWAVE( 1 )
+      REAL*4 DISTNEW
+      POINTER ( IDISTNW, DISTNEW )
+      DIMENSION DISTNEW( 1 )
+      REAL Z2DSP
+      POINTER ( IZ2DSP, Z2DSP )
+      DIMENSION Z2DSP( 1 )
+      INTEGER NEWIDX
+      POINTER ( INEWIDX, NEWIDX )
+      DIMENSION NEWIDX( 1 )
+      REAL RNLAT, RSLAT, STEP
+      INTEGER NUMTABL, NUMPROD
+      LOGICAL LCOEFFS, L98WAVE, LFRAME, LBITMP
+      LOGICAL LDEBUG
+      INTEGER NPARAM
+      INTEGER MISSLAT, KOLDNUM
+C
+C     Externals
+      INTEGER WAVEXX2, WV2DXX2, AREACHK, FIXAREA
+      INTEGER NUMPTNS, NUMPTWE, JNORSGG, MKBITMP
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      INTWAVE2 = 0
+C
+      LCOEFFS = .FALSE.
+C
+C     Check if debug option turned on
+      CALL JDEBUG()
+      LDEBUG = NDBG.GT.0
+C
+C     Allocate work array ZNFELDI if not already done.
+C
+      IF( IZNJDCI.NE.1952999238 ) THEN
+        CALL JMEMHAN( 19, IZNFLDI, JPEXPAND, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'INTWAVE2: ZNFELDI allocate fail',JPQUIET)
+          INTWAVE2= IRET
+          GOTO 900
+        ENDIF
+        IZNJDCI = 1952999238
+      ENDIF
+C
+C     Unpack GRIB message headers (using ZMISS as missing data value).
+C
+cs      IWORD   = INLEN
+      IRET = 1
+      ISEC3(2) = NINT(ZMISS)
+      ZSEC3(2) = ZMISS
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             ZNFELDI,JPEXPAND,INGRIB,INLEN,IWORD,'D',IRET)
+
+      IF(IRET.GT.0) THEN
+       CALL INTLOG(JP_ERROR,'INTWAVE2: GRIBEX decoding failed.',JPQUIET)
+        INTWAVE2 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+
+      NPARAM = ISEC1(6)
+C
+C     Check that the field can be handled
+C
+      NUMTABL = ISEC1(2)*1000 + ISEC1(1)
+      NUMPROD = NUMTABL*1000 + ISEC1(6)
+      L98WAVE = (NUMTABL.EQ.98140).OR.
+     X          (NUMPROD.EQ.98131229).OR.
+     X          (NUMPROD.EQ.98131232).OR.
+     X          (NIREPR.EQ.26)
+      IF( .NOT.L98WAVE ) THEN
+        CALL INTLOG(JP_WARN,'INTWAVE2: Not an ECMWF wave field',JPQUIET)
+        INTWAVE2 = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      IF( ISEC2(1).NE.0 ) THEN
+        CALL INTLOG(JP_WARN,
+     X    'INTWAVE2: Not a lat/long field',JPQUIET)
+        INTWAVE2 = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+      IF( (ISEC2(6).NE.128) .OR. (ISEC2(10).LT.10) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'INTWAVE2: Cannot handle longitude increment',ISEC2(10))
+        INTWAVE2 = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 2.   Sort out interpolation area.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NSPEC = 1
+      KNUM  = ISEC2(3)
+C
+C     Adjust (sub-)area limits to suit the grid
+C
+      IRET = FIXAREA()
+      IF ( IRET .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR, 'INTWAVE2: FIXAREA failed.',JPQUIET)
+        INTWAVE2 = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      NORTH = FLOAT(NOAREA(1))/PPMULT
+      WEST  = FLOAT(NOAREA(2))/PPMULT
+      SOUTH = FLOAT(NOAREA(3))/PPMULT
+      EAST  = FLOAT(NOAREA(4))/PPMULT
+C
+C     Calculate the number of points E-W and N-S in new grid area
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN)) THEN
+        GRIDWE  = NOGAUSS
+        GRIDNS  = 0
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+        GRIDWE  = 360.0/NOLPTS((NOREDLL/2)+1)
+        GRIDNS  = FLOAT(NOGRID(2))/PPMULT
+      ELSE
+        GRIDWE  = FLOAT(NOGRID(1))/PPMULT
+        GRIDNS  = FLOAT(NOGRID(2))/PPMULT
+      ENDIF
+C
+      IRET = AREACHK(GRIDWE,GRIDNS,NORTH,WEST,SOUTH,EAST)
+      IF( IRET.NE.0 ) THEN
+        INTWAVE2 = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+      NOAREA(1) = NINT(NORTH*PPMULT)
+      NOAREA(2) = NINT(WEST*PPMULT)
+      NOAREA(3) = NINT(SOUTH*PPMULT)
+      NOAREA(4) = NINT(EAST*PPMULT)
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN)) THEN
+        GRIDWE  = 360.0/NOLPTS(NOGAUSS)
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = JNORSGG(SOUTH,ROGAUSS,NOGAUSS,1) - 
+     X            JNORSGG(NORTH,ROGAUSS,NOGAUSS,0) + 1
+        NFULLNS = NOGAUSS*2
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = NUMPTNS(NORTH,SOUTH,GRIDNS)
+        NFULLNS = NOREDLL
+      ELSE
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = NUMPTNS(NORTH,SOUTH,GRIDNS)
+        NFULLNS = NUM_N_S
+      ENDIF
+C
+C
+C--------------------------------------------------------------------
+        KNUM = NINS
+cs        KNUM = ISEC2(3)
+      IF( ISEC2(17).EQ.1 ) THEN
+C
+C       Input field is a reduced latitude/longitude grid
+C
+C       .. but it may be 'pseudo-gaussian' in layout
+C       (ie global, symmetric about the equator but no latitude
+C        at the equator)
+C
+        IF( (ISEC2(4).NE.90000).AND.(MOD(ISEC2(3),2).EQ.0) ) THEN
+C
+          DO LOOP = 1, ISEC2(3)
+            NUMPTS(LOOP) = ISEC2(22+LOOP)
+          ENDDO
+C
+        ELSE
+C
+          MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+          DO LOOP = 1, MISSLAT
+            NUMPTS(LOOP)    = 0
+          ENDDO
+          KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+          DO LOOP = 1, (KOLDNUM-MISSLAT)
+            NUMPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+          ENDDO
+          DO LOOP = (KOLDNUM+1), KNUM
+            NUMPTS(LOOP)    = 0
+          ENDDO
+        ENDIF
+      ENDIF
+C--------------------------------------------------------------------
+C ------------------------------------------------------------------
+C     Section 3.   Interpolate wave fields other than 2D spectra.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Handle if not 2D spectra ..
+C
+      IF( (ISEC1(6).NE.JP2DSP).AND.(ISEC1(6).NE.JP2DSPQ) ) THEN
+       IF( LDEBUG ) THEN
+       CALL INTLOG(JP_DEBUG,
+     X 'INTWAVE2: Interpolate wave flds other than 2D spectra',JPQUIET)
+       ENDIF
+C
+C       Get some scratch space for the interpolated field.
+C
+        ISIZE = NFULLEW * NUM_N_S
+        CALL JMEMHAN( 3, INEWAVE, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE2: Get work space fail.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 7
+          GOTO 900
+        ENDIF
+C
+        ISIZE = NFULLEW * NFULLNS * 4
+        CALL JMEMHAN( 4, INEWIDX, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE2: Get work space fail.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 8
+          GOTO 900
+        ENDIF
+C
+        ISIZE = NFULLEW * NFULLNS * 10
+        CALL JMEMHAN( 5, IDISTNW, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE2: Get work space fail.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 9
+          GOTO 900
+        ENDIF
+
+C       Interpolate the field
+C
+        IRET = WAVEXX2(NPARAM,KNUM,NUMPTS,NUM_N_S,GRIDNS,GRIDWE,ZNFELDI,
+     X               NEWAVE,NORTH,WEST,ZMISS)
+        IF( IRET.NE.0 ) THEN
+         CALL INTLOG(JP_ERROR,'INTWAVE2: Interpolation failed.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 10
+          GOTO 900
+        ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 4.   Interpolate wave 2D spectra field.
+C ------------------------------------------------------------------
+C
+      ELSE
+C
+  400   CONTINUE
+
+      IF( LDEBUG ) THEN
+      CALL INTLOG(JP_DEBUG,
+     X 'INTWAVE2: Interpolate wave 2D spectra field',JPQUIET)
+      ENDIF
+C
+C       Find number of 2D spectra values at each point
+C
+        IF( ISEC4(8).NE.0 ) LCOEFFS = .TRUE.
+        IF( (ISEC4(8).NE.0).AND.(ISEC1(6).NE.JP2DSPQ) ) THEN
+          NSPEC = ISEC4(50) * ISEC4(51)
+          NIMATR = 1
+        ELSE
+          NSPEC = 1
+          NIMATR = 0
+        ENDIF
+C
+C       Get some scratch space for the interpolated field.
+C
+        ISIZE = NSPEC * NFULLEW * NUM_N_S
+        CALL JMEMHAN( 3, INEWAVE, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE2: Get work space fail.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 11
+          GOTO 900
+        ENDIF
+C
+        ISIZE = NFULLEW * NFULLNS
+        CALL JMEMHAN( 4, INEWIDX, ISIZE, 1, IRET)
+        IF ( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVE2: Get work space fail.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 12
+          GOTO 900
+        ENDIF
+C
+C       Interpolate the field
+C
+        IRET = WV2DXX2(NIMATR,KNUM,NUMPTS,NUM_N_S,GRIDNS,GRIDWE,ZNFELDI,
+     X               NEWAVE,NORTH,WEST,ZMISS)
+        IF( IRET.NE.0 ) THEN
+         CALL INTLOG(JP_ERROR,'INTWAVE2: Interpolation failed.',JPQUIET)
+          INTWAVE2 = JPROUTINE + 13
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 5.   Pack the interpolated field into GRIB.
+C ------------------------------------------------------------------
+C
+  500   CONTINUE
+
+C     If a 'bitmap' has been specified, build the bitmap
+C
+      LBITMP = LNOBITMP.AND.
+     X         ((NOREPR.EQ.JPREGROT).OR.(NOREPR.EQ.JPREGULAR).OR.
+     X          (NOREPR.EQ.JPGAUSSIAN))
+
+      IF( LBITMP ) THEN
+        CALL INTLOG(JP_DEBUG,'INTWAVE2: MKBITMP is enabled',JPQUIET)
+        IERR = MKBITMP(NUM_E_W,NUM_N_S,NEWAVE,ZMISS)
+        IF( IERR.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTFB: Problem applying bitmap',JPQUIET)
+          GOTO 900
+        ENDIF
+      ENDIF
+C     If a 'frame' has been specified, build the frame
+C
+       LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+
+         CALL INTLOG(JP_DEBUG,'INTWAVE2: NUM_E_W ',NUM_E_W)
+         CALL INTLOG(JP_DEBUG,'INTWAVE2: NUM_N_S ',NUM_N_S)
+      IF( LFRAME ) THEN
+           CALL INTLOG(JP_DEBUG,'INTWAVE2: MKFRAME is enabled',JPQUIET)
+           CALL INTLOG(JP_DEBUG,'INTWAVE2: NOFRAME ',NOFRAME)
+         CALL MKFRAME(NUM_E_W,NUM_N_S,NEWAVE,ZMISS,NOFRAME) 
+      ENDIF
+C
+C     GRIB sections 2 and 3 (bitmap) included
+C
+      ISEC1(5) = 192
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPREDLL) ) THEN
+C
+C       Reduced gaussian or reduced lat/long with (possible) subarea
+C
+        IF( NOREPR.EQ.JPQUASI ) THEN
+          ISEC2(1) = JPGAUSSIAN
+          ISEC2(10)= NOGAUSS
+        ELSE
+          ISEC2(1) = JPREGULAR
+          ISEC2(10)= NINT(GRIDNS*1000.0)
+        ENDIF
+        ISEC2(2) = 255
+        ISEC2(3) = NUM_N_S
+        ISEC2(5) = NINT(WEST*1000.0)
+        ISEC2(6) = 0
+        ISEC2(8) = NINT(EAST*1000.0)
+        ISEC2(17)= 1
+        ISEC4(1) = 0
+C
+        LAT1 = 0
+ 510    CONTINUE
+        LAT1 = LAT1 + 1
+        IF( NOREPR.EQ.JPQUASI ) THEN
+          RNLAT = ROGAUSS(LAT1)
+          RSLAT = ROGAUSS(LAT1+NUM_N_S-1)
+        ELSE
+          RNLAT = 90.0 - (LAT1-1)*GRIDNS
+          RSLAT = 90.0 - (LAT1+NUM_N_S-2)*GRIDNS
+        ENDIF
+        IF( RNLAT.GT.NORTH ) GOTO 510
+C
+        ISEC2(4) = NINT(RNLAT*1000.0)
+        ISEC2(7) = NINT(RSLAT*1000.0)
+C
+        DO LOOP = LAT1, (NUM_N_S+LAT1-1)
+          ISEC2(23+LOOP-LAT1) = NOLPTS(LOOP)
+          ISEC4(1) = ISEC4(1) + ISEC2(23+LOOP-LAT1)
+        ENDDO
+C
+      ELSE
+C
+C       Regular gaussian or lat/long with (possible) subarea
+C
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+          ISEC2(1) = JPGAUSSIAN
+        ELSE
+          ISEC2(1) = JPREGULAR
+        ENDIF
+        ISEC2(2) = NUM_E_W
+        ISEC2(3) = NUM_N_S
+        ISEC2(4) = NINT(NORTH*1000.0)
+        ISEC2(5) = NINT(WEST*1000.0)
+        ISEC2(6) = 128
+        ISEC2(7) = NINT(SOUTH*1000.0)
+        ISEC2(8) = NINT(EAST*1000.0)
+        ISEC2(9) = NINT(GRIDWE*1000.0)
+        IF( NOREPR.EQ.JPGAUSSIAN ) THEN
+          ISEC2(10) = NOGAUSS
+        ELSE
+          ISEC2(10) = NINT(GRIDNS*1000.0)
+        ENDIF
+        ISEC2(17)= 0
+        ISEC4(1) = NUM_E_W * NUM_N_S
+      ENDIF
+C
+C
+      ISEC3(2) = NINT(ZMISS)
+      ZSEC3(2) = ZMISS
+C
+      ISEC4(1) = ISEC4(1) * NSPEC
+      ISEC4(2) = NOACC
+      IF( LCOEFFS ) ISEC4(6)  = 16
+C            `-----> wave fields have additional flags for
+C                    NC1 and NC2 coefficients (floats stored
+C                    in integer array isec4)
+      IRET = 1
+C
+C     If grid-point output, setup for 2nd order packing if requested.
+C
+      IF( (NOREPR.NE.JPSPHERE) .AND. (NOREPR.NE.JPSPHROT) ) THEN
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'K' ) THEN
+          HFUNC = 'K'
+          ISEC4(4)  = 64
+          ISEC4(6)  = 16
+          ISEC4(9)  = 32
+          ISEC4(10) = 16
+          ISEC4(12) = 8
+          ISEC4(13) = 4
+          ISEC4(14) = 0
+          ISEC4(15) = -1
+        ELSE
+          ISEC4(4)  = 0
+        ENDIF
+      ELSE
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'C' ) THEN
+          ISEC2(6) = 2
+          ISEC4(4) = 64
+        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+          ISEC2(6) = 1
+          ISEC4(4) = 0
+        ENDIF
+
+      ENDIF
+
+C
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             NEWAVE,ISEC4(1),OUTGRIB,OUTLEN,IWORD,HFUNC,IRET)
+C
+      IF ( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTWAVE2: GRIBEX encoding failed.',IRET)
+        INTWAVE2 = JPROUTINE + 14
+        GOTO 900
+      ENDIF
+      OUTLEN = IWORD
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/intwavu.F b/interpolation/intwavu.F
new file mode 100755
index 0000000..9131503
--- /dev/null
+++ b/interpolation/intwavu.F
@@ -0,0 +1,365 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION INTWAVU(INFLD,INLEN,OUTFLD,OUTLEN)
+C
+C---->
+C**** INTWAVU
+C
+C     Purpose
+C     -------
+C
+C     Interpolate an ECMWF wave field wave field or a reduced
+C     latitude-longitude field
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = INTWAVU(INFLD,INLEN,OUTFLD,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INFLD  - Input field (packed).
+C     INLEN  - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OUTFLD  - Output field (packed).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Call interpolation routine; then repack into GRIB format.
+C
+C
+C     Externals
+C     ---------
+C
+C     FIXAREA - Fixup area definition to correspond to grid definitions
+C     JMEMHAN - Handles memory allocation.
+C     JDEBUG  - Checks environment to switch on/off debug
+C     INTLOG  - Log error message.
+C     WAVEXX2 - Interpolate wave fields (except 2D spectra)
+C     WV2DXX2 - Interpolate wave 2D spectra fields
+C     MKFRAME - Create a 'frame' from a rectangular field
+C     MKBITMP - Apply a bitmap to a rectangular field
+C
+C
+C     Author
+C     ------
+C
+C     S.Curic     ECMWF     Mar 2009
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+      INTEGER INLEN,OUTLEN
+      REAL INFLD, OUTFLD
+      DIMENSION INFLD(*),OUTFLD(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "intf.h"
+#include "grfixed.h"
+#include "jparams.h"
+C
+C     Parameters
+      INTEGER JPROUTINE, JP2DSP, JP2DSPQ, JPMAXLT
+
+      PARAMETER (JPROUTINE = 40200 )
+      PARAMETER (JP2DSP  = 250 )
+C                           ^---- parameter number for 2D wave spectra (whole)
+      PARAMETER (JP2DSPQ = 251 )
+C                           ^---- parameter number for 2D wave spectra (single)
+      PARAMETER (JPMAXLT = 1801 )
+C
+C     Local variables
+C
+      CHARACTER*1 HFUNC
+
+      REAL ZMISS
+cs      DATA ZMISS/-9999999.0/
+      REAL RLATINC, ONORTH, OSOUTH
+      INTEGER IWORD, IRET, ISIZE, NSPEC, LAT1, LOOP, IERR
+      INTEGER KNUM, NUM_E_W, NUM_N_S, NFULLNS, NFULLEW
+      REAL GRIDWE, GRIDNS, NORTH, SOUTH, WEST, EAST
+      REAL INORTH, ISOUTH, IWEST, IEAST, RNS
+      INTEGER NUMPTS,MISSLAT,KOLDNUM
+      DIMENSION NUMPTS(JPMAXLT)
+      INTEGER NUMTABL, NUMPROD
+      INTEGER KNEWNUM
+      LOGICAL LCOEFFS, L98WAVE, LFRAME, LBITMP
+      LOGICAL LDEBUG
+C
+C     Externals
+      INTEGER AREACHK, FIXAREA, WAVEXX2, WV2DXX2
+      INTEGER NUMPTNS, NUMPTWE, JNORSGG, MKBITMP
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      INTWAVU = 0
+C
+      LCOEFFS = .FALSE.
+      ZMISS = RMISSGV
+      ZSEC3(2) = RMISSGV
+      ISEC3(2) = INT(RMISSGV)
+      ISEC1(5) = 192
+
+C
+C     Check if debug option turned on
+      CALL JDEBUG()
+      LDEBUG = NDBG.GT.0
+C
+C
+      OUTLEN = 0
+      IRET = 1
+C
+C     Check that the field can be handled
+C
+C ------------------------------------------------------------------
+C     Section 2.   Sort out interpolation area.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NSPEC = 1
+      INORTH = FLOAT(NIAREA(1))/PPMULT
+      IWEST  = FLOAT(NIAREA(2))/PPMULT
+      ISOUTH = FLOAT(NIAREA(3))/PPMULT
+      IEAST  = FLOAT(NIAREA(4))/PPMULT
+      KNUM  = NINS
+      RNS = INORTH - ISOUTH
+C
+C     Adjust (sub-)area limits to suit the grid
+C
+      IRET = FIXAREA()
+      IF ( IRET .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR, 'INTWAVU: FIXAREA failed.',JPQUIET)
+        INTWAVU = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      NORTH = FLOAT(NOAREA(1))/PPMULT
+      WEST  = FLOAT(NOAREA(2))/PPMULT
+      SOUTH = FLOAT(NOAREA(3))/PPMULT
+      EAST  = FLOAT(NOAREA(4))/PPMULT
+C
+C     Calculate the number of points E-W and N-S in new grid area
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN)) THEN
+        GRIDWE  = NOGAUSS
+        GRIDNS  = 0
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+        GRIDWE  = 360.0/NOLPTS((NOREDLL/2)+1)
+        GRIDNS  = FLOAT(NOGRID(2))/PPMULT
+      ELSE
+        GRIDWE  = FLOAT(NOGRID(1))/PPMULT
+        GRIDNS  = FLOAT(NOGRID(2))/PPMULT
+      ENDIF
+C
+      IRET = AREACHK(GRIDWE,GRIDNS,NORTH,WEST,SOUTH,EAST)
+      IF( IRET.NE.0 ) THEN
+        INTWAVU = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+      NOAREA(1) = NINT(NORTH*PPMULT)
+      NOAREA(2) = NINT(WEST*PPMULT)
+      NOAREA(3) = NINT(SOUTH*PPMULT)
+      NOAREA(4) = NINT(EAST*PPMULT)
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN)) THEN
+         IF(NOREPR.EQ.JPQUASI) THEN
+            GRIDWE  = 360.0/NOLPTS(NOGAUSS)
+         ELSE
+            GRIDWE  = 360.0/(NOGAUSS*4)
+         ENDIF
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = JNORSGG(SOUTH,ROGAUSS,NOGAUSS,1) - 
+     X            JNORSGG(NORTH,ROGAUSS,NOGAUSS,0) + 1
+        NFULLNS = NOGAUSS*2
+        NONS    = NFULLNS
+         IF(NOREPR.EQ.JPQUASI) THEN
+           KNEWNUM = NOGAUSS*2
+           DO LOOP = 1, KNEWNUM
+             OUTLEN  = OUTLEN + NOLPTS(LOOP)
+           ENDDO
+           NOWE = 0
+         ELSE
+            NOWE    = NUM_E_W
+            OUTLEN  = NOWE*NONS
+         ENDIF
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = NUMPTNS(NORTH,SOUTH,GRIDNS)
+        NFULLNS = NOREDLL
+        CALL INTLOG(JP_ERROR,'INTWAVU: Reduced ll not posible',JPQUIET)
+        GOTO 900
+      ELSE
+        NUM_E_W = NUMPTWE(WEST,EAST,GRIDWE)
+        NFULLEW = NUMPTWE(0.0,360.0,GRIDWE) - 1
+        NUM_N_S = NUMPTNS(NORTH,SOUTH,GRIDNS)
+        NFULLNS = NUM_N_S
+cs calculate outlen for regular lat-lon
+        OUTLEN  = NUM_E_W*NUM_N_S
+        NOWE    = NUM_E_W
+        NONS    = NUM_N_S
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C     Section 3.   Interpolate wave fields other than 2D spectra.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Handle if not 2D spectra ..
+C
+      IF( (NIPARAM.NE.JP2DSP).AND.(NIPARAM.NE.JP2DSPQ) ) THEN
+       IF( LDEBUG ) THEN
+       CALL INTLOG(JP_DEBUG,
+     X 'INTWAVU: Interpolate wave fields other than 2D spectra',JPQUIET)
+       ENDIF
+C--------------------------------------------------------------------
+        KNUM = NINS
+      IF(NIREPR.EQ.JPREDLL) THEN
+C
+C       Input field is a reduced latitude/longitude grid
+C
+C       .. but it may be 'pseudo-gaussian' in layout
+C       (ie global, symmetric about the equator but no latitude
+C        at the equator)
+          MISSLAT = 0
+        ONORTH = FLOAT(NIAREA(1))/PPMULT
+        OSOUTH = FLOAT(NIAREA(3))/PPMULT
+
+        RLATINC = FLOAT(NIGRID(2))/PPMULT
+
+
+        IF( ( NIAREA(1).NE.90000).AND.(MOD(KNUM,2).EQ.0) )  THEN
+C
+          DO LOOP = 1, KNUM
+            NUMPTS(LOOP) = MILLEN(LOOP)
+          ENDDO
+C
+        ELSE
+C
+cs          MISSLAT = (90000 - NIAREA(1))/NIGRID(2)
+          MISSLAT = (90.0 - ONORTH)/RLATINC
+          DO LOOP = 1, MISSLAT
+            NUMPTS(LOOP)    = 0
+          ENDDO
+cs          KOLDNUM = 1 + (90000 - NIAREA(3))/NIGRID(2)
+          KOLDNUM = 1 + NINT((90.0 - OSOUTH)/RLATINC)
+          DO LOOP = 1, (KOLDNUM-MISSLAT)
+            NUMPTS(LOOP+MISSLAT) = MILLEN(LOOP)
+          ENDDO
+          DO LOOP = (KOLDNUM+1), KNUM
+            NUMPTS(LOOP)    = 0
+          ENDDO
+        ENDIF
+      ENDIF
+C--------------------------------------------------------------------
+
+C
+C       Interpolate the field
+C
+        IRET = WAVEXX2(NIPARAM,KNUM,NUMPTS,NUM_N_S,GRIDNS,GRIDWE,INFLD,
+     X               OUTFLD,NORTH,WEST,ZMISS)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVU: Interpolation failed.',JPQUIET)
+          INTWAVU = JPROUTINE + 10
+          GOTO 900
+        ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 4.   Interpolate wave 2D spectra field.
+C ------------------------------------------------------------------
+C
+      ELSE
+C
+      IF( LDEBUG ) THEN
+      CALL INTLOG(JP_DEBUG,
+     X 'INTWAVU: Interpolate wave 2D spectra field',JPQUIET)
+      ENDIF
+  400   CONTINUE
+C
+        IRET = WV2DXX2(NIMATR,KNUM,MILLEN,NUM_N_S,GRIDNS,GRIDWE,INFLD,
+     X               OUTFLD,NORTH,WEST,ZMISS)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'INTWAVU: Interpolation failed.',JPQUIET)
+          INTWAVU = JPROUTINE + 13
+          GOTO 900
+        ENDIF
+C
+      ENDIF
+C
+C ------------------------------------------------------------------
+C     Section 5.   Frame and Bitmap
+C ------------------------------------------------------------------
+C
+  500   CONTINUE
+
+C     If a 'bitmap' has been specified, build the bitmap
+C
+      LBITMP = LNOBITMP.AND.
+     X         ((NOREPR.EQ.JPREGROT).OR.(NOREPR.EQ.JPREGULAR).OR.
+     X          (NOREPR.EQ.JPGAUSSIAN))
+
+      IF( LBITMP ) THEN
+        CALL INTLOG(JP_DEBUG,'INTWAVU: MKBITMP is enabled',JPQUIET)
+        IERR = MKBITMP(NUM_E_W,NUM_N_S,OUTFLD,ZMISS)
+        IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'INTWAVU: Problem applying bitmap',JPQUIET)
+          GOTO 900
+        ENDIF
+      ENDIF
+C     If a 'frame' has been specified, build the frame
+C
+       LFRAME = LNOFRAME.AND.
+     X         ((NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPGAUSSIAN).OR.
+     X          (NOREPR.EQ.JPREGROT ).OR.(NOREPR.EQ.JPFGGROT  ) )
+
+         CALL INTLOG(JP_DEBUG,'INTWAVU: NUM_E_W ',NUM_E_W)
+         CALL INTLOG(JP_DEBUG,'INTWAVU: NUM_N_S ',NUM_N_S)
+      IF( LFRAME ) THEN
+           CALL INTLOG(JP_DEBUG,'INTWAVU: MKFRAME is enabled',JPQUIET)
+           CALL INTLOG(JP_DEBUG,'INTWAVU: NOFRAME ',NOFRAME)
+         CALL MKFRAME(NUM_E_W,NUM_N_S,OUTFLD,ZMISS,NOFRAME) 
+      ENDIF
+C
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+      RETURN
+      END
diff --git a/interpolation/irdiwe.F b/interpolation/irdiwe.F
new file mode 100755
index 0000000..144ec43
--- /dev/null
+++ b/interpolation/irdiwe.F
@@ -0,0 +1,297 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRDIWE (KLLEN, KINS, KNSIND, KONS, KILONG,
+     1   KIWE, KOLONG, KOWE, KWEIND, KWEDIST, KPR, KERR)
+C
+C---->
+C**** *IRDIWE*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the distances between points in an output longitude
+C     array and its West and East neighbours in the input longitude
+C     array for a quasi regular input field and regular output field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRDIWE (KLLEN, KINS, KNSIND, KONS, KILONG, KIWE, KOLONG,
+C    1   KOWE, KWEIND, KWEDIST, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KLLEN      - This array contains the quasi regular Gaussian
+C                  line length definition.
+C
+C     KINS       - The number of points in the North-South direction
+C                  in the input field.
+C
+C     KNSIND     - This array will contain the array offsets of the
+C                  North and South points in the input array required
+C                  for interpolation.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KILONG     - The array of input longitudes.
+C
+C     KIWE       - The maximum number of points in the West-East
+C                  direction for this quasi regular Gaussian grid.
+C
+C     KOLONG     - The array of output longitudes.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KWEIND     - This array will contain the array offsets of
+C                  the West and East points in the input array
+C                  required for interpolation for all lines of
+C                  latitude.
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field. This array is
+C                  dimensioned (2, KOWE, 2, KONS).
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     IGDIWE     - Calculate the distances between points in an
+C                  output longitude array and its West and East
+C                  neighbours in the input longitude array for one
+C                  line of latitude.
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine will create the arrays of offsets and distance as
+C     two arrays of length (2, Number of output longitudes, 2,
+C     Number of output latitudes).
+C
+C     The array of offsets is copied from line to line provided the
+C     number of points in the quasi regular lines of latitude does
+C     not change. When the definition changes IGDIWE is used to
+C     generate the offsets and distances for the new line definition.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KINS, KONS, KIWE, KOWE, KPR, KERR
+      INTEGER KLLEN (KINS)
+      INTEGER KNSIND (2, KONS)
+      INTEGER KILONG (KIWE + 1), KOLONG (KOWE)
+      INTEGER KWEIND (2, KOWE, 2, KONS),
+     1   KWEDIST (2, KOWE, 2, KONS)
+C
+C     Local variables
+      LOGICAL GWEGLOBE
+      INTEGER IIPLAT, IILON, ISTRIDE, IPR, IERR
+      INTEGER IBLON, IBNS, IBLAT
+      INTEGER JLAT, JLON, JNS, JWE
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23900)
+C
+C     External functions
+      INTEGER IGDIWE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRDIWE: Section 1.',JPQUIET)
+C
+      IRDIWE = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRDIWE: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRDIWE: Max no.input longs = ',KIWE)
+        CALL INTLOG(JP_DEBUG,'IRDIWE: No.input lats = ',KINS)
+        CALL INTLOG(JP_DEBUG,'IRDIWE: No.output longs = ',KOWE)
+        CALL INTLOG(JP_DEBUG,'IRDIWE: No.output lats = ',KONS)
+        CALL INTLOG(JP_DEBUG,'IRDIWE: Output field spread = ',KOLONG(1))
+        CALL INTLOG(JP_DEBUG,'IRDIWE: to ',KOLONG(KOWE))
+      ENDIF
+C
+      GWEGLOBE = .TRUE.
+C
+      IBLON = 0
+C
+      IERR = 0
+C
+C     _______________________________________________________
+C
+C*    Section 2. Generate distances and points for all lines
+C                of latitude
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRDIWE: Section 2.',JPQUIET)
+C
+      IPR = KPR
+      IBLAT = 1
+      IBNS  = 1
+C
+      DO 250 JLAT = 1, KONS
+C
+         DO 240 JNS = 1, 2
+C
+            IIPLAT = KNSIND (JNS, JLAT)
+            IILON = KLLEN (IIPLAT)
+C
+            IF (IILON .EQ. IBLON) THEN
+C
+C     Same line definition as last one calculated
+C
+               DO 220 JWE = 1, 2
+                  DO 210 JLON = 1, KOWE
+C
+                     KWEIND (JWE, JLON, JNS, JLAT) =
+     1                  KWEIND (JWE, JLON, IBNS, IBLAT)
+                     KWEDIST (JWE, JLON, JNS, JLAT) =
+     1                  KWEDIST (JWE, JLON, IBNS, IBLAT)
+C
+  210             CONTINUE
+  220          CONTINUE
+C
+            ELSE
+C
+               IBLON = IILON
+               IBNS = JNS
+               IBLAT = JLAT
+C
+               ISTRIDE = JP360 / IILON
+C
+C     Generate longitude values for this line
+C
+               DO 230 JLON = 1, IILON
+C
+                  KILONG (JLON) = (JLON - 1) * ISTRIDE
+C
+  230          CONTINUE
+C
+C     Wrap around input grid to simplify routine IGDIWE
+C
+               KILONG (IILON + 1) = KILONG (1)
+C
+               IERR = IGDIWE (KILONG, IILON, KOLONG, KOWE, GWEGLOBE,
+     1            KWEIND (1, 1, JNS, JLAT), KWEDIST (1, 1, JNS, JLAT),
+     2            IPR, KERR)
+C
+               IF (IERR .GT. 0) THEN
+                  IRDIWE = IERR
+                  GO TO 900
+               ENDIF
+C
+               IPR = KPR - 1
+C
+            ENDIF
+C
+  240    CONTINUE
+C
+  250 CONTINUE
+C
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRDIWE: Section 9.',JPQUIET)
+C
+C
+      RETURN
+      END
diff --git a/interpolation/irgmem.F b/interpolation/irgmem.F
new file mode 100755
index 0000000..c928ac8
--- /dev/null
+++ b/interpolation/irgmem.F
@@ -0,0 +1,326 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRGMEM (KPR, KERR)
+C
+C---->
+C**** *IRGMEM*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine acquires heap space for quasi regular to regular
+C     interpolation.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRGMEM (KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     NINS         - Number of grid points in NS direction for input
+C                    field (used in grspace.h).
+C     NIWE         - Number of grid points in WE direction for input
+C                    field (used in grspace.h).
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NONS         - Number of grid points in NS direction for output
+C                    field (used in grspace.h).
+C     NOWE         - Number of grid points in WE direction for output
+C                    field (used in grspace.h).
+C
+C     grspace.h    - This file contains all the work space array
+C                    definitions for grid point to grid point
+C                    interpolation.
+C
+C     GRID_POINT
+C
+C     NILATGP      - POINTER to array MILATG.
+C     NILONGP      - POINTER to array MILONG.
+C     NILSMP       - POINTER to array MILSM.
+C     NINPNTP      - POINTER to array RINPNT.
+C     NISTRTP      - POINTER to array MISTRT.
+C     NNSDISTP     - POINTER to array MNSDIST.
+C     NNSINDP      - POINTER to array MNSIND.
+C     NMAXP        - POINTER to array RMAX.
+C     NOLATGP      - POINTER to array MOLATG.
+C     NOLONGP      - POINTER to array MOLONG.
+C     NOLSMP       - POINTER to array MOLSM.
+C     NWEDISTP     - POINTER to array MWEDIST.
+C     NWEINDP      - POINTER to array MWEIND.
+C     NWFACTP      - POINTER to array WFACT.
+C
+C     MILATG       - Dynamic array of length (NINS) (see nifld.common)
+C                    which holds the values of the input field
+C                    latitudes.
+C     MILONG       - Dynamic array of length (NIWE + 1) (see
+C                    nifld.common) which holds the values of the
+C                    input field longitudes.
+C     MILSM        - Dynamic array of length (NIWE, 2) (see
+C                    nifld.common) used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MISTRT       - Dynamic array of length (NINS) (see nifld.common)
+C                    which holds the array offsets of the start of
+C                    each latitude line for a quasi regular Gaussian
+C                    input field. No space is assigned to this array
+C                    for a regular input field.
+C     MNSDIST      - Dynamic array of length (2, NONS) (see
+C                    nofld.common) which holds the distances to
+C                    neighbouring latitude lines of the input field
+C                    from the associated line of latitude in the
+C                    output field.
+C     MNSIND       - Dynamic array of length (2, NONS) (see
+C                    nofld.common) which holds the latitude line
+C                    numbers (array offset) of the input field
+C                    associated with each line of latitude in the
+C                    output field.
+C     MOLATG       - Dynamic array of length (NONS) (see nofld.common)
+C                    which holds the values of the output field
+C                    latitudes.
+C     MOLONG       - Dynamic array of length (NOWE) (see nofld.common)
+C                    which holds the values of the output field
+C                    longitudes.
+C     MOLSM        - Dynamic array of length (NOWE) (see nofld.common)
+C                    used in calculating the effects of the land sea
+C                    mask on interpolation.
+C     MWEDIST      - Dynamic array of length (2, NONS) (see
+C                    nofld.common) for a regular input field and of
+C                    length (2, 2 * NONS * NOWE) (see nofld.common)
+C                    for a quasi regular Gaussian input field. This
+C                    array holds the distances to neighbouring
+C                    longitude points of the input field from the
+C                    associated longitude points in the output field.
+C     MWEIND       - Dynamic array of length (2, NONS) (see
+C                    nofld.common) for a regular input field and of
+C                    length (2, 2 * NONS * NOWE) (see nofld.common)
+C                    for a quasi regular Gaussian input field. This
+C                    array holds the longitude points (array offset)
+C                    from the input field associated with each
+C                    longitude point in the output field.
+C     RINPNT       - Dynamic array of length (NOWE) (see nofld.common)
+C                    used to aid vectorisation in processing
+C                    precipitation fields.
+C     RMAX         - Dynamic array of length (NOWE) (see nofld.common)
+C                    used to aid vectorisation in processing
+C                    precipitation fields.
+C     WFACT        - Dynamic array of length (4, NOWE * NONS) (see
+C                    nofld.common) which holds the interpolation
+C                    weights for each point in the output field.
+C
+C     EXTERNALS
+C     _________
+C
+C     IGALLOC    - Get a heap allocation for array space.
+C     INTLOG(R)  - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     This routine first calculates how much heap space is required.
+C     IGALLOC is then used to acquire the required space. Finally the
+C     POINTERs are initialised to allow use of the dynamic arrays.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C     Dummy arguments
+C
+      INTEGER KPR, KERR
+C
+C     Local variables
+C
+#ifdef POINTER_64
+      INTEGER*8 IBASE
+#else
+      INTEGER IBASE
+#endif
+      INTEGER IREQUEST, IERR
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23100)
+C
+C     External functions
+C
+      INTEGER IGALLOC
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRGMEM: Section 1.',JPQUIET)
+C
+      IRGMEM = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Calculate memory required and get heap
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRGMEM: Section 2.',JPQUIET)
+C
+C     REAL arrays (This may change for double precision version)
+C
+      IREQUEST = 4 * NOWE * NONS * JPRLEN
+C
+C     Fields for precipitation calculations
+C
+      IREQUEST = IREQUEST + 2 * NOWE * JPRLEN
+C
+C     Fixed integer fields
+C
+      IREQUEST = IREQUEST + (NIWE + 1 + NINS + NOWE + 5 * NONS) *
+     1  JPILEN
+C
+C     Reduced Gaussian input fields (These change for regular fields)
+C
+      IREQUEST = IREQUEST + (8 * NOWE * NONS + NINS) * JPILEN
+C
+C     Fields for LSM calculations
+C
+      IREQUEST = IREQUEST + (2 * NIWE + NOWE) * JPILEN
+C
+C     Get the required memory
+C
+      IERR = IGALLOC (JPINNER, IREQUEST, IBASE, KPR, KERR)
+C
+      IF( IERR.GT.0 ) THEN
+         IRGMEM = IERR
+         GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Initialise base addresses for POINTER arrays
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRGMEM: Section 3.',JPQUIET)
+C
+C     REAL arrays first to ease conversion to DOUBLE PRECISION
+C
+      NWFACTP = IBASE
+C
+C     Precipitation REAL arrays
+C
+      NMAXP = NWFACTP + 4 * NOWE * NONS * JPRLEN
+      NINPNTP = NMAXP + NOWE * JPRLEN
+C
+C     This offset may change if DOUBLE PRECISION
+C
+      NILONGP = NINPNTP + NOWE * JPRLEN
+C
+      NILATGP  = NILONGP + (NIWE + 1) * JPILEN
+      NOLONGP = NILATGP + NINS * JPILEN
+      NOLATGP  = NOLONGP + NOWE * JPILEN
+      NNSINDP = NOLATGP + NONS * JPILEN
+      NNSDISTP = NNSINDP + 2 * NONS * JPILEN
+C
+      NWEINDP = NNSDISTP  + 2 * NONS * JPILEN
+      NWEDISTP = NWEINDP + 4 * NOWE * NONS * JPILEN
+      NISTRTP  = NWEDISTP + 4 * NOWE * NONS * JPILEN
+C
+C     LSM arrays
+C
+      NILSMP = NISTRTP + NINS * JPILEN
+      NOLSMP = NILSMP + 2 * NIWE * JPILEN
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Output base addresses.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: WFACT address = ',NWFACTP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: RMAX address = ',NMAXP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: RINPNT address = ',NINPNTP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Input long.address = ',NILONGP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Input lat.address = ',NILATGP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Output long.address = ',NOLONGP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Output lat.address = ',NOLATGP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: NS offset address = ',NNSINDP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: NS distance address = ',NNSDISTP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: WE offset address = ',NWEINDP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: WE distance address = ',NWEDISTP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Line start array addr.= ',NISTRTP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Input LSM address = ',NILSMP)
+        CALL INTLOG(JP_DEBUG,'IRGMEM: Output LSM address = ',NOLSMP)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRGMEM: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irgrid.F b/interpolation/irgrid.F
new file mode 100755
index 0000000..0d7b1b9
--- /dev/null
+++ b/interpolation/irgrid.F
@@ -0,0 +1,232 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRGRID (KAREA, KLLEN, KLN, PGAUSS, KSTART,
+     1   KLATG, KNNS, OWEGLOBE, KPR, KERR)
+C
+C---->
+C**** *IRGRID*
+C
+C     PURPOSE
+C     _______
+C
+C     Generate the arrays of latitude points and the starting points
+C     of the lines of latitude for a quasi regular Gaussian grid.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRGRID (KAREA, KLLEN, KLN, PGAUSS, KSTART,
+C    1   KLATG, KNNS, OWEGLOBE, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KAREA      - The area definition (N, W, S, E) provided by the
+C                  calling routine. (Currently unused).
+C
+C     KLLEN   - This quasi regular Gaussian line length definition
+C                  is for the full grid and not just the North and
+C                  South limits selected.
+C
+C     KLN        - The Northern Gaussian latitude number for this area.
+C
+C     PGAUSS     - The full list of Gaussian latitudes for this
+C                  truncation.
+C
+C     KNNS       - The number of points in the North-South direction
+C                  in this field.
+C
+C     OWEGLOBE   - This variable will be true if the array of
+C                  longitudes spans the globe and it is an input grid.
+C                  (Currently unused)
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KSTART     - The array offset for each line of latitude within
+C                  the quasi regular field.
+C
+C     KLATG      - The array of latitudes for this Gaussian
+C                  truncation and area.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The array KLATG is generated using the information provided by
+C     the other parameters. The array KSTART is generated using the
+C     array KLLEN. Note that Gaussian latitudes will be stored as
+C     NINT (PGAUSS * 1.0E4).
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23700)
+C
+C     Dummy arguments
+C
+      LOGICAL OWEGLOBE
+      INTEGER KNNS, KLN, KPR, KERR
+      INTEGER KAREA (4), KLLEN (KNNS)
+      INTEGER KLATG (KNNS), KSTART (KNNS)
+      REAL PGAUSS (*)
+C
+C     Local variables
+C
+      LOGICAL LPRINT
+      INTEGER JLAT
+      REAL PNLAT, ZNLAT, MFACTOR
+C
+C     Function externals
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      LPRINT = KPR.NE.0
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IRGRID: Section 1.',JPQUIET)
+C
+      IRGRID = 0
+C
+      IF( LPRINT ) THEN
+        CALL INTLOG(JP_DEBUG,'IRGRID: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRGRID: N Gaussian line = ',KLN)
+        CALL INTLOG(JP_DEBUG,'IRGRID: No. of lat lines = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IRGRID: Area North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IRGRID: Area West  = ', KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IRGRID: Area South = ', KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IRGRID: Area East  = ', KAREA(4))
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'IRGRID: Input W-E fld is global.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'IRGRID: Input W-E fld is NOT global.',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Generate start position of lines of latitude
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IRGRID: Section 2.',JPQUIET)
+C
+      KSTART(1) = 1
+      DO JLAT = KLN, KLN + KNNS - 2
+        KSTART(JLAT+1) = KSTART(JLAT) + KLLEN(JLAT)
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 3. Generate points along a line of meridian
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IRGRID: Section 3.',JPQUIET)
+C
+      DO JLAT = KLN, KLN + KNNS - 1
+C
+C       If it is a stretched field, calculate the true latitude and
+C       the map factor.
+C
+        PNLAT = PGAUSS(JLAT)
+        IF( RISTRET.NE.0 ) THEN
+          CALL STRLAT(PNLAT, RISTRET, 0, ZNLAT, MFACTOR)
+        ELSE
+          ZNLAT = PNLAT
+        ENDIF
+        KLATG(JLAT-KLN+1) = NINT(ZNLAT * PPMULT)
+      ENDDO
+      KAREA(1)   =  KLATG(1)
+      KAREA(KLN) =  KLATG(KLN)
+      IF( LPRINT ) THEN
+        CALL INTLOG(JP_DEBUG,'IRGRID: Modified North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IRGRID: Modified South = ', KAREA(3))
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF( LPRINT ) CALL INTLOG(JP_DEBUG,'IRGRID: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irgtog.F b/interpolation/irgtog.F
new file mode 100755
index 0000000..39259e0
--- /dev/null
+++ b/interpolation/irgtog.F
@@ -0,0 +1,275 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRGTOG (PIFELD, KSTART, KINS, KOWE, KONS,
+     1   KWEIND, KNSIND, PWFACT, POFELD, KPR, KERR)
+C
+C---->
+C**** *IRGTOG*
+C
+C     Purpose
+C     -------
+C
+C     Perform basic interpolation between the input and output fields
+C     for a quasi regular input field and a regular output field.
+C
+C     Interface
+C     ---------
+C
+C     IERR = IRGTOG (PIFELD, KSTART, KINS, KOWE, KONS, KWEIND,
+C    1   KNSIND, PWFACT, POFELD, KPR, KERR)
+C
+C     Input parameters
+C     ----------------
+C
+C     PIFELD     - The input field provided by the calling routine.
+C
+C     KSTART     - The array offset for each line of latitude within
+C                  the quasi regular field.
+C
+C     KINS       - The number of points in the North-South direction
+C                  in the input field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KWEIND     - This array contains the array offsets of the West
+C                  and East points in the input array required for
+C                  interpolation.
+C
+C     KNSIND     - This array contains the array offsets of the North
+C                  and South points in the input array required for
+C                  interpolation.
+C
+C     PWFACT     - The array of interpolating weights to the four
+C                  neighbouring points for every output point.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     -----------------
+C
+C     POFELD     - The output field returned to the calling routine.
+C
+C     Return value
+C     ------------
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     -------------------------------
+C
+C     None
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C     Externals
+C     ---------
+C
+C     INTLOG(R)    - Logs messages.
+C
+C     Method
+C     ------
+C
+C     This routine performs basic linear interpolation using the four
+C     neighbouring points in the quasi regular input array to
+C     generate the output array.
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C     Comments
+C     --------
+C
+C     None
+C
+C     Author
+C     ------
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     Modifications
+C     -------------
+C
+C     Allow for missing data values
+C     J.D.Chambers      ECMWF       August 2000
+C
+C     Force nearest neighbour processing with env variable or
+C     INTOUT parameter
+C     S.Curic           ECMWF       September 2005
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Function arguments
+C
+      INTEGER KINS, KOWE, KONS, KPR, KERR
+      INTEGER KSTART (KINS)
+      INTEGER KWEIND (2, KOWE, 2, KONS), KNSIND (2, KONS)
+      REAL PIFELD (*), POFELD (KOWE, KONS)
+      REAL PWFACT (4, KOWE, KONS)
+C
+C     Local variables
+C
+      INTEGER ILATN, ILATS, INORTH, ISOUTH, JOLAT, JOLON, COUNT
+      REAL NEAREST
+      CHARACTER*12 YFLAG
+      LOGICAL LVEGGY
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IRGTOG = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRGTOG: Section 1.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRGTOG: No. input fld lats = ',KINS)
+        CALL INTLOG(JP_DEBUG,'IRGTOG: No.output fld lats = ',KONS)
+        CALL INTLOG(JP_DEBUG,'IRGTOG: No.output fld longs = ',KOWE)
+      ENDIF
+C
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+      IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'IRGTOG: nearest neighbour processing (vegetation)',JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Basic interpolation
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRGTOG: Section 2.',JPQUIET)
+C
+      DO JOLAT = 1, KONS
+C
+        ILATN = KNSIND(JP_I_N,JOLAT)
+        ILATS = KNSIND(JP_I_S,JOLAT)
+C
+        INORTH = KSTART(ILATN) - 1
+        ISOUTH = KSTART(ILATS) - 1
+C
+        DO JOLON = 1, KOWE
+C
+C         Count non-missing data values
+C
+          COUNT = 0
+          IF( NOTEQ(PIFELD(KWEIND(JP_I_W,JOLON,JP_I_N,JOLAT)+INORTH),
+     X          RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(PIFELD(KWEIND(JP_I_E,JOLON,JP_I_N,JOLAT)+INORTH),
+     X          RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(PIFELD(KWEIND(JP_I_W,JOLON,JP_I_S,JOLAT)+ISOUTH),
+     X          RMISSGV) ) COUNT = COUNT + 1
+          IF( NOTEQ(PIFELD(KWEIND(JP_I_E,JOLON,JP_I_S,JOLAT)+ISOUTH),
+     X          RMISSGV) ) COUNT = COUNT + 1
+C
+C         Interpolate using four neighbours if none are missing
+C
+          IF( (COUNT.EQ.4).AND.(.NOT.LVEGGY) ) THEN
+            POFELD(JOLON,JOLAT) =
+     X        PIFELD(KWEIND(JP_I_W,JOLON,JP_I_N,JOLAT)+INORTH) *
+     X          PWFACT(JP_I_NW,JOLON,JOLAT) +
+     X        PIFELD(KWEIND(JP_I_E,JOLON,JP_I_N,JOLAT)+INORTH) *
+     X          PWFACT(JP_I_NE,JOLON,JOLAT) +
+     X        PIFELD(KWEIND(JP_I_W,JOLON,JP_I_S,JOLAT)+ISOUTH) *
+     X          PWFACT(JP_I_SW,JOLON,JOLAT) +
+     X        PIFELD(KWEIND(JP_I_E,JOLON,JP_I_S,JOLAT)+ISOUTH) *
+     X          PWFACT(JP_I_SE,JOLON,JOLAT)
+C
+C         Set missing if all neighbours are missing
+C
+          ELSE IF( COUNT.EQ.0 ) THEN
+            POFELD(JOLON,JOLAT) = RMISSGV
+C
+C         Otherwise, use the nearest neighbour
+C
+          ELSE
+            NEAREST = PWFACT(JP_I_NW,JOLON,JOLAT)
+            POFELD(JOLON,JOLAT) = 
+     X        PIFELD(KWEIND(JP_I_W,JOLON,JP_I_N,JOLAT)+INORTH)
+C
+            IF( PWFACT(JP_I_NE,JOLON,JOLAT).GT.NEAREST ) THEN
+              NEAREST = PWFACT(JP_I_NE,JOLON,JOLAT)
+              POFELD(JOLON,JOLAT) = 
+     X          PIFELD(KWEIND(JP_I_E,JOLON,JP_I_N,JOLAT)+INORTH)
+            ENDIF
+C
+            IF( PWFACT(JP_I_SW,JOLON,JOLAT).GT.NEAREST ) THEN
+              NEAREST = PWFACT(JP_I_SW,JOLON,JOLAT)
+              POFELD(JOLON,JOLAT) = 
+     X          PIFELD(KWEIND(JP_I_W,JOLON,JP_I_S,JOLAT)+ISOUTH)
+            ENDIF
+C
+            IF( PWFACT(JP_I_SE,JOLON,JOLAT).GT.NEAREST ) THEN
+              NEAREST = PWFACT(JP_I_SE,JOLON,JOLAT)
+              POFELD(JOLON,JOLAT) = 
+     X          PIFELD(KWEIND(JP_I_E,JOLON,JP_I_S,JOLAT)+ISOUTH)
+            ENDIF
+C
+          ENDIF
+C
+        ENDDO
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRGTOG: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irint.F b/interpolation/irint.F
new file mode 100755
index 0000000..8b53166
--- /dev/null
+++ b/interpolation/irint.F
@@ -0,0 +1,212 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRINT (KWEDIST, KOWE, KNSDIST, KONS, PWFACT,
+     1   KPR, KERR)
+C
+C---->
+C**** *IRINT*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the basic unnormalised interpolation weights when
+C     interpolating from a quasi regular grid to a regular grid.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRINT (KWEDIST, KOWE, KNSDIST, KONS, PWFACT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field. This array is
+C                  dimensioned (2, KOWE, 2, KONS).
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KNSDIST    - This array holds the distances to lines in input
+C                  field from the associated lines of latitude in the
+C                  output field. The array is dimensioned (2, KONS).
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PWFACT     - The unnormalised array of interpolating weights to
+C                  the four neighbouring points for every output point.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     IRINTR     - Calculate the basic unnormalised interpolation
+C                  weights when interpolating from a quasi regular
+C                  grid to a regular grid for one line of latitude.
+C     INTLOG(R)  - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The weights are formed by performing a linear fit along each
+C     line of latitude. These two partial weights are normalised
+C     before performing a linear fit along the line of meridian.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KOWE, KONS, KPR, KERR
+      INTEGER KWEDIST (2, KOWE, 2, KONS), KNSDIST (2, KONS)
+      REAL PWFACT (4, KOWE, KONS)
+C
+C     Local variables
+      INTEGER IPR, IERR
+      INTEGER JOLAT
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23200)
+C
+C     External functions
+      INTEGER IRINTR
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRINT: Section 1.',JPQUIET)
+C
+      IRINT = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRINT: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRINT: No.output longitudes = ',KOWE)
+        CALL INTLOG(JP_DEBUG,'IRINT: No.output latitudes = ',KONS)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Calculate arrays of weights
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRINT: Section 2.',JPQUIET)
+C
+C     Main loop over latitudes
+C
+      IPR = KPR
+C
+      DO 220 JOLAT = 1, KONS
+C
+        IERR = IRINTR (KWEDIST (1, 1, 1, JOLAT), KOWE,
+     X      KNSDIST (1, JOLAT), PWFACT (1, 1, JOLAT), IPR, KERR)
+C
+        IF (IERR .GT. 0) THEN
+          IRINT = IERR
+          GO TO 900
+        ENDIF
+C
+        IPR = KPR - 1
+C
+  220 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRINT: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irintr.F b/interpolation/irintr.F
new file mode 100755
index 0000000..d75931c
--- /dev/null
+++ b/interpolation/irintr.F
@@ -0,0 +1,211 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRINTR (KWEDIST, KOWE, KNSDIST, PWFACT, KPR,
+     1   KERR)
+C
+C---->
+C**** *IRINTR*
+C
+C     PURPOSE
+C     _______
+C
+C     Calculate the basic unnormalised interpolation weights when
+C     interpolating from a quasi regular grid to a regular grid for
+C     one line of latitude.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRINTR (KWEDIST, KOWE, KNSDIST, PWFACT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KWEDIST    - This array holds the distances to longitude values
+C                  in the input field from the associated longitude
+C                  values in the output field.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KNSDIST    - This array of length 2 gives the distances to the
+C                  lines of latitude North and South in the input
+C                  field from the line of latitude in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PWFACT     - The unnormalised array of interpolating weights to
+C                  the four neighbouring points for every point of the
+C                  output line of latitude.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)  - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     The weights are formed by performing a linear fit along the
+C     two lines of latitude. These two partial weights are normalised
+C     before performing a linear fit along the line of meridian.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     NONE
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KOWE, KPR, KERR
+      INTEGER KWEDIST (2, KOWE, 2), KNSDIST (2)
+      REAL PWFACT (4, KOWE)
+C
+C     Local variables
+      REAL ZSOUTH, ZNORTH
+      INTEGER JOLON
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23300)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRINTR: Section 1.',JPQUIET)
+C
+      IRINTR = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRINTR: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRINTR: No.output longitudes = ',KOWE)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Calculate arrays of weights
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRINTR: Section 2.',JPQUIET)
+C
+      DO 210 JOLON = 1, KOWE
+C
+         ZNORTH = KWEDIST (JP_I_W, JOLON, JP_I_N) +
+     X      KWEDIST (JP_I_E, JOLON, JP_I_N)
+C
+         ZSOUTH = KWEDIST (JP_I_W, JOLON, JP_I_S) +
+     X      KWEDIST (JP_I_E, JOLON, JP_I_S)
+C
+         PWFACT (JP_I_NW, JOLON) =
+     X      REAL (KWEDIST (JP_I_E, JOLON, JP_I_N)) *
+     X      ZSOUTH * REAL (KNSDIST (JP_I_S) )
+C
+         PWFACT (JP_I_NE, JOLON) =
+     X      REAL (KWEDIST (JP_I_W, JOLON, JP_I_N)) *
+     X      ZSOUTH * REAL (KNSDIST (JP_I_S) )
+C
+         PWFACT (JP_I_SW, JOLON) =
+     X      REAL (KWEDIST (JP_I_E, JOLON, JP_I_S)) *
+     X      ZNORTH * REAL (KNSDIST (JP_I_N) )
+C
+         PWFACT (JP_I_SE, JOLON) =
+     X      REAL (KWEDIST (JP_I_W, JOLON, JP_I_S)) *
+     X      ZNORTH * REAL (KNSDIST (JP_I_N) )
+C
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRINTR: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irlrev.F b/interpolation/irlrev.F
new file mode 100755
index 0000000..b7fc29e
--- /dev/null
+++ b/interpolation/irlrev.F
@@ -0,0 +1,244 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRLREV (PMAT, KLEN, KLLEN, KCOL, KDIR, KPR,
+     1   KERR)
+C
+C---->
+C**** *IRLREV*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine reverses either the rows or the columns of a quasi
+C     regular matrix.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRLREV (PMAT, KLEN, KLLEN, KCOL, KDIR, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PMAT       - The input matrix of dimension (KLEN).
+C
+C     KLEN       - The length of the array PMAT.
+C
+C     KLLEN      - The lengths of each column within PMAT.
+C
+C     KCOL       - The number of entries in KLLEN and columns in PMAT.
+C
+C     KDIR       - 1   Reverses the order of the rows.
+C                      West-East reversal for meteorological fields.
+C                  2   Reverses the order of the columns.
+C                      North-South reversal for meteorological fields.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  (No longer used, kept for backward compatibility.
+C                   Used to be used as follows:
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.)
+C
+C
+C     Output parameters
+C     ________________
+C
+C     PMAT       - The transformed matrix.
+C
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     7501  A column swap has been attempted where the lengths in the
+C           array KLLEN are not symmetric about the middle value.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG     - Generate log messages.
+C
+C
+C     METHOD
+C     ______
+C
+C     KDIR = 1 is implemented by swapping corresponding columns of
+C              the matrix.
+C
+C     KDIR = 2 is implemented by reversing the elements within each
+C              column.
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF        Sept 1995
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+      INTEGER KLEN, KCOL, KDIR, KPR, KERR
+      INTEGER KLLEN (KCOL)
+      REAL PMAT (KLEN)
+C
+C     Local variables
+      INTEGER IHALF, ISTARTL, ISTARTU, ILINE
+      INTEGER JSTEP, JMOVE
+      REAL ZTEMP
+C
+C     Parameters.
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 7500)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRLREV: Section 1.',JPQUIET)
+C
+      IRLREV = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRLREV: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRLREV: Matrix length = ',KLEN)
+        CALL INTLOG(JP_DEBUG,'IRLREV: Number of rows = ',KCOL)
+        CALL INTLOG(JP_DEBUG,'IRLREV: Direction value = ',KDIR)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Matrix COLUMN reversal (Field row interchange - WE)
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRLREV: Section 2.',JPQUIET)
+C
+      IF (KDIR .EQ. 1) THEN
+C
+        ISTARTL = 0
+C
+        DO 220 JSTEP = 1, KCOL
+C
+          ILINE = KLLEN (JSTEP)
+          IHALF = ILINE / 2
+C
+          DO 210 JMOVE = 1, IHALF
+            ZTEMP = PMAT(ISTARTL + ILINE + 1 - JMOVE)
+            PMAT(ISTARTL + ILINE + 1 - JMOVE) = PMAT(ISTARTL + JMOVE)
+            PMAT(ISTARTL + JMOVE) = ZTEMP
+  210     CONTINUE
+C
+          ISTARTL = ISTARTL + ILINE
+C
+  220   CONTINUE
+C
+      ELSE
+C
+C     _______________________________________________________
+C
+C*    Section 3. Matrix ROW reversal (Field column interchange - NS)
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+        IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRLREV: Section 3.',JPQUIET)
+C
+        IHALF = KCOL / 2
+C
+        ISTARTL = 0
+        ISTARTU = KLEN - KLLEN (KCOL)
+C
+        DO 320 JMOVE = 1, IHALF
+C
+C         The quasi regular line lengths must be symmetric for this
+C         operation.
+C
+          IF (KLLEN (JMOVE) .NE. KLLEN (KCOL + 1 - JMOVE) ) THEN
+            IRLREV = JPROUTINE + 1
+C
+            CALL INTLOG(JP_ERROR,
+     X        'IRLREV: Line of latitude reversal failed', JPQUIET)
+            CALL INTLOG(JP_ERROR,'IRLREV: at lat.lines = ',JMOVE)
+            CALL INTLOG(JP_ERROR,'IRLREV: and = ',(KCOL+1-JMOVE))
+            CALL INTLOG(JP_ERROR,
+     X        'IRLREV: Lengths are not the same.', JPQUIET)
+            CALL INTLOG(JP_ERROR,'IRLREV: 1st length = ', KLLEN (JMOVE))
+            CALL INTLOG(JP_ERROR,
+     X        'IRLREV: 2nd length = ',KLLEN(KCOL+1-JMOVE))
+C
+          ENDIF
+C
+          DO 310 JSTEP = 1, KLLEN (JMOVE)
+C
+            ZTEMP = PMAT (ISTARTU + JSTEP)
+            PMAT (ISTARTU + JSTEP) = PMAT (ISTARTL + JSTEP)
+            PMAT (ISTARTL + JSTEP) = ZTEMP
+C
+  310     CONTINUE
+C
+          ISTARTL = ISTARTL + KLLEN (JMOVE)
+          ISTARTU = ISTARTU - KLLEN (KCOL - JMOVE)
+C
+  320   CONTINUE
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRLREV: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irlsmb.F b/interpolation/irlsmb.F
new file mode 100755
index 0000000..2a49679
--- /dev/null
+++ b/interpolation/irlsmb.F
@@ -0,0 +1,481 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRLSMB (OISTAND, HIFILE, KIREC, KIGRID, KILINE,
+     X   OOSTAND, HOFILE, KOREC, KOGRID, KOLINE, KPR, KERR)
+C
+C---->
+C**** *IRLSMB*
+C
+C     Purpose
+C     -------
+C
+C     Calculate the effects of the land-sea masks on the unnormalised
+C     interpolation weights for a quasi regular input field and a
+C     regular output field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IERR = IRLSMB (OISTAND, HIFILE, KIREC, KIGRID, KILINE,
+C    X   OOSTAND, HOFILE, KOREC, KOGRID, KOLINE, KPR, KERR)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     OISTAND - Flag indicating whether the input land-sea mask
+C               is a pre-stored "standard" field.
+C
+C     HIFILE  - The filename for the input land-sea mask.
+C
+C     KIREC   - The length of one latitude record in the input file.
+C
+C     KIGRID  - An array of length 2 giving the row and column
+C               strides in a pre-stored land sea mask file for the
+C               input grid.
+C
+C     KILINE  - An array of length 2 giving the offsets of the
+C               Northern and Western starting points in a
+C               pre-stored land sea mask file for the input grid.
+C
+C     OOSTAND - Flag indicating whether the output land-sea mask
+C               is a prestored "standard" field.
+C
+C     HOFILE  - The filename for the output land-sea mask.
+C
+C     KOREC   - The length of one latitude record in the output file.
+C
+C     KOGRID  - An array of length 2 giving the row and column
+C               strides in a pre-stored land sea mask file for the
+C               output grid.
+C
+C     KOLINE  - An array of length 2 giving the offsets of the
+C               Northern and Western starting points in a
+C               pre-stored land sea mask file for the output grid.
+C
+C     KPR     - The debug print switch.
+C               0  , No debugging output.
+C               1  , Produce debugging output.
+C
+C     KERR    - The error control flag.
+C               -ve, No error message. Return error code.
+C               0  , Hard failure with error message.
+C               +ve, Print error message. Return error code.
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     The common variable WFACT is modified by this routine.
+C
+C     An error indicator
+C
+C     23401 An error exit was returned from the I/O routine PBOPEN.
+C     23402 An error exit was returned from the I/O routine PBCLOSE.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     nifld.common - This file contains all the input field
+C                    definition variables.
+C
+C     NINS         - Number of grid points in NS direction for input
+C                    field (used in grspace.h).
+C     NIWE         - Number of grid points in WE direction for input
+C                    field (used in grspace.h).
+C
+C     nofld.common - This file contains all the output field
+C                    definition variables.
+C
+C     NONS         - Number of grid points in NS direction for output
+C                    field is used.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field is used.
+C
+C     grspace.h    - This file contains all the work space array
+C                    definitions for grid point to grid point
+C                    interpolation.
+C
+C     MEXPAND      - Array used to expand one latitude line of the
+C                    10 minute land sea mask file to have one word
+C                    per bit for improved efficiency.
+C     MILLEN       - Array containing a quasi regular line length
+C                    definition.
+C     MWORK        - Array used to read one latitude line of a
+C                    standard land sea mask file.
+C
+C     MILATG       - The input field latitudes.
+C     MILONG       - The input field longitudes.
+C     MILSM        - Work array used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MISTRT       - The array offsets of the start of each latitude
+C                    line for a quasi regular Gaussian input field.
+C     MNSIND       - The latitude line numbers (array offset) of the
+C                    input field associated with each line of
+C                    latitude in the output field.
+C     MOLATG       - The output field latitudes.
+C     MOLONG       - The output field longitudes.
+C     MOLSM        - Work array used in calculating the effects of
+C                    the land sea mask on interpolation.
+C     MWEIND       - This array holds the longitude points (array
+C                    offset) from the input field associated with
+C                    each longitude point in the output field.
+C     WFACT        - The interpolation weights for each point in the
+C                    output field.
+C
+C
+C     Externals
+C     ---------
+C
+C     IGLSM01   - Read and process one latitude row from the 10
+C                 minute land sea mask.
+C     IGLSMR    - Calculate the effects of the land-sea masks for
+C                 one line of latitude on the unnormalised
+C                 interpolation weights.
+C     IGLSMST   - Read and process one line of latitude from a
+C                 standard land sea mask file.
+C     PBCLOSE   - Close a land sea mask file after processing.
+C     PBOPEN    - Open a land sea mask file for processing.
+C     INTLOG(R) - Log messages.
+C     JINDEX    - Returns length of character string
+C
+C
+C     Method
+C     ------
+C
+C     All the land sea mask data is in (0-1) form. If a point in the
+C     input field has a different land sea mask value from the
+C     corresponding point in the output field then its interpolating
+C     weight is multiplied by a scaling factor. This scaling factor
+C     is currently 0.2 so that the effect of such points in the final
+C     interpolation is reduced.
+C
+C     The land-sea mask files are kept open between calls to this
+C     routine.
+C
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C
+C     Comments
+C     --------
+C
+C     None
+C
+C
+C     Author
+C     ------
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     Modifications
+C     -------------
+C
+C     J.D.Chambers      ECMWF       Oct 1996
+C     Reduced number of parameters in call to IGLSMST and IGLSM01
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C     Function arguments
+C
+      LOGICAL OISTAND, OOSTAND
+      CHARACTER *(*) HIFILE, HOFILE
+      INTEGER KIREC, KOREC, KPR, KERR
+      INTEGER KIGRID (2), KILINE (2), KOGRID (2), KOLINE (2)
+C
+C     Local variables
+C
+      INTEGER IIUNIT, IOUNIT, IIFILE, IOFILE
+      INTEGER ILATN, ILATS, ILINEN, ILINES, ISTRIDEN, ISTRIDES
+      INTEGER IOSTRIDE, INDEXN, INDEXS, IZERO, IOFF, IPR, IERR
+      INTEGER JLON, JOLAT
+      CHARACTER*80 XHIFILE, XHOFILE
+      CHARACTER*2 NEWFILE, MSKFILE
+      INTEGER XIIUNIT, XIOUNIT, II
+      DATA XIIUNIT/0/
+      DATA XIOUNIT/0/
+      SAVE  XHIFILE, XHOFILE, XIIUNIT, XIOUNIT
+C
+C     Multiplication factor for unlike land-sea masks
+C
+      REAL PPLSM
+      PARAMETER (PPLSM = 0.2E0)
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23400)
+C
+C     External functions
+C
+      INTEGER IGLSMR, IGLSMST, IGLSM01, JINDEX
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialisation
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRLSMB: Section 1.',JPQUIET)
+C
+      IRLSMB = 0
+C
+      IIFILE = JINDEX(HIFILE)
+      IOFILE = JINDEX(HOFILE)
+C
+      IF( KPR.GE.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Input field parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRLSMB: LSM filename is.',JPQUIET)
+        CALL INTLOG(JP_DEBUG, HIFILE(1:IIFILE), JPQUIET)
+        IF( OISTAND ) THEN
+            CALL INTLOG(JP_DEBUG,'IRLSMB: Standard fld: TRUE',JPQUIET)
+        ELSE
+            CALL INTLOG(JP_DEBUG,'IRLSMB: Standard fld: FALSE',JPQUIET)
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'IRLSMB: LSM file rec len = ',KIREC)
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid stride WE = ',KIGRID(1))
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid stride NS = ',KIGRID(2))
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid start N = ',KILINE(1))
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid start W = ',KILINE(2))
+C
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Output field parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG, HOFILE(1:IOFILE),JPQUIET)
+        IF( OOSTAND ) THEN
+            CALL INTLOG(JP_DEBUG,'IRLSMB: Standard fld: TRUE',JPQUIET)
+        ELSE
+            CALL INTLOG(JP_DEBUG,'IRLSMB: Standard fld: FALSE',JPQUIET)
+        ENDIF
+        CALL INTLOG(JP_DEBUG,'IRLSMB: LSM file rec len = ',KOREC)
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid stride WE = ',KOGRID(1))
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid stride NS = ',KOGRID(2))
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid start N = ',KOLINE(1))
+        CALL INTLOG(JP_DEBUG,'IRLSMB: Grid start W = ',KOLINE(2))
+      ENDIF
+C
+      IF( MOLONG(2).GE.MOLONG(1) ) THEN
+         IOSTRIDE = MOLONG(2) - MOLONG(1)
+      ELSE
+         IOSTRIDE = MOLONG(2) + JP360 - MOLONG(1)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Open files for input and output land sea masks
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRLSMB: Section 2.',JPQUIET)
+C
+C     See if first time through or input land sea mask filename has
+C     changed since last access
+C
+      II = JINDEX(HIFILE)
+      IF( XHIFILE(1:II).NE.HIFILE(1:II) ) THEN
+C
+C       Open input land sea mask file
+C
+        IF(XIIUNIT.NE.0) CALL PBCLOSE(XIIUNIT,IERR)
+        CALL PBOPEN(IIUNIT, HIFILE, 'r', IERR)
+        IF( IERR.NE.0 ) THEN
+          IRLSMB = JPROUTINE + 1
+C
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOG(JP_ERROR,'IRLSMB: PBOPEN return code = ',IERR)
+            CALL INTLOG(JP_ERROR,'IRLSMB: trying to open file',JPQUIET)
+            CALL INTLOG(JP_ERROR, HIFILE(1:IIFILE),JPQUIET)
+          ENDIF
+C
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X      'IRLSMB: Interpolation failed.',JPQUIET)
+          GOTO 900
+        ENDIF
+        XIIUNIT = IIUNIT
+        XHIFILE(1:II) = HIFILE(1:II)
+        NEWFILE(1:1) = 'Y'
+C
+C     Just rewind if same file still in use
+C
+      ELSE
+        IIUNIT = XIIUNIT
+        NEWFILE(1:1) = 'N'
+      ENDIF
+C
+C     See if first time through or output land sea mask filename has
+C     changed since last access
+C
+      II = JINDEX(HOFILE)
+      IF( XHOFILE(1:II).NE.HOFILE(1:II) ) THEN
+C
+C       Open output land sea mask file
+C
+        IF(XIOUNIT.NE.0) CALL PBCLOSE(XIOUNIT,IERR)
+        CALL PBOPEN(IOUNIT, HOFILE, 'r', IERR)
+        IF( IERR.NE.0 ) THEN
+          IRLSMB = JPROUTINE + 1
+C
+          IF( KERR.GE.0 ) THEN
+            CALL INTLOG(JP_ERROR,'IRLSMB: PBOPEN return code = ',IERR)
+            CALL INTLOG(JP_ERROR,'IRLSMB: trying to open file',JPQUIET)
+            CALL INTLOG(JP_ERROR, HOFILE(1:IOFILE),JPQUIET)
+          ENDIF
+C
+          IF( KERR.EQ.0 ) CALL INTLOG(JP_FATAL,
+     X      'IRLSMB: Interpolation failed.',JPQUIET)
+          GOTO 900
+        ENDIF
+        XIOUNIT = IOUNIT
+        XHOFILE(1:II) = HOFILE(1:II)
+        NEWFILE(2:2) = 'Y'
+C
+C     Just rewind if same file still in use
+C
+      ELSE
+        IOUNIT = XIOUNIT
+        NEWFILE(2:2) = 'N'
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3. Calculate arrays of weights
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRLSMB: Section 3.',JPQUIET)
+C
+      IPR = KPR
+C
+      DO JOLAT = 1, NONS
+C
+        INDEXN = ( (JOLAT - 1) * 2 + JP_I_N - 1) * NOWE + 1
+        INDEXS = ( (JOLAT - 1) * 2 + JP_I_S - 1) * NOWE + 1
+C
+C       Get line for output array
+C
+        IF( OOSTAND ) THEN
+C
+          IOFF = (KOLINE(JPNORTH) + (JOLAT - 1) * KOGRID(JPNSSTEP)
+     X         - 1) * KOREC
+C
+          MSKFILE(2:2) = 'O'
+          MSKFILE(1:1) = NEWFILE(2:2)
+          IERR = IGLSMST(IOUNIT, IOFF, NOWE, KOLINE(JPWEST),
+     X         KOGRID(JPWESTEP), KOREC, MOLSM, MSKFILE)
+          NEWFILE(2:2) = 'N'
+C
+        ELSE
+          IERR = IGLSM01(IOUNIT, NOWE, MOLONG, MOLATG(JOLAT),
+     X         MEXPAND, KOREC, MOLSM)
+        ENDIF
+C
+        IF( IERR.GT.0 ) THEN
+          IRLSMB = IERR
+          GOTO 900
+        ENDIF
+C
+        ILATN = MNSIND(JP_I_N, JOLAT)
+        ILATS = MNSIND(JP_I_S, JOLAT)
+C
+        ILINEN = MILLEN(ILATN)
+        ISTRIDEN = JP360 / ILINEN
+C
+        ILINES = MILLEN(ILATS)
+        ISTRIDES = JP360 / ILINES
+C
+        IZERO = 0
+C
+C       Get lines for input array
+C
+        IF( OISTAND ) THEN
+C
+          MSKFILE(2:2) = 'I'
+          MSKFILE(1:1) = NEWFILE(1:1)
+          IERR = IGLSMST(IIUNIT, MISTRT(ILATN) - 1, ILINEN,
+     X         KILINE(JPWEST), KIGRID(JPWESTEP), ILINEN,
+     X         MILSM(1, JP_I_N), MSKFILE)
+          NEWFILE(1:1) = 'N'
+C
+          IF( IERR.GT.0 ) THEN
+            IRLSMB = IERR
+            GOTO 900
+          ENDIF
+C
+          MSKFILE(2:2) = 'I'
+          MSKFILE(1:1) = NEWFILE(1:1)
+          IERR = IGLSMST(IIUNIT, MISTRT(ILATS) - 1, ILINES,
+     X         KILINE(JPWEST), KIGRID(JPWESTEP), ILINES,
+     X         MILSM(1, JP_I_S), MSKFILE)
+          NEWFILE(1:1) = 'N'
+C
+        ELSE
+C
+          DO JLON = 0, ILINEN - 1
+            MILONG(JLON + 1) = ISTRIDEN * JLON
+          ENDDO
+C
+          IERR = IGLSM01(IIUNIT, ILINEN, MILONG, MILATG(ILATN),
+     X         MEXPAND, KIREC, MILSM(1, JP_I_N))
+C
+          IF( IERR.GT.0 ) THEN
+            IRLSMB = IERR
+            GOTO 900
+          ENDIF
+C
+          DO JLON = 0, ILINES - 1
+            MILONG(JLON + 1) = ISTRIDES * JLON
+          ENDDO
+C
+          IERR = IGLSM01(IIUNIT, ILINES, MILONG, MILATG(ILATS),
+     X         MEXPAND, KIREC, MILSM(1, JP_I_S))
+C
+        ENDIF
+C
+        IF( IERR.GT.0 ) THEN
+          IRLSMB = IERR
+          GOTO 900
+        ENDIF
+C
+C       Now modify the unormalised weight for land-sea mask
+C
+        IERR = IGLSMR(MILSM(1, JP_I_N), MILSM(1, JP_I_S),
+     X      MOLSM, MWEIND(1, INDEXN), MWEIND(1, INDEXS), NOWE,
+     X      WFACT(1,(JOLAT - 1) * NOWE + 1), IPR, KERR)
+C
+        IF( IERR.GT.0 ) THEN
+          IRLSMB = IERR
+          GOTO 900
+        ENDIF
+C
+        IPR = KPR - 1
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( KPR.GE.1 ) CALL INTLOG(JP_DEBUG,'IRLSMB: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irprec.F b/interpolation/irprec.F
new file mode 100755
index 0000000..208f9d0
--- /dev/null
+++ b/interpolation/irprec.F
@@ -0,0 +1,301 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRPREC (PIFELD, KSTART, KINS, POFELD, KOWE,
+     1   KONS, KWEIND, KNSIND, PWFACT, PMAX, PINPNT, KPR, KERR)
+C
+C---->
+C**** *IRPREC*
+C
+C     PURPOSE
+C     _______
+C
+C     Perform additional interpolation processes for precipitation
+C     fields when the input field is quasi regular.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRPREC (PIFELD, KSTART, KINS, POFELD, KOWE, KONS,
+C    1   KWEIND, KNSIND, PWFACT, PMAX, PINPNT, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PIFELD     - The input field provided by the calling routine.
+C
+C     KSTART     - The array offset for each line of latitude within
+C                  the quasi regular field.
+C
+C     KINS       - The number of points in the North-South direction
+C                  in the input field.
+C
+C     POFELD     - The output field as previously calculated.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KWEIND     - This array contains the array offsets of the West
+C                  and East points in the input array required for
+C                  interpolation.
+C
+C     KNSIND     - This array contains the array offsets of the North
+C                  and South points in the input array required for
+C                  interpolation.
+C
+C     PWFACT     - The array of interpolating weights to the four
+C                  neighbouring points for every output point.
+C
+C     PMAX       - Work array used to aid vectorisation.
+C
+C     PINPNT     - Work array used to aid vectorisation.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     POFELD     - The output field as modified to allow for
+C                  precipitation.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C     CHKPREC - Check if precipitation threshold has been redefined
+C
+C     METHOD
+C     ______
+C
+C     The precipitation at a point is set to zero in the following
+C     circumstances.
+C
+C     1  The interpolated precipitation is less than a threshold value.
+C
+C     2  There is no precipitation at the neighbouring point with the
+C        highest interpolating weight.
+C
+C     NOTE that this operation is performed before the special
+C     routines for the poles when interpolating from quasi regular
+C     Gaussian grids to global latitude/longitude fields. The polar
+C     values for precipitation, during such interpolations, will
+C     always be the average value of the nearest Gaussian line with
+C     no threshold check.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Dummy arguments
+      INTEGER KOWE, KINS, KONS, KPR, KERR
+      INTEGER KSTART (KINS)
+      INTEGER KWEIND (2, KOWE, 2, KONS), KNSIND (2, KONS)
+      REAL PIFELD (*), POFELD (KOWE, KONS)
+      REAL PWFACT (4, KOWE, KONS)
+      REAL PMAX (KOWE), PINPNT (KOWE)
+C
+C     Local variables
+      LOGICAL LAT_RAIN
+      INTEGER ILAT, IDIR, ISTART
+      INTEGER JOLAT, JOLON, JNS, JWE
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23500)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRPREC: Section 1.',JPQUIET)
+C
+      IRPREC = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRPREC: No. of input fld lats = ',KINS)
+        CALL INTLOG(JP_DEBUG,'IRPREC: No. of output fld lats = ',KONS)
+        CALL INTLOG(JP_DEBUG,'IRPREC: No. of output fld longs = ',KOWE)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. eliminate output precipitation based on
+C                interpolation threshhold
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRPREC: Section 2.',JPQUIET)
+C
+      CALL CHKPREC()
+C
+      DO 360 JOLAT = 1, KONS
+C
+         LAT_RAIN = .FALSE.
+C
+         DO 210 JOLON = 1, KOWE
+C
+            IF (POFELD (JOLON, JOLAT) .LT. ZPRECIP) THEN
+               POFELD (JOLON, JOLAT) = PPZERO
+            ELSE
+               LAT_RAIN = .TRUE.
+            ENDIF
+C
+  210    CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 3. eliminate output precipitation based on
+C                "nearest" point.
+C
+C                Do not bother if there is no precipitation on this
+C                line of latitude
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR .GE. 1 .AND. JOLAT .EQ. 1) 
+     X  CALL INTLOG(JP_DEBUG,'IRPREC: Section 3.',JPQUIET)
+C
+C
+         IF (LAT_RAIN) THEN
+C
+            DO 310 JOLON = 1, KOWE
+C
+               PMAX (JOLON) = PPZERO
+C
+  310       CONTINUE
+C
+            DO 340 JNS = 1, 2
+C
+               ILAT = KNSIND (JNS, JOLAT)
+               ISTART = KSTART (ILAT) - 1
+C
+               DO 330 JWE = 1, 2
+C
+                  IDIR = (JNS - 1) * 2 + JWE
+C
+                  DO 320 JOLON = 1, KOWE
+C
+                     IF (PWFACT (IDIR, JOLON, JOLAT) .GT.
+     1                  PMAX (JOLON) ) THEN
+C
+                        PMAX (JOLON) = PWFACT (IDIR, JOLON, JOLAT)
+C
+                        PINPNT (JOLON) = PIFELD (ISTART +
+     2                     KWEIND (JWE, JOLON, JNS, JOLAT) )
+C
+                     ENDIF
+C
+  320             CONTINUE
+C
+  330          CONTINUE
+C
+  340       CONTINUE
+C
+            DO 350 JOLON = 1, KOWE
+C
+               IF (PINPNT (JOLON) .LT. ZPRECIP)
+     1            POFELD (JOLON, JOLAT) = PPZERO
+C
+  350       CONTINUE
+C
+         ENDIF
+C
+  360 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRPREC: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irscan.F b/interpolation/irscan.F
new file mode 100755
index 0000000..de4ed0b
--- /dev/null
+++ b/interpolation/irscan.F
@@ -0,0 +1,306 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRSCAN (PMAT, KLEN, KLLEN, KNNS, KSCAN, KPR,
+     1   KERR)
+C
+C---->
+C**** *IRSCAN*
+C
+C     PURPOSE
+C     _______
+C
+C     This routine transforms a field between the specified external
+C     scanning mode and a standard internal scanning mode where the
+C     array represents a quasi regular field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRSCAN (PMAT, KLEN, KLLEN, KNNS, KSCAN, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     PMAT       - The input matrix of length (KLEN).
+C
+C     KLEN       - The number of points in the matrix.
+C
+C     KLLEN      - This array contains the quasi regular Gaussian
+C                  line length definitions.
+C
+C     KNNS       - The number of points in the North-South direction.
+C
+C     KSCAN      - A standard GRIB byte variable with bits 1 to 3
+C                  separately significant. This means that the final
+C                  value is the sum of the bit settings.
+C
+C                  128 , Set if points scan East to West.
+C                   64 , Set if points scan South to North.
+C                   32 , Set if points in the North South direction
+C                        are consecutive.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     PMAT       - The transposed matrix.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     7201  The scanning mode was not in the range 0 to 255.
+C     7202  A scanning mode with consecutive values in the North
+C           South direction was requested. This is not compatible
+C           with a quasi regular Gaussian field.
+C     7203  The total number of points given by the array KLLEN was
+C           not equal to KLEN.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     IRLREV     - Routine to reverse the elements within each row
+C                  or each column of a quasi regular Gaussian field.
+C     INTLOG     - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C     KSCAN = 128 is implemented by swapping elements within each
+C                 column of the matrix.
+C
+C     KSCAN = 64  is implemented by reversing the order of the columns.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+C
+      INTEGER KLEN, KNNS, KSCAN, KPR, KERR
+C
+      INTEGER KLLEN (KNNS)
+C
+      REAL PMAT (KLEN)
+C
+C     Local variables
+C
+      LOGICAL GNSMOD, GWEMOD, GTRMOD
+C
+      INTEGER ISCAN, IDIR, ITOTAL, IERR
+C
+      INTEGER JSTEP
+C
+      INTEGER JPROUTINE
+C
+      PARAMETER (JPROUTINE = 7200)
+C
+C     External functions
+C
+      INTEGER IRLREV
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialisation - Evaluate scan modes
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IRSCAN: Section 1.',JPQUIET)
+C
+      IRSCAN = 0
+C
+      IF (KPR .GE. 1) THEN
+         CALL INTLOG(JP_DEBUG,'IRSCAN: Input parameters',JPQUIET)
+         CALL INTLOG(JP_DEBUG,'IRSCAN: Total length of matrix is ',KLEN)
+         CALL INTLOG(JP_DEBUG,'IRSCAN: Latitude lines are ',KNNS)
+         CALL INTLOG(JP_DEBUG,'IRSCAN: Scan mode is ',KSCAN)
+      ENDIF
+C
+      IF (KSCAN .LT. 0 .OR. KSCAN .GE. 256) THEN
+         IRSCAN = JPROUTINE + 1
+         IF (KERR .GE. 0) CALL INTLOG(JP_ERROR,
+     X     'IRSCAN: Scan mode is not in range 0 to 255 = ',KSCAN)
+         IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X    'IRSCAN: Interpolation fails.',IRSCAN)
+         GO TO 900
+      ENDIF
+C
+C     Zero KSCAN means no transformation
+C
+      IF (KSCAN .EQ. 0) GO TO 900
+C
+      ISCAN = KSCAN
+      GWEMOD = .FALSE.
+      GNSMOD = .FALSE.
+C
+      IF (ISCAN .GE. 128) THEN
+         ISCAN = ISCAN - 128
+         GWEMOD = .TRUE.
+      ENDIF
+C
+      IF (ISCAN .GE. 64) THEN
+         ISCAN = ISCAN - 64
+         GNSMOD = .TRUE.
+      ENDIF
+C
+      GTRMOD = ISCAN .GE. 32
+C
+      IF (GTRMOD) THEN
+        IRSCAN = JPROUTINE + 2
+        IF (KERR .GE. 0) THEN
+         CALL INTLOG(JP_ERROR,
+     X     'IRSCAN: scan mode wants consecutive N to S points',JPQUIET)
+           CALL INTLOG(JP_ERROR,
+     X      'IRSCAN: Not feasible for a quasi regular grid',JPQUIET)
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IRSCAN: Interpolation fails.',IRSCAN)
+        ENDIF
+        GO TO 900
+      ENDIF
+C
+      ITOTAL = 0
+C
+      DO 110 JSTEP = 1, KNNS
+        ITOTAL = ITOTAL + KLLEN (JSTEP)
+  110 CONTINUE
+C
+      IF (ITOTAL .NE. KLEN) THEN
+        IRSCAN = JPROUTINE + 3
+        IF (KERR .GE. 0) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'IRSCAN: Array length provided = ',KLEN)
+            CALL INTLOG(JP_ERROR,
+     X       'IRSCAN: not equal to sum of line lengths = ',ITOTAL)
+           IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X       'IRSCAN: Interpolation fails.',IRSCAN)
+         ENDIF
+         GO TO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Any field as order is unimportant
+C
+C                Potential operations in order are
+C
+C                1 Modify West East mode
+C                2 Modify North South mode
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IRSCAN: Section 2.',JPQUIET)
+C
+      IF (GWEMOD) THEN
+C
+         IDIR = 1
+C
+         IERR = IRLREV (PMAT, KLEN, KLLEN, KNNS, IDIR, KPR)
+C
+         IF (IERR .GT. 0) THEN
+            IRSCAN = IERR
+            GO TO 900
+         ENDIF
+C
+      ENDIF
+C
+      IF (GNSMOD) THEN
+C
+         IDIR = 2
+C
+         IERR = IRLREV (PMAT, KLEN, KLLEN, KNNS, IDIR, KPR)
+C
+         IF (IERR .GT. 0) THEN
+            IRSCAN = IERR
+            GO TO 900
+         ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR .GE. 1) CALL INTLOG(JP_DEBUG,'IRSCAN: Section 9.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/irsize.F b/interpolation/irsize.F
new file mode 100755
index 0000000..79867dd
--- /dev/null
+++ b/interpolation/irsize.F
@@ -0,0 +1,396 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION IRSIZE (KGTRUNC, KAREA, KLLEN, KNWE, KNNS, KLN,
+     1   KTOTAL, PGAUSS, OWEGLOBE, ONPOLE, OSPOLE, KPR, KERR)
+C
+C---->
+C**** *IRSIZE*
+C
+C     PURPOSE
+C     _______
+C
+C     Evaluate the array sizes for a quasi regular Gaussian field.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = IRSIZE (KGTRUNC, KAREA, KLLEN, KNWE, KNNS, KLN,
+C    1   KTOTAL, PGAUSS, OWEGLOBE, ONPOLE, OSPOLE, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     KGTRUNC    - The Gaussian truncation.
+C
+C     KAREA      - The field area definition (N, W, S, E) provided by
+C                  the calling routine.
+C
+C     KLLEN      - This array contains the quasi regular Gaussian
+C                  line length definition.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     KNWE       - The maximum number of points in the West-East
+C                  direction for this quasi regular Gaussian grid.
+C
+C     KNNS       - The number of points in the North-South direction
+C                  in the field.
+C
+C     KLN        - The Northern Gaussian latitude number for this
+C                  area.
+C
+C     KTOTAL     - The total field length for this quasi regular
+C                  Gaussian grid and area.
+C
+C     PGAUSS     - The full list of Gaussian latitudes for this
+C                  truncation.
+C
+C     OWEGLOBE   - This variable will be true if the array of
+C                  longitudes spans the globe.
+C
+C     ONPOLE     - This variable will be true if the North polar line
+C                  of latitude is included in the grid.
+C
+C     OSPOLE     - This variable will be true if the South polar line
+C                  of latitude is included in the grid.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     23801 A non-global area was requested and this option is not
+C           supported yet.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     IGGLAT     - Compute Gaussian lines of latitude for a given
+C                  truncation.
+C     INTLOG(R)  - Logs messages.
+C
+C     METHOD
+C     ______
+C
+C
+C     A global definition is generated for the quasi regular field
+C     and all three flag variable are set TRUE.
+C
+C     A REAL array of the full set of Gaussian latitudes is generated
+C     for the Gaussian truncation requested.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 4 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Dummy arguments
+      LOGICAL OWEGLOBE, ONPOLE, OSPOLE
+      INTEGER KGTRUNC, KNWE, KNNS, KLN, KTOTAL, KPR, KERR
+      INTEGER KAREA (4), KLLEN (*)
+      REAL PGAUSS (*)
+C
+C     Local variables
+      LOGICAL GZERO
+      INTEGER IGAUSS, ILATNUM, ILS, INDIST, ISDIST, IERR
+      INTEGER JLAT
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23800)
+C
+C     Function externals
+C
+      INTEGER IGGLAT
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRSIZE: Section 1.',JPQUIET)
+C
+      IRSIZE = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Input parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X     'IRSIZE: Gaussian truncation = ',KGTRUNC)
+        IF (KNNS .NE. 0) CALL INTLOG(JP_DEBUG,
+     X    'IRSIZE: No.lat. pts = ',KNNS)
+C
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Area North = ', KAREA(1))
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Area West  = ', KAREA(2))
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Area South = ', KAREA(3))
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Area East  = ', KAREA(4))
+      ENDIF
+C
+      GZERO = .FALSE.
+C
+      ILATNUM = KGTRUNC * 2
+C
+C     _______________________________________________________
+C
+C*    Section 2. If all elements of KAREA are zero generate
+C                a global field
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRSIZE: Section 2.',JPQUIET)
+C
+Cxxx  IF (KAREA (JPEAST) .NE. 0 .OR. KAREA (JPWEST) .NE. 0) THEN
+C
+Cxxx     IRSIZE = JPROUTINE + 1
+Cxxx     IF (KERR .GE. 0) WRITE (*, 9001) IRSIZE,
+Cxxx 1      REAL (KAREA (JPNORTH) ) / PPMULT,
+Cxxx 2      REAL (KAREA (JPWEST) ) / PPMULT,
+Cxxx 3      REAL (KAREA (JPSOUTH) ) / PPMULT,
+Cxxx 4      REAL (KAREA (JPEAST) ) / PPMULT
+Cxxx     IF (KERR .EQ. 0) CALL ABORTX ('IRSIZE')
+Cxxx     GO TO 900
+Cxxx  ENDIF
+C
+      OWEGLOBE = .TRUE.
+C
+C     _______________________________________________________
+C
+C*    Section 3. Generate points along a line of meridian
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRSIZE: Section 3.',JPQUIET)
+C
+C     Generate full Gaussian latitudes for this truncation
+C
+      IERR = IGGLAT (ILATNUM, PGAUSS, KPR, KERR)
+C
+      IF (IERR .GT. 0) THEN
+         IRSIZE = IERR
+         GO TO 900
+      ENDIF
+C
+C     Find Gaussian lines corresponding to North and South points
+C     provided
+C
+      KLN = 1
+      ILS = ILATNUM
+C
+      IF (KNNS .EQ. 0) THEN
+C
+C       Number of lines not set (output field)
+C
+        KLN = 0
+        ILS = ILATNUM
+C
+        DO 310 JLAT = 2, ILATNUM
+C
+          IGAUSS = NINT (PGAUSS (JLAT) * PPMULT)
+C
+          IF (KLN .EQ. 0 .AND. KAREA (JPNORTH) .GT. IGAUSS) THEN
+            KLN = JLAT - 1
+            KAREA (JPNORTH) = NINT (PGAUSS (KLN) * PPMULT)
+          ENDIF
+C
+          IF (ILS.EQ.ILATNUM .AND. KAREA(JPSOUTH).GE.IGAUSS) THEN
+            ILS = JLAT
+            KAREA (JPSOUTH) = NINT (PGAUSS (ILS) * PPMULT)
+          ENDIF
+C
+  310   CONTINUE
+C
+        KNNS = ILS - KLN + 1
+C
+      ELSE
+C
+C       Number of lines set (input field)
+C
+        JLAT = 1
+        KLN = JLAT
+        ILS = JLAT
+C
+        INDIST = ABS (NINT (PGAUSS (JLAT) * PPMULT) - KAREA (JPNORTH) )
+        ISDIST = ABS (NINT (PGAUSS (JLAT) * PPMULT) - KAREA (JPSOUTH) )
+C
+        DO 320 JLAT = 2, ILATNUM
+C
+          IF (ABS (NINT (PGAUSS (JLAT) * PPMULT) - KAREA (JPNORTH) )
+     1         .LT. INDIST) THEN
+C
+             KLN = JLAT
+             INDIST = ABS(NINT(PGAUSS (JLAT) * PPMULT) - KAREA(JPNORTH))
+C
+          ENDIF
+C
+          IF (ABS (NINT (PGAUSS (JLAT) * PPMULT) - KAREA (JPSOUTH) )
+     1         .LT. ISDIST) THEN
+C
+            ILS = JLAT
+            ISDIST = ABS(NINT(PGAUSS(JLAT) * PPMULT) - KAREA(JPSOUTH))
+C
+          ENDIF
+C
+  320   CONTINUE
+C
+        IF (KNNS .NE. ILS - KLN + 1) THEN
+          IRSIZE = JPROUTINE + 2
+          IF (KERR .GE. 0) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'IRSIZE: No. lines specified = ',KNNS)
+            CALL INTLOG(JP_ERROR,
+     X        'IRSIZE: Gaussian N limit = ',KLN)
+            CALL INTLOG(JP_ERROR,
+     X        'IRSIZE: Gaussian S limit = ',ILS)
+          ENDIF
+C
+          IF (KERR .EQ. 0) CALL INTLOG(JP_FATAL,
+     X      'IGLSIZE: Interpolation failed.',IRSIZE)
+          GO TO 900
+        ENDIF
+C
+      ENDIF
+C
+      ONPOLE = KLN .EQ. 1
+      OSPOLE = ILS .EQ. ILATNUM
+C
+      KNNS = ILS - KLN + 1
+C
+      KAREA (JPNORTH) = NINT (PGAUSS (KLN) * PPMULT)
+      KAREA (JPSOUTH) = NINT (PGAUSS (ILS) * PPMULT)
+C
+C     _______________________________________________________
+C
+C*    Section 4. Use line lengths to set maximum length and total
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRSIZE: Section 4.',JPQUIET)
+C
+      KNWE = KLLEN (KGTRUNC)
+C
+      KTOTAL = 0
+C
+      DO 410 JLAT = KLN, ILS
+C
+        KTOTAL = KTOTAL + KLLEN (JLAT)
+C
+  410 CONTINUE
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Output parameters.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Max W-E line len = ',KNWE)
+        CALL INTLOG(JP_DEBUG,'IRSIZE: No lat lines = ',KNNS)
+        CALL INTLOG(JP_DEBUG,'IRSIZE: Total no.pts = ',KTOTAL)
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Northern line no. =',KLN)
+        CALL INTLOG(JP_DEBUG,'IGLSIZE: Southern line no. =',ILS)
+C
+        IF( OWEGLOBE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: W-E fld is global',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: W-E fld is NOT global',JPQUIET)
+        ENDIF
+C
+        IF( ONPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: N pole is in fld.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: N pole is NOT in fld.',JPQUIET)
+        ENDIF
+C
+        IF( OSPOLE ) THEN
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: S pole is in fld.',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,'IGLSIZE: S pole is NOT in fld.',JPQUIET)
+        ENDIF
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRSIZE: Section 9.',JPQUIET)
+C
+C9001 FORMAT (' IRSIZE ERROR', I6, ' - One of the area limits is ',
+C    1   'non-zero.' / 22X, 'They are', 4F10.4)
+C
+      RETURN
+      END
diff --git a/interpolation/iscrsz.F b/interpolation/iscrsz.F
new file mode 100755
index 0000000..6496092
--- /dev/null
+++ b/interpolation/iscrsz.F
@@ -0,0 +1,200 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ISCRSZ()
+C---->
+C**** ISCRSZ
+C
+C     Purpose
+C     -------
+C
+C     Calculate size of scratch space required for output field of
+C     interpolation.
+C     
+C
+C     Interface
+C     ---------
+C
+C     ISIZE = ISCRSZ()
+C
+C
+C     Input
+C     -----
+C
+C     Values in common blocks "nofld.common".
+C
+C
+C     Output
+C     ------
+C
+C     Size as number of values (words).
+C     Returns 0 if output type not recognised.
+C
+C
+C     Method
+C     ------
+C
+C     Depends on output grid type.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message
+C     JNORSGG - Calculate gaussian latitude
+C     NUMPTWE - Calculate number of grid pts in range from west to east
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Feb 1995
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Local variables
+C
+      INTEGER LOOP
+      REAL PNORTH, PWEST, PSOUTH, PEAST, GRID, TEMP
+C
+C     Externals
+C
+      EXTERNAL JNORSGG, NUMPTWE
+      INTEGER JNORSGG, NUMPTWE
+C
+C     Statement functions
+C
+      REAL X, Y
+      LOGICAL SOUTHOF
+      SOUTHOF(X,Y) = ((X) - (Y)).GT.-1E-4
+C
+C     -----------------------------------------------------------------|
+C     Section 1.  Initialise.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      ISCRSZ = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Spherical harmonic field
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPSPHERE).OR.
+     X    (NOREPR.EQ.JPSTRSH).OR.
+     X    (NOREPR.EQ.JPSPHROT) ) THEN
+cs        ISCRSZ = (NORESO+1) * (NORESO+4)
+        ISCRSZ = (NORESO+1) * (NORESO+2)
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: spherical harmonic',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Regular lat/long field
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( (NOREPR.EQ.JPREGULAR).OR.(NOREPR.EQ.JPREGROT) ) THEN
+C
+        TEMP = ABS(FLOAT(NOAREA(1)) - FLOAT(NOAREA(3)))
+        NONS  = NINT( TEMP / FLOAT(NOGRID(2)) ) + 1
+        TEMP = FLOAT(NOAREA(4)) - FLOAT(NOAREA(2))
+        NOWE  =  NINT( TEMP / FLOAT(NOGRID(1)) ) + 1
+C
+        ISCRSZ = NONS * NOWE
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: number of latitudes = ', NONS)
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: number of longitudes = ', NOWE)
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: Regular lat/long',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Regular gaussian field
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPFGGROT) ) THEN
+C
+        PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+        PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+        NO1NS = JNORSGG( PNORTH, ROGAUSS, NOGAUSS, 1)
+        NONS  = JNORSGG( PSOUTH, ROGAUSS, NOGAUSS, 1) - NO1NS + 1
+        TEMP = FLOAT(NOAREA(4)) - FLOAT(NOAREA(2))
+        TEMP = (TEMP * FLOAT(NOGAUSS) ) / FLOAT(JP90)
+        NOWE  = NINT(TEMP) + 1
+CS added for grib2
+        IF(NONS.EQ.NOGAUSS*2.AND.NOAREA(2).EQ.0) THEN
+           LGLOBL = .TRUE.
+        ENDIF
+C
+        ISCRSZ = NONS * NOWE
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: number of latitudes = ', NONS)
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: number of longitudes = ', NOWE)
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: regular gaussian',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Reduced (quasi-regular) gaussian field
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI).OR.(NOREPR.EQ.JPQGGROT) ) THEN
+C
+        PNORTH = FLOAT( NOAREA(1) ) / PPMULT
+        PWEST  = FLOAT( NOAREA(2) ) / PPMULT
+        PSOUTH = FLOAT( NOAREA(3) ) / PPMULT
+        PEAST  = FLOAT( NOAREA(4) ) / PPMULT
+        NO1NS = JNORSGG( PNORTH, ROGAUSS, NOGAUSS, 1)
+        NONS  = JNORSGG( PSOUTH, ROGAUSS, NOGAUSS, 1) - NO1NS + 1
+CS added for grib2
+        IF(NONS.EQ.NOGAUSS*2.AND.NOAREA(2).EQ.0) THEN
+           LGLOBL = .TRUE.
+        ENDIF
+        NOWE  = 0
+C
+        NOPCNT = 0
+        DO LOOP = 1, NOGAUSS*2
+          IF( SOUTHOF(PNORTH,ROGAUSS(LOOP)).AND.
+     X        SOUTHOF(ROGAUSS(LOOP),PSOUTH) ) THEN
+            GRID = 360.0 / REAL(NOLPTS(LOOP))
+            NOPCNT = NOPCNT + NUMPTWE(PWEST,PEAST,GRID)
+          ENDIF
+        ENDDO
+C
+        ISCRSZ = NOPCNT
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: number of latitudes = ', NONS)
+        CALL INTLOG(JP_DEBUG,'ISCRSZ: quasi-regular gaussian',JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'ISCRSZ: number of points in output field = ',ISCRSZ)
+C
+      RETURN
+      END
diff --git a/interpolation/islproc.F b/interpolation/islproc.F
new file mode 100755
index 0000000..0b79f89
--- /dev/null
+++ b/interpolation/islproc.F
@@ -0,0 +1,290 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      REAL FUNCTION ISLPROC(RLAT,RLON,NEWTYPE,OLAT,OLON,TYPE,PT,OLDFLD)
+C
+C---->
+C**** ISLPROC
+C
+C     Purpose
+C     -------
+C
+C     Generates a new field point from its four nearest neighbours
+C     taking account of matching land-sea mask types.
+C
+C
+C     Interface
+C     ---------
+C
+C     VALUE = ISLPROC(RLAT,RLON,NEWTYPE,OLAT,OLON,TYPE,PT,OLDFLD)
+C
+C     Input
+C     -----
+C
+C     RLAT    - Latitude of the new point
+C     RLON    - Longitude of the new point
+C     NEWTYPE - Land-sea mask type of the new point (land/sea)
+C     OLAT    - Latitudes of the four neighbouring points
+C     OLON    - Longitudes of the four neighbouring points
+C     TYPE    - Land-sea mask types of the four neighbouring points
+C     PT      - Positions in old field array of the four neighbours
+C     OLDFLD  - Array of old field values
+C
+C
+C     Output
+C     ------
+C
+C     Function returns a value for the new field point.
+C
+C
+C     Method
+C     ------
+C
+C     Find which neighbours have same land-sea mask type and use
+C     them to calculate a new value by bi-linear interpolation.
+C
+C     Use all four neighbours if none of them have the same
+C     land-sea mask type as the new point.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     August 2000
+C
+C     Modifications
+C     -------------
+C
+C     Force nearest neighbour processing with env variable or
+C     INTOUT parameter
+C     S.Curic           ECMWF    September 2005
+C
+
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      REAL RLAT,RLON,OLAT(2),OLON(4),OLDFLD(*)
+      INTEGER NEWTYPE,TYPE(4),PT(4)
+C
+#include "intisl.h"
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Local variables
+C
+      LOGICAL LVEGGY
+      CHARACTER*12 YFLAG
+      INTEGER MCOUNT, COUNT, LOOP, NEAREST
+      REAL WEIGHT(4), MATCH(4), NWEIGHT, SWEIGHT, NORMAL
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Find which neighbours have same land-sea mask type
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      COUNT  = 0
+      DO LOOP = 1, 4
+        IF( TYPE(LOOP).EQ.NEWTYPE ) THEN
+          COUNT = COUNT + 1
+          MATCH(LOOP) = 1.0
+        ELSE
+          MATCH(LOOP) = 0.0
+        ENDIF
+      ENDDO
+C
+      IF( COUNT.EQ.0 ) THEN
+C
+C       Use all four neighbours if none of them have the same
+C       land-sea mask type as the new point
+C
+        COUNT = 4
+        DO LOOP = 1, 4
+          MATCH(LOOP) = 1.0
+        ENDDO
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Handle case when missing values are present
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Identify matching neighbours with missing values
+C
+      IF( LIMISSV ) THEN
+        MCOUNT = 0
+        DO LOOP = 1, 4
+          IF((MATCH(LOOP).EQ.1.0).AND.(OLDFLD(PT(LOOP)).EQ.RMISSGV))THEN
+            MCOUNT = MCOUNT + 1
+            MATCH(LOOP) = 0.0
+            COUNT = COUNT - 1
+          ENDIF
+        ENDDO
+C
+C       Set new value to 'missing' if all neighbours are missing
+C
+        IF( (MCOUNT.EQ.4).OR.(COUNT.EQ.0) ) THEN
+          ISLPROC = RMISSGV
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Use neighbours that match to calculate the new value
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Calculate the north/south weighting values allowing for
+C     southern latitude to be same as northern latitude
+C
+      NWEIGHT = OLAT(NORTH) - RLAT
+      SWEIGHT = RLAT - OLAT(SOUTH)
+      IF( SWEIGHT.EQ.0.0 ) NWEIGHT = 1.0
+C
+C     Calculate the weighting values for each matching neighbour
+C
+      WEIGHT(NWEST) = ABS((OLON(SEAST) - RLON) * SWEIGHT)
+      WEIGHT(NEAST) = ABS((RLON - OLON(SWEST)) * SWEIGHT)
+      WEIGHT(SWEST) = ABS((OLON(NEAST) - RLON) * NWEIGHT)
+      WEIGHT(SEAST) = ABS((RLON - OLON(NWEST)) * NWEIGHT)
+C
+C     Normalise the weights since not all neighbours necessarily used
+C
+      NORMAL = ( WEIGHT(NWEST) * MATCH(NWEST) +
+     X           WEIGHT(NEAST) * MATCH(NEAST) +
+     X           WEIGHT(SWEST) * MATCH(SWEST) +
+     X           WEIGHT(SEAST) * MATCH(SEAST) )
+C
+C     Special cases when matching points have no weight
+C
+      IF( NORMAL.EQ.0.0 )  THEN
+C
+C       Only one matching neighbour: set its weight so that is used
+C
+        IF( COUNT.EQ.1 ) THEN
+          NORMAL = 1.0
+          IF( MATCH(NWEST).EQ.1.0 ) WEIGHT(NWEST) = 1.0
+          IF( MATCH(NEAST).EQ.1.0 ) WEIGHT(NEAST) = 1.0
+          IF( MATCH(SWEST).EQ.1.0 ) WEIGHT(SWEST) = 1.0
+          IF( MATCH(SEAST).EQ.1.0 ) WEIGHT(SEAST) = 1.0
+C
+C       Two matching neighbours: set their weights to those of the
+C       neighbours on the opposite side of the interpolation rectangle
+C
+        ELSEIF( COUNT.EQ.2 ) THEN
+          IF( (MATCH(NWEST).EQ.1.0).AND.(MATCH(NEAST).EQ.1.0) ) THEN
+            WEIGHT(NWEST) = WEIGHT(SWEST)
+            WEIGHT(NEAST) = WEIGHT(SWEST)
+            NORMAL = WEIGHT(NWEST) + WEIGHT(NEAST)
+          ELSEIF( (MATCH(NWEST).EQ.1.0).AND.(MATCH(SWEST).EQ.1.0) ) THEN
+            WEIGHT(NWEST) = WEIGHT(NEAST)
+            WEIGHT(SWEST) = WEIGHT(SEAST)
+            NORMAL = WEIGHT(NWEST) + WEIGHT(SWEST)
+          ELSEIF( (MATCH(NEAST).EQ.1.0).AND.(MATCH(SEAST).EQ.1.0) ) THEN
+            WEIGHT(NEAST) = WEIGHT(NWEST)
+            WEIGHT(SEAST) = WEIGHT(SWEST)
+            NORMAL = WEIGHT(NEAST) + WEIGHT(SEAST)
+          ELSEIF( (MATCH(SWEST).EQ.1.0).AND.(MATCH(SEAST).EQ.1.0) ) THEN
+            WEIGHT(SWEST) = WEIGHT(NWEST)
+            WEIGHT(SEAST) = WEIGHT(NEAST)
+            NORMAL = WEIGHT(SWEST) + WEIGHT(SEAST)
+          ELSEIF( (MATCH(NWEST).EQ.1.0).AND.(MATCH(SEAST).EQ.1.0) ) THEN
+            WEIGHT(NWEST) = WEIGHT(NEAST)
+            WEIGHT(SEAST) = WEIGHT(SWEST)
+            NORMAL = WEIGHT(NWEST) + WEIGHT(SEAST)
+          ELSE
+            WEIGHT(NEAST) = WEIGHT(SEAST)
+            WEIGHT(SWEST) = WEIGHT(NWEST)
+            NORMAL = WEIGHT(NEAST) + WEIGHT(SWEST)
+          ENDIF
+C
+C       Three matching neighbours with no weight, ie the interpolation
+C       point is coincident with a grid point, but the land-sea masks
+C       disagree about its type. Use it anyway.
+C
+        ELSE
+          IF( MATCH(NWEST).EQ.0.0 ) THEN
+            MATCH(NWEST) = 1.0
+            NORMAL = WEIGHT(NWEST)
+          ELSE IF( MATCH(NEAST).EQ.0.0 ) THEN
+            MATCH(NEAST) = 1.0
+            NORMAL = WEIGHT(NEAST)
+          ELSE IF( MATCH(SWEST).EQ.0.0 ) THEN
+            MATCH(SWEST) = 1.0
+            NORMAL = WEIGHT(SWEST)
+          ELSE
+            MATCH(SEAST) = 1.0
+            NORMAL = WEIGHT(SEAST)
+          ENDIF
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Interpolate
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      WEIGHT(NWEST) = WEIGHT(NWEST)/NORMAL
+      WEIGHT(NEAST) = WEIGHT(NEAST)/NORMAL
+      WEIGHT(SWEST) = WEIGHT(SWEST)/NORMAL
+      WEIGHT(SEAST) = WEIGHT(SEAST)/NORMAL
+C
+C     Use nearest neighbour for vegetation field
+C
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) ) 
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+        IF( LMETHOD ) LVEGGY = .TRUE.
+
+C
+      IF( LVEGGY ) THEN
+        NEAREST = NWEST
+        IF( WEIGHT(NEAST).GT.WEIGHT(NEAREST) ) NEAREST = NEAST
+        IF( WEIGHT(SWEST).GT.WEIGHT(NEAREST) ) NEAREST = SWEST
+        IF( WEIGHT(SEAST).GT.WEIGHT(NEAREST) ) NEAREST = SEAST
+        ISLPROC = OLDFLD(PT(NEAREST))
+C
+      ELSE
+C
+        ISLPROC = ( (OLDFLD(PT(NWEST)) * WEIGHT(NWEST) * MATCH(NWEST)) +
+     X              (OLDFLD(PT(NEAST)) * WEIGHT(NEAST) * MATCH(NEAST)) +
+     X              (OLDFLD(PT(SWEST)) * WEIGHT(SWEST) * MATCH(SWEST)) +
+     X              (OLDFLD(PT(SEAST)) * WEIGHT(SEAST) * MATCH(SEAST)) )
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/issame.F b/interpolation/issame.F
new file mode 100755
index 0000000..f5b91e2
--- /dev/null
+++ b/interpolation/issame.F
@@ -0,0 +1,261 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION ISSAME()
+C
+C---->
+C**** ISSAME
+C
+C     Purpose
+C     -------
+C
+C     Check if output field will be the same as the input field.
+C
+C
+C     Interface
+C     ---------
+C
+C     LSAME = ISSAME()
+C
+C     Input
+C     -----
+C
+C     Values in common block.
+C
+C
+C     Output
+C     ------
+C
+C     Returns .TRUE. if the fields will be the same.
+C
+C
+C     Method
+C     ------
+C
+C     Checks interpolation request flags in common blocks.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C      
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Local variables
+C
+      INTEGER LOOP, IDIFF
+      LOGICAL LDEFIN, LDEFOUT, LSUBAREA
+      CHARACTER*12 YFLAG
+C
+C     -----------------------------------------------------------------|
+C
+      ISSAME = .TRUE.
+C
+C     Exit if no postprocessing specified.
+C
+      IF( .NOT.LINTOUT ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: No postprocessing specified.',JPQUIET)
+        RETURN
+      ENDIF
+
+C
+C     Set logicals true if default input/output areas specified.
+C
+      LDEFIN  = ( (NIAREA(1).EQ.0) .AND. (NIAREA(2).EQ.0) .AND.
+     X            (NIAREA(3).EQ.0) .AND. (NIAREA(4).EQ.0) )
+      LDEFOUT = ( (NOAREA(1).EQ.0) .AND. (NOAREA(2).EQ.0) .AND.
+     X            (NOAREA(3).EQ.0) .AND. (NOAREA(4).EQ.0) )
+C
+C     Set flag if a subarea has been requested
+C
+      LSUBAREA = (.NOT.LDEFIN .AND. .NOT.LDEFOUT) .AND.
+     X           ( (NOAREA(1).LT.NIAREA(1)).OR.
+     X             (NOAREA(2).GT.NIAREA(2)).OR.
+     X             (NOAREA(3).GT.NIAREA(3)).OR.
+     X             (NOAREA(4).LT.NIAREA(4)) )
+C
+C
+C     Check for rotation
+C
+      IF( (NOROTA(1).NE.0) .OR. (NOROTA(2).NE.0) ) ISSAME = .FALSE.
+C
+C     Check for same formats, representation and bit packing accuracy.
+C
+cs      IF( NIFORM.NE.NOFORM) ISSAME = .FALSE.
+      IF( NIREPR.NE.NOREPR) ISSAME = .FALSE.
+cs This is used just for processing with gribex
+C     Force repacking for different accuracy 
+cs      IF(LACCUR) THEN
+cs        IF( NIACC .NE. NOACC) ISSAME = .FALSE.
+cs      ENDIF
+C
+C     Exit if both input and output are same (reduced  or quasi)
+C     gaussian with the same resolution and area, since no
+C     postprocessing is required.
+C
+cs      IF( (NOREPR.EQ.JPNOTYPE) .AND. (NIGAUSS.EQ.NOGAUSS) .AND.
+cs NOREPR.EQ.NIREPR  because NOREPR is always set trough describe input field
+      IF(NOREPR.EQ.JPQUASI) THEN
+      IF( (NOREPR.EQ.NIREPR) .AND. (NIGAUSS.EQ.NOGAUSS)) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: Input and output are same Reduced Gaussian',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: with the same resolution;',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: no postprocessing required.',JPQUIET)
+        ISSAME = .TRUE.
+        RETURN
+      ENDIF
+      ENDIF
+      IF(NOREPR.EQ.JPGAUSSIAN) THEN
+      IF( (NOREPR.EQ.NIREPR) .AND. (NIGAUSS.EQ.NOGAUSS) .AND.
+     X     (.NOT.LSUBAREA)) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: Input and output are same  Regular Gaussian',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: with the same resolution and area;',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: no postprocessing required.',JPQUIET)
+        ISSAME = .TRUE.
+        RETURN
+      ENDIF
+      ENDIF
+C
+C     If input is quasi gaussian and output required to be the same (ie
+C     'gaussian' specified via CALL INTOUT('gaussian', ...) ), change
+C     output to regular gaussian unless same resolution requested.
+C
+      IF( (NOREPR.EQ.JPNOTYPE) .AND.
+     X    (NIGAUSS.NE.NOGAUSS) ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: Input is quasi gaussian and output required',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: not the same resolution;',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: change output to regular gaussian.',JPQUIET)
+        NOREPR = JPGAUSSIAN
+      ENDIF
+C
+C     If input is quasi gaussian and output required to be the same (ie
+C     'gaussian' specified via CALL INTOUT('gaussian', ...) ), change
+C     output to regular gaussian if subarea requested.
+C
+      IF( (NOREPR.EQ.JPNOTYPE) .AND. LSUBAREA ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: Input is quasi gaussian and output required',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: has a subarea;',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: change output to regular gaussian.',JPQUIET)
+        NOREPR = JPGAUSSIAN
+      ENDIF
+C
+C     Exit if both input and output are regular gaussian with
+C     the same resolution and area, since no
+C     postprocessing is required.
+C
+      IF( (NIREPR.EQ.JPGAUSSIAN) .AND.
+     X    (NOREPR.EQ.JPGAUSSIAN) .AND.
+     X    (NIGAUSS.EQ.NOGAUSS)   .AND.
+     X    (.NOT.LSUBAREA)       ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: Input and output are regular gaussian with',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: the same resolution and area;',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'ISSAME: no postprocessing is required.',JPQUIET)
+        RETURN
+      ENDIF
+C
+C     If spherical, check for same truncation.
+C
+      IF( (NIREPR.EQ.JPSPHERE) .AND.
+     X    (NOREPR.EQ.JPSPHERE) .AND.
+     X    (NIRESO.NE.NORESO)   ) ISSAME = .FALSE.
+C
+C     If lat.long, check for same grid intervals and area.
+C
+      IF( (NIREPR.EQ.JPREGULAR) .AND.
+     X    (NOREPR.EQ.JPREGULAR) .AND.
+     X    (NOGRID(1).NE.0)      ) THEN
+        IF( NIGRID(1).NE.NOGRID(1)) ISSAME = .FALSE.
+        IF( NIGRID(2).NE.NOGRID(2)) ISSAME = .FALSE.
+      ENDIF
+      IF( LSUBAREA ) ISSAME = .FALSE.
+C
+cs      IF( (NIREPR.EQ.JPREDLL) .AND.
+cs     X    (NOREPR.EQ.JPREDLL)
+cs     X    (NIGRID(2).NE.NOGRID(2)) ) ISSAME = .FALSE.
+C
+C     Check if areas are same unless defaults given.
+C
+      IF( (.NOT.LDEFIN) .AND. (.NOT.LDEFOUT) ) THEN
+        IF( (NOGRID(1).NE.0) .OR. (NOGRID(2).NE.0) ) THEN
+C
+          IF( NIAREA(1).NE.NOAREA(1)) ISSAME = .FALSE.
+C
+          IDIFF = NIAREA(2) - NOAREA(2)
+          IF( (IDIFF.NE.0) .AND. (IDIFF.NE.JP360) ) ISSAME = .FALSE.
+C
+          IF( NIAREA(3).NE.NOAREA(3) ) ISSAME = .FALSE.
+C
+          IDIFF = NIAREA(4) - NOAREA(4)
+          IF( (IDIFF.NE.0) .AND. (IDIFF.NE.JP360) ) ISSAME = .FALSE.
+        ENDIF
+      ENDIF
+C
+C     If gaussian, check for same grid specification.
+C
+      IF( (NIREPR.EQ.JPGAUSSIAN) .AND. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+        IF( NIGAUSS.NE.NOGAUSS) ISSAME = .FALSE.
+      ENDIF
+      IF( (NIREPR.EQ.JPQUASI) .AND. (NOREPR.EQ.JPQUASI) ) THEN
+        IF( NIGAUSS.NE.NOGAUSS) ISSAME = .FALSE.
+        DO LOOP = 1, NOGAUSS
+          IF( RIGAUSS(LOOP).NE.ROGAUSS(LOOP) ) ISSAME = .FALSE.
+          IF( MILLEN(LOOP).NE.NOLPTS(LOOP) ) ISSAME = .FALSE.
+        ENDDO
+      ENDIF
+C
+C     Check for same scanning mode.
+C
+C Sinisa commented scanning mode checking because of UK fields
+c      IF( NISCNM.NE.NOSCNM) ISSAME = .FALSE.
+C
+C     Check for same table number, parameter number, level number and
+C     level type.
+C
+cs      IF( NITABLE.NE.NOTABLE) ISSAME = .FALSE.
+cs      IF( NIPARAM.NE.NOPARAM) ISSAME = .FALSE.
+cs      IF( NILEVEL.NE.NOLEVEL) ISSAME = .FALSE.
+cs      IF( NILEVT .NE.NOLEVT ) ISSAME = .FALSE.
+C
+      IF( ISSAME ) RETURN
+C
+C     -----------------------------------------------------------------|
+C
+      RETURN
+      END
diff --git a/interpolation/itimer.c b/interpolation/itimer.c
new file mode 100755
index 0000000..ddfd817
--- /dev/null
+++ b/interpolation/itimer.c
@@ -0,0 +1,123 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+/* ****************************************************************
+** Name: *func.c*
+** ----
+** Products Generation c functions used by Fortran.
+**
+** D. Jokic, ECMWF, Oct-2009.
+**
+** Modifications: -
+**
+** Initial AIX version Oct-2009.
+** ****************************************************************/
+#include <stdio.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/resource.h>
+
+#    define  cstr2fort(a)  a
+#    define _fcd char *
+#    define _fcdtocp(a) a
+#    define _fcdlen(a) strlen(a)
+
+#    define ITIMER   itimer_
+#    define FTIMER   ftimer_
+#    define RUSAGE   rusage_
+
+
+/* ================================================================
+ * Name: *ITIMER*
+ * ----
+ * - double ftimer_(double *time)
+ * Real*8 FTIMER,time in F90
+ * double timer = 0.0; timer=FTIMER(&timer); ... timer=FTIMER(&timer);
+** ===============================================================*/
+double FTIMER(double *time)
+{
+    double diff;
+    struct timeval now;
+
+
+    gettimeofday( &now, NULL );
+    diff = (double)now.tv_sec + ((double)now.tv_usec / 1000000.);
+    /* printf("%g %g\n",*time,diff); */
+
+    if (*time != 0.0) diff -= *time;
+/*
+    {
+        time_t      tv_sec;      * seconds * 
+        suseconds_t tv_usec;     * microseconds * 
+
+        tv_usec = (*time%1)*1000000.;
+        tv_sec = (time_t) ((long)(*time/1))
+
+        tv_sec -= now.tv_sec;
+        tv_usec -= now.tv_usec; 
+        if (tv_usec < 0)
+        {
+            tv_sec--;
+            tv_usec += 1000000;
+        }
+
+        diff = (double)tv_sec + ((double)tv_usec / 1000000.);
+    }
+ */
+    return diff;
+}
+
+int ITIMER(int *seconds)
+{
+   time_t timval1;
+   time(&timval1);
+
+   if (*seconds == 0) return (int)timval1;
+
+   return (int)(timval1 - (time_t)*seconds);
+}
+
+int RUSAGE()
+{
+   struct rusage usage;
+   int who = RUSAGE_SELF;
+   int istat;
+
+   if (getrusage(who, &usage) != 0) return 1;
+
+
+   printf("RUSAGE user time used %d\n",usage.ru_utime.tv_sec);
+   printf("RUSAGE system time used %d\n",usage.ru_stime.tv_sec);
+
+   printf("RUSAGE maximum resident set size %d\n",usage.ru_maxrss);
+   printf("RUSAGE integral shared memory size %d\n",usage.ru_ixrss);
+   printf("RUSAGE integral unshared data size %d\n",usage.ru_idrss);
+   printf("RUSAGE integral unshared stack size %d\n",usage.ru_isrss);
+   printf("RUSAGE page reclaims %d\n",usage.ru_minflt);
+   printf("RUSAGE page faults %d\n",usage.ru_majflt);
+   printf("RUSAGE swaps %d\n",usage.ru_nswap);
+   printf("RUSAGE block input operations %d\n",usage.ru_inblock);
+   printf("RUSAGE block output operations %d\n",usage.ru_oublock);
+   printf("RUSAGE messages sent %d\n",usage.ru_msgsnd);
+   printf("RUSAGE messages received %d\n",usage.ru_msgrcv);
+   printf("RUSAGE signals received %d\n",usage.ru_nsignals);
+   printf("RUSAGE voluntary context switches %d\n",usage.ru_nvcsw);
+   printf("RUSAGE involuntary context switches %d\n",usage.ru_nivcsw);
+
+   return 0;
+}
+
diff --git a/interpolation/ixtract.c b/interpolation/ixtract.c
new file mode 100755
index 0000000..81138c0
--- /dev/null
+++ b/interpolation/ixtract.c
@@ -0,0 +1,112 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define IINSERT iinsert
+#define RINSERT rinsert
+#define DINSERT dinsert
+#define IXTRACT ixtract
+#define RXTRACT rxtract
+#define DXTRACT dxtract
+#define RMOVEN  rmoven
+#define JLOC    jloc
+#else
+#define IINSERT iinsert_
+#define RINSERT rinsert_
+#define DINSERT dinsert_
+#define IXTRACT ixtract_
+#define RXTRACT rxtract_
+#define DXTRACT dxtract_
+#define RMOVEN  rmoven_
+#define JLOC    jloc_
+#endif
+
+#include <memory.h>
+#include "fortint.h"
+
+fortint IXTRACT(JPointer * array, fortint * index) {
+fortint * p = (fortint *) *array;
+/*
+// Extracts a Fortran integer from an array.
+// Note that the array pointer is given by reference.
+*/
+  return (fortint) p[(*index)-1];
+}
+
+fortreal RXTRACT(RPointer * array, fortint * index) {
+fortreal * p = (fortreal *) *array;
+/*
+// Extracts a Fortran real from an array.
+// Note that the array pointer is given by reference.
+*/
+
+  return (fortreal) p[(*index)-1];
+}
+
+void DXTRACT(void * target, void ** array, fortint * index) {
+/*
+// Extracts a Fortran REAL*8 from an array of doubles.
+// Note that the array pointer is given by reference.
+*/
+unsigned char * p = (unsigned char*)(*array) + ((*index)-1)*8;
+
+  memmove(target, p, 8);
+  return;
+}
+
+void IINSERT(JPointer * array, fortint * index, fortint * value) {
+fortint * p = (fortint *) *array;
+/*
+// Inserts a Fortran integer into an array.
+// Note that the array pointer is given by reference.
+*/
+  p[(*index)-1] = *value;
+  return;
+}
+
+void RINSERT(RPointer * array, fortint * index, fortreal * value) {
+fortreal * p = (fortreal *) *array;
+/*
+// Inserts a Fortran real into an array.
+// Note that the array pointer is given by reference.
+*/
+  p[(*index)-1] = *value;
+  return;
+}
+
+void DINSERT(void ** array, fortint * index, void * value) {
+/*
+// Inserts a Fortran single into a (double) array.
+// Note that the array pointer is given by reference.
+*/
+unsigned char * p = (unsigned char*)(*array) + ((*index)-1)*8;
+
+  memmove(p,value,8);
+  return;
+}
+
+void RMOVEN(RPointer * target, RPointer * source, fortint * number) {
+fortreal * Target = (fortreal *) *target;
+fortreal * Source = (fortreal *) *source;
+size_t N = (*number) * sizeof(fortreal);
+/*
+// Moves Fortran reals from one array to another.
+// Note that the array pointers are given by reference.
+*/
+  memmove(Target, Source, N);
+}
+
+RPointer JLOC(RPointer array) {
+/*
+// Emulates the Fortran %LOC function
+*/
+  return array;
+}
diff --git a/interpolation/jacobi.F b/interpolation/jacobi.F
new file mode 100755
index 0000000..ecd177f
--- /dev/null
+++ b/interpolation/jacobi.F
@@ -0,0 +1,768 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION JACOBI(DATA,NM,W,SLAT)
+C
+C---->
+C**** JACOBI
+C
+C     Purpose
+C     -------
+C
+C     Rotates spectral fields by latitude.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = JACOBI(DATA,NM,W,SLAT)
+C
+C     Input
+C     -----
+C
+C     NM      - Triangular truncation number of the field.
+C     DATA    - Linear array of REAL*8s of size (NM+1)*(NM+2)
+C               holding the field.
+C     W       - Work array of REAL*8s of size (NM+1)*(NM+2).
+C     SLAT    - Rotation angle (degrees, REAL*8)
+C              (degrees, negative => rotate counter-clockwise about the
+C                                    new Z-axis).
+C     
+C
+C     Output
+C     ------
+C
+C     DATA    - The transformed field.
+C
+C     Function returns .FALSE. if data cannot be transformed.
+C
+C
+C     Method
+C     ------
+C
+C     See reference paper below.
+C
+C     A file of rotation coefficients is opened corresponding to
+C     the triangular truncation NM and the rotation angle SLAT:
+C
+C           $PP_ROT_DIR/rot_coefs_Tttt_nnnnnnnnn
+C     (or $SCRATCH/rot_coefs_Tttt_nnnnnnnnn,
+C      or     $PWD/rot_coefs_Tttt_nnnnnnnnn)
+C
+C     where:
+C            ttt =  triangular truncation
+C      nnnnnnnnn =  SLAT*100000,
+C     or
+C           $PP_ROT_DIR/rot_coefs_Tttt_Mnnnnnnnn
+C     (or $SCRATCH/rot_coefs_Tttt_Mnnnnnnnn,
+C      or     $PWD/rot_coefs_Tttt_Mnnnnnnnn)
+C
+C     where:
+C            ttt =  triangular truncation
+C       nnnnnnnn =  -SLAT*100000 if SLAT is negative.
+C
+C     If the file does not exist it is created. During creation, the
+C     filename is ROTpppppp_Tttt_nnnnnnnnn, where pppppp is the current
+C     process ID.
+C
+C     The file of rotation coefficients is UNLINKed by the process after
+C     being opened for reading. This causes the file to be removed when
+C     the process terminates.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs messages.
+C     INTLOGR - Logs messages.
+C     GETENV  - to get environment variable data.
+C     GETPID  - to get the current process ID.
+C     RENAME  - to change a filename.
+C     UNLINK  - to remove a file.
+C
+C
+C     Author
+C     ------
+C
+C     R.McGrath and P.Lynch    HIRLAM
+C
+C
+C     Reference.
+C     ----------
+C
+C     "Spectral synthesis on rotated and regular grids"
+C     by P.Lynch and R.McGrath (Irish Meteorological Service).
+C     
+C
+C----<
+C---------------------------------------------------------------------
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Function arguments.
+C
+      REAL*8 DATA, W
+      DIMENSION DATA(*), W(*)
+      INTEGER NM
+      REAL*8 SLAT
+C
+C     Parameters.
+C
+      REAL*8 EPS
+      PARAMETER(EPS = 1.0E-10)
+      INTEGER JPNM_MAX
+      PARAMETER( JPNM_MAX = 640 )
+      INTEGER NPBYTES
+      PARAMETER( NPBYTES = 8 )
+C
+C     Local variables.
+C
+#ifndef REAL_8
+      REAL SSLAT
+#endif
+      LOGICAL LFOR
+      INTEGER I, ISKIP, J, N, MM, K, IEND, IPLUG, IPID
+      INTEGER NN, M, NDEX
+      REAL*8 SIMAG, S, TEMP, DSLAT
+      REAL*8 RAD, TANB, SINB, COSB, Q, RNKN, BNKN, SQNN
+      REAL*8 SQNN1, SQ2N, PKN, PK1N, RNKN1, SREAL ,RNK0, RNK1
+      REAL*8 WISQR(JPNM_MAX)
+      REAL*8 WIB(JPNM_MAX)
+      REAL*8 WIR(JPNM_MAX)
+      REAL*8 WIDAT(2*JPNM_MAX)
+      CHARACTER*256 FILEDUM
+      CHARACTER*256 FILENAME
+      CHARACTER*24 COEFILE
+      DATA COEFILE/'rot_coefs_Tnnn_nnnnnnnnn'/
+      INTEGER FIRST, IUNIT, IRET, ILAT, OLDLAT, OLDTRUN, IOFFSET
+      INTEGER IFSIZE
+      INTEGER NMP1TM, MINUS1
+      DATA FIRST/0/, OLDLAT/10000000/, OLDTRUN/0/
+      SAVE FIRST, IUNIT, ILAT, OLDLAT, OLDTRUN, FILENAME, COEFILE
+C
+C     Externals
+C
+#ifndef gfortran
+      INTEGER GETPID, UNLINK, RENAME
+      EXTERNAL GETPID, UNLINK, RENAME
+#endif
+C
+C     Statement function
+C
+      REAL*8 A, B
+      LOGICAL ABSCHK
+      ABSCHK(A,B) = (ABS(A-B) .LT. EPS*(ABS(A) + ABS(B)))
+C
+C     W array: 1 -> (NM+1)*(NM+2) for PMN/SQRT(2*N+1) values.
+C
+C     RNKM values in WIR (for M>0),
+C                 in WIB (M<0).
+C     Array of temporary SQRT values in WISQR, and
+C     temporary transformed data in WIDAT
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      JACOBI = .FALSE.
+C
+      CALL INTLOG(JP_DEBUG,'JACOBI: truncation = ', NM)
+#ifndef REAL_8
+      SSLAT = SNGL(SLAT)
+      CALL INTLOGR(JP_DEBUG,'JACOBI: rotation angle = ', SSLAT)
+#else
+      CALL INTLOGR(JP_DEBUG,'JACOBI: rotation angle = ', SLAT)
+#endif
+C
+C     Exit immediately if rotation angle is zero.
+C
+      IF (ABS(SLAT).LT.EPS) THEN
+        JACOBI = .TRUE.
+        GOTO 999
+      ENDIF
+C
+C     Change to radians.
+C
+      RAD   = 180.0/PPI
+      DSLAT = SLAT/RAD
+      TANB  = TAN(DSLAT/(2.0))
+      SINB  = SIN(DSLAT)
+      COSB  = COS(DSLAT)
+      Q     = SQRT(2.0)/2.0
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Generate PMN/SQRT(2*N+1) values in W.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      W(1)  = 1.0
+      W(2)  = COSB
+C
+      ISKIP = NM + 1
+      DO 210 I = 1,ISKIP
+        W(1+ISKIP*I)   = W(1+ISKIP*I-ISKIP)*SINB*
+     X                   SQRT(DBLE(2*I-1)/DBLE(2*I))
+        W(1+ISKIP*I+1) = COSB*DSQRT(DBLE(2*I+1))*W(1+ISKIP*I)
+  210 CONTINUE
+C
+      DO 220 I = 2,ISKIP-1
+C
+        DO 215 J = 0,ISKIP-I+1
+          W(I+J*ISKIP+1) = COSB*DSQRT(DBLE((2*I+2*J-1)*(2*I+2*J-1))/
+     X                     DBLE((I+2*J)*I))*W(I+J*ISKIP)
+     X                     -    DSQRT(DBLE((I-1)*(I+2*J-1))/
+     X                     DBLE((I+2*J)*I))*W(I+J*ISKIP-1)
+  215   CONTINUE
+C
+  220 CONTINUE
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Generate the rotation coefficients RNKM.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Generate the rotation coefficients RNKM (K = M dashed in note)
+C     and store in W.  For K = 0 special case.
+C
+C     PMN = W(M*(NM+1) + (N-M+1))
+C
+C     Hold the input latitude and check if it is the same as the one
+C     used the last time through
+C
+      ILAT = NINT(SLAT*100000)
+      IF( (ILAT.EQ.OLDLAT).AND.(OLDTRUN.EQ.NM) ) THEN
+C
+C       Rewind the existing open coefficients file.
+C
+        CALL PBSEEK(IUNIT,0,0,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JACOBI: Rewind failed.',JPQUIET)
+          CALL PBCLOSE(IUNIT,IRET)
+          JACOBI = .FALSE.
+          GOTO 999
+        ENDIF
+C
+      ELSE
+C
+C       A different coefficients file is needed.
+C
+        IF( FIRST.NE.0 ) THEN
+          CALL PBCLOSE(IUNIT,IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,'JACOBI: PBCLOSE failed.',JPQUIET)
+            JACOBI = .FALSE.
+          ENDIF
+        ENDIF
+        OLDLAT = ILAT
+        OLDTRUN = NM
+C
+C       Setup the file name: rot_coefs_Tnnn_nnnnnnnnn
+C       (Path is given by PP_ROT_DIR, SCRATCH, or PWD.)
+C
+        CALL GETENV('PP_ROT_DIR',FILENAME)
+        IOFFSET = INDEX(FILENAME,' ')
+        IF( IOFFSET.EQ.1) THEN
+          CALL GETENV('SCRATCH',FILENAME)
+          IOFFSET = INDEX(FILENAME,' ')
+          IF( IOFFSET.EQ.1) THEN
+            FILENAME = '.'
+          ENDIF
+        ENDIF
+C
+        IOFFSET = INDEX(FILENAME,' ')
+        WRITE(COEFILE(12:14),'(I3.3)') NM
+        IF( ILAT.GE.0) THEN
+          WRITE(COEFILE(16:),'(I9.9)') ILAT
+        ELSE
+          COEFILE(16:) = 'M'
+          WRITE(COEFILE(17:),'(I8.8)') -ILAT
+        ENDIF
+        FILENAME = FILENAME(1:IOFFSET-1) // '/' // COEFILE
+C
+        FILEDUM = FILENAME
+        IPID = GETPID()
+        IF( IPID.LT.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JACOBI: GETPID failed',JPQUIET)
+          JACOBI = .FALSE.
+          GOTO 999
+        ENDIF
+        IOFFSET = INDEX(FILENAME,' ')
+        IPLUG = INDEX(FILENAME,'rot_coefs') + 3
+        WRITE(FILEDUM(IPLUG:IPLUG+5),'(I6.6)') IPID
+C
+C       Try to open the file to see if it already exists
+C
+        CALL PBOPEN(IUNIT,FILENAME(1:IOFFSET-1),'r',IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'JACOBI: PBOPEN for read failed',JPQUIET)
+          CALL INTLOG(JP_DEBUG,'JACOBI: Non-existent file:',JPQUIET)
+C
+C         Set flag to show file does not exist
+C
+          FIRST = 0
+C
+        ELSE
+C
+C         File exists
+C
+          FIRST = 1
+C
+C         Unlink the file so it disappears on close
+C
+          FIRST = 1
+          IRET = UNLINK(FILENAME(1:IOFFSET-1))
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_FATAL,'JACOBI: UNLINK failed',JPQUIET)
+            JACOBI = .FALSE.
+            GOTO 999
+          ENDIF
+C
+C         Calculate the coefficients file size and check file is
+C         the correct size (coefficients are REAL*8)
+C
+          IFSIZE = 8*(NM*(2*NM*NM + 9*NM +13)/3)
+          CALL PBSEEK(IUNIT,0,2,IRET)
+          IF( IRET.LT.0 ) THEN
+            CALL INTLOG(JP_FATAL,'JACOBI: PBSEEK failed.',JPQUIET)
+            CALL PBCLOSE(IUNIT,IRET)
+            JACOBI = .FALSE.
+            GOTO 999
+          ENDIF
+C
+          IF( IFSIZE.NE.IRET) THEN
+            CALL INTLOG(JP_FATAL,
+     X        'JACOBI: Coefficients file size incorrect = ',IRET)
+            CALL INTLOG(JP_FATAL,
+     X        'JACOBI: Expected file size is            = ',IFSIZE)
+            CALL PBCLOSE(IUNIT,IRET)
+            JACOBI = .FALSE.
+            GOTO 999
+          ENDIF
+C
+C         Rewind the coefficients file.
+C
+          CALL PBSEEK(IUNIT,0,0,IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_FATAL,'JACOBI: Rewind failed.',JPQUIET)
+            CALL PBCLOSE(IUNIT,IRET)
+            JACOBI = .FALSE.
+            GOTO 999
+          ENDIF
+        ENDIF
+      ENDIF      
+C
+      DO 530 N = 1,NM
+        RNKN  = (0.5*(1.0 + COSB))**N
+        BNKN  = (0.5*(1.0 - COSB))**N
+        SQNN  = DSQRT(DBLE((N+1)*N))
+        SQNN1 = SQNN*SINB
+        SQ2N  = DSQRT(2.0/DBLE(N))/SINB
+C
+C       Save SQRTS.
+C
+        DO 325 MM = 0,N
+          WISQR(MM+1) = DSQRT(DBLE((N+MM)*(N-MM+1)))*SINB
+  325   CONTINUE
+C
+        NN = 1
+C
+C       Generate RNKM, M = 0 to N.
+C
+        DO 490 K = N,0,-1
+C
+C         Generate the coefficients file if it doesn't exist
+C
+          IF( FIRST.EQ.0 ) THEN
+            FIRST = -1
+            CALL INTLOG(JP_DEBUG, 'JACOBI: PBOPEN for write',JPQUIET)
+            IOFFSET = INDEX(FILEDUM,' ')
+            CALL PBOPEN(IUNIT,FILEDUM(1:IOFFSET-1),'w',IRET)
+            IF( IRET.NE.0 ) THEN
+C
+C             Try to use present working directory
+C
+              CALL INTLOG(JP_ERROR,
+     X          'JACOBI: PBOPEN for write failed',JPQUIET)
+              FILENAME = COEFILE
+              FILEDUM  = COEFILE
+              IOFFSET = INDEX(FILEDUM,' ')
+              CALL PBOPEN(IUNIT,FILEDUM(1:IOFFSET-1),'w',IRET)
+              IF( IRET.NE.0 ) THEN
+                CALL INTLOG(JP_ERROR,
+     X            'JACOBI: PBOPEN for write failed',JPQUIET)
+                JACOBI = .FALSE.
+                GOTO 999
+              ENDIF
+            ENDIF
+          ENDIF
+C
+          IF( FIRST.LE.0) THEN
+C
+            PKN = W(K*(NM+1) + (N-K+1))
+            IF (K.EQ.0) GOTO 400
+C
+C           For K > 0, go forward from zero.
+C
+            PK1N = W((K-1)*(NM+1) + (N-(K-1)+1))
+C
+C           Flip sign if necessary.
+C
+            IF (MOD(K,2).NE.0)THEN
+              PKN = -PKN
+            ELSE
+              PK1N = -PK1N
+            ENDIF
+C
+C           Work using forward recurrence as long as coefficient
+C           calculated passes checks.
+C
+            LFOR = .TRUE.
+C
+            RNK0 = PKN
+            RNK1 = (-DBLE(K)*TANB*PKN + (WISQR(K+1)/SINB)*PK1N)/SQNN
+C
+C           Recurrence starts at 2 for M = 0
+C
+            WIR(1) = RNK0
+            WIR(2) = RNK1
+C
+            DO 330 MM = 1,N-1
+              WIR(MM+2) = (2.0*WIR(MM+1)*(DBLE(MM)*COSB-DBLE(K))
+     X                      - WISQR(MM+1)*WIR(MM)) /WISQR(MM+2)
+C
+C             Apply check to generated coefficient to see if its
+C             absolute value is greater than 1.  If so, have to
+C             switch to using backwards recurrences.
+C
+              IF (ABS(WIR(MM+2)).GT.1.0)THEN
+                LFOR = .FALSE.
+                IEND = MM + 3
+                GOTO 335
+              ENDIF
+  330       CONTINUE
+C
+C           If forward recurrence appears OK so far,
+C           test last element RNKN by comparing with WIR(N+1).
+C
+            IEND = N + 2
+            IF (ABSCHK(RNKN,WIR(N+1))) GOTO 345
+C
+C           If test failed, try generating coefficients using
+C           backwards recurrences.
+C
+  335       CONTINUE
+C
+C           Work backwards from the top.
+C           Specify N; K is already set from the loop above.
+C           Stop at M = 1 (NOT 0).
+C
+            RNKN1 = RNKN*SQ2N*(DBLE(N)*COSB-DBLE(K))
+            WIR(N+1) = RNKN
+C
+C           Check whether difference is within prescribed tolerance.
+C
+            IF (LFOR .AND. ABSCHK(RNKN1,WIR(N))) GO  TO 345
+            WIR(N) = RNKN1
+C
+C           For M = 0:
+C
+            DO 340 MM = N-1,1,-1
+              S = (2.0*WIR(MM+1)*(DBLE(MM)*COSB-DBLE(K))
+     X              - (WISQR(MM+2)*WIR(MM+2))) / WISQR(MM+1)
+C
+C             Accept these if forward recursion failed before
+C             reaching this point.
+C
+              IF (MM+1.LT.IEND)THEN
+                IF (ABSCHK(S,WIR(MM))) GOTO 345
+              ENDIF
+              WIR(MM) = S
+C
+C             If absolute value is greater than 1, give up gracefully
+C
+              IF (ABS(S).GT.1.0) GOTO 920
+  340       CONTINUE
+C
+            GOTO 920
+C
+  345       CONTINUE
+C
+C           Now RNKM for M = 0,-N
+C
+C           RNKM M = -1,-N
+C
+C           Forward recurrence starts at 1 for M = 0, 2 for -1 etc.
+C
+            LFOR = .TRUE.
+C
+            WIB(1) = RNK0
+            WIB(2) = -RNK1-RNK0*DBLE(2*K)/(SQNN1)
+C
+            DO 350 MM = 1,(N-1)
+              WIB(MM+2) = (2.0*WIB(MM+1)*(DBLE(-MM)*COSB-DBLE(K))
+     X              - WISQR(MM+1)*SINB*WIB(MM)) /WISQR(MM+2)
+C
+C             Apply check to generated coefficient to see if its
+C             absolute value is greater than 1.  If so, have to
+C             switch to using backwards recurrences.
+C
+              IF (ABS(WIB(MM+2)).GT.1.0)THEN
+                LFOR = .FALSE.
+                IEND = MM + 3
+                GOTO 355
+              ENDIF
+  350       CONTINUE
+C
+C           If forward recurrence appears OK so far,
+C           test last element BNKN by comparing with WIB(N+1).
+C
+            IEND = N + 1
+            IF (ABSCHK(BNKN,WIB(N+1))) GOTO 400
+C
+C           If test failed, try generating coefficients using backwards
+C           recurrences.
+C
+  355       CONTINUE
+C
+C           Get R values.
+C           First RNKN, then next highest RNKN1.
+C
+            RNKN1 = -BNKN*SQ2N*(DBLE(N)*COSB + DBLE(K))
+C
+C           Work backwards from the top.
+C           Specify N; K is already set from the loop above.
+C
+C           Stop at M = 1 (NOT 0).
+C
+            WIB(N+1) = BNKN
+            IF (LFOR .AND. ABSCHK(RNKN1,WIB(N))) GOTO 400
+            WIB(N) = RNKN1
+C
+            DO 360 MM = N-1,1,-1
+              S = (2.0*WIB(MM+1)*(DBLE(-MM)*COSB-DBLE(K))
+     X              - (WISQR(MM+2)*WIB(MM+2))) / WISQR(MM+1)
+C
+C             Accept backwards generated coefficients if forward
+C             recursion failed before reaching this point.
+C
+              IF ( (MM.LT.IEND ) .AND. ABSCHK(S,WIB(MM)) ) GOTO 400
+              WIB(MM) = S
+C
+C             If absolute value is greater than 1, give up.
+C
+              IF (ABS(S).GT.1.0) GOTO 910
+C
+  360       CONTINUE
+C
+C           End of backwards recurrences reached with no agreed
+C           coefficients, give up.
+C
+            GOTO 910
+C
+C ------------------------------------------------------------------
+C*    Section 4.   Got RNKM. Now transform spectral data.
+C ------------------------------------------------------------------
+C
+  400       CONTINUE
+C
+C           Write coefficients to file
+C
+            CALL PBWRITE(IUNIT,WIR,(N+1)*NPBYTES,IRET)
+            IF( IRET.NE.((N+1)*NPBYTES) ) THEN
+              CALL INTLOG(JP_FATAL,'JACOBI: PBWRITE failed.',JPQUIET)
+              CALL PBCLOSE(IUNIT,IRET)
+              JACOBI = .FALSE.
+              GOTO 999
+            ENDIF
+C
+            CALL PBWRITE(IUNIT,WIB,(N+1)*NPBYTES,IRET)
+            IF( IRET.NE.((N+1)*NPBYTES) ) THEN
+              CALL INTLOG(JP_FATAL,'JACOBI: PBWRITE failed.',JPQUIET)
+              CALL PBCLOSE(IUNIT,IRET)
+              JACOBI = .FALSE.
+              GOTO 999
+            ENDIF
+        
+          ELSE
+C
+  415       CONTINUE
+C
+            PKN  = W(K*(NM+1) + (N-K+1))
+            PK1N = W((K-1)*(NM+1) + (N-(K-1)+1))
+C
+C           Flip sign if necessary.
+C
+            IF (MOD(K,2).NE.0)THEN
+              PKN  = -PKN
+            ELSE
+              PK1N = -PK1N
+            ENDIF
+C
+C           Read coefficients from file
+C
+            CALL PBREAD(IUNIT,WIR,(N+1)*NPBYTES,IRET)
+            IF( IRET.NE.((N+1)*NPBYTES) ) THEN
+              CALL INTLOG(JP_FATAL,'JACOBI: PBREAD failed.',JPQUIET)
+              CALL PBCLOSE(IUNIT,IRET)
+              JACOBI = .FALSE.
+              GOTO 999
+            ENDIF
+C
+            CALL PBREAD(IUNIT,WIB,(N+1)*NPBYTES,IRET)
+            IF( IRET.NE.((N+1)*NPBYTES) ) THEN
+              CALL INTLOG(JP_FATAL,'JACOBI: PBREAD failed.',JPQUIET)
+              CALL PBCLOSE(IUNIT,IRET)
+              JACOBI = .FALSE.
+              GOTO 999
+            ENDIF
+C
+          ENDIF
+C
+C         Special case when K=0.
+C
+          IF( K.EQ.0) THEN
+C
+            SREAL = DATA(2*(N+1)-1)*PKN
+            SIMAG = 0.0
+            DO 420 M = 1,N
+              NMP1TM = (NM+1)*M
+              SREAL = SREAL
+     X        + 2.0*DATA(2*(NMP1TM-((M-1)*M)/2+1+N-M)-1)
+     X        * W(NMP1TM+(N-M+1))
+  420       CONTINUE
+C
+            NDEX        = 1+N
+            WIDAT(NN)   = SREAL
+            WIDAT(NN+1) = SIMAG
+            NN          = NN + 2
+C
+          ELSE
+C
+            SREAL  = DATA(2*(N+1)-1)*PKN
+            SIMAG  = 0.0
+            MINUS1 = -1
+            DO 440 M = 1,N
+              SREAL = SREAL +
+     X              DATA(2*((NM+1)*M-((M-1)*M)/2+1+N-M)-1)
+     X              * (WIR(M+1)+WIB(M+1)*MINUS1)
+              SIMAG = SIMAG -
+     X              DATA(2*((NM+1)*M -((M-1)*M)/2+1+N-M))
+     X              * (-WIR(M+1)+WIB(M+1)*MINUS1)
+              MINUS1 = -MINUS1
+  440       CONTINUE
+C
+            NDEX        = (NM+1)*K - ((K-1)*K)/2+1+N-K
+            WIDAT(NN)   = SREAL
+            WIDAT(NN+1) = SIMAG
+            NN          = NN + 2
+          ENDIF
+C
+C         Update RNKN at both ends of the forward and backward
+C         recurrences.
+C
+          TEMP = DSQRT(DBLE(N+K)/DBLE(N-K+1))
+          RNKN = RNKN*TEMP*SINB/(1+COSB)
+          BNKN = -BNKN*TEMP*(1+COSB)/SINB
+  490   CONTINUE
+C
+C       End of inner loop.
+C
+C ------------------------------------------------------------------
+C*    Section 5.   Now place the values of the rotated spectral
+C                  coefficients in DATA.
+C ------------------------------------------------------------------
+C
+  500 CONTINUE
+C
+        NN = 1
+        DO 520 K = N,0,-1
+          NDEX = (NM+1)*K - ((K-1)*K)/2+1+N-K
+          DATA(2*NDEX-1) = WIDAT(NN)
+          DATA(2*NDEX)   = WIDAT(NN+1)
+          NN = NN + 2
+C
+  520   CONTINUE
+C
+  530 CONTINUE
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Return.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      JACOBI = .TRUE.
+C
+C     If coefficients file has just been generated:
+C      - close it,
+C      - rename it,
+C      - re-open for reading
+C      - unlink it, so it can disappear when closed,
+C      - leave it open.
+C
+      IF( FIRST.LE.0 ) THEN
+        FIRST = 1
+        CALL PBCLOSE(IUNIT,IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JACOBI: PBCLOSE failed.',JPQUIET)
+          JACOBI = .FALSE.
+          GOTO 999
+        ENDIF
+C
+        FILEDUM(IOFFSET:IOFFSET) = CHAR(0)
+        FILENAME(IOFFSET:IOFFSET) = CHAR(0)
+        IRET = RENAME(FILEDUM(1:IOFFSET-1),FILENAME(1:IOFFSET-1))
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JACOBI: RENAME of file failed',JPQUIET)
+          JACOBI = .FALSE.
+          GOTO 999
+        ENDIF
+C
+        CALL INTLOG(JP_DEBUG, 'JACOBI: PBOPEN for read',JPQUIET)
+        IOFFSET = INDEX(FILENAME,' ')
+        CALL PBOPEN(IUNIT,FILENAME(1:IOFFSET-1),'r',IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JACOBI: PBOPEN for read failed',JPQUIET)
+          JACOBI = .FALSE.
+          GOTO 999
+        ENDIF
+C
+        IRET = UNLINK(FILENAME(1:IOFFSET-1))
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JACOBI: UNLINK of file failed',JPQUIET)
+          JACOBI = .FALSE.
+          GOTO 999
+        ENDIF
+      ENDIF
+C
+  999 CONTINUE
+      RETURN
+C
+C     Failure to converge with M < 0.
+C
+  910 CONTINUE
+      CALL INTLOG(JP_FATAL,'JACOBI: Failure to converge M < 0', JPQUIET)
+      JACOBI = .FALSE.
+      GOTO 999
+C
+C     Failure to converge with M > 0.
+C
+  920 CONTINUE
+      CALL INTLOG(JP_FATAL,'JACOBI: Failure to converge M > 0', JPQUIET)
+      JACOBI = .FALSE.
+      GOTO 999
+      END
diff --git a/interpolation/jacobif.F b/interpolation/jacobif.F
new file mode 100755
index 0000000..14e4681
--- /dev/null
+++ b/interpolation/jacobif.F
@@ -0,0 +1,836 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION JACOBIF(DATA,NM,W,ROTANG)
+C
+C---->
+C**** JACOBIF
+C
+C     Purpose
+C     -------
+C
+C     Rotates spectral field by latitude (Fujitsu only).
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = JACOBIF(DATA,NM,W,ROTANG)
+C
+C     Input
+C     -----
+C
+C     NM      - Triangular truncation number of the field.
+C     DATA    - Linear array of REAL*8s of size (NM+1)*(NM+2)
+C               holding the field.
+C     W       - Work array of REAL*8s of size (NM+1)*(NM+2).
+C     ROTANG  - Rotation angle (degrees, REAL*8)
+C              (degrees, negative => rotate counter-clockwise about the
+C                                    new Z-axis).
+C     
+C
+C     Output
+C     ------
+C
+C     DATA    - The transformed field.
+C
+C     Function returns .FALSE. if data cannot be transformed.
+C
+C
+C     Method
+C     ------
+C
+C     See reference paper below.
+C
+C     Coefficients are read into or are created in memory. A large
+C     amount of memory may be required; eg, for truncation NM:
+C       8*(NM*(2*NM*NM + 9*NM +13)/3) bytes.
+C
+C     Optionally, if the environment variable PP_SAVE_ROT is set, a
+C     file of coefficients can be created in the directory given by
+C     environment variable PP_ROT_DIR.
+C
+C     The name of the file of rotation coefficients indicates the
+C     triangular truncation NM and the rotation angle ROTANG:
+C
+C           $PP_ROT_DIR/rot_coefs_Tttt_nnnnnnnnn
+C     or    $TMPDIR/rot_coefs_Tttt_nnnnnnnnn
+C
+C     where:
+C            ttt =  triangular truncation
+C      nnnnnnnnn =  ROTANG*100000,
+C     or
+C           $PP_ROT_DIR/rot_coefs_Tttt_Mnnnnnnnn
+C     or    $TMPDIR/rot_coefs_Tttt_Mnnnnnnnn
+C
+C     where:
+C            ttt =  triangular truncation
+C       nnnnnnnn =  -ROTANG*100000 if ROTANG is negative.
+C        
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs messages.
+C     INTLOGR - Logs messages.
+C     GETENV  - To get environment variable data.
+C     UNLINK  - To remove a file.
+C     PPALLOW - Checks if the rotation coefficients can go into mrfs.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF       April 1999
+C
+C
+C     Reference.
+C     ----------
+C
+C     "Spectral synthesis on rotated and regular grids"
+C     by P.Lynch and R.McGrath (Irish Meteorological Service).
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Function arguments.
+C
+      REAL*8 DATA, W
+      DIMENSION DATA(*), W(*)
+      INTEGER NM
+      REAL*8 ROTANG
+C
+C     Parameters.
+C
+      REAL*8 EPS
+      PARAMETER(EPS = 1.0E-10)
+      INTEGER JPNM_MAX, JPMAXMM, JPMEM20
+      PARAMETER( JPNM_MAX = 640 )
+      PARAMETER( JPMAXMM = 3 )
+C                          `--> maximum number of memory slots
+C                               used for rotation coefficients
+      PARAMETER( JPMEM20 = 20 )
+C                           `--> offset in memory allocation table of
+C                                first memory slot for rotation
+C                                coefficients
+C
+C     Local variables.
+C
+      LOGICAL LFOR, LALLOW
+      INTEGER I, ISKIP, J, N, MM, K, IEND
+      INTEGER NN, M, NDEX, IMEMORY
+C
+      REAL*4 SROTANG
+      REAL*8 SIMAG, S, TEMP, DROTANG
+      REAL*8 RAD, TANB, SINB, COSB, Q, RNKN, BNKN, SQNN
+      REAL*8 SQNN1, SQ2N, PKN, PK1N, RNKN1, SREAL ,RNK0, RNK1
+      REAL*8 INDEXR(JPNM_MAX), INDEXI(JPNM_MAX)
+      REAL*8 MINUS1(JPNM_MAX)
+      REAL*8 FACTOR(JPNM_MAX)
+      REAL*8 WISQR(JPNM_MAX)
+      REAL*8 WIB(JPNM_MAX)
+      REAL*8 WIR(JPNM_MAX)
+      REAL*8 WIDAT(2*JPNM_MAX)
+C
+      CHARACTER*256 FILENAME
+      CHARACTER*40 COEFILE
+      DATA COEFILE/'rot_coefs_Tnnn_nnnnnnnnn'/
+C
+      INTEGER IUNIT, IRET, ILAT, OLDLAT(3), OLDTRUN(3), IOFFSET
+      INTEGER IFSIZE, ICNDEX
+      INTEGER LOOP, NMP1TM, MAXMEM
+      LOGICAL LINMEM, LEXIST
+C
+      INTEGER CURRENT, OLDEST
+      DATA OLDEST/1/, MAXMEM/JPMAXMM/
+      SAVE OLDEST, MAXMEM
+C
+      DATA OLDLAT/3*9999999/, OLDTRUN/3*0/
+      DATA LINMEM/.FALSE./, LEXIST/.FALSE./
+      SAVE IUNIT, ILAT, OLDLAT, OLDTRUN, COEFILE, LINMEM, LEXIST
+C
+#ifdef POINTER_64
+Cjdc  INTEGER*8 ICOEFF
+#endif
+      REAL*8 ACOEFF
+      DIMENSION ACOEFF(1)
+      POINTER ( ICOEFF, ACOEFF )
+C
+C     Externals
+C
+      INTEGER JCHMOD, UNLINK
+      LOGICAL PPALLOW
+      EXTERNAL JCHMOD, UNLINK, PPALLOW
+C
+C     Statement function
+C
+      REAL*8 A, B
+      LOGICAL ABSCHK
+      ABSCHK(A,B) = (ABS(A-B) .LT. EPS*(ABS(A) + ABS(B)))
+C
+C     W array: 1 -> (NM+1)*(NM+2) for PMN/SQRT(2*N+1) values.
+C
+C     RNKM values in WIR (for M>0),
+C                 in WIB (M<0).
+C     Array of temporary SQRT values in WISQR, and
+C     temporary transformed data in WIDAT
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      JACOBIF = .FALSE.
+C
+      LALLOW = PPALLOW(NM,ROTANG)
+C
+      CALL INTLOG(JP_DEBUG,'JACOBIF: truncation = ', NM)
+      SROTANG = SNGL(ROTANG)
+      CALL INTLOGR(JP_DEBUG,'JACOBIF: rotation angle = ', SROTANG)
+C
+C     Exit immediately if rotation angle is zero.
+C
+      IF (ABS(ROTANG).LT.EPS) THEN
+        CALL INTLOG(JP_DEBUG,'JACOBIF: No rotation necessary',JPQUIET)
+        JACOBIF = .TRUE.
+        GOTO 999
+      ENDIF
+C
+C     Change to radians.
+C
+      RAD   = 180.0/PPI
+      DROTANG = ROTANG/RAD
+      TANB  = TAN(DROTANG/(2.0))
+      SINB  = SIN(DROTANG)
+      COSB  = COS(DROTANG)
+      Q     = SQRT(2.0)/2.0
+C
+      ICNDEX = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Generate PMN/SQRT(2*N+1) values in W.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      W(1)  = 1.0
+      W(2)  = COSB
+C
+      ISKIP = NM + 1
+!OCL SCALAR
+      DO I = 1,ISKIP
+        W(1+ISKIP*I)   = W(1+ISKIP*I-ISKIP)*SINB*
+     X                   SQRT(DBLE(2*I-1)/DBLE(2*I))
+        W(1+ISKIP*I+1) = COSB*DSQRT(DBLE(2*I+1))*W(1+ISKIP*I)
+      ENDDO
+C
+!OCL SCALAR
+      DO I = 2,ISKIP-1
+C
+!OCL VECTOR
+        DO J = 0,ISKIP-I+1
+          FACTOR(J) = 1.0/DSQRT(DBLE((I+2*J)*I))
+        ENDDO
+C
+        DO J = 0,ISKIP-I+1
+          W(I+J*ISKIP+1) = COSB*DBLE(2*I+2*J-1)
+     X                     *FACTOR(J)*W(I+J*ISKIP)
+     X                     - DSQRT(DBLE((I-1)*(I+2*J-1)))
+     X                     *FACTOR(J)*W(I+J*ISKIP-1)
+        ENDDO
+C
+      ENDDO
+C
+      MINUS1(1) = -1
+!OCL SCALAR
+      DO I = 2, JPNM_MAX
+        MINUS1(I) = -MINUS1(I-1)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Pick up the rotation coefficients RNKM.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Change the interpolation coefficents if the input latitude is
+C     not the same as the one used the last time through.
+C
+      ILAT = NINT(ROTANG*100000)
+C
+      DO LOOP = 1, MAXMEM
+        IF( ILAT.EQ.OLDLAT(LOOP).AND.(OLDTRUN(LOOP).EQ.NM) ) THEN
+C
+C         Set flags to show the rotation coefficients are in memory
+C
+          LINMEM = .TRUE.
+          LEXIST = .TRUE.
+          CURRENT = LOOP + JPMEM20 - 1
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: Existing memory slot re-used = ', CURRENT)
+          CALL JMEMHAN( CURRENT, ICOEFF, IMEMORY, 1, IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_FATAL,
+     X        'JACOBIF: Failed to pick up existing memory pool',CURRENT)
+            JACOBIF = .FALSE.
+            GOTO 999
+          ENDIF
+          GOTO 310
+        ENDIF
+      ENDDO
+C
+      LINMEM = .FALSE.
+      LEXIST = .FALSE.
+      CURRENT = OLDEST + JPMEM20 - 1
+      OLDLAT(OLDEST)  = ILAT
+      OLDTRUN(OLDEST) = NM
+      OLDEST  = OLDEST + 1
+      IF( OLDEST.GT.MAXMEM ) OLDEST = 1
+      CALL INTLOG(JP_DEBUG,
+     X  'JACOBIF: Different memory slot selected = ', CURRENT)
+C
+  310 CONTINUE
+C
+      IF( .NOT. LINMEM ) THEN
+C
+C       Calculate the coefficients file size (coefficients are REAL*8)
+C
+        IFSIZE = 8*(NM*(2*NM*NM + 9*NM +13)/3)
+C
+C       Allocate memory for the REAL*8 coefficients
+C
+#ifdef REAL_8
+        IMEMORY = (NM*(2*NM*NM + 9*NM +13)/3)
+#else
+        IMEMORY = 2*(NM*(2*NM*NM + 9*NM +13)/3)
+#endif
+C
+  320   CONTINUE
+C
+        CALL JMEMHAN( CURRENT, ICOEFF, IMEMORY, 1, IRET)
+        IF( IRET.NE.0 ) THEN
+C
+C         If memory allocation fails, reduce the number of slots in the
+C         memory pool. Exit if the pool is already down to one slot.
+C
+          IF( MAXMEM.LT.2 ) THEN
+            CALL INTLOG(JP_FATAL,
+     X        'JACOBIF: memory allocation error',ICOEFF)
+            JACOBIF = .FALSE.
+            GOTO 999
+          ENDIF
+          MAXMEM = MAXMEM - 1
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: Reduce number of memory slots to ', MAXMEM)
+          LINMEM = .FALSE.
+          LEXIST = .FALSE.
+          OLDEST = 1
+          OLDLAT(OLDEST)  = ILAT
+          OLDTRUN(OLDEST) = NM
+          CURRENT = OLDEST + JPMEM20 - 1
+          OLDEST = OLDEST + 1
+          IF( OLDEST.GT.MAXMEM ) OLDEST = 1
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: Different memory slot selected = ', CURRENT)
+          GOTO 320
+        ENDIF
+        ICNDEX = 0
+C
+C       If the file already exists, read it into memory.
+C       For 'standard' rotations try PP_ROT_DIR, otherwise TMPDIR.
+C
+        IF( LALLOW ) THEN
+          CALL GETENV('PP_ROT_DIR',FILENAME)
+        ELSE
+          CALL GETENV('TMPDIR',FILENAME)
+        ENDIF
+        IOFFSET = INDEX(FILENAME,' ')
+        IF( IOFFSET.EQ.1) THEN
+          CALL INTLOG(JP_WARN,
+     X      'JACOBIF: Unable to open rotation coefficents.',JPQUIET)
+C
+        ELSE
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: Existing coefficients sought in:',JPQUIET)
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: '// FILENAME(1:IOFFSET-1),JPQUIET)
+C
+          WRITE(COEFILE(12:14),'(I3.3)') NM
+          IF( ILAT.GE.0) THEN
+            WRITE(COEFILE(16:),'(I9.9)') ILAT
+          ELSE
+            COEFILE(16:) = 'M'
+            WRITE(COEFILE(17:),'(I8.8)') -ILAT
+          ENDIF
+          FILENAME = FILENAME(1:IOFFSET-1) // '/' // COEFILE
+          IOFFSET = INDEX(FILENAME,' ') - 1
+C
+          CALL PBOPEN(IUNIT,FILENAME(1:IOFFSET),'r',IRET)
+          IF( IRET.EQ.0 ) THEN
+C
+C           Let user know that a existing file has been opened
+C
+            CALL INTLOG(JP_DEBUG,
+     X        'JACOBIF: Existing coefficients found in file:',JPQUIET)
+            CALL INTLOG(JP_DEBUG,'JACOBIF: '// COEFILE, JPQUIET)
+C
+C           Read coefficients into memory
+C
+            CALL PBREAD(IUNIT,ACOEFF,IFSIZE,IRET)
+            IF( IRET.NE.IFSIZE ) THEN
+              CALL INTLOG(JP_WARN,'JACOBIF: PBREAD failed.',JPQUIET)
+            ELSE
+C
+C           Set flags to show the rotation coefficients are in memory
+C           and exist.
+C
+              LINMEM = .TRUE.
+              LEXIST = .TRUE.
+            ENDIF
+C
+            CALL PBCLOSE(IUNIT,IRET)
+          ENDIF
+C
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Generate the rotation coefficients RNKM.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+C
+C     Generate the rotation coefficients RNKM (K = M dashed in note)
+C     and store in W.  For K = 0 special case.
+C
+C     PMN = W(M*(NM+1) + (N-M+1))
+C
+!OCL VECTOR
+      DO 630 N = 1,NM
+        RNKN  = (0.5*(1.0 + COSB))**N
+        BNKN  = (0.5*(1.0 - COSB))**N
+        SQNN  = DSQRT(DBLE((N+1)*N))
+        SQNN1 = SQNN*SINB
+        SQ2N  = DSQRT(2.0/DBLE(N))/SINB
+C
+C       Save SQRTS.
+C
+!OCL VECTOR
+        DO MM = 0,N
+          WISQR(MM+1) = DSQRT(DBLE((N+MM)*(N-MM+1)))*SINB
+        ENDDO
+C
+        NN = 1
+C
+C       Generate RNKM, M = 0 to N.
+C
+!OCL SCALAR
+        DO 590 K = N,0,-1
+C
+C         If the coefficients are not (yet) in memory, they have to
+C         be calculated.
+C
+          IF( .NOT. LINMEM ) THEN
+C
+            PKN = W(K*(NM+1) + (N-K+1))
+            IF (K.EQ.0) GOTO 500
+C
+C           For K > 0, go forward from zero.
+C
+            PK1N = W((K-1)*(NM+1) + (N-(K-1)+1))
+C
+C           Flip sign if necessary.
+C
+            IF (MOD(K,2).NE.0)THEN
+              PKN = -PKN
+            ELSE
+              PK1N = -PK1N
+            ENDIF
+C
+C           Work using forward recurrence as long as coefficient
+C           calculated passes checks.
+C
+            LFOR = .TRUE.
+C
+            RNK0 = PKN
+            RNK1 = (-DBLE(K)*TANB*PKN + (WISQR(K+1)/SINB)*PK1N)/SQNN
+C
+C           Recurrence starts at 2 for M = 0
+C
+            WIR(1) = RNK0
+            WIR(2) = RNK1
+C
+!OCL SCALAR
+            DO MM = 1,N-1
+              WIR(MM+2) = (2.0*WIR(MM+1)*(DBLE(MM)*COSB-DBLE(K))
+     X                    - WISQR(MM+1)*WIR(MM)) /WISQR(MM+2)
+C
+C             Apply check to generated coefficient to see if its
+C             absolute value is greater than 1.  If so, have to
+C             switch to using backwards recurrences.
+C
+              IF (ABS(WIR(MM+2)).GT.1.0)THEN
+                LFOR = .FALSE.
+                IEND = MM + 3
+                GOTO 435
+              ENDIF
+            ENDDO
+C
+C           If forward recurrence appears OK so far,
+C           test last element RNKN by comparing with WIR(N+1).
+C
+            IEND = N + 2
+            IF (ABSCHK(RNKN,WIR(N+1))) GOTO 445
+C
+C           If test failed, try generating coefficients using
+C           backwards recurrences.
+C
+  435       CONTINUE
+C
+C           Work backwards from the top.
+C           Specify N; K is already set from the loop above.
+C           Stop at M = 1 (NOT 0).
+C
+            RNKN1 = RNKN*SQ2N*(DBLE(N)*COSB-DBLE(K))
+            WIR(N+1) = RNKN
+C
+C           Check whether difference is within prescribed tolerance.
+C
+            IF (LFOR .AND. ABSCHK(RNKN1,WIR(N))) GO  TO 445
+            WIR(N) = RNKN1
+C
+C           For M = 0:
+C
+!OCL SCALAR
+            DO MM = N-1,1,-1
+              S = (2.0*WIR(MM+1)*(DBLE(MM)*COSB-DBLE(K))
+     X              - (WISQR(MM+2)*WIR(MM+2))) / WISQR(MM+1)
+C
+C             Accept these if forward recursion failed before
+C             reaching this point.
+C
+              IF (MM+1.LT.IEND)THEN
+                IF (ABSCHK(S,WIR(MM))) GOTO 445
+              ENDIF
+              WIR(MM) = S
+C
+C             If absolute value is greater than 1, give up gracefully
+C
+              IF (ABS(S).GT.1.0) GOTO 920
+C
+            ENDDO
+C
+            GOTO 920
+C
+  445       CONTINUE
+C
+C           Now RNKM for M = 0,-N
+C
+C           RNKM M = -1,-N
+C
+C           Forward recurrence starts at 1 for M = 0, 2 for -1 etc.
+C
+            LFOR = .TRUE.
+C
+            WIB(1) = RNK0
+            WIB(2) = -RNK1-RNK0*DBLE(2*K)/(SQNN1)
+C
+!OCL SCALAR
+            DO MM = 1,(N-1)
+              WIB(MM+2) = (2.0*WIB(MM+1)*(DBLE(-MM)*COSB-DBLE(K))
+     X              - WISQR(MM+1)*SINB*WIB(MM)) /WISQR(MM+2)
+C
+C             Apply check to generated coefficient to see if its
+C             absolute value is greater than 1.  If so, have to
+C             switch to using backwards recurrences.
+C
+              IF (ABS(WIB(MM+2)).GT.1.0)THEN
+                LFOR = .FALSE.
+                IEND = MM + 3
+                GOTO 455
+              ENDIF
+            ENDDO
+C
+C           If forward recurrence appears OK so far,
+C           test last element BNKN by comparing with WIB(N+1).
+C
+            IEND = N + 1
+            IF (ABSCHK(BNKN,WIB(N+1))) GOTO 500
+C
+C           If test failed, try generating coefficients using backwards
+C           recurrences.
+C
+  455       CONTINUE
+C
+C           Get R values.
+C           First RNKN, then next highest RNKN1.
+C
+            RNKN1 = -BNKN*SQ2N*(DBLE(N)*COSB + DBLE(K))
+C
+C           Work backwards from the top.
+C           Specify N; K is already set from the loop above.
+C
+C           Stop at M = 1 (NOT 0).
+C
+            WIB(N+1) = BNKN
+            IF (LFOR .AND. ABSCHK(RNKN1,WIB(N))) GOTO 500
+            WIB(N) = RNKN1
+C
+!OCL SCALAR
+            DO MM = N-1,1,-1
+              S = (2.0*WIB(MM+1)*(DBLE(-MM)*COSB-DBLE(K))
+     X            - (WISQR(MM+2)*WIB(MM+2))) / WISQR(MM+1)
+C
+C             Accept backwards generated coefficients if forward
+C             recursion failed before reaching this point.
+C
+              IF ( (MM.LT.IEND ) .AND. ABSCHK(S,WIB(MM)) ) GOTO 500
+              WIB(MM) = S
+C
+C             If absolute value is greater than 1, give up.
+C
+              IF (ABS(S).GT.1.0) GOTO 910
+C
+            ENDDO
+C
+C           End of backwards recurrences reached with no agreed
+C           coefficients, give up.
+C
+            GOTO 910
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Got RNKM. Now transform spectral data.
+C     -----------------------------------------------------------------|
+C
+  500       CONTINUE
+C
+C           Put coefficients in allocated memory
+C
+!OCL VECTOR
+            DO LOOP = 1, N+1
+              ACOEFF(ICNDEX    +LOOP) = WIR(LOOP)
+              ACOEFF(ICNDEX+N+1+LOOP) = WIB(LOOP)
+            ENDDO
+C
+          ENDIF
+C
+C         Coefficients are in memory
+C
+          PKN  = W(K*(NM+1) + (N-K+1))
+          PK1N = W((K-1)*(NM+1) + (N-(K-1)+1))
+C
+C         Flip sign if necessary.
+C
+          IF (MOD(K,2).NE.0)THEN
+            PKN  = -PKN
+          ELSE
+            PK1N = -PK1N
+          ENDIF
+C
+!OCL VECTOR
+          DO LOOP = 1, N+1
+            WIR(LOOP) = ACOEFF(ICNDEX    +LOOP)
+            WIB(LOOP) = ACOEFF(ICNDEX+N+1+LOOP)
+          ENDDO
+          ICNDEX = ICNDEX + 2*(N+1)
+C
+C
+C         Special case when K=0.
+C
+          IF( K.EQ.0) THEN
+C
+            SREAL = DATA(2*(N+1)-1)*PKN
+            SIMAG = 0.0
+!OCL VECTOR
+            DO M = 1,N
+              SREAL = SREAL
+     X        + 2.0*DATA(2*((NM+1)*M-((M-1)*M)/2+1+N-M)-1)
+     X        * W((NM+1)*M+(N-M+1))
+            ENDDO
+C
+            NDEX       = 1+N
+            WIDAT(NN)   = SREAL
+            WIDAT(NN+1) = SIMAG
+            NN          = NN + 2
+C
+          ELSE
+C
+            SREAL  = DATA(2*(N+1)-1)*PKN
+            SIMAG  = 0.0
+!OCL VECTOR
+            DO M = 1,N
+              INDEXR(M) = 2*((NM+1)*M-((M-1)*M)/2+1+N-M)-1
+            ENDDO
+!OCL VECTOR
+            DO M = 1,N
+              INDEXI(M) = INDEXR(M) + 1
+            ENDDO
+C
+!OCL VECTOR
+            DO M = 1,N
+              SREAL = SREAL +
+     X              DATA(INDEXR(M))
+     X              * (WIR(M+1)+WIB(M+1)*MINUS1(M))
+              SIMAG = SIMAG -
+     X              DATA(INDEXI(M))
+     X              * (-WIR(M+1)+WIB(M+1)*MINUS1(M))
+            ENDDO
+C
+            NDEX       = (NM+1)*K - ((K-1)*K)/2+1+N-K
+            WIDAT(NN)   = SREAL
+            WIDAT(NN+1) = SIMAG
+            NN          = NN + 2
+          ENDIF
+C
+C         Update RNKN at both ends of the forward and backward
+C         recurrences.
+C
+          TEMP = DSQRT(DBLE(N+K)/DBLE(N-K+1))
+          RNKN = RNKN*TEMP*SINB/(1+COSB)
+          BNKN = -BNKN*TEMP*(1+COSB)/SINB
+C
+C       End of inner loop.
+C
+  590   CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 6.   Now place the values of the rotated spectral
+C                  coefficients in DATA.
+C     -----------------------------------------------------------------|
+C
+  600 CONTINUE
+C
+        NN = 1
+!OCL VECTOR
+        DO K = N,0,-1
+          NDEX = (NM+1)*K - ((K-1)*K)/2+1+N-K
+          DATA(2*NDEX-1) = WIDAT(NN)
+          DATA(2*NDEX)   = WIDAT(NN+1)
+          NN = NN + 2
+C
+        ENDDO
+C
+C     End of outer loop.
+C
+  630 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      LINMEM = .TRUE.
+C
+      IF( .NOT. LEXIST ) THEN
+C
+C       If the environment variable PP_SAVE_ROT is set, save the
+C       rotation coefficients in a file.
+C       'Standard' rotations go into PP_ROT_DIR, others into TMPDIR.
+C
+        LEXIST = .TRUE.
+        CALL GETENV('PP_SAVE_ROT',FILENAME)
+        IOFFSET = INDEX(FILENAME,' ')
+        IF( IOFFSET.GT.1 ) THEN
+          IF( LALLOW ) THEN
+            CALL GETENV('PP_ROT_DIR',FILENAME)
+          ELSE
+            CALL GETENV('TMPDIR',FILENAME)
+          ENDIF
+          IOFFSET = INDEX(FILENAME,' ')
+          IF( IOFFSET.EQ.1) THEN
+            CALL INTLOG(JP_WARN,
+     X        'JACOBIF: Unable to save rotation coefficents.',JPQUIET)
+C
+          ELSE
+C
+C         Let user know that a new file is being created.
+C
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: Creating new coefficients in directory',JPQUIET)
+          CALL INTLOG(JP_DEBUG,
+     X      'JACOBIF: '// FILENAME(1:IOFFSET-1),JPQUIET)
+C
+            WRITE(COEFILE(12:14),'(I3.3)') NM
+            IF( ILAT.GE.0) THEN
+              WRITE(COEFILE(16:),'(I9.9)') ILAT
+            ELSE
+              COEFILE(16:) = 'M'
+              WRITE(COEFILE(17:),'(I8.8)') -ILAT
+            ENDIF
+            FILENAME = FILENAME(1:IOFFSET-1) // '/' // COEFILE
+            IOFFSET = INDEX(FILENAME,' ')
+C
+            CALL PBOPEN(IUNIT,FILENAME(1:IOFFSET-1),'w',IRET)
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_WARN,
+     X          'JACOBIF: PBOPEN for write failed',JPQUIET)
+              GOTO 995
+            ENDIF
+C
+            CALL INTLOG(JP_DEBUG,
+     X        'JACOBIF: New coefficients filename:',JPQUIET)
+            CALL INTLOG(JP_DEBUG,'JACOBIF: '// COEFILE, JPQUIET)
+C
+C           Change access mode to 'read only' for all users.
+C
+            IRET = JCHMOD(FILENAME(1:IOFFSET-1),'0444')
+            IF( IRET.NE.0 )
+     X        CALL INTLOG(JP_WARN,'JACOBIF: JCHMOD error.',IRET)
+C
+C           Write coefficients to file
+C
+            CALL PBWRITE(IUNIT,ACOEFF,IFSIZE,IRET)
+            IF( IRET.NE.IFSIZE ) THEN
+              CALL INTLOG(JP_FATAL,'JACOBIF: PBWRITE failed.',JPQUIET)
+              IRET = UNLINK(FILENAME(1:IOFFSET-1))
+              IF( IRET.NE.0 )
+     X          CALL INTLOG(JP_FATAL,'JACOBIF: UNLINK failed',JPQUIET)
+              CALL PBCLOSE(IUNIT,IRET)
+              JACOBIF = .FALSE.
+              GOTO 999
+            ENDIF
+            CALL PBCLOSE(IUNIT,IRET)
+            LINMEM = .TRUE.
+          ENDIF
+        ENDIF
+      ENDIF
+C
+  995 CONTINUE
+C
+      JACOBIF = .TRUE.
+C
+  999 CONTINUE
+      RETURN
+C
+C     Failure to converge with M < 0.
+C
+  910 CONTINUE
+      CALL INTLOG(JP_FATAL,'JACOBIF: Fail to converge M < 0', JPQUIET)
+      JACOBIF = .FALSE.
+      GOTO 999
+C
+C     Failure to converge with M > 0.
+C
+  920 CONTINUE
+      CALL INTLOG(JP_FATAL,'JACOBIF: Fail to converge M > 0', JPQUIET)
+      JACOBIF = .FALSE.
+      GOTO 999
+      END
diff --git a/interpolation/jagggp.F b/interpolation/jagggp.F
new file mode 100755
index 0000000..597956a
--- /dev/null
+++ b/interpolation/jagggp.F
@@ -0,0 +1,580 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JAGGGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    KNUM, HTYPE, KPTS, POUTF, LUV, KRET)
+C
+C---->
+C**** JAGGGP
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to a gaussian
+C     grid field.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JAGGGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+C    X                    KNUM, HTYPE, KPTS, POUTF, LUV, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     PNORTH   - Northernmost latitude for output field (degrees)
+C     PSOUTH   - Southernmost latitude for output field (degrees)
+C     PWEST    - Westernmost longitude for output field (degrees)
+C     PEAST    - Easternmost longitude for output field (degrees)
+C     KNUM     - Gaussian grid number
+C     HTYPE    - Gaussian grid type
+C                = 'R' for reduced, 
+C                = 'F' for full
+C                = 'U' for user-defined reduced gaussian grid
+C     KPTS     - Array specifying number of points at each line of
+C                latitude if HTYPE = 'U'.
+C                (Must be big enough for both hemispheres, but only
+C                 needs to give Northern hemisphere values from pole
+C                 to latitude nearest the Equator.)
+C     LUV      - Code indicating whether or not the field is a wind
+C                component field;
+C                = 1 if U or V field.
+C
+C     Output parameters
+C     ________________
+C
+C     KPTS     - Array specifying number of points at each line of
+C                latitude; user defined values if HTYPE = 'U'.
+C                (Must be big enough for both hemispheres)
+C     POUTF    - Output grid point field
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG, JDCFLAGS
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C
+C     Externals
+C     _________
+C
+C     JGETGG   - Pick up the definition of the gaussian grid.
+C     JOPNGG   - Opens the legendre functions file for reading line
+C                by line.
+C     JOPNGGF  - Opens the legendre functions file and reads the whole
+C                of it into dynamically allocated memory.
+C     JOPNGGSM - Opens the legendre functions file and memory maps it.
+C     JJSET99  - Sets up FFT
+C     JNORSGG  - Determines which latitude row in a gaussian grid is
+C                north or south of a given latitude
+C     JSYMGG   - Generate symmetric grid from spherical harmonics 
+C     JWSCAL   - Apply latitude correction to wind component field
+C     JMVUGG   - Moves grid point data to output array
+C     JMKOFGG  - Builds offsets into storage array
+C     JDEBUG   - Checks environment variable to switch on/off debug
+C     INTLOG   - Logs output messages
+C     INTLOGR  - Logs output messages
+C     GETCONF  - Decides how to handle legendre coefficients
+C     GETENV   - Get value of an environment variable
+#ifdef SHAREDMEMORY
+C     SMREAD   - Gets interpolation coefficients in a shared memory array
+#endif
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     It handles transformations to a gaussian grid.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "current.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Subroutine arguments
+C
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC, KNUM, KPTS, KRET
+      DIMENSION KPTS(*)
+      CHARACTER*1 HTYPE
+      REAL      PNORTH, PSOUTH, PWEST, PEAST
+      REAL      POUTF
+      DIMENSION POUTF(*)
+      INTEGER   LUV
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31600 )
+C
+C     Local variables
+C
+      INTEGER ILON, ITOUP1, IJPWR, NUMPTS, ITYPE
+      DIMENSION IJPWR(JPMAX)
+      INTEGER ILUNIT
+      INTEGER NXTROW
+      REAL RINTVL, GNUM
+C
+      INTEGER IMFAX
+      REAL ATRIGS
+      DIMENSION IMFAX(10),ATRIGS(JPLONO*2)
+#ifdef POINTER_64
+      INTEGER*8 IALEG, IZFA
+#endif
+#ifdef CRAY
+      REAL ALEG
+      DIMENSION ALEG(JPK)
+      REAL ZFA
+      DIMENSION ZFA(JPLONO+2, 64)
+#else
+      REAL ALEG
+      DIMENSION ALEG(1)
+      POINTER ( IALEG, ALEG )
+      REAL ZFA
+      DIMENSION ZFA(1)
+      POINTER ( IZFA, ZFA )
+#endif
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      SAVE ISIZE, IZFA
+C
+      CHARACTER*10 PLAINUV
+C
+      CHARACTER*8 FILENAME
+      DATA FILENAME/'Nxxx_DEF'/
+      INTEGER NGROUP
+      INTEGER FILENM, J108, NNORTH, NSOUTH, NCASE, NFLAG
+      INTEGER NOFSET, LOOP
+      DIMENSION NOFSET(JPMAX)
+      INTEGER INORTH, ISOUTH, IMAGE, NFIRST, NDIFF
+      DATA FILENM/67/
+      REAL ALAT
+      DIMENSION ALAT(JPMAX)
+C
+      SAVE ILUNIT, IALEG
+C
+      LOGICAL LDEBUG, LFIRST, LPLAINU
+      DATA LFIRST/.TRUE./, LPLAINU/.FALSE./
+      SAVE LDEBUG, LFIRST, LPLAINU
+      CHARACTER*20 CONFIG
+      INTEGER IBLANK
+C
+      INTEGER  JNORSGG
+      EXTERNAL JNORSGG
+#ifdef SHAREDMEMORY
+      INTEGER  SHAREDGG
+      EXTERNAL SHAREDGG
+#endif
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      CALL JDEBUG( )
+      LDEBUG = NDBG.GT.0
+C
+C     Decide how to handle legendre coefficients
+C
+      CALL GETCONF()
+C
+      IF( LFIRST ) THEN
+C
+        LFIRST = .FALSE.
+C
+C       Check environment variable to see if wind components are plain
+C       U and V, or U*cos(theta) and V*cos(theta) (the default).
+C
+        CALL GETENV('INTERP_PLAIN_UV', PLAINUV)
+        IBLANK = INDEX(PLAINUV, ' ')
+C
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'ON') )  LPLAINU =.TRUE.
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'on') )  LPLAINU =.TRUE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'YES') ) LPLAINU =.TRUE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'yes') ) LPLAINU =.TRUE.
+C
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'NO') )  LPLAINU =.FALSE.
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'no') )  LPLAINU =.FALSE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'OFF') ) LPLAINU =.FALSE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'off') ) LPLAINU =.FALSE.
+C
+#ifndef CRAY
+C
+C       First time through, dynamically allocate memory for workspace
+C
+        ISIZE =  (JPLONO+2)*64
+        CALL JMEMHAN( 10, IZFA, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JAGGGP: memory allocation error.',IZFA)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+#endif
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'JAGGGP: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JAGGGP: Northern latitude for output = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JAGGGP: Southern latitude for output = ', PSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JAGGGP: Western longitude for output = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JAGGGP: Eastern longitude for output = ', PEAST)
+        CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Gaussian grid number = ', KNUM)
+C
+        IF( HTYPE.EQ.'R' .OR. HTYPE.EQ.'r' ) CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Grid type is Reduced.',JPQUIET)
+        IF( HTYPE.EQ.'F' .OR. HTYPE.EQ.'f' ) CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Grid type is Full.',JPQUIET)
+        IF( HTYPE.EQ.'U' .OR. HTYPE.EQ.'u' ) CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Grid type is User.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Field code( = 1 for U or V) = ', LUV)
+C
+        IF ( HTYPE .EQ. 'u' .OR. HTYPE .EQ. 'U' ) THEN
+          CALL INTLOG(JP_DEBUG,'JAGGGP: User-supplied values.',JPQUIET)
+          CALL INTLOG(JP_DEBUG,'JAGGGP: No. pts at each line:',JPQUIET)
+          DO NDBGLP = 1, 20
+            CALL INTLOG(JP_DEBUG,' ',KPTS( NDBGLP ))
+          ENDDO
+        ENDIF
+      ENDIF
+C
+C     Pick up the file containing the definition of the gaussian grid.
+C
+      IF( (NOGAUSO.NE.KNUM).OR.(HOGAUST.NE.HTYPE) ) THEN
+        CALL JGETGG( KNUM, HTYPE, ALAT, KPTS, KRET)
+        IF ( KRET .NE. 0 ) GOTO 990
+        NOGAUSO = KNUM
+        HOGAUST = HTYPE
+      ELSE
+        DO LOOP = 1, KNUM*2
+          ALAT(LOOP) = ROGAUSS(LOOP)
+          KPTS(LOOP) = NOLPTS(LOOP)
+        ENDDO
+      ENDIF
+C
+C     If coefficients are not to generated 'on the fly',
+C     open the appropriate legendre function file.
+C
+      IF( LFILEIO ) THEN
+        ISIZE = JPK
+        CALL JMEMHAN( 14, IALEG, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JAGGGP: memory allocate error',IALEG)
+          KRET = JPROUTINE + 2
+          GOTO 990
+        ENDIF
+        CALL JOPNGG( ALEG, KNUM, KTRUNC, ILUNIT, ALAT, KRET)
+      ELSE IF( LMEMORY ) THEN
+        CALL JOPNGGF( IALEG, KNUM, KTRUNC, ILUNIT, ALAT, KRET)
+      ELSE IF( LMAPPED ) THEN
+        CALL JOPNGGSM( IALEG, KNUM, KTRUNC, ILUNIT, ALAT, KRET)
+#ifdef SHAREDMEMORY
+      ELSE IF( LSHARED ) THEN
+        GNUM = REAL(KNUM)
+        IF( LDEBUG ) THEN
+           CALL INTLOG(JP_DEBUG,'JAGGGP: call SHAREDGG', JPQUIET)
+        ENDIF
+C
+        KRET =  SHAREDGG(IALEG,KTRUNC,KNUM)
+C
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'JAGGGP: SHARED MEMORY Failed to get legendre coeff.',KRET)
+	      KRET = JPROUTINE + 3
+	      GOTO 990
+        ENDIF
+        GOTO 102
+#endif
+      ELSE
+        ISIZE =  (KTRUNC+1)*(KTRUNC+2)
+        CALL JMEMHAN( 14, IALEG, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JAGGGP: memory allocate error.',IALEG)
+          KRET = JPROUTINE + 2
+          GOTO 990
+        ENDIF
+      ENDIF
+C
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JAGGGP: Failed to get legendre coefficients',KRET)
+	KRET = JPROUTINE + 3
+	GOTO 990
+      ENDIF
+C
+  102 CONTINUE
+C
+C     Determine which latitude rows in the gaussian grid are in the 
+C     requested area
+C
+      NNORTH = JNORSGG( PNORTH, ALAT, KNUM, 1)
+      NSOUTH = JNORSGG( PSOUTH, ALAT, KNUM, 0)
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: Gaussian latitudes in requested area:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'JAGGGP: NORTH = ',NNORTH)
+        CALL INTLOG(JP_DEBUG,'JAGGGP: SOUTH = ',NSOUTH)
+      ENDIF
+C
+C
+C     For calculation purposes, the number of longitude points for each
+C     latitude row has to be greater than 2*(output truncation) to 
+C     ensure the fourier transform is exact (see Reference, page 10). 
+C
+C     The following loop calculates the power of 2 to be used as a 
+C     multipier for each row to ensure there are enough points.
+C     Later, when filling the output array POUTF, the longitude points
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.
+C
+      ITOUP1 = KTRUNC
+      DO 108 J108 = 1, KNUM
+	IMAGE = 2*KNUM - J108 + 1
+	ILON        = KPTS(J108)
+        IJPWR(J108) = 1
+ 104    CONTINUE
+          IF(ILON .GT. 2*ITOUP1) GOTO 106
+	  IJPWR(J108) = IJPWR(J108)*2
+          ILON        = ILON*2
+          GOTO 104
+ 106    CONTINUE
+	IJPWR(IMAGE) = IJPWR(J108)
+ 108  CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Work out geometry of the request
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Latitude rows are generated from row INORTH to ISOUTH.
+C     Selection is carried out for actual requested rows when the 
+C     calculated values are moved to the output array.
+C
+C     Start with assumption that the area is symmetrical about equator.
+C
+      NCASE  = 1
+      NFLAG  = 3
+      INORTH = NNORTH
+      ISOUTH = KNUM
+      NDIFF  = 0
+C
+C     Northern hemisphere only ?
+C
+      IF ( PSOUTH .GE. 0.0 ) THEN
+        NCASE  = 2
+	NFLAG  = 1
+	INORTH = NNORTH
+	ISOUTH = NSOUTH
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: North hemisphere only.',JPQUIET)
+	GOTO 220
+      ENDIF
+C
+C     Southern hemisphere only ?
+C
+      IF ( PNORTH .LE. 0.0 ) THEN
+        NCASE  = 3
+	NFLAG  = 2
+        INORTH = 2*KNUM - NSOUTH + 1
+        ISOUTH = 2*KNUM - NNORTH + 1
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JAGGGP: South hemisphere only.',JPQUIET)
+	GOTO 220
+      ENDIF
+C
+C     Straddles equator ...
+C     ... more north than south?
+C
+      IF ( PNORTH .GT. -PSOUTH ) THEN
+	NCASE  = 4
+	INORTH = NNORTH
+	ISOUTH = KNUM
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'JAGGGP: Straddles equator.',JPQUIET)
+          CALL INTLOG(JP_DEBUG,'JAGGGP: More north than south',JPQUIET)
+        ENDIF
+	GOTO 220
+      ENDIF
+C
+C     ... more south than north?
+C
+      IF ( PNORTH .LT. -PSOUTH ) THEN
+	NCASE  = 5
+	INORTH = 2*KNUM - NSOUTH + 1
+	ISOUTH = KNUM
+	NDIFF  = NNORTH - INORTH
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,'JAGGGP: Straddles equator.',JPQUIET)
+          CALL INTLOG(JP_DEBUG,'JAGGGP: More south than north',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     Setup the storage offset for the given latitude range
+C
+ 220  CONTINUE
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'JAGGGP: INORTH = ', INORTH)
+        CALL INTLOG(JP_DEBUG,'JAGGGP: ISOUTH = ', ISOUTH)
+      ENDIF
+      CALL JMKOFGG(HTYPE,NNORTH,NSOUTH,PWEST,PEAST,KNUM,KPTS,NOFSET)
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Process all latitude rows
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X  'JAGGGP: Process latitude rows.',JPQUIET)
+C
+      NGROUP = 0
+C
+      DO 320 NXTROW = INORTH, ISOUTH
+C
+C       Build up a group of lines of the same length which can all
+C       be transformed at the same time.
+        NGROUP = NGROUP + 1
+C
+C       Initialise FFT constants for the group
+C
+        IF ( NGROUP .EQ. 1 ) THEN
+	  NFIRST = NXTROW
+	  ILON = KPTS(NFIRST) * IJPWR(NFIRST)
+C
+          IF( LDEBUG ) THEN
+            CALL INTLOG(JP_DEBUG,
+     X        'JAGGGP: Initialise FFT consts for the group.',JPQUIET)
+            CALL INTLOG(JP_DEBUG,
+     X        'JAGGGP: Latitude number = ', NFIRST)
+            CALL INTLOG(JP_DEBUG,
+     X        'JAGGGP: No. of calculated long.pts = ', ILON)
+          ENDIF
+C
+          CALL JJSET99( ATRIGS, IMFAX, ILON, KRET)
+          IF( KRET .NE. 0 ) GOTO 990
+	ENDIF
+C
+C       If the current line is the last to be processed,
+C       or the next line is not suitable for the current group,
+C       or 32 lines are in the group already ...
+C
+        IF (     ( NXTROW .EQ. ISOUTH)
+     X      .OR. ( KPTS(NFIRST) .NE. KPTS(NXTROW+1) )
+     X      .OR. ( NGROUP .EQ. JP32 ) ) THEN
+C
+C         Calculate the points along the line of latitude
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'JAGGGP: Number in group = ', NGROUP)
+C
+          CALL JSYMGG( PSHUP, KTRUNC, NFIRST, ILUNIT, NGROUP, ILON,
+     X                 ALAT, ALEG, ATRIGS, IMFAX, ZFA, KRET)
+	  IF( KRET .NE. 0 ) GOTO 990
+C
+C         If it is a wind component field formed from spectral Ucos(theta)
+C         and Vcos(theta) (ie not just spectral U and V), apply a
+C         latitude correction
+C
+	  IF( (LUV.EQ.1).AND.(.NOT.LPLAINU) )
+     X      CALL JWSCAL(ZFA, NGROUP, ILON, NFIRST, ALAT)
+C
+C         Store away the generated latitudes
+C
+          IF( (HTYPE .EQ. 'U') .OR. (HTYPE .EQ. 'R') ) THEN
+            NUMPTS = KPTS(NFIRST)
+          ELSE
+            RINTVL = (PEAST - PWEST)*FLOAT( KPTS(NFIRST) ) / 360.0
+            NUMPTS = NINT( RINTVL ) + 1
+          ENDIF
+C
+C         Is the area unequally distributed about the equator?
+C
+          IF ( NCASE .EQ. 4 .OR. NCASE .EQ. 5 ) THEN
+	    CALL JMVUGG( ZFA, NNORTH, NSOUTH, PWEST, KNUM, NFIRST,
+     X                   NDIFF, NGROUP, NUMPTS, ILON,
+     X                   IJPWR(NFIRST), NOFSET, POUTF)
+            NDIFF  = MAX( 0, (NDIFF - NGROUP) )
+C
+C         No, it is all in one hemisphere or is symmetrical
+C         about the equator
+C
+	  ELSE
+	    CALL JMOVGG( ZFA, PWEST, KNUM, NFIRST, NGROUP, NUMPTS,
+     X  		 ILON, IJPWR(NFIRST), NOFSET, POUTF, NFLAG)
+          ENDIF
+C
+C         Startup next group of latitudes
+C
+	  NGROUP = 0
+        ENDIF
+C
+ 320  CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 930  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'JAGGGP: Return code = ', KRET)
+C
+      RETURN
+      END
diff --git a/interpolation/jallgp.F b/interpolation/jallgp.F
new file mode 100755
index 0000000..b691d97
--- /dev/null
+++ b/interpolation/jallgp.F
@@ -0,0 +1,542 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JALLGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    PLATINC, PLONINC, POUTF, KRET)
+C
+C---->
+C**** JALLGP
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to standard
+C     lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JALLGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+C    X                    PLATINC, PLONINC, POUTF, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     PNORTH   - Northernmost latitude for output field (degrees)
+C     PSOUTH   - Southernmost latitude for output field (degrees)
+C     PWEST    - Westernmost longitude for output field (degrees)
+C     PEAST    - Easternmost longitude for output field (degrees)
+C     PLATINC  - Grid interval between latitudes in degrees
+C     PLONINC  - Grid interval between longitudes in degrees
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF    - Output grid point field
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG, JDCFLAGS
+C
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     JOPNLL   - Opens the legendre functions file for reading line
+C                by line.
+C     JOPNLLF  - Opens the legendre functions file and reads the whole
+C                of it into dynamically allocated memory.
+C     JOPNLLSM - Opens the legendre functions file and memory maps it.
+C
+C     JJSET99  - Sets up FFT
+C     JSYMLL   - Generate symmetric grid from spherical harmonics 
+C     JWINDLL  - Generate symmetric grid from spherical harmonics(wind)
+C     JMOVLL   - Move points of symmetric grid to array
+C     JMVULL   - Move points of unsymmetric grid to array
+C     JDEBUG   - Checks environment variable to switch on/off debug
+C     INTLOG   - Logs output messages
+C     INTLOGR  - Logs output messages
+C     GETENV   - Get value of an environment variable
+C     GETCONF  - Decides how to handle legendre coefficients
+#ifdef SHAREDMEMORY
+C     SMREAD   - Gets interpolation coefficients in a shared memory array
+#endif
+C
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     ________
+C
+C     This is a redesign, based on SPECGP.F
+C
+C     It handles transformations to a regular lat/long grid assuming.
+C
+C     It is not for U and V fields (no correction is applied at the 
+C     poles).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      REAL PEPS
+      PARAMETER ( JPROUTINE = 30000 )
+      PARAMETER ( PEPS = 1E-6 )
+C                   |
+C                    `-> value used to compare equality of calculated
+C                        latitude with area limits
+C
+C     Subroutine arguments
+C
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC
+      REAL      PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      REAL      POUTF
+      DIMENSION POUTF(*)
+      INTEGER   KRET
+C
+C     Local variables
+C
+      REAL PSTART, PNORMX, PDIFF
+      REAL ZDEGR, ZBUILD
+      INTEGER ILON, IOLON, ITOUP1, IJPWR, ITYPE
+      INTEGER ILUNIT, ISTART
+      INTEGER NEXT, NCALLS, NLEFT, NROWS, NFLAG, NCASE, NUMLON
+C
+      INTEGER IMFAX
+      REAL ATRIGS
+      DIMENSION IMFAX(10),ATRIGS(JPLONO*2)
+#ifdef POINTER_64
+      INTEGER*8 IALEG, IZFA
+#endif
+#ifdef CRAY
+      REAL ALEG
+      DIMENSION ALEG(JPK)
+      REAL ZFA
+      DIMENSION ZFA(JPLONO+2, 64)
+#else
+      REAL ALEG
+      DIMENSION ALEG(1)
+      POINTER ( IALEG, ALEG )
+      REAL ZFA
+      DIMENSION ZFA(1)
+      POINTER ( IZFA, ZFA )
+#endif
+C
+C     Integer Itimer,timer1
+      INTEGER ISIZE, ISIZE2
+      DATA ISIZE/0/, ISIZE2/0/
+      SAVE ISIZE, ISIZE2, IZFA
+C
+      SAVE ILUNIT, IMFAX, ATRIGS, IALEG
+C
+      LOGICAL LDEBUG, LFIRST
+      DATA LFIRST/.TRUE./
+      SAVE LDEBUG, LFIRST
+      CHARACTER*20 CONFIG
+      INTEGER IBLANK
+C
+C     Externals
+C
+#ifdef SHAREDMEMORY
+      INTEGER SHAREDLL
+      EXTERNAL SHAREDLL
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      CALL JDEBUG( )
+      LDEBUG = NDBG.GT.0
+C
+C     Decide how to handle legendre coefficients
+C
+      CALL GETCONF()
+C
+#ifndef CRAY
+C
+C       First time through, dynamically allocate memory for workspace
+C
+      IF( LFIRST ) THEN
+        LFIRST = .FALSE.
+        ISIZE =  (JPLONO+2)*64
+        CALL JMEMHAN( 10, IZFA, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JALLGP: memory allocation error.',IZFA)
+          KRET = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+      ENDIF
+#endif
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'JALLGP: Input parameters:', JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: Spherical harmonic coeffs(first 20):', JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ', PSHUP( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: Northern latitude for output = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: Southern latitude for output = ', PSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: Western longitude for output = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: Eastern longitude for output = ', PEAST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: Latitude grid interval (deg) = ', PLATINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: Longitude grid interval (deg) = ', PLONINC)
+      ENDIF
+C
+C     Open the appropriate legendre function file.
+C
+      IF( LFILEIO ) THEN
+        ISIZE2 = JPK
+        CALL JMEMHAN( 14, IALEG, ISIZE2, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JALLGP: memory allocate error.',IALEG)
+          KRET = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        CALL JOPNLL( ALEG, PLATINC, KTRUNC, ILUNIT, ZBUILD, KRET)
+C
+      ELSE IF( LMEMORY ) THEN
+        CALL JOPNLLF( IALEG, PLATINC, KTRUNC, ILUNIT, ZBUILD, KRET)
+C
+      ELSE IF( LMAPPED ) THEN
+        CALL JOPNLLSM( IALEG, PLATINC, KTRUNC, ILUNIT, ZBUILD, KRET)
+C
+#ifdef SHAREDMEMORY
+      ELSE IF( LSHARED ) THEN
+        IF( LDEBUG ) THEN
+           CALL INTLOG(JP_DEBUG,'JALLGP: call SHAREDLL:', JPQUIET)
+        ENDIF
+
+        KRET=SHAREDLL(IALEG,KTRUNC,PLATINC)
+
+c        print*,' jallgp.F KRET=',KRET
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X     'JALLGP: SHARED Failed to get legendre coeff.',KRET)
+	      KRET = JPROUTINE + 3
+	      GOTO 900
+        ENDIF
+        GOTO 102
+#endif
+      ELSE
+        ISIZE2 =  (KTRUNC+1)*(KTRUNC+2)
+        CALL JMEMHAN( 14, IALEG, ISIZE2, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JALLGP: memory allocate error.',IALEG)
+          KRET = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JALLGP: Failed to get legendre coefficients',KRET)
+        KRET = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+  102 CONTINUE
+C
+      ZDEGR  = PPI / 180.0
+      IOLON  = NINT( 360.0 / PLATINC )
+      ILON   = NINT( 360.0 / PLONINC )
+      ITOUP1 = KTRUNC
+C
+C     For calculation purposes, ILON, the number of longitude points,
+C     has to be greater than 2*(output truncation) to ensure that the
+C     fourier transform is exact (see Reference, page 10). 
+C     The following loop increases ILON*IJPWR until ILON=>2*ITOUP1.
+C     Later, when filling the output array POUTF, the longitude points
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.
+C
+      IJPWR = 1
+ 110  CONTINUE
+        IF( ILON.GT.2*ITOUP1 ) GOTO 120
+        IJPWR = IJPWR*2
+        ILON  = ILON*2
+        GOTO 110
+ 120  CONTINUE
+C
+C     Initialise FFT constants
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: Initialise FFT constants with ', ILON)
+        CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: longitude points.', JPQUIET)
+      ENDIF
+C
+      CALL JJSET99( ATRIGS, IMFAX, ILON, KRET)
+      IF( KRET.NE.0 ) GOTO 900
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Work out geometry of the request
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Symmetrical about equator?
+C
+      NCASE  = 1
+      NFLAG  = 3
+      PNORMX = PNORTH
+      PDIFF  = 0.0
+      NROWS  = NINT( PNORTH/PLATINC )  + 1
+      IF( ( ABS((NROWS-1)*PLATINC)-PNORTH).GT.PEPS ) NROWS = NROWS - 1
+C
+C     Northern hemisphere only ?
+C
+      IF( PSOUTH.GT.0.0 ) THEN
+        NCASE = 2
+        NFLAG = 1
+        PNORMX = PNORTH
+        PDIFF = PNORTH - PSOUTH
+        NROWS = NINT( PDIFF/PLATINC )  + 1
+        IF( ( ABS((NROWS-1)*PLATINC)-PNORTH).GT.PEPS ) NROWS = NROWS - 1
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_DEBUG,
+     X      'JALLGP: North hemisphere only.', JPQUIET)
+	GOTO 300
+      ENDIF
+C
+C     Southern hemisphere only ?
+C
+      IF( PNORTH.LT.0.0 ) THEN
+        NCASE = 3
+        NFLAG = 2
+        PNORMX = ABS(PSOUTH)
+        PDIFF  = PNORMX + PNORTH
+        NROWS =  NINT( PDIFF/PLATINC )  + 1
+        IF( ( ABS((NROWS-1)*PLATINC)-ABS(PSOUTH)).GT.PEPS )
+     X    NROWS = NROWS - 1
+C
+        IF( LDEBUG )
+     X    CALL INTLOG(JP_DEBUG,
+     X      'JALLGP: South hemisphere only.', JPQUIET)
+	GOTO 300
+      ENDIF
+C
+C     Straddles equator ...
+C     ... more north than south?
+C
+      IF( PNORTH.GT.-PSOUTH ) THEN
+        NCASE = 4
+        PNORMX = PNORTH
+        PDIFF = PNORTH + PSOUTH
+        NROWS =  NINT( PNORMX/PLATINC )  + 1
+C
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'JALLGP: Straddles equator.', JPQUIET)
+          CALL INTLOG(JP_DEBUG,
+     X      'JALLGP: More north than south.', JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     ... more south than north?
+C
+      IF( PNORTH.LT.-PSOUTH ) THEN
+        NCASE = 5
+        PNORMX = ABS(PSOUTH)
+        PDIFF  = PNORMX - PNORTH
+        NROWS =  NINT( PNORMX/PLATINC )  + 1
+        IF( ( ABS((NROWS-1)*PLATINC)-PNORMX).GT.PEPS ) NROWS = NROWS - 1
+C
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'JALLGP: Straddles equator.', JPQUIET)
+          CALL INTLOG(JP_DEBUG,
+     X      'JALLGP: More south than north.', JPQUIET)
+        ENDIF
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 3.    Calculation.
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C
+      NUMLON = NINT( (PEAST - PWEST)/PLONINC ) + 1
+      ZBUILD = PLATINC
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'JALLGP: Number of longitudes = ', NUMLON)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JALLGP: North latitude used for calc = ', PNORMX)
+        CALL INTLOG(JP_DEBUG,'JALLGP: No.lats used in calc = ', NROWS)
+      ENDIF
+C
+      NCALLS = NROWS / JP32
+C
+      IF( LWIND ) THEN
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: No.of 32 rows (calls to JWINDLL) = ', NCALLS)
+      ELSE
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: No.of 32 rows (calls to JSYMLL) = ', NCALLS)
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4.    Process 32 rows at a time.
+C     _______________________________________________________
+C
+ 400  CONTINUE
+C
+C     timer1=Itimer(0)
+      DO 420 NEXT = 1, NCALLS
+        PSTART = PNORMX - REAL( (NEXT -1)*JP32 ) *PLATINC
+        ISTART = INT((PSTART*1000.0)+0.5)
+        PSTART = ISTART/1000.0
+C
+        IF( LDEBUG )
+     X    CALL INTLOGR(JP_DEBUG, 'JALLGP: Next latitude = ', PSTART)
+C
+C       Generate the next 32 rows (Northern and Southern hemisphere).
+C
+        IF( LWIND ) THEN
+          CALL JWINDLL( PSHUP, KTRUNC, PSTART, ZBUILD, PLATINC, ILUNIT,
+     X                 JP32,ILON,ALEG,ATRIGS,IMFAX,ZFA,KRET)
+        ELSE
+          CALL JSYMLL( PSHUP, KTRUNC, PSTART, ZBUILD, PLATINC, ILUNIT,
+     X                 JP32,ILON,ALEG,ATRIGS,IMFAX,ZFA,KRET)
+        ENDIF
+	IF( KRET.NE.0 ) GOTO 900
+C
+C       If area straddles the equator and has different number of
+C       north/south rows, only move a selection of rows to output array.
+C
+        IF( (NCASE.EQ.4).OR.(NCASE.EQ.5) ) THEN
+          CALL JMVULL( ZFA, PNORTH, PSOUTH, PWEST, PLATINC, PLONINC,
+     X                 PSTART, PDIFF, JP32, NUMLON, ILON, IJPWR, POUTF)
+          PDIFF = PDIFF - PLATINC*JP32
+          IF( PDIFF.LT.0 ) NCASE = NCASE - 2
+C
+C       Otherwise, move them all
+C
+        ELSE
+          CALL JMOVLL( ZFA, PNORTH, PWEST, PLATINC, PLONINC, PSTART,
+     X                 JP32, NUMLON, ILON, IJPWR, POUTF, NFLAG)
+        ENDIF
+C
+ 420  CONTINUE
+C     timer1=Itimer(timer1)
+C     print*,'jallgp.F legendre functions JSYMLL time:',timer1,' sec'
+
+C
+C     _______________________________________________________
+C
+C*    Section 5.    Process leftover rows nearest the equator.
+C     _______________________________________________________
+C
+ 500  CONTINUE
+C
+      NLEFT = MOD( NROWS, JP32 )
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JALLGP: No.of leftover rows nearest equator = ', NLEFT)
+C
+C
+      IF( NLEFT.NE.0 ) THEN
+        PSTART = PNORMX - REAL( NCALLS*JP32 ) *PLATINC
+C
+      IF( LDEBUG )
+     X  CALL INTLOGR(JP_DEBUG, 'JALLGP: Next latitude = ',PSTART)
+C
+        IF( LWIND ) THEN
+          CALL JWINDLL( PSHUP, KTRUNC, PSTART, ZBUILD, PLATINC, ILUNIT,
+     X                 NLEFT,ILON,ALEG,ATRIGS,IMFAX,ZFA,KRET)
+        ELSE
+          CALL JSYMLL( PSHUP, KTRUNC, PSTART, ZBUILD, PLATINC, ILUNIT,
+     X                 NLEFT,ILON,ALEG,ATRIGS,IMFAX,ZFA,KRET)
+        ENDIF
+	IF( KRET.NE.0 ) GOTO 900
+C
+C       If area straddles the equator and has different number of
+C       north/south rows, only move a selection of rows to output array.
+C
+        IF( (NCASE.EQ.4).OR.(NCASE.EQ.5) ) THEN
+          CALL JMVULL( ZFA, PNORTH, PSOUTH, PWEST, PLATINC, PLONINC,
+     X                 PSTART, 0.0, NLEFT, NUMLON, ILON, IJPWR, POUTF)
+C
+C       Otherwise, move them all
+C
+        ELSE
+          CALL JMOVLL( ZFA, PNORTH, PWEST, PLATINC, PLONINC, PSTART,
+     X                 NLEFT, NUMLON, ILON, IJPWR, POUTF, NFLAG)
+        ENDIF
+C
+      ENDIF
+C
+      KRET = 0
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jallwn.F b/interpolation/jallwn.F
new file mode 100755
index 0000000..66d0189
--- /dev/null
+++ b/interpolation/jallwn.F
@@ -0,0 +1,148 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JALLWN( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    PLATINC, PLONINC, POUTF, KRET)
+C
+C---->
+C**** JALLWN
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to standard
+C     lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JALLWN( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+C    X                    PLATINC, PLONINC, POUTF, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     PNORTH   - Northernmost latitude for output field (degrees)
+C     PSOUTH   - Southernmost latitude for output field (degrees)
+C     PWEST    - Westernmost longitude for output field (degrees)
+C     PEAST    - Easternmost longitude for output field (degrees)
+C     PLATINC  - Grid interval between latitudes in degrees
+C     PLONINC  - Grid interval between longitudes in degrees
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF    - Output grid point field
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     Generates the latitudes in bands, 32 at a time plus some
+C     remainder.
+C
+C     Externals
+C     _________
+C
+C     JALLGP  - Cnverts spectral fields to lat/long grid fields.
+C     JSLLGP  - Converts stretched spectral fields to lat/long grids
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     Calls JALLGP or JSLLGP to do all the work!
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Oct 1996
+C     Replaced all code by a call to JALLGP.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Subroutine arguments
+C
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC
+      REAL      PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      REAL      POUTF
+      DIMENSION POUTF(*)
+      INTEGER   KRET
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30000 )
+C
+C     Local variables
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+      CALL JDEBUG( )
+C
+      IF( NDBG.GT.0 )
+     X  CALL INTLOG(JP_DEBUG,'JALLWN: Calling JALLGP', JPQUIET)
+C
+      IF( RISTRET.NE.0 ) THEN
+        CALL JSLLGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X               PLATINC, PLONINC, POUTF, KRET)
+      ELSE
+        CALL JALLGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X               PLATINC, PLONINC, POUTF, KRET)
+      ENDIF
+C
+      IF( NDBG.GT.0 )
+     X  CALL INTLOG(JP_DEBUG,'JALLWN: Returned from JALLGP', JPQUIET)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jchmod.c b/interpolation/jchmod.c
new file mode 100755
index 0000000..536a64f
--- /dev/null
+++ b/interpolation/jchmod.c
@@ -0,0 +1,65 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "fortint.h"
+
+/*
+// FORTRAN callable chmod:
+//
+//   INTEGER FUNCTION JCHMOD (NAME, MODE)
+//   CHARACTER*(*) NAME, MODE
+//
+//   The normal returned value is 0.  Any other value will be a system error
+//   number.
+//
+*/
+
+fortint jchmod_(char * filename, char * char_mode, long l1, long l2)
+{
+mode_t mode = 0;
+int i, status = 0;
+char * name;
+
+    if( (*char_mode) == '0' )
+    {
+      for( i = 0; i < l2; i++)
+        mode = (mode*8) + (*(char_mode+i)-'0');
+    }
+    else
+    {
+      for( i = 0; i < l2; i++)
+        mode = (mode*10) + (*(char_mode+i)-'0');
+    }
+
+    name = (char*) malloc(l1+1);
+    for( i = 0; i < l1; i++)
+      name[i] = filename[i];
+    name[l1] = '\0';
+
+    status = chmod(name, mode);
+    if( status ) {
+      perror("JCHMOD error");
+      exit(1);
+    }
+
+    free(name);
+
+    return (fortint) status;
+}
+
+fortint jchmod(char * filename, char * char_mode, long l1, long l2) {
+  return jchmod_(filename,char_mode,l1,l2);
+}
diff --git a/interpolation/jdebug.F b/interpolation/jdebug.F
new file mode 100755
index 0000000..b4dab35
--- /dev/null
+++ b/interpolation/jdebug.F
@@ -0,0 +1,147 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JDEBUG( )
+C
+C---->
+C**** JDEBUG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine checks whether the debug flag is to be turned on.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JDEBUG( )
+C
+C     Input parameters
+C     ________________
+C
+C     None
+C
+C
+C     Output parameters
+C     ________________
+C
+C     None
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG - set flag NDBG.
+C     JDCSPGP - set flag LFREECF, etc.
+C
+C
+C     Method
+C     ______
+C
+C     On first call, checks whether or not the environment 
+C     variable JDCNDBG exists.
+C
+C
+C     Externals
+C     _________
+C
+C     GETENV    - Checks value of an environment variable.
+C     INTLOGD   - Switchs on/off the printing off interpoaltion messages
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Mar 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      5 Sep 1995
+C     Add call to intlogd.
+C
+C     J.D.Chambers      *ECMWF*      19 Mar 1998
+C     Add setting of LFREECF, etc
+C
+C----<
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "jparam2.h"
+C
+C     Local variables
+C
+      INTEGER NFIRST
+      DATA NFIRST/0/
+      CHARACTER*12 YFLAG
+      SAVE NFIRST
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF( NFIRST.EQ.0 ) THEN
+        NFIRST = 1
+C
+C       Set debug level to control which messages are displayed
+C
+        CALL GETENV('JDCNDBG', YFLAG)
+        IF( YFLAG(1:1).EQ.' ' ) NDBG = 0
+        IF( YFLAG(1:1).EQ.'1' ) NDBG = 1
+        IF( YFLAG(1:1).EQ.'2' ) NDBG = 2
+        IF( YFLAG(1:1).EQ.'3' ) NDBG = 3
+        IF( NDBG.EQ.0 ) THEN
+          CALL INTLOGD(0)
+        ELSE
+          CALL INTLOGD(1)
+        ENDIF
+C
+C       Initialise the flags controlling handling of spectral -> grid
+C       interpolation coefficients memory unless already set by user
+C
+        IF( NFREECF.NE.11041967 ) THEN
+          LFREECF = .FALSE.
+          NFREECF = 11041967
+        ENDIF
+C
+C       Clear the sizes of the memory areas used for coefficients in
+C       spectral -> grid interpolations
+C
+        NISIZE6 = 0
+        NISIZE7 = 0
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jfindfn.F b/interpolation/jfindfn.F
new file mode 100755
index 0000000..457d735
--- /dev/null
+++ b/interpolation/jfindfn.F
@@ -0,0 +1,121 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION JFINDFN( DIRNAME, FILENAME, KLEN, KUNIT)
+C
+C---->
+C**** JFINDFN
+C
+C     Purpose
+C     _______
+C
+C     Completes the pathname given by a directory and filename, and
+C     checks if the file exists.
+C
+C     Interface
+C     _________
+C
+C     LFOUND = JFINDFN( DIRNAME, FILENAME, KLEN, KUNIT)
+C
+C     Input parameters
+C     ________________
+C
+C     DIRNAME  - the directory name.
+C     FILENAME - the file name.
+C     KLEN     - number of characters in the name
+C
+C     Output parameters
+C     _________________
+C
+C     The function returns .TRUE. if the file is opened; in which case:
+C     FILENAME - the full pathname.
+C     KLEN     - number of characters in the full pathname
+C     KUNIT    - the opened file descriptor (from PBOPEN).
+C
+C     Otherwise it returns .FALSE. and FILENAME and KLEN are unchanged
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     PBOPEN  - opens a file.
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     None.
+C 
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+Cjdc  INTEGER JPROUTINE
+Cjdc  PARAMETER ( JPROUTINE = 30800 )
+C
+C     Subroutine arguments
+      CHARACTER*(*) DIRNAME, FILENAME
+      INTEGER KLEN, KUNIT
+C
+C     Local variables
+      INTEGER IBLANK, IRET
+      CHARACTER*512 FULLPATH
+      CHARACTER*256 SAVENAME
+C
+
+C     _______________________________________________________
+C
+C*    Section 1. Try the full path name..
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      JFINDFN = .TRUE.
+      SAVENAME = FILENAME
+C
+      IBLANK = INDEX(DIRNAME, ' ') - 1
+      FULLPATH  = DIRNAME(1:IBLANK) // '/' // FILENAME(1:KLEN)
+      IBLANK = INDEX(FULLPATH, ' ') - 1
+      FILENAME(1:IBLANK) = FULLPATH(1:IBLANK)
+C
+Cjdc  print*,'***',FILENAME(1:IBLANK),'***'
+      CALL PBOPEN(KUNIT, FILENAME(1:IBLANK), 'r', IRET)
+      IF( IRET.NE.0 ) THEN
+        FILENAME = SAVENAME
+        JFINDFN = .FALSE.
+      ELSE
+        KLEN = INDEX(FULLPATH, ' ') - 1
+        FILENAME(1:KLEN) = FULLPATH(1:KLEN)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jfindfn3.F b/interpolation/jfindfn3.F
new file mode 100755
index 0000000..ece5c80
--- /dev/null
+++ b/interpolation/jfindfn3.F
@@ -0,0 +1,121 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION JFINDFN3( DIRNAME, FILENAME, KLEN, KUNIT)
+C
+C---->
+C**** JFINDFN
+C
+C     Purpose
+C     _______
+C
+C     Completes the pathname given by a directory and filename, and
+C     checks if the file exists.
+C
+C     Interface
+C     _________
+C
+C     LFOUND = JFINDFN( DIRNAME, FILENAME, KLEN, KUNIT)
+C
+C     Input parameters
+C     ________________
+C
+C     DIRNAME  - the directory name.
+C     FILENAME - the file name.
+C     KLEN     - number of characters in the name
+C
+C     Output parameters
+C     _________________
+C
+C     The function returns .TRUE. if the file is opened; in which case:
+C     FILENAME - the full pathname.
+C     KLEN     - number of characters in the full pathname
+C     KUNIT    - the opened file descriptor (from PBOPEN).
+C
+C     Otherwise it returns .FALSE. and FILENAME and KLEN are unchanged
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     PBOPEN  - opens a file.
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     None.
+C 
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+Cjdc  INTEGER JPROUTINE
+Cjdc  PARAMETER ( JPROUTINE = 30800 )
+C
+C     Subroutine arguments
+      CHARACTER*(*) DIRNAME, FILENAME
+      INTEGER KLEN, KUNIT
+C
+C     Local variables
+      INTEGER IBLANK, IRET
+      CHARACTER*512 FULLPATH
+      CHARACTER*256 SAVENAME
+C
+
+C     _______________________________________________________
+C
+C*    Section 1. Try the full path name..
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      JFINDFN3 = .TRUE.
+      SAVENAME = FILENAME
+C
+      IBLANK = INDEX(DIRNAME, ' ') - 1
+      FULLPATH  = DIRNAME(1:IBLANK) // '/' // FILENAME(1:KLEN)
+      IBLANK = INDEX(FULLPATH, ' ') - 1
+      FILENAME(1:IBLANK) = FULLPATH(1:IBLANK)
+C
+Cjdc  print*,'***',FILENAME(1:IBLANK),'***'
+      CALL PBOPEN3(KUNIT, FILENAME(1:IBLANK), 'r', IRET)
+      IF( IRET.NE.0 ) THEN
+        FILENAME = SAVENAME
+        JFINDFN3 = .FALSE.
+      ELSE
+        KLEN = INDEX(FULLPATH, ' ') - 1
+        FILENAME(1:KLEN) = FULLPATH(1:KLEN)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jfindir.F b/interpolation/jfindir.F
new file mode 100755
index 0000000..3bd08b9
--- /dev/null
+++ b/interpolation/jfindir.F
@@ -0,0 +1,101 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION JFINDIR( ENVNAME, DIRNAME)
+C
+C---->
+C**** JFINDIR
+C
+C     Purpose
+C     _______
+C
+C     This routine finds the directory specified by an environment
+C     variable.
+C
+C     Interface
+C     _________
+C
+C     LFOUND = JFINDIR( ENVNAME, DIRNAME)
+C
+C     Input parameters
+C     ________________
+C
+C     ENVNAME - The environment variable.
+C
+C     Output parameters
+C     _________________
+C
+C     DIRNAME - The directory name (if found).
+C
+C     The function returns .TRUE. if the environment variable gives
+C     a directory name; otherwise it returns .FALSE.
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     Reference
+C     _________
+C
+C     GETENV  - to read the envirment variable.
+C
+C     Comments
+C     ________
+C
+C     None.
+C 
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+Cjdc  INTEGER JPROUTINE
+Cjdc  PARAMETER ( JPROUTINE = 30800 )
+C
+C     Subroutine arguments
+      CHARACTER*(*) ENVNAME, DIRNAME
+C
+C     Local variables
+      INTEGER IBLANK
+C
+C     _______________________________________________________
+C
+C*    Section 1. Try the environment variable.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      JFINDIR = .TRUE.
+C
+      CALL GETENV(ENVNAME, DIRNAME)
+C
+C     See if a name was returned.
+      IBLANK = INDEX(DIRNAME, ' ')
+      IF ( IBLANK.LE.1 ) JFINDIR = .FALSE.
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jgetgg.F b/interpolation/jgetgg.F
new file mode 100755
index 0000000..25298bf
--- /dev/null
+++ b/interpolation/jgetgg.F
@@ -0,0 +1,402 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JGETGG( KNUM, HTYPE, PLAT, KPTS, KRET)
+C
+C---->
+C**** JGETGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine reads the definition of a gaussian grid.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JGETGG( KNUM, HTYPE, PLAT, KPTS, KRET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KNUM     - Gaussian grid number
+C     HTYPE    - Gaussian grid type
+C                = 'R' for reduced, 
+C                = 'F' for full
+C                = 'U' for a user defined gaussian grid
+C     KPTS     - Array giving users definition of the number of points
+C                at each gaussian latitude if HTYPE  = 'U'
+C
+C
+C     Output parameters
+C     ________________
+C
+C     PLAT     - Array of gaussian latitudes (both hemispheres)
+C     KPTS     - Array giving number of points at each gaussian 
+C                latitude, both hemispheres
+C                ( unchanged from input if HTYPE  = 'U' )
+C     KRET      - Return status code
+C                0 = OK
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     If HTYPE = 'U', the users definition of the grid is used.
+C     Latitudes values are calculated corresponding to KNUM.
+C
+C     An array of predefined values is used.
+C
+C
+C     Externals
+C     _________
+C
+C     GETENV   - Get value of an environment variable
+C     INTLOG   - Output log message
+C     IGGLAT   - Computes Gaussian latitude lines for given truncation.
+C     EMOSNUM  - Gives current EMOSLIB version number.
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     None
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF      Jan 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF      Apr 1995
+C     Use predefined definition file for N80 and N160 to cope with
+C     changes in the 'standard' definition.
+C
+C     J.D.Chambers      ECMWF      Apr 1996
+C     Call JGGLAT if regular grid but not N80 or N160
+C
+C     J.D.Chambers      ECMWF      Apr 1996
+C     Fixup standard pathnames for VPPs.
+C     Read array of values from file if possible (once only).
+C
+C----<
+C     -----------------------------------------------------------------|
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMAXN
+      PARAMETER ( JPROUTINE = 30100 )
+      PARAMETER ( JPMAXN = 4000 )
+C                           `---> dimension for internal array for
+C                                 gaussian grid definitions
+C
+C     Subroutine arguments
+C
+      INTEGER KNUM, KPTS, KRET
+      CHARACTER*1 HTYPE
+      DIMENSION KPTS(*)
+      REAL PLAT
+      DIMENSION  PLAT(*)
+C
+C     Local variables
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "intf.h"
+#include "rgauss_032.h"
+#include "rgauss_048.h"
+#include "rgauss_064.h"
+#include "rgauss_080.h"
+#include "rgauss_080_19940113.h"
+#include "rgauss_128.h"
+#include "rgauss_160.h"
+#include "rgauss_160_19931222.h"
+#include "rgauss_200.h"
+#include "rgauss_256.h"
+#include "rgauss_320.h"
+#include "rgauss_400.h"
+#include "rgauss_512.h"
+#include "rgauss_640.h"
+#include "rgauss_1024.h"
+#include "rgauss_2000.h"
+C
+      CHARACTER*6 YEMOSNM
+      INTEGER IEMOSNM
+      INTEGER IERR, JJPR, JJERR
+      INTEGER LOOP, NLAT, IOFFSET
+      INTEGER IMAGE, K1, INUM, NGOT
+C
+C     Externals
+C
+      INTEGER EMOSNUM, IGGLAT
+      EXTERNAL EMOSNUM, IGGLAT
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.    Set up standard latitudes
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      IF( KNUM.GT.JPMAXN) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JGETGG: Grid too big for internal array dimension ',JPMAXN)
+        GOTO 910
+      ENDIF
+C
+      INUM = KNUM*2
+C
+      IF( (HTYPE.EQ.'U').OR.(HTYPE.EQ.'u') ) GOTO 500
+      IF( (HTYPE.EQ.'R').OR.(HTYPE.EQ.'r') ) GOTO 200
+C
+C     If a regular gaussian grid, calculate the gaussian latitudes
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'JGETGG: Calculate the gaussian latitudes for N = ',KNUM)
+C
+      JJPR  = 1
+      JJERR = 1
+      IERR  = IGGLAT(INUM, PLAT, JJPR, JJERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'JGETGG: IGGLAT call failed',IERR)
+        KRET = IERR
+        GOTO 990
+      ENDIF
+C
+C     Fill in the number of points at each latitude
+C
+      CALL INTLOG(JP_DEBUG,'JGETGG: Regular gaussian grid N ',KNUM)
+C
+      DO LOOP = 1, INUM
+        KPTS(LOOP) = KNUM*4
+      ENDDO
+C
+      GOTO 930
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.    Read REDUCED gaussian definitions from array
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Check that the definition is known
+C
+      IF( (KNUM.NE. 32 ).AND.
+     X    (KNUM.NE. 48 ).AND.
+     X    (KNUM.NE. 64 ).AND.
+     X    (KNUM.NE. 80 ).AND.
+     X    (KNUM.NE.128 ).AND.
+     X    (KNUM.NE.160 ).AND.
+     X    (KNUM.NE.200 ).AND.
+     X    (KNUM.NE.256 ).AND.
+     X    (KNUM.NE.320 ).AND.
+     X    (KNUM.NE.400 ).AND.
+     X    (KNUM.NE.512 ).AND.
+     X    (KNUM.NE.640 ).AND.
+     X    (KNUM.NE.1024 ).AND.
+     X    (KNUM.NE.2000 ) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JGETGG: unknown reduced gaussian grid definition: ', KNUM)
+        GOTO 910
+      ENDIF
+C
+C     Fill in the gaussian latitudes
+C
+      JJPR  = 1
+      JJERR = 1
+      IERR  = IGGLAT(INUM, PLAT, JJPR, JJERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'JGETGG: IGGLAT call failed',IERR)
+        KRET = IERR
+        GOTO 990
+      ENDIF
+C
+C     Fill the array for each row in both hemispheres.
+C
+      IF( KNUM.EQ. 32 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG032(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSEIF( KNUM.EQ. 48 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG048(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+
+      ELSEIF( KNUM.EQ. 64 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG064(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ. 80 ) THEN
+C
+        IF( NGSPEC.EQ.12 ) THEN
+          DO LOOP = 1, KNUM
+            IMAGE       = INUM - LOOP +1
+            KPTS(LOOP)  = QG08012(LOOP)
+            KPTS(IMAGE) = KPTS(LOOP)
+          ENDDO
+          GOTO 930
+        ELSE
+          DO LOOP = 1, KNUM
+            IMAGE       = INUM - LOOP +1
+            KPTS(LOOP)  = QG08018(LOOP)
+            KPTS(IMAGE) = KPTS(LOOP)
+          ENDDO
+          GOTO 930
+        ENDIF
+C
+      ELSE IF( KNUM.EQ.128 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG128(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ.160 ) THEN
+        IF( NGSPEC.EQ.12 ) THEN
+          DO LOOP = 1, KNUM
+            IMAGE       = INUM - LOOP +1
+            KPTS(LOOP)  = QG16012(LOOP)
+            KPTS(IMAGE) = KPTS(LOOP)
+          ENDDO
+          GOTO 930
+        ELSE
+          DO LOOP = 1, KNUM
+            IMAGE       = INUM - LOOP +1
+            KPTS(LOOP)  = QG16018(LOOP)
+            KPTS(IMAGE) = KPTS(LOOP)
+          ENDDO
+          GOTO 930
+        ENDIF
+C
+      ELSE IF( KNUM.EQ.200 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG200(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ.256 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG256(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ.320 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG320(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ.400 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG400(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ.512 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG512(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE IF( KNUM.EQ.640 ) THEN
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG640(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+C
+      ELSE
+        DO LOOP = 1, KNUM
+          IMAGE       = INUM - LOOP +1
+          KPTS(LOOP)  = QG1024(LOOP)
+          KPTS(IMAGE) = KPTS(LOOP)
+        ENDDO
+        GOTO 930
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.    Use User's gaussian definitions from array
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'JGETGG: Read definitions from User array', JPQUIET)
+C
+C     Fill the array for each row in both hemispheres.
+C
+      DO LOOP = 1, INUM
+        PLAT(LOOP) = ROGAUSS(LOOP)
+        KPTS(LOOP) = NOLPTS(LOOP)
+      ENDDO
+C
+      GOTO 930
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+ 910  CONTINUE
+      KRET = JPROUTINE + 2
+      CALL INTLOG(JP_ERROR,
+     X  'JGETGG: No suitable gaussian grid definition found.',JPQUIET)
+      GOTO 990
+C
+ 930  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jgglat.F b/interpolation/jgglat.F
new file mode 100755
index 0000000..66b433d
--- /dev/null
+++ b/interpolation/jgglat.F
@@ -0,0 +1,401 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION JGGLAT(KLAT, PGAUSS)
+C
+C---->
+C**** *JGGLAT* - Routine to compute Gaussian abscissae
+C
+C     PURPOSE
+C     _______
+C
+C     This routine computes Gaussian lines of latitude for a given
+C     truncation.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = JGGLAT(KLAT, PGAUSS)
+C
+C     Input parameters
+C     ________________
+C
+C     KLAT       - This is the number of lines of latitude from pole to
+C                  pole.
+C
+C     Output parameters
+C     ________________
+C
+C     PGAUSS     - The Gaussian lines of latitude for truncation
+C                  KLAT / 2.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     1  The Newton iteration failed to converge when generating
+C        Gaussian lines of latitude.
+C
+C     MARSINT problem - Please report this to Meteorological
+C     Applications.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     JBESS    - This routine is used to generate initial
+C                  approximations to the Gaussian latitudes.
+C
+C     METHOD
+C     ______
+C
+C     JBESS is used to provide zeros of the Bessel function J0,
+C     which are used as starting approximations to the Gaussian
+C     latitudes. Newton iteration is used to generate the latitudes
+C     from these approximations.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C
+C     This routine is adapted from that in the old Marsint library.
+C     The interface and the variable names have been modified.
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+         IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Dummy arguments
+      INTEGER KLAT
+C
+      REAL PGAUSS (*)
+C
+C     Local variables
+C
+      INTEGER ITRUNC, IERR
+C
+C     Loop control variables
+C
+      INTEGER JLAT, JITER, JLN
+C
+      REAL ZRADDEG, ZCON, ZLAT, ZROOT
+      REAL ZKM1, ZKM2, ZLN, ZFUNC, ZDERIV, ZMOVE
+C
+C     Function externals
+C
+      INTEGER JBESS
+C
+C     _______________________________________________________
+C
+C*    Section 1. Set constants and get initial approximation.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      JGGLAT = 0
+C
+      ZRADDEG = 180.0 / PPI
+C
+      ZCON = (PPONE - (PPTWO / PPI) ** 2) * PPQUART
+C
+      ZLAT = KLAT
+      ITRUNC = KLAT / 2
+C
+      IERR = JBESS (ITRUNC, PGAUSS)
+C
+C     _______________________________________________________
+C
+C*    Section 2. Compute abscissae
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      DO 240 JLAT = 1, ITRUNC
+C
+C     First approximation for ZROOT
+C
+         ZROOT = COS (PGAUSS (JLAT) /
+     1      SQRT ( (ZLAT + PPHALF) ** 2 + ZCON) )
+C
+C     Perfrom loop of Newton iterations
+C
+         DO 220 JITER =1, JPMAXITER
+C
+            ZKM2 = PPONE
+            ZKM1 = ZROOT
+C
+C     Compute Legendre polynomial
+C
+            DO 210 JLN = 2, KLAT
+C
+               ZLN = JLN
+C
+               ZFUNC = ( (PPTWO * ZLN - PPONE) * ZROOT * ZKM1 -
+     1            (ZLN - PPONE) * ZKM2) / ZLN
+C
+               ZKM2 = ZKM1
+               ZKM1 = ZFUNC
+C
+  210       CONTINUE
+C
+C     Perform Newton iteration
+C
+C
+            ZDERIV = (ZLAT * (ZKM2 - ZROOT * ZFUNC) ) /
+     1         (PPONE - ZROOT ** 2)
+C
+            ZMOVE = ZFUNC / ZDERIV
+C
+            ZROOT = ZROOT - ZMOVE
+C
+C     If ABS (ZMOVE) < PPEPSA leave iteration loop because sufficient
+C     accuracy has been achieved.
+C
+            IF (ABS (ZMOVE) .LE. PPEPSA) GOTO 230
+C
+  220    CONTINUE
+C
+C     Routine fails if no convergence after JPMAXITER iterations.
+C
+         JGGLAT = 1
+         GO TO 900
+C
+  230    CONTINUE
+C
+C*    Set North and South values using symmetry.
+C
+         PGAUSS (JLAT) = ASIN (ZROOT) * ZRADDEG
+         PGAUSS (KLAT + 1 - JLAT) = - PGAUSS (JLAT)
+C
+  240 CONTINUE
+C
+C
+      IF (KLAT .NE. ITRUNC * 2) PGAUSS (ITRUNC + 1) = PPZERO
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
+      INTEGER FUNCTION JBESS (KTRUNC, PBESJ0)
+C
+C**** *JBESS* - Routine to return zeros of the J0 Bessel function.
+C
+C     PURPOSE
+C     _______
+C
+C     This routine returns up to JPLOOK zeros of the J0 Bessel function.
+C     If more than JPLOOK zeros are required then approximate zeros are
+C     returned after the JPLOOK-th.
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = JBESS (KTRUNC, PBESJ0)
+C
+C     Input parameters
+C     ________________
+C
+C     KTRUNC     - This is the number of zeros of the J0 Bessel
+C                  function required.
+C
+C     Output parameters
+C     ________________
+C
+C     PBESJ0     - The output array of zeros of the J0 Bessel function.
+C
+C     Return Value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     None
+C
+C     METHOD
+C     ______
+C
+C     The first JPLOOK values are obtained from a look-up table (ZPBES).
+C     Any additional values requested are approximated by adding
+C     PI (3.14159...) to the previous value.
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     This routine is adapted from that in the old Marsint library.
+C     The interface and the variable names have been modified.
+C
+C     Program contains sections 0 to 2 and 9
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+C
+C     Dummy arguments
+C
+      INTEGER KTRUNC
+C
+      REAL PBESJ0 (*)
+C
+C     Local variables
+C
+C
+      INTEGER ILOOK
+      INTEGER JAPPRX, JLOOK
+C
+      REAL ZPBES (JPLOOK)
+C
+      DATA ZPBES        /   2.4048255577E0,   5.5200781103E0,
+     1    8.6537279129E0,  11.7915344391E0,  14.9309177086E0,
+     2   18.0710639679E0,  21.2116366299E0,  24.3524715308E0,
+     3   27.4934791320E0,  30.6346064684E0,  33.7758202136E0,
+     4   36.9170983537E0,  40.0584257646E0,  43.1997917132E0,
+     5   46.3411883717E0,  49.4826098974E0,  52.6240518411E0,
+     6   55.7655107550E0,  58.9069839261E0,  62.0484691902E0,
+     7   65.1899648002E0,  68.3314693299E0,  71.4729816036E0,
+     8   74.6145006437E0,  77.7560256304E0,  80.8975558711E0,
+     9   84.0390907769E0,  87.1806298436E0,  90.3221726372E0,
+     A   93.4637187819E0,  96.6052679510E0,  99.7468198587E0,
+     1  102.8883742542E0, 106.0299309165E0, 109.1714896498E0,
+     2  112.3130502805E0, 115.4546126537E0, 118.5961766309E0,
+     3  121.7377420880E0, 124.8793089132E0, 128.0208770059E0,
+     4  131.1624462752E0, 134.3040166383E0, 137.4455880203E0,
+     5  140.5871603528E0, 143.7287335737E0, 146.8703076258E0,
+     6  150.0118824570E0, 153.1534580192E0, 156.2950342685E0 /
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Extract initial values from look up table
+C
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      JBESS = 0
+C
+      ILOOK = MIN(KTRUNC, JPLOOK)
+C
+      DO 110 JLOOK = 1, ILOOK
+         PBESJ0(JLOOK) = ZPBES(JLOOK)
+  110 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 2. Approximate any extra values required
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      DO 210 JAPPRX = ILOOK + 1, KTRUNC
+         PBESJ0(JAPPRX) = PBESJ0(JPLOOK) + PPI * (JAPPRX - ILOOK)
+  210 CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jindex.c b/interpolation/jindex.c
new file mode 100755
index 0000000..a9eae2d
--- /dev/null
+++ b/interpolation/jindex.c
@@ -0,0 +1,42 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include "fortint.h"
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define JINDEX jindex
+#else
+#define JINDEX jindex_
+#endif
+
+fortint JINDEX(char * name, long len) {
+/*
+// Called from Fortran:
+//
+//   LEN = JINDEX(NAME)
+//
+//   Returns the length of the character string (including embedded
+//   blanks).
+*/
+fortint offset = len;
+char next;
+
+  do {
+    offset--;
+    next = *(name+offset);
+    if( next != ' ' ) {
+      return (offset+1);
+    }
+  } while( offset >= 0 );
+
+  return len;
+
+}
diff --git a/interpolation/jintend.F b/interpolation/jintend.F
new file mode 100755
index 0000000..9a927a3
--- /dev/null
+++ b/interpolation/jintend.F
@@ -0,0 +1,129 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JINTEND
+C
+C---->
+C**** JINTEND
+C
+C     PURPOSE
+C     _______
+C
+C     This routine deallocates heap memory (if any) allocated
+C     by JINTLL, JINTGG and/or INTF.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JINTEND( )
+C
+C
+C     Input parameters
+C     ________________
+C
+C     None.
+C
+C
+C     Output parameters
+C     ________________
+C
+C     None.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C
+C     Externals
+C     _________
+C
+C     None.
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      May 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Local variables
+C
+#ifdef POINTER_64
+      INTEGER*8 IZERO
+#else
+      INTEGER IZERO
+#endif
+      INTEGER IRET
+      DATA IZERO/0/
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Deallocate heap memory.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Lat/long (JINTLL)
+C
+      CALL JMEMHAN( 1, IZERO, 0, 0, IRET )
+C
+C     Gaussian (JINTGG)
+C
+      CALL JMEMHAN( 2, IZERO, 0, 0, IRET )
+C
+C     Scratch (INTF)
+C
+      CALL JMEMHAN( 3, IZERO, 0, 0, IRET )
+      CALL JMEMHAN( 4, IZERO, 0, 0, IRET )
+      CALL JMEMHAN( 5, IZERO, 0, 0, IRET )
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/interpolation/jintgg.F b/interpolation/jintgg.F
new file mode 100755
index 0000000..2b3bcac
--- /dev/null
+++ b/interpolation/jintgg.F
@@ -0,0 +1,417 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JINTGG( KIBUFF, KLENI, PWEST, PEAST, PNORTH, PSOUTH,
+     X                   KNUM, HTYPE, KPTS, LUV, KOBUFF, KLENO, KBITS,
+     X                   KRET)
+C
+C---->
+C**** JINTGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to gaussian
+C     grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JINTGG( KIBUFF, KLENI, PWEST, PEAST, PNORTH, PSOUTH,
+C    X             KNUM, HTYPE, KPTS, LUV, KOBUFF, KLENO, KBITS, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KIBUFF  - Array containing input spherical harmonic field
+C               in GRIB format.
+C     KLENI   - Length in words of KIBUFF.
+C     PWEST   - Required area, west longitude(degrees)
+C     PEAST   - Required area, east longitude(degrees)
+C     PNORTH  - Required area, north latitude(degrees)
+C     PSOUTH  - Required area, south latitude(degrees)
+C     KNUM    - Gaussian grid number
+C     HTYPE   - Gaussian grid type
+C               = 'R' for reduced, 
+C               = 'F' for full
+C               = 'U' for user-defined reduced gaussian grid
+C     KPTS    - Array specifying number of points at each line of
+C               latitude if HTYPE = 'U'.
+C               (Must be big enough for both hemispheres, but only
+C                needs to give Northern hemisphere values from pole
+C                to latitude nearest the Equator.)
+C     LUV     - Code indicating whether or not the field is a wind
+C               component field;
+C               = 1 if U or V field.
+C     KLENO   - Length in words of KOBUFF.
+C     KBITS   - Number of bits to be used for packing values in KOBUFF.
+C
+C
+C     Output parameters
+C     ________________
+C
+C
+C     KPTS    - Array specifying number of points at each line of
+C               latitude; user defined values if HTYPE = 'U'.
+C               (Must be big enough for both hemispheres)
+C     KOBUFF  - Array containing output spherical harmonic field
+C               in GRIB format.
+C     KLENO   - Number of words of KOBUFF occupied by GRIB.
+C     KRET    - Return status code
+C               0 = OK
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDGB
+C
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C
+C     Externals
+C     _________
+C
+C     JDEBUG    - Checks environment variable to switch on/off debug
+C     JGETGG    - Get the gaussian grid definition
+C     GRIBEX    - Decodes/encodes GRIB product
+C     JAGGGP    - Transform from spherical harmonics to gaussian grid.
+C     JMEMHAN   - Handles memory allocation
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     If PWEST, PEAST, PNORTH, PSOUTH are all 0.0, then the area
+C     defaults to global.
+C
+C     If KBITS, the number of bits to be used for packing values, is
+C     0, the number of bits used in the input spectral field is used.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      May 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30200 )
+C     Arrays are dimensioned to accommodate spectral T639 data and
+C     gaussian resolution of N160
+      INTEGER JPACK, JPMNUM
+      PARAMETER (JPACK=420000)
+      PARAMETER (JPMNUM=160)
+C
+C     Subroutine arguments
+      INTEGER KIBUFF, KLENI, KNUM, KPTS, KOBUFF, KLENO, KBITS, KRET
+      CHARACTER*1 HTYPE
+      INTEGER LUV
+      DIMENSION KIBUFF(KLENI)
+      DIMENSION KPTS(*)
+      DIMENSION KOBUFF(*)
+      REAL PWEST, PEAST, PNORTH, PSOUTH
+C
+C     Local variables
+      REAL NORTH, SOUTH, EAST, WEST
+      INTEGER IPUNP, ITRUNC, NBITS, JPLOOP
+      INTEGER ISEC0, ISEC1, ISEC2, ISEC3, ISEC4
+      REAL ZSEC2, ZSEC3, ZSEC4
+#ifdef POINTER_64
+      INTEGER*8 IZOUTBF
+#endif
+      REAL ZOUTBF
+      POINTER ( IZOUTBF, ZOUTBF )
+      DIMENSION ZOUTBF( 1 )
+      INTEGER IWORD
+      REAL ZLAT
+      DIMENSION ZLAT(2*JPMNUM)
+C
+C     Array for integer parameters from section 0 of GRIB message.
+      DIMENSION ISEC0(JPGRIB_ISEC0)
+C
+C     Array for integer parameters from section 1 of GRIB message.
+      DIMENSION ISEC1(JPGRIB_ISEC1)
+C
+C     Array for integer parameters from section 2 of GRIB message.
+      DIMENSION ISEC2(JPGRIB_ISEC2)
+C
+C     Array for integer parameters from section 3 of GRIB message.
+      DIMENSION ISEC3(JPGRIB_ISEC3)
+C
+C     Array for integer parameters from section 4 of GRIB message.
+      DIMENSION ISEC4(JPGRIB_ISEC4)
+C
+C     Array for real parameters from section 2 of GRIB message.
+      DIMENSION ZSEC2(JPGRIB_RSEC2)
+C
+C     Array for real parameters from section 3 of GRIB message.
+      DIMENSION ZSEC3(JPGRIB_RSEC3)
+C
+C     Array for real parameters from section 4 of GRIB message.
+C     This is the binary data section and the array to hold
+C     the unpacked data may need to be 4 times as long as that
+C     for the packed data.
+C
+      DIMENSION ZSEC4(JPACK)
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Unpack the input GRIB product.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      CALL JDEBUG( )
+C
+      IF ( NDBG .GT. 0) THEN
+        CALL INTLOG(JP_DEBUG,'JINTGG - Input parameters:', JPQUIET)
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',KIBUFF( NDBGLP ))
+  101   CONTINUE
+        CALL INTLOG(JP_DEBUG,
+     X    'JINTGG - Length(words) of input product = ', KLENI)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTGG - Required area, west long(deg) = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTGG - Required area, east long(deg) = ', PEAST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTGG - Required area, north lat(deg) = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTGG - Required area, south lat(deg) = ', PSOUTH)
+        CALL INTLOG(JP_DEBUG,'JINTGG - Gaussian grid number = ', KNUM)
+        CALL INTLOG(JP_DEBUG,'JINTGG - Gaussian grid type = ', HTYPE)
+        CALL INTLOG(JP_DEBUG,'JINTGG - Wind field code = ', LUV)
+        CALL INTLOG(JP_DEBUG,
+     X    'JINTGG - Length in words of KOBUFF = ', KLENO)
+        CALL INTLOG(JP_DEBUG,
+     X  'JINTGG - Number of bits for packing = ', KBITS)
+      ENDIF
+C
+#ifdef CRAY
+      IPUNP = JPACK*8
+#else
+      IPUNP = JPACK*4
+#endif
+      KRET = 1
+      IF ( NDBG .GT. 0) CALL GRSDBG(1)
+C
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             ZSEC4,IPUNP,KIBUFF,KLENI,IWORD,'D',KRET)
+C
+      IF ( NDBG .GT. 0) CALL INTLOG(JP_DEBUG,
+     X  'JINTGG - Return from GRIBEX decoding = ', KRET)
+C
+C     Check return code.
+      IF (KRET.GT.0) GOTO 900
+C
+C     Set number of bits to same as input if user did not give a number
+      IF ( KBITS .LE. 0 ) THEN
+        NBITS = ISEC4(2)
+      ELSE
+        NBITS = KBITS
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2.    Interpolate to a gaussian grid.
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Setup geographical limits
+      IF ( (PWEST.EQ.0.0) .AND. (PEAST.EQ.0.0) .AND.
+     X     (PNORTH.EQ.0.0) .AND. (PSOUTH.EQ.0.0) ) THEN
+        NORTH = 90.0
+        SOUTH = -90.0
+        WEST  = 0.0
+        EAST  = 360.0 - (360.0/FLOAT(4*KNUM))
+      ELSE
+        WEST  = PWEST
+        EAST  = PEAST
+        NORTH = PNORTH
+        SOUTH = PSOUTH
+      ENDIF
+C
+C     Use input truncation
+      ITRUNC = ISEC2(2)
+C
+      IF ( NDBG .GT. 0) THEN
+        CALL INTLOG(JP_DEBUG,'JINTGG - WEST = ', WEST)
+        CALL INTLOG(JP_DEBUG,'JINTGG - EAST = ', EAST)
+        CALL INTLOG(JP_DEBUG,'JINTGG - NORTH = ', NORTH)
+        CALL INTLOG(JP_DEBUG,'JINTGG - SOUTH = ', SOUTH)
+        CALL INTLOG(JP_DEBUG,'JINTGG - ITRUNC = ', ITRUNC)
+      ENDIF
+C
+C     Get the gaussian grid definition
+      CALL JGETGG( KNUM, HTYPE, ZLAT, KPTS, KRET)
+C
+C     Count the points in the definition to give a memory size
+      IPUNP = 0
+      DO 210 JPLOOP = 1, KNUM*2
+        IPUNP = IPUNP + KPTS(JPLOOP)
+  210 CONTINUE
+C
+      IF ( NDBG .GT. 0) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JINTGG - Total number of grid points = ', IPUNP)
+      ENDIF
+C
+C     Allocate memory for scratch array.
+      CALL JMEMHAN( 2, IZOUTBF, IPUNP, 1, KRET)
+      IF ( KRET .NE. 0 ) THEN
+        KRET =  JPROUTINE + 1
+        CALL INTLOG(JP_ERROR,'JINTGG - Memory allocation failed.',KRET)
+        GOTO 900
+      ENDIF
+C
+      CALL JAGGGP( ZSEC4, ITRUNC, NORTH, SOUTH, WEST, EAST,
+     X                    KNUM, HTYPE, KPTS, ZOUTBF, LUV, KRET)
+C
+      IF ( KRET .NE. 0 ) GOTO 900
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Pack the output GRIB product.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+C
+      ISEC1(4) = 255
+      ISEC1(5) = 128
+      ISEC1(19) = 0
+      ISEC1(20) = 0
+C
+C     Build section 2 for gaussian grid
+      ISEC2(1) = 4
+      IF ( HTYPE .EQ. 'F' ) THEN
+        ISEC2(2) = KPTS(1)
+      ELSE
+        ISEC2(2) = 0
+      ENDIF
+      ISEC2(3) = KNUM*2
+      ISEC2(4) = ( NORTH * 1000.0 )
+      ISEC2(5) = ( WEST * 1000.0 )
+      IF ( ISEC2(5) .LT. 0 ) ISEC2(5) = 360000 + ISEC2(5)
+      IF ( ISEC2(5) .GT. 360000 ) ISEC2(5) = ISEC2(5) - 360000
+      IF ( HTYPE .EQ. 'F' ) THEN
+        ISEC2(6) = 128
+      ELSE
+        ISEC2(6) = 0
+      ENDIF
+      ISEC2(7) = ( SOUTH * 1000.0 )
+      ISEC2(8) = ( EAST * 1000.0 + 0.5 )
+      IF ( ISEC2(8) .LT. 0 ) ISEC2(8) = 360000 + ISEC2(8)
+      IF ( ISEC2(8) .GT. 360000 ) ISEC2(8) = ISEC2(8) - 360000
+      IF ( HTYPE .EQ. 'F' ) THEN
+        ISEC2(9) = NINT( 360.0/FLOAT(KPTS(1)) * 1000.0 )
+      ELSE
+        ISEC2(9) = 0
+      ENDIF
+      ISEC2(10) = KNUM
+      ISEC2(11) = 0
+      IF ( HTYPE .EQ. 'F' ) THEN
+        ISEC2(17) = 0
+      ELSE
+        ISEC2(17) = 1
+      ENDIF
+C
+C     For reduced or quasi-regular grids, fill in number of points
+C     along each parallel.
+      IF ( HTYPE .NE. 'F' ) THEN
+        DO 220 JPLOOP = 1, KNUM*2
+          ISEC2(22+JPLOOP) = KPTS(JPLOOP)
+  220   CONTINUE
+      ENDIF
+C
+C     Build section 4 for gaussian grid
+      ISEC4(1) = IPUNP
+      ISEC4(2) = NBITS
+      ISEC4(3) = 0
+      ISEC4(4) = 0
+      ISEC4(5) = 0
+      ISEC4(6) = 0
+      ISEC4(8) = 0
+      ISEC4(9) = 0
+      ISEC4(10) = 0
+      ISEC4(11) = 0
+      DO 230 JPLOOP = 12, 33
+        ISEC4(JPLOOP) = 0
+  230 CONTINUE
+C
+      IF ( NDBG .GT. 0) CALL GRSDBG(1)
+C
+      KRET = 1
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             ZOUTBF,IPUNP,KOBUFF,KLENO,KLENO,'C',KRET)
+C
+C     Check return code.
+      IF ( NDBG .GT. 0) CALL INTLOG(JP_DEBUG,
+     X    'JINTGG - status from GRIBEX encoding = ', KRET)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/interpolation/jintll.F b/interpolation/jintll.F
new file mode 100755
index 0000000..5318f81
--- /dev/null
+++ b/interpolation/jintll.F
@@ -0,0 +1,366 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JINTLL( KIBUFF, KLENI, PWEST, PEAST, PNORTH, PSOUTH,
+     X                   PLATINC, PLONINC, KOBUFF, KLENO, KBITS, KRET)
+C
+C---->
+C**** JINTLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to standard
+C     lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JINTLL( KIBUFF, KLENI, PWEST, PEAST, PNORTH, PSOUTH,
+C    X             PLATINC, PLONINC, KOBUFF, KLENO, KBITS, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KIBUFF  - Array containing input spherical harmonic field
+C               in GRIB format.
+C     KLENI   - Length in words of KIBUFF.
+C     PWEST   - Required area, west longitude(degrees)
+C     PEAST   - Required area, east longitude(degrees)
+C     PNORTH  - Required area, north latitude(degrees)
+C     PSOUTH  - Required area, south latitude(degrees)
+C     PLATINC - Required latitude interval in degrees.
+C     PLONINC - Required longitude interval in degrees.
+C     KLENO   - Length in words of KOBUFF.
+C     KBITS   - Number of bits to be used for packing values in KOBUFF.
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KOBUFF  - Array containing output spherical harmonic field
+C               in GRIB format.
+C     KLENO   - Number of words of KOBUFF occupied by GRIB.
+C     KRET    - Return status code
+C               0 = OK
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDGB
+C
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C
+C     Externals
+C     _________
+C
+C     JDEBUG    - Checks environment variable to switch on/off debug
+C     GRIBEX    - Decodes/encodes GRIB product
+C     JALLGP    - Transform from spherical harmonics to regular lat/long
+C                 grid.
+C     JMEMHAN   - Handles memory allocation.
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     If PWEST, PEAST, PNORTH, PSOUTH are all 0.0, then the area
+C     defaults to global.
+C
+C     If KBITS, the number of bits to be used for packing values, is
+C     0, the number of bits used in the input spectral field is used.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30300 )
+C     Arrays are dimensioned to accommodate spectral T639 data and
+C     maximum resolution of (0.5 * 0.5) deg.
+      INTEGER JPACK, JPMLAT, JPMLON
+      PARAMETER (JPACK=420000)
+      PARAMETER (JPMLAT=361)
+      PARAMETER (JPMLON=720)
+C
+C     Subroutine arguments
+      INTEGER KIBUFF, KLENI, KOBUFF, KLENO, KBITS, KRET
+      DIMENSION KIBUFF(KLENI)
+      DIMENSION KOBUFF(*)
+      REAL PWEST, PEAST, PNORTH, PSOUTH, PLATINC, PLONINC
+C
+C     Local variables
+      REAL NORTH, SOUTH, EAST, WEST
+      INTEGER IPUNP, ITRUNC, NBITS
+      INTEGER ISEC0, ISEC1, ISEC2, ISEC3, ISEC4
+      REAL ZSEC2, ZSEC3, ZSEC4
+#ifdef POINTER_64
+      INTEGER*8 IZOUTBF
+#endif
+      REAL ZOUTBF
+      POINTER ( IZOUTBF, ZOUTBF )
+      DIMENSION ZOUTBF( 1 )
+      INTEGER ILAT, ILON, IWORD
+C
+C     Array for integer parameters from section 0 of GRIB message.
+      DIMENSION ISEC0(JPGRIB_ISEC0)
+C
+C     Array for integer parameters from section 1 of GRIB message.
+      DIMENSION ISEC1(JPGRIB_ISEC1)
+C
+C     Array for integer parameters from section 2 of GRIB message.
+      DIMENSION ISEC2(JPGRIB_ISEC2)
+C
+C     Array for integer parameters from section 3 of GRIB message.
+      DIMENSION ISEC3(JPGRIB_ISEC3)
+C
+C     Array for integer parameters from section 4 of GRIB message.
+      DIMENSION ISEC4(JPGRIB_ISEC4)
+C
+C     Array for real parameters from section 2 of GRIB message.
+      DIMENSION ZSEC2(JPGRIB_RSEC2)
+C
+C     Array for real parameters from section 3 of GRIB message.
+      DIMENSION ZSEC3(JPGRIB_RSEC3)
+C
+C     Array for real parameters from section 4 of GRIB message.
+C     This is the binary data section and the array to hold
+C     the unpacked data may need to be 4 times as long as that
+C     for the packed data.
+C
+      DIMENSION ZSEC4(JPACK)
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Unpack the input GRIB product.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      CALL JDEBUG( )
+C
+      IF ( NDBG .GT. 0) THEN
+        CALL INTLOG(JP_DEBUG,'JINTLL - Input parameters:',JPQUIET)
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',KIBUFF( NDBGLP ))
+  101   CONTINUE
+        CALL INTLOG(JP_DEBUG,
+     X    'JINTLL - Length(words) of input product = ', KLENI)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTLL - Required area, west long(deg) = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTLL - Required area, east long(deg) = ', PEAST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTLL - Required area, north lat(deg) = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTLL - Required area, south lat(deg) = ', PSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTLL - Latitude grid interval (deg) = ', PLATINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JINTLL - Longitude grid interval (deg) = ', PLONINC)
+        CALL INTLOG(JP_DEBUG,
+     X    'JINTLL - Length in words of KOBUFF = ', KLENO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JINTLL - Number of bits for packing = ', KBITS)
+      ENDIF
+C
+#ifdef CRAY
+      IPUNP = JPACK*8
+#else
+      IPUNP = JPACK*4
+#endif
+C
+      IF ( NDBG .GT. 0) CALL GRSDBG(1)
+C
+      KRET = 1
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             ZSEC4,IPUNP,KIBUFF,KLENI,IWORD,'D',KRET)
+C
+      IF ( NDBG .GT. 0) CALL INTLOG(JP_DEBUG,
+     X    'JINTLL - Return from GRIBEX decoding = ', KRET)
+C
+C     Check return code.
+      IF (KRET.GT.0) GOTO 900
+C
+C     Set number of bits to same as input if user did not give a number
+      IF ( KBITS .LE. 0 ) THEN
+        NBITS = ISEC4(2)
+      ELSE
+        NBITS = KBITS
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2.    Interpolate to a latitude/longitude grid.
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Setup geographical limits
+      IF ( (PWEST.EQ.0.0) .AND. (PEAST.EQ.0.0) .AND.
+     X     (PNORTH.EQ.0.0) .AND. (PSOUTH.EQ.0.0) ) THEN
+        NORTH = 90.0
+        SOUTH = -90.0
+        WEST  = 0.0
+        EAST  = 360.0 - PLONINC
+      ELSE
+        WEST  = PWEST
+        EAST  = PEAST
+        NORTH = PNORTH
+        SOUTH = PSOUTH
+      ENDIF
+C
+C     Use input truncation
+      ITRUNC = ISEC2(2)
+C
+      IF ( NDBG .GT. 0) THEN
+        CALL INTLOG(JP_DEBUG,'JINTLL - WEST = ', WEST)
+        CALL INTLOG(JP_DEBUG,'JINTLL - EAST = ', EAST)
+        CALL INTLOG(JP_DEBUG,'JINTLL - NORTH = ', NORTH)
+        CALL INTLOG(JP_DEBUG,'JINTLL - SOUTH = ', SOUTH)
+        CALL INTLOG(JP_DEBUG,'JINTLL - ITRUNC = ', ITRUNC)
+      ENDIF
+C
+      ILAT = NINT( (EAST - WEST)/PLATINC ) + 1
+      ILON = NINT( (NORTH - SOUTH)/PLONINC ) + 1
+      IPUNP = ILAT * ILON
+C
+      IF ( NDBG .GT. 0) THEN
+        CALL INTLOG(JP_DEBUG,'JINTLL - Number of lat. points = ', ILAT)
+        CALL INTLOG(JP_DEBUG,'JINTLL - Number of long.points = ', ILON)
+        CALL INTLOG(JP_DEBUG,'JINTLL - Total no.of grid pnts = ', IPUNP)
+      ENDIF
+C
+C     Allocate memory for scratch array.
+      CALL JMEMHAN( 1, IZOUTBF, IPUNP, 1, KRET)
+      IF ( KRET .NE. 0 ) THEN
+        KRET =  JPROUTINE + 1
+        CALL INTLOG(JP_ERROR,'JINTLL - Memory allocation failed',KRET)
+        GOTO 900
+      ENDIF
+C
+      CALL JALLGP( ZSEC4, ITRUNC, NORTH, SOUTH, WEST, EAST,
+     X                    PLATINC, PLONINC, ZOUTBF, KRET)
+C
+      IF ( KRET .NE. 0 ) GOTO 900
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Pack the output GRIB product.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+C
+      ISEC1(4) = 255
+      ISEC1(5) = 128
+      ISEC1(19) = 0
+      ISEC1(20) = 0
+C
+      ISEC2(1) = 0
+      ISEC2(2) = ILAT
+      ISEC2(3) = ILON
+      ISEC2(4) = ( NORTH * 1000.0 )
+      ISEC2(5) = ( WEST * 1000.0 )
+      IF ( ISEC2(5) .LT. 0 ) ISEC2(5) = 360000 + ISEC2(5)
+      IF ( ISEC2(5) .GT. 360000 ) ISEC2(5) = ISEC2(5) - 360000
+      ISEC2(6) = 128
+      ISEC2(7) = ( SOUTH * 1000.0 )
+      ISEC2(8) = ( EAST * 1000.0 + 0.5 )
+      IF ( ISEC2(8) .LT. 0 ) ISEC2(8) = 360000 + ISEC2(8)
+      IF ( ISEC2(8) .GT. 360000 ) ISEC2(8) = ISEC2(8) - 360000
+      ISEC2(9) = NINT( PLONINC * 1000.0 )
+      ISEC2(10) = NINT( PLATINC * 1000.0 )
+      ISEC2(11) = 0
+      ISEC2(17) = 0
+C
+      ISEC4(1) = IPUNP
+      ISEC4(2) = NBITS
+      ISEC4(3) = 0
+      ISEC4(4) = 0
+      ISEC4(5) = 0
+      ISEC4(6) = 0
+      ISEC4(8) = 0
+      ISEC4(9) = 0
+      ISEC4(10) = 0
+      ISEC4(11) = 0
+C
+      IF ( NDBG .GT. 0) CALL GRSDBG(1)
+C
+      KRET = 1
+      CALL GRIBEX (ISEC0,ISEC1,ISEC2,ZSEC2,ISEC3,ZSEC3,ISEC4,
+     X             ZOUTBF,IPUNP,KOBUFF,KLENO,KLENO,'C',KRET)
+C
+C     Check return code.
+      IF ( NDBG .GT. 0)
+     X  CALL INTLOG(JP_DEBUG,'JINTLL - status GRIBEX coding = ', KRET)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+C
+      END
diff --git a/interpolation/jjset99.F b/interpolation/jjset99.F
new file mode 100755
index 0000000..1d5944a
--- /dev/null
+++ b/interpolation/jjset99.F
@@ -0,0 +1,213 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JJSET99(TRIGS, IFAX, N, KRET)
+C
+C---->
+C**** JJSET99
+C
+C     PURPOSE
+C     _______
+C
+C     Computes factors of N & sines and cosines required by FFT99 
+C     and FFT991.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JJSET99(TRIGS, IFAX, N, KRET))
+C
+C     Input parameters
+C     ________________
+C
+C     N      - Number to factorise.
+C
+C     Output parameters
+C     ________________
+C
+C     TRIGS  - Sines and cosines for angles 0 to pi in N steps
+C              (sin,cos,sin,cos,...)
+C     IFAX   - Allowed factors of N  from 8,6,5,4,3,2.
+C              (Only one 8 allowed).
+C              IFAX(1)  = count of factors.
+C              IFAX(2-9)= factor (or zero).
+C              IFAX(10) = N.
+C     KRET   - 0 if factorised OK.
+C
+C     Method
+C     ______
+C
+C     Look for sixes first, store factors in order: 8,6,5,4,3,2;
+C     then reverses the order for output.
+C
+C
+C     Externals
+C     _________
+C
+C     INTLOG - Log error messages.
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     This is a tidy up, based on set99.F
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31500 )
+C
+C     Subroutine arguments
+      REAL TRIGS
+      INTEGER IFAX, N, KRET
+      DIMENSION TRIGS(N), IFAX(10)
+C
+C     Local variables
+      INTEGER JFAX, LFAX, LOOP, NIL, NHL, NU, I, K, L, IFAC, NFAX
+      DIMENSION LFAX(7), JFAX(10)
+      DATA LFAX/6,8,5,4,3,2,1/
+      REAL DEL, ANGLE
+C
+C     _______________________________________________________
+C
+C     Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      DO LOOP = 1, 10
+        JFAX(LOOP) = 0
+      ENDDO
+C
+      KRET = 0
+C
+C     Generate sines and cosines for angles 0 to pi in N steps
+C
+      DEL = (2.0*PPI) / FLOAT(N)
+      NIL = 0
+      NHL = (N/2)-1
+C
+      DO K = NIL,NHL
+        ANGLE        = FLOAT(K)*DEL
+        TRIGS(2*K+1) = COS(ANGLE)
+        TRIGS(2*K+2) = SIN(ANGLE)
+      ENDDO
+C
+C     _______________________________________________________
+C
+C     Section 2.    Find allowed factors of N
+C                   (8,6,5,4,3,2; only one 8 allowed)
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Look for sixes first, store factors in order: 8,6,5,4,3,2
+C
+      NU   = N
+      IFAC = 6
+      K    = 0
+      L    = 1
+C
+C     Loop through potential factors.
+C
+  220 CONTINUE
+C
+      IF (MOD(NU,IFAC).EQ.0) THEN
+C
+C       Allowed factor found
+        K       = K+1
+C
+        IF( K.GT.8) THEN
+          CALL INTLOG(JP_ERROR,'Too many factors found factorising ',N)
+          KRET = JPROUTINE + 1
+          GOTO 910
+        ENDIF
+C
+        JFAX(K) = IFAC
+C
+C       If factor is 8 ..
+        IF (IFAC.EQ.8) THEN
+C
+C         Swap 8 into first array slot instead of 6 if 6 already found
+          IF (K.NE.1) THEN
+            JFAX(1) = 8
+            JFAX(K) = 6
+          ENDIF
+        ENDIF
+C
+C       Factor found
+        NU = NU/IFAC
+C
+C       Exit if all factors of N have been found
+        IF (NU.EQ.1) GOTO 900
+C
+C       Only one 8 allowed as a factor
+        IF (IFAC.NE.8) GOTO 220
+      ENDIF
+C
+C     Pick up next allowed factor.
+      L    = L+1
+      IFAC = LFAX(L)
+      IF (IFAC.GT.1) GOTO 220
+C
+C     Problem! All allowed factors tried but some factors still left.
+C
+      CALL INTLOG(JP_ERROR,'Illegal factors found factorising ',N)
+      KRET = JPROUTINE + 2
+      GOTO 910
+C     _______________________________________________________
+C
+C     Section 9.    All factors found.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C     Store the factors in the reverse order in the output array.
+C
+      NFAX    = K
+      IFAX(1) = NFAX
+      DO I = 1,NFAX
+        IFAX(NFAX+2-I) = JFAX(I)
+      ENDDO
+C
+      IFAX(10) = N
+C
+  910 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jmakgg.F b/interpolation/jmakgg.F
new file mode 100755
index 0000000..ff05074
--- /dev/null
+++ b/interpolation/jmakgg.F
@@ -0,0 +1,189 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMAKGG( KUNIT, KTRUNC, KROW, PLAT, PLEG, KRET)
+C
+C---->
+C**** JMAKGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine creates legendre functions for latitude rows upto
+C     the given latitude in a gaussian grid file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JMAKGG( KUNIT, KTRUNC, KROW, PLAT, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - Unit number for open file of legendre functions.
+C     KTRUNC  - Truncation.
+C     KROW    - Latitude row number in the file
+C     PLAT    - Array of latitudes for the gaussian grid
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Determine which functions already exist for the latitude rows
+C     in the file, skip to the end and create necessary extra functions
+C     and add to the file.
+C
+C     Externals
+C     _________
+C
+C     PBSEEK    - Position the coefficients file
+C     PBWRITE   - Write the coefficients file
+C     INTLOG   - Output log message
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     Only positive row numbers are allowed.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30400 )
+C
+C     Subroutine arguments
+      INTEGER KUNIT, KTRUNC, KROW, KRET
+      REAL PLAT, PLEG
+      DIMENSION PLAT(*)
+      DIMENSION PLEG(*)
+C
+C     Local variables
+      INTEGER NEWPOS, NSIZE, NRET, NROWCT, NLATIT
+      REAL ALAT, PIBY2, DEG2RAD
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+100   CONTINUE
+      IF ( KROW .LT. 0.0 ) THEN
+	KRET = JPROUTINE + 1
+	CALL INTLOG(JP_ERROR,'JMAKGG - negative row number given',KROW)
+	GOTO 990
+      ENDIF
+C
+C     Calculate the byte offset into the file where the legendre 
+C     functions for the latitude should be.
+#ifdef REAL_8
+      NSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+#else
+      NSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+#endif
+      NEWPOS = (KROW - 1) * NSIZE
+C
+C     Find the current file length
+      CALL PBSEEK( KUNIT, 0, 2, NRET)
+      IF ( NRET .LT. 0 ) THEN
+	CALL INTLOG(JP_ERROR,'JMAKGG - PBSEEK error',  NRET)
+	KRET = JPROUTINE + 2
+	GOTO 990
+      ENDIF
+C
+C     Use the length to determine how many rows have already been
+C     put into the file
+      NROWCT = NRET/NSIZE
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+C     Loop through latitudes not in the file yet
+      PIBY2   = PPI / 2.0
+      DEG2RAD = PPI / 180.0
+C
+      DO 210 NLATIT = NROWCT+1, KROW
+	ALAT = PLAT(NLATIT) * DEG2RAD
+        CALL JSPLEG1( PLEG, ALAT, KTRUNC)
+        CALL PBWRITE( KUNIT, PLEG, NSIZE, NRET)
+        IF ( NRET .LT. NSIZE ) THEN
+	  CALL INTLOG(JP_ERROR,'JMAKGG - PBWRITE error.',  NRET)
+	  CALL INTLOG(JP_ERROR,'JMAKGG - bytes required = ',  NSIZE)
+	  KRET = JPROUTINE + 3
+	  GOTO 990
+	ENDIF
+  210 CONTINUE
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jmakgg3.F b/interpolation/jmakgg3.F
new file mode 100755
index 0000000..a699e42
--- /dev/null
+++ b/interpolation/jmakgg3.F
@@ -0,0 +1,189 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMAKGG3( KUNIT, KTRUNC, KROW, PLAT, PLEG, KRET)
+C
+C---->
+C**** JMAKGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine creates legendre functions for latitude rows upto
+C     the given latitude in a gaussian grid file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JMAKGG( KUNIT, KTRUNC, KROW, PLAT, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - Unit number for open file of legendre functions.
+C     KTRUNC  - Truncation.
+C     KROW    - Latitude row number in the file
+C     PLAT    - Array of latitudes for the gaussian grid
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Determine which functions already exist for the latitude rows
+C     in the file, skip to the end and create necessary extra functions
+C     and add to the file.
+C
+C     Externals
+C     _________
+C
+C     PBSEEK    - Position the coefficients file
+C     PBWRITE   - Write the coefficients file
+C     INTLOG   - Output log message
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     Only positive row numbers are allowed.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30400 )
+C
+C     Subroutine arguments
+      INTEGER KUNIT, KTRUNC, KROW, KRET
+      REAL PLAT, PLEG
+      DIMENSION PLAT(*)
+      DIMENSION PLEG(*)
+C
+C     Local variables
+      INTEGER NEWPOS, NSIZE, NRET, NROWCT, NLATIT
+      REAL ALAT, PIBY2, DEG2RAD
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+100   CONTINUE
+      IF ( KROW .LT. 0.0 ) THEN
+	KRET = JPROUTINE + 1
+	CALL INTLOG(JP_ERROR,'JMAKGG3: negative row number given',KROW)
+	GOTO 990
+      ENDIF
+C
+C     Calculate the byte offset into the file where the legendre 
+C     functions for the latitude should be.
+#ifdef REAL_8
+      NSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+#else
+      NSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+#endif
+      NEWPOS = (KROW - 1) * NSIZE
+C
+C     Find the current file length
+      CALL PBSEEK3( KUNIT, 0, 2, NRET)
+      IF ( NRET .LT. 0 ) THEN
+	CALL INTLOG(JP_ERROR,'JMAKGG3: PBSEEK error',  NRET)
+	KRET = JPROUTINE + 2
+	GOTO 990
+      ENDIF
+C
+C     Use the length to determine how many rows have already been
+C     put into the file
+      NROWCT = NRET/NSIZE
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+C     Loop through latitudes not in the file yet
+      PIBY2   = PPI / 2.0
+      DEG2RAD = PPI / 180.0
+C
+      DO 210 NLATIT = NROWCT+1, KROW
+	ALAT = PLAT(NLATIT) * DEG2RAD
+        CALL JSPLEG1( PLEG, ALAT, KTRUNC)
+        CALL PBWRITE3( KUNIT, PLEG, NSIZE, NRET)
+        IF ( NRET .LT. NSIZE ) THEN
+	  CALL INTLOG(JP_ERROR,'JMAKGG3: PBWRITE error.',  NRET)
+	  CALL INTLOG(JP_ERROR,'JMAKGG3: bytes required = ',  NSIZE)
+	  KRET = JPROUTINE + 3
+	  GOTO 990
+	ENDIF
+  210 CONTINUE
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jmakll.F b/interpolation/jmakll.F
new file mode 100755
index 0000000..c1c7f5c
--- /dev/null
+++ b/interpolation/jmakll.F
@@ -0,0 +1,235 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMAKLL( KUNIT, KTRUNC, PINTVL, PLAT, PLEG, KRET)
+C
+C---->
+C**** JMAKLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine creates legendre functions for latitude rows upto
+C     the given latitude in a 'non-standard truncation/interval' file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JMAKLL( KUNIT, KTRUNC, PINTVL, PLAT, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - Unit number for open file of legendre functions.
+C     KTRUNC  - Truncation.
+C     PINTVL  - Grid interval (degrees)
+C     PLAT    - Latitude in degrees.
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     Determine which functions already exist for the latitude rows
+C     in the file, skip to the end and create necessary extra functions
+C     and add to the file.
+C
+C     Externals
+C     _________
+C
+C     PBSEEK    - Position the coefficients file
+C     PBWRITE   - Write the coefficients file
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     Only positive latitude values are allowed.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Dec 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30500 )
+C
+C     Subroutine arguments
+      INTEGER KUNIT, KTRUNC, KRET
+      REAL PLEG, PINTVL, PLAT
+      DIMENSION PLEG(*)
+C
+C     Local variables
+C
+c      INTEGER*8 NEWPOS, NSIZE, NRET
+      INTEGER NEWPOS, NSIZE, NRET
+      INTEGER NROWCT, NBYTES
+
+      REAL ZLATEST, ZLATIT, ZLAT, ALAT, PIBY2, DEG2RAD
+      INTEGER NEXT, FIRST, LAST
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+ 100  CONTINUE
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'JMAKLL: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMAKLL: Unit number for leg.funcs file =', KUNIT)
+        CALL INTLOG(JP_DEBUG,'JMAKLL: Truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL: Grid interval (degrees) = ', PINTVL)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL: Latitude in degrees = ', PLAT)
+      ENDIF
+C
+      IF( PLAT.LT.0.0 ) THEN
+        ZLAT = 0.0
+      ELSE
+        ZLAT = PLAT
+      ENDIF
+C
+C     Calculate the byte offset into the file where the legendre 
+C     functions for the latitude should be.
+C
+#ifdef REAL_8
+      NSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+#else
+      NSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+#endif
+      NEWPOS = NINT( (90.0 - ZLAT)/PINTVL ) * NSIZE
+C
+C     Find the current file length
+C
+      CALL PBSEEK( KUNIT, 0, 2, NRET)
+      IF( NRET.LT.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JMAKLL: PBSEEK error',NRET)
+	KRET = JPROUTINE + 2
+	GOTO 990
+      ENDIF
+C
+C     Use the length to determine how many rows have already been
+C     put into the file
+C
+      NROWCT = NRET/NSIZE
+      ZLATEST  = 90.0 - REAL(NROWCT) * PINTVL
+C
+      IF( NDBG .GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'JMAKLL: File length on open = ', NRET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMAKLL: Number of rows already in file = ', NROWCT)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL: Next latitude to go in file = ', ZLATEST)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+C     Loop through latitudes not in the file yet
+C
+#ifdef REAL_8
+      NBYTES = (KTRUNC+1)*(KTRUNC+4)/2  * 8
+#else
+      NBYTES = (KTRUNC+1)*(KTRUNC+4)/2  * 4
+#endif
+C
+      IF( NDBG.GT.1 )
+     X  CALL INTLOG(JP_DEBUG,'JMAKLL: No. of bytes per row = ', NBYTES)
+C
+      PIBY2   = PPI / 2.0
+      DEG2RAD = PPI / 180.0
+C
+      FIRST = NINT(ZLATEST/PINTVL)
+      LAST  = NINT(ZLAT/PINTVL)
+      DO NEXT = FIRST, LAST, -1
+        ALAT = (NEXT*PINTVL) * DEG2RAD
+C
+        IF( NDBG.GT.1 ) CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL: Next latitude constructed = ', (NEXT*PINTVL))
+C
+        CALL JSPLEG1( PLEG, ALAT, KTRUNC)
+        CALL PBWRITE( KUNIT, PLEG, NBYTES, NRET)
+        IF( NRET.LT.NSIZE ) THEN
+          CALL INTLOG(JP_ERROR,'JMAKLL: PBWRITE error.', NRET)
+          CALL INTLOG(JP_ERROR,'JMAKLL: bytes required = ', NSIZE)
+	  KRET = JPROUTINE + 3
+	  GOTO 990
+	ENDIF
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jmakll3.F b/interpolation/jmakll3.F
new file mode 100755
index 0000000..5c76cbf
--- /dev/null
+++ b/interpolation/jmakll3.F
@@ -0,0 +1,234 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMAKLL3( KUNIT, KTRUNC, PINTVL, PLAT, PLEG, KRET)
+C
+C---->
+C**** JMAKLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine creates legendre functions for latitude rows upto
+C     the given latitude in a 'non-standard truncation/interval' file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JMAKLL( KUNIT, KTRUNC, PINTVL, PLAT, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - Unit number for open file of legendre functions.
+C     KTRUNC  - Truncation.
+C     PINTVL  - Grid interval (degrees)
+C     PLAT    - Latitude in degrees.
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     Determine which functions already exist for the latitude rows
+C     in the file, skip to the end and create necessary extra functions
+C     and add to the file.
+C
+C     Externals
+C     _________
+C
+C     PBSEEK    - Position the coefficients file
+C     PBWRITE   - Write the coefficients file
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     Only positive latitude values are allowed.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Dec 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30500 )
+C
+C     Subroutine arguments
+C
+      INTEGER KUNIT, KTRUNC, KRET
+      REAL PLEG, PINTVL, PLAT
+      DIMENSION PLEG(*)
+C
+C     Local variables
+C
+      INTEGER NEWPOS, NSIZE, NRET, NROWCT, NBYTES
+      REAL ZLATEST, ZLAT, ALAT, PIBY2, DEG2RAD
+      INTEGER NEXT, FIRST, LAST
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+ 100  CONTINUE
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'JMAKLL3: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMAKLL3: Unit number for leg.funcs file =', KUNIT)
+        CALL INTLOG(JP_DEBUG,'JMAKLL3: Truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL3: Grid interval (degrees) = ', PINTVL)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL3: Latitude in degrees = ', PLAT)
+      ENDIF
+C
+      IF( PLAT.LT.0.0 ) THEN
+        ZLAT = 0.0
+      ELSE
+        ZLAT = PLAT
+      ENDIF
+C
+C     Calculate the byte offset into the file where the legendre 
+C     functions for the latitude should be.
+C
+#ifdef REAL_8
+      NSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+#else
+      NSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+#endif
+      NEWPOS = NINT( (90.0 - ZLAT)/PINTVL ) * NSIZE
+C
+C     Find the current file length
+C
+      CALL PBSEEK3( KUNIT, 0, 2, NRET)
+      IF( NRET.LT.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JMAKLL3: PBSEEK error',NRET)
+	KRET = JPROUTINE + 2
+	GOTO 990
+      ENDIF
+C
+C     Use the length to determine how many rows have already been
+C     put into the file
+C
+      NROWCT = NRET/NSIZE
+      ZLATEST  = 90.0 - REAL(NROWCT) * PINTVL
+C
+      IF( NDBG.GT.1 ) THen
+        CALL INTLOG(JP_DEBUG,'JMAKLL3: File length on open = ', NRET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMAKLL3: Number of rows already in file = ', NROWCT)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL3: Next latitude to go in file = ', ZLATEST)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+C     Loop through latitudes not in the file yet
+C
+#ifdef REAL_8
+      NBYTES = (KTRUNC+1)*(KTRUNC+4)/2  * 8
+#else
+      NBYTES = (KTRUNC+1)*(KTRUNC+4)/2  * 4
+#endif
+C
+      IF( NDBG.GT.1 )
+     X  CALL INTLOG(JP_DEBUG,'JMAKLL3: No. of bytes per row = ', NBYTES)
+C
+      PIBY2   = PPI / 2.0
+      DEG2RAD = PPI / 180.0
+C
+      FIRST = NINT(ZLATEST/PINTVL)
+      LAST  = NINT(ZLAT/PINTVL)
+      DO NEXT = FIRST, LAST, -1
+        ALAT = (NEXT*PINTVL) * DEG2RAD
+C
+        IF( NDBG.GT.1 ) CALL INTLOGR(JP_DEBUG,
+     X    'JMAKLL3: Next latitude constructed = ', (NEXT*PINTVL))
+C
+        CALL JSPLEG1( PLEG, ALAT, KTRUNC)
+        CALL PBWRITE3( KUNIT, PLEG, NBYTES, NRET)
+        IF( NRET.LT.NSIZE ) THEN
+          CALL INTLOG(JP_ERROR,'JMAKLL3: PBWRITE error.', NRET)
+          CALL INTLOG(JP_ERROR,'JMAKLL3: bytes required = ', NSIZE)
+	  KRET = JPROUTINE + 3
+	  GOTO 990
+	ENDIF
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jmemhan.F b/interpolation/jmemhan.F
new file mode 100755
index 0000000..4fb4915
--- /dev/null
+++ b/interpolation/jmemhan.F
@@ -0,0 +1,482 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMEMHAN( KFLAG, KZOUTBF, KSIZE, KOPT, KRET)
+C
+C---->
+C**** JMEMHAN
+C
+C     PURPOSE
+C     _______
+C
+C     This routine handles memory allocation for jintll.F and jintgg.F
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JMEMHAN( KFLAG, KZOUTBF, KSIZE, KOPT, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KFLAG   - Flag to select lat/long or gaussian allocation
+C               = 1  for grid to grid interpolation (igalloc)
+C               = 2  for grid to grid interpolation (igalloc)
+C               = 3  for scratch space
+C               = 4  for vorticity and divergence scratch space
+C               = 5  for even more scratch space (!?)
+C               = 6  for latitude/longitude interpolation coefficients
+C                    on Fujitsu
+C               = 7  for gaussian interpolation coefficients on Fujitsu
+C               = 8  unused
+C               = 9  for FFT work space
+C               = 10 for output (partial) grid point field workspace
+C               = 11 for work space for rotating fields (see intfap.F)
+C               = 12 for raw land-sea mask (see iglsmst.F)
+C               = 13 for 10 minute land-sea mask (see iglsm01.F)
+C               = 14 for reading legendre coefficents line by line
+C               = 15 more work space for rotating fields (see intfap.F)
+C               = 16 more work space intfbu.F
+C               = 17 more work space ??
+C               = 18 for rotation of gaussian grids (ggrotat and tatorgg)
+C               = 19 for dynamic allocation of znfeldi (intf)
+C               = 20 to 22, coefficients for rotating spectral fields (jacobif)
+C
+C     KSIZE   - Size of memory required in words
+C     KOPT    - Memory option
+C               = 0 to deallocate
+C               = 1 to allocate
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KZOUTBF - Pointer to memory (if allocating)
+C     KRET    - Return status code
+C               0 = OK
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDGB
+C     JMEMCOM
+C
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C
+C     Externals
+C     _________
+C
+C     JDEBUG    - Checks environment variable to switch on/off debug
+#ifdef CRAY
+C     HPALLOC   - Allocate heap space
+C     HPDEALLC  - Deallocate heap space
+#else
+C     JMALLOC   - Allocate heap space
+C     JFREE     - Deallocate heap space
+#endif
+C     INTLOG    - Output log message
+C     IAFREE    - Deallocate heap space used by grid-pt to grid-pt
+C                 interpolation
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      May 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Jan 1995
+C     Add scratch for vorticity and divergence (flag = 4)
+C
+C     J.D.Chambers      *ECMWF*      Jan 1995
+C     Add space for interpolation coefficents (flag = 6)
+C
+C     J.D.Chambers      *ECMWF*      Sep 1996
+C     Split space for interpolation coefficents (flag = 6 and 7)
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        Mar 1998
+C     Allow memory flushing
+C
+C----<
+C     -------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -------------------------------------------------------
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "jparam2.h"
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPOPTMX
+      PARAMETER ( JPROUTINE = 30600 )
+      PARAMETER ( JPOPTMX = 22 )
+C
+C     Subroutine arguments
+C
+#ifdef POINTER_64
+      INTEGER*8 KZOUTBF
+#else
+      INTEGER KZOUTBF
+#endif
+      INTEGER KSIZE, KOPT, KRET, KFLAG
+C
+C     Local variables
+C
+      LOGICAL LDEBUG, LDEBUG1
+      INTEGER ITOTAL, LOOP
+#ifdef POINTER_64
+      INTEGER*8 IZOUTBF
+#else
+      INTEGER IZOUTBF
+#endif
+      INTEGER IEXIST
+      DIMENSION IEXIST(JPOPTMX)
+      DIMENSION IZOUTBF(JPOPTMX)
+      DATA IEXIST/ JPOPTMX * -1/
+      DATA IZOUTBF/ JPOPTMX * 0/
+C
+      SAVE IEXIST, IZOUTBF
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER IAFREE
+      EXTERNAL JMALLOC, IAFREE
+C
+C     -------------------------------------------------------
+C*    Section 1.    Initialisation.
+C     -------------------------------------------------------
+C
+  100 CONTINUE
+C
+      KRET = 0
+      CALL JDEBUG( )
+      LDEBUG  = ( NDBG.GT.0 )
+      LDEBUG1 = ( NDBG.EQ.1 )
+C
+C     Check that a  valid option has been chosen
+C
+      IF( ( KFLAG.LT.1 ).OR.( KFLAG.GT.JPOPTMX ) ) THEN
+        CALL INTLOG(JP_ERROR,'JMEMHAN: Invalid flag = ', KFLAG)
+        KRET = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Display diagnostics if required
+C
+      IF( LDEBUG ) THEN
+C
+        CALL INTLOG(JP_DEBUG,'JMEMHAN: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG, 'JMEMHAN: Memory type flag = ', KFLAG)
+C
+        IF( ( KFLAG.EQ.1 ).OR.( KFLAG.EQ.2 ) ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 1 = grid to grid interpolation', JPQUIET)
+C
+        IF( ( KFLAG.EQ.3 ).OR.( KFLAG.EQ.4 ).OR.( KFLAG.EQ.5 ) )
+     X    CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 3->5 = scratch,',JPQUIET)
+C
+        IF( KFLAG.EQ.6 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 6 = coeffs for spectral to lat/long interp',JPQUIET)
+C
+        IF( KFLAG.EQ.7 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 7 = coefs for spectral to gaussian interp,',JPQUIET)
+C
+        IF( KFLAG.EQ.8 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 8 = coefficients for rotating SH fields',JPQUIET)
+C
+        IF( KFLAG.EQ.9 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 9 = FFT workspace,',JPQUIET)
+C
+        IF( KFLAG.EQ.10 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 10 = output (partial) grid pt field,',JPQUIET)
+C
+        IF( KFLAG.EQ.11 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 11 = work space for rotating fields,',JPQUIET)
+C
+        IF( KFLAG.EQ.12 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 12 = raw land-sea mask,',JPQUIET)
+C
+        IF( KFLAG.EQ.13 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 13 = 10 minute land-sea mask.',JPQUIET)
+C
+        IF( KFLAG.EQ.14 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 14 = legendre coefficents line by line.',JPQUIET)
+C
+        IF( KFLAG.EQ.15 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 15 = more work space for rotating fields.',JPQUIET)
+C
+        IF( KFLAG.EQ.16 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 16 = more work space for intfbu.F.',JPQUIET)
+C
+        IF( KFLAG.EQ.17 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 17 = more work space for ??.',JPQUIET)
+C
+        IF( KFLAG.EQ.18 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 18 = space for rotating gaussian fields.',JPQUIET)
+C
+        IF( KFLAG.EQ.19 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 19 = for dynamic allocation of znfeldi.',JPQUIET)
+C
+        IF( KFLAG.EQ.20 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 20 = coefficients for rotating SH fields',JPQUIET)
+C
+        IF( KFLAG.EQ.21 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 21 = coefficients for rotating SH fields',JPQUIET)
+C
+        IF( KFLAG.EQ.22 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: 22 = coefficients for rotating SH fields',JPQUIET)
+C
+        CALL INTLOG(JP_DEBUG,'JMEMHAN: Memory reqd in words = ', KSIZE)
+        CALL INTLOG(JP_DEBUG,'JMEMHAN: Option (1 = allocate) = ', KOPT)
+      ENDIF
+C
+C     -------------------------------------------------------
+C*    Section 2.    Allocate memory
+C     -------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( KOPT.EQ.1 ) THEN
+C
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN: Requested allocation = ', KSIZE)
+          CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN: Previous allocation  = ', IEXIST(KFLAG))
+        ENDIF
+C
+C       See if more memory required than already allocated
+C
+        IF( KSIZE.GT.IEXIST(KFLAG) ) THEN
+C
+C         Special cases (sigh)
+C
+C         If allocating memory for spectral to lat/long or gaussian
+C         interpolation, first deallocate heap space used by grid-pt
+C         to grid-pt interpolation.
+C
+          IF( ( KFLAG.EQ.1 ).OR.( KFLAG.EQ.2 ) ) THEN
+            IF( LDEBUG ) THEN
+              KRET = IAFREE(1,1)
+            ELSE
+              KRET = IAFREE(0,-1)
+            ENDIF
+          ENDIF
+C
+C         If allocating memory on VPP for spectral to grid interpolation
+C         coefficients, first deallocate memory used by other type of
+C         spectral to gaussian interpolation if this option has been
+C         requested.
+C
+          IF( LFREECF ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X        'JMEMHAN: Free coefficients option exercised', JPQUIET)
+C
+C           Spectral -> lat/long
+C
+            IF( KFLAG.EQ.6 ) THEN
+              IF( IEXIST(7).NE.-1 ) THEN
+                IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X            'JMEMHAN: Free spect->gaussn coeff memory',IZOUTBF(7))
+#ifdef CRAY
+                CALL HPDEALLC( IZOUTBF(7), KRET, 0)
+                IF( KRET .LT. 0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'JMEMHAN: Memory de-allocation failed',KRET)
+                  KRET = JPROUTINE + 2
+                ENDIF
+#else
+                CALL JFREE( IZOUTBF(7) )
+#endif
+                IZOUTBF(7) = 0
+                IEXIST(7) = -1
+                NISIZE7 = 0
+                YOLDGG = 'xxxxxxxxxxxxxxx'
+              ENDIF
+            ENDIF
+C
+C           Spectral -> gaussian
+C
+            IF( KFLAG.EQ.7 ) THEN
+              IF( IEXIST(6).NE.-1 ) THEN
+                IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X            'JMEMHAN: Free spec->lat/lon coeff memory',IZOUTBF(6))
+#ifdef CRAY
+                CALL HPDEALLC( IZOUTBF(6), KRET, 0)
+                IF( KRET .LT. 0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'JMEMHAN: Memory de-allocation failed',KRET)
+                  KRET = JPROUTINE + 3
+                ENDIF
+#else
+                CALL JFREE( IZOUTBF(6) )
+#endif
+                IZOUTBF(6) = 0
+                IEXIST(6) = -1
+                NISIZE6 = 0
+                YOLDLL = 'xxxxxxxxxxxxxxxxxxx'
+              ENDIF
+            ENDIF
+          ENDIF
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN: Request greater than previous allocation', KSIZE)
+C
+C         If memory already allocated, deallocate existing memory
+C
+          IF( IEXIST(KFLAG).GE.0 ) THEN
+C
+            IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X          'JMEMHAN: Deallocate existing memory',IEXIST(KFLAG))
+#ifdef CRAY
+            CALL HPDEALLC( IZOUTBF(KFLAG), KRET, 0)
+            IF( KRET .LT. 0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'JMEMHAN: Memory de-allocation failed',KRET)
+              KRET = JPROUTINE + 4
+            ENDIF
+#else
+            CALL JFREE( IZOUTBF(KFLAG) )
+#endif
+          ENDIF
+C
+C         Allocate heap memory
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN: Allocate new memory ',KSIZE)
+C
+          IEXIST(KFLAG) = KSIZE
+#ifdef CRAY
+          CALL HPALLOC( IZOUTBF(KFLAG), IEXIST(KFLAG), KRET, 0 )
+          IF( KRET.LT.0  ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'JMEMHAN: Memory allocation failed',KRET)
+#else
+#if (defined REAL_8)
+          IZOUTBF(KFLAG) = JMALLOC( IEXIST(KFLAG) * 8 )
+#else
+          IZOUTBF(KFLAG) = JMALLOC( IEXIST(KFLAG) * 4 )
+#endif
+#ifdef hpR64
+          IZOUTBF(KFLAG) = IZOUTBF(KFLAG)/(1024*1024*1024*4)
+#endif
+          IF( IZOUTBF(KFLAG).EQ.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'JMEMHAN: Memory allocation failed',IZOUTBF(KFLAG))
+#endif
+            IEXIST(KFLAG) = -1
+            KRET = JPROUTINE + 5
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        IF( LFREECF ) THEN
+C
+C         Spectral -> lat/long
+C
+          IF( KFLAG.EQ.6 ) NISIZE6 = IEXIST(6)
+C
+C         Spectral -> gaussian
+C
+          IF( KFLAG.EQ.7 ) NISIZE7 = IEXIST(7)
+C
+        ENDIF
+C
+C     -------------------------------------------------------
+C*    Section 3.    Deallocate memory
+C     -------------------------------------------------------
+C
+  300 CONTINUE
+C
+      ELSE
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN: Deallocate memory address = ',IZOUTBF(KFLAG))
+C
+        IF( IZOUTBF(KFLAG).GT.0 ) THEN
+C
+#ifdef CRAY
+          CALL HPDEALLC( IZOUTBF(KFLAG), KRET, 0)
+          IF( KRET .LT. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'JMEMHAN: Memory deallocation failed',KRET)
+            KRET = JPROUTINE + 6
+          ENDIF
+#else
+          CALL JFREE( IZOUTBF(KFLAG) )
+#endif
+          IZOUTBF(KFLAG) = 0
+          IEXIST(KFLAG) = -1
+C
+        ELSE
+          CALL INTLOG(JP_DEBUG,'JMEMHAN: Deallocation ignored',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      IF( KRET.EQ.0 ) KZOUTBF = IZOUTBF(KFLAG)
+C
+      IF( LDEBUG.AND.(.NOT.LDEBUG1) ) THEN
+        ITOTAL = 0
+        DO LOOP = 1, JPOPTMX
+          IF( IEXIST(LOOP).GT.0 ) THEN
+            CALL INTLOG(JP_DEBUG, 'JMEMHAN: For type ', LOOP)
+#if (defined REAL_8)
+            CALL INTLOG(JP_DEBUG,
+     X        'JMEMHAN: bytes allocated = ', IEXIST(LOOP)*8 )
+            ITOTAL = ITOTAL + (IEXIST(LOOP) * 8)
+#else
+            CALL INTLOG(JP_DEBUG,
+     X        'JMEMHAN: bytes allocated = ', IEXIST(LOOP)*4 )
+            ITOTAL = ITOTAL + (IEXIST(LOOP) * 4)
+#endif
+          ENDIF
+        ENDDO
+        CALL INTLOG(JP_DEBUG,'JMEMHAN: Total bytes allocated=', ITOTAL)
+        CALL INTLOG(JP_DEBUG,'JMEMHAN: Return status code = ', KRET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/jmemhan2.F b/interpolation/jmemhan2.F
new file mode 100755
index 0000000..ac694f3
--- /dev/null
+++ b/interpolation/jmemhan2.F
@@ -0,0 +1,491 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMEMHAN2( KFLAG, KZOUTBF, KSIZE, KOPT, KRET)
+C
+C---->
+C**** JMEMHAN2
+C
+C     PURPOSE
+C     _______
+C
+C     This routine handles memory allocation for jintll.F and jintgg.F
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JMEMHAN2( KFLAG, KZOUTBF, KSIZE, KOPT, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KFLAG   - Flag to select lat/long or gaussian allocation
+C               = 1  for grid to grid interpolation (igalloc)
+C               = 2  for grid to grid interpolation (igalloc)
+C               = 3  for scratch space
+C               = 4  for vorticity and divergence scratch space
+C               = 5  for even more scratch space (!?)
+C               = 6  for latitude/longitude interpolation coefficients
+C                    on Fujitsu
+C               = 7  for gaussian interpolation coefficients on Fujitsu
+C               = 8  unused
+C               = 9  for FFT work space
+C               = 10 for output (partial) grid point field workspace
+C               = 11 for work space for rotating fields (see intfap.F)
+C               = 12 for raw land-sea mask (see iglsmst.F)
+C               = 13 for 10 minute land-sea mask (see iglsm01.F)
+C               = 14 for reading legendre coefficents line by line
+C               = 15 more work space for rotating fields (see intfap.F)
+C               = 16 more work space intfbu.F
+C               = 17 more work space ??
+C               = 18 for rotation of gaussian grids (ggrotat and tatorgg)
+C               = 19 for dynamic allocation of znfeldi (intf)
+C               = 20 to 22, coefficients for rotating spectral fields (jacobif)
+C
+C     KSIZE   - Size of memory required in words
+C     KOPT    - Memory option
+C               = 0 to deallocate
+C               = 1 to allocate
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KZOUTBF - Pointer to memory (if allocating)
+C     KRET    - Return status code
+C               0 = OK
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDGB
+C     JMEMCOM
+C
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C
+C     Externals
+C     _________
+C
+C     JDEBUG    - Checks environment variable to switch on/off debug
+#ifdef CRAY
+C     HPALLOC   - Allocate heap space
+C     HPDEALLC  - Deallocate heap space
+#else
+C     JMALLOC   - Allocate heap space
+C     JFREE     - Deallocate heap space
+#endif
+C     INTLOG    - Output log message
+C     IAFREE    - Deallocate heap space used by grid-pt to grid-pt
+C                 interpolation
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      May 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Jan 1995
+C     Add scratch for vorticity and divergence (flag = 4)
+C
+C     J.D.Chambers      *ECMWF*      Jan 1995
+C     Add space for interpolation coefficents (flag = 6)
+C
+C     J.D.Chambers      *ECMWF*      Sep 1996
+C     Split space for interpolation coefficents (flag = 6 and 7)
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        Mar 1998
+C     Allow memory flushing
+C
+C----<
+C     -------------------------------------------------------
+C*    Section 0. Definition of variables.
+C     -------------------------------------------------------
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "jparam2.h"
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPOPTMX
+      PARAMETER ( JPROUTINE = 30600 )
+      PARAMETER ( JPOPTMX = 22 )
+C
+C     Subroutine arguments
+C
+#ifdef POINTER_64
+      INTEGER*8 KZOUTBF
+#else
+      INTEGER KZOUTBF
+#endif
+      INTEGER KSIZE, KOPT, KRET, KFLAG
+C
+C     Local variables
+C
+      LOGICAL LDEBUG, LDEBUG1
+      INTEGER LOOP
+      INTEGER*8 ITOTAL
+      INTEGER*8 ITEMP
+#ifdef POINTER_64
+      INTEGER*8 IZOUTBF
+#else
+      INTEGER IZOUTBF
+#endif
+      INTEGER*8 IEXIST
+      DIMENSION IEXIST(JPOPTMX)
+      DIMENSION IZOUTBF(JPOPTMX)
+      DATA IEXIST/ JPOPTMX * -1/
+      DATA IZOUTBF/ JPOPTMX * 0/
+C
+      SAVE IEXIST, IZOUTBF
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC2
+#else
+      INTEGER JMALLOC2
+#endif
+      INTEGER IAFREE
+      EXTERNAL IAFREE, JMALLOC2
+C
+C     -------------------------------------------------------
+C*    Section 1.    Initialisation.
+C     -------------------------------------------------------
+C
+  100 CONTINUE
+C
+      KRET = 0
+      CALL JDEBUG( )
+      LDEBUG  = ( NDBG.GT.0 )
+      LDEBUG1 = ( NDBG.EQ.1 )
+C
+C     Check that a  valid option has been chosen
+C
+      IF( ( KFLAG.LT.1 ).OR.( KFLAG.GT.JPOPTMX ) ) THEN
+        CALL INTLOG(JP_ERROR,'JMEMHAN2: Invalid flag = ', KFLAG)
+        KRET = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Display diagnostics if required
+C
+      IF( LDEBUG ) THEN
+C
+        CALL INTLOG(JP_DEBUG,'JMEMHAN2: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG, 'JMEMHAN2: Memory type flag = ', KFLAG)
+C
+        IF( ( KFLAG.EQ.1 ).OR.( KFLAG.EQ.2 ) ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 1 = grid to grid interpolation', JPQUIET)
+C
+        IF( ( KFLAG.EQ.3 ).OR.( KFLAG.EQ.4 ).OR.( KFLAG.EQ.5 ) )
+     X    CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 3->5 = scratch,',JPQUIET)
+C
+        IF( KFLAG.EQ.6 ) CALL INTLOG(JP_DEBUG,
+     X  'JMEMHAN2: 6 = coeffs for spectral to lat/long interp',JPQUIET)
+C
+        IF( KFLAG.EQ.7 ) CALL INTLOG(JP_DEBUG,
+     X   'JMEMHAN2: 7 = coefs for spectral to gaussian interp,',JPQUIET)
+C
+        IF( KFLAG.EQ.8 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 8 = coefficients for rotating SH fields',JPQUIET)
+C
+        IF( KFLAG.EQ.9 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 9 = FFT workspace,',JPQUIET)
+C
+        IF( KFLAG.EQ.10 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 10 = output (partial) grid pt field,',JPQUIET)
+C
+        IF( KFLAG.EQ.11 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 11 = work space for rotating fields,',JPQUIET)
+C
+        IF( KFLAG.EQ.12 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 12 = raw land-sea mask,',JPQUIET)
+C
+        IF( KFLAG.EQ.13 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 13 = 10 minute land-sea mask.',JPQUIET)
+C
+        IF( KFLAG.EQ.14 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 14 = legendre coefficents line by line.',JPQUIET)
+C
+        IF( KFLAG.EQ.15 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 15 = more work space for rotating fields.',JPQUIET)
+C
+        IF( KFLAG.EQ.16 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 16 = more work space for intfbu.F.',JPQUIET)
+C
+        IF( KFLAG.EQ.17 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 17 = more work space for ??.',JPQUIET)
+C
+        IF( KFLAG.EQ.18 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 18 = space for rotating gaussian fields.',JPQUIET)
+C
+        IF( KFLAG.EQ.19 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 19 = for dynamic allocation of znfeldi.',JPQUIET)
+C
+        IF( KFLAG.EQ.20 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 20 = coefficients for rotating SH fields',JPQUIET)
+C
+        IF( KFLAG.EQ.21 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 21 = coefficients for rotating SH fields',JPQUIET)
+C
+        IF( KFLAG.EQ.22 ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: 22 = coefficients for rotating SH fields',JPQUIET)
+C
+        CALL INTLOG(JP_DEBUG,'JMEMHAN2: Memory reqd in words = ', KSIZE)
+        CALL INTLOG(JP_DEBUG,'JMEMHAN2: Option (1 = allocate) = ', KOPT)
+      ENDIF
+C
+C     -------------------------------------------------------
+C*    Section 2.    Allocate memory
+C     -------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( KOPT.EQ.1 ) THEN
+C
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN2: Requested allocation = ', KSIZE)
+          CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN2: Previous allocation  = ', IEXIST(KFLAG))
+        ENDIF
+C
+C       See if more memory required than already allocated
+C
+        IF( KSIZE.GT.IEXIST(KFLAG) ) THEN
+C
+C         Special cases (sigh)
+C
+C         If allocating memory for spectral to lat/long or gaussian
+C         interpolation, first deallocate heap space used by grid-pt
+C         to grid-pt interpolation.
+C
+          IF( ( KFLAG.EQ.1 ).OR.( KFLAG.EQ.2 ) ) THEN
+            IF( LDEBUG ) THEN
+              KRET = IAFREE(1,1)
+            ELSE
+              KRET = IAFREE(0,-1)
+            ENDIF
+          ENDIF
+C
+C         If allocating memory on VPP for spectral to grid interpolation
+C         coefficients, first deallocate memory used by other type of
+C         spectral to gaussian interpolation if this option has been
+C         requested.
+C
+          IF( LFREECF ) THEN
+            IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X        'JMEMHAN2: Free coefficients option exercised', JPQUIET)
+C
+C           Spectral -> lat/long
+C
+            IF( KFLAG.EQ.6 ) THEN
+              IF( IEXIST(7).NE.-1 ) THEN
+                IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X           'JMEMHAN2: Free spect->gaussn coeff memory',IZOUTBF(7))
+#ifdef CRAY
+                CALL HPDEALLC( IZOUTBF(7), KRET, 0)
+                IF( KRET .LT. 0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'JMEMHAN2: Memory de-allocation failed',KRET)
+                  KRET = JPROUTINE + 2
+                ENDIF
+#else
+                CALL JFREE( IZOUTBF(7) )
+#endif
+                IZOUTBF(7) = 0
+                IEXIST(7) = -1
+                NISIZE7 = 0
+                YOLDGG = 'xxxxxxxxxxxxxxx'
+              ENDIF
+            ENDIF
+C
+C           Spectral -> gaussian
+C
+            IF( KFLAG.EQ.7 ) THEN
+              IF( IEXIST(6).NE.-1 ) THEN
+                IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X          'JMEMHAN2: Free spec->lat/lon coeff memory',IZOUTBF(6))
+#ifdef CRAY
+                CALL HPDEALLC( IZOUTBF(6), KRET, 0)
+                IF( KRET .LT. 0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X              'JMEMHAN2: Memory de-allocation failed',KRET)
+                  KRET = JPROUTINE + 3
+                ENDIF
+#else
+                CALL JFREE( IZOUTBF(6) )
+#endif
+                IZOUTBF(6) = 0
+                IEXIST(6) = -1
+                NISIZE6 = 0
+                YOLDLL = 'xxxxxxxxxxxxxxxxxxx'
+              ENDIF
+            ENDIF
+          ENDIF
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN2: Request greater than previous allocation', KSIZE)
+C
+C         If memory already allocated, deallocate existing memory
+C
+          IF( IEXIST(KFLAG).GE.0 ) THEN
+C
+            IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X          'JMEMHAN2: Deallocate existing memory',IEXIST(KFLAG))
+#ifdef CRAY
+            CALL HPDEALLC( IZOUTBF(KFLAG), KRET, 0)
+            IF( KRET .LT. 0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'JMEMHAN2: Memory de-allocation failed',KRET)
+              KRET = JPROUTINE + 4
+            ENDIF
+#else
+            CALL JFREE( IZOUTBF(KFLAG) )
+#endif
+          ENDIF
+C
+C         Allocate heap memory
+C
+          IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X      'JMEMHAN2: Allocate new memory ',KSIZE)
+C
+          IEXIST(KFLAG) = KSIZE
+cs          print*,'IEXIST(KFLAG) ',IEXIST(KFLAG),KFLAG
+#ifdef CRAY
+          CALL HPALLOC( IZOUTBF(KFLAG), IEXIST(KFLAG), KRET, 0 )
+          IF( KRET.LT.0  ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'JMEMHAN2: Memory allocation failed',KRET)
+#else
+#if (defined REAL_8)
+        ITEMP = IEXIST(KFLAG) * 8
+cs        print*,'JMEMHAN2: KSIZE* 8 ',IEXIST(KFLAG),ITEMP
+        IZOUTBF(KFLAG) = JMALLOC2( ITEMP )
+cs        print*,'JMEMHAN2: after JMALLOC2 ',IZOUTBF(KFLAG),KFLAG
+#else
+          IZOUTBF(KFLAG) = JMALLOC2( IEXIST(KFLAG) * 4 )
+#endif
+#ifdef hpR64
+          IZOUTBF(KFLAG) = IZOUTBF(KFLAG)/(1024*1024*1024*4)
+#endif
+          IF( IZOUTBF(KFLAG).EQ.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'JMEMHAN2: Memory allocation failed',IZOUTBF(KFLAG))
+#endif
+            IEXIST(KFLAG) = -1
+            KRET = JPROUTINE + 5
+            GOTO 900
+          ENDIF
+        ENDIF
+C
+        IF( LFREECF ) THEN
+C
+C         Spectral -> lat/long
+C
+          IF( KFLAG.EQ.6 ) NISIZE6 = IEXIST(6)
+C
+C         Spectral -> gaussian
+C
+          IF( KFLAG.EQ.7 ) NISIZE7 = IEXIST(7)
+C
+        ENDIF
+C
+C     -------------------------------------------------------
+C*    Section 3.    Deallocate memory
+C     -------------------------------------------------------
+C
+  300 CONTINUE
+C
+      ELSE
+C
+        IF( LDEBUG ) CALL INTLOG(JP_DEBUG,
+     X    'JMEMHAN2: Deallocate memory address = ',IZOUTBF(KFLAG))
+C
+        IF( IZOUTBF(KFLAG).GT.0 ) THEN
+C
+#ifdef CRAY
+          CALL HPDEALLC( IZOUTBF(KFLAG), KRET, 0)
+          IF( KRET .LT. 0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'JMEMHAN2: Memory deallocation failed',KRET)
+            KRET = JPROUTINE + 6
+          ENDIF
+#else
+          CALL JFREE( IZOUTBF(KFLAG) )
+#endif
+          IZOUTBF(KFLAG) = 0
+          IEXIST(KFLAG) = -1
+C
+        ELSE
+          CALL INTLOG(JP_DEBUG,'JMEMHAN2: Deallocation ignored',JPQUIET)
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      IF( KRET.EQ.0 ) KZOUTBF = IZOUTBF(KFLAG)
+C
+      IF( LDEBUG.AND.(.NOT.LDEBUG1) ) THEN
+        ITOTAL = 0
+        DO LOOP = 1, JPOPTMX
+cs          print*,'IEXIST(LOOP) ',IEXIST(LOOP), LOOP
+          IF( IEXIST(LOOP).GT.0 ) THEN
+            CALL INTLOG(JP_DEBUG, 'JMEMHAN2: For type ', LOOP)
+#if (defined REAL_8)
+            CALL INTLOG(JP_DEBUG,
+     X        'JMEMHAN2: bytes allocated = ', IEXIST(LOOP)*8 )
+cs          print*,'IEXIST(LOOP)*8 ',IEXIST(LOOP)*8
+            ITOTAL = ITOTAL + (IEXIST(LOOP) * 8)
+#else
+            CALL INTLOG(JP_DEBUG,
+     X        'JMEMHAN2: bytes allocated = ', IEXIST(LOOP)*4 )
+            ITOTAL = ITOTAL + (IEXIST(LOOP) * 4)
+#endif
+          ENDIF
+        ENDDO
+        CALL INTLOG(JP_DEBUG,'JMEMHAN2: Total bytes allocated=', ITOTAL)
+cs        print*,'Total ',ITOTAL
+        CALL INTLOG(JP_DEBUG,'JMEMHAN2: Return status code = ', KRET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/jmkofgg.F b/interpolation/jmkofgg.F
new file mode 100755
index 0000000..471e80f
--- /dev/null
+++ b/interpolation/jmkofgg.F
@@ -0,0 +1,162 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMKOFGG( HTYPE,
+     X                    KNORTH,KSOUTH,PWEST,PEAST,KNUM,KPTS,KOFSET)
+C
+C---->
+C**** JMKOFGG
+C
+C     Purpose
+C     _______
+C
+C     This routine builds up the offsets into the storage array for
+C     every row in the gaussian grid.
+C
+C
+C     Interface
+C     _________
+C
+C     CALL JMKOFGG(HTYPE,KNORTH,KSOUTH,PWEST,PEAST,KNUM,KPTS,KOFSET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     HTYPE    - Gaussian grid type
+C                = 'R' for reduced,
+C                = 'F' for full
+C                = 'U' for user-defined reduced gaussian grid
+C     KNORTH  - Northern latitude row number
+C     KSOUTH  - Southern latitude row number
+C     PWEST   - Westernmost longitude for output field (degrees)
+C     PEAST   - Easternmost longitude for output field (degrees)
+C     KNUM    - Gaussian grid number
+C     KPTS    - Array giving the number of points in each row for the
+C               gaussian grid
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KOFSET  - Array of offsets for storing each row of the grid
+C               values in an output buffer
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C
+C     Method
+C     ______
+C
+C     Build up the offsets allowing for latitudes which are not in the
+C     requested latitude band.  All offsets outside the latitude band
+C     are set to zero.
+C
+C
+C     Externals
+C     _________
+C
+C     None
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      ECMWF       Jan 1994
+C
+C
+C     Modifications
+C     _____________
+C
+C     None
+C
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      CHARACTER*1 HTYPE
+      INTEGER KNORTH, KSOUTH, KNUM, KPTS, KOFSET
+      REAL    PWEST, PEAST
+Cjdc  DIMENSION KPTS(*), KOFSET(*)
+      DIMENSION KPTS(320), KOFSET(320)
+C
+C     Local variables
+C
+      INTEGER LAT, NUMPTS
+      REAL RINTVL
+      LOGICAL LREDUCE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Dummy
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Is it a reduced gaussian or user defined gaussian grid.
+      LREDUCE = ( (HTYPE .EQ. 'U') .OR. (HTYPE .EQ. 'R') )
+C
+C     _______________________________________________________
+C
+C*    Section 2. Fill in array of offsets
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Loop through all possible latitudes
+      DO LAT = 1, 2*KNUM
+	IF ( (LAT .LT. KNORTH) .OR. (LAT .GT. KSOUTH) ) THEN
+	  KOFSET(LAT) = 0
+        ELSE 
+	  IF ( LAT .EQ. KNORTH ) THEN
+	    KOFSET(LAT) = 1
+	  ELSE
+            IF( LREDUCE ) THEN
+              NUMPTS = KPTS(LAT -1)
+            ELSE
+              RINTVL = (PEAST - PWEST)*FLOAT( KPTS(LAT -1) ) / 360.0
+              NUMPTS = NINT( RINTVL ) + 1
+            ENDIF
+	    KOFSET(LAT) = KOFSET(LAT -1) + NUMPTS
+	  ENDIF
+        ENDIF
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jmovgg.F b/interpolation/jmovgg.F
new file mode 100755
index 0000000..0e1d40f
--- /dev/null
+++ b/interpolation/jmovgg.F
@@ -0,0 +1,255 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMOVGG( PZFA, PWEST, KGNUM, KSTART, KROWS,
+     X                   KCOLS, KLON, KJPWR, KOFSET, POUTF, KFLAG)
+C---->
+C
+C**** JMOVGG
+C
+C     Purpose
+C     _______
+C
+C     This routine moves gausssian grid point data from array PZFA to 
+C     array POUTF.
+C
+C
+C     Interface
+C     _________
+C
+C     CALL JMOVGG( PZFA, PWEST, KGNUM, KSTART, KROWS,
+C    X             KCOLS, KLON, KJPWR, KOFSET, POUTF, KFLAG)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     PZFA      -  Input array of grid points arranged in pairs of
+C                  north and south latitude bands
+C     PWEST     -  Westernmost longitude for field in POUTF (degrees)
+C     KGNUM     -  Gaussian number for field in POUTF
+C     KSTART    -  Current first latitude number in PZFA for moving
+C     KROWS     -  Number of latitude rows to store
+C     KCOLS     -  Number of longitude points to store from latitude
+C     KLON      -  Number of longitude points in generated latitude row
+C     KJPWR     -  Multiplication factor applied to ensure that number 
+C                  of longitude points > twice*spherical truncation
+C     KOFSET    -  Array of offsets for start of each latitude row in
+C                  the output array
+C     KFLAG     -  = 1 if only the North hemisphere lats. to be moved
+C                  = 2 if only the South hemisphere lats. to be moved
+C                  = 3 if both North/South hemisphere lats. to be moved
+C
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF      - Output array of grid points
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C
+C     Method
+C     ______
+C
+C     Moves latitude rows of points from PZFA into the correct 
+C     geographical positions in POUTF.  POUTF may already be 
+C     partially full.  The distribution is symmetrical north-south.
+C
+C
+C     Externals
+C     _________
+C
+C     INTLOG   - Logs messages
+C     INTLOGR  - Logs messages with real value.
+C
+C
+C     Reference
+C     _________
+C
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     ________
+C
+C     For calculation purposes, the number of longitude points
+C     has to be greater than 2*(output truncation) to ensure that the
+C     fourier transform is exact (see Reference, page 10). 
+C     Parameter JPLONO is set to 860 to ensure that PZFA will have
+C     enough slots for the KLON points for all values of regular
+C     grid intervals from N1 to N720.
+C
+C     When filling the output array POUTF, the longitude points have
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.  The
+C     magnification factor is KJPWR (a power of 2).
+C
+C     PZFA has values stored:
+C       North lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       North lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       ... for KROWS latitudes.
+C
+C     The 'x' represents the extra values generated because of the
+C     need for the number of points along a latitude line to be more
+C     than twice the truncation of the spherical harmonics.
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      ECMWF      Jan 1994
+C
+C
+C     Modifications
+C     _____________
+C
+C     None
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+      INTEGER KSTART, KGNUM
+      REAL PZFA, PWEST, POUTF
+      DIMENSION PZFA( JPLONO+2, 64), POUTF(*)
+      INTEGER KROWS, KCOLS, KLON, KJPWR, KOFSET, KFLAG
+      DIMENSION KOFSET(*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER( JPROUTINE = 31800 )
+C
+C     Local variables
+      INTEGER IOFFN, IOFFS, NXTLAT, NXTLON, NEXTPT
+      INTEGER LONGIT, N360, NSTART
+      REAL PINTVL
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,'JMOVGG - Input parameters:',JPQUIET)
+        CALL INTLOGR(JP_DEBUG,
+     X    'Western longitude for output = ', PWEST)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG -  Gaussian number for field = ', KGNUM)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - First latitude for moving = ', KSTART)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - Number of latitudes to store = ', KROWS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - Number of longitude pts per row = ', KCOLS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - No. long.pts per generated row = ', KLON)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - Multiplication factor applied = ', KJPWR)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - Move hemisphere(1=N,2=S,3=both) = ', KFLAG)
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG - Offsets(20) for each lat. in output array:',JPQUIET)
+C
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOG(JP_DEBUG,' ',KOFSET(NDBGLP))
+  101   CONTINUE
+      ENDIF
+C
+C     Calculate which longitude point to start from in row
+      N360   = 4*KGNUM
+      PINTVL = 360.0/FLOAT(N360)
+      LONGIT = NINT( (360.0 + PWEST)/PINTVL )
+      NSTART = MOD( LONGIT, N360)*KJPWR
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOGR(JP_DEBUG,
+     X    'Longitude interval along row = ', PINTVL)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG -  Start longitude = ', LONGIT)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG -  Modulus for longitude 360deg. = ', N360)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG -  Start point index = ', NSTART)
+      ENDIF
+C     _______________________________________________________
+C
+C
+C*    Section 2. Store the points for northern latitudes, southern 
+C*               latitudes or both.
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Store Northern latitudes ..
+C     .. skipping intermediate values - see calculation of NEXTPT below
+C
+      IF ( KFLAG .NE. 2 ) THEN
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG -  Storing North latitudes',JPQUIET)
+C
+        DO 222 NXTLAT = 1, KROWS*2, 2
+C
+C         Find start offset in storage array
+          IOFFN  = KOFSET(KSTART + NXTLAT/2) - 1
+          DO 220 NXTLON = 1, KCOLS
+            NEXTPT = 2 + MOD( NSTART + (NXTLON-1)*KJPWR , KLON)
+            POUTF( NXTLON + IOFFN ) = PZFA( NEXTPT, NXTLAT)
+ 220      CONTINUE
+ 222    CONTINUE
+      ENDIF
+C
+C     Store Southern latitudes ..
+C     .. skipping intermediate values - see calculation of NEXTPT below
+C
+      IF ( KFLAG .NE. 1 ) THEN
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMOVGG -  Storing South latitudes',JPQUIET)
+C
+        DO  242 NXTLAT = 2, KROWS*2, 2
+C
+C         Find start offset in storage array
+          IOFFS  = KOFSET(2*KGNUM - KSTART + 1 - NXTLAT/2 + 1) - 1
+          DO 240 NXTLON = 1, KCOLS
+            NEXTPT = 2 + MOD( NSTART + (NXTLON-1)*KJPWR , KLON)
+            POUTF( NXTLON + IOFFS ) = PZFA( NEXTPT, NXTLAT)
+ 240      CONTINUE
+ 242    CONTINUE
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/interpolation/jmovll.F b/interpolation/jmovll.F
new file mode 100755
index 0000000..221e87e
--- /dev/null
+++ b/interpolation/jmovll.F
@@ -0,0 +1,255 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMOVLL( PZFA, PNORTH, PWEST, PLATINC, PLONINC, PSTART,
+     X                   KROWS, KCOLS, KLON, KJPWR, POUTF, KFLAG)
+C
+C---->
+C**** JMOVLL
+C
+C     Purpose
+C     _______
+C
+C     This routine moves grid point data from array PZFA to array POUTF.
+C
+C
+C     Interface
+C     _________
+C
+C     CALL JMOVLL( PZFA, PNORTH, PWEST,PLATINC, PLONINC, PSTART, 
+C    X             KROWS, KCOLS, KLON, KJPWR, POUTF, KFLAG)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     PZFA      -  Input array of grid points arranged in pairs of
+C                  north and south latitude bands
+C     PNORTH    -  Northernmost latitude for field in POUTF (degrees)
+C     PWEST     -  Westernmost longitude for field in POUTF (degrees)
+C     PLATINC   -  Grid interval between latitudes in degrees in POUTF
+C     PLONINC   -  Grid interval between longitudes in degrees in POUTF
+C     PSTART    -  Current first latitude in PZFA for moving (degrees)
+C     KROWS     -  Number of latitude rows to store
+C     KCOLS     -  Number of longitude points to store from latitude
+C     KLON      -  Number of longitude points in generated latitude row
+C     KJPWR     -  Multiplication factor applied to ensure that number
+C                  of longitude points > twice*spherical truncation
+C     KFLAG     -  = 1 if only the North hemisphere lats. to be moved
+C                  = 2 if only the South hemisphere lats. to be moved
+C                  = 3 if both North/South hemisphere lats. to be moved
+C
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF      - output array of grid points
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C
+C     Method
+C     ______
+C
+C     Moves latitude rows of points from PZFA into the correct 
+C     geographical positions in POUTF.  POUTF may already be 
+C     partially full.  The distribution is symmetrical north-south.
+C
+C
+C     Externals
+C     _________
+C
+C     INTLOG   - Logs messages
+C     INTLOGR  - Logs messages with real value.
+C
+C
+C     Reference
+C     _________
+C
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     ________
+C
+C     POUTF is a 2-dimensional array, with first dimension = KCOLS.
+C
+C     For calculation purposes, the number of longitude points
+C     has to be greater than 2*(output truncation) to ensure that the
+C     fourier transform is exact (see Reference, page 10). 
+C     Parameter JPLONO is set to 860 to ensure that PZFA will have
+C     enough slots for the KLON points for all values of regular
+C     grid intervals from N1 to N720.
+C
+C     When filling the output array POUTF, the longitude points have
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.  The
+C     magnification factor is KJPWR (a power of 2).
+C
+C     PZFA has values stored:
+C       North lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       North lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       ... for KROWS latitudes.
+C
+C     The 'x' represents the extra values generated because of the
+C     need for the number of points along a latitude line to be more
+C     than twice the truncation of the spherical harmonics.
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      ECMWF      Nov 1993
+C
+C
+C     Modifications
+C     _____________
+C
+C     None
+C
+C----<
+C
+      IMPLICIT NONE
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KROWS, KCOLS, KLON, KJPWR, KFLAG
+      REAL PZFA, PNORTH, PWEST, PLATINC, PLONINC, PSTART, POUTF
+      DIMENSION PZFA( JPLONO+2, 64), POUTF(KCOLS,*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER( JPROUTINE = 31900 )
+C
+C     Local variables
+C
+      INTEGER IOFFN, IOFFS, LOOPRW, LOOPCL, NEXT
+      INTEGER LONGIT, N360, NSTART
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialization
+C     _______________________________________________________
+C
+  100 CONTINUE
+
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,'JMOVLL - Input parameters:',JPQUIET)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMOVLL - Northern latitude for output = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMOVLL - Western longitude for output = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMOVLL -  Latitude grid interval (deg) = ', PLATINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMOVLL - Longitude grid interval (deg) = ', PLONINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMOVLL - First latitude for moving = ', PSTART)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Number of latitudes to store = ', KROWS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Number of longitude pts per row = ', KCOLS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - No. long.pts per generated row = ', KLON)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Multiplication factor applied = ', KJPWR)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Move hemisphere(1=N,2=S,3=both) = ', KFLAG)
+C
+      ENDIF
+C
+C     Find start offset in storage array
+      IOFFN  = NINT( (PNORTH - PSTART)/PLATINC ) + 1
+      IOFFS  = NINT( (PNORTH + PSTART)/PLATINC ) + 2
+      LONGIT = NINT( (360.0 + PWEST)/PLONINC )
+      N360 = NINT( 360.0/PLONINC )
+      NSTART = MOD( LONGIT, N360)*KJPWR
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Offset in storage array(north) = ', IOFFN)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Offset in storage array(south) = ', IOFFS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Start longitude = ', LONGIT)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Modulus for longitude 360deg. = ', N360)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Start point index = ', NSTART)
+      ENDIF
+C     _______________________________________________________
+C
+C
+C*    Section 2. Store the points for northern latitudes, southern 
+C*               latitudes or both.
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Store Northern latitudes ..
+C     .. skipping intermediate values - see calculation of NEXT below
+C
+      IF ( KFLAG .NE. 2 ) THEN
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Storing North latitudes',JPQUIET)
+C
+        DO 222 LOOPRW = 1, KROWS*2, 2
+          DO 220 LOOPCL = 1, KCOLS
+            NEXT = 2 + MOD( NSTART + (LOOPCL-1)*KJPWR , KLON)
+            POUTF( LOOPCL, IOFFN + LOOPRW/2 ) = PZFA( NEXT, LOOPRW)
+ 220      CONTINUE
+ 222    CONTINUE
+      ENDIF
+C
+C     Store Southern latitudes ..
+C     .. skipping intermediate values - see calculation of NEXT below
+C
+      IF ( KFLAG .NE. 1 ) THEN
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMOVLL - Storing South latitudes',JPQUIET)
+C
+        DO  242 LOOPRW = 2, KROWS*2, 2
+          DO 240 LOOPCL = 1, KCOLS
+            NEXT = 2 + MOD( NSTART + (LOOPCL-1)*KJPWR , KLON)
+            POUTF( LOOPCL, IOFFS - LOOPRW/2 ) = PZFA( NEXT, LOOPRW)
+ 240      CONTINUE
+ 242    CONTINUE
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/interpolation/jmvugg.F b/interpolation/jmvugg.F
new file mode 100755
index 0000000..efdc48a
--- /dev/null
+++ b/interpolation/jmvugg.F
@@ -0,0 +1,317 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMVUGG(PZFA, KNORTH, KSOUTH, PWEST, KGNUM, KSTART,
+     X                  KDIFF, KROWS, KCOLS, KLON, KJPWR, KOFSET, POUTF)
+C
+C---->
+C**** JMVUGG
+C
+C     Purpose
+C     _______
+C
+C     This routine moves gaussian grid point data from array PZFA to 
+C     array POUTF. It handles the case when the number of latitudes 
+C     is different in the two hemispheres.
+C
+C
+C     Interface
+C     _________
+C
+C     CALL JMVUGG(PZFA, KNORTH, KSOUTH, PWEST, KGNUM, KSTART,
+C    X            KDIFF, KROWS, KCOLS, KLON, KJPWR, KOFSET, POUTF)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     PZFA      -  Input array of grid points arranged in pairs of
+C                  north and south latitude bands
+C     KNORTH    -  Northernmost latitude row number for field in POUTF
+C     KSOUTH    -  Southernmost latitude row number for field in POUTF
+C     PWEST     -  Westernmost longitude for field in POUTF (degrees)
+C     KGNUM     -  Gaussian number for field in POUTF
+C     KSTART    -  Current first latitude number in PZFA
+C     KDIFF     -  Offset to  first latitude row in PZFA for moving
+C     KROWS     -  Number of latitude rows to store
+C     KCOLS     -  Number of longitude points to store from latitude
+C     KLON      -  Number of longitude points in generated latitude row
+C     KJPWR     -  Multiplication factor applied to ensure that number
+C                  of longitude points > twice*spherical truncation
+C     KOFSET    -  Array of offsets for start of each latitude row in
+C                  the output array
+C
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF      - Output array of grid points
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C
+C     Method
+C     ______
+C
+C     Moves latitude rows of points from PZFA into the correct 
+C     geographical positions in POUTF.  POUTF may already be 
+C     partially full.  The distribution is not symmetrical north-south.
+C
+C
+C     Externals
+C     _________
+C
+C     JMOVGG    - Move points of symmetric grid to array
+C     INTLOG   - Logs messages
+C     INTLOGR  - Logs messages with real value.
+C
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     ________
+C
+C     For calculation purposes, the number of longitude points
+C     has to be greater than 2*(output truncation) to ensure that the
+C     fourier transform is exact (see Reference, page 10). 
+C     Parameter JPLONO is set to 860 to ensure that PZFA will have
+C     enough slots for the KLON points for all values of regular
+C     grid intervals from N1 to N720.
+C
+C     When filling the output array POUTF, the longitude points have
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.  The
+C     magnification factor is KJPWR (a power of 2).
+C
+C     PZFA has values stored:
+C       North lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       North lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       ... for KROWS latitudes.
+C
+C     The 'x' represents the extra values generated because of the
+C     need for the number of points along a latitude line to be more
+C     than twice the truncation of the spherical harmonics.
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      ECMWF      Jan 1994
+C
+C
+C     Modifications
+C     _____________
+C
+C     None
+C
+C----<
+C
+      IMPLICIT NONE
+C     _______________________________________________________
+C
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+      INTEGER KNORTH, KSOUTH, KGNUM, KSTART, KDIFF, POUTF
+      INTEGER KROWS, KCOLS, KLON, KJPWR, KOFSET
+      DIMENSION KOFSET(*)
+      REAL PZFA, PWEST
+      DIMENSION PZFA( JPLONO+2, 64), POUTF(*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER( JPROUTINE = 32000 )
+C
+C     Local variables
+      INTEGER INROWS, NROWS, NFLAG
+      INTEGER LATEST
+      INTEGER NTOP, NBASE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,'JMVUGG - Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Northern latitude for output = ', KNORTH)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Southern latitude for output = ', KSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVUGG - Western longitude for output = ', PWEST)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Gaussian number for field = ', KGNUM)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - First latitude for moving = ', KSTART)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Offset to first lat. for moving = ', KDIFF)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Number of latitudes to store = ', KROWS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Number of longitude pts per row = ', KCOLS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - No. long.pts per generated row = ', KLON)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Multiplication factor applied = ', KJPWR)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Offsets(20) of each lat. in output array:',JPQUIET)
+C
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOG(JP_DEBUG,' ',KOFSET(NDBGLP))
+  101   CONTINUE
+      ENDIF
+C
+      LATEST = 1
+      NTOP   = KSTART + KDIFF
+      NBASE  = KSTART + (KROWS - 1)
+      INROWS = KROWS
+      NROWS  = INROWS
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Current northernmost lat = ', NTOP)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - Current southernmost lat = ', NBASE)
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. Processing more North than South, or more South
+C                than North.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     See if overall there are more rows in Northern Hemisphere than
+C     Southern
+      IF ( KNORTH .LE. (2*KGNUM - KSOUTH) ) THEN
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMVUGG - More rows in North Hemis. than South',JPQUIET)
+C
+C       Yes, so see if there are any rows in the current batch for the 
+C       south as well as the north
+        IF ( NBASE .LT. (2*KGNUM - KSOUTH) ) THEN
+C
+C         None for south in current batch, move all rows to north.
+	  NFLAG = 1
+C
+          IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X      'JMVUGG - No rows for S, move rows to N = ', NROWS)
+C
+          CALL JMOVGG( PZFA, PWEST, KGNUM, KSTART, NROWS, KCOLS,
+     X                 KLON, KJPWR, KOFSET, POUTF, NFLAG)
+	ELSE
+C
+C         Some for south.
+C
+C         Move rows for north only first.
+          IF ( (2*KGNUM-KSOUTH) .GT. (NTOP-1) ) THEN
+            NROWS = (2*KGNUM-KSOUTH) - NTOP + 1
+	    NFLAG = 1
+C
+            IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X        'JMVUGG - Move North rows only first = ', NROWS)
+C
+            CALL JMOVGG( PZFA, PWEST, KGNUM, KSTART, NROWS, KCOLS,
+     X                   KLON, KJPWR, KOFSET, POUTF, NFLAG)
+	    NTOP   = KSTART + NROWS
+            LATEST = LATEST + (2 * NROWS)
+            NROWS  = INROWS - NROWS
+          ENDIF
+C
+C         Then move rows for both.
+          IF ( NROWS .GT. 0 ) THEN
+            NFLAG = 3
+C
+            IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X        'JMVUGG - Move common lat.(N & S) = ', NROWS)
+C
+            CALL JMOVGG( PZFA( 1, LATEST), PWEST, KGNUM, NTOP, 
+     X                   NROWS, KCOLS, KLON, KJPWR, KOFSET, POUTF,NFLAG)
+          ENDIF
+	ENDIF
+C
+C     Overall there are more rows in Southern Hemisphere than Northern
+      ELSE
+C
+            IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X        'JMVUGG - More rows in South Hemis. than North',JPQUIET)
+C
+C
+C       So see if there are any rows in the current batch for the 
+C       north as well as the south
+        IF ( NBASE .LT. KNORTH ) THEN
+C
+C         None for north in current batch, move all rows to south.
+          NFLAG = 2
+C
+          IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X      'JMVUGG - No rows for N, move rows to S = ', NROWS)
+C
+          CALL JMOVGG( PZFA, PWEST, KGNUM, KSTART, NROWS, KCOLS,
+     X                 KLON, KJPWR, KOFSET, POUTF, NFLAG)
+	ELSE
+C
+C         Some for north.  Move rows for south only first.
+          NROWS = KNORTH - NTOP + KDIFF
+          IF ( NROWS .GT. 0 ) THEN
+C
+            IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X        'JMVUGG - Move South rows only first = ', NROWS)
+C
+	    NFLAG = 2
+            CALL JMOVGG( PZFA, PWEST, KGNUM, KSTART, NROWS, KCOLS,
+     X                   KLON, KJPWR, KOFSET, POUTF, NFLAG)
+            LATEST = LATEST + (2 * NROWS)
+            NROWS = INROWS - NROWS
+          ELSE
+            NROWS = INROWS
+          ENDIF
+C
+C         Then move rows for both.
+          NFLAG = 3
+          IF ( NROWS .GT. 0 ) THEN
+C
+            IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X        'JMVUGG - Move common lats(N & S) = ', NROWS)
+C
+            CALL JMOVGG( PZFA( 1, LATEST), PWEST, KGNUM, NTOP, 
+     X                   NROWS, KCOLS, KLON, KJPWR, KOFSET, POUTF,NFLAG)
+          ENDIF
+	ENDIF
+      ENDIF
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/interpolation/jmvull.F b/interpolation/jmvull.F
new file mode 100755
index 0000000..fc31ed7
--- /dev/null
+++ b/interpolation/jmvull.F
@@ -0,0 +1,261 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JMVULL( PZFA, PNORTH, PSOUTH, PWEST, PLATINC, PLONINC, 
+     X                   PSTART,PDIFF, KROWS, KCOLS, KLON, KJPWR, POUTF)
+C
+C---->
+C**** JMVULL
+C
+C     Purpose
+C     _______
+C
+C     This routine moves grid point data from array PZFA to array POUTF.
+C     It handles the case when the number of latitudes is different in
+C     the two hemispheres.
+C
+C
+C     Interface
+C     _________
+C
+C     CALL JMVULL( PZFA, PNORTH, PSOUTH, PWEST, PLATINC, PLONINC, 
+C    X                   PSTART,PDIFF, KROWS, KCOLS, KLON, KJPWR, POUTF)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     PZFA      -  Input array of grid points arranged in pairs of
+C                  north and south latitude bands
+C     PNORTH    -  Northernmost latitude for field in POUTF (degrees)
+C     PSOUTH    -  Southernmost latitude for field in POUTF (degrees)
+C     PWEST     -  Westernmost longitude for field in POUTF (degrees)
+C     PLATINC   -  Grid interval between latitudes in degrees in POUTF
+C     PLONINC   -  Grid interval between longitudes in degrees in POUTF
+C     PSTART    -  Current first latitude in PZFA (degrees)
+C     PDIFF     -  Offset to first latitude in PZFA for moving (degrees)
+C     KROWS     -  Number of latitude rows to store
+C     KCOLS     -  Number of longitude points to store from latitude
+C     KLON      -  Number of longitude points in generated latitude row
+C     KJPWR     -  Multiplication factor applied to ensure that number
+C                  of longitude points > twice*spherical truncation
+C
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF      - output array of grid points
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C
+C     Method
+C     ______
+C
+C     Moves latitude rows of points from PZFA into the correct 
+C     geographical positions in POUTF.  POUTF may already be 
+C     partially full.  The distribution is not symmetrical north-south.
+C
+C
+C     Externals
+C     _________
+C
+C     JMOVLL    - Move points of symmetric grid to array
+C     INTLOG   - Logs messages
+C     INTLOGR  - Logs messages with real value.
+C
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     ________
+C
+C     POUTF is a 2-dimensional array, with first dimension = KCOLS.
+C
+C     For calculation purposes, the number of longitude points
+C     has to be greater than 2*(output truncation) to ensure that the
+C     fourier transform is exact (see Reference, page 10). 
+C     Parameter JPLONO is set to 860 to ensure that PZFA will have
+C     enough slots for the KLON points for all values of regular
+C     grid intervals from N1 to N720.
+C
+C     When filling the output array POUTF, the longitude points have
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.  The
+C     magnification factor is KJPWR (a power of 2).
+C
+C     PZFA has values stored:
+C       North lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat1:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       North lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       South lat2:  x, 1, x, 2, x, 3, x, ... , KLON, ...
+C       ... for KROWS latitudes.
+C
+C     The 'x' represents the extra values generated because of the
+C     need for the number of points along a latitude line to be more
+C     than twice the truncation of the spherical harmonics.
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      ECMWF      Nov 1993
+C
+C
+C     Modifications
+C     _____________
+C
+C     None
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     _______________________________________________________
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+      INTEGER KROWS, KCOLS, KLON, KJPWR
+      REAL PZFA, PNORTH, PWEST, PSOUTH, PLATINC, PLONINC, PSTART
+      REAL PDIFF, POUTF
+      DIMENSION PZFA( JPLONO+2, 64), POUTF( KCOLS, *)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER( JPROUTINE = 32100 )
+C
+C     Local variables
+      INTEGER INROWS, NROWS, NFLAG
+      INTEGER LATEST
+      REAL ZTOP, ZBASE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,'JMVULL - Input parameters:',JPQUIET)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Northern latitude for output = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Southern latitude for output = ', PSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Western longitude for output = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Latitude grid interval (deg) = ', PLATINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Longitude grid interval (deg) = ', PLONINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - First latitude for moving = ', PSTART)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Offset to first lat. for moving = ', PDIFF)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - Number of latitudes to store = ', KROWS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - Number of longitude pts per row = ', KCOLS)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - No. long.pts per generated row = ', KLON)
+        CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - Multiplication factor applied = ', KJPWR)
+      ENDIF
+C
+      LATEST = 1
+      ZTOP   = PSTART
+      ZBASE  = PSTART - (KROWS - 1)*PLATINC
+      INROWS = KROWS
+      NROWS = INROWS
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Current northernmost lat = ', ZTOP)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JMVULL - Current southernmost lat = ', ZBASE)
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. Processing more North than South, or more South
+C                than North.
+C     _______________________________________________________
+C
+  200 CONTINUE
+Cjdc  IF ( ZTOP .GE. (-PSOUTH) ) THEN
+      IF( (PNORTH.GT.(-PSOUTH)) .AND. (ZTOP .GE. (-PSOUTH)) ) THEN
+C
+C     Move excess northern latitudes ...
+        NROWS = NINT( ( ZTOP + PSOUTH )/PLATINC )
+        NROWS = MIN( NROWS, KROWS )
+        NFLAG = 1
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - Move excess north latitudes = ', NROWS)
+C
+        CALL JMOVLL( PZFA, PNORTH, PWEST, PLATINC, PLONINC, ZTOP, NROWS,
+     X               KCOLS, KLON, KJPWR, POUTF, NFLAG)
+C
+      ELSE
+C
+C     Move excess southern latitudes ...
+	NROWS = NINT( ( ZTOP - PNORTH )/PLATINC )
+        NROWS = MIN( NROWS, KROWS )
+	NFLAG = 2
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - Move excess south latitudes = ', NROWS)
+C
+	CALL JMOVLL(PZFA, PNORTH, PWEST, PLATINC, PLONINC, PSTART,
+     X              NROWS, KCOLS, KLON, KJPWR, POUTF, NFLAG)
+      ENDIF
+C
+      ZTOP   = ZTOP - (NROWS * PLATINC)
+      LATEST = LATEST + (2 * NROWS)
+      NROWS  = INROWS - NROWS
+C     _______________________________________________________
+C
+C*    Section 3. Processing latitudes common to both North and South.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+C     Move rows common to both if any left ...
+      IF ( NROWS .GT. 0 ) THEN 
+C
+        IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X    'JMVULL - Move common latitudes(N & S) = ', NROWS)
+C
+        NFLAG = 3
+        CALL JMOVLL( PZFA( 1, LATEST), PNORTH, PWEST, PLATINC, PLONINC,
+     X               ZTOP, NROWS, KCOLS, KLON, KJPWR, POUTF, NFLAG)
+      ENDIF
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
diff --git a/interpolation/jnorsgg.F b/interpolation/jnorsgg.F
new file mode 100755
index 0000000..f7d432c
--- /dev/null
+++ b/interpolation/jnorsgg.F
@@ -0,0 +1,179 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION JNORSGG( PLAT, PGGLAT, KNUM, KUP)
+C
+C---->
+C**** JNORSGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine determines which latitude row in a gaussian grid is
+C     north or south of a given latitude.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     I = JNORSGG( PLAT, PGGLAT, KNUM, KUP)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     PLAT   - Given latitude
+C     PGGLAT - Array of gaussian grid latitudes (both north and south
+C              values)
+C     KNUM   - Gaussian grid number
+C     KUP    - Indicator to say if the returned row number should be
+C              north or south of the given latitude
+C              = 0 for south, = 1 for north
+C
+C
+C     Output parameters
+C     ________________
+C
+C     Returned value is the latitude row number.
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C
+C     METHOD
+C     ______
+C
+C     The nearest gaussian latitude row is found.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     None
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     All input values are assumed to be reasonable!
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       Jan 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers      ECMWF       Mar 1996
+C     Guess position to start search (an optimisation dodge)
+C
+C     J.D.Chambers      ECMWF       Aug 1996
+C     Accept latitude if within 1000th of a degree of stored latitude.
+C
+C     J.D.Chambers      ECMWF       Oct 1996
+C     Accept latitude if within 100th of a degree of stored latitude.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Function arguments
+C
+      REAL PLAT, PGGLAT
+      DIMENSION PGGLAT(*)
+      INTEGER KNUM, KUP
+C
+C     Local variables
+C
+      INTEGER J202, NPOS, NPLAT, NGGLAT, IGUESS
+      REAL JPFACTOR
+      PARAMETER ( JPFACTOR = PPMULT/JPMICRO )
+C
+      REAL DELTA, OLDPLAT
+      INTEGER IFIRST
+      DATA IFIRST/0/, OLDPLAT/100.0/
+      SAVE IFIRST, DELTA, IGUESS, OLDPLAT, NPLAT
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Setup delta estimate between gaussian latitudes
+      IF( IFIRST.NE. KNUM ) THEN
+        IFIRST = KNUM
+        DELTA  = 90.0/FLOAT(KNUM-1)
+      ENDIF
+C
+      IF( OLDPLAT.NE.PLAT ) THEN
+        OLDPLAT = PLAT
+        IGUESS = INT( (90.0 - PLAT)/DELTA ) + 1
+        NPLAT  = NINT(PLAT*JPFACTOR+0.5)
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. Processing.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Check latitudes in the gaussian definition array
+CDIR$ NOVECTOR
+      DO 202 J202 = IGUESS, 2*KNUM
+C       Accept latitude if within 100th of a degree of stored latitude.
+        NGGLAT = NINT(PGGLAT(J202)*JPFACTOR+0.5)
+        IF ( NPLAT .GE. NGGLAT ) THEN
+          IF ( NPLAT .EQ. NGGLAT ) THEN
+	    NPOS = J202
+          ELSE
+	    NPOS = J202 - KUP
+          ENDIF
+	  GOTO 900
+	ENDIF
+  202 CONTINUE
+C
+C   
+C     On drop-through (e.g. for -90.0), use southernmost latitude
+      NPOS = 2*KNUM
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+C     Allow for latitude above northernmost in array (e.g. 90.0).
+      IF ( NPOS .LT. 1 ) NPOS = 1
+C
+      JNORSGG = NPOS
+C
+      RETURN
+      END
diff --git a/interpolation/jnumgg.F b/interpolation/jnumgg.F
new file mode 100755
index 0000000..b00d290
--- /dev/null
+++ b/interpolation/jnumgg.F
@@ -0,0 +1,134 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JNUMGG( KNUM, HTYPE, KPTS, KRET)
+C
+C---->
+C**** JNUMGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine returns the number of points in each latitude of 
+C     a gaussian grid.
+C
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JNUMGG( KNUM, HTYPE, KPTS, KRET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KNUM     - Gaussian grid number
+C     HTYPE    - Gaussian grid type
+C                = 'R' for reduced, = 'F' for full
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KPTS    - Array giving number of points at each gaussian latitude 
+C               (both hemispheres)
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Simplified interface to JGETGG.
+C
+C
+C     Externals
+C     _________
+C
+C     JGETGG     - Get the gaussian grid definition.
+C     INTLOG   - Output log message
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     None
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Feb 1994
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KNUM, KPTS, KRET
+      CHARACTER*1 HTYPE
+      DIMENSION KPTS(*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30700 )
+C
+C     Local variables
+C
+      REAL ZLAT
+      DIMENSION  ZLAT(JPMAX)
+C     _______________________________________________________
+C
+C*    Section 1.    Get the information.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      KRET = 0
+C
+C     Make sure local array is big enough for return values.
+C
+      IF ( KNUM .GT. (JPMAX/2) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JNUMGG - Local array too small for return values.',JPMAX/2)
+        KRET = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+      CALL JGETGG( KNUM, HTYPE, ZLAT, KPTS, KRET)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jnumggq.F b/interpolation/jnumggq.F
new file mode 100755
index 0000000..9e76ff4
--- /dev/null
+++ b/interpolation/jnumggq.F
@@ -0,0 +1,119 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION JNUMGGQ( KNUM, KPTS)
+C
+C---->
+C**** JNUMGGQ
+C
+C     PURPOSE
+C     -------
+C
+C     This routine returns the number of points in each latitude of 
+C     a gaussian grid.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     CALL JNUMGGQ( KNUM, KPTS)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KNUM - Gaussian grid number
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KPTS - Array giving number of points at each gaussian latitude 
+C            (both hemispheres)
+C
+C     Returns 0 if OK, otherwise passes the return status from JNUMGG
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Simplified interface to JNUMGG. 
+C
+C
+C     Externals
+C     ---------
+C
+C     JGETGG - Get the gaussian grid definition. 
+C
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C
+C     Comments
+C     --------
+C
+C     None
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      *ECMWF*      January 2002
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KNUM, KPTS
+      DIMENSION KPTS(KNUM*2)
+C
+C     Local variables
+C
+      CHARACTER*1 HTYPE
+      INTEGER KRET
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.    Get the information.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      HTYPE = 'R'
+      CALL JNUMGG( KNUM, HTYPE, KPTS, KRET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+ 900  CONTINUE
+C
+      JNUMGGQ = KRET
+C
+      RETURN
+      END
diff --git a/interpolation/jopngg.F b/interpolation/jopngg.F
new file mode 100755
index 0000000..b9b5baf
--- /dev/null
+++ b/interpolation/jopngg.F
@@ -0,0 +1,322 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JOPNGG( PLEG, KNUM, KTRUNC, KUNIT, PLAT, KRET)
+C
+C---->
+C**** JOPNGG
+C
+C     Purpose
+C     _______
+C
+C     This routine finds a file of legendre polynomials corresponding
+C     to a given grid interval and truncation and returns a unit number.
+C
+C     Interface
+C     _________
+C
+C     CALL JOPNGG( PLEG, KNUM, KTRUNC, KUNIT, PLAT, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PLEG    - Array for legendre function
+C     KNUM    - Gaussian grid number
+C     KTRUNC  - Spherical truncation
+C     PLAT    - Array of latitudes for the gaussian grid
+C
+C     Output parameters
+C     _________________
+C
+C     KUNIT   - Unit number from PBOPEN
+C               0 , open failed
+C     KRET    - Return status code
+C               0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     Method
+C     ______
+C
+C     Builds a file name from the truncation and grid interval and
+C     tries to open a file of that name.
+C
+C     If the file is already open (from a previous call) the 
+C     previous unit number is returned.
+C     If a different file is already open (from a previous call), the
+C     existing file is closed first.
+C
+C     If no file can be located, a file is created.
+C
+C     Externals
+C     _________
+C
+C     PBOPEN   - Open binary file and return unit number
+C     PBCLOSE  - Close binary file
+C     JFINDIR  - Find the file of legendre coefficients
+C     JMAKGG   - Makes a file of legendre coefficients
+C     INTLOG   - Output log message
+C     JCHMOD   - Change file permissions
+C     RENAME   - Rename file
+C
+C     Reference
+C     _________
+C
+C     NONE
+C
+C     Comments
+C     ________
+C
+C     The filename for the legendre polynomials has the form:
+C         cf_xxxx_nnnn   Truncation xxx, Gaussian number yyy
+C     For example,
+C         cf_0213_0160          T213    N160
+C         cf_0106_0080          T106    N80
+C
+C     On the C90, the file of polynomials may be cached in /owrk/marsint
+C
+C     Otherwise the file is located in (or will be created in) the first
+C     directory given by one of the following (in the order listed, if
+C     they exist):
+C         environment variable PPDIR
+C     or
+C         the current working directory.
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     Modifications
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C     Standardise the search order for the environment variables.
+C
+C     S.Curic      *ECMWF*      Apr 2005
+C     Change filename format because of N1048
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30800 )
+C
+C     Subroutine arguments
+C
+      REAL      PLAT, PLEG
+      DIMENSION PLAT(*)
+      DIMENSION PLEG(*)
+      INTEGER   KNUM, KTRUNC, KUNIT, KRET
+C
+C     Local variables
+C
+      INTEGER IRET, IOFFSET
+      LOGICAL LFOUND
+      CHARACTER*256 DIRNAME
+      CHARACTER*256 FILENAME, FILEDUM
+      CHARACTER*512 FULLPATH
+      CHARACTER*16 YPFN
+      CHARACTER*16 YOLD
+#ifdef REAL_8
+      DATA YPFN/'CF_xxxx_nnnn'/
+#else
+      DATA YPFN/'cf_xxxx_nnnn'/
+#endif
+      DATA YOLD/'xxxxxxxxxxxx'/
+      INTEGER NUNIT
+      DATA NUNIT/0/
+C
+      SAVE NUNIT, YOLD
+C
+C     Externals
+C
+      LOGICAL JFINDIR
+      LOGICAL JFINDFN
+      INTEGER JCHMOD, RENAME
+C
+C     _______________________________________________________
+C
+C*    Section 1. See if required file already in use.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Setup the filename: cf_xxxx_nnnn
+C
+      WRITE(YPFN(4:7), '(I4.4)' ) KTRUNC
+      WRITE(YPFN(9:12), '(I4.4)' ) KNUM
+C
+C     If file already open, return the existing unit number
+C
+      IF( YPFN.EQ.YOLD ) THEN
+        KUNIT = NUNIT
+        GOTO 900
+      ENDIF
+C
+C     Otherwise, close the existing file
+C
+      IF( NUNIT.NE.0 ) THEN
+	CALL PBCLOSE( NUNIT, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JOPNGG: PBCLOSE error.',IRET)
+	  NUNIT = 0
+	  KRET = JPROUTINE + 1
+	  GOTO 990
+        ENDIF
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. See if the file has already been created.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF( LFOUND ) THEN
+        LFOUND = JFINDFN(DIRNAME,FILENAME,IOFFSET,NUNIT)
+        IF( LFOUND ) GOTO 500
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      CALL PBOPEN( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.EQ.0 ) GOTO 500
+C     _______________________________________________________
+C
+C*    Section 3. File doesn't exist, find a suitable directory for it.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF( LFOUND ) THEN
+        IOFFSET = INDEX(DIRNAME, ' ') - 1
+        FULLPATH  = DIRNAME(1:IOFFSET) // '/' // FILENAME
+        IOFFSET = INDEX(FULLPATH, ' ') - 1
+        FILENAME(1:IOFFSET) = FULLPATH(1:IOFFSET)
+        FILEDUM(1:IOFFSET) = FILENAME(1:IOFFSET)
+#ifdef REAL_8
+        FILEDUM(IOFFSET-11:IOFFSET-10) = 'XX'
+#else
+        FILEDUM(IOFFSET-11:IOFFSET-10) = 'xx'
+#endif
+        CALL PBOPEN(NUNIT, FILEDUM(1:IOFFSET), 'w', IRET)
+        IF( IRET.EQ.0 ) GOTO 400
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      FILEDUM(1:IOFFSET) = FILENAME(1:IOFFSET)
+#ifdef REAL_8
+      FILEDUM(IOFFSET-11:IOFFSET-10) = 'XX'
+#else
+      FILEDUM(IOFFSET-11:IOFFSET-10) = 'xx'
+#endif
+      CALL PBOPEN( NUNIT, FILEDUM(1:IOFFSET), 'w', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JOPNGG: PBOPEN error.',IRET)
+        KRET = JPROUTINE + 2
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4. Create the coefficients file.
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+C     Let user know that a new file is being created.
+C
+      IOFFSET = INDEX(FILENAME,' ') - 1
+      CALL INTLOG(JP_DEBUG,'JOPNGG: Creating new coefficients file:',
+     X            JPQUIET)
+      CALL INTLOG(JP_DEBUG,FILENAME(1:IOFFSET), JPQUIET)
+C
+C     Change access mode to 'read only' for all users.
+C
+      IRET = JCHMOD(FILEDUM(1:IOFFSET),'0444')
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JOPNGG: JCHMOD error.',IRET)
+        KRET = JPROUTINE + 3
+        GOTO 990
+      ENDIF
+C
+C     Make coefficients file
+C
+      CALL JMAKGG( NUNIT, KTRUNC, KNUM, PLAT, PLEG, KRET)
+      IF ( KRET .NE. 0 ) GOTO 990
+C
+C      Close it, rename it, re-open for reading, leave it open.
+C
+      CALL PBCLOSE(NUNIT, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JOPNGG: PBCLOSE error.',IRET)
+        KRET = JPROUTINE + 4
+        GOTO 990
+      ENDIF
+C
+      FILEDUM(IOFFSET+1:IOFFSET+1) = CHAR(0)
+      FILENAME(IOFFSET+1:IOFFSET+1) = CHAR(0)
+      IRET = RENAME(FILEDUM(1:IOFFSET),FILENAME(1:IOFFSET))
+#ifndef hpR64
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGG: RENAME of file failed',JPQUIET)
+        KRET = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+#endif
+C
+      CALL PBOPEN( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF ( IRET .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'JOPNGG: PBOPEN error.',IRET)
+        KRET = JPROUTINE + 6
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 5. File now open with read access.
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+      KUNIT = NUNIT
+      YOLD  = YPFN
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jopnggf.F b/interpolation/jopnggf.F
new file mode 100755
index 0000000..77337da
--- /dev/null
+++ b/interpolation/jopnggf.F
@@ -0,0 +1,392 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JOPNGGF( IPLEG, KNUM, KTRUNC, KUNIT, PLAT, KRET)
+C
+C---->
+C**** JOPNGGF
+C
+C     Purpose
+C     _______
+C
+C     This routine finds a file of legendre polynomials corresponding
+C     to a given grid interval and truncation, allocates memory, reads
+C     the coefficients into the memory and returns a unit number.
+C
+C     Interface
+C     _________
+C
+C     CALL JOPNGGF( IPLEG, KNUM, KTRUNC, KUNIT, PLAT, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KNUM    - Gaussian grid number
+C     KTRUNC  - Spherical truncation
+C     PLAT    - Array of latitudes for the gaussian grid
+C
+C     Output parameters
+C     _________________
+C
+C     IPLEG   - Pointer to memory array used for legendre coefficients
+C     KUNIT   - Unit number from PBOPEN
+C               0 , open failed
+C     KRET    - Return status code
+C               0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     Uses common JDCSPGP for size NISIZE7
+C
+C     Method
+C     ______
+C
+C     Builds a file name from the truncation and grid interval and
+C     tries to open a file of that name.
+C
+C     If the file is already open (from a previous call) the 
+C     previous unit number is returned.
+C     If a different file is already open (from a previous call), the
+C     existing file is closed.
+C
+C     If no file can be found, a file is created. Memory is dynamically
+C     allocted and the coefficients are read into the memory array.
+C
+C     Externals
+C     _________
+C
+C     PBOPEN3  - Open binary file and return unit number
+C     PBREAD3  - Read binary file
+C     PBCLOSE3 - Close binary file
+C     JFINDIR  - Find the file of legendre coefficients
+C     JMAKGG   - Makes a file of legendre coefficients
+C     INTLOG   - Output log message
+C
+C     Reference
+C     _________
+C
+C     NONE
+C
+C     Comments
+C     ________
+C
+C     The filename for the legendre polynomials has the form:
+C         cf_xxxx_0nnn   Truncation xxx, Gaussian number yyy
+C     For example,
+C         cf_0213_0160          T213    N160
+C         cf_0106_0080          T106    N80
+C
+C     On the C90, the file of polynomials may be cached in /owrk/marsint
+C
+C     Otherwise the file is located in (or will be created in) the first
+C     directory given by one of the following (in the order listed, if
+C     they exist):
+C         environment variable PPDIR
+C     or
+C         the current working directory.
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jun 1996
+C
+C     Modifications
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     S.Curic      *ECMWF*      Apr 2005
+C     Change filename format because of N1048
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "jparams.h"
+#include "jparam2.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30810 )
+C
+C     Subroutine arguments
+C
+      REAL      PLAT
+      DIMENSION PLAT(*)
+      INTEGER   KNUM, KTRUNC, KUNIT, KRET
+C
+C     Local variables
+C
+      INTEGER IRET, IOFFSET, NPBYTES, ISIZE
+      INTEGER*8 ITEMP,IRET1
+      CHARACTER*12 YFLAG
+#ifdef REAL_8
+      DATA NPBYTES/8/
+#else
+      DATA NPBYTES/4/
+#endif
+#ifdef POINTER_64
+      INTEGER*8 IRPLEG
+#endif
+      REAL RPLEG(1)
+      POINTER ( IRPLEG, RPLEG )
+      LOGICAL LFOUND
+      CHARACTER*256 DIRNAME
+      CHARACTER*256 FILENAME
+      CHARACTER*512 FULLPATH
+      CHARACTER*16 YPFN
+#ifdef REAL_8
+      DATA YPFN/'CF_xxxx_nnnn'/
+#else
+      DATA YPFN/'cf_xxxx_nnnn'/
+#endif
+      INTEGER NUNIT
+      DATA NUNIT/0/
+#ifdef POINTER_64
+      INTEGER*8 IPLEG
+#endif
+      REAL ALEG
+      DIMENSION ALEG(1)
+      POINTER ( IPLEG, ALEG )
+C
+      SAVE NUNIT
+C
+C     Externals
+C
+      LOGICAL JFINDIR
+      LOGICAL JFINDFN3
+      INTEGER JCHMOD, CHMOD
+C
+C     _______________________________________________________
+C
+C*    Section 1. See if required file already in use.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Setup the file name
+C
+      WRITE(YPFN(4:7),'(I4.4)') KTRUNC
+      WRITE(YPFN(9:12),'(I4.4)') KNUM
+      CALL INTLOG(JP_DEBUG,
+     X  'JOPNGGF: Coefficients file to open is:', JPQUIET)
+      CALL INTLOG(JP_DEBUG, YPFN, JPQUIET)
+
+C     If file already open, return the existing unit number
+C
+      IF( YPFN.EQ.YOLDGG ) THEN
+        CALL INTLOG(JP_DEBUG,'JOPNGGF: File already open.',JPQUIET)
+        KUNIT = NUNIT
+        GOTO 900
+C
+      ELSE
+C
+C       Otherwise, ensure existing unit is closed
+C
+        IF( NUNIT.NE.0 ) THEN
+          CALL PBCLOSE3( NUNIT, IRET)
+          NUNIT=0
+        ENDIF
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. See if the file has already been created.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      IOFFSET = INDEX(YPFN, ' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF( LFOUND ) THEN
+        LFOUND = JFINDFN3(DIRNAME,FILENAME,IOFFSET,NUNIT)
+        IF( LFOUND ) GOTO 500
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      CALL PBOPEN3( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.EQ.0 ) GOTO 500
+C     _______________________________________________________
+C
+C*    Section 3. File doesn't exist, find a suitable directory for it.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF( LFOUND ) THEN
+        IOFFSET = INDEX(DIRNAME, ' ') - 1
+        FULLPATH  = DIRNAME(1:IOFFSET) // '/' // FILENAME
+        IOFFSET = INDEX(FULLPATH, ' ') - 1
+        FILENAME(1:IOFFSET) = FULLPATH(1:IOFFSET)
+        CALL PBOPEN3( NUNIT, FILENAME(1:IOFFSET), 'w', IRET)
+        IF( IRET.EQ.0 ) GOTO 400
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      CALL PBOPEN3( NUNIT, FILENAME(1:IOFFSET), 'w', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGGF: PBOPEN3 error.',IRET)
+        KRET = JPROUTINE + 1
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4. Create the coefficients file.
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+C     Let user know that a new file is being created.
+C
+      CALL INTLOG(JP_DEBUG,'JOPNGGF: Creating new coefficients file:',
+     X            JPQUIET)
+      CALL INTLOG(JP_DEBUG,FILENAME(1:IOFFSET), JPQUIET)
+C
+C     Change access mode to 'read only' for all users.
+C
+      IRET = JCHMOD(FILENAME(1:IOFFSET),'0444')
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGGF: JCHMOD error.',IRET)
+        KRET = JPROUTINE + 2
+        GOTO 990
+      ENDIF
+C
+C     Allocate memory for the array used in making the file
+C
+      ISIZE = (KTRUNC+1)*(KTRUNC+4)/2
+      IF( ISIZE.GT.NISIZE7 ) THEN
+        CALL JMEMHAN( 7, IRPLEG, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JOPNGGF: memory allocate error',IRPLEG)
+          KRET = JPROUTINE + 3
+          GOTO 990
+        ENDIF
+        NISIZE7 = ISIZE
+      ENDIF
+C
+C     Make coefficients file
+C
+      CALL JMAKGG3( NUNIT, KTRUNC, KNUM, PLAT, RPLEG, KRET)
+      IF( KRET.NE.0 ) GOTO 990
+C
+C     De-allocate memory for the array used in making the file
+C
+      CALL JMEMHAN( 7, IRPLEG, ISIZE, 0, KRET)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGGF: memory dealloc error',IRPLEG)
+        KRET = JPROUTINE + 4
+        GOTO 990
+      ENDIF
+      NISIZE7 = 0
+C
+C     Close coefficients file
+C
+      CALL PBCLOSE3( NUNIT, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGGF: PBCLOSE error.',IRET)
+        KRET = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+      NUNIT=0
+C
+C     Reopen with read access
+C
+      CALL PBOPEN3( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGGF: PBOPEN error.',IRET)
+        KRET = JPROUTINE + 6
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 5. File now open with read access.
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+C     Allocate memory for the file and read the file into memory
+C
+      ISIZE = ((KTRUNC+1)*(KTRUNC+4)/2)*KNUM
+      IF( ISIZE.GT.NISIZE7 ) THEN
+            CALL JMEMHAN2( 7, IPLEG, ISIZE, 1, KRET)
+cs            CALL JMEMHAN( 7, IPLEG, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JOPNGGF: memory allocation error',IPLEG)
+          KRET = JPROUTINE + 7
+          GOTO 990
+        ENDIF
+        NISIZE7 = ISIZE
+      ENDIF
+C
+       ITEMP = ISIZE
+cs       ITEMP = ISIZE*NPBYTES
+       ITEMP = ITEMP*8
+
+      CALL GETENV('USE_PBREAD4', YFLAG)  
+      IF(YFLAG(1:1).EQ.'1') THEN
+           CALL PBREAD4(NUNIT, ALEG, ITEMP, IRET1)
+      ELSE
+cs          print*,'PBREAD5 -----------'
+           CALL PBREAD5(NUNIT, ALEG, ITEMP, IRET1)
+      ENDIF
+           IF( IRET1.NE.ITEMP ) THEN
+              CALL INTLOG(JP_FATAL,'JOPNGGF: PBREAD4 error.',IRET1)
+              KRET = JPROUTINE + 8
+              GOTO 990
+           ENDIF
+cs           CALL PBREAD3(NUNIT, ALEG, (ISIZE*NPBYTES), IRET)
+cs           IF( IRET.NE.(ISIZE*NPBYTES) ) THEN
+cs             CALL INTLOG(JP_FATAL,'JOPNGGF: PBREAD3 error.',IRET)
+cs             KRET = JPROUTINE + 8
+cs             GOTO 990
+cs           ENDIF
+C
+C     The file is no longer required
+C
+      CALL PBCLOSE3( NUNIT, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNGGF: PBCLOSE3 error.',IRET)
+	NUNIT = 0
+	KRET = JPROUTINE + 9
+	GOTO 990
+      ENDIF
+      NUNIT=0
+C
+      KUNIT = NUNIT
+      YOLDGG = YPFN
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jopnggsm.c b/interpolation/jopnggsm.c
new file mode 100755
index 0000000..559f3fa
--- /dev/null
+++ b/interpolation/jopnggsm.c
@@ -0,0 +1,460 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <string.h>
+#include "fortint.h"
+ 
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define JOPNGGSM jopnggsm
+#define JMAKGG jmakgg
+#define INTLOGT intlogt
+#define PBOPEN pbopen
+#define PBCLOSE pbclose
+#else
+#define JOPNGGSM jopnggsm_
+#define JMAKGG jmakgg_
+#define INTLOGT intlogt_
+#define PBOPEN pbopen_
+#define PBCLOSE pbclose_
+#endif
+#endif
+
+/*
+//#ifdef POINTER_64
+//#define pointer long
+//#else
+//#define pointer fortint
+//#endif
+*/
+
+#ifdef linux
+# if !defined __off64_t_defined
+typedef __off64_t off64_t;
+#define __off64_t_defined
+#ifdef FOPEN64
+void *mmap64(void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset);
+#endif
+#endif
+#endif 
+
+#ifdef FOPEN64
+#define OFF_T off64_t
+extern OFF_T ftello64(FILE *);
+#else
+#define OFF_T off_t
+#endif
+
+
+
+void INTLOGT(char * message, long length);
+FILE * pbfp(long);
+
+#ifdef REAL_8
+void JOPNGGSM(
+  JPointer *ipdum,
+  fortint *knum,
+  fortint *iktrunc,
+  fortint *kunit,
+  double *plat,
+  fortint * kret)
+#else
+void JOPNGGSM(
+  JPointer *ipdum,
+  fortint *knum,
+  fortint *iktrunc,
+  fortint *kunit,
+  float *plat,
+  fortint * kret)
+#endif
+/*
+C
+C**** JOPNGGSM
+C
+C     Purpose
+C     _______
+C
+C     This routine finds a file of legendre polynomials corresponding
+C     to a given grid interval and truncation and maps the file to an
+C     array and returns a file descriptor.
+C
+C     Interface
+C     _________
+C
+C     CALL JOPNGGSM( IPDUM, KNUM, KTRUNC, KUNIT, PLAT, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     IPDUM   - Dummy array for mapping legendre function file
+C     KNUM    - Gaussian grid number
+C     KTRUNC  - Spherical truncation
+C     PLAT    - Array of latitudes for the gaussian grid
+C
+C     Output parameters
+C     _________________
+C
+C     KUNIT   - file descriptor from fopen
+C               NULL , open failed
+C     KRET    - Return status, 0 = OK.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     Method
+C     ______
+C
+C     Builds a file name from the truncation and grid interval and
+C     tries to open a file of that name.
+C
+C     If the file is already open (from a previous call) the
+C     previous unit number is returned.
+C     If a different file is already open (from a previous call), the
+C     existing file is closed first.
+C
+C     If no file can be located, a file is created.
+C
+C     Externals
+C     _________
+C
+C     GETENV     - Get value of an environment variable
+C     JMAKGG     - Makes a file of legendre coefficients
+C     PBOPEN     - Opens a file
+C     PBCLOSE    - Closes a file
+C
+C     Reference
+C     _________
+C
+C     NONE
+C
+C     Comments
+C     ________
+C
+C     The filename for the legendre polynomials has the form:
+C         cf_xxxx_nnnn   Truncation xxxx, Gaussian number yyy
+C     For example,
+C         cf_0213_n160          T213    N160
+C         cf_0106_n080          T106    N80
+C
+C     On the C90, the file of polynomials may be cached in /owrk/marsint
+C
+C     Otherwise the file is located in (or will be created in) the first
+C     directory given by one of the following (in the order listed, if
+C     they exist):
+C         environment variable PPDIR
+C     or
+C         the current working directory.
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     Modifications
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C     Standardise the search order for the environment variables.
+C
+C     J.D.Chambers      *ECMWF*      Sept 1999
+C     Use PB routines for OPEN and CLOSE (use index into table of FILE *)
+C
+*/
+{
+#if (defined hpR64) || (defined hpiaR64)
+long l1, l2;
+#else
+fortint l1, l2;
+#endif
+char filedum[128], filename[128];
+#ifdef REAL_8
+char ypfn[13] =        "CF_xxxx_nnnn";
+#else
+char ypfn[13] =        "cf_xxxx_nnnn";
+#endif
+static char yold[13] = "xxxxxxxxxxxx";
+static char yarray[12][13];
+static int ncnt = 0;
+static int nunit = -1;
+int i;
+long long len, len_pleg;
+static long long oldlen;
+char * fn;
+static fortint fpindex;
+static FILE * fp;
+off_t off = 0;
+static void * result = 0;
+static void * oldresult = 0;
+static void * resultarray[12];
+static int unitarray[12];
+#ifdef REAL_8
+double * pleg;
+#else
+float * pleg;
+#endif
+int exist = 0;
+char message[] = "JOPNGGSM: creating coefficients file";
+int status;
+pid_t process_id;
+int ktrunc = (int) (*iktrunc);
+
+/*
+//  Setup the file name: cf_xxxx_nnnn
+*/
+#ifdef REAL_8
+  len_pleg =  sizeof(double) * (ktrunc+1) * (ktrunc+4) /2;
+  len =  *knum * sizeof(double) * (ktrunc+1) * (ktrunc+4) /2;
+#else
+  len_pleg =  sizeof(float) * (ktrunc+1) * (ktrunc+4) /2;
+  len =  *knum * sizeof(float) * (ktrunc+1) * (ktrunc+4) /2;
+#endif
+  sprintf( ypfn+3, "%04d", ktrunc);
+  sprintf( ypfn+7, "_%04d", *knum);
+
+/*
+//  If file already open, return the existing unit number
+*/
+  for(i=0;i<ncnt;i++) {
+    strncpy(yold,yarray[i],12);
+    strcat(yold,"\0");
+    if( !strcmp( ypfn, yold ) ) {
+      *kunit = (fortint) unitarray[i];
+      *ipdum = (JPointer) resultarray[i];
+      return;
+    }
+  }
+
+/*
+//  Otherwise, unmap and close the existing file
+*/
+  result = 0;
+/*
+  if( nunit != -1 ) {
+    if( munmap((caddr_t) oldresult, oldlen) ) {
+      perror("JOPNGGSM: munmap error");
+      *kret = (fortint) 999;
+      return;
+    }
+    PBCLOSE(&fpindex,kret);
+    if( *kret != 0 ) {
+      perror("JOPNGGSM: PBCLOSE error");
+      *kret = (fortint) 999;
+      return;
+    }
+  }
+*/
+
+/* 
+  If more than 12 files are memory mapped , error
+*/
+  if(ncnt==13) {
+    fprintf(stderr,"JOPNGGSM: attempt to memory map more than 12 files\n");
+    *kret = (fortint) 999;
+    return;
+  }
+
+/*
+//  See if the  file has already been created.
+*/
+  fn = getenv("PPDIR");
+  if( (fn != NULL) && (strlen(fn) != 0) ) {
+    strcpy( filename, fn );
+    strcat( filename, "/");
+    strcat( filename, ypfn);
+    l1 = strlen(filename);
+    l2 = 1;
+    PBOPEN(&fpindex,filename,"r",kret,l1,l2);
+    if( *kret == 0 ) {
+      fp = pbfp((long)fpindex);
+      if( fp != NULL ) exist = 1;
+    }
+  }
+
+  if( !exist ) {
+    strcpy( filename, "./" );
+    strcat( filename, ypfn);
+    l1 = strlen(filename);
+    l2 = 1;
+    PBOPEN(&fpindex,filename,"r",kret,l1,l2);
+    if( *kret == 0 ) {
+      fp = pbfp((long)fpindex);
+      if( fp != NULL ) exist = 1;
+    }
+  }
+
+/*
+//  If file doesn't exist, find a suitable directory for it.
+*/
+  if( !exist ) {
+    fn = getenv( "PPDIR" );
+    if( (fn != NULL) && (strlen(fn) != 0) ) {
+      strcpy( filename, fn );
+      strcat( filename, "/");
+    }
+    else
+      strcpy( filename, "./" );
+
+    strcat( filename, ypfn);
+
+/*
+//  Open it with write access, change mode to 'read only', and make it
+*/
+    INTLOGT(message,strlen(message));
+    INTLOGT(filename,strlen(filename));
+
+    process_id = getpid();
+
+    strcpy(filedum, filename);
+    sprintf(&filedum[strlen(filename)],"_%06d",process_id);
+
+    l1 = strlen(filedum);
+    l2 = 1;
+    PBOPEN(&fpindex,filedum,"w",kret,l1,l2);
+    if( (*kret) || ( fp = pbfp((long)fpindex) ) == NULL ) {
+      strcpy( filename, "./" );
+      strcat( filename, ypfn);
+      strcpy(filedum, filename);
+      sprintf(&filedum[strlen(filename)],"_%06d",process_id);
+      l1 = strlen(filedum);
+      l2 = 1;
+      PBOPEN(&fpindex,filedum,"w",kret,l1,l2);
+      if( *kret ) {
+        perror("JOPNGGSM: PBOPEN error");
+        return;
+      }
+      fp = pbfp((long)fpindex);
+      if( fp == NULL ) {
+        perror("JOPNGGSM: file pointer after PBOPEN is NULL");
+        *kret = (fortint) 998;
+        return;
+      }
+    }
+
+    status = chmod( filedum, (mode_t) 0444 );
+    if( status ) {
+      perror("JOPNGGSM: chmod error");
+      *kret = (fortint) 997;
+      return;
+    }
+
+/*
+//  Setup scratch legendre file.
+*/
+#ifdef REAL_8
+    pleg = (double *) malloc(len_pleg*2);
+#else
+    pleg = (float *) malloc(len_pleg*2);
+#endif
+
+    if( pleg == NULL ) {
+      perror("JOPNGGSM: malloc error.");
+      *kret = (fortint) 996;
+      return;
+    }
+    JMAKGG( &fpindex, iktrunc, knum, plat, pleg, kret);
+    if( *kret != 0 ) {
+      free(pleg);
+      return;
+    }
+
+/*
+//  Close it, rename it, and open it again with read access
+*/
+    free(pleg);
+    PBCLOSE(&fpindex,kret);
+    status = rename(filedum, filename);
+    if( status ) {
+      perror("JOPNGGSM: rename error");
+      *kret = (fortint) 995;
+      return;
+    }
+
+    l1 = strlen(filename);
+    l2 = 1;
+    PBOPEN(&fpindex,filename,"r",kret,l1,l2);
+    if( *kret ) {
+      perror("JOPNGGSM: PBOPEN error");
+      *kret = (fortint) 994;
+      return;
+    }
+    fp = pbfp((long)fpindex);
+    if( fp == NULL ) {
+      perror("JOPNGGSM: file pointer after PBOPEN is NULL");
+      *kret = (fortint) 994;
+      return;
+    }
+  }
+
+/*
+//  Check the file size
+*/
+#ifdef FOPEN64
+  fseeko64(fp, 0, 2);
+  if( len != ftello64(fp) ) {
+#else
+  fseek(fp, 0, 2);
+  if( len != ftell(fp) ) {
+#endif
+    fprintf(stderr,"JOPNGGSM: coefficients file size should be %lld bytes\n", len)
+;
+    *kret = (fortint) 993;
+    return;
+  }
+#ifdef FOPEN64
+  fseeko64(fp, 0, 0);
+#else
+  fseek(fp, 0, 0);
+#endif
+
+/*
+//  Map the file
+*/
+  nunit = fileno(fp);
+  if( nunit >= 0 ) {
+    char *p      = getenv("PPMAPADDR");
+    caddr_t addr = (caddr_t) (p?atol(p):0);
+
+#ifdef FOPEN64
+    result =  (void *) mmap64(addr,(size_t) len, (PROT_READ),
+                            MAP_SHARED,(int) nunit, (OFF_T)off);
+#else
+    result =  (void *) mmap(addr,(size_t) len, (PROT_READ),
+                            MAP_SHARED,(int) nunit,(OFF_T) off);
+#endif
+    /* result =  (void *) mmap(addr,(size_t) len, (PROT_READ), */
+                            /* MAP_SHARED,(int) nunit,(off_t) off); */
+
+    if( (caddr_t) result == (caddr_t) -1 ) {
+      perror("JOPNGGSM: mmap error");
+      *kret = (fortint) 992;
+      return;
+    }
+    oldresult = result;
+    oldlen = len;
+  }
+
+  *ipdum = (JPointer) result;
+  *kunit = (fortint) nunit;
+  strcpy( yarray[ncnt], ypfn);
+  resultarray[ncnt] = result;
+  unitarray[ncnt] = nunit;
+  ncnt+=1;
+
+  return;
+}
diff --git a/interpolation/jopnll.F b/interpolation/jopnll.F
new file mode 100755
index 0000000..90a80df
--- /dev/null
+++ b/interpolation/jopnll.F
@@ -0,0 +1,328 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JOPNLL( PLEG, PINTVL, KTRUNC, KUNIT, PBUILD, KRET)
+C
+C---->
+C**** JOPNLL
+C
+C     Purpose
+C     _______
+C
+C     This routine finds a file of legendre polynomials corresponding
+C     to a given grid interval and truncation and returns a unit number.
+C
+C     Interface
+C     _________
+C
+C     CALL JOPNLL( PLEG, PINTVL, KTRUNC, KUNIT, PBUILD, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PLEG    - Array for legendre function
+C     PINTVL  - Grid interval in degrees
+C     KTRUNC  - Spherical truncation
+C
+C     Output parameters
+C     _________________
+C
+C     KUNIT   - Unit number from PBOPEN
+C               0 , open failed
+C     PBUILD  - Grid interval used to build the legendre 
+C               coefficients file (degrees)
+C     KRET    - Return status code
+C               0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     Method
+C     ______
+C
+C     Builds a file name from the truncation and grid interval and
+C     tries to open a file of that name.
+C
+C     If the file is already open (from a previous call), the
+C     previous unit number is returned.
+C     If a different file is already open (from a previous call), the
+C     existing file is closed first.
+C
+C     If no file can be located, a file is created.
+C
+C     Externals
+C     _________
+C
+C     PBOPEN   - Open binary file and return unit number
+C     PBCLOSE  - Close binary file
+C     JFINDIR  - Find the file of legendre coefficients
+C     JMAKLL   - Makes a file of legendre coefficients
+C     INTLOG   - Output log message
+C     JCHMOD   - Change file permissions
+C     RENAME   - Rename file
+C
+C     Reference
+C     _________
+C
+C     NONE
+C
+C     Comments
+C     ________
+C
+C     The Legendre polynomials for the transforms may be held in
+C     a ready-made file whose name is held in an environment variable:
+C         cf_txxxx_raabbbbb       Txxx   aa.bbbbb degrees
+C     For example,
+C         cf_t0213_r0050000       T213    0.5 degrees
+C         cf_t0106_r0250000       T106    2.5 degrees
+C
+C     On the C90, the file of polynomials may be cached in /owrk/marsint
+C
+C     Otherwise the file is located in (or will be created in) the first
+C     directory given by one of the following (in the order listed, if
+C     they exist):
+C         environment variable PPDIR
+C     or
+C         the current working directory.
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1993
+C
+C     Modifications
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C     Standardise the search order for the environment variables.
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER( JPROUTINE = 30900 )
+C
+C     Subroutine arguments
+C
+      REAL      PLEG, PINTVL, PBUILD
+      DIMENSION PLEG(*)
+      INTEGER   KTRUNC, KUNIT, KRET
+C
+C     Local variables
+C
+      INTEGER IRET, IOFFSET
+      LOGICAL LFOUND
+      CHARACTER*256 DIRNAME
+      CHARACTER*256 FILENAME, FILEDUM
+      CHARACTER*512 FULLPATH
+      CHARACTER*20 YPFN
+      CHARACTER*20 YOLD
+#ifdef REAL_8
+      DATA YPFN/'CF_Txxxx_Raabbbbb'/
+#else
+      DATA YPFN/'cf_txxxx_raabbbbb'/
+#endif
+      DATA YOLD/'xxxxxxxxxxxxxxxxx'/
+      INTEGER NUNIT
+      DATA NUNIT/0/
+C
+      SAVE NUNIT, YOLD
+C
+C     Externals
+C
+      LOGICAL JFINDIR
+      LOGICAL JFINDFN
+      INTEGER JCHMOD, RENAME
+C
+C     _______________________________________________________
+C
+C*    Section 1. See if required file already in use.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Setup the filename: cf_txxxx_raabbbbb
+C
+      WRITE(YPFN(5:8),'(I4.4)') KTRUNC
+      WRITE(YPFN(11:17),'(I7.7)') NINT(PINTVL*JPMULT)
+      CALL INTLOG(JP_DEBUG,
+     X  'JOPNLL: Coefficients file to open is:', JPQUIET)
+      CALL INTLOG(JP_DEBUG, YPFN, JPQUIET)
+      PBUILD = PINTVL
+C
+C     If file already open, return the existing unit number
+C
+      IF( YPFN.EQ.YOLD ) THEN
+        CALL INTLOG(JP_DEBUG,'JOPNLL: File already open.',JPQUIET)
+        KUNIT = NUNIT
+        GOTO 900
+      ENDIF
+C
+C     Otherwise, close the existing file
+C
+      IF( NUNIT.NE.0 ) THEN
+	CALL PBCLOSE(NUNIT, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JOPNLL: PBCLOSE error',IRET)
+	  KRET = JPROUTINE + 1
+	  GOTO 990
+        ENDIF
+	NUNIT = 0
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. See if the file has already been created.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Set appropriate build inteval 
+C
+      WRITE(YPFN(11:17),'(I7.7)') NINT(PBUILD*JPMULT)
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF( LFOUND ) THEN
+        LFOUND = JFINDFN(DIRNAME,FILENAME,IOFFSET,NUNIT)
+        IF( LFOUND ) GOTO 500
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN, ' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      CALL PBOPEN( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.EQ.0 ) GOTO 500
+C     _______________________________________________________
+C
+C*    Section 3. File doesn't exist, find a suitable directory for it.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF ( LFOUND ) THEN
+        IOFFSET = INDEX(DIRNAME, ' ') - 1
+        FULLPATH = DIRNAME(1:IOFFSET) // '/' // FILENAME
+        IOFFSET = INDEX(FULLPATH, ' ') - 1
+        FILENAME(1:IOFFSET) = FULLPATH(1:IOFFSET)
+        FILEDUM(1:IOFFSET) = FILENAME(1:IOFFSET)
+#ifdef REAL_8
+        FILEDUM(IOFFSET-16:IOFFSET-15) = 'XX'
+#else
+        FILEDUM(IOFFSET-16:IOFFSET-15) = 'xx'
+#endif
+        CALL PBOPEN(NUNIT, FILEDUM(1:IOFFSET), 'w', IRET)
+        IF( IRET.EQ.0 ) GOTO 400
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      FILEDUM(1:IOFFSET) = FILENAME(1:IOFFSET)
+#ifdef REAL_8
+      FILEDUM(IOFFSET-16:IOFFSET-15) = 'XX'
+#else
+      FILEDUM(IOFFSET-16:IOFFSET-15) = 'xx'
+#endif
+      CALL PBOPEN(NUNIT, FILEDUM(1:IOFFSET), 'w', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLL: PBOPEN error.',IRET)
+        KRET = JPROUTINE + 2
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4. Create the coefficients file.
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+C     Let user know that a new file is being created.
+C
+      IOFFSET = INDEX(FILENAME, ' ') - 1
+      CALL INTLOG(JP_DEBUG,'JOPNLL: Creating new coefficients file:',
+     X            JPQUIET)
+      CALL INTLOG(JP_DEBUG,FILENAME(1:IOFFSET), JPQUIET)
+C
+C     Change access mode to 'read only' for all users.
+C
+      IRET = JCHMOD(FILEDUM(1:IOFFSET),'0444')
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLL: JCHMOD error.',IRET)
+        KRET = JPROUTINE + 3
+        GOTO 990
+      ENDIF
+C
+C     Make coefficients file
+C
+      CALL JMAKLL( NUNIT, KTRUNC, PBUILD, 0.0, PLEG, KRET)
+      IF( KRET.NE.0 ) GOTO 990
+C
+C     Close it, rename it, re-open for reading, leave it open.
+C
+      CALL PBCLOSE(NUNIT, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JOPNLL: PBCLOSE error.',IRET)
+        KRET = JPROUTINE + 4
+        GOTO 990
+      ENDIF
+C
+      FILEDUM(IOFFSET+1:IOFFSET+1) = CHAR(0)
+      FILENAME(IOFFSET+1:IOFFSET+1) = CHAR(0)
+      IRET = RENAME(FILEDUM(1:IOFFSET),FILENAME(1:IOFFSET))
+#ifndef hpR64
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLL: RENAME of file failed',JPQUIET)
+        KRET = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+#endif
+C
+      CALL PBOPEN(NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLL: PBOPEN error.',IRET)
+        KRET = JPROUTINE + 6
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 5. File now open with read access.
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+      KUNIT = NUNIT
+      YOLD  = YPFN
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jopnllf.F b/interpolation/jopnllf.F
new file mode 100755
index 0000000..53fa5ac
--- /dev/null
+++ b/interpolation/jopnllf.F
@@ -0,0 +1,410 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JOPNLLF( IALEG, PINTVL, KTRUNC, KUNIT, PBUILD, KRET)
+C
+C---->
+C**** JOPNLLF
+C
+C     Purpose
+C     _______
+C
+C     This routine finds a file of legendre polynomials corresponding
+C     to a given grid interval and truncation, allocates memory, reads
+C     the coefficients into the memory and returns a unit number.
+C
+C     Interface
+C     _________
+C
+C     CALL JOPNLLF( IALEG, PINTVL, KTRUNC, KUNIT, PBUILD, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PINTVL  - Grid interval in degrees
+C     KTRUNC  - Spherical truncation
+C
+C     Output parameters
+C     _________________
+C
+C     IALEG   - Pointer for memory array for legendre coefficients
+C     KUNIT   - Unit number from PBOPEN
+C               0 , open failed
+C     PBUILD  - Grid interval used to build the legendre 
+C               coefficients file (degrees)
+C     KRET    - Return status code
+C               0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     Uses common JDCSPGP for size NISIZE6
+C
+C     Method
+C     ______
+C
+C     Builds a file name from the truncation and grid interval and
+C     tries to open a file of that name.
+C
+C     If the file is already open (from a previous call), the
+C     previous unit number is returned.
+C     If a different file is already open (from a previous call), the
+C     the existing file is closed.
+C
+C     If no file can be located, a file is created. Memory is dynamically
+C     allocted and the coefficients are read into the memory array.
+C
+C     Externals
+C     _________
+C
+C     PBOPEN3  - Open binary file and return unit number
+C     PBREAD3  - Read binary file
+C     PBCLOSE3 - Close binary file
+C     JFINDIR  - Find the file of legendre coefficients
+C     JMAKLL   - Makes a file of legendre coefficients
+C     INTLOG   - Output log message
+C     JCHMOD   - Change file permissions
+C     RENAME   - Rename file
+C
+C     Reference
+C     _________
+C
+C     NONE
+C
+C     Comments
+C     ________
+C
+C     The Legendre polynomials for the transforms may be held in
+C     a ready-made file whose name is held in an environment variable:
+C         cf_txxxx_raabbbbb       Txxxx   aa.bbbbb degrees
+C     For example,
+C         cf_t0213_r0050000       T213    0.5 degrees
+C         cf_t0106_r0250000       T106    2.5 degrees
+C
+C     On the C90, the file of polynomials may be cached in /owrk/marsint
+C
+C     Otherwise the file is located in (or will be created in) the first
+C     directory given by one of the following (in the order listed, if
+C     they exist):
+C         environment variable PPDIR
+C     or
+C         the current working directory.
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jun 1996
+C
+C     Modifications
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "jparams.h"
+#include "jparam2.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30910 )
+C
+C     Subroutine arguments
+C
+      REAL      PINTVL, PBUILD
+      INTEGER   KTRUNC, KUNIT, KRET
+C
+C     Local variables
+C
+      INTEGER IRET, IOFFSET, ISIZE, NPBYTES
+      INTEGER*8 IRET1, ITEMP
+      CHARACTER*12 YFLAG
+#ifdef REAL_8
+      DATA NPBYTES/8/
+#else
+      DATA NPBYTES/4/
+#endif
+      LOGICAL LFOUND
+      CHARACTER*256 DIRNAME
+      CHARACTER*256 FILENAME, FILEDUM
+      CHARACTER*512 FULLPATH
+      CHARACTER*20 YPFN
+#ifdef REAL_8
+      DATA YPFN/'CF_Txxxx_Raabbbbb'/
+#else
+      DATA YPFN/'cf_txxxx_raabbbbb'/
+#endif
+      INTEGER NUNIT
+      DATA NUNIT/0/
+#ifdef POINTER_64
+      INTEGER*8 IALEG
+#endif
+      REAL ALEG
+      DIMENSION ALEG(1)
+      POINTER ( IALEG, ALEG )
+C
+      SAVE NUNIT
+C
+C     Externals
+C
+      LOGICAL JFINDIR
+      LOGICAL JFINDFN3
+      INTEGER JCHMOD, RENAME
+C
+C     _______________________________________________________
+C
+C*    Section 1. See if required file already in use.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Setup the filename: cf_txxxx_raabbbbb
+C
+      WRITE(YPFN(5:8),'(I4.4)') KTRUNC
+      WRITE(YPFN(11:17),'(I7.7)') NINT(PINTVL*JPMULT)
+      CALL INTLOG(JP_DEBUG,
+     X  'JOPNLLF: Coefficients file to open is:', JPQUIET)
+      CALL INTLOG(JP_DEBUG, YPFN, JPQUIET)
+      PBUILD = PINTVL
+C
+C     If file already open, return the existing unit number
+C
+      IF( YPFN.EQ.YOLDLL ) THEN
+        CALL INTLOG(JP_DEBUG,'JOPNLLF: File already open.',JPQUIET)
+        KUNIT = NUNIT
+        GOTO 900
+      ENDIF
+C
+C     Otherwise, ensure existing unit is closed
+C
+      IF( NUNIT.NE.0 ) THEN
+        CALL PBCLOSE3(NUNIT, IRET)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JOPNLLF: PBCLOSE3 error',IRET)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+        NUNIT = 0
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 2. See if the file has already been created.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Set appropriate build inteval 
+C
+      WRITE(YPFN(11:17),'(I7.7)') NINT(PBUILD*JPMULT)
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF( LFOUND ) THEN
+        LFOUND = JFINDFN3(DIRNAME,FILENAME,IOFFSET,NUNIT)
+        IF( LFOUND ) GOTO 500
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN, ' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      CALL PBOPEN3( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.EQ.0 ) GOTO 500
+C     _______________________________________________________
+C
+C*    Section 3. File doesn't exist, find a suitable directory for it.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      LFOUND = JFINDIR('PPDIR', DIRNAME)
+      IF ( LFOUND ) THEN
+        IOFFSET = INDEX(DIRNAME, ' ') - 1
+        FULLPATH = DIRNAME(1:IOFFSET) // '/' // FILENAME
+        IOFFSET = INDEX(FULLPATH, ' ') - 1
+        FILENAME(1:IOFFSET) = FULLPATH(1:IOFFSET)
+        FILEDUM(1:IOFFSET) = FILENAME(1:IOFFSET)
+#ifdef REAL_8
+        FILEDUM(IOFFSET-16:IOFFSET-15) = 'XX'
+#else
+        FILEDUM(IOFFSET-16:IOFFSET-15) = 'xx'
+#endif
+        CALL PBOPEN3(NUNIT, FILEDUM(1:IOFFSET), 'w', IRET)
+        IF( IRET.EQ.0 ) GOTO 400
+      ENDIF
+C
+C     Try present working directory
+C
+      IOFFSET = INDEX(YPFN,' ') - 1
+      FILENAME = YPFN(1:IOFFSET)
+      FILEDUM(1:IOFFSET) = FILENAME(1:IOFFSET)
+#ifdef REAL_8
+      FILEDUM(IOFFSET-16:IOFFSET-15) = 'XX'
+#else
+      FILEDUM(IOFFSET-16:IOFFSET-15) = 'xx'
+#endif
+      CALL PBOPEN3(NUNIT, FILEDUM(1:IOFFSET), 'w', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: PBOPEN3 error.',IRET)
+        KRET = JPROUTINE + 2
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4. Create the coefficients file.
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+C     Let user know that a new file is being created.
+C
+      IOFFSET = INDEX(FILENAME, ' ') - 1
+      CALL INTLOG(JP_DEBUG,'JOPNLLF: Creating new coefficients file:',
+     X            JPQUIET)
+      CALL INTLOG(JP_DEBUG,FILENAME(1:IOFFSET), JPQUIET)
+C
+C     Change access mode to 'read only' for all users.
+C
+      IRET = JCHMOD(FILEDUM(1:IOFFSET),'0444')
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: JCHMOD error.',IRET)
+        KRET = JPROUTINE + 3
+        GOTO 990
+      ENDIF
+C
+C     Allocate memory for the array used in making the file
+C
+      ISIZE = (KTRUNC+1)*(KTRUNC+4)*(NINT(90.0/PBUILD)+1)/2
+      IF( ISIZE.GT.NISIZE6 ) THEN
+        CALL JMEMHAN( 6, IALEG, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JOPNLLF: memory allocation error',IALEG)
+          KRET = JPROUTINE + 3
+          GOTO 990
+        ENDIF
+        NISIZE6 = ISIZE
+      ENDIF
+C
+C     Make coefficients file
+C
+      CALL JMAKLL3( NUNIT, KTRUNC, PBUILD, 0.0, ALEG, KRET)
+      IF ( KRET .NE. 0 ) GOTO 990
+C
+C     De-allocate memory for the array used in making the file
+C
+      CALL JMEMHAN( 6, IALEG, ISIZE, 0, KRET)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: memory dealloc error',IALEG)
+        KRET = JPROUTINE + 4
+        GOTO 990
+      ENDIF
+      NISIZE6 = 0
+C
+C     Close rename it, re-open for reading, leave it open.
+C
+      CALL PBCLOSE3( NUNIT, IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: PBCLOSE3 error.',IRET)
+        KRET = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+      NUNIT=0
+C
+      IRET = RENAME(FILEDUM(1:IOFFSET),FILENAME(1:IOFFSET))
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: RENAME of file failed',JPQUIET)
+        KRET = JPROUTINE + 5
+        GOTO 990
+      ENDIF
+C
+      CALL PBOPEN3( NUNIT, FILENAME(1:IOFFSET), 'r', IRET)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: PBOPEN3 error.',IRET)
+        KRET = JPROUTINE + 6
+        GOTO 990
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 5. File now open with read access.
+C     _______________________________________________________
+C
+  500 CONTINUE
+C
+C     Allocate memory for the file and read it into memory
+C
+      ISIZE = (KTRUNC+1)*(KTRUNC+4)*(NINT(90.0/PBUILD)+1)/2
+      IF( ISIZE.GT.NISIZE6 ) THEN
+        CALL JMEMHAN2( 6, IALEG, ISIZE, 1, KRET)
+cs        CALL JMEMHAN( 6, IALEG, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_FATAL,'JOPNLLF: memory allocation error',IALEG)
+          KRET = JPROUTINE + 7
+          GOTO 990
+        ENDIF
+        NISIZE6 = ISIZE
+      ENDIF
+      ITEMP = ISIZE
+      ITEMP = ITEMP*8
+C
+      CALL GETENV('USE_PBREAD4', YFLAG)
+      IF(YFLAG(1:1).EQ.'1') THEN
+           CALL PBREAD4(NUNIT, ALEG, ITEMP, IRET1)
+      ELSE
+           print*,'PBREAD5 ',ITEMP
+           CALL PBREAD5(NUNIT, ALEG, ITEMP, IRET1)
+      ENDIF
+C
+      IF( IRET1.NE.ITEMP ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: PBREAD5 error.',IRET1)
+        KRET = JPROUTINE + 8
+        GOTO 990
+      ENDIF
+cs      CALL PBREAD3(NUNIT, ALEG, (ISIZE*NPBYTES), IRET)
+cs      IF( IRET.NE.(ISIZE*NPBYTES) ) THEN
+cs        CALL INTLOG(JP_FATAL,'JOPNLLF: PBREAD3 error.',IRET)
+cs        KRET = JPROUTINE + 8
+cs        GOTO 990
+cs      ENDIF
+C
+C     The file is no longer required
+C
+      CALL PBCLOSE3( NUNIT, IRET)
+      IF ( IRET .NE. 0 ) THEN
+        CALL INTLOG(JP_FATAL,'JOPNLLF: PBCLOSE3 error.',IRET)
+        NUNIT = 0
+        KRET = JPROUTINE + 9
+        GOTO 990
+      ENDIF
+      NUNIT=0
+C
+      KUNIT = NUNIT
+      YOLDLL  = YPFN
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jopnllsm.c b/interpolation/jopnllsm.c
new file mode 100755
index 0000000..1374a68
--- /dev/null
+++ b/interpolation/jopnllsm.c
@@ -0,0 +1,541 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#ifdef linux
+#ifndef __USE_LARGEFILE64
+#define __USE_LARGEFILE64
+#endif
+#include <sys/stat.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <string.h>
+#include "fortint.h"
+
+
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define JOPNLLSM jopnllsm
+#define JMAKLL jmakll
+#define INTLOGT intlogt
+#define PBOPEN pbopen
+#define PBCLOSE pbclose
+#else
+#define JOPNLLSM jopnllsm_
+#define JMAKLL jmakll_
+#define INTLOGT intlogt_
+#define PBOPEN pbopen_
+#define PBCLOSE pbclose_
+#endif
+#endif
+
+/*
+//#ifdef POINTER_64
+//#define pointer long
+//#else
+//#define pointer fortint
+//#endif
+*/
+
+#ifdef linux
+# if !defined __off64_t_defined
+typedef __off64_t off64_t;
+#define __off64_t_defined
+#ifdef FOPEN64
+void *mmap64(void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset);
+#endif
+#endif
+#endif 
+
+#ifdef FOPEN64
+#define OFF_T off64_t
+extern OFF_T ftello64(FILE *);
+#else
+#define OFF_T off_t
+#endif
+
+int iitimer(int *seconds)
+{
+   time_t timval1;
+	  time(&timval1);
+
+		 if (*seconds == 0) return (int)timval1;
+
+			return (int)(timval1 - (time_t)*seconds);
+}
+
+void INTLOGT(char * message, long length);
+FILE * pbfp(long);
+
+#ifdef REAL_8
+void JOPNLLSM(
+  JPointer* ipdum,
+  double* platinc,
+  fortint* iktrunc,
+  fortint* kunit,
+  double* zbuild,
+  fortint* kret)
+#else
+void JOPNLLSM(
+  JPointer* ipdum,
+  float* platinc,
+  fortint* iktrunc,
+  fortint* kunit,
+  float* zbuild,
+  fortint* kret)
+#endif
+/*
+C
+C**** JOPNLLSM
+C
+C     Purpose
+C     _______
+C
+C     This routine finds a file of legendre polynomials corresponding
+C     to a given grid interval and truncation and maps the file to an
+C     array and returns a file descriptor.
+C
+C     Interface
+C     _________
+C
+C     CALL JOPNLLSM( IPDUM, PLATINC, KTRUNC, KUNIT, ZBUILD, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     IPDUM   - Dummy array for mapping legendre function file
+C     PLATINC - Grid interval in degrees
+C     KTRUNC  - Spherical truncation
+C
+C     Output parameters
+C     _________________
+C
+C     KUNIT   - file descriptor from PBOPEN
+C               NULL , open failed
+C     ZBUILD  - Grid interval of the lat/long grid
+C               underlying the legendre function file
+C     KRET    - Return status, 0 = OK.
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     Method
+C     ______
+C
+C     Builds a file name from the truncation and grid interval and
+C     tries to open a file of that name.
+C
+C     If the file is already open (from a previous call) the
+C     previous unit number is returned.
+C     If a different file is already open (from a previous call), the
+C     existing file is closed first.
+C
+C     If no file can be located, a file is created.
+C
+C     Externals
+C     _________
+C
+C     GETENV     - Get value of an environment variable
+C     JMAKLL     - Makes a file of legendre coefficients
+C     PBOPEN     - Opens a file
+C     PBCLOSE    - Closes a file
+C
+C     Reference
+C     _________
+C
+C     NONE
+C
+C     Comments
+C     ________
+C
+C     The filename for the legendre polynomials has the form:
+C         cf_txxxx_raabbbb       Txxxx   aa.bbbb degrees
+C     For example,
+C         cf_t0213_r0050000      T213    0.5 degrees
+C         cf_t0106_r0250000      T106    2.5 degrees
+C
+C     On the C90, the file of polynomials may be cached in /owrk/marsint
+C
+C     Otherwise the file is located in (or will be created in) the first
+C     directory given by one of the following (in the order listed, if
+C     they exist):
+C         environment variable PPDIR
+C     or
+C         the current working directory.
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Feb 1996
+C
+C     Modifications
+C     _____________
+C
+C     J.D.Chambers      *ECMWF*      Mar 1996
+C     Standardise the search order for the environment variables.
+C
+C     J.D.Chambers      *ECMWF*      Sept 1999
+C     Use PB routines for OPEN and CLOSE (use index into table of FILE *)
+C
+*/
+{
+  int time1, time2;
+#if (defined hpR64) || (defined hpiaR64)
+long l1, l2;
+#else
+fortint l1, l2;
+#endif
+char filedum[128], filename[128];
+#ifdef REAL_8
+char ypfn[18] =        "CF_Txxxx_Raabbbb";
+#else
+char ypfn[18] =        "cf_txxxx_raabbbb";
+#endif
+static char yold[18] = "xxxxxxxxxxxxxxxx";
+static char yarray[12][18]; 
+static int ncnt = 0;
+static int nunit = -1;
+int i;
+OFF_T len, len_pleg, knum;
+static OFF_T oldlen;
+int kbuild ;
+char * fn;
+static fortint fpindex;
+static FILE * fp;
+OFF_T off = 0;
+static void * result = 0;
+static void * oldresult = 0;
+static void * resultarray[12];
+static int unitarray[12];
+#ifdef REAL_8
+double plat = 0.0;
+double * pleg;
+#else
+float plat = 0.0;
+float * pleg;
+#endif
+int exist = 0;
+char message[] = "JOPNLLSM: creating coefficients file";
+int status;
+pid_t process_id;
+int ktrunc = (int) (*iktrunc);
+
+/*
+//  Setup the filename: cf_txxxx_raabbbbb
+*/
+#ifdef REAL_8
+  len_pleg =  sizeof(double) * (ktrunc+1) * (ktrunc+4) /2;
+#else
+  len_pleg =  sizeof(float) * (ktrunc+1) * (ktrunc+4) /2;
+#endif
+
+  *zbuild = *platinc;
+
+  knum = (OFF_T) ( (90.0/(*zbuild)) + 0.5) + 1;
+#ifdef REAL_8
+  len =  (OFF_T)(knum * sizeof(double) * (ktrunc+1) * (ktrunc+4)/2);
+#else
+  len =  (OFF_T)(knum * sizeof(float) * (ktrunc+1) * (ktrunc+4)/2);
+#endif
+
+/*
+printf("################# len: %lld, knum: %lld, sizeof(double): %d, ktrunc+1: %d, ktrunc+4: %d\n",len,knum,sizeof(double),(ktrunc+1),(ktrunc+4));
+*/
+
+/*
+//  Setup the file name
+*/
+  sprintf( ypfn+4, "%04d", ktrunc);
+  kbuild = (int) (((*zbuild)*100000.0) + 0.5);
+#ifdef REAL_8
+  sprintf( ypfn+8, "_R%07d", kbuild);
+#else
+  sprintf( ypfn+8, "_r%07d", kbuild);
+#endif
+
+/*
+//  If file already open, return the existing unit number
+*/
+  for(i=0;i<ncnt;i++) {
+    strncpy(yold,yarray[i],17);
+    strcat(yold,"\0");
+    if( !strcmp( ypfn, yold ) ) {
+      *kunit = (fortint) unitarray[i];
+      *ipdum = (JPointer) resultarray[i];
+      return;
+    }
+  }
+
+/*
+//  Otherwise, unmap and close the existing file
+*/
+  result = 0;
+/*                
+  if( nunit != -1 ) {
+    if( munmap((caddr_t) oldresult, oldlen) ) {
+      perror("JOPNLLSM: munmap error");
+      *kret = (fortint) 999;
+      return;
+    }
+    PBCLOSE(&fpindex,kret);
+    if( *kret != 0 ) {
+      perror("JOPNLLSM: PBCLOSE error");
+      *kret = (fortint) 999;
+      return;
+    }
+
+  }
+*/
+
+/*
+  If more than 12 files are memory mapped , error
+*/
+  if(ncnt==13) {
+    fprintf(stderr,"JOPNLLSM: attempt to memory map more than 12 files\n");
+    *kret = (fortint) 999;
+    return;
+  }
+
+/*
+//  See if the  file has already been created.
+*/
+  fn = getenv("PPDIR");
+  if( (fn != NULL) && (strlen(fn) != 0) ) {
+    strcpy( filename, fn );
+    strcat( filename, "/");
+    strcat( filename, ypfn);
+    l1 = strlen(filename);
+    l2 = 1;
+    PBOPEN(&fpindex,filename,"r",kret,l1,l2);
+    if( *kret == 0 ) {
+      fp = pbfp((long)fpindex);
+      if( fp != NULL ) exist = 1;
+    }
+  }
+
+  if( !exist ) {
+    strcpy( filename, "./" );
+    strcat( filename, ypfn);
+    l1 = strlen(filename);
+    l2 = 1;
+    PBOPEN(&fpindex,filename,"r",kret,l1,l2);
+    if( *kret == 0 ) {
+      fp = pbfp((long)fpindex);
+      if( fp != NULL ) exist = 1;
+    }
+  }
+
+/*
+//  If file doesn't exist, find a suitable directory for it.
+*/
+  if( !exist ) {
+    fn = getenv( "PPDIR" );
+    if( (fn != NULL) && (strlen(fn) != 0) ) {
+      strcpy( filename, fn );
+      strcat( filename, "/");
+    }
+    else
+      strcpy( filename, "./" );
+
+    strcat( filename, ypfn);
+
+/*
+//  Open it with write access, change mode to 'read only', and make it
+*/
+    INTLOGT(message,strlen(message));
+    INTLOGT(filename,strlen(filename));
+
+    process_id = getpid();
+
+    strcpy(filedum, filename);
+    sprintf(&filedum[strlen(filename)],"_%07d",process_id);
+
+    l1 = strlen(filedum);
+    l2 = 1;
+    PBOPEN(&fpindex,filedum,"w",kret,l1,l2);
+    if( (*kret) || ( fp = pbfp((long)fpindex) ) == NULL ) {
+      strcpy( filename, "./" );
+      strcat( filename, ypfn);
+      strcpy(filedum, filename);
+      sprintf(&filedum[strlen(filename)],"_%07d",process_id);
+      l1 = strlen(filedum);
+      l2 = 1;
+      PBOPEN(&fpindex,filedum,"w",kret,l1,l2);
+      if( *kret ) {
+        perror("JOPNLLSM: PBOPEN error");
+        return;
+      }
+      fp = pbfp((long)fpindex);
+      if( fp == NULL ) {
+        perror("JOPNLLSM: file pointer after PBOPEN is NULL");
+        *kret = (fortint) 998;
+        return;
+      }
+    }
+
+    status = chmod( filedum, (mode_t) 0444 );
+    if( status ) {
+      perror("JOPNLLSM: chmod error");
+      *kret = (fortint) 997;
+      return;
+    }
+
+/*
+//  Setup scratch legendre file.
+*/
+#ifdef REAL_8
+    pleg = (double *) malloc(len_pleg*2);
+#else
+    pleg = (float *) malloc(len_pleg*2);
+#endif
+
+    if( pleg == NULL ) {
+      perror("JOPNLLSM: malloc error.");
+      *kret = (fortint) 996;
+      return;
+    }
+
+    JMAKLL( &fpindex, iktrunc, zbuild, &plat, pleg, kret);
+    if( *kret != 0 ) {
+      free(pleg);
+      return;
+    }
+
+/*
+//  Close it, rename it, and open it again with read access
+*/
+    free(pleg);
+    PBCLOSE(&fpindex,kret);
+    status = rename(filedum, filename);
+    if( status ) {
+      perror("JOPNLLSM: rename error");
+      *kret = (fortint) 995;
+      return;
+    }
+
+    l1 = strlen(filename);
+    l2 = 1;
+    PBOPEN(&fpindex,filename,"r",kret,l1,l2);
+    if( *kret ) {
+      perror("JOPNLLSM: PBOPEN error");
+      return;
+    }
+    fp = pbfp((long)fpindex);
+    if( fp == NULL ) {
+      perror("JOPNLLSM: file pointer after PBOPEN is NULL");
+      *kret = (fortint) 994;
+      return;
+    }
+  }
+
+/*
+//  Check the file size
+*/
+#ifdef FOPEN64
+
+#ifdef linux
+/* On Linux -m32, lseek64 doesn't work. Use fstat64 instead */
+
+{
+
+    struct stat st;
+    
+    if(fstat64(fileno(fp),&st) == -1)
+	{
+		fprintf(stderr,"JOPNLLSM: coefficients file fstat failed\n");
+		*kret = (fortint) 993;
+		return;
+	}
+    else
+	{
+		if(len != st.st_size)
+		{
+			fprintf(stderr,"JOPNLLSM: coefficients file size should be %lld bytes, it is %lld\n", len,st.st_size);
+			*kret = (fortint) 993;
+			return;
+		}
+	}
+}
+#else
+  fseeko64(fp, 0, 2);
+  if( len != ftello64(fp) ) {
+    long long ftello = ftello64(fp);
+    fprintf(stderr,"JOPNLLSM: coefficients file size should be %lld bytes, it is %lld\n", len,ftello);
+    *kret = (fortint) 993;
+    return;
+  }
+#endif
+
+#else
+  fseek(fp, 0, 2);
+  if( len != ftell(fp) ) {
+    long ftello = ftell(fp);
+    
+    fprintf(stderr,"JOPNLLSM: coefficients file size should be %ld bytes, it is %ld\n", len,ftello);
+    *kret = (fortint) 993;
+    return;
+  }
+#endif
+
+#ifdef FOPEN64
+  fseeko64(fp, 0, 0);
+#else
+  fseek(fp, 0, 0);
+#endif
+
+/*
+//  Map the file
+*/
+  nunit = fileno(fp);
+  if( nunit >= 0 ) {
+    char *p      = getenv("PPMAPADDR");
+    caddr_t addr = (caddr_t) (p?atol(p):0);
+
+    /* time1 = 0; */
+	/* time2 = iitimer(&time1); */
+
+#ifdef FOPEN64
+    result =  (void *) mmap64(addr,(size_t) len, (PROT_READ),
+                            MAP_SHARED,(int) nunit, (OFF_T)off);
+#else
+    result =  (void *) mmap(addr,(size_t) len, (PROT_READ),
+                            MAP_SHARED,(int) nunit,(OFF_T) off);
+#endif
+
+    if( (caddr_t) result == (caddr_t) -1 ) {
+      perror("JOPNLLSM: mmap64 error");
+      *kret = (fortint) 992;
+      return;
+    }
+    oldresult = result;
+    oldlen = len;
+  }
+
+  *ipdum = (JPointer) result;
+  *kunit = (fortint) nunit;
+  strcpy( yarray[ncnt], ypfn);
+  resultarray[ncnt] = result;
+  unitarray[ncnt] = nunit;
+  ncnt+=1;
+
+  /* time2 = iitimer(&time1); */
+  /* printf("MMAP-timer %d\n",iiii_time); */
+
+  return;
+}
diff --git a/interpolation/jparam2.h b/interpolation/jparam2.h
new file mode 100755
index 0000000..19f4cb8
--- /dev/null
+++ b/interpolation/jparam2.h
@@ -0,0 +1,17 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Handling of spectral -> grid interpolation coefficients memory
+C
+      LOGICAL LFREECF
+      INTEGER NFREECF, NISIZE6, NISIZE7
+      CHARACTER*15 YOLDGG
+      CHARACTER*19 YOLDLL
+      COMMON /JDCSPGP/ NFREECF,NISIZE6,NISIZE7,LFREECF,YOLDGG,YOLDLL
diff --git a/interpolation/jparams.h b/interpolation/jparams.h
new file mode 100755
index 0000000..271ed29
--- /dev/null
+++ b/interpolation/jparams.h
@@ -0,0 +1,44 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Parameters
+C
+      INTEGER JP32, JPLONO, J2NFFT, JPFFT, JPLOOK, JPMAX, JPMAXITER
+      INTEGER JPMXTRY, JPTRNC, JPK, JPTRP1
+      PARAMETER ( JP32 = 32 )
+C
+C     The following value for JPLONO (2560) will handle regular grids 
+C     from N1 to N720 derived from spectral truncations from T1 to
+C     T639.
+C
+Cjdc  PARAMETER ( JPLONO = 2560 , J2NFFT = 2 + JPLONO, JPFFT = 12000)
+c      PARAMETER ( JPLONO = 6000 , J2NFFT = 2 + JPLONO, JPFFT = 12000)
+      PARAMETER ( JPLONO = 8200 , J2NFFT = 2 + JPLONO, JPFFT = 12000)
+      PARAMETER ( JPLOOK = 50)
+      PARAMETER ( JPMAX = 2048 )
+      PARAMETER ( JPMAXITER = 10)
+      PARAMETER ( JPMXTRY = 3 )
+      PARAMETER ( JPTRNC = 2047, JPK = (JPTRNC + 1)*(JPTRNC + 4) )
+      PARAMETER ( JPTRP1 = (JPTRNC + 1) )
+C
+      REAL PPEPSA, PPQUART, PPHALF, PPTWO, PP90
+      PARAMETER ( PPEPSA = 1.0E-6)
+      PARAMETER ( PPQUART = 0.25E0)
+      PARAMETER ( PPHALF = 0.5E0)
+      PARAMETER ( PPTWO = 2.0E0)
+      PARAMETER ( PP90 = 90.0E0)
+C
+      REAL PPI
+      PARAMETER ( PPI = 3.14159265358979 )
+C
+C     Debug parameters
+C
+      INTEGER NDBG, NDBGLP
+      COMMON /JDCNDBG/ NDBG, NDBGLP
diff --git a/interpolation/jreadgg.F b/interpolation/jreadgg.F
new file mode 100755
index 0000000..8abe84d
--- /dev/null
+++ b/interpolation/jreadgg.F
@@ -0,0 +1,175 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JREADGG( KUNIT, KTRUNC, KROW, PLEG, KRET)
+C
+C---->
+C**** JREADGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine reads legendre functions for one latitude.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JREADGG( KUNIT, KTRUNC, KROW, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - Unit number for open file of legendre functions.
+C     KTRUNC  - Truncation.
+C     KROW    - Latitude row number in the file
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Calculate offset of the legendre functions for the latitude row 
+C     in the file, skip to the row and read the functions.
+C
+C     Retries the read upto 3 times if necessary
+C
+C     Externals
+C     _________
+C
+C     PBSEEK    - Position the coefficients file
+C     PBREAD    - Read the coefficients file
+C     INTLOG   - Output log message
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     Only positive row numbers are allowed.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KUNIT, KTRUNC, KROW, KRET
+      REAL PLEG
+      DIMENSION PLEG(*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31000 )
+C
+C     Local variables
+C
+      INTEGER NTRIES
+      INTEGER   NRET, NSIZE
+      INTEGER*8 FRET, FSIZE
+      INTEGER*8 NEWPOS, OLDPOS
+
+      DATA OLDPOS/-1/
+      SAVE NEWPOS, OLDPOS
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+100   CONTINUE
+      IF ( KROW .LT. 0 ) THEN
+        CALL INTLOG(JP_ERROR,'JREADGG: negative row number given',KROW)
+	KRET = JPROUTINE + 1
+	GOTO 990
+      ENDIF
+C
+C     Calculate the byte offset into the file where the legendre
+C     functions for the latitude should be.
+#ifdef REAL_8
+      NSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+      FSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+#else
+      NSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+      FSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+#endif
+cs      NEWPOS = (KROW - 1) * NSIZE
+      NEWPOS = (KROW - 1) * FSIZE
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+C     Position file unless the previous read left it in the correct 
+C     position already
+C
+      NTRIES = 0
+ 210  CONTINUE
+      NTRIES = NTRIES + 1
+      IF ( NEWPOS .NE. OLDPOS ) THEN
+        CALL PBSEEK64( KUNIT, NEWPOS, 0, FRET)
+        IF ( FRET .NE. NEWPOS ) THEN
+          CALL INTLOG(JP_ERROR,'JREADGG: PBSEEK64 error.',FRET)
+	  KRET = JPROUTINE + 2
+	  GOTO 990
+	ENDIF
+      ENDIF
+C
+C     Read the legendre coefficients
+      CALL PBREAD( KUNIT, PLEG, NSIZE, NRET)
+      IF ( NRET .NE. NSIZE ) THEN
+	IF ( NTRIES .EQ. JPMXTRY ) THEN
+          CALL INTLOG(JP_ERROR,'JREADGG: PBREAD error.',NRET)
+	  KRET = JPROUTINE + 3
+	  GOTO 990
+	ELSE
+	  GOTO 210
+        ENDIF
+      ENDIF
+C
+C     Record the current file byte position
+      OLDPOS = NEWPOS + NSIZE
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jreadll.F b/interpolation/jreadll.F
new file mode 100755
index 0000000..bef6b2d
--- /dev/null
+++ b/interpolation/jreadll.F
@@ -0,0 +1,179 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JREADLL( KUNIT, KTRUNC, PBUILD, PLAT, PLEG, KRET)
+C
+C---->
+C**** JREADLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine reads legendre functions for one latitude.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JREADLL( KUNIT, KTRUNC, PBUILD, PLAT, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - Unit number for open file of legendre functions.
+C     KTRUNC  - Truncation.
+C     PBUILD  - Grid interval used to build legendre coefficients file
+C     PLAT    - Latitude in degrees.
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Calculate offset of the legendre functions for the latitude row 
+C     in the file, skip to the row and read the functions.
+C
+C     Retries the read upto 3 times if necessary
+C
+C     Externals
+C     _________
+C
+C     PBSEEK    - Position the coefficients file
+C     PBREAD    - Read the coefficients file
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     Only positive latitude values are allowed.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+C
+C     Subroutine arguments
+C
+      INTEGER KUNIT, KTRUNC, KRET
+      REAL PBUILD, PLEG, PLAT
+      DIMENSION PLEG(*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31100 )
+C
+C     Local variables
+C
+      INTEGER NTRIES
+      INTEGER NSIZE, NRET
+      INTEGER*8 FSIZE, FRET
+      INTEGER*8 NEWPOS, OLDPOS
+
+      REAL ZLAT
+      DATA OLDPOS/-1/
+      SAVE NEWPOS, OLDPOS
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+100   CONTINUE
+      IF ( PLAT .LT. 0.0 ) THEN
+        ZLAT = 0.0
+      ELSE
+        ZLAT = PLAT
+      ENDIF
+C
+C     Calculate the byte offset into the file where the legendre
+C     functions for the latitude should be.
+#ifdef REAL_8
+      NSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+      FSIZE   = 8 * (KTRUNC+1)*(KTRUNC+4)/2
+#else
+      NSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+      FSIZE   = 4 * (KTRUNC+1)*(KTRUNC+4)/2
+#endif
+cs      NEWPOS = NINT( (90.0 - ZLAT)/PBUILD ) * NSIZE
+      NEWPOS = NINT( (90.0 - ZLAT)/PBUILD ) * FSIZE
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+C     Position file unless the previous read left it in the correct 
+C     position already
+C
+      NTRIES = 0
+ 210  CONTINUE
+      NTRIES = NTRIES + 1
+      IF ( NEWPOS .NE. OLDPOS ) THEN
+        CALL PBSEEK64( KUNIT, NEWPOS, 0, FRET)
+        IF ( FRET .NE. NEWPOS ) THEN
+          CALL INTLOG(JP_ERROR,'JREADLL: PBSEEK64 error.',FRET)
+	  KRET = JPROUTINE + 2
+	  GOTO 990
+	ENDIF
+      ENDIF
+C
+C     Read the legendre coefficients
+      CALL PBREAD( KUNIT, PLEG, NSIZE, NRET)
+      IF ( NRET .NE. NSIZE ) THEN
+	IF ( NTRIES .EQ. JPMXTRY ) THEN
+          CALL INTLOG(JP_ERROR,'JREADLL: PBREAD error.',NRET)
+	  KRET = JPROUTINE + 3
+	  GOTO 990
+	ELSE
+	  GOTO 210
+        ENDIF
+      ENDIF
+C
+C     Record the current file byte position
+      OLDPOS = NEWPOS + NSIZE
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jsgggp.F b/interpolation/jsgggp.F
new file mode 100755
index 0000000..bd0ac21
--- /dev/null
+++ b/interpolation/jsgggp.F
@@ -0,0 +1,426 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSGGGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    KNUM, HTYPE, KPTS, POUTF, LUV, KRET)
+C
+C---->
+C**** JSGGGP
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts strecthed spectral fields to a gaussian
+C     grid field.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JSGGGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+C    X                    KNUM, HTYPE, KPTS, POUTF, LUV, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     PNORTH   - Northernmost latitude for output field (degrees)
+C     PSOUTH   - Southernmost latitude for output field (degrees)
+C     PWEST    - Westernmost longitude for output field (degrees)
+C     PEAST    - Easternmost longitude for output field (degrees)
+C     KNUM     - Gaussian grid number
+C     HTYPE    - Gaussian grid type
+C                = 'R' for reduced, 
+C                = 'F' for full
+C                = 'U' for user-defined reduced gaussian grid
+C     KPTS     - Array specifying number of points at each line of
+C                latitude if HTYPE = 'U'.
+C                (Must be big enough for both hemispheres, but only
+C                 needs to give Northern hemisphere values from pole
+C                 to latitude nearest the Equator.)
+C     LUV      - Code indicating whether or not the field is a wind
+C                component field;
+C                = 1 if U or V field.
+C
+C     Output parameters
+C     ________________
+C
+C     KPTS     - Array specifying number of points at each line of
+C                latitude; user defined values if HTYPE = 'U'.
+C                (Must be big enough for both hemispheres)
+C     POUTF    - Output grid point field
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     Converts stretched 'latitude' to real latitude and then
+C     interpolates along the real latitude line.
+C
+C
+C     Externals
+C     _________
+C
+C     JGETGG   - Pick up the definition of the gaussian grid.
+C     JJSET99  - Sets up FFT
+C     JNORSGG  - Determines which latitude row in a gaussian grid is
+C                north or south of a given latitude
+C     JSYMGG   - Generate symmetric grid from spherical harmonics 
+C     JWSCAL   - Apply latitude correction to wind component field
+C     JMVUGG   - Moves grid point data to output array
+C     JMKOFGG  - Builds offsets into storage array
+C     JDEBUG   - Checks environment variable to switch on/off debug
+C     INTLOG   - Logs output messages
+C     INTLOGR  - Logs output messages
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     None
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF      July 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "current.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Subroutine arguments
+C
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC, KNUM, KPTS, KRET
+      DIMENSION KPTS(*)
+      CHARACTER*1 HTYPE
+      REAL      PNORTH, PSOUTH, PWEST, PEAST
+      REAL      POUTF
+      DIMENSION POUTF(*)
+      INTEGER   LUV
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31600 )
+      REAL DEG2RAD
+      PARAMETER ( DEG2RAD = PPI/180.0 )
+C
+C     Local variables
+C
+      INTEGER ILON, ILONOLD, ITOUP1, IJPWR, NUMPTS
+      DIMENSION IJPWR(JPMAX)
+      INTEGER ILUNIT
+      INTEGER NXTROW
+      REAL RINTVL, ZCOSI, ZLAT
+      REAL ZFACTOR(JPMAX)
+C
+      INTEGER IMFAX
+      REAL ATRIGS
+      DIMENSION IMFAX(10),ATRIGS(JPLONO*2)
+#ifdef POINTER_64
+      INTEGER*8 IALEG, IZFA
+#endif
+#ifdef CRAY
+      REAL ALEG
+      DIMENSION ALEG(JPK)
+      REAL ZFA
+      DIMENSION ZFA(JPLONO+2, 64)
+#else
+      REAL ALEG
+      DIMENSION ALEG(1)
+      POINTER ( IALEG, ALEG )
+      REAL ZFA
+      DIMENSION ZFA(2)
+      POINTER ( IZFA, ZFA )
+#endif
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      SAVE ISIZE, IZFA
+C
+      INTEGER J108, NNORTH, NSOUTH, NFLAG
+      INTEGER NOFSET, LOOP
+      DIMENSION NOFSET(JPMAX)
+      INTEGER INORTH, ISOUTH, IMAGE
+      REAL ALAT
+      DIMENSION ALAT(JPMAX)
+C
+      SAVE ILUNIT
+C
+      LOGICAL LDEBUG, LFIRST
+      DATA LFIRST/.TRUE./
+      SAVE LDEBUG, LFIRST
+C
+      INTEGER  JNORSGG
+      EXTERNAL JNORSGG
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      CALL JDEBUG( )
+      LDEBUG = NDBG.GT.0
+C
+#ifndef CRAY
+C
+C     First time through, dynamically allocate memory for workspace
+C
+      IF( LFIRST ) THEN
+        LFIRST = .FALSE.
+        ISIZE =  (JPLONO+2)*64
+        CALL JMEMHAN( 10, IZFA, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JSGGGP: memory allocation error.',IZFA)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+#endif
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'JSGGGP: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSGGGP: Northern latitude for output = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSGGGP: Southern latitude for output = ', PSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSGGGP: Western longitude for output = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSGGGP: Eastern longitude for output = ', PEAST)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Gaussian grid number = ', KNUM)
+C
+        IF( HTYPE.EQ.'R' .OR. HTYPE.EQ.'r' ) CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Grid type is Reduced.',JPQUIET)
+        IF( HTYPE.EQ.'F' .OR. HTYPE.EQ.'f' ) CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Grid type is Full.',JPQUIET)
+        IF( HTYPE.EQ.'U' .OR. HTYPE.EQ.'u' ) CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Grid type is User.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Field code( = 1 for U or V) = ', LUV)
+C
+        IF( (HTYPE.EQ.'u').OR.(HTYPE.EQ.'U') ) THEN
+          CALL INTLOG(JP_DEBUG,'JSGGGP: User-supplied values.',JPQUIET)
+          CALL INTLOG(JP_DEBUG,'JSGGGP: No. pts at each line:',JPQUIET)
+          DO NDBGLP = 1, 20
+            CALL INTLOG(JP_DEBUG,' ',KPTS( NDBGLP ))
+          ENDDO
+        ENDIF
+      ENDIF
+C
+C     Pick up the file containing the definition of the gaussian grid.
+C
+      IF( (NOGAUSO.NE.KNUM).OR.(HOGAUST.NE.HTYPE) ) THEN
+        CALL JGETGG( KNUM, HTYPE, ALAT, KPTS, KRET)
+        IF( KRET.NE.0 ) GOTO 990
+        NOGAUSO = KNUM
+        HOGAUST = HTYPE
+      ELSE
+        DO LOOP = 1, KNUM*2
+          ALAT(LOOP) = ROGAUSS(LOOP)
+          KPTS(LOOP) = NOLPTS(LOOP)
+        ENDDO
+      ENDIF
+C
+C     Calculate the true latitudes and the map factor.
+C
+      DO LOOP = 1, KNUM*2
+        CALL STRLAT(ALAT(LOOP), RISTRET, 0, ALAT(LOOP), ZFACTOR(LOOP))
+      ENDDO
+C
+C     Coefficients are to generated 'on the fly'
+C
+      LON_FLY = .TRUE.
+      LFILEIO = .FALSE.
+      LMEMORY = .FALSE.
+      LSHARED = .FALSE.
+      LMAPPED = .FALSE.
+      ISIZE =  (KTRUNC+1)*(KTRUNC+2)
+      CALL JMEMHAN( 14, IALEG, ISIZE, 1, KRET)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JSGGGP: memory allocate error.',IALEG)
+        KRET = JPROUTINE + 2
+        GOTO 990
+      ENDIF
+C
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JSGGGP: Failed to open legendre function file',JPQUIET)
+        KRET = JPROUTINE + 3
+        GOTO 990
+      ENDIF
+C
+      NNORTH = JNORSGG( PNORTH, ALAT, KNUM, 1)
+      NSOUTH = JNORSGG( PSOUTH, ALAT, KNUM, 0)
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSGGGP: Gaussian latitudes in requested area:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'JSGGGP: NORTH = ',NNORTH)
+        CALL INTLOG(JP_DEBUG,'JSGGGP: SOUTH = ',NSOUTH)
+      ENDIF
+C
+C
+C     For calculation purposes, the number of longitude points for each
+C     latitude row has to be greater than 2*(output truncation) to 
+C     ensure the fourier transform is exact (see Reference, page 10). 
+C
+C     The following loop calculates the power of 2 to be used as a 
+C     multipier for each row to ensure there are enough points.
+C     Later, when filling the output array POUTF, the longitude points
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.
+C
+      ITOUP1 = KTRUNC
+      DO 108 J108 = 1, KNUM
+	IMAGE = 2*KNUM - J108 + 1
+	ILON        = KPTS(J108)
+        IJPWR(J108) = 1
+ 104    CONTINUE
+          IF(ILON .GT. 2*ITOUP1) GOTO 106
+          IJPWR(J108) = IJPWR(J108)*2
+          ILON        = ILON*2
+          GOTO 104
+ 106    CONTINUE
+	IJPWR(IMAGE) = IJPWR(J108)
+ 108  CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Work out geometry of the request
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Latitude rows are generated from row INORTH to ISOUTH.
+C     Selection is carried out for actual requested rows when the 
+C     calculated values are moved to the output array.
+C
+      INORTH = NNORTH
+      ISOUTH = NSOUTH
+C
+C     Setup the storage offset for the given latitude range
+C
+ 220  CONTINUE
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,'JSGGGP: INORTH = ', INORTH)
+        CALL INTLOG(JP_DEBUG,'JSGGGP: ISOUTH = ', ISOUTH)
+      ENDIF
+      CALL JMKOFGG(HTYPE,NNORTH,NSOUTH,PWEST,PEAST,KNUM,KPTS,NOFSET)
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Process one row at a time.
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C
+      IF( LDEBUG )
+     X  CALL INTLOG(JP_DEBUG,'JSGGGP: Process latitude rows.',JPQUIET)
+C
+      ILONOLD = 0
+C
+      DO NXTROW = INORTH, ISOUTH
+C
+C       Initialise FFT constants for the latitude
+C
+        ILON = KPTS(NXTROW) * IJPWR(NXTROW)
+C
+        IF( LDEBUG ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'JSGGGP: Initialise FFT consts for the group.',JPQUIET)
+          CALL INTLOG(JP_DEBUG,
+     X      'JSGGGP: Latitude number = ', NXTROW)
+          CALL INTLOG(JP_DEBUG,
+     X      'JSGGGP: No. of calculated long.pts = ', ILON)
+        ENDIF
+C
+        IF( ILON.NE.ILONOLD ) THEN
+          ILONOLD = ILON
+          CALL JJSET99( ATRIGS, IMFAX, ILON, KRET)
+          IF( KRET.NE.0 ) GOTO 990
+        ENDIF
+C
+C       Calculate the points along the line of latitude
+C
+        CALL JSYMGG( PSHUP, KTRUNC, NXTROW, ILUNIT, 1, ILON,
+     X               ALAT, ALEG, ATRIGS, IMFAX, ZFA, KRET)
+	IF( KRET.NE.0 ) GOTO 990
+C
+C       If it is a wind component field, apply latitude correction
+C
+	IF( LUV.EQ.1 ) THEN
+          ZLAT   = ALAT(NXTROW)
+          ZCOSI  = ZFACTOR(NXTROW) / ABS( COS(ZLAT*DEG2RAD) )
+          CALL SSCAL( ILON, ZCOSI, ZFA(2), 1)
+        ENDIF
+C
+C       Store away the generated latitudes
+C
+        IF( (HTYPE.EQ.'U').OR.(HTYPE.EQ.'R') ) THEN
+          NUMPTS = KPTS(NXTROW)
+        ELSE
+          RINTVL = (PEAST - PWEST)*FLOAT( KPTS(NXTROW) ) / 360.0
+          NUMPTS = NINT( RINTVL ) + 1
+        ENDIF
+C
+C       Move latitude line to output array
+C
+        NFLAG = 1
+	CALL JMOVGG( ZFA, PWEST, KNUM, NXTROW, 1, NUMPTS,
+     X    ILON, IJPWR(NXTROW), NOFSET, POUTF, NFLAG)
+C
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+      KRET = 0
+C
+ 990  CONTINUE
+C
+      IF( LDEBUG ) CALL INTLOG(JP_DEBUG,'JSGGGP: Return code = ',KRET)
+C
+      RETURN
+      END
diff --git a/interpolation/jsh2sh.F b/interpolation/jsh2sh.F
new file mode 100755
index 0000000..16c47f1
--- /dev/null
+++ b/interpolation/jsh2sh.F
@@ -0,0 +1,201 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SH2SH(UFLDIN, KRESIN, UFLDOU, KRESOU)
+      IMPLICIT NONE
+C
+C---->
+C**** SH2SH
+C
+C     Purpose
+C     _______
+C
+C     This routine produces a field of spectral coefficients in UFLDOU
+C     of truncation KRESOU from a field of spectral coeeficients in
+C     UFLDIN of truncation KRESIN.
+C
+C
+C     Interface
+C     _________
+C
+C     CALL SH2SH(UFLDIN, KRESIN, UFLDOU, KRESOU)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     UFLDIN       - field of spectral coefficients
+C     KRESIN       - truncation of input field
+C     KRESOU       - truncation of output field
+C
+C
+C     Output parameters
+C     ________________
+C
+C     UFLDOU       - field of spectral coefficients
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C
+C     Method
+C     ______
+C
+C     If the input truncation is greater than (or equal to) the output
+C     truncation, coefficients are transferred reduced for the output.
+C
+C     If the input truncation is less than the output truncation,
+C     all coefficients are transferred and padded with zeroes for the
+C     output.
+C
+C
+C     Externals
+C     _________
+C
+C     None
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     Arrays for the input and output fields must be defined large
+C     enough for the coefficients implied by the truncations.  Thus
+C     the dimension for UFLDOU must be at least:
+C         ( KRESOU + 1) * ( KRESOU + 2 ) /2
+C
+C
+C     Author
+C     ______
+C
+C     J.D.Chambers       ECMWF      8th Nov 1993
+C
+C
+C     Modifications
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C     Complex      U, dummy argument
+C
+C     _______________________________________________________
+C
+C     Subroutine arguments
+      COMPLEX UFLDIN(*),UFLDOU(*)
+      INTEGER KRESIN, KRESOU
+C
+C     Local variables
+      INTEGER ITINP1, ITOUP1, ILIM, IMLIM, IMN, IMP, IADD
+      INTEGER JM, JN
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialization
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Initialize loop control variables
+C
+      ITINP1 = KRESIN + 1
+      ITOUP1 = KRESOU + 1
+      ILIM   = ITOUP1
+      IMLIM  = ITOUP1
+      IMN = 1
+      IMP = 1
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Computation.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+C     Check if desired output truncation greater than input ...
+C
+      IADD = KRESIN - KRESOU
+      IF ( IADD .GE. 0 ) THEN
+C
+C     ... input truncation not less than desired output ...
+C     ... move truncated lines of coefficients
+        DO 230 JM = 1, IMLIM
+          DO 220 JN = JM, ILIM
+            UFLDOU(IMP) = UFLDIN(IMN)
+            IMP = IMP + 1
+            IMN = IMN + 1
+220       CONTINUE
+C                                Skip coefficients being truncated
+        IMN = IMN + IADD
+230     CONTINUE
+C
+C     ... input truncation is less than desired output ...
+C     ... pad each output line of coefficients with zeroes
+      ELSE
+        DO 250 JM = 1, IMLIM
+          DO 240 JN = JM, ILIM
+            IF ( JN .GT. ITINP1 .OR. JM .GT. ITINP1) THEN
+C                                At end of input coefficients in
+C                                current row, then set values to
+C                                zero in output
+              UFLDOU(IMP) = 0.0
+            ELSE
+              UFLDOU(IMP) = UFLDIN(IMN)
+              IMN = IMN + 1
+            ENDIF
+            IMP = IMP + 1
+240       CONTINUE
+250     CONTINUE
+      ENDIF
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jsllgp.F b/interpolation/jsllgp.F
new file mode 100755
index 0000000..cd28fbb
--- /dev/null
+++ b/interpolation/jsllgp.F
@@ -0,0 +1,310 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSLLGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+     X                    PLATINC, PLONINC, POUTF, KRET)
+C
+C---->
+C**** JSLLGP
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts stretched spectral input fields to
+C     standard lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JSLLGP( PSHUP, KTRUNC, PNORTH, PSOUTH, PWEST, PEAST,
+C    X                    PLATINC, PLONINC, POUTF, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     PNORTH   - Northernmost latitude for output field (degrees)
+C     PSOUTH   - Southernmost latitude for output field (degrees)
+C     PWEST    - Westernmost longitude for output field (degrees)
+C     PEAST    - Easternmost longitude for output field (degrees)
+C     PLATINC  - Grid interval between latitudes in degrees
+C     PLONINC  - Grid interval between longitudes in degrees
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Output parameters
+C     ________________
+C
+C     POUTF    - Output grid point field
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     Generates one latitude at a time.
+C
+C     Externals
+C     _________
+C
+C     JJSET99   - Sets up FFT
+C     JSTRLL    - Generate latitude line from spherical harmonics 
+C     JSTRWLL   - Generate latitude line from spherical harmonics (wind)
+C     JDEBUG    - Checks environment variable to switch on/off debug
+C     INTLOG    - Logs output messages
+C     INTLOGR   - Logs output messages
+C
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     ________
+C
+C     None
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF      July 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30000 )
+C
+C     Subroutine arguments
+C
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC
+      REAL      PNORTH, PSOUTH, PWEST, PEAST, PLATINC, PLONINC
+      REAL      POUTF
+      DIMENSION POUTF(*)
+      INTEGER   KRET
+C
+C     Local variables
+C
+      REAL PSTART, PNORMX, PDIFF
+      REAL DEG2RAD, ZBUILD
+      INTEGER ILON, IOLON, ITOUP1, IJPWR, NEXT, NROWS, NUMLON
+      INTEGER IOFFN, LONGIT, N360, NSTART, INEXT, LOOPCL
+C
+      INTEGER IMFAX
+      REAL ATRIGS
+      DIMENSION IMFAX(10),ATRIGS(JPLONO*2)
+#ifdef POINTER_64
+      INTEGER*8 IALEG, IZFA
+#endif
+#ifdef CRAY
+      REAL ALEG
+      DIMENSION ALEG(JPK)
+      REAL ZFA
+      DIMENSION ZFA(JPLONO+2)
+#else
+      REAL ALEG
+      DIMENSION ALEG(1)
+      POINTER ( IALEG, ALEG )
+      REAL ZFA
+      DIMENSION ZFA(1)
+      POINTER ( IZFA, ZFA )
+#endif
+C
+      INTEGER ISIZE, ISIZE2
+      DATA ISIZE/0/, ISIZE2/0/
+      SAVE ISIZE, ISIZE2, IZFA
+C
+      SAVE IMFAX, ATRIGS, IALEG
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      CALL JDEBUG( )
+C
+C     First time through, dynamically allocate memory for workspace
+C
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE = (JPLONO+2) * 2
+        CALL JMEMHAN( 10, IZFA, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JSLLGP: memory allocation error.',IZFA)
+          KRET = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+      IF( NDBG.GT.0 ) THEN
+        CALL INTLOG(JP_DEBUG,'JSLLGP: Input parameters:', JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSLLGP: Spherical harmonic coeffs(first 20):', JPQUIET)
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ', PSHUP( NDBGLP ))
+  101   CONTINUE
+        CALL INTLOG(JP_DEBUG,
+     X    'JSLLGP: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: Northern latitude for output = ', PNORTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: Southern latitude for output = ', PSOUTH)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: Western longitude for output = ', PWEST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: Eastern longitude for output = ', PEAST)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: Latitude grid interval (deg) = ', PLATINC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: Longitude grid interval (deg) = ', PLONINC)
+      ENDIF
+C
+C     Coefficients are to generated 'on the fly',
+C
+      ISIZE2 =  (KTRUNC+1)*(KTRUNC+2)
+      CALL JMEMHAN( 14, IALEG, ISIZE2, 1, KRET)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'JSLLGP: memory allocate error.',IALEG)
+        KRET = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      DEG2RAD = PPI / 180.0
+      IOLON   = NINT( 360.0 / PLATINC )
+      ILON    = NINT( 360.0 / PLONINC )
+      ITOUP1  = KTRUNC
+C
+C     For calculation purposes, ILON, the number of longitude points,
+C     has to be greater than 2*(output truncation) to ensure that the
+C     fourier transform is exact (see Reference, page 10). 
+C     The following loop increases ILON*IJPWR until ILON=>2*ITOUP1.
+C     Later, when filling the output array POUTF, the longitude points
+C     have to be taken selectively to avoid the intermediate generated
+C     points, picking up values only at the required longitudes.
+C
+      IJPWR = 1
+ 110  CONTINUE
+        IF( ILON.GT.2*ITOUP1 ) GOTO 120
+        IJPWR = IJPWR*2
+        ILON  = ILON*2
+        GOTO 110
+ 120  CONTINUE
+C
+C     Initialise FFT constants
+C
+      IF( NDBG.GT.0 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSLLGP: Initialise FFT constants with ', ILON)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSLLGP: longitude points.', JPQUIET)
+      ENDIF
+C
+      CALL JJSET99( ATRIGS, IMFAX, ILON, KRET)
+      IF( KRET.NE.0 ) GOTO 900
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Work out geometry of the request
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+      PNORMX = PNORTH
+      PDIFF  = PNORTH - PSOUTH
+      NROWS = NINT( PDIFF/PLATINC )  + 1
+      IF( ((NROWS-1)*PLATINC).GT.PDIFF ) NROWS = NROWS - 1
+C
+      NUMLON = NINT( (PEAST - PWEST)/PLONINC ) + 1
+      ZBUILD = PLATINC
+C
+      IF( NDBG.GT.0 ) THEN
+        CALL INTLOG(JP_DEBUG,'JSLLGP: Number of longitudes = ', NUMLON)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSLLGP: North latitude used for calc = ', PNORMX)
+        CALL INTLOG(JP_DEBUG,'JSLLGP: No.lats used in calc = ', NROWS)
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4.    Process one row at a time.
+C     _______________________________________________________
+C
+ 400  CONTINUE
+C
+      DO NEXT = 1, NROWS
+        PSTART = PNORMX - REAL(NEXT-1)*PLATINC
+C
+        IF( NDBG.GT.0 )
+     X    CALL INTLOGR(JP_DEBUG, 'JSLLGP: Next latitude = ', PSTART)
+C
+C       Generate the next row
+C
+        IF( LWIND ) THEN
+          CALL JSTRWLL(PSHUP, KTRUNC, PSTART, ZBUILD, ILON,
+     X                ALEG, ATRIGS, IMFAX, ZFA, KRET)
+        ELSE
+          CALL JSTRLL(PSHUP, KTRUNC, PSTART, ZBUILD, ILON,
+     X                ALEG, ATRIGS, IMFAX, ZFA, KRET)
+        ENDIF
+	IF( KRET.NE.0 ) GOTO 900
+C
+C       Find start offset in storage array
+C
+        IOFFN  = NINT( (PNORTH - PSTART)/PLATINC ) + 1
+        LONGIT = NINT( (360.0 + PWEST)/PLONINC )
+        N360 = NINT( 360.0/PLONINC )
+        NSTART = MOD( LONGIT, N360)*IJPWR
+C
+        DO LOOPCL = 1, NUMLON
+          INEXT = 2 + MOD( NSTART + (LOOPCL-1)*IJPWR , ILON)
+          POUTF( LOOPCL + (IOFFN-1)*NUMLON ) = ZFA( INEXT)
+        ENDDO
+C
+      ENDDO
+C
+      KRET = 0
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jspleg1.F b/interpolation/jspleg1.F
new file mode 100755
index 0000000..e4d6ee4
--- /dev/null
+++ b/interpolation/jspleg1.F
@@ -0,0 +1,232 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSPLEG1( PLEG, PLAT, KTRUNC)
+      IMPLICIT NONE
+C
+C---->
+C**** JSPLEG1 - Routine to calculate legendre functions
+C
+C     Purpose
+C     --------
+C
+C     This routine calculates the legendre functions for one latitude.
+C     (but not their derivatives)
+C
+C
+C     Interface
+C     ----------
+C
+C     CALL JSPLEG1( PLEG, PLAT, KTRUNC)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     PLAT      - Latitude in radians
+C     KTRUNC    - Spectral truncation
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     PLEG      - Array of legendre functions for one latitude.
+C                 The array must be at least (KTRUNC+1)*(KTRUNC+4)/2 
+C                 words long.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     Method
+C     ------
+C
+C     Recurrence relation with explicit relations for P(m,m) and 
+C     P(m,m+1)
+C
+C
+C     Externals
+C     ---------
+C
+C     None
+C
+C
+C     Reference
+C     ---------
+C
+C     None
+C
+C
+C     Comments
+C     --------
+C
+C     Rewritten from SPLEG1 to avoid using common blocks.
+C     Work arrays ZHLPx currently dimensioned for T213 using 
+C     parameter JPTRP1.
+C
+C
+C     AUTHOR
+C     ------
+C
+C     J.D.Chambers         ECMWF        9 November 1993
+C
+C
+C     Modifications
+C     -------------
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+#include "jparams.h"
+C
+C     Subroutine arguments
+C
+      REAL PLEG, PLAT
+      DIMENSION PLEG(*)
+      INTEGER KTRUNC
+C
+C     Local variables
+C
+      REAL ZHLP1, ZHLP2, ZHLP3
+      DIMENSION ZHLP1(JPTRP1), ZHLP2(JPTRP1), ZHLP3(JPTRP1)
+      INTEGER ITOUT1, I1M, ILM, JM, JCN, IM2
+      REAL ZSIN, ZCOS, ZF1M, ZRE1, ZF2M, ZM, ZN, ZE1, ZE2
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      ITOUT1 = KTRUNC+1
+      ZSIN   = SIN(PLAT)
+      ZCOS   = SQRT(1.-ZSIN*ZSIN)
+C
+C     Step 1.        M = 0, N = 0 and N = 1
+C
+      ILM     = 2
+      PLEG(1) = 1.0
+      ZF1M    = SQRT(3.0)
+      PLEG(2) = ZF1M*ZSIN
+C     _______________________________________________________
+C
+C
+C     Step 2.       Sum for M = 0 to T (T = truncation)
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+      DO 205 JM = 2,ITOUT1
+        ZM        = JM-1
+        ZHLP1(JM) = SQRT(2.*ZM+3.)
+        ZHLP2(JM) = 1./SQRT(2.*ZM)
+ 205  CONTINUE
+      ZHLP1(1) = SQRT(3.)
+C
+      DO 570 JM = 1,ITOUT1
+C
+        I1M  = JM-1
+        ZM   = I1M
+        ZRE1 = ZHLP1(JM)
+        ZE1  = 1./ZRE1
+C     _______________________________________________________
+C
+C
+C     Step 3.       M > 0 only
+C     _______________________________________________________
+C
+ 300    CONTINUE
+C
+        IF (I1M.NE.0) THEN
+          ZF2M = ZF1M*ZCOS*ZHLP2(JM)
+          ZF1M = ZF2M*ZRE1
+C     _______________________________________________________
+C
+C
+C     Step 4.       N = M and N = M+1
+C     _______________________________________________________
+C
+ 400    CONTINUE
+C
+          ILM       = ILM+1
+          PLEG(ILM) = ZF2M
+          ILM       = ILM+1
+          PLEG(ILM) = ZF1M*ZSIN
+C
+C         When output truncation is reached, return to calling program
+          IF ( JM .EQ. ITOUT1 ) GOTO 570
+C
+        ENDIF
+C     _______________________________________________________
+C
+C
+C     Step 5.       Sum for N = M+2 to T+1
+C     _______________________________________________________
+C
+ 500    CONTINUE
+C
+        IM2 = I1M+2
+C
+        DO 520 JCN = IM2,ITOUT1
+          ZN         = JCN
+          ZHLP3(JCN) = SQRT((4.*ZN*ZN-1.)/(ZN*ZN-ZM*ZM))
+ 520    CONTINUE
+C
+        DO 560 JCN = IM2,ITOUT1
+C
+          ZE2       = ZHLP3(JCN)
+          ILM       = ILM+1
+          PLEG(ILM) = ZE2*(ZSIN*PLEG(ILM-1)-ZE1*PLEG(ILM-2))
+          ZE2       = 1./ZE2
+          ZE1       = ZE2
+C
+ 560    CONTINUE
+C
+ 570  CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jsppole.F b/interpolation/jsppole.F
new file mode 100755
index 0000000..3dd5f3b
--- /dev/null
+++ b/interpolation/jsppole.F
@@ -0,0 +1,182 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSPPOLE(PSHUP,KNUMB,KTRUNC,OMARS,PXF)
+      IMPLICIT NONE
+C
+C---->
+C**** *JSPPOLE* - Calculates fourier coefficient for U or V at pole
+C
+C     Purpose
+C     -------
+C
+C     Calculates fourier coefficient for first harmonic only
+C     for U and V wind component at the pole.
+C
+C     Interface
+C     ---------
+C
+C     CALL JSPPOLE(PSHUP,KNUMB,KTRUNC,OMARS,PXF)
+C
+C     Input parameters
+C     ----------------
+C
+C     PSHUP    - Unpacked harmonics field, unpacked
+C     KNUMB    - 1 for North Pole, otherwise South Pole
+C     KTRUNC   - Number (value) of the trucation 
+C     OMARS    - .TRUE. if data is from MARS 
+C     PXF      - Fourier coefficients (zero on input)
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     PXF(2)   - Single fourier coefficient calculated
+C
+C
+C     Common block usage
+C     -----------------
+C
+C     None.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     *ECMWF*      Oct 1993
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     Created from SPPOLE. 
+C     Changed to provide all parameters in the call, i.e. no common
+C     blocks are used.
+C
+C
+C     Method
+C     ------
+C
+C     None.
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Dummy arguments
+C
+      COMPLEX   PSHUP
+      INTEGER   KNUMB
+      INTEGER   KTRUNC
+      LOGICAL   OMARS
+      COMPLEX   PXF
+      DIMENSION PSHUP(*)
+      DIMENSION PXF(*)
+C
+C     Local variables
+C
+      INTEGER   I1, ITIN1, ITOUT1, JN
+      REAL      Z1, Z2, ZNORM, ZP1, ZP2, ZPOL
+C 
+C     -----------------------------------------------------------
+C
+C*    1.    Set initial values
+C           ------------------
+C
+ 100  CONTINUE
+C
+      ITIN1  = KTRUNC + 1
+      ITOUT1 = KTRUNC
+C
+      ZPOL = 1.
+      IF (KNUMB .NE. 1) ZPOL = -1.0
+C
+      ZP1  = -1.0
+      ZP2  = -3.0 * ZPOL
+      I1   = ITIN1 + 1
+C
+C*    2.    Change normalisation (if flagged as necessary)
+C           --------------------
+C
+ 200  CONTINUE
+C
+      IF (OMARS) THEN
+         ZNORM = -SQRT(2.0)
+      ELSE
+         ZNORM = 1
+      ENDIF
+C
+C
+C*    3.    Calculation
+C           -----------
+C
+ 300  CONTINUE
+      PXF(2) = (0.0,0.0)
+C
+C     Calculate the fourier coefficient for the first harmonic only.
+      DO 310 JN = 1,ITOUT1,2
+C
+        Z1 = SQRT( (2.0*JN + 1.0)/(2.0*JN*(JN + 1.0)) )
+        Z2 = SQRT( (2.0*(JN + 1.0) +1.0)/(2.0*(JN +1.0)*(JN +2.0)) )
+C
+        IF (JN .EQ. ITOUT1) Z2 = 0.0
+C
+        PXF(2) = PXF(2) +(Z1*ZP1*PSHUP(I1) +Z2*ZP2*PSHUP(I1+1))*ZNORM
+        ZP1   = ZP1 - 2.0*(JN + 1.0) - 1.0
+        ZP2   = ZP2 - (2.0*(JN + 2.0) + 1.0)*ZPOL
+        I1    = I1 + 2
+C
+ 310  CONTINUE
+C
+C     -------------------------------------------------------------
+C
+      RETURN
+C
+      END
diff --git a/interpolation/jstrll.F b/interpolation/jstrll.F
new file mode 100755
index 0000000..a78de67
--- /dev/null
+++ b/interpolation/jstrll.F
@@ -0,0 +1,317 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSTRLL( PSHUP, KTRUNC, PNLAT, PBUILD, KLONO,
+     X                    PLEG, PTRIGS, KMFAX, PZFA,   KRET)
+C
+C---->
+C**** JSTRLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts stretched spectral input fields to
+C     standard lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JSTRLL( PSHUP, KTRUNC, PNLAT, PBUILD, KLONO,
+C    X              PLEG, PTRIGS, KMFAX, PZFA,   KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP  - Spherical harmonics field, unpacked
+C     KTRUNC - Truncation number of spherical harmonics field
+C     PNLAT  - Start latitude (northernmost) for output field
+C     PBUILD - Grid interval used to build the legendre coefficients
+C     KLONO  - Number of longitude points along the line of latitude
+C     PLEG   - Array used to hold legendre functions
+C     PTRIGS - Initialized array of trig.functions (setup by JJSET99)
+C     KMFAX  - Initialized array of prime factors (setup by JJSET99)
+C
+C     Output parameters
+C     ________________
+C
+C     PZFA   - Output grid point field; contains one latitude row.
+C     KRET   - Return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     FFT99   - Carries out FFT
+C     INTLOG  - Output log message
+C     INTLOGR - Output log message (with real value)
+C     NMAKLL  - Make interpolation coefficients one latitude at a time
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C     Comments
+C     ________
+C
+C     It handles transformation to a regular lat/long grid.
+C
+C     It is not for U and V fields (no correction is applied at the 
+C     poles).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF      July 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31300 )
+      INTEGER JPN, JPS
+      PARAMETER ( JPN = 1 )
+      PARAMETER ( JPS = 2 )
+C
+C     Subroutine arguments
+C
+      COMPLEX PSHUP(*)
+      INTEGER KTRUNC
+      INTEGER KLONO, KRET
+      INTEGER KMFAX(*)
+      REAL PNLAT, PBUILD
+      REAL PZFA(JPLONO+2), PLEG(*), PTRIGS(*)
+C
+C     Local variables
+C
+      INTEGER ILIM, IMLIM, ILN
+      INTEGER ITAL, ITALA, ITALS, IMN, IMP
+      INTEGER INORTH
+      INTEGER JM, LOOP, JF
+      INTEGER NERR
+C
+#ifdef POINTER_64
+      INTEGER*8 IWORK
+#endif
+      REAL ZNLAT, MFACTOR
+      REAL WORK
+      DIMENSION WORK(1)
+      POINTER ( IWORK, WORK )
+      COMPLEX   ZDUM(JPTRNC + 1)
+      COMPLEX   ZSUMS(JPTRNC + 1), ZSUMA(JPTRNC + 1)
+      COMPLEX*16 CHOLD
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      SAVE ISIZE, IWORK
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     First time through, dynamically allocate memory for workspace
+C
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE =  2*JPFFT
+        CALL JMEMHAN( 9, IWORK, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JSTRLL: memory allocation error.',IWORK)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRLL: Spherical harmonic coeffs(first 20):',JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PSHUP( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,'JSTRLL: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRLL: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSTRLL: Current latitude = ', PNLAT)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSTRLL: Grid lat. interval(leg. file) = ', PBUILD)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRLL: Number of long. pts per row = ', KLONO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRLL: Trig.functions (setup by JJSET99):',JPQUIET)
+        DO NDBGLP = 1, 10
+          CALL INTLOGR(JP_DEBUG,' ',PTRIGS( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRLL: Prime factors (setup by JJSET99):',JPQUIET)
+        DO NDBGLP = 1, 10
+          CALL INTLOG(JP_DEBUG,' ',KMFAX( NDBGLP ))
+        ENDDO
+      ENDIF
+C
+C     If it is a stretched field, calculate the true latitude and
+C     the map factor.
+C
+      IF( RISTRET.NE.0 ) THEN
+        CALL STRLAT(PNLAT, RISTRET, 1, ZNLAT, MFACTOR)
+      ELSE
+        ZNLAT = PNLAT
+      ENDIF
+C
+      ILIM   = KTRUNC + 1
+      IMLIM  = KTRUNC + 1
+      INORTH = -1
+      ILN    = KLONO + 2
+C
+C     _______________________________________________________
+C
+C*    Section 2.   Calculate fourier coefficients
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Generate the legendre coefficients 'on the fly'
+C
+      IF( ZNLAT.GE.0 ) THEN
+        CALL NMAKLL( KTRUNC, PBUILD, ZNLAT, 1, PLEG, NERR)
+      ELSE
+        CALL NMAKLL( KTRUNC, PBUILD, -ZNLAT, 1, PLEG, NERR)
+      ENDIF
+C
+C     Clear array.
+C
+      DO JF = 1, JPLONO+2
+        PZFA(JF) = 0.0
+      ENDDO
+C
+C     Fill slots which are used
+C
+      IMN = 0
+      IMP = 0
+C
+      DO JM = 1, IMLIM
+        ITAL = ILIM - JM + 1
+        DO LOOP = 1, ITAL
+          ZDUM(LOOP) = PLEG(IMP + LOOP)*PSHUP(IMN + LOOP)
+        ENDDO
+C
+        IMP = IMP + ITAL + 1
+        IMN = IMN + ITAL
+        ITALS = (ITAL + 1)/2
+        ITALA = ITAL/2
+#ifndef CRAY
+        CHOLD = (0.0D0, 0.0D0)
+#else
+        CHOLD = (0.0, 0.0)
+#endif
+        DO LOOP = 1, 2*ITALS, 2
+          CHOLD = CHOLD + ZDUM(LOOP)
+        ENDDO
+        ZSUMS(JM) = CHOLD
+#ifndef CRAY
+        CHOLD = (0.0D0, 0.0D0)
+#else
+        CHOLD = (0.0, 0.0)
+#endif
+        DO LOOP = 2, 2*ITALA, 2
+          CHOLD = CHOLD + ZDUM(LOOP)
+        ENDDO
+        ZSUMA(JM) = CHOLD
+C
+      ENDDO
+C
+C     For the southern hemisphere row, the legendre functions are
+C     the complex conjugates of the corresponding northern row -
+C     hence the juggling with the signs in the next loop.
+C
+C     Note that PZFA is REAL, but the coefficients being calculated
+C     are COMPLEX.  There are pairs of values for each coefficient
+C     (real and imaginary parts) and pairs of values for each
+C     latitude (north and south).
+C
+      IF( ZNLAT.GE.0 ) THEN
+        DO JM = 1, IMLIM
+          PZFA(2*JM -1) = REAL(ZSUMS(JM))  + REAL(ZSUMA(JM))
+          PZFA(2*JM   ) = AIMAG(ZSUMS(JM)) + AIMAG(ZSUMA(JM))
+        ENDDO
+      ELSE
+        DO JM = 1, IMLIM
+          PZFA(2*JM -1) = REAL(ZSUMS(JM))  - REAL(ZSUMA(JM))
+          PZFA(2*JM   ) = AIMAG(ZSUMS(JM)) - AIMAG(ZSUMA(JM))
+        ENDDO
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Fast fourier transform
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C
+      CALL FFT99(PZFA,WORK,PTRIGS,KMFAX,1,J2NFFT,KLONO,1,1)
+C   
+C     Apply map factor (squared) to vorticity or divergence
+C   
+      IF( (NIPARAM.EQ.138).OR.(NIPARAM.EQ.155) ) THEN
+        MFACTOR = MFACTOR*MFACTOR
+        DO LOOP = 1, KLONO
+          PZFA(LOOP) = MFACTOR*PZFA(LOOP)
+        ENDDO
+      ENDIF
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRLL: Values calculated by FFT:',JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ', PZFA( 1 + (NDBGLP-1)*2 ))
+          CALL INTLOGR(JP_DEBUG,' ', PZFA( NDBGLP*2 ))
+        ENDDO
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+C
+ 900  CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jstrwll.F b/interpolation/jstrwll.F
new file mode 100755
index 0000000..e789618
--- /dev/null
+++ b/interpolation/jstrwll.F
@@ -0,0 +1,364 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSTRWLL( PSHUP, KTRUNC, PNLAT, PBUILD, KLONO,
+     X                    PLEG, PTRIGS, KMFAX, PZFA,   KRET)
+C
+C---->
+C**** JSTRWLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts stretched spectral wind fields to
+C     standard lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JSTRWLL( PSHUP, KTRUNC, PNLAT, PBUILD, KLONO,
+C    X              PLEG, PTRIGS, KMFAX, PZFA,   KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP  - Spherical harmonics field, unpacked
+C     KTRUNC - Truncation number of spherical harmonics field
+C     PNLAT  - Start latitude (northernmost) for output field
+C     PBUILD - Grid interval used to build the legendre coefficients
+C     KLONO  - Number of longitude points along the line of latitude
+C     PLEG   - Array used to hold legendre functions
+C     PTRIGS - Initialized array of trig.functions (setup by JJSET99)
+C     KMFAX  - Initialized array of prime factors (setup by JJSET99)
+C
+C     Output parameters
+C     ________________
+C
+C     PZFA   - Output grid point field; contains one latitude row.
+C     KRET   - Return status code, 0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     FFT99   - Carries out FFT
+C     INTLOG  - Output log message
+C     INTLOGR - Output log message (with real value)
+C     NMAKLL  - Make interpolation coefficients one latitude at a time
+C     JSPPOLE - Applies correction at North or South pole
+C     SSCAL   - Scale a vector of values
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C     Comments
+C     ________
+C
+C     It handles transformation to a regular lat/long grid.
+C
+C     It is for U and V fields (a correction is applied at latitudes
+C     other than the poles).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF      July 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31300 )
+      INTEGER JPN, JPS
+      PARAMETER ( JPN = 1 )
+      PARAMETER ( JPS = 2 )
+      REAL DEG2RAD
+      PARAMETER (DEG2RAD = PPI / 180.0 )
+C
+C     Subroutine arguments
+C
+      COMPLEX PSHUP(*)
+      INTEGER KTRUNC
+      INTEGER KLONO, KRET
+      INTEGER KMFAX(*)
+      REAL PNLAT, PBUILD
+      REAL PZFA(JPLONO+2,2), PLEG(*), PTRIGS(*)
+C
+C     Local variables
+C
+      INTEGER ILIM, IMLIM, ILN
+      INTEGER ITAL, ITALA, ITALS, IMN, IMP
+      INTEGER INORTH
+      INTEGER JM, LOOP, JF
+      INTEGER NERR
+C
+#ifdef POINTER_64
+      INTEGER*8 IWORK
+#endif
+      REAL ZCOSI, ZF(2*JPFFT)
+      REAL ZNLAT, MFACTOR
+      REAL WORK
+      DIMENSION WORK(1)
+      POINTER ( IWORK, WORK )
+      COMPLEX   ZDUM(JPTRNC + 1)
+      COMPLEX   ZSUMS(JPTRNC + 1), ZSUMA(JPTRNC + 1)
+      COMPLEX*16 CHOLD
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      SAVE ISIZE, IWORK
+C
+C     Statement function
+C
+      LOGICAL GPOLE
+      REAL ANGLE
+      GPOLE(ANGLE) = ( ABS(90.0 - ABS(ANGLE) ) .LT. 1.0E-3 )
+C                  = .TRUE. if LAT is 90.0 or -90.0
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     First time through, dynamically allocate memory for workspace
+C
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE =  2*JPFFT
+        CALL JMEMHAN( 9, IWORK, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JSTRWLL: memory allocation error',IWORK)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Spherical harmonic coeffs(first 20):',JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PSHUP( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,'JSTRWLL: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSTRWLL: Current latitude = ', PNLAT)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSTRWLL: Grid lat. interval(leg. file) = ', PBUILD)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Number of long. pts per row = ', KLONO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Trig.functions (setup by JJSET99):',JPQUIET)
+        DO NDBGLP = 1, 10
+          CALL INTLOGR(JP_DEBUG,' ',PTRIGS( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Prime factors (setup by JJSET99):',JPQUIET)
+        DO NDBGLP = 1, 10
+          CALL INTLOG(JP_DEBUG,' ',KMFAX( NDBGLP ))
+        ENDDO
+      ENDIF
+C
+C     If it is a stretched field, calculate the true latitude and
+C     the map factor.
+C
+      IF( RISTRET.NE.0 ) THEN
+        CALL STRLAT(PNLAT, RISTRET, 1, ZNLAT, MFACTOR)
+      ELSE
+        ZNLAT = PNLAT
+        MFACTOR = 1.0
+      ENDIF
+C
+      ILIM   = KTRUNC + 1
+      IMLIM  = KTRUNC + 1
+      INORTH = -1
+      ILN    = KLONO + 2
+C
+C     _______________________________________________________
+C
+C*    Section 2.   Calculate fourier coefficients
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Generate the legendre coefficients 'on the fly'
+C
+      IF( ZNLAT.GE.0 ) THEN
+        CALL NMAKLL( KTRUNC, PBUILD, ZNLAT, 1, PLEG, NERR)
+      ELSE
+        CALL NMAKLL( KTRUNC, PBUILD, -ZNLAT, 1, PLEG, NERR)
+      ENDIF
+C
+C     Clear array.
+C
+      DO JF = 1, JPLONO+2
+        PZFA(JF,JPN) = 0.0
+        PZFA(JF,JPS) = 0.0
+      ENDDO
+C
+C     Treat the poles as a special case ..
+C
+      IF( GPOLE(ZNLAT) ) THEN
+C
+        IF( NDBG.GT.1 ) CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Pole is special case',JPQUIET)
+C
+        CALL JSPPOLE( PSHUP, 1, KTRUNC, .TRUE. , ZF)
+        DO LOOP = 1, ILN
+          PZFA(LOOP, JPN) = ZF(LOOP)
+        ENDDO
+C
+        CALL JSPPOLE( PSHUP, 0, KTRUNC, .TRUE. , ZF)
+        DO LOOP = 1, ILN
+          PZFA(LOOP, JPS) = ZF(LOOP)
+        ENDDO
+C
+C     .. otherwise not at pole
+C
+      ELSE
+C
+C       Fill slots which are used
+C
+        IMN = 0
+        IMP = 0
+C
+        DO JM = 1, IMLIM
+          ITAL = ILIM - JM + 1
+          DO LOOP = 1, ITAL
+            ZDUM(LOOP) = PLEG(IMP + LOOP)*PSHUP(IMN + LOOP)
+          ENDDO
+C
+          IMP = IMP + ITAL + 1
+          IMN = IMN + ITAL
+          ITALS = (ITAL + 1)/2
+          ITALA = ITAL/2
+#ifndef CRAY
+          CHOLD = (0.0D0, 0.0D0)
+#else
+          CHOLD = (0.0, 0.0)
+#endif
+          DO LOOP = 1, 2*ITALS, 2
+            CHOLD = CHOLD + ZDUM(LOOP)
+          ENDDO
+          ZSUMS(JM) = CHOLD
+#ifndef CRAY
+          CHOLD = (0.0D0, 0.0D0)
+#else
+          CHOLD = (0.0, 0.0)
+#endif
+          DO LOOP = 2, 2*ITALA, 2
+            CHOLD = CHOLD + ZDUM(LOOP)
+          ENDDO
+          ZSUMA(JM) = CHOLD
+C
+        ENDDO
+C
+C       For the southern hemisphere row, the legendre functions are
+C       the complex conjugates of the corresponding northern row -
+C       hence the juggling with the signs in the next loop.
+C
+C       Note that PZFA is REAL, but the coefficients being calculated
+C       are COMPLEX.  There are pairs of values for each coefficient
+C       (real and imaginary parts) and pairs of values for each
+C       latitude (north and south).
+C
+        DO JM = 1, IMLIM
+          PZFA(2*JM -1,JPN) = REAL(ZSUMS(JM))  + REAL(ZSUMA(JM))
+          PZFA(2*JM   ,JPN) = AIMAG(ZSUMS(JM)) + AIMAG(ZSUMA(JM))
+          PZFA(2*JM -1,JPS) = REAL(ZSUMS(JM))  - REAL(ZSUMA(JM))
+          PZFA(2*JM   ,JPS) = AIMAG(ZSUMS(JM)) - AIMAG(ZSUMA(JM))
+        ENDDO
+C
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Fast fourier transform
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C
+      CALL FFT99(PZFA,WORK,PTRIGS,KMFAX,1,J2NFFT,KLONO,2,1)
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Values calculated by FFT:',JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ', PZFA( 1, NDBGLP ))
+          CALL INTLOGR(JP_DEBUG,' ', PZFA( 2, NDBGLP ))
+        ENDDO
+      ENDIF
+C
+C     Move 'southern' latitude into leading part of array
+C
+      IF( ZNLAT.LT.0 ) THEN
+        DO JF = 1, JPLONO+2
+          PZFA(JF,JPN) = PZFA(JF,JPS)
+        ENDDO
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 4.    Apply scale factor (map scale factor, and
+C                   latitude correction if not pole)
+C     _______________________________________________________
+C
+ 400  CONTINUE
+C
+      IF( NDBG.GT.1 ) CALL INTLOG(JP_DEBUG,
+     X    'JSTRWLL: Apply scale to latitude',JPQUIET)
+C
+      IF( .NOT. GPOLE(ZNLAT) ) THEN
+        ZCOSI = MFACTOR / COS( ZNLAT * DEG2RAD )
+        CALL SSCAL( KLONO, ZCOSI, PZFA( 2, JPN), 1)
+      ELSE
+        CALL SSCAL( KLONO, MFACTOR, PZFA( 2, JPN), 1)
+      ENDIF
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+C
+ 900  CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jsymgg.F b/interpolation/jsymgg.F
new file mode 100755
index 0000000..7017803
--- /dev/null
+++ b/interpolation/jsymgg.F
@@ -0,0 +1,348 @@
+#ifdef IBM
+ at PROCESS HOT(NOVECTOR) NOSTRICT
+#endif
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSYMGG( PSHUP, KTRUNC, KSTART, KLUNIT, KLATO, KLONO,
+     X                    PLAT, PLEG, PTRIGS, KMFAX, PZFA, KRET)
+C
+C---->
+C**** JSYMGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to standard
+C     lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JSYMGG( PSHUP, KTRUNC, KSTART, KLUNIT, KLATO, KLONO,
+C    X             PLAT, PLEG, PTRIGS, KMFAX, PZFA, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     KSTART   - Number of start latitude row (northernmost) for output 
+C                field (must be positive - see comments below)
+C     KLUNIT   - stream number of the legendre function file
+C     KLATO    - Number of latitude rows in output field
+C     KLONO    - Number of longitude points in output field
+C     PLAT     - Array of gaussian latitudes
+C     PLEG     - Array used to hold legendre functions
+C     PTRIGS   - Initialized array of trig.functions (setup by JJSET99)
+C     KMFAX    - Initialized array of prime factors (setup by JJSET99)
+C
+C     Output parameters
+C     ________________
+C
+C     PZFA    - Output grid point field; contains upto 32 each of
+C               North and South latitude rows symmetrically.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     JREADGG - Reads the legendre functions for a latitude
+C     FFT99   - Carries out FFT
+C     INTLOG  - Output log message
+C     INTLOGR - Output log message (with real value)
+C     NMAKGG  - Make interpolation coefficients one latitude at a time
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C     Comments
+C     ________
+C
+C     This is a redesign, based on SPECGP.F
+C
+C     It handles transformation to a gaussian grid.
+C     The generated grid is symmetrical about the equator, so 
+C     KSTART must be positive.
+C
+C     It is not for U and V fields (no correction is applied at the 
+C     poles).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Subroutine arguments
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC
+      INTEGER   KSTART
+      INTEGER   KLUNIT, KLATO, KLONO, KMFAX, KRET
+      REAL PLAT, PLEG, PTRIGS, PZFA
+      DIMENSION PZFA(JPLONO + 2, 64)
+      DIMENSION KMFAX(*), PLAT(*), PLEG(*), PTRIGS(*)
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31200 )
+C
+C     Local variables
+      INTEGER   ILIM, IMLIM, ILN
+      INTEGER   ITAL, ITALA, ITALS, IMN, IMP
+      INTEGER   INORTH, ISOUTH
+      INTEGER   JM, J, JNEXTLAT, JF
+      INTEGER   NERR
+      INTEGER*8 IOFF
+      INTEGER*8 JDCLOOP
+C
+#ifdef POINTER_64
+      INTEGER*8 IWORK
+#endif
+      REAL WORK
+      DIMENSION WORK(1)
+      POINTER ( IWORK, WORK )
+      COMPLEX   ZSUMS(JPTRNC + 1), ZSUMA(JPTRNC + 1)
+      COMPLEX*16 CHOLD
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      SAVE ISIZE, IWORK
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     First time through, dynamically allocate memory for workspace
+C
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE =  2*JPFFT*64
+        CALL JMEMHAN( 9, IWORK, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JSYMGG: memory allocation error.',IWORK)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Spherical harmonic coeffs(first 20):',JPQUIET)
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PSHUP( NDBGLP ))
+  101   CONTINUE
+        CALL INTLOG(JP_DEBUG,'JSYMGG: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Start latitude(northernmost) = ', KSTART)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Stream number of leg. file = ', KLUNIT)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Number of lat. rows in output = ', KLATO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Number of long. pts per row = ', KLONO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Trig.functions (setup by JJSET99):',JPQUIET)
+        DO 102 NDBGLP = 1, 10
+          CALL INTLOGR(JP_DEBUG,' ',PTRIGS( NDBGLP ))
+  102   CONTINUE
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Prime factors (setup by JJSET99):',JPQUIET)
+        DO 103 NDBGLP = 1, 10
+          CALL INTLOG(JP_DEBUG,' ',KMFAX( NDBGLP ))
+  103   CONTINUE
+      ENDIF
+C
+      ILIM   = KTRUNC + 1
+      IMLIM  = KTRUNC + 1
+      INORTH = -1
+      ILN    = KLONO + 2
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Main loop through latitude rows to
+C*                  calculate fourier coefficients
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     For each latitude, the north and corresponding south latitude row
+C     are calculated at the same time from the same legendre functions.
+C
+      DO 280 JNEXTLAT = KSTART, KSTART+KLATO-1
+C
+        IF ( NDBG .GT. 1)
+     X    CALL INTLOG(JP_DEBUG,'JSYMGG: Next latitude = ', JNEXTLAT)
+C
+C       If required, generate the coefficients 'on the fly'
+C
+        IF( LON_FLY ) THEN
+          CALL NMAKGG( KTRUNC, JNEXTLAT, PLAT, 1, PLEG, NERR)
+          IOFF = 0
+        ELSE IF( LFILEIO ) THEN
+          CALL JREADGG( KLUNIT, KTRUNC, JNEXTLAT, PLEG, NERR)
+          IF ( NERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,'JSYMGG: JREADGG error',NERR)
+            KRET = JPROUTINE + 2
+            GOTO 990
+          ENDIF
+        ELSE
+          IOFF = (JNEXTLAT-1)*(KTRUNC+1)*(KTRUNC+4)/2
+        ENDIF
+C
+C       Clear unused slots in array.
+C       and one for the corresponding south latitude.
+C
+        INORTH = INORTH + 2
+        ISOUTH = INORTH + 1
+        DO 241 JF = 2*IMLIM + 1, ILN
+          PZFA(JF, INORTH) = 0.0
+          PZFA(JF, ISOUTH) = 0.0
+ 241    CONTINUE
+C
+C      Now fill slots which are used
+C
+        IMN = 0
+        IMP = 0
+C
+        DO JM = 1, IMLIM
+          ITAL = ILIM - JM + 1
+          ITALS = (ITAL + 1)/2
+          ITALA = ITAL/2
+#ifndef CRAY
+          CHOLD=(0.0D0, 0.0D0)
+#else
+          CHOLD = (0.0, 0.0)
+#endif
+          DO J = 1, 2*ITALS, 2
+#ifndef __uxp__
+            IF( LFILEIO ) THEN
+              CHOLD=CHOLD+PLEG(IMP+J)*PSHUP(IMN+J)
+            ELSE
+              JDCLOOP = IOFF + IMP + J
+              CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+            ENDIF
+#else
+            JDCLOOP = IOFF + IMP + J
+            CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+#endif
+          ENDDO
+          ZSUMS(JM)=CHOLD
+#ifndef CRAY
+          CHOLD = (0.0D0, 0.0D0)
+#else
+          CHOLD = (0.0, 0.0)
+#endif
+          DO J = 2, 2*ITALA, 2
+#ifndef __uxp__
+            IF( LFILEIO ) THEN
+              CHOLD=CHOLD+PLEG(IMP+J)*PSHUP(IMN+J)
+            ELSE
+              JDCLOOP = IOFF + IMP + J
+              CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+            ENDIF
+#else
+            JDCLOOP = IOFF + IMP + J
+            CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+#endif
+          ENDDO
+          ZSUMA(JM)=CHOLD
+          IMP = IMP + ITAL + 1
+          IMN = IMN + ITAL
+        ENDDO
+C
+C       For the southern hemisphere row, the legendre functions are
+C       the complex conjugates of the corresponding northern row -
+C       hence the juggling with the signs in the next loop.
+C
+C       Note that PZFA is REAL, but the coefficients being calculated
+C       are COMPLEX.  There are pairs of values for each coefficient
+C       (real and imaginary parts) and pairs of values for each
+C       latitude (north and south).
+C
+        DO 246 JM = 1, IMLIM
+          PZFA(2*JM -1, INORTH) = REAL(ZSUMS(JM))  + REAL(ZSUMA(JM))
+          PZFA(2*JM   , INORTH) = AIMAG(ZSUMS(JM)) + AIMAG(ZSUMA(JM))
+          PZFA(2*JM -1, ISOUTH) = REAL(ZSUMS(JM))  - REAL(ZSUMA(JM))
+          PZFA(2*JM   , ISOUTH) = AIMAG(ZSUMS(JM)) - AIMAG(ZSUMA(JM))
+ 246    CONTINUE
+C
+C*    End of main loop through latitude rows.
+C
+ 280  CONTINUE
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Fast fourier transform
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C
+      IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X  'JSYMGG: FFT, no.of rows (N and S) = ',ISOUTH)
+C
+      CALL FFT99(PZFA,WORK,PTRIGS,KMFAX,1,J2NFFT,KLONO,ISOUTH,1)
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMGG: Values calculated by FFT:',JPQUIET)
+        DO 301 NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PZFA( 1, NDBGLP ))
+          CALL INTLOGR(JP_DEBUG,' ',PZFA( 2, NDBGLP ))
+  301   CONTINUE
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+C
+  900 CONTINUE
+C
+      KRET = 0
+C
+  990 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jsymll.F b/interpolation/jsymll.F
new file mode 100755
index 0000000..3788381
--- /dev/null
+++ b/interpolation/jsymll.F
@@ -0,0 +1,372 @@
+#ifdef IBM
+ at PROCESS HOT(NOVECTOR) NOSTRICT
+#endif
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JSYMLL( PSHUP, KTRUNC, PSTART, PBUILD, PINTVL, KLUNIT, 
+     X                   KLATO,KLONO,PLEG,PTRIGS,KMFAX,PZFA,KRET)
+C
+C---->
+C**** JSYMLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine converts spectral input fields to standard
+C     lat/long grid fields.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JSYMLL( PSHUP, KTRUNC, PSTART, PBUILD, PINTVL, KLUNIT, 
+C    X             KLATO,KLONO,PLEG,PTRIGS,KMFAX,PZFA,KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     PSHUP    - Spherical harmonics field, unpacked
+C     KTRUNC   - Truncation number of spherical harmonics field
+C     PSTART   - Start latitude (northernmost) for output field
+C                (must be positive - see comments below)
+C     PBUILD   - Grid interval used to build the legendre coefficients
+C                file
+C     PINTVL   - Grid interval in degrees
+C     KLUNIT   - stream number of the legendre function file
+C     KLATO    - Number of latitude points in output field
+C     KLONO    - Number of longitude points in output field
+C     PLEG     - Array used to hold legendre functions
+C     PTRIGS   - Initialized array of trig.functions (setup by JJSET99)
+C     KMFAX    - Initialized array of prime factors (setup by JJSET99)
+C
+C     Output parameters
+C     ________________
+C
+C     PZFA    - Output grid point field; contains upto 32 each
+C               of North and South latitude rows symmetrically.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     None.
+C
+C     Externals
+C     _________
+C
+C     JREADLL - Reads the legendre functions for a latitude
+C     FFT99   - Carries out FFT
+C     INTLOG  - Output log message
+C     INTLOGR - Output log message (with real value)
+C     NMAKLL  - Make interpolation coefficients one latitude at a time
+C
+C     Reference
+C     _________
+C
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C     Comments
+C     ________
+C
+C     This is a redesign, based on SPECGP.F
+C
+C     It handles transformation to a regular lat/long grid.
+C     The generated grid is symmetrical about the equator, so 
+C     PSTART must be positive.
+C
+C     It is not for U and V fields (no correction is applied at the 
+C     poles).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Nov 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31300 )
+C
+C     Subroutine arguments
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC
+      REAL      PSTART, PBUILD, PINTVL
+      INTEGER   KLUNIT, KLATO, KLONO, KMFAX, KRET
+      REAL PLEG, PTRIGS, PZFA
+      DIMENSION PZFA(JPLONO+2, 64)
+      DIMENSION KMFAX(*), PLEG(*), PTRIGS(*)
+C
+C     Local variables
+      REAL ZLAT
+      INTEGER ILIM, IMLIM, ILN
+      INTEGER ITAL, ITALA, ITALS, IMN, IMP
+      INTEGER INORTH, ISOUTH
+      INTEGER JM, J, JNEXTLAT, JF
+      INTEGER NERR
+      INTEGER IOFF
+      INTEGER JDCLOOP
+	  Integer Itimer,timer1,timer280,timerFFT
+      Integer timer246,timer244,time
+C
+#ifdef POINTER_64
+      INTEGER*8 IWORK
+#endif
+      REAL WORK
+      DIMENSION WORK(1)
+      POINTER ( IWORK, WORK )
+      COMPLEX   ZSUMS(JPTRNC + 1), ZSUMA(JPTRNC + 1)
+      COMPLEX*16 CHOLD
+      INTEGER LOOP
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      SAVE ISIZE, IWORK
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+cs      timer1=Itimer(0)
+C
+C     First time through, dynamically allocate memory for workspace
+C
+      IF( ISIZE.EQ.0 ) THEN
+        ISIZE =  2*JPFFT*64
+        CALL JMEMHAN( 9, IWORK, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JSYMLL: memory allocation error.',IWORK)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Spherical harmonic coeffs(first 20):',JPQUIET)
+        DO 101 NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PSHUP( NDBGLP ))
+  101   CONTINUE
+        CALL INTLOG(JP_DEBUG,'JSYMLL: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSYMLL: Start latitude(northernmost) = ', PSTART)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSYMLL: Grid lat. interval(leg. file) = ', PBUILD)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JSYMLL: Grid lat. interval(degrees) = ', PINTVL)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Stream number of leg. file = ', KLUNIT)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Number of lat. rows in output = ', KLATO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Number of long. pts per row = ', KLONO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Trig.functions (setup by JJSET99):',JPQUIET)
+        DO 102 NDBGLP = 1, 10
+          CALL INTLOGR(JP_DEBUG,' ',PTRIGS( NDBGLP ))
+  102   CONTINUE
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Prime factors (setup by JJSET99):',JPQUIET)
+        DO 103 NDBGLP = 1, 10
+          CALL INTLOG(JP_DEBUG,' ',KMFAX( NDBGLP ))
+  103   CONTINUE
+      ENDIF
+      ILIM   = KTRUNC + 1
+      IMLIM  = KTRUNC + 1
+      INORTH = -1
+      ILN    = KLONO + 2
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Main loop through latitude rows to
+C*                  calculate fourier coefficients
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C     timer280=Itimer(0)
+C
+C     For each latitude, the north and corresponding south latitude row
+C     are calculated at the same time from the same legendre functions.
+C
+      DO 280 JNEXTLAT = 1, KLATO
+        ZLAT  = ( PSTART - (PINTVL * REAL(JNEXTLAT - 1)) )
+C
+        IF ( NDBG .GT. 1)
+     X    CALL INTLOGR(JP_DEBUG,'JSYMLL: Next latitude = ', ZLAT)
+C
+C       If required, generate the coefficients 'on the fly'
+C
+        IF( LON_FLY ) THEN
+          CALL NMAKLL( KTRUNC, PBUILD, ZLAT, 1, PLEG, NERR)
+          IOFF = 0
+        ELSE IF(LFILEIO ) THEN
+          CALL JREADLL( KLUNIT, KTRUNC, PBUILD, ZLAT, PLEG, NERR)
+          IF ( NERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,'JSYMLL: JREADLL error',NERR)
+	    KRET = JPROUTINE + 2
+	    GOTO 990
+	  ENDIF
+        ELSE
+          IOFF = NINT( (90.0 - ZLAT)/PBUILD )*(KTRUNC+1)*(KTRUNC+4)/2
+	ENDIF
+C
+C       Clear unused slots in array.
+C       Note there are two slots in the array - one for north latitude 
+C       and one for the corresponding south latitude.
+        INORTH = INORTH + 2
+        ISOUTH = INORTH + 1
+        DO 241 JF = 2*IMLIM + 1, ILN
+          PZFA(JF, INORTH) = 0.0
+          PZFA(JF, ISOUTH) = 0.0
+ 241    CONTINUE
+C
+C       Now fill slots which are used
+        IMN = 0
+        IMP = 0
+C
+C       timer244=Itimer(0)
+        DO JM = 1, IMLIM
+          ITAL = ILIM - JM + 1
+          ITALS = (ITAL + 1)/2
+          ITALA = ITAL/2
+#ifndef CRAY
+          CHOLD=(0.0D0, 0.0D0)
+#else
+          CHOLD = (0.0, 0.0)
+#endif
+          DO J = 1, 2*ITALS, 2
+#ifndef __uxp__
+            IF( LFILEIO ) THEN
+              CHOLD=CHOLD+PLEG(IMP+J)*PSHUP(IMN+J)
+            ELSE
+              JDCLOOP = IOFF + IMP + J
+              CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+            ENDIF
+#else
+            JDCLOOP = IOFF + IMP + J
+            CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+#endif
+          ENDDO
+          ZSUMS(JM)=CHOLD
+#ifndef CRAY
+          CHOLD = (0.0D0, 0.0D0)
+#else
+          CHOLD = (0.0, 0.0)
+#endif
+          DO J = 2, 2*ITALA, 2
+#ifndef __uxp__
+            IF( LFILEIO ) THEN
+              CHOLD=CHOLD+PLEG(IMP+J)*PSHUP(IMN+J)
+            ELSE
+              JDCLOOP = IOFF + IMP + J
+              CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+            ENDIF
+#else
+            JDCLOOP = IOFF + IMP + J
+            CHOLD=CHOLD+PLEG(JDCLOOP)*PSHUP(IMN+J)
+#endif
+          ENDDO
+          ZSUMA(JM)=CHOLD
+          IMP = IMP + ITAL + 1
+          IMN = IMN + ITAL
+        ENDDO
+C       timer244=Itimer(timer244)
+C
+C       For the southern hemisphere row, the legendre functions are
+C       the complex conjugates of the corresponding northern row -
+C       hence the juggling with the signs in the next loop.
+C
+C       Note that PZFA is REAL, but the coefficients being calculated
+C       are COMPLEX.  There are pairs of values for each coefficient
+C       (real and imaginary parts) and pairs of values for each
+C       latitude (north and south).
+C
+C       timer246=Itimer(0)
+        DO 246 JM = 1, IMLIM
+          PZFA(2*JM -1, INORTH) = REAL(ZSUMS(JM))  + REAL(ZSUMA(JM))
+          PZFA(2*JM   , INORTH) = AIMAG(ZSUMS(JM)) + AIMAG(ZSUMA(JM))
+          PZFA(2*JM -1, ISOUTH) = REAL(ZSUMS(JM))  - REAL(ZSUMA(JM))
+          PZFA(2*JM   , ISOUTH) = AIMAG(ZSUMS(JM)) - AIMAG(ZSUMA(JM))
+ 246    CONTINUE
+C       timer246=Itimer(timer246)
+C
+C*    End of main loop through latitude rows.
+C
+ 280  CONTINUE
+C     timer280=Itimer(timer280)
+C     print*,'JSYMLL: legendre functions klat=',KLATO,' time:',timer280,
+C    X    ' seconds loop 246:',timer246,' loop 244:',timer244
+C
+C     _______________________________________________________
+C
+C*    Section 3.    Fast fourier transform
+C     _______________________________________________________
+C
+ 300  CONTINUE
+C     timerFFT=Itimer(0)
+C
+      IF ( NDBG .GT. 1) CALL INTLOG(JP_DEBUG,
+     X  'JSYMLL: FFT, no.of rows (N and S) = ', ISOUTH)
+C
+      CALL FFT99(PZFA,WORK,PTRIGS,KMFAX,1,J2NFFT,KLONO,ISOUTH,1)
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JSYMLL: Values calculated by FFT:',JPQUIET)
+        DO 301 NDBGLP = 1, 20
+        CALL INTLOGR(JP_DEBUG,' ', PZFA( 1, NDBGLP ))
+        CALL INTLOGR(JP_DEBUG,' ', PZFA( 2, NDBGLP ))
+  301   CONTINUE
+      ENDIF
+C     timerFFT=Itimer(timerFFT)
+C     timer1=Itimer(timer1)
+C     print*,'JSYMLL: legendre functions Total:',timer1,' sec first:',
+C    X    timerMEM,' FFT99: ',timerFFT
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+C
+ 900  CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jtimer.c b/interpolation/jtimer.c
new file mode 100755
index 0000000..99a5659
--- /dev/null
+++ b/interpolation/jtimer.c
@@ -0,0 +1,62 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <sys/times.h>
+#include <time.h>
+
+#ifndef CRAY
+#include <unistd.h>
+#endif
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define JTIMER jtimer
+#else
+#define JTIMER jtimer_
+#endif
+#endif
+
+void JTIMER(const long * param)
+{
+static struct tms before, after;
+static time_t utime, stime;
+static long startime, endtime;
+
+/*  If input parameter is zero, initialise the time record */
+    if ( *param == 0 )
+    {
+      startime = times(&before);
+    }
+
+/*  Otherwise, publish elapsed time since last initialisation */
+    else
+    {
+      endtime = times(&after);
+  
+      utime = after.tms_utime - before.tms_utime;
+      stime = after.tms_stime - before.tms_stime;
+/* Sinisa  CLOCKS_PER_SEC
+    The value of this macro is the number of clock ticks per second measured by the clock function. 
+
+	int CLK_TCK is an obsolete name for CLOCKS_PER_SEC. 
+*/
+      printf("CPU time used in user space = %f sec\n", 
+             (float) utime/(float)CLOCKS_PER_SEC);
+      printf("CPU time used by the system = %f sec\n", 
+             (float) stime/(float)CLOCKS_PER_SEC);
+      printf("Wall clock time used by process = %f sec\n", 
+             (float) (endtime - startime)/(float)CLOCKS_PER_SEC);
+    }
+
+    return;
+
+}
diff --git a/interpolation/juvpole.F b/interpolation/juvpole.F
new file mode 100755
index 0000000..b80bc74
--- /dev/null
+++ b/interpolation/juvpole.F
@@ -0,0 +1,219 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+        SUBROUTINE JUVPOLE(PSHUP, KTRUNC, PZFA, KLONO, KRET)
+C
+C---->
+C**** JUVPOLE
+C
+C     Purpose
+C     -------
+C     This routine creates polar wind U or V components for lat/long
+C     grid fields.
+C
+C
+C     Interface
+C     ---------
+C     CALL JUVPOLE(PSHUP, KTRUNC, PZFA, KLONO, KRET)
+C
+C
+C     Input parameters
+C     ----------------
+C     PSHUP   - Spherical harmonics field, unpacked
+C     KTRUNC  - Truncation number of spherical harmonics field
+C     KLONO   - Number of longitude points in output field
+C
+C
+C     Output parameters
+C     -----------------
+C     PZFA - Output grid point field; contains upto 32 each of
+C            North and South latitude rows symmetrically.
+C     KRET - Return status code
+C            0 = OK
+C
+C
+C     Common block usage
+C     ------------------
+C     JDCNDBG
+C
+C
+C     Method
+C     ------
+C     For each pole, creates the reduced gaussian grid lines nearest to
+C     the pole and does a linear interpolation to the polar longitude.
+C
+C
+C     Externals
+C     ---------
+C     JAGGGP  - converts spectral input to a gaussian grid
+C     INTLOG  - Output log message
+C     INTLOGR - Output log message (with real value)
+C
+C
+C     Reference
+C     ---------
+C     None.
+C
+C     Comments
+C     --------
+C     None.
+C
+C
+C     Author
+C     ------
+C     J.D.Chambers      ECMWF    October 2002
+C
+C
+C     Modifications
+C     -------------
+C     None.
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+#include "current.h"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Subroutine arguments
+C
+      COMPLEX PSHUP(*)
+      REAL PZFA(JPLONO + 2, 64)
+      INTEGER KTRUNC, KLONO, KRET
+C
+C     Parameters
+C
+C     Local variables
+C
+      REAL EAST, WEST, LAT, POUTF(18), ALATS(320)
+      REAL XLONG, WLEFT, XSTEP, GSTEP
+      INTEGER KPTS(320), NUM, LOOP, NLEFT, NRIGHT
+C
+C     Externals
+C
+      INTEGER  IGGLAT
+      EXTERNAL IGGLAT
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.  Initialization.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KRET  = 0
+C
+      NUM = 160
+      GSTEP = 360.0 / 18.0
+      XSTEP = 360.0 / REAL(KLONO)
+      EAST  = 360.0 - GSTEP
+      WEST  = 0.0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.  Create North pole values
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Form the N160 reduced gaussian grid latitude near the North pole
+C
+      LAT = 90.0
+      CALL JAGGGP( PSHUP, KTRUNC, LAT, LAT, WEST, EAST,
+     X             NUM, 'R', KPTS, POUTF, 1, KRET)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JUVPOLE: problem forming Northern gaussian grid latitude',
+     X    JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     Interpolate to the lat/long northern latitude grid points
+C
+      DO LOOP = 1, KLONO
+C
+C       Find the gaussian neighbours on either side of lat/long point
+C       and their weights
+C
+        XLONG = XSTEP * REAL(LOOP-1)
+C
+        NLEFT  = 1 + INT(XLONG/GSTEP)
+        NRIGHT = NLEFT + 1
+        IF( NRIGHT.GT.18 ) NRIGHT = 1
+C
+        WLEFT = 1.0 - (ABS((XLONG - (NLEFT-1)*GSTEP))/GSTEP)
+C
+        PZFA(LOOP,1) = POUTF(NLEFT)*WLEFT + POUTF(NRIGHT)*(1.0-WLEFT)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.  Create South pole values
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Store latitude and point count values for the next call to JAGGGP
+C     which uses the 'U' option (user supplied values).
+C
+      NOGAUSO = NUM
+C
+      KRET  = IGGLAT(NUM*2, ALATS, 1, 1)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'JUVPOLE: IGGLAT call failed',KRET)
+        KRET = KRET
+        GOTO 900
+      ENDIF
+C
+      DO LOOP = 1, NUM*2
+        NOLPTS(LOOP)  = KPTS(LOOP)
+        ROGAUSS(LOOP) = ALATS(LOOP)
+      ENDDO
+C
+C     Form the N160 reduced gaussian grid latitude near the South pole
+C
+      LAT = -90.0
+      CALL JAGGGP( PSHUP, KTRUNC, LAT, LAT, WEST, EAST,
+     X             NUM, 'U', KPTS, POUTF, 1, KRET)
+      IF( KRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'JUVPOLE: problem forming Southern gaussian grid latitude',
+     X    JPQUIET)
+        GOTO 900
+      ENDIF
+C
+C     Interpolate to the lat/long southern latitude grid points
+C
+      DO LOOP = 1, KLONO
+C
+C       Find the gaussian neighbours on either side of lat/long point
+C       and their weights
+C
+        XLONG = XSTEP * REAL(LOOP-1)
+C
+        NLEFT  = 1 + INT(XLONG/GSTEP)
+        NRIGHT = NLEFT + 1
+        IF( NRIGHT.GT.18 ) NRIGHT = 1
+C
+        WLEFT = 1.0 - (ABS((XLONG - (NLEFT-1)*GSTEP))/GSTEP)
+C
+        PZFA(LOOP,2) = POUTF(NLEFT)*WLEFT + POUTF(NRIGHT)*(1.0-WLEFT)
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.  Return.
+C     -----------------------------------------------------------------|
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/jvod2uv.F b/interpolation/jvod2uv.F
new file mode 100755
index 0000000..eaace6a
--- /dev/null
+++ b/interpolation/jvod2uv.F
@@ -0,0 +1,200 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JVOD2UV( VOR, DIV, KTIN, U, V, KTOUT)
+C
+C---->
+C**** JVOD2UV
+C
+C     Purpose
+C     -------
+C
+C     Calculate spherical harmonic coefficients of U*cos(lat) and
+C     V*cos(lat) at triangular truncation KTOUT, given the coefficients
+C     of divergence and vorticity at truncation KTIN.
+C 
+C
+C     Interface
+C     ---------
+C
+C     CALL JVOD2UV( VOR, DIV, KTIN, U, V, KTOUT)
+C
+C     Input
+C     -----
+C
+C     VOR(KDIM1) = array of vorticity coefficients
+C     DIV(KDIM1) = array of divergence coefficients
+C     KTIN       = triangular truncation
+C                  where KDIM1 = (KTIN+1)*(KTIN+2)
+C
+C
+C     Output
+C     ------
+C
+C     U(KDIM2)   = output array of U*cos(lat) coefficients
+C     V(KDIM2)   = output array of V*cos(lat) coefficients
+C     KTOUT      = output triangular truncation (KTOUT.le.KTIN)
+C                  where KDIM2 = (KTOUT+1)*(KTOUT+4)
+C
+C
+C     Method
+C     ------
+C
+C     ??
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     Jan Haseler       ECMWF      5th January 1981
+C
+C
+C     Modifications
+C     -------------
+C
+C     D. R. Roskilly    ECMWF      5th May 1987
+C     Avoid calculating the extra values for U and V components so
+C     that vorticity and divergence can be re-calculated if required.
+C
+C     ??                ??         15th February 1988
+C     Subroutine renamed VOD2UV from DVTOUV.
+C
+C     K.Rider           ECMWF      21st August 1991
+C     Version 2 inconsistently truncated U and V to T(ITOUT-1).
+C     Changed so that vorticity and divergence are consistently truncated
+C     to T105 (sic).
+C     U and V are calculated with truncation T(ITOUT),with zero values at
+C     the corner.
+C     Vorticity and divergence can be recalculated if required, but only
+C     truncated to T(ITOUT) since the higher coefficients have been lost.
+C
+C     J.D.Chambers       ECMWF      26th January 1995
+C       Cleaned up code (?!)
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+      COMPLEX VOR(*), DIV(*), U(*), V(*)
+      INTEGER KTIN, KTOUT
+C
+C     Local variables
+      INTEGER K, IMN, ITOUT, JM, JN, JMP, LOOP, SIZE
+      REAL REARTH, ZM, ZN
+      COMPLEX ZI
+C
+C     Statement functions
+      REAL DD, SS
+      REAL PM, PN
+      DD(PM,PN) = -SQRT((PN*PN-PM*PM)/(4.*PN*PN-1.))/PN
+      SS(PM,PN) = -PM/(PN*(PN+1.))
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      ZI     = (0.0, 1.0)
+      REARTH = 6.371E6
+      K      = 1
+      IMN    = 1
+Cjdc  ITOUT  = MIN0(KTOUT,KTIN)
+      ITOUT  = KTOUT
+      SIZE = (ITOUT+1)*(ITOUT+2)/2
+      DO LOOP = 1, SIZE
+        U(LOOP) = 0.0
+        V(LOOP) = 0.0
+      ENDDO
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Handle coefficients for M < ITOUT; N = M
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      DO 255 JM = 1,ITOUT
+C
+        ZM = JM - 1.0
+        ZN = ZM
+C
+        IF ( JM.GT.1 ) THEN
+          U(K) = (-DD(ZM,ZN+1.)*VOR(IMN+1)+ZI*SS(ZM,ZN)*DIV(IMN))*REARTH
+          V(K) = ( DD(ZM,ZN+1.)*DIV(IMN+1)+ZI*SS(ZM,ZN)*VOR(IMN))*REARTH
+        ELSE
+          U(K) = (-DD(ZM,ZN+1.)*VOR(IMN+1))*REARTH
+          V(K) = ( DD(ZM,ZN+1.)*DIV(IMN+1))*REARTH
+        ENDIF
+C
+        IMN = IMN + 1
+          K =   K + 1
+        JMP =  JM + 1
+C
+C       When N < ITOUT-1
+C
+        IF (JMP.LT.ITOUT) THEN
+          DO 235 JN = JMP, ITOUT-1
+            ZN   = JN - 1.0
+            U(K) = ( DD(ZM,ZN)*VOR(IMN-1)-DD(ZM,ZN+1)*VOR(IMN+1)
+     X              +ZI*SS(ZM,ZN)*DIV(IMN))*REARTH
+            V(K) = (-DD(ZM,ZN)*DIV(IMN-1)+DD(ZM,ZN+1)*DIV(IMN+1)
+     X              +ZI*SS(ZM,ZN)*VOR(IMN))*REARTH
+C
+              K  =   K + 1
+            IMN  = IMN + 1
+C
+ 235      CONTINUE
+C
+C         When N = ITOUT - 1
+C
+          ZN   = ITOUT - 1
+          U(K) = ( DD(ZM,ZN)*VOR(IMN-1)+ZI*SS(ZM,ZN)*DIV(IMN))*REARTH
+          V(K) = (-DD(ZM,ZN)*DIV(IMN-1)+ZI*SS(ZM,ZN)*VOR(IMN))*REARTH
+          K    = K + 1
+          IMN  = IMN + 1
+        ENDIF
+C
+C       When N = ITOUT
+C
+        ZN   = ITOUT
+        U(K) = ( DD(ZM,ZN)*VOR(IMN-1))*REARTH
+        V(K) = (-DD(ZM,ZN)*DIV(IMN-1))*REARTH
+        K    = K + 1
+C
+C       When N = ITOUT + 1
+C
+        IMN  = IMN + 1 + KTIN-ITOUT
+C
+ 255  CONTINUE
+C
+C ------------------------------------------------------------------
+C*    Section 3.   Handle coefficients for M = ITOUT.
+C ------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     When N = ITOUT
+C
+      U(K) = 0.0
+      V(K) = 0.0
+C
+C     Ignore M = ITOUT; N = ITOUT + 1
+C
+C     K    = K + 1
+C
+      RETURN
+      END
diff --git a/interpolation/jwindll.F b/interpolation/jwindll.F
new file mode 100755
index 0000000..3524cc5
--- /dev/null
+++ b/interpolation/jwindll.F
@@ -0,0 +1,459 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JWINDLL( PSHUP, KTRUNC, PSTART, PBUILD, PINTVL, KLUNIT,
+     X                    KLATO,KLONO,PLEG,PTRIGS,KMFAX,PZFA,KRET)
+C
+C---->
+C**** JWINDLL
+C
+C     Purpose
+C     -------
+C     This routine converts spectral input fields to standard
+C     lat/long grid fields for wind components U and V.
+C
+C
+C     Interface
+C     ---------
+C     CALL JWINDLL( PSHUP, KTRUNC, PSTART, PBUILD, PINTVL, KLUNIT,
+C    X              KLATO,KLONO,PLEG,PTRIGS,KMFAX,PZFA,KRET)
+C
+C
+C     Input parameters
+C     ----------------
+C     PSHUP  - Spherical harmonics field, unpacked
+C     KTRUNC - Truncation number of spherical harmonics field
+C     PSTART - Start latitude (northernmost) for output field
+C              (must be positive - see comments below)
+C     PBUILD - Grid interval used to build the legendre coefficients file
+C     PINTVL - Grid latitude interval in degrees
+C     KLUNIT - stream number of the legendre function file
+C     KLATO  - Number of latitude points in output field
+C     KLONO  - Number of longitude points in output field
+C     PLEG   - Array used to hold legendre functions
+C     PTRIGS - Initialized array of trig.functions (setup by JJSET99)
+C     KMFAX  - Initialized array of prime factors (setup by JJSET99)
+C
+C
+C     Output parameters
+C     -----------------
+C     PZFA - Output grid point field; contains upto 32 each of
+C            North and South latitude rows symmetrically.
+C     KRET - Return status code
+C            0 = OK
+C
+C
+C     Common block usage
+C     ------------------
+C     JDCNDBG
+C
+C
+C     Method
+C     ------
+C     None.
+C
+C
+C     Externals
+C     ---------
+C     JREADLL - Reads the legendre functions for a latitude
+C     JSPPOLE - Applies correction at North or South pole
+C     FFT99   - Carries out FFT
+C     INTLOG  - Output log message
+C     INTLOGR - Output log message (with real value)
+C     GETENV  - Pick up contents of an environment variable
+C     JUVPOLE - Use gaussian grid to calculate U and V at the poles
+C
+C
+C     Reference
+C     ---------
+C     E.C.M.W.F. Research Department technical memorandum no. 56
+C                "The forecast and analysis post-processing package"
+C                May 1982. J.Haseler.
+C
+C
+C     Comments
+C     --------
+C     This is a redesign, based on SPECGP.F
+C
+C     It handles transformation to a regular lat/long grid.
+C     The generated grid is symmetrical about the equator, so
+C     PSTART must be positive.
+C
+C     It is only for U and V fields (correction is applied at the 
+C     poles and a scale factor is applied according to latitude).
+C
+C
+C     Author
+C     ------
+C     J.D.Chambers      *ECMWF*      Nov 1993
+C
+C
+C     Modifications
+C     -------------
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        October 2002
+C     Add handling for U/V spectral (as opposed to Ucos(theta)/Vcos(theta))
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+C
+      IMPLICIT NONE
+#include "jparams.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Subroutine arguments
+C
+      COMPLEX   PSHUP
+      DIMENSION PSHUP(*)
+      INTEGER   KTRUNC
+      REAL      PSTART, PBUILD, PINTVL
+      INTEGER   KLUNIT, KLATO, KLONO, KMFAX, KRET
+      REAL PLEG, PTRIGS, PZFA
+      DIMENSION PZFA(JPLONO + 2, 64)
+      DIMENSION KMFAX(*), PLEG(*), PTRIGS(*)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 31400 )
+C
+C     Local variables
+C
+      REAL ZPIBY2, ZDEGR, ZLAT
+      INTEGER ILIM, IMLIM, ILN
+      INTEGER ITAL, ITALA, ITALS, IMN, IMP
+      INTEGER INORTH, ISOUTH
+      INTEGER JM, J245, JNEXTLAT
+      INTEGER NERR
+      INTEGER IOFF
+      INTEGER JDCLOOP
+      REAL ZF
+      REAL ZCOSI
+C
+      DIMENSION ZF(2*JPFFT)
+C
+#ifdef POINTER_64
+      INTEGER*8 IWORK
+#endif
+      REAL WORK
+      DIMENSION WORK(1)
+      POINTER ( IWORK, WORK )
+      COMPLEX   ZDUM(JPTRNC + 1)
+      COMPLEX   ZSUMS(JPTRNC + 1), ZSUMA(JPTRNC + 1)
+      COMPLEX*16 CHOLD
+      INTEGER LOOP
+C
+      LOGICAL LXFIRST, LPLAINU
+      INTEGER ISIZE, IBLANK
+      CHARACTER*10 PLAINUV
+C
+      DATA LXFIRST/.TRUE./, LPLAINU/.FALSE./
+      DATA ISIZE/0/
+      SAVE ISIZE, IWORK, LXFIRST, LPLAINU
+C
+C     Statement function
+C
+      LOGICAL GPOLE
+      REAL ANGLE
+      GPOLE(ANGLE) = ( ABS(90.0 - ABS(ANGLE) ) .LT. 1.0E-3 )
+C                  = .TRUE. if LAT is 90.0 or -90.0
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.    Initialization.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     Check environment variable to see if wind components are plain
+C     U and V, or U*cos(theta) and V*cos(theta) (the default).
+C
+      IF( LXFIRST ) THEN
+C
+        LXFIRST = .FALSE.
+        CALL GETENV('INTERP_PLAIN_UV', PLAINUV)
+        IBLANK = INDEX(PLAINUV, ' ')
+C
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'ON') )  LPLAINU =.TRUE.
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'on') )  LPLAINU =.TRUE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'YES') ) LPLAINU =.TRUE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'yes') ) LPLAINU =.TRUE.
+C
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'NO') )  LPLAINU =.FALSE.
+        IF( (IBLANK.EQ.3).AND.(PLAINUV(1:2).EQ.'no') )  LPLAINU =.FALSE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'OFF') ) LPLAINU =.FALSE.
+        IF( (IBLANK.EQ.4).AND.(PLAINUV(1:3).EQ.'off') ) LPLAINU =.FALSE.
+C
+C       First time through, dynamically allocate memory for workspace
+C
+        ISIZE =  2*JPFFT*64
+        CALL JMEMHAN( 9, IWORK, ISIZE, 1, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JWINDLL: memory allocation error',IWORK)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+      ENDIF
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Spherical harmonic coeffs(first 20):',JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PSHUP( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Spherical harmonic truncation = ', KTRUNC)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JWINDLL: Start latitude(northernmost) = ', PSTART)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JWINDLL: Grid lat. interval(leg. file) = ', PBUILD)
+        CALL INTLOGR(JP_DEBUG,
+     X    'JWINDLL: Grid lat. interval(degrees) = ', PINTVL)
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Stream number of leg. file = ', KLUNIT)
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Number of lat. rows in output = ', KLATO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Number of long. pts per row = ', KLONO)
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Trig.functions (setup by JJSET99):',JPQUIET)
+        DO NDBGLP = 1, 10
+          CALL INTLOGR(JP_DEBUG,' ',PTRIGS( NDBGLP ))
+        ENDDO
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Prime factors (setup by JJSET99):',JPQUIET)
+        DO NDBGLP = 1, 10
+          CALL INTLOG(JP_DEBUG,' ',KMFAX( NDBGLP ))
+        ENDDO
+      ENDIF
+C
+      ZPIBY2 = PPI / 2.0
+      ZDEGR  = PPI / 180.0
+      ILIM   = KTRUNC + 1
+      IMLIM  = KTRUNC + 1
+      INORTH = -1
+      ILN    = KLONO + 2
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.    Main loop through latitude rows to
+C*                  calculate fourier coefficients
+C     -----------------------------------------------------------------|
+C
+ 200  CONTINUE
+C
+C     For each latitude, the north and corresponding south latitude row
+C     are calculated at the same time from the same legendre functions.
+C
+      DO 280 JNEXTLAT = 1, KLATO
+        ZLAT  = ( PSTART - (PINTVL * REAL(JNEXTLAT - 1)) )
+C
+        IF( NDBG.GT.1 )
+     X    CALL INTLOGR(JP_DEBUG, 'JWINDLL: Next latitude = ', ZLAT)
+C
+C       If required, generate the coefficients 'on the fly'
+C
+        IF( LON_FLY ) THEN
+          CALL NMAKLL( KTRUNC, PBUILD, ZLAT, 1, PLEG, NERR)
+          IOFF = 0
+        ELSE IF( LFILEIO ) THEN
+          CALL JREADLL( KLUNIT, KTRUNC, PBUILD, ZLAT, PLEG, NERR)
+          IF ( NERR .NE. 0 ) THEN
+            CALL INTLOG(JP_ERROR,'JWINDLL: JREADLL error',NERR)
+	    KRET = JPROUTINE + 2
+	    GOTO 990
+	  ENDIF
+        ELSE
+            IOFF = NINT( (90.0 - ZLAT)/PBUILD )*(KTRUNC+1)*(KTRUNC+4)/2
+        ENDIF
+C
+C     Clear unused slots in array.
+C     Note there are two slots in the array - one for north latitude 
+C     and one for the corresponding south latitude.
+        INORTH = INORTH + 2
+        ISOUTH = INORTH + 1
+        DO LOOP = 1, ILN
+          ZF( LOOP) = 0.0
+          PZFA( LOOP, INORTH) = 0.0
+          PZFA( LOOP, ISOUTH) = 0.0
+        ENDDO
+C
+C       For spectral Ucos(theta), Vcos(theta), treat the poles as a
+C       special case.
+C
+        IF( GPOLE(ZLAT).AND.(.NOT.LPLAINU) ) THEN
+C
+          IF( NDBG.GT.1 ) CALL INTLOG(JP_DEBUG,
+     X      'JWINDLL: Pole special for spectral Ucos(t), Vcos(t)',
+     X      JPQUIET)
+C
+          CALL JSPPOLE( PSHUP, 1, KTRUNC, .TRUE., ZF)
+          DO LOOP = 1, ILN
+            PZFA( LOOP, INORTH) = ZF( LOOP)
+          ENDDO
+C
+          CALL JSPPOLE( PSHUP, 0, KTRUNC, .TRUE., ZF)
+          DO LOOP = 1, ILN
+            PZFA( LOOP, ISOUTH) = ZF( LOOP)
+          ENDDO
+C
+        ELSE
+C
+C       Otherwise not at pole, or spectral U and V
+C
+C         Fill slots which are used
+          IMN = 0
+          IMP = 0
+C
+          DO 247 JM = 1, IMLIM
+            ITAL = ILIM - JM + 1
+            DO 245 J245 = 1, ITAL
+#ifndef __uxp__
+              IF( LFILEIO ) THEN
+                ZDUM(J245) = PLEG(IMP + J245)*PSHUP(IMN + J245)
+              ELSE
+                JDCLOOP = IOFF + IMP + J245
+                ZDUM(J245) = PLEG(JDCLOOP)*PSHUP(IMN + J245)
+              ENDIF
+#else
+              JDCLOOP = IOFF + IMP + J245
+              ZDUM(J245) = PLEG(JDCLOOP)*PSHUP(IMN + J245)
+#endif
+ 245        CONTINUE
+            IMP = IMP + ITAL + 1
+            IMN = IMN + ITAL
+            ITALS = (ITAL + 1)/2
+            ITALA = ITAL/2
+#ifndef CRAY
+            CHOLD = (0.0D0, 0.0D0)
+#else
+            CHOLD = (0.0, 0.0)
+#endif
+            DO LOOP = 1, 2*ITALS, 2
+              CHOLD = CHOLD + ZDUM(LOOP)
+            ENDDO
+            ZSUMS(JM) = CHOLD
+#ifndef CRAY
+            CHOLD = (0.0D0, 0.0D0)
+#else
+            CHOLD = (0.0, 0.0)
+#endif
+            DO LOOP = 2, 2*ITALA, 2
+              CHOLD = CHOLD + ZDUM(LOOP)
+            ENDDO
+            ZSUMA(JM) = CHOLD
+ 247      CONTINUE
+C
+C       For the southern hemisphere row, the legendre functions are
+C       the complex conjugates of the corresponding northern row -
+C       hence the juggling with the signs in the next loop.
+C
+C       Note that PZFA is REAL, but the coefficients being calculated
+C       are COMPLEX.  There are pairs of values for each coefficient
+C       (real and imaginary parts) and pairs of values for each
+C       latitude (north and south).
+C
+          DO JM = 1, IMLIM
+            PZFA(2*JM -1, INORTH) = REAL(ZSUMS(JM))  + REAL(ZSUMA(JM))
+            PZFA(2*JM   , INORTH) = AIMAG(ZSUMS(JM)) + AIMAG(ZSUMA(JM))
+            PZFA(2*JM -1, ISOUTH) = REAL(ZSUMS(JM))  - REAL(ZSUMA(JM))
+            PZFA(2*JM   , ISOUTH) = AIMAG(ZSUMS(JM)) - AIMAG(ZSUMA(JM))
+          ENDDO
+        ENDIF
+C
+C*    End of main loop through latitude rows.
+C
+ 280  CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.    Fast fourier transform
+C     -----------------------------------------------------------------|
+C
+ 300  CONTINUE
+C
+      IF( NDBG.GT.1 ) CALL INTLOG(JP_DEBUG,
+     X  'JWINDLL: FFT, no.of rows (N and S) = ', ISOUTH)
+C
+      CALL FFT99(PZFA,WORK,PTRIGS,KMFAX,1,J2NFFT,KLONO,ISOUTH,1)
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Values calculated by FFT:',JPQUIET)
+        DO NDBGLP = 1, 20
+          CALL INTLOGR(JP_DEBUG,' ',PZFA( 1, NDBGLP ))
+          CALL INTLOGR(JP_DEBUG,' ',PZFA( 2, NDBGLP ))
+        ENDDO
+      ENDIF
+C
+C     For spectral U, V generate the poles from a reduced gaussian line
+C     of latitude.
+C
+      IF( GPOLE(PSTART).AND.(LPLAINU) ) THEN
+C
+        IF( NDBG.GT.1 ) CALL INTLOG(JP_DEBUG,
+     X    'JWINDLL: Poles generated from gaussian for spectral U, V',
+     X    JPQUIET)
+C
+        CALL JUVPOLE(PSHUP, KTRUNC, PZFA, KLONO, KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,'JWINDLL: pole wind create error',IWORK)
+          KRET = JPROUTINE + 1
+          GOTO 990
+        ENDIF
+C
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.    For spectral Ucos(theta), Vcos(theta), apply scale
+C                   factor to all latitudes except poles.
+C     -----------------------------------------------------------------|
+C
+ 400  CONTINUE
+C
+      IF( NDBG.GT.0 ) THEN
+        IF( LPLAINU ) THEN
+          CALL INTLOG(JP_DEBUG,
+     X      'JWINDLL: Do not apply scale to latitudes',JPQUIET)
+        ELSE
+          CALL INTLOG(JP_DEBUG,
+     X      'JWINDLL: Apply scale to latitudes',JPQUIET)
+        ENDIF
+      ENDIF
+C
+      IF( .NOT.LPLAINU ) THEN
+        INORTH = -1
+        DO JNEXTLAT = 1, KLATO
+          ZLAT  = ( PSTART - (PINTVL * REAL(JNEXTLAT - 1)) )
+          INORTH = INORTH + 2
+          ISOUTH = INORTH + 1
+          IF( .NOT.GPOLE(ZLAT) ) THEN
+            ZCOSI = 1.0 / COS( ZLAT * ZDEGR )
+            CALL SSCAL( KLONO, ZCOSI, PZFA( 2, INORTH), 1)
+            CALL SSCAL( KLONO, ZCOSI, PZFA( 2, ISOUTH), 1)
+          ENDIF
+        ENDDO
+C
+      ENDIF
+C     -----------------------------------------------------------------|
+C*    Section 9. Return to calling routine. Format statements
+C     -----------------------------------------------------------------|
+C
+ 900  CONTINUE
+C
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/jwscal.F b/interpolation/jwscal.F
new file mode 100755
index 0000000..541c46f
--- /dev/null
+++ b/interpolation/jwscal.F
@@ -0,0 +1,154 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE JWSCAL( PZFA, KLATS, KLONS, KFIRST, PLATS)
+C
+C---->
+C**** JWSCAL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine applies a scale factor to all latitudes except
+C     the poles
+C
+C     INTERFACE
+C     _________
+C
+C     CALL JWSCAL( PZFA, KLATS, KLONS, KFIRST, PLATS)
+C
+C     Input parameters
+C     ________________
+C
+C     PZFA     - Array of wind field (U or V) fourier coefficients
+C     KLATS    - Number of latitude lines in PZFA
+C     KLONS    - Number of longitude points in each line of latitude
+C     KFIRST   - First latitude to process in PLATS
+C     PLATS    - Array of gaussian latitudes (degrees)
+C
+C     Output parameters
+C     ________________
+C
+C     PZFA     - Modified array of fourier coefficients
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C     Method
+C     ______
+C
+C     Apply latitude-dependent scale factor to all coefficients.
+C     It is assumed that no latitude is at the North or South pole.
+C
+C     Externals
+C     _________
+C
+C     SSCAL  - Apply scalar correction to row of values
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     PZFA contains pairs of north/south latitudes.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+C
+C     Subroutine arguments
+C
+      REAL   PZFA
+      DIMENSION PZFA(JPLONO+2, 64)
+      INTEGER   KLATS, KLONS, KFIRST
+      REAL      PLATS
+      DIMENSION PLATS(*)
+C
+C     Local variables
+C
+      INTEGER JNEXTLAT, INORTH, ISOUTH
+      REAL ZCOSI, ZLAT, ZPIBY2, ZDEGR
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+      ZPIBY2 = PPI / 2.0
+      ZDEGR  = PPI / 180.0
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Apply scale factor to all latitudes.
+C     _______________________________________________________
+C
+ 200  CONTINUE
+      INORTH = -1
+      DO 220 JNEXTLAT = 1, KLATS
+        ZLAT  = PLATS( KFIRST + JNEXTLAT - 1 )
+        INORTH = INORTH + 2
+        ISOUTH = INORTH + 1
+        ZCOSI = 1.0 / COS( ZLAT * ZDEGR )
+        CALL SSCAL( KLONS, ZCOSI, PZFA( 2, INORTH), 1)
+        CALL SSCAL( KLONS, ZCOSI, PZFA( 2, ISOUTH), 1)
+ 220  CONTINUE
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+ 900  CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/kintrg.F b/interpolation/kintrg.F
new file mode 100755
index 0000000..132e236
--- /dev/null
+++ b/interpolation/kintrg.F
@@ -0,0 +1,270 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION KINTRG(OLDGEO,NEWGEO,OLDFLD,NEWFLD)
+C
+C---->
+C**** KINTRG
+C
+C     Purpose
+C     -------
+C     Interpolate a reduced gaussian field a reduced gaussian field
+C     with a different resolution.
+C
+C
+C     Interface
+C     ---------
+C     IRET = KINTRG(OLDGEO,NEWGEO,OLDFLD,NEWFLD)
+C
+C     Input
+C     -----
+C     OLDGEO - GRIB section 2 describing grid of old field.
+C     NEWGEO - GRIB section 2 describing grid of new field.
+C     OLDFLD - Array of values for old field.
+C
+C
+C     Output
+C     ------
+C     NEWFLD - Array of values for new field.
+C
+C     Function returns:
+C       - number of points in the new field, if all is well
+C       - negative, otherwise.
+C
+C
+C     Method
+C     ------
+C     Build up field offsets from input geometries.
+C     For each point of the new field, find in the old field the four
+C     nearest neighbours' positions and values.
+C     Calculate new value from the neighbours.
+C
+C
+C     Externals
+C     ---------
+C     IGGLAT  - Compute gaussian lines of latitude.
+C     JNORSGG - Find gaussian latitudes to north and south of latitude.
+C     KNFROM4 - Calculate value of new field point.
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C     J.D.Chambers     ECMWF     November 2000
+C
+C     Modifications
+C     -------------
+C
+C     Force nearest neighbour processing with env variable or
+C     INTOUT parameter
+C     S.Curic           ECMWF    September 2005
+C
+C     Add fudging factor for computation of index in original field
+C     S.Curic           ECMWF    October 2006
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER OLDGEO(*),NEWGEO(*)
+      REAL OLDFLD(*),NEWFLD(*)
+C
+#include "intisl.h"
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPMAXNG
+      PARAMETER (JPMAXNG=4000)
+C
+C     Local variables
+C
+      LOGICAL LVEGGY
+      INTEGER TOTAL, NEXT, LOOP, NEWOFF(JPMAXNG), OLDOFF(JPMAXNG)
+      INTEGER LATIT, LONG, NEWTYPE, IRET, NPTS
+      INTEGER LAT(2), LON(4)
+      INTEGER PT(4), TYPE(4)
+      REAL OLAT(2), OLON(4)
+      REAL RLATOLD(JPMAXNG), RLATNEW(JPMAXNG), RLAT, RLON
+      CHARACTER*12 YFLAG,YFLAG1
+C
+C     Externals
+C
+      INTEGER IGGLAT, JNORSGG
+      REAL KNFROM4
+      EXTERNAL IGGLAT, JNORSGG, KNFROM4
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Build working values using input geometries.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KINTRG = 0
+C
+      IF( (NEWGEO(NGAUSS)*2).GT.JPMAXNG ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'KINTRG: Gaussian N too big = ',NEWGEO(NGAUSS))
+        CALL INTLOG(JP_ERROR,'KINTRG: Maximum handled = ',(JPMAXNG/2))
+        KINTRG = -1
+        GOTO 900
+      ENDIF
+C
+cs   set global for grib_api
+      LGLOBL = .TRUE.
+cs
+      LVEGGY = (NITABLE.EQ.128).AND.
+     X         ((NIPARAM.EQ.27).OR.
+     X          (NIPARAM.EQ.28).OR.
+     X          (NIPARAM.EQ.29).OR.
+     X          (NIPARAM.EQ.30).OR.
+     X          (NIPARAM.EQ.43) )
+C     Force nearest neighbour processing with env variable
+        CALL GETENV('NEAREST_NEIGHBOUR', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) LVEGGY = .TRUE.
+
+C     Force nearest neighbour processing with INTOUT parameter
+        IF( LMETHOD ) LVEGGY = .TRUE.
+
+      IF( LVEGGY ) CALL INTLOG(JP_DEBUG,
+     X  'KINTRG: nearest neighbour processing (vegetation)',JPQUIET)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Calculate number of points in new field and offset
+C                  to start of each latitude in the new grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      NEWOFF(1) = 0
+      TOTAL = NEWGEO(NPOINTS)
+      DO LOOP = 2, NEWGEO(NJ)
+        NEWOFF(LOOP) = NEWOFF(LOOP-1) + NEWGEO(NPOINTS-2+LOOP)
+        TOTAL = TOTAL + NEWGEO(NPOINTS-1+LOOP)
+      ENDDO
+C
+C     Get the gaussian latitudes for the new field
+C
+      IRET = IGGLAT(NEWGEO(NGAUSS)*2,RLATNEW,0,-1)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KINTRG: Problem call igglat for new grid'
+        KINTRG = -1
+        RETURN
+      ENDIF
+C
+      CALL INTLOG(JP_DEBUG,'KINTRG: No. of pts in new field = ',TOTAL)
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Get the gaussian latitudes for the old field and
+C                  setup the offsets to the start of each latitude.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      OLDOFF(1) = 0
+      DO LOOP = 2, OLDGEO(NJ)
+        OLDOFF(LOOP) = OLDOFF(LOOP-1) + OLDGEO(NPOINTS-2+LOOP)
+      ENDDO
+C
+      IRET = IGGLAT(OLDGEO(NGAUSS)*2,RLATOLD,0,-1)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KINTRG: Problem call igglat for old grid'
+        KINTRG = -1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Work through the points in the new field.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      DO NEXT = 1, TOTAL
+C
+C       Calculate lat/long
+C
+        DO LOOP = 1, NEWGEO(NJ)
+          IF( NEWOFF(LOOP).GE.NEXT ) THEN
+            LATIT = LOOP - 1
+            GOTO 410
+          ENDIF
+        ENDDO
+        LATIT = NEWGEO(NJ)
+C
+  410   CONTINUE
+C
+        LONG = NEXT - NEWOFF(LATIT)
+C
+        RLAT = RLATNEW(LATIT)
+        RLON = (REAL(LONG-1)*360.0)/REAL(NEWGEO(NPOINTS+LATIT-1))
+C
+C       Find four neighbours in the old field with their types
+C       (Find NW neighbour and deduce the others).
+C
+        LAT(NORTH) = JNORSGG(RLAT,RLATOLD,OLDGEO(NGAUSS),1)
+        LAT(SOUTH) = JNORSGG(RLAT,RLATOLD,OLDGEO(NGAUSS),0)
+C
+        OLAT(NORTH) = RLATOLD(LAT(NORTH))
+        OLAT(SOUTH) = RLATOLD(LAT(SOUTH))
+C
+        NPTS = OLDGEO(NPOINTS-1+LAT(NORTH))
+
+        LON(NWEST) = 1 + INT(RLON/(360.0/REAL(NPTS)))
+
+        LON(NEAST) = LON(NWEST) + 1
+        IF( LON(NEAST).GT.NPTS ) LON(NEAST) = 1
+C
+        OLON(NWEST) = (REAL(LON(NWEST)-1)*360.0)/REAL(NPTS)
+        IF( LON(NEAST).EQ.1 ) THEN
+          OLON(NEAST) = 360.0
+        ELSE
+          OLON(NEAST) = (REAL(LON(NEAST)-1)*360.0)/REAL(NPTS)
+        ENDIF
+C
+        NPTS = OLDGEO(NPOINTS-1+LAT(SOUTH))
+
+        LON(SWEST) = 1 + INT(RLON/(360.0/REAL(NPTS)))
+
+        LON(SEAST) = LON(SWEST) + 1
+        IF( LON(SEAST).GT.NPTS ) LON(SEAST) = 1
+C
+        OLON(SWEST) = (REAL(LON(SWEST)-1)*360.0)/REAL(NPTS)
+        IF( LON(SEAST).EQ.1 ) THEN
+          OLON(SEAST) = 360.0
+        ELSE
+          OLON(SEAST) = (REAL(LON(SEAST)-1)*360.0)/REAL(NPTS)
+        ENDIF
+C
+        PT(NWEST) = OLDOFF(LAT(NORTH)) + LON(NWEST)
+        PT(NEAST) = OLDOFF(LAT(NORTH)) + LON(NEAST)
+        PT(SWEST) = OLDOFF(LAT(SOUTH)) + LON(SWEST)
+        PT(SEAST) = OLDOFF(LAT(SOUTH)) + LON(SEAST)
+C
+C       Interpolate the new value
+C
+        NEWFLD(NEXT) = KNFROM4(LVEGGY,RLAT,RLON,OLAT,OLON,PT,OLDFLD)
+C
+      ENDDO
+C
+      KINTRG = TOTAL
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
+
diff --git a/interpolation/knfrom4.F b/interpolation/knfrom4.F
new file mode 100755
index 0000000..a7a5078
--- /dev/null
+++ b/interpolation/knfrom4.F
@@ -0,0 +1,176 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      REAL FUNCTION KNFROM4(LVEGGY,RLAT,RLON,OLAT,OLON,PT,OLDFLD)
+C
+C---->
+C**** KNFROM4
+C
+C     Purpose
+C     -------
+C
+C     Generates a new field point from its four nearest neighbours.
+C
+C
+C     Interface
+C     ---------
+C
+C     VALUE = KNFROM4(RLAT,RLON,OLAT,OLON,PT,OLDFLD)
+C
+C     Input
+C     -----
+C
+C     LVEGGY - 'True' if 'nearest neighbour' processing required
+C     RLAT   - Latitude of the new point
+C     RLON   - Longitude of the new point
+C     OLAT   - Latitudes of the four neighbouring points
+C     OLON   - Longitudes of the four neighbouring points
+C     PT     - Positions in old field array of the four neighbours
+C     OLDFLD - Array of old field values
+C
+C
+C     Output
+C     ------
+C
+C     Function returns a value for the new field point.
+C
+C
+C     Method
+C     ------
+C
+C     Uses neighbours to calculate a value by bi-linear interpolation.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     November 2000
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      LOGICAL LVEGGY
+      REAL RLAT,RLON,OLAT(2),OLON(4),OLDFLD(*)
+      INTEGER PT(4)
+C
+#include "intisl.h"
+#include "parim.h"
+#include "nifld.common"
+C
+C     Local variables
+C
+      INTEGER COUNT, LOOP, NEAREST
+      REAL WEIGHT(4), NWEIGHT, SWEIGHT, NORMAL
+C
+C     Externals
+C
+C
+C     Statement function
+C
+      REAL A, B
+      LOGICAL NOTEQ
+      NOTEQ(A,B) = (ABS((A)-(B)).GT.(ABS(A)*1E-3))
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Calculate weighting values for each neighbour
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     Calculate the north/south weighting values allowing for
+C     southern latitude to be same as northern latitude
+C
+      NWEIGHT = OLAT(NORTH) - RLAT
+      SWEIGHT = RLAT - OLAT(SOUTH)
+      IF( SWEIGHT.EQ.0.0 ) NWEIGHT = 1.0
+C
+C     Calculate the weighting values for each matching neighbour
+C
+      WEIGHT(NWEST) = ABS((OLON(SEAST) - RLON) * SWEIGHT)
+      WEIGHT(NEAST) = ABS((RLON - OLON(SWEST)) * SWEIGHT)
+      WEIGHT(SWEST) = ABS((OLON(NEAST) - RLON) * NWEIGHT)
+      WEIGHT(SEAST) = ABS((RLON - OLON(NWEST)) * NWEIGHT)
+C
+C     Normalise the weights
+C
+      NORMAL = ( WEIGHT(NWEST) + WEIGHT(NEAST) +
+     X           WEIGHT(SWEST) + WEIGHT(SEAST) )
+C
+      WEIGHT(NWEST) = WEIGHT(NWEST)/NORMAL
+      WEIGHT(NEAST) = WEIGHT(NEAST)/NORMAL
+      WEIGHT(SWEST) = WEIGHT(SWEST)/NORMAL
+      WEIGHT(SEAST) = WEIGHT(SEAST)/NORMAL
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Interpolate
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Use nearest neighbour for vegetation field
+C
+      IF( LVEGGY ) THEN
+        NEAREST = NWEST
+        IF( WEIGHT(NEAST).GT.WEIGHT(NEAREST) ) NEAREST = NEAST
+        IF( WEIGHT(SWEST).GT.WEIGHT(NEAREST) ) NEAREST = SWEST
+        IF( WEIGHT(SEAST).GT.WEIGHT(NEAREST) ) NEAREST = SEAST
+        KNFROM4 = OLDFLD(PT(NEAREST))
+C
+      ELSE
+C
+C       Count non-missing data values
+C
+        COUNT = 0
+        IF( NOTEQ(OLDFLD(PT(NWEST)),RMISSGV) ) COUNT = COUNT + 1
+        IF( NOTEQ(OLDFLD(PT(NEAST)),RMISSGV) ) COUNT = COUNT + 1
+        IF( NOTEQ(OLDFLD(PT(SWEST)),RMISSGV) ) COUNT = COUNT + 1
+        IF( NOTEQ(OLDFLD(PT(SEAST)),RMISSGV) ) COUNT = COUNT + 1
+C
+C       Interpolate using four neighbours if none are missing
+C
+        IF( COUNT.EQ.4 ) THEN
+          KNFROM4 = ( (OLDFLD(PT(NWEST)) * WEIGHT(NWEST)) +
+     X                (OLDFLD(PT(NEAST)) * WEIGHT(NEAST)) +
+     X                (OLDFLD(PT(SWEST)) * WEIGHT(SWEST)) +
+     X                (OLDFLD(PT(SEAST)) * WEIGHT(SEAST)) )
+C
+C       Set missing if all neighbours are missing
+C
+        ELSE IF( COUNT.EQ.0 ) THEN
+          KNFROM4 = RMISSGV
+C
+C       Otherwise, use the nearest neighbour
+C
+        ELSE
+          NEAREST = NWEST
+          IF( WEIGHT(NEAST).GT.WEIGHT(NEAREST) ) NEAREST = NEAST
+          IF( WEIGHT(SWEST).GT.WEIGHT(NEAREST) ) NEAREST = SWEST
+          IF( WEIGHT(SEAST).GT.WEIGHT(NEAREST) ) NEAREST = SEAST
+          KNFROM4 = OLDFLD(PT(NEAREST))
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/krg2rg.F b/interpolation/krg2rg.F
new file mode 100755
index 0000000..bf99453
--- /dev/null
+++ b/interpolation/krg2rg.F
@@ -0,0 +1,267 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION KRG2RG(OLDFLD, NEWFLD, NUMGG)
+C
+C---->
+C**** KRG2RG
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on one reduced gaussian grid to a
+C     field based on a different reduced gaussian grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = KRG2RG(OLDFLD, NEWFLD, NUMGG)
+C
+C     Input
+C     -----
+C
+C     OLDFLD - Old field in GRIB format
+C     NUMGG  - Number of the new gaussian field
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - New field in GRIB format
+C
+C     Function returns:
+C       - the size in bytes of the new GRIB product if all is well
+C       - -1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack input GRIBS.
+C     Create new field and pack it into GRIB format.
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode and encode GRIB products.
+C     KINTRG  - Interpolate reduced gaussian field to reduced gaussian
+C     JMALLOC - Dynamically allocate memory
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     November 2000
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER NUMGG, OLDFLD(*), NEWFLD(*)
+C
+#include "parim.h"
+#include "intisl.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPACK, JUNPACK, JPINTB, JPREALB, JPMAXNG
+      PARAMETER (JPACK   = 4000000)
+      PARAMETER (JUNPACK = 6000000)
+#ifdef INTEGER_8
+      PARAMETER (JPINTB = 8)
+#else
+      PARAMETER (JPINTB = 4)
+#endif
+      PARAMETER (JPMAXNG=4000)
+#ifdef REAL_8
+      PARAMETER (JPREALB = 8)
+#else
+      PARAMETER (JPREALB = 8)
+#endif
+C
+C     Local variables
+C
+      INTEGER IFSEC0(JPGRIB_ISEC0),IFSEC1(JPGRIB_ISEC1),
+     X IFSEC2(JPGRIB_ISEC2),IFSEC3(JPGRIB_ISEC3),IFSEC4(JPGRIB_ISEC4)
+      INTEGER NFSEC0(JPGRIB_ISEC0),NFSEC1(JPGRIB_ISEC1),
+     X NFSEC2(JPGRIB_ISEC2),NFSEC3(JPGRIB_ISEC3),NFSEC4(JPGRIB_ISEC4)
+      INTEGER ISIZE, LOOP
+      LOGICAL LFIRST
+#if (!defined __uxp__) && (!defined sgi)
+#ifdef POINTER_64
+      INTEGER*8 IZFSEC4, IPFSEC4
+#else
+      INTEGER   IZFSEC4, IPFSEC4
+#endif
+#endif
+C
+      REAL PLAT(JPMAXNG)
+      REAL ZFSEC2(5000), ZFSEC3(2), ZFSEC4(1)
+      REAL PFSEC3(2), PFSEC4(1)
+C
+      POINTER( IZFSEC4, ZFSEC4 )
+      POINTER( IPFSEC4, PFSEC4 )
+C
+      INTEGER IRET, ILENB, IPUNP, IWORD
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER KINTRG
+      EXTERNAL KINTRG, JMALLOC
+C
+      DATA LFIRST/.TRUE./
+      SAVE LFIRST, IZFSEC4, IPFSEC4
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KRG2RG = 0
+C
+      IF( (NUMGG*2).GT.JPMAXNG ) THEN
+        CALL INTLOG(JP_ERROR,'KRG2RG: Gaussian N too big = ',NUMGG)
+        CALL INTLOG(JP_ERROR,'KRG2RG: Maximum handled = ',(JPMAXNG/2))
+        KRG2RG = -1
+        GOTO 900
+      ENDIF
+C
+C     First time, dynamically allocate memory for the field values
+C
+      IF( LFIRST ) THEN
+        LFIRST = .FALSE.
+        ISIZE = JUNPACK * JPREALB
+        CALL INTLOG(JP_DEBUG,'KRG2RG: Allocate memory = ',ISIZE)
+C
+        IZFSEC4 = JMALLOC(ISIZE)
+#ifdef hpR64
+        IZFSEC4 = IZFSEC4/(1024*1024*1024*4)
+#endif
+        IF( IZFSEC4.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'KRG2RG: JMALLOC fail IZFSEC4',JPQUIET)
+          KRG2RG = -1
+          GOTO 900
+        ENDIF
+C
+        IPFSEC4 = JMALLOC(ISIZE)
+#ifdef hpR64
+        IPFSEC4 = IPFSEC4/(1024*1024*1024*4)
+#endif
+        IF( IPFSEC4.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'KRG2RG: JMALLOC fail IPFSEC4',JPQUIET)
+          KRG2RG = -1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the input GRIB
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Old field
+C
+      IRET = 1
+      IPUNP = JUNPACK
+      ILENB = JPACK
+      IFSEC3(1) = 0
+      IFSEC3(2) = INT(RMISSGV)
+      ZFSEC3(1) = 0.0
+      ZFSEC3(2) = RMISSGV
+      CALL GRIBEX (IFSEC0,IFSEC1,IFSEC2,ZFSEC2,IFSEC3,ZFSEC3,IFSEC4,
+     X             ZFSEC4,IPUNP,OLDFLD,ILENB,IWORD,'D',IRET)
+      IF( IRET.GT.0 ) THEN
+        WRITE(*,*) 'KRG2RG: Old field gribex return code = ',IRET
+        KRG2RG = -1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Create new field and put in GRIB format
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      DO LOOP = 1, JPMAXNG
+        NFSEC2(LOOP) = IFSEC2(LOOP)
+      ENDDO
+      CALL JGETGG( NUMGG, 'R', PLAT, NFSEC2(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RG: Problem calling JGETGG, status = ',IRET
+        KRG2RG = -1
+        RETURN
+      ENDIF
+      NFSEC2(3)  = NUMGG * 2
+      NFSEC2(4)  = NINT(PLAT(1)*1000.0)
+      NFSEC2(7)  = NINT(PLAT(NUMGG*2)*1000.0)
+      NFSEC2(8)  = NINT((360.0-(360.0/REAL(NUMGG*4)))*1000.0)
+      NFSEC2(10) = NUMGG
+C
+      IRET = KINTRG(IFSEC2, NFSEC2, ZFSEC4, PFSEC4)
+      IF( IRET.LE.0 ) THEN
+        WRITE(*,*) 'KRG2RG: New field creation failed'
+        KRG2RG = -1
+        RETURN
+      ENDIF
+      IFSEC4(1) = IRET
+C
+      IRET = 1
+      IPUNP = JUNPACK
+      ILENB = JPACK
+C
+C     If output 'accuracy' specified, use it for the new field
+C
+      IF( LNOACC ) THEN
+        IFSEC4(2) = NOACC
+      ENDIF
+C
+C     There may be 'missing' values in the new field if the old field
+C     has 'missing' values.
+C
+      IF( IFSEC1(5).EQ.192 ) THEN
+        IFSEC1(5) = 192
+        NFSEC3(1) = 0
+        NFSEC3(2) = INT(RMISSGV)
+        PFSEC3(1) = 0.0
+        PFSEC3(2) = RMISSGV
+      ENDIF
+C
+      CALL GRIBEX (IFSEC0,IFSEC1,NFSEC2,ZFSEC2,NFSEC3,PFSEC3,IFSEC4,
+     X             PFSEC4,IPUNP,NEWFLD,ILENB,IWORD,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RG: New field gribex return code = ',IRET
+        KRG2RG = -1
+        RETURN
+      ENDIF
+C
+      KRG2RG = IWORD * JPINTB
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/krg2rgd.F b/interpolation/krg2rgd.F
new file mode 100755
index 0000000..eb6b4f1
--- /dev/null
+++ b/interpolation/krg2rgd.F
@@ -0,0 +1,314 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION KRG2RGD(OLDFLD, NEWFLD, NUMME, NUMGG)
+C
+C---->
+C**** KRG2RG
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on one reduced gaussian grid to a
+C     field based on a different reduced gaussian grid, using
+C     intermediate interpolation 
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = KRG2RGD(OLDFLD, NEWFLD, NUMME, NUMGG)
+C
+C     Input
+C     -----
+C
+C     OLDFLD - Old field in GRIB format
+C     NUMME  - Number of the intermediate gaussian field
+C     NUMGG  - Number of the new gaussian field
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - New field in GRIB format
+C
+C     Function returns:
+C       - the size in bytes of the new GRIB product if all is well
+C       - -1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack input GRIBS.
+C     Intermediate interpolation
+C     Create new field and pack it into GRIB format.
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode and encode GRIB products.
+C     KINTRG  - Interpolate reduced gaussian field to reduced gaussian
+C     JMALLOC - Dynamically allocate memory
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     S.Curic     ECMWF     October 2006
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER NUMME, NUMGG, OLDFLD(*), NEWFLD(*)
+C
+#include "parim.h"
+#include "intisl.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPACK, JUNPACK, JPINTB, JPREALB, JPMAXNG
+      PARAMETER (JPACK   = 4000000)
+      PARAMETER (JUNPACK = 6000000)
+#ifdef INTEGER_8
+      PARAMETER (JPINTB = 8)
+#else
+      PARAMETER (JPINTB = 4)
+#endif
+      PARAMETER (JPMAXNG=4000)
+#ifdef REAL_8
+      PARAMETER (JPREALB = 8)
+#else
+      PARAMETER (JPREALB = 8)
+#endif
+C
+C     Local variables
+C
+      INTEGER IFSEC0(JPGRIB_ISEC0),IFSEC1(JPGRIB_ISEC1),
+     X IFSEC2(JPGRIB_ISEC2),IFSEC3(JPGRIB_ISEC3),IFSEC4(JPGRIB_ISEC4)
+      INTEGER NFSEC0(JPGRIB_ISEC0),NFSEC1(JPGRIB_ISEC1),
+     X NFSEC2(JPGRIB_ISEC2),NFSEC3(JPGRIB_ISEC3),NFSEC4(JPGRIB_ISEC4)
+      INTEGER NEWGEO(2048)
+      INTEGER ISIZE, LOOP
+      LOGICAL LFIRST
+#if (!defined __uxp__) && (!defined sgi)
+#ifdef POINTER_64
+      INTEGER*8 IZFSEC4, IPFSEC4, IMEDFLD
+#else
+      INTEGER   IZFSEC4, IPFSEC4, IMEDFLD
+#endif
+#endif
+C
+      REAL PLAT(JPMAXNG)
+      REAL ZFSEC2(5000), ZFSEC3(2), ZFSEC4(1)
+      REAL PFSEC3(2), PFSEC4(1), MEDFLD(1)
+C
+      POINTER( IZFSEC4, ZFSEC4 )
+      POINTER( IPFSEC4, PFSEC4 )
+      POINTER( IMEDFLD, MEDFLD )
+C
+      INTEGER IRET, ILENB, IPUNP, IWORD
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER KINTRG
+      EXTERNAL KINTRG, JMALLOC
+C
+      DATA LFIRST/.TRUE./
+      SAVE LFIRST, IZFSEC4, IPFSEC4, IMEDFLD
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KRG2RGD = 0
+C
+      IF( (NUMGG*2).GT.JPMAXNG ) THEN
+        CALL INTLOG(JP_ERROR,'KRG2RGD: Gaussian N too big = ',NUMGG)
+        CALL INTLOG(JP_ERROR,'KRG2RGD: Maximum handled = ',(JPMAXNG/2))
+        KRG2RGD = -1
+        GOTO 900
+      ENDIF
+
+      IF( (NUMME*2).GT.JPMAXNG ) THEN
+       CALL INTLOG(JP_ERROR,'KRG2RGD: Intermediate Gaussian N too big= '
+     X   ,NUMME)
+       CALL INTLOG(JP_ERROR,'KRG2RGD: Maximum handled = ',(JPMAXNG/2))
+       KRG2RGD = -1
+       GOTO 900
+      ENDIF
+C
+C     First time, dynamically allocate memory for the field values
+C
+      IF( LFIRST ) THEN
+        LFIRST = .FALSE.
+        ISIZE = JUNPACK * JPREALB
+        CALL INTLOG(JP_DEBUG,'KRG2RGD: Allocate memory = ',ISIZE)
+C
+        IZFSEC4 = JMALLOC(ISIZE)
+#ifdef hpR64
+        IZFSEC4 = IZFSEC4/(1024*1024*1024*4)
+#endif
+        IF( IZFSEC4.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'KRG2RGD: JMALLOC fail IZFSEC4',JPQUIET)
+          KRG2RGD = -1
+          GOTO 900
+        ENDIF
+C
+        IPFSEC4 = JMALLOC(ISIZE)
+        IMEDFLD = JMALLOC(ISIZE)
+#ifdef hpR64
+        IPFSEC4 = IPFSEC4/(1024*1024*1024*4)
+#endif
+        IF( IPFSEC4.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'KRG2RGD: JMALLOC fail IPFSEC4',JPQUIET)
+          KRG2RGD = -1
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the input GRIB
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Old field
+C
+      IRET = 1
+      IPUNP = JUNPACK
+      ILENB = JPACK
+      IFSEC3(1) = 0
+      IFSEC3(2) = INT(RMISSGV)
+      ZFSEC3(1) = 0.0
+      ZFSEC3(2) = RMISSGV
+      CALL GRIBEX (IFSEC0,IFSEC1,IFSEC2,ZFSEC2,IFSEC3,ZFSEC3,IFSEC4,
+     X             ZFSEC4,IPUNP,OLDFLD,ILENB,IWORD,'D',IRET)
+      IF( IRET.GT.0 ) THEN
+        WRITE(*,*) 'KRG2RGD: Old field gribex return code = ',IRET
+        KRG2RGD = -1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Create intermediate field
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      DO LOOP = 1, JPMAXNG
+        NFSEC2(LOOP) = IFSEC2(LOOP)
+        NEWGEO(LOOP) = 0
+      ENDDO
+      CALL JGETGG( NUMME, 'R', PLAT, NEWGEO(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGD: Problem calling JGETGG, status = ',IRET
+        KRG2RGD = -1
+        RETURN
+      ENDIF
+      NEWGEO(3)  = NUMME * 2
+      NEWGEO(4)  = NINT(PLAT(1)*1000.0)
+      NEWGEO(5)  = 0
+      NEWGEO(7)  = NINT(PLAT(NUMME*2)*1000.0)
+      NEWGEO(8)  = NINT((360.0-(360.0/REAL(NUMME*4)))*1000.0)
+      NEWGEO(10) = NUMME
+C
+      IRET = KINTRG(IFSEC2, NEWGEO, ZFSEC4, MEDFLD)
+      IF( IRET.LE.0 ) THEN
+        WRITE(*,*) 'KRG2RGD: New field creation failed'
+        KRG2RGD = -1
+        RETURN
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X   'KRG2RGD: Intermediate gaussian field created - N',NUMME)
+      ENDIF
+
+C
+C     -----------------------------------------------------------------|
+C*    Section 4. Create new field from intermediate and put in GRIB
+C     -----------------------------------------------------------------|
+C
+
+      CALL JGETGG( NUMGG, 'R', PLAT, NFSEC2(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGD: Problem calling JGETGG, status = ',IRET
+        KRG2RGD = -1
+        RETURN
+      ENDIF
+      NFSEC2(3)  = NUMGG * 2
+      NFSEC2(4)  = NINT(PLAT(1)*1000.0)
+      NFSEC2(7)  = NINT(PLAT(NUMGG*2)*1000.0)
+      NFSEC2(8)  = NINT((360.0-(360.0/REAL(NUMGG*4)))*1000.0)
+      NFSEC2(10) = NUMGG
+C
+      IRET = KINTRG(NEWGEO, NFSEC2, MEDFLD, PFSEC4)
+      IF( IRET.LE.0 ) THEN
+        WRITE(*,*) 'KRG2RGD: New field creation failed'
+        KRG2RGD = -1
+        RETURN
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X   'KRG2RGD: New gaussian field created - N',NUMGG)
+      ENDIF
+      IFSEC4(1) = IRET
+C
+      IRET = 1
+      IPUNP = JUNPACK
+      ILENB = JPACK
+C
+C     If output 'accuracy' specified, use it for the new field
+C
+      IF( LNOACC ) THEN
+        IFSEC4(2) = NOACC
+      ENDIF
+C
+C     There may be 'missing' values in the new field if the old field
+C     has 'missing' values.
+C
+      IF( IFSEC1(5).EQ.192 ) THEN
+        IFSEC1(5) = 192
+        NFSEC3(1) = 0
+        NFSEC3(2) = INT(RMISSGV)
+        PFSEC3(1) = 0.0
+        PFSEC3(2) = RMISSGV
+      ENDIF
+C
+      CALL GRIBEX (IFSEC0,IFSEC1,NFSEC2,ZFSEC2,NFSEC3,PFSEC3,IFSEC4,
+     X             PFSEC4,IPUNP,NEWFLD,ILENB,IWORD,'C',IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGD: New field gribex return code = ',IRET
+        KRG2RGD = -1
+        RETURN
+      ENDIF
+C
+      KRG2RGD = IWORD * JPINTB
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/krg2rgu.F b/interpolation/krg2rgu.F
new file mode 100755
index 0000000..c3b4d70
--- /dev/null
+++ b/interpolation/krg2rgu.F
@@ -0,0 +1,191 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION KRG2RGU(OLDFLD, NEWFLD, NUMGGO, NUMGGN)
+C
+C---->
+C**** KRG2RGU
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on one reduced gaussian grid to a
+C     field based on a different reduced gaussian grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = KRG2RGU(OLDFLD, NEWFLD, NUMGGO, NUMGGN)
+C
+C     Input
+C     -----
+C
+C     OLDFLD - Old field as array of values
+C     NUMGGO - Number of the old gaussian field
+C     NUMGGN - Number of the new gaussian field
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - New field as array of values
+C
+C     Function returns:
+C       - the size in bytes of the new GRIB product if all is well
+C       - -1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Create new field and leave it unpacked.
+C
+C
+C     Externals
+C     ---------
+C
+C     KINTRG  - Interpolate reduced gaussian field to reduced gaussian
+C     JMALLOC - Dynamically allocate memory
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2002
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER NUMGGO, NUMGGN
+      REAL OLDFLD(*), NEWFLD(*)
+C
+#include "parim.h"
+#include "intisl.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Parameters
+C
+      INTEGER JPINTB, JPREALB, JPMAXNG
+      INTEGER JSEC2
+      PARAMETER (JSEC2 = 5000)
+#ifdef INTEGER_8
+      PARAMETER (JPINTB = 8)
+#else
+      PARAMETER (JPINTB = 4)
+#endif
+      PARAMETER (JPMAXNG=4000)
+#ifdef REAL_8
+      PARAMETER (JPREALB = 8)
+#else
+      PARAMETER (JPREALB = 8)
+#endif
+C
+C     Local variables
+C
+      INTEGER OLDGEO(JSEC2), NEWGEO(JSEC2)
+      INTEGER LOOP
+C
+      REAL PLAT(JPMAXNG)
+      REAL PFSEC3(2)
+C
+      INTEGER IRET
+C
+C     Externals
+C
+      INTEGER KINTRG
+      EXTERNAL KINTRG
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KRG2RGU = 0
+C
+      IF( (NUMGGN*2).GT.JPMAXNG ) THEN
+        CALL INTLOG(JP_ERROR,'KRG2RGU: Gaussian N too big = ',NUMGGN)
+        CALL INTLOG(JP_ERROR,'KRG2RGU: Maximum handled = ',(JPMAXNG/2))
+        KRG2RGU = -1
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Create new field.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      DO LOOP = 1, JPMAXNG
+        OLDGEO(LOOP) = 0
+      ENDDO
+      CALL JGETGG( NUMGGO, 'R', PLAT, OLDGEO(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGU: Problem calling JGETGG, status = ',IRET
+        KRG2RGU = -1
+      RETURN
+      ENDIF
+C
+      OLDGEO(3)  = NUMGGO * 2
+      OLDGEO(4)  = NINT(PLAT(1)*1000.0)
+      OLDGEO(5)  = 0
+      OLDGEO(7)  = NINT(PLAT(NUMGGO*2)*1000.0)
+      OLDGEO(8)  = NINT((360.0-(360.0/REAL(NUMGGO*4)))*1000.0)
+      OLDGEO(10) = NUMGGO
+C
+      DO LOOP = 1, JPMAXNG
+        NEWGEO(LOOP) = 0
+      ENDDO
+      CALL JGETGG( NUMGGN, 'R', PLAT, NEWGEO(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGU: Problem calling JGETGG, status = ',IRET
+        KRG2RGU = -1
+        RETURN
+      ENDIF
+      NEWGEO(3)  = NUMGGN * 2
+      NEWGEO(4)  = NINT(PLAT(1)*1000.0)
+      NEWGEO(5)  = 0
+      NEWGEO(7)  = NINT(PLAT(NUMGGN*2)*1000.0)
+      NEWGEO(8)  = NINT((360.0-(360.0/REAL(NUMGGN*4)))*1000.0)
+      NEWGEO(10) = NUMGGN
+C
+      IRET = KINTRG(OLDGEO, NEWGEO, OLDFLD, NEWFLD)
+C
+      IF( IRET.LE.0 ) THEN
+        WRITE(*,*) 'KRG2RGU: New field creation failed'
+        KRG2RGU = -1
+        RETURN
+      ENDIF
+c sinisa for merging with grib_api
+      NONS = 2*NOGAUSS
+      NOAAPI(1) = NOAREA(1)
+      NOAAPI(2) = NOAREA(2)
+      NOAAPI(3) = NOAREA(3)
+      NOAAPI(4) = NOAREA(4)
+C
+cs      KRG2RGU = IRET * JPINTB
+cs this is the outlen
+      KRG2RGU = IRET
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/krg2rgy.F b/interpolation/krg2rgy.F
new file mode 100755
index 0000000..71c10e9
--- /dev/null
+++ b/interpolation/krg2rgy.F
@@ -0,0 +1,253 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION KRG2RGY(OLDFLD, NEWFLD, NUMGG)
+C
+C---->
+C**** KRG2RGY
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on one reduced gaussian grid to a
+C     field based on a different reduced gaussian grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = KRG2RGY(OLDFLD, NEWFLD, NUMGG)
+C
+C     Input
+C     -----
+C
+C     OLDFLD - Old field in GRIB format
+C     NUMGG  - Number of the new gaussian field
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - New field
+C
+C     Function returns:
+C       - the size in bytes of the new GRIB product if all is well
+C       - -1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Unpack input GRIBS.
+C     Create new field
+C
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode and encode GRIB products.
+C     KINTRG  - Interpolate reduced gaussian field to reduced gaussian
+C     JMALLOC - Dynamically allocate memory
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     S.Curic     ECMWF     November 2006
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER NUMGG, OLDFLD(*), NEWFLD(*)
+C
+#include "parim.h"
+#include "intisl.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "current.h"
+C
+C     Parameters
+C
+      INTEGER JPACK, JUNPACK, JPINTB, JPREALB, JPMAXNG
+      PARAMETER (JPACK   = 4000000)
+      PARAMETER (JUNPACK = 6000000)
+#ifdef INTEGER_8
+      PARAMETER (JPINTB = 8)
+#else
+      PARAMETER (JPINTB = 4)
+#endif
+      PARAMETER (JPMAXNG=4000)
+#ifdef REAL_8
+      PARAMETER (JPREALB = 8)
+#else
+      PARAMETER (JPREALB = 8)
+#endif
+C
+C     Local variables
+C
+      INTEGER IFSEC0(JPGRIB_ISEC0),IFSEC1(JPGRIB_ISEC1),
+     X IFSEC2(JPGRIB_ISEC2),IFSEC3(JPGRIB_ISEC3),IFSEC4(JPGRIB_ISEC4)
+      INTEGER NFSEC0(JPGRIB_ISEC0),NFSEC1(JPGRIB_ISEC1),
+     X NFSEC2(JPGRIB_ISEC2),NFSEC3(JPGRIB_ISEC3),NFSEC4(JPGRIB_ISEC4)
+
+      INTEGER ISIZE, LOOP
+      LOGICAL LFIRST
+#if (!defined __uxp__) && (!defined sgi)
+#ifdef POINTER_64
+      INTEGER*8 IZFSEC4
+#else
+      INTEGER   IZFSEC4
+#endif
+#endif
+C
+      REAL PLAT(JPMAXNG)
+      REAL ZFSEC2(5000), ZFSEC3(2), ZFSEC4(1)
+      REAL PFSEC3(2), PFSEC4(1)
+C
+      POINTER( IZFSEC4, ZFSEC4 )
+C
+      INTEGER IRET, ILENB, IPUNP, IWORD
+C
+C     Externals
+C
+#ifdef POINTER_64
+      INTEGER*8 JMALLOC
+#else
+      INTEGER JMALLOC
+#endif
+      INTEGER KINTRG
+      EXTERNAL KINTRG, JMALLOC
+C
+      DATA LFIRST/.TRUE./
+      SAVE LFIRST, IZFSEC4
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KRG2RGY = 0
+C
+      IF( (NUMGG*2).GT.JPMAXNG ) THEN
+        CALL INTLOG(JP_ERROR,'KRG2RGY: Gaussian N too big = ',NUMGG)
+        CALL INTLOG(JP_ERROR,'KRG2RGY: Maximum handled = ',(JPMAXNG/2))
+        KRG2RGY = -1
+        GOTO 900
+      ENDIF
+C
+C     First time, dynamically allocate memory for the field values
+C
+      IF( LFIRST ) THEN
+        LFIRST = .FALSE.
+        ISIZE = JUNPACK * JPREALB
+        CALL INTLOG(JP_DEBUG,'KRG2RGY: Allocate memory = ',ISIZE)
+C
+        IZFSEC4 = JMALLOC(ISIZE)
+#ifdef hpR64
+        IZFSEC4 = IZFSEC4/(1024*1024*1024*4)
+#endif
+        IF( IZFSEC4.EQ.0 ) THEN
+          CALL INTLOG(JP_ERROR,'KRG2RGY: JMALLOC fail IZFSEC4',JPQUIET)
+          KRG2RGY = -1
+          GOTO 900
+        ENDIF
+       ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the input GRIB
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Old field
+C
+      IRET = 1
+      IPUNP = JUNPACK
+      ILENB = JPACK
+      IFSEC3(1) = 0
+      IFSEC3(2) = INT(RMISSGV)
+      ZFSEC3(1) = 0.0
+      ZFSEC3(2) = RMISSGV
+      CALL GRIBEX (IFSEC0,IFSEC1,IFSEC2,ZFSEC2,IFSEC3,ZFSEC3,IFSEC4,
+     X             ZFSEC4,IPUNP,OLDFLD,ILENB,IWORD,'D',IRET)
+      IF( IRET.GT.0 ) THEN
+        WRITE(*,*) 'KRG2RGY: Old field gribex return code = ',IRET
+        KRG2RGY = -1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Create new field
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      DO LOOP = 1, JPMAXNG
+        NFSEC2(LOOP) = IFSEC2(LOOP)
+      ENDDO
+      CALL JGETGG( NUMGG, 'R', PLAT, NFSEC2(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGY: Problem calling JGETGG, status = ',IRET
+        KRG2RGY = -1
+        RETURN
+      ENDIF
+      NFSEC2(3)  = NUMGG * 2
+      NFSEC2(4)  = NINT(PLAT(1)*1000.0)
+      NFSEC2(7)  = NINT(PLAT(NUMGG*2)*1000.0)
+      NFSEC2(8)  = NINT((360.0-(360.0/REAL(NUMGG*4)))*1000.0)
+      NFSEC2(10) = NUMGG
+C
+      IRET = KINTRG(IFSEC2, NFSEC2, ZFSEC4, NEWFLD)
+      IF( IRET.LE.0 ) THEN
+        WRITE(*,*) 'KRG2RGY: New field creation failed'
+        KRG2RGY = -1
+        RETURN
+      ENDIF
+      IF( LDOUBLE ) THEN
+         CALL INTLOG(JP_DEBUG,
+     X   'KRG2RGY: Set NIAREA - double interpolation',JPQUIET)
+c         NIAREA(1)  = NFSEC2(4)*100
+c         NIAREA(2)  = NFSEC2(5)*100
+c         NIAREA(3)  = NFSEC2(7)*100
+c         NIAREA(4)  = NFSEC2(8)*100
+         NIAREA(1)  = 0
+         NIAREA(2)  = 0
+         NIAREA(3)  = 0 
+         NIAREA(4)  = 0
+         NIGAUSS    = NUMGG
+        DO LOOP = 1, NINS
+          RIGAUSS(LOOP) = 0
+          MILLEN(LOOP) = 0
+        ENDDO
+         NINS       = NUMGG*2
+         CALL INTLOG(JP_DEBUG, 'KRG2RGY: NIAREA(1) ',NIAREA(1))
+         CALL INTLOG(JP_DEBUG, 'KRG2RGY: NIAREA(2) ',NIAREA(2))
+         CALL INTLOG(JP_DEBUG, 'KRG2RGY: NIAREA(3) ',NIAREA(3))
+         CALL INTLOG(JP_DEBUG, 'KRG2RGY: NIAREA(4) ',NIAREA(4))
+         CALL INTLOG(JP_DEBUG, 'KRG2RGY: NIGAUSS ',NIGAUSS)
+         CALL INTLOG(JP_DEBUG, 'KRG2RGY: NINS ',NINS)
+      ENDIF
+
+C
+      KRG2RGY = IRET
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/krg2rgz.F b/interpolation/krg2rgz.F
new file mode 100755
index 0000000..90209ae
--- /dev/null
+++ b/interpolation/krg2rgz.F
@@ -0,0 +1,235 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION KRG2RGZ(OLDFLD, NEWFLD, NUMGGO, NUMGGN)
+C
+C---->
+C**** KRG2RGZ
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on one reduced gaussian grid to a
+C     field based on a different reduced gaussian grid.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = KRG2RGZ(OLDFLD, NEWFLD, NUMGGO, NUMGGN)
+C
+C     Input
+C     -----
+C
+C     OLDFLD - Old field as array of values
+C     NUMGGO - Number of the old gaussian field
+C     NUMGGN - Number of the new gaussian field
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - New field as array of values
+C
+C     Function returns:
+C       - the size in bytes of the new GRIB product if all is well
+C       - -1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Create new field and leave it unpacked.
+C
+C
+C     Externals
+C     ---------
+C
+C     KINTRG  - Interpolate reduced gaussian field to reduced gaussian
+C     JMALLOC - Dynamically allocate memory
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     February 2002
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER NUMGGO, NUMGGN
+      REAL OLDFLD(*), NEWFLD(*)
+C
+#include "parim.h"
+#include "intisl.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+C
+C     Parameters
+C
+      INTEGER JPINTB, JPREALB, JPMAXNG
+      INTEGER JSEC2
+      PARAMETER (JSEC2 = 5000)
+#ifdef INTEGER_8
+      PARAMETER (JPINTB = 8)
+#else
+      PARAMETER (JPINTB = 4)
+#endif
+      PARAMETER (JPMAXNG=4000)
+#ifdef REAL_8
+      PARAMETER (JPREALB = 8)
+#else
+      PARAMETER (JPREALB = 8)
+#endif
+C
+C     Local variables
+C
+      INTEGER OLDGEO(JSEC2), NEWGEO(JSEC2)
+      INTEGER LOOP
+C
+      REAL PLAT(JPMAXNG)
+      REAL PFSEC3(2)
+C
+      INTEGER IRET
+      LOGICAL LDEBUG
+C
+C     Externals
+C
+      INTEGER KINTRG
+      EXTERNAL KINTRG
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      KRG2RGZ = 0
+C
+      IF( (NUMGGN*2).GT.JPMAXNG ) THEN
+        CALL INTLOG(JP_ERROR,'KRG2RGZ: Gaussian N too big = ',NUMGGN)
+        CALL INTLOG(JP_ERROR,'KRG2RGZ: Maximum handled = ',(JPMAXNG/2))
+        KRG2RGZ = -1
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Create new field.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      DO LOOP = 1, JPMAXNG
+cs        OLDGEO(LOOP) = 0
+        OLDGEO(LOOP+22) = MILLEN(LOOP)
+      ENDDO
+cs      CALL JGETGG( NUMGGO, 'R', PLAT, OLDGEO(23), IRET)
+cs      IF( IRET.NE.0 ) THEN
+cs        WRITE(*,*) 'KRG2RGZ: Problem calling JGETGG, status = ',IRET
+cs        KRG2RGZ = -1
+cs      RETURN
+cs      ENDIF
+
+C
+      OLDGEO(3)  = NUMGGO * 2
+      OLDGEO(4)  = NINT(PLAT(1)*1000.0)
+      OLDGEO(5)  = 0
+      OLDGEO(7)  = NINT(PLAT(NUMGGO*2)*1000.0)
+      OLDGEO(8)  = NINT((360.0-(360.0/REAL(NUMGGO*4)))*1000.0)
+      OLDGEO(10) = NUMGGO
+C
+      DO LOOP = 1, JPMAXNG
+        NEWGEO(LOOP) = 0
+      ENDDO
+      CALL JGETGG( NUMGGN, 'R', PLAT, NEWGEO(23), IRET)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'KRG2RGZ: Problem calling JGETGG, status = ',IRET
+        KRG2RGZ = -1
+        RETURN
+      ENDIF
+      NEWGEO(3)  = NUMGGN * 2
+      NEWGEO(4)  = NINT(PLAT(1)*1000.0)
+      NEWGEO(5)  = 0
+      NEWGEO(7)  = NINT(PLAT(NUMGGN*2)*1000.0)
+      NEWGEO(8)  = NINT((360.0-(360.0/REAL(NUMGGN*4)))*1000.0)
+      NEWGEO(10) = NUMGGN
+C
+      IRET = KINTRG(OLDGEO, NEWGEO, OLDFLD, NEWFLD)
+C
+      IF( IRET.LE.0 ) THEN
+        WRITE(*,*) 'KRG2RGZ: New field creation failed'
+        KRG2RGZ = -1
+        RETURN
+      ENDIF
+C
+cs      KRG2RGZ = IRET * JPINTB
+cs this is the outlen
+      KRG2RGZ = IRET
+
+      IF( LDOUBLE ) THEN
+c filing of millen for double interpolation
+         DO LOOP = 1, JPMAXNG
+           MILLEN(LOOP) = NEWGEO(LOOP+22)
+         ENDDO
+         CALL INTLOG(JP_DEBUG,
+     X   'KRG2RGZ: Set NIAREA - double interpolation',JPQUIET)
+         NIAREA(1)  = 0
+         NIAREA(2)  = 0
+         NIAREA(3)  = 0
+         NIAREA(4)  = 0
+         NIGAUSS    = NUMGGN
+cs        DO LOOP = 1, NINS
+cs          RIGAUSS(LOOP) = 0
+cs          MILLEN(LOOP) = 0
+cs        ENDDO
+         NINS       = NUMGGN*2
+cs         IF( LDEBUG ) THEN
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NIAREA(1) ',NIAREA(1))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NIAREA(2) ',NIAREA(2))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NIAREA(3) ',NIAREA(3))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NIAREA(4) ',NIAREA(4))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NIGAUSS ',NIGAUSS)
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NINS ',NINS)
+cs         ENDIF
+      ELSE
+c sinisa for merging with grib_api
+         NONS      = 2 * NUMGGN
+         NOWE      = 0
+         NOAAPI(1) = NEWGEO(4)*JPMICRO
+         NOAAPI(2) = NEWGEO(5)*JPMICRO
+         NOAAPI(3) = NEWGEO(7)*JPMICRO
+         NOAAPI(4) = NEWGEO(8)*JPMICRO
+         NOAREA(1) = NEWGEO(4)*JPMICRO
+         NOAREA(2) = NEWGEO(5)*JPMICRO
+         NOAREA(3) = NEWGEO(7)*JPMICRO
+         NOAREA(4) = NEWGEO(8)*JPMICRO
+cs         IF( LDEBUG ) THEN
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NOAAPI(1) ',NOAAPI(1))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NOAAPI(2) ',NOAAPI(2))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NOAAPI(3) ',NOAAPI(3))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NOAAPI(4) ',NOAAPI(4))
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NOGAUSS ',NOGAUSS)
+           CALL INTLOG(JP_DEBUG, 'KRG2RGZ: NONS ',NONS)
+cs         ENDIF
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/lgrpr4.F b/interpolation/lgrpr4.F
new file mode 100755
index 0000000..bf24dcd
--- /dev/null
+++ b/interpolation/lgrpr4.F
@@ -0,0 +1,225 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE LGRPR4 (KSEC0,KLINE,KSEC4,PSEC4)
+C
+C---->
+C**** lgrpr4 - Print information from Section 4 of GRIB code.
+C
+C     Purpose.
+C     --------
+C
+C           Print the information in the Binary data section
+C           Section (Section 4) of decoded GRIB data.
+C
+C**   Interface.
+C     ----------
+C
+C           CALL lgrpr4 (KSEC0,KSEC4,PSEC4)
+C
+C           Integer    K.
+C           Real       P.
+C           Logical    O.
+C           Character  H.
+C
+C               Input Parameters.
+C               -----------------
+C
+C               KSEC0 - Array of decoded integers from Section 0.
+C
+C               KSEC4 - Array of decoded integers from Section 4.
+C
+C               PSEC4 - Array of decoded reals from Section 4.
+C
+C               Output Parameters.
+C               ------------------
+C
+C               None.
+C
+C     Method.
+C     -------
+C
+C           Fields printed as integers or reals.
+C
+C     Externals.
+C     ----------
+C
+C           None.
+C
+C     Reference.
+C     ----------
+C
+C           WMO Manual on Codes re GRIB Code.
+C           See also routine GRIBEX.
+C
+C     Comments.
+C     ---------
+C
+C           Routine contains Sections 0 to 1 and Section 9.
+C
+C     Author.
+C     -------
+C
+C           J. Hennessy    ECMWF 11.09.91
+C
+C     Modifications.
+C     --------------
+C
+C           K. Fielding    ecmwf 03/08/92
+C           Special version with reduced printout for Monthly
+C           means and time series
+C
+C----<
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 0. Definition of variables.
+C     -----------------------------------------------------------------
+      IMPLICIT NONE
+C
+C*    Prefix conventions for variable names.
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy arguments.
+C                  G, local variable.
+C                  LP, parameter.
+C     Character    C, Global or common.
+C                  H, dummy arguments.
+C                  Y (but not YP), local variables.
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy arguments.
+C                  I, local variables.
+C                  J (but not JP), loop control.
+C                  JP, parameter.
+C     Real         A to F and Q to X, global or common.
+C                  P (but not PP), dummy arguments.
+C                  Z, local variables.
+C                  PP, parameter.
+C
+*IF DEF,CRAY
+C     IMPLICIT NONE
+*ENDIF
+C
+      INTEGER INUM
+C
+      INTEGER J210, J220
+C
+      INTEGER KSEC0
+      INTEGER KSEC4
+      INTEGER KLINE
+C
+      REAL PSEC4
+C
+      DIMENSION KSEC0(*)
+      DIMENSION KSEC4(*)
+C
+      DIMENSION PSEC4(*)
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 1 . Print integer information from KSEC4.
+C     -----------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WRITE (*,9000)
+      WRITE (*,9001)
+      WRITE (*,9002)
+C
+      WRITE (*,9003) KSEC4(1)
+      WRITE (*,9004) KSEC4(2)
+C     WRITE (*,9005) KSEC4(3)
+C     WRITE (*,9006) KSEC4(4)
+C     WRITE (*,9007) KSEC4(5)
+C     WRITE (*,9008) KSEC4(6)
+C     WRITE (*,9009) KSEC4(7)
+C     WRITE (*,9010) KSEC4(8)
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C*    Section 2. Print real values from PSEC4.
+C     -----------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      WRITE (*,9000)
+C
+      INUM = KSEC4(1)
+      IF (INUM.LT.0)  INUM = - INUM
+      IF (INUM.GT.10) INUM = 10
+C
+C     Print first INUM values.
+C
+      WRITE (*,9011) INUM
+      DO 220 J220 = 0, 3
+         WRITE (*, *)
+      DO 210 J210=1,INUM
+	 WRITE (*,9012) PSEC4(J220 * KLINE + J210)
+  210 CONTINUE
+  220 CONTINUE
+C
+C     -----------------------------------------------------------------
+C
+C
+C
+C
+C
+C
+C
+C*    Section 9 . Format statements. Return to calling routine.
+C     -----------------------------------------------------------------
+C
+  900 CONTINUE
+C
+ 9000 FORMAT (1H )
+ 9001 FORMAT (1H ,'Section 4 - Binary Data  Section.')
+ 9002 FORMAT (1H ,'-------------------------------------')
+ 9003 FORMAT (1H ,'Number of data values coded/decoded.         ',I9)
+ 9004 FORMAT (1H ,'Number of bits per data value.               ',I9)
+ 9005 FORMAT (1H ,'Type of data indicator.                      ',I9)
+ 9006 FORMAT (1H ,'Type of packing indicator.                   ',I9)
+ 9007 FORMAT (1H ,'Type of data representation.                 ',I9)
+ 9008 FORMAT (1H ,'Additional flags indicator.                  ',I9)
+ 9009 FORMAT (1H ,'Reserved.                                    ',I9)
+ 9010 FORMAT (1H ,'Number of values indicator.                  ',I9)
+ 9011 FORMAT (1H ,'First ',I4,' data values.')
+ 9012 FORMAT (1H ,F30.15)
+C
+      RETURN
+C
+      END
diff --git a/interpolation/ll2xyz.F b/interpolation/ll2xyz.F
new file mode 100755
index 0000000..3567024
--- /dev/null
+++ b/interpolation/ll2xyz.F
@@ -0,0 +1,98 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE LL2XYZ(RLAT,RLONG,X,Y,Z,INROW)
+C---->
+C**** LL2XYZ
+C
+C     Purpose
+C     -------
+C
+C     Converts an array of latitude/longitude values to an
+C     array of (x,y,z) coordinates.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL LL2XYZ(RLAT,RLONG,X,Y,Z,INROW)
+C
+C     Input
+C     -----
+C
+C     RLAT  - Array of latitudes.
+C     RLONG - Array of corresponding longitudes.
+C     INROW - Count of latitudes/longitudes.
+C
+C
+C     Output
+C     ------
+C
+C     (X,Y,Z) - Array of coordinates.
+C
+C
+C     Method
+C     ------
+C
+C     Z axis is the polar axis directed from south to north.
+C     X and Y axes are in the equatorial plane and have origin at the
+C     centre of the Earth. The X axis passes through (O north, 0 east).
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      REAL RLAT,RLONG,X,Y,Z
+      DIMENSION RLONG(*),X(*),Y(*),Z(*)
+      INTEGER INROW
+C
+C     Parameters
+C
+      INTEGER JPMAXGG
+      PARAMETER( JPMAXGG = 1280 )
+C
+C     Local variables
+C
+      REAL FACTOR, COS_LAT, SIN_LAT, COS_LON, SIN_LON
+      DIMENSION COS_LON(JPMAXGG), SIN_LON(JPMAXGG)
+      DATA FACTOR/0.017453293/
+      INTEGER LOOP
+      REAL ALAT
+C
+      ALAT = RLAT * FACTOR
+      COS_LAT = COS(ALAT)
+      SIN_LAT = SIN(ALAT)
+C
+      DO LOOP = 1, INROW
+        COS_LON(LOOP) = COS(RLONG(LOOP)*FACTOR)
+        SIN_LON(LOOP) = SIN(RLONG(LOOP)*FACTOR)
+C
+        X(LOOP) = COS_LAT*COS_LON(LOOP)
+        Y(LOOP) = COS_LAT*SIN_LON(LOOP)
+        Z(LOOP) = SIN_LAT
+      ENDDO
+C
+      RETURN
+      END
+
diff --git a/interpolation/lrekam.F b/interpolation/lrekam.F
new file mode 100755
index 0000000..2c9b01f
--- /dev/null
+++ b/interpolation/lrekam.F
@@ -0,0 +1,208 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION LREKAM(SHCIN,KTRUNC,SHCOUT,RANGLES)
+C
+C---->
+C**** LREKAM
+C
+C     Purpose
+C     -------
+C
+C     Reverses the rotation of a spherical harmonic field done by
+C     MAKERL.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = LREKAM(SHCIN,KTRUNC,SHCOUT,RANGLES)
+C
+C     Input
+C     -----
+C
+C     SHCIN   - Input array of spherical harmonics.
+C     KTRUNC  - Truncation of the spherical harmonics.
+C     RANGLES - Coordinates of the south pole of rotation:
+C               latitude/longitude.
+C
+C
+C     Output
+C     ------
+C
+C     SHCOUT  - Output array of rotated spherical harmonics.
+C
+C     Function returns 0 if all OK, otherwise the rotations failed.
+C
+C
+C     Method
+C     ------
+C
+C     Calls JACOBI and RPHI in the reverse order to that done by MAKERL.
+C
+C
+C     Externals
+C     ---------
+C
+C     RPHI    - Rotates spectral coefficients by longitude.
+#ifdef __uxp__
+C     JACOBIF - Rotates spectral coefficients by latitude.
+#else
+C     JACOBI  - Rotates spectral coefficients by latitude.
+#endif
+C     INTLOG  - Logs messages.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers         ECMWF     October, 1995.
+C
+C
+C----<
+C---------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+#include "parim.h"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 28400)
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+2) )
+C
+C     Function arguments.
+C
+      REAL SHCIN, SHCOUT, RANGLES
+      DIMENSION SHCIN(*), SHCOUT(*), RANGLES(*)
+      INTEGER KTRUNC
+C
+C     Local variables
+C
+      REAL*8 DLON, DLAT
+      REAL*8 WORK
+      DIMENSION WORK(2*(JPNM+1)*(JPNM+6))
+      LOGICAL LOK
+      INTEGER NBYTES, LOOP
+#if (defined CRAY) || (defined REAL_8)
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+      REAL*8 DATA
+      DIMENSION DATA(JPLEN)
+#endif
+C
+C     Externals
+C
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialise.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      LREKAM = 0
+C
+C     Check truncation not too big to handle.
+C
+      IF( KTRUNC .GT. JPSTRUNC ) THEN
+        CALL INTLOG(JP_FATAL,'LREKAM: Truncation max exceeded', JPQUIET)
+        CALL INTLOG(JP_FATAL,'LREKAM: Truncation = ', KTRUNC)
+        CALL INTLOG(JP_FATAL,'LREKAM: Allowed maximum = ', JPSTRUNC)
+        LREKAM = JPROUTINE + 1
+         GOTO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Rotate the spectral coefficients.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+#if (defined CRAY) || (defined REAL_8)
+      DLAT = -(-90.0 - RANGLES(1))
+      DLON = RANGLES(2)
+C
+C     Rotate the spectral field by latitude.
+C     Negative DLAT => rotate counter-clockwise about new polar axis.
+C
+#if (defined __uxp__)
+      LOK = JACOBIF( SHCIN, KTRUNC, WORK, DLAT)
+#else
+      LOK = JACOBI( SHCIN, KTRUNC, WORK, DLAT)
+#endif
+      IF(.NOT.LOK) THEN
+        CALL INTLOG(JP_FATAL,'LREKAM: JACOBI failed.', JPQUIET)
+        LREKAM = JPROUTINE + 2
+         GOTO 900
+      ENDIF
+C
+C     Rotate the spectral field by longitude.
+C     Positive DLON => frame rotated from west to east.
+C
+      DO 210 LOOP = 1, (KTRUNC+1)*(KTRUNC+2)
+        SHCOUT(LOOP) = SHCIN(LOOP)
+  210 CONTINUE
+      CALL RPHI( SHCOUT, KTRUNC, WORK, DLON)
+#else
+      DLAT = -(-90.0 - DBLE(RANGLES(1)))
+      DLON = DBLE(RANGLES(2))
+C
+C     Expand spectral coefficients to REAL*8
+      DO 210 LOOP = 1, (KTRUNC+1)*(KTRUNC+2)
+        DATA(LOOP) = DBLE(SHCIN(LOOP))
+  210 CONTINUE
+C
+C     Rotate the spectral field by latitude.
+C     Negative DLAT => rotate counter-clockwise about new polar axis.
+C
+#if (defined __uxp__)
+      LOK = JACOBIF( DATA, KTRUNC, WORK, DLAT)
+#else
+      LOK = JACOBI( DATA, KTRUNC, WORK, DLAT)
+#endif
+      IF(.NOT.LOK) THEN
+        CALL INTLOG(JP_FATAL,'LREKAM: JACOBI failed.', JPQUIET)
+        LREKAM = JPROUTINE + 2
+         GOTO 900
+      ENDIF
+C
+C     Rotate the spectral field by longitude.
+C     Positive DLON => frame rotated from west to east.
+C
+      CALL RPHI( DATA, KTRUNC, WORK, DLON)
+C
+C     Repack spectral coefficients to REAL*4.
+      DO 220 LOOP = 1, (KTRUNC+1)*(KTRUNC+2)
+        SHCOUT(LOOP) = SNGL(DATA(LOOP))
+  220 CONTINUE
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/lsm_red.F b/interpolation/lsm_red.F
new file mode 100755
index 0000000..97c56b1
--- /dev/null
+++ b/interpolation/lsm_red.F
@@ -0,0 +1,317 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION LSM_RED( KGAUSS, KDATE, KBITS, HPATH )
+C
+C---->
+C**** LSM_RED
+C
+C     PURPOSE
+C     -------
+C
+C     Generates the land sea mask file pathname.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = LSM_RED( KGAUSS, KDATE, KBITS, HPATH )
+C
+C
+C     Input
+C     -----
+C     KGAUSS - The gaussian number (80 or 160)
+C     KDATE  - The data date in YYYYMMDD format.
+C     KBITS  - Number of bits per land-sea mask value (eg 32 or 64)
+C
+C     Output
+C     ------
+C     HPATH  - The full file pathname (with gaussian number
+C              number of bits and date).
+C
+C
+C     Return value
+C     ------------
+C
+C     Function returns the number of characters in the file pathname,
+C     or zero if no match found.
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     GETENV     - Standard routine to get environmental variable.
+C     INDEX      - Intrinsic routine to find position of substring.
+C     LEN        - Intrinsic routine to find length of string.
+C     EMOSNUM    - Gives current EMOSLIB version number.
+C
+C
+C     METHOD
+C     ------
+C     None
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None
+C
+C     COMMENTS
+C     --------
+C
+C     None
+C
+C
+C     AUTHOR
+C     ------
+C
+C     J.D.Chambers      *ECMWF*      ??? 1996
+C
+C
+C     MODIFICATIONS
+C     -------------
+C
+C     J.D.Chambers      *ECMWF*      July 1998
+C     Use dates in YYYYMMDD format to handle year 2000 etc.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPD160, JPD80
+      PARAMETER (JPD160=6)
+      PARAMETER (JPD80=2)
+C
+C     Function parameters
+C
+      INTEGER KGAUSS, KDATE, KBITS
+      CHARACTER*(*) HPATH
+C
+C     Local variables
+C
+      CHARACTER*6 YEMOSNM
+      INTEGER IEMOSNM, LOOP, IOFFSET
+C
+C     Change dates for N160
+C
+      INTEGER DATE160(JPD160)
+      DATA DATE160/
+     X            19790930,
+     X            19910917,
+     X            19930804,
+     X            19940302,
+     X            19940823,
+     X            19950404
+     X           /
+C
+C     Change dates for N80
+C
+      INTEGER DATE80(JPD80)
+      DATA DATE80/
+     X            19790930,
+     X            19790930
+     X           /
+C
+      CHARACTER YPENVIRON*13
+      PARAMETER (YPENVIRON = 'MARS_LSM_PATH')
+      CHARACTER*80 YBASE, YENVBACK
+      INTEGER IBASELEN
+      CHARACTER*256 HDIREC
+
+
+#ifdef CRAY
+      DATA HDIREC/ '/owrk/marsint/new'/
+#endif
+
+#ifdef __uxp__
+      DATA HDIREC/ '/mrfs/postproc'/
+#endif
+
+#ifdef TABLE_PATH
+      DATA HDIREC / TABLE_PATH /
+#else
+      DATA HDIREC / '' /
+#endif
+
+      CHARACTER*50 PATH160(JPD160)
+      CHARACTER*50 PATH80(JPD80)
+C
+C     Pathnames for N160
+C
+      DATA PATH160/
+     X            '_19790930',
+     X            '_19910917',
+     X            '_19930804',
+     X            '_19940302',
+     X            '_19940823',
+     X            '_19950404'
+     X          /
+C
+C
+C     Pathnames for N80
+      DATA PATH80/
+     X            '_19790930',
+     X            '_19790930'
+     X          /
+C
+      INTEGER INDEX
+C
+C     External functions
+C
+      INTEGER EMOSNUM
+      EXTERNAL EMOSNUM
+C
+C***************************************************************
+C     Section 1. Initialize and check input values.
+C***************************************************************
+C
+  100 CONTINUE
+C
+      LSM_RED = 0
+      HPATH = ' '
+C
+C     Only reduced N160 gaussian fields handled.
+C
+      IF( KGAUSS.NE.160 ) GOTO 900
+C
+C     Only 32 bit and 64 bit land-sea masks handled.
+C
+      IF( (KBITS.NE.32).AND.(KBITS.NE.64) ) GOTO 900
+C
+C     Check environment variable for path of land sea masks.
+C
+      CALL GETENV(YPENVIRON, YENVBACK)
+C
+      IF( YENVBACK.EQ.' ' ) THEN
+#ifdef __uxp__
+C
+C       On Fujitsus, need to build different pathname for vpp300,
+C       vpp700, vpp700e and vpp5000
+C
+        CALL GETENV ('HOST', YENVBACK)
+        IF( YENVBACK(1:7).EQ.'vpp5000' )THEN
+          YBASE = '/vpp5000' // HDIREC
+          IBASELEN = LEN(HDIREC) + LEN('/vpp5000')
+        ELSE IF( YENVBACK(1:7).EQ.'vpp700e' )THEN
+          YBASE = '/vpp700e' // HDIREC
+          IBASELEN = LEN(HDIREC) + LEN('/vpp700e')
+        ELSE IF( YENVBACK(1:6).EQ.'vpp700' )THEN
+          YBASE = '/vpp700' // HDIREC
+          IBASELEN = LEN(HDIREC) + LEN('/vpp700')
+        ELSE
+          YBASE = HDIREC
+          IBASELEN = LEN(HDIREC)
+        ENDIF
+#else
+         IOFFSET = INDEX(HDIREC,' ') - 1
+         IF(IOFFSET.GT.0) THEN
+           YBASE = HDIREC(1:IOFFSET)//'/land_sea_mask/'
+           IBASELEN = LEN(YBASE)
+         ELSE
+		   YBASE = '/usr/local/lib/metaps/tables/interpolation'
+		   IBASELEN = 42
+         ENDIF
+#endif
+      ELSE
+        YBASE = YENVBACK
+        IBASELEN  = INDEX(YENVBACK,' ') - 1
+        IF( IBASELEN.LT.0 ) IBASELEN = LEN (YENVBACK)
+        IF( IBASELEN.EQ.0 ) THEN
+#ifdef __uxp__
+C
+C         On Fujitsus, need to build different pathname for vpp300,
+C         vpp700, vpp700e and vpp5000
+C
+          CALL GETENV ('HOST', YENVBACK)
+          IF( YENVBACK(1:7).EQ.'vpp5000' )THEN
+            YBASE = '/vpp5000' // HDIREC
+            IBASELEN = LEN(HDIREC) + LEN('/vpp5000')
+          ELSE IF( YENVBACK(1:7).EQ.'vpp700e' )THEN
+            YBASE = '/vpp700e' // HDIREC
+            IBASELEN = LEN(HDIREC) + LEN('/vpp700e')
+          ELSE IF( YENVBACK(1:6).EQ.'vpp700' )THEN
+            YBASE = '/vpp700' // HDIREC
+            IBASELEN = LEN(HDIREC) + LEN('/vpp700')
+          ELSE
+            YBASE = HDIREC
+            IBASELEN = LEN(HDIREC)
+          ENDIF
+#else
+          YBASE = HDIREC
+          IBASELEN = LEN(HDIREC)
+#endif
+        ENDIF
+      ENDIF
+C
+C***************************************************************
+C     Section 2. Build pathnames.
+C***************************************************************
+C
+  200 CONTINUE
+C
+C     Handle N160
+C
+      IF( KGAUSS.EQ.160 ) THEN 
+        DO 210 LOOP = 1, JPD160-1
+          IF( (KDATE.GE.DATE160(LOOP) ) .AND.
+     X         (KDATE.LT.DATE160(LOOP+1)) ) THEN
+            HPATH(1:) = YBASE(1:IBASELEN) // '/' //
+     X                  'r160_' // 'xx' // PATH160(LOOP)
+            LSM_RED = INDEX(HPATH,' ')
+            GOTO 900
+          ENDIF
+  210   CONTINUE
+C
+C       Dropthrough -> take latest.
+C
+        HPATH(1:) = YBASE(1:IBASELEN) // '/' //
+     X              'r160_' // 'xx' // PATH160(JPD160)
+        LSM_RED = INDEX(HPATH,' ')
+C
+C     Handle N80
+C
+      ELSE
+        DO 220 LOOP = 1, JPD80-1
+          IF( (KDATE.GE.DATE80(LOOP) ) .AND.
+     X         (KDATE.LT.DATE80(LOOP+1)) ) THEN
+            HPATH(1:) = YBASE(1:IBASELEN) // '/' //
+     X                  'r80_' // 'xx' // PATH80(LOOP)
+            LSM_RED = INDEX(HPATH,' ')
+            GOTO 900
+          ENDIF
+  220   CONTINUE
+C
+C       Dropthrough -> take latest.
+C
+        HPATH(1:) = YBASE(1:IBASELEN) // '/' //
+     X              'r80_' // 'xx' // PATH80(JPD80)
+        LSM_RED = INDEX(HPATH,' ')
+      ENDIF
+C
+C***************************************************************
+C     Section 9. Return.
+C***************************************************************
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/lsmfld.F b/interpolation/lsmfld.F
new file mode 100755
index 0000000..8fb297e
--- /dev/null
+++ b/interpolation/lsmfld.F
@@ -0,0 +1,125 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION LSMFLD()
+C
+C---->
+C**** LSMFLD
+C
+C     Purpose
+C     -------
+C
+C     Determines whether or not the current field is to be
+C     considered for 'land-sea mask' treatment.
+C
+C
+C     Interface
+C     ---------
+C
+C     LLSMFLD = LSMFLD()
+C
+C     Input
+C     -----
+C
+C     None
+C
+C
+C     Output
+C     ------
+C
+C     Function returns .TRUE. if the field is to be treated with
+C     land-sea mask.
+C
+C
+C     Method
+C     ------
+C
+C     Uses a set of hardcoded rules.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs messages
+C
+C     Uses common blocks nifld.common and nofld.common.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     April 2001
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Local variables
+C
+      LOGICAL LIKELY
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     If 'uselsm' has been forced to 'yes' ...
+C
+      IF( LSMSET ) THEN
+        LSMFLD = LSM
+        GOTO 900
+      ENDIF
+C
+C     WMO International table 001 for meteorological parameters
+C
+      IF ( NITABLE.EQ.1 ) THEN
+        LIKELY = ( NIPARAM.NE.2 )
+C
+C     ECMWF local code table 128 for meteorological parameters
+C
+      ELSEIF ( (NITABLE.EQ.128).OR.(NITABLE.EQ.129) ) THEN
+        LIKELY = ( NIPARAM.NE.151 ).AND.
+     X           ( NIPARAM.NE.172 )
+      ELSE
+        LIKELY = .FALSE.
+      ENDIF
+C
+      IF( .NOT.LIKELY ) THEN
+        LSMFLD = .FALSE.
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Work through the special cases
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( .NOT.LSMFLD ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'LSMFLD: Do not handle field with land-sea mask', JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X    'LSMFLD: Handle field with land-sea mask', JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/make.dep b/interpolation/make.dep
new file mode 100755
index 0000000..a316ebd
--- /dev/null
+++ b/interpolation/make.dep
@@ -0,0 +1,212 @@
+#
+# Header file dependencies
+#
+#
+areachk.o: parim.h nifld.common nofld.common
+auresol.o: parim.h nifld.common nofld.common
+chkprec.o: parim.h nifld.common
+clear_c.o: parim.h nifld.common nofld.common grfixed.h current.h
+ddstyle.o: jparams.h parim.h nofld.common
+dssarea.o: parim.h nifld.common nofld.common
+fixarea.o: parim.h nifld.common nofld.common grfixed.h intf.h
+freecf.o: jparam2.h
+gb2gb.o: jparams.h parim.h nofld.common
+getconf.o: nifld.common parim.h jparams.h
+ggintrp.o: parim.h
+ggrotat.o: parim.h
+hgengg.o: parim.h nofld.common
+hgengrd.o: parim.h
+hgengrw.o: parim.h
+hgenll.o: parim.h
+hgenllw.o: parim.h
+hgetlsm.o: parim.h nifld.common nofld.common
+hirlam.o: parim.h nifld.common nofld.common
+hirlamw.o: parim.h nifld.common nofld.common jparams.h
+hirlsm.o: parim.h nifld.common nofld.common
+hll2ll.o: parim.h
+hll2llw.o: parim.h
+hnei12.o: parim.h
+hneill.o: parim.h
+hntfap.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfaph.o: parim.h nifld.common nofld.common grfixed.h intf.h jparams.h
+hntfaph.o: current.h
+hntfaps.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfau.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfauh.o: parim.h nifld.common nofld.common grfixed.h intf.h jparams.h
+hntfauh.o: current.h intlog.h
+hntfaus.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hntfbu.o: parim.h nifld.common nofld.common grfixed.h intf.h
+hrg2gg.o: parim.h
+hrg2ggw.o: parim.h
+hrg2ll.o: parim.h
+hrg2llw.o: parim.h nifld.common nofld.common
+hsp2gg.o: parim.h
+iafree.o: parim.h memreq.h nifld.common nofld.common
+iagcntl.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iaidef.o: parim.h nifld.common
+iainit.o: parim.h memreq.h nifld.common nofld.common grfixed.h
+iaintgg.o: parim.h nifld.common nofld.common grfixed.h ouspace.h
+iaintll.o: parim.h nifld.common nofld.common grfixed.h ouspace.h
+iaogdef.o: parim.h nofld.common
+iaoldef.o: parim.h nofld.common
+iarcntl.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iareset.o: parim.h nofld.common
+iarmem.o: parim.h nifld.common nofld.common ouspace.h
+ibasini.o: parim.h nifld.common nofld.common intf.h
+igalloc.o: parim.h memreq.h
+igbess.o: jparams.h parim.h
+igdins.o: parim.h
+igdiwe.o: parim.h
+igglat.o: jparams.h parim.h
+iggmem.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iggrid.o: parim.h
+igint.o: parim.h
+igintr.o: parim.h
+iglgrid.o: parim.h
+iglrev.o: parim.h
+iglsize.o: parim.h
+iglsm01.o: parim.h jparams.h
+iglsmb.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+iglsmd.o: parim.h
+iglsmr.o: parim.h
+iglsmst.o: parim.h jparams.h
+ignorm.o: parim.h
+igplsm.o: parim.h
+igpoleg.o: parim.h nifld.common
+igpolew.o: parim.h nifld.common
+igprec.o: parim.h nifld.common
+igscan.o: parim.h
+igsetup.o: parim.h nifld.common nofld.common
+igsize.o: parim.h
+igtog.o: parim.h nifld.common nofld.common
+igtogr.o: parim.h nifld.common nofld.common
+igtran.o: parim.h
+init_cm.o: parim.h nifld.common nofld.common grfixed.h current.h
+insane.o: parim.h nifld.common nofld.common grfixed.h
+intf.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfa.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfap.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfau.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfb.o: parim.h nifld.common nofld.common grfixed.h intf.h jparams.h
+intfbp.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfbu.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intfc.o: parim.h nifld.common nofld.common grfixed.h
+intin.o: parim.h nifld.common nofld.common grfixed.h current.h
+intisl.o: parim.h intisl.h nifld.common nofld.common
+intlog.o: parim.h intlog.h
+intlogd.o: intlog.h
+intlogr.o: parim.h intlog.h
+intocn.o: parim.h
+intout.o: parim.h nifld.common nofld.common grfixed.h current.h
+intpnum.o: grprs.h
+intuvdh.o: parim.h intf.h nifld.common nofld.common
+intuvf.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvgh.o: parim.h nifld.common nofld.common grfixed.h intf.h intlog.h
+intuvgh.o: current.h
+intuvp.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvph.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvs.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvu.o: parim.h nifld.common nofld.common grfixed.h intf.h
+intuvxh.o: parim.h nifld.common nofld.common intf.h current.h
+intvect.o: parim.h nifld.common nofld.common intf.h current.h
+intwave.o: parim.h nifld.common nofld.common intf.h grfixed.h
+irdiwe.o: parim.h
+irgmem.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+irgrid.o: parim.h nifld.common
+irgtog.o: parim.h nifld.common nofld.common
+irint.o: parim.h
+irintr.o: parim.h
+irlrev.o: parim.h
+irlsmb.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+irprec.o: parim.h nifld.common
+irscan.o: parim.h
+irsize.o: parim.h
+iscrsz.o: parim.h nifld.common nofld.common grfixed.h
+islproc.o: intisl.h parim.h nifld.common nofld.common
+issame.o: parim.h nifld.common nofld.common grfixed.h
+jacobi.o: jparams.h parim.h
+jacobif.o: jparams.h parim.h
+jagggp.o: jparams.h parim.h current.h nifld.common nofld.common grfixed.h
+jallgp.o: jparams.h parim.h nifld.common
+jallwn.o: jparams.h parim.h nifld.common
+jdebug.o: jparams.h jparam2.h
+jgetgg.o: parim.h nifld.common nofld.common grfixed.h intf.h rgauss_032.h
+jgetgg.o: rgauss_048.h rgauss_080.h rgauss_080_19940113.h rgauss_128.h
+jgetgg.o: rgauss_160.h rgauss_160_19931222.h rgauss_200.h rgauss_256.h
+jgetgg.o: rgauss_320.h rgauss_400.h rgauss_512.h rgauss_1024.h
+jgglat.o: jparams.h parim.h
+jintgg.o: jparams.h parim.h
+jintll.o: jparams.h parim.h
+jjset99.o: jparams.h parim.h
+jmakgg.o: jparams.h parim.h
+jmakgg3.o: jparams.h parim.h
+jmakll.o: jparams.h parim.h
+jmakll3.o: jparams.h parim.h
+jmemhan.o: jparams.h jparam2.h parim.h
+jmovgg.o: jparams.h parim.h
+jmovll.o: jparams.h parim.h
+jmvugg.o: jparams.h parim.h
+jmvull.o: jparams.h parim.h
+jnorsgg.o: parim.h
+jnumgg.o: jparams.h parim.h
+jnumggq.o: jparams.h parim.h
+jopngg.o: parim.h
+jopnggf.o: parim.h jparams.h jparam2.h
+jopnll.o: parim.h
+jopnllf.o: parim.h jparams.h jparam2.h
+jreadgg.o: jparams.h parim.h
+jreadll.o: jparams.h parim.h
+jsgggp.o: jparams.h parim.h current.h nifld.common nofld.common grfixed.h
+jsllgp.o: jparams.h parim.h nifld.common
+jspleg1.o: jparams.h
+jstrll.o: jparams.h parim.h nifld.common
+jstrwll.o: jparams.h parim.h nifld.common
+jsymgg.o: jparams.h parim.h nifld.common
+jsymll.o: jparams.h parim.h nifld.common
+juvpole.o: jparams.h parim.h current.h nofld.common grfixed.h
+jwindll.o: jparams.h parim.h nifld.common
+jwscal.o: jparams.h
+kintrg.o: intisl.h parim.h nifld.common nofld.common
+knfrom4.o: intisl.h parim.h nifld.common
+krg2rg.o: parim.h intisl.h nifld.common nofld.common
+krg2rgu.o: parim.h intisl.h nifld.common nofld.common
+lrekam.o: parim.h nofld.common
+lsmfld.o: parim.h nifld.common nofld.common
+makerl.o: parim.h nofld.common
+mkbitmp.o: parim.h jparams.h nofld.common
+mkframe.o: parim.h jparams.h
+newisl.o: intisl.h parim.h
+ngintrp.o: parim.h
+ngrotat.o: parim.h intf.h
+nmakgg.o: jparams.h parim.h
+nmakll.o: jparams.h parim.h
+oceanp.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+oceanp.o: intf.h
+pddefs.o: parim.h nifld.common
+ppallow.o: jparams.h parim.h
+precip.o: parim.h nifld.common nofld.common
+reset_c.o: parim.h nifld.common nofld.common grfixed.h current.h
+rphi.o: jparams.h
+set99.o: jparams.h
+sprotat.o: parim.h
+tatorgg.o: parim.h
+w251idx.o: parim.h
+waveidx.o: parim.h
+wavexxx.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+wv2di32.o: parim.h
+wv2didx.o: parim.h
+wv2dint.o: parim.h
+wv2dx32.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+wv2dxxx.o: parim.h nifld.common nofld.common grspace.h grfixed.h grdynam.h
+wvqlidx.o: parim.h
+wvqlint.o: parim.h
+zprec.o: parim.h nifld.common
+createSharedMemoryCoefficients.o: fortdefs.h
+fftchk.o: fortint.h
+gmapbit.o: bitmap.h
+makemap.o: bitmap.h
+sharedMemoryCharacteristics.o: fortdefs.h
+showmap.o: bitmap.h
+smread.o: fortdefs.h
+soffset.o: fortint.h
+valpina.o: fortint.h
diff --git a/interpolation/makemap.c b/interpolation/makemap.c
new file mode 100755
index 0000000..1324079
--- /dev/null
+++ b/interpolation/makemap.c
@@ -0,0 +1,313 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "bitmap.h"
+
+#define BUFFLEN 50000
+#define NOTSET -1
+
+fortint MAKEMAP(
+  char * filename,
+  fortint *n,
+  fortint *m,
+  char ** mybitmap,
+  fortint filenameLength) {
+/*
+// Builds a bitmap in memory from the definition in a file.
+//
+// Called from FORTRAN:
+//
+// STATUS = MAKEMAP(FILENAME,N,M,BITMAP)
+//
+// where:
+//
+// FILENAME is a FORTRAN CHARACTER variable containing the file name.
+//
+// Returns:
+//
+// N is the number of rows in the bitmap.
+// M is the number of columns in the bitmap.
+// BITMAP is the binary map expanded in memory.
+//
+// STATUS = 0 if the processing is successful.
+//
+*/
+FILE * in;
+char * bitmap;
+char buffer[BUFFLEN];
+int rowCount, columnCount;
+int start, finish, defaultValue, size, i;
+int firstColumn, lastColumn, rowNumber, columnNumber;
+char defaultValueSetting, delimiter = '\1', previousDelimiter = '\0';
+static int oldRow = NOTSET;
+char * fileName, *p;
+
+/*
+// Open and read the file containing the bitmap definition.
+*/
+  fileName = (char *) malloc(filenameLength+1);
+  if( fileName == NULL ) {
+    perror("MAKEMAP: malloc error");
+    exit(1);
+  }
+  strncpy(fileName,filename,filenameLength);
+  fileName[filenameLength] = '\0';
+  p = fileName + filenameLength - 1;
+  while ( *p == ' ' ) *(p--) = '\0';
+
+  in = fopen(fileName,"r");
+  if( in == NULL ) {
+    printf("MAKEMAP: Problem opening bitmap file: %s\n",fileName);
+    perror("MAKEMAP: File open error");
+    return 1;
+  }
+  free(fileName);
+
+  fread(buffer, 1, BUFFLEN, in);
+  if( ! feof(in) ) {
+    printf("MAKEMAP: Internal buffer size too small = %d bytes\n", BUFFLEN);
+    return 2;
+  }
+
+/*
+// Check for "SPEC,SIZE="
+*/
+  if( strncmp(buffer,"SPEC",4) != 0 ) {
+    printf("MAKEMAP: Specification does not start with SPEC\n");
+    return 3;
+  }
+
+  start = 5;
+
+  if( strncmp((buffer+start),"SIZE=",5) != 0 ) {
+    printf("MAKEMAP: In specification, SPEC not followed by SIZE=\n");
+    return 4;
+  }
+
+/*
+// Get count of rows and columns
+*/
+  start = 1 + findCharacter(buffer,BUFFLEN,start,'=');
+  if( start == 0 ) {
+    printf("MAKEMAP: '=' missing in SIZE specification\n");
+    return 5;
+  }
+
+  finish = findCharacter(buffer,BUFFLEN,start,':');
+  if( finish == 0 ) {
+    printf("MAKEMAP: ':' missing in SIZE specification\n");
+    return 6;
+  }
+  rowCount = findNumber(buffer,BUFFLEN,start,&finish,':');
+  *n = rowCount;
+
+  start = 1 + finish;
+  finish = findCharacter(buffer,BUFFLEN,start,',');
+  if( finish == 0 ) {
+    printf("MAKEMAP: ',' missing after SIZE specification\n");
+    return 7;
+  }
+  columnCount = findNumber(buffer,BUFFLEN,start,&finish,',');
+  *m = columnCount;
+
+/*
+// Find default VALUE (OFF/ON)
+*/
+  start = 1 + finish;
+  if( strncmp((buffer+start),"VALUES=",7) != 0 ) {
+    printf("MAKEMAP: In specification, SIZE not followed by VALUES=\n");
+    return 8;
+  }
+  start += 7;
+  if( strncmp((buffer+start),"ON",2) == 0 ) {
+    defaultValueSetting = 0xff;
+    defaultValue = 1;
+  }
+  else {
+    defaultValueSetting = 0;
+    defaultValue = 0;
+  }
+
+/*
+// Claim memory for bitmap and fill it with default setting
+*/
+   size = (rowCount*columnCount+7)/8;
+   bitmap = (char *) malloc(size);
+   *mybitmap = bitmap;
+   for( i = 0; i < size; i++ )
+     bitmap[i] = defaultValueSetting;
+
+/*
+// Fill in the bits
+*/
+  start = findCharacter(buffer,BUFFLEN,start,'P');
+  if( start == 0 ) {
+    printf("MAKEMAP: '=' POINTS missing in specification\n");
+    return 9;
+  }
+  if( strncmp((buffer+start),"POINTS=",7) != 0 ) {
+    printf("MAKEMAP: In specification, VALUES= not followed by POINTS=\n");
+    return 10;
+  }
+
+  finish = start + 6;
+
+/*
+// Work through POINTS specification
+*/
+
+  do {
+    previousDelimiter = delimiter;
+    start = 1 + finish;
+    delimiter = findDelimiter(buffer,BUFFLEN,start);
+    if( delimiter == 0 ) {
+      fclose(in);
+      return 0;
+    }
+
+    switch( delimiter ) {
+
+      case '-':                              /* eg 03-08 */
+        firstColumn = findNumber(buffer,BUFFLEN,start,&finish,delimiter);
+        start = 1 + finish;
+        delimiter = findDelimiter(buffer,BUFFLEN,start);
+        lastColumn = findNumber(buffer,BUFFLEN,start,&finish,delimiter);
+        for(columnNumber=firstColumn; columnNumber<=lastColumn; columnNumber++)
+          setBit(bitmap,defaultValue,columnCount,rowNumber,columnNumber);
+        break;
+
+      case '/':                              /* eg 03/04 */
+        columnNumber = findNumber(buffer,BUFFLEN,start,&finish,delimiter);
+        setBit(bitmap,defaultValue,columnCount,rowNumber,columnNumber);
+        break;
+
+      case '\n':                             /* eg 03\n */
+        if( previousDelimiter == ',' ) {
+          finish++;
+          break;
+        }
+        if( previousDelimiter == '\n' ) {
+          if( (oldRow < rowCount) && (oldRow != NOTSET) ) {
+            int loop;
+
+            for( loop = (oldRow+1); loop <= rowCount; loop++ )
+              copyRow(bitmap, columnCount, oldRow, loop, defaultValue);
+          }
+          oldRow = rowCount;
+          fclose(in);
+          return 0;
+        }
+
+      case ',':                              /* eg 03,  */
+        columnNumber = findNumber(buffer,BUFFLEN,start,&finish,delimiter);
+        if( columnNumber != 0 )
+          setBit(bitmap,defaultValue,columnCount,rowNumber,columnNumber);
+        break;
+
+      case ':':                              /* eg 01:  */
+        rowNumber = findNumber(buffer,BUFFLEN,start,&finish,delimiter);
+        if( (oldRow < rowNumber) && (oldRow != NOTSET) ) {
+          int loop;
+
+          for( loop = (oldRow+1); loop < rowNumber; loop++ )
+            copyRow(bitmap, columnCount, oldRow, loop, defaultValue);
+        }
+        oldRow = rowNumber;
+        break;
+
+      default:
+        break;
+
+    }
+
+  } while( 1 );
+
+}
+
+int findNumber(char * buffer,int length,int start,int * finish,char delimiter) {
+char number[20];
+int end;
+
+  end = findCharacter(buffer,length,start,delimiter);
+  *finish = end;
+  strncpy(number,(buffer+start),(end-start));
+  number[(end-start)] = '\0';
+  return atoi(number);
+
+}
+
+char findDelimiter(char * buffer, int length, int point) {
+int i, j;
+char delimiter[5] = {'-','/',',','\n',':'};
+
+  for( i = point; i < length; i++ )
+    for( j = 0; j < 5; j++ )
+      if( buffer[i] == delimiter[j] ) return buffer[i];
+
+  return (char) 0;
+}
+
+int findCharacter(char * buffer, int length, int point, char character) {
+int i;
+
+  for( i = point; i < length; i++ )
+    if( buffer[i] == character ) return i;
+
+  return 0;
+}
+
+void setBit(char * buffer, int value, int columnCount, int row, int column) {
+int bitNumber, byte, bit;
+char mask[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
+
+  bitNumber = (row - 1)*columnCount + (column - 1);
+  byte = bitNumber / 8;
+  bit  = bitNumber % 8;
+
+  if( value == 1 )
+    buffer[byte] &= (char) ~mask[bit];
+  else
+    buffer[byte] |= (char) mask[bit];
+
+  return;
+}
+
+void copyRow(char * buffer, int columnCount, int oldRow, int newRow, int value) {
+int oldByte, oldBit, newByte, newBit, bitNumber;
+char oldValue, newValue, mask;
+int loop;
+
+  for( loop = 0; loop < columnCount; loop++ ) {
+    bitNumber = (oldRow - 1)*columnCount + loop;
+    oldByte = bitNumber / 8;
+    oldBit  = bitNumber % 8;
+    oldValue = (char) ((buffer[oldByte] >> (7-oldBit)) & 0x01);
+
+    bitNumber = (newRow - 1)*columnCount + loop;
+    newByte = bitNumber / 8;
+    newBit  = bitNumber % 8;
+
+    newValue = oldValue << (7-newBit);
+    if( value == 1 ) {
+      mask = 1 << (7-newBit);
+      buffer[newByte] &= (char) ~mask;
+      buffer[newByte] |= (char) newValue;
+    }
+    else
+      buffer[newByte] |= newValue;
+  }
+
+}
diff --git a/interpolation/makerl.F b/interpolation/makerl.F
new file mode 100755
index 0000000..61b6c67
--- /dev/null
+++ b/interpolation/makerl.F
@@ -0,0 +1,209 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION MAKERL(SHCIN,KTRUNC,SHCOUT,RANGLES)
+C
+C---->
+C**** MAKERL
+C
+C     Purpose
+C     -------
+C
+C     Rotates a spherical harmonic field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = MAKERL(SHCIN,KTRUNC,SHCOUT,RANGLES)
+C
+C     Input
+C     -----
+C
+C     SHCIN   - Input array of spherical harmonics.
+C     KTRUNC  - Truncation of the spherical harmonics.
+C     RANGLES - Coordinates of the south pole of rotation:
+C               latitude/longitude.
+C
+C
+C     Output
+C     ------
+C
+C     SHCOUT  - Output array of rotated spherical harmonics.
+C
+C     Function returns 0 if all OK, otherwise the rotations failed.
+C
+C
+C     Method
+C     ------
+C
+C     None.
+C
+C
+C     Externals
+C     ---------
+C
+C     RPHI    - Rotates spectral coefficients by longitude.
+#ifdef __uxp__
+C     JACOBIF - Rotates spectral coefficients by latitude.
+#else
+C     JACOBI  - Rotates spectral coefficients by latitude.
+#endif
+C     INTLOG  - Logs messages.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers         ECMWF     October, 1995.
+C
+C
+C----<
+C---------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+#include "parim.h"
+#include "nofld.common"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 28300)
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+2) )
+C
+C     Function arguments.
+C
+      REAL SHCIN, SHCOUT, RANGLES
+      DIMENSION SHCIN(*), SHCOUT(*), RANGLES(*)
+      INTEGER KTRUNC
+C
+C     Local variables
+C
+      REAL*8 DLON, DLAT
+      REAL*8 WORK
+      DIMENSION WORK(2*(JPNM+1)*(JPNM+6))
+      LOGICAL LOK
+      INTEGER NBYTES, LOOP
+#if (defined CRAY) || (defined REAL_8)
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+      REAL*8 DATA
+      DIMENSION DATA(JPLEN)
+#endif
+C
+C     Externals
+C
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialise.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      MAKERL = 0
+C
+C     Check truncation not too big to handle.
+C
+      IF( KTRUNC .GT. JPSTRUNC ) THEN
+        CALL INTLOG(JP_FATAL,'MAKERL: Truncation max exceeded', JPQUIET)
+        CALL INTLOG(JP_FATAL,'MAKERL: Truncation = ', KTRUNC)
+        CALL INTLOG(JP_FATAL,'MAKERL: Allowed maximum = ', JPSTRUNC)
+        MAKERL = JPROUTINE + 1
+         GOTO 900
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Rotate the spectral coefficients.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+#if (defined CRAY) || (defined REAL_8)
+      DLAT = -90.0 - RANGLES(1)
+      DLON = -RANGLES(2)
+C
+C     Rotate the spectral field by longitude.
+C     Positive DLON => frame rotated from west to east.
+C
+      DO 210 LOOP = 1, (KTRUNC+1)*(KTRUNC+2)
+        SHCOUT(LOOP) = SHCIN(LOOP)
+  210 CONTINUE
+      CALL RPHI( SHCOUT, KTRUNC, WORK, DLON)
+C
+C     Rotate the spectral field by latitude.
+C     Negative DLAT => rotate counter-clockwise about new polar axis.
+C
+#if (defined __uxp__)
+      LOK = JACOBIF( SHCOUT, KTRUNC, WORK, DLAT)
+#else
+      LOK = JACOBI( SHCOUT, KTRUNC, WORK, DLAT)
+#endif
+      IF(.NOT.LOK) THEN
+        CALL INTLOG(JP_FATAL,'MAKERL: JACOBI failed.', JPQUIET)
+        MAKERL = JPROUTINE + 2
+         GOTO 900
+      ENDIF
+#else
+      DLAT = -90.0 - DBLE(RANGLES(1))
+      DLON = -DBLE(RANGLES(2))
+C
+C     Expand spectral coefficients to REAL*8
+C
+      DO 210 LOOP = 1, (KTRUNC+1)*(KTRUNC+2)
+        DATA(LOOP) = DBLE(SHCIN(LOOP))
+  210 CONTINUE
+C
+C     Rotate the spectral field by longitude.
+C     Positive DLON => frame rotated from west to east.
+C
+      CALL RPHI( DATA, KTRUNC, WORK, DLON)
+C
+C     Rotate the spectral field by latitude.
+C     Negative DLAT => rotate counter-clockwise about new polar axis.
+C
+#if (defined __uxp__)
+      LOK = JACOBIF( DATA, KTRUNC, WORK, DLAT)
+#else
+      LOK = JACOBI( DATA, KTRUNC, WORK, DLAT)
+#endif
+      IF(.NOT.LOK) THEN
+        CALL INTLOG(JP_FATAL,'MAKERL: JACOBI failed.', JPQUIET)
+        MAKERL = JPROUTINE + 2
+         GOTO 900
+      ENDIF
+C
+C     Repack spectral coefficients to REAL*4.
+C
+      DO 220 LOOP = 1, (KTRUNC+1)*(KTRUNC+2)
+        SHCOUT(LOOP) = SNGL(DATA(LOOP))
+  220 CONTINUE
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/memreq.h b/interpolation/memreq.h
new file mode 100755
index 0000000..6f7e1a7
--- /dev/null
+++ b/interpolation/memreq.h
@@ -0,0 +1,79 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "memreq.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains the memory request definition variables.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "memreq.h"
+C
+C     Common block usage
+C     __________________
+C
+C     MEMORY
+C
+C     MADDR        - The base addresses of the currently allocated
+C                    memory segments.
+C     MREQUEST     - The sizes of the current memory requests.
+C
+C     METHOD
+C     ______
+C
+C     NONE
+C
+C     REFERENCE
+C     _________
+C
+C     NONE
+C
+C     COMMENTS
+C     ________
+C
+C     MREQUEST and MADDR are arrays to allow control of different
+C     memory requests at different levels of the interpolation
+C     software.
+C
+C     Contains section 1
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Jan 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     NONE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Input field description
+C     _______________________________________________________
+C
+C     MREQUEST - The size of the current memory request.
+C     MADDR    - The base address for the current memory allocation.
+C
+#ifdef POINTER_64
+      INTEGER*8 MADDR(JPLEVEL)
+#else
+      INTEGER MADDR(JPLEVEL)
+#endif
+      INTEGER MREQUEST(JPLEVEL)
+C
+      COMMON /MEMORY/ MREQUEST, MADDR
+C
+      SAVE /MEMORY/
diff --git a/interpolation/mkbitmp.F b/interpolation/mkbitmp.F
new file mode 100755
index 0000000..d948609
--- /dev/null
+++ b/interpolation/mkbitmp.F
@@ -0,0 +1,177 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION MKBITMP(KWE,KNS,ZSEC4,ZMISS)
+C
+C---->
+C**** MKBITMP
+C
+C     Purpose
+C     -------
+C
+C     Remove points using a bitmap.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL  MKBITMP(KWE,KNS,ZSEC4,ZMISS)
+C
+C     Input
+C     -----
+C
+C     KWE    - Number of points west-east in input field.
+C     KNS    - Number of points north-south in input field.
+C     ZSEC4  - GRIBEX section 4 values in the field.
+C     ZMISS  - Value to be used as the missing data value..
+C
+C
+C     Output
+C     ------
+C
+C     ZSEC4  - GRIBEX section 4 values with the points marked as
+C              'missing' by the bitmap replaced by missing data values.
+C
+C     Function returns 0 if all OK.
+C
+C
+C     Method
+C     ------
+C
+C     The field and bitmap are rectangular.
+C     Use NOBITMP, the name of a file describing the bitmap.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C     MAKEMAP - Build a bitmap from definition in a file.
+C     GMAPBIT - Get the bit value from a given position in a bitmap.
+C     JFREE   - Frees dynamically allocated memory.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     April 2000.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KWE,KNS
+      REAL ZSEC4(*), ZMISS
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 44000 )
+C
+C     Local variables
+C
+      INTEGER IRET,BITMAP,NROWS,NCOLS,NVALUE,NEXT,IROW,ICOL,NINDEX
+      INTEGER OLDROWS, OLDCOLS, LOOP
+      CHARACTER*256 OLDFILE
+      DATA OLDFILE/' '/, BITMAP/-1/
+      SAVE BITMAP,OLDROWS,OLDCOLS,OLDFILE
+C
+C     Externals
+C
+      INTEGER  MAKEMAP, GMAPBIT, JINDEX
+      EXTERNAL MAKEMAP, GMAPBIT, JINDEX
+C
+#include "parim.h"
+#include "jparams.h"
+#include "nofld.common"
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      MKBITMP = 0
+C
+C     Only build bitmap if filename has changed since last time through
+C
+      NINDEX = JINDEX(NOBITMP)
+      IF( NINDEX.LT.1 ) THEN
+        CALL INTLOG(JP_WARN,'MKBITMP: No bitmap name given',JPQUIET)
+        CALL INTLOG(JP_WARN,'MKBITMP: BITMAP NOT APPLIED',JPQUIET)
+        MKBITMP = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+      IF( OLDFILE(1:NINDEX).NE.NOBITMP(1:NINDEX) ) THEN
+        OLDFILE(1:NINDEX) = NOBITMP(1:NINDEX)
+        IF( NDBG.NE.0 )
+     X    CALL INTLOG(JP_DEBUG,
+     X      'MKBITMP: New BITMAP: '//OLDFILE(1:NINDEX),JPQUIET)
+C
+        IF( BITMAP.NE.-1 ) CALL JFREE(BITMAP)
+C
+        IRET = MAKEMAP(NOBITMP,NROWS,NCOLS,BITMAP)
+        IF( IRET.NE.0 ) THEN
+          CALL INTLOG(JP_WARN,'MKBITMP: Failed to make bitmap',IRET) 
+          CALL INTLOG(JP_WARN,'MKBITMP: BITMAP NOT APPLIED',JPQUIET)
+          DO LOOP = 1, 256
+            OLDFILE(LOOP:LOOP) = ' '
+          ENDDO
+          MKBITMP = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        OLDROWS = NROWS
+        OLDCOLS = NCOLS
+      ELSE
+        NROWS = OLDROWS
+        NCOLS = OLDCOLS
+      ENDIF
+C
+      IF( (NROWS.NE.KNS).OR.(NCOLS.NE.KWE) ) THEN
+        CALL INTLOG(JP_WARN,'MKBITMP: Bitmap invalid for area',JPQUIET) 
+        CALL INTLOG(JP_WARN,'MKBITMP: No. of subarea rows    = ',KNS) 
+        CALL INTLOG(JP_WARN,'MKBITMP: No. of subarea columns = ',KWE) 
+        CALL INTLOG(JP_WARN,'MKBITMP: No. of bitmap rows    = ',NROWS) 
+        CALL INTLOG(JP_WARN,'MKBITMP: No. of bitmap columns = ',NCOLS) 
+        CALL INTLOG(JP_WARN,'MKBITMP: BITMAP NOT APPLIED',JPQUIET)
+        MKBITMP = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Use bitmap to force missing values
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( NDBG.NE.0 )
+     X  CALL INTLOG(JP_DEBUG,'MKBITMP: BITMAP applied',JPQUIET)
+C
+      NEXT = 0
+      DO IROW = 1, KNS
+        DO ICOL = 1, KWE
+          NEXT = NEXT + 1
+          NVALUE = GMAPBIT(BITMAP,NCOLS,IROW,ICOL)
+          IF( NVALUE.EQ.0 ) ZSEC4(NEXT) = ZMISS
+        ENDDO
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/mkframe.F b/interpolation/mkframe.F
new file mode 100755
index 0000000..e274e68
--- /dev/null
+++ b/interpolation/mkframe.F
@@ -0,0 +1,115 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE MKFRAME(KWE,KNS,ZSEC4,ZMISS,KFRAME)
+C
+C---->
+C**** MKFRAME
+C
+C     Purpose
+C     -------
+C
+C     Remove points from inside a frame boundary.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL  MKFRAME(KWE,KNS,ZSEC4,ZMISS,KFRAME)
+C
+C     Input
+C     -----
+C
+C     KWE    - Number of points west-east in input field.
+C     KNS    - Number of points north-south in input field.
+C     ZSEC4  - GRIBEX section 4 values in the field.
+C     ZMISS  - Value to be used as the missing data value..
+C     KFRAME - Number of points across the frame.
+C
+C
+C     Output
+C     ------
+C
+C     ZSEC4  - GRIBEX section 4 values with the points inside the frame
+C              replaced by missing data values.
+C
+C
+C     Method
+C     ------
+C
+C     The field and frame are rectangular.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Log error message.
+C     INTLOGR - Log error message.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1999.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KWE,KNS, KFRAME
+      REAL ZSEC4(*), ZMISS
+C
+C     Local variables
+C
+      INTEGER TOP, BOTTOM, LEFT, RIGHT, LOOPO, LOOPI, NEXT
+C
+#include "parim.h"
+#include "jparams.h"
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( KFRAME.LT.1 ) GOTO 900
+C
+      TOP    = KFRAME + 1
+      BOTTOM = KNS - KFRAME
+      LEFT   = KFRAME + 1
+      RIGHT  = KWE - KFRAME
+C
+      IF( NDBG.GT.0 ) THEN
+        CALL INTLOG(JP_DEBUG,'MKFRAME: KFRAME = ', KFRAME)
+        CALL INTLOG(JP_DEBUG,'MKFRAME: TOP = ', TOP)
+        CALL INTLOG(JP_DEBUG,'MKFRAME: BOTTOM = ', BOTTOM)
+        CALL INTLOG(JP_DEBUG,'MKFRAME: LEFT = ', LEFT)
+        CALL INTLOG(JP_DEBUG,'MKFRAME: RIGHT = ', RIGHT)
+        CALL INTLOGR(JP_DEBUG,'MKFRAME: ZMISS = ', ZMISS)
+      ENDIF
+C
+      DO LOOPO = TOP, BOTTOM
+        NEXT = (LOOPO-1)*KWE + (LEFT-1)
+        DO LOOPI = LEFT, RIGHT
+          NEXT = NEXT + 1
+          ZSEC4(NEXT) = ZMISS
+        ENDDO
+      ENDDO
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Closedown.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/my_ialloc.c b/interpolation/my_ialloc.c
new file mode 100755
index 0000000..0667b04
--- /dev/null
+++ b/interpolation/my_ialloc.c
@@ -0,0 +1,41 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/file.h>
+
+#define IA_CONT 00001
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define MY_IALLOC my_ialloc 
+#else
+#define MY_IALLOC my_ialloc_
+#endif
+#endif
+
+void MY_IALLOC( FILE ** kunit, long * isize, long * kret)
+{
+#ifdef CRAY
+int fdesc;
+int status;
+#endif
+
+    *kret = 0;
+#ifdef CRAY
+    fdesc = fileno( *kunit);
+    status = ialloc( fdesc, *isize, IA_CONT, 0);
+    if ( status == -1 ) *kret = 1;
+#endif
+    return;
+
+}
diff --git a/interpolation/newisl.F b/interpolation/newisl.F
new file mode 100755
index 0000000..8b23090
--- /dev/null
+++ b/interpolation/newisl.F
@@ -0,0 +1,304 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION NEWISL(OLDGEO,NEWGEO,OLDLSM,OLDFLD,MASTER,NEWFLD)
+C
+C---->
+C**** NEWISL
+C
+C     Purpose
+C     -------
+C
+C     Interpolate a field based on an old land-sea mask to a field
+C     based on a different land-sea mask.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = NEWISL(OLDGEO,NEWGEO,OLDLSM,OLDFLD,MASTER,NEWFLD)
+C
+C     Input
+C     -----
+C
+C     OLDGEO - GRIB section 2 describing grid of old field.
+C     NEWGEO - GRIB section 2 describing grid of new field.
+C     OLDLSM - Array of land-sea mask values for old field.
+C     OLDFLD - Array of values for old field.
+C     MASTER - Array of land-sea mask values for new field.
+C
+C
+C     Output
+C     ------
+C
+C     NEWFLD - Array of values for new field.
+C
+C     Function returns:
+C       - 0 if all is well
+C       - 1, otherwise.
+C
+C
+C     Method
+C     ------
+C
+C     Build up field offsets from input geometries.
+C     For each point of the new field, find in the old field the four
+C     nearest neighbours' positions, values and types.
+C     Calculate new value from the neighbours.
+C
+C
+C     Externals
+C     ---------
+C
+C     IGGLAT  - Compute gaussian lines of latitude.
+C     JNORSGG - Find gaussian latitudes to north and south of latitude.
+C     ISLPROC - Calculate value of new field point.
+C     INTLOG  - Log messages
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     August 2000
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER OLDGEO(*),NEWGEO(*)
+      REAL OLDLSM(*),OLDFLD(*),MASTER(*),NEWFLD(*)
+C
+#include "intisl.h"
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPMAXLT, JPGAUSS, JP1000
+      PARAMETER (JPMAXLT=721)
+      PARAMETER (JPGAUSS=4)
+      PARAMETER (JP1000=1000)
+C
+C     Local variables
+C
+      INTEGER TOTAL, NEXT, LOOP, NEWOFF(JPMAXLT), OLDOFF(JPMAXLT)
+      INTEGER LATIT, LONG, NEWTYPE, IRET, NPTS
+      INTEGER LAT(2), LON(4)
+      INTEGER PT(4), TYPE(4)
+      REAL OLAT(2), OLON(4)
+      REAL RLATOLD(JPMAXLT), RLATNEW(JPMAXLT), RLAT, RLON
+C
+C     Externals
+C
+      INTEGER IGGLAT, JNORSGG
+      REAL ISLPROC
+      EXTERNAL IGGLAT, JNORSGG, ISLPROC
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Build working values using input geometries.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      NEWISL = 0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Calculate number of points in new field and offset
+C                  to start of each latitude in the new grid
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      IF( NEWGEO(1).EQ.JPGAUSS ) THEN
+C
+C       New field is gaussian
+C
+        CALL INTLOG(JP_DEBUG,'NEWISL: New field is gaussian',JPQUIET)
+C
+        IF( NEWGEO(17).EQ.0 ) THEN
+          CALL INTLOG(JP_DEBUG,'NEWISL: New field is regular',JPQUIET)
+          TOTAL = NEWGEO(2)*NEWGEO(3)
+          NEWOFF(1) = 0
+          DO LOOP = 2, NEWGEO(NJ)
+            NEWOFF(LOOP) = NEWOFF(LOOP-1) + NEWGEO(2)
+          ENDDO
+        ELSE
+          CALL INTLOG(JP_DEBUG,'NEWISL: New field is reduced',JPQUIET)
+          NEWOFF(1) = 0
+          TOTAL = NEWGEO(NPOINTS)
+          DO LOOP = 2, NEWGEO(NJ)
+            NEWOFF(LOOP) = NEWOFF(LOOP-1) + NEWGEO(NPOINTS-2+LOOP)
+            TOTAL = TOTAL + NEWGEO(NPOINTS-1+LOOP)
+          ENDDO
+        ENDIF
+C
+C       Get the gaussian latitudes for the new field
+C
+        IRET = IGGLAT(NEWGEO(NGAUSS)*2,RLATNEW,0,-1)
+        IF( IRET.NE.0 ) THEN
+          WRITE(*,*) 'NEWISL: Problem call igglat for new grid'
+          NEWISL = 1
+          RETURN
+        ENDIF
+C
+      ELSE
+C
+C       New field is lat/long
+C
+        CALL INTLOG(JP_DEBUG,'NEWISL: New field is lat/long',JPQUIET)
+        TOTAL = NEWGEO(2)*NEWGEO(3)
+        DO LOOP = 1, NEWGEO(3)
+          NEWOFF(LOOP) = NEWGEO(2)*(LOOP-1)
+          RLATNEW(LOOP) = 90.0 - (REAL((LOOP-1)*NEWGEO(10))/JP1000)
+        ENDDO
+C
+      ENDIF
+C
+      CALL INTLOG(JP_DEBUG,'NEWISL: No. of pts in new field = ',TOTAL)
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Get the gaussian latitudes for the old field and
+C                  setup the offsets to the start of each latitude.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      OLDOFF(1) = 0
+      DO LOOP = 2, OLDGEO(NJ)
+        OLDOFF(LOOP) = OLDOFF(LOOP-1) + OLDGEO(NPOINTS-2+LOOP)
+      ENDDO
+C
+      IRET = IGGLAT(OLDGEO(NGAUSS)*2,RLATOLD,0,-1)
+      IF( IRET.NE.0 ) THEN
+        WRITE(*,*) 'NEWISL: Problem call igglat for old grid'
+        NEWISL = 1
+        RETURN
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Work through the points in the new field.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      DO NEXT = 1, TOTAL
+C
+C       Calculate lat/long
+C
+        DO LOOP = 1, NEWGEO(NJ)
+          IF( NEWOFF(LOOP).GE.NEXT ) THEN
+            LATIT = LOOP - 1
+            GOTO 410
+          ENDIF
+        ENDDO
+        LATIT = NEWGEO(NJ)
+C
+  410   CONTINUE
+C
+        LONG = NEXT - NEWOFF(LATIT)
+C
+        RLAT = RLATNEW(LATIT)
+        IF( NEWGEO(1).EQ.JPGAUSS ) THEN
+          IF( NEWGEO(17).EQ.0 ) THEN
+            RLON = REAL((LONG-1)*NEWGEO(9))/JP1000
+          ELSE
+            RLON = (REAL(LONG-1)*360.0)/REAL(NEWGEO(NPOINTS+LATIT-1))
+          ENDIF
+        ELSE
+          RLON = REAL((LONG-1)*NEWGEO(9))/JP1000
+        ENDIF
+C
+C       Find type of point (land or sea)
+C
+        IF( MASTER(NEXT).GT.MASTERTHRESHOLD ) THEN
+          NEWTYPE = LAND
+        ELSE
+          NEWTYPE = SEA
+        ENDIF
+C
+C       Find four neighbours in the old field with their types
+C       (Find NW neighbour and deduce the others).
+C
+        LAT(NORTH) = JNORSGG(RLAT,RLATOLD,OLDGEO(NGAUSS),1)
+        LAT(SOUTH) = JNORSGG(RLAT,RLATOLD,OLDGEO(NGAUSS),0)
+C
+        OLAT(NORTH) = RLATOLD(LAT(NORTH))
+        OLAT(SOUTH) = RLATOLD(LAT(SOUTH))
+C
+        NPTS = OLDGEO(NPOINTS-1+LAT(NORTH))
+        LON(NWEST) = 1 + INT(RLON/(360.0/REAL(NPTS)))
+        LON(NEAST) = LON(NWEST) + 1
+        IF( LON(NEAST).GT.NPTS ) LON(NEAST) = 1
+C
+        OLON(NWEST) = (REAL(LON(NWEST)-1)*360.0)/REAL(NPTS)
+        IF( LON(NEAST).EQ.1 ) THEN
+          OLON(NEAST) = 360.0
+        ELSE
+          OLON(NEAST) = (REAL(LON(NEAST)-1)*360.0)/REAL(NPTS)
+        ENDIF
+C
+        NPTS = OLDGEO(NPOINTS-1+LAT(SOUTH))
+        LON(SWEST) = 1 + INT(RLON/(360.0/REAL(NPTS)))
+        LON(SEAST) = LON(SWEST) + 1
+        IF( LON(SEAST).GT.NPTS ) LON(SEAST) = 1
+C
+        OLON(SWEST) = (REAL(LON(SWEST)-1)*360.0)/REAL(NPTS)
+        IF( LON(SEAST).EQ.1 ) THEN
+          OLON(SEAST) = 360.0
+        ELSE
+          OLON(SEAST) = (REAL(LON(SEAST)-1)*360.0)/REAL(NPTS)
+        ENDIF
+C
+        PT(NWEST) = OLDOFF(LAT(NORTH)) + LON(NWEST)
+        IF( OLDLSM(PT(NWEST)).GT.OLDLSMTHRESHOLD ) THEN
+          TYPE(NWEST) = LAND
+        ELSE
+          TYPE(NWEST) = SEA
+        ENDIF
+C
+        PT(NEAST) = OLDOFF(LAT(NORTH)) + LON(NEAST)
+        IF( OLDLSM(PT(NEAST)).GT.OLDLSMTHRESHOLD ) THEN
+          TYPE(NEAST) = LAND
+        ELSE
+          TYPE(NEAST) = SEA
+        ENDIF
+C
+        PT(SWEST) = OLDOFF(LAT(SOUTH)) + LON(SWEST)
+        IF( OLDLSM(PT(SWEST)).GT.OLDLSMTHRESHOLD ) THEN
+          TYPE(SWEST) = LAND
+        ELSE
+          TYPE(SWEST) = SEA
+        ENDIF
+C
+        PT(SEAST) = OLDOFF(LAT(SOUTH)) + LON(SEAST)
+        IF( OLDLSM(PT(SEAST)).GT.OLDLSMTHRESHOLD ) THEN
+          TYPE(SEAST) = LAND
+        ELSE
+          TYPE(SEAST) = SEA
+        ENDIF
+C
+C       Interpolate the new value
+C
+        NEWFLD(NEXT) =
+     X    ISLPROC(RLAT,RLON,NEWTYPE,OLAT,OLON,TYPE,PT,OLDFLD)
+C
+      ENDDO
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C
+      RETURN
+      END
+
diff --git a/interpolation/ngintrp.F b/interpolation/ngintrp.F
new file mode 100755
index 0000000..d5b77c0
--- /dev/null
+++ b/interpolation/ngintrp.F
@@ -0,0 +1,295 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,NGAUSS,TYPE,FIELD,
+     X                   GLATS, NGPTS)
+C
+C---->
+C**** NGINTRP
+C
+C     PURPOSE
+C     _______
+C
+C     Finds values at the points of a row by interpolation within a
+C     gaussian field.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL NGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,NGAUSS,TYPE,FIELD)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     NEWFLD  - The field of values being created
+C     NEXT    - Start offset of the latitude row being created
+C     INROW   - The number of points in the latitude row
+C     OLAT    - Latitude of target point
+C     OLON    - Longitude of target point
+C     NGAUSS  - Gaussian field number
+C     TYPE    - Original unrotated gaussian field type
+C               = 'F' for full (regular) gaussian field
+C               = 'R' for reduced (quasi) gaussian field
+C     FIELD   - Original gaussian field
+C     GLATS   - Gaussian latitudes for original field
+C     NGPTS   - Number of points along original field latitudes
+C
+C
+C     Output parameters
+C     ________________
+C
+C     NEWFLD(NEXT) to NEWFLD(NEXT+INROW-1) contains the latitude row
+C     values.
+C
+C
+C     METHOD
+C     ______
+C
+C     Uses distance weighted values of 4 neighbouring points unless
+C     within small distance of one of the neighbours, in which case
+C     the value at that point is used.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     JMKOFGG - Builds offsets to start of each latitude row in the
+C               gaussian grid.
+C     JNORSGG - Find nearest north/south latitude in the gaussian grid.
+C     INTLOG  - Logs output messages
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None.
+C
+C
+C     COMMENTS
+C     ________
+C
+C     Some loops have been split and simplified to help with
+C     vectorisation on VPP.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPFACTR, JPMAXGG
+      PARAMETER( JPFACTR = 10000 )
+      PARAMETER( JPMAXGG = 1280 )
+      REAL JPEPS
+      PARAMETER( JPEPS = 1E-2)
+C
+C     Function arguments
+C
+      REAL NEWFLD(*),OLAT(*),OLON(*),FIELD(*),GLATS(*)
+      INTEGER NEXT,INROW,NGAUSS,NGPTS(*)
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      INTEGER LOOP, IVALUE
+      INTEGER NORTH, SOUTH, IWESTN, IWESTS, IEASTN, IEASTS
+      REAL NSTEP, SSTEP
+      DIMENSION NORTH(JPMAXGG), SOUTH(JPMAXGG)
+      DIMENSION IWESTN(JPMAXGG), IWESTS(JPMAXGG)
+      DIMENSION IEASTN(JPMAXGG), IEASTS(JPMAXGG)
+      DIMENSION NSTEP(JPMAXGG), SSTEP(JPMAXGG)
+      REAL DNORTH, DSOUTH, DWESTN, DWESTS, DEASTN, DEASTS
+      DIMENSION DNORTH(JPMAXGG), DSOUTH(JPMAXGG)
+      DIMENSION DWESTN(JPMAXGG), DWESTS(JPMAXGG)
+      DIMENSION DEASTN(JPMAXGG), DEASTS(JPMAXGG)
+      INTEGER KOFSET(JPMAXGG/2)
+      INTEGER KRET, OLDGAUS
+      DATA OLDGAUS/0/
+      CHARACTER*1 OLDTYPE
+      DATA OLDTYPE/' '/
+      SAVE OLDGAUS, OLDTYPE, KOFSET
+#ifdef __uxp__
+      REAL ONW, ONE, OSW, OSE
+      DIMENSION ONW(JPMAXGG), ONE(JPMAXGG), OSW(JPMAXGG), OSE(JPMAXGG)
+#endif
+C
+C     Externals
+C
+      INTEGER JNORSGG
+      EXTERNAL JNORSGG
+#ifndef __uxp__
+C
+C     Statement function
+C
+      INTEGER X, Y
+      REAL OFIELD
+      OFIELD(X,Y) = FIELD(KOFSET(X)+Y)
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+C     Fixup gaussian grid definition (first time only)
+C
+      IF ( (OLDGAUS.NE.NGAUSS).OR.(OLDTYPE.NE.TYPE) ) THEN
+C
+        CALL INTLOG(JP_DEBUG,
+     X    'NGINTRP: Fixup gaussian grid definition:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+        CALL INTLOG(JP_DEBUG, 'NGINTRP: grid number:',NGAUSS)
+C
+C       Build array of offsets in field to start of each latitude line
+C
+        CALL INTLOG(JP_DEBUG,'NGINTRP: Build row offsets',JPQUIET)
+        IF( TYPE.EQ.'R') THEN
+          CALL JMKOFGG(TYPE,1,NGAUSS*2,0.0,360.0,NGAUSS,NGPTS,KOFSET)
+        ELSE
+          CALL JMKOFGG(TYPE,1,NGAUSS*2,0.0,(360.0-(90.0/NGAUSS)),
+     X                 NGAUSS,NGPTS,KOFSET)
+        ENDIF
+        OLDGAUS = NGAUSS
+        OLDTYPE = TYPE
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. Find latitudes of grid lines to north and south of
+C                the points and calculate grid interval along lines.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      DO LOOP = 1, INROW
+        NORTH(LOOP) = JNORSGG( OLAT(LOOP), GLATS, NGAUSS, 1)
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        SOUTH(LOOP) = MIN( NORTH(LOOP)+1, NGAUSS*2)
+        DNORTH(LOOP) = ABS(GLATS(NORTH(LOOP)) - OLAT(LOOP))
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        DSOUTH(LOOP) = 1.0 - DNORTH(LOOP)
+        NSTEP(LOOP) = 360.0/FLOAT(NGPTS(NORTH(LOOP)))
+        SSTEP(LOOP) = 360.0/FLOAT(NGPTS(SOUTH(LOOP)))
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 3. Find neighbouring points.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+      DO LOOP = 1, INROW
+C
+C       Calculate normalised distance west and east to neighbouring
+C       points on lines to north and south of the point
+C
+        IWESTN(LOOP) = INT(OLON(LOOP)/NSTEP(LOOP))
+        IWESTS(LOOP) = INT(OLON(LOOP)/SSTEP(LOOP))
+        IEASTN(LOOP) = IWESTN(LOOP) + 1
+        IEASTS(LOOP) = IWESTS(LOOP) + 1
+C
+        DWESTN(LOOP) =
+     X   ABS((OLON(LOOP) - FLOAT(IWESTN(LOOP))*NSTEP(LOOP))/NSTEP(LOOP))
+        DEASTN(LOOP) = 1.0 - DWESTN(LOOP)
+C
+        DWESTS(LOOP) =
+     X   ABS((OLON(LOOP) - FLOAT(IWESTS(LOOP))*SSTEP(LOOP))/SSTEP(LOOP))
+        DEASTS(LOOP) = 1.0 - DWESTS(LOOP)
+C
+C       Adjust west and east for longitude wrap-around
+C
+        IVALUE=NGPTS(NORTH(LOOP))
+        IF( IEASTN(LOOP).GE.IVALUE) THEN
+          IEASTN(LOOP) = IEASTN(LOOP) - IVALUE
+          IF( IWESTN(LOOP).GE.IVALUE) IWESTN(LOOP) = IWESTN(LOOP)-IVALUE
+        ENDIF
+C
+        IVALUE=NGPTS(SOUTH(LOOP))
+        IF( IEASTS(LOOP).GE.IVALUE) THEN
+          IEASTS(LOOP) = IEASTS(LOOP) - IVALUE
+          IF( IWESTS(LOOP).GE.IVALUE) IWESTS(LOOP) = IWESTS(LOOP)-IVALUE
+        ENDIF
+C
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 4. Interpolate using neighbouring points.
+C     _______________________________________________________
+C
+  400 CONTINUE
+C
+C       Use bi-linear interpolation from four neighbouring points.
+C
+#ifdef __uxp__
+      DO LOOP = 1, INROW
+        ONW(LOOP) =
+     X    FIELD(KOFSET(NORTH(LOOP))+IWESTN(LOOP)) * DEASTN(LOOP)
+        ONE(LOOP) =
+     X    FIELD(KOFSET(NORTH(LOOP))+IEASTN(LOOP)) * DWESTN(LOOP)
+        OSW(LOOP) =
+     X    FIELD(KOFSET(SOUTH(LOOP))+IWESTS(LOOP)) * DEASTS(LOOP)
+        OSE(LOOP) =
+     X    FIELD(KOFSET(SOUTH(LOOP))+IEASTS(LOOP)) * DWESTS(LOOP)
+C
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        NEWFLD(NEXT+LOOP-1) = 
+     X        (ONW(LOOP) + ONE(LOOP)) * DSOUTH(LOOP) +
+     X        (OSW(LOOP) + OSE(LOOP)) * DNORTH(LOOP)
+      ENDDO
+#else
+      DO LOOP = 1, INROW
+        NEWFLD(NEXT+LOOP-1) =
+     X    ( ( OFIELD(NORTH(LOOP),IWESTN(LOOP)) * DEASTN(LOOP) +
+     X        OFIELD(NORTH(LOOP),IEASTN(LOOP)) * DWESTN(LOOP) )
+     X      * DSOUTH(LOOP) +
+     X      ( OFIELD(SOUTH(LOOP),IWESTS(LOOP)) * DEASTS(LOOP) +
+     X        OFIELD(SOUTH(LOOP),IEASTS(LOOP)) * DWESTS(LOOP) )
+     X      * DNORTH(LOOP) )
+      ENDDO
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 9. Closedown.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/ngrotat.F b/interpolation/ngrotat.F
new file mode 100755
index 0000000..8333594
--- /dev/null
+++ b/interpolation/ngrotat.F
@@ -0,0 +1,242 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION NGROTAT(OLDFLD, NEWFLD, NUMPTS, POLELAT, POLELON,
+     X                         TYPE, NGAUSS)
+C
+C---->
+C**** NGROTAT
+C
+C     PURPOSE
+C     _______
+C
+C     Generates a rotated gaussian grid.
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = NGROTAT(OLDFLD,NEWFLD,NUMPTS,POLELAT,POLELON,TYPE,NGAUSS)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     OLDFLD  = Original gaussian grid field.
+C     NUMPTS  = Total number of points in the original field.
+C     POLELAT = Latitude of the South Pole of rotation.
+C     POLELON = Longitude of the South Pole of rotation.
+C     TYPE    = 'R' if the gaussian field is reduced (quasi) gaussian.
+C             = 'F' if the gaussian field is regular (full) gaussian.
+C     NGAUSS  = Gaussian grid number (number of latitude rows between
+C               the pole and the equator).
+C
+C     Output parameters
+C     ________________
+C    
+C     NEWFLD  = New gaussian grid field.
+C               (This can be the same array as OLDFLD).
+C
+C     Function returns zero if interpolation ran OK.
+C
+C
+C     METHOD
+C     ______
+C
+C     The nearest gaussian latitude row is found.
+C
+C     Work space is dynamically allocated. It is retained for future
+C     calls.
+C
+C     EXTERNALS
+C     _________
+C
+C     IGGLAT  - Compute Gaussian latitudes for a given truncation.
+C     NGVALUE - Calculates the interpolated value at a point of the new
+C               gaussian grid.
+C     INTLOG  - Logs output messages
+C     INTLOGR - Logs output messages
+C     JMEMHAN - Dynamically allocate work array
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     The input field is assumed to be global in extent, and a known
+C     definition, either N160 or N80 (reduced or regular).
+C     The output field has the same type and dimensions as the input
+C     field.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMAXGG
+      PARAMETER( JPROUTINE = 38500 )
+      PARAMETER (JPMAXGG = 1280)
+C
+C     Subroutine arguments
+C
+      REAL OLDFLD, NEWFLD, POLELAT, POLELON
+      INTEGER NUMPTS, NGAUSS
+      DIMENSION OLDFLD(NUMPTS), NEWFLD(NUMPTS)
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      REAL GLATS(JPMAXGG)
+      INTEGER NGPTS(JPMAXGG)
+      INTEGER OLDGAUS
+      DATA OLDGAUS/0/
+      CHARACTER*1 OLDTYPE
+      DATA OLDTYPE/' '/
+      SAVE GLATS, NGPTS, OLDGAUS, OLDTYPE
+C
+      INTEGER NEXT, NEXLAT, INROW, LOOP, KRET
+      REAL STEPLON, CUTOFF, RLAT, RLON
+      DIMENSION RLON(JPMAXGG*2)
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      REAL DUMI
+      POINTER (IDUMI, DUMI)
+      DIMENSION DUMI(1)
+      SAVE IDUMI, ISIZE
+C
+C     Externals
+C
+      INTEGER IGGLAT
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      NGROTAT = 0
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'NGROTAT: Number of pts in original field = ',NUMPTS)
+      CALL INTLOGR(JP_DEBUG,
+     X  'NGROTAT: Latitude of the South Pole of rotation = ',POLELAT)
+      CALL INTLOGR(JP_DEBUG,
+     X  'NGROTAT: Longitude of the South Pole of rotation = ',POLELON)
+      CALL INTLOG(JP_DEBUG,'NGROTAT: Get gaussian grid type:',JPQUIET)
+      CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+      CALL INTLOG(JP_DEBUG,'NGROTAT: grid number:',NGAUSS)
+C
+C     Get gaussian grid definition (first time only)
+C
+      IF( (OLDGAUS.NE.NGAUSS).OR.(OLDTYPE.NE.TYPE)) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'NGROTAT: Get definitions for gaussian grid type:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+        CALL INTLOG(JP_DEBUG,'NGROTAT: grid number:',NGAUSS)
+C
+        KRET = IGGLAT(NGAUSS*2, GLATS, 0, 1)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR, 'NGROTAT: IGGLAT call failed',KRET)
+          NGROTAT = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+        DO LOOP = 1, NGAUSS
+          NGPTS(LOOP) = ISEC2(22+LOOP)
+          NGPTS(2*NGAUSS+1-LOOP) = NGPTS(LOOP)
+        ENDDO
+        OLDGAUS = NGAUSS
+        OLDTYPE = TYPE
+      ENDIF
+C
+C     Allocate work space if not already done.
+C
+      IF( ISIZE.LT.NUMPTS ) THEN
+        ISIZE = NUMPTS
+        CALL JMEMHAN(18,IDUMI,ISIZE,1,KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'NGROTAT: Memory allocation failed: status = ',KRET)
+          NGROTAT = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Move the original field to the work array
+C
+      DO LOOP = 1, NUMPTS
+        DUMI(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 2. Work through latitude lines from north to south
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO NEXLAT = 1, NGAUSS*2
+        INROW = NGPTS(NEXLAT)
+        STEPLON = 360.0/INROW
+        RLAT = GLATS(NEXLAT)
+C
+C       Fill in longitudes along current line of latitude
+C
+        DO LOOP = 1, INROW
+          RLON(LOOP) = (LOOP-1)*STEPLON
+        ENDDO
+C
+C       Rotate the current line of latitude
+C
+        CALL NGVALUE(NEWFLD,NEXT,INROW,RLAT,RLON,
+     X               POLELAT,POLELON,NGAUSS,TYPE,DUMI,GLATS,NGPTS)
+C
+        NEXT = NEXT + INROW
+C
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,'NGROTAT: Return from NGROTAT:',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/ngvalue.F b/interpolation/ngvalue.F
new file mode 100755
index 0000000..76a31e4
--- /dev/null
+++ b/interpolation/ngvalue.F
@@ -0,0 +1,157 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NGVALUE(NEWFLD, NEXT, INROW, RLAT, RLON,
+     X                   POLELAT, POLELON, NGAUSS, TYPE, FIELD,
+     X                   GLATS, NGPTS)
+C
+C---->
+C**** NGVALUE
+C
+C     PURPOSE
+C     _______
+C
+C     Rotates one line of latitude in a gaussian grid.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL NGVALUE(NEWFLD, NEXT, INROW, RLAT, RLON,
+C    X             POLELAT,POLELON,NGAUSS,TYPE,FIELD,GLATS,NGPTS)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     NEWFLD  - The field of values being created
+C     NEXT    - Start offset of the latitude row being created
+C     INROW   - The number of points in the latitude row
+C     RLAT    - Target point latitude in the rotated grid
+C     RLON    - Target point longitude in the rotated grid
+C     POLELAT - Latitude of the rotated South Pole
+C     POLELON - Longitude of the rotated South Pole
+C     NGAUSS  - Original unrotated gaussian field number
+C     TYPE    - Original unrotated gaussian field type
+C               = 'F' for full (regular) gaussian field
+C               = 'R' for reduced (quasi) gaussian field
+C     FIELD   - Original unrotated gaussian field values
+C     GLATS   - Gaussian latitudes for original field
+C     NGPTS   - Number of points along original field latitudes
+C
+C     Output parameters
+C     ________________
+C
+C     NEWFLD(NEXT) to NEWFLD(NEXT+INROW-1) contains the latitude row
+C     values.
+C
+C
+C     METHOD
+C     ______
+C
+C     Rotates the lat/long positions of points along a latitude row in
+C     a rotated gaussian grid back to positions in the unrotated grid
+C     and then interpolates values from the original grid.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     LL2XYZ  - Converts a latitude/longitude position to (x,y,z)
+C               wrt axes through the centre of the globe. The z-axis
+C               runs from the south to north pole. The x- and y-axes
+C               are in the plane of the equator with the x-axis
+C               pointing out through lat/long (0,0).
+C     YROTATE - Rotates the globe about the new y-axis.
+C     XYZ2LL  - Converts an (x,y,z) position to a latitude/longitude.
+C     NGINTRP - Interpolates a value from an existing grid.
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     The input field is assumed to be global in extent, and a known
+C     definition, either N160 or N80 (reduced or regular).
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPMAXGG
+      PARAMETER( JPMAXGG = 1280 )
+C
+C     Function arguments
+C
+      REAL RLAT, POLELAT, POLELON
+      REAL NEWFLD(*), RLON(*), FIELD(*), GLATS(*)
+      INTEGER NEXT, INROW, NGAUSS, NGPTS(*)
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      REAL X(JPMAXGG), Y(JPMAXGG), Z(JPMAXGG)
+      REAL RX(JPMAXGG),RY(JPMAXGG),RZ(JPMAXGG)
+      REAL OLAT(JPMAXGG),OLON(JPMAXGG)
+      INTEGER LOOP
+C
+C     Convert the rotated row points lat/longs to (x,y,z) coordinates
+C
+      CALL LL2XYZ(RLAT,RLON,X,Y,Z,INROW)
+C
+C     Rotate the rotated row points back through the original latitude
+C     rotation
+C
+      CALL YROTATE(-(90.0+POLELAT),X,Y,Z,RX,RY,RZ,INROW)
+C
+C     Convert the rotated row points adjusted (x,y,z) coordinates to
+C     lat/long in the original grid (after longitude rotation)
+C
+      CALL XYZ2LL(RX,RY,RZ,OLAT,OLON,INROW)
+C
+C     Adjust the rotated line longitudes to remove the longitude
+C     rotation
+C
+      DO LOOP = 1, INROW
+        OLON(LOOP) = OLON(LOOP) + POLELON
+        IF( OLON(LOOP).LT.0.0 )   OLON(LOOP) = OLON(LOOP) + 360.0
+        IF( OLON(LOOP).GE.360.0 ) OLON(LOOP) = OLON(LOOP) - 360.0
+      ENDDO
+C
+C     Interpolate the original unrotated grid to the points in the
+C     rotated line
+C
+      CALL NGINTRP(NEWFLD,NEXT,INROW,OLAT,OLON,NGAUSS,TYPE,FIELD,
+     X             GLATS,NGPTS)
+C
+      RETURN
+      END
diff --git a/interpolation/nifld.common b/interpolation/nifld.common
new file mode 100755
index 0000000..5c7213f
--- /dev/null
+++ b/interpolation/nifld.common
@@ -0,0 +1,256 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C**** "nifld.common"
+C
+C     Purpose
+C     _______
+C
+C     This file contains all the input field definition variables.
+C
+C
+C     Interface
+C     _________
+C
+C
+C     Common block usage
+C     __________________
+C
+C     JDCFLAGS
+C     --------
+C
+C     LCHANGE      - This flag indicates whether a change of
+C                    interpolating process has occurred.
+C     LSMCHNG      - This flag indicates whether a change of LSM flag
+C                    has occurred.
+C     LSM          - This flag indicates whether a land sea mask
+C                    should be used for interpolation.
+C     LSMSET       - This flag indicates whether the user has defined
+C                    the LSM flag.
+C     LSMPAR       - This flag indicates whether the LSM variable is
+C                    being interpolated.
+C     LSMPARSET    - This flag indicates whether the user has defined
+C                    the LSMPAR flag.
+C     LPREC        - This flag indicates whether a precipitation
+C                    variable is being interpolated.
+C     LPRECSET     - This flag indicates whether the user has defined
+C                    the LPREC flag.
+C     LWIND        - This flag indicates whether a wind variable is
+C                    being interpolated.
+C     LWINDSET     - This flag indicates whether the user has defined
+C                    the LWIND flag.
+C     LNIGAUS      - Flag to say whether or not user specified NIGAUS
+C     LNGSPEC      - Flag to say whether or not user specified NGSPEC
+C     LIGIVEL      - Flag to say whether or not user specified latitudes
+C                    for the input gaussian grid
+C     LIGIVEP      - Flag to say whether or not user specified number of
+C                    points along latitudes for the input gaussian grid
+C     LIMISSV      - Flag to say whether or not user specified input
+C                    field missing data value
+C     LIMISSA      - Flag to say whether or not user specified input
+C                    field missing data value grib_api merging
+C     LNIISCL      - Flag to say whether or not user specified islscp
+C                    processing.
+C     LNOAREA      - Flag to say whether or not user specified NOAREA
+C     LNOGAUS      - Flag to say whether or not user specified NOGAUSS
+C     LNOREDL      - Flag to say whether or not user specified NOREDLL
+C     LOGIVEL      - Flag to say whether or not user specified latitudes
+C                    for the output gaussian grid
+C     LOGIVEP      - Flag to say whether or not user specified number of
+C                    points along latitudes for the output gaussian grid
+C     LNORESO      - Flag to say whether or not user specified NORESO
+C     LNOACC       - Flag to say whether or not user specified NOACC
+C     LNOREPR      - Flag to say whether or not user specified NOREPR
+C     LNOTABL      - Flag to say whether or not user specified NOTABLE
+C     LNOPARA      - Flag to say whether or not user specified NOPARAM
+C     LNOLEVL      - Flag to say whether or not user specified NOLEVEL
+C     LNOLEVT      - Flag to say whether or not user specified NOLEVT
+C     LNOGRID      - Flag to say whether or not user specified NOGRID
+C     LARESOL      - Flag to say whether or not user specified 'Autoresol'
+C     LNOBITMP     - Flag to say whether or not user specified NOBITMP
+C     LNOFRAME     - Flag to say whether or not user specified NOFRAME
+C     LNOSTYLE     - Flag to say whether or not user specified NOSTYLE
+C     LSTAGGL      - Flag to say if is the input field staggered grid
+C     LOCEAN       - Flag to say if is the ocean input field
+C
+C     JDNIFLD
+C     -------
+C
+C     NILOCAL      - Input field ECMWF local definition number
+C     NISTREM      - Input field ECMWF stream number
+C     NIFORM       - Input field data format (0-Unpacked, 1-Grib).
+C     NIREPR       - Input field representation. Supported
+C                    representations are
+C                       Spherical harmonic
+C                       Regular Gaussian grid
+C                       Reduced Gaussian grid
+C                       Latitude/longitude grid
+C     NIGAUSS      - Input field Gaussian truncation.
+C     NGSPEC       - Reduced gaussian grid specification
+C     NIRESO       - Input field spherical harmonic resolution.
+C     NIGRID       - Input field grid definition (WE/NS).
+C     NIAREA       - Input field area definition (N/W/S/E).
+C     NINS         - Number of grid points in NS direction for input
+C                    field.
+C     NIWE         - Number of grid points in WE direction for input
+C                    field.
+C     NIPARAM      - Input field parameter number
+C     NISCNM       - Input field scanning mode.
+C     NITABLE      - Input field table number.
+C     NILEVEL      - Input field level.
+C     NILEVT       - Input field level type.
+C     NIACC        - Number of packing bits to be used for input
+C                    GRIB field.
+C     NISLSCP      - Index returned from PBOPEN for islscp land-sea mask
+C                    GRIB product file
+C     NIPOGRB      - Pointer to memory allocated to hold islscp old land-sea
+C                    mask GRIB product
+C     NIPOGRS      - Size in bytes of memory allocated to hold islscp old
+C                    land-sea mask GRIB product
+C     NIPNGRB      - Pointer to memory allocated to hold islscp new land-sea
+C                    mask GRIB product
+C     NIMATR       - Number of matrix values
+C     NIPNGRS      - Size in bytes of memory allocated to hold islscp new
+C                    land-sea mask GRIB product
+C
+C     PILATS       - Array of reduced gaussian grid latitudes(N to S pole)
+C                    (RIGAUSS in grspace.h used instead now)
+C     NILPTS       - Array of reduced gaussian grid no.of pts. per latitude
+C                    (MILLEN in grspace.h used instead now)
+C     NIPCNT       - Total number of pts in input reduced gaussian field
+C     NJDCDOT      - 'magic number', set when basic initialisation has been
+C                     done
+C     NIDATE       - Input field date
+C     NICOMP       - Spectral truncation above which interpolation coefficients
+C                    are calculated 'on the fly'
+C     RISTRET      - Stretching factor used in the input field
+C     RMISSGV      - Input field missing data value
+C
+C     JNPRECP
+C     -------
+C     RPRECIP      - Precipitation threshold value
+C
+C
+C     NILOCAL      - Input field ECMWF local definition number
+C
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       Aug 1994
+C
+C
+C     Modifications
+C     _____________
+C
+C     None.
+C
+C
+C     _______________________________________________________
+C
+C*    Section 1. Flag variables
+C     _______________________________________________________
+C
+      LOGICAL
+     1  LCHANGE , LSMCHNG , LSM     , LWIND   , LPREC   , LSMPAR  ,
+     2  LSMSET  , LWINDSET, LPRECSET,LSMPARSET, LNOREDL , LNIGAUS ,
+     3  LIGIVEL , LIGIVEP , LNOGAUS , LOGIVEL , LOGIVEP , LNORESO ,
+     4  LNOACC  , LNOREPR , LNOTABL , LNOPARA , LNOLEVL , LNOLEVT ,
+     5  LNOGRID , LARESOL , LNOBITMP, LNOFRAME, LNOSTYLE, LNOAREA ,
+     6  LFILEIO , LMEMORY , LSHARED , LON_FLY , LMAPPED,  LNGSPEC ,
+     7  LIFIRST , LIMISSV , LNIISCL , LSTAGGL , LOCEAN,   LIMISSA ,
+     8  LACCUR
+C
+      COMMON /JDCFLAGS/
+     1  LCHANGE , LSMCHNG , LSM     , LWIND   , LPREC   , LSMPAR  ,
+     2  LSMSET  , LWINDSET, LPRECSET,LSMPARSET, LNOREDL , LNIGAUS ,
+     3  LIGIVEL , LIGIVEP , LNOGAUS , LOGIVEL , LOGIVEP , LNORESO ,
+     4  LNOACC  , LNOREPR , LNOTABL , LNOPARA , LNOLEVL , LNOLEVT ,
+     5  LNOGRID , LARESOL , LNOBITMP, LNOFRAME, LNOSTYLE, LNOAREA ,
+     6  LFILEIO , LMEMORY , LSHARED , LON_FLY , LMAPPED,  LNGSPEC ,
+     7  LIFIRST , LIMISSV , LNIISCL , LSTAGGL , LOCEAN,   LIMISSA ,
+     8  LACCUR
+C
+      SAVE /JDCFLAGS/
+C
+C     _______________________________________________________
+C
+C*    Section 2. Field definition variables
+C     _______________________________________________________
+C
+      INTEGER
+     X  NILOCAL, NISTREM, NGSPEC ,
+     X  NIFORM , NIREPR , NIGRID , NIAREA , NIGAUSS, NIRESO ,
+     X  NIWE   , NINS   , NISCNM , NIPARAM, NITABLE, NIACC  ,
+     X  NJDCDOT, NIPCNT , NILEVEL, NILEVT , NIDATE , NICOMP ,
+     X  NISLSCP, NIPOGRS, NIPNGRS, NIMATR
+      REAL RISTRET, RMISSGV
+      DIMENSION NIGRID(2)
+      DIMENSION NIAREA(4)
+C
+      COMMON /JDNIFLD/
+     X  RISTRET, RMISSGV,
+     X  NILOCAL, NISTREM, NGSPEC ,
+     X  NIFORM , NIREPR , NIGAUSS, NIRESO ,
+     X  NIWE   , NINS   , NISCNM , NIPARAM, NITABLE, NIACC  ,
+     X  NJDCDOT, NIPCNT , NILEVEL, NILEVT , NIDATE , NICOMP ,
+     X  NISLSCP, NIPOGRS, NIPNGRS, NIGRID , NIAREA , NIMATR
+C
+      SAVE /JDNIFLD/
+C
+#ifdef POINTER_64
+      INTEGER*8 NIPOGRB, NIPNGRB
+#else
+      INTEGER NIPOGRB, NIPNGRB
+#endif
+      COMMON /JDNIPTR/
+     X  NIPOGRB, NIPNGRB 
+C
+      SAVE /JDNIPTR/
+C
+      REAL ZPRECIP
+      COMMON /JNPRECP/ ZPRECIP
+      SAVE /JNPRECP/
+
+C     _______________________________________________________
+C
+C*    Section 3. Ocean
+C     _______________________________________________________
+C
+      INTEGER
+     X  NIOCO3, NIOCO4,
+     X  NIOCO4F, NIOCO3F, NIOCO4L, NIOCO3L,
+     X  NIOIINC, NIOJINC,
+     X  NIOIRGR, NIONOST,NICOORN,
+     X  NIVCDEF
+      INTEGER OCCOOR
+      DIMENSION OCCOOR(1000)
+C
+      COMMON /JOCEANI/
+     X  NIOCO3, NIOCO4,
+     X  NIOCO4F, NIOCO3F, NIOCO4L, NIOCO3L,
+     X  NIOIINC, NIOJINC,
+     X  NIOIRGR, NIONOST, NICOORN,
+     X  NIVCDEF,
+     X  OCCOOR
+C
+      SAVE /JOCEANI/
diff --git a/interpolation/nmakgg.F b/interpolation/nmakgg.F
new file mode 100755
index 0000000..96d3cfb
--- /dev/null
+++ b/interpolation/nmakgg.F
@@ -0,0 +1,143 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NMAKGG( KTRUNC, KNEXT, PLAT, KNUM, PLEG, KRET)
+C
+C---->
+C**** NMAKGG
+C
+C     PURPOSE
+C     _______
+C
+C     This routine creates legendre functions for latitude rows from
+C     the given latitude.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL NMAKGG( KTRUNC, KNEXT, PLAT, KNUM, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KTRUNC  - Truncation.
+C     KNEXT   - Index (in PLAT) of next latitude at which to start
+C     PLAT    - Array of gaussian latitudes
+C     KNUM    - Number of latitudes to produce
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     See below.
+C
+C     Externals
+C     _________
+C
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     None at present.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      June 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30500 )
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KNEXT, KRET, KNUM
+      REAL PLEG, PLAT
+      DIMENSION PLEG(*), PLAT(*)
+C
+C     Local variables
+C
+      INTEGER NEXT, ILAT
+      REAL ALAT, DEG2RAD
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+ 100  CONTINUE
+C
+      IF ( NDBG .GT. 1) THEN
+        CALL INTLOG(JP_DEBUG,'NMAKGG: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'NMAKGG: Truncation = ', KTRUNC)
+        CALL INTLOG(JP_DEBUG,'NMAKGG: Number of latitudes = ', KNUM)
+        CALL INTLOG(JP_DEBUG, 'NMAKGG: Next latitude = ', KNEXT)
+        CALL INTLOGR(JP_DEBUG, 'NMAKGG: Lat.in degrees = ', PLAT(KNEXT))
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+      DEG2RAD = PPI / 180.0
+C
+      NEXT = 1
+      DO ILAT = 1, KNUM
+        ALAT = PLAT(KNEXT+ILAT-1) * DEG2RAD
+C
+        IF ( NDBG .GT. 1) CALL INTLOGR(JP_DEBUG,
+     X    'NMAKGG: Next latitude constructed = ', ALAT)
+C
+        CALL JSPLEG1( PLEG(NEXT), ALAT, KTRUNC)
+        NEXT = NEXT + (KTRUNC+1)*(KTRUNC+4)/2
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/nmakll.F b/interpolation/nmakll.F
new file mode 100755
index 0000000..971bf0b
--- /dev/null
+++ b/interpolation/nmakll.F
@@ -0,0 +1,154 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE NMAKLL( KTRUNC, PINTVL, PLAT, KNUM, PLEG, KRET)
+C
+C---->
+C**** NMAKLL
+C
+C     PURPOSE
+C     _______
+C
+C     This routine creates legendre functions for latitude rows from
+C     the given latitude.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL NMAKLL( KTRUNC, PINTVL, PLAT, KNUM, PLEG, KRET)
+C
+C     Input parameters
+C     ________________
+C
+C     KTRUNC  - Truncation.
+C     PINTVL  - Grid interval (degrees)
+C     PLAT    - Start latitude in degrees.
+C     KNUM    - Number of latitudes
+C
+C     Output parameters
+C     ________________
+C
+C     PLEG     - Array of legendre functions for the latitude.
+C     KRET     - Return status code
+C                0 = OK
+C
+C     Common block usage
+C     __________________
+C
+C     JDCNDBG
+C
+C     Method
+C     ______
+C
+C     See below.
+C
+C     Externals
+C     _________
+C
+C     INTLOG   - Output log message
+C     INTLOGR  - Output log message (with real value)
+C
+C     Reference
+C     _________
+C
+C     None.
+C
+C     Comments
+C     ________
+C
+C     None at present.
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      *ECMWF*      June 1999
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 30500 )
+C
+C     Subroutine arguments
+C
+      INTEGER KTRUNC, KRET, KNUM
+      REAL PLEG, PINTVL, PLAT
+      DIMENSION PLEG(*)
+C
+C     Local variables
+C
+      REAL ZLAST, ZLAT, ALAT, DEG2RAD
+      INTEGER NEXTRW, NEXT, FIRST, LAST
+C
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+ 100  CONTINUE
+C
+      IF( NDBG.GT.1 ) THEN
+        CALL INTLOG(JP_DEBUG,'NMAKLL: Input parameters:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,'NMAKLL: Truncation = ', KTRUNC)
+        CALL INTLOG(JP_DEBUG,'NMAKLL: Number of latitudes = ', KNUM)
+        CALL INTLOGR(JP_DEBUG,
+     X    'NMAKLL: Grid interval (degrees) = ', PINTVL)
+        CALL INTLOGR(JP_DEBUG,
+     X    'NMAKLL: Latitude in degrees = ', PLAT)
+      ENDIF
+C
+      IF( PLAT.LT.0.0 ) THEN
+        ZLAT = 0.0
+      ELSE
+        ZLAT = PLAT
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Processing.
+C     _______________________________________________________
+C
+      DEG2RAD = PPI / 180.0
+C
+      ZLAST = ZLAT - (KNUM-1)*PINTVL
+      NEXTRW = 1
+      FIRST = NINT(ZLAT/PINTVL)
+      LAST  = NINT(ZLAST/PINTVL)
+      DO NEXT = FIRST, LAST, -1
+        ALAT = (NEXT*PINTVL) * DEG2RAD
+C
+        IF( NDBG.GT.1 ) CALL INTLOGR(JP_DEBUG,
+     X    'NMAKLL: Next latitude constructed = ', (NEXT*PINTVL))
+C
+        CALL JSPLEG1( PLEG(NEXTRW), ALAT, KTRUNC)
+        NEXTRW = NEXTRW + (KTRUNC+1)*(KTRUNC+4)/2
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+ 900  CONTINUE
+      KRET = 0
+C
+ 990  CONTINUE
+      RETURN
+      END
diff --git a/interpolation/nofld.common b/interpolation/nofld.common
new file mode 100755
index 0000000..ce5d282
--- /dev/null
+++ b/interpolation/nofld.common
@@ -0,0 +1,158 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C
+C**** "nofld.common"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains all the output field definition variables.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "nofld.common"
+C
+C     Common block usage
+C     __________________
+C
+C     JDNOFLD
+C     -------
+C
+C     NOFORM       - Output field data format (0-Unpacked, 1-Grib).
+C     NOREPR       - Output field representation. Supported
+C                    representations are
+C                       Spherical harmonic
+C                       Regular Gaussian grid
+C                       Reduced Gaussian grid
+C                       Latitude/longitude grid
+C     NOGAUSS      - Output field Gaussian truncation.
+C     NOMEGA       - Intermediate field Gaussian truncation.
+C     NORESO       - Output field spherical harmonic resolution.
+C     NOGRID       - Output field grid definition (WE/NS).
+C     NOAREA       - Output field area definition (N/W/S/E).
+C     NONS         - Number of grid points in NS direction for output
+C                    field.
+C     NOWE         - Number of grid points in WE direction for output
+C                    field.
+C     NO1NS        - Index of first output field grid point in NS
+C                    direction of the input field.
+C     NO1WE        - Index of first output field grid point in WE
+C                    direction of the input field.
+C     NOACC        - Number of packing bits to be used for output
+C                    GRIB field.
+C     NOPARAM      - Output field parameter number
+C     NOSCNM       - Output field scanning mode.
+C     NOTABLE      - Output field table number.
+C     NOLEVEL      - Output field level.
+C     NOLEVT       - Output field level type.
+C     POLATS       - Array of reduced gaussian grid latitudes
+C                    (ROGAUSS in grspace.h used instead now)
+C                    (N to S pole)
+C     NOLPTS       - Array of reduced gaussian grid number of points
+C                    per latitude
+C     NOPCNT       - Total number of pts in input reduced gaussian field
+C     NOROTA       - Output field rotation definition (long/lat).
+C     LNOROTA      - Flag which says whether rotation has been specified
+C     LO12PT       - Flag chosing between 12-point and 4-point horixontal
+C                    interpolation for rotations
+C     LDOUBLE      - Flag chosing intermediate interpolation between
+C                    two reduced gaussian grids
+C     LMETHOD      - Flag chosing between bilinear and nearest neighbour
+C                     for interpolation method
+C     LNNLSM       - Flag using NN with same type of lsm in 
+C                    hirlsm(rotated ll)
+C     LINTOUT      - Flag which says whether intout.F has been called.
+C     NODATE       - Input field date
+C     NOMISS       - Set non-zero if the output field is all missing
+C                    data because the input field was all missing data.
+C     NOHFUNC      - Used in CALL GRIBEX to force standard encoding or
+C                    2nd-order packing for grid-point data.
+C     NOBITMP      - Name of file containing bitmap definition
+C     NOFRAME      - Width in grid points of a frame boundary.
+C     NOSTYLE      - Style to be used in generating grid point fields
+C                    (Mars [default] or dissemination).
+C
+C     REFERENCE
+C     _________
+C
+C     NONE
+C
+C     COMMENTS
+C     ________
+C
+C     Contains section 1
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers     ECMWF        Oct 1993
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     NONE
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Field definition variables
+C     _______________________________________________________
+C
+C
+      INTEGER
+     X  NOFORM , NOREPR , NOGRID , NOAREA , NOAAPI , NOREDLL, NOGAUSS,
+     X  NOMEGA, NORESO ,
+     X  NOWE   , NONS   , NOSCNM , NOPARAM, NOTABLE, NO1WE  , NO1NS  ,
+     X  NOACC  , NOLPTS , NOPCNT , NOROTA , NOLEVEL, NOLEVT , NODATE ,
+     X  NOMISS , NOFRAME, NOSTYLE, OUTLROT
+      DIMENSION NOGRID(2)
+      DIMENSION NOAREA(4), NOAAPI(4)
+      DIMENSION NOLPTS( JPLAT )
+      DIMENSION NOROTA(2)
+C
+      LOGICAL LINTOUT, LNOROTA, LO12PT,LMETHOD,LNNLSM,LDOUBLE,LUVCOMP,
+     X  LGLOBL
+C
+      CHARACTER*1 NOHFUNC
+      CHARACTER*256 NOBITMP
+C
+      COMMON /JDNOFLD/
+     X  NOFORM , NOREPR , NOGRID , NOAREA , NOAAPI , NOREDLL, NOGAUSS,
+     X  NOMEGA, NORESO ,
+     X  NOWE   , NONS   , NOSCNM , NOPARAM, NOTABLE, NO1WE  , NO1NS  ,
+     X  NOACC  , NOLPTS , NOPCNT , NOROTA , NOLEVEL, NOLEVT , NODATE ,
+     X  NOMISS , NOFRAME, NOSTYLE, OUTLROT,
+     X  LINTOUT,LNOROTA,LO12PT,LMETHOD,LNNLSM,LDOUBLE,LUVCOMP,LGLOBL,
+     X  NOHFUNC, NOBITMP
+C
+      SAVE /JDNOFLD/
+C     _______________________________________________________
+C
+C*    Section 2. Ocean
+C     _______________________________________________________
+C
+      INTEGER
+     X  NOOCO3, NOOCO4,
+     X  NOOCO4F, NOOCO3F, NOOCO4L, NOOCO3L,
+     X  NOOIINC, NOOJINC,
+     X  NOOIRGR, NOONOST
+      REAL OCCOOO
+      DIMENSION OCCOOO(1000)
+C
+      COMMON /JOCEANO/
+     X  NOOCO3, NOOCO4,
+     X  NOOCO4F, NOOCO3F, NOOCO4L, NOOCO3L,
+     X  NOOIINC, NOOJINC,
+     X  NOOIRGR, NOONOST,
+     X  OCCOOO
+C
+      SAVE /JOCEANO/
diff --git a/interpolation/nptwe32.F b/interpolation/nptwe32.F
new file mode 100755
index 0000000..df8913e
--- /dev/null
+++ b/interpolation/nptwe32.F
@@ -0,0 +1,128 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION NPTWE32(WEST,EAST,GRIDSTEP)
+C
+C---->
+C**** NPTWE32
+C
+C     Purpose
+C     -------
+C
+C     Calculate number of grid points in the range from west to east.
+C     (32-bit REALs version)
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = NPTWE32(WEST,EAST,GRIDSTEP)
+C
+C     Input
+C     -----
+C
+C     WEST     - Western boundary in degrees
+C     EAST     - Eastern boundary in degrees
+C     GRIDSTEP - Grid interval in degrees
+C
+C
+C     Output
+C     ------
+C
+C     Function returns the number of grid points in the east-west
+C     interval.
+C
+C
+C     Method
+C     ------
+C
+C     The grid is assumed to start at Greenwich.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Mar 1998
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      REAL*4 EAST, WEST, GRIDSTEP
+C
+C     Local variables
+C
+      INTEGER NL
+      REAL*8 DEAST, DWEST
+      REAL*8 LEFT, RIGHT, STEP, EPS
+      DATA EPS/1.0E-3/
+C
+C     Statement function
+      LOGICAL EQUAL
+      REAL*8 A, B
+      EQUAL(A,B) = ( ABS(A-B) .LT.(ABS(A)*EPS) )
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Make all longitudes positive for calculation of difference
+C
+      DEAST = EAST
+      DWEST = WEST
+      RIGHT = DEAST + 360.0
+      LEFT  = DWEST + 360.0
+      STEP  = GRIDSTEP
+      IF( RIGHT.LT.LEFT) RIGHT = RIGHT + 360.0
+C
+C ------------------------------------------------------------------
+C     Section 2.   Calculate the number of points in the interval
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Equal boundaries
+C
+      IF( EQUAL(LEFT,RIGHT) ) THEN
+        NPTWE32 = 1
+        GOTO 900
+      ENDIF
+C
+C     Calculate offset of westernmost gridpoint
+C
+      NL = INT((LEFT+EPS)/STEP)
+      IF( .NOT. EQUAL(LEFT,(NL*STEP)) ) NL = NL + 1
+C
+      RIGHT = RIGHT - (NL*STEP)
+      NPTWE32 = INT((RIGHT+EPS)/STEP) + 1
+C
+C ------------------------------------------------------------------
+C     Section 9.   Return
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/numptns.F b/interpolation/numptns.F
new file mode 100755
index 0000000..10894ce
--- /dev/null
+++ b/interpolation/numptns.F
@@ -0,0 +1,106 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION NUMPTNS(NORTH,SOUTH,GRIDSTEP)
+C
+C---->
+C**** NUMPTNS
+C
+C     Purpose
+C     -------
+C
+C     Calculate number of grid points in the range from north to south.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = NUMPTNS(NORTH,SOUTH,GRIDSTEP)
+C
+C     Input
+C     -----
+C
+C     NORTH    - Northern boundary in degrees
+C     SOUTH    - Southern boundary in degrees
+C     GRIDSTEP - Grid interval in degrees
+C
+C
+C     Output
+C     ------
+C
+C     Function returns the number of grid points in the north-south
+C     interval.
+C
+C
+C     Method
+C     ------
+C
+C     The grid is assumed to be centred on the Equator.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Dec 1997
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      REAL SOUTH, NORTH, GRIDSTEP
+C
+C     Local variables
+C
+      INTEGER N1, N2
+      REAL TOP, BOTTOM
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      BOTTOM = SOUTH
+      TOP    = NORTH
+      IF( BOTTOM.GT.TOP) THEN
+        BOTTOM = NORTH
+        TOP    = SOUTH
+      ENDIF
+C ------------------------------------------------------------------
+C     Section 2.   Calculate the number of points in the interval
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      N1 = NINT(BOTTOM/GRIDSTEP)
+      N2 = NINT(TOP/GRIDSTEP)
+      NUMPTNS = N2 - N1 + 1
+C
+C ------------------------------------------------------------------
+C     Section 9.   Return
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/numptwe.F b/interpolation/numptwe.F
new file mode 100755
index 0000000..f8fa612
--- /dev/null
+++ b/interpolation/numptwe.F
@@ -0,0 +1,127 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION NUMPTWE(WEST,EAST,GRIDSTEP)
+C
+C---->
+C**** NUMPTWE
+C
+C     Purpose
+C     -------
+C
+C     Calculate number of grid points in the range from west to east.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = NUMPTWE(WEST,EAST,GRIDSTEP)
+C
+C     Input
+C     -----
+C
+C     WEST     - Western boundary in degrees
+C     EAST     - Eastern boundary in degrees
+C     GRIDSTEP - Grid interval in degrees
+C
+C
+C     Output
+C     ------
+C
+C     Function returns the number of grid points in the east-west
+C     interval.
+C
+C
+C     Method
+C     ------
+C
+C     The grid is assumed to start at Greenwich.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     Nov 1997
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      REAL EAST, WEST, GRIDSTEP
+C
+C     Local variables
+C
+      INTEGER NL
+      REAL*8 DEAST, DWEST
+      REAL*8 LEFT, RIGHT, STEP, EPS
+      DATA EPS/1.0E-3/
+C
+C     Statement function
+      LOGICAL EQUAL
+      REAL*8 A, B
+      EQUAL(A,B) = ( ABS(A-B) .LT.EPS )
+C
+C ------------------------------------------------------------------
+C     Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+C     Make all longitudes positive for calculation of difference
+C
+      DEAST = EAST
+      DWEST = WEST
+      RIGHT = DEAST + 360.0
+      LEFT  = DWEST + 360.0
+      STEP  = GRIDSTEP
+      IF( RIGHT.LT.LEFT) RIGHT = RIGHT + 360.0
+C
+C ------------------------------------------------------------------
+C     Section 2.   Calculate the number of points in the interval
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Equal boundaries
+C
+      IF( EQUAL(LEFT,RIGHT) ) THEN
+        NUMPTWE = 1
+        GOTO 900
+      ENDIF
+C
+C     Calculate offset of westernmost gridpoint
+C
+      NL = INT((LEFT+EPS)/STEP)
+      IF( .NOT. EQUAL(LEFT,(NL*STEP)) ) NL = NL + 1
+C
+      RIGHT = RIGHT - (NL*STEP)
+      NUMPTWE = INT((RIGHT+EPS)/STEP) + 1
+C
+C ------------------------------------------------------------------
+C     Section 9.   Return
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/oceanp.F b/interpolation/oceanp.F
new file mode 100755
index 0000000..5f1cc9d
--- /dev/null
+++ b/interpolation/oceanp.F
@@ -0,0 +1,529 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION OCEANP( INOCEAN, INLEN, OTOCEAN, OUTLEN)
+C
+C---->
+C**** OCEANP
+C
+C     Purpose
+C     -------
+C
+C     Interpolate GRIB format input ocean field to GRIB format ocean
+C     field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = OCEANP( INOCEAN, INLEN, OTOCEAN, OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INOCEAN - Input ocean field  (GRIB format).
+C     INLEN   - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OTOCEAN - Output ocean field  (GRIB format).
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Interpolate ocean field.
+C
+C     If requested X grid increment does not match input GRIB
+C     increment, do a full interpolation in both x and y. Otherwise,
+C     interpolate only to make grid regular.
+C
+C     Externals
+C     ---------
+C
+C     JDEBUG  - Tests if debug output required.
+C     GRIBEX  - GRIB decoding/encoding.
+C     INTLOG  - Log error message.
+C     JMEMHAN - Allocate/deallocate scratch memory.
+C     INTOCN  - Carry out ocean field to field interpolation.
+C     IGSETUP - Setup GRIB sections for the output product.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1996
+C
+C     J.D.Chambers     ECMWF        Feb 1997
+C     Allow for 64-bit pointers
+C
+C     J.D.Chambers     ECMWF        Mar 1997
+C     Allow for full or partial interpolation
+C     (F or R option in call to INTOCN).
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INOCEAN, INLEN, OTOCEAN, OUTLEN
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4
+      INTEGER JP_LAT, JP_LONG, JP_GUESS
+      PARAMETER (JPROUTINE = 36900 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+      PARAMETER (JP_LONG = 3) 
+      PARAMETER (JP_LAT  = 4) 
+      PARAMETER (JP_GUESS  = 18049691) 
+cs    PARAMETER (JP_GUESS  = 1675245) 
+cs    PARAMETER (JP_GUESS  = 1237104) 
+cs    PARAMETER (JP_GUESS  = 1038240) 
+C                          `---> allow for 0.25*0.25 interpolated grid
+C
+C     Local variables
+C
+      LOGICAL LHORIZN, LFLIP
+      CHARACTER*1 HFUNC
+      CHARACTER*1 HINTOPT
+      CHARACTER*6 YFLAG
+      INTEGER IOLDN, IOLDW, IOLDS, IOLDE, IOLDEW, IOLDNS
+      INTEGER LOOPLAT, LOOPLON, I, J , IOS,LOOP
+      REAL ZTEMP
+      INTEGER IERR, KPR, IWORD, IOLDSIZ, INEWSIZ, IINTPOL, ISTAGP
+      INTEGER NXP, NYP, INEWP, ITEMP
+      REAL RTOP, RBOTT, RRIGHT, RLEFT, RYRES, RXRES
+      REAL XARR, YARR
+      DIMENSION XARR(JPGRIB_ISEC1), YARR(JPGRIB_ISEC1)
+#ifdef POINTER_64
+      INTEGER*8 INEW, IOLD
+#endif
+      REAL NEW, OLD
+      POINTER ( INEW, NEW )
+      POINTER ( IOLD, OLD )
+      DIMENSION NEW( 1 ), OLD( 1 )
+C
+C     Externals
+C
+      INTEGER RESET_C, IGSETUP, INTOCN, FIXAREA
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     Test if debug output required.
+C
+      CALL JDEBUG()
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'OCEANP: Trying to interpolate an ocean field.',JPQUIET)
+C
+      IF( .NOT.LNOGRID ) THEN
+        CALL INTLOG(JP_FATAL,
+     X    'OCEANP: GRID must be specified to interpolate an ocean field'
+     X    , JPQUIET)
+        OCEANP = JPROUTINE + 1
+        GOTO 960
+      ENDIF
+C
+      OCEANP = 0
+      IERR   = 0
+      KPR    = 0
+      LFLIP = .FALSE.
+C
+C     Save the original area and grid definitions
+C
+      IOLDN  = NOAREA(1)
+      IOLDW  = NOAREA(2)
+      IOLDS  = NOAREA(3)
+      IOLDE  = NOAREA(4)
+      IOLDEW = NOGRID(1)
+      IOLDNS = NOGRID(2)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the input ocean field.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Decode first four sections of GRIB code to find number of values
+C
+      IWORD   = INLEN
+      IERR    = 1
+      IOLDSIZ = OUTLEN
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            OLD, IOLDSIZ, INOCEAN, INLEN, IWORD, 'I',IERR)
+C
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANP: GRIBEX option J decoding failed.',IERR)
+        OCEANP = IERR
+        GOTO 950
+      ENDIF
+C
+C     Check it is an ocean field
+C
+      IF( (ISEC1(24).NE.1).OR.(ISEC1(37).NE.4) ) THEN
+        CALL INTLOG(JP_ERROR, 'OCEANP: Not an ocean field.',JPQUIET)
+        OCEANP = JPROUTINE + 3
+        GOTO 950
+      ENDIF
+C
+C     Horizontal (lat/long) field GRIB setup different from others
+C
+      LHORIZN = (ISEC1(60).EQ.JP_LONG).AND.(ISEC1(61).EQ.JP_LAT)
+      IF( LHORIZN ) CALL INTLOG(JP_DEBUG,
+     X  'OCEANP: Horizontal (lat/long) field interpolation.',JPQUIET)
+C
+C     Get scratch memory for unpacking the input ocean field.
+C
+      IOLDSIZ = ISEC2(2)*ISEC2(3)
+      CALL JMEMHAN( JPSCR4, IOLD, IOLDSIZ, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANP: Scratch memory(4) allocation failed.',JPQUIET)
+        OCEANP = IERR
+        GOTO 950
+      ENDIF
+C
+C     Decode data from GRIB code: -999.9 is a missing data value
+C
+      IWORD = INLEN
+      IERR  = 1
+      ZSEC3(2) = -999.9
+      CALL GRIBEX(ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X            OLD, IOLDSIZ, INOCEAN, INLEN, IWORD, 'D',IERR)
+C
+      IF( (IERR.NE.0).AND.(IERR.NE.-2).AND.(IERR.NE.-4) ) THEN
+        CALL INTLOG(JP_ERROR,'OCEANP: GRIBEX decoding failed.',IERR)
+        OCEANP = IERR
+        GOTO 940
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Prepare the output ocean field.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+C     Setup interpolation options from input GRIB characteristics.
+C
+      IERR = RESET_C(ISEC1, ISEC2, ZSEC2, ISEC4)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANP: Setup interp. options from GRIB failed.',JPQUIET)
+        OCEANP = IERR
+        GOTO 940
+      ENDIF
+C
+C     For horizontal field, match the desired area to the grid
+C
+      IERR = FIXAREA()
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'OCEANP: FIXAREA failed.',JPQUIET)
+        OCEANP = IERR
+        GOTO 940
+      ENDIF
+C
+C     Get scratch memory for output ocean field.
+C     Have to guess how big the interpolated grid will be.
+C
+      INEWSIZ = JP_GUESS
+      CALL JMEMHAN(JPSCR3, INEW, INEWSIZ*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANP: Scratch memory(3) allocation failed.',JPQUIET)
+        OCEANP = IERR
+        GOTO 940
+      ENDIF
+      INEWP = 1
+      ITEMP = 1 + INEWSIZ
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Interpolate ocean field.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      RTOP   = FLOAT( NOAREA(1) ) / PPMULT
+      RBOTT  = FLOAT( NOAREA(3) ) / PPMULT
+      RRIGHT = FLOAT( NOAREA(4) ) / PPMULT
+      RLEFT  = FLOAT( NOAREA(2) ) / PPMULT
+C
+      RYRES = FLOAT( NOGRID(2) ) / PPMULT
+      RXRES = FLOAT( NOGRID(1) ) / PPMULT
+C
+C     Select the interpolation option
+C     (default = 'R' = interpolate only to make grid regular)
+C     If requested X grid increment does not match input GRIB
+C     increment, interpolate in x and y ('F' = full)
+C
+      HINTOPT = 'R'
+      IF( NOGRID(1).NE.ISEC2(9) ) HINTOPT = 'F'
+C
+      IERR = INTOCN(HINTOPT,'D',
+     X              RTOP, RBOTT, RRIGHT, RLEFT, RYRES, RXRES,
+     X              ISEC1, ISEC2, OLD, IOLDSIZ,
+     X              INEWSIZ, NEW(ITEMP), XARR, YARR, NXP, NYP,
+     X              NEW(INEWP),
+     X              IINTPOL, ISTAGP)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'OCEANP: Interpolation failed.',JPQUIET)
+        OCEANP = IERR
+        GOTO 900
+      ENDIF
+C
+      NOAREA(1) = NINT( (YARR(1) + YARR(2)*(NYP-1)) * PPMULT )
+      NOAREA(2) = NINT( XARR(1) * PPMULT )
+      NOAREA(3) = NINT( YARR(1) * PPMULT )
+      NOAREA(4) = NINT( (XARR(1) + XARR(2)*(NXP-1)) * PPMULT )
+C
+      NOGRID(1) = NINT( ABS(XARR(2)) * PPMULT )
+      NOGRID(2) = NINT( ABS(YARR(2)) * PPMULT )
+      NONS = NYP
+      NOWE = NXP
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Code new field into GRIB.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     Re-order the rows from south to north to be north to south
+C     (ECMWF convention).
+C
+      IF( LHORIZN.OR.(NOAREA(1).LT.NOAREA(3)) ) THEN
+        LFLIP = .TRUE.
+        DO LOOPLAT = 1, NYP/2
+          I = (LOOPLAT - 1)*NXP
+          J = (NYP - LOOPLAT)*NXP
+          DO LOOPLON = 1, NXP
+            I = I + 1
+            J = J + 1
+            ZTEMP  = NEW(I)
+            NEW(I) = NEW(J)
+            NEW(J) = ZTEMP
+          ENDDO
+        ENDDO
+C
+        IF( .NOT.LHORIZN ) THEN
+          ITEMP     = NOAREA(1)
+          NOAREA(1) = NOAREA(3)
+          NOAREA(3) = ITEMP
+C
+          ITEMP    = ISEC2(4)
+          ISEC2(4) = ISEC2(7)
+          ISEC2(7) = ITEMP
+        ENDIF
+      ENDIF
+C
+C     Setup GRIB sections for the output product:
+C
+C     Use local definition 4 in GRIB section 1 ...
+C
+      ISEC1(73) = 0
+      ITEMP = 75 + ISEC1(71) + ISEC1(72) + ISEC1(73) + ISEC1(74)
+      ISEC1(ITEMP) = 0
+
+C
+      IF( LHORIZN ) THEN
+        ISEC1(62) = NOAREA(1)*10
+        ISEC1(63) = NOAREA(2)*10
+        ISEC1(64) = NOAREA(3)*10
+        ISEC1(65) = NOAREA(4)*10
+        ISEC1(66) = NOGRID(1)*10
+        ISEC1(67) = NOGRID(2)*10
+        IF( LFLIP ) ISEC1(67) = - ISEC1(67)
+        ISEC1(68) = 0
+        ISEC1(69) = 0
+C
+C       Standard section 2 format for horizontal sections
+C
+        ISEC2(1) = 0
+        ISEC2(2) = NXP
+        ISEC2(3) = NYP
+        ISEC2(4) = NOAREA(1)/100
+        ISEC2(5) = NOAREA(2)/100
+        ISEC2(6) = 128
+        ISEC2(7) = NOAREA(3)/100
+        ISEC2(8) = NOAREA(4)/100
+        ISEC2(9)  = NOGRID(1)/100
+        ISEC2(10) = NOGRID(2)/100
+Cjdc    ISEC2(17) = 0
+        DO LOOPLAT = 11, 22
+          ISEC2(LOOPLAT) = 0
+        ENDDO
+      ELSE
+C Tim-Correct headers for vertical sections
+        IF( ISEC1(60).EQ.3 ) THEN
+          ISEC1(63) = NOAREA(2)*10
+        ELSEIF( ISEC1(60).EQ.4 ) THEN
+          ISEC1(63) = NOAREA(2)*10
+        ENDIF
+        IF( ISEC1(61).EQ.3 ) THEN
+          ISEC1(62) = NOAREA(1)*10
+        ELSEIF( ISEC1(61).EQ.4 ) THEN
+          ISEC1(62) = NOAREA(1)*10
+        ENDIF
+C
+        IF( ISEC1(61).EQ.1 ) THEN
+          ISEC1(64) = ISEC1(62) + NINT((NYP-1)*RYRES*1.0)
+          ISEC1(65) = ISEC1(63) + NINT((NXP-1)*RXRES*1000000.0)
+          ISEC1(66) = NOGRID(1)*NINT(1000000.0/PPMULT)
+          ISEC1(67) = NOGRID(2)/(PPMULT/1.0)
+        ELSE
+          ISEC1(64) = ISEC1(62) + NINT((NYP-1)*RYRES*1000.0)
+          ISEC1(65) = ISEC1(63) + NINT((NXP-1)*RXRES*1000000.0)
+          ISEC1(66) = NOGRID(1)*NINT(1000000.0/PPMULT)
+          ISEC1(67) = NOGRID(2)/(PPMULT/1000.0)
+        ENDIF
+C
+        IF( LFLIP ) ISEC1(67) = - ISEC1(67)
+        ISEC1(68) = 0
+C
+C       Special ECMWF ocean short form of GRIB section 2
+C
+        ISEC2(1) = 192
+        ISEC2(2) = NXP
+        ISEC2(3) = NYP
+Cjdc    ISEC2(4) = NOAREA(1)/100000
+Cjdc    ISEC2(5) = NOAREA(2)/100
+Cjdc    ISEC2(6) = 0
+Cjdc    ISEC2(7) = NOAREA(3)/100000
+Cjdc    ISEC2(8) = NOAREA(4)/100
+Cjdc    DO LOOPLAT = 9, 22
+Cjdc      ISEC2(LOOPLAT) = 0
+Cjdc    ENDDO
+      ENDIF
+C
+C     Ensure there is a section 3 in case there is missing data in the
+C     output area
+C
+      ISEC1(5) = 192
+      ISEC3(1) = 0
+      ZSEC3(2) = -999.9
+C
+      ISEC4(1) = NXP *  NYP
+C
+C     If grid-point output, setup for 2nd order packing if requested.
+C
+      IF( (NOREPR.NE.JPSPHERE).AND.(NOREPR.NE.JPSPHROT) ) THEN
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'K' ) THEN
+          HFUNC = 'K'
+          ISEC4(4)  = 64
+          ISEC4(6)  = 16
+          ISEC4(9)  = 32
+          ISEC4(10) = 16
+          ISEC4(12) = 8
+          ISEC4(13) = 4
+          ISEC4(14) = 0
+          ISEC4(15) = -1
+        ELSE
+          ISEC4(4)  = 0
+          ISEC4(6)  = 0
+        ENDIF
+      ELSE
+        HFUNC = 'C'
+        IF( NOHFUNC.EQ.'C' ) THEN
+          ISEC2(6) = 2
+          ISEC4(4) = 64
+        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+          ISEC2(6) = 1
+          ISEC4(4) = 0
+        ENDIF
+      ENDIF
+C
+C     Switch off GRIBEX checking (sigh)
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'OCEANP: switching OFF GRIBEX checking',JPQUIET)
+      CALL GRSVCK(0)
+C
+      IERR = 1
+      CALL GRIBEX( ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4,
+     X             NEW,INEWSIZ,OTOCEAN,OUTLEN,IWORD,HFUNC,IERR)
+C
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,'OCEANP: GRIBEX encoding failed.',IERR)
+        OCEANP = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      OUTLEN = IWORD
+C
+C     Switch on GRIBEX checking (sigh again)
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'OCEANP: switching ON GRIBEX checking',JPQUIET)
+      CALL GRSVCK(1)
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+C     Return the scratch memory.
+C
+      CALL JMEMHAN( JPSCR3, INEW, INEWSIZ, JPDEALL, IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANP: Scratch memory(3) reallocation failed.',JPQUIET)
+        OCEANP = IERR
+      ENDIF
+C
+  940 CONTINUE
+C
+      CALL JMEMHAN( JPSCR4, IOLD, IOLDSIZ, JPDEALL, IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANP: Scratch memory(4) reallocation failed.',JPQUIET)
+        OCEANP = IERR
+      ENDIF
+C
+  950 CONTINUE
+C
+C     Restore the original area and grid definitions
+C
+      NOAREA(1) = IOLDN
+      NOAREA(2) = IOLDW
+      NOAREA(3) = IOLDS
+      NOAREA(4) = IOLDE
+      NOGRID(1) = IOLDEW
+      NOGRID(2) = IOLDNS
+C
+  960 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'OCEANP: Returning from interpolating an ocean field.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/oceanu.F b/interpolation/oceanu.F
new file mode 100755
index 0000000..d6df31b
--- /dev/null
+++ b/interpolation/oceanu.F
@@ -0,0 +1,455 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION OCEANU( INOCEAN, INLEN, OUTOCEAN, OUTLEN)
+C
+C---->
+C**** OCEANU
+C
+C     Purpose
+C     -------
+C
+C     Interpolate input ocean field to ocean
+C     field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = OCEANU( INOCEAN, INLEN, OUTOCEAN, OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INOCEAN - Input ocean field
+C     INLEN   - Input field length (words).
+C
+C
+C     Output
+C     ------
+C
+C     OUTOCEAN - Output ocean field
+C     OUTLEN  - Output field length (words).
+C
+C
+C     Method
+C     ------
+C
+C     Interpolate ocean field.
+C
+C     If requested X grid increment does not match input GRIB
+C     increment, do a full interpolation in both x and y. Otherwise,
+C     interpolate only to make grid regular.
+C
+C     Externals
+C     ---------
+C
+C     JDEBUG  - Tests if debug output required.
+C     GRIBEX  - GRIB decoding/encoding.
+C     INTLOG  - Log error message.
+C     JMEMHAN - Allocate/deallocate scratch memory.
+C     INTOCN  - Carry out ocean field to field interpolation.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF        Mar 1997
+C     Allow for full or partial interpolation
+C     (F or R option in call to INTOCN).
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Function arguments
+C
+      INTEGER INLEN, OUTLEN
+      REAL INOCEAN, OUTOCEAN
+      DIMENSION INOCEAN(*),OUTOCEAN(*)
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+#include "intf.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPALLOC, JPDEALL, JPSCR3, JPSCR4
+      INTEGER JP_LAT, JP_LONG, JP_GUESS
+      PARAMETER (JPROUTINE = 36900 )
+      PARAMETER (JPALLOC = 1) 
+      PARAMETER (JPDEALL = 0) 
+      PARAMETER (JPSCR3 = 3) 
+      PARAMETER (JPSCR4 = 4) 
+      PARAMETER (JP_LONG = 3) 
+      PARAMETER (JP_LAT  = 4) 
+      PARAMETER (JP_GUESS  = 18049691) 
+cs    PARAMETER (JP_GUESS  = 1675245) 
+cs    PARAMETER (JP_GUESS  = 1237104) 
+cs    PARAMETER (JP_GUESS  = 1038240) 
+C                          `---> allow for 0.25*0.25 interpolated grid
+C
+C     Local variables
+C
+      LOGICAL LHORIZN, LFLIP
+      CHARACTER*1 HFUNC
+      CHARACTER*1 HINTOPT
+      CHARACTER*6 YFLAG
+      INTEGER IOLDN, IOLDW, IOLDS, IOLDE, IOLDEW, IOLDNS
+      INTEGER LOOPLAT, LOOPLON, I, J, IOS, LOOP
+      REAL ZTEMP
+      INTEGER IERR, KPR, IWORD, IOLDSIZ, INEWSIZ, IINTPOL, ISTAGP
+      INTEGER NXP, NYP, INEWP, ITEMP
+      REAL RTOP, RBOTT, RRIGHT, RLEFT, RYRES, RXRES
+      REAL XARR, YARR
+      DIMENSION XARR(JPGRIB_ISEC1), YARR(JPGRIB_ISEC1)
+      REAL NEW
+      POINTER ( INEW, NEW )
+      DIMENSION NEW( 1 )
+C
+C     Externals
+C
+      INTEGER RESET_C, INTOCNU, FIXAREA
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     Test if debug output required.
+C
+      CALL JDEBUG()
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'OCEANU: Trying to interpolate an ocean field.',JPQUIET)
+C
+      IF( .NOT.LNOGRID ) THEN
+        CALL INTLOG(JP_FATAL,
+     X    'OCEANU: GRID must be specified to interpolate an ocean field'
+     X    , JPQUIET)
+        OCEANU = JPROUTINE + 1
+        GOTO 960
+      ENDIF
+C
+      OCEANU = 0
+      IERR   = 0
+      KPR    = 0
+      LFLIP = .FALSE.
+C
+C     Save the original area and grid definitions
+C
+       NOOCO3  = NIOCO3
+       NOOCO4  = NIOCO4
+       NOOCO4F = NIOCO4F
+       NOOCO3F = NIOCO3F
+       NOOCO4L = NIOCO4L
+       NOOCO3L = NIOCO3L
+       NOOIINC = NIOIINC
+       NOOJINC = NIOJINC
+       NOOIRGR = NIOIRGR
+       NOONOST = NIONOST
+
+      IOLDN  = NOAREA(1)
+      IOLDW  = NOAREA(2)
+      IOLDS  = NOAREA(3)
+      IOLDE  = NOAREA(4)
+      IOLDEW = NOGRID(1)
+      IOLDNS = NOGRID(2)
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Unpack the input ocean field.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+      LHORIZN = (NIOCO3.EQ.JP_LONG).AND.(NIOCO4.EQ.JP_LAT)
+      IF( LHORIZN ) CALL INTLOG(JP_DEBUG,
+     X  'OCEANU: Horizontal (lat/long) field interpolation.',JPQUIET)
+C
+C     Get scratch memory for unpacking the input ocean field.
+C
+      IOLDSIZ = NINS * NIWE
+C
+C     For horizontal field, match the desired area to the grid
+C
+      IERR = FIXAREA()
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'OCEANU: FIXAREA failed.',JPQUIET)
+        OCEANU = IERR
+        GOTO 940
+      ENDIF
+C
+C     Get scratch memory for output ocean field.
+C     Have to guess how big the interpolated grid will be.
+C
+      IF(NOGRID(1).GT.0.AND.NOGRID(1).GT.0) THEN
+         INEWSIZ = (JP360/NOGRID(1) + 1) * (JP180 / NOGRID(2) + 1)*2
+      ELSE
+         INEWSIZ = JP_GUESS
+      ENDIF
+cs	  print*,'OCEANU INEWSIZ ',INEWSIZ
+cs	  print*,'OCEANU JP_GUESS ',JP_GUESS
+cs	  print*,'OCEANU NOGRID(1): ',NOGRID(1),' NOGRID(2): ',NOGRID(2)
+      CALL JMEMHAN(JPSCR3, INEW, INEWSIZ*2, JPALLOC, IERR)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANU: Scratch memory(3) allocation failed.',JPQUIET)
+        OCEANU = IERR
+        GOTO 940
+      ENDIF
+      INEWP = 1
+      ITEMP = 1 + INEWSIZ
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Interpolate ocean field.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      RTOP   = FLOAT( NOAREA(1) ) / PPMULT
+      RBOTT  = FLOAT( NOAREA(3) ) / PPMULT
+      RRIGHT = FLOAT( NOAREA(4) ) / PPMULT
+      RLEFT  = FLOAT( NOAREA(2) ) / PPMULT
+C
+      RYRES = FLOAT( NOGRID(2) ) / PPMULT
+      RXRES = FLOAT( NOGRID(1) ) / PPMULT
+C
+C     Select the interpolation option
+C     (default = 'R' = interpolate only to make grid regular)
+C     If requested X grid increment does not match input GRIB
+C     increment, interpolate in x and y ('F' = full)
+C
+      HINTOPT = 'R'
+      IF( NOGRID(1).NE.NIGRID(1) ) HINTOPT = 'F'
+C
+      IERR = INTOCNU(HINTOPT,'D',
+     X              RTOP, RBOTT, RRIGHT, RLEFT, RYRES, RXRES,
+     X              INOCEAN, IOLDSIZ,
+     X              INEWSIZ, NEW(ITEMP), XARR, YARR, NXP, NYP,
+     X              NEW(INEWP),
+     X              IINTPOL, ISTAGP)
+      IF( IERR.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR, 'OCEANU: Interpolation failed.',JPQUIET)
+        OCEANU = IERR
+        GOTO 900
+      ENDIF
+C
+      NOAREA(1) = NINT( (YARR(1) + YARR(2)*(NYP-1)) * PPMULT )
+      NOAREA(2) = NINT( XARR(1) * PPMULT )
+      NOAREA(3) = NINT( YARR(1) * PPMULT )
+      NOAREA(4) = NINT( (XARR(1) + XARR(2)*(NXP-1)) * PPMULT )
+C
+      NOAAPI(1) = NOAREA(1)
+      NOAAPI(2) = NOAREA(2)
+      NOAAPI(3) = NOAREA(3)
+      NOAAPI(4) = NOAREA(4)
+      NOGRID(1) = NINT( ABS(XARR(2)) * PPMULT )
+      NOGRID(2) = NINT( ABS(YARR(2)) * PPMULT )
+      NONS = NYP
+      NOWE = NXP
+C
+C     -----------------------------------------------------------------|
+C*    Section 5.   Code new field into GRIB.
+C     -----------------------------------------------------------------|
+C
+  500 CONTINUE
+C
+C     Re-order the rows from south to north to be north to south
+C     (ECMWF convention).
+C
+      IF( LHORIZN.OR.(NOAREA(1).LT.NOAREA(3)) ) THEN
+        LFLIP = .TRUE.
+        DO LOOPLAT = 1, NYP/2
+          I = (LOOPLAT - 1)*NXP
+          J = (NYP - LOOPLAT)*NXP
+          DO LOOPLON = 1, NXP
+            I = I + 1
+            J = J + 1
+            ZTEMP  = NEW(I)
+            NEW(I) = NEW(J)
+            NEW(J) = ZTEMP
+          ENDDO
+        ENDDO
+C
+        IF( .NOT.LHORIZN ) THEN
+          ITEMP     = NOAREA(1)
+          NOAREA(1) = NOAREA(3)
+          NOAREA(3) = ITEMP
+C
+          ITEMP     = NOAAPI(1)
+          NOAAPI(1) = NOAAPI(3)
+          NOAAPI(3) = ITEMP
+        ENDIF
+      ENDIF
+C
+C     Setup GRIB sections for the output product:
+C
+C
+      IF( LHORIZN ) THEN
+c
+        NOOCO4F = NOAREA(1)*10
+        NOOCO3F = NOAREA(2)*10
+        NOOCO4L = NOAREA(3)*10
+        NOOCO3L = NOAREA(4)*10
+        NOOIINC = NOGRID(1)*10
+        NOOJINC = NOGRID(2)*10
+        IF( LFLIP ) NOOJINC = - NOOJINC
+        NOOIRGR = 0
+        NOONOST = 0
+C
+C       Standard section 2 format for horizontal sections
+C
+        NOAAPI(1) = NOAREA(1)
+        NOAAPI(2) = NOAREA(2)
+        NOAAPI(3) = NOAREA(3)
+        NOAAPI(4) = NOAREA(4)
+        NOWE = NXP
+        NONS = NYP
+      ELSE
+C Tim-Correct headers for vertical sections
+        IF( NIOCO3.EQ.3 ) THEN
+          NOOCO3F = NOAREA(2)*10
+        ELSEIF( NIOCO3.EQ.4 ) THEN
+          NOOCO3F = NOAREA(2)*10
+        ENDIF
+        IF( NIOCO4.EQ.3 ) THEN
+          NOOCO4F = NOAREA(1)*10
+        ELSEIF( NIOCO4.EQ.4 ) THEN
+          NOOCO4F = NOAREA(1)*10
+        ENDIF
+C
+        IF( NIOCO4.EQ.1 ) THEN
+          NOOCO4L = NOOCO4F + NINT((NYP-1)*RYRES*1.0)
+          NOOCO3L = NOOCO3F + NINT((NXP-1)*RXRES*1000000.0)
+          NOOIINC = NOGRID(1)*NINT(1000000.0/PPMULT)
+          NOOJINC = NOGRID(2)/(PPMULT/1.0)
+        ELSE
+          NOOCO4L = NOOCO4F + NINT((NYP-1)*RYRES*1000.0)
+          NOOCO3L = NOOCO3F + NINT((NXP-1)*RXRES*1000000.0)
+          NOOIINC = NOGRID(1)*NINT(1000000.0/PPMULT)
+          NOOJINC = NOGRID(2)/(PPMULT/1000.0)
+        ENDIF
+C
+        IF( LFLIP ) NOOJINC = - NOOJINC
+        NOOIRGR = 0
+C
+C       Special ECMWF ocean short form of GRIB section 2
+C
+cs        ISEC2(1) = 192
+cs        ISEC2(2) = NXP
+cs        ISEC2(3) = NYP
+Cjdc    ISEC2(4) = NOAREA(1)/100000
+Cjdc    ISEC2(5) = NOAREA(2)/100
+Cjdc    ISEC2(6) = 0
+Cjdc    ISEC2(7) = NOAREA(3)/100000
+Cjdc    ISEC2(8) = NOAREA(4)/100
+Cjdc    DO LOOPLAT = 9, 22
+Cjdc      ISEC2(LOOPLAT) = 0
+Cjdc    ENDDO
+      ENDIF
+C
+C     Ensure there is a section 3 in case there is missing data in the
+C     output area
+C
+cs      ISEC1(5) = 192
+cs      ISEC3(1) = 0
+cs      ZSEC3(2) = -999.9
+C
+cs      ISEC4(1) = NXP *  NYP
+C
+C     If grid-point output, setup for 2nd order packing if requested.
+C
+cs      IF( (NOREPR.NE.JPSPHERE).AND.(NOREPR.NE.JPSPHROT) ) THEN
+cs        HFUNC = 'C'
+cs        IF( NOHFUNC.EQ.'K' ) THEN
+cs          HFUNC = 'K'
+cs          ISEC4(4)  = 64
+cs          ISEC4(6)  = 16
+cs          ISEC4(9)  = 32
+cs          ISEC4(10) = 16
+cs          ISEC4(12) = 8
+cs          ISEC4(13) = 4
+cs          ISEC4(14) = 0
+cs          ISEC4(15) = -1
+cs        ELSE
+cs          ISEC4(4)  = 0
+cs          ISEC4(6)  = 0
+cs        ENDIF
+cs      ELSE
+cs        HFUNC = 'C'
+cs        IF( NOHFUNC.EQ.'C' ) THEN
+cs          ISEC2(6) = 2
+cs          ISEC4(4) = 64
+cs        ELSE IF( NOHFUNC.EQ.'S' ) THEN
+cs          ISEC2(6) = 1
+cs          ISEC4(4) = 0
+cs        ENDIF
+cs      ENDIF
+C
+C
+      OUTLEN = NXP*NYP
+          DO I = 1, OUTLEN
+            OUTOCEAN(I)  = NEW(I)
+          ENDDO
+        CALL GETENV('DATA_CHECK', YFLAG)
+        IF( YFLAG(1:1).EQ.'1' ) THEN
+          OPEN (UNIT=18,FILE='./out_ocean_gribapi.dat',STATUS='UNKNOWN',
+     &    FORM='UNFORMATTED',IOSTAT=IOS)
+          IF (IOS.EQ.0) THEN    
+            WRITE (18)(OUTOCEAN(LOOP),LOOP=1,OUTLEN)
+          ENDIF
+          CLOSE(18)
+        ENDIF
+C
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+C     Clear change flags for next product processing
+C
+      LCHANGE = .FALSE.
+      LSMCHNG = .FALSE.
+C
+C     Return the scratch memory.
+C
+      CALL JMEMHAN( JPSCR3, INEW, INEWSIZ*2, JPDEALL, IERR)
+      IF ( IERR .NE. 0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'OCEANU: Scratch memory(3) reallocation failed.',JPQUIET)
+        OCEANU = IERR
+      ENDIF
+C
+  940 CONTINUE
+C
+C
+  950 CONTINUE
+C
+C     Restore the original area and grid definitions
+C
+cs      NOAREA(1) = IOLDN
+cs      NOAREA(2) = IOLDW
+cs      NOAREA(3) = IOLDS
+cs      NOAREA(4) = IOLDE
+cs      NOGRID(1) = IOLDEW
+cs      NOGRID(2) = IOLDNS
+C
+  960 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,
+     X  'OCEANU: Returning from interpolating an ocean field.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/ouspace.h b/interpolation/ouspace.h
new file mode 100755
index 0000000..4c6116c
--- /dev/null
+++ b/interpolation/ouspace.h
@@ -0,0 +1,84 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "ouspace.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains the work space array definitions for the
+C     arrays to hold the unpacked real data from GRIB fields.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "ouspace.h"
+C
+C     Common block usage
+C     __________________
+C
+C     GRIB_SPACE
+C
+C     NIFELD       - POINTER to array RIFELD.
+C     NOFELD       - POINTER to array ROFELD.
+C
+C     RIFELD       - Dynamic array of length (NIWE * NINS)
+C                    (see nifld.common) which holds the expanded
+C                    input field.
+C     ROFELD       - Dynamic array of length (NOWE * NONS)
+C                    (see nofld.common) which holds the expanded
+C                    output field.
+C
+C     METHOD
+C     ______
+C
+C     NONE
+C
+C     REFERENCE
+C     _________
+C
+C     NONE
+C
+C     COMMENTS
+C     ________
+C
+C     Contains sections 1
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Apr 1994
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     NONE
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 1. Pointer and array combination
+C                Array dimensions are in nifld.common and
+C                nofld.common
+C     _______________________________________________________
+C
+      COMMON /GRIB_SPACE/
+     1   NIFELD, NOFELD
+C
+      SAVE /GRIB_SPACE/
+C
+      REAL RIFELD, ROFELD
+C
+C     RIFELD is actually only the accumulated field length for a
+C     quasi regular input field
+C
+      POINTER (NIFELD, RIFELD (NIWE * NINS) )
+      POINTER (NOFELD, ROFELD (NOWE * NONS) )
diff --git a/interpolation/outrep.F b/interpolation/outrep.F
new file mode 100755
index 0000000..c63d438
--- /dev/null
+++ b/interpolation/outrep.F
@@ -0,0 +1,35 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION OUTREP()
+C
+C---->
+C*****OUTREP*
+C
+C     PURPOSE
+C     -------
+C
+C     LNOREPR      - Flag to say whether or not user specified NOREPR 
+
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+
+      OUTREP = 1
+
+      IF(LNOREPR) OUTREP = 0
+
+      IF( OUTREP.EQ.1 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X 'OUTREP: Output Representation is Not specified',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/parameter_processing_defaults b/interpolation/parameter_processing_defaults
new file mode 100755
index 0000000..dffa9c2
--- /dev/null
+++ b/interpolation/parameter_processing_defaults
@@ -0,0 +1,27 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+131     n     y     n     n
+132     n     y     n     n
+140     y     n     n     n
+141     y     n     n     n
+142     n     n     y     n
+143     n     n     y     n
+144     n     n     y     n
+165     n     y     n     n
+166     n     y     n     n
+170     y     n     n     n
+171     y     n     n     n
+172     n     n     n     y
+173     y     n     n     n
+182     y     n     n     n
+183     y     n     n     n
+184     y     n     n     n
+190     y     n     n     n
+191     y     n     n     n
+192     y     n     n     n
+193     y     n     n     n
+199     y     n     n     n
+200     y     n     n     n
+228     n     n     y     n
+239     n     n     y     n
+240     n     n     y     n
diff --git a/interpolation/parim.h b/interpolation/parim.h
new file mode 100755
index 0000000..762dfa5
--- /dev/null
+++ b/interpolation/parim.h
@@ -0,0 +1,619 @@
+c
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C**** "parim.h"
+C
+C     PURPOSE
+C     _______
+C
+C     This file contains a set of constants used during interpolation.
+C
+C     INTERFACE
+C     _________
+C
+C     #include "parim.h"
+C
+C     Common block usage
+C     __________________
+C
+C     NONE
+C
+C     METHOD
+C     ______
+C
+C     NONE
+C
+C     REFERENCE
+C     _________
+C
+C     NONE
+C
+C     COMMENTS
+C     ________
+C
+C     Contains sections 1 to 8
+C
+C     AUTHOR
+C     ______
+C
+C     K. Fielding      *ECMWF*      Oct 1993
+C
+C     Modifications
+C     -------------
+C
+C     S.Curic     ECMWF      March 2005
+C     Changed constants JPSTRUNC=2047 JPGTRUNC=2048
+C     in order to allow T2047 and N1024
+C     Changed buffer size PGRIB_ISEC1 PGRIB_ISEC2 PGRIB_ISEC4
+C
+C     S.Curic     ECMWF      March 2005
+C     Changed constants JPDISTP=0.25
+C
+C     S.Curic     ECMWF      March 2011
+C     Changed constants JPSTRUNC=3999 JPGTRUNC=400
+C     in order to allow T3999 and N2000
+C     _______________________________________________________
+C
+C
+C*    Section 1. Machine definition constants
+C     _______________________________________________________
+C
+C     JPBYTES       - The number of bytes in an INTEGER word.
+C     JPBITS        - The number of bits in an INTEGER word.
+C     JPILEN        - The number of heap allocation units in an
+C                     INTEGER word.
+C     JPRLEN        - The number of heap allocation units in a REAL
+C                     word.
+C
+      INTEGER JPBITS, JPBYTES, JPILEN, JPRLEN
+C
+#ifdef CRAY
+      PARAMETER (JPBYTES = 8)
+      PARAMETER (JPILEN = 1)
+      PARAMETER (JPRLEN = 1)
+#else
+#ifdef INTEGER_8
+      PARAMETER (JPBYTES = 8)
+#else
+      PARAMETER (JPBYTES = 4)
+#endif
+      PARAMETER (JPILEN = JPBYTES)
+#ifdef REAL_8
+      PARAMETER (JPRLEN = 8)
+#else
+      PARAMETER (JPRLEN = 4)
+#endif
+#endif
+      PARAMETER (JPBITS = 8 * JPBYTES)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 2. Library Limit Constants
+C     _______________________________________________________
+C
+C     JPLONG        - The maximum number of points along a line of
+C                     latitude.
+C     JPLAT         - The maximum number of lines of latitude
+C     JPGTRUNC      - The maximum Gaussian truncation allowed.
+C     JPSTRUNC      - The maximum spherical harmonic truncation
+C                     allowed.
+C
+C     JPML01        - 10 minute land sea mask - Number of values per
+C                     degree.
+C     JPLG01        - 10 minute land sea mask - Number of values long
+C                     a line of latitude.
+C     JPLT01        - 10 minute land sea mask - Number of lines of
+C                     latitude.
+C     JPPACK        - 10 minute land sea mask - Length of packed
+C                     record in words.
+C
+C     PPDEGMIN      - The minimum grid size
+C                     (Real (360) / REAL (JPLONG) ).
+C
+      INTEGER JPLONG, JPLAT, JPGTRUNC, JPSTRUNC
+C
+      PARAMETER (JPLONG = 4096)
+      PARAMETER (JPLAT  = 4000 )
+      PARAMETER (JPGTRUNC = 4000)
+      PARAMETER (JPSTRUNC = 3999)
+C
+      INTEGER JPLG01, JPLT01, JPPACK, JPML01
+C
+      PARAMETER (JPML01 = 6)
+      PARAMETER (JPLG01 = 360 * JPML01)
+      PARAMETER (JPLT01 = 180 * JPML01)
+#ifdef rs6000
+      PARAMETER (JPPACK = (JPLG01 - 1) / 32 + 1)
+#else
+      PARAMETER (JPPACK = (JPLG01 - 1) / JPBITS + 1)
+#endif
+C
+      REAL PPDEGMIN
+C
+      PARAMETER (PPDEGMIN = 0.5E0)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Library Interface Constants
+C     _______________________________________________________
+C
+C
+C     Data representation type values:
+C
+C     JPGAUSSIAN - Gaussian
+C     JPFGGROT   - Rotated full (regular) gaussian
+C     JPQUASI    - Quasi-regular gaussian
+C     JPQGGROT   - Rotated quasi-regular (reduced) gaussian
+C     JPREDLL    - Quasi-regular latitude/longitude
+C     JPREDLROT  - Rotated quasi-regular latitude/longitude
+C     JPREGULAR  - Regular latitude longitude
+C     JPREGROT   - Rotated regular latitude longitude
+C     JPSPHERE   - Spherical harmonic
+C     JPSPHROT   - Rotated spherical harmonic
+C     JPSTRGG    - Streched quasi-regular gaussian
+C     JPSTRSH    - Streched spherical harmonic
+C     JPNOTYPE   - Dummy data.
+C
+C     Field parameter numbers required (All field numbers refer to
+C     ECMWF local Code Table 2 with NITABLE .eq. 128).
+C
+C     JP_U          - Wind parameter U
+C     JP_V          - Wind parameter V
+C     JP_10U        - Wind parameter 10U
+C     JP_10V        - Wind parameter 10V
+C
+C     JP_LSP        - Large scale precipitation LSP
+C     JP_CP         - Convective precipitation CP
+C     JP_SF         - Snowfall SF
+C     JP_TP         - Total precipitation TP
+C
+C     JP_MSL        - Mean sea level pressure MSL
+C     JP_LSM        - Land sea mask LSM
+C
+C     Field parameter numbers required (All field numbers refer to
+C     the standard WMO parameter number with NITABLE .eq. 1)
+C
+C     JP_WMO_U      - Wind parameter U
+C     JP_WMO_V      - Wind parameter V
+C     JP_WMO_10U    - Wind parameter 10U
+C     JP_WMO_10V    - Wind parameter 10V
+C
+C     JP_WMO_LSP    - Large scale precipitation LSP
+C     JP_WMO_CP     - Convective precipitation CP
+C     JP_WMO_SF     - Snowfall SF
+C     JP_WMO_TP     - Total precipitation TP
+C
+C     JP_WMO_MSL    - Mean sea level pressure MSL
+C     JP_WMO_LSM    - Land sea mask LSM
+C
+      INTEGER JPGAUSSIAN,JPQUASI,JPREGULAR,JPREGROT,JPSPHERE,JPSPHROT
+      INTEGER JPFGGROT, JPQGGROT, JPSTRGG, JPSTRSH
+      INTEGER JPREDLL, JPREDLROT
+      INTEGER JPNOTYPE
+C
+      PARAMETER (JPGAUSSIAN =  4)
+      PARAMETER (JPFGGROT   = 14)
+      PARAMETER (JPQUASI    = 25)
+      PARAMETER (JPQGGROT   = 27)
+      PARAMETER (JPREDLL    = 26)
+      PARAMETER (JPREDLROT  = 28)
+      PARAMETER (JPREGULAR  =  0)
+      PARAMETER (JPREGROT   = 10)
+      PARAMETER (JPSPHERE   = 50)
+      PARAMETER (JPSPHROT   = 60)
+      PARAMETER (JPSTRGG    = 24)
+      PARAMETER (JPSTRSH    = 70)
+      PARAMETER (JPNOTYPE   = 9999)
+C
+      INTEGER JP_U, JP_V, JP_10U, JP_10V
+C
+      PARAMETER (JP_U   = 131)
+      PARAMETER (JP_V   = 132)
+      PARAMETER (JP_10U = 165)
+      PARAMETER (JP_10V = 166)
+C
+      INTEGER JP_LSP, JP_CP, JP_SF, JP_TP
+C
+      PARAMETER (JP_LSP = 142)
+      PARAMETER (JP_CP  = 143)
+      PARAMETER (JP_SF  = 144)
+      PARAMETER (JP_TP  = 228)
+C
+      INTEGER JP_MSL, JP_LSM
+C
+      PARAMETER (JP_MSL = 151)
+      PARAMETER (JP_LSM = 172)
+C
+      INTEGER JP_WMO_U, JP_WMO_V
+C
+      PARAMETER (JP_WMO_U   = 33)
+      PARAMETER (JP_WMO_V   = 34)
+C
+      INTEGER JP_WMO_LSP, JP_WMO_CP, JP_WMO_SF, JP_WMO_TP, JP_WMO_WESF
+C
+      PARAMETER (JP_WMO_TP  = 61)
+      PARAMETER (JP_WMO_LSP = 62)
+      PARAMETER (JP_WMO_CP  = 63)
+      PARAMETER (JP_WMO_SF  = 64)
+      PARAMETER (JP_WMO_WESF  = 65)
+C
+      INTEGER JP_WMO_MSL, JP_WMO_LSM
+C
+      PARAMETER (JP_WMO_MSL = 2)
+      PARAMETER (JP_WMO_LSM = 81)
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 4. Library Formulation Constants
+C
+C     These constants handle the fact that all latitudes and
+C     longitudes are represented as integer values. The values of
+C     longitude or latitude degrees are represented as
+C     NINT (real_degree * PPMULT).
+C
+C     _______________________________________________________
+C
+C     JPMULT        - The integer version of the multiplier PPMULT
+C                     (currently 10000).
+C     JP90          - The integer value (90 * JPMULT).
+C     JP180         - The integer value (180 * JPMULT).
+C     JP360         - The integer value (360 * JPMULT).
+C     JP0P5         - The integer value (JPMULT / 2).
+C     JP0P25        - The integer value (JPMULT / 4). 0.25 resol
+C     PPEPS         - Small value to force latitude rounding.
+C
+C     PPMULT        - The multiplying factor for all degree values
+C                     (REAL (JPMULT) )
+C
+C     JPMICRO       -  scale factor from micro-degrees (from GRIB)
+C                      to working scale (JPMULT).
+C
+      INTEGER JPMULT, JP90, JP180, JP360, JP0P5, JP0P25, JPMIN, JPMICRO
+      REAL PPEPS
+C
+      PARAMETER (JPMULT = 100000)
+      PARAMETER ( JP90 =  90 * JPMULT)
+      PARAMETER (JP180 = 180 * JPMULT)
+      PARAMETER (JP360 = 360 * JPMULT)
+      PARAMETER (JP0P5 = JPMULT / 2)
+      PARAMETER (JP0P25 = JPMULT / 4)
+      PARAMETER (PPEPS = 0.9)
+      PARAMETER (JPMIN = JP0P5)
+      PARAMETER (JPMICRO = (JPMULT/1000) )
+C
+      REAL PPMULT
+C
+      PARAMETER (PPMULT = 1.0E5)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 5. Grib Section Size Constants
+C
+C     All these constants are in terms of expanded arrays after
+C     GRIBEX has been used to unpack a field.
+C
+C     _______________________________________________________
+C
+C     JPENSEMBLE    - The number of ensemble forecasts (Used for
+C                     handling clusters).
+C     JPVERTICAL    - The number of model levels.
+C     JPBASE2       - The basic size of Grib Section 2.
+C
+C     JPGRIB_ISEC0  - The size of Grib integer Section 0.
+C     JPGRIB_ISEC1  - The size of Grib integer Section 1.
+C     JPGRIB_ISEC2  - The size of Grib integer Section 2.
+C     JPGRIB_ISEC3  - The size of Grib integer Section 3.
+C     JPGRIB_ISEC4  - The size of Grib integer Section 4.
+C
+C     JPGRIB_RSEC2  - The size of Grib real Section 2.
+C     JPGRIB_RSEC3  - The size of Grib real Section 3.
+C
+      INTEGER JPENSEMBLE, JPVERTICAL, JPBASE2
+C
+      PARAMETER (JPENSEMBLE = 100)
+      PARAMETER (JPVERTICAL = 128)
+      PARAMETER (JPBASE2 = 22)
+C
+      INTEGER JPGRIB_ISEC0, JPGRIB_ISEC1, JPGRIB_ISEC2, JPGRIB_ISEC3,
+     1   JPGRIB_ISEC4
+C
+      PARAMETER (JPGRIB_ISEC0 = 2)
+      PARAMETER (JPGRIB_ISEC1 = 2048 )
+      PARAMETER (JPGRIB_ISEC2 = 5000)
+      PARAMETER (JPGRIB_ISEC3 = 2)
+      PARAMETER (JPGRIB_ISEC4 = 2512)
+C
+      INTEGER JPGRIB_RSEC2, JPGRIB_RSEC3
+C
+      PARAMETER (JPGRIB_RSEC2 = 10 + 2 * (JPVERTICAL + 1) )
+      PARAMETER (JPGRIB_RSEC3 = 2)
+C
+C
+C     _______________________________________________________
+C
+C
+C*    Section 6. Grib Section 1, 2 and 4 Offsets
+C
+C     All these constants are used for expanded arrays after GRIBEX
+C     has been used to unpack a field.
+C
+C     has been used to unpack a field.  C
+C     _______________________________________________________
+C
+C     General offsets.
+C     ________________
+C
+C     JPSEC1_TABLE  - The offset of the version number of code table 2.
+C     JPSEC1_PARAM  - The offset of the parameter value in Section 1.
+C
+C     JPSEC2_REP    - The offset of the Data Representation Type in
+C                     Section 2.
+C     JPSEC2_QUASI  - The offset of the Quasi Regular Flag in
+C                     Section 2.
+C     JPSEC2_QUDEF  - The offset of the end of a standard Section 2.
+C                     This may be used to simplify access to quasi
+C                     regular Gaussian field latitude line length
+C                     definitions.
+C
+C     JPSEC4_NVALUE - The offset of the number of data values in the
+C                     field.
+C     JPSEC4_NBITS  - The offset of the number of bits used for each
+C                     data value in the field.
+C
+      INTEGER JPSEC1_PARAM, JPSEC1_TABLE
+C
+      PARAMETER (JPSEC1_TABLE = 1)
+      PARAMETER (JPSEC1_PARAM = 6)
+C
+      INTEGER JPSEC4_NVALUE, JPSEC4_NBITS
+C
+      PARAMETER (JPSEC4_NVALUE = 1)
+      PARAMETER (JPSEC4_NBITS = 2)
+C
+      INTEGER JPSEC2_REP, JPSEC2_QUASI, JPSEC2_QUDEF
+C
+      PARAMETER (JPSEC2_REP = 1)
+      PARAMETER (JPSEC2_QUASI = 17)
+      PARAMETER (JPSEC2_QUDEF = JPBASE2)
+C
+C     Offsets for Spherical Harmonic Data.
+C     ____________________________________
+C
+C     JPSEC2_STRUNC - The offset of the Triangular truncation factor
+C                     in Section 2.
+C     JPSEC2_JTRUNC - The offset of the J-Pentagonal resolution
+C                     parameter in Section 2.
+C     JPSEC2_KTRUNC - The offset of the K-Pentagonal resolution
+C                     parameter in Section 2.
+C     JPSEC2_MTRUNC - The offset of the M-Pentagonal resolution
+C                     parameter in Section 2.
+C     JPSEC2_SHRES  - The offset of the Representation Type in
+C                     Section 2.
+C     JPSEC2_SHMODE - The offset of the Representation Mode in
+C                     Section 2.
+C
+      INTEGER JPSEC2_STRUNC
+      INTEGER JPSEC2_JTRUNC
+      INTEGER JPSEC2_KTRUNC
+      INTEGER JPSEC2_MTRUNC
+      INTEGER JPSEC2_SHRES
+      INTEGER JPSEC2_SHMODE
+C
+      PARAMETER (JPSEC2_STRUNC = 2)
+      PARAMETER (JPSEC2_JTRUNC = 2)
+      PARAMETER (JPSEC2_KTRUNC = 3)
+      PARAMETER (JPSEC2_MTRUNC = 4)
+      PARAMETER (JPSEC2_SHRES = 5)
+      PARAMETER (JPSEC2_SHMODE = 6)
+C
+C     Offsets for all grid point data
+C     _______________________________
+C
+C     JPSEC2_NLONG  - The offset of the Number of points along a line
+C                     of latitude in Section 2. This value is unset
+C                     for a quasi regular Gaussian field.
+C     JPSEC2_NLAT   - The offset of the Number of lines of latitude
+C                     in Section 2.
+C     JPSEC2_NORTH  - The offset of the Northern line of latitude in
+C                     Section 2.
+C     JPSEC2_SOUTH  - The offset of the Southern line of latitude in
+C                     Section 2.
+C     JPSEC2_WEST   - The offset of the Western longitude limit in
+C                     Section 2.
+C     JPSEC2_EAST   - The offset of the Eastern longitude limit in
+C                     Section 2. This value should be ignored for a
+C                     quasi regular Gaussian field.
+C     JPSEC2_RESOL  - The offset of the Resolution flag in Section 2.
+C     JPSEC2_DLONG  - The offset of the Increment along a line of
+C                     latitude in Section 2. This value is unset for
+C                     a quasi regular Gaussian field or a field where
+C                     Grib cannot describe this value accurately
+C                     (0.5625 degrees).
+C     JPSEC2_SCAN   - The offset of the Scanning mode flag in
+C                     Section 2.
+C     JPSEC2_VERT   - The offset of the Number of vertical coordinate
+C                     parameters in Section 2.
+C
+      INTEGER JPSEC2_NLONG
+      INTEGER JPSEC2_NLAT
+      INTEGER JPSEC2_NORTH
+      INTEGER JPSEC2_WEST
+      INTEGER JPSEC2_SOUTH
+      INTEGER JPSEC2_EAST
+      INTEGER JPSEC2_RESOL
+      INTEGER JPSEC2_DLONG
+      INTEGER JPSEC2_SCAN
+      INTEGER JPSEC2_VERT
+C
+      PARAMETER (JPSEC2_NLONG = 2)
+      PARAMETER (JPSEC2_NLAT = 3)
+      PARAMETER (JPSEC2_NORTH = 4)
+      PARAMETER (JPSEC2_WEST = 5)
+      PARAMETER (JPSEC2_SOUTH = 7)
+      PARAMETER (JPSEC2_EAST = 8)
+      PARAMETER (JPSEC2_RESOL = 6)
+      PARAMETER (JPSEC2_DLONG = 9)
+      PARAMETER (JPSEC2_SCAN = 11)
+      PARAMETER (JPSEC2_VERT = 12)
+C
+C     Offset for Gaussian grids only
+C     ______________________________
+C
+C     JPSEC2_GTRUNC - The offset of Gaussian truncation value in
+C                     Section 2. This would be the number of points
+C                     between a pole and the equator for a global
+C                     grid.
+C
+      INTEGER JPSEC2_GTRUNC
+C
+      PARAMETER (JPSEC2_GTRUNC = 10)
+C
+C     Offset for latitude longitude grids only
+C     ________________________________________
+C
+C     JPSEC2_DLAT   - The offset of the Increment along a line of
+C                     meridian in Section 2. This value is unset for
+C                     a field where Grib cannot describe this value
+C                     accurately (0.5625 degrees).
+C
+      INTEGER JPSEC2_DLAT
+C
+      PARAMETER (JPSEC2_DLAT = 10)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 7. Useful constants
+C     _______________________________________________________
+C
+C     PPZERO        - The constant real zero
+C     PPONE         - The constant real one
+C
+C     JPABS         - I/O parameter to PBSEEK causing absolute file
+C                     positioning.
+C     JPEOF         - End of file return value from PBSEEK or PBREAD.
+C     JPERR         - Error return value from PBSEEK or PBREAD.
+C
+      REAL PPZERO, PPONE
+C
+      PARAMETER (PPZERO = 0.0E0)
+      PARAMETER (PPONE = 1.0E0)
+C
+      INTEGER JPABS, JPEOF, JPERR
+C
+      PARAMETER (JPABS = 0)
+      PARAMETER (JPEOF = - 1)
+      PARAMETER (JPERR = - 2)
+C
+      INTEGER JPLEVEL, JPINNER, JPGRIB_SPACE
+C
+      PARAMETER (JPLEVEL = 2)
+      PARAMETER (JPINNER = JPLEVEL)
+      PARAMETER (JPGRIB_SPACE = 1)
+C
+C     _______________________________________________________
+C
+C
+C*    Section 8. Grid to Grid Constant Definitions
+C     _______________________________________________________
+C
+C     JP_I_N        - An array index used to access the input
+C                     latitude line North of the current output
+C                     point.
+C     JP_I_S        - An array index used to access the input
+C                     latitude line South of the current output
+C                     point.
+C     JP_I_W        - An array index used to access the input points
+C                     West of the current output point.
+C     JP_I_E        - An array index used to access the input points
+C                     East of the current output point.
+C
+C     JP_I_NW       - An array index used to access the weight array
+C                     for the point North-West of the current output
+C                     point.
+C     JP_I_NE       - An array index used to access the weight array
+C                     for the point North-East of the current output
+C                     point.
+C     JP_I_SW       - An array index used to access the weight array
+C                     for the point South-West of the current output
+C                     point.
+C     JP_I_SE       - An array index used to access the weight array
+C                     for the point South-East of the current output
+C                     point.
+C
+C     JPNORTH       - An array index used to access the Northern
+C                     value of a MARS AREA definition.
+C     JPSOUTH       - An array index used to access the Southern
+C                     value of a MARS AREA definition.
+C     JPWEST        - An array index used to access the Western
+C                     value of a MARS AREA definition.
+C     JPEAST        - An array index used to access the Eastern
+C                     value of a MARS AREA definition.
+C
+C     JPWESTEP      - An array index used to access the West-East
+C                     stride of a MARS GRID definition.
+C     JPNSSTEP      - An array index used to access the North-South
+C                     stride of a MARS GRID definition.
+C
+      INTEGER JP_I_N, JP_I_S, JP_I_W, JP_I_E
+C
+      PARAMETER (JP_I_N = 1)
+      PARAMETER (JP_I_S = 2)
+      PARAMETER (JP_I_W = 1)
+      PARAMETER (JP_I_E = 2)
+C
+      INTEGER JP_I_NW, JP_I_NE, JP_I_SW, JP_I_SE
+C
+      PARAMETER (JP_I_NW = 1)
+      PARAMETER (JP_I_NE = 2)
+      PARAMETER (JP_I_SW = 3)
+      PARAMETER (JP_I_SE = 4)
+C
+      INTEGER JPNORTH, JPSOUTH, JPWEST, JPEAST
+C
+      PARAMETER (JPNORTH = 1)
+      PARAMETER (JPWEST  = 2)
+      PARAMETER (JPSOUTH = 3)
+      PARAMETER (JPEAST  = 4)
+C
+      INTEGER JPWESTEP, JPNSSTEP
+C
+      PARAMETER (JPWESTEP = 1)
+      PARAMETER (JPNSSTEP = 2)
+C
+C --------------------------------------------------------------------
+C     Values for message logging
+C
+      INTEGER JP_DEBUG, JP_INFO, JP_WARN, JP_ERROR, JP_FATAL, JPQUIET
+      PARAMETER ( JP_DEBUG = 0 )
+      PARAMETER ( JP_INFO  = 1 )
+      PARAMETER ( JP_WARN = 2 )
+      PARAMETER ( JP_ERROR = 3 )
+      PARAMETER ( JP_FATAL = 4 )
+      PARAMETER ( JPQUIET  = -999999999 )
+C
+C --------------------------------------------------------------------
+C     Values grid point generation styles
+C
+      REAL*8 JPDISTP
+      INTEGER JPSMARS, JPSDISM
+C
+C     JPSMARS => Mars style, eg area checking
+C     JPSDISM => Dissemination style, eg point selection
+C     JPDISTP = default dissemination lat/long grid step (= 0.25 degrees)
+C
+      PARAMETER ( JPSMARS = 0 )
+      PARAMETER ( JPSDISM = 1 )
+      PARAMETER ( JPDISTP = 0.25 )
diff --git a/interpolation/pddefs.F b/interpolation/pddefs.F
new file mode 100755
index 0000000..ebec795
--- /dev/null
+++ b/interpolation/pddefs.F
@@ -0,0 +1,409 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION PDDEFS()
+C
+C---->
+C**   PDDEFS
+C
+C     Purpose
+C     -------
+C
+C     Adjust the interpolation parameters according to parameter
+C     dependent requirements.
+C  
+C     Interface
+C     ---------
+C
+C     IRET = PDDEFS()
+C
+C     Input
+C     -----
+C
+C     Input file format:
+C
+C       Param  lsm  wind  prec  lsm interp          ) First 2 lines
+C       -----  ---  ----  ----  ----------          ) are ignored
+C       131     n     y     n     n            )
+C       132     n     y     n     n            )
+C       140     y     n     n     n            )
+C       141     y     n     n     n            )    I3,4(5X,A1)
+C       142     n     n     y     n            )
+C       143     n     n     y     n            )
+C       144     n     n     y     n            )
+C       165     n     y     n     n            )
+C        :
+C        :
+C
+C     Output
+C     ------
+C
+C     IRET = 0 if OK.
+C  
+C  
+C     Method
+C     ------
+C
+C     Values are taken from a (text) file in a directory defined
+C     by the environment variable:
+C
+C        "PARAMETER_PROCESSING_DEFAULTS" (if defined),
+C
+C     or from the directory:
+C
+C        /owrk/marsint/new                      (CRAY)
+C        /mrfs/postproc                         (Fujitsu)
+C        /usr/local/lib/metaps/tables/interpolation ( new ) 
+C
+C     or from an internal default array.
+C 
+C     The file used has name defaults_for_table_nnn, where
+C     nnn is the 3-digit local code table number (eg 128 for
+C     ECMWF, 001 for WMO, etc ).
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs messages.
+C     GETENV  - Gets environment variable information.
+C     INDEX   - Locates a character in a character variable.
+C     EMOSNUM - Gives current EMOSLIB version number.
+C     PRECIP  - Says if field is to have 'precipitation' treatment
+C  
+C  
+C     Author
+C     ------
+C
+C     J.D.Chambers       ECMWF        August 1994.
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPNUMDF, JPND001, JPND128, JPND129
+      PARAMETER (JPROUTINE = 28000)
+      PARAMETER (JPNUMDF = 100)
+      PARAMETER (JPND001 =   9)
+      PARAMETER (JPND128 =  13)
+      PARAMETER (JPND129 =  12)
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Local variables
+C
+      CHARACTER*6 YEMOSNM
+      INTEGER IEMOSNM
+      CHARACTER*256 FILENAME
+      CHARACTER*80 HLINE
+      CHARACTER*80 YENVBACK
+      INTEGER IPARAM, INEXT, NUMDFS, LOOP, INDX, IOTABLE
+      CHARACTER*1 HLSM, HWIND, HPREC, HLSMI
+      LOGICAL LNLSM, LNWIND, LNPREC, LNSMPAR
+      DATA IOTABLE/0/
+C
+C     Default array
+C
+      CHARACTER*27 HDEFS(JPNUMDF)
+C
+C     Specified defaults
+C
+C     WMO table 1
+C
+      CHARACTER*27 TAB001(JPND001)
+      DATA TAB001/
+     X          '002     n     n     n     n',
+     X          '033     y     y     n     n',
+     X          '034     y     y     n     n',
+     X          '061     y     n     y     n',
+     X          '062     y     n     y     n',
+     X          '063     y     n     y     n',
+     X          '064     y     n     y     n',
+     X          '065     y     n     y     n',
+     X          '081     n     n     n     y'
+     X         /
+C
+C     ECMWF table 128
+C
+      CHARACTER*27 TAB128(JPND128)
+      DATA TAB128/
+     X          '131     y     y     n     n',
+     X          '132     y     y     n     n',
+     X          '142     y     n     y     n',
+     X          '143     y     n     y     n',
+     X          '144     y     n     y     n',
+     X          '151     n     n     n     n',
+     X          '165     y     y     n     n',
+     X          '166     y     y     n     n',
+     X          '169     y     n     n     n',
+     X          '172     n     n     n     y',
+     X          '228     y     n     y     n',
+     X          '239     y     n     y     n',
+     X          '240     y     n     y     n'
+     X         /
+C
+C     ECMWF table 129
+C
+      CHARACTER*27 TAB129(JPND129)
+      DATA TAB129/
+     X          '131     y     y     n     n',
+     X          '132     y     y     n     n',
+     X          '142     y     n     y     n',
+     X          '143     y     n     y     n',
+     X          '144     y     n     y     n',
+     X          '151     n     n     n     n',
+     X          '165     y     y     n     n',
+     X          '166     y     y     n     n',
+     X          '172     n     n     n     y',
+     X          '228     y     n     y     n',
+     X          '239     y     n     y     n',
+     X          '240     y     n     y     n'
+     X         /
+C
+      SAVE HDEFS, NUMDFS, IOTABLE, FILENAME
+C
+C     External functions
+C
+      INTEGER EMOSNUM
+      LOGICAL PRECIP
+      EXTERNAL EMOSNUM, PRECIP
+C
+C     Statement function
+C
+      LOGICAL NOTSAME, A, B
+C
+C     XOR or NE for logicals
+C
+      NOTSAME(A,B) = ((A).AND.(.NOT.(B))).OR.((B).AND.(.NOT.(A)))
+C
+C     ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C     ------------------------------------------------------------------
+C
+ 100  CONTINUE
+C
+      PDDEFS = 0
+C
+C     Start with the generic settings.
+C
+      LNLSM   = .TRUE.
+      LNWIND  = .FALSE.
+      LNPREC  = .FALSE.
+      LNSMPAR = .FALSE.
+C
+C     ------------------------------------------------------------------
+C*    Section 2.   If parameter table has changed, treat as first time
+C                  through: open and read the file of default values.
+C     ------------------------------------------------------------------
+C
+ 200  CONTINUE
+C
+      IF( IOTABLE.NE.NITABLE ) THEN
+C
+        DO LOOP = 1, 256
+          FILENAME(LOOP:) = ' '
+        ENDDO
+C
+        CALL INTLOG(JP_DEBUG,
+     X   'PDDEFS: Try to get processing defaults file.',JPQUIET)
+C
+C       Get the directory name
+C
+        CALL GETENV( 'PARAMETER_PROCESSING_DEFAULTS', FILENAME)
+        IF( FILENAME(1:1).EQ.' ' ) THEN
+#if (defined CRAY)
+          FILENAME = '/owrk/marsint/new/'
+#elif (defined __uxp__)
+C
+C         On Fujitsus, need to build different pathname for vpp300,
+C         vpp700, vpp700e and vpp5000
+C
+          CALL GETENV ('HOST', YENVBACK)
+          IF( YENVBACK(1:7) .EQ. 'vpp5000' )THEN
+            FILENAME = '/vpp5000/mrfs/postproc/'
+          ELSE IF( YENVBACK(1:7) .EQ. 'vpp700e' )THEN
+            FILENAME = '/vpp700e/mrfs/postproc/'
+          ELSE IF( YENVBACK(1:6) .EQ. 'vpp700' )THEN
+            FILENAME = '/vpp700/mrfs/postproc/'
+          ELSE
+            FILENAME = '/mrfs/postproc/'
+          ENDIF
+#else
+          FILENAME = '/usr/local/lib/metaps/tables/interpolation/'
+#endif
+        ENDIF
+C
+C       Build the complete file pathname
+C
+        INDX = INDEX(FILENAME, ' ')
+        FILENAME(INDX:) = 'defaults_for_table_'
+        INDX = INDEX(FILENAME, ' ')
+        WRITE(FILENAME(INDX:),'(I3.3)') NITABLE
+        INDX = INDX + 2
+        CALL INTLOG(JP_DEBUG, FILENAME(1:INDX), JPQUIET)
+        IOTABLE = NITABLE
+C
+        OPEN( UNIT = 1,
+     X        FILE = FILENAME(1:INDX),
+     X        STATUS = 'OLD',
+     X        FORM = 'FORMATTED',
+     X        ERR = 300)
+C
+C       Skip first 2 lines in the file
+C
+        READ(1,'(A)', END = 900) HLINE
+        READ(1,'(A)', END = 900) HLINE
+C
+C       Read the file into the defaults array
+C
+        NUMDFS = 1
+        DO LOOP = 1, JPNUMDF
+          READ(1,'(A)', END = 220) HDEFS(NUMDFS)
+          NUMDFS = NUMDFS + 1
+        ENDDO
+C
+  220   CONTINUE
+C
+C       Close the file.
+C
+        NUMDFS = NUMDFS - 1
+        CLOSE(1, ERR = 920)
+C
+        GOTO 400
+C
+C     ------------------------------------------------------------------
+C*    Section 3.   If file problem, use default arrays.
+C     ------------------------------------------------------------------
+C
+ 300    CONTINUE
+C
+        CALL INTLOG(JP_DEBUG,
+     X   'PDDEFS: No parameter processing defaults file found.',JPQUIET)
+C
+C       Use appropriate table
+C           1 = WMO table 1
+C         128 = ECMWF local code table 128
+C         129 = ECMWF local code table 129
+C
+        IF( NITABLE.EQ.1 ) THEN
+C
+          DO LOOP = 1, JPND001
+            HDEFS(LOOP) = TAB001(LOOP)
+          ENDDO
+          NUMDFS = JPND001
+C
+        ELSE IF( NITABLE.EQ.128 ) THEN
+C
+          DO LOOP = 1, JPND128
+            HDEFS(LOOP) = TAB128(LOOP)
+          ENDDO
+          NUMDFS = JPND128
+C
+C
+        ELSE IF( NITABLE.EQ.129 ) THEN
+C
+          DO LOOP = 1, JPND129
+            HDEFS(LOOP) = TAB129(LOOP)
+          ENDDO
+          NUMDFS = JPND129
+C
+        ELSE
+C
+C         .. other (unspecified)
+C
+          NUMDFS = 0
+C
+        ENDIF
+C
+      ENDIF
+C
+C     ------------------------------------------------------------------
+C*    Section 4.   Read lines in file to see if current parameter
+C                  is mentioned.
+C     ------------------------------------------------------------------
+C
+  400 CONTINUE     
+C
+      CALL INTLOG(JP_DEBUG,'PDDEFS: Table number = ', NITABLE)
+      CALL INTLOG(JP_DEBUG,'PDDEFS: Number of definitions = ', NUMDFS)
+      CALL INTLOG(JP_DEBUG,'PDDEFS: Parameter number = ', NIPARAM)
+      INEXT = 0
+C
+  410 CONTINUE
+C
+      INEXT = INEXT + 1
+      IF( INEXT.GT.NUMDFS ) GOTO 900
+      READ(HDEFS(INEXT), 9000) IPARAM, HLSM, HWIND, HPREC, HLSMI
+C
+C     If the current parameter, use the values defined in the table.
+C
+      IF( IPARAM.EQ.NIPARAM ) THEN
+C
+        IF( HLSM .EQ.'n' ) LNLSM   = .FALSE.
+        IF( HWIND.EQ.'y' ) LNWIND  = .TRUE.
+        IF( HPREC.EQ.'y' ) LNPREC  = .TRUE.
+        IF( HLSMI.EQ.'y' ) LNSMPAR = .TRUE.
+        GOTO 900
+C
+      ENDIF
+C
+C     Go back for next line in the array
+C
+      GOTO 410
+C
+C     ------------------------------------------------------------------
+C*     Section 9.   Closedown.
+C     ------------------------------------------------------------------
+C
+ 900  CONTINUE
+C
+C     Only change the value if the user has not already set it.
+C
+      IF( .NOT. LSMSET ) THEN
+        IF( NOTSAME(LNLSM,LSM) ) THEN
+          LCHANGE = .TRUE.
+          LSMCHNG = .TRUE.
+          LSM = LNLSM
+        ENDIF
+      ENDIF
+C
+      IF( .NOT. LWINDSET ) THEN
+        IF( NOTSAME(LNWIND,LWIND) ) LCHANGE = .TRUE.
+        LWIND = LNWIND
+      ENDIF
+C
+      IF( .NOT. LPRECSET ) THEN
+        IF( NOTSAME(LNPREC,LPREC) ) LCHANGE = .TRUE.
+        LPREC = LNPREC
+      ENDIF
+C
+      IF( .NOT. LSMPARSET ) THEN
+        IF( NOTSAME(LNSMPAR,LSMPAR) ) LCHANGE = .TRUE.
+        LSMPAR = LNSMPAR
+      ENDIF
+C
+      LPREC = PRECIP()
+C
+      RETURN
+C
+ 920  CONTINUE
+C
+      PDDEFS = JPROUTINE + 1
+      CALL INTLOG(JP_ERROR,'PDDEFS: Error closing file:',JPQUIET)
+      CALL INTLOG(JP_ERROR,FILENAME,JPQUIET)
+      RETURN
+C
+9000  FORMAT( I3,4(5X,A1))
+9001  FORMAT( 1X,I3,4(5X,A1))
+C
+      END
diff --git a/interpolation/ppallow.F b/interpolation/ppallow.F
new file mode 100755
index 0000000..e21a97b
--- /dev/null
+++ b/interpolation/ppallow.F
@@ -0,0 +1,227 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION PPALLOW(NM,SLAT)
+C
+C---->
+C**** PPALLOW
+C
+C     Purpose
+C     -------
+C
+C     
+C     ---------
+C
+C     LFOUND = PPALLOW(NM,SLAT) 
+C
+C
+C     Input
+C     -----
+C
+C     NM      - Triangular truncation number of the field..
+C     SLAT    - Rotation angle (degrees, REAL*8)
+C              (degrees, negative => rotate counter-clockwise about the
+C                                    new Z-axis).
+C
+C
+C     Output
+C     ------
+C
+C     Function returns .TRUE. if coefficients are in the list of
+C     'standard' rotations and allowed in mrfs.
+C
+C
+C     Method
+C     ------
+C
+C     Checks a configuration file to find the allowed rotations.
+C     This file may have its pathname given by the environment variable
+C     PP_ALLOWED_ROTATIONS or may be in a standard directory.
+C     Only picks up configuration values on first call.
+C
+C     The configuration file is read by Fortran and has format
+C     (I4,1X,F8). Eg.
+C
+C      159 -14.0000
+C      319  60.0000
+C      319 -60.0000
+C
+C     Externals
+C     ---------
+C
+C     GETENV - Gets value in an environment variable.
+C     INTLOG - Output log message.
+C     JDEBUG - Checks environment to switch on/off debug.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF       June 2000
+C
+C
+C----<
+C     -----------------------------------------------------------------|
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+#include "parim.h"
+C
+C     Function arguments.
+C
+      INTEGER NM
+      REAL*8 SLAT
+C
+C     Parameters.
+C
+      INTEGER JPLIST, JPDEFL
+      PARAMETER (JPLIST = 20 )
+C                       = number of values which can be read
+C
+      PARAMETER (JPDEFL = 3 )
+C                       = number of values in default list
+C
+C     Local variables.
+C
+      INTEGER FILENM, LOOP, LISTLEN
+      INTEGER NMDEF(JPDEFL), INM(JPLIST)
+      REAL*8 SLATDEF(JPDEFL), XLAT(JPLIST)
+      CHARACTER*256 FILENAME
+      CHARACTER*80 STANDARD
+      CHARACTER*16 HOST
+      LOGICAL LDEBUG, LFOUND
+C
+C     Externals
+C
+      DATA NMDEF/159,319,319/, SLATDEF/-14.0,60.0,-60.0/
+      DATA LDEBUG/.FALSE./, LFOUND/.FALSE./
+      DATA FILENM/65/
+C
+      SAVE LDEBUG, LFOUND, INM, XLAT, LISTLEN
+C
+C     -----------------------------------------------------------------|
+C*    Section 1.   Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      PPALLOW = .FALSE.
+C
+C     Only pick up configuration values on first call
+C
+      IF( LFOUND ) GOTO 400
+C
+      LFOUND = .TRUE.
+C
+      CALL JDEBUG()
+      LDEBUG = NDBG.GT.0
+C
+C     -----------------------------------------------------------------|
+C*    Section 2.   Open the configuration file
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     If the environment variable points to a file, try to open it.
+C     Otherwise, get the file from a standard directory.
+C
+      CALL GETENV('PP_ALLOWED_ROTATIONS', FILENAME)
+      IF( FILENAME(1:1).NE.' ' ) THEN
+        IF( LDEBUG) CALL INTLOG(JP_DEBUG,
+     X    'PPALLOW: Trying to open file '//FILENAME,JPQUIET)
+        OPEN( FILENM, FILE=FILENAME, STATUS='OLD', ERR=300)
+C
+      ELSE
+C
+        CALL GETENV('HOST',HOST)
+        IF( HOST(1:7).EQ.'vpp5000') THEN
+          STANDARD = '/vpp5000/mrfs/postproc/pp_allowed_rotations'
+        ELSE IF (HOST(1:7).EQ.'vpp700e') THEN
+          STANDARD = '/vpp700e/mrfs/postproc/pp_allowed_rotations'
+        ELSE IF (HOST(1:6).EQ.'vpp700') THEN
+          STANDARD = '/vpp700/mrfs/postproc/pp_allowed_rotations'
+        ELSE
+          STANDARD = '/home/ma/emos/data/pp_allowed_rotations'
+        ENDIF
+        IF( LDEBUG) CALL INTLOG(JP_DEBUG,
+     X    'PPALLOW: Trying to open file '//STANDARD,JPQUIET)
+        OPEN( FILENM, FILE=STANDARD, STATUS='OLD', ERR=300)
+      ENDIF
+C
+      IF( LDEBUG) CALL INTLOG(JP_DEBUG, 'PPALLOW: Open OK.',JPQUIET)
+      LISTLEN = 0
+C
+  210 CONTINUE
+C
+      LISTLEN = LISTLEN + 1
+      READ(FILENM,'(I4,1X,F8.4)',END=220) INM(LISTLEN), XLAT(LISTLEN)
+      GOTO 210
+C
+  220 CONTINUE
+      CLOSE(FILENM)
+      LISTLEN = LISTLEN - 1
+C
+      GOTO 400
+C
+C     -----------------------------------------------------------------|
+C*    Section 3.   Use the internally defined values.
+C     -----------------------------------------------------------------|
+C
+  300 CONTINUE
+C
+      IF( LDEBUG) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'PPALLOW: No configuration file available.',JPQUIET)
+        CALL INTLOG(JP_DEBUG,
+     X  'PPALLOW: Using internally defined values.',JPQUIET)
+      ENDIF
+C
+      DO LOOP = 1, JPDEFL
+        INM(LOOP)  = NMDEF(LOOP)
+        XLAT(LOOP) = SLATDEF(LOOP)
+      ENDDO
+      LISTLEN = JPDEFL
+C
+C     -----------------------------------------------------------------|
+C*    Section 4.   Check the current values against the list.
+C     -----------------------------------------------------------------|
+C
+  400 CONTINUE
+C
+      DO LOOP = 1, LISTLEN
+        IF( (NM.EQ.INM(LOOP)).AND.(SLAT.EQ.XLAT(LOOP)) ) THEN
+          IF( LDEBUG) THEN
+            CALL INTLOG(JP_DEBUG,
+     X      'PPALLOW: Rotation allowed in mrfs.',JPQUIET)
+            CALL INTLOG(JP_DEBUG, 'PPALLOW: Truncation = ',NM)
+            CALL INTLOGR(JP_DEBUG,'PPALLOW: Rotation = ', SLAT)
+          ENDIF
+          PPALLOW = .TRUE.
+          GOTO 900
+        ENDIF
+      ENDDO
+C
+      IF( LDEBUG ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'PPALLOW: Rotation NOT allowed in mrfs.',JPQUIET)
+        CALL INTLOG(JP_DEBUG, 'PPALLOW: Truncation = ',NM)
+        CALL INTLOGR(JP_DEBUG,'PPALLOW: Rotation = ', SLAT)
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      RETURN
+      END
+
diff --git a/interpolation/precip.F b/interpolation/precip.F
new file mode 100755
index 0000000..aa049b4
--- /dev/null
+++ b/interpolation/precip.F
@@ -0,0 +1,164 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      LOGICAL FUNCTION PRECIP()
+C
+C---->
+C**** PRECIP
+C
+C     Purpose
+C     -------
+C
+C     Determines whether or not the current field is to be
+C     considered for 'precipitation' treatment.
+C
+C
+C     Interface
+C     ---------
+C
+C     LPRECIP = PRECIP()
+C
+C     Input
+C     -----
+C
+C     None
+C
+C
+C     Output
+C     ------
+C
+C     Function returns .TRUE. if the field is to be treated as
+C     precipitation.
+C
+C
+C     Method
+C     ------
+C
+C     Uses a set of hardcoded rules.
+C
+C
+C     Externals
+C     ---------
+C
+C     INTLOG  - Logs messages
+C
+C     Uses common blocks nifld.common and nofld.common.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     April 2001
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+C
+C     Local variables
+C
+      LOGICAL LIKELY
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initialise
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+C     If 'useprecip' has been forced to 'yes' ...
+C
+      IF( LPRECSET ) THEN
+        PRECIP = LPREC
+        GOTO 900
+      ENDIF
+C
+C     WMO International table 001 for meteorological parameters
+C
+      IF ( NITABLE.EQ.1 ) THEN
+        LIKELY = ( NIPARAM.EQ.61 ).OR.
+     X           ( NIPARAM.EQ.62 ).OR.
+     X           ( NIPARAM.EQ.63 ).OR.
+     X           ( NIPARAM.EQ.64 ).OR.
+     X           ( NIPARAM.EQ.65)
+C
+C     ECMWF local code table 128 for meteorological parameters
+C
+      ELSEIF ( (NITABLE.EQ.128).OR.(NITABLE.EQ.129) ) THEN
+        LIKELY = ( NIPARAM.EQ.142 ).OR.
+     X           ( NIPARAM.EQ.143 ).OR.
+     X           ( NIPARAM.EQ.144 ).OR.
+     X           ( NIPARAM.EQ.228 ).OR.
+     X           ( NIPARAM.EQ.239 ).OR.
+     X           ( NIPARAM.EQ.240 )
+      ELSE
+        LIKELY = .FALSE.
+      ENDIF
+C
+      IF( .NOT.LIKELY ) THEN
+        PRECIP = .FALSE.
+        GOTO 900
+      ENDIF
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Work through the special cases
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Monthly forecast means using ECMWF local definition 16
+C
+      IF( NILOCAL.EQ.16 ) THEN
+        PRECIP = .FALSE.
+        GOTO 900
+      ENDIF
+C
+C     Extreme forecast index using ECMWF local definition 19
+C
+      IF( NILOCAL.EQ.19 ) THEN
+        PRECIP = .FALSE.
+        GOTO 900
+      ENDIF
+C
+C     Coupled Atmospheric, Wave and Ocean models (with hindcast support)
+C     using ECMWF local definition 23
+C
+      IF( NILOCAL.EQ.23 ) THEN
+        PRECIP = .FALSE.
+        GOTO 900
+      ENDIF
+C
+C     ERA fields using code table 160
+C
+      IF( NITABLE.EQ.160 ) THEN
+        PRECIP = .FALSE.
+        GOTO 900
+      ENDIF
+C
+      PRECIP = .TRUE.
+C
+C     -----------------------------------------------------------------|
+C*    Section 9.   Return
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( .NOT.PRECIP ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'PRECIP: Do not handle field as precipitation', JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X    'PRECIP: Handle field as precipitation', JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/qpassm.F b/interpolation/qpassm.F
new file mode 100755
index 0000000..ccfc0bf
--- /dev/null
+++ b/interpolation/qpassm.F
@@ -0,0 +1,759 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE QPASSM(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,LOT,N,IFAC,
+     *    LA,IERR)
+      DIMENSION A(N),B(N),C(N),D(N),TRIGS(N)
+C
+C---->
+C
+C     SUBROUTINE 'QPASSM' - PERFORMS ONE PASS THROUGH DATA AS PART
+C     OF MULTIPLE REAL FFT (FOURIER ANALYSIS) ROUTINE
+C
+C     A IS FIRST REAL INPUT VECTOR
+C         EQUIVALENCE B(1) WITH A(IFAC*LA*INC1+1)
+C     C IS FIRST REAL OUTPUT VECTOR
+C         EQUIVALENCE D(1) WITH C(LA*INC2+1)
+C     TRIGS IS A PRECALCULATED LIST OF SINES & COSINES
+C     INC1 IS THE ADDRESSING INCREMENT FOR A
+C     INC2 IS THE ADDRESSING INCREMENT FOR C
+C     INC3 IS THE INCREMENT BETWEEN INPUT VECTORS A
+C     INC4 IS THE INCREMENT BETWEEN OUTPUT VECTORS C
+C     LOT IS THE NUMBER OF VECTORS
+C     N IS THE LENGTH OF THE VECTORS
+C     IFAC IS THE CURRENT FACTOR OF N
+C     LA = N/(PRODUCT OF FACTORS USED SO FAR)
+C     IERR IS AN ERROR INDICATOR:
+C              0 - PASS COMPLETED WITHOUT ERROR
+C              1 - LOT GREATER THAN 64
+C              2 - IFAC NOT CATERED FOR
+C              3 - IFAC ONLY CATERED FOR IF LA=N/IFAC
+C
+C-----------------------------------------------------------------------
+C----<
+C
+      DATA SIN36/0.587785252292473/,SIN72/0.951056516295154/,
+     *    QRT5/0.559016994374947/,SIN60/0.866025403784437/
+C
+      M=N/IFAC
+      IINK=LA*INC1
+      JINK=LA*INC2
+      IJUMP=(IFAC-1)*IINK
+      KSTOP=(N-IFAC)/(2*IFAC)
+C
+      IBAD=1
+      IF (LOT.GT.64) GO TO 910
+      IBASE=0
+      JBASE=0
+      IGO=IFAC-1
+      IF (IGO.EQ.7) IGO=6
+      IBAD=2
+      IF (IGO.LT.1.OR.IGO.GT.6) GO TO 910
+      GO TO (200,300,400,500,600,800),IGO
+C
+C     CODING FOR FACTOR 2
+C     -------------------
+  200 CONTINUE
+      IA=1
+      IB=IA+IINK
+      JA=1
+      JB=JA+(2*M-LA)*INC2
+C
+      IF (LA.EQ.M) GO TO 290
+C
+      DO 220 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 210 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=A(IA+I)-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  210 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  220 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JA.EQ.JB) GO TO 260
+      DO 250 K=LA,KSTOP,LA
+      KB=K+K
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      JBASE=0
+      DO 240 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 230 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(C1*A(IB+I)+S1*B(IB+I))
+      C(JB+J)=A(IA+I)-(C1*A(IB+I)+S1*B(IB+I))
+      D(JA+J)=(C1*B(IB+I)-S1*A(IB+I))+B(IA+I)
+      D(JB+J)=(C1*B(IB+I)-S1*A(IB+I))-B(IA+I)
+      I=I+INC3
+      J=J+INC4
+  230 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  240 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB-JINK
+  250 CONTINUE
+      IF (JA.GT.JB) GO TO 900
+  260 CONTINUE
+      JBASE=0
+      DO 280 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 270 IJK=1,LOT
+      C(JA+J)=A(IA+I)
+      D(JA+J)=-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  270 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  280 CONTINUE
+      GO TO 900
+C
+  290 CONTINUE
+      Z=1.0/FLOAT(N)
+      DO 294 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 292 IJK=1,LOT
+      C(JA+J)=Z*(A(IA+I)+A(IB+I))
+      C(JB+J)=Z*(A(IA+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  292 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  294 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 3
+C     -------------------
+  300 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      JA=1
+      JB=JA+(2*M-LA)*INC2
+      JC=JB
+C
+      IF (LA.EQ.M) GO TO 390
+C
+      DO 320 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 310 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      C(JB+J)=A(IA+I)-0.5*(A(IB+I)+A(IC+I))
+      D(JB+J)=SIN60*(A(IC+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  310 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  320 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JA.EQ.JC) GO TO 360
+      DO 350 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      JBASE=0
+      DO 340 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 330 IJK=1,LOT
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C2*A(IC+I)+S2*B(IC+I))
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C2*B(IC+I)-S2*A(IC+I))
+      A2=A(IA+I)-0.5*A1
+      B2=B(IA+I)-0.5*B1
+      A3=SIN60*((C1*A(IB+I)+S1*B(IB+I))-(C2*A(IC+I)+S2*B(IC+I)))
+      B3=SIN60*((C1*B(IB+I)-S1*A(IB+I))-(C2*B(IC+I)-S2*A(IC+I)))
+      C(JA+J)=A(IA+I)+A1
+      D(JA+J)=B(IA+I)+B1
+      C(JB+J)=A2+B3
+      D(JB+J)=B2-A3
+      C(JC+J)=A2-B3
+      D(JC+J)=-(B2+A3)
+      I=I+INC3
+      J=J+INC4
+  330 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  340 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC-JINK
+  350 CONTINUE
+      IF (JA.GT.JC) GO TO 900
+  360 CONTINUE
+      JBASE=0
+      DO 380 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 370 IJK=1,LOT
+      C(JA+J)=A(IA+I)+0.5*(A(IB+I)-A(IC+I))
+      D(JA+J)=-SIN60*(A(IB+I)+A(IC+I))
+      C(JB+J)=A(IA+I)-(A(IB+I)-A(IC+I))
+      I=I+INC3
+      J=J+INC4
+  370 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  380 CONTINUE
+      GO TO 900
+C
+  390 CONTINUE
+      Z=1.0/FLOAT(N)
+      ZSIN60=Z*SIN60
+      DO 394 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 392 IJK=1,LOT
+      C(JA+J)=Z*(A(IA+I)+(A(IB+I)+A(IC+I)))
+      C(JB+J)=Z*(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))
+      D(JB+J)=ZSIN60*(A(IC+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  392 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  394 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 4
+C     -------------------
+  400 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      JA=1
+      JB=JA+(2*M-LA)*INC2
+      JC=JB+2*M*INC2
+      JD=JB
+C
+      IF (LA.EQ.M) GO TO 490
+C
+      DO 420 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 410 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))
+      C(JC+J)=(A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I))
+      C(JB+J)=A(IA+I)-A(IC+I)
+      D(JB+J)=A(ID+I)-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  410 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  420 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC-JINK
+      JD=JD-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JB.EQ.JC) GO TO 460
+      DO 450 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      JBASE=0
+      DO 440 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 430 IJK=1,LOT
+      A0=A(IA+I)+(C2*A(IC+I)+S2*B(IC+I))
+      A2=A(IA+I)-(C2*A(IC+I)+S2*B(IC+I))
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C3*A(ID+I)+S3*B(ID+I))
+      A3=(C1*A(IB+I)+S1*B(IB+I))-(C3*A(ID+I)+S3*B(ID+I))
+      B0=B(IA+I)+(C2*B(IC+I)-S2*A(IC+I))
+      B2=B(IA+I)-(C2*B(IC+I)-S2*A(IC+I))
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C3*B(ID+I)-S3*A(ID+I))
+      B3=(C1*B(IB+I)-S1*A(IB+I))-(C3*B(ID+I)-S3*A(ID+I))
+      C(JA+J)=A0+A1
+      C(JC+J)=A0-A1
+      D(JA+J)=B0+B1
+      D(JC+J)=B1-B0
+      C(JB+J)=A2+B3
+      C(JD+J)=A2-B3
+      D(JB+J)=B2-A3
+      D(JD+J)=-(B2+A3)
+      I=I+INC3
+      J=J+INC4
+  430 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  440 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC-JINK
+      JD=JD-JINK
+  450 CONTINUE
+      IF (JB.GT.JC) GO TO 900
+  460 CONTINUE
+      SIN45=SQRT(0.5)
+      JBASE=0
+      DO 480 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 470 IJK=1,LOT
+      C(JA+J)=A(IA+I)+SIN45*(A(IB+I)-A(ID+I))
+      C(JB+J)=A(IA+I)-SIN45*(A(IB+I)-A(ID+I))
+      D(JA+J)=-A(IC+I)-SIN45*(A(IB+I)+A(ID+I))
+      D(JB+J)=A(IC+I)-SIN45*(A(IB+I)+A(ID+I))
+      I=I+INC3
+      J=J+INC4
+  470 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  480 CONTINUE
+      GO TO 900
+C
+  490 CONTINUE
+      Z=1.0/FLOAT(N)
+      DO 494 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 492 IJK=1,LOT
+      C(JA+J)=Z*((A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I)))
+      C(JC+J)=Z*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+      C(JB+J)=Z*(A(IA+I)-A(IC+I))
+      D(JB+J)=Z*(A(ID+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  492 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  494 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 5
+C     -------------------
+  500 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      IE=ID+IINK
+      JA=1
+      JB=JA+(2*M-LA)*INC2
+      JC=JB+2*M*INC2
+      JD=JC
+      JE=JB
+C
+      IF (LA.EQ.M) GO TO 590
+C
+      DO 520 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 510 IJK=1,LOT
+      A1=A(IB+I)+A(IE+I)
+      A3=A(IB+I)-A(IE+I)
+      A2=A(IC+I)+A(ID+I)
+      A4=A(IC+I)-A(ID+I)
+      A5=A(IA+I)-0.25*(A1+A2)
+      A6=QRT5*(A1-A2)
+      C(JA+J)=A(IA+I)+(A1+A2)
+      C(JB+J)=A5+A6
+      C(JC+J)=A5-A6
+      D(JB+J)=-SIN72*A3-SIN36*A4
+      D(JC+J)=-SIN36*A3+SIN72*A4
+      I=I+INC3
+      J=J+INC4
+  510 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  520 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JB.EQ.JD) GO TO 560
+      DO 550 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      JBASE=0
+      DO 540 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 530 IJK=1,LOT
+      A1=(C1*A(IB+I)+S1*B(IB+I))+(C4*A(IE+I)+S4*B(IE+I))
+      A3=(C1*A(IB+I)+S1*B(IB+I))-(C4*A(IE+I)+S4*B(IE+I))
+      A2=(C2*A(IC+I)+S2*B(IC+I))+(C3*A(ID+I)+S3*B(ID+I))
+      A4=(C2*A(IC+I)+S2*B(IC+I))-(C3*A(ID+I)+S3*B(ID+I))
+      B1=(C1*B(IB+I)-S1*A(IB+I))+(C4*B(IE+I)-S4*A(IE+I))
+      B3=(C1*B(IB+I)-S1*A(IB+I))-(C4*B(IE+I)-S4*A(IE+I))
+      B2=(C2*B(IC+I)-S2*A(IC+I))+(C3*B(ID+I)-S3*A(ID+I))
+      B4=(C2*B(IC+I)-S2*A(IC+I))-(C3*B(ID+I)-S3*A(ID+I))
+      A5=A(IA+I)-0.25*(A1+A2)
+      A6=QRT5*(A1-A2)
+      B5=B(IA+I)-0.25*(B1+B2)
+      B6=QRT5*(B1-B2)
+      A10=A5+A6
+      A20=A5-A6
+      B10=B5+B6
+      B20=B5-B6
+      A11=SIN72*B3+SIN36*B4
+      A21=SIN36*B3-SIN72*B4
+      B11=SIN72*A3+SIN36*A4
+      B21=SIN36*A3-SIN72*A4
+      C(JA+J)=A(IA+I)+(A1+A2)
+      C(JB+J)=A10+A11
+      C(JE+J)=A10-A11
+      C(JC+J)=A20+A21
+      C(JD+J)=A20-A21
+      D(JA+J)=B(IA+I)+(B1+B2)
+      D(JB+J)=B10-B11
+      D(JE+J)=-(B10+B11)
+      D(JC+J)=B20-B21
+      D(JD+J)=-(B20+B21)
+      I=I+INC3
+      J=J+INC4
+  530 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  540 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+  550 CONTINUE
+      IF (JB.GT.JD) GO TO 900
+  560 CONTINUE
+      JBASE=0
+      DO 580 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 570 IJK=1,LOT
+      A1=A(IB+I)+A(IE+I)
+      A3=A(IB+I)-A(IE+I)
+      A2=A(IC+I)+A(ID+I)
+      A4=A(IC+I)-A(ID+I)
+      A5=A(IA+I)+0.25*(A3-A4)
+      A6=QRT5*(A3+A4)
+      C(JA+J)=A5+A6
+      C(JB+J)=A5-A6
+      C(JC+J)=A(IA+I)-(A3-A4)
+      D(JA+J)=-SIN36*A1-SIN72*A2
+      D(JB+J)=-SIN72*A1+SIN36*A2
+      I=I+INC3
+      J=J+INC4
+  570 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  580 CONTINUE
+      GO TO 900
+C
+  590 CONTINUE
+      Z=1.0/FLOAT(N)
+      ZQRT5=Z*QRT5
+      ZSIN36=Z*SIN36
+      ZSIN72=Z*SIN72
+      DO 594 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 592 IJK=1,LOT
+      A1=A(IB+I)+A(IE+I)
+      A3=A(IB+I)-A(IE+I)
+      A2=A(IC+I)+A(ID+I)
+      A4=A(IC+I)-A(ID+I)
+      A5=Z*(A(IA+I)-0.25*(A1+A2))
+      A6=ZQRT5*(A1-A2)
+      C(JA+J)=Z*(A(IA+I)+(A1+A2))
+      C(JB+J)=A5+A6
+      C(JC+J)=A5-A6
+      D(JB+J)=-ZSIN72*A3-ZSIN36*A4
+      D(JC+J)=-ZSIN36*A3+ZSIN72*A4
+      I=I+INC3
+      J=J+INC4
+  592 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  594 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 6
+C     -------------------
+  600 CONTINUE
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      IE=ID+IINK
+      IF=IE+IINK
+      JA=1
+      JB=JA+(2*M-LA)*INC2
+      JC=JB+2*M*INC2
+      JD=JC+2*M*INC2
+      JE=JC
+      JF=JB
+C
+      IF (LA.EQ.M) GO TO 690
+C
+      DO 620 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 610 IJK=1,LOT
+      A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))
+      C(JA+J)=(A(IA+I)+A(ID+I))+A11
+      C(JC+J)=(A(IA+I)+A(ID+I)-0.5*A11)
+      D(JC+J)=SIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))
+      A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))
+      C(JB+J)=(A(IA+I)-A(ID+I))-0.5*A11
+      D(JB+J)=SIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))
+      C(JD+J)=(A(IA+I)-A(ID+I))+A11
+      I=I+INC3
+      J=J+INC4
+  610 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  620 CONTINUE
+      JA=JA+JINK
+      JINK=2*JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+      JF=JF-JINK
+      IBASE=IBASE+IJUMP
+      IJUMP=2*IJUMP+IINK
+      IF (JC.EQ.JD) GO TO 660
+      DO 650 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      KF=KE+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      C5=TRIGS(KF+1)
+      S5=TRIGS(KF+2)
+      JBASE=0
+      DO 640 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 630 IJK=1,LOT
+      A1=C1*A(IB+I)+S1*B(IB+I)
+      B1=C1*B(IB+I)-S1*A(IB+I)
+      A2=C2*A(IC+I)+S2*B(IC+I)
+      B2=C2*B(IC+I)-S2*A(IC+I)
+      A3=C3*A(ID+I)+S3*B(ID+I)
+      B3=C3*B(ID+I)-S3*A(ID+I)
+      A4=C4*A(IE+I)+S4*B(IE+I)
+      B4=C4*B(IE+I)-S4*A(IE+I)
+      A5=C5*A(IF+I)+S5*B(IF+I)
+      B5=C5*B(IF+I)-S5*A(IF+I)
+      A11=(A2+A5)+(A1+A4)
+      A20=(A(IA+I)+A3)-0.5*A11
+      A21=SIN60*((A2+A5)-(A1+A4))
+      B11=(B2+B5)+(B1+B4)
+      B20=(B(IA+I)+B3)-0.5*B11
+      B21=SIN60*((B2+B5)-(B1+B4))
+      C(JA+J)=(A(IA+I)+A3)+A11
+      D(JA+J)=(B(IA+I)+B3)+B11
+      C(JC+J)=A20-B21
+      D(JC+J)=A21+B20
+      C(JE+J)=A20+B21
+      D(JE+J)=A21-B20
+      A11=(A2-A5)+(A4-A1)
+      A20=(A(IA+I)-A3)-0.5*A11
+      A21=SIN60*((A4-A1)-(A2-A5))
+      B11=(B5-B2)-(B4-B1)
+      B20=(B3-B(IA+I))-0.5*B11
+      B21=SIN60*((B5-B2)+(B4-B1))
+      C(JB+J)=A20-B21
+      D(JB+J)=A21-B20
+      C(JD+J)=A11+(A(IA+I)-A3)
+      D(JD+J)=B11+(B3-B(IA+I))
+      C(JF+J)=A20+B21
+      D(JF+J)=A21+B20
+      I=I+INC3
+      J=J+INC4
+  630 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  640 CONTINUE
+      IBASE=IBASE+IJUMP
+      JA=JA+JINK
+      JB=JB+JINK
+      JC=JC+JINK
+      JD=JD-JINK
+      JE=JE-JINK
+      JF=JF-JINK
+  650 CONTINUE
+      IF (JC.GT.JD) GO TO 900
+  660 CONTINUE
+      JBASE=0
+      DO 680 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 670 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+0.5*(A(IC+I)-A(IE+I)))+ SIN60*(A(IB+I)-A(IF+I))
+      D(JA+J)=-(A(ID+I)+0.5*(A(IB+I)+A(IF+I)))-SIN60*(A(IC+I)+A(IE+I))
+      C(JB+J)=A(IA+I)-(A(IC+I)-A(IE+I))
+      D(JB+J)=A(ID+I)-(A(IB+I)+A(IF+I))
+      C(JC+J)=(A(IA+I)+0.5*(A(IC+I)-A(IE+I)))-SIN60*(A(IB+I)-A(IF+I))
+      D(JC+J)=-(A(ID+I)+0.5*(A(IB+I)+A(IF+I)))+SIN60*(A(IC+I)+A(IE+I))
+      I=I+INC3
+      J=J+INC4
+  670 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  680 CONTINUE
+      GO TO 900
+C
+  690 CONTINUE
+      Z=1.0/FLOAT(N)
+      ZSIN60=Z*SIN60
+      DO 694 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 692 IJK=1,LOT
+      A11=(A(IC+I)+A(IF+I))+(A(IB+I)+A(IE+I))
+      C(JA+J)=Z*((A(IA+I)+A(ID+I))+A11)
+      C(JC+J)=Z*((A(IA+I)+A(ID+I))-0.5*A11)
+      D(JC+J)=ZSIN60*((A(IC+I)+A(IF+I))-(A(IB+I)+A(IE+I)))
+      A11=(A(IC+I)-A(IF+I))+(A(IE+I)-A(IB+I))
+      C(JB+J)=Z*((A(IA+I)-A(ID+I))-0.5*A11)
+      D(JB+J)=ZSIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))
+      C(JD+J)=Z*((A(IA+I)-A(ID+I))+A11)
+      I=I+INC3
+      J=J+INC4
+  692 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  694 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 8
+C     -------------------
+  800 CONTINUE
+      IBAD=3
+      IF (LA.NE.M) GO TO 910
+      IA=1
+      IB=IA+IINK
+      IC=IB+IINK
+      ID=IC+IINK
+      IE=ID+IINK
+      IF=IE+IINK
+      IG=IF+IINK
+      IH=IG+IINK
+      JA=1
+      JB=JA+LA*INC2
+      JC=JB+2*M*INC2
+      JD=JC+2*M*INC2
+      JE=JD+2*M*INC2
+      Z=1.0/FLOAT(N)
+      ZSIN45=Z*SQRT(0.5)
+C
+      DO 820 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 810 IJK=1,LOT
+      C(JA+J)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))+
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))
+      C(JE+J)=Z*(((A(IA+I)+A(IE+I))+(A(IC+I)+A(IG+I)))-
+     *    ((A(ID+I)+A(IH+I))+(A(IB+I)+A(IF+I))))
+      C(JC+J)=Z*((A(IA+I)+A(IE+I))-(A(IC+I)+A(IG+I)))
+      D(JC+J)=Z*((A(ID+I)+A(IH+I))-(A(IB+I)+A(IF+I)))
+      C(JB+J)=Z*(A(IA+I)-A(IE+I))
+     *    +ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))
+      C(JD+J)=Z*(A(IA+I)-A(IE+I))
+     *    -ZSIN45*((A(IH+I)-A(ID+I))-(A(IF+I)-A(IB+I)))
+      D(JB+J)=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))
+     *    +Z*(A(IG+I)-A(IC+I))
+      D(JD+J)=ZSIN45*((A(IH+I)-A(ID+I))+(A(IF+I)-A(IB+I)))
+     *    -Z*(A(IG+I)-A(IC+I))
+      I=I+INC3
+      J=J+INC4
+  810 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  820 CONTINUE
+C
+C     RETURN
+C     ------
+  900 CONTINUE
+      IBAD=0
+  910 CONTINUE
+      IERR=IBAD
+      RETURN
+      END
diff --git a/interpolation/rddefs.c b/interpolation/rddefs.c
new file mode 100755
index 0000000..417a80f
--- /dev/null
+++ b/interpolation/rddefs.c
@@ -0,0 +1,481 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "fortint.h"
+
+#define LINESIZE 80
+#define format 0x666F726D
+#define table 0x7461626C
+#define parameter 0x70617261
+#define truncation 0x7472756E
+#define accuracy 0x61636375
+#define grid 0x67726964
+#define gaussian 0x67617573
+#define area 0x61726561
+#define scan 0x7363616E
+#define reduced 0x72656475
+#define uselsm 0x7573656C
+#define usewind 0x75736577
+#define useprecip 0x75736570
+#define lsm_param 0x6C736D5F
+
+/*
+// defines for FORTRAN subroutine
+*/
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define CLEAR_C clear_c
+#define IAINIT iainit
+#define INIT_CM init_cm
+#define RDDEFS rddefs
+#else
+#define CLEAR_C clear_c_
+#define IAINIT iainit_
+#define INIT_CM init_cm_
+#define RDDEFS rddefs_
+#endif
+#endif
+
+#define NIFORM 1
+#define NOFORM 2
+#define NITABLE 3
+#define NIPARAM 4
+#define NIRESO 5
+#define NORESO 6
+#define NOACC 7
+#define NIGRID1 8
+#define NIGRID2 9
+#define NOGRID1 10
+#define NOGRID2 11
+#define NIGAUSS 12
+#define NOGAUSS 13
+#define NIAREA1 14
+#define NIAREA2 15
+#define NIAREA3 16
+#define NIAREA4 17
+#define NOAREA1 18
+#define NOAREA2 19
+#define NOAREA3 20
+#define NOAREA4 21
+#define NISCNM  22
+#define NOSCNM  23
+#define LSM     24
+#define LWIND   25
+#define LPREC   26
+#define NIREDU  27
+#define NOREDU  28
+#define LSMPAR  29
+
+/*
+// Prototypes
+*/
+void set_format(char * inputval, char * outputval);
+void set_table(char * inputval, char * outputval);
+void set_parameter(char * inputval, char * outputval);
+void set_truncation(char * inputval, char * outputval);
+void set_accuracy(char * inputval, char * outputval);
+void set_grid(char * inputval, char * outputval);
+void set_gaussian(char * inputval, char * outputval);
+void set_area(char * inputval, char * outputval);
+void set_scan(char * inputval, char * outputval);
+void set_reduced(char * inputval, char * outputval);
+void set_uselsm(char * inputval, char * outputval);
+void set_usewind(char * inputval, char * outputval);
+void set_useprecip(char * inputval, char * outputval);
+void set_lsm_param(char * inputval, char * outputval);
+void INIT_CM( fortint *, fortint *);
+
+fortint RDDEFS()
+{
+/*
+// The file handling is currently not used!
+//
+// char * fallback_defaults_file = "/home/ma/mac/public/gp2gp/request_defaults";
+// char * fallback_defaults_file = "/home/ma/mac/public/gp2gp/no_chance";
+// char * defaults_file;
+*/
+FILE * file;
+int i_status;
+char line[LINESIZE+1];
+char keyword[LINESIZE];
+char inputval[LINESIZE];
+char outputval[LINESIZE];
+int count = 0, i;
+unsigned long code=0;
+int kpr = 0;
+int kerr = 1;
+
+/*
+//  Clear the common block
+*/
+    CLEAR_C();
+    IAINIT( &kpr, kerr);
+
+/*
+// The file handling is currently not used!
+//
+// Open the file defining the defaults
+//
+// defaults_file = getenv("REQUEST_DEFAULTS");
+//  if( defaults_file == NULL )
+//      defaults_file = fallback_defaults_file;
+//
+//  file = fopen( defaults_file, "r");
+//
+//
+//  If no file, set the defaults here
+*/
+    file = NULL;                        /* file handling currently not used! */
+    if( file == NULL ) {
+      set_format("grib","grib");
+      set_table("128","");
+      set_parameter("0","");
+      set_area("0/0/0/0","0/0/0/0");
+      set_scan("0","0");
+      return 0;
+    }
+
+/*
+//  Ignore the 2 title lines, then a line at a time from the file
+*/
+    while( fgets( line, LINESIZE, file) != NULL ) {
+      count++;
+      if ( count > 2 ) {
+/*
+//      Split the line up
+*/
+        i_status = sscanf( line, "%s%s%s", keyword, inputval, outputval);
+        if ( (i_status != 3) && (i_status != EOF ) ) {
+          perror("sscanf failed");
+          exit(1);
+        }
+/*
+//      Move first 4 characters of the keyword into the switch variable
+*/
+        for( i = 0; i < 4; i++ )
+          code = ( (code << 8) + *(keyword+i) ) & 0xFFFFFFFF;
+
+/*
+//      Handle the keywords individually
+*/
+        switch( code ) {
+
+          case format:     set_format(inputval, outputval);
+                           break;
+
+          case table:      set_table(inputval, outputval);
+                           break;
+
+          case parameter:  set_parameter(inputval, outputval);
+                           break;
+
+          case truncation: set_truncation(inputval, outputval);
+                    break;
+
+          case accuracy:   set_accuracy(inputval, outputval);
+                           break;
+
+          case grid:       set_grid(inputval, outputval);
+                           break;
+
+          case gaussian:   set_gaussian(inputval, outputval);
+                           break;
+
+          case area:       set_area(inputval, outputval);
+                           break;
+
+          case scan:       set_scan(inputval, outputval);
+                           break;
+
+          case reduced:    set_reduced(inputval, outputval);
+                           break;
+
+          case uselsm:     set_uselsm(inputval, outputval);
+                           break;
+
+          case usewind:    set_usewind(inputval, outputval);
+                           break;
+
+          case useprecip:  set_useprecip(inputval, outputval);
+                           break;
+
+          case lsm_param:  set_lsm_param(inputval, outputval);
+                           break;
+
+          default:         printf("Invalid code: %x\n", code);
+                           break;
+        }
+      }
+    }
+
+    return 0;
+}
+
+void set_format(char * inputval, char * outputval)
+{
+fortint p1, p_1 = 1, p_0 = 0;
+
+    p1 = NIFORM;
+    if ( strcmp( inputval, "grib") == 0 )
+        INIT_CM( &p1, &p_1);
+    else
+        INIT_CM( &p1, &p_0);
+
+    p1 = NOFORM;
+    if ( strcmp( outputval, "grib") == 0 )
+        INIT_CM( &p1, &p_1);
+    else
+        INIT_CM( &p1, &p_0);
+
+    return;
+}
+
+void set_table(char * inputval, char * outputval)
+{
+fortint p1, p2;
+int q2;
+
+    p1 = NITABLE;
+    q2 = atoi( inputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+
+    return;
+}
+
+void set_parameter(char * inputval, char * outputval)
+{
+fortint p1, p2;
+int q2;
+
+    p1 = NIPARAM;
+    q2 = atoi( inputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+
+    return;
+}
+
+void set_truncation(char * inputval, char * outputval)
+{
+fortint p1, p2;
+int q2;
+
+    p1 = NIRESO;
+    q2 = atoi( inputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+
+    p1 = NORESO;
+    q2 = atoi( outputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+
+    return;
+}
+
+void set_accuracy(char * inputval, char * outputval)
+{
+fortint p1, p2;
+int q2;
+ 
+    p1 = NOACC;
+    q2 = atoi( outputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+ 
+    return;
+}
+
+void set_grid(char * inputval, char * outputval)
+{
+fortint p1,p2,p3;
+int q2,q3;
+
+    p1 = NIGRID1;
+    sscanf( inputval, "%d/%d", &q2, &q3);
+    p2 = (fortint) q2;
+    p3 = (fortint) q3;
+    INIT_CM( &p1, &p2);
+
+    p1 = NIGRID2;
+    INIT_CM( &p1, &p3);
+    
+    p1 = NOGRID1;
+    sscanf( outputval, "%d/%d", &q2, &q3);
+    p2 = (fortint) q2;
+    p3 = (fortint) q3;
+    INIT_CM( &p1, &p2);
+
+    p1 = NOGRID2;
+    INIT_CM( &p1, &p3);
+    
+    return;
+}
+
+void set_gaussian(char * inputval, char * outputval)
+{
+fortint p1, p2;
+int q2;
+
+    p1 = NIGAUSS;
+    q2 = atoi( inputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+
+    p1 = NOGAUSS;
+    q2 = atoi( outputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+
+    return;
+}
+
+void set_area(char * inputval, char * outputval)
+{
+fortint p1,p2,p3,p4,p5;
+int q2, q3, q4, q5;
+
+    p1 = NIAREA1;
+    sscanf( inputval, "%d/%d/%d/%d", &q2, &q3,&q4,&q5);
+    p2 = (fortint) q2;
+    p3 = (fortint) q3;
+    p4 = (fortint) q4;
+    p5 = (fortint) q5;
+    INIT_CM( &p1, &p2);
+
+    p1 = NIAREA2;
+    INIT_CM( &p1, &p3);
+
+    p1 = NIAREA3;
+    INIT_CM( &p1, &p4);
+
+    p1 = NIAREA4;
+    INIT_CM( &p1, &p5);
+    
+    p1 = NOAREA1;
+    sscanf( outputval, "%d/%d/%d/%d", &q2, &q3,&q4,&q5);
+    p2 = (fortint) q2;
+    p3 = (fortint) q3;
+    p4 = (fortint) q4;
+    p5 = (fortint) q5;
+    INIT_CM( &p1, &p2);
+
+    p1 = NOAREA2;
+    INIT_CM( &p1, &p3);
+
+    p1 = NOAREA3;
+    INIT_CM( &p1, &p4);
+
+    p1 = NOAREA4;
+    INIT_CM( &p1, &p5);
+    
+    return;
+}
+
+void set_scan(char * inputval, char * outputval)
+{
+fortint p1, p2;
+int q2;
+ 
+    p1 = NISCNM;
+    q2 = atoi( inputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+ 
+    p1 = NOSCNM;
+    q2 = atoi( outputval );
+    p2 = (fortint) q2;
+    INIT_CM( &p1, &p2);
+ 
+    return;
+}
+
+void set_reduced(char * inputval, char * outputval)
+{
+fortint p1, p2;
+ 
+    p1 = NIREDU;
+    if ( strcmp( inputval, "standard" ) == 0 )
+        p2 = 1;
+    else
+        p2 = 0;
+    INIT_CM( &p1, &p2);
+ 
+    p1 = NOREDU;
+    if ( strcmp( outputval, "standard" ) == 0 )
+        p2 = 1;
+    else
+        p2 = 0;
+    INIT_CM( &p1, &p2);
+
+    return;
+}
+
+void set_uselsm(char * inputval, char * outputval)
+{
+fortint p1, p2;
+ 
+    p1 = LSM;
+    if ( strcmp( inputval, "yes" ) == 0 )
+        p2 = 1;
+    else
+        p2 = 0;
+    INIT_CM( &p1, &p2);
+ 
+    return;
+}
+
+void set_usewind(char * inputval, char * outputval)
+{
+fortint p1, p2;
+ 
+    p1 = LWIND;
+    if ( strcmp( inputval, "yes" ) == 0 )
+        p2 = 1;
+    else
+        p2 = 0;
+    INIT_CM( &p1, &p2);
+ 
+    return;
+}
+
+void set_useprecip(char * inputval, char * outputval)
+{
+fortint p1, p2;
+ 
+    p1 = LPREC;
+    if ( strcmp( inputval, "yes" ) == 0 )
+        p2 = 1;
+    else
+        p2 = 0;
+    INIT_CM( &p1, &p2);
+ 
+    return;
+}
+
+void set_lsm_param(char * inputval, char * outputval)
+{
+fortint p1, p2;
+ 
+    p1 = LSMPAR;
+    if ( strcmp( inputval, "yes" ) == 0 )
+        p2 = 1;
+    else
+        p2 = 0;
+    INIT_CM( &p1, &p2);
+
+    return;
+}
+
diff --git a/interpolation/rename_unlink.c b/interpolation/rename_unlink.c
new file mode 100755
index 0000000..5282ea2
--- /dev/null
+++ b/interpolation/rename_unlink.c
@@ -0,0 +1,79 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "fortdefs.h"
+
+/*
+// NB. Don't need the versions without underscore, they exist in
+//     standard libraries (?!).
+*/
+#define RENAME rename_
+#define UNLINK unlink_
+#define GETPID getpid_
+
+fortint GETPID(void) {
+    return (fortint) getpid();
+}
+
+fortint RENAME( char * oldname, char * newname, int lold, int lnew) {
+char * old, * new;
+fortint status;
+
+    old = (char *) malloc(lold+1);
+    if( old == NULL ) {
+      perror("RENAME: malloc failed for old");
+      return (fortint) -1;
+    }
+    new = (char *) malloc(lnew+1);
+    if( new == NULL ) {
+      perror("RENAME: malloc failed for new");
+      free(old);
+      return (fortint) -1;
+    }
+
+    strncpy(old,oldname,lold);
+    strncpy(new,newname,lnew);
+
+    old[lold] = '\0';
+    new[lold] = '\0';
+
+    status = (fortint) rename(old,new);
+
+    free(old);
+    free(new);
+
+    return status;
+}
+
+fortint UNLINK( char * oldname, int lold) {
+char * old;
+fortint status;
+
+    old = (char *) malloc(lold+1);
+    if( old == NULL ) {
+      perror("UNLINK: malloc failed for old");
+      return (fortint) -1;
+    }
+
+    strncpy(old,oldname,lold);
+    old[lold] = '\0';
+
+    status = (fortint) unlink(old);
+
+    free(old);
+
+    return status;
+}
diff --git a/interpolation/request_defaults b/interpolation/request_defaults
new file mode 100755
index 0000000..c5b9c95
--- /dev/null
+++ b/interpolation/request_defaults
@@ -0,0 +1,11 @@
+Parameter                Input                      Output
+---------                -----                      ------
+format                   grib                       grib
+area                     0/0/0/0                    0/0/0/0
+scan                     0                          0
+table                    128                        not_applicable
+uselsm                   parameter_dependent        not_applicable
+usewind                  parameter_dependent        not_applicable
+useprecip                parameter_dependent        not_applicable
+lsm_param                parameter_dependent        not_applicable
+
diff --git a/interpolation/reset_c.F b/interpolation/reset_c.F
new file mode 100755
index 0000000..a4e15b4
--- /dev/null
+++ b/interpolation/reset_c.F
@@ -0,0 +1,640 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION RESET_C( KSEC1, KSEC2, PSEC2, KSEC4)
+C
+C---->
+C***  RESET_C
+C
+C     Purpose
+C     -------
+C
+C     Reset interpolation common block variables according to the
+C     GRIB sections 1, 2 and 4 values.
+C 
+C
+C     Interface
+C     ---------
+C
+C     IRET = RESET_C( KSEC1, KSEC2, PSEC2, KSEC4)
+C
+C
+C     Input
+C     -----
+C
+C     KSEC1   - GRIB section 1 array (integers).
+C     KSEC2   - GRIB section 2 array (integers).
+C     PSEC2   - GRIB section 2 array (reals).
+C     KSEC4   - GRIB section 4 array (integers).
+C
+C
+C     Externals
+C     ---------
+C
+C     IGGLAT  - Computes gaussian latitudes for a given truncation.
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers          ECMWF    August, 1994
+C
+C----<
+C
+      IMPLICIT NONE
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grfixed.h"
+#include "current.h"
+C
+C     Function arguments
+C
+      INTEGER KSEC1, KSEC2, KSEC4
+      DIMENSION KSEC1(*), KSEC2(*), KSEC4(*)
+      REAL PSEC2
+      DIMENSION PSEC2(*)
+C
+C     Local variables
+C
+      INTEGER JJPR, JJERR, ITEMP
+      INTEGER I, IRET
+      LOGICAL LSAME, LPQUASI
+C
+C     Externals
+C
+      INTEGER IGGLAT
+      EXTERNAL IGGLAT
+C
+C-----------------------------------------------------------------------
+C     Section 1.   Initialise
+C-----------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      RESET_C = 0
+C
+      LPQUASI = ( KSEC2(17).EQ.1 )
+C
+C     Section 1, Word 1 - version number of WMO code table
+C
+      IF( NITABLE.NE.KSEC1(1) ) LCHANGE = .TRUE.
+      NITABLE = KSEC1(1)
+      IF( .NOT.LNOTABL ) NOTABLE = NITABLE
+C
+C     Section 1, Word 6 - parameter indicator (Code Table 2)
+C
+      NIPARAM = KSEC1(6)
+      IF( .NOT.LNOPARA ) NOPARAM = NIPARAM
+C
+C     Section 1, Word 7 - Type of level indicator (Code Table 3)
+C
+      NILEVT = KSEC1(7)
+      IF( .NOT.LNOLEVT ) NOLEVT = NILEVT
+C
+C     By default, upper air level does not use land-sea mask.
+C     (pressure level, sigma_level, model level, missing level)
+C
+      IF( (NOLEVT.EQ.100) .OR.
+     X    (NOLEVT.EQ.108) .OR.
+     X    (NOLEVT.EQ.109) .OR.
+     X    (NOLEVT.EQ.255) ) THEN
+        LSM     = .FALSE.
+        LSMSET  = .TRUE.
+        LSMCHNG = .FALSE.
+      ELSE
+        LSM     = .TRUE.
+        LSMSET  = .FALSE.
+        LSMCHNG = .TRUE.
+      ENDIF
+C
+C     Section 1, Word 8 - Height or pressure of level (Code Table 3)
+C
+      NILEVEL = KSEC1(8)
+      IF( .NOT.LNOLEVL ) NOLEVEL = NILEVEL
+C
+C     Setup ECMWF local definition number and stream if applicable
+C
+      IF( KSEC1(24).EQ.1 ) THEN
+        NILOCAL = KSEC1(37)
+        NISTREM = KSEC1(40)
+      ELSE
+        NILOCAL = 0
+        NISTREM = 0
+      ENDIF
+C
+C     Section 2, Word   1    Data representation type (Code Table 6).
+C
+      IF( NIREPR.NE.KSEC2(1) ) THEN
+        LCHANGE = .TRUE.
+        NIGAUSO = 0
+        HIGAUST = 'X'
+        IF( .NOT.LNOGAUS ) THEN
+          NOGAUSO = 0
+          HOGAUST = 'X'
+        ENDIF
+      ENDIF
+      NIREPR = KSEC2(1)
+      IF( .NOT.LNOREPR ) NOREPR = NIREPR
+C
+C     Date of the input field (YYYYMMDD).
+C
+      NIDATE = (KSEC1(21)-1)*1000000
+     X          + KSEC1(10)*10000 + KSEC1(11)*100 + KSEC1(12)
+      NODATE = NIDATE
+C
+C     Stretching factor (if any)
+C
+      IF( (NIREPR.EQ.JPSTRGG).OR.(NIREPR.EQ.JPSTRSH) ) THEN
+        RISTRET = PSEC2(2)
+        IF( NIREPR.EQ.NOREPR ) THEN
+          IF( NIREPR.EQ.JPSTRGG ) NOREPR = JPGAUSSIAN
+          IF( NIREPR.EQ.JPSTRSH ) NOREPR = JPSPHERE
+        ENDIF
+        IF( NIREPR.EQ.JPSTRGG ) NIREPR = JPGAUSSIAN
+        IF( NIREPR.EQ.JPSTRSH ) NIREPR = JPSPHERE
+      ELSE
+        RISTRET = 0.0
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 2.  Latitude/longitude grid or equidistant cylindrical
+C                  or Plate Carree.
+C-----------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF ( (NIREPR.EQ.JPREGULAR).OR.(NIREPR.EQ.JPREGROT) ) THEN
+C
+C       Check if quasi-regular lat/long
+C
+        IF( LPQUASI ) NIREPR = JPREDLL
+        IF( .NOT.LNOREPR ) NOREPR = NIREPR
+C
+        NIRESO  = 0
+        NIGAUSS = 0
+C
+C       Latitude/longitude grid or equidistant cylindrical
+C       or Plate Carree.
+C
+C       Section 2, Word   2    Ni - Number of points along a parallel.
+C       Section 2, Word   3    Nj - Number of points along a meridian.
+C
+        IF( NIREPR.EQ.JPREDLL ) THEN
+          NIWE = 0
+        ELSE
+          IF( NIWE.NE.KSEC2(2) ) LCHANGE = .TRUE.
+          NIWE = KSEC2(2)
+        ENDIF
+C
+        IF( NINS.NE.KSEC2(3) ) LCHANGE = .TRUE.
+        NINS = KSEC2(3)
+C
+C       Section 2, Word   4    La1 - Latitude of first grid point.
+C       Section 2, Word   5    Lo1 - Longitude of first grid point.
+C
+        IF( NIAREA(1).NE.(KSEC2(4)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(1) = KSEC2(4) * JPMICRO
+        IF( NIAREA(2).NE.(KSEC2(5)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(2) = KSEC2(5) * JPMICRO
+C
+C       Section 2, Word   7    La2 - Latitude of last grid point.
+C       Section 2, Word   8    Lo2 - Longitude of last grid point.
+C
+        IF( NIAREA(3).NE.(KSEC2(7)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(3) = KSEC2(7) * JPMICRO
+        IF( NIAREA(4).NE.(KSEC2(8)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(4) = KSEC2(8) * JPMICRO
+C
+C       Section 2, Word   9    Di - i direction increment.
+C       Section 2, Word  10    Dj - j direction increment.
+C
+        IF( NIREPR.EQ.JPREDLL ) THEN
+          NIGRID(1) = 0
+        ELSE
+          IF( NIGRID(1).NE.(KSEC2(9)*JPMICRO) ) LCHANGE = .TRUE.
+          NIGRID(1) = KSEC2(09) * JPMICRO
+        ENDIF
+C
+        IF( NIGRID(2).NE.(KSEC2(10)*JPMICRO) ) LCHANGE = .TRUE.
+        NIGRID(2) = KSEC2(10) * JPMICRO
+C
+C       Section 2, Word  11    Scanning mode flags (Code Table 8).
+C
+        IF( NISCNM.NE.KSEC2(11) ) LCHANGE = .TRUE.
+        NISCNM = KSEC2(11)
+C
+C       Pick up regular gaussian grid definition if option 'gaussian'
+C       used.
+C
+        IF( NOREPR.EQ.JPNOTYPE ) THEN
+          IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+            CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'RESET_C: JGETGG failed, NOGAUSS = ',NOGAUSS)
+              RESET_C = IRET
+              GOTO 900
+            ENDIF
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'F'
+          ENDIF
+          NOREPR = JPGAUSSIAN
+        ENDIF
+C
+C       If reduced lat/long output and no user specified grid, use
+C       input reduced lat/long definition for number of points at
+C       each latitude
+C
+        IF( LPQUASI .AND. (.NOT.LNOREPR ) ) THEN
+          NOREDLL = KSEC2(3)
+          NONS = NINS
+          DO 210 I = 1, NINS
+            MILLEN(I) = KSEC2(22 + I)
+ 210      CONTINUE
+          DO 220 I = 1, NONS
+            NOLPTS(I) = MILLEN(I)
+ 220      CONTINUE
+        ENDIF
+C
+C       If reduced lat/long input, read input reduced lat/long definition
+C       for number of points at each latitude and set east longitude,
+C       unless it is a subarea (eg Mediterranean).
+C
+        IF( NIREPR.EQ.JPREDLL ) THEN
+          DO I = 1, NINS
+            MILLEN(I) = KSEC2(22 + I)
+          ENDDO
+C
+C         Calculate east longitude if field is global.
+C         Use southern latitude to guess if it is ...
+C
+          IF( NIAREA(3).LT.0 ) THEN
+            ITEMP = 36000000 - 36000000/MILLEN(NINS/2)
+            IF( NIAREA(4).NE.ITEMP ) LCHANGE = .TRUE.
+            NIAREA(4) = 36000000 - 36000000/MILLEN(NINS/2)
+          ENDIF
+        ENDIF
+C
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 3.  Spherical Harmonic Coefficients.
+C-----------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+      IF( (NIREPR.EQ.JPSPHERE).OR.
+     X    (NIREPR.EQ.JPSTRSH).OR.
+     X    (NIREPR.EQ.JPSPHROT) ) THEN
+C
+        NIGAUSS   = 0
+        NIGRID(1) = 0
+        NIGRID(2) = 0
+C
+C       Section 2, Word   2    J - Pentagonal resolution parameter.
+C
+        IF( NIRESO.NE.KSEC2(2) ) LCHANGE = .TRUE.
+        NIRESO = KSEC2(2)
+        IF( .NOT.LNORESO ) THEN
+          IF( NORESO.NE.NIRESO ) LCHANGE = .TRUE.
+          NORESO = NIRESO
+        ENDIF
+C
+C       Pick up regular gaussian grid definition if option 'gaussian'
+C       used.
+C
+        IF( NOREPR.EQ.JPNOTYPE ) THEN
+          IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+            CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'RESET_C: JGETGG failed, NOGAUSS = ',NOGAUSS)
+              RESET_C = IRET
+              GOTO 900
+            ENDIF
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'F'
+          ENDIF
+          NOREPR = JPGAUSSIAN
+        ENDIF
+C
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 4.  Regular gaussian grid.
+C-----------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+      IF( (NIREPR.EQ.JPGAUSSIAN) .AND. (.NOT.LPQUASI) ) THEN
+C
+        NIRESO    = 0
+        NIGRID(1) = 0
+        NIGRID(2) = 0
+C
+C       Section 2, Word   2    Ni - Number of points along a parallel.
+C       Section 2, Word   3    Nj - Number of points along a meridian.
+C
+        IF( NIWE.NE.KSEC2(2) ) LCHANGE = .TRUE.
+        NIWE = KSEC2(2)
+        IF( NINS.NE.KSEC2(3) ) LCHANGE = .TRUE.
+        NINS = KSEC2(3)
+C
+C       Section 2, Word   4    La1 - Latitude of first grid point.
+C       Section 2, Word   5    Lo1 - Longitude of first grid point.
+C
+        IF( NIAREA(1).NE.(KSEC2(4)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(1) = KSEC2(4) * JPMICRO
+        IF( NIAREA(2).NE.(KSEC2(5)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(2) = KSEC2(5) * JPMICRO
+C
+C       Section 2, Word   7    La2 - Latitude of last grid point.
+C       Section 2, Word   8    Lo2 - Longitude of last grid point.
+C
+        IF( NIAREA(3).NE.(KSEC2(7)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(3) = KSEC2(7) * JPMICRO
+        IF( NIAREA(4).NE.(KSEC2(8)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(4) = KSEC2(8) * JPMICRO
+C
+C       Section 2, Word  10    N - Number of parallels between Pole and
+C                   the Equator.
+C
+        IF( NIGAUSS.NE.KSEC2(10) ) LCHANGE = .TRUE.
+        NIGAUSS = KSEC2(10)
+C
+C       Pick up gaussian definitions for input grid
+C
+        IF( (NIGAUSO.NE.NIGAUSS).OR.(HIGAUST.NE.'F') ) THEN
+          CALL JGETGG( NIGAUSS, 'F', RIGAUSS, MILLEN, IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'RESET_C: JGETGG failed, NIGAUSS = ',NIGAUSS)
+            RESET_C = IRET
+            GOTO 900
+          ENDIF
+          NIGAUSO = NIGAUSS
+          HIGAUST = 'F'
+        ENDIF
+C
+C       Use same gaussian number for output unless user has
+C       deliberately set a value
+C
+        IF( .NOT.LNOGAUS )  THEN
+          IF( NOGAUSS.NE.NIGAUSS ) LCHANGE = .TRUE.
+          NOGAUSS = NIGAUSS
+        ENDIF
+C
+C       Fixup output type if 'gaussian' used to describe output and
+C       not 'reduced' or 'regular'.
+C
+        LSAME = (NOREPR.EQ.JPNOTYPE) .AND. (NOGAUSS.EQ.NIGAUSS)
+C
+C       Pick up regular gaussian grid definition corresponding
+C       to the input field if option 'gaussian' used.
+C
+        IF( (NOREPR.EQ.JPNOTYPE).AND.(.NOT.LSAME) ) THEN
+          IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+            CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'RESET_C: JGETGG failed, NOGAUSS = ',NOGAUSS)
+              RESET_C = IRET
+              GOTO 900
+            ENDIF
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'F'
+          ENDIF
+          NOREPR = JPGAUSSIAN
+        ENDIF
+C
+C       Section 2, Word  11    Scanning mode flags (Code Table 8).
+C
+        IF( NISCNM.NE.KSEC2(11) ) LCHANGE = .TRUE.
+        NISCNM = KSEC2(11)
+C
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 5.  Quasi-regular (reduced) gaussian grid.
+C-----------------------------------------------------------------------
+C
+  500 CONTINUE
+C
+      IF( (NIREPR.EQ.JPGAUSSIAN) .AND. LPQUASI ) THEN
+C
+        NIRESO    = 0
+        NIGRID(1) = 0
+        NIGRID(2) = 0
+C
+C       Set representation(s) to "quasi-regular gaussian"
+C
+        NIREPR = JPQUASI
+        IF( .NOT.LNOREPR ) NOREPR = NIREPR
+C
+C       Section 2, Word   2    Ni - Number of points along a parallel.
+C                   Cannot be used for quasi-regular grids.
+C       Section 2, Word   3    Nj - Number of points along a meridian.
+C
+        IF( NIWE.NE.0 ) LCHANGE = .TRUE.
+        NIWE = 0
+        IF( NINS.NE.KSEC2(3) ) LCHANGE = .TRUE.
+        NINS = KSEC2(3)
+C
+C       Section 2, Word   4    La1 - Latitude of first grid point.
+C       Section 2, Word   5    Lo1 - Longitude of first grid point.
+C
+        IF( NIAREA(1).NE.(KSEC2(4)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(1) = KSEC2(4) * JPMICRO
+        IF( NIAREA(2).NE.(KSEC2(5)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(2) = KSEC2(5) * JPMICRO
+C
+C       Section 2, Word   7    La2 - Latitude of last grid point.
+C       Section 2, Word   8    Lo2 - Longitude of last grid point.
+C
+        IF( NIAREA(3).NE.(KSEC2(7)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(3) = KSEC2(7) * JPMICRO
+        IF( NIAREA(4).NE.(KSEC2(8)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(4) = KSEC2(8) * JPMICRO
+C
+C       Section 2, Word  10    N - Number of parallels between Pole and
+C                   the Equator.
+C
+        IF( NIGAUSS.NE.KSEC2(10) ) THEN
+          LCHANGE = .TRUE.
+          JJPR = 1
+          JJERR = 1
+          IRET = IGGLAT( KSEC2(10)*2, RIGAUSS , JJPR, JJERR)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR, 'RESET_C: IGGLAT failed',JPQUIET)
+            RESET_C = IRET
+            GOTO 900
+          ENDIF
+        ENDIF
+        NIGAUSS = KSEC2(10)
+C
+C       Fixup output type if 'gaussian' used to describe output and
+C       not 'reduced' or 'regular'.
+C
+        LSAME = (NOREPR.EQ.JPNOTYPE) .AND. (NOGAUSS.EQ.NIGAUSS)
+C
+C       Pick up regular gaussian grid definition corresponding
+C       to the output field if option 'gaussian' used.
+C
+        IF( (NOREPR.EQ.JPNOTYPE).AND.(.NOT.LSAME) ) THEN
+          IF( (NOGAUSO.NE.NOGAUSS).OR.(HOGAUST.NE.'F') ) THEN
+            CALL JGETGG( NOGAUSS, 'F', ROGAUSS, NOLPTS, IRET)
+            IF( IRET.NE.0 ) THEN
+              CALL INTLOG(JP_ERROR,
+     X          'RESET_C: JGETGG failed, NOGAUSS = ',NOGAUSS)
+              RESET_C = IRET
+              GOTO 900
+            ENDIF
+            NOGAUSO = NOGAUSS
+            HOGAUST = 'F'
+          ENDIF
+          NOREPR = JPGAUSSIAN
+        ENDIF
+C
+C       Section 2, Word  11    Scanning mode flags (Code Table 8).
+C
+        IF ( NISCNM .NE. KSEC2(11) ) LCHANGE = .TRUE.
+        NISCNM = KSEC2(11)
+C
+C       Section 2, Word  23-nn
+C       Number of points along each parallel in a quasi-regular grid.
+C       Number of parallels is given by Nj above.
+C
+C       Pick up gaussian definitions for input grid
+C
+        IF( (NIGAUSO.NE.NIGAUSS).OR.(HIGAUST.NE.'F') ) THEN
+          CALL JGETGG( NIGAUSS, 'F', RIGAUSS, MILLEN, IRET)
+          IF( IRET.NE.0 ) THEN
+            CALL INTLOG(JP_ERROR,
+     X        'RESET_C: JGETGG failed, NIGAUSS = ',NIGAUSS)
+            RESET_C = IRET
+            GOTO 900
+          ENDIF
+          NIGAUSO = NIGAUSS
+          HIGAUST = 'F'
+        ENDIF
+        DO 510 I = 1, NINS
+          MILLEN(I) = KSEC2(22 + I)
+ 510    CONTINUE
+C
+C       Use same grid for output, unless user requested otherwise.
+C
+        IF( (.NOT.LNOGAUS) .OR. LSAME ) THEN
+          IF( NOGAUSS.NE.NIGAUSS ) LCHANGE = .TRUE.
+          NOGAUSS = NIGAUSS
+          NONS = NINS
+          DO 520 I = 1, NONS
+            NOLPTS(I) = MILLEN(I)
+            ROGAUSS(I) = RIGAUSS(I)
+ 520      CONTINUE
+          NOGAUSO = NIGAUSO
+          HOGAUST = HIGAUST
+        ENDIF
+C
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 6.  Polar Stereographic grid.
+C-----------------------------------------------------------------------
+C
+  600 CONTINUE
+C
+      IF ( NIREPR .EQ. 5 ) THEN
+C
+        NIRESO  = 0
+        NIGAUSS = 0
+C
+C       Section 2, Word   2    Nx - Number of points along X-axis.
+C       Section 2, Word   3    Ny - Number of points along Y-axis.
+C
+        IF( NIWE.NE.0 ) LCHANGE = .TRUE.
+        NIWE = KSEC2(2)
+        IF( NINS.NE.KSEC2(3) ) LCHANGE = .TRUE.
+        NINS = KSEC2(3)
+C
+C       Section 2, Word   4    La1 - Latitude of first grid point.
+C       Section 2, Word   5    Lo1 - Longitude of first grid point.
+C
+        IF( NIAREA(1).NE.(KSEC2(4)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(1) = KSEC2(4) * JPMICRO
+        IF( NIAREA(2).NE.(KSEC2(5)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(2) = KSEC2(5) * JPMICRO
+C
+C       Section 2, Word   7    La2 - Latitude of last grid point.
+C       Section 2, Word   8    Lo2 - Longitude of last grid point.
+C
+        IF( NIAREA(3).NE.(KSEC2(7)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(3) = KSEC2(7) * JPMICRO
+        IF( NIAREA(4).NE.(KSEC2(8)*JPMICRO) ) LCHANGE = .TRUE.
+        NIAREA(4) = KSEC2(8) * JPMICRO
+C
+C       Section 2, Word   9    Dx - X-direction increment.
+C       Section 2, Word  10    Dy - Y-direction increment.
+C
+        IF( NIGRID(1).NE.KSEC2(9) ) LCHANGE = .TRUE.
+        NIGRID(1) = KSEC2(09)
+        IF( NIGRID(2).NE.KSEC2(10) ) LCHANGE = .TRUE.
+        NIGRID(2) = KSEC2(10)
+C
+C       Section 2, Word  11    Scanning mode flags (Code Table 8).
+C
+        IF( NISCNM.NE.KSEC2(11) ) LCHANGE = .TRUE.
+        NISCNM = KSEC2(11)
+C
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 7.  Setup number of bits used for packing ouput.
+C-----------------------------------------------------------------------
+C
+  700 CONTINUE
+C
+C     Section 4, Word 2 - Number  of bits used for each packed value.
+C
+C     Use same number of bits for packing output values for unless
+C     user has deliberately set a value.
+C
+      NIACC = KSEC4(2)
+      IF( .NOT.LNOACC ) THEN
+        IF( NOACC.NE.NIACC ) LCHANGE = .TRUE.
+        NOACC = NIACC
+      ENDIF
+C
+C     If default is implied for the output grid, use the input grid
+C
+      IF( ( (NIREPR.EQ.JPREGULAR).OR.
+     X      (NIREPR.EQ.JPREDLL)  .OR.
+     X      (NIREPR.EQ.JPREGROT)     ) .AND.
+     X    ( (NOREPR.EQ.JPREGULAR).OR.
+     X      (NOREPR.EQ.JPREDLL)  .OR.
+     X      (NOREPR.EQ.JPREGROT)     ) .AND.
+     X      .NOT.LNOGRID ) THEN
+        NOGRID(1) = NIGRID(1)
+        NOGRID(2) = NIGRID(2)
+      ENDIF
+C
+C-----------------------------------------------------------------------
+C      Section 9.  Closedown.
+C-----------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/rgauss_032.h b/interpolation/rgauss_032.h
new file mode 100755
index 0000000..ecd83a4
--- /dev/null
+++ b/interpolation/rgauss_032.h
@@ -0,0 +1,14 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG032(32)
+      DATA QG032/
+     X  20,  27,  36,  40,  45,  50,  60,  64,  72,  75,  80,  90,
+     X  90,  96, 100, 108, 108, 120, 120, 120, 128, 128, 128, 128,
+     X 128, 128, 128, 128, 128, 128, 128, 128 /
diff --git a/interpolation/rgauss_048.h b/interpolation/rgauss_048.h
new file mode 100755
index 0000000..f200688
--- /dev/null
+++ b/interpolation/rgauss_048.h
@@ -0,0 +1,23 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG048(48)
+      DATA QG048/
+     X  20,  25,  36, 40,
+     X  45,  50,  60, 60,
+     X  72,  75,  80, 90,
+     X  96, 100, 108, 120,
+     X 120, 120, 128, 135,
+     X 144, 144, 160, 160,
+     X 160, 160, 160, 180,
+     X 180, 180, 180, 180,
+     X 192, 192, 192, 192,
+     X 192, 192, 192, 192,
+     X 192, 192, 192, 192,
+     X 192, 192, 192, 192 /
diff --git a/interpolation/rgauss_064.h b/interpolation/rgauss_064.h
new file mode 100755
index 0000000..88190fa
--- /dev/null
+++ b/interpolation/rgauss_064.h
@@ -0,0 +1,27 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG064(64)
+      DATA QG064/
+     X  20,  30,  40, 48,
+     X  54,  64,  72, 80,
+     X  90,  90, 100, 108,
+     X  120, 120, 128, 144,
+     X 144, 144, 150, 160,
+     X 160, 180, 180, 180,
+     X 192, 192, 192, 200,
+     X 200, 216, 216, 216,
+     X 240, 240, 240, 240,
+     X 240, 240, 240, 250,
+     X 250, 250, 250, 256,
+     X 256, 256, 256, 256,
+     X 256, 256, 256, 256,
+     X 256, 256, 256, 256,
+     X 256, 256, 256, 256,
+     X 256, 256, 256, 256 /
diff --git a/interpolation/rgauss_080.h b/interpolation/rgauss_080.h
new file mode 100755
index 0000000..73c645b
--- /dev/null
+++ b/interpolation/rgauss_080.h
@@ -0,0 +1,31 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG08018(80)
+      DATA QG08018/
+     X  18 ,  25 ,  36 ,  40,
+     X  45 ,  54 ,  60 ,  64,
+     X  72 ,  72 ,  80 ,  90,
+     X  96 , 100 , 108 , 120,
+     X 120 , 128 , 135 , 144,
+     X 144 , 150 , 160 , 160,
+     X 180 , 180 , 180 , 192,
+     X 192 , 200 , 200 , 216,
+     X 216 , 216 , 225 , 225,
+     X 240 , 240 , 240 , 256,
+     X 256 , 256 , 256 , 288,
+     X 288 , 288 , 288 , 288,
+     X 288 , 288 , 288 , 288,
+     X 300 , 300 , 300 , 300,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320 /
diff --git a/interpolation/rgauss_080_19940113.h b/interpolation/rgauss_080_19940113.h
new file mode 100755
index 0000000..5936c8d
--- /dev/null
+++ b/interpolation/rgauss_080_19940113.h
@@ -0,0 +1,31 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG08012(80)
+      DATA QG08012/
+     X  12 ,  16 ,  20 ,  24,
+     X  30 ,  36 ,  45 ,  50,
+     X  60 ,  64 ,  72 ,  75,
+     X  80 ,  90 ,  96 , 100,
+     X 108 , 120 , 120 , 128,
+     X 128 , 135 , 144 , 144,
+     X 150 , 160 , 162 , 180,
+     X 180 , 180 , 192 , 192,
+     X 192 , 200 , 216 , 216,
+     X 216 , 216 , 225 , 225,
+     X 240 , 240 , 240 , 256,
+     X 256 , 256 , 256 , 288,
+     X 288 , 288 , 288 , 288,
+     X 288 , 288 , 288 , 288,
+     X 288 , 300 , 300 , 300,
+     X 300 , 300 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320 /
diff --git a/interpolation/rgauss_080_19980130.h b/interpolation/rgauss_080_19980130.h
new file mode 100755
index 0000000..73c645b
--- /dev/null
+++ b/interpolation/rgauss_080_19980130.h
@@ -0,0 +1,31 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG08018(80)
+      DATA QG08018/
+     X  18 ,  25 ,  36 ,  40,
+     X  45 ,  54 ,  60 ,  64,
+     X  72 ,  72 ,  80 ,  90,
+     X  96 , 100 , 108 , 120,
+     X 120 , 128 , 135 , 144,
+     X 144 , 150 , 160 , 160,
+     X 180 , 180 , 180 , 192,
+     X 192 , 200 , 200 , 216,
+     X 216 , 216 , 225 , 225,
+     X 240 , 240 , 240 , 256,
+     X 256 , 256 , 256 , 288,
+     X 288 , 288 , 288 , 288,
+     X 288 , 288 , 288 , 288,
+     X 300 , 300 , 300 , 300,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320,
+     X 320 , 320 , 320 , 320 /
diff --git a/interpolation/rgauss_1024.h b/interpolation/rgauss_1024.h
new file mode 100755
index 0000000..cf36e79
--- /dev/null
+++ b/interpolation/rgauss_1024.h
@@ -0,0 +1,216 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG1024(1024)
+      DATA QG1024/
+     X   18,   25,   32,   40,   45,
+     X   50,   60,   64,   72,   72,
+     X   75,   81,   90,   96,   96,
+     X  108,  108,  120,  120,  125,
+     X  125,  135,  144,  150,  160,
+     X  160,  180,  180,  180,  192,
+     X  192,  200,  216,  216,  225,
+     X  225,  240,  240,  243,  250,
+     X  256,  270,  270,  288,  288,
+     X  288,  300,  300,  320,  320,
+     X  320,  360,  360,  360,  360,
+     X  360,  360,  375,  375,  384,
+     X  384,  400,  400,  405,  432,
+     X  432,  432,  432,  450,  450,
+     X  450,  480,  480,  480,  480,
+     X  480,  486,  500,  500,  512,
+     X  512,  540,  540,  540,  540,
+     X  576,  576,  576,  576,  576,
+     X  576,  600,  600,  600,  600,
+     X  625,  625,  625,  625,  640,
+     X  640,  648,  675,  675,  675,
+     X  675,  675,  720,  720,  720,
+     X  720,  720,  720,  720,  729,
+     X  750,  750,  750,  750,  768,
+     X  768,  800,  800,  800,  800,
+     X  800,  800,  810,  864,  864,
+     X  864,  864,  864,  864,  864,
+     X  864,  864,  900,  900,  900,
+     X  900,  900,  900,  960,  960,
+     X  960,  960,  960,  960,  960,
+     X  960,  960,  972,  972, 1000,
+     X 1000, 1000, 1000, 1000, 1024,
+     X 1024, 1024, 1024, 1080, 1080,
+     X 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1125, 1125, 1125,
+     X 1125, 1125, 1125, 1125, 1152,
+     X 1152, 1152, 1152, 1152, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1200, 1215, 1215, 1215, 1250,
+     X 1250, 1250, 1250, 1250, 1250,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1296, 1296, 1350, 1350, 1350,
+     X 1350, 1350, 1350, 1350, 1350,
+     X 1350, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1458, 1458, 1458, 1500,
+     X 1500, 1500, 1500, 1500, 1500,
+     X 1500, 1500, 1536, 1536, 1536,
+     X 1536, 1536, 1536, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1620,
+     X 1620, 1620, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1920, 1920, 1920, 1920,
+     X 1920, 1920, 1920, 1920, 1944,
+     X 1944, 1944, 1944, 1944, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2025,
+     X 2025, 2025, 2025, 2048, 2048,
+     X 2048, 2048, 2048, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2187, 2187,
+     X 2187, 2187, 2187, 2250, 2250,
+     X 2250, 2250, 2250, 2250, 2250,
+     X 2250, 2250, 2250, 2250, 2250,
+     X 2304, 2304, 2304, 2304, 2304,
+     X 2304, 2304, 2304, 2304, 2304,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2430,
+     X 2430, 2430, 2430, 2430, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2592, 2592, 2592, 2592,
+     X 2592, 2592, 2700, 2700, 2700,
+     X 2700, 2700, 2700, 2700, 2700,
+     X 2700, 2700, 2700, 2700, 2700,
+     X 2700, 2700, 2700, 2700, 2700,
+     X 2700, 2700, 2700, 2700, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2916, 2916,
+     X 2916, 2916, 2916, 2916, 2916,
+     X 2916, 3000, 3000, 3000, 3000,
+     X 3000, 3000, 3000, 3000, 3000,
+     X 3000, 3000, 3000, 3000, 3000,
+     X 3000, 3000, 3000, 3000, 3000,
+     X 3072, 3072, 3072, 3072, 3072,
+     X 3072, 3072, 3072, 3072, 3072,
+     X 3072, 3072, 3072, 3072, 3072,
+     X 3072, 3072, 3125, 3125, 3125,
+     X 3125, 3125, 3125, 3125, 3125,
+     X 3125, 3125, 3125, 3125, 3125,
+     X 3200, 3200, 3200, 3200, 3200,
+     X 3200, 3200, 3200, 3200, 3200,
+     X 3200, 3200, 3200, 3200, 3200,
+     X 3200, 3200, 3200, 3240, 3240,
+     X 3240, 3240, 3240, 3240, 3240,
+     X 3240, 3240, 3240, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3456,
+     X 3456, 3456, 3456, 3456, 3456,
+     X 3456, 3456, 3456, 3456, 3456,
+     X 3456, 3456, 3456, 3456, 3456,
+     X 3456, 3456, 3456, 3456, 3456,
+     X 3456, 3456, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3645, 3645, 3645, 3645,
+     X 3645, 3645, 3645, 3645, 3645,
+     X 3645, 3645, 3645, 3645, 3645,
+     X 3645, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3888, 3888, 3888,
+     X 3888, 3888, 3888, 3888, 3888,
+     X 3888, 3888, 3888, 3888, 3888,
+     X 3888, 3888, 3888, 3888, 3888,
+     X 3888, 3888, 3888, 3888, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4050, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4096, 4096, 4096 /
diff --git a/interpolation/rgauss_128.h b/interpolation/rgauss_128.h
new file mode 100755
index 0000000..0f9f806
--- /dev/null
+++ b/interpolation/rgauss_128.h
@@ -0,0 +1,43 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG128(128)
+      DATA QG128/
+     X  18,  25,  36,  40,
+     X  45,  50,  60,  64,
+     X  72,  72,  80,  90,
+     X  90, 100, 108, 120,
+     X 120, 125, 128, 144,
+     X 144, 150, 160, 160,
+     X 180, 180, 180, 192,
+     X 192, 200, 216, 216,
+     X 216, 225, 240, 240,
+     X 240, 250, 250, 256,
+     X 270, 270, 288, 288,
+     X 288, 300, 300, 320,
+     X 320, 320, 320, 324,
+     X 360, 360, 360, 360,
+     X 360, 360, 360, 375,
+     X 375, 375, 375, 384,
+     X 384, 400, 400, 400,
+     X 400, 405, 432, 432,
+     X 432, 432, 432, 432,
+     X 432, 450, 450, 450,
+     X 450, 450, 480, 480,
+     X 480, 480, 480, 480,
+     X 480, 480, 480, 480,
+     X 486, 486, 486, 500,
+     X 500, 500, 500, 500,
+     X 500, 500, 512, 512,
+     X 512, 512, 512, 512,
+     X 512, 512, 512, 512,
+     X 512, 512, 512, 512,
+     X 512, 512, 512, 512,
+     X 512, 512, 512, 512,
+     X 512, 512, 512, 512 /
diff --git a/interpolation/rgauss_160.h b/interpolation/rgauss_160.h
new file mode 100755
index 0000000..e6be6c1
--- /dev/null
+++ b/interpolation/rgauss_160.h
@@ -0,0 +1,51 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG16018(160)
+      DATA QG16018/
+     X  18 ,  25 ,  36 ,  40,
+     X  45 ,  50 ,  60 ,  64,
+     X  72 ,  72 ,  80 ,  90,
+     X  90 ,  96 , 108 , 120,
+     X 120 , 125 , 128 , 135,
+     X 144 , 150 , 160 , 160,
+     X 180 , 180 , 180 , 192,
+     X 192 , 200 , 216 , 216,
+     X 225 , 225 , 240 , 240,
+     X 243 , 250 , 256 , 270,
+     X 270 , 288 , 288 , 288,
+     X 300 , 300 , 320 , 320,
+     X 320 , 320 , 324 , 360,
+     X 360 , 360 , 360 , 360,
+     X 360 , 375 , 375 , 375,
+     X 384 , 384 , 400 , 400,
+     X 400 , 405 , 432 , 432,
+     X 432 , 432 , 432 , 450,
+     X 450 , 450 , 450 , 480,
+     X 480 , 480 , 480 , 480,
+     X 480 , 480 , 500 , 500,
+     X 500 , 500 , 500 , 512,
+     X 512 , 540 , 540 , 540,
+     X 540 , 540 , 540 , 540,
+     X 540 , 576 , 576 , 576,
+     X 576 , 576 , 576 , 576,
+     X 576 , 576 , 576 , 600,
+     X 600 , 600 , 600 , 600,
+     X 600 , 600 , 600 , 600,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640 / 
diff --git a/interpolation/rgauss_160_19931222.h b/interpolation/rgauss_160_19931222.h
new file mode 100755
index 0000000..1b91a79
--- /dev/null
+++ b/interpolation/rgauss_160_19931222.h
@@ -0,0 +1,51 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG16012(160)
+      DATA QG16012/
+     X  12 ,  16 ,  20 ,  24,
+     X  30 ,  40 ,  45 ,  50,
+     X  60 ,  64 ,  72 ,  75,
+     X  80 ,  90 ,  96 , 100,
+     X 108 , 120 , 120 , 128,
+     X 135 , 144 , 144 , 150,
+     X 160 , 160 , 180 , 180,
+     X 180 , 192 , 192 , 200,
+     X 216 , 216 , 216 , 225,
+     X 240 , 240 , 240 , 256,
+     X 256 , 256 , 288 , 288,
+     X 288 , 288 , 288 , 300,
+     X 300 , 300 , 320 , 320,
+     X 320 , 324 , 360 , 360,
+     X 360 , 360 , 360 , 360,
+     X 360 , 375 , 375 , 375,
+     X 384 , 400 , 400 , 400,
+     X 400 , 405 , 432 , 432,
+     X 432 , 432 , 432 , 450,
+     X 450 , 450 , 450 , 480,
+     X 480 , 480 , 480 , 480,
+     X 480 , 480 , 500 , 500,
+     X 500 , 500 , 500 , 512,
+     X 512 , 512 , 540 , 540,
+     X 540 , 540 , 540 , 540,
+     X 540 , 540 , 576 , 576,
+     X 576 , 576 , 576 , 576,
+     X 576 , 576 , 576 , 576,
+     X 576 , 576 , 600 , 600,
+     X 600 , 600 , 600 , 600,
+     X 600 , 600 , 600 , 600,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640,
+     X 640 , 640 , 640 , 640 /
diff --git a/interpolation/rgauss_200.h b/interpolation/rgauss_200.h
new file mode 100755
index 0000000..b5f6a6c
--- /dev/null
+++ b/interpolation/rgauss_200.h
@@ -0,0 +1,61 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG200(200)
+      DATA QG200/
+     X  18,  25,  36,  40,
+     X  45,  50,  60,  64,
+     X  72,  72,  75,  81,
+     X  90,  96, 100, 108,
+     X 120, 125, 128, 135,
+     X 144, 150, 160, 160,
+     X 180, 180, 180, 192,
+     X 192, 200, 216, 216,
+     X 225, 225, 240, 240,
+     X 243, 250, 256, 270,
+     X 270, 288, 288, 288,
+     X 300, 300, 320, 320,
+     X 320, 320, 360, 360,
+     X 360, 360, 360, 360,
+     X 375, 375, 375, 384,
+     X 400, 400, 400, 400,
+     X 432, 432, 432, 432,
+     X 432, 450, 450, 450,
+     X 480, 480, 480, 480,
+     X 480, 480, 486, 500,
+     X 500, 500, 512, 512,
+     X 512, 540, 540, 540,
+     X 540, 540, 576, 576,
+     X 576, 576, 576, 576,
+     X 576, 576, 600, 600,
+     X 600, 600, 600, 640,
+     X 640, 640, 640, 640,
+     X 640, 640, 640, 640,
+     X 640, 648, 648, 675,
+     X 675, 675, 675, 675,
+     X 675, 675, 720, 720,
+     X 720, 720, 720, 720,
+     X 720, 720, 720, 720,
+     X 720, 720, 720, 720,
+     X 729, 729, 729, 750,
+     X 750, 750, 750, 750,
+     X 750, 750, 750, 768,
+     X 768, 768, 768, 768,
+     X 768, 768, 768, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800,
+     X 800, 800, 800, 800 /
diff --git a/interpolation/rgauss_2000.h b/interpolation/rgauss_2000.h
new file mode 100755
index 0000000..1517e80
--- /dev/null
+++ b/interpolation/rgauss_2000.h
@@ -0,0 +1,211 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG2000(2000)
+      DATA QG2000/
+     X   18,   25,   32,   40,   45, 50,   60,   60,   72,   72,
+     X   75,   81,   90,   96,   96, 108,  108,  120,  120,  120,
+     X  125,  135,  135,  144,  144, 150,  160,  160,  180,  180,
+     X  180,  180,  192,  192,  192, 200,  216,  216,  216,  225,
+     X  240,  240,  243,  250,  256, 270,  270,  288,  300,  300,
+     X  320,  320,  320,  360,  360, 360,  360,  360,  360,  375,
+     X  375,  384,  400,  400,  400, 405,  432,  432,  432,  432,
+     X  450,  450,  450,  480,  480, 480,  480,  486,  500,  500,
+     X  500,  512,  512,  540,  540, 540,  540,  576,  576,  576,
+     X  576,  576,  600,  600,  600, 600,  625,  625,  625,  625,
+     X  640,  640,  640,  648,  675, 675,  675,  675,  720,  720,
+     X  720,  720,  720,  720,  720, 729,  750,  750,  750,  750,
+     X  768,  768,  768,  800,  800, 800,  800,  800,  810,  864,
+     X  864,  864,  864,  864,  864, 864,  864,  864,  900,  900,
+     X  900,  900,  900,  900,  960, 960,  960,  960,  960,  960,
+     X  960,  960,  960,  972,  972, 1000, 1000, 1000, 1000, 1000,
+     X 1024, 1024, 1024, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1152,
+     X 1152, 1152, 1152, 1152, 1200, 1200, 1200, 1200, 1200, 1200,
+     X 1200, 1215, 1215, 1215, 1250, 1250, 1250, 1250, 1250, 1280,
+     X 1280, 1280, 1280, 1280, 1296, 1296, 1296, 1350, 1350, 1350,
+     X 1350, 1350, 1350, 1350, 1350, 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+     X 1458, 1458, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1536,
+     X 1536, 1536, 1536, 1536, 1536, 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600, 1600, 1620, 1620, 1620, 1728,
+     X 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728, 1728, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
+     X 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1944, 1944, 1944,
+     X 1944, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+     X 2025, 2025, 2025, 2025, 2048, 2048, 2048, 2048, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160, 2160, 2187, 2187, 2187, 2187,
+     X 2187, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250,
+     X 2250, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+     X 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400, 2400, 2430, 2430, 2430, 2430,
+     X 2430, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2560, 2560, 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2592, 2592, 2592, 2592, 2592, 2700, 2700,
+     X 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700,
+     X 2700, 2700, 2700, 2700, 2700, 2700, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880,
+     X 2880, 2880, 2880, 2880, 2880, 2880, 2916, 2916, 2916, 2916,
+     X 2916, 2916, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000,
+     X 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3072, 3072, 3072,
+     X 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3125,
+     X 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3200, 3200,
+     X 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200,
+     X 3200, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375,
+     X 3375, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456,
+     X 3456, 3456, 3456, 3456, 3456, 3456, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     X 3600, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3750,
+     X 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750,
+     X 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
+     X 3840, 3840, 3840, 3840, 3888, 3888, 3888, 3888, 3888, 3888,
+     X 3888, 3888, 3888, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
+     X 4000, 4000, 4000, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
+     X 4050, 4050, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     X 4096, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320,
+     X 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320,
+     X 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320,
+     X 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320,
+     X 4320, 4320, 4374, 4374, 4374, 4374, 4374, 4374, 4374, 4374,
+     X 4374, 4374, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500,
+     X 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500,
+     X 4500, 4500, 4500, 4500, 4500, 4500, 4608, 4608, 4608, 4608,
+     X 4608, 4608, 4608, 4608, 4608, 4608, 4608, 4608, 4608, 4608,
+     X 4608, 4608, 4608, 4608, 4608, 4608, 4608, 4800, 4800, 4800,
+     X 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800,
+     X 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800,
+     X 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800,
+     X 4800, 4800, 4800, 4800, 4800, 4860, 4860, 4860, 4860, 4860,
+     X 4860, 4860, 4860, 4860, 4860, 4860, 4860, 5000, 5000, 5000,
+     X 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000,
+     X 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000,
+     X 5000, 5000, 5000, 5000, 5000, 5120, 5120, 5120, 5120, 5120,
+     X 5120, 5120, 5120, 5120, 5120, 5120, 5120, 5120, 5120, 5120,
+     X 5120, 5120, 5120, 5120, 5120, 5120, 5120, 5120, 5120, 5184,
+     X 5184, 5184, 5184, 5184, 5184, 5184, 5184, 5184, 5184, 5184,
+     X 5184, 5184, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400,
+     X 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400,
+     X 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400,
+     X 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400,
+     X 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5625, 5625,
+     X 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625,
+     X 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625,
+     X 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625,
+     X 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625,
+     X 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5760, 5760, 5760,
+     X 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760,
+     X 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760,
+     X 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5832, 5832,
+     X 5832, 5832, 5832, 5832, 5832, 5832, 5832, 5832, 5832, 5832,
+     X 5832, 5832, 5832, 5832, 6000, 6000, 6000, 6000, 6000, 6000,
+     X 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000,
+     X 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000,
+     X 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000,
+     X 6000, 6000, 6000, 6075, 6075, 6075, 6075, 6075, 6075, 6075,
+     X 6075, 6075, 6075, 6075, 6075, 6075, 6075, 6075, 6075, 6075,
+     X 6075, 6075, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144,
+     X 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6250, 6250,
+     X 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250,
+     X 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250,
+     X 6250, 6250, 6250, 6250, 6250, 6400, 6400, 6400, 6400, 6400,
+     X 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400,
+     X 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400,
+     X 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400,
+     X 6400, 6400, 6400, 6400, 6480, 6480, 6480, 6480, 6480, 6480,
+     X 6480, 6480, 6480, 6480, 6480, 6480, 6480, 6480, 6480, 6480,
+     X 6480, 6480, 6480, 6480, 6480, 6561, 6561, 6561, 6561, 6561,
+     X 6561, 6561, 6561, 6561, 6561, 6561, 6561, 6561, 6561, 6561,
+     X 6561, 6561, 6561, 6561, 6561, 6561, 6561, 6750, 6750, 6750,
+     X 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750,
+     X 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750,
+     X 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750,
+     X 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750,
+     X 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750,
+     X 6750, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912,
+     X 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912,
+     X 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912,
+     X 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912,
+     X 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912, 6912,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200,
+     X 7200, 7200, 7200, 7200, 7200, 7200, 7290, 7290, 7290, 7290,
+     X 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290,
+     X 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290,
+     X 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7290, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500, 7500,
+     X 7500, 7500, 7500, 7500, 7500, 7500, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680, 7680,
+     X 7680, 7680, 7680, 7680, 7680, 7776, 7776, 7776, 7776, 7776,
+     X 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776,
+     X 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776,
+     X 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776,
+     X 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776,
+     X 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776, 7776,
+     X 7776, 7776, 7776, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000,
+     X 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000, 8000 /
diff --git a/interpolation/rgauss_256.h b/interpolation/rgauss_256.h
new file mode 100755
index 0000000..752bf89
--- /dev/null
+++ b/interpolation/rgauss_256.h
@@ -0,0 +1,75 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+       REAL QG256(256)
+       DATA QG256/
+     X   18,   25,   32,   40,
+     X   45,   50,   60,   64,
+     X   72,   72,   75,   81,
+     X   90,   96,  100,  108,
+     X  120,  120,  125,  135,
+     X  144,  150,  160,  160,
+     X  180,  180,  180,  192,
+     X  192,  200,  216,  216,
+     X  216,  225,  240,  240,
+     X  243,  250,  256,  270,
+     X  270,  288,  288,  288,
+     X  300,  300,  320,  320,
+     X  320,  324,  360,  360,
+     X  360,  360,  360,  360,
+     X  375,  375,  384,  384,
+     X  400,  400,  400,  432,
+     X  432,  432,  432,  432,
+     X  450,  450,  450,  480,
+     X  480,  480,  480,  480,
+     X  486,  500,  500,  500,
+     X  512,  512,  540,  540,
+     X  540,  540,  540,  576,
+     X  576,  576,  576,  576,
+     X  576,  600,  600,  600,
+     X  600,  600,  640,  640,
+     X  640,  640,  640,  640,
+     X  640,  640,  648,  675,
+     X  675,  675,  675,  675,
+     X  675,  720,  720,  720,
+     X  720,  720,  720,  720,
+     X  720,  720,  729,  729,
+     X  750,  750,  750,  750,
+     X  750,  768,  768,  768,
+     X  768,  800,  800,  800,
+     X  800,  800,  800,  800,
+     X  800,  810,  810,  864,
+     X  864,  864,  864,  864,
+     X  864,  864,  864,  864,
+     X  864,  864,  864,  864,
+     X  864,  900,  900,  900,
+     X  900,  900,  900,  900,
+     X  900,  900,  900,  900,
+     X  960,  960,  960,  960,
+     X  960,  960,  960,  960,
+     X  960,  960,  960,  960,
+     X  960,  960,  960,  960,
+     X  960,  960,  960,  960,
+     X  960,  960,  972,  972,
+     X  972,  972,  972, 1000,
+     X 1000, 1000, 1000, 1000,
+     X 1000, 1000, 1000, 1000,
+     X 1000, 1000, 1000, 1000,
+     X 1000, 1000, 1000, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024,
+     X 1024, 1024, 1024, 1024 /
diff --git a/interpolation/rgauss_320.h b/interpolation/rgauss_320.h
new file mode 100755
index 0000000..4b260ee
--- /dev/null
+++ b/interpolation/rgauss_320.h
@@ -0,0 +1,75 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+	  REAL QG320(320) 
+ 	  DATA QG320/
+     X 18, 25, 36, 40, 45,
+     X 50, 60, 64, 72, 72,
+     X 75, 81, 90, 96, 100,
+     X 108, 120, 120, 125, 135,
+     X 144, 144, 150, 160, 180,
+     X 180, 180, 192, 192, 200,
+     X 216, 216, 216, 225, 240,
+     X 240, 240, 250, 256, 270,
+     X 270, 288, 288, 288, 300,
+     X 300, 320, 320, 320, 324,
+     X 360, 360, 360, 360, 360,
+     X 360, 375, 375, 384, 384,
+     X 400, 400, 405, 432, 432,
+     X 432, 432, 450, 450, 450,
+     X 480, 480, 480, 480, 480,
+     X 486, 500, 500, 500, 512,
+     X 512, 540, 540, 540, 540,
+     X 540, 576, 576, 576, 576,
+     X 576, 576, 600, 600, 600,
+     X 600, 640, 640, 640, 640,
+     X 640, 640, 640, 648, 648,
+     X 675, 675, 675, 675, 720,
+     X 720, 720, 720, 720, 720,
+     X 720, 720, 720, 729, 750,
+     X 750, 750, 750, 768, 768,
+     X 768, 768, 800, 800, 800,
+     X 800, 800, 800, 810, 810,
+     X 864, 864, 864, 864, 864,
+     X 864, 864, 864, 864, 864,
+     X 864, 900, 900, 900, 900,
+     X 900, 900, 900, 900, 960,
+     X 960, 960, 960, 960, 960,
+     X 960, 960, 960, 960, 960,
+     X 960, 960, 960, 972, 972,
+     X 1000, 1000, 1000, 1000, 1000,
+     X 1000, 1000, 1000, 1024, 1024,
+     X 1024, 1024, 1024, 1024, 1080,
+     X 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1080, 1125, 1125,
+     X 1125, 1125, 1125, 1125, 1125,
+     X 1125, 1125, 1125, 1125, 1125,
+     X 1125, 1125, 1152, 1152, 1152,
+     X 1152, 1152, 1152, 1152, 1152,
+     X 1152, 1200, 1200, 1200, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1200, 1200, 1200, 1200, 1215,
+     X 1215, 1215, 1215, 1215, 1215,
+     X 1215, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280/
diff --git a/interpolation/rgauss_400.h b/interpolation/rgauss_400.h
new file mode 100755
index 0000000..0895628
--- /dev/null
+++ b/interpolation/rgauss_400.h
@@ -0,0 +1,91 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG400(400)
+      DATA QG400/
+     X   18,   25,   32,   40,   45,
+     X   50,   60,   60,   72,   72,
+     X   75,   81,   90,   96,  100,
+     X  108,  120,  120,  125,  128,
+     X  144,  144,  150,  160,  160,
+     X  180,  180,  192,  192,  200,
+     X  200,  216,  216,  225,  240,
+     X  240,  240,  250,  250,  256,
+     X  270,  288,  288,  288,  300,
+     X  300,  320,  320,  320,  324,
+     X  360,  360,  360,  360,  360,
+     X  360,  375,  375,  384,  400,
+     X  400,  400,  405,  432,  432,
+     X  432,  432,  450,  450,  450,
+     X  480,  480,  480,  480,  480,
+     X  486,  500,  500,  512,  512,
+     X  540,  540,  540,  540,  540,
+     X  576,  576,  576,  576,  576,
+     X  576,  600,  600,  600,  600,
+     X  640,  640,  640,  640,  640,
+     X  640,  640,  648,  675,  675,
+     X  675,  675,  675,  720,  720,
+     X  720,  720,  720,  720,  720,
+     X  729,  729,  750,  750,  750,
+     X  750,  768,  768,  768,  800,
+     X  800,  800,  800,  800,  800,
+     X  810,  864,  864,  864,  864,
+     X  864,  864,  864,  864,  864,
+     X  864,  900,  900,  900,  900,
+     X  900,  900,  900,  960,  960,
+     X  960,  960,  960,  960,  960,
+     X  960,  960,  960,  960,  960,
+     X  972,  972, 1000, 1000, 1000,
+     X 1000, 1000, 1000, 1024, 1024,
+     X 1024, 1024, 1024, 1080, 1080,
+     X 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1080, 1080, 1125,
+     X 1125, 1125, 1125, 1125, 1125,
+     X 1125, 1125, 1125, 1152, 1152,
+     X 1152, 1152, 1152, 1152, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1215, 1215, 1215, 1215, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1296, 1296, 1296, 1296, 1350,
+     X 1350, 1350, 1350, 1350, 1350,
+     X 1350, 1350, 1350, 1350, 1350,
+     X 1350, 1350, 1350, 1350, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1458, 1458, 1458,
+     X 1458, 1458, 1458, 1458, 1500,
+     X 1500, 1500, 1500, 1500, 1500,
+     X 1500, 1500, 1500, 1500, 1500,
+     X 1500, 1500, 1500, 1500, 1500,
+     X 1500, 1536, 1536, 1536, 1536,
+     X 1536, 1536, 1536, 1536, 1536,
+     X 1536, 1536, 1536, 1536, 1536,
+     X 1536, 1536, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600 /
diff --git a/interpolation/rgauss_512.h b/interpolation/rgauss_512.h
new file mode 100755
index 0000000..f5b8e03
--- /dev/null
+++ b/interpolation/rgauss_512.h
@@ -0,0 +1,107 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+      REAL QG512(512)
+      DATA QG512/
+     X   18,   25,   32,   40,   45,
+     X   50,   60,   60,   72,   72,
+     X   75,   81,   90,   96,   96,
+     X  100,  108,  120,  125,  128,
+     X  135,  144,  150,  160,  160,
+     X  180,  180,  180,  192,  192,
+     X  200,  216,  216,  225,  225,
+     X  240,  240,  243,  250,  256,
+     X  270,  270,  288,  288,  288,
+     X  300,  320,  320,  320,  320,
+     X  360,  360,  360,  360,  360,
+     X  360,  375,  375,  384,  384,
+     X  400,  400,  400,  432,  432,
+     X  432,  432,  450,  450,  450,
+     X  480,  480,  480,  480,  480,
+     X  486,  500,  500,  512,  512,
+     X  540,  540,  540,  540,  540,
+     X  576,  576,  576,  576,  576,
+     X  576,  600,  600,  600,  640,
+     X  640,  640,  640,  640,  640,
+     X  640,  648,  675,  675,  675,
+     X  675,  675,  720,  720,  720,
+     X  720,  720,  720,  720,  729,
+     X  729,  750,  750,  750,  768,
+     X  768,  768,  800,  800,  800,
+     X  800,  800,  800,  810,  864,
+     X  864,  864,  864,  864,  864,
+     X  864,  864,  864,  864,  900,
+     X  900,  900,  900,  900,  900,
+     X  960,  960,  960,  960,  960,
+     X  960,  960,  960,  960,  960,
+     X  960,  972,  972, 1000, 1000,
+     X 1000, 1000, 1000, 1024, 1024,
+     X 1024, 1024, 1080, 1080, 1080,
+     X 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1125, 1125, 1125,
+     X 1125, 1125, 1125, 1125, 1125,
+     X 1125, 1152, 1152, 1152, 1152,
+     X 1152, 1200, 1200, 1200, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1215, 1215, 1215, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1296, 1296, 1296, 1350,
+     X 1350, 1350, 1350, 1350, 1350,
+     X 1350, 1350, 1350, 1350, 1350,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1458,
+     X 1458, 1458, 1458, 1500, 1500,
+     X 1500, 1500, 1500, 1500, 1500,
+     X 1500, 1500, 1500, 1536, 1536,
+     X 1536, 1536, 1536, 1536, 1536,
+     X 1536, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1620, 1620, 1620,
+     X 1620, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1920,
+     X 1920, 1920, 1920, 1920, 1920,
+     X 1920, 1920, 1920, 1920, 1920,
+     X 1920, 1920, 1920, 1920, 1920,
+     X 1920, 1920, 1944, 1944, 1944,
+     X 1944, 1944, 1944, 1944, 1944,
+     X 1944, 1944, 1944, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2025, 2025, 2025, 2025, 2025,
+     X 2025, 2025, 2025, 2025, 2025,
+     X 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2048, 2048,
+     X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048 /
diff --git a/interpolation/rgauss_640.h b/interpolation/rgauss_640.h
new file mode 100755
index 0000000..c63253a
--- /dev/null
+++ b/interpolation/rgauss_640.h
@@ -0,0 +1,139 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+	  REAL QG640(640) 
+ 	  DATA QG640/
+     X 18, 25, 32, 40, 45,
+     X 50, 60, 60, 72, 72,
+     X 75, 81, 90, 90, 96,
+     X 100, 108, 120, 120, 125,
+     X 135, 144, 150, 160, 160,
+     X 180, 180, 180, 192, 192,
+     X 200, 216, 216, 216, 225,
+     X 240, 240, 243, 250, 256,
+     X 270, 270, 288, 288, 288,
+     X 300, 300, 320, 320, 320,
+     X 360, 360, 360, 360, 360,
+     X 360, 375, 375, 384, 384,
+     X 400, 400, 400, 432, 432,
+     X 432, 432, 450, 450, 450,
+     X 480, 480, 480, 480, 480,
+     X 486, 500, 500, 512, 512,
+     X 540, 540, 540, 540, 540,
+     X 576, 576, 576, 576, 576,
+     X 600, 600, 600, 600, 640,
+     X 640, 640, 640, 640, 640,
+     X 640, 648, 675, 675, 675,
+     X 675, 720, 720, 720, 720,
+     X 720, 720, 720, 720, 729,
+     X 750, 750, 750, 750, 768,
+     X 768, 768, 800, 800, 800,
+     X 800, 800, 810, 810, 864,
+     X 864, 864, 864, 864, 864,
+     X 864, 864, 900, 900, 900,
+     X 900, 900, 900, 960, 960,
+     X 960, 960, 960, 960, 960,
+     X 960, 960, 960, 960, 972,
+     X 972, 1000, 1000, 1000, 1000,
+     X 1000, 1024, 1024, 1024, 1024,
+     X 1080, 1080, 1080, 1080, 1080,
+     X 1080, 1080, 1080, 1080, 1125,
+     X 1125, 1125, 1125, 1125, 1125,
+     X 1125, 1125, 1152, 1152, 1152,
+     X 1152, 1152, 1200, 1200, 1200,
+     X 1200, 1200, 1200, 1200, 1200,
+     X 1215, 1215, 1215, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1280, 1280, 1280, 1280, 1280,
+     X 1296, 1296, 1350, 1350, 1350,
+     X 1350, 1350, 1350, 1350, 1350,
+     X 1350, 1350, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1440,
+     X 1440, 1440, 1440, 1440, 1458,
+     X 1458, 1458, 1458, 1500, 1500,
+     X 1500, 1500, 1500, 1500, 1500,
+     X 1500, 1536, 1536, 1536, 1536,
+     X 1536, 1536, 1536, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1600, 1600, 1600, 1600,
+     X 1600, 1620, 1620, 1620, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1728, 1728, 1728,
+     X 1728, 1728, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1800, 1800, 1800,
+     X 1800, 1800, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1875,
+     X 1875, 1875, 1875, 1875, 1920,
+     X 1920, 1920, 1920, 1920, 1920,
+     X 1920, 1920, 1920, 1920, 1920,
+     X 1944, 1944, 1944, 1944, 1944,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2000,
+     X 2000, 2000, 2000, 2000, 2025,
+     X 2025, 2025, 2025, 2025, 2025,
+     X 2048, 2048, 2048, 2048, 2048,
+     X 2048, 2048, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2160, 2160, 2160,
+     X 2160, 2160, 2187, 2187, 2187,
+     X 2187, 2187, 2187, 2187, 2187,
+     X 2250, 2250, 2250, 2250, 2250,
+     X 2250, 2250, 2250, 2250, 2250,
+     X 2250, 2250, 2250, 2250, 2250,
+     X 2250, 2250, 2250, 2250, 2250,
+     X 2304, 2304, 2304, 2304, 2304,
+     X 2304, 2304, 2304, 2304, 2304,
+     X 2304, 2304, 2304, 2304, 2304,
+     X 2304, 2304, 2304, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2400, 2400, 2400, 2400, 2400,
+     X 2430, 2430, 2430, 2430, 2430,
+     X 2430, 2430, 2430, 2430, 2430,
+     X 2430, 2430, 2430, 2430, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2500, 2500, 2500, 2500, 2500,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560,
+     X 2560, 2560, 2560, 2560, 2560 /
diff --git a/interpolation/rpassm.F b/interpolation/rpassm.F
new file mode 100755
index 0000000..9c77db9
--- /dev/null
+++ b/interpolation/rpassm.F
@@ -0,0 +1,749 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE RPASSM(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,LOT,N,IFAC,
+     *    LA,IERR)
+      DIMENSION A(N),B(N),C(N),D(N),TRIGS(N)
+C---->
+C
+C     SUBROUTINE 'RPASSM' - PERFORMS ONE PASS THROUGH DATA AS PART
+C     OF MULTIPLE REAL FFT (FOURIER SYNTHESIS) ROUTINE
+C
+C     A IS FIRST REAL INPUT VECTOR
+C         EQUIVALENCE B(1) WITH A (LA*INC1+1)
+C     C IS FIRST REAL OUTPUT VECTOR
+C         EQUIVALENCE D(1) WITH C(IFAC*LA*INC2+1)
+C     TRIGS IS A PRECALCULATED LIST OF SINES & COSINES
+C     INC1 IS THE ADDRESSING INCREMENT FOR A
+C     INC2 IS THE ADDRESSING INCREMENT FOR C
+C     INC3 IS THE INCREMENT BETWEEN INPUT VECTORS A
+C     INC4 IS THE INCREMENT BETWEEN OUTPUT VECTORS C
+C     LOT IS THE NUMBER OF VECTORS
+C     N IS THE LENGTH OF THE VECTORS
+C     IFAC IS THE CURRENT FACTOR OF N
+C     LA IS THE PRODUCT OF PREVIOUS FACTORS
+C     IERR IS AN ERROR INDICATOR:
+C              0 - PASS COMPLETED WITHOUT ERROR
+C              1 - LOT GREATER THAN 64
+C              2 - IFAC NOT CATERED FOR
+C              3 - IFAC ONLY CATERED FOR IF LA=N/IFAC
+C
+C-----------------------------------------------------------------------
+C----<
+C
+      DIMENSION A10(64),A11(64),A20(64),A21(64),
+     *    B10(64),B11(64),B20(64),B21(64)
+      DATA SIN36/0.587785252292473/,SIN72/0.951056516295154/,
+     *    QRT5/0.559016994374947/,SIN60/0.866025403784437/
+C
+      M=N/IFAC
+      IINK=LA*INC1
+      JINK=LA*INC2
+      JUMP=(IFAC-1)*JINK
+      KSTOP=(N-IFAC)/(2*IFAC)
+C
+      IBAD=1
+      IF (LOT.GT.64) GO TO 910
+      IBASE=0
+      JBASE=0
+      IGO=IFAC-1
+      IF (IGO.EQ.7) IGO=6
+      IBAD=2
+      IF (IGO.LT.1.OR.IGO.GT.6) GO TO 910
+      GO TO (200,300,400,500,600,800),IGO
+C
+C     CODING FOR FACTOR 2
+C     -------------------
+  200 CONTINUE
+      IA=1
+      IB=IA+(2*M-LA)*INC1
+      JA=1
+      JB=JA+JINK
+C
+      IF (LA.EQ.M) GO TO 290
+C
+      DO 220 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 210 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=A(IA+I)-A(IB+I)
+      I=I+INC3
+      J=J+INC4
+  210 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  220 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB-IINK
+      IBASE=0
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IA.EQ.IB) GO TO 260
+      DO 250 K=LA,KSTOP,LA
+      KB=K+K
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      IBASE=0
+      DO 240 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 230 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      D(JA+J)=B(IA+I)-B(IB+I)
+      C(JB+J)=C1*(A(IA+I)-A(IB+I))-S1*(B(IA+I)+B(IB+I))
+      D(JB+J)=S1*(A(IA+I)-A(IB+I))+C1*(B(IA+I)+B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  230 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  240 CONTINUE
+      IA=IA+IINK
+      IB=IB-IINK
+      JBASE=JBASE+JUMP
+  250 CONTINUE
+      IF (IA.GT.IB) GO TO 900
+  260 CONTINUE
+      IBASE=0
+      DO 280 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 270 IJK=1,LOT
+      C(JA+J)=A(IA+I)
+      C(JB+J)=-B(IA+I)
+      I=I+INC3
+      J=J+INC4
+  270 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  280 CONTINUE
+      GO TO 900
+C
+  290 CONTINUE
+      DO 294 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 292 IJK=1,LOT
+      C(JA+J)=2.0*(A(IA+I)+A(IB+I))
+      C(JB+J)=2.0*(A(IA+I)-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  292 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  294 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 3
+C     -------------------
+  300 CONTINUE
+      IA=1
+      IB=IA+(2*M-LA)*INC1
+      IC=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+C
+      IF (LA.EQ.M) GO TO 390
+C
+      DO 320 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 310 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=(A(IA+I)-0.5*A(IB+I))-(SIN60*(B(IB+I)))
+      C(JC+J)=(A(IA+I)-0.5*A(IB+I))+(SIN60*(B(IB+I)))
+      I=I+INC3
+      J=J+INC4
+  310 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  320 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IA.EQ.IC) GO TO 360
+      DO 350 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      IBASE=0
+      DO 340 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 330 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      D(JA+J)=B(IA+I)+(B(IB+I)-B(IC+I))
+      C(JB+J)=
+     *    C1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)+B(IC+I))))
+     *   -S1*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))))
+      D(JB+J)=
+     *    S1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)+B(IC+I))))
+     *   +C1*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))))
+      C(JC+J)=
+     *    C2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)+B(IC+I))))
+     *   -S2*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))))
+      D(JC+J)=
+     *    S2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)+B(IC+I))))
+     *   +C2*((B(IA+I)-0.5*(B(IB+I)-B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))))
+      I=I+INC3
+      J=J+INC4
+  330 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  340 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      JBASE=JBASE+JUMP
+  350 CONTINUE
+      IF (IA.GT.IC) GO TO 900
+  360 CONTINUE
+      IBASE=0
+      DO 380 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 370 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=(0.5*A(IA+I)-A(IB+I))-(SIN60*B(IA+I))
+      C(JC+J)=-(0.5*A(IA+I)-A(IB+I))-(SIN60*B(IA+I))
+      I=I+INC3
+      J=J+INC4
+  370 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  380 CONTINUE
+      GO TO 900
+C
+  390 CONTINUE
+      SSIN60=2.0*SIN60
+      DO 394 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 392 IJK=1,LOT
+      C(JA+J)=2.0*(A(IA+I)+A(IB+I))
+      C(JB+J)=(2.0*A(IA+I)-A(IB+I))-(SSIN60*B(IB+I))
+      C(JC+J)=(2.0*A(IA+I)-A(IB+I))+(SSIN60*B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  392 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  394 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 4
+C     -------------------
+  400 CONTINUE
+      IA=1
+      IB=IA+(2*M-LA)*INC1
+      IC=IB+2*M*INC1
+      ID=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+C
+      IF (LA.EQ.M) GO TO 490
+C
+      DO 420 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 410 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+A(IB+I)
+      C(JB+J)=(A(IA+I)-A(IC+I))-B(IB+I)
+      C(JC+J)=(A(IA+I)+A(IC+I))-A(IB+I)
+      C(JD+J)=(A(IA+I)-A(IC+I))+B(IB+I)
+      I=I+INC3
+      J=J+INC4
+  410 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  420 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      ID=ID-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IB.EQ.IC) GO TO 460
+      DO 450 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      IBASE=0
+      DO 440 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 430 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))
+      D(JA+J)=(B(IA+I)-B(IC+I))+(B(IB+I)-B(ID+I))
+      C(JC+J)=
+     *    C2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+     *   -S2*((B(IA+I)-B(IC+I))-(B(IB+I)-B(ID+I)))
+      D(JC+J)=
+     *    S2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+     *   +C2*((B(IA+I)-B(IC+I))-(B(IB+I)-B(ID+I)))
+      C(JB+J)=
+     *    C1*((A(IA+I)-A(IC+I))-(B(IB+I)+B(ID+I)))
+     *   -S1*((B(IA+I)+B(IC+I))+(A(IB+I)-A(ID+I)))
+      D(JB+J)=
+     *    S1*((A(IA+I)-A(IC+I))-(B(IB+I)+B(ID+I)))
+     *   +C1*((B(IA+I)+B(IC+I))+(A(IB+I)-A(ID+I)))
+      C(JD+J)=
+     *    C3*((A(IA+I)-A(IC+I))+(B(IB+I)+B(ID+I)))
+     *   -S3*((B(IA+I)+B(IC+I))-(A(IB+I)-A(ID+I)))
+      D(JD+J)=
+     *    S3*((A(IA+I)-A(IC+I))+(B(IB+I)+B(ID+I)))
+     *   +C3*((B(IA+I)+B(IC+I))-(A(IB+I)-A(ID+I)))
+      I=I+INC3
+      J=J+INC4
+  430 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  440 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC-IINK
+      ID=ID-IINK
+      JBASE=JBASE+JUMP
+  450 CONTINUE
+      IF (IB.GT.IC) GO TO 900
+  460 CONTINUE
+      IBASE=0
+      SIN45=SQRT(0.5)
+      DO 480 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 470 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      C(JB+J)=SIN45*((A(IA+I)-A(IB+I))-(B(IA+I)+B(IB+I)))
+      C(JC+J)=B(IB+I)-B(IA+I)
+      C(JD+J)=-SIN45*((A(IA+I)-A(IB+I))+(B(IA+I)+B(IB+I)))
+      I=I+INC3
+      J=J+INC4
+  470 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  480 CONTINUE
+      GO TO 900
+C
+  490 CONTINUE
+      DO 494 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 492 IJK=1,LOT
+      C(JA+J)=2.0*((A(IA+I)+A(IC+I))+A(IB+I))
+      C(JB+J)=2.0*((A(IA+I)-A(IC+I))-B(IB+I))
+      C(JC+J)=2.0*((A(IA+I)+A(IC+I))-A(IB+I))
+      C(JD+J)=2.0*((A(IA+I)-A(IC+I))+B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  492 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  494 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 5
+C     -------------------
+  500 CONTINUE
+      IA=1
+      IB=IA+(2*M-LA)*INC1
+      IC=IB+2*M*INC1
+      ID=IC
+      IE=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+      JE=JD+JINK
+C
+      IF (LA.EQ.M) GO TO 590
+C
+      DO 520 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 510 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      C(JB+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))+QRT5*(A(IB+I)-A(IC+I)))
+     *    -(SIN72*B(IB+I)+SIN36*B(IC+I))
+      C(JC+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))-QRT5*(A(IB+I)-A(IC+I)))
+     *    -(SIN36*B(IB+I)-SIN72*B(IC+I))
+      C(JD+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))-QRT5*(A(IB+I)-A(IC+I)))
+     *    +(SIN36*B(IB+I)-SIN72*B(IC+I))
+      C(JE+J)=((A(IA+I)-0.25*(A(IB+I)+A(IC+I)))+QRT5*(A(IB+I)-A(IC+I)))
+     *    +(SIN72*B(IB+I)+SIN36*B(IC+I))
+      I=I+INC3
+      J=J+INC4
+  510 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  520 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IB.EQ.ID) GO TO 560
+      DO 550 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      IBASE=0
+      DO 540 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 530 IJK=1,LOT
+C
+      A10(IJK)=(A(IA+I)-0.25*((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))))
+     *    +QRT5*((A(IB+I)+A(IE+I))-(A(IC+I)+A(ID+I)))
+      A20(IJK)=(A(IA+I)-0.25*((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))))
+     *    -QRT5*((A(IB+I)+A(IE+I))-(A(IC+I)+A(ID+I)))
+      B10(IJK)=(B(IA+I)-0.25*((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I))))
+     *    +QRT5*((B(IB+I)-B(IE+I))-(B(IC+I)-B(ID+I)))
+      B20(IJK)=(B(IA+I)-0.25*((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I))))
+     *    -QRT5*((B(IB+I)-B(IE+I))-(B(IC+I)-B(ID+I)))
+      A11(IJK)=SIN72*(B(IB+I)+B(IE+I))+SIN36*(B(IC+I)+B(ID+I))
+      A21(IJK)=SIN36*(B(IB+I)+B(IE+I))-SIN72*(B(IC+I)+B(ID+I))
+      B11(IJK)=SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))
+      B21(IJK)=SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))
+C
+      C(JA+J)=A(IA+I)+((A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I)))
+      D(JA+J)=B(IA+I)+((B(IB+I)-B(IE+I))+(B(IC+I)-B(ID+I)))
+      C(JB+J)=C1*(A10(IJK)-A11(IJK))-S1*(B10(IJK)+B11(IJK))
+      D(JB+J)=S1*(A10(IJK)-A11(IJK))+C1*(B10(IJK)+B11(IJK))
+      C(JE+J)=C4*(A10(IJK)+A11(IJK))-S4*(B10(IJK)-B11(IJK))
+      D(JE+J)=S4*(A10(IJK)+A11(IJK))+C4*(B10(IJK)-B11(IJK))
+      C(JC+J)=C2*(A20(IJK)-A21(IJK))-S2*(B20(IJK)+B21(IJK))
+      D(JC+J)=S2*(A20(IJK)-A21(IJK))+C2*(B20(IJK)+B21(IJK))
+      C(JD+J)=C3*(A20(IJK)+A21(IJK))-S3*(B20(IJK)-B21(IJK))
+      D(JD+J)=S3*(A20(IJK)+A21(IJK))+C3*(B20(IJK)-B21(IJK))
+C
+      I=I+INC3
+      J=J+INC4
+  530 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  540 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      JBASE=JBASE+JUMP
+  550 CONTINUE
+      IF (IB.GT.ID) GO TO 900
+  560 CONTINUE
+      IBASE=0
+      DO 580 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 570 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(IB+I))+A(IC+I)
+      C(JB+J)=(QRT5*(A(IA+I)-A(IB+I))+(0.25*(A(IA+I)+A(IB+I))-A(IC+I)))
+     *    -(SIN36*B(IA+I)+SIN72*B(IB+I))
+      C(JE+J)=-(QRT5*(A(IA+I)-A(IB+I))+(0.25*(A(IA+I)+A(IB+I))-A(IC+I)))
+     *    -(SIN36*B(IA+I)+SIN72*B(IB+I))
+      C(JC+J)=(QRT5*(A(IA+I)-A(IB+I))-(0.25*(A(IA+I)+A(IB+I))-A(IC+I)))
+     *    -(SIN72*B(IA+I)-SIN36*B(IB+I))
+      C(JD+J)=-(QRT5*(A(IA+I)-A(IB+I))-(0.25*(A(IA+I)+A(IB+I))-A(IC+I)))
+     *    -(SIN72*B(IA+I)-SIN36*B(IB+I))
+      I=I+INC3
+      J=J+INC4
+  570 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  580 CONTINUE
+      GO TO 900
+C
+  590 CONTINUE
+      QQRT5=2.0*QRT5
+      SSIN36=2.0*SIN36
+      SSIN72=2.0*SIN72
+      DO 594 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 592 IJK=1,LOT
+      C(JA+J)=2.0*(A(IA+I)+(A(IB+I)+A(IC+I)))
+      C(JB+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    +QQRT5*(A(IB+I)-A(IC+I)))-(SSIN72*B(IB+I)+SSIN36*B(IC+I))
+      C(JC+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    -QQRT5*(A(IB+I)-A(IC+I)))-(SSIN36*B(IB+I)-SSIN72*B(IC+I))
+      C(JD+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    -QQRT5*(A(IB+I)-A(IC+I)))+(SSIN36*B(IB+I)-SSIN72*B(IC+I))
+      C(JE+J)=(2.0*(A(IA+I)-0.25*(A(IB+I)+A(IC+I)))
+     *    +QQRT5*(A(IB+I)-A(IC+I)))+(SSIN72*B(IB+I)+SSIN36*B(IC+I))
+      I=I+INC3
+      J=J+INC4
+  592 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  594 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 6
+C     -------------------
+  600 CONTINUE
+      IA=1
+      IB=IA+(2*M-LA)*INC1
+      IC=IB+2*M*INC1
+      ID=IC+2*M*INC1
+      IE=IC
+      IF=IB
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+      JE=JD+JINK
+      JF=JE+JINK
+C
+      IF (LA.EQ.M) GO TO 690
+C
+      DO 620 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 610 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(ID+I))+(A(IB+I)+A(IC+I))
+      C(JD+J)=(A(IA+I)-A(ID+I))-(A(IB+I)-A(IC+I))
+      C(JB+J)=((A(IA+I)-A(ID+I))+0.5*(A(IB+I)-A(IC+I)))
+     *    -(SIN60*(B(IB+I)+B(IC+I)))
+      C(JF+J)=((A(IA+I)-A(ID+I))+0.5*(A(IB+I)-A(IC+I)))
+     *    +(SIN60*(B(IB+I)+B(IC+I)))
+      C(JC+J)=((A(IA+I)+A(ID+I))-0.5*(A(IB+I)+A(IC+I)))
+     *    -(SIN60*(B(IB+I)-B(IC+I)))
+      C(JE+J)=((A(IA+I)+A(ID+I))-0.5*(A(IB+I)+A(IC+I)))
+     *    +(SIN60*(B(IB+I)-B(IC+I)))
+      I=I+INC3
+      J=J+INC4
+  610 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  620 CONTINUE
+      IA=IA+IINK
+      IINK=2*IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      IF=IF-IINK
+      JBASE=JBASE+JUMP
+      JUMP=2*JUMP+JINK
+      IF (IC.EQ.ID) GO TO 660
+      DO 650 K=LA,KSTOP,LA
+      KB=K+K
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      KF=KE+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      C5=TRIGS(KF+1)
+      S5=TRIGS(KF+2)
+      IBASE=0
+      DO 640 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 630 IJK=1,LOT
+C
+      A11(IJK)= (A(IE+I)+A(IB+I))+(A(IC+I)+A(IF+I))
+      A20(IJK)=(A(IA+I)+A(ID+I))-0.5*A11(IJK)
+      A21(IJK)=SIN60*((A(IE+I)+A(IB+I))-(A(IC+I)+A(IF+I)))
+      B11(IJK)= (B(IB+I)-B(IE+I))+(B(IC+I)-B(IF+I))
+      B20(IJK)=(B(IA+I)-B(ID+I))-0.5*B11(IJK)
+      B21(IJK)=SIN60*((B(IB+I)-B(IE+I))-(B(IC+I)-B(IF+I)))
+C
+      C(JA+J)=(A(IA+I)+A(ID+I))+A11(IJK)
+      D(JA+J)=(B(IA+I)-B(ID+I))+B11(IJK)
+      C(JC+J)=C2*(A20(IJK)-B21(IJK))-S2*(B20(IJK)+A21(IJK))
+      D(JC+J)=S2*(A20(IJK)-B21(IJK))+C2*(B20(IJK)+A21(IJK))
+      C(JE+J)=C4*(A20(IJK)+B21(IJK))-S4*(B20(IJK)-A21(IJK))
+      D(JE+J)=S4*(A20(IJK)+B21(IJK))+C4*(B20(IJK)-A21(IJK))
+C
+      A11(IJK)=(A(IE+I)-A(IB+I))+(A(IC+I)-A(IF+I))
+      B11(IJK)=(B(IE+I)+B(IB+I))-(B(IC+I)+B(IF+I))
+      A20(IJK)=(A(IA+I)-A(ID+I))-0.5*A11(IJK)
+      A21(IJK)=SIN60*((A(IE+I)-A(IB+I))-(A(IC+I)-A(IF+I)))
+      B20(IJK)=(B(IA+I)+B(ID+I))+0.5*B11(IJK)
+      B21(IJK)=SIN60*((B(IE+I)+B(IB+I))+(B(IC+I)+B(IF+I)))
+C
+      C(JD+J)=
+     *  C3*((A(IA+I)-A(ID+I))+A11(IJK))-S3*((B(IA+I)+B(ID+I))-B11(IJK))
+      D(JD+J)=
+     *  S3*((A(IA+I)-A(ID+I))+A11(IJK))+C3*((B(IA+I)+B(ID+I))-B11(IJK))
+      C(JB+J)=C1*(A20(IJK)-B21(IJK))-S1*(B20(IJK)-A21(IJK))
+      D(JB+J)=S1*(A20(IJK)-B21(IJK))+C1*(B20(IJK)-A21(IJK))
+      C(JF+J)=C5*(A20(IJK)+B21(IJK))-S5*(B20(IJK)+A21(IJK))
+      D(JF+J)=S5*(A20(IJK)+B21(IJK))+C5*(B20(IJK)+A21(IJK))
+C
+      I=I+INC3
+      J=J+INC4
+  630 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  640 CONTINUE
+      IA=IA+IINK
+      IB=IB+IINK
+      IC=IC+IINK
+      ID=ID-IINK
+      IE=IE-IINK
+      IF=IF-IINK
+      JBASE=JBASE+JUMP
+  650 CONTINUE
+      IF (IC.GT.ID) GO TO 900
+  660 CONTINUE
+      IBASE=0
+      DO 680 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 670 IJK=1,LOT
+      C(JA+J)=A(IB+I)+(A(IA+I)+A(IC+I))
+      C(JD+J)=B(IB+I)-(B(IA+I)+B(IC+I))
+      C(JB+J)=(SIN60*(A(IA+I)-A(IC+I)))-(0.5*(B(IA+I)+B(IC+I))+B(IB+I))
+      C(JF+J)=-(SIN60*(A(IA+I)-A(IC+I)))-(0.5*(B(IA+I)+B(IC+I))+B(IB+I))
+      C(JC+J)=SIN60*(B(IC+I)-B(IA+I))+(0.5*(A(IA+I)+A(IC+I))-A(IB+I))
+      C(JE+J)=SIN60*(B(IC+I)-B(IA+I))-(0.5*(A(IA+I)+A(IC+I))-A(IB+I))
+      I=I+INC3
+      J=J+INC4
+  670 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  680 CONTINUE
+      GO TO 900
+C
+  690 CONTINUE
+      SSIN60=2.0*SIN60
+      DO 694 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 692 IJK=1,LOT
+      C(JA+J)=(2.0*(A(IA+I)+A(ID+I)))+(2.0*(A(IB+I)+A(IC+I)))
+      C(JD+J)=(2.0*(A(IA+I)-A(ID+I)))-(2.0*(A(IB+I)-A(IC+I)))
+      C(JB+J)=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))
+     *    -(SSIN60*(B(IB+I)+B(IC+I)))
+      C(JF+J)=(2.0*(A(IA+I)-A(ID+I))+(A(IB+I)-A(IC+I)))
+     *    +(SSIN60*(B(IB+I)+B(IC+I)))
+      C(JC+J)=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))
+     *    -(SSIN60*(B(IB+I)-B(IC+I)))
+      C(JE+J)=(2.0*(A(IA+I)+A(ID+I))-(A(IB+I)+A(IC+I)))
+     *    +(SSIN60*(B(IB+I)-B(IC+I)))
+      I=I+INC3
+      J=J+INC4
+  692 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  694 CONTINUE
+      GO TO 900
+C
+C     CODING FOR FACTOR 8
+C     -------------------
+  800 CONTINUE
+      IBAD=3
+      IF (LA.NE.M) GO TO 910
+      IA=1
+      IB=IA+LA*INC1
+      IC=IB+2*LA*INC1
+      ID=IC+2*LA*INC1
+      IE=ID+2*LA*INC1
+      JA=1
+      JB=JA+JINK
+      JC=JB+JINK
+      JD=JC+JINK
+      JE=JD+JINK
+      JF=JE+JINK
+      JG=JF+JINK
+      JH=JG+JINK
+      SSIN45=SQRT(2.0)
+C
+      DO 820 L=1,LA
+      I=IBASE
+      J=JBASE
+CDIR$ IVDEP
+      DO 810 IJK=1,LOT
+      C(JA+J)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))+(A(IB+I)+A(ID+I)))
+      C(JE+J)=2.0*(((A(IA+I)+A(IE+I))+A(IC+I))-(A(IB+I)+A(ID+I)))
+      C(JC+J)=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))-(B(IB+I)-B(ID+I)))
+      C(JG+J)=2.0*(((A(IA+I)+A(IE+I))-A(IC+I))+(B(IB+I)-B(ID+I)))
+      C(JB+J)=2.0*((A(IA+I)-A(IE+I))-B(IC+I))
+     *    +SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))
+      C(JF+J)=2.0*((A(IA+I)-A(IE+I))-B(IC+I))
+     *    -SSIN45*((A(IB+I)-A(ID+I))-(B(IB+I)+B(ID+I)))
+      C(JD+J)=2.0*((A(IA+I)-A(IE+I))+B(IC+I))
+     *    -SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))
+      C(JH+J)=2.0*((A(IA+I)-A(IE+I))+B(IC+I))
+     *    +SSIN45*((A(IB+I)-A(ID+I))+(B(IB+I)+B(ID+I)))
+      I=I+INC3
+      J=J+INC4
+  810 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  820 CONTINUE
+C
+C     RETURN
+C     ------
+  900 CONTINUE
+      IBAD=0
+  910 CONTINUE
+      IERR=IBAD
+      RETURN
+      END
diff --git a/interpolation/rphi.F b/interpolation/rphi.F
new file mode 100755
index 0000000..44fc2fd
--- /dev/null
+++ b/interpolation/rphi.F
@@ -0,0 +1,136 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+       SUBROUTINE RPHI( DATA, NM, WORK, SLON)
+C
+C---->
+C**** RPHI
+C
+C     Purpose
+C     -------
+C
+C     Rotates spectral coefficients by longitude.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL RPHI(DATA,NM,WORK,SLON)
+C
+C     Input
+C     -----
+C
+C     DATA   = Input spectral field of REAL*8s of size (NM+1)*(NM+2).
+C     NM     = Triangular truncation (e.g. 106)
+C     WORK   = Work space of size at least 2*(NM+1).
+C     SLON   = Rotation angle (REAL*8).
+C              (degrees, positive => rotate west to east). 
+C
+C     Output
+C     ------
+C
+C     Transformed fields are returned in data.
+C
+C
+C     Method
+C     ------
+C
+C     See reference below.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     R.McGrath and P.Lynch    HIRLAM
+C
+C
+C     Reference.
+C     ----------
+C
+C     "Spectral synthesis on rotated and regular grids"
+C     by P.Lynch and R.McGrath (Irish Meteorological Service).
+C
+C
+C     Modifications
+C     -------------
+C
+C     J.D.Chambers       ECMWF     October 1995
+C     Reformat and put into clearcase.
+C
+C ------------------------------------------------------------------
+C----<
+C
+      IMPLICIT NONE
+C
+#include "jparams.h"
+C
+C     Function arguments
+      COMPLEX*16 DATA
+      COMPLEX*16 WORK
+      DIMENSION DATA(*), WORK(*)
+      REAL*8 SLON
+      INTEGER NM
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 26000 )
+C
+C     Local variables
+      COMPLEX*16 CC
+      INTEGER I, IPMN, NS, M, J
+      REAL*8 RAD, XLON
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IPMN = ((NM+1)*(NM+2))/2
+      RAD  = 180.0/PPI
+      XLON = -SLON/RAD
+C
+C ------------------------------------------------------------------
+C*    Section 2.   Transform the fields.
+C ------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NS = 1
+      CC = (1.0,0.0)
+C
+      DO 215 M = 1,NM+1
+        DO 210 J = NS,NS+NM-M+1
+          WORK(J) = CC
+  210   CONTINUE
+C
+        NS = J
+        CC = CEXP(CMPLX(0.0,REAL(XLON*M)))
+  215 CONTINUE
+C
+C     Transform fields in output array.
+        DO 220 J = 1,IPMN
+          DATA(J) = WORK(J)*DATA(J)
+  220   CONTINUE
+C
+C ------------------------------------------------------------------
+C*    Section 9.   Return.
+C ------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/set99.F b/interpolation/set99.F
new file mode 100755
index 0000000..baeb793
--- /dev/null
+++ b/interpolation/set99.F
@@ -0,0 +1,69 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SET99(TRIGS,IFAX,N)
+      DIMENSION TRIGS(N),IFAX(10),JFAX(10),LFAX(7)
+C---->
+C
+C     SUBROUTINE 'SET99' - COMPUTES FACTORS OF N & TRIGONOMETRIC
+C     FUNCTIONS REQUIRED BY FFT99 & FFT991
+C
+C----<
+#include "jparams.h"
+C
+      DATA LFAX/6,8,5,4,3,2,1/
+      IXXX=1
+C
+      DEL= (2.0*PPI)/FLOAT(N)
+      NIL=0
+      NHL=(N/2)-1
+      DO 10 K=NIL,NHL
+      ANGLE=FLOAT(K)*DEL
+      TRIGS(2*K+1)=COS(ANGLE)
+      TRIGS(2*K+2)=SIN(ANGLE)
+   10 CONTINUE
+C
+C     FIND FACTORS OF N (8,6,5,4,3,2; ONLY ONE 8 ALLOWED)
+C     LOOK FOR SIXES FIRST, STORE FACTORS IN DESCENDING ORDER
+      NU=N
+      IFAC=6
+      K=0
+      L=1
+   20 CONTINUE
+      IF (MOD(NU,IFAC).NE.0) GO TO 30
+      K=K+1
+      JFAX(K)=IFAC
+      IF (IFAC.NE.8) GO TO 25
+      IF (K.EQ.1) GO TO 25
+      JFAX(1)=8
+      JFAX(K)=6
+   25 CONTINUE
+      NU=NU/IFAC
+      IF (NU.EQ.1) GO TO 50
+      IF (IFAC.NE.8) GO TO 20
+   30 CONTINUE
+      L=L+1
+      IFAC=LFAX(L)
+      IF (IFAC.GT.1) GO TO 20
+C
+      WRITE(6,40) N
+   40 FORMAT(4H1N =,I4,27H - CONTAINS ILLEGAL FACTORS)
+      RETURN
+C
+C     NOW REVERSE ORDER OF FACTORS
+   50 CONTINUE
+      NFAX=K
+      IFAX(1)=NFAX
+      DO 60 I=1,NFAX
+      IFAX(NFAX+2-I)=JFAX(I)
+   60 CONTINUE
+      IFAX(10)=N
+      RETURN
+      END
diff --git a/interpolation/setrep.F b/interpolation/setrep.F
new file mode 100755
index 0000000..e9fcf59
--- /dev/null
+++ b/interpolation/setrep.F
@@ -0,0 +1,71 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+#define INT_MISSING -2147483647
+
+      INTEGER FUNCTION SETREP(OUTREP)
+C
+C---->
+C*****SEREP*
+C
+C     PURPOSE
+C     -------
+C     reset LNOREPR to original value
+C     reset some other values in common block
+C     LNOREPR      - Flag to say whether or not user specified NOREPR 
+C
+C     Function argument
+C
+      INTEGER OUTREP
+
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+
+       SETREP = 0
+      IF(OUTREP.EQ.1) THEN
+         LNOREPR = .FALSE.
+        IF(.NOT.LNOAREA) THEN
+           NOAREA(1) = 0
+           NOAREA(2) = 0
+           NOAREA(3) = 0
+           NOAREA(4) = 0
+         CALL INTLOG(JP_DEBUG,'SETREP: AREA has been reseted'
+     X   ,JPQUIET)
+        ENDIF
+         CALL INTLOG(JP_DEBUG,'SETREP: LNOREPR has been reseted'
+     X   ,JPQUIET)
+      ENDIF
+       NIWE = 0
+       NINS = 0
+         CALL INTLOG(JP_DEBUG,'SETREP: NIWE,NINS has been reseted'
+     X   ,JPQUIET)
+cs       NOACC = 0
+cs         CALL INTLOG(JP_DEBUG,'SETREP: NOACC has been reseted'
+cs     X   ,JPQUIET)
+       NOLEVEL = 0
+         CALL INTLOG(JP_DEBUG,'SETREP: NOLEVEL has been reseted'
+     X   ,JPQUIET)
+       LOCEAN = .FALSE.
+         CALL INTLOG(JP_DEBUG,'SETREP: LOCEAN has been reseted'
+     X   ,JPQUIET)
+       LPREC = .FALSE.
+         CALL INTLOG(JP_DEBUG,'SETREP: LPREC has been reseted'
+     X   ,JPQUIET)
+       LIMISSA = .FALSE.
+       LIMISSV = .FALSE.
+       RMISSGV   = REAL(INT_MISSING)
+         CALL INTLOG(JP_DEBUG,'SETREP: LIMISSV has been reseted'
+     X   ,JPQUIET)
+cs       LNOROTA = .FALSE.
+cs         CALL INTLOG(JP_DEBUG,'SETREP: LNOROTA has been reseted'
+cs     X   ,JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/sharedMemoryCharacteristics.c b/interpolation/sharedMemoryCharacteristics.c
new file mode 100755
index 0000000..ab55b30
--- /dev/null
+++ b/interpolation/sharedMemoryCharacteristics.c
@@ -0,0 +1,175 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+
+extern int debugSet;
+
+#include "sharedmemory.h"
+#include "fortdefs.h"
+
+#define MAC 1264
+
+int sharedMemoryCharacteristics(
+  int type,
+  int truncation,
+  float grid,
+  int * numlat,
+  size_t * size,
+  key_t * key )
+{
+/*
+// Input:
+//
+//   type - indicates the spectral to grid transformation:
+//          SP2LL for spectral to lat/long
+//          SP2RG for spectral to regular gaussian
+//          SP2QG for spectral to quasi-regular (reduced) gaussian
+//
+//   truncation - the spectral truncation (eg 511 for T511)
+//
+//   grid - specifies the desired grid:
+//          the grid spacing along a line of longitude for lat/long grids
+//          the gaussian grid number for gaussian grids (eg 80.0 for N80)
+//
+// Output:
+//
+//   numlat - the number of latitudes from pole to pole in the grid
+//
+//   size - size in bytes of the transformation coefficients
+//
+//   key - the key for the shared memory and its associated semaphore
+//
+// Function returns 0 if all OK.
+//
+// Files setup to generate shared memory and semaphore keys are held
+// in a desginated directory (see defaultDirectory below). This
+// directory can be specified using environment variable SHARED_DIRECTORY.
+//
+*/
+int status, gaussianNumber;
+char defaultDirectory[] = "./";
+/* char defaultDirectory[] = "/home/ma/emos/data/BlueStorm"; */
+char * directory;
+char filename[] = "SP2LL_Tnnnn_to_Grid_xxxxxxxxx";
+char * fullFilename;
+key_t Key;
+
+/*
+// Build the name of the file which is used to define a key.
+// If the file does not already exist, create it.
+*/
+    /* directory = getenv("SHARED_DIRECTORY"); */
+    directory = getenv("PPDIR");
+    if( directory == NULL ) directory = defaultDirectory;
+    fullFilename = (char *) malloc(strlen(directory)+strlen(filename));
+    if( fullFilename == NULL ) {
+      perror("malloc error");
+      exit(1);
+    }
+    strcpy(fullFilename, directory);
+    strcat(fullFilename, "/");
+
+    switch( type) {
+
+      case SP2LL:
+        sprintf(filename,"SP2LL_T%04d_to_Grid_%09.6f",truncation,grid);
+        break;
+
+      case SP2RG:
+        sprintf(filename,"SP2RG_T%04d_to_Regular_N%04.0f",truncation,grid);
+        break;
+
+      case SP2QG:
+        sprintf(filename,"SP2QG_T%04d_to_Reduced_N%04.0f",truncation,grid);
+        break;
+
+      default:
+        return (int) 1;
+    }
+    strcat(fullFilename, filename);
+    
+    if( DEBUG ) printf("fullFilename = %s\n", fullFilename);
+    Key = ftok(fullFilename, MAC);
+/*
+//  If file does not exist, ..
+*/
+    if( Key == -1 ) {
+      char * command = (char*) malloc(6+strlen(fullFilename));
+      if( command == NULL ) {
+        perror("malloc error");
+        exit(1);
+      }
+      strcpy(command,"touch ");
+      strcat(command,fullFilename);
+      if( DEBUG ) printf("%s\n", command);
+      status = system(command);
+      if( status ) {
+        printf("Unable to create file %s\n", fullFilename);
+        perror("File creation problem");
+        exit(1);
+      }
+      free(command);
+      Key = ftok(fullFilename, MAC);
+      if( Key == -1 ) {
+        perror("Error getting key from newly created file");
+        exit(1);
+      }
+    }
+    free(fullFilename);
+
+    *key = Key;
+    if( DEBUG ) printf("sharedMemoryCharacteristics: Key = %0x\n", Key);
+/*
+// Calculate the file characteristics
+*/
+    switch( type) {
+
+      case SP2LL:
+        *numlat = (int)(90.0/grid + 1.0);
+        break;
+
+      case SP2RG:
+      case SP2QG:
+        gaussianNumber = (int) grid;
+		/*
+        *numlat = gaussianNumber*2;
+		*/
+        *numlat = gaussianNumber;
+        break;
+
+      default:
+        printf("sharedMemoryCharacteristics: Type %d not yet handled\n", type);
+        return (int) 1;
+    }     
+
+    *size = (((truncation+1)*(truncation+4))/2) * (*numlat) * sizeof(fortreal);
+	printf("size=%ld\n",*size);
+	/*
+    *size = (((truncation+1)*(truncation+4))/2);
+	printf("size=%d\n",*size);
+	*size *= *numlat;
+	printf("size=%d\n",*size);
+	*size *= sizeof(fortreal);
+	printf("-----size=%ld\n",*size);
+	*size = 4736220160;
+	printf("------size=%ld\n",*size);
+	*/
+
+
+    if( DEBUG ) printf("sharedMemoryCharacteristics: truncation = %d sizeof-fortreal %d numlat=%d\n", truncation,sizeof(fortreal),*numlat);
+    if( DEBUG ) printf("sharedMemoryCharacteristics: Size = %ld bytes\n", *size);
+
+    return (int) 0;
+}
diff --git a/interpolation/sharedgg.c b/interpolation/sharedgg.c
new file mode 100755
index 0000000..1a5b60d
--- /dev/null
+++ b/interpolation/sharedgg.c
@@ -0,0 +1,119 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#define SHAREDGG sharedgg_
+
+#ifdef linux
+#ifndef __USE_LARGEFILE64
+#define __USE_LARGEFILE64
+#endif
+#include <sys/stat.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <string.h>
+#include "fortint.h"
+#include "sharedlib.h"
+
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+extern int sharedlib_dbg = 0;
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define SHAREDLL sharedll
+#define PBOPEN pbopen
+#define PBCLOSE pbclose
+#else
+#define SHAREDLL sharedll_
+#define PBOPEN pbopen_
+#define PBCLOSE pbclose_
+#endif
+#endif
+
+
+fortint SHAREDGG(
+  JPointer* ipdum,
+  fortint* iktrunc,
+  fortint* knum)
+
+/*
+C
+C**** SHAREDGG
+C
+C     IPDUM   - Dummy array for mapping legendre function file
+C     KNUM    - Gaussian grid number
+C     KTRUNC  - Spherical truncation
+C     KRET    - Return status, 0 = OK.
+C
+*/
+{
+
+#if (defined hpR64) || (defined hpiaR64)
+long l1, l2;
+#else
+fortint l1, l2;
+#endif
+
+char filedum[128], filename[128];
+char ypfn[13] =        "CF_xxxx_nnnn";
+static char yold[13] = "xxxxxxxxxxxx";
+char defaultDirectory[] = "./";
+int kbuild ;
+char * fn;
+static fortint fpindex;
+static FILE * fp;
+static void * result = 0;
+fortint kret =0;
+
+int exist = 0;
+int status;
+pid_t process_id;
+int ktrunc = (int) (*iktrunc);
+
+/*
+//  Setup the filename: cf_txxxx_raabbbbb
+*/
+
+/*
+//  Setup the file name
+*/
+  sprintf( ypfn+3, "%04d", ktrunc);
+  sprintf( ypfn+7, "_%04d", *knum);
+
+/*
+//  See if the  file has already been created.
+*/
+  fn = getenv("PPDIR");
+  if(fn == NULL) fn = defaultDirectory;
+
+  if( (fn != NULL) && (strlen(fn) != 0) ) {
+    strcpy( filename, fn );
+    strcat( filename, "/");
+    strcat( filename, ypfn);
+    l1 = strlen(filename);
+    l2 = 1;
+  }
+  /* printf("gg share_file filename=%s\n",filename); */
+
+	result = (void *) share_file(filename);
+  	if (result == NULL) kret = 1;
+
+  *ipdum = (JPointer) result;
+
+  return kret;
+}
diff --git a/interpolation/sharedlib.c b/interpolation/sharedlib.c
new file mode 100755
index 0000000..ccd6f9b
--- /dev/null
+++ b/interpolation/sharedlib.c
@@ -0,0 +1,368 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <errno.h>
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/time.h>
+
+#include <sys/sem.h>
+
+#include "sharedlib.h"
+
+int sharedlib_dbg = 0;
+
+/* 10 MB */
+
+#define BUFFER_SIZE 10485760
+#define MAGIC       1234567890
+
+struct sembuf _lock[] = {
+    { 0, 0,  SEM_UNDO }, /* test */
+    { 0, 1,  SEM_UNDO }, /* lock */
+};
+
+struct sembuf _unlock[] = {
+    { 0, -1, SEM_UNDO }, /* ulck */
+};
+
+#define INFO_PATH 1024
+
+struct info {
+    int ready;
+    int magic;
+    char path[INFO_PATH];
+};
+
+
+
+void *share_file(const char* file) {
+    char message[1024];
+    char path[1024];
+
+    struct  stat64 s;
+    struct  stat64 s2;
+    int fd = -1;
+    int err = 0;
+    void *ptr = NULL;
+    int shmid = 0;
+    key_t key;
+    char *addr;
+    struct timeval start, end, diff;
+    double time;
+    int sem;
+    int loadfile = 1;
+    int locked = 0;
+    int page_size = getpagesize();
+    struct info *nfo;
+
+    if(page_size < 0)
+    {
+        fprintf(stderr,"ERR: sharedmem:get_page_size faile\n");
+        return NULL;
+    }
+
+    if(strlen(file) + 1 > INFO_PATH)
+    {
+        fprintf(stderr,"ERR: sharedmem:path too long(%d) max is %d\n",strlen(file), INFO_PATH);
+        return NULL;
+    }
+
+    if(strlen(file) + 1 > sizeof(path))
+    {
+        fprintf(stderr,"ERR: sharedmem:path too long(%d) max is %d\n",strlen(file), sizeof(path));
+        return NULL;
+    }
+
+    if(realpath(file,path) == 0) {
+        sprintf(message,"ERR: sharedmem:realpath(%s)",file);
+        err = -1;
+        goto error;
+    }
+
+    if (sharedlib_dbg)
+        fprintf(stdout,"sharedmem: sharing %s\n",path);
+
+    if(sizeof(s.st_size) < 8) {
+        fprintf(stderr,"ERR: sharedmem:stat.st_size(%d) is too small for 64bits files\n",sizeof(s.st_size));
+        return NULL;
+    }
+
+
+    key = ftok(path,1);
+
+    if(key ==  (key_t)-1) {
+        sprintf(message,"ERR: sharedmem:ftok(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+
+    if((sem = semget(key,1,IPC_CREAT|0600)) < 0)
+    {
+        sprintf(message,"ERR: sharedmem:semget(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    if (sharedlib_dbg) gettimeofday( &start, NULL );
+
+    if(semop(sem,_lock, 2 ) < 0) {
+
+        sprintf(message,"ERR: sharedmem:semop:lock(%s)",path);
+        err = -1;
+        goto error;
+    }
+    locked = 1;
+
+    if (sharedlib_dbg)
+	{
+        gettimeofday( &end, NULL );
+
+        diff.tv_sec  = end.tv_sec  - start.tv_sec;
+        diff.tv_usec = end.tv_usec - start.tv_usec;
+
+        if (diff.tv_usec < 0)
+        {
+            diff.tv_sec--;
+            diff.tv_sec--;
+            diff.tv_usec += 1000000;
+        }
+        time = (double)diff.tv_sec + ((double)diff.tv_usec / 1000000.);
+
+        fprintf( stdout, "sharedmem:semop:lock wait %g secs\n", time);
+    }
+
+    if((fd = open(path,O_RDONLY | O_LARGEFILE))  < 0)
+    {
+
+        sprintf(message,"ERR: sharedmem:open(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    if(stat64(path,&s)) 
+    {
+        sprintf(message,"ERR: sharedmem:stat(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    if((shmid = shmget(key, ((s.st_size + page_size-1)/page_size)*page_size + sizeof(struct info),IPC_CREAT|0600)) < 0)
+    {
+        sprintf(message,"ERR: sharedmem:shmget(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+
+#ifdef SHM_PAGESIZE
+    {
+
+    /* Use 64K pages to back the shared memory region */
+    size_t shm_size;
+    struct shmid_ds shm_buf = { 0 };
+    psize_t psize_64k;
+    psize_64k = 64 * 1024;
+
+    shm_buf.shm_pagesize = psize_64k;
+    if (shmctl(shmid, SHM_PAGESIZE, &shm_buf))
+    {
+        /*perror("shmctl(SHM_PAGESIZE) failed");*/
+    }
+    }
+
+#endif
+
+    /* attach shared memory */
+
+    ptr = shmat( shmid, NULL, 0 );
+    if (ptr == (void*)-1) {
+        sprintf(message,"sharedmem:shmget(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    addr = (char*)ptr;
+    nfo  = (struct info*)(addr + (((s.st_size + page_size-1)/page_size)*page_size));
+
+    if(nfo->ready) { 
+        loadfile = 0;
+        if(nfo->magic != MAGIC)
+        {
+            sprintf(message,"ERR: sharedmem:check: bad magic %d\n",nfo->magic);
+            err = -1;
+            goto error;
+        }
+
+        if(strcmp(nfo->path,path) != 0)
+        {
+            sprintf(message,"ERR: sharedmem:check: invalid path [%s]\n",nfo->path);
+            err = -1;
+            goto error;
+        }
+    }
+
+
+    if(loadfile) {
+
+        s2.st_size =  s.st_size;
+
+        if (sharedlib_dbg) gettimeofday( &start, NULL );
+
+        while(s.st_size > 0) 
+        {
+            size_t len = s.st_size > BUFFER_SIZE ? BUFFER_SIZE : s.st_size;
+            if(read(fd, addr, len) != len) {
+                sprintf(message,"ERR: sharedmem:read(%s)",path);
+                err = -1;
+                goto error;
+            }
+            s.st_size -= len;
+            addr      += len;
+        }
+
+        if (sharedlib_dbg)
+    	{
+            gettimeofday( &end, NULL );
+
+            diff.tv_sec  = end.tv_sec  - start.tv_sec;
+            diff.tv_usec = end.tv_usec - start.tv_usec;
+
+            if (diff.tv_usec < 0)
+            {
+                diff.tv_sec--;
+                diff.tv_usec += 1000000;
+            }
+            time = (double)diff.tv_sec + ((double)diff.tv_usec / 1000000.);
+
+            fprintf( stdout, "sharedmem:read %lld bytes in %g secs\n",s2.st_size, time);
+        }
+
+        nfo->magic = MAGIC;
+        strcpy(nfo->path,path);
+        nfo->ready = 1;
+    }
+    else
+    {
+        if (sharedlib_dbg)
+        fprintf( stdout, "sharedmem:read file already loaded\n");
+    }
+
+    close(fd);
+
+error:
+
+    if(fd>0) {
+        close(fd);
+    }
+
+    if(err) {
+        perror(message);
+        if(ptr) shmdt(ptr);
+        ptr = NULL;
+
+    }
+    if(locked) {
+        if(semop(sem,_unlock,1) < 0)
+        {
+            sprintf(message,"ERR: sharedmem:semop:lock(%s)",path);
+            perror(message);
+        }
+
+    }
+
+    return ptr;
+}
+
+void release_shared_file(void *ptr) {
+    shmdt(ptr);
+}
+
+int remove_shared_file(const char* file) {
+    char message[1024];
+    char path[1024];
+    int err = 0;
+    int shmid = 0;
+    key_t key;
+    int sem;
+
+    if(strlen(file) + 1 > sizeof(path))
+    {
+        fprintf(stderr,"ERR: sharedmem:path too long(%d) max is %d\n",strlen(file), sizeof(path));
+        return -1;
+    }
+
+    if(realpath(file,path) == 0) {
+        sprintf(message,"ERR: sharedmem:realpath(%s)",file);
+        err = -1;
+        goto error;
+    }
+
+    key  = ftok(path,1);
+
+    if(key ==  (key_t)-1) {
+        sprintf(message,"ERR: sharedmem:ftok(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    if((shmid = shmget(key,0,0600)) < 0)
+    {
+        sprintf(message,"ERR: sharedmem:shmget(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    fprintf(stdout,"sharedmem: removing shared memory for %s\n",path);
+
+    if(shmctl(shmid, IPC_RMID, NULL) < 0) 
+    {
+        sprintf(message,"ERR: sharedmem:shmctl:IPC_RMID,(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+
+    if((sem = semget(key,1,0600)) <0 )
+    {
+        sprintf(message,"ERR: sharedmem:semget(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    if(semctl(sem, 0, IPC_RMID, NULL) < 0) 
+    {
+        sprintf(message,"ERR: sharedmem:semctl:IPC_RMID,(%s)",path);
+        err = -1;
+        goto error;
+    }
+
+    
+
+error:
+
+
+
+    if(err) 
+        perror(message);
+
+    return err;
+
+}
diff --git a/interpolation/sharedlib.h b/interpolation/sharedlib.h
new file mode 100755
index 0000000..490aae0
--- /dev/null
+++ b/interpolation/sharedlib.h
@@ -0,0 +1,23 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#if defined(__STDC__) || defined(__cplusplus)
+# define P_(s) s
+#else
+# define P_(s) ()
+#endif
+
+
+/* sharedlib.c */
+void *share_file P_((const char *path));
+void release_shared_file P_((void *ptr));
+int remove_shared_file P_((const char *path));
+
+#undef P_
diff --git a/interpolation/sharedll.c b/interpolation/sharedll.c
new file mode 100755
index 0000000..83ad435
--- /dev/null
+++ b/interpolation/sharedll.c
@@ -0,0 +1,121 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#define SHAREDLL sharedll_
+
+#ifdef linux
+#ifndef __USE_LARGEFILE64
+#define __USE_LARGEFILE64
+#endif
+#include <sys/stat.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <string.h>
+#include "fortint.h"
+#include "sharedlib.h"
+
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+extern int sharedlib_dbg = 0;
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define SHAREDLL sharedll
+#define PBOPEN pbopen
+#define PBCLOSE pbclose
+#else
+#define SHAREDLL sharedll_
+#define PBOPEN pbopen_
+#define PBCLOSE pbclose_
+#endif
+#endif
+
+
+
+fortint SHAREDLL(
+  JPointer* ipdum,
+  fortint* iktrunc,
+  double* platinc)
+
+/*
+C
+C**** SHAREDLL
+C
+C     IPDUM   - Dummy array for mapping legendre function file
+C     PLATINC - Grid interval in degrees
+C     KTRUNC  - Spherical truncation
+C     KRET    - Return status, 0 = OK.
+C
+*/
+{
+
+#if (defined hpR64) || (defined hpiaR64)
+long l1, l2;
+#else
+fortint l1, l2;
+#endif
+
+char filedum[128], filename[128];
+char ypfn[18] =        "CF_Txxxx_Raabbbb";
+static char yold[18] = "xxxxxxxxxxxxxxxx";
+char defaultDirectory[] = "./";
+int kbuild ;
+char * fn;
+static fortint fpindex;
+static FILE * fp;
+static void * result = 0;
+fortint kret = 0;
+
+int exist = 0;
+int status;
+pid_t process_id;
+int ktrunc = (int) (*iktrunc);
+
+/*
+//  Setup the filename: cf_txxxx_raabbbbb
+*/
+
+/*
+//  Setup the file name
+*/
+  sprintf( ypfn+4, "%04d", ktrunc);
+  kbuild = (int) (((*platinc)*100000.0) + 0.5);
+  sprintf( ypfn+8, "_R%07d", kbuild);
+
+/*
+//  See if the  file has already been created.
+*/
+  fn = getenv("PPDIR");
+  if(fn == NULL) fn = defaultDirectory;
+
+  if( (fn != NULL) && (strlen(fn) != 0) ) {
+    strcpy( filename, fn );
+    strcat( filename, "/");
+    strcat( filename, ypfn);
+    l1 = strlen(filename);
+    l2 = 1;
+  }
+  /* printf("ll share_file filename=%s\n",filename); */
+
+  result = (void *) share_file(filename);
+  if (result == NULL) kret = 1;
+
+  *ipdum = (JPointer) result;
+
+  return kret;
+}
diff --git a/interpolation/sharedmemory.h b/interpolation/sharedmemory.h
new file mode 100755
index 0000000..d1180d4
--- /dev/null
+++ b/interpolation/sharedmemory.h
@@ -0,0 +1,42 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef SHAREDMEMORY_H
+#define SHAREDMEMORY_H
+
+#define SP2LL 0
+#define SP2RG 1
+#define SP2QG 2
+#define READY_TO_READ 5
+#define SLEEP_TIME 3
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define SMREAD smread
+#define NMAKLL nmakll
+#define NMAKGG nmakgg
+#define JGETGG jgetgg
+#define JNUMGG jnumgg
+#define JDEBUG jdebug
+#else
+#define SMREAD smread_
+#define NMAKLL nmakll_
+#define NMAKGG nmakgg_
+#define JGETGG jgetgg_
+#define JNUMGG jnumgg_
+#define JDEBUG jdebug_
+#endif
+
+/*
+// Debug flags.
+*/
+#define DEBUGOFF 1
+#define DEBUG (debugSet > DEBUGOFF ) 
+
+#endif /* end of SHAREDMEMORY_H */
diff --git a/interpolation/showmap.c b/interpolation/showmap.c
new file mode 100755
index 0000000..a75d937
--- /dev/null
+++ b/interpolation/showmap.c
@@ -0,0 +1,53 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+
+#include "bitmap.h"
+
+void SHOWMAP(
+  char ** mybuffer,
+  int * rowCount,
+  int * columnCount) {
+/*
+// Displays the bits in a bitmap.
+//
+// Called from FORTRAN:
+//
+// CALL SHOWMAP(BITMAP,ROWCNT,COLCNT)
+//
+// where:
+//
+// BITMAP is an array containing the bitmap.
+// ROWCNT is the number of rows
+// COLCNT is the number of columns
+//
+*/
+int value, i, j, bitNumber, byte, bit;
+int rowTotal = *rowCount;
+int columnTotal = *columnCount;
+char * buffer;
+
+  buffer = *mybuffer;
+
+  for( i = 0; i < rowTotal; i++ ) {
+    printf("\n");
+    for( j = 0; j < columnTotal; j++ ) {
+      bitNumber = i*columnTotal + j;
+      byte = bitNumber / 8;
+      bit  = bitNumber % 8;
+      value = (buffer[byte] >> (7-bit)) & 0x01;
+      printf("%d ", value);
+    }
+  }
+  printf("\n");
+
+}
diff --git a/interpolation/smread.c b/interpolation/smread.c
new file mode 100755
index 0000000..8edf8b8
--- /dev/null
+++ b/interpolation/smread.c
@@ -0,0 +1,225 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/sem.h>
+#include "sharedmemory.h"
+#include "fortdefs.h"
+
+int sharedMemoryCharacteristics( int, int , float , int * , size_t * , key_t * );
+void createSharedMemoryCoefficients( fortint , fortint , fortreal , fortint , key_t , size_t );
+
+int debugSet = 0;
+static char * debugLevel;
+ 
+fortint SMREAD(
+  fortreal ** fortranArrayPointer,  /* to be attached to shared memory */
+  fortint * Type,                   /* SP2LL, SP2QG, .. */
+  fortint * Truncation,             /* spectral truncation */
+  fortreal * Grid)                  /* grid spacing or gaussian number */
+/*
+// Callable from Fortran.
+//
+*/
+/*
+C
+C---->
+C**** SMREAD
+C
+C     Purpose
+C     -------
+C
+C     This routine gets interpolation coefficients in a shared memory array.
+C
+C
+C     Interface
+C     ---------
+C
+C     ISIZE = SMREAD(KARRAY,KTYPE,KTRUNC,GRID)
+C
+C
+C     Input parameters
+C     ----------------
+C
+C     KTYPE  - Type of spectral to grid transformation (SP2LL, SP2QG, ..)
+C     KTRUNC - Spectral truncation (eg 511 for T511)
+C     GRID   - longitude grid spacing (for lat/long) or gaussian number
+C
+C
+C     Output parameters
+C     -----------------
+C
+C     KARRAY - Pointer to a shared memory array of REALs
+C
+C     Function returns the size (in values) of the shared memory array
+C
+C
+C     Common block usage
+C     ------------------
+C
+C     None.
+C
+C
+C     Method
+C     ------
+C
+C     Looks for coefficients in shared memory.
+C     Waits on semaphore for coefficients to become available.
+C
+C
+C     Externals
+C     ---------
+C
+C     sharedMemoryCharacteristics    - to get key and size for shared memory
+C     createSharedMemoryCoefficients - creates coefficients if necessary
+C
+C
+C     Reference
+C     ---------
+C
+C     None.
+C
+C
+C     Comments
+C     --------
+C
+C     Environment variable SHARED_DEBUG can be set (1, 2, ..) to give
+C     diagnostic printout.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers      ECMWF      January 2002
+C
+C
+C     Modifications
+C     -------------
+C
+C     None.
+C
+C----<
+C     
+*/
+{
+int type = (int) *Type;
+int truncation = (int) *Truncation;
+float grid = (float) *Grid;
+key_t memoryKey;
+size_t size;
+int shmflg, shmid;
+char * shmaddr;
+int status, i;
+fortint numberOfValues = 0;
+char mode[] = "00666";
+int value, semaphoreId, numlat, returnCode;
+union semun {
+  int             val;
+  struct semid_ds *buf;
+  ushort          *array;
+} semvalues;
+fortint Numlat;
+struct sembuf bufs[1];
+
+/*
+// See if DEBUG switched on.
+*/
+    if( ! debugSet ) { 
+      debugLevel = getenv("SHARED_DEBUG");
+      if( debugLevel == NULL )
+        debugSet = DEBUGOFF;              /* off */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(debugLevel) ; loop++ ) {
+          if( ! isdigit(debugLevel[loop]) ) {
+            printf("Invalid number string in SHARED_DEBUG: %s\n", debugLevel);
+            printf("SHARED_DEBUG must comprise only digits [0-9].\n");
+            debugSet = DEBUGOFF;
+          }
+        }
+        debugSet = DEBUGOFF + atoi( debugLevel );
+      }
+      if( DEBUG ) printf("SHARED_DEBUG: debug switched on\n");
+    }
+/*
+// Get key and size for shared memory (whole globe)
+*/
+    if( DEBUG ) {
+      printf("SMREAD: type = %d\n",type);
+      printf("SMREAD: truncation = %d\n",truncation);
+      printf("SMREAD: grid = %f\n",grid);
+    }
+    status = sharedMemoryCharacteristics( type,
+                                          truncation,
+                                          grid,
+                                          &numlat,
+                                          &size,
+                                          &memoryKey);
+    if( status ) {
+      if( DEBUG ) printf("SMREAD: sharedMemoryCharacteristics call failed\n");
+      return (fortint) 0;
+    }
+    Numlat = numlat;
+/*
+// Wait for the shared memory array to become available
+*/
+    if( DEBUG ) printf("SMREAD: call createSharedMemoryCoefficients with numlat = %d\n", numlat);
+    createSharedMemoryCoefficients(*Type,*Truncation,*Grid,Numlat,memoryKey,size);
+
+    bufs[0].sem_num = 0;
+    bufs[0].sem_op  = -READY_TO_READ;
+    bufs[0].sem_flg = 0;
+
+    semaphoreId = (int) memoryKey;
+    if( DEBUG )
+      printf("SMREAD: wait for shared memory semaphore id %0x\n", semaphoreId);
+    status = semop(semaphoreId,bufs,1);
+/*
+// Locate shared segment
+*/
+    if( DEBUG ) printf("SMREAD: locate shared memory\n");
+    shmflg = 0666;
+    shmid = shmget( memoryKey, (size_t)size, shmflg);
+    if ( shmid < 0 ) {
+       perror("shmget error");
+       return (fortint) 0;
+    }
+/*
+// Attach the shared segment to the array pointer
+*/
+    if( DEBUG ) printf("SMREAD: attach shared memory to array\n");
+    shmaddr = (char *) NULL;
+    shmflg = 0;
+    *fortranArrayPointer = (fortreal *) shmat( shmid, shmaddr, shmflg);
+    if ( *fortranArrayPointer == (fortreal *) -1 ) {
+       perror("shmat error");
+       return (fortint) 0;
+    }
+/*
+// Set semaphore value to make memory readable for other readers
+*/
+    if( DEBUG ) printf("SMREAD: set semaphore to make memory readable\n");
+    semvalues.val = READY_TO_READ;
+    value = semctl((int)semaphoreId, (int)0, (int)SETVAL,semvalues);
+/*
+// Return the size (in values) of the shared segment
+*/
+    numberOfValues = (fortint) size/sizeof(fortreal);
+    if( DEBUG )
+      printf("SMREAD: number of values in shared memory = %d\n", numberOfValues);
+
+    return numberOfValues;
+}
diff --git a/interpolation/soffset.c b/interpolation/soffset.c
new file mode 100755
index 0000000..99c6d5a
--- /dev/null
+++ b/interpolation/soffset.c
@@ -0,0 +1,202 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "fortint.h"
+
+
+/* defines for FORTRAN subroutine */
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define SOFFSET soffset
+#else
+#define SOFFSET soffset_
+#endif
+#endif
+
+#define ERROR(a,b) {perror(a);return b;}
+#define GRIB 0x47524942
+#define len3oct(p) ((((long)*(p))<<16) + (((long)*(p+1))<<8) + (long)*(p+2))
+#define BIT1 0x80
+#define BIT2 0x40
+#define BIT3 0x20
+#define BIT4 0x10
+#define BIT5 0x08
+#define BIT6 0x04
+#define BIT7 0x02
+#define BIT8 0x01
+
+static int grab(unsigned char * , unsigned char * , long ,long ,long * );
+
+fortint soffset_(
+  unsigned char * buffer,
+  fortint* is0,
+  fortint* is1,
+  fortint* is2,
+  fortint* is3,
+  fortint* is4,
+  fortint* iedition) {
+long s0, s1, s2, s3, s4, edition;
+int large = 0;
+int found = 0;
+int code = 0;
+long bytes_read = 0, advance;
+unsigned char p, edit_num, flag23;
+unsigned char size[3];
+int section0 = 8, section1, section2, section3, section4;
+long total;
+unsigned char grp_7777[5];
+
+/*  Read bytes until "GRIB" found */
+
+    do
+    {
+        if( grab(buffer, &p, 1, 1, &bytes_read) != 0) return 1;
+        code = ( (code << 8) + p ) & 0xFFFFFFFF;
+        if (code == GRIB ) found = 1;
+    } while ( ! found );
+    s0 = bytes_read - 4;
+    bytes_read = 4;
+
+/*  Now find out which edition of GRIB is present (default is 1) */
+
+    edition = 1;
+    s1 = s0 + 8;
+    if( (*(buffer+21-s0) == '\0') && (*(buffer+22-s0) == '\0') )
+    {
+        edition = -1;                            /* GRIB edition -1 */
+        s1 = s0;
+        section1 = 20;
+        section0 = 4;
+    }
+    else
+    {
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+        total = len3oct(size);
+        if( total == 24 )
+        {
+/*          Move past the edition number */
+            if( grab(buffer, &edit_num, 1, 1, &bytes_read) != 0) return 1;
+            edition = 0;                         /* GRIB edition 0 */
+            section1 = 24;
+            s1 = s0 + 4;
+            section0 = 4;
+        }
+    }
+
+    if( edition == 1 )
+    {
+/*      See if it is an extra large (wave) product */
+        if( total > 0x800000 ) {
+            total = (total&0x7fffff) * 120;
+            large = 1;
+        }
+/*      Move past the edition number */
+        if( grab(buffer, &edit_num, 1, 1, &bytes_read) != 0) return 1;
+
+/*      Read length of section 1 */
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+        section1 = len3oct(size);
+    }
+
+/*  Now figure out if sections 2/3 are present */
+
+    advance = 4;
+    bytes_read += advance;
+    if( grab(buffer, &flag23, 1, 1, &bytes_read) != 0) return 1;
+    section2 = flag23 & BIT1;
+    section3 = flag23 & BIT2;
+
+/*  Advance to end of section 1 */
+
+    advance = section1 - (bytes_read - section0);
+    bytes_read += advance;
+
+/*  Read section 2 length if it is given*/
+
+    if( section2 )
+    {
+        s2 = s0 + bytes_read;
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+        section2 = len3oct(size);
+        advance = section2 - (bytes_read - section0 - section1);
+        bytes_read += advance;
+    }
+    else
+    {
+        section2 = 0;
+	s2 = 0;
+    }
+
+/*  Read section 3 length if it is given*/
+
+    if( section3 )
+    {
+        s3 = s0 + bytes_read;
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+        section3 = len3oct(size);
+        advance = section3 - (bytes_read - section0 - section1 - section2);
+        bytes_read += advance;
+    }
+    else
+    {
+        section3 = 0;
+	s3 = 0;
+    }
+
+/*  Read section 4 length */
+
+    s4 = s0 + bytes_read;
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+    section4 = len3oct(size);
+    if( large ) section4 = total + 3 - bytes_read - section4; 
+    advance = section4 - (bytes_read - section0 - section1 - section2 - section3);
+    bytes_read += advance;
+
+/*  Check 7777 group is in the expected place */
+
+    if( grab(buffer, grp_7777, 4, 1, &bytes_read) != 0) return 1;
+    grp_7777[4] = '\0';
+    if( strcmp((char *)grp_7777,"7777") != 0 )
+      ERROR("7777 group not found", 15);
+  
+
+/*  Success! */
+    *is0 = (fortint) s0;
+    *is1 = (fortint) s1;
+    *is2 = (fortint) s2;
+    *is3 = (fortint) s3;
+    *is4 = (fortint) s4;
+    *iedition = (fortint) edition;
+    return 0;
+}
+
+fortint soffset(
+  unsigned char * buffer,
+  fortint* is0,
+  fortint* is1,
+  fortint* is2,
+  fortint* is3,
+  fortint* is4,
+  fortint* iedition) {
+  return soffset_(buffer,is0,is1,is2,is3,is4,iedition);
+}
+
+static int grab(unsigned char * buffer, unsigned char * where, long size,long cnt,long * num_bytes_read)
+{
+long number = size*cnt;
+
+    memcpy(where, (buffer+(*num_bytes_read)), number);
+    *num_bytes_read += number;
+
+    return 0;
+}
diff --git a/interpolation/sources.CRAY b/interpolation/sources.CRAY
new file mode 100755
index 0000000..ce02f10
--- /dev/null
+++ b/interpolation/sources.CRAY
@@ -0,0 +1,276 @@
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fixarea.F \
+   freecf.F  \
+   zprec.F   \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F   \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F  \
+   jmakll.F  \
+   jmakll3.F  \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F  \
+   jopnll.F  \
+   jopnllf.F  \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   mkbitmp.F \
+   makerl.F  \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F  \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+#
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jindex.c    \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.FUJITSU b/interpolation/sources.FUJITSU
new file mode 100755
index 0000000..6dfacef
--- /dev/null
+++ b/interpolation/sources.FUJITSU
@@ -0,0 +1,283 @@
+HEADERS = \
+   current.h \
+   debug.h   \
+   grdynam.h \
+   grfixed.h \
+   grspace.h \
+   intf.h    \
+   intlog.h  \
+   jparams.h \
+   memreq.h  \
+   ouspace.h \
+   parim.h
+
+VECTOR.F =   \
+   intfau.F  \
+   jacobif.F \
+   jagggp.F  \
+   jallgp.F  \
+   jsgggp.F  \
+   jsllgp.F  \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   jwindll.F \
+   rpassm.F  \
+   sscal.F
+
+NO_OPT.F = dummy2.F
+
+
+SOURCES.F = \
+   areachk.F  \
+   estima.F  \
+   chkout.F  \
+   auresol.F  \
+   chequal.F  \
+   chkprec.F \
+   clear_c.F  \
+   csum.F     \
+   ddstyle.F  \
+   dssarea.F  \
+   eulavgg.F  \
+   fft99.F    \
+   fixarea.F  \
+   freecf.F   \
+   funcs.F    \
+   gb2gb.F    \
+   getconf.F  \
+   ggintrp.F  \
+   ggrotat.F  \
+   ggvalue.F  \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F   \
+   iagcntl.F  \
+   iaidef.F   \
+   iainit.F   \
+   iaintgg.F  \
+   iaintll.F  \
+   iaogdef.F  \
+   iaoldef.F  \
+   iarcntl.F  \
+   iareset.F  \
+   iarmem.F   \
+   ibasini.F  \
+   igalloc.F  \
+   igbess.F   \
+   igdins.F   \
+   igdiwe.F   \
+   igglat.F   \
+   iggmem.F   \
+   iggrid.F   \
+   igint.F    \
+   igintr.F   \
+   iglgrid.F  \
+   iglrev.F   \
+   iglsize.F  \
+   iglsm01.F  \
+   iglsmb.F   \
+   iglsmd.F   \
+   iglsmr.F   \
+   iglsmst.F  \
+   ignorm.F   \
+   igplsm.F   \
+   igpoleg.F  \
+   igpolew.F  \
+   igprec.F   \
+   igscan.F   \
+   igsetup.F  \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F   \
+   igtog.F    \
+   igtogr.F   \
+   igtran.F   \
+   init_cm.F  \
+   insane.F   \
+   intf.F     \
+   intfa.F    \
+   intfap.F   \
+   intfb.F    \
+   intfbp.F   \
+   intfbu.F   \
+   intfc.F    \
+   intin.F    \
+   intisl.F   \
+   intlog.F   \
+   intlogd.F  \
+   intlogr.F  \
+   intocn.F   \
+   intocnu.F   \
+   intout.F   \
+   intpnum.F  \
+   intuvdh.F  \
+   intuvf.F   \
+   intuvgh.F  \
+   intuvp.F   \
+   intuvph.F  \
+   intuvs.F   \
+   intuvu.F   \
+   intuvy.F   \
+   intuvxh.F  \
+   intvect.F \
+   intvecy.F \
+   intwave.F  \
+   intwave2.F  \
+   intwavu.F  \
+   irdiwe.F   \
+   irgmem.F   \
+   irgrid.F   \
+   irgtog.F   \
+   irint.F    \
+   irintr.F   \
+   irlrev.F   \
+   irlsmb.F   \
+   irprec.F   \
+   irscan.F   \
+   irsize.F   \
+   iscrsz.F   \
+   islproc.F  \
+   issame.F   \
+   jallwn.F   \
+   jdebug.F   \
+   jfindfn.F  \
+   jfindfn3.F \
+   jfindir.F  \
+   jgetgg.F   \
+   jgglat.F   \
+   jintend.F  \
+   jintgg.F   \
+   jintll.F   \
+   jjset99.F  \
+   jmakgg.F   \
+   jmakgg3.F  \
+   jmakll.F   \
+   jmakll3.F  \
+   jmemhan.F  \
+   jmemhan2.F \
+   jmkofgg.F  \
+   jmovgg.F   \
+   jmovll.F   \
+   jmvugg.F   \
+   jmvull.F   \
+   jnorsgg.F  \
+   jnumgg.F   \
+   jnumggq.F  \
+   jopngg.F   \
+   jopnggf.F  \
+   jopnll.F   \
+   jopnllf.F  \
+   jreadgg.F  \
+   jreadll.F  \
+   jsh2sh.F   \
+   jspleg1.F  \
+   jsppole.F  \
+   juvpole.F \
+   jvod2uv.F  \
+   jwscal.F   \
+   kintrg.F   \
+   knfrom4.F  \
+   krg2rg.F   \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F   \
+   ll2xyz.F   \
+   lrekam.F   \
+   lsmfld.F  \
+   lsm_red.F  \
+   makerl.F   \
+   mkbitmp.F  \
+   mkframe.F  \
+   newisl.F   \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F   \
+   nmakll.F   \
+   nptwe32.F  \
+   numptns.F  \
+   numptwe.F  \
+   oceanp.F   \
+   oceanu.F  \
+   pddefs.F   \
+   ppallow.F  \
+   precip.F   \
+   qpassm.F   \
+   reset_c.F  \
+   rphi.F     \
+   set99.F    \
+   sprotat.F  \
+   strlat.F   \
+   tatorgg.F  \
+   zprec.F    \
+   w251idx.F  \
+   waveidx.F  \
+   wavexxx.F  \
+   wavexx2.F  \
+   wv2di32.F  \
+   wv2didx.F  \
+   wv2dint.F  \
+   wv2dppp.F  \
+   wv2dx32.F  \
+   wv2dxxx.F  \
+   wv2dxx2.F  \
+   wvqlidx.F  \
+   wvqlint.F  \
+   wvqlin2.F  \
+   xrotate.F  \
+   xyz2ll.F   \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.VPP5000 b/interpolation/sources.VPP5000
new file mode 100755
index 0000000..417cc00
--- /dev/null
+++ b/interpolation/sources.VPP5000
@@ -0,0 +1,283 @@
+HEADERS= \
+  current.h \
+  debug.h \
+  grdynam.h \
+  grfixed.h \
+  grspace.h \
+  intf.h \
+  intlog.h \
+  jparams.h \
+  memreq.h \
+  ouspace.h \
+  parim.h
+
+VECTOR.F= \
+  intfau.F \
+  jacobif.F \
+  jagggp.F \
+  jallgp.F \
+  jsgggp.F \
+  jsllgp.F \
+  jstrll.F \
+  jstrwll.F \
+  jsymgg.F \
+  jsymll.F \
+  jwindll.F \
+  rpassm.F \
+  sscal.F
+
+NO_OPT.F=dummy2.F
+
+
+SOURCES.F= \
+  areachk.F \
+   estima.F  \
+   chkout.F  \
+  auresol.F \
+  chequal.F \
+  chkprec.F \
+  clear_c.F \
+  csum.F \
+  ddstyle.F \
+  dssarea.F \
+  eulavgg.F \
+  fft99.F \
+  fixarea.F \
+  freecf.F \
+  funcs.F \
+  gb2gb.F \
+  getconf.F \
+  ggintrp.F \
+  ggrotat.F \
+  ggvalue.F \
+  hgengg.F \
+  hgengrd.F \
+  hgengrw.F \
+  hgenll.F \
+  hgenllw.F \
+  hgetlsm.F \
+  hirlam.F \
+  hirlamw.F \
+  hirlsm.F \
+  hll2ll.F \
+  hll2llw.F \
+  hll2xyz.F \
+  hnei12.F \
+  hneill.F \
+  hntfap.F \
+  hntfaph.F \
+  hntfaps.F \
+  hntfau.F \
+  hntfauh.F \
+  hntfaus.F \
+  hntfbu.F \
+  hpshgpw.F \
+  hrg2gg.F \
+  hrg2ggw.F \
+  hrg2ll.F \
+  hrg2llw.F \
+  hsp2gg.F \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+  hwts12.F \
+  hwtsll.F \
+  hwtslsm.F \
+  iafree.F \
+  iagcntl.F \
+  iaidef.F \
+  iainit.F \
+  iaintgg.F \
+  iaintll.F \
+  iaogdef.F \
+  iaoldef.F \
+  iarcntl.F \
+  iareset.F \
+  iarmem.F \
+  ibasini.F \
+  igalloc.F \
+  igbess.F \
+  igdins.F \
+  igdiwe.F \
+  igglat.F \
+  iggmem.F \
+  iggrid.F \
+  igint.F \
+  igintr.F \
+  iglgrid.F \
+  iglrev.F \
+  iglsize.F \
+  iglsm01.F \
+  iglsmb.F \
+  iglsmd.F \
+  iglsmr.F \
+  iglsmst.F \
+  ignorm.F \
+  igplsm.F \
+  igpoleg.F \
+  igpolew.F \
+  igprec.F \
+  igscan.F \
+  igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+  igsize.F \
+  igtog.F \
+  igtogr.F \
+  igtran.F \
+  init_cm.F \
+  insane.F \
+  intf.F \
+  intfa.F \
+  intfap.F \
+  intfb.F \
+  intfbp.F \
+  intfbu.F \
+  intfc.F \
+  intin.F \
+  intisl.F \
+  intlog.F \
+  intlogd.F \
+  intlogr.F \
+  intocn.F \
+  intocnu.F \
+  intout.F \
+  intpnum.F \
+  intuvdh.F \
+  intuvf.F \
+  intuvgh.F \
+  intuvp.F \
+  intuvph.F \
+  intuvs.F \
+  intuvu.F \
+   intuvy.F   \
+  intuvxh.F \
+   intvect.F \
+   intvecy.F \
+  intwave.F \
+  intwave2.F \
+   intwavu.F  \
+  irdiwe.F \
+  irgmem.F \
+  irgrid.F \
+  irgtog.F \
+  irint.F \
+  irintr.F \
+  irlrev.F \
+  irlsmb.F \
+  irprec.F \
+  irscan.F \
+  irsize.F \
+  iscrsz.F \
+  islproc.F \
+  issame.F \
+  jallwn.F \
+  jdebug.F \
+  jfindfn.F \
+  jfindfn3.F \
+  jfindir.F \
+  jgetgg.F \
+  jgglat.F \
+  jintend.F \
+  jintgg.F \
+  jintll.F \
+  jjset99.F \
+  jmakgg.F \
+  jmakgg3.F \
+  jmakll.F \
+  jmakll3.F \
+  jmemhan.F \
+   jmemhan2.F \
+  jmkofgg.F \
+  jmovgg.F \
+  jmovll.F \
+  jmvugg.F \
+  jmvull.F \
+  jnorsgg.F \
+  jnumgg.F \
+  jnumggq.F \
+  jopngg.F \
+  jopnggf.F \
+  jopnll.F \
+  jopnllf.F \
+  jreadgg.F \
+  jreadll.F \
+  jsh2sh.F \
+  jspleg1.F \
+  jsppole.F \
+  juvpole.F \
+  jvod2uv.F \
+  jwscal.F \
+  kintrg.F \
+  knfrom4.F \
+  krg2rg.F \
+  krg2rgu.F  \
+  krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+  lgrpr4.F \
+  ll2xyz.F \
+  lrekam.F \
+  lsmfld.F \
+  lsm_red.F \
+  makerl.F \
+  mkbitmp.F \
+  mkframe.F \
+  newisl.F \
+  ngintrp.F \
+  ngrotat.F \
+  ngvalue.F \
+  nmakgg.F \
+  nmakll.F \
+  nptwe32.F \
+  numptns.F \
+  numptwe.F \
+  oceanp.F \
+   oceanu.F  \
+  pddefs.F \
+  ppallow.F \
+  precip.F \
+  qpassm.F \
+  reset_c.F \
+  rphi.F \
+  set99.F \
+  sprotat.F \
+  strlat.F \
+  tatorgg.F \
+  zprec.F   \
+  w251idx.F \
+  waveidx.F \
+  wavexxx.F \
+  wavexx2.F \
+  wv2di32.F \
+  wv2didx.F \
+  wv2dint.F \
+  wv2dppp.F \
+  wv2dx32.F \
+  wv2dxxx.F \
+  wv2dxx2.F \
+  wvqlidx.F \
+  wvqlint.F \
+  wvqlin2.F \
+  xrotate.F \
+  xyz2ll.F \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+  yrotate.F
+
+SOURCES.c= \
+  emosPrecision.c \
+  fftchk.c \
+  gmapbit.c \
+  intlogs.c \
+  jchmod.c \
+  jindex.c \
+  jopnggsm.c \
+  jopnllsm.c \
+  jtimer.c \
+  makemap.c \
+  my_ialloc.c \
+  rddefs.c \
+  showmap.c \
+  soffset.c
diff --git a/interpolation/sources.decalpha b/interpolation/sources.decalpha
new file mode 100755
index 0000000..68e7512
--- /dev/null
+++ b/interpolation/sources.decalpha
@@ -0,0 +1,280 @@
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F  \
+   estima.F  \
+   chkout.F  \
+   auresol.F  \
+   chequal.F  \
+   chkprec.F \
+   clear_c.F  \
+   csum.F     \
+   ddstyle.F  \
+   dssarea.F  \
+   eulavgg.F  \
+   fft99.F    \
+   fixarea.F  \
+   freecf.F   \
+   funcs.F    \
+   gb2gb.F    \
+   getconf.F  \
+   ggintrp.F  \
+   ggrotat.F  \
+   ggvalue.F  \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F   \
+   iagcntl.F  \
+   iaidef.F   \
+   iainit.F   \
+   iaintgg.F  \
+   iaintll.F  \
+   iaogdef.F  \
+   iaoldef.F  \
+   iarcntl.F  \
+   iareset.F  \
+   iarmem.F   \
+   ibasini.F  \
+   igalloc.F  \
+   igbess.F   \
+   igdins.F   \
+   igdiwe.F   \
+   igglat.F   \
+   iggmem.F   \
+   iggrid.F   \
+   igint.F    \
+   igintr.F   \
+   iglgrid.F  \
+   iglrev.F   \
+   iglsize.F  \
+   iglsm01.F  \
+   iglsmb.F   \
+   iglsmd.F   \
+   iglsmr.F   \
+   iglsmst.F  \
+   ignorm.F   \
+   igplsm.F   \
+   igpoleg.F  \
+   igpolew.F  \
+   igprec.F   \
+   igscan.F   \
+   igsetup.F  \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F   \
+   igtog.F    \
+   igtogr.F   \
+   igtran.F   \
+   init_cm.F  \
+   insane.F   \
+   intf.F     \
+   intfa.F    \
+   intfap.F   \
+   intfau.F   \
+   intfb.F    \
+   intfbp.F   \
+   intfbu.F   \
+   intfc.F    \
+   intin.F    \
+   intisl.F   \
+   intlog.F   \
+   intlogd.F  \
+   intlogr.F  \
+   intocn.F   \
+   intocnu.F  \
+   intout.F   \
+   intpnum.F  \
+   intuvdh.F  \
+   intuvf.F   \
+   intuvgh.F  \
+   intuvp.F   \
+   intuvph.F  \
+   intuvs.F   \
+   intuvu.F   \
+   intuvy.F   \
+   intuvxh.F  \
+   intvect.F \
+   intvecy.F \
+   intwave.F  \
+   intwave2.F  \
+   intwavu.F  \
+   irdiwe.F   \
+   irgmem.F   \
+   irgrid.F   \
+   irgtog.F   \
+   irint.F    \
+   irintr.F   \
+   irlrev.F   \
+   irlsmb.F   \
+   irprec.F   \
+   irscan.F   \
+   irsize.F   \
+   iscrsz.F   \
+   islproc.F  \
+   issame.F   \
+   jacobi.F   \
+   jagggp.F   \
+   jallgp.F   \
+   jallwn.F   \
+   jdebug.F   \
+   jfindfn.F  \
+   jfindfn3.F \
+   jfindir.F  \
+   jgetgg.F   \
+   jgglat.F   \
+   jintend.F  \
+   jintgg.F   \
+   jintll.F   \
+   jjset99.F  \
+   jmakgg.F   \
+   jmakgg3.F  \
+   jmakll.F   \
+   jmakll3.F  \
+   jmemhan.F  \
+   jmemhan2.F \
+   jmkofgg.F  \
+   jmovgg.F   \
+   jmovll.F   \
+   jmvugg.F   \
+   jmvull.F   \
+   jnorsgg.F  \
+   jnumgg.F   \
+   jnumggq.F  \
+   jopngg.F   \
+   jopnggf.F  \
+   jopnll.F   \
+   jopnllf.F  \
+   jreadgg.F  \
+   jreadll.F  \
+   jsgggp.F   \
+   jsh2sh.F   \
+   jsllgp.F   \
+   jspleg1.F  \
+   jsppole.F  \
+   jstrll.F   \
+   jstrwll.F  \
+   jsymgg.F   \
+   jsymll.F   \
+   juvpole.F \
+   jvod2uv.F  \
+   jwindll.F  \
+   jwscal.F   \
+   kintrg.F   \
+   knfrom4.F  \
+   krg2rg.F   \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F   \
+   ll2xyz.F   \
+   lrekam.F   \
+   lsmfld.F  \
+   lsm_red.F  \
+   makerl.F   \
+   mkbitmp.F  \
+   mkframe.F  \
+   newisl.F   \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F   \
+   nmakll.F   \
+   nptwe32.F  \
+   numptns.F  \
+   numptwe.F  \
+   oceanp.F   \
+   oceanu.F  \
+   pddefs.F   \
+   precip.F   \
+   qpassm.F   \
+   reset_c.F  \
+   rpassm.F   \
+   rphi.F     \
+   set99.F    \
+   sprotat.F  \
+   sscal.F    \
+   strlat.F   \
+   tatorgg.F  \
+   zprec.F    \
+   w251idx.F  \
+   waveidx.F  \
+   wavexxx.F  \
+   wavexx2.F  \
+   wv2di32.F  \
+   wv2didx.F  \
+   wv2dint.F  \
+   wv2dx32.F  \
+   wv2dxxx.F  \
+   wv2dxx2.F  \
+   wvqlidx.F  \
+   wvqlint.F  \
+   wvqlin2.F  \
+   xrotate.F  \
+   xyz2ll.F   \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.decmips b/interpolation/sources.decmips
new file mode 100755
index 0000000..fa7346d
--- /dev/null
+++ b/interpolation/sources.decmips
@@ -0,0 +1,281 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F \
+   hgengrw.F \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F\
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F  \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.hp b/interpolation/sources.hp
new file mode 100755
index 0000000..beccd89
--- /dev/null
+++ b/interpolation/sources.hp
@@ -0,0 +1,281 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = \
+   jjset99.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jmakgg.F  \
+   jmakgg3.F  \
+   jmakll.F  \
+   jmakll3.F  \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F  \
+   jopnll.F  \
+   jopnllf.F  \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.hpia64 b/interpolation/sources.hpia64
new file mode 100755
index 0000000..2f4680c
--- /dev/null
+++ b/interpolation/sources.hpia64
@@ -0,0 +1,284 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = \
+   jjset99.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F  \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jmakgg.F  \
+   jmakgg3.F  \
+   jmakll.F  \
+   jmakll3.F  \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F  \
+   jopnll.F  \
+   jopnllf.F  \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F  \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F  \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   sharedll.c \
+   sharedgg.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   rename_unlink.c \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.hppa b/interpolation/sources.hppa
new file mode 100755
index 0000000..f882a22
--- /dev/null
+++ b/interpolation/sources.hppa
@@ -0,0 +1,281 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = \
+   jjset99.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jmakgg.F  \
+   jmakgg3.F  \
+   jmakll.F  \
+   jmakll3.F  \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F  \
+   jopnll.F  \
+   jopnllf.F  \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F  \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F  \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.ibm_power4 b/interpolation/sources.ibm_power4
new file mode 100755
index 0000000..6f215dd
--- /dev/null
+++ b/interpolation/sources.ibm_power4
@@ -0,0 +1,287 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F =  \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   createSharedMemoryCoefficients.c \
+   sharedll.c \
+   sharedgg.c \
+   sharedlib.c \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   rename_unlink.c \
+   sharedMemoryCharacteristics.c \
+   showmap.c   \
+   smread.c    \
+   soffset.c
diff --git a/interpolation/sources.ibm_power6 b/interpolation/sources.ibm_power6
new file mode 100755
index 0000000..b58e92a
--- /dev/null
+++ b/interpolation/sources.ibm_power6
@@ -0,0 +1,288 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F =  \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   createSharedMemoryCoefficients.c \
+   sharedll.c \
+   sharedgg.c \
+   sharedlib.c \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   rename_unlink.c \
+   sharedMemoryCharacteristics.c \
+   showmap.c   \
+   smread.c    \
+   soffset.c
diff --git a/interpolation/sources.ibm_power7 b/interpolation/sources.ibm_power7
new file mode 100755
index 0000000..b58e92a
--- /dev/null
+++ b/interpolation/sources.ibm_power7
@@ -0,0 +1,288 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F =  \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   createSharedMemoryCoefficients.c \
+   sharedll.c \
+   sharedgg.c \
+   sharedlib.c \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   rename_unlink.c \
+   sharedMemoryCharacteristics.c \
+   showmap.c   \
+   smread.c    \
+   soffset.c
diff --git a/interpolation/sources.itanium b/interpolation/sources.itanium
new file mode 100755
index 0000000..ee91aea
--- /dev/null
+++ b/interpolation/sources.itanium
@@ -0,0 +1,280 @@
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F  \
+   estima.F  \
+   chkout.F  \
+   auresol.F  \
+   chequal.F  \
+   chkprec.F \
+   clear_c.F  \
+   csum.F     \
+   ddstyle.F  \
+   dssarea.F  \
+   eulavgg.F  \
+   fft99.F    \
+   fixarea.F  \
+   freecf.F   \
+   funcs.F    \
+   gb2gb.F    \
+   getconf.F  \
+   ggintrp.F  \
+   ggrotat.F  \
+   ggvalue.F  \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F   \
+   iagcntl.F  \
+   iaidef.F   \
+   iainit.F   \
+   iaintgg.F  \
+   iaintll.F  \
+   iaogdef.F  \
+   iaoldef.F  \
+   iarcntl.F  \
+   iareset.F  \
+   iarmem.F   \
+   ibasini.F  \
+   igalloc.F  \
+   igbess.F   \
+   igdins.F   \
+   igdiwe.F   \
+   igglat.F   \
+   iggmem.F   \
+   iggrid.F   \
+   igint.F    \
+   igintr.F   \
+   iglgrid.F  \
+   iglrev.F   \
+   iglsize.F  \
+   iglsm01.F  \
+   iglsmb.F   \
+   iglsmd.F   \
+   iglsmr.F   \
+   iglsmst.F  \
+   ignorm.F   \
+   igplsm.F   \
+   igpoleg.F  \
+   igpolew.F  \
+   igprec.F   \
+   igscan.F   \
+   igsetup.F  \
+   igsize.F   \
+   igtog.F    \
+   igtogr.F   \
+   igtran.F   \
+   init_cm.F  \
+   insane.F   \
+   intf.F     \
+   intfa.F    \
+   intfap.F   \
+   intfau.F   \
+   intfb.F    \
+   intfbp.F   \
+   intfbu.F   \
+   intfc.F    \
+   intin.F    \
+   intisl.F   \
+   intlog.F   \
+   intlogd.F  \
+   intlogr.F  \
+   intocn.F   \
+   intocnu.F  \
+   intout.F   \
+   intpnum.F  \
+   intuvdh.F  \
+   intuvf.F   \
+   intuvgh.F  \
+   intuvp.F   \
+   intuvph.F  \
+   intuvs.F   \
+   intuvu.F   \
+   intuvy.F   \
+   intuvxh.F  \
+   intvect.F \
+   intvecy.F \
+   intwave.F  \
+   intwave2.F  \
+   intwavu.F  \
+   irdiwe.F   \
+   irgmem.F   \
+   irgrid.F   \
+   irgtog.F   \
+   irint.F    \
+   irintr.F   \
+   irlrev.F   \
+   irlsmb.F   \
+   irprec.F   \
+   irscan.F   \
+   irsize.F   \
+   iscrsz.F   \
+   islproc.F  \
+   issame.F   \
+   jacobi.F   \
+   jagggp.F   \
+   jallgp.F   \
+   jallwn.F   \
+   jdebug.F   \
+   jfindfn.F  \
+   jfindfn3.F \
+   jfindir.F  \
+   jgetgg.F   \
+   jgglat.F   \
+   jintend.F  \
+   jintgg.F   \
+   jintll.F   \
+   jjset99.F  \
+   jmakgg.F   \
+   jmakgg3.F  \
+   jmakll.F   \
+   jmakll3.F  \
+   jmemhan.F  \
+   jmemhan2.F \
+   jmkofgg.F  \
+   jmovgg.F   \
+   jmovll.F   \
+   jmvugg.F   \
+   jmvull.F   \
+   jnorsgg.F  \
+   jnumgg.F   \
+   jnumggq.F  \
+   jopngg.F   \
+   jopnggf.F  \
+   jopnll.F   \
+   jopnllf.F  \
+   jreadgg.F  \
+   jreadll.F  \
+   jsgggp.F   \
+   jsh2sh.F   \
+   jsllgp.F   \
+   jspleg1.F  \
+   jsppole.F  \
+   jsymgg.F   \
+   jstrll.F   \
+   jstrwll.F  \
+   jsymll.F   \
+   juvpole.F \
+   jvod2uv.F  \
+   jwindll.F  \
+   jwscal.F   \
+   kintrg.F   \
+   knfrom4.F  \
+   krg2rg.F   \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F   \
+   ll2xyz.F   \
+   lrekam.F   \
+   lsmfld.F  \
+   lsm_red.F  \
+   makerl.F   \
+   mkbitmp.F  \
+   mkframe.F  \
+   newisl.F   \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F   \
+   nmakll.F   \
+   nptwe32.F  \
+   numptns.F  \
+   numptwe.F  \
+   oceanp.F   \
+   oceanu.F  \
+   pddefs.F   \
+   precip.F   \
+   qpassm.F   \
+   reset_c.F  \
+   rpassm.F   \
+   rphi.F     \
+   set99.F    \
+   sprotat.F  \
+   sscal.F    \
+   strlat.F   \
+   tatorgg.F  \
+   zprec.F    \
+   w251idx.F  \
+   waveidx.F  \
+   wavexxx.F  \
+   wavexx2.F  \
+   wv2di32.F  \
+   wv2didx.F  \
+   wv2dint.F  \
+   wv2dx32.F  \
+   wv2dxxx.F  \
+   wv2dxx2.F  \
+   wvqlidx.F  \
+   wvqlint.F  \
+   wvqlin2.F  \
+   xrotate.F  \
+   xyz2ll.F   \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.linux b/interpolation/sources.linux
new file mode 100755
index 0000000..7eed105
--- /dev/null
+++ b/interpolation/sources.linux
@@ -0,0 +1,283 @@
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F  \
+   estima.F  \
+   chkout.F  \
+   auresol.F  \
+   chequal.F  \
+   chkprec.F \
+   clear_c.F  \
+   csum.F     \
+   ddstyle.F  \
+   dssarea.F  \
+   eulavgg.F  \
+   fft99.F    \
+   fixarea.F  \
+   freecf.F   \
+   funcs.F    \
+   gb2gb.F    \
+   getconf.F  \
+   ggintrp.F  \
+   ggrotat.F  \
+   ggvalue.F  \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F   \
+   iagcntl.F  \
+   iaidef.F   \
+   iainit.F   \
+   iaintgg.F  \
+   iaintll.F  \
+   iaogdef.F  \
+   iaoldef.F  \
+   iarcntl.F  \
+   iareset.F  \
+   iarmem.F   \
+   ibasini.F  \
+   igalloc.F  \
+   igbess.F   \
+   igdins.F   \
+   igdiwe.F   \
+   igglat.F   \
+   iggmem.F   \
+   iggrid.F   \
+   igint.F    \
+   igintr.F   \
+   iglgrid.F  \
+   iglrev.F   \
+   iglsize.F  \
+   iglsm01.F  \
+   iglsmb.F   \
+   iglsmd.F   \
+   iglsmr.F   \
+   iglsmst.F  \
+   ignorm.F   \
+   igplsm.F   \
+   igpoleg.F  \
+   igpolew.F  \
+   igprec.F   \
+   igscan.F   \
+   igsetup.F  \
+   igsize.F   \
+   igtog.F    \
+   igtogr.F   \
+   igtran.F   \
+   init_cm.F  \
+   insane.F   \
+   intf.F     \
+   intfa.F    \
+   intfap.F   \
+   intfau.F   \
+   intfb.F    \
+   intfbp.F   \
+   intfbu.F   \
+   intfc.F    \
+   intin.F    \
+   intisl.F   \
+   intlog.F   \
+   intlogd.F  \
+   intlogr.F  \
+   intocn.F   \
+   intout.F   \
+   intpnum.F  \
+   intuvdh.F  \
+   intuvf.F   \
+   intuvgh.F  \
+   intuvp.F   \
+   intuvph.F  \
+   intuvs.F   \
+   intuvu.F   \
+   intuvy.F   \
+   intuvxh.F  \
+   intvect.F \
+   intvecy.F \
+   intwave.F  \
+   intwave2.F  \
+   intwavu.F  \
+   irdiwe.F   \
+   irgmem.F   \
+   irgrid.F   \
+   irgtog.F   \
+   irint.F    \
+   irintr.F   \
+   irlrev.F   \
+   irlsmb.F   \
+   irprec.F   \
+   irscan.F   \
+   irsize.F   \
+   iscrsz.F   \
+   islproc.F  \
+   issame.F   \
+   jacobi.F   \
+   jagggp.F   \
+   jallgp.F   \
+   jallwn.F   \
+   jdebug.F   \
+   jfindfn.F  \
+   jfindfn3.F \
+   jfindir.F  \
+   jgetgg.F   \
+   jgglat.F   \
+   jintend.F  \
+   jintgg.F   \
+   jintll.F   \
+   jjset99.F  \
+   jmakgg.F   \
+   jmakgg3.F  \
+   jmakll.F   \
+   jmakll3.F  \
+   jmemhan.F  \
+   jmemhan2.F \
+   jmkofgg.F  \
+   jmovgg.F   \
+   jmovll.F   \
+   jmvugg.F   \
+   jmvull.F   \
+   jnorsgg.F  \
+   jnumgg.F   \
+   jnumggq.F  \
+   jopngg.F   \
+   jopnggf.F  \
+   jopnll.F   \
+   jopnllf.F  \
+   jreadgg.F  \
+   jreadll.F  \
+   jsgggp.F   \
+   jsh2sh.F   \
+   jsllgp.F   \
+   jspleg1.F  \
+   jsppole.F  \
+   jsymgg.F   \
+   jstrll.F   \
+   jstrwll.F  \
+   jsymll.F   \
+   juvpole.F \
+   jvod2uv.F  \
+   jwindll.F  \
+   jwscal.F   \
+   kintrg.F   \
+   knfrom4.F  \
+   krg2rg.F   \
+   krg2rgu.F  \
+   krg2rgz.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F   \
+   ll2xyz.F   \
+   lrekam.F   \
+   lsmfld.F  \
+   lsm_red.F  \
+   makerl.F   \
+   mkbitmp.F  \
+   mkframe.F  \
+   newisl.F   \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F   \
+   nmakll.F   \
+   nptwe32.F  \
+   numptns.F  \
+   numptwe.F  \
+   oceanp.F   \
+   oceanu.F   \
+   intocnu.F   \
+   pddefs.F   \
+   precip.F   \
+   qpassm.F   \
+   reset_c.F  \
+   rpassm.F   \
+   rphi.F     \
+   set99.F    \
+   sprotat.F  \
+   sscal.F    \
+   strlat.F   \
+   tatorgg.F  \
+   zprec.F    \
+   w251idx.F  \
+   waveidx.F  \
+   wavexxx.F  \
+   wavexx2.F  \
+   wv2di32.F  \
+   wv2didx.F  \
+   wv2dint.F  \
+   wv2dx32.F  \
+   wv2dxxx.F  \
+   wv2dxx2.F  \
+   wvqlidx.F  \
+   wvqlint.F  \
+   wvqlin2.F  \
+   xrotate.F  \
+   xyz2ll.F   \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   sharedll.c \
+   sharedgg.c \
+   sharedlib.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   itimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.rs6000 b/interpolation/sources.rs6000
new file mode 100755
index 0000000..9d81ecb
--- /dev/null
+++ b/interpolation/sources.rs6000
@@ -0,0 +1,288 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F =  \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   krg2rgz.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   createSharedMemoryCoefficients.c \
+   sharedll.c \
+   sharedgg.c \
+   sharedlib.c \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   rename_unlink.c \
+   sharedMemoryCharacteristics.c \
+   showmap.c   \
+   smread.c    \
+   soffset.c
diff --git a/interpolation/sources.sgimips b/interpolation/sources.sgimips
new file mode 100755
index 0000000..8b96e39
--- /dev/null
+++ b/interpolation/sources.sgimips
@@ -0,0 +1,280 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgu.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F    \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sources.sun4 b/interpolation/sources.sun4
new file mode 100755
index 0000000..40b39c0
--- /dev/null
+++ b/interpolation/sources.sun4
@@ -0,0 +1,281 @@
+
+HEADERS = \
+   current.h \
+   debug.h   \
+   grfixed.h \
+   intf.h    \
+   jparams.h \
+   ouspace.h \
+   grdynam.h \
+   grspace.h \
+   intlog.h  \
+   memreq.h  \
+   parim.h
+
+VECTOR.F = dummy.F
+
+NO_OPT.F = dummy2.F
+
+SOURCES.F = \
+   areachk.F \
+   estima.F  \
+   chkout.F  \
+   auresol.F \
+   chequal.F \
+   chkprec.F \
+   clear_c.F \
+   csum.F    \
+   ddstyle.F \
+   dssarea.F \
+   eulavgg.F \
+   fft99.F   \
+   fixarea.F \
+   freecf.F  \
+   funcs.F   \
+   gb2gb.F   \
+   getconf.F \
+   ggintrp.F \
+   ggrotat.F \
+   ggvalue.F \
+   hgengg.F  \
+   hgengrd.F  \
+   hgengrw.F  \
+   hgenll.F  \
+   hgenllw.F \
+   hgetlsm.F \
+   hirlam.F  \
+   hirlamw.F \
+   hirlsm.F  \
+   hll2ll.F  \
+   hll2llw.F \
+   hll2xyz.F \
+   hnei12.F  \
+   hneill.F  \
+   hntfap.F  \
+   hntfaph.F \
+   hntfaps.F \
+   hntfau.F  \
+   hntfauh.F \
+   hntfaus.F \
+   hntfbu.F  \
+   hpshgpw.F \
+   hrg2gg.F  \
+   hrg2ggw.F \
+   hrg2ll.F  \
+   hrg2llw.F \
+   hsp2gg.F  \
+   hsp2gg2.F  \
+   hsp2gg3.F  \
+   hwts12.F  \
+   hwtsll.F  \
+   hwtslsm.F \
+   iafree.F  \
+   iagcntl.F \
+   iaidef.F  \
+   iainit.F  \
+   iaintgg.F \
+   iaintll.F \
+   iaogdef.F \
+   iaoldef.F \
+   iarcntl.F \
+   iareset.F \
+   iarmem.F  \
+   ibasini.F \
+   igalloc.F \
+   igbess.F  \
+   igdins.F  \
+   igdiwe.F  \
+   igglat.F  \
+   iggmem.F  \
+   iggrid.F  \
+   igint.F   \
+   igintr.F  \
+   iglgrid.F \
+   iglrev.F  \
+   iglsize.F \
+   iglsm01.F \
+   iglsmb.F  \
+   iglsmd.F  \
+   iglsmr.F  \
+   iglsmst.F \
+   ignorm.F  \
+   igplsm.F  \
+   igpoleg.F \
+   igpolew.F \
+   igprec.F  \
+   igscan.F  \
+   igsetup.F \
+   gasetup.F  \
+   outrep.F   \
+   gettru.F   \
+   igsize.F  \
+   igtog.F   \
+   igtogr.F  \
+   igtran.F  \
+   init_cm.F \
+   insane.F  \
+   intf.F    \
+   intfa.F   \
+   intfap.F  \
+   intfau.F  \
+   intfb.F   \
+   intfbp.F  \
+   intfbu.F  \
+   intfc.F   \
+   intin.F   \
+   intisl.F  \
+   intlog.F  \
+   intlogd.F \
+   intlogr.F \
+   intocn.F  \
+   intocnu.F  \
+   intout.F  \
+   intpnum.F \
+   intuvdh.F \
+   intuvf.F  \
+   intuvgh.F \
+   intuvp.F  \
+   intuvph.F \
+   intuvs.F  \
+   intuvu.F  \
+   intuvy.F   \
+   intuvxh.F \
+   intvect.F \
+   intvecy.F \
+   intwave.F \
+   intwave2.F \
+   intwavu.F  \
+   irdiwe.F  \
+   irgmem.F  \
+   irgrid.F  \
+   irgtog.F  \
+   irint.F   \
+   irintr.F  \
+   irlrev.F  \
+   irlsmb.F  \
+   irprec.F  \
+   irscan.F  \
+   irsize.F  \
+   iscrsz.F  \
+   islproc.F \
+   issame.F  \
+   jacobi.F  \
+   jagggp.F  \
+   jallgp.F  \
+   jallwn.F  \
+   jdebug.F  \
+   jfindfn.F \
+   jfindfn3.F \
+   jfindir.F \
+   jgetgg.F  \
+   jgglat.F  \
+   jintend.F \
+   jintgg.F  \
+   jintll.F  \
+   jjset99.F \
+   jmakgg.F  \
+   jmakgg3.F \
+   jmakll.F  \
+   jmakll3.F \
+   jmemhan.F \
+   jmemhan2.F \
+   jmkofgg.F \
+   jmovgg.F  \
+   jmovll.F  \
+   jmvugg.F  \
+   jmvull.F  \
+   jnorsgg.F \
+   jnumgg.F  \
+   jnumggq.F \
+   jopngg.F  \
+   jopnggf.F \
+   jopnll.F  \
+   jopnllf.F \
+   jreadgg.F \
+   jreadll.F \
+   jsgggp.F  \
+   jsh2sh.F  \
+   jsllgp.F  \
+   jspleg1.F \
+   jsppole.F \
+   jstrll.F  \
+   jstrwll.F \
+   jsymgg.F  \
+   jsymll.F  \
+   juvpole.F \
+   jvod2uv.F \
+   jwindll.F \
+   jwscal.F  \
+   kintrg.F  \
+   knfrom4.F \
+   krg2rg.F  \
+   krg2rgz.F  \
+   krg2rgu.F  \
+   krg2rgd.F  \
+   krg2rgy.F  \
+   lgrpr4.F  \
+   ll2xyz.F  \
+   lrekam.F  \
+   lsmfld.F  \
+   lsm_red.F \
+   makerl.F  \
+   mkbitmp.F \
+   mkframe.F \
+   newisl.F  \
+   ngintrp.F \
+   ngrotat.F \
+   ngvalue.F \
+   nmakgg.F  \
+   nmakll.F  \
+   nptwe32.F \
+   numptns.F \
+   numptwe.F \
+   oceanp.F  \
+   oceanu.F  \
+   pddefs.F  \
+   precip.F   \
+   qpassm.F  \
+   reset_c.F \
+   rpassm.F  \
+   rphi.F    \
+   set99.F   \
+   sprotat.F \
+   sscal.F   \
+   strlat.F  \
+   tatorgg.F \
+   zprec.F   \
+   w251idx.F \
+   waveidx.F \
+   wavexxx.F \
+   wavexx2.F \
+   wv2di32.F \
+   wv2didx.F \
+   wv2dint.F \
+   wv2dx32.F \
+   wv2dxxx.F \
+   wv2dxx2.F \
+   wvqlidx.F \
+   wvqlint.F \
+   wvqlin2.F \
+   xrotate.F \
+   xyz2ll.F  \
+   outrep.F   \
+   setrep.F   \
+   global.F   \
+   yrotate.F
+
+SOURCES.c = \
+   emosPrecision.c \
+   fftchk.c    \
+   gmapbit.c   \
+   intlogs.c   \
+   jchmod.c    \
+   jindex.c    \
+   jopnggsm.c  \
+   jopnllsm.c  \
+   jtimer.c    \
+   makemap.c   \
+   my_ialloc.c \
+   rddefs.c    \
+   showmap.c   \
+   soffset.c
diff --git a/interpolation/sprotat.F b/interpolation/sprotat.F
new file mode 100755
index 0000000..d4e506d
--- /dev/null
+++ b/interpolation/sprotat.F
@@ -0,0 +1,250 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION SPROTAT(INGRIB,INLEN,SLON,SLAT,OUTGRIB,OUTLEN)
+C
+C---->
+C**** SPROTAT
+C
+C     Purpose
+C     -------
+C
+C     Rotates a spherical harmonic field.
+C
+C
+C     Interface
+C     ---------
+C
+C     IRET = SPROTAT(INGRIB,INLEN,SLON,SLAT,OUTGRIB,OUTLEN)
+C
+C     Input
+C     -----
+C
+C     INGRIB  - Input GRIB field of spherical harmonics.
+C     INLEN   - Length in bytes of the input GRIB.
+C     SLON    - Longitude rotation required (degrees)
+C     SLAT    - Latitude rotation required (degrees)
+C
+C
+C     Output
+C     ------
+C
+C     OUTGRIB  - Output GRIB field of rotated spherical harmonics.
+C     OUTLEN   - Length in bytes of the output GRIB.
+C
+C     Function returns 0 if all OK, otherwise the rotation failed.
+C
+C
+C     Method
+C     ------
+C
+C     Externals
+C     ---------
+C
+C     GRIBEX  - Decode/encode a GRIB product.
+C     RPHI    - Rotates spectral coefficients by longitude.
+#ifdef __uxp__
+C     JACOBIF - Rotates spectral coefficients by latitude.
+#else
+C     JACOBI  - Rotates spectral coefficients by latitude.
+#endif
+C     INTLOG  - Logs messages.
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers         ECMWF     October, 1995.
+C
+C
+C---------------------------------------------------------------------
+C----<
+C
+      IMPLICIT NONE
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 28300)
+      INTEGER JPLEN, JPNM
+      PARAMETER ( JPNM = JPSTRUNC )
+      PARAMETER ( JPLEN = (JPNM+1)*(JPNM+2) )
+C
+C     Function arguments.
+      INTEGER INGRIB, INLEN, OUTGRIB, OUTLEN
+      DIMENSION INGRIB(*), OUTGRIB(*)
+      REAL SLON, SLAT
+C
+C     Local variables
+      INTEGER KSEC0, KSEC1, KSEC2, KSEC3, KSEC4, KWORD, KLENP, KLENG
+      DIMENSION KSEC0(2),KSEC1(512),KSEC2(512),KSEC3(2),KSEC4(512)
+      REAL PSEC4, PSEC2, PSEC3
+      DIMENSION PSEC2(512),PSEC3(2),PSEC4(JPLEN)
+      REAL*8 DLON, DLAT
+      REAL*8 WORK
+      DIMENSION WORK(2*(JPNM+1)*(JPNM+6))
+      INTEGER ITRUNC, IRET, NBYTES, LOOP
+      LOGICAL LOK
+      REAL*8 DATA
+      DIMENSION DATA(JPLEN)
+C
+#if (defined CRAY)
+      DATA NBYTES/8/
+#else
+      DATA NBYTES/4/
+#endif
+C
+C     Externals
+#ifdef __uxp__
+      LOGICAL JACOBIF
+      EXTERNAL JACOBIF
+#else
+      LOGICAL JACOBI
+      EXTERNAL JACOBI
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialise.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      SPROTAT = 0
+      IRET    = 0
+#if (defined CRAY) || (defined REAL_8)
+      DLON = SLON
+      DLAT = -90.0 - SLAT
+#else
+      DLON = DBLE(SLON)
+      DLAT = -90.0 - DBLE(SLAT)
+#endif
+C
+C     Decode the field.
+      KLENP = JPLEN
+      KLENG = (INLEN+NBYTES-1)/NBYTES
+      IRET  = 1
+      CALL GRIBEX(KSEC0, KSEC1, KSEC2, PSEC2, KSEC3, PSEC3, KSEC4, 
+     X            PSEC4, KLENP, INGRIB, KLENG, KWORD, 'D' , IRET )
+      IF(IRET.NE.0)THEN
+        CALL INTLOG(JP_FATAL,'SPROTAT: Error decoding GRIB,IRET=', IRET)
+        SPROTAT = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Check that it really is a spherical harmonic field.
+      IF( (KSEC2(1).NE.50) .AND. (KSEC2(1).NE.60) ) THEN
+        CALL INTLOG(JP_FATAL,'SPROTAT: GRIB field not spectral',JPQUIET)
+        CALL INTLOG(JP_FATAL,'SPROTAT: GRIB KSEC2(1) = ', KSEC2(1))
+        SPROTAT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      ITRUNC = KSEC2(2)
+C
+C     _______________________________________________________
+C
+C*    Section 2. Rotate the spectral coefficients.
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+#if (defined CRAY) || (defined REAL_8)
+C*********************************************************************
+C
+C     (REALs are already double precision)
+C
+C     Rotate the spectral field by longitude.
+C     Positive DLON => frame rotated from west to east.
+C
+      CALL RPHI( PSEC4, ITRUNC, WORK, DLON)
+C
+C     Rotate the spectral field by latitude.
+C     Negative DLAT => rotate counter-clockwise about new polar axis.
+C
+#if (defined __uxp__)
+      LOK = JACOBIF( PSEC4, ITRUNC, WORK, DLAT)
+#else
+      LOK = JACOBI ( PSEC4, ITRUNC, WORK, DLAT)
+#endif
+#else
+C*********************************************************************
+C
+C     (REALs are single precision)
+C
+C     Expand spectral coefficients to REAL*8
+      DO 210 LOOP = 1, KSEC4(1)
+        DATA(LOOP) = DBLE(PSEC4(LOOP))
+  210 CONTINUE
+C
+C     Rotate the spectral field by longitude.
+C     Positive DLON => frame rotated from west to east.
+C
+      CALL RPHI( DATA, ITRUNC, WORK, DLON)
+C
+C     Rotate the spectral field by latitude.
+C     Negative DLAT => rotate counter-clockwise about new polar axis.
+C
+#if (defined __uxp__)
+      LOK = JACOBIF( DATA, ITRUNC, WORK, DLAT)
+#else
+      LOK = JACOBI ( DATA, ITRUNC, WORK, DLAT)
+#endif
+      IF(.NOT.LOK) THEN
+        CALL INTLOG(JP_FATAL,'SPROTAT: JACOBI failed.', JPQUIET)
+        SPROTAT = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Repack spectral coefficients to REAL*4.
+      DO 220 LOOP = 1, KSEC4(1)
+        PSEC4(LOOP) = SNGL(DATA(LOOP))
+  220 CONTINUE
+C*********************************************************************
+#endif
+C
+C     _______________________________________________________
+C
+C*    Section 3. Repack the spectral coefficients.
+C     _______________________________________________________
+C
+  300 CONTINUE
+C
+C     Put in details of southern pole of rotation
+      KSEC2(13) = NINT(SLAT*1000.0)
+      KSEC2(14) = NINT(SLON*1000.0)
+C
+C     Put in indicator to show field has been rotated ..
+      KSEC2(1) = 60
+C
+C     .. unless south pole of rotation is (0,-90).
+      IF( (KSEC2(14).EQ.0) .AND. (KSEC2(13).EQ.-90000) ) KSEC2(1) = 50
+C
+C     Encode the field.
+      KLENP = KSEC4(1)
+      KLENG = (OUTLEN+NBYTES-1)/NBYTES
+      IRET  = 1
+      CALL GRIBEX(KSEC0, KSEC1, KSEC2, PSEC2, KSEC3, PSEC3, KSEC4, 
+     X            PSEC4, KLENP, OUTGRIB, KLENG, KWORD, 'C' , IRET )
+      IF(IRET.NE.0)THEN
+        CALL INTLOG(JP_FATAL,'SPROTAT: Error encoding GRIB,IRET=', IRET)
+        SPROTAT = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+      OUTLEN = KSEC0(1)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      RETURN
+      END
diff --git a/interpolation/sscal.F b/interpolation/sscal.F
new file mode 100755
index 0000000..69c4662
--- /dev/null
+++ b/interpolation/sscal.F
@@ -0,0 +1,79 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE SSCAL (KN, SA, XVEC, KNCX)                             
+C                                                                       
+C---->
+C**** *SSCAL* - ROUTINE WHICH IMPLEMENTS THE BLAS ROUTINE OF THE        
+C               SAME NAME                                               
+C                                                                       
+C     PURPOSE.                                                          
+C     --------                                                          
+C                                                                       
+C     SIMPLE REPLACEMENT FOR IBM                                        
+C                                                                       
+C**   INTERFACE.                                                        
+C     ----------                                                        
+C                                                                       
+C     * CALL SSCAL (KN, SA, XVEC, KNCX) *                               
+C                                                                       
+C                                                                       
+C     METHOD.                                                           
+C     -------                                                           
+C                                                                       
+C     XVEC (1 + IP * KNCX) = XVEC (1 + IP * KNCX) * SA                  
+C     FOR IP = 0 TO KN - 1                                              
+C                                                                       
+C     EXTERNALS.                                                        
+C     ----------                                                        
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C     REFERENCE.                                                        
+C     ----------                                                        
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C     AUTHOR.                                                           
+C     -------                                                           
+C                                                                       
+C     K. FIELDING         * ECMWF *     FEB 1992.                       
+C                                                                       
+C     MODIFICATIONS.                                                    
+C     --------------                                                    
+C                                                                       
+C     NONE                                                              
+C                                                                       
+C     COMMON BLOCKS USED                                                
+C     -------------------                                               
+C                                                                       
+C     NONE                                                              
+C----<
+C                                                                       
+      INTEGER KN, KNCX                                                  
+Cjdc  DOUBLE PRECISION SA                                               
+Cjdc  DOUBLE PRECISION XVEC (*)                                         
+      REAL SA                                               
+      REAL XVEC (*)                                         
+C                                                                       
+      INTEGER IP                                                        
+C                                                                       
+C     1.    MAIN LOOP OF CODE                                           
+C           ----------------------------------------------              
+C                                                                       
+  100 CONTINUE                                                          
+      DO 110 IP = 0, KN - 1                                             
+         XVEC (1 + IP * KNCX) = XVEC (1 + IP * KNCX) * SA               
+  110 CONTINUE                                                          
+C                                                                       
+C     END OF ROUTINE                                                    
+C                                                                       
+      RETURN                                                            
+      END                                                               
diff --git a/interpolation/strlat.F b/interpolation/strlat.F
new file mode 100755
index 0000000..0e11893
--- /dev/null
+++ b/interpolation/strlat.F
@@ -0,0 +1,175 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE STRLAT( OLDLAT, STRETCH, KFLAG, NEWLAT, MFACTOR)
+C
+C---->
+C**** STRLAT
+C
+C     PURPOSE
+C     _______
+C
+C     This routine transforms between stretched and real latitudes
+C     and calculates the map factor.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL STRLAT( OLDLAT, STRETCH, KFLAG, NEWLAT, MFACTOR)
+C
+C     Input parameters
+C     ________________
+C
+C     OLDLAT  - Input latitude
+C     STRETCH - Stretching factor
+C     KFLAG   - Flag to show direction of transform (real <-> stretched)
+C               0 = transform from real latitudes to stretched latitudes
+C               1 = transform from stretched latitudes to real latitudes
+C
+C     Output parameters
+C     ________________
+C
+C     NEWLAT  - Input latitude
+C     MFACTOR - Map factor
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     Method
+C     ______
+C
+C     Stretching factor S
+C
+C     Map factor,  m = S**2 + 1 + (S**2 -1)*mu
+C                      -----------------------
+C                              2*S
+C
+C     where mu = sin(lat) on the real sphere
+C
+C     mu = (S**2+1)*md + (S**2-1)
+C          ----------------------
+C          (S**2+1) + (S**2-1)*md
+C
+C     where md = sin(lat) on the stretched sphere.
+C
+C     By rearrangement:
+C
+C     md = (S**2+1)*mu - (S**2-1)
+C          ----------------------
+C          (S**2+1) - (S**2-1)*mu
+C
+C     Wind U and V components are transformed as
+C
+C       vreal = m * vtransformed
+C
+C     Vorticity and divergence fields are transformed as
+C
+C       vreal = (m*m) * vtransformed
+C
+C
+C     Externals
+C     _________
+C
+C     None
+C
+C
+C     Reference
+C     _________
+C
+C     None
+C
+C
+C     Comments
+C     ________
+C
+C     None.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF    July 1999
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      REAL OLDLAT, STRETCH, NEWLAT, MFACTOR, MSCALE
+      INTEGER KFLAG
+C
+C     Parameters
+C
+      INTEGER JPRL2TR
+      PARAMETER (JPRL2TR = 0)
+      REAL PPI, DEG2RAD, RAD2DEG
+      PARAMETER ( PPI = 3.14159265358979 )
+      PARAMETER (DEG2RAD = PPI / 180.0)
+      PARAMETER (RAD2DEG = 180.0 / PPI)
+C
+C     Local variables
+C
+      REAL A, B, ANGLE, MU, MUPRIME
+C     _______________________________________________________
+C
+C*    Section 1.    Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      A     = STRETCH * STRETCH + 1
+      B     = A - 2
+      ANGLE = OLDLAT * DEG2RAD
+C
+C     _______________________________________________________
+C
+C*    Section 2.    Work out geometry
+C     _______________________________________________________
+C
+ 200  CONTINUE
+C
+C     Transform from real latitudes to stretched latitudes
+C
+      IF( KFLAG.EQ.JPRL2TR ) THEN
+        MUPRIME = SIN(ANGLE)
+        MU      = (A*MUPRIME + B) / (A + B*MUPRIME)
+        NEWLAT  = ASIN(MU) * RAD2DEG
+C
+C     Transform from stretched latitudes to real latitudes
+C
+      ELSE
+        MU      = SIN(ANGLE)
+        MUPRIME = (A*MU - B) / (A - B*MU)
+        NEWLAT  = ASIN(MUPRIME) * RAD2DEG
+      ENDIF
+C
+C     Calculate the map factor
+C
+      MFACTOR = (A + B*MU) / (2*STRETCH)
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+      RETURN
+      END
diff --git a/interpolation/tatorgg.F b/interpolation/tatorgg.F
new file mode 100755
index 0000000..87d2b1b
--- /dev/null
+++ b/interpolation/tatorgg.F
@@ -0,0 +1,225 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION TATORGG(OLDFLD, NEWFLD, NUMPTS, POLELAT, POLELON,
+     X                         TYPE, NGAUSS)
+C
+C---->
+C**** TATORGG
+C
+C     PURPOSE
+C     _______
+C
+C     Generates a rotated gaussian grid.
+C     (Reverses the effects of GGROTAT).
+C
+C     INTERFACE
+C     _________
+C
+C     IRET = TATORGG(OLDFLD,NEWFLD,NUMPTS,POLELAT,POLELON,TYPE,NGAUSS)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     OLDFLD  = Original gaussian grid field.
+C     NUMPTS  = Total number of points in the original field.
+C     POLELAT = Latitude of the South Pole of rotation.
+C     POLELON = Longitude of the South Pole of rotation.
+C     TYPE    = 'R' if the gaussian field is reduced (quasi) gaussian.
+C             = 'F' if the gaussian field is regular (full) gaussian.
+C     NGAUSS  = Gaussian grid number (number of latitude rows between
+C               the pole and the equator).
+C
+C     Output parameters
+C     ________________
+C    
+C     NEWFLD  = New gaussian grid field.
+C               (This can be the same array as OLDFLD).
+C
+C     Function returns zero if interpolation ran OK.
+C
+C
+C     METHOD
+C     ______
+C
+C     The nearest gaussian latitude row is found.
+C
+C     Work space is dynamically allocated. It is retained for future
+C     calls.
+C
+C
+C     EXTERNALS
+C     _________
+C
+C     JGETGG  - Pickup the gaussian grid definition.
+C     EULAVGG - Calculates the interpolated value at a point of the new
+C               gaussian grid.
+C     INTLOG  - Logs output messages
+C     JMEMHAN - Dynamically allocate work array
+C
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C
+C     COMMENTS
+C     ________
+C
+C     The input field is assumed to be global in extent, and a known
+C     definition, either N160 or N80 (reduced or regular).
+C     The output field has the same type and dimensions as the input
+C     field.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers      ECMWF       April 1996
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C
+C----<
+C     _______________________________________________________
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMAXGG
+      PARAMETER( JPROUTINE = 38500 )
+      PARAMETER (JPMAXGG = 1280)
+C
+C     Subroutine arguments
+C
+      REAL OLDFLD, NEWFLD, POLELAT, POLELON
+      INTEGER NUMPTS, NGAUSS
+      DIMENSION OLDFLD(NUMPTS), NEWFLD(NUMPTS)
+      CHARACTER*1 TYPE
+C
+C     Local variables
+C
+      REAL GLATS(JPMAXGG)
+      INTEGER NGPTS(JPMAXGG)
+      INTEGER OLDGAUS
+      DATA OLDGAUS/0/
+      CHARACTER*1 OLDTYPE
+      DATA OLDTYPE/' '/
+      SAVE GLATS, NGPTS, OLDGAUS, OLDTYPE
+C
+      INTEGER NEXT, NEXLAT, INROW, LOOP, KRET
+      REAL STEPLON, CUTOFF, RLAT, RLON
+      DIMENSION RLON(JPMAXGG*2)
+C
+      INTEGER ISIZE
+      DATA ISIZE/0/
+      REAL WORK
+      POINTER (IWORK, WORK)
+      DIMENSION WORK(1)
+      SAVE IWORK, ISIZE
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialization.
+C     _______________________________________________________
+C
+  100 CONTINUE
+C
+      TATORGG = 0
+C
+C     Get gaussian grid definition (first time only)
+C
+      IF( (OLDGAUS.NE.NGAUSS).OR.(OLDTYPE.NE.TYPE)) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'TATORGG: Get definitions for gaussian grid type:',JPQUIET)
+        CALL INTLOG(JP_DEBUG,TYPE,JPQUIET)
+        CALL INTLOG(JP_DEBUG,'TATORGG: grid number:',NGAUSS)
+C
+        CALL JGETGG(NGAUSS,TYPE,GLATS,NGPTS,KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'TATORGG: Failed to get gaussian grid definition:',JPQUIET)
+          TATORGG = JPROUTINE + 1
+          GOTO 900
+        ENDIF
+        OLDGAUS = NGAUSS
+        OLDTYPE = TYPE
+      ENDIF
+C
+C     Allocate work space if not already done.
+C
+      IF( ISIZE.LT.NUMPTS ) THEN
+        ISIZE = NUMPTS
+        CALL JMEMHAN(18,IWORK,NUMPTS,1,KRET)
+        IF( KRET.NE.0 ) THEN
+          CALL INTLOG(JP_ERROR,
+     X      'TATORGG: Memory allocation failed: status = ',KRET)
+          TATORGG = JPROUTINE + 2
+          GOTO 900
+        ENDIF
+      ENDIF
+C
+C     Move the original field to the work array
+C
+      DO LOOP = 1, NUMPTS
+        WORK(LOOP) = OLDFLD(LOOP)
+      ENDDO
+C     _______________________________________________________
+C
+C*    Section 2. Work through latitude lines from north to south
+C     _______________________________________________________
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO NEXLAT = 1, NGAUSS*2
+        INROW = NGPTS(NEXLAT)
+        STEPLON = FLOAT(3600000/INROW)/10000.0
+        RLAT = GLATS(NEXLAT)
+C
+C       Fill in longitudes along current line of latitude
+C
+        DO LOOP = 1, INROW
+          RLON(LOOP) = (LOOP-1)*STEPLON
+        ENDDO
+C
+C       Rotate the current line of latitude
+C
+        CALL EULAVGG(NEWFLD,NEXT,INROW,RLAT,RLON,
+     X               POLELAT,POLELON,WORK,NGAUSS,TYPE)
+C
+        NEXT = NEXT + INROW
+C
+      ENDDO
+C
+C     _______________________________________________________
+C
+C*    Section 9. Return to calling routine.
+C     _______________________________________________________
+C
+  900 CONTINUE
+C
+      CALL INTLOG(JP_DEBUG,'TATORGG: Return from GGROTAT:',JPQUIET)
+C
+      RETURN
+      END
diff --git a/interpolation/valpina.c b/interpolation/valpina.c
new file mode 100755
index 0000000..9dccbac
--- /dev/null
+++ b/interpolation/valpina.c
@@ -0,0 +1,243 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include "fortint.h"
+
+#define CHARSIZE (long) (sizeof(char)*8)
+#define LEASTSIGBIT 0x01
+
+long bitmapValue(unsigned char * , long );
+long bitmapValueTotal(unsigned char * , long, long );
+fortint valpina(unsigned char * , fortint *, fortint * );
+fortint valpina_(unsigned char * , fortint *, fortint * );
+long separationBetweenValues(unsigned char * , long , long );
+fortint numvals(unsigned char *, fortint *, fortint *);
+fortint numvals_(unsigned char *, fortint *, fortint *);
+fortint onebits(unsigned char *, fortint *);
+fortint onebits_(unsigned char *, fortint *);
+
+fortint numvals_(unsigned char * grib, fortint* istart, fortint* ifinish) {
+/*
+// Returns a count of the number of 1s in a GRIB between positions
+// 'start' and 'finish'.
+// If start = 0, the static values in the function are initialised.
+*/
+long start = (long) (*istart);
+long finish = (long) (*ifinish);
+static long oldTotal;
+static long oldStart, oldFinish;
+unsigned char * bitmap = grib;
+static unsigned char * oldBitmap = 0;
+
+  if( !start ) {
+    oldBitmap = 0;
+    oldTotal = 0;
+    oldStart = oldFinish = 1;
+    return (fortint) oldTotal;
+  }
+
+  if( oldBitmap != bitmap ) {
+    oldBitmap = bitmap;
+    oldStart = oldFinish = 1;
+    oldTotal = 0;
+  }
+
+  if( start == finish ) {
+    oldStart = oldFinish = finish;
+    oldTotal = 0;
+    return (fortint) oldTotal;
+  }
+
+  if( oldStart != start ) {
+    oldTotal = bitmapValueTotal(bitmap, start+1, finish);
+  }
+  else {
+    if( oldFinish < finish )
+      oldTotal += bitmapValueTotal(bitmap, oldFinish+1, finish);
+    else if( oldFinish > finish )
+      oldTotal -= bitmapValueTotal(bitmap, finish+1, oldFinish);
+  }
+
+  oldStart = start;
+  oldFinish = finish;
+
+  return (fortint) oldTotal;
+
+}
+
+fortint numvals(unsigned char * grib, fortint* istart, fortint* ifinish) {
+  return numvals_(grib,istart,ifinish);
+}
+
+fortint onebits_(unsigned char * grib, fortint* isection_3_offset) {
+/*
+// Returns a count of the number of 1s in a GRIB section 3 bitmap.
+*/
+long section_3_offset = (long) (*isection_3_offset);
+unsigned char * bitmap = grib + section_3_offset;
+long length, unused;
+long number_of_bits, total;
+
+  length = (*bitmap)<<16 | (*(bitmap+1)<<8) | *(bitmap+2);
+  unused = *(bitmap+3);
+  number_of_bits = ((length-6)*CHARSIZE) - unused;
+
+  total = bitmapValueTotal((bitmap+6),1,number_of_bits);
+  return ( (fortint) total );
+}
+
+fortint onebits(unsigned char * grib, fortint* isection_3_offset) {
+  return onebits_(grib,isection_3_offset);
+}
+
+long bitmapValueTotal(unsigned char * bitmap, long start, long finish) {
+/*
+// Returns the count of 1 bits between start and finish in a bitmap.
+*/
+long total = 0;
+unsigned char * first, * last, * next;
+/*
+  Lookup table to count number of 1s in a char
+*/
+static const char lookup[256] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+                                 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};
+/*
+  Masks to remove bits from left- and right-hand end of a char
+*/
+static const unsigned char bottomMask[8] =
+  {0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
+static const unsigned char topMask[8]    =
+  {0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
+int bitsToAdd, bitsToSubtract;
+
+  first = bitmap + (start-1)/CHARSIZE;
+  last  = bitmap + (finish-1)/CHARSIZE;
+
+
+  bitsToAdd = (start-1)%CHARSIZE;
+  total = lookup[(*first & bottomMask[bitsToAdd])];
+
+  for( next = (first+1); next < last ; next++ )
+    total += lookup[*next];
+
+  if( last > first ) total += lookup[*last];
+
+  bitsToSubtract = CHARSIZE - 1 - (finish-1)%CHARSIZE;
+  total -= lookup[(*last & (~topMask[bitsToSubtract]))];
+
+  return total;
+}
+
+long bitmapValue(unsigned char * bitmap, long index) {
+/*
+// Returns the value (0,1) of the bit at position 'index' in a bitmap.
+*/
+unsigned char * next;
+int bitShift;
+
+  next = bitmap + (index-1)/CHARSIZE;
+  bitShift = CHARSIZE - 1 - ((index-1)%CHARSIZE);
+
+  return  (((*next) >> bitShift) & LEASTSIGBIT);
+
+}
+
+fortint valpina_(unsigned char * grib, fortint* ioffset, fortint* iindex) {
+/*
+//  A GRIB product starts at 'grib' and contains missing/non-missing values
+//  as described by a bitmap which is at position 'offset' in the GRIB.
+//
+//  'index' is the position of a point (missing/non-missing) in the field.
+//  If index = 0, the static values in the function are initialised.
+//
+//  Examines the bitmap and returns:
+//
+//  - the actual index of a non-missing value
+//
+//  - 0 for a missing value
+*/
+long offset = (long) (*ioffset);
+long index = (long) (*iindex);
+unsigned char * bitmap = (grib + offset);
+static unsigned char * oldBitmap;
+static long count = 0;
+static long oldIndex = 0;
+long value;
+
+  if( !(index) ) {
+    oldBitmap = 0;
+    count = 0;
+    oldIndex = 0;
+    return (fortint) 0;
+  }
+
+  if( oldBitmap != bitmap ) {
+    oldBitmap = bitmap;
+    count = 0;
+    oldIndex = 0;
+  }
+
+  value = bitmapValue(bitmap, index);
+
+  if( value ) {
+    if( (index) != oldIndex ) {
+      count += separationBetweenValues(bitmap, oldIndex, index);
+      oldIndex = index;
+    }
+    return (fortint) count;
+  }
+  else
+    return (fortint) 0;
+}
+
+fortint valpina(unsigned char * grib, fortint* ioffset, fortint* iindex) {
+  return valpina_(grib,ioffset,iindex);
+}
+
+long separationBetweenValues(unsigned char * bitmap,long oldIndex,long index) {
+/*
+//  Counts the number of actual (non-missing) values between two locations
+//  in the bitmap given by 'index' and 'oldIndex'.
+//
+//  The returned count can be positive or negative depending on whether
+//  index is after or before oldIndex.
+*/
+long start, finish, sign = 1, total = 0;
+
+  if( index > oldIndex ) {
+    start = oldIndex;
+    finish = index;
+  }
+  else {
+    start = index;
+    finish = oldIndex;
+    sign = -1;
+  }
+
+  total = bitmapValueTotal(bitmap, (start+1), finish);
+
+  return (sign*total);
+}
diff --git a/interpolation/w251idx.F b/interpolation/w251idx.F
new file mode 100755
index 0000000..44de597
--- /dev/null
+++ b/interpolation/w251idx.F
@@ -0,0 +1,356 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION W251IDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+     X                         KNEWNUM,NUMNEW,NEWLATS,NEWIDX)
+C
+C---->
+C*****W251IDX*
+C
+C     PURPOSE
+C     -------
+C
+C     Determines which nearest-neighbour values of an input wave
+C     2D-spectra grid field to use for an output wave 2D-spectra
+C     grid field.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = W251IDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+C    X               KNEWNUM,NUMNEW,NEWLATS,NEWIDX)
+C
+C     Input arguments
+C     ---------------
+C
+C     KOLDNUM - No. of meridians from North to South pole (input field)
+C     NUMOLD  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     OLDLATS - input field latitudes
+C     OLDWEST - western longitude of the input field (degrees)
+C     OLDEAST - eastern longitude of the input field (degrees)
+C
+C     KNEWNUM - No. of meridians from North to South pole (output field)
+C     NUMNEW  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     NEWLATS - output field latitudes
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX - Indices of points to use
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     The index of the nearest neighbouring grid point value of
+C     the input field is assigned to each point of the output
+C     grid.
+C     The index is zero if the output grid point is 'missing'.
+C
+C     The input field can be regular or quasi-regular, and can be
+C     global or a subarea.
+C     The output field can be regular or quasi-regular.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    October  1997
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19410 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution.
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution.
+C
+C     Function arguments
+C
+      INTEGER KOLDNUM, NUMOLD, KNEWNUM, NUMNEW
+      DIMENSION NUMOLD(*), NUMNEW(*)
+      REAL OLDWEST, OLDEAST, OLDLATS, NEWLATS
+      DIMENSION OLDLATS(*), NEWLATS(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(*)
+C
+C     Local arguments
+C
+      INTEGER K, NEWCOL, NEWROW, INCOL, LOOP, NEXT, NUMMAX
+      INTEGER I_NW, I_SW, I_N, I_S, I_NE, I_SE
+      REAL*8 DELONGN, DELONGS, DIFF, RESOL, DINC, DEPS
+      REAL*8 DIST_NW, DIST_SW, DIST_NE, DIST_SE, DIST_N, DIST_S
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*8 ZXIN, ZXIS, LON, LAT, OWEST, OEAST
+      DIMENSION LON(JPNMOUT*2)
+      LOGICAL LINGNS, LINGWE
+      INTEGER INDEXI
+      DIMENSION INDEXI(JPLLMAX)
+      LOGICAL LGLOBAL, LFULLG, LGWRAP
+      DATA DEPS/0.00005/
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      W251IDX = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'W251IDX: Wave interpolation requested.',JPQUIET)
+C
+C     Check latitude/longitude grid specification
+C
+      IF( KOLDNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'W251IDX: Number of latitudes in input grid = ',KOLDNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'W251IDX: And is greater than allowed maximum = ',JPLLMAX)
+        W251IDX = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Set up INDEXI for latitude lines in input lat/lon array
+C
+      INDEXI(1) = 0
+      DO LOOP = 2, KOLDNUM
+        INDEXI(LOOP) = INDEXI(LOOP-1) + NUMOLD(LOOP-1)
+      ENDDO
+C
+      OEAST = OLDEAST
+      OWEST = OLDWEST
+C
+C     Check whether the input field is global or a subarea
+C
+      NUMMAX = NUMOLD(1)
+      DO LOOP = 2, KOLDNUM
+        IF( NUMOLD(LOOP).GT.NUMMAX ) NUMMAX = NUMOLD(LOOP)
+      ENDDO
+      IF( NUMMAX.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'W251IDX: Input wave field has no points',JPQUIET)
+        W251IDX = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      LGWRAP = ABS((OEAST-OWEST) - DBLE(360.0)).LT.DEPS
+      DINC = 360.0/DBLE(NUMMAX)
+      LFULLG = ABS((DMOD((OEAST-OWEST+DBLE(360.0)),DBLE(360.0))
+     X              +DINC)-DBLE(360.0)).LT.DEPS
+C
+      LGLOBAL = LFULLG.OR.LGWRAP
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO 220 NEWROW = 1, KNEWNUM
+C
+C       Find old latitude rows to north and south of new latitude and
+C       set up the distance between new row and the old rows to N and S.
+C
+        DO LOOP = 1, KOLDNUM -1
+          IF( (NEWLATS(NEWROW).LE.OLDLATS(LOOP)) .AND.
+     X        (NEWLATS(NEWROW).GT.OLDLATS(LOOP+1)) ) THEN
+            I_N = LOOP
+            I_S = MIN(LOOP+1,KOLDNUM)
+            GOTO 205
+          ENDIF
+        ENDDO
+C
+        IF( NEWLATS(NEWROW).EQ.OLDLATS(KOLDNUM) ) THEN
+          I_N = KOLDNUM
+          I_S = KOLDNUM
+        ELSE
+          I_N = -1
+          I_S = -1
+        ENDIF
+C
+  205   CONTINUE
+        IF( I_N.NE.I_S) THEN
+          DIFF   = OLDLATS(I_N) - OLDLATS(I_S)
+          DIST_N = (OLDLATS(I_N) - NEWLATS(NEWROW)) / DIFF
+        ELSE
+          DIST_N = 1.0
+        ENDIF
+        DIST_S = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        LINGNS = .FALSE.
+        IF( I_N.GT.0 ) THEN
+          IF( (NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).GT.0) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+C           Note that the grid increments are different depending on
+C           whether or not the grid is global; global grids have an
+C           extra interval at the end (eg between 358.5 and 0.0), while
+C           subareas have outer limits defined by 'west' and 'east' and
+C           a given number of points in between.
+C
+            IF( LGLOBAL ) THEN
+              DELONGN = 360.0/DBLE(NUMOLD(I_N))
+              DELONGS = 360.0/DBLE(NUMOLD(I_S))
+            ELSE
+              DELONGN = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                  / DBLE(NUMOLD(I_N)-1)
+              DELONGS = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                  / DBLE(NUMOLD(I_S)-1)
+            ENDIF
+            LINGNS  = .TRUE.
+          ENDIF
+C
+        ENDIF
+C
+C       Setup longitudes for the current row
+C
+        INCOL = NUMNEW(NEWROW)
+        IF( INCOL.NE.0 ) THEN
+            IF( LGLOBAL ) THEN
+             RESOL = 360.0/DBLE(INCOL)
+            ELSE
+             RESOL = (OEAST-OWEST)/(DBLE(INCOL)-1)
+            ENDIF
+             DO LOOP = 1, INCOL
+               LON(LOOP) = OLDWEST + DBLE(LOOP-1)*RESOL
+             ENDDO
+C
+          DO 210 NEWCOL = 1, INCOL
+C
+            LINGWE = (LON(NEWCOL).GT.OWEST).OR.(LON(NEWCOL).LT.OEAST)
+C
+            IF( LINGNS .AND. LINGWE ) THEN
+C
+C             If point to be interpolated is inside the input field ,
+C             work out distances from new point to four neighbours.
+C
+              ZXIN = DMOD((LON(NEWCOL)+(DBLE(360.0)-OWEST)+DBLE(720.0)),
+     X                     DBLE(360.0))
+              ZXIS = ZXIN
+              ZXIN = ZXIN/DELONGN + 1.0
+              ZXIS = ZXIS/DELONGS + 1.0
+              I_NW = INT(ZXIN)
+              I_NE = I_NW + 1
+              I_SW = INT(ZXIS)
+              I_SE = I_SW + 1
+C
+C             Allow wrap-around
+C
+C
+              I_NW = MOD(I_NW,NUMOLD(I_N))
+              I_NE = MOD(I_NE,NUMOLD(I_N))
+              I_SW = MOD(I_SW,NUMOLD(I_S))
+              I_SE = MOD(I_SE,NUMOLD(I_S))
+              IF( I_NW.EQ.0 ) I_NW = NUMOLD(I_N)
+              IF( I_SW.EQ.0 ) I_SW = NUMOLD(I_S)
+              IF( I_NE.EQ.0 ) I_NE = NUMOLD(I_N)
+              IF( I_SE.EQ.0 ) I_SE = NUMOLD(I_S)
+C
+C             Calculate distance from interpolated point to its neighbours
+C
+              DIST_NW = ZXIN - REAL(I_NW)
+              DIST_NE = 1.0 - DIST_NW
+              DIST_SW = ZXIS - REAL(I_SW)
+              DIST_SE = 1.0 - DIST_SW
+C
+C             Take nearest grid point value.
+C
+              DISNW = DIST_NW*DIST_NW + DIST_N*DIST_N
+              DISNE = DIST_NE*DIST_NE + DIST_N*DIST_N
+              DISSW = DIST_SW*DIST_SW + DIST_S*DIST_S
+              DISSE = DIST_SE*DIST_SE + DIST_S*DIST_S
+C
+              IF( (DISNW.LE.DISNE).AND.(DISNW.LE.DISSW).AND.
+     X            (DISNW.LE.DISSE) ) THEN
+C
+C               Use north-west neighbour
+C
+                NEWIDX(NEXT) = INDEXI(I_N)+I_NW
+C
+              ELSE IF( (DISNE.LE.DISSW).AND.(DISNE.LE.DISSE) ) THEN
+C
+C               Use north-east neighbour
+C
+                NEWIDX(NEXT) = INDEXI(I_N)+I_NE
+C
+              ELSE IF( DISSW.LE.DISSE ) THEN
+C
+C               Use south-west neighbour
+C
+                NEWIDX(NEXT) = INDEXI(I_S)+I_SW
+              ELSE
+C
+C               Use south-east neighbour
+C
+                NEWIDX(NEXT) = INDEXI(I_S)+I_SE
+              ENDIF
+C
+C           If the point to be interpolated is outside the input field,
+C           set it to 'land'.
+C
+            ELSE
+              NEWIDX(NEXT) = 0
+            ENDIF
+C
+            NEXT = NEXT + 1
+C
+  210     CONTINUE
+C
+        ENDIF
+C
+  220 CONTINUE
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( W251IDX.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG, 'W251IDX: successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_ERROR, 'W251IDX: failed.',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/waveidx.F b/interpolation/waveidx.F
new file mode 100755
index 0000000..de171e5
--- /dev/null
+++ b/interpolation/waveidx.F
@@ -0,0 +1,369 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WAVEIDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+     X                         KNEWNUM, NUMNEW, NEWLATS,
+     X                         NEWIDX, DISTNEW)
+C
+C---->
+C*****WAVEIDX*
+C
+C     PURPOSE
+C     -------
+C
+C     Determines which nearest-neighbour values of an input global wave
+C     2D-spectra grid field to use for an output global wave 2D-spectra
+C     grid field.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WAVEIDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+C    X               KNEWNUM, NUMNEW, NEWLATS,
+C    X               NEWIDX, DISTNEW)
+C
+C     Input arguments
+C     ---------------
+C
+C     KOLDNUM - No. of meridians from North to South pole (input field)
+C     NUMOLD  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     OLDLATS - input field latitudes
+C     OLDWEST - western longitude of the input field (degrees)
+C     OLDEAST - eastern longitude of the input field (degrees)
+C
+C     KNEWNUM - No. of meridians from North to South pole (output field)
+C     NUMNEW  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     NEWLATS - output field latitudes
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX  - Indices of four neighbours
+C     DISTNEW - Distances of current 'box' edges from new point
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     The indices of the nearest four neighbouring grid points of the
+C     input field is assigned to each point of the output grid.
+C     The indices are zero if the output grid point is 'missing'.
+C
+C     The input field can be regular or quasi-regular, and can be
+C     global or a subarea.
+C     The output field can be regular or quasi-regular.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    January  1998
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19410 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution.
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution.
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW   = 1)
+      PARAMETER (JPNE   = 2)
+      PARAMETER (JPSW   = 3)
+      PARAMETER (JPSE   = 4)
+      PARAMETER (JPN    = 5)
+      PARAMETER (JPS    = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Function arguments
+C
+      INTEGER KOLDNUM, NUMOLD, KNEWNUM, NUMNEW
+      DIMENSION NUMOLD(*), NUMNEW(*)
+      REAL OLDWEST, OLDEAST, OLDLATS, NEWLATS
+      DIMENSION OLDLATS(*), NEWLATS(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(4,*)
+      REAL*4 DISTNEW
+      DIMENSION DISTNEW(10,*)
+C
+C     Local arguments
+C
+      INTEGER K, NEWCOL, NEWROW, INCOL, LOOP, NEXT, NUMMAX
+      INTEGER I_NW, I_SW, I_N, I_S, I_NE, I_SE
+      REAL*8 DELONGN, DELONGS, DIFF, RESOL, DINC, DEPS
+      REAL*8 DIST_NW, DIST_SW, DIST_NE, DIST_SE, DIST_N, DIST_S
+      REAL*8 DISNW, DISNE, DISSW, DISSE
+      REAL*8 ZXIN, ZXIS, LON, LAT, OWEST, OEAST
+      DIMENSION LON(JPNMOUT*2)
+      LOGICAL LINGNS, LINGWE
+      INTEGER INDEXI
+      DIMENSION INDEXI(JPLLMAX)
+      LOGICAL LGLOBAL, LFULLG, LGWRAP
+      DATA DEPS/0.0005/
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WAVEIDX = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WAVEIDX: Wave interpolation requested.',JPQUIET)
+C
+C     Check latitude/longitude grid specification
+C
+      IF( KOLDNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEIDX: Number of latitudes in input grid = ',KOLDNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEIDX: And is greater than allowed maximum = ',JPLLMAX)
+        WAVEIDX = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Set up INDEXI for latitude lines in input lat/lon array
+C
+      INDEXI(1) = 0
+      DO LOOP = 2, KOLDNUM
+        INDEXI(LOOP) = INDEXI(LOOP-1) + NUMOLD(LOOP-1)
+      ENDDO
+C
+      OEAST = OLDEAST
+      OWEST = OLDWEST
+C
+C     Check whether the input field is global or a subarea
+C
+      NUMMAX = NUMOLD(1)
+      DO LOOP = 2, KOLDNUM
+        IF( NUMOLD(LOOP).GT.NUMMAX ) NUMMAX = NUMOLD(LOOP)
+      ENDDO
+      IF( NUMMAX.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEIDX: Input wave field has no points',JPQUIET)
+        WAVEIDX = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      LGWRAP = ABS((OEAST-OWEST) - DBLE(360.0)).LT.DEPS
+      DINC = 360.0/DBLE(NUMMAX)
+      LFULLG = ABS((DMOD((OEAST-OWEST+DBLE(360.0)),DBLE(360.0))
+     X              +DINC)-DBLE(360.0)).LT.DEPS
+C
+      LGLOBAL = LFULLG.OR.LGWRAP
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO 220 NEWROW = 1, KNEWNUM
+C
+C       Find old latitude rows to north and south of new latitude and
+C       set up the distance between new row and the old rows to N and S.
+C
+        DO LOOP = 1, KOLDNUM -1
+          IF( (NEWLATS(NEWROW).LE.OLDLATS(LOOP)) .AND.
+     X        (NEWLATS(NEWROW).GT.OLDLATS(LOOP+1)) ) THEN
+            I_N = LOOP
+            I_S = MIN(LOOP+1,KOLDNUM)
+            GOTO 205
+          ENDIF
+        ENDDO
+C
+        IF( NEWLATS(NEWROW).EQ.OLDLATS(KOLDNUM) ) THEN
+          I_N = KOLDNUM
+          I_S = KOLDNUM
+        ELSE
+          I_N = -1
+          I_S = -1
+        ENDIF
+C
+  205   CONTINUE
+        IF( I_N.NE.I_S) THEN
+          DIFF   = OLDLATS(I_N) - OLDLATS(I_S)
+          DIST_N = (OLDLATS(I_N) - NEWLATS(NEWROW)) / DIFF
+        ELSE
+          DIST_N = 1.0
+        ENDIF
+        DIST_S = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        LINGNS = .FALSE.
+        IF( I_N.GT.0 ) THEN
+          IF( (NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).GT.0) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+C           Note that the grid increments are different depending on
+C           whether or not the grid is global; global grids have an
+C           extra interval at the end (eg between 358.5 and 0.0), while
+C           subareas have outer limits defined by 'west' and 'east' and
+C           a given number of points in between.
+C
+            IF( LGLOBAL ) THEN
+              DELONGN = 360.0/DBLE(NUMOLD(I_N))
+              DELONGS = 360.0/DBLE(NUMOLD(I_S))
+            ELSE
+              DELONGN = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                  / DBLE(NUMOLD(I_N)-1)
+              DELONGS = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                  / DBLE(NUMOLD(I_S)-1)
+            ENDIF
+            LINGNS  = .TRUE.
+          ENDIF
+C
+        ENDIF
+C
+C       Setup longitudes for the current row
+C
+        INCOL = NUMNEW(NEWROW)
+        IF( INCOL.NE.0 ) THEN
+          RESOL = 360.0/DBLE(INCOL)
+          DO LOOP = 1, INCOL
+            LON(LOOP) = DBLE(LOOP-1)*RESOL
+          ENDDO
+C
+          DO 210 NEWCOL = 1, INCOL
+C
+            LINGWE = (LON(NEWCOL).GT.OWEST).OR.(LON(NEWCOL).LT.OEAST)
+C
+            IF( LINGNS .AND. LINGWE ) THEN
+C
+C             If point to be interpolated is inside the input field ,
+C             work out distances from new point to four neighbours.
+C
+              ZXIN = DMOD((LON(NEWCOL)+(DBLE(360.0)-OWEST)+DBLE(720.0)),
+     X                     DBLE(360.0))
+              ZXIS = ZXIN
+              ZXIN = ZXIN/DELONGN + 1.0
+              ZXIS = ZXIS/DELONGS + 1.0
+              I_NW = INT(ZXIN)
+              I_NE = I_NW + 1
+              I_SW = INT(ZXIS)
+              I_SE = I_SW + 1
+C
+C             Allow wrap-around
+C
+              I_NW = MOD(I_NW,NUMOLD(I_N))
+              I_NE = MOD(I_NE,NUMOLD(I_N))
+              I_SW = MOD(I_SW,NUMOLD(I_S))
+              I_SE = MOD(I_SE,NUMOLD(I_S))
+              IF( I_NW.EQ.0 ) I_NW = NUMOLD(I_N)
+              IF( I_SW.EQ.0 ) I_SW = NUMOLD(I_S)
+              IF( I_NE.EQ.0 ) I_NE = NUMOLD(I_N)
+              IF( I_SE.EQ.0 ) I_SE = NUMOLD(I_S)
+C
+C             Calculate distance from interpolated point to its neighbours
+C
+              DIST_NW = ZXIN - REAL(I_NW)
+              DIST_NE = 1.0 - DIST_NW
+              DIST_SW = ZXIS - REAL(I_SW)
+              DIST_SE = 1.0 - DIST_SW
+C
+              DISTNEW(JPDISNW,NEXT) = (DIST_NW*DIST_NW + DIST_N*DIST_N)
+              DISTNEW(JPDISNE,NEXT) = (DIST_NE*DIST_NE + DIST_N*DIST_N)
+              DISTNEW(JPDISSW,NEXT) = (DIST_SW*DIST_SW + DIST_S*DIST_S)
+              DISTNEW(JPDISSE,NEXT) = (DIST_SE*DIST_SE + DIST_S*DIST_S)
+C
+              DISTNEW(JPNW,NEXT) = DIST_NW
+              DISTNEW(JPNE,NEXT) = DIST_NE
+              DISTNEW(JPSW,NEXT) = DIST_SW
+              DISTNEW(JPSE,NEXT) = DIST_SE
+              DISTNEW(JPN ,NEXT) = DIST_N
+              DISTNEW(JPS ,NEXT) = DIST_S
+C
+              NEWIDX(JPNW,NEXT) = INDEXI(I_N)+I_NW
+              NEWIDX(JPNE,NEXT) = INDEXI(I_N)+I_NE
+              NEWIDX(JPSW,NEXT) = INDEXI(I_S)+I_SW
+              NEWIDX(JPSE,NEXT) = INDEXI(I_S)+I_SE
+C
+C           If the point to be interpolated is outside the input field,
+C           set it to 'land'.
+C
+            ELSE
+C
+              DISTNEW(JPNW,NEXT) = 0
+              DISTNEW(JPNE,NEXT) = 0
+              DISTNEW(JPSW,NEXT) = 0
+              DISTNEW(JPSE,NEXT) = 0
+              DISTNEW(JPN ,NEXT) = 0
+              DISTNEW(JPS ,NEXT) = 0
+C
+              DISTNEW(JPDISNW,NEXT) = 0
+              DISTNEW(JPDISNE,NEXT) = 0
+              DISTNEW(JPDISSW,NEXT) = 0
+              DISTNEW(JPDISSE,NEXT) = 0
+C
+              NEWIDX(JPNW,NEXT) = 0
+              NEWIDX(JPNE,NEXT) = 0
+              NEWIDX(JPSW,NEXT) = 0
+              NEWIDX(JPSE,NEXT) = 0
+C
+            ENDIF
+C
+            NEXT = NEXT + 1
+C
+  210     CONTINUE
+C
+        ENDIF
+C
+  220 CONTINUE
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( WAVEIDX.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG, 'WAVEIDX: successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_ERROR, 'WAVEIDX: failed.',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/wavexx1.F b/interpolation/wavexx1.F
new file mode 100755
index 0000000..eb0caf8
--- /dev/null
+++ b/interpolation/wavexx1.F
@@ -0,0 +1,663 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WAVEXX1(NPARAM, ISEC2, ISEC4, NLATS, STEPNS,
+     X                        STEPWE, OLDWAVE, NEWIDX, DISTNEW,
+     X                         NEWWAVE, NORTH, WEST, PMISS)
+C
+C---->
+C*****WAVEXX1*
+C
+C     PURPOSE
+C     -------
+C
+C     Interpolates wave fields (except 2D spectra).
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WAVEXX1(ISEC2, ISEC4, NLATS, STEPNS, STEPWE,
+C    X               OLDWAVE, NEWIDX, DISTNEW,
+C    X               NEWWAVE, NORTH, WEST, PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     ISEC2   - Unpacked section 2 header from 2D wave spectra field
+C     ISEC4   - Unpacked section 4 header from 2D wave spectra field
+C     NLATS   - Number of points N-S in new grid
+C     STEPNS  - Output grid north-south resolution (degrees)
+C     STEPWE  - Output grid west-east resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degrees)
+C     WEST    - Output grid westernmost longitude (degrees)
+C     PMISS   - Missing data value 
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX  - Indices of four neighbouring old grid points used for
+C               new grid points
+C     DISTNEW - Distances of surrounding box edges from new grid points
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Builds the index of neighbouring points for the output grid.
+C     Then works through the output grid points, checking for subarea
+C     boundaries and looking up neighbouring point values and weights.
+C     (Neighbours may have missing data).
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WAVEIDX - determines which nearest-neighbour values to use for
+C               interpolating to new output grid point
+C     NUMPTWE - Calculates number of grid points between west/east
+C               area boundaries
+C     VALPINA - Looks up bitmap value
+C     SOFFSET - Finds the section offsets in GRIB message
+C     INTLOG  - Log error message
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    January 1998
+C
+C
+C     Modifications
+C     -------------
+C     Handle reduced lat/long grid in 'pseudo-gaussian' layout
+C     J.D.Chambers      ECMWF    November 2003
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMXLAT
+      PARAMETER (JPROUTINE = 40100)
+      PARAMETER (JPMXLAT = 1801)
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW = 1)
+      PARAMETER (JPNE = 2)
+      PARAMETER (JPSW = 3)
+      PARAMETER (JPSE = 4)
+      PARAMETER (JPN  = 5)
+      PARAMETER (JPS  = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Subroutine arguments
+C
+      INTEGER ISEC2, ISEC4, NLATS
+      DIMENSION ISEC2(*), ISEC4(*)
+      REAL STEPNS, STEPWE, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      REAL ONORTH
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(4,*)
+      REAL*4 DISTNEW
+      DIMENSION DISTNEW(10,*)
+C
+C     Local arguments
+C
+      INTEGER IEOFSET, IWOFSET, ISTART, IWEST
+      REAL SOUTH, PTLAT, AWEST, EAST, PTLONG, OLDWEST, OLDEAST
+      REAL REFVAL, SCALE
+      INTEGER NSPT1, INSPT, NEXP, NMANT, NRETA, NRETB, NLENG, NBIT
+      INTEGER NPARAM, ISCALE, NSCALE, IBITS, ITEMP
+      INTEGER IRET, IS0, IS1, IS2, IS3, IS4, IEDITN
+      INTEGER NEXT, NEXTWV, NROW, NCOL, INDEX, ILOCATE
+      INTEGER MISSLAT, LOOP, NPTS, NUMLATS, NUMNEW, KOLDNUM, KNEWNUM
+      DIMENSION NPTS(JPMXLAT), NUMNEW(JPMXLAT)
+      REAL RLATINC, OLDLATS, NEWLATS, ROWINC
+      DIMENSION OLDLATS(JPMXLAT), NEWLATS(JPMXLAT)
+      LOGICAL LDIREC
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*4 NW_PT, NE_PT, SW_PT, SE_PT
+      REAL*4 RAD
+      DATA RAD/0.017453293/
+      REAL*4 DI1N, DI1S, DI2N, DI2S, DK1, DK2
+      REAL*4 CNW_PT, CNE_PT, CSW_PT, CSE_PT
+      REAL*4 SNW_PT, SNE_PT, SSW_PT, SSE_PT
+      REAL*4 U1, U2, C1, C2, S1, S2, CC, SS
+      INTEGER INW, INE, ISW, ISE, JNW, JNE, JSW, JSE
+C
+C     Externals
+C
+      INTEGER WAVEIDX, SOFFSET, VALPINA, NUMPTWE
+      EXTERNAL WAVEIDX, SOFFSET, VALPINA, NUMPTWE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WAVEXX1 = 0
+
+C
+C     Initialise the bitmap value lookup function
+C
+      IRET = VALPINA(0,0,0)
+C
+      MISSLAT = 0
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      NUMLATS = (180000/ISEC2(10)) + 1
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXX1: Number of latitudes in input grid = ',NUMLATS)
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXX1: And is greater than allowed maximum = ',JPMXLAT)
+        WAVEXX1 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+cs      RLATINC = FLOAT(ISEC2(10))/1000
+      RLATINC = FLOAT(ISEC2(10))
+C
+C     Fill an array with the number of points at each latitude for the
+C     input field.
+C
+      IF( ISEC2(17).EQ.1 ) THEN
+C
+C       Input field is a reduced latitude/longitude grid
+C
+C       .. but it may be 'pseudo-gaussian' in layout
+C       (ie global, symmetric about the equator but no latitude
+C        at the equator)
+C
+        IF( (ISEC2(4).NE.90000).AND.(MOD(ISEC2(3),2).EQ.0) ) THEN
+C
+          NUMLATS = ISEC2(3)
+cs          RLATINC = FLOAT(ISEC2(10))/1000
+cs          ONORTH = FLOAT(ISEC2(4))/1000
+          ONORTH = FLOAT(ISEC2(4))
+C
+          DO LOOP = 1, NUMLATS
+cs            OLDLATS(LOOP) = ONORTH - (LOOP-1)*RLATINC
+            OLDLATS(LOOP) = (ONORTH - (LOOP-1)*RLATINC)/1000
+          ENDDO
+C
+          DO LOOP = 1, ISEC2(3)
+            NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+          ENDDO
+C
+        ELSE
+C
+          DO LOOP = 1, NUMLATS
+            OLDLATS(LOOP) = (90000.0 - (LOOP-1)*RLATINC)/1000
+cs            OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+          ENDDO
+C
+          MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+          DO LOOP = 1, MISSLAT
+            NPTS(LOOP)    = 0
+          ENDDO
+          KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+          DO LOOP = 1, (KOLDNUM-MISSLAT)
+            NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+          ENDDO
+          DO LOOP = (KOLDNUM+1), NUMLATS
+            NPTS(LOOP)    = 0
+          ENDDO
+        ENDIF
+C
+      ELSE
+C
+C       Input field is a regular latitude/longitude grid
+C
+C
+        DO LOOP = 1, NUMLATS
+cs          OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+            OLDLATS(LOOP) = (90000.0 - (LOOP-1)*RLATINC)/1000
+        ENDDO
+C
+        MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+        DO LOOP = 1, MISSLAT
+          NPTS(LOOP)    = 0
+        ENDDO
+        KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+        DO LOOP = 1, (KOLDNUM-MISSLAT)
+          NPTS(LOOP+MISSLAT) = ISEC2(2)
+        ENDDO
+        DO LOOP = (KOLDNUM+1), NUMLATS
+          NPTS(LOOP)    = 0
+        ENDDO
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Setup number of points at each latitude for the
+C                output latitude/longitude field.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+C
+C       Reduced (quasi-regular) gaussian output
+C
+        KNEWNUM = NOGAUSS*2
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROGAUSS(LOOP)
+        ENDDO
+C
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+C
+C       Reduced (quasi-regular) lat/long output
+C
+        KNEWNUM = NOREDLL
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROREDLL(LOOP)
+        ENDDO
+C
+      ELSE
+C
+C       Regular output
+C
+        MISSLAT = NINT((90.0 - NORTH)/STEPNS)
+        DO LOOP = 1, MISSLAT
+          NUMNEW(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, NLATS
+          NUMNEW(LOOP+MISSLAT) = NINT(360.0/STEPWE)
+        ENDDO
+C
+        KNEWNUM = MISSLAT + NLATS
+        DO LOOP = 1, KNEWNUM
+          NEWLATS(LOOP) = 90.0 - (LOOP-1)*STEPNS
+        ENDDO
+C
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 3. Get the input GRIB field characteristics.
+C ---------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Calculate the indices of the input grid points to be used for
+C     the output points
+C
+      OLDWEST = FLOAT(NIAREA(2))/PPMULT
+      OLDEAST = FLOAT(NIAREA(4))/PPMULT
+cs      print*,'MARS NUMLATS ', NUMLATS,' RLATINC ',RLATINC
+cs      print*,'MARS OLDEAST ', OLDEAST,' OLDWEST ',OLDWEST
+cs      print*,'MARS KNEWNUM ', KNEWNUM,' STEPNS ',STEPNS
+
+cs21    format(i6)
+cs      OPEN (UNIT=12,FILE='./mars_offset.txt',STATUS='UNKNOWN',
+cs     &    FORM='FORMATTED')
+cs      WRITE (12,21)(NPTS(LOOP), LOOP=1,NUMLATS)
+
+      WAVEXX1 = WAVEIDX(NUMLATS,NPTS,OLDLATS,OLDWEST,OLDEAST,
+     X                  KNEWNUM, NUMNEW, NEWLATS,
+     X                  NEWIDX, DISTNEW)
+      IF( WAVEXX1.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXX1: Unable to calculate output grid indices',JPQUIET)
+        WAVEXX1 = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Find bitmap (section 3) offset the GRIB product
+C
+cs      IRET = SOFFSET(OLDWAVE, IS0, IS1, IS2, IS3, IS4, IEDITN)
+C
+C     Get the overall length of OLDWAVE
+C
+cs#ifdef INTEGER_8
+cs      NBIT = 64
+cs#else
+cs      NBIT = 32
+cs#endif
+cs      INSPT = (IS0 + 4) * 8
+cs      CALL INXBIT(OLDWAVE,10,INSPT,NLENG,1,NBIT,24,'D',NRETA)
+cs      IF( NRETA.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'WAVEXX1: Problem extracting overall length of GRIB',JPQUIET)
+cs        WAVEXX1 = JPROUTINE + 3
+cs        GOTO 900
+cs      ENDIF
+C
+C     Get parameter identifier
+C
+cs      INSPT = (IS1 + 8) * 8
+cs      CALL INXBIT(OLDWAVE,10,INSPT,NPARAM,1,NBIT,8,'D',NRETA)
+cs      IF( NRETA.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'WAVEXX1: Problem getting parameter identifier',JPQUIET)
+cs        WAVEXX1 = JPROUTINE + 4
+cs        GOTO 900
+cs      ENDIF
+C
+C     Wave direction parameters need special handling
+C     (MWD, MDWW, MDPS, MDWI)
+C
+      LDIREC = ( (NPARAM.EQ.230) .OR.
+     X           (NPARAM.EQ.235) .OR.
+     X           (NPARAM.EQ.238) .OR.
+     X           (NPARAM.EQ.242) )
+C
+C     Get the scale factor
+C
+cs      INSPT = (IS4 + 4) * 8
+cs      CALL INXBIT(OLDWAVE,NLENG,INSPT,NSCALE,1,NBIT,16,'D',NRETA)
+cs      IF( NRETA.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'WAVEXX1: Problem extracting scale factor in GRIB',JPQUIET)
+cs        WAVEXX1 = JPROUTINE + 5
+cs        GOTO 900
+cs      ENDIF
+cs      CALL DSGNBT(ISCALE,NSCALE,16,NRETA)
+cs      IF( NRETA.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'WAVEXX1: Problem setting sign of scale factor',JPQUIET)
+cs        WAVEXX1 = JPROUTINE + 6
+cs        GOTO 900
+cs      ENDIF
+cs      SCALE = 2.0**(FLOAT(ISCALE))
+C
+C     Get the reference value
+C
+cs      CALL INXBIT(OLDWAVE,NLENG,INSPT,NEXP,1,NBIT,8,'D',NRETA)
+cs      CALL INXBIT(OLDWAVE,NLENG,INSPT,NMANT,1,NBIT,24,'D',NRETB)
+cs      IF( (NRETA.NE.0) .OR. (NRETB.NE.0) ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'WAVEXX1: Problem getting reference value from GRIB',JPQUIET)
+cs        WAVEXX1 = JPROUTINE + 7
+cs        GOTO 900
+cs      ENDIF
+cs      CALL DECFP2(REFVAL,NEXP,NMANT)
+C
+C     Get number of bits per packed value
+C
+cs      CALL INXBIT(OLDWAVE,NLENG,INSPT,IBITS,1,NBIT,8,'D',NRETA)
+cs      IF( NRETA.NE.0 ) THEN
+cs        CALL INTLOG(JP_ERROR,
+cs     X    'WAVEXX1: Problem getting number of bits per word',JPQUIET)
+cs        WAVEXX1 = JPROUTINE + 8
+cs        GOTO 900
+cs      ENDIF
+cs      NSPT1 = INSPT
+C
+C ---------------------------------------------------------------------
+C*    Section 4. Work through the output subarea.
+C ---------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Fill in the wave spectra values
+C
+      NEXT = 0
+      NEXTWV = 0
+C
+      SOUTH = NOAREA(3)/PPMULT
+      EAST  = NOAREA(4)/PPMULT
+      ISTART = 0
+C
+C     Work down through latitudes from north to south.
+C
+
+          OPEN (UNIT=16,FILE='./mars.txt',STATUS='UNKNOWN',
+     &    FORM='FORMATTED')
+c17            format(i4,1x,i4,4(1x,i6))
+17            format(i4,1x,i4,4(1x,i6),2x,4(f9.2))
+19            format(i4,1x,i4,4(1x,i6),2x,f9.2)
+
+      DO NROW = 1, KNEWNUM
+C
+C       If inside north-south (subarea) boundaries ..
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          PTLAT = ROGAUSS(NROW)
+        ELSE
+          PTLAT = 90.0 - (NROW-1)*STEPNS
+        ENDIF
+        IF( (PTLAT.LE.NORTH).AND.(ABS(PTLAT-SOUTH).GT.-0.0005) ) THEN
+C
+C         Calculate number of points between west boundary of area and
+C         Greenwich
+C
+          ROWINC = 360.0/NUMNEW(NROW)
+C
+          IWEST = INT(WEST/ROWINC)
+          IF( (WEST.GT.0.0).AND.(WEST.NE.(IWEST*ROWINC)) )
+     X      IWEST = IWEST + 1
+          AWEST = IWEST * ROWINC
+          IWOFSET = NUMPTWE(AWEST,0.0,ROWINC)
+          IEOFSET = NUMPTWE(AWEST,EAST,ROWINC)
+C
+C         Work through subarea longitudes from west to east.
+C
+          DO NCOL = 1, NUMNEW(NROW)
+            PTLONG = AWEST + (NCOL-1)*ROWINC
+            NEXT = NUMPTWE(AWEST,PTLONG,ROWINC)
+            IF( (NEXT.LE.IEOFSET).AND.(NEXT.GE.0) ) THEN
+C
+C             .. and inside west-east (subarea) boundaries
+C
+              NEXT = 1 + NEXT - IWOFSET
+              IF( NEXT.LE.0) NEXT = NEXT + NUMNEW(NROW)
+              NEXT = NEXT + ISTART
+              NEXTWV = NEXTWV + 1
+C
+              INW = NEWIDX(JPNW,NEXT)
+              INE = NEWIDX(JPNE,NEXT)
+              ISW = NEWIDX(JPSW,NEXT)
+              ISE = NEWIDX(JPSE,NEXT)
+C
+C             If there is a bitmap, ...
+C
+cs              IF( IS3.NE.0 ) THEN
+cs                IF(INW.NE.0) JNW = VALPINA(OLDWAVE, IS3+6, INW)
+cs                IF(INE.NE.0) JNE = VALPINA(OLDWAVE, IS3+6, INE)
+cs                IF(ISW.NE.0) JSW = VALPINA(OLDWAVE, IS3+6, ISW)
+cs                IF(ISE.NE.0) JSE = VALPINA(OLDWAVE, IS3+6, ISE)
+cs              ELSE
+cs                JNW = INW
+cs                JNE = INE
+cs                JSW = ISW
+cs                JSE = ISE
+cs              ENDIF
+C
+C             Test if any of the four neighbouring points is missing.
+C
+              IF( (INW.EQ.0) .OR. (OLDWAVE(INW).EQ.PMISS) .OR.
+     X            (ISW.EQ.0) .OR. (OLDWAVE(ISW).EQ.PMISS) .OR.
+     X            (INE.EQ.0) .OR. (OLDWAVE(INE).EQ.PMISS) .OR.
+     X            (ISE.EQ.0) .OR. (OLDWAVE(ISE).EQ.PMISS) ) THEN
+cs
+cs              WRITE (16,17)NROW,NCOL,INW,INE,ISW,ISE
+cs     X           ,OLDWAVE(INW),OLDWAVE(ISW)
+cs     X           ,OLDWAVE(INE),OLDWAVE(ISE)
+C
+C               If so, take nearest grid point value.
+C
+                DISNW = DISTNEW(JPDISNW,NEXT)
+                DISNE = DISTNEW(JPDISNE,NEXT)
+                DISSW = DISTNEW(JPDISSW,NEXT)
+                DISSE = DISTNEW(JPDISSE,NEXT)
+C
+                IF( (DISNW.LE.DISNE).AND.
+     X              (DISNW.LE.DISSW).AND.
+     X              (DISNW.LE.DISSE)) THEN
+                  INDEX = INW
+cs                  ILOCATE  = JNW
+C
+                ELSE IF( (DISNE.LE.DISSW).AND.
+     X                   (DISNE.LE.DISSE) ) THEN
+                  INDEX = INE
+cs                  ILOCATE  = JNE
+C
+                ELSE IF( (DISSW.LE.DISSE) ) THEN
+                  INDEX = ISW
+cs                  ILOCATE  = JSW
+C
+                ELSE
+                  INDEX = ISE
+cs                  ILOCATE  = JSE
+                ENDIF
+C
+                IF(INDEX.EQ.0.OR.(OLDWAVE(INDEX).EQ.PMISS)) THEN
+C
+C                 Nearest point is missing
+C
+                  NEWWAVE(NEXTWV) = PMISS
+C
+                ELSE
+cs                  INSPT = NSPT1 + (ILOCATE - 1)*IBITS
+cs                  CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+cs     X                        NBIT,IBITS,'D',NRETA)
+cs                  IF( NRETA.NE.0 ) THEN
+ccss                    CALL INTLOG(JP_ERROR,
+cs     X              'WAVEXX1: Problem getting nearest neighbour value',
+cs     X              JPQUIET)
+cs                    WAVEXX1 = JPROUTINE + 9
+cs                  GOTO 900
+cs                  ENDIF
+cs                  NEWWAVE(NEXTWV) = REFVAL + FLOAT(ITEMP)*SCALE
+                NEWWAVE(NEXTWV) =  OLDWAVE(INDEX)
+              WRITE (16,19)NROW,NCOL,INW,INE,ISW,ISE,NEWWAVE(NEXTWV)
+                ENDIF
+C
+              ELSE
+C
+C               Use bi-linear interpolation from four
+C               neighbouring sea points.
+C
+cs                INSPT = NSPT1 + (JNW - 1)*IBITS
+cs                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+cs     X                      NBIT,IBITS,'D',NRETA)
+cs                IF( NRETA.NE.0 ) THEN
+cs                  CALL INTLOG(JP_ERROR,
+cs     X            'WAVEXX1: Problem getting NW neighbour value',
+cs     X            JPQUIET)
+cs                  WAVEXX1 = JPROUTINE + 10
+cs                  GOTO 900
+cs                ENDIF
+cs                NW_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+cs                INSPT = NSPT1 + (JNE - 1)*IBITS
+cs                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+cs     X                      NBIT,IBITS,'D',NRETA)
+cs                IF( NRETA.NE.0 ) THEN
+cs                  CALL INTLOG(JP_ERROR,
+cs     X            'WAVEXX1: Problem getting NE neighbour value',
+cs     X            JPQUIET)
+cs                  WAVEXX1 = JPROUTINE + 10
+cs                  GOTO 900
+cs                ENDIF
+cs                NE_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+cs                INSPT = NSPT1 + (JSW - 1)*IBITS
+cs                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+cs     X                      NBIT,IBITS,'D',NRETA)
+cs                IF( NRETA.NE.0 ) THEN
+cs                  CALL INTLOG(JP_ERROR,
+cs     X            'WAVEXX1: Problem getting SW neighbour value',
+cs     X            JPQUIET)
+cs                  WAVEXX1 = JPROUTINE + 10
+cs                  GOTO 900
+cs                ENDIF
+cs                SW_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+cs                INSPT = NSPT1 + (JSE - 1)*IBITS
+cs                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+cs     X                      NBIT,IBITS,'D',NRETA)
+cs                IF( NRETA.NE.0 ) THEN
+cs                  CALL INTLOG(JP_ERROR,
+cs     X            'WAVEXX1: Problem getting SE neighbour value',
+cs     X            JPQUIET)
+cs                  WAVEXX1 = JPROUTINE + 10
+cs                  GOTO 900
+cs                ENDIF
+cs                SE_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+                DI1N = DISTNEW(JPNW,NEXT)
+                DI2N = DISTNEW(JPNE,NEXT)
+                DI1S = DISTNEW(JPSW,NEXT)
+                DI2S = DISTNEW(JPSE,NEXT)
+                DK1  = DISTNEW(JPN,NEXT)
+                DK2  = DISTNEW(JPS,NEXT)
+C
+                IF( .NOT. LDIREC ) THEN
+                  U1 = NW_PT*DI2N + NE_PT*DI1N
+                  U2 = SW_PT*DI2S + SE_PT*DI1S
+                  NEWWAVE(NEXTWV) = U1*DK2 + U2*DK1
+                ELSE
+C
+C                 Fields representing a 'direction': resolve into
+C                 components and interpolate each separately.
+C
+                  CNW_PT = COS(NW_PT*RAD)
+                  CNE_PT = COS(NE_PT*RAD)
+                  CSW_PT = COS(SW_PT*RAD)
+                  CSE_PT = COS(SE_PT*RAD)
+                  SNW_PT = SIN(NW_PT*RAD)
+                  SNE_PT = SIN(NE_PT*RAD)
+                  SSW_PT = SIN(SW_PT*RAD)
+                  SSE_PT = SIN(SE_PT*RAD)
+                  C1 = CNW_PT*DI2N + CNE_PT*DI1N
+                  C2 = CSW_PT*DI2S + CSE_PT*DI1S
+                  CC = C1*DK2 + C2*DK1
+                  S1 = SNW_PT*DI2N + SNE_PT*DI1N
+                  S2 = SSW_PT*DI2S + SSE_PT*DI1S
+                  SS = S1*DK2 + S2*DK1
+                  IF( SS.LT.0.0 ) THEN
+                    NEWWAVE(NEXTWV) = ATAN2(SS,CC)/RAD + 360.0
+                  ELSE
+                    NEWWAVE(NEXTWV) = ATAN2(SS,CC)/RAD
+                  ENDIF
+                ENDIF
+              ENDIF
+            ENDIF
+          ENDDO
+C
+        ENDIF
+        ISTART = ISTART + NUMNEW(NROW)
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wavexx2.F b/interpolation/wavexx2.F
new file mode 100755
index 0000000..3d315ae
--- /dev/null
+++ b/interpolation/wavexx2.F
@@ -0,0 +1,502 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WAVEXX2(NPARAM, NUMLATS, NPTS,
+     X                         NLATS, STEPNS, STEPWE,
+     X                         OLDWAVE,
+     X                         NEWWAVE, NORTH, WEST, PMISS)
+C
+C---->
+C*****WAVEXX2*
+C
+C     PURPOSE
+C     -------
+C
+C     Interpolates wave fields (except 2D spectra).
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WAVEXX2(NPARAM, NUMLATS, NLATS, STEPNS, STEPWE,
+C    X               OLDWAVE, NEWIDX, DISTNEW,
+C    X               NEWWAVE, NORTH, WEST, PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     NUMLATS - Input lat number north-south
+C     NPTS   - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     NLATS   - Number of points N-S in new grid
+C     STEPNS  - Output grid north-south resolution (degrees)
+C     STEPWE  - Output grid west-east resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degrees)
+C     WEST    - Output grid westernmost longitude (degrees)
+C     PMISS   - Missing data value 
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Builds the index of neighbouring points for the output grid.
+C     Then works through the output grid points, checking for subarea
+C     boundaries and looking up neighbouring point values and weights.
+C     (Neighbours may have missing data).
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WAVEIDX - determines which nearest-neighbour values to use for
+C               interpolating to new output grid point
+C     NUMPTWE - Calculates number of grid points between west/east
+C               area boundaries
+C     INTLOG  - Log error message
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     S. Curic      ECMWF    Jun 2009
+C
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+      INTEGER JPROUTINE, JPMXLAT
+      PARAMETER (JPROUTINE = 40100)
+      PARAMETER (JPMXLAT = 1801)
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW = 1)
+      PARAMETER (JPNE = 2)
+      PARAMETER (JPSW = 3)
+      PARAMETER (JPSE = 4)
+      PARAMETER (JPN  = 5)
+      PARAMETER (JPS  = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Subroutine arguments
+C
+      INTEGER NPTS,NLATS
+      DIMENSION NPTS(*)
+      REAL STEPNS, STEPWE, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(4,2880*1442)
+      REAL*4 DISTNEW
+      DIMENSION DISTNEW(10,2880*1442)
+      INTEGER NUMLATS
+C
+C     Local arguments
+C
+      REAL RLATINC, RLATINC2
+      REAL ONORTH,OSOUTH,OWEST, OEAST
+      INTEGER IEOFSET, IWOFSET, ISTART, IWEST
+      REAL SOUTH, PTLAT, AWEST, EAST, PTLONG
+      REAL REFVAL, SCALE
+      INTEGER NSPT1, INSPT, NEXP, NMANT, NRETA, NRETB, NLENG, NBIT
+      INTEGER NPARAM, ISCALE, NSCALE, IBITS, ITEMP
+      INTEGER IRET, IEDITN
+      INTEGER NEXT, NEXTWV, NROW, NCOL, INDEX
+      INTEGER MISSLAT, LOOP, NUMNEW, KOLDNUM, KNEWNUM
+      DIMENSION NUMNEW(JPMXLAT)
+      REAL OLDLATS, NEWLATS, ROWINC
+      DIMENSION OLDLATS(JPMXLAT), NEWLATS(JPMXLAT)
+      LOGICAL LDIREC
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*4 NW_PT, NE_PT, SW_PT, SE_PT
+      REAL*4 RAD
+      DATA RAD/0.017453293/
+      REAL*4 DI1N, DI1S, DI2N, DI2S, DK1, DK2
+      REAL*4 CNW_PT, CNE_PT, CSW_PT, CSE_PT
+      REAL*4 SNW_PT, SNE_PT, SSW_PT, SSE_PT
+      REAL*4 U1, U2, C1, C2, S1, S2, CC, SS
+      INTEGER INW, INE, ISW, ISE, JNW, JNE, JSW, JSE
+C
+C     Externals
+C
+      INTEGER WAVEIDX, NUMPTWE
+      EXTERNAL WAVEIDX, NUMPTWE
+
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WAVEXX2 = 0
+
+C     Initialise the bitmap value lookup function
+C
+      MISSLAT = 0
+
+      ONORTH = FLOAT(NIAREA(1))/PPMULT
+      OSOUTH = FLOAT(NIAREA(3))/PPMULT
+      RLATINC = FLOAT(NIGRID(2))/PPMULT
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXX2: Number of latitudes in input grid = ',NUMLATS)
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXX2: And is greater than allowed maximum = ',JPMXLAT)
+        WAVEXX2 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C
+C     Fill an array with the number of points at each latitude for the
+C     input field.
+C
+      IF(NIREPR.EQ.JPREDLL) THEN
+C
+C       Input field is a reduced latitude/longitude grid
+C
+C       .. but it may be 'pseudo-gaussian' in layout
+C       (ie global, symmetric about the equator but no latitude
+C        at the equator)
+C
+        IF( (ONORTH.NE.90.0).AND.(MOD(NUMLATS,2).EQ.0) ) THEN
+C
+          ONORTH = FLOAT(NIAREA(1))
+          OSOUTH = FLOAT(NIAREA(3))
+          RLATINC = FLOAT(NIGRID(2))
+
+          DO LOOP = 1, NUMLATS
+cs            OLDLATS(LOOP) = ONORTH - (LOOP-1)*RLATINC
+            OLDLATS(LOOP) = (ONORTH - (LOOP-1)*RLATINC)/PPMULT
+          ENDDO
+C
+        ELSE
+C
+          DO LOOP = 1, NUMLATS
+            OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+          ENDDO
+cs-----------------------------------------------------
+cs          MISSLAT = (9000000 - NIAREA(1) )/NIGRID(2)
+cs          DO LOOP = 1, MISSLAT
+cs            NPTS(LOOP)    = 0
+cs          ENDDO
+cs          KOLDNUM = 1 + (9000000 - NIAREA(3))/NIGRID(2)
+cs          DO LOOP = 1, (KOLDNUM-MISSLAT)
+cs            print*,LOOP+MISSLAT, NPTS(LOOP+MISSLAT)
+cs            NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+cs          ENDDO
+cs          DO LOOP = (KOLDNUM+1), NUMLATS
+cs            print*,'to set 0 ', loop, NPTS(LOOP)
+cs            NPTS(LOOP)    = 0
+cs          ENDDO
+cs-----------------------------------------------------
+
+C
+        ENDIF
+C
+      ELSE
+C
+C       Input field is a regular latitude/longitude grid
+C
+C
+        DO LOOP = 1, NUMLATS
+          OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+        ENDDO
+C
+        MISSLAT = (90.0 - ONORTH)/RLATINC
+        DO LOOP = 1, MISSLAT
+          NPTS(LOOP)    = 0
+        ENDDO
+        KOLDNUM = 1 + NINT((90.0 - OSOUTH)/RLATINC)
+        DO LOOP = 1, (KOLDNUM-MISSLAT)
+          NPTS(LOOP+MISSLAT) = NIWE
+        ENDDO
+        DO LOOP = (KOLDNUM+1), NUMLATS
+          NPTS(LOOP)    = 0
+        ENDDO
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Setup number of points at each latitude for the
+C                output latitude/longitude field.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+C
+C       Reduced (quasi-regular) gaussian output
+C
+        KNEWNUM = NOGAUSS*2
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROGAUSS(LOOP)
+        ENDDO
+C
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+C
+C       Reduced (quasi-regular) lat/long output
+C
+        KNEWNUM = NOREDLL
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROREDLL(LOOP)
+        ENDDO
+C
+      ELSE
+C
+C       Regular output
+C
+        MISSLAT = NINT((90.0 - NORTH)/STEPNS)
+        DO LOOP = 1, MISSLAT
+          NUMNEW(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, NLATS
+          NUMNEW(LOOP+MISSLAT) = NINT(360.0/STEPWE)
+        ENDDO
+C
+        KNEWNUM = MISSLAT + NLATS
+        DO LOOP = 1, KNEWNUM
+          NEWLATS(LOOP) = 90.0 - (LOOP-1)*STEPNS
+        ENDDO
+C
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 3. Get the input GRIB field characteristics.
+C ---------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Calculate the indices of the input grid points to be used for
+C     the output points
+C
+
+      OWEST = FLOAT(NIAREA(2))/PPMULT
+      OEAST = FLOAT(NIAREA(4))/PPMULT
+
+      WAVEXX2 = WAVEIDX(NUMLATS,NPTS,OLDLATS,OWEST,OEAST,
+     X                  KNEWNUM, NUMNEW, NEWLATS,
+     X                  NEWIDX, DISTNEW)
+      IF( WAVEXX2.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXX2: Unable to calculate output grid indices',JPQUIET)
+        WAVEXX2 = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Wave direction parameters need special handling
+C     (MWD, MDWW, MDPS, MDWI)
+C
+      LDIREC = ( (NPARAM.EQ.230) .OR.
+     X           (NPARAM.EQ.235) .OR.
+     X           (NPARAM.EQ.238) .OR.
+     X           (NPARAM.EQ.242) )
+C
+C ---------------------------------------------------------------------
+C*    Section 4. Work through the output subarea.
+C ---------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Fill in the wave spectra values
+C
+      NEXT = 0
+      NEXTWV = 0
+C
+      SOUTH = NOAREA(3)/PPMULT
+      EAST  = NOAREA(4)/PPMULT
+      ISTART = 0
+C
+C     Work down through latitudes from north to south.
+C
+      DO NROW = 1, KNEWNUM
+C
+C       If inside north-south (subarea) boundaries ..
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          PTLAT = ROGAUSS(NROW)
+        ELSE
+          PTLAT = 90.0 - (NROW-1)*STEPNS
+        ENDIF
+        IF( (PTLAT.LE.NORTH).AND.(ABS(PTLAT-SOUTH).GT.-0.0005) ) THEN
+C
+C         Calculate number of points between west boundary of area and
+C         Greenwich
+C
+          ROWINC = 360.0/NUMNEW(NROW)
+C
+          IWEST = INT(WEST/ROWINC)
+          IF( (WEST.GT.0.0).AND.(WEST.NE.(IWEST*ROWINC)) )
+     X      IWEST = IWEST + 1
+          AWEST = IWEST * ROWINC
+          IWOFSET = NUMPTWE(AWEST,0.0,ROWINC)
+          IEOFSET = NUMPTWE(AWEST,EAST,ROWINC)
+C
+C         Work through subarea longitudes from west to east.
+C
+          DO NCOL = 1, NUMNEW(NROW)
+            PTLONG = AWEST + (NCOL-1)*ROWINC
+            NEXT = NUMPTWE(AWEST,PTLONG,ROWINC)
+            IF( (NEXT.LE.IEOFSET).AND.(NEXT.GE.0) ) THEN
+C
+C             .. and inside west-east (subarea) boundaries
+C
+              NEXT = 1 + NEXT - IWOFSET
+              IF( NEXT.LE.0) NEXT = NEXT + NUMNEW(NROW)
+              NEXT = NEXT + ISTART
+              NEXTWV = NEXTWV + 1
+C
+              INW = NEWIDX(JPNW,NEXT)
+              INE = NEWIDX(JPNE,NEXT)
+              ISW = NEWIDX(JPSW,NEXT)
+              ISE = NEWIDX(JPSE,NEXT)
+C
+C             Test if any of the four neighbouring points is missing.
+C
+                IF( (OLDWAVE(INW).EQ.PMISS) .OR.
+     X              (OLDWAVE(ISW).EQ.PMISS) .OR.
+     X              (OLDWAVE(INE).EQ.PMISS) .OR.
+     X              (OLDWAVE(ISE).EQ.PMISS) ) THEN
+                ENDIF
+
+              IF( (INW.EQ.0) .OR. (OLDWAVE(INW).EQ.PMISS) .OR.
+     X            (ISW.EQ.0) .OR. (OLDWAVE(ISW).EQ.PMISS) .OR.
+     X            (INE.EQ.0) .OR. (OLDWAVE(INE).EQ.PMISS) .OR.
+     X            (ISE.EQ.0) .OR. (OLDWAVE(ISE).EQ.PMISS) ) THEN
+                IF( (OLDWAVE(INW).EQ.PMISS) .AND.
+     X              (OLDWAVE(ISW).EQ.PMISS) .AND.
+     X              (OLDWAVE(INE).EQ.PMISS) .AND.
+     X              (OLDWAVE(ISE).EQ.PMISS) ) THEN
+                ENDIF
+C
+C               If so, take nearest grid point value.
+C
+                DISNW = DISTNEW(JPDISNW,NEXT)
+                DISNE = DISTNEW(JPDISNE,NEXT)
+                DISSW = DISTNEW(JPDISSW,NEXT)
+                DISSE = DISTNEW(JPDISSE,NEXT)
+C
+                IF( (DISNW.LE.DISNE).AND.
+     X              (DISNW.LE.DISSW).AND.
+     X              (DISNW.LE.DISSE)) THEN
+                  INDEX = INW
+C
+                ELSE IF( (DISNE.LE.DISSW).AND.
+     X                   (DISNE.LE.DISSE) ) THEN
+                  INDEX = INE
+C
+                ELSE IF( (DISSW.LE.DISSE) ) THEN
+                  INDEX = ISW
+C
+                ELSE
+                  INDEX = ISE
+                ENDIF
+C
+                IF(INDEX.EQ.0.OR.(OLDWAVE(INDEX).EQ.PMISS)) THEN
+C
+C                 Nearest point is missing
+C
+                  NEWWAVE(NEXTWV) = PMISS
+C
+                ELSE
+
+                  NEWWAVE(NEXTWV) =  OLDWAVE(INDEX)
+                ENDIF
+C
+              ELSE
+C
+C               Use bi-linear interpolation from four
+C               neighbouring sea points.
+C
+C
+                DI1N = DISTNEW(JPNW,NEXT)
+                DI2N = DISTNEW(JPNE,NEXT)
+                DI1S = DISTNEW(JPSW,NEXT)
+                DI2S = DISTNEW(JPSE,NEXT)
+                DK1  = DISTNEW(JPN,NEXT)
+                DK2  = DISTNEW(JPS,NEXT)
+C
+                 NW_PT =  OLDWAVE(INW)
+                 NE_PT =  OLDWAVE(INE)
+                 SW_PT =  OLDWAVE(ISW)
+                 SE_PT =  OLDWAVE(ISE)
+                IF( .NOT. LDIREC ) THEN
+                  U1 = NW_PT*DI2N + NE_PT*DI1N
+                  U2 = SW_PT*DI2S + SE_PT*DI1S
+                  NEWWAVE(NEXTWV) = U1*DK2 + U2*DK1
+                ELSE
+C
+C                 Fields representing a 'direction': resolve into
+C                 components and interpolate each separately.
+C
+                  CNW_PT = COS(NW_PT*RAD)
+                  CNE_PT = COS(NE_PT*RAD)
+                  CSW_PT = COS(SW_PT*RAD)
+                  CSE_PT = COS(SE_PT*RAD)
+                  SNW_PT = SIN(NW_PT*RAD)
+                  SNE_PT = SIN(NE_PT*RAD)
+                  SSW_PT = SIN(SW_PT*RAD)
+                  SSE_PT = SIN(SE_PT*RAD)
+                  C1 = CNW_PT*DI2N + CNE_PT*DI1N
+                  C2 = CSW_PT*DI2S + CSE_PT*DI1S
+                  CC = C1*DK2 + C2*DK1
+                  S1 = SNW_PT*DI2N + SNE_PT*DI1N
+                  S2 = SSW_PT*DI2S + SSE_PT*DI1S
+                  SS = S1*DK2 + S2*DK1
+                  IF( SS.LT.0.0 ) THEN
+                    NEWWAVE(NEXTWV) = ATAN2(SS,CC)/RAD + 360.0
+                  ELSE
+                    NEWWAVE(NEXTWV) = ATAN2(SS,CC)/RAD
+                  ENDIF
+                ENDIF
+              ENDIF
+            ENDIF
+          ENDDO
+C
+        ENDIF
+        ISTART = ISTART + NUMNEW(NROW)
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wavexxx.F b/interpolation/wavexxx.F
new file mode 100755
index 0000000..2ed142e
--- /dev/null
+++ b/interpolation/wavexxx.F
@@ -0,0 +1,645 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WAVEXXX(ISEC2, ISEC4, NLATS, STEPNS, STEPWE,
+     X                         OLDWAVE, NEWIDX, DISTNEW,
+     X                         NEWWAVE, NORTH, WEST, PMISS)
+C
+C---->
+C*****WAVEXXX*
+C
+C     PURPOSE
+C     -------
+C
+C     Interpolates wave fields (except 2D spectra).
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WAVEXXX(ISEC2, ISEC4, NLATS, STEPNS, STEPWE,
+C    X               OLDWAVE, NEWIDX, DISTNEW,
+C    X               NEWWAVE, NORTH, WEST, PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     ISEC2   - Unpacked section 2 header from 2D wave spectra field
+C     ISEC4   - Unpacked section 4 header from 2D wave spectra field
+C     NLATS   - Number of points N-S in new grid
+C     STEPNS  - Output grid north-south resolution (degrees)
+C     STEPWE  - Output grid west-east resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degrees)
+C     WEST    - Output grid westernmost longitude (degrees)
+C     PMISS   - Missing data value 
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX  - Indices of four neighbouring old grid points used for
+C               new grid points
+C     DISTNEW - Distances of surrounding box edges from new grid points
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Builds the index of neighbouring points for the output grid.
+C     Then works through the output grid points, checking for subarea
+C     boundaries and looking up neighbouring point values and weights.
+C     (Neighbours may have missing data).
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WAVEIDX - determines which nearest-neighbour values to use for
+C               interpolating to new output grid point
+C     NUMPTWE - Calculates number of grid points between west/east
+C               area boundaries
+C     VALPINA - Looks up bitmap value
+C     SOFFSET - Finds the section offsets in GRIB message
+C     INTLOG  - Log error message
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    January 1998
+C
+C
+C     Modifications
+C     -------------
+C     Handle reduced lat/long grid in 'pseudo-gaussian' layout
+C     J.D.Chambers      ECMWF    November 2003
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMXLAT
+      PARAMETER (JPROUTINE = 40100)
+      PARAMETER (JPMXLAT = 1801)
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW = 1)
+      PARAMETER (JPNE = 2)
+      PARAMETER (JPSW = 3)
+      PARAMETER (JPSE = 4)
+      PARAMETER (JPN  = 5)
+      PARAMETER (JPS  = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Subroutine arguments
+C
+      INTEGER ISEC2, ISEC4, NLATS
+      DIMENSION ISEC2(*), ISEC4(*)
+      REAL STEPNS, STEPWE, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      REAL ONORTH
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(4,*)
+      REAL*4 DISTNEW
+      DIMENSION DISTNEW(10,*)
+C
+C     Local arguments
+C
+      INTEGER IEOFSET, IWOFSET, ISTART, IWEST
+      REAL SOUTH, PTLAT, AWEST, EAST, PTLONG, OLDWEST, OLDEAST
+      REAL REFVAL, SCALE
+      INTEGER NSPT1, INSPT, NEXP, NMANT, NRETA, NRETB, NLENG, NBIT
+      INTEGER NPARAM, ISCALE, NSCALE, IBITS, ITEMP
+      INTEGER IRET, IS0, IS1, IS2, IS3, IS4, IEDITN
+      INTEGER NEXT, NEXTWV, NROW, NCOL, INDEX, ILOCATE
+      INTEGER MISSLAT, LOOP, NPTS, NUMLATS, NUMNEW, KOLDNUM, KNEWNUM
+      DIMENSION NPTS(JPMXLAT), NUMNEW(JPMXLAT)
+      REAL RLATINC, OLDLATS, NEWLATS, ROWINC
+      DIMENSION OLDLATS(JPMXLAT), NEWLATS(JPMXLAT)
+      LOGICAL LDIREC
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*4 NW_PT, NE_PT, SW_PT, SE_PT
+      REAL*4 RAD
+      DATA RAD/0.017453293/
+      REAL*4 DI1N, DI1S, DI2N, DI2S, DK1, DK2
+      REAL*4 CNW_PT, CNE_PT, CSW_PT, CSE_PT
+      REAL*4 SNW_PT, SNE_PT, SSW_PT, SSE_PT
+      REAL*4 U1, U2, C1, C2, S1, S2, CC, SS
+      INTEGER INW, INE, ISW, ISE, JNW, JNE, JSW, JSE
+C
+C     Externals
+C
+      INTEGER WAVEIDX, SOFFSET, VALPINA, NUMPTWE
+      EXTERNAL WAVEIDX, SOFFSET, VALPINA, NUMPTWE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WAVEXXX = 0
+
+C
+C     Initialise the bitmap value lookup function
+C
+      IRET = VALPINA(0,0,0)
+C
+      MISSLAT = 0
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      NUMLATS = (180000/ISEC2(10)) + 1
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Number of latitudes in input grid = ',NUMLATS)
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: And is greater than allowed maximum = ',JPMXLAT)
+        WAVEXXX = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+      RLATINC = FLOAT(ISEC2(10))
+cs      RLATINC = FLOAT(ISEC2(10)/1000)
+C
+C     Fill an array with the number of points at each latitude for the
+C     input field.
+C
+      IF( ISEC2(17).EQ.1 ) THEN
+C
+C       Input field is a reduced latitude/longitude grid
+C
+C       .. but it may be 'pseudo-gaussian' in layout
+C       (ie global, symmetric about the equator but no latitude
+C        at the equator)
+C
+        IF( (ISEC2(4).NE.90000).AND.(MOD(ISEC2(3),2).EQ.0) ) THEN
+C
+          NUMLATS = ISEC2(3)
+cs          RLATINC = FLOAT(ISEC2(10))/1000
+cs          ONORTH = FLOAT(ISEC2(4))/1000
+          ONORTH = FLOAT(ISEC2(4))
+C
+          DO LOOP = 1, NUMLATS
+cs            OLDLATS(LOOP) = ONORTH - (LOOP-1)*RLATINC
+            OLDLATS(LOOP) = (ONORTH - (LOOP-1)*RLATINC)/1000
+          ENDDO
+C
+          DO LOOP = 1, ISEC2(3)
+            NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+          ENDDO
+C
+        ELSE
+C
+          DO LOOP = 1, NUMLATS
+            OLDLATS(LOOP) = (90000.0 - (LOOP-1)*RLATINC)/1000
+cs            OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+          ENDDO
+C
+          MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+          DO LOOP = 1, MISSLAT
+            NPTS(LOOP)    = 0
+          ENDDO
+          KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+          DO LOOP = 1, (KOLDNUM-MISSLAT)
+            NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+          ENDDO
+          DO LOOP = (KOLDNUM+1), NUMLATS
+            NPTS(LOOP)    = 0
+          ENDDO
+        ENDIF
+C
+      ELSE
+C
+C       Input field is a regular latitude/longitude grid
+C
+C
+        DO LOOP = 1, NUMLATS
+cs          OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+            OLDLATS(LOOP) = (90000.0 - (LOOP-1)*RLATINC)/1000
+        ENDDO
+C
+        MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+        DO LOOP = 1, MISSLAT
+          NPTS(LOOP)    = 0
+        ENDDO
+        KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+        DO LOOP = 1, (KOLDNUM-MISSLAT)
+          NPTS(LOOP+MISSLAT) = ISEC2(2)
+        ENDDO
+        DO LOOP = (KOLDNUM+1), NUMLATS
+          NPTS(LOOP)    = 0
+        ENDDO
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Setup number of points at each latitude for the
+C                output latitude/longitude field.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+C
+C       Reduced (quasi-regular) gaussian output
+C
+        KNEWNUM = NOGAUSS*2
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROGAUSS(LOOP)
+        ENDDO
+C
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+C
+C       Reduced (quasi-regular) lat/long output
+C
+        KNEWNUM = NOREDLL
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROREDLL(LOOP)
+        ENDDO
+C
+      ELSE
+C
+C       Regular output
+C
+        MISSLAT = NINT((90.0 - NORTH)/STEPNS)
+        DO LOOP = 1, MISSLAT
+          NUMNEW(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, NLATS
+          NUMNEW(LOOP+MISSLAT) = NINT(360.0/STEPWE)
+        ENDDO
+C
+        KNEWNUM = MISSLAT + NLATS
+        DO LOOP = 1, KNEWNUM
+          NEWLATS(LOOP) = 90.0 - (LOOP-1)*STEPNS
+        ENDDO
+C
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 3. Get the input GRIB field characteristics.
+C ---------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Calculate the indices of the input grid points to be used for
+C     the output points
+C
+      OLDWEST = FLOAT(NIAREA(2))/PPMULT
+      OLDEAST = FLOAT(NIAREA(4))/PPMULT
+
+      WAVEXXX = WAVEIDX(NUMLATS,NPTS,OLDLATS,OLDWEST,OLDEAST,
+     X                  KNEWNUM, NUMNEW, NEWLATS,
+     X                  NEWIDX, DISTNEW)
+      IF( WAVEXXX.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Unable to calculate output grid indices',JPQUIET)
+        WAVEXXX = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Find bitmap (section 3) offset the GRIB product
+C
+      IRET = SOFFSET(OLDWAVE, IS0, IS1, IS2, IS3, IS4, IEDITN)
+C
+C     Get the overall length of OLDWAVE
+C
+#ifdef INTEGER_8
+      NBIT = 64
+#else
+      NBIT = 32
+#endif
+      INSPT = (IS0 + 4) * 8
+      CALL INXBIT(OLDWAVE,10,INSPT,NLENG,1,NBIT,24,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Problem extracting overall length of GRIB',JPQUIET)
+        WAVEXXX = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Get parameter identifier
+C
+      INSPT = (IS1 + 8) * 8
+      CALL INXBIT(OLDWAVE,10,INSPT,NPARAM,1,NBIT,8,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Problem getting parameter identifier',JPQUIET)
+        WAVEXXX = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Wave direction parameters need special handling
+C     (MWD, MDWW, MDPS, MDWI)
+C
+      LDIREC = ( (NPARAM.EQ.230) .OR.
+     X           (NPARAM.EQ.235) .OR.
+     X           (NPARAM.EQ.238) .OR.
+     X           (NPARAM.EQ.242) )
+C
+C     Get the scale factor
+C
+      INSPT = (IS4 + 4) * 8
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NSCALE,1,NBIT,16,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Problem extracting scale factor in GRIB',JPQUIET)
+        WAVEXXX = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+      CALL DSGNBT(ISCALE,NSCALE,16,NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Problem setting sign of scale factor',JPQUIET)
+        WAVEXXX = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+      SCALE = 2.0**(FLOAT(ISCALE))
+C
+C     Get the reference value
+C
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NEXP,1,NBIT,8,'D',NRETA)
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NMANT,1,NBIT,24,'D',NRETB)
+      IF( (NRETA.NE.0) .OR. (NRETB.NE.0) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Problem getting reference value from GRIB',JPQUIET)
+        WAVEXXX = JPROUTINE + 7
+        GOTO 900
+      ENDIF
+      CALL DECFP2(REFVAL,NEXP,NMANT)
+C
+C     Get number of bits per packed value
+C
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,IBITS,1,NBIT,8,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WAVEXXX: Problem getting number of bits per word',JPQUIET)
+        WAVEXXX = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+      NSPT1 = INSPT
+C
+C ---------------------------------------------------------------------
+C*    Section 4. Work through the output subarea.
+C ---------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Fill in the wave spectra values
+C
+      NEXT = 0
+      NEXTWV = 0
+C
+      SOUTH = NOAREA(3)/PPMULT
+      EAST  = NOAREA(4)/PPMULT
+      ISTART = 0
+C
+C     Work down through latitudes from north to south.
+C
+
+
+      DO NROW = 1, KNEWNUM
+C
+C       If inside north-south (subarea) boundaries ..
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          PTLAT = ROGAUSS(NROW)
+        ELSE
+          PTLAT = 90.0 - (NROW-1)*STEPNS
+        ENDIF
+        IF( (PTLAT.LE.NORTH).AND.(ABS(PTLAT-SOUTH).GT.-0.0005) ) THEN
+C
+C         Calculate number of points between west boundary of area and
+C         Greenwich
+C
+          ROWINC = 360.0/NUMNEW(NROW)
+C
+          IWEST = INT(WEST/ROWINC)
+          IF( (WEST.GT.0.0).AND.(WEST.NE.(IWEST*ROWINC)) )
+     X      IWEST = IWEST + 1
+          AWEST = IWEST * ROWINC
+          IWOFSET = NUMPTWE(AWEST,0.0,ROWINC)
+          IEOFSET = NUMPTWE(AWEST,EAST,ROWINC)
+C
+C         Work through subarea longitudes from west to east.
+C
+          DO NCOL = 1, NUMNEW(NROW)
+            PTLONG = AWEST + (NCOL-1)*ROWINC
+            NEXT = NUMPTWE(AWEST,PTLONG,ROWINC)
+            IF( (NEXT.LE.IEOFSET).AND.(NEXT.GE.0) ) THEN
+C
+C             .. and inside west-east (subarea) boundaries
+C
+              NEXT = 1 + NEXT - IWOFSET
+              IF( NEXT.LE.0) NEXT = NEXT + NUMNEW(NROW)
+              NEXT = NEXT + ISTART
+              NEXTWV = NEXTWV + 1
+C
+              INW = NEWIDX(JPNW,NEXT)
+              INE = NEWIDX(JPNE,NEXT)
+              ISW = NEWIDX(JPSW,NEXT)
+              ISE = NEWIDX(JPSE,NEXT)
+C
+C             If there is a bitmap, ...
+C
+              IF( IS3.NE.0 ) THEN
+                IF(INW.NE.0) JNW = VALPINA(OLDWAVE, IS3+6, INW)
+                IF(INE.NE.0) JNE = VALPINA(OLDWAVE, IS3+6, INE)
+                IF(ISW.NE.0) JSW = VALPINA(OLDWAVE, IS3+6, ISW)
+                IF(ISE.NE.0) JSE = VALPINA(OLDWAVE, IS3+6, ISE)
+              ELSE
+                JNW = INW
+                JNE = INE
+                JSW = ISW
+                JSE = ISE
+              ENDIF
+C
+C             Test if any of the four neighbouring points is missing.
+C
+              IF( (INW.EQ.0) .OR. (INE.EQ.0) .OR.
+     X            (ISW.EQ.0) .OR. (ISE.EQ.0) .OR.
+     X            (JNW.EQ.0) .OR. (JNE.EQ.0) .OR.
+     X            (JSW.EQ.0) .OR. (JSE.EQ.0) ) THEN
+c 
+C
+C               If so, take nearest grid point value.
+C
+                DISNW = DISTNEW(JPDISNW,NEXT)
+                DISNE = DISTNEW(JPDISNE,NEXT)
+                DISSW = DISTNEW(JPDISSW,NEXT)
+                DISSE = DISTNEW(JPDISSE,NEXT)
+C
+                IF( (DISNW.LE.DISNE).AND.
+     X              (DISNW.LE.DISSW).AND.
+     X              (DISNW.LE.DISSE)) THEN
+                  INDEX = INW
+                  ILOCATE  = JNW
+C
+                ELSE IF( (DISNE.LE.DISSW).AND.
+     X                   (DISNE.LE.DISSE) ) THEN
+                  INDEX = INE
+                  ILOCATE  = JNE
+C
+                ELSE IF( (DISSW.LE.DISSE) ) THEN
+                  INDEX = ISW
+                  ILOCATE  = JSW
+C
+                ELSE
+                  INDEX = ISE
+                  ILOCATE  = JSE
+                ENDIF
+C
+                IF( (INDEX.EQ.0).OR.(ILOCATE.EQ.0) ) THEN
+C
+C                 Nearest point is missing
+C
+                  NEWWAVE(NEXTWV) = PMISS
+C
+                ELSE
+                  INSPT = NSPT1 + (ILOCATE - 1)*IBITS
+                  CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                        NBIT,IBITS,'D',NRETA)
+                  IF( NRETA.NE.0 ) THEN
+                    CALL INTLOG(JP_ERROR,
+     X              'WAVEXXX: Problem getting nearest neighbour value',
+     X              JPQUIET)
+                    WAVEXXX = JPROUTINE + 9
+                  GOTO 900
+                  ENDIF
+                  NEWWAVE(NEXTWV) = REFVAL + FLOAT(ITEMP)*SCALE
+                ENDIF
+C
+              ELSE
+C
+C               Use bi-linear interpolation from four
+C               neighbouring sea points.
+C
+                INSPT = NSPT1 + (JNW - 1)*IBITS
+                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                      NBIT,IBITS,'D',NRETA)
+                IF( NRETA.NE.0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X            'WAVEXXX: Problem getting NW neighbour value',
+     X            JPQUIET)
+                  WAVEXXX = JPROUTINE + 10
+                  GOTO 900
+                ENDIF
+                NW_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+                INSPT = NSPT1 + (JNE - 1)*IBITS
+                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                      NBIT,IBITS,'D',NRETA)
+                IF( NRETA.NE.0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X            'WAVEXXX: Problem getting NE neighbour value',
+     X            JPQUIET)
+                  WAVEXXX = JPROUTINE + 10
+                  GOTO 900
+                ENDIF
+                NE_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+                INSPT = NSPT1 + (JSW - 1)*IBITS
+                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                      NBIT,IBITS,'D',NRETA)
+                IF( NRETA.NE.0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X            'WAVEXXX: Problem getting SW neighbour value',
+     X            JPQUIET)
+                  WAVEXXX = JPROUTINE + 10
+                  GOTO 900
+                ENDIF
+                SW_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+                INSPT = NSPT1 + (JSE - 1)*IBITS
+                CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                      NBIT,IBITS,'D',NRETA)
+                IF( NRETA.NE.0 ) THEN
+                  CALL INTLOG(JP_ERROR,
+     X            'WAVEXXX: Problem getting SE neighbour value',
+     X            JPQUIET)
+                  WAVEXXX = JPROUTINE + 10
+                  GOTO 900
+                ENDIF
+                SE_PT = REFVAL + FLOAT(ITEMP)*SCALE
+C
+                DI1N = DISTNEW(JPNW,NEXT)
+                DI2N = DISTNEW(JPNE,NEXT)
+                DI1S = DISTNEW(JPSW,NEXT)
+                DI2S = DISTNEW(JPSE,NEXT)
+                DK1  = DISTNEW(JPN,NEXT)
+                DK2  = DISTNEW(JPS,NEXT)
+C
+                IF( .NOT. LDIREC ) THEN
+                  U1 = NW_PT*DI2N + NE_PT*DI1N
+                  U2 = SW_PT*DI2S + SE_PT*DI1S
+                  NEWWAVE(NEXTWV) = U1*DK2 + U2*DK1
+                ELSE
+C
+C                 Fields representing a 'direction': resolve into
+C                 components and interpolate each separately.
+C
+                  CNW_PT = COS(NW_PT*RAD)
+                  CNE_PT = COS(NE_PT*RAD)
+                  CSW_PT = COS(SW_PT*RAD)
+                  CSE_PT = COS(SE_PT*RAD)
+                  SNW_PT = SIN(NW_PT*RAD)
+                  SNE_PT = SIN(NE_PT*RAD)
+                  SSW_PT = SIN(SW_PT*RAD)
+                  SSE_PT = SIN(SE_PT*RAD)
+                  C1 = CNW_PT*DI2N + CNE_PT*DI1N
+                  C2 = CSW_PT*DI2S + CSE_PT*DI1S
+                  CC = C1*DK2 + C2*DK1
+                  S1 = SNW_PT*DI2N + SNE_PT*DI1N
+                  S2 = SSW_PT*DI2S + SSE_PT*DI1S
+                  SS = S1*DK2 + S2*DK1
+                  IF( SS.LT.0.0 ) THEN
+                    NEWWAVE(NEXTWV) = ATAN2(SS,CC)/RAD + 360.0
+                  ELSE
+                    NEWWAVE(NEXTWV) = ATAN2(SS,CC)/RAD
+                  ENDIF
+                ENDIF
+              ENDIF
+            ENDIF
+          ENDDO
+C
+        ENDIF
+        ISTART = ISTART + NUMNEW(NROW)
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wv2di32.F b/interpolation/wv2di32.F
new file mode 100755
index 0000000..6e21234
--- /dev/null
+++ b/interpolation/wv2di32.F
@@ -0,0 +1,342 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DI32(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+     X                         KNEWNUM,NUMNEW,NEWLATS,NEWWAVE)
+C
+C---->
+C*****WV2DI32*
+C
+C     PURPOSE
+C     -------
+C
+C     Determines which nearest-neighbour values of an input global wave
+C     2D-spectra grid field to use for an output global wave 2D-spectra
+C     grid field.
+C     (32-bit REALs version)
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DI32(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+C    X               KNEWNUM,NUMNEW,NEWLATS,NEWWAVE)
+C
+C     Input arguments
+C     ---------------
+C
+C     KOLDNUM - No. of meridians from North to South pole (input field)
+C     NUMOLD  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     OLDLATS - input field latitudes
+C     OLDWEST - western longitude of the input field (degrees)
+C     OLDEAST - eastern longitude of the input field (degrees)
+C
+C     KNEWNUM - No. of meridians from North to South pole (output field)
+C     NUMNEW  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     NEWLATS - output field latitudes
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWWAVE - Indices of points to use
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     The index of the nearest neighbouring grid point value of
+C     the input field is assigned to each point of the output
+C     grid.
+C     The index is zero if the output grid point is 'missing'.
+C
+C     The input field can be regular or quasi-regular, and can be
+C     global or a subarea.
+C     The output field can be regular or quasi-regular.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    October  1997
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19410 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 721 )
+C                             `--> allow upto 0.25 degree resolution
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 720 )
+C                             `--> allow upto 0.25 degree resolution
+C
+C     Function arguments
+C
+      INTEGER KOLDNUM, NUMOLD, KNEWNUM, NUMNEW
+      DIMENSION NUMOLD(*), NUMNEW(*)
+      REAL*4 OLDWEST, OLDEAST, OLDLATS, NEWLATS
+      DIMENSION OLDLATS(*), NEWLATS(*)
+      INTEGER NEWWAVE
+      DIMENSION NEWWAVE(*)
+C
+C     Local arguments
+C
+      INTEGER K, NEWCOL, NEWROW, INCOL, LOOP, NEXT
+      INTEGER I_NW, I_SW, I_N, I_S, I_NE, I_SE
+      REAL*8 DELONGN, DELONGS, DIFF, RESOL, DINC
+      REAL*8 DIST_NW, DIST_SW, DIST_NE, DIST_SE, DIST_N, DIST_S
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*8 ZXIN, ZXIS, LON, LAT, OWEST, OEAST
+      DIMENSION LON(JPNMOUT*2)
+      LOGICAL LINGNS, LINGWE
+      INTEGER INDEXI
+      DIMENSION INDEXI(JPLLMAX)
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DI32 = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WV2DI32: Wave interpolation requested.',JPQUIET)
+C
+C     Check latitude/longitude grid specification
+      IF( KOLDNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DI32: Number of latitudes in input grid = ',KOLDNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DI32: And is greater than allowed maximum = ',JPLLMAX)
+        WV2DI32 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Set up INDEXI for latitude lines in input lat/lon array
+C
+      INDEXI(1) = 0
+      DO LOOP = 2, KOLDNUM
+        INDEXI(LOOP) = INDEXI(LOOP-1) + NUMOLD(LOOP-1)
+      ENDDO
+C
+      OEAST = OLDEAST
+      OWEST = OLDWEST
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO 220 NEWROW = 1, KNEWNUM
+C
+C       Find old latitude rows to north and south of new latitude and
+C       set up the distance between new row and the old rows to N and S.
+C
+        DO LOOP = 1, KOLDNUM -1
+          IF( (NEWLATS(NEWROW).LE.OLDLATS(LOOP)) .AND.
+     X        (NEWLATS(NEWROW).GT.OLDLATS(LOOP+1)) ) THEN
+            I_N = LOOP
+            I_S = MIN(LOOP+1,KOLDNUM)
+            GOTO 205
+          ENDIF
+        ENDDO
+C
+        IF( NEWLATS(NEWROW).EQ.OLDLATS(KOLDNUM) ) THEN
+          I_N = KOLDNUM
+          I_S = KOLDNUM
+        ELSE
+          I_N = -1
+          I_S = -1
+        ENDIF
+C
+  205   CONTINUE
+        IF( I_N.NE.I_S) THEN
+          DIFF   = OLDLATS(I_N) - OLDLATS(I_S)
+          DIST_N = (OLDLATS(I_N) - NEWLATS(NEWROW)) / DIFF
+        ELSE
+          DIST_N = 1.0
+        ENDIF
+        DIST_S = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        LINGNS = .FALSE.
+        IF( I_N.GT.0 ) THEN
+          IF( (NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).GT.0) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+            DINC = 360.0/DBLE(NUMOLD(I_N))
+            DELONGN = (DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                 +DINC) / DBLE(NUMOLD(I_N))
+            DINC = 360.0/DBLE(NUMOLD(I_S))
+            DELONGS = (DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                 +DINC) / DBLE(NUMOLD(I_S))
+            LINGNS  = .TRUE.
+          ENDIF
+C
+C         The equator is given special treatment so that the northern
+C         and southern hemispheres for the parameter 250 can (later)
+C         be stitched together.
+C
+C         If the input field finishs at the equator and the output
+C         field has a line at the equator, use the input equator for
+C         interpolation.
+C
+          IF( NEWLATS(I_N).EQ.0.0 .AND.
+     x        ((NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).EQ.0)) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+            DINC = 360.0/DBLE(NUMOLD(I_N))
+            DELONGN = (DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                 +DINC) / DBLE(NUMOLD(I_N))
+            DELONGS = DELONGN
+            DIST_N = 0.0
+            DIST_S = 1.0
+            LINGNS  = .TRUE.
+          ENDIF
+        ENDIF
+C
+C       Setup longitudes for the current row
+C
+        INCOL = NUMNEW(NEWROW)
+        IF( INCOL.NE.0 ) THEN
+          RESOL = 360.0/DBLE(INCOL)
+          DO LOOP = 1, INCOL
+            LON(LOOP) = DBLE(LOOP-1)*RESOL
+          ENDDO
+C
+          DO 210 NEWCOL = 1, INCOL
+C
+            LINGWE = (LON(NEWCOL).GT.OWEST).OR.(LON(NEWCOL).LT.OEAST)
+C
+            IF( LINGNS .AND. LINGWE ) THEN
+C
+C             If point to be interpolated is inside the input field ,
+C             work out distances from new point to four neighbours.
+C
+              ZXIN = DMOD( (LON(NEWCOL) + (360.0-OWEST) + DBLE(720.0)),
+     X                     DBLE(360.0))
+              ZXIS = ZXIN
+              ZXIN = ZXIN/DELONGN + 1.0
+              ZXIS = ZXIS/DELONGS + 1.0
+              I_NW = INT(ZXIN)
+              I_NE = I_NW + 1
+              I_SW = INT(ZXIS)
+              I_SE = I_SW + 1
+C
+C             Allow wrap-around
+C
+C
+              I_NW = MOD(I_NW,NUMOLD(I_N))
+              I_NE = MOD(I_NE,NUMOLD(I_N))
+              I_SW = MOD(I_SW,NUMOLD(I_S))
+              I_SE = MOD(I_SE,NUMOLD(I_S))
+              IF( I_NW.EQ.0 ) I_NW = NUMOLD(I_N)
+              IF( I_SW.EQ.0 ) I_SW = NUMOLD(I_S)
+              IF( I_NE.EQ.0 ) I_NE = NUMOLD(I_N)
+              IF( I_SE.EQ.0 ) I_SE = NUMOLD(I_S)
+C
+C             Calculate distance from interpolated point to its neighbours
+C
+              DIST_NW = ZXIN - REAL(I_NW)
+              DIST_NE = 1.0 - DIST_NW
+              DIST_SW = ZXIS - REAL(I_SW)
+              DIST_SE = 1.0 - DIST_SW
+C
+C             Take nearest grid point value.
+C
+              DISNW = DIST_NW*DIST_NW + DIST_N*DIST_N
+              DISNE = DIST_NE*DIST_NE + DIST_N*DIST_N
+              DISSW = DIST_SW*DIST_SW + DIST_S*DIST_S
+              DISSE = DIST_SE*DIST_SE + DIST_S*DIST_S
+C
+              IF( (DISNW.LE.DISNE).AND.(DISNW.LE.DISSW).AND.
+     X            (DISNW.LE.DISSE) ) THEN
+C
+C               Use north-west neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_N)+I_NW
+C
+              ELSE IF( (DISNE.LE.DISSW).AND.(DISNE.LE.DISSE) ) THEN
+C
+C               Use north-east neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_N)+I_NE
+C
+              ELSE IF( DISSW.LE.DISSE ) THEN
+C
+C               Use south-west neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_S)+I_SW
+              ELSE
+C
+C               Use south-east neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_S)+I_SE
+              ENDIF
+C
+C           If the point to be interpolated is outside the input field,
+C           set it to 'land'.
+C
+            ELSE
+              NEWWAVE(NEXT) = 0
+            ENDIF
+C
+            NEXT = NEXT + 1
+C
+  210     CONTINUE
+C
+        ENDIF
+C
+  220 CONTINUE
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( WV2DI32.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG, 'WV2DI32: successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_ERROR, 'WV2DI32: failed.',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/wv2didx.F b/interpolation/wv2didx.F
new file mode 100755
index 0000000..34db56b
--- /dev/null
+++ b/interpolation/wv2didx.F
@@ -0,0 +1,388 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DIDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+     X                         KNEWNUM,NUMNEW,NEWLATS,NEWWAVE)
+C
+C---->
+C*****WV2DIDX*
+C
+C     PURPOSE
+C     -------
+C
+C     Determines which nearest-neighbour values of an input global wave
+C     2D-spectra grid field to use for an output global wave 2D-spectra
+C     grid field.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DIDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+C    X               KNEWNUM,NUMNEW,NEWLATS,NEWWAVE)
+C
+C     Input arguments
+C     ---------------
+C
+C     KOLDNUM - No. of meridians from North to South pole (input field)
+C     NUMOLD  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     OLDLATS - input field latitudes
+C     OLDWEST - western longitude of the input field (degrees)
+C     OLDEAST - eastern longitude of the input field (degrees)
+C
+C     KNEWNUM - No. of meridians from North to South pole (output field)
+C     NUMNEW  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     NEWLATS - output field latitudes
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWWAVE - Indices of points to use
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     The index of the nearest neighbouring grid point value of
+C     the input field is assigned to each point of the output
+C     grid.
+C     The index is zero if the output grid point is 'missing'.
+C
+C     The input field can be regular or quasi-regular, and can be
+C     global or a subarea.
+C     The output field can be regular or quasi-regular.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    October  1997
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19410 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution
+C
+C     Function arguments
+C
+      INTEGER KOLDNUM, NUMOLD, KNEWNUM, NUMNEW
+      DIMENSION NUMOLD(*), NUMNEW(*)
+      REAL OLDWEST, OLDEAST, OLDLATS, NEWLATS
+      DIMENSION OLDLATS(*), NEWLATS(*)
+      INTEGER NEWWAVE
+      DIMENSION NEWWAVE(*)
+C
+C     Local arguments
+C
+      INTEGER K, NEWCOL, NEWROW, INCOL, LOOP, NEXT, NUMMAX
+      INTEGER I_NW, I_SW, I_N, I_S, I_NE, I_SE
+      REAL*8 DELONGN, DELONGS, DIFF, RESOL, DINC, DEPS
+      REAL*8 DIST_NW, DIST_SW, DIST_NE, DIST_SE, DIST_N, DIST_S
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*8 ZXIN, ZXIS, LON, LAT, OWEST, OEAST
+      DIMENSION LON(JPNMOUT*2)
+      LOGICAL LINGNS, LINGWE
+      INTEGER INDEXI
+      DIMENSION INDEXI(JPLLMAX)
+      LOGICAL LGLOBAL, LFULLG, LGWRAP
+      DATA DEPS/0.00005/
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DIDX = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WV2DIDX: Wave interpolation requested.',JPQUIET)
+C
+C     Check latitude/longitude grid specification
+      IF( KOLDNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DIDX: Number of latitudes in input grid = ',KOLDNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DIDX: And is greater than allowed maximum = ',JPLLMAX)
+        WV2DIDX = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Set up INDEXI for latitude lines in input lat/lon array
+C
+
+      INDEXI(1) = 0
+      DO LOOP = 2, KOLDNUM
+        INDEXI(LOOP) = INDEXI(LOOP-1) + NUMOLD(LOOP-1)
+      ENDDO
+C
+      OEAST = OLDEAST
+      OWEST = OLDWEST
+
+C     Check whether the input field is global or a subarea
+C
+      NUMMAX = NUMOLD(1)
+      DO LOOP = 2, KOLDNUM
+        IF( NUMOLD(LOOP).GT.NUMMAX ) NUMMAX = NUMOLD(LOOP)
+      ENDDO
+      IF( NUMMAX.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DIDX: Input wave field has no points',JPQUIET)
+        WV2DIDX = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      LGWRAP = ABS((OEAST-OWEST) - DBLE(360.0)).LT.DEPS
+      DINC = 360.0/DBLE(NUMMAX)
+      LFULLG = ABS((DMOD((OEAST-OWEST+DBLE(360.0)),DBLE(360.0))
+     X              +DINC)-DBLE(360.0)).LT.DEPS
+C
+      LGLOBAL = LFULLG.OR.LGWRAP
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO 220 NEWROW = 1, KNEWNUM
+C
+C       Find old latitude rows to north and south of new latitude and
+C       set up the distance between new row and the old rows to N and S.
+C
+        DO LOOP = 1, KOLDNUM -1
+          IF( (NEWLATS(NEWROW).LE.OLDLATS(LOOP)) .AND.
+     X        (NEWLATS(NEWROW).GT.OLDLATS(LOOP+1)) ) THEN
+            I_N = LOOP
+            I_S = MIN(LOOP+1,KOLDNUM)
+            GOTO 205
+          ENDIF
+        ENDDO
+C
+        IF( NEWLATS(NEWROW).EQ.OLDLATS(KOLDNUM) ) THEN
+          I_N = KOLDNUM
+          I_S = KOLDNUM
+        ELSE
+          I_N = -1
+          I_S = -1
+        ENDIF
+C
+  205   CONTINUE
+        IF( I_N.NE.I_S) THEN
+          DIFF   = OLDLATS(I_N) - OLDLATS(I_S)
+          DIST_N = (OLDLATS(I_N) - NEWLATS(NEWROW)) / DIFF
+        ELSE
+          DIST_N = 1.0
+        ENDIF
+        DIST_S = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        LINGNS = .FALSE.
+        IF( I_N.GT.0 ) THEN
+          IF( (NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).GT.0) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+C
+C           Note that the grid increments are different depending on
+C           whether or not the grid is global; global grids have an
+C           extra interval at the end (eg between 358.5 and 0.0), while
+C           subareas have outer limits defined by 'west' and 'east' and
+C           a given number of points in between.
+C
+            IF( LGLOBAL ) THEN
+              DELONGN = 360.0/DBLE(NUMOLD(I_N))
+              DELONGS = 360.0/DBLE(NUMOLD(I_S))
+            ELSE
+              DINC = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))/
+     X                 DBLE(NUMOLD(I_N))
+
+              DELONGN = (DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                 +DINC) / DBLE(NUMOLD(I_N))
+              DINC = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))/
+     X                 DBLE(NUMOLD(I_S))
+              DELONGS = (DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                 +DINC) / DBLE(NUMOLD(I_S))
+            ENDIF
+c
+
+            LINGNS  = .TRUE.
+          ENDIF
+C
+C         The equator is given special treatment so that the northern
+C         and southern hemispheres for the parameter 250 can (later)
+C         be stitched together.
+C
+C         If the input field finishs at the equator and the output
+C         field has a line at the equator, use the input equator for
+C         interpolation.
+C
+          IF( NEWLATS(NEWROW).EQ.0.0 .AND.
+     x        ((NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).EQ.0)) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+            IF( LGLOBAL ) THEN
+              DELONGN = 360.0/DBLE(NUMOLD(I_N))
+            ELSE
+              DINC = DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))/
+     X                 DBLE(NUMOLD(I_N))
+              DELONGN = (DMOD((OEAST-OWEST+DBLE(360.0)), DBLE(360.0))
+     X                 +DINC) / DBLE(NUMOLD(I_N))
+            ENDIF
+            DELONGS = DELONGN
+            DIST_N = 0.0
+            DIST_S = 1.0
+            I_S = I_N
+            LINGNS  = .TRUE.
+          ENDIF
+        ENDIF
+C
+C       Setup longitudes for the current row
+C
+        INCOL = NUMNEW(NEWROW)
+        IF( INCOL.NE.0 ) THEN
+             RESOL = 360.0/DBLE(INCOL)
+             DO LOOP = 1, INCOL
+               LON(LOOP) = DBLE(LOOP-1)*RESOL
+             ENDDO
+C
+          DO 210 NEWCOL = 1, INCOL
+C
+            LINGWE = (LON(NEWCOL).GT.OWEST).OR.(LON(NEWCOL).LT.OEAST)
+C
+            IF( LINGNS .AND. LINGWE ) THEN
+C
+C             If point to be interpolated is inside the input field ,
+C             work out distances from new point to four neighbours.
+C
+              ZXIN = DMOD( (LON(NEWCOL) + (360.0-OWEST) + DBLE(720.0)),
+     X                     DBLE(360.0))
+cs			  ZXIN = LON(NEWCOL)
+              ZXIS = ZXIN
+              ZXIN = ZXIN/DELONGN + 1.0
+              ZXIS = ZXIS/DELONGS + 1.0
+              I_NW = INT(ZXIN)
+              I_NE = I_NW + 1
+              I_SW = INT(ZXIS)
+              I_SE = I_SW + 1
+C
+C             Allow wrap-around
+C
+C
+              I_NW = MOD(I_NW,NUMOLD(I_N))
+              I_NE = MOD(I_NE,NUMOLD(I_N))
+              I_SW = MOD(I_SW,NUMOLD(I_S))
+              I_SE = MOD(I_SE,NUMOLD(I_S))
+              IF( I_NW.EQ.0 ) I_NW = NUMOLD(I_N)
+              IF( I_SW.EQ.0 ) I_SW = NUMOLD(I_S)
+              IF( I_NE.EQ.0 ) I_NE = NUMOLD(I_N)
+              IF( I_SE.EQ.0 ) I_SE = NUMOLD(I_S)
+C
+C             Calculate distance from interpolated point to its neighbours
+C
+              DIST_NW = ZXIN - REAL(I_NW)
+              DIST_NE = 1.0 - DIST_NW
+              DIST_SW = ZXIS - REAL(I_SW)
+              DIST_SE = 1.0 - DIST_SW
+C
+C             Take nearest grid point value.
+C
+              DISNW = DIST_NW*DIST_NW + DIST_N*DIST_N
+              DISNE = DIST_NE*DIST_NE + DIST_N*DIST_N
+              DISSW = DIST_SW*DIST_SW + DIST_S*DIST_S
+              DISSE = DIST_SE*DIST_SE + DIST_S*DIST_S
+C
+              IF( (DISNW.LE.DISNE).AND.(DISNW.LE.DISSW).AND.
+     X            (DISNW.LE.DISSE) ) THEN
+C
+C               Use north-west neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_N)+I_NW
+C
+              ELSE IF( (DISNE.LE.DISSW).AND.(DISNE.LE.DISSE) ) THEN
+C
+C               Use north-east neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_N)+I_NE
+C
+              ELSE IF( DISSW.LE.DISSE ) THEN
+C
+C               Use south-west neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_S)+I_SW
+              ELSE
+C
+C               Use south-east neighbour
+C
+                NEWWAVE(NEXT) = INDEXI(I_S)+I_SE
+              ENDIF
+C
+C           If the point to be interpolated is outside the input field,
+C           set it to 'land'.
+C
+            ELSE
+              NEWWAVE(NEXT) = 0
+            ENDIF
+C
+            NEXT = NEXT + 1
+C
+  210     CONTINUE
+C
+        ENDIF
+C
+  220 CONTINUE
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( WV2DIDX.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG, 'WV2DIDX: successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_ERROR, 'WV2DIDX: failed.',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/wv2dint.F b/interpolation/wv2dint.F
new file mode 100755
index 0000000..357c5a8
--- /dev/null
+++ b/interpolation/wv2dint.F
@@ -0,0 +1,301 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DINT(KNUM,NUMPTS,KE_W,KN_S,RESON,OLDWAVE,
+     X                         NEWWAVE,NORTH,WEST,KNSPEC,PMISS,RNS)
+C
+C---->
+C*****WV2DINT*
+C
+C     PURPOSE
+C     -------
+C
+C     To interpolate a wave field quasi-regular latitude
+C     longitude grid to a regular latitude/longitude grid.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DINT(KNUM,NUMPTS,KE_W,KN_S,RESON,OLDWAVE,
+C                    NEWWAVE,NORTH,WEST,KNSPEC,PMISS,RNS)
+C
+C     Input arguments
+C     ---------------
+C
+C     KNUM    - No. of meridians from North to South pole (input field)
+C     NUMPTS  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     KE_W    - First dimension of new array
+C               = Number of points E-W in new grid
+C     KN_S    - Second dimension of new array
+C               = Number of points N-S in new grid
+C     RESON   - Output grid resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degree)
+C     WEST    - Output grid westernmost  longitude (degree)
+C     KNSPEC  - Number of 2D spectra values at each wave point
+C     PMISS   - Missing data value 
+C     RNS     - Difference in degrees in NS disrection
+C
+C     Output arguments
+C     ----------------
+
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     The nearest neighbouring grid point value is assigned to
+C     the interpolated point.
+C
+C     The output (sub) is the same as the input area.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     Based on:
+C         SUBROUTINE INTERPOLATE
+C         Peter Janssen     ECMWF    September 1995
+C     and:
+C         SUBROUTINE EXPOINT
+C         Heinz Gunther     ECMWF    December  1989 
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    November 1996
+C
+C     J.D.Chambers      ECMWF    September 1998
+C     Modified to handle subarea input/output.
+C     The output (sub) is the same as the input area.
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19410 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution for
+C                                  Mediterranean, 0.1 for Global
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution for
+C                                  Mediterranean, 0.1 for Global
+C
+C     Subroutine arguments
+C
+      INTEGER KNUM, NUMPTS, KE_W, KN_S, KNSPEC
+      DIMENSION NUMPTS(*)
+      REAL RESON, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      REAL RNS
+      DIMENSION OLDWAVE(*)
+      DIMENSION NEWWAVE(KE_W,KN_S)
+C
+C     Local arguments
+C
+      INTEGER NLAT, K, I, NEWCOL, NEWROW,LOOP
+      INTEGER I_NW, I_SW, I_N, I_S, I_NE, I_SE
+      REAL DELONGN, DELONGS, DELAT
+      REAL DIST_NW, DIST_SW, DIST_NE, DIST_SE, DIST_N, DIST_S
+      REAL DISNW, DISNE, DISSW, DISSE
+      REAL ZXIN, ZXIS, LON, LAT
+      DIMENSION LON(JPNMOUT*2),LAT(JPNMOUT+1)
+      LOGICAL INGRID
+      INTEGER INDEX
+      DIMENSION INDEX(JPLLMAX)
+C
+      REAL OLDLATS(JPLLMAX), OLDEAST
+      INTEGER NEXT, NUMNEW(JPLLMAX)
+      INTEGER IRET, WV2DIDX,W251IDX
+      EXTERNAL WV2DIDX, W251IDX
+      INTEGER XKNUM,XKE_W,XKN_S
+      DATA XKNUM/-1/,XKE_W/-1/,XKN_S/-1/
+      REAL XRESON,XNORTH,XWEST
+      DATA XRESON/-999.0/,XNORTH/-999.0/,XWEST/-999.0/
+      INTEGER IFIRST, NEWIDX(1440*721)
+      DATA IFIRST/0/
+      REAL DEPS
+      DATA DEPS/0.00005/
+C
+      SAVE IFIRST,XKNUM,XKE_W,XKN_S,XRESON,XNORTH,XWEST,NEWIDX
+C
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DINT = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WV2DINT: Wave interpolation requested.',JPQUIET)
+C
+C     Check only new-style 2D wave spectra (parameter 251)
+C
+      IF( KNSPEC.GT.1 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DINT: Only single-value 2D spectra field allowed',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DINT: Value given = ',KNSPEC)
+        WV2DINT = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Check reduced latitude/longitude grid specification
+C
+      IF( KNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DINT: Number of latitudes in input lat/long grid = ',KNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DINT: And is greater than allowed maximum = ',JPLLMAX)
+        WV2DINT = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+C     Ensure working array dimensions are adequate for required output.
+C
+      IF( (KE_W.GT.JPNMOUT*2).OR.(KN_S.GT.JPNMOUT+1) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DINT: Internal array dimensions are too small',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DINT: for given lat/long output field.',JPQUIET)
+        WV2DINT = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Set up index for latitude lines in the input reduced lat/lon array
+C
+      INDEX(1) = 0
+      DO K = 2, KNUM
+        INDEX(K) = INDEX(K-1) + NUMPTS(K-1)
+      ENDDO
+C
+C     Calculate latitudes and longitudes of output grid points.
+C
+C
+      DO K = 1, KN_S
+        LAT(K) = NORTH - FLOAT(K-1)*RESON
+        NUMNEW(K)  = KE_W ! 0
+      ENDDO
+
+      DELAT  = RNS/(KNUM-1)
+
+      DO k=1,KNUM
+          OLDLATS(K) = NORTH - FLOAT(K-1)*DELAT
+      END DO
+C
+      IF( ABS((KE_W*RESON)-360.0).LT.DEPS ) THEN
+        OLDEAST = WEST + KE_W*RESON
+      ELSE
+        OLDEAST = WEST + (KE_W-1)*RESON
+      ENDIF
+C
+C     Initialise all points with 'missing data' indicator
+C
+      DO NEWROW = 1, KN_S
+        DO NEWCOL = 1, KE_W
+          NEWWAVE(NEWCOL,NEWROW) = PMISS
+        ENDDO
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+C     Only calculate the indices on the first time through
+C
+      IF( (IFIRST.EQ.0 )     .OR.
+     X    ( KNUM.NE.XKNUM )  .OR.
+     X    ( KE_W.NE.XKE_W )  .OR.
+     X    ( KN_S.NE.XKN_S )  .OR.
+     X    ( RESON.NE.XRESON ).OR.
+     X    ( NORTH.NE.XNORTH ).OR.
+     X    ( WEST.NE.XWEST ) ) THEN
+        IRET = W251IDX(KNUM,NUMPTS,OLDLATS,WEST,OLDEAST,
+     X                 KN_S,NUMNEW,LAT,NEWIDX)
+        IFIRST = 1
+        XKNUM  = KNUM
+        XKE_W  = KE_W
+        XKN_S  = KN_S
+        XRESON = RESON
+        XNORTH = NORTH
+        XWEST  = WEST
+      ENDIF
+C
+C      DELAT  = 180.0/(KNUM-1)
+      DELAT  = RNS/(KNUM-1)
+      NEXT = 0
+C
+      DO 220 NEWROW = 1, KN_S
+C
+C       Set up the distance between new row and the old rows to N and S.
+C
+        NLAT   = NINT((NORTH - LAT(NEWROW))/DELAT) + 1
+        I_N    = NLAT
+        I_S    = MIN(I_N+1,KNUM*2)
+        DIST_N = ((NORTH - DELAT*(I_N-1)) - LAT(NEWROW)) / DELAT
+        DIST_S = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        IF( (NUMPTS(I_N).GT.0).AND.(NUMPTS(I_S).GT.0) ) THEN
+C
+C         Yes, use the calculated indices
+C
+          DO 210 NEWCOL = 1, KE_W
+C
+            NEXT = NEXT + 1
+C
+            NEWWAVE(NEWCOL,NEWROW) = OLDWAVE(NEWIDX(NEXT))
+C
+  210     CONTINUE
+        Else
+           NEXT = NEXT + KE_W
+        ENDIF
+C
+  220 CONTINUE
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( WV2DINT.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'WV2DINT: Wave interpolation successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X    'WV2DINT: Wave interpolation failed.',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/wv2dppp.F b/interpolation/wv2dppp.F
new file mode 100755
index 0000000..3426c5b
--- /dev/null
+++ b/interpolation/wv2dppp.F
@@ -0,0 +1,156 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DPPP(ISEC2, ISEC4, NLONS, NLATS, STEP,
+     X                         OLDWAVE, NEWWAVE, NORTH, WEST, PMISS)
+C
+C---->
+C*****WV2DPPP*
+C
+C     PURPOSE
+C     -------
+C
+C     Interface routine to call WV2DINT using (inconsistent)
+C     GRIB headers in 2D wave spectra fields.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DPPP(ISEC2, ISEC4, NLONS, NLATS, STEP,
+C    X               OLDWAVE, NEWWAVE, NORTH, WEST, PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     ISEC2   - Unpacked section 2 header from 2D wave spectra field
+C     ISEC4   - Unpacked section 4 header from 2D wave spectra field
+C     NLONS   - Number of points E-W in new grid
+C     NLATS   - Number of points N-S in new grid
+C     STEP    - Output grid resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degrees)
+C     WEST    - Output grid westernmost longitude (degrees)
+C     PMISS   - Missing data value 
+C
+C     Output arguments
+C     ----------------
+
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Setes up call to WV2DINT from 2D wave spectra field headers.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     None.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    November 1996
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER ISEC2, ISEC4, NLONS, NLATS
+      DIMENSION ISEC2(*), ISEC4(*)
+      REAL STEP, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMXLAT
+      PARAMETER (JPROUTINE = 19420)
+      PARAMETER (JPMXLAT = 361)
+C
+C     Local arguments
+C
+      INTEGER NSPEC, MISSLAT, LOOP, NPTS, NUMLATS
+      DIMENSION NPTS(JPMXLAT)
+C
+C     Externals
+C
+      INTEGER WV2DINT
+      EXTERNAL WV2DINT
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DPPP = 0
+C
+C     Setup number of spectra at each point
+C
+      IF( ISEC4(8).EQ.64 ) THEN
+        NSPEC = ISEC4(50)*ISEC4(51)
+      ELSE
+        NSPEC = 1
+      ENDIF
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      NUMLATS = (180000/ISEC2(10)) + 1
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        WV2DPPP = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Fill an array with the number of points at each latitude
+C     (this is a reduced latitude/longitude grid)
+C
+      MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+      DO LOOP = 1, MISSLAT
+        NPTS(LOOP) = 0
+      ENDDO
+      DO LOOP = 1, ISEC2(3)
+        NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+      ENDDO
+      DO LOOP = MISSLAT+ISEC2(3), NUMLATS
+        NPTS(LOOP) = 0
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Do the interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      WV2DPPP = WV2DINT(NUMLATS,NPTS,NLONS,NLATS,STEP,OLDWAVE,
+     X                  NEWWAVE,NORTH,WEST,NSPEC,PMISS)
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wv2dx32.F b/interpolation/wv2dx32.F
new file mode 100755
index 0000000..e256f4b
--- /dev/null
+++ b/interpolation/wv2dx32.F
@@ -0,0 +1,484 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DX32(ISEC2,ISEC4,NLATS,STEPNS,STEPWE,
+     X                         OLDWAVE,NEWIDX,NEWWAVE,NORTH,WEST,PMISS)
+C
+C---->
+C*****WV2DX32*
+C
+C     PURPOSE
+C     -------
+C
+C     Interpolates 2D wave spectra fields.
+C     (32-bit REALs version)
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DX32(ISEC2,ISEC4,NLATS,STEPNS,STEPWE,
+C    X               OLDWAVE,NEWIDX,NEWWAVE,NORTH,WEST,PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     ISEC2   - Unpacked section 2 header from 2D wave spectra field
+C     ISEC4   - Unpacked section 4 header from 2D wave spectra field
+C     NLATS   - Number of points N-S in new grid
+C     STEPNS  - Output grid north-south resolution (degrees) (REAL*4)
+C     STEPWE  - Output grid west-east resolution (degrees) (REAL*4)
+C     OLDWAVE - Original wave field (REAL*4)
+C     NORTH   - Output grid northernmost latitude (degrees) (REAL*4)
+C     WEST    - Output grid westernmost longitude (degrees) (REAL*4)
+C     PMISS   - Missing data value  (REAL*4)
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX  - Indices of old grid points used for new grid points
+C     NEWWAVE - New wave field (REAL*4)
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Builds the index of nearest neighbour points for the output grid.
+C     Then works through the output grid points, checking for subarea
+C     boundaries and looking up nearset neighbour 2D spectra values
+C     (which may be missing data).
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WV2DI32 - builds the index of nearest neighbour points
+C     NPTWE32 - Calculates number of grid points between west/east
+C               area boundaries (32-bit REALs version)
+C     VALPINA - Looks up bitmap value
+C     ONEBITS - Counts number of 1s in a GRIB section 3 bitmap
+C     NUMVALS - Counts the values in the secondary bitmap.
+C     SOFFSET - Finds the section offsets in GRIB message
+C     INTLOG  - Log error message
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    March 1998
+C
+C
+C     Modifications
+C     -------------
+C
+C     J.D.Chambers      ECMWF    May 1998
+C     Handle parameter 251 as a simple form of wave 2D spectra.
+C     (A field containing one direction and one frequency).
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER ISEC2, ISEC4, NLATS
+      DIMENSION ISEC2(*), ISEC4(*)
+      REAL*4 STEPNS, STEPWE, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(*)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMXLAT, JPNSPEC
+      PARAMETER (JPROUTINE = 40000)
+      PARAMETER (JPMXLAT = 721)
+      PARAMETER (JPNSPEC = 600)
+C
+C     Local arguments
+C
+      LOGICAL LSIMPLE
+      INTEGER IEOFSET, IWOFSET, ISTART, IWEST
+      REAL*4 SOUTH, EAST, PTLAT, PTLONG, AWEST, OLDWEST, OLDEAST
+      REAL*4 REFVAL, SCALE
+      INTEGER NPDATA, INSPT, NEXP, NMANT, NRETA, NRETB, NLENG, NBIT
+      INTEGER NVALS
+      INTEGER ISCALE, NSCALE, IBITS, ITEMP, NPBTMP2, IBITMAP, NUNUSED
+      DIMENSION IBITMAP(JPNSPEC)
+      INTEGER IRET, IS0, IS1, IS2, IS3, IS4, IEDITN
+      INTEGER NEXT, NEXTWV, NROW, NCOL, INDEX, ILOCATE
+      INTEGER NSPEC, MISSLAT, LOOP, NPTS, NUMLATS, NUMNEW
+      INTEGER KOLDNUM, KNEWNUM
+      DIMENSION NPTS(JPMXLAT), NUMNEW(JPMXLAT)
+      REAL*4 RLATINC, OLDLATS, NEWLATS, ROWINC
+      DIMENSION OLDLATS(JPMXLAT), NEWLATS(JPMXLAT)
+C
+C     Externals
+C
+      INTEGER WV2DI32, SOFFSET, VALPINA, NUMVALS, ONEBITS, NPTWE32
+      EXTERNAL WV2DI32, SOFFSET, VALPINA, NUMVALS, ONEBITS, NPTWE32
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DX32 = 0
+C
+C     Initialise the bitmap value lookup function and function
+C     which counts the values in the secondary bitmap.
+C
+      IRET = VALPINA(0,0,0)
+      IRET = NUMVALS(0,0,0)
+C
+C     Setup number of spectra at each point
+C
+      IF( ISEC4(8).EQ.0 ) THEN
+        LSIMPLE = .TRUE.
+        NSPEC   = 1
+      ELSE
+        LSIMPLE = .FALSE.
+        NSPEC   = ISEC4(50)*ISEC4(51)
+      ENDIF
+C
+      IF( NSPEC.GT.JPNSPEC) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Number of wave spectra at each grid pt = ',NSPEC)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: And is greater than allowed maximum = ',JPNSPEC)
+        WV2DX32 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      NUMLATS = (180000/ISEC2(10)) + 1
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Number of latitudes in input grid = ',NUMLATS)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: And is greater than allowed maximum = ',JPMXLAT)
+        WV2DX32 = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      RLATINC = FLOAT(ISEC2(10))/1000
+      DO LOOP = 1, NUMLATS
+        OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+      ENDDO
+C
+C     Fill an array with the number of points at each latitude for the
+C     input field (this is a reduced latitude/longitude grid)
+C
+      MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+      DO LOOP = 1, MISSLAT
+        NPTS(LOOP)    = 0
+      ENDDO
+      KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+      DO LOOP = 1, (KOLDNUM-MISSLAT)
+        NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+      ENDDO
+      DO LOOP = (KOLDNUM+1), NUMLATS
+        NPTS(LOOP)    = 0
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Setup number of points at each latitude for the
+C                output latitude/longitude field.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+C
+C       Reduced (quasi-regular) gaussian output
+C
+        KNEWNUM = NOGAUSS*2
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROGAUSS(LOOP)
+        ENDDO
+C
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+C
+C       Reduced (quasi-regular) lat/long output
+C
+        KNEWNUM = NOREDLL
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROREDLL(LOOP)
+        ENDDO
+C
+      ELSE
+C
+C       Regular output
+C
+        MISSLAT = NINT((90.0 - NORTH)/STEPNS)
+        DO LOOP = 1, MISSLAT
+          NUMNEW(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, NLATS
+          NUMNEW(LOOP+MISSLAT) = NINT(360.0/STEPWE)
+        ENDDO
+C
+        KNEWNUM = MISSLAT + NLATS
+        DO LOOP = 1, KNEWNUM
+          NEWLATS(LOOP) = 90.0 - (LOOP-1)*STEPNS
+        ENDDO
+C
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 3. Get the input GRIB field characteristics.
+C ---------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Calculate the indices of the input grid points to be used for
+C     the output points
+C
+      OLDWEST = FLOAT(ISEC2(5))/1000
+      OLDEAST = FLOAT(ISEC2(8))/1000
+      WV2DX32 = WV2DI32(NUMLATS,NPTS,OLDLATS,OLDWEST,OLDEAST,
+     X                  KNEWNUM, NUMNEW, NEWLATS, NEWIDX)
+      IF( WV2DX32.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Unable to calculate output grid indices',JPQUIET)
+        WV2DX32 = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Find section offsets for the GRIB product
+C
+      IRET = SOFFSET(OLDWAVE, IS0, IS1, IS2, IS3, IS4, IEDITN)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Problem finding section offsets for GRIB',JPQUIET)
+        WV2DX32 = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Get the overall length of OLDWAVE
+C
+      NBIT = 32
+      INSPT = (IS0 + 4) * 8
+      CALL INXBIT(OLDWAVE,10,INSPT,NLENG,1,NBIT,24,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Problem extracting overall length of GRIB',JPQUIET)
+        WV2DX32 = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+C
+C     Get the scale factor
+C
+      INSPT = (IS4 + 4) * 8
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NSCALE,1,NBIT,16,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Problem extracting scale factor in GRIB',JPQUIET)
+        WV2DX32 = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+      CALL DSGNBT(ISCALE,NSCALE,16,NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Problem setting sign of scale factor',JPQUIET)
+        WV2DX32 = JPROUTINE + 7
+        GOTO 900
+      ENDIF
+      SCALE = 2.0**(FLOAT(ISCALE))
+C
+C     Get the reference value
+C
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NEXP,1,NBIT,8,'D',NRETA)
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NMANT,1,NBIT,24,'D',NRETB)
+      IF( (NRETA.NE.0) .OR. (NRETB.NE.0) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Problem getting reference value from GRIB',JPQUIET)
+        WV2DX32 = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+      CALL DECFP2(REFVAL,NEXP,NMANT)
+C
+C     Get number of bits per packed value
+C
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,IBITS,1,NBIT,8,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DX32: Problem getting number of bits per word',JPQUIET)
+        WV2DX32 = JPROUTINE + 9
+        GOTO 900
+      ENDIF
+C
+C     (Pointer INSPT is currently at octet 12 in GRIB section 4)
+C
+C     Set up pointers to start of secondary bitmap and start of packed
+C     data values
+C
+      NPBTMP2 = (IS4 + 24)*8 + (ISEC4(53)+ISEC4(55))*32
+C
+      IF( .NOT. LSIMPLE ) THEN
+        NPDATA  = NPBTMP2 + NSPEC*ONEBITS(OLDWAVE,IS3)
+      ELSE
+        NPDATA  = NPBTMP2
+      ENDIF
+      NPDATA  = ((NPDATA + 7)/8)*8
+C
+C ---------------------------------------------------------------------
+C*    Section 4. Work through the output subarea.
+C ---------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Fill in the wave spectra values
+C
+      NEXT = 0
+      NEXTWV = 0
+C
+      SOUTH = NOAREA(3)/PPMULT
+      EAST  = NOAREA(4)/PPMULT
+      ISTART = 0
+C
+C     Work down through latitudes from north to south.
+C
+      DO NROW = 1, KNEWNUM
+C
+C       If inside north-south (subarea) boundaries ..
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          PTLAT = ROGAUSS(NROW)
+        ELSE
+          PTLAT = 90.0 - (NROW-1)*STEPNS
+        ENDIF
+C
+        IF( (PTLAT.LE.NORTH).AND.(ABS(PTLAT-SOUTH).GT.-0.0005) ) THEN
+C
+C         Calculate number of points between west boundary of area and
+C         Greenwich
+C
+          ROWINC = 360.0/NUMNEW(NROW)
+C
+          IWEST = INT(WEST/ROWINC)
+          IF( (WEST.GT.0.0).AND.(WEST.NE.(IWEST*ROWINC)) )
+     X      IWEST = IWEST + 1
+          AWEST = IWEST * ROWINC
+          IWOFSET = NPTWE32(AWEST,0.0,ROWINC)
+          IEOFSET = NPTWE32(AWEST,EAST,ROWINC)
+C
+C         Work through subarea longitudes from west to east.
+C
+          DO NCOL = 1, NUMNEW(NROW)
+            PTLONG = AWEST + (NCOL-1)*ROWINC
+            NEXT = NPTWE32(AWEST,PTLONG,ROWINC)
+            IF( (NEXT.LE.IEOFSET).AND.(NEXT.GE.0) ) THEN
+C
+C             .. and inside west-east (subarea) boundaries
+C
+              NEXT = 1 + NEXT - IWOFSET
+              IF( NEXT.LE.0) NEXT = NEXT + NUMNEW(NROW)
+              NEXT = NEXT + ISTART
+              INDEX = NEWIDX(NEXT)
+              ILOCATE = VALPINA(OLDWAVE, IS3+6, INDEX)
+C
+              IF( ILOCATE.EQ.0 ) THEN
+C
+C               Nearest neighbour is a 'missing' point
+C
+                DO LOOP = 1, NSPEC
+                  NEXTWV = NEXTWV + 1
+                  NEWWAVE(NEXTWV) = PMISS
+                ENDDO
+C
+              ELSE
+C
+C               Nearest neighbour has values
+C
+                IF( LSIMPLE ) THEN
+                  INSPT = NPDATA + (ILOCATE - 1)*IBITS
+                  NVALS = 1
+                  IBITMAP(1) = 1
+                ELSE
+C
+C                 Count the number of values in the secondary bitmap upto
+C                 the current point and pick up its secondary bitmap.
+C
+                  INSPT = NPBTMP2 + (ILOCATE - 1)*NSPEC
+                  NVALS = NUMVALS(OLDWAVE,NPBTMP2,INSPT)
+                  CALL INXBIT(OLDWAVE,NLENG,INSPT,IBITMAP,NSPEC,
+     X                        NBIT,1,'D',NRETA)
+                  IF( NRETA.NE.0 ) THEN
+                    CALL INTLOG(JP_ERROR,
+     X              'WV2DX32: Problem getting neighbours 2ndary bitmap',
+     X              JPQUIET)
+                    WV2DX32 = JPROUTINE + 10
+                    GOTO 900
+                  ENDIF
+C
+C                 Pick up the values at the current point
+C
+                  INSPT = NPDATA + NVALS*IBITS
+                ENDIF
+C
+                DO LOOP = 1, NSPEC
+                  NEXTWV = NEXTWV + 1
+                  IF( IBITMAP(LOOP).EQ.0 ) THEN
+C
+C                   ..missing
+C
+                    NEWWAVE(NEXTWV) = PMISS
+C
+                  ELSE
+C
+C                   ..retrieve and recreate the packed value
+C
+                    CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                          NBIT,IBITS,'D',NRETA)
+                    IF( NRETA.NE.0 ) THEN
+                      CALL INTLOG(JP_ERROR,
+     X                'WV2DX32: Problem getting nearest neighbour',
+     X                JPQUIET)
+                      WV2DX32 = JPROUTINE + 11
+                      GOTO 900
+                    ENDIF
+                    NEWWAVE(NEXTWV) = REFVAL + FLOAT(ITEMP)*SCALE
+                  ENDIF
+                ENDDO
+C
+              ENDIF
+            ENDIF
+          ENDDO
+C
+        ENDIF
+        ISTART = ISTART + NUMNEW(NROW)
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wv2dxx2.F b/interpolation/wv2dxx2.F
new file mode 100755
index 0000000..8a75d92
--- /dev/null
+++ b/interpolation/wv2dxx2.F
@@ -0,0 +1,352 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DXX2(KNSPEC, NUMLATS, NPTS,
+     X                         NLATS, STEPNS, STEPWE,
+     X                         OLDWAVE, NEWWAVE,
+     X                         NORTH,WEST,PMISS)
+C
+C---->
+C*****WV2DXX2*
+C
+C     PURPOSE
+C     -------
+C
+C     Interpolates 2D wave spectra fields.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DXX2(KNSPEC, NUMLATS, NPTS,
+C    X               NLATS,STEPNS,STEPWE,
+C    X               OLDWAVE,NEWWAVE,
+C    X               NORTH,WEST,PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     KNSPEC  - Number of 2D spectra values at each wave point
+C     NUMLATS - Input lat number north-south
+C     NPTS   - Array giving number of points along each latitude
+C              for Input field (empty latitudes have entry 0)
+C     NLATS   - Number of points N-S in new grid
+C     STEPNS  - Output grid north-south resolution (degrees)
+C     STEPWE  - Output grid west-east resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degrees)
+C     WEST    - Output grid westernmost longitude (degrees)
+C     PMISS   - Missing data value 
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Builds the index of nearest neighbour points for the output grid.
+C     Then works through the output grid points, checking for subarea
+C     boundaries and looking up nearset neighbour 2D spectra values
+C     (which may be missing data).
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WV2DIDX - builds the index of nearest neighbour points
+C     NUMPTWE - Calculates number of grid points between west/east
+C               area boundaries
+C     VALPINA - Looks up bitmap value
+C     ONEBITS - Counts number of 1s in a GRIB section 3 bitmap
+C     NUMVALS - Counts the values in the secondary bitmap.
+C     SOFFSET - Finds the section offsets in GRIB message
+C     INTLOG  - Log error message
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     S. Curic         ECMWF    Jun 2009 
+C
+C     Handle parameter 251 as a simple form of wave 2D spectra.
+C     (A field containing one direction and one frequency).
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER NPTS,NLATS
+      DIMENSION NPTS(*)
+      REAL STEPNS, STEPWE, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(2880*1442)
+      INTEGER NUMLATS, KNSPEC
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMXLAT, JPNSPEC
+      PARAMETER (JPROUTINE = 40000)
+      PARAMETER (JPMXLAT = 1801)
+      PARAMETER (JPNSPEC = 600)
+C
+C     Local arguments
+C
+      INTEGER IEOFSET, IWOFSET, ISTART, IWEST
+      REAL SOUTH, EAST, PTLAT, PTLONG, AWEST, OLDWEST, OLDEAST
+      REAL REFVAL, SCALE
+      INTEGER NPDATA, INSPT, NEXP, NMANT, NRETA, NRETB, NLENG, NBIT
+      INTEGER NVALS
+      INTEGER ISCALE, NSCALE, IBITS, ITEMP, NPBTMP2, IBITMAP, NUNUSED
+      DIMENSION IBITMAP(JPNSPEC)
+      INTEGER IRET, IEDITN
+      INTEGER NEXT, NEXTWV, NROW, NCOL, INDEX, ILOCATE
+      INTEGER MISSLAT, LOOP, NUMNEW
+      INTEGER KOLDNUM, KNEWNUM
+      DIMENSION  NUMNEW(JPMXLAT)
+      REAL RLATINC, OLDLATS, NEWLATS, ROWINC
+      REAL ONORTH, OSOUTH
+      DIMENSION OLDLATS(JPMXLAT), NEWLATS(JPMXLAT)
+C
+C     Externals
+C
+      INTEGER WV2DIDX, NUMVALS, ONEBITS, NUMPTWE
+      EXTERNAL WV2DIDX,NUMVALS, ONEBITS, NUMPTWE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DXX2 = 0
+C
+C     Initialise the bitmap value lookup function and function
+C     which counts the values in the secondary bitmap.
+C
+      IRET = NUMVALS(0,0,0)
+C
+C     Check only new-style 2D wave spectra (parameter 251)
+C
+      IF( KNSPEC.GT.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXX2: Only single-value 2D spectra field allowed',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2XX2: Value given = ',KNSPEC)
+        WV2DXX2 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXX2: Number of latitudes in input grid = ',NUMLATS)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXX2: And is greater than allowed maximum = ',JPMXLAT)
+        WV2DXX2 = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+
+      ONORTH = FLOAT(NIAREA(1))/PPMULT
+      OSOUTH = FLOAT(NIAREA(3))/PPMULT
+
+      RLATINC = FLOAT(NIGRID(2))/PPMULT
+
+      DO LOOP = 1, NUMLATS
+        OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+      ENDDO
+C
+C     Fill an array with the number of points at each latitude for the
+C     input field (this is a reduced latitude/longitude grid)
+C
+      MISSLAT = (90.0 - ONORTH)/RLATINC
+      KOLDNUM = 1 + (90.0 - OSOUTH)/RLATINC
+
+      IF( NIREPR.NE.JPREDLL ) THEN
+        DO LOOP = 1, MISSLAT
+          NPTS(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, (KOLDNUM-MISSLAT)
+            NPTS(LOOP+MISSLAT) = NIWE
+        ENDDO
+        DO LOOP = (KOLDNUM+1), NUMLATS
+          NPTS(LOOP)    = 0
+        ENDDO
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Setup number of points at each latitude for the
+C                output latitude/longitude field.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+C
+C       Reduced (quasi-regular) gaussian output
+C
+        KNEWNUM = NOGAUSS*2
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROGAUSS(LOOP)
+        ENDDO
+C
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+C
+C       Reduced (quasi-regular) lat/long output
+C
+        KNEWNUM = NOREDLL
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROREDLL(LOOP)
+        ENDDO
+C
+      ELSE
+C
+C       Regular output
+C
+        MISSLAT = NINT((90.0 - NORTH)/STEPNS)
+        DO LOOP = 1, MISSLAT
+          NUMNEW(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, NLATS
+          NUMNEW(LOOP+MISSLAT) = NINT(360.0/STEPWE)
+        ENDDO
+C
+        KNEWNUM = MISSLAT + NLATS
+        DO LOOP = 1, KNEWNUM
+          NEWLATS(LOOP) = 90.0 - (LOOP-1)*STEPNS
+        ENDDO
+C
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 3. Get the input GRIB field characteristics.
+C ---------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Calculate the indices of the input grid points to be used for
+C     the output points
+C
+      OLDWEST = FLOAT(NIAREA(2))/PPMULT
+      OLDEAST = FLOAT(NIAREA(4))/PPMULT
+
+      WV2DXX2 = WV2DIDX(NUMLATS,NPTS,OLDLATS,OLDWEST,OLDEAST,
+     X                  KNEWNUM, NUMNEW, NEWLATS, NEWIDX)
+      IF( WV2DXX2.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXX2: Unable to calculate output grid indices',JPQUIET)
+        WV2DXX2 = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C
+C ---------------------------------------------------------------------
+C*    Section 4. Work through the output subarea.
+C ---------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Fill in the wave spectra values
+C
+      NEXT = 0
+      NEXTWV = 0
+C
+      SOUTH = NOAREA(3)/PPMULT
+      EAST  = NOAREA(4)/PPMULT
+      ISTART = 0
+C
+C     Work down through latitudes from north to south.
+C
+      DO NROW = 1, KNEWNUM
+C
+C       If inside north-south (subarea) boundaries ..
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          PTLAT = ROGAUSS(NROW)
+        ELSE
+          PTLAT = 90.0 - (NROW-1)*STEPNS
+        ENDIF
+C
+        IF( (PTLAT.LE.NORTH).AND.(ABS(PTLAT-SOUTH).GT.-0.0005) ) THEN
+C
+C         Calculate number of points between west boundary of area and
+C         Greenwich
+C
+          ROWINC = 360.0/NUMNEW(NROW)
+C
+          IWEST = INT(WEST/ROWINC)
+          IF( (WEST.GT.0.0).AND.(WEST.NE.(IWEST*ROWINC)) )
+     X      IWEST = IWEST + 1
+          AWEST = IWEST * ROWINC
+          IWOFSET = NUMPTWE(AWEST,0.0,ROWINC)
+          IEOFSET = NUMPTWE(AWEST,EAST,ROWINC)
+C
+C         Work through subarea longitudes from west to east.
+C
+          DO NCOL = 1, NUMNEW(NROW)
+            PTLONG = AWEST + (NCOL-1)*ROWINC
+            NEXT = NUMPTWE(AWEST,PTLONG,ROWINC)
+            IF( (NEXT.LE.IEOFSET).AND.(NEXT.GE.0) ) THEN
+C
+C             .. and inside west-east (subarea) boundaries
+C
+              NEXT = 1 + NEXT - IWOFSET
+              IF( NEXT.LE.0) NEXT = NEXT + NUMNEW(NROW)
+              NEXT = NEXT + ISTART
+              INDEX = NEWIDX(NEXT)
+
+              NEXTWV = NEXTWV + 1
+
+              IF( OLDWAVE(INDEX).EQ.PMISS.OR.INDEX.EQ.0) THEN
+C
+C               Nearest neighbour is a 'missing' point
+C
+                  NEWWAVE(NEXTWV) = PMISS
+              ELSE
+                  NEWWAVE(NEXTWV) = OLDWAVE(INDEX)
+              ENDIF
+             ENDIF
+          ENDDO
+C
+        ENDIF
+        ISTART = ISTART + NUMNEW(NROW)
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wv2dxxx.F b/interpolation/wv2dxxx.F
new file mode 100755
index 0000000..cae8486
--- /dev/null
+++ b/interpolation/wv2dxxx.F
@@ -0,0 +1,496 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WV2DXXX(ISEC2,ISEC4,NLATS,STEPNS,STEPWE,
+     X                         OLDWAVE,NEWIDX,NEWWAVE,NORTH,WEST,PMISS)
+C
+C---->
+C*****WV2DXXX*
+C
+C     PURPOSE
+C     -------
+C
+C     Interpolates 2D wave spectra fields.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WV2DXXX(ISEC2,ISEC4,NLATS,STEPNS,STEPWE,
+C    X               OLDWAVE,NEWIDX,NEWWAVE,NORTH,WEST,PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     ISEC2   - Unpacked section 2 header from 2D wave spectra field
+C     ISEC4   - Unpacked section 4 header from 2D wave spectra field
+C     NLATS   - Number of points N-S in new grid
+C     STEPNS  - Output grid north-south resolution (degrees)
+C     STEPWE  - Output grid west-east resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Output grid northernmost latitude (degrees)
+C     WEST    - Output grid westernmost longitude (degrees)
+C     PMISS   - Missing data value 
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX  - Indices of old grid points used for new grid points
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     Builds the index of nearest neighbour points for the output grid.
+C     Then works through the output grid points, checking for subarea
+C     boundaries and looking up nearset neighbour 2D spectra values
+C     (which may be missing data).
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WV2DIDX - builds the index of nearest neighbour points
+C     NUMPTWE - Calculates number of grid points between west/east
+C               area boundaries
+C     VALPINA - Looks up bitmap value
+C     ONEBITS - Counts number of 1s in a GRIB section 3 bitmap
+C     NUMVALS - Counts the values in the secondary bitmap.
+C     SOFFSET - Finds the section offsets in GRIB message
+C     INTLOG  - Log error message
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None.
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    November 1996
+C
+C
+C     Modifications
+C     -------------
+C
+C     J.D.Chambers      ECMWF    April 1998
+C     Handle parameter 251 as a simple form of wave 2D spectra.
+C     (A field containing one direction and one frequency).
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER ISEC2, ISEC4, NLATS
+      DIMENSION ISEC2(*), ISEC4(*)
+      REAL STEPNS, STEPWE, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      DIMENSION OLDWAVE(*), NEWWAVE(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(*)
+C
+C     Parameters
+C
+      INTEGER JPROUTINE, JPMXLAT, JPNSPEC
+      PARAMETER (JPROUTINE = 40000)
+      PARAMETER (JPMXLAT = 1801)
+      PARAMETER (JPNSPEC = 600)
+C
+C     Local arguments
+C
+      LOGICAL LSIMPLE
+      INTEGER IEOFSET, IWOFSET, ISTART, IWEST
+      REAL SOUTH, EAST, PTLAT, PTLONG, AWEST, OLDWEST, OLDEAST
+      REAL REFVAL, SCALE
+      INTEGER NPDATA, INSPT, NEXP, NMANT, NRETA, NRETB, NLENG, NBIT
+      INTEGER NVALS
+      INTEGER ISCALE, NSCALE, IBITS, ITEMP, NPBTMP2, IBITMAP, NUNUSED
+      DIMENSION IBITMAP(JPNSPEC)
+      INTEGER IRET, IS0, IS1, IS2, IS3, IS4, IEDITN
+      INTEGER NEXT, NEXTWV, NROW, NCOL, INDEX, ILOCATE
+      INTEGER NSPEC, MISSLAT, LOOP, NPTS, NUMLATS, NUMNEW
+      INTEGER KOLDNUM, KNEWNUM
+      DIMENSION NPTS(JPMXLAT), NUMNEW(JPMXLAT)
+      REAL RLATINC, OLDLATS, NEWLATS, ROWINC
+      DIMENSION OLDLATS(JPMXLAT), NEWLATS(JPMXLAT)
+C
+C     Externals
+C
+      INTEGER WV2DIDX, SOFFSET, VALPINA, NUMVALS, ONEBITS, NUMPTWE
+      EXTERNAL WV2DIDX, SOFFSET, VALPINA, NUMVALS, ONEBITS, NUMPTWE
+C
+#include "parim.h"
+#include "nifld.common"
+#include "nofld.common"
+#include "grspace.h"
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WV2DXXX = 0
+C
+C     Initialise the bitmap value lookup function and function
+C     which counts the values in the secondary bitmap.
+C
+      IRET = VALPINA(0,0,0)
+      IRET = NUMVALS(0,0,0)
+C
+C     Setup number of spectra at each point
+C
+      IF( ISEC4(8).EQ.0 ) THEN
+        LSIMPLE = .TRUE.
+        NSPEC   = 1
+      ELSE
+        LSIMPLE = .FALSE.
+        NSPEC   = ISEC4(50)*ISEC4(51)
+      ENDIF
+C
+      IF( NSPEC.GT.JPNSPEC) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Number of wave spectra at each grid pt = ',NSPEC)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: And is greater than allowed maximum = ',JPNSPEC)
+        WV2DXXX = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Calculate number of latitudes if grid had been full from
+C     North pole to South pole
+C
+      NUMLATS = (180000/ISEC2(10)) + 1
+      IF( NUMLATS.GT.JPMXLAT ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Number of latitudes in input grid = ',NUMLATS)
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: And is greater than allowed maximum = ',JPMXLAT)
+        WV2DXXX = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+      RLATINC = FLOAT(ISEC2(10))/1000
+      DO LOOP = 1, NUMLATS
+        OLDLATS(LOOP) = 90.0 - (LOOP-1)*RLATINC
+      ENDDO
+C
+C     Fill an array with the number of points at each latitude for the
+C     input field (this is a reduced latitude/longitude grid)
+C
+      MISSLAT = (90000 - ISEC2(4))/ISEC2(10)
+      DO LOOP = 1, MISSLAT
+        NPTS(LOOP)    = 0
+      ENDDO
+      KOLDNUM = 1 + (90000 - ISEC2(7))/ISEC2(10)
+      DO LOOP = 1, (KOLDNUM-MISSLAT)
+        IF( NIREPR.EQ.JPREDLL ) THEN
+          NPTS(LOOP+MISSLAT) = ISEC2(22+LOOP)
+        ELSE
+          NPTS(LOOP+MISSLAT) = ISEC2(2)
+        ENDIF
+      ENDDO
+      DO LOOP = (KOLDNUM+1), NUMLATS
+        NPTS(LOOP)    = 0
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Setup number of points at each latitude for the
+C                output latitude/longitude field.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      IF( (NOREPR.EQ.JPQUASI) .OR. (NOREPR.EQ.JPGAUSSIAN) ) THEN
+C
+C       Reduced (quasi-regular) gaussian output
+C
+        KNEWNUM = NOGAUSS*2
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROGAUSS(LOOP)
+        ENDDO
+C
+      ELSE IF( NOREPR.EQ.JPREDLL ) THEN
+C
+C       Reduced (quasi-regular) lat/long output
+C
+        KNEWNUM = NOREDLL
+        DO LOOP = 1, KNEWNUM
+          NUMNEW(LOOP)  = NOLPTS(LOOP)
+          NEWLATS(LOOP) = ROREDLL(LOOP)
+        ENDDO
+C
+      ELSE
+C
+C       Regular output
+C
+        MISSLAT = NINT((90.0 - NORTH)/STEPNS)
+        DO LOOP = 1, MISSLAT
+          NUMNEW(LOOP)    = 0
+        ENDDO
+        DO LOOP = 1, NLATS
+          NUMNEW(LOOP+MISSLAT) = NINT(360.0/STEPWE)
+        ENDDO
+C
+        KNEWNUM = MISSLAT + NLATS
+        DO LOOP = 1, KNEWNUM
+          NEWLATS(LOOP) = 90.0 - (LOOP-1)*STEPNS
+        ENDDO
+C
+      ENDIF
+C
+C ---------------------------------------------------------------------
+C*    Section 3. Get the input GRIB field characteristics.
+C ---------------------------------------------------------------------
+C
+  300 CONTINUE
+C
+C     Calculate the indices of the input grid points to be used for
+C     the output points
+C
+      OLDWEST = FLOAT(ISEC2(5))/1000
+      OLDEAST = FLOAT(ISEC2(8))/1000
+      WV2DXXX = WV2DIDX(NUMLATS,NPTS,OLDLATS,OLDWEST,OLDEAST,
+     X                  KNEWNUM, NUMNEW, NEWLATS, NEWIDX)
+      IF( WV2DXXX.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Unable to calculate output grid indices',JPQUIET)
+        WV2DXXX = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Find section offsets for the GRIB product
+C
+      IRET = SOFFSET(OLDWAVE, IS0, IS1, IS2, IS3, IS4, IEDITN)
+      IF( IRET.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Problem finding section offsets for GRIB',JPQUIET)
+        WV2DXXX = JPROUTINE + 4
+        GOTO 900
+      ENDIF
+C
+C     Get the overall length of OLDWAVE
+C
+#ifdef INTEGER_8
+      NBIT = 64
+#else
+      NBIT = 32
+#endif
+      INSPT = (IS0 + 4) * 8
+      CALL INXBIT(OLDWAVE,10,INSPT,NLENG,1,NBIT,24,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Problem extracting overall length of GRIB',JPQUIET)
+        WV2DXXX = JPROUTINE + 5
+        GOTO 900
+      ENDIF
+C
+C     Get the scale factor
+C
+      INSPT = (IS4 + 4) * 8
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NSCALE,1,NBIT,16,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Problem extracting scale factor in GRIB',JPQUIET)
+        WV2DXXX = JPROUTINE + 6
+        GOTO 900
+      ENDIF
+      CALL DSGNBT(ISCALE,NSCALE,16,NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Problem setting sign of scale factor',JPQUIET)
+        WV2DXXX = JPROUTINE + 7
+        GOTO 900
+      ENDIF
+      SCALE = 2.0**(FLOAT(ISCALE))
+C
+C     Get the reference value
+C
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NEXP,1,NBIT,8,'D',NRETA)
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,NMANT,1,NBIT,24,'D',NRETB)
+      IF( (NRETA.NE.0) .OR. (NRETB.NE.0) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Problem getting reference value from GRIB',JPQUIET)
+        WV2DXXX = JPROUTINE + 8
+        GOTO 900
+      ENDIF
+      CALL DECFP2(REFVAL,NEXP,NMANT)
+C
+C     Get number of bits per packed value
+C
+      CALL INXBIT(OLDWAVE,NLENG,INSPT,IBITS,1,NBIT,8,'D',NRETA)
+      IF( NRETA.NE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WV2DXXX: Problem getting number of bits per word',JPQUIET)
+        WV2DXXX = JPROUTINE + 9
+        GOTO 900
+      ENDIF
+C
+C     (Pointer INSPT is currently at octet 12 in GRIB section 4)
+C
+C     Set up pointers to start of secondary bitmap and start of packed
+C     data values
+C
+#ifdef INTEGER_8
+      NBIT = 64
+#else
+      NBIT = 32
+#endif
+      NPBTMP2 = (IS4 + 24)*8 + (ISEC4(53)+ISEC4(55))*32
+C
+      IF( .NOT. LSIMPLE ) THEN
+        NPDATA  = NPBTMP2 + NSPEC*ONEBITS(OLDWAVE,IS3)
+      ELSE
+        NPDATA  = NPBTMP2
+      ENDIF
+      NPDATA  = ((NPDATA + 7)/8)*8
+C
+C ---------------------------------------------------------------------
+C*    Section 4. Work through the output subarea.
+C ---------------------------------------------------------------------
+C
+  400 CONTINUE
+C
+C     Fill in the wave spectra values
+C
+      NEXT = 0
+      NEXTWV = 0
+C
+      SOUTH = NOAREA(3)/PPMULT
+      EAST  = NOAREA(4)/PPMULT
+      ISTART = 0
+C
+C     Work down through latitudes from north to south.
+C
+      DO NROW = 1, KNEWNUM
+C
+C       If inside north-south (subarea) boundaries ..
+C
+        IF( (NOREPR.EQ.JPGAUSSIAN).OR.(NOREPR.EQ.JPQUASI) ) THEN
+          PTLAT = ROGAUSS(NROW)
+        ELSE
+          PTLAT = 90.0 - (NROW-1)*STEPNS
+        ENDIF
+C
+        IF( (PTLAT.LE.NORTH).AND.(ABS(PTLAT-SOUTH).GT.-0.0005) ) THEN
+C
+C         Calculate number of points between west boundary of area and
+C         Greenwich
+C
+          ROWINC = 360.0/NUMNEW(NROW)
+C
+          IWEST = INT(WEST/ROWINC)
+          IF( (WEST.GT.0.0).AND.(WEST.NE.(IWEST*ROWINC)) )
+     X      IWEST = IWEST + 1
+          AWEST = IWEST * ROWINC
+          IWOFSET = NUMPTWE(AWEST,0.0,ROWINC)
+          IEOFSET = NUMPTWE(AWEST,EAST,ROWINC)
+C
+C         Work through subarea longitudes from west to east.
+C
+          DO NCOL = 1, NUMNEW(NROW)
+            PTLONG = AWEST + (NCOL-1)*ROWINC
+            NEXT = NUMPTWE(AWEST,PTLONG,ROWINC)
+            IF( (NEXT.LE.IEOFSET).AND.(NEXT.GE.0) ) THEN
+C
+C             .. and inside west-east (subarea) boundaries
+C
+              NEXT = 1 + NEXT - IWOFSET
+              IF( NEXT.LE.0) NEXT = NEXT + NUMNEW(NROW)
+              NEXT = NEXT + ISTART
+              INDEX = NEWIDX(NEXT)
+              ILOCATE = VALPINA(OLDWAVE, IS3+6, INDEX)
+C
+              IF( ILOCATE.EQ.0 ) THEN
+C
+C               Nearest neighbour is a 'missing' point
+C
+                DO LOOP = 1, NSPEC
+                  NEXTWV = NEXTWV + 1
+                  NEWWAVE(NEXTWV) = PMISS
+                ENDDO
+C
+              ELSE
+C
+C               Nearest neighbour has values
+C
+                IF( LSIMPLE ) THEN
+                  INSPT = NPDATA + (ILOCATE - 1)*IBITS
+                  NVALS = 1
+                  IBITMAP(1) = 1
+                ELSE
+C
+C                 Count the number of values in the secondary bitmap upto
+C                 the current point and pick up its secondary bitmap.
+C
+                  INSPT = NPBTMP2 + (ILOCATE - 1)*NSPEC
+                  NVALS = NUMVALS(OLDWAVE,NPBTMP2,INSPT)
+                  CALL INXBIT(OLDWAVE,NLENG,INSPT,IBITMAP,NSPEC,
+     X                        NBIT,1,'D',NRETA)
+                  IF( NRETA.NE.0 ) THEN
+                    CALL INTLOG(JP_ERROR,
+     X              'WV2DXXX: Problem getting neighbours 2ndary bitmap',
+     X              JPQUIET)
+                    WV2DXXX = JPROUTINE + 10
+                    GOTO 900
+                  ENDIF
+C
+C                 Pick up the values at the current point
+C
+                  INSPT = NPDATA + NVALS*IBITS
+                ENDIF
+C
+                DO LOOP = 1, NSPEC
+                  NEXTWV = NEXTWV + 1
+                  IF( IBITMAP(LOOP).EQ.0 ) THEN
+C
+C                   ..missing
+C
+                    NEWWAVE(NEXTWV) = PMISS
+C
+                  ELSE
+C
+C                   ..retrieve and recreate the packed value
+C
+                    CALL INXBIT(OLDWAVE,NLENG,INSPT,ITEMP,1,
+     X                          NBIT,IBITS,'D',NRETA)
+                    IF( NRETA.NE.0 ) THEN
+                      CALL INTLOG(JP_ERROR,
+     X                'WV2DXXX: Problem getting nearest neighbour',
+     X                JPQUIET)
+                      WV2DXXX = JPROUTINE + 11
+                      GOTO 900
+                    ENDIF
+                    NEWWAVE(NEXTWV) = REFVAL + FLOAT(ITEMP)*SCALE
+                  ENDIF
+                ENDDO
+C
+              ENDIF
+            ENDIF
+          ENDDO
+C
+        ENDIF
+        ISTART = ISTART + NUMNEW(NROW)
+      ENDDO
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+      RETURN
+      END
diff --git a/interpolation/wvqlidx.F b/interpolation/wvqlidx.F
new file mode 100755
index 0000000..d22e167
--- /dev/null
+++ b/interpolation/wvqlidx.F
@@ -0,0 +1,371 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WVQLIDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+     X                         KNEWNUM, NUMNEW, NEWLATS,
+     X                         NEWIDX, DISTNEW)
+C
+C---->
+C*****WVQLIDX*
+C
+C     PURPOSE
+C     -------
+C
+C     Determines which nearest-neighbour values of an input global wave
+C     2D-spectra grid field to use for an output global wave 2D-spectra
+C     grid field.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WVQLIDX(KOLDNUM,NUMOLD,OLDLATS,OLDWEST,OLDEAST,
+C    X               KNEWNUM, NUMNEW, NEWLATS,
+C    X               NEWIDX, DISTNEW)
+C
+C     Input arguments
+C     ---------------
+C
+C     KOLDNUM - No. of meridians from North to South pole (input field)
+C     NUMOLD  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     OLDLATS - input field latitudes
+C     OLDWEST - western longitude of the input field (degrees)
+C     OLDEAST - eastern longitude of the input field (degrees)
+C
+C     KNEWNUM - No. of meridians from North to South pole (output field)
+C     NUMNEW  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     NEWLATS - output field latitudes
+C
+C     Output arguments
+C     ----------------
+C
+C     NEWIDX  - Indices of four neighbours
+C     DISTNEW - Distances of current 'box' edges from new point
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     The indices of the nearest four neighbouring grid points of the
+C     input field is assigned to each point of the output grid.
+C     The indices are zero if the output grid point is 'missing'.
+C
+C     The input field can be regular or quasi-regular, and can be
+C     global or a subarea.
+C     The output field can be regular or quasi-regular.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     None
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    January  1998
+C
+C
+C----<
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19410 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution
+C
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW   = 1)
+      PARAMETER (JPNE   = 2)
+      PARAMETER (JPSW   = 3)
+      PARAMETER (JPSE   = 4)
+      PARAMETER (JPN    = 5)
+      PARAMETER (JPS    = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Function arguments
+C
+      INTEGER KOLDNUM, NUMOLD, KNEWNUM, NUMNEW
+      DIMENSION NUMOLD(*), NUMNEW(*)
+      REAL OLDWEST, OLDEAST, OLDLATS, NEWLATS
+      DIMENSION OLDLATS(*), NEWLATS(*)
+      INTEGER NEWIDX
+      DIMENSION NEWIDX(4,*)
+      REAL*4 DISTNEW
+      DIMENSION DISTNEW(10,*)
+C
+C     Local arguments
+C
+      INTEGER K, NEWCOL, NEWROW, INCOL, LOOP, NEXT, NUMMAX
+      INTEGER I_NW, I_SW, I_N, I_S, I_NE, I_SE
+      REAL*8 DELONGN, DELONGS, DIFF, RESOL, DINC, DEPS
+      REAL*8 DIST_NW, DIST_SW, DIST_NE, DIST_SE, DIST_N, DIST_S
+      REAL*8 DISNW, DISNE, DISSW, DISSE
+      REAL*8 ZXIN, ZXIS, LON, LAT, OWEST, OEAST
+      DIMENSION LON(JPNMOUT*2)
+      LOGICAL LINGNS, LINGWE
+      INTEGER INDEXI
+      DIMENSION INDEXI(JPLLMAX)
+      LOGICAL LGLOBAL
+      DATA DEPS/0.00005/
+C
+C ---------------------------------------------------------------------
+C*    Section 1. Initalisation.
+C ---------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      WVQLIDX = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WVQLIDX: Wave interpolation requested.',JPQUIET)
+C
+C     Check latitude/longitude grid specification
+C
+      IF( KOLDNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIDX: Number of latitudes in input grid = ',KOLDNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIDX: And is greater than allowed maximum = ',JPLLMAX)
+        WVQLIDX = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Set up INDEXI for latitude lines in input lat/lon array
+C
+      INDEXI(1) = 0
+      DO LOOP = 2, KOLDNUM
+        INDEXI(LOOP) = INDEXI(LOOP-1) + NUMOLD(LOOP-1)
+      ENDDO
+C
+      OEAST = OLDEAST
+      OWEST = OLDWEST
+C
+C     Check whether the input field is global or a subarea
+C
+      NUMMAX = NUMOLD(1)
+      DO LOOP = 2, KOLDNUM
+        IF( NUMOLD(LOOP).GT.NUMMAX ) NUMMAX = NUMOLD(LOOP)
+      ENDDO
+      IF( NUMMAX.LE.0 ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIDX: Input wave field has no points',JPQUIET)
+        WVQLIDX = JPROUTINE + 2
+        GOTO 900
+      ENDIF
+C
+      LGLOBAL = ABS((OEAST-OWEST) - DBLE(360.0)).LT.DEPS
+C
+C ---------------------------------------------------------------------
+C*    Section 2. Interpolation.
+C ---------------------------------------------------------------------
+C
+  200 CONTINUE
+C
+      NEXT = 1
+C
+      DO 220 NEWROW = 1, KNEWNUM
+C
+C       Find old latitude rows to north and south of new latitude and
+C       set up the distance between new row and the old rows to N and S.
+C
+        DO LOOP = 1, KOLDNUM -1
+          IF( (NEWLATS(NEWROW).LE.OLDLATS(LOOP)) .AND.
+     X        (NEWLATS(NEWROW).GT.OLDLATS(LOOP+1)) ) THEN
+            I_N = LOOP
+            I_S = MIN(LOOP+1,KOLDNUM)
+            GOTO 205
+          ENDIF
+        ENDDO
+C
+        IF( NEWLATS(NEWROW).EQ.OLDLATS(KOLDNUM) ) THEN
+          I_N = KOLDNUM
+          I_S = KOLDNUM
+        ELSE
+          I_N = -1
+          I_S = -1
+        ENDIF
+C
+  205   CONTINUE
+        IF( I_N.NE.I_S) THEN
+          DIFF   = OLDLATS(I_N) - OLDLATS(I_S)
+          DIST_N = (OLDLATS(I_N) - NEWLATS(NEWROW)) / DIFF
+        ELSE
+          DIST_N = 1.0
+        ENDIF
+        DIST_S = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        LINGNS = .FALSE.
+        IF( I_N.GT.0 ) THEN
+          IF( (NUMOLD(I_N).GT.0).AND.(NUMOLD(I_S).GT.0) ) THEN
+C
+C           Yes, so set up the grid increments.
+C
+C           Note that the grid increments are different depending on
+C           whether or not the grid is global; global grids have an
+C           extra interval at the end (eg between 358.5 and 0.0), while
+C           subareas have outer limits defined by 'west' and 'east' and
+C           a given number of points in between.
+C
+            IF( LGLOBAL ) THEN
+              DELONGN = 360.0/DBLE(NUMOLD(I_N))
+              DELONGS = 360.0/DBLE(NUMOLD(I_S))
+            ELSE
+              DELONGN = (OEAST-OWEST)/DBLE(NUMOLD(I_N)-1)
+              DELONGS = (OEAST-OWEST)/DBLE(NUMOLD(I_S)-1)
+            ENDIF
+            LINGNS  = .TRUE.
+          ENDIF
+        ENDIF
+C
+C       Setup longitudes for the current row
+C
+        INCOL = NUMNEW(NEWROW)
+        IF( INCOL.NE.0 ) THEN
+            IF( LGLOBAL ) THEN
+             RESOL = 360.0/DBLE(INCOL)
+            ELSE
+             RESOL = (OEAST-OWEST)/(DBLE(INCOL)-1)
+            ENDIF
+             DO LOOP = 1, INCOL
+               LON(LOOP) = OLDWEST + DBLE(LOOP-1)*RESOL
+             ENDDO
+C
+          DO 210 NEWCOL = 1, INCOL
+C
+            LINGWE = (LON(NEWCOL).GT.OWEST).OR.(LON(NEWCOL).LT.OEAST)
+C
+            IF( LINGNS .AND. LINGWE ) THEN
+C
+C             If point to be interpolated is inside the input field ,
+C             work out distances from new point to four neighbours
+C
+              ZXIN = DMOD((LON(NEWCOL)+(DBLE(360.0)-OWEST)+DBLE(720.0)),
+     X                     DBLE(360.0))
+              ZXIS = ZXIN
+              ZXIN = ZXIN/DELONGN + 1.0
+              ZXIS = ZXIS/DELONGS + 1.0
+              I_NW = INT(ZXIN)
+              I_NE = I_NW + 1
+              I_SW = INT(ZXIS)
+              I_SE = I_SW + 1
+C
+C             Allow wrap-around
+C
+              I_NW = MOD(I_NW,NUMOLD(I_N))
+              I_NE = MOD(I_NE,NUMOLD(I_N))
+              I_SW = MOD(I_SW,NUMOLD(I_S))
+              I_SE = MOD(I_SE,NUMOLD(I_S))
+              IF( I_NW.EQ.0 ) I_NW = NUMOLD(I_N)
+              IF( I_SW.EQ.0 ) I_SW = NUMOLD(I_S)
+              IF( I_NE.EQ.0 ) I_NE = NUMOLD(I_N)
+              IF( I_SE.EQ.0 ) I_SE = NUMOLD(I_S)
+C
+C             Calculate distance from interpolated point to neighbours
+C
+              DIST_NW = ZXIN - REAL(I_NW)
+              DIST_NE = 1.0 - DIST_NW
+              DIST_SW = ZXIS - REAL(I_SW)
+              DIST_SE = 1.0 - DIST_SW
+C
+              DISTNEW(JPDISNW,NEXT) = (DIST_NW*DIST_NW + DIST_N*DIST_N)
+              DISTNEW(JPDISNE,NEXT) = (DIST_NE*DIST_NE + DIST_N*DIST_N)
+              DISTNEW(JPDISSW,NEXT) = (DIST_SW*DIST_SW + DIST_S*DIST_S)
+              DISTNEW(JPDISSE,NEXT) = (DIST_SE*DIST_SE + DIST_S*DIST_S)
+C
+              DISTNEW(JPNW,NEXT) = DIST_NW
+              DISTNEW(JPNE,NEXT) = DIST_NE
+              DISTNEW(JPSW,NEXT) = DIST_SW
+              DISTNEW(JPSE,NEXT) = DIST_SE
+              DISTNEW(JPN ,NEXT) = DIST_N
+              DISTNEW(JPS ,NEXT) = DIST_S
+C
+              NEWIDX(JPNW,NEXT) = INDEXI(I_N)+I_NW
+              NEWIDX(JPNE,NEXT) = INDEXI(I_N)+I_NE
+              NEWIDX(JPSW,NEXT) = INDEXI(I_S)+I_SW
+              NEWIDX(JPSE,NEXT) = INDEXI(I_S)+I_SE
+C
+C           If the point to be interpolated is outside the input field,
+C           set it to 'land'.
+C
+            ELSE
+cs             print*,'IDX LINGWE ',LINGWE
+cs              print*,'IDX ',LON(NEWCOL),OWEST
+cs			  print*,'IDX ',LON(NEWCOL),OEAST
+cs             print*,'IDX LINGNS ',LINGNS
+cs             print*,'IDX ',NUMOLD(I_N),NUMOLD(I_S)
+C
+              DISTNEW(JPNW,NEXT) = 0
+              DISTNEW(JPNE,NEXT) = 0
+              DISTNEW(JPSW,NEXT) = 0
+              DISTNEW(JPSE,NEXT) = 0
+              DISTNEW(JPN ,NEXT) = 0
+              DISTNEW(JPS ,NEXT) = 0
+C
+              DISTNEW(JPDISNW,NEXT) = 0
+              DISTNEW(JPDISNE,NEXT) = 0
+              DISTNEW(JPDISSW,NEXT) = 0
+              DISTNEW(JPDISSE,NEXT) = 0
+C
+              NEWIDX(JPNW,NEXT) = 0
+              NEWIDX(JPNE,NEXT) = 0
+              NEWIDX(JPSW,NEXT) = 0
+              NEWIDX(JPSE,NEXT) = 0
+C
+            ENDIF
+C
+            NEXT = NEXT + 1
+C
+  210     CONTINUE
+C
+        ENDIF
+C
+  220 CONTINUE
+C
+C ---------------------------------------------------------------------
+C*    Section 9. Closedown.
+C ---------------------------------------------------------------------
+C
+  900 CONTINUE
+C
+      IF( WVQLIDX.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG, 'WVQLIDX: successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_ERROR, 'WVQLIDX: failed.',JPQUIET)
+      ENDIF
+C
+      RETURN
+      END
diff --git a/interpolation/wvqlin2.F b/interpolation/wvqlin2.F
new file mode 100755
index 0000000..114366d
--- /dev/null
+++ b/interpolation/wvqlin2.F
@@ -0,0 +1,484 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WVQLIN2(KNUM,NUMPTS,KE_W,KN_S,RESON,OLDWAVE,
+     X                         NEWWAVE,NORTH,WEST,KPARAM,PMISS)
+C
+C---->
+C*****WVQLIN2*
+C
+C     PURPOSE
+C     -------
+C
+C     To interpolate a wave field quasi-regular latitude
+C     longitude grid to a regular latitude/longitude grid.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WVQLIN2(KNUM,NUMPTS,KE_W,KN_S,RESON,OLDWAVE,
+C    X               NEWWAVE,NORTH,WEST,KPARAM,PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     KNUM    - No. of meridians from North to South pole (input field)
+C     NUMPTS  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     KE_W    - First dimension of new array
+C               = Number of points E-W in new grid
+C     KN_S    - Second dimension of new array
+C               = Number of points N-S in new grid
+C     RESON   - Output grid resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Input and output grid northernmost latitude (degree)
+C     WEST    - Input and output grid westernmost  longitude (degree)
+C     KPARAM  - Field parameter code
+C     PMISS   - Missing value indicator
+C     RNS     - Difference in degrees in NS disrection
+C
+C     Output arguments
+C     ----------------
+
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     A bi-linear interpolation is only done if all four neighbouring
+C     points are sea.
+C     The nearest neighbouring grid point value is taken if one of the
+C     neighbouring points is missing.
+C     The interpolated point value is set to the 'missing' indicator
+C     value if the point is outside the input grid.
+C
+C     A field representing a 'direction' is resolved into components
+C     each of which is interpolated separately.
+C
+C     The output area is the same as the input area.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WVQLID2 - Calculate the indices of neighbouring points
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     Based on:
+C         SUBROUTINE INTERPOLATE
+C         Peter Janssen     ECMWF    September 1995
+C     and:
+C         SUBROUTINE EXPOINT
+C         Heinz Gunther     ECMWF    December  1989 
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    September 1996
+C
+C     J.D.Chambers      ECMWF    September 1998
+C     Modified to handle subarea input/output.
+C     The output area is the same as the input area.
+C
+C     J.D.Chambers      ECMWF    November 2000
+C     Modified to input grid resolution to be different from the
+C     output grid resolution.
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0. Arguments and variable
+C     -----------------------------------------------------------------|
+C
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19400 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution
+C
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW = 1)
+      PARAMETER (JPNE = 2)
+      PARAMETER (JPSW = 3)
+      PARAMETER (JPSE = 4)
+      PARAMETER (JPN  = 5)
+      PARAMETER (JPS  = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Subroutine arguments
+C
+      INTEGER KNUM, NUMPTS, KE_W, KN_S, KPARAM
+      DIMENSION NUMPTS(*)
+      REAL RESON, NORTH, WEST, PMISS
+      REAL RNS
+      REAL OLDWAVE, NEWWAVE
+      DIMENSION OLDWAVE(*),  NEWWAVE(*)
+C
+C     Local arguments
+C
+      INTEGER NLAT, K, I, NEWROW, NEWCOL, I1N, I1S, I_N, I_S, I2N, I2S
+      REAL*4 DELONGN, DELONGS, DELAT, DI1N, DI1S, DI2N, DI2S
+      REAL*4 DIST_N, DIST_S
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*4 U1, U2, ZXIN, ZXIS
+      REAL LON, LAT
+      DIMENSION LON(JPNMOUT*2),LAT(JPNMOUT+1)
+      LOGICAL INGRID, LDIREC
+      INTEGER NW_PT, NE_PT, SW_PT, SE_PT
+      REAL*4 NWVALUE, NEVALUE, SWVALUE, SEVALUE
+      REAL*4 RAD
+      DATA RAD/0.017453293/
+      REAL*4 CNW_PT, CNE_PT, CSW_PT, CSE_PT
+      REAL*4 SNW_PT, SNE_PT, SSW_PT, SSE_PT
+      REAL*4 C1, C2, S1, S2, CC, SS
+C
+      REAL OLDLATS(JPLLMAX), OLDEAST
+      REAL OLDNS
+      INTEGER ISTART, IEND
+      INTEGER LOCATE
+      INTEGER NEXT, NUMNEW(JPLLMAX)
+      INTEGER IRET, WVQLID2
+      EXTERNAL WVQLID2
+      INTEGER XKNUM,XKE_W,XKN_S
+      DATA XKNUM/-1/,XKE_W/-1/,XKN_S/-1/
+      REAL XRESON,XNORTH,XWEST
+      DATA XRESON/-999.0/,XNORTH/-999.0/,XWEST/-999.0/
+      INTEGER IFIRST, NEWIDX(4,1440*721)
+      DATA IFIRST/0/
+      REAL*4 DISTNEW(10,1440*721)
+C
+      INTEGER IOS
+      INTEGER OLDKNUM
+      DATA OLDKNUM/0/
+      INTEGER INDEX(JPLLMAX)
+      REAL DEPS
+      DATA DEPS/0.00005/
+C     Inline function - tests TRUE if A is a missing value
+C     EPS      Tolerance on missing data flag
+      REAL EPS
+      DATA EPS/0.1/
+      LOGICAL LSW,LSE,LNE,LNW,LTEMP
+C
+      SAVE IFIRST,XKNUM,XKE_W,XKN_S,XRESON,XNORTH,XWEST,NEWIDX,DISTNEW
+
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initalisation.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WVQLIN2 = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WVQLIN2: Wave interpolation requested.',JPQUIET)
+C
+C     Check reduced latitude/longitude grid specification
+C
+      IF( KNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIN2: Number of latitudes in input lat/long grid = ',KNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIN2: And is greater than allowed maximum = ',JPLLMAX)
+        WVQLIN2 = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Ensure working array dimensions are adequate for required output.
+C
+      IF( (KE_W.GT.JPNMOUT*2).OR.(KN_S.GT.JPNMOUT+1) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIN2: Internal array dimensions are too small',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLIN2: for given lat/long output field.',JPQUIET)
+        WVQLIN2 = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Set up index for latitude lines in the input reduced lat/lon array
+C
+      INDEX(1) = 0
+      DO K = 2, KNUM
+        INDEX(K) = INDEX(K-1) + NUMPTS(K-1)
+      ENDDO
+
+      DO K = 1, KN_S
+        LAT(K)     = NORTH - FLOAT(K-1)*RESON
+        NUMNEW(K)  = KE_W
+      ENDDO
+C
+C     Calculate latitudes and longitudes of output grid points.
+C
+      DO I = 1,KE_W
+        LON(I) = FLOAT(I-1)*RESON
+      ENDDO
+C
+C     Calculate latitudes for input (old) grid.
+C     (Input and output area are same)
+C
+      OLDNS =  RNS/REAL(KNUM-1)
+      DO K = 1, KNUM
+        OLDLATS(K) = NORTH - FLOAT(K-1)*OLDNS
+      ENDDO
+C
+C     Find first and last latitudes in input grid which are not empty
+C
+      ISTART = 1
+      DO K = 1, KNUM/2
+        IF( NUMPTS(K).EQ.0 ) ISTART = ISTART + 1
+      ENDDO
+C
+      IEND = KNUM
+      DO K = KNUM, (KNUM/2) + 1, -1
+        IF( NUMPTS(K).EQ.0 ) IEND = IEND - 1
+      ENDDO
+C
+C     For the regular output grid, calculate its latitudes and fill
+C     in the number of points along each latitude.
+C
+C
+C     Setup East depending on whether or not there is wrap-around
+C
+      IF( ABS((KE_W*RESON)-360.0).LT.DEPS ) THEN
+        OLDEAST = WEST + KE_W*RESON
+      ELSE
+        OLDEAST = WEST + (KE_W-1)*RESON
+      ENDIF
+C
+C     Initialise all points with 'missing data' indicator
+C
+      NEXT  = 0
+      DO NEWROW = 1, KN_S
+        DO NEWCOL = 1, KE_W
+          NEXT = NEXT + 1
+          NEWWAVE(NEXT) = PMISS
+        ENDDO
+      ENDDO
+C
+C     Wave direction parameters need special handling
+C     (MWD, MDWW, MDPS, MDWI)
+C
+      LDIREC = ( (KPARAM.EQ.230) .OR.
+     X           (KPARAM.EQ.235) .OR.
+     X           (KPARAM.EQ.238) .OR.
+     X           (KPARAM.EQ.242) )
+C
+cs	  print*,KNUM,KE_W,KN_S,RESON,NORTH,WEST,KPARAM,PMISS,RNS
+C     -----------------------------------------------------------------|
+C*    Section 2. Interpolation.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Only calculate the indices on the first time through
+C
+      IF( (IFIRST.EQ.0 )     .OR.
+     X    ( KNUM.NE.XKNUM )  .OR.
+     X    ( KE_W.NE.XKE_W )  .OR.
+     X    ( KN_S.NE.XKN_S )  .OR.
+     X    ( RESON.NE.XRESON ).OR.
+     X    ( NORTH.NE.XNORTH ).OR.
+     X    ( WEST.NE.XWEST ) ) THEN
+C
+c        print*,'DISS KNUM ', KNUM,' WEST ',WEST, 'KN_S ',KN_S
+c        print*,'DISS OLDEAST ', OLDEAST
+        IRET =  WVQLID2(KNUM,NUMPTS,OLDLATS,WEST,OLDEAST,
+     X                  KN_S,NUMNEW,LAT,NEWIDX,DISTNEW)
+        IFIRST = 1
+        XKNUM  = KNUM
+        XKE_W  = KE_W
+        XKN_S  = KN_S
+        XRESON = RESON
+        XNORTH = NORTH
+        XWEST  = WEST
+      ENDIF
+C
+      DELAT = OLDNS
+      NEXT  = 0
+C
+      DO 220 NEWROW = 1, KN_S
+C
+C       Set up the distance between new row and the old rows to N and S.
+C
+        NLAT  = NINT((NORTH - LAT(NEWROW))/DELAT) + 1
+        I_N   = NLAT
+        I_S   = MIN(I_N+1,KNUM*2)
+        DIST_N  = ((NORTH - DELAT*(I_N-1)) - LAT(NEWROW)) / DELAT
+        DIST_S  = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+
+        IF( (NUMPTS(I_N).GT.0).AND.(NUMPTS(I_S).GT.0) ) THEN
+C
+C         Yes, use the calculated indices
+C
+          DO 210 NEWCOL = 1, KE_W
+
+            NEXT = NEXT + 1
+C
+            NW_PT = NEWIDX(JPNW,NEXT)
+            NE_PT = NEWIDX(JPNE,NEXT)
+            SW_PT = NEWIDX(JPSW,NEXT)
+            SE_PT = NEWIDX(JPSE,NEXT)
+            NWVALUE = OLDWAVE(NW_PT)
+            NEVALUE = OLDWAVE(NE_PT)
+            SWVALUE = OLDWAVE(SW_PT)
+            SEVALUE = OLDWAVE(SE_PT)
+C
+C           Test if any one of the four neighbouring points is missing.
+C
+              LTEMP = .FALSE.
+              LSE = .FALSE.
+             IF(ABS(SEVALUE-PMISS) .LT. EPS)   LSE = .TRUE.
+              LSW = .FALSE.
+             IF(ABS(SWVALUE-PMISS) .LT. EPS)   LSW = .TRUE.
+              LNE = .FALSE.
+             IF(ABS(NEVALUE-PMISS) .LT. EPS)   LNE = .TRUE.
+              LNW = .FALSE.
+             IF(ABS(NWVALUE-PMISS) .LT. EPS)   LNW = .TRUE.
+C
+            IF( (NW_PT.EQ.0 .OR. LNW) .OR.
+     X          (NE_PT.EQ.0 .OR. LNE) .OR.
+     X          (SW_PT.EQ.0 .OR. LSW) .OR.
+     X          (SE_PT.EQ.0 .OR. LSE) ) THEN
+C             If so, take nearest grid point value.
+C
+              DISNW = DISTNEW(JPDISNW,NEXT)
+              DISNE = DISTNEW(JPDISNE,NEXT)
+              DISSW = DISTNEW(JPDISSW,NEXT)
+              DISSE = DISTNEW(JPDISSE,NEXT)
+C
+              IF( (DISNW.LE.DISNE).AND.
+     X            (DISNW.LE.DISSW).AND.
+     X            (DISNW.LE.DISSE) ) THEN
+cs                NEWWAVE(NEXT) = NWVALUE
+                LOCATE = NW_PT
+                LTEMP  = LNW
+C
+              ELSE IF( (DISNE.LE.DISSW).AND.
+     X                 (DISNE.LE.DISSE) ) THEN
+cs                NEWWAVE(NEXT) = NEVALUE
+                LOCATE = NE_PT
+                LTEMP  = LNE
+C
+              ELSE IF( (DISSW.LE.DISSE) ) THEN
+cs                NEWWAVE(NEXT) = SWVALUE
+                LOCATE = SW_PT
+                LTEMP  = LSW
+C
+              ELSE 
+cs                NEWWAVE(NEXT) = SEVALUE
+                LOCATE = SE_PT
+                LTEMP  = LSE
+C
+              ENDIF
+
+              IF( .NOT.LTEMP.AND.LOCATE.NE.0) THEN 
+c              IF( LOCATE.NE.0) THEN 
+                  NEWWAVE(NEXT) = OLDWAVE(LOCATE)
+              ENDIF
+
+C
+            ELSE
+C
+C             Use bi-linear interpolation from four
+C             neighbouring sea points.
+C
+              DI1N = DISTNEW(JPNW,NEXT)
+              DI2N = DISTNEW(JPNE,NEXT)
+              DI1S = DISTNEW(JPSW,NEXT)
+              DI2S = DISTNEW(JPSE,NEXT)
+              DIST_N  = DISTNEW(JPN,NEXT)
+              DIST_S  = DISTNEW(JPS,NEXT)
+C
+              NW_PT = OLDWAVE(NW_PT)
+              NE_PT = OLDWAVE(NE_PT)
+              SW_PT = OLDWAVE(SW_PT)
+              SE_PT = OLDWAVE(SE_PT)
+C
+              IF( .NOT. LDIREC ) THEN
+                U1 = NWVALUE*DI2N + NEVALUE*DI1N
+                U2 = SWVALUE*DI2S + SEVALUE*DI1S
+                NEWWAVE(NEXT) = U1*DIST_S + U2*DIST_N
+C
+              ELSE
+C
+C               Fields representing a 'direction': resolve into
+C               components and interpolate each separately.
+C
+                CNW_PT = COS(NWVALUE*RAD)
+                CNE_PT = COS(NEVALUE*RAD)
+                CSW_PT = COS(SWVALUE*RAD)
+                CSE_PT = COS(SEVALUE*RAD)
+                SNW_PT = SIN(NWVALUE*RAD)
+                SNE_PT = SIN(NEVALUE*RAD)
+                SSW_PT = SIN(SWVALUE*RAD)
+                SSE_PT = SIN(SEVALUE*RAD)
+                C1 = CNW_PT*DI2N + CNE_PT*DI1N
+                C2 = CSW_PT*DI2S + CSE_PT*DI1S
+                CC = C1*DIST_S + C2*DIST_N
+                S1 = SNW_PT*DI2N + SNE_PT*DI1N
+                S2 = SSW_PT*DI2S + SSE_PT*DI1S
+                SS = S1*DIST_S + S2*DIST_N
+                IF( SS.LT.0.0 ) THEN
+                  NEWWAVE(NEXT) = ATAN2(SS,CC)/RAD + 360.0
+                ELSE
+                  NEWWAVE(NEXT) = ATAN2(SS,CC)/RAD
+                ENDIF
+              ENDIF
+            ENDIF
+  210     CONTINUE
+        ELSE
+           NEXT = NEXT + KE_W
+        ENDIF
+C
+  220 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( WVQLIN2.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'WVQLIN2: Wave interpolation successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X    'WVQLIN2: Wave interpolation failed.',JPQUIET)
+      ENDIF
+c     call abort()
+C
+      RETURN
+      END
diff --git a/interpolation/wvqlint.F b/interpolation/wvqlint.F
new file mode 100755
index 0000000..cba750e
--- /dev/null
+++ b/interpolation/wvqlint.F
@@ -0,0 +1,447 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION WVQLINT(KNUM,NUMPTS,KE_W,KN_S,RESON,OLDWAVE,
+     X                         NEWWAVE,NORTH,WEST,KPARAM,PMISS,RNS)
+C
+C---->
+C*****WVQLINT*
+C
+C     PURPOSE
+C     -------
+C
+C     To interpolate a wave field quasi-regular latitude
+C     longitude grid to a regular latitude/longitude grid.
+C
+C
+C     INTERFACE
+C     ---------
+C
+C     IRET = WVQLINT(KNUM,NUMPTS,KE_W,KN_S,RESON,OLDWAVE,
+C    X               NEWWAVE,NORTH,WEST,KPARAM,PMISS)
+C
+C     Input arguments
+C     ---------------
+C
+C     KNUM    - No. of meridians from North to South pole (input field)
+C     NUMPTS  - Array giving number of points along each latitude
+C               (empty latitudes have entry 0)
+C     KE_W    - First dimension of new array
+C               = Number of points E-W in new grid
+C     KN_S    - Second dimension of new array
+C               = Number of points N-S in new grid
+C     RESON   - Output grid resolution (degrees)
+C     OLDWAVE - Original wave field
+C     NORTH   - Input and output grid northernmost latitude (degree)
+C     WEST    - Input and output grid westernmost  longitude (degree)
+C     KPARAM  - Field parameter code
+C     PMISS   - Missing value indicator
+C     RNS     - Difference in degrees in NS disrection
+C
+C     Output arguments
+C     ----------------
+
+C     NEWWAVE - New wave field
+C
+C     Function returns 0 if the interpolation was OK.
+C
+C
+C     METHOD
+C     ------
+C
+C     A bi-linear interpolation is only done if all four neighbouring
+C     points are sea.
+C     The nearest neighbouring grid point value is taken if one of the
+C     neighbouring points is missing.
+C     The interpolated point value is set to the 'missing' indicator
+C     value if the point is outside the input grid.
+C
+C     A field representing a 'direction' is resolved into components
+C     each of which is interpolated separately.
+C
+C     The output area is the same as the input area.
+C
+C
+C     EXTERNALS
+C     ---------
+C
+C     WVQLIDX - Calculate the indices of neighbouring points
+C     INTLOG  - Log error message.
+C
+C
+C     REFERENCE
+C     ---------
+C
+C     Based on:
+C         SUBROUTINE INTERPOLATE
+C         Peter Janssen     ECMWF    September 1995
+C     and:
+C         SUBROUTINE EXPOINT
+C         Heinz Gunther     ECMWF    December  1989 
+C
+C
+C     Author.
+C     -------
+C
+C     J.D.Chambers      ECMWF    September 1996
+C
+C     J.D.Chambers      ECMWF    September 1998
+C     Modified to handle subarea input/output.
+C     The output area is the same as the input area.
+C
+C     J.D.Chambers      ECMWF    November 2000
+C     Modified to input grid resolution to be different from the
+C     output grid resolution.
+C
+C----<
+C
+C     -----------------------------------------------------------------|
+C*    Section 0. Arguments and variable
+C     -----------------------------------------------------------------|
+C
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+C
+C     Parameters
+C
+      INTEGER JPROUTINE
+      PARAMETER ( JPROUTINE = 19400 )
+      INTEGER JPLLMAX
+      PARAMETER ( JPLLMAX = 1801 )
+C                             `--> allow upto 0.1 degree resolution
+      INTEGER JPNMOUT
+      PARAMETER ( JPNMOUT = 1800 )
+C                             `--> allow upto 0.1 degree resolution
+C
+      INTEGER JPNW, JPNE, JPSW, JPSE, JPN, JPS
+      INTEGER JPDISNW, JPDISNE, JPDISSW, JPDISSE
+      PARAMETER (JPNW = 1)
+      PARAMETER (JPNE = 2)
+      PARAMETER (JPSW = 3)
+      PARAMETER (JPSE = 4)
+      PARAMETER (JPN  = 5)
+      PARAMETER (JPS  = 6)
+      PARAMETER (JPDISNW = 7)
+      PARAMETER (JPDISNE = 8)
+      PARAMETER (JPDISSW = 9)
+      PARAMETER (JPDISSE = 10)
+C
+C     Subroutine arguments
+C
+      INTEGER KNUM, NUMPTS, KE_W, KN_S, KPARAM
+      DIMENSION NUMPTS(*)
+      REAL RESON, OLDWAVE, NEWWAVE, NORTH, WEST, PMISS
+      REAL RNS
+      DIMENSION OLDWAVE(*)
+      DIMENSION NEWWAVE(KE_W,KN_S)
+C
+C     Local arguments
+C
+      INTEGER NLAT, K, I, NEWROW, NEWCOL, I1N, I1S, I_N, I_S, I2N, I2S
+      REAL*4 DELONGN, DELONGS, DELAT, DI1N, DI1S, DI2N, DI2S
+      REAL*4 DIST_N, DIST_S
+      REAL*4 DISNW, DISNE, DISSW, DISSE
+      REAL*4 U1, U2, ZXIN, ZXIS
+      REAL LON, LAT
+      DIMENSION LON(JPNMOUT*2),LAT(JPNMOUT+1)
+      LOGICAL INGRID, LDIREC
+      INTEGER NW_PT, NE_PT, SW_PT, SE_PT
+      REAL*4 NWVALUE, NEVALUE, SWVALUE, SEVALUE
+      REAL*4 RAD
+      DATA RAD/0.017453293/
+      REAL*4 CNW_PT, CNE_PT, CSW_PT, CSE_PT
+      REAL*4 SNW_PT, SNE_PT, SSW_PT, SSE_PT
+      REAL*4 C1, C2, S1, S2, CC, SS
+C
+      REAL OLDLATS(JPLLMAX), OLDEAST
+      REAL OLDNS
+      INTEGER ISTART, IEND
+      INTEGER NEXT, NUMNEW(JPLLMAX)
+      INTEGER IRET, WVQLIDX
+      EXTERNAL WVQLIDX
+      INTEGER XKNUM,XKE_W,XKN_S
+      DATA XKNUM/-1/,XKE_W/-1/,XKN_S/-1/
+      REAL XRESON,XNORTH,XWEST
+      DATA XRESON/-999.0/,XNORTH/-999.0/,XWEST/-999.0/
+      INTEGER IFIRST, NEWIDX(4,1440*721)
+      DATA IFIRST/0/
+      REAL*4 DISTNEW(10,1440*721)
+C
+      INTEGER OLDKNUM
+      DATA OLDKNUM/0/
+      INTEGER INDEX(JPLLMAX)
+      REAL DEPS
+      DATA DEPS/0.00005/
+C
+      SAVE IFIRST,XKNUM,XKE_W,XKN_S,XRESON,XNORTH,XWEST,NEWIDX,DISTNEW
+C
+C     -----------------------------------------------------------------|
+C*    Section 1. Initalisation.
+C     -----------------------------------------------------------------|
+C
+  100 CONTINUE
+C
+      WVQLINT = 0
+      CALL INTLOG(JP_DEBUG,
+     X   'WVQLINT: Wave interpolation requested.',JPQUIET)
+C
+C     Check reduced latitude/longitude grid specification
+C
+      IF( KNUM.GT.JPLLMAX ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLINT: Number of latitudes in input lat/long grid = ',KNUM)
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLINT: And is greater than allowed maximum = ',JPLLMAX)
+        WVQLINT = JPROUTINE + 1
+        GOTO 900
+      ENDIF
+C
+C     Ensure working array dimensions are adequate for required output.
+C
+      IF( (KE_W.GT.JPNMOUT*2).OR.(KN_S.GT.JPNMOUT+1) ) THEN
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLINT: Internal array dimensions are too small',JPQUIET)
+        CALL INTLOG(JP_ERROR,
+     X    'WVQLINT: for given lat/long output field.',JPQUIET)
+        WVQLINT = JPROUTINE + 3
+        GOTO 900
+      ENDIF
+C
+C     Set up index for latitude lines in the input reduced lat/lon array
+C
+      INDEX(1) = 0
+      DO K = 2, KNUM
+        INDEX(K) = INDEX(K-1) + NUMPTS(K-1)
+      ENDDO
+
+      DO K = 1, KN_S
+        LAT(K)     = NORTH - FLOAT(K-1)*RESON
+        NUMNEW(K)  = KE_W
+      ENDDO
+C
+C     Calculate latitudes and longitudes of output grid points.
+C
+      DO I = 1,KE_W
+        LON(I) = FLOAT(I-1)*RESON
+      ENDDO
+C
+C     Calculate latitudes for input (old) grid.
+C     (Input and output area are same)
+C
+      OLDNS =  RNS/REAL(KNUM-1)
+      DO K = 1, KNUM
+        OLDLATS(K) = NORTH - FLOAT(K-1)*OLDNS
+      ENDDO
+C
+C     Find first and last latitudes in input grid which are not empty
+C
+      ISTART = 1
+      DO K = 1, KNUM/2
+        IF( NUMPTS(K).EQ.0 ) ISTART = ISTART + 1
+      ENDDO
+C
+      IEND = KNUM
+      DO K = KNUM, (KNUM/2) + 1, -1
+        IF( NUMPTS(K).EQ.0 ) IEND = IEND - 1
+      ENDDO
+C
+C     For the regular output grid, calculate its latitudes and fill
+C     in the number of points along each latitude.
+C
+C
+C     Setup East depending on whether or not there is wrap-around
+C
+      IF( ABS((KE_W*RESON)-360.0).LT.DEPS ) THEN
+        OLDEAST = WEST + KE_W*RESON
+      ELSE
+        OLDEAST = WEST + (KE_W-1)*RESON
+      ENDIF
+C
+C     Initialise all points with 'missing data' indicator
+C
+      DO NEWROW = 1, KN_S
+        DO NEWCOL = 1, KE_W
+          NEWWAVE(NEWCOL,NEWROW) = PMISS
+        ENDDO
+      ENDDO
+C
+C     Wave direction parameters need special handling
+C     (MWD, MDWW, MDPS, MDWI)
+C
+      LDIREC = ( (KPARAM.EQ.230) .OR.
+     X           (KPARAM.EQ.235) .OR.
+     X           (KPARAM.EQ.238) .OR.
+     X           (KPARAM.EQ.242) )
+C
+C     -----------------------------------------------------------------|
+C*    Section 2. Interpolation.
+C     -----------------------------------------------------------------|
+C
+  200 CONTINUE
+C
+C     Only calculate the indices on the first time through
+C
+      IF( (IFIRST.EQ.0 )     .OR.
+     X    ( KNUM.NE.XKNUM )  .OR.
+     X    ( KE_W.NE.XKE_W )  .OR.
+     X    ( KN_S.NE.XKN_S )  .OR.
+     X    ( RESON.NE.XRESON ).OR.
+     X    ( NORTH.NE.XNORTH ).OR.
+     X    ( WEST.NE.XWEST ) ) THEN
+C
+        IRET =  WVQLIDX(KNUM,NUMPTS,OLDLATS,WEST,OLDEAST,
+     X                  KN_S,NUMNEW,LAT,NEWIDX,DISTNEW)
+        IFIRST = 1
+        XKNUM  = KNUM
+        XKE_W  = KE_W
+        XKN_S  = KN_S
+        XRESON = RESON
+        XNORTH = NORTH
+        XWEST  = WEST
+      ENDIF
+C
+      DELAT = OLDNS
+      NEXT  = 0
+C
+      DO 220 NEWROW = 1, KN_S
+C
+C       Set up the distance between new row and the old rows to N and S.
+C
+        NLAT  = NINT((NORTH - LAT(NEWROW))/DELAT) + 1
+        I_N   = NLAT
+        I_S   = MIN(I_N+1,KNUM*2)
+        DIST_N  = ((NORTH - DELAT*(I_N-1)) - LAT(NEWROW)) / DELAT
+        DIST_S  = 1.0 - DIST_N
+C
+C       Check if the new interpolated row lies between 2 old rows which
+C       have data points
+C
+        IF( (NUMPTS(I_N).GT.0).AND.(NUMPTS(I_S).GT.0) ) THEN
+C
+C         Yes, use the calculated indices
+C
+          DO 210 NEWCOL = 1, KE_W
+C
+            NEXT = NEXT + 1
+C
+            NW_PT = NEWIDX(JPNW,NEXT)
+            NE_PT = NEWIDX(JPNE,NEXT)
+            SW_PT = NEWIDX(JPSW,NEXT)
+            SE_PT = NEWIDX(JPSE,NEXT)
+            NWVALUE = OLDWAVE(NW_PT)
+            NEVALUE = OLDWAVE(NE_PT)
+            SWVALUE = OLDWAVE(SW_PT)
+            SEVALUE = OLDWAVE(SE_PT)
+C
+C           Test if any one of the four neighbouring points is missing.
+C
+            IF( (NW_PT.EQ.0 .OR. NWVALUE.EQ.PMISS) .OR.
+     X          (NE_PT.EQ.0 .OR. NEVALUE.EQ.PMISS) .OR.
+     X          (SW_PT.EQ.0 .OR. SWVALUE.EQ.PMISS) .OR.
+     X          (SE_PT.EQ.0 .OR. SEVALUE.EQ.PMISS) ) THEN
+C
+C             If so, take nearest grid point value.
+C
+              DISNW = DISTNEW(JPDISNW,NEXT)
+              DISNE = DISTNEW(JPDISNE,NEXT)
+              DISSW = DISTNEW(JPDISSW,NEXT)
+              DISSE = DISTNEW(JPDISSE,NEXT)
+C
+              IF( (DISNW.LE.DISNE).AND.
+     X            (DISNW.LE.DISSW).AND.
+     X            (DISNW.LE.DISSE) ) THEN
+                NEWWAVE(NEWCOL,NEWROW) = NWVALUE
+C
+              ELSE IF( (DISNE.LE.DISSW).AND.
+     X                 (DISNE.LE.DISSE) ) THEN
+                NEWWAVE(NEWCOL,NEWROW) = NEVALUE
+C
+              ELSE IF( (DISSW.LE.DISSE) ) THEN
+                NEWWAVE(NEWCOL,NEWROW) = SWVALUE
+C
+              ELSE
+                NEWWAVE(NEWCOL,NEWROW) = SEVALUE
+C
+              ENDIF
+C
+            ELSE
+C
+C             Use bi-linear interpolation from four
+C             neighbouring sea points.
+C
+              DI1N = DISTNEW(JPNW,NEXT)
+              DI2N = DISTNEW(JPNE,NEXT)
+              DI1S = DISTNEW(JPSW,NEXT)
+              DI2S = DISTNEW(JPSE,NEXT)
+              DIST_N  = DISTNEW(JPN,NEXT)
+              DIST_S  = DISTNEW(JPS,NEXT)
+C
+              NW_PT = OLDWAVE(NW_PT)
+              NE_PT = OLDWAVE(NE_PT)
+              SW_PT = OLDWAVE(SW_PT)
+              SE_PT = OLDWAVE(SE_PT)
+C
+              IF( .NOT. LDIREC ) THEN
+                U1 = NWVALUE*DI2N + NEVALUE*DI1N
+                U2 = SWVALUE*DI2S + SEVALUE*DI1S
+                NEWWAVE(NEWCOL,NEWROW) = U1*DIST_S + U2*DIST_N
+C
+              ELSE
+C
+C               Fields representing a 'direction': resolve into
+C               components and interpolate each separately.
+C
+                CNW_PT = COS(NWVALUE*RAD)
+                CNE_PT = COS(NEVALUE*RAD)
+                CSW_PT = COS(SWVALUE*RAD)
+                CSE_PT = COS(SEVALUE*RAD)
+                SNW_PT = SIN(NWVALUE*RAD)
+                SNE_PT = SIN(NEVALUE*RAD)
+                SSW_PT = SIN(SWVALUE*RAD)
+                SSE_PT = SIN(SEVALUE*RAD)
+                C1 = CNW_PT*DI2N + CNE_PT*DI1N
+                C2 = CSW_PT*DI2S + CSE_PT*DI1S
+                CC = C1*DIST_S + C2*DIST_N
+                S1 = SNW_PT*DI2N + SNE_PT*DI1N
+                S2 = SSW_PT*DI2S + SSE_PT*DI1S
+                SS = S1*DIST_S + S2*DIST_N
+                IF( SS.LT.0.0 ) THEN
+                  NEWWAVE(NEWCOL,NEWROW) = ATAN2(SS,CC)/RAD + 360.0
+                ELSE
+                  NEWWAVE(NEWCOL,NEWROW) = ATAN2(SS,CC)/RAD
+                ENDIF
+              ENDIF
+            ENDIF
+  210     CONTINUE
+        ELSE
+           NEXT = NEXT + KE_W
+        ENDIF
+C
+  220 CONTINUE
+C
+C     -----------------------------------------------------------------|
+C*    Section 9. Closedown.
+C     -----------------------------------------------------------------|
+C
+  900 CONTINUE
+C
+      IF( WVQLINT.EQ.0 ) THEN
+        CALL INTLOG(JP_DEBUG,
+     X    'WVQLINT: Wave interpolation successful.',JPQUIET)
+      ELSE
+        CALL INTLOG(JP_DEBUG,
+     X    'WVQLINT: Wave interpolation failed.',JPQUIET)
+      ENDIF
+c     call abort()
+C
+      RETURN
+      END
diff --git a/interpolation/xrotate.F b/interpolation/xrotate.F
new file mode 100755
index 0000000..c75395b
--- /dev/null
+++ b/interpolation/xrotate.F
@@ -0,0 +1,84 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE XROTATE(RANGLE,X,Y,Z,RX,RY,RZ,INROW)
+C---->
+C**** XROTATE
+C
+C     Purpose
+C     -------
+C
+C     Rotate an array of (x,y,z) values about the x-axis.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL XROTATE(RANGLE,X,Y,Z,RX,RY,RZ,INROW)
+C
+C     Input
+C     -----
+C
+C     RANGLE  - The angle of rotation (degrees)
+C     (X,Y,Z) - Arrays of input (x,y,z) values.
+C     INROW   - Number of coordinate values.
+C
+C
+C     Output
+C     ------
+C
+C     (RX,RY,RZ) - Arrays of rotated (x,y,z) values.
+C
+C
+C     Method
+C     ------
+C
+C     X remains unchanged.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      REAL RANGLE,X,Y,Z,RX,RY,RZ
+      DIMENSION X(*),Y(*),Z(*),RX(*),RY(*),RZ(*)
+      INTEGER INROW
+C
+C     Local variables
+C
+      REAL FACTOR, ANGLE, SINA, COSA
+      DATA FACTOR/0.017453293/
+      INTEGER LOOP
+C
+      ANGLE = RANGLE * FACTOR
+      SINA  = SIN(ANGLE)
+      COSA  = COS(ANGLE)
+C
+      DO LOOP = 1, INROW
+        RX(LOOP) = X(LOOP)
+        RY(LOOP) =  Y(LOOP)*COSA + Z(LOOP)*SINA
+        RZ(LOOP) = -Y(LOOP)*SINA + Z(LOOP)*COSA
+      ENDDO
+C
+      RETURN
+      END
diff --git a/interpolation/xyz2ll.F b/interpolation/xyz2ll.F
new file mode 100755
index 0000000..58fd008
--- /dev/null
+++ b/interpolation/xyz2ll.F
@@ -0,0 +1,97 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE XYZ2LL(X,Y,Z,RLAT,RLONG,INROW)
+C---->
+C**** XYZ2LL
+C
+C     Purpose
+C     -------
+C
+C     Converts an array of (x,y,z) coordinates to an
+C     array of latitude/longitude values.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL XYZ2LL(X,Y,Z,RLAT,RLONG,INROW)
+C
+C     Input
+C     -----
+C
+C     (X,Y,Z) - Array of coordinates.
+C     INROW   - Count of coordinates.
+C
+C
+C     Output
+C     ------
+C
+C     RLAT  - Array of latitudes.
+C     RLONG - Array of corresponding longitudes.
+C
+C
+C     Method
+C     ------
+C
+C     Z axis is the polar axis directed from south to north.
+C     X and Y axes are in the equatorial plane and have origin at the
+C     centre of the Earth. The X axis passes through (O north, 0 east).
+C     Longitude values are in range (0,360).
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      REAL X,Y,Z,RLAT,RLONG
+      DIMENSION X(*),Y(*),Z(*),RLAT(*),RLONG(*)
+      INTEGER INROW
+C
+C     Local variables
+C
+      REAL*8 FACTOR
+      DATA FACTOR/57.2957763671875/
+      INTEGER LOOP
+C
+      DO LOOP = 1, INROW
+        RLAT(LOOP)  = ASIN(Z(LOOP)) * FACTOR
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        IF( ABS(X(LOOP)).GT.0.0001 ) THEN
+          RLONG(LOOP) = ATAN2(Y(LOOP),X(LOOP)) * FACTOR
+        ELSE IF ( Y(LOOP).GT.0.0 ) THEN
+          RLONG(LOOP) = 90.0
+        ELSE
+          RLONG(LOOP) = -90.0
+        ENDIF
+      ENDDO
+C
+      DO LOOP = 1, INROW
+        IF(RLONG(LOOP).LT.0.0) RLONG(LOOP) = RLONG(LOOP) + 360.0
+      ENDDO
+C
+      RETURN
+      END
+
diff --git a/interpolation/yrotate.F b/interpolation/yrotate.F
new file mode 100755
index 0000000..4d00762
--- /dev/null
+++ b/interpolation/yrotate.F
@@ -0,0 +1,84 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE YROTATE(RANGLE,X,Y,Z,RX,RY,RZ,INROW)
+C---->
+C**** YROTATE
+C
+C     Purpose
+C     -------
+C
+C     Rotate an array of (x,y,z) values about the y-axis.
+C
+C
+C     Interface
+C     ---------
+C
+C     CALL YROTATE(RANGLE,X,Y,Z,RX,RY,RZ,INROW)
+C
+C     Input
+C     -----
+C
+C     RANGLE  - The angle of rotation (degrees)
+C     (X,Y,Z) - Arrays of input (x,y,z) values.
+C     INROW   - Number of coordinate values.
+C
+C
+C     Output
+C     ------
+C
+C     (RX,RY,RZ) - Arrays of rotated (x,y,z) values.
+C
+C
+C     Method
+C     ------
+C
+C     Y remains unchanged.
+C
+C
+C     Externals
+C     ---------
+C
+C     None.
+C
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF
+C
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      REAL RANGLE,X,Y,Z,RX,RY,RZ
+      DIMENSION X(*),Y(*),Z(*),RX(*),RY(*),RZ(*)
+      INTEGER INROW
+C
+C     Local variables
+C
+      REAL FACTOR, ANGLE, SINA, COSA
+      DATA FACTOR/0.017453293/
+      INTEGER LOOP
+C
+      ANGLE = RANGLE * FACTOR
+      SINA  = SIN(ANGLE)
+      COSA  = COS(ANGLE)
+C
+      DO LOOP = 1, INROW
+        RY(LOOP) = Y(LOOP)
+        RX(LOOP) =  X(LOOP)*COSA + Z(LOOP)*SINA
+        RZ(LOOP) = -X(LOOP)*SINA + Z(LOOP)*COSA
+      ENDDO
+C
+      RETURN
+      END
diff --git a/interpolation/zprec.F b/interpolation/zprec.F
new file mode 100755
index 0000000..49e70bb
--- /dev/null
+++ b/interpolation/zprec.F
@@ -0,0 +1,189 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION ZPREC (POFELD, KOWE, KONS, KPR, KERR)
+C
+C---->
+C**** *ZPREC*
+C
+C     PURPOSE
+C     _______
+C
+C     Perform additional interpolation processes for precipitation
+C     fields
+C
+C     INTERFACE
+C     _________
+C
+C     IERR = ZPREC ( POFELD, KOWE, KONS, KPR, KERR)
+C
+C     Input parameters
+C     ________________
+C
+C     POFELD     - The output field as previously calculated.
+C
+C     KOWE       - The number of points in the West-East direction in
+C                  the output field.
+C
+C     KONS       - The number of points in the North-South direction
+C                  in the output field.
+C
+C     KPR        - The debug print switch.
+C                  0  , No debugging output.
+C                  1  , Produce debugging output.
+C
+C     KERR       - The error control flag.
+C                  -ve, No error message. Return error code.
+C                  0  , Hard failure with error message.
+C                  +ve, Print error message. Return error code.
+C
+C     Output parameters
+C     ________________
+C
+C     POFELD     - The output field as modified to allow for
+C                  precipitation.
+C
+C     Return value
+C     ____________
+C
+C     The error indicator (INTEGER).
+C
+C     Error and Warning Return Values
+C     _______________________________
+C
+C     None
+C
+C     Common block usage
+C     __________________
+C
+C     None
+C
+C     EXTERNALS
+C     _________
+C
+C     INTLOG(R)    - Logs messages.
+C     CHKPREC - Check if precipitation threshold has been redefined
+C
+C     METHOD
+C     ______
+C
+C     The precipitation at a point is set to zero if the value is less
+C     then threshold 
+C
+C     REFERENCE
+C     _________
+C
+C     None
+C
+C     COMMENTS
+C     ________
+C
+C     Program contains sections 0 to 3
+C
+C     AUTHOR
+C     ______
+C
+C     S. Curic      *ECMWF*      Sep 2005
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None
+C
+C----<
+C     _______________________________________________________
+C
+C
+C*    Section 0. Definition of variables.
+C     _______________________________________________________
+C
+C*    Prefix conventions for variable names
+C
+C     Logical      L (but not LP), global or common.
+C                  O, dummy argument
+C                  G, local variable
+C                  LP, parameter.
+C     Character    C, global or common.
+C                  H, dummy argument
+C                  Y (but not YP), local variable
+C                  YP, parameter.
+C     Integer      M and N, global or common.
+C                  K, dummy argument
+C                  I, local variable
+C                  J (but not JP), loop control
+C                  JP, parameter.
+C     REAL         A to F and Q to X, global or common.
+C                  P (but not PP), dummy argument
+C                  Z, local variable
+C                  PP, parameter.
+C
+C     Implicit statement to force declarations
+C
+      IMPLICIT NONE
+C
+#include "parim.h"
+#include "nifld.common"
+C
+C     Dummy arguments
+      INTEGER KOWE, KONS, KPR, KERR
+      REAL POFELD (KOWE, KONS)
+C
+C     Local variables
+      INTEGER JOLAT, JOLON
+      INTEGER JPROUTINE
+      PARAMETER (JPROUTINE = 23500)
+C
+C     _______________________________________________________
+C
+C*    Section 1. Initialisation
+C     _______________________________________________________
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'ZPREC: Section 1.',JPQUIET)
+C
+      ZPREC = 0
+C
+      IF (KPR .GE. 1) THEN
+        CALL INTLOG(JP_DEBUG,'ZPREC: No. of output fld lats = ',KONS)
+        CALL INTLOG(JP_DEBUG,'ZPREC: No. of output fld longs = ',KOWE)
+      ENDIF
+C
+C     _______________________________________________________
+C
+C*    Section 2. eliminate output negative  precipitation
+C     _______________________________________________________
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'IRPREC: Section 2.',JPQUIET)
+C
+       CALL CHKPREC()
+C
+      DO 360 JOLAT = 1, KONS
+C
+         DO 210 JOLON = 1, KOWE
+C
+            IF (POFELD (JOLON, JOLAT) .LT. ZPRECIP) THEN
+               POFELD (JOLON, JOLAT) = PPZERO
+            ENDIF
+C
+  210    CONTINUE
+C
+C
+  360 CONTINUE
+C
+C     _______________________________________________________
+C
+C
+C*    Section 3. Return to calling routine. Format statements
+C     _______________________________________________________
+C
+C
+      IF (KPR.GE.1) CALL INTLOG(JP_DEBUG,'ZPREC: Section 3.',JPQUIET)
+C
+      RETURN
+      END
diff --git a/land_sea_mask/0-INDEX-0 b/land_sea_mask/0-INDEX-0
new file mode 100755
index 0000000..c1586a8
--- /dev/null
+++ b/land_sea_mask/0-INDEX-0
@@ -0,0 +1,30 @@
+0-INDEX-0			    
+defaults_for_table_001	  WMO table parameter interpolation options
+defaults_for_table_128	  ECMWF table parameter interpolation options
+lsm_32_lsm0p5deg		  32 bit land-sea mask 0.5 degree resolution
+lsm_32_lsm10m01			  32 bit land-sea mask 10 minute resolution
+lsm_32_lsmn080			  32 bit land-sea mask gaussian N80
+lsm_32_lsmr160*			  32 bit land-sea mask gaussian N160
+lsm_64_lsm0p5deg		  64 bit land-sea mask 0.5 degree resolution
+lsm_64_lsm10m01			  64 bit land-sea mask 10 minute resolution
+lsm_64_lsmn080			  64 bit land-sea mask gaussian N80
+lsm_64_lsmr160			  64 bit land-sea mask gaussian N160
+parameter_processing_defaults	  Not currently used (see rddefs.c)
+r160_32_19790930		  32 bit land-sea mask for N160 from 19790930
+r160_32_19910917		  32 bit land-sea mask for N160 from 19910917
+r160_32_19930804		  32 bit land-sea mask for N160 from 19930804
+r160_32_19940302		  32 bit land-sea mask for N160 from 19940302
+r160_32_19940823		  32 bit land-sea mask for N160 from 19940823
+r160_32_19950404		  32 bit land-sea mask for N160 from 19950404
+r160_64_19790930		  64 bit land-sea mask for N160 from 19790930
+r160_64_19910917		  64 bit land-sea mask for N160 from 19910917
+r160_64_19930804		  64 bit land-sea mask for N160 from 19930804
+r160_64_19940302		  64 bit land-sea mask for N160 from 19940302
+r160_64_19940823		  64 bit land-sea mask for N160 from 19940823
+r160_64_19950404		  64 bit land-sea mask for N160 from 19950404
+LSM_GG_0048			      land-sea mask reduced gaussian N48
+LSM_GG_0080			      land-sea mask reduced gaussian N80
+LSM_GG_0128			      land-sea mask reduced gaussian N128
+LSM_GG_0160			      land-sea mask reduced gaussian N160
+LSM_GG_0256			      land-sea mask reduced gaussian N256
+LSM_GG_0400			      land-sea mask reduced gaussian N400
diff --git a/land_sea_mask/LSM_GG_0048 b/land_sea_mask/LSM_GG_0048
new file mode 100755
index 0000000..6c9560e
Binary files /dev/null and b/land_sea_mask/LSM_GG_0048 differ
diff --git a/land_sea_mask/LSM_GG_0080 b/land_sea_mask/LSM_GG_0080
new file mode 100755
index 0000000..4a84fb0
Binary files /dev/null and b/land_sea_mask/LSM_GG_0080 differ
diff --git a/land_sea_mask/LSM_GG_0128 b/land_sea_mask/LSM_GG_0128
new file mode 100755
index 0000000..ae60fcb
Binary files /dev/null and b/land_sea_mask/LSM_GG_0128 differ
diff --git a/land_sea_mask/LSM_GG_0160 b/land_sea_mask/LSM_GG_0160
new file mode 100755
index 0000000..2b773a1
Binary files /dev/null and b/land_sea_mask/LSM_GG_0160 differ
diff --git a/land_sea_mask/LSM_GG_0200 b/land_sea_mask/LSM_GG_0200
new file mode 100755
index 0000000..733bb99
Binary files /dev/null and b/land_sea_mask/LSM_GG_0200 differ
diff --git a/land_sea_mask/LSM_GG_0256 b/land_sea_mask/LSM_GG_0256
new file mode 100755
index 0000000..21db783
Binary files /dev/null and b/land_sea_mask/LSM_GG_0256 differ
diff --git a/land_sea_mask/LSM_GG_0400 b/land_sea_mask/LSM_GG_0400
new file mode 100755
index 0000000..877aa1f
Binary files /dev/null and b/land_sea_mask/LSM_GG_0400 differ
diff --git a/land_sea_mask/LSM_GG_0640 b/land_sea_mask/LSM_GG_0640
new file mode 100755
index 0000000..3b52b69
Binary files /dev/null and b/land_sea_mask/LSM_GG_0640 differ
diff --git a/land_sea_mask/defaults_for_table_001 b/land_sea_mask/defaults_for_table_001
new file mode 100755
index 0000000..fba24df
--- /dev/null
+++ b/land_sea_mask/defaults_for_table_001
@@ -0,0 +1,11 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+002     n     n     n     n       # MSL
+033     y     y     n     n       # U
+034     y     y     n     n       # V
+061     y     n     y     n       # TP
+062     y     n     y     n       # LSP
+063     y     n     y     n       # CP
+064     y     n     y     n       # SF
+065     y     n     y     n       # WESF
+081     n     n     n     y       # LSM
diff --git a/land_sea_mask/defaults_for_table_128 b/land_sea_mask/defaults_for_table_128
new file mode 100755
index 0000000..76dd6d0
--- /dev/null
+++ b/land_sea_mask/defaults_for_table_128
@@ -0,0 +1,14 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+131     y     y     n     n       # U
+132     y     y     n     n       # V
+142     y     n     y     n       # LSP
+143     y     n     y     n       # CP
+144     y     n     y     n       # SF
+151     n     n     n     n       # MSL
+165     y     y     n     n       # 10U
+166     y     y     n     n       # 10V
+172     n     n     n     y       # LSM
+228     y     n     y     n       # TTP
+239     y     n     y     n       # CSF
+240     y     n     y     n       # LSF
diff --git a/land_sea_mask/defaults_for_table_129 b/land_sea_mask/defaults_for_table_129
new file mode 100755
index 0000000..76dd6d0
--- /dev/null
+++ b/land_sea_mask/defaults_for_table_129
@@ -0,0 +1,14 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+131     y     y     n     n       # U
+132     y     y     n     n       # V
+142     y     n     y     n       # LSP
+143     y     n     y     n       # CP
+144     y     n     y     n       # SF
+151     n     n     n     n       # MSL
+165     y     y     n     n       # 10U
+166     y     y     n     n       # 10V
+172     n     n     n     y       # LSM
+228     y     n     y     n       # TTP
+239     y     n     y     n       # CSF
+240     y     n     y     n       # LSF
diff --git a/land_sea_mask/ksm_xx_lsm0p5deg b/land_sea_mask/ksm_xx_lsm0p5deg
new file mode 100755
index 0000000..38e3019
Binary files /dev/null and b/land_sea_mask/ksm_xx_lsm0p5deg differ
diff --git a/land_sea_mask/lsm_xx_lsm0p25deg b/land_sea_mask/lsm_xx_lsm0p25deg
new file mode 100755
index 0000000..432b5fc
Binary files /dev/null and b/land_sea_mask/lsm_xx_lsm0p25deg differ
diff --git a/land_sea_mask/lsm_xx_lsm0p5deg b/land_sea_mask/lsm_xx_lsm0p5deg
new file mode 100755
index 0000000..d846bcf
Binary files /dev/null and b/land_sea_mask/lsm_xx_lsm0p5deg differ
diff --git a/land_sea_mask/lsm_xx_lsm10m01 b/land_sea_mask/lsm_xx_lsm10m01
new file mode 100755
index 0000000..295c080
Binary files /dev/null and b/land_sea_mask/lsm_xx_lsm10m01 differ
diff --git a/land_sea_mask/lsm_xx_lsmn080 b/land_sea_mask/lsm_xx_lsmn080
new file mode 100755
index 0000000..d1eebf3
Binary files /dev/null and b/land_sea_mask/lsm_xx_lsmn080 differ
diff --git a/land_sea_mask/lsm_xx_lsmr160 b/land_sea_mask/lsm_xx_lsmr160
new file mode 100755
index 0000000..116c1a4
Binary files /dev/null and b/land_sea_mask/lsm_xx_lsmr160 differ
diff --git a/land_sea_mask/parameter_processing_defaults b/land_sea_mask/parameter_processing_defaults
new file mode 100755
index 0000000..dffa9c2
--- /dev/null
+++ b/land_sea_mask/parameter_processing_defaults
@@ -0,0 +1,27 @@
+Param  lsm  wind  prec  lsm interp
+-----  ---  ----  ----  ----------
+131     n     y     n     n
+132     n     y     n     n
+140     y     n     n     n
+141     y     n     n     n
+142     n     n     y     n
+143     n     n     y     n
+144     n     n     y     n
+165     n     y     n     n
+166     n     y     n     n
+170     y     n     n     n
+171     y     n     n     n
+172     n     n     n     y
+173     y     n     n     n
+182     y     n     n     n
+183     y     n     n     n
+184     y     n     n     n
+190     y     n     n     n
+191     y     n     n     n
+192     y     n     n     n
+193     y     n     n     n
+199     y     n     n     n
+200     y     n     n     n
+228     n     n     y     n
+239     n     n     y     n
+240     n     n     y     n
diff --git a/land_sea_mask/r160_xx_19790930 b/land_sea_mask/r160_xx_19790930
new file mode 100755
index 0000000..7975a70
Binary files /dev/null and b/land_sea_mask/r160_xx_19790930 differ
diff --git a/land_sea_mask/r160_xx_19910917 b/land_sea_mask/r160_xx_19910917
new file mode 100755
index 0000000..7975a70
Binary files /dev/null and b/land_sea_mask/r160_xx_19910917 differ
diff --git a/land_sea_mask/r160_xx_19930804 b/land_sea_mask/r160_xx_19930804
new file mode 100755
index 0000000..7975a70
Binary files /dev/null and b/land_sea_mask/r160_xx_19930804 differ
diff --git a/land_sea_mask/r160_xx_19940302 b/land_sea_mask/r160_xx_19940302
new file mode 100755
index 0000000..7975a70
Binary files /dev/null and b/land_sea_mask/r160_xx_19940302 differ
diff --git a/land_sea_mask/r160_xx_19940823 b/land_sea_mask/r160_xx_19940823
new file mode 100755
index 0000000..7975a70
Binary files /dev/null and b/land_sea_mask/r160_xx_19940823 differ
diff --git a/land_sea_mask/r160_xx_19950404 b/land_sea_mask/r160_xx_19950404
new file mode 100755
index 0000000..116c1a4
Binary files /dev/null and b/land_sea_mask/r160_xx_19950404 differ
diff --git a/options/options_CRAY b/options/options_CRAY
new file mode 100755
index 0000000..d12db62
--- /dev/null
+++ b/options/options_CRAY
@@ -0,0 +1,5 @@
+RANLIB = /bin/true
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
diff --git a/options/options_FUJITSU b/options/options_FUJITSU
new file mode 100755
index 0000000..8d5f594
--- /dev/null
+++ b/options/options_FUJITSU
@@ -0,0 +1,12 @@
+RANLIB = /bin/true
+
+.SUFFIXES: .o .c .F
+
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+
diff --git a/options/options_VPP5000 b/options/options_VPP5000
new file mode 100755
index 0000000..8d5f594
--- /dev/null
+++ b/options/options_VPP5000
@@ -0,0 +1,12 @@
+RANLIB = /bin/true
+
+.SUFFIXES: .o .c .F
+
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+
diff --git a/options/options_decalpha b/options/options_decalpha
new file mode 100755
index 0000000..23e5885
--- /dev/null
+++ b/options/options_decalpha
@@ -0,0 +1,7 @@
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_decmips b/options/options_decmips
new file mode 100755
index 0000000..23e5885
--- /dev/null
+++ b/options/options_decmips
@@ -0,0 +1,7 @@
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_hpia64 b/options/options_hpia64
new file mode 100755
index 0000000..47748af
--- /dev/null
+++ b/options/options_hpia64
@@ -0,0 +1,15 @@
+RANLIB = ranlib
+
+#
+#  Following generally suitable for use with fort77
+#
+#.F.o:
+#	$(FC) $(FFLAGS) -c $<
+
+#
+#  Following used at ECMWF, currently using f77
+#
+.F.o:
+	/usr/ccs/lbin/cpp -P $(CPPFLAGS) $< > $*.f
+	$(FC) $(FFLAGS) -c $*.f
+	\rm -f $*.f
diff --git a/options/options_hppa b/options/options_hppa
new file mode 100755
index 0000000..47748af
--- /dev/null
+++ b/options/options_hppa
@@ -0,0 +1,15 @@
+RANLIB = ranlib
+
+#
+#  Following generally suitable for use with fort77
+#
+#.F.o:
+#	$(FC) $(FFLAGS) -c $<
+
+#
+#  Following used at ECMWF, currently using f77
+#
+.F.o:
+	/usr/ccs/lbin/cpp -P $(CPPFLAGS) $< > $*.f
+	$(FC) $(FFLAGS) -c $*.f
+	\rm -f $*.f
diff --git a/options/options_i686 b/options/options_i686
new file mode 100755
index 0000000..8d5f594
--- /dev/null
+++ b/options/options_i686
@@ -0,0 +1,12 @@
+RANLIB = /bin/true
+
+.SUFFIXES: .o .c .F
+
+.F.o:
+	rm -f $@
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	rm -f $@
+	$(CC) $(CFLAGS) -c $<
+
diff --git a/options/options_i86pc b/options/options_i86pc
new file mode 100755
index 0000000..23e5885
--- /dev/null
+++ b/options/options_i86pc
@@ -0,0 +1,7 @@
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_ibm_power4 b/options/options_ibm_power4
new file mode 100755
index 0000000..7d4ee33
--- /dev/null
+++ b/options/options_ibm_power4
@@ -0,0 +1,9 @@
+RANLIB = /bin/ranlib
+
+.SUFFIXES: .o .F .c
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
+
+.F.o:
+	$(FC) -WF,$(CPPFLAGS) $(FFLAGS) -c $*.F
diff --git a/options/options_ibm_power6 b/options/options_ibm_power6
new file mode 100755
index 0000000..7d4ee33
--- /dev/null
+++ b/options/options_ibm_power6
@@ -0,0 +1,9 @@
+RANLIB = /bin/ranlib
+
+.SUFFIXES: .o .F .c
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
+
+.F.o:
+	$(FC) -WF,$(CPPFLAGS) $(FFLAGS) -c $*.F
diff --git a/options/options_ibm_power7 b/options/options_ibm_power7
new file mode 100755
index 0000000..7d4ee33
--- /dev/null
+++ b/options/options_ibm_power7
@@ -0,0 +1,9 @@
+RANLIB = /bin/ranlib
+
+.SUFFIXES: .o .F .c
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
+
+.F.o:
+	$(FC) -WF,$(CPPFLAGS) $(FFLAGS) -c $*.F
diff --git a/options/options_itanium b/options/options_itanium
new file mode 100755
index 0000000..23e5885
--- /dev/null
+++ b/options/options_itanium
@@ -0,0 +1,7 @@
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_linux b/options/options_linux
new file mode 100755
index 0000000..4e65098
--- /dev/null
+++ b/options/options_linux
@@ -0,0 +1,10 @@
+.SUFFIXES: .o .c .F .F90
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.F90.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_linux_g77 b/options/options_linux_g77
new file mode 100755
index 0000000..23e5885
--- /dev/null
+++ b/options/options_linux_g77
@@ -0,0 +1,7 @@
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_rs6000 b/options/options_rs6000
new file mode 100755
index 0000000..1949190
--- /dev/null
+++ b/options/options_rs6000
@@ -0,0 +1,11 @@
+RANLIB = /bin/ranlib
+
+.SUFFIXES: .o .F .c
+
+.c.o:
+	cc $(CFLAGS) -c $<
+
+.F.o:
+	- cc $(CFLAGS) -P -C -c $<
+	mv $*.i $*.f 
+	$(FC) $(FFLAGS) -qintlog -c $*.f
diff --git a/options/options_sgimips b/options/options_sgimips
new file mode 100755
index 0000000..749bfc1
--- /dev/null
+++ b/options/options_sgimips
@@ -0,0 +1,9 @@
+RANLIB = /bin/true
+
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/options/options_sun4 b/options/options_sun4
new file mode 100755
index 0000000..d9ebf4c
--- /dev/null
+++ b/options/options_sun4
@@ -0,0 +1,9 @@
+RANLIB = ranlib
+
+.SUFFIXES: .o .c .F
+
+.F.o:
+	$(FC) $(FFLAGS) -c $<
+
+.c.o:
+	$(CC) $(CFLAGS) -c $<
diff --git a/pbio/0-INDEX-0 b/pbio/0-INDEX-0
new file mode 100755
index 0000000..6924815
--- /dev/null
+++ b/pbio/0-INDEX-0
@@ -0,0 +1,40 @@
+0-INDEX-0	mac	This index file
+Makefile	mac	libemos.a makefile for this directory
+PBGroutines.c	mac	Handle pure binary GRIB files in indexed fashion.
+PBGroutines.h	mac	header for PBGroutines.h.
+README		mac	Description of the files in this directory
+blokex.F	mac	BLOK extraction routines
+bufrgrib.h	mac	Header for PBBUFR/GRIB routines
+config.pbio	mac	Configuration file for make
+crexrd.c	mac	(dead)C routine for reading CREX products
+extras.c	mac	Get environ value; remove blanks from end
+fileRead.h	mqc	Default definitions for fileRead, fileSeek and fileTell
+fort2c.c	mac	FORTRAN to C character conversion
+fort2c.h	mac	FORTRAN to C character conversion header
+fortint.h	mac	Allow for Fortran INTEGERs to be C int/long
+gbyte.c		mac	Machine independent gbyte(s),sbyte(s)
+gbyte_alpha.c	mac	gbyte for ALPHA
+lwsize.c	mac	Returns byte size of next GRIB, BUFR, TIDE, BUDG, DIAG
+make.dep	mac	Make dependencies
+mvchars.c	mac	Fortran callable to move a string to integer array.
+newpbio.c	mac	(dead)PBOPEN/READ/WRITE/SEEK/CLOSE file-handling
+pbio.c          mac	PBOPEN/READ/WRITE/SEEK/CLOSE file-handling routines
+pbio_alpha.c	mac	(dead)(new)pbio for ALPHA
+pbbufr.F	mac	Reads next BUFR product from a file
+pbcrex.F	mac	Reads next CREX product from a file
+pbfp.c		mac	Returns C file pointer for a file opened by PBOPEN
+pbionum.F	mac	Returns PBIO_CYCLE
+pbgrib.F	mac	Reads next GRIB product from a file
+pbpseu.F	mac	Reads next GRIB/BUFR/DIAG/TIDE/BUDG product from a file
+pbsize.c	mac	(dead)Returns size in bytes of following product.
+readany.c       mac     Reads any product (GRIB,BUFR,BUDG,..) from a file
+readbufr.c	mac	Reads next BUFR product from a file
+readcrex.c	mac	Reads next CREX product from a file
+readgrib.c	mac	Reads next GRIB product from a file
+readnext.c	mac	Reads next BUFR/GRIB product from a 'stream'
+readprod.c	mac	Reads next BUFR/GRIB product from a file
+readprod_alpha.c mac	Reads next BUFR/GRIB product from a file (ALPHA)
+recheckLength.c	mac	Calculates the length of GRIB from lengths of sections
+setpar.c	mac	Sets no. of bits per word, largest negative no.
+sizeRoutines.h	mac	Function protypes for size functions (prodsize, etc)
+sources.XXX	mac	Sources for platform XXX.
diff --git a/pbio/Makefile b/pbio/Makefile
new file mode 100755
index 0000000..8d53810
--- /dev/null
+++ b/pbio/Makefile
@@ -0,0 +1,35 @@
+#
+#                                 Makefile for libemos/pbio
+#
+LIBRARY      = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c)
+FASTOBJ.o    = $(FASTSRC.c:.c=.o)
+FASTOBJ      = $(FASTOBJ.o)
+#
+#
+.PRECIOUS: $(LIBRARY) 
+
+all: $(LIBRARY)
+
+$(FASTOBJ.o): $(FASTSRC.c)
+	$(CC) $(FASTCFLAGS) -c $(FASTSRC.c)
+
+$(LIBRARY): $(OBJECTS) $(FASTOBJ)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) $(FASTOBJ) *.f
diff --git a/pbio/Makefile.in b/pbio/Makefile.in
new file mode 100755
index 0000000..e70dbd3
--- /dev/null
+++ b/pbio/Makefile.in
@@ -0,0 +1,41 @@
+#
+#
+#
+A64 = plat
+R64 = reals
+ARCH = arch
+CNAME = comp
+LIB = depl
+
+LIBRARY = ../lib$(LIB)$(R64).a
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c)
+FASTOBJ.o    = $(FASTSRC.c:.c=.o)
+FASTOBJ      = $(FASTOBJ.o)
+#
+#
+.PRECIOUS: $(LIBRARY)
+
+all: $(LIBRARY)
+
+$(FASTOBJ.o): $(FASTSRC.c)
+	$(CC) $(FASTCFLAGS) -c $(FASTSRC.c)
+
+$(LIBRARY): $(OBJECTS) $(FASTOBJ)
+	$(AR) $(ARFLAGS) $@ $?
+	$(RANLIB) $@
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) $(FASTOBJ) *.f
diff --git a/pbio/Makefile.shared b/pbio/Makefile.shared
new file mode 100755
index 0000000..a92acd4
--- /dev/null
+++ b/pbio/Makefile.shared
@@ -0,0 +1,36 @@
+#
+#                                 Makefile for libemos/pbio
+#
+LIBRARY      = ../lib$(LIB)$(R64).so
+#
+include ../config/config.$(ARCH)$(CNAME)$(R64)$(A64)
+#
+include ../options/options_$(ARCH)
+#
+PROFILE=$(SHLIB)
+#
+TARGETS      = all clean
+#
+include sources.$(ARCH)
+#
+OBJECTS.F    = $(SOURCES.F:.F=.o) 
+OBJECTS.c    = $(SOURCES.c:.c=.o)
+OBJECTS      = $(OBJECTS.F) $(OBJECTS.c)
+FASTOBJ.o    = $(FASTSRC.c:.c=.o)
+FASTOBJ      = $(FASTOBJ.o)
+#
+#
+.PRECIOUS: $(LIBRARY) 
+
+all: $(LIBRARY)
+
+$(FASTOBJ.o): $(FASTSRC.c)
+	$(CC) $(FASTCFLAGS) -c $(FASTSRC.c)
+
+$(LIBRARY): $(OBJECTS) $(EXTRAOBJ)
+	$(LD) $(DYNLINKFLAGS) $? -o $@
+
+include make.dep
+
+clean:
+	\rm -f $(OBJECTS) $(FASTOBJ) *.f
diff --git a/pbio/PBGroutines.c b/pbio/PBGroutines.c
new file mode 100755
index 0000000..6ef8b9c
--- /dev/null
+++ b/pbio/PBGroutines.c
@@ -0,0 +1,2565 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#ifdef linux
+# if !defined __off64_t_defined
+typedef __off64_t off64_t;
+#define __off64_t_defined
+#endif
+#endif 
+
+#include "PBGroutines.h"
+
+#ifdef gribAPI
+long date_to_Julian(long ddate);
+long Julian_to_date(long jdate);
+#else
+long date_to_julian(long ddate);
+long julian_to_date(long jdate);
+#endif
+
+integer pbginitInput(_fcd filename, fortint filename_len);
+integer pbginitOutput(_fcd filename, fortint filename_len);
+void dsgnbt_(fortint *, fortint *, fortint *, fortint *);
+void copyName(_fcd * , _fcd , fortint );
+
+fortint readgrib(FILE * file, unsigned char * buffer, fortint * prod_len);
+
+void pbgindx(fortint);
+
+void gribdata( unsigned char * header,
+               integer number_of_fields,
+               integer * parameter,
+               integer * level,
+               integer * date,
+               integer * time,
+               integer * timestep,
+               integer * localDefinitionNumber,
+               integer * type,
+               integer * stream,
+               integer * repres,
+               integer * levtype,
+               integer * number,
+               integer * vdate,
+               integer * vtime,
+               integer * tcNumber,
+               integer * tcTotal,
+               integer * clusterMethod,
+               integer * tcStep,
+               integer * clusterStepEnd,
+               integer * tcNorth,
+               integer * tcWest,
+               integer * tcSouth,
+               integer * tcEast,
+               integer * clusterOpFcNumber,
+               integer * clusterControlFcNumber,
+               integer * tcNumOfFcs,
+               integer * probScale,
+               integer * probIndicator,
+               integer * probLower,
+               integer * probUpper,
+               integer * ni,
+               integer * nj,
+               integer * nlat,
+               integer * nlon,
+               integer * slat,
+               integer * slon,
+               integer * di,
+               integer * dj,
+               integer * splat,
+               integer * splon,
+               integer * quasi,
+               integer * directionNumber,
+               integer * frequencyNumber,
+               integer * optimisationTime,
+               integer * leadTime,
+               integer * sensitiveAreaDomain,
+               integer * sensitiveAreaMethod,
+               integer * verifyingMonth,
+               integer * averagingPeriod,
+               integer * forecastMonth,
+               integer * referenceDate,
+               integer * climateDateFrom,
+               integer * climateDateTo,
+               integer * thresholdUnitsScale,
+               integer * thresholdIndicator,
+               integer * lowerThreshold,
+               integer * upperThreshold
+             );
+
+static gribfile * latestFile(collection);
+static gribfile * currentFile(collection, integer);
+
+/*
+// 
+*/
+#define DEBUGOFF 1
+#define DEBUG1 (debugSet > DEBUGOFF )
+#define DEBUG2 (debugSet > (DEBUGOFF + 1) )
+static char * debugLevel;
+static int debugSet = 0;
+
+#define ONEBYTELONG(a)   (long) ( *(a) )
+#define TWOBYTELONG(a)   (long) ( (*(a))<<8 | (*((a)+1))<<0 )
+#define THREEBYTELONG(a) (long) (TWOBYTELONG((a))<<8 | (*((a)+2))<<0 )
+#define FOURBYTELONG(a)  (long) (THREEBYTELONG((a))<<8 | (*((a)+3))<<0 )
+
+#define MISSING -1
+#define NOTGIVEN(x) ((x) == MISSING )
+#define MATCH(a,b)  (NOTGIVEN((a)) || ((a) == (b)))
+
+#define HEADLEN 10000
+
+integer exists(_fcd , fortint );
+integer addRead(_fcd , fortint );
+integer addWrite(_fcd , fortint );
+void removeFile(_fcd , fortint );
+
+collection openFiles = {exists,addRead,addWrite,removeFile,-1,-1,NULL};
+
+void pbgindx(fortint thisFile) {
+/*
+// Fills in details of current file
+*/
+unsigned char header[HEADLEN];
+fortint status;
+fortint headerlen;
+OFF_T space;
+integer number_of_fields = 0;
+gribfile * file = currentFile(openFiles,thisFile);
+
+/*
+// Loop through products in the file
+*/
+  file->offset[0] = 0;
+  do {
+    headerlen = HEADLEN;
+    status = readgrib( file->fp, header, &headerlen);
+
+/*
+// Accept product if OK or if only problem is 'buffer too small' or
+// on EOF
+*/
+    if( (status!=0) && (status!=-3) && (status!=-1) ) exit(1);
+    if( status == -1 ) break;
+
+/*
+// Note the product byte offset in the file
+*/
+    file->length[number_of_fields] = (OFF_T) headerlen;
+#ifdef FOPEN64
+    file->offset[number_of_fields] =
+      ftello64(file->fp) - file->length[number_of_fields];
+#else
+    file->offset[number_of_fields] =
+      (OFF_T) ftell(file->fp) - file->length[number_of_fields];
+#endif
+
+/*
+// If it's a GRIB edition 1 product, pick up more information
+// (parameter,level,..)
+*/
+    if( strncmp((char *)header,"GRIB", 4)==0 ) {
+/*
+//    Eliminate GRIB editions 0 and -1
+*/
+      if( (header[ 7] != '\1') ) break;
+      if( (header[19] == '\0') && (header[20] == '\0') &&
+          (header[21] == '\0') && (header[22] == '\0') &&
+          (header[23] == '\0') ) break;
+
+      gribdata( header,
+                number_of_fields,
+                file->parameter,
+                file->level,
+                file->date,
+                file->time,
+                file->timestep,
+                file->localDefinitionNumber,
+                file->type,
+                file->stream,
+                file->repres,
+                file->levtype,
+                file->number,
+                file->vdate,
+                file->vtime,
+                file->tcNumber,
+                file->tcTotal,
+                file->clusterMethod,
+                file->tcStep,
+                file->clusterStepEnd,
+                file->tcNorth,
+                file->tcWest,
+                file->tcSouth,
+                file->tcEast,
+                file->clusterOpFcNumber,
+                file->clusterControlFcNumber,
+                file->tcNumOfFcs,
+                file->probScale,
+                file->probIndicator,
+                file->probLower,
+                file->probUpper,
+                file->ni,
+                file->nj,
+                file->nlat,
+                file->nlon,
+                file->slat,
+                file->slon,
+                file->di,
+                file->dj,
+                file->splat,
+                file->splon,
+                file->quasi,
+                file->directionNumber,
+                file->frequencyNumber,
+                file->optimisationTime,
+                file->leadTime,
+                file->sensitiveAreaDomain,
+                file->sensitiveAreaMethod,
+                file->verifyingMonth,
+                file->averagingPeriod,
+                file->forecastMonth,
+                file->referenceDate,
+                file->climateDateFrom,
+                file->climateDateTo,
+                file->thresholdUnitsScale,
+                file->thresholdIndicator,
+                file->lowerThreshold,
+                file->upperThreshold
+              );
+
+#define REALLOC(a) (a)  =  realloc((a) , (size_t) space)
+
+      number_of_fields++;
+      if( number_of_fields == file->max ) {
+        integer newSize = (file->max)*2;
+        file->max = newSize;
+
+        space = (OFF_T) (sizeof(OFF_T)*newSize);
+        REALLOC(file->offset);
+
+        space = (OFF_T) (sizeof(integer)*newSize);
+        REALLOC(file->length);
+        REALLOC(file->parameter);
+        REALLOC(file->level);
+        REALLOC(file->date);
+        REALLOC(file->time);
+        REALLOC(file->timestep);
+        REALLOC(file->localDefinitionNumber);
+        REALLOC(file->type);
+        REALLOC(file->stream);
+        REALLOC(file->repres);
+        REALLOC(file->levtype);
+        REALLOC(file->number);
+        REALLOC(file->vdate);
+        REALLOC(file->vtime);
+        REALLOC(file->tcNumber);
+        REALLOC(file->tcTotal);
+        REALLOC(file->clusterMethod);
+        REALLOC(file->tcStep);
+        REALLOC(file->clusterStepEnd);
+        REALLOC(file->tcNorth);
+        REALLOC(file->tcWest);
+        REALLOC(file->tcSouth);
+        REALLOC(file->tcEast);
+        REALLOC(file->clusterOpFcNumber);
+        REALLOC(file->clusterControlFcNumber);
+        REALLOC(file->tcNumOfFcs);
+        REALLOC(file->probScale);
+        REALLOC(file->probIndicator);
+        REALLOC(file->probLower);
+        REALLOC(file->probUpper);
+        REALLOC(file->ni);
+        REALLOC(file->nj);
+        REALLOC(file->nlat);
+        REALLOC(file->nlon);
+        REALLOC(file->slat);
+        REALLOC(file->slon);
+        REALLOC(file->di);
+        REALLOC(file->dj);
+        REALLOC(file->splat);
+        REALLOC(file->splon);
+        REALLOC(file->quasi);
+        REALLOC(file->directionNumber);
+        REALLOC(file->frequencyNumber);
+        REALLOC(file->optimisationTime);
+        REALLOC(file->leadTime);
+        REALLOC(file->sensitiveAreaDomain);
+        REALLOC(file->sensitiveAreaMethod);
+        REALLOC(file->verifyingMonth);
+        REALLOC(file->averagingPeriod);
+        REALLOC(file->forecastMonth);
+        REALLOC(file->referenceDate);
+        REALLOC(file->climateDateFrom);
+        REALLOC(file->climateDateTo);
+        REALLOC(file->thresholdUnitsScale);
+        REALLOC(file->thresholdIndicator);
+        REALLOC(file->lowerThreshold);
+        REALLOC(file->upperThreshold);
+      }
+    }
+        
+  } while( (!feof(file->fp)) &&
+           (number_of_fields < file->max)
+         );
+
+  file->count = number_of_fields;
+
+  return;
+}
+
+void gribdata( unsigned char * header,
+               integer index,
+               integer * parameter,
+               integer * level,
+               integer * date,
+               integer * time,
+               integer * timestep,
+               integer * localDefinitionNumber,
+               integer * type,
+               integer * stream,
+               integer * repres,
+               integer * levtype,
+               integer * number,
+               integer * vdate,
+               integer * vtime,
+               integer * tcNumber,
+               integer * tcTotal,
+               integer * clusterMethod,
+               integer * tcStep,
+               integer * clusterStepEnd,
+               integer * tcNorth,
+               integer * tcWest,
+               integer * tcSouth,
+               integer * tcEast,
+               integer * clusterOpFcNumber,
+               integer * clusterControlFcNumber,
+               integer * tcNumOfFcs,
+               integer * probScale,
+               integer * probIndicator,
+               integer * probLower,
+               integer * probUpper,
+               integer * ni,
+               integer * nj,
+               integer * nlat,
+               integer * nlon,
+               integer * slat,
+               integer * slon,
+               integer * di,
+               integer * dj,
+               integer * splat,
+               integer * splon,
+               integer * quasi,
+               integer * directionNumber,
+               integer * frequencyNumber,
+               integer * optimisationTime,
+               integer * leadTime,
+               integer * sensitiveAreaDomain,
+               integer * sensitiveAreaMethod,
+               integer * verifyingMonth,
+               integer * averagingPeriod,
+               integer * forecastMonth,
+               integer * referenceDate,
+               integer * climateDateFrom,
+               integer * climateDateTo,
+               integer * thresholdUnitsScale,
+               integer * thresholdIndicator,
+               integer * lowerThreshold,
+               integer * upperThreshold
+             )
+/*
+// Returns parameter, level, date, time , etc information 
+// for a GRIB product.
+*/
+{
+
+/*
+// Decode the GRIB product
+*/
+
+#define POLAR_STEREO 5
+
+#define SEC1 7
+#define LEN1 8
+#define TABLE 4
+#define PARAM 9
+#define LEVELTYPE 10
+#define LEVEL1 11
+#define LEVEL2 12
+#define YY 13
+#define MM 14
+#define DD 15
+#define HOUR 16
+#define MIN 17
+#define TIMEUNIT 18
+#define STEP1 19
+#define STEP2 20
+#define TIMERANGE 21
+#define CENTURY 25
+#define LOCALDEF 41
+#define CLASS 42
+#define TYPE 43
+#define STREAM 44
+#define NUMBER 50
+#define REPRES 6
+#define NI 7
+#define NJ 9
+#define NLAT 11
+#define NLON 14
+#define SLAT 18
+#define SLON 21
+#define DI 24
+#define DJ 26
+#define DI_PS 21
+#define DJ_PS 24
+#define SPLAT 33
+#define SPLON 36
+
+#define ISOTHERMAL_LEVEL   20
+#define ISOBARIC_LEVEL     100
+#define ALTITUDE           103
+#define HEIGHT             105
+#define SIGMA_LEVEL        107
+#define HYBRID_LEVEL       109
+#define DEPTH_BELOW_LAND   111
+#define ISENTROPIC_LEVEL   113
+#define PRESSURE_DIFF      115
+#define VORTICITY_SURF     117
+#define HEIGHT_HIGH_PREC   125
+#define SATELLITE_BAND     127
+#define DEPTH_BELOW_SEA    160
+#define ENTIRE_ATMOSPHERE  200
+#define ENTIRE_OCEAN       201
+#define ISOBARIC_HIGH_PREC 210
+
+#define PROBABILITY 16
+#define PROBSCALE   52
+#define PROBINDIC   53
+#define PROBLOWER   54
+#define PROBUPPER   56
+
+#define CLUSTERMEAN         14
+#define CLUSTERSD           15
+#define CLUSTERNUMBER       50
+#define CLUSTERTOTAL        51
+#define CLUSTERMETHOD       53
+#define CLUSTERSTEP         54
+#define CLUSTERSTEPEND      56
+#define CLUSTERNORTH        58
+#define CLUSTERWEST         61
+#define CLUSTERSOUTH        64
+#define CLUSTEREAST         67
+#define CLUSTEROPFCNUM      70
+#define CLUSTERCONTROLFCNUM 71
+#define CLUSTERFORECASTS    72
+
+#define TUBETYPE      24
+#define TUBENUMBER    50
+#define TUBETOTAL     51
+#define TUBESTEP      71
+#define TUBENORTH     55
+#define TUBEWEST      58
+#define TUBESOUTH     61
+#define TUBEEAST      64
+#define TUBEFORECASTS 79
+
+#define CLUSTERMEAN         14
+#define CLUSTERSD           15
+#define CLUSTERNUMBER       50
+#define CLUSTERTOTAL        51
+#define CLUSTERMETHOD       53
+#define CLUSTERSTEP         54
+#define CLUSTERSTEPEND      56
+#define CLUSTERNORTH        58
+#define CLUSTERWEST         61
+#define CLUSTERSOUTH        64
+#define CLUSTEREAST         67
+#define CLUSTEROPFCNUM      70
+#define CLUSTERCONTROLFCNUM 71
+#define CLUSTERFORECASTS    72
+
+#define DIRECTIONNUMBER 52
+#define FREQUENCYNUMBER 53
+
+#define OPTIMISATIONTIME    92
+#define LEADTIME            93
+#define SENSITIVEAREADOMAIN 94
+#define SENSITIVEAREAMETHOD 95
+
+#define VERIFYINGMONTH      56
+#define AVERAGINGPERIOD     60
+#define FORECASTMONTH       61
+#define REFERENCEDATE       63
+#define CLIMATEDATEFROM     67
+#define CLIMATEDATETO       71
+#define THRESHOLDUNITSSCALE 75
+#define THRESHOLDINDICATOR  76
+#define LOWERTHRESHOLD      77
+#define UPPERTHRESHOLD      79
+
+integer table, leveltype, timeunit, timerange, multiplier, century, year;
+integer twoByteNumber, ECclass, ensembleNumber;
+integer section2Offset;
+integer status, eight = 8, sixteen = 16, twentyFour = 24;
+
+  table = header[SEC1+TABLE];
+  parameter[index] = table*1000 + header[SEC1+PARAM];
+
+  leveltype = header[SEC1+LEVELTYPE];
+  levtype[index] = leveltype;
+
+  switch( leveltype ) {
+
+    case ISOTHERMAL_LEVEL  :
+    case ISOBARIC_LEVEL    :
+    case ALTITUDE          :
+    case HEIGHT            :
+    case SIGMA_LEVEL       :
+    case HYBRID_LEVEL      :
+    case DEPTH_BELOW_LAND  :
+    case ISENTROPIC_LEVEL  :
+    case PRESSURE_DIFF     :
+    case VORTICITY_SURF    :
+    case HEIGHT_HIGH_PREC  :
+    case SATELLITE_BAND    :
+    case DEPTH_BELOW_SEA   :
+    case ENTIRE_ATMOSPHERE :
+    case ENTIRE_OCEAN      :
+    case ISOBARIC_HIGH_PREC:
+/*            level[index] = header[SEC1+LEVEL1]*256 + header[SEC1+LEVEL2]; */
+              level[index] = TWOBYTELONG(&header[SEC1+LEVEL1]);
+              break;
+
+    default: level[index] = header[SEC1+LEVEL1];
+  }
+
+  century = header[SEC1+CENTURY];
+  year = (century-1)*100 + header[SEC1+YY];
+  date[index] = year*10000 + header[SEC1+MM]*100 + header[SEC1+DD];
+
+  time[index] = header[SEC1+HOUR]*100 + header[SEC1+MIN];
+
+  timeunit = header[SEC1+TIMEUNIT];
+
+#define DAY          2
+#define MONTH        3
+#define THREE_HOURS  10
+#define SIX_HOURS    11
+#define TWELVE_HOURS 12
+
+  switch( timeunit ) {
+
+    case DAY :
+             multiplier = 24;
+             break;
+
+    case MONTH :
+             multiplier = 30*24;
+             break;
+
+    case THREE_HOURS :
+             multiplier = 3;
+             break;
+
+    case SIX_HOURS :
+             multiplier = 6;
+             break;
+
+    case TWELVE_HOURS :
+             multiplier = 12;
+             break;
+
+    default: multiplier = 1;
+  }
+
+#define RANGE_P1_TO_P2 2
+#define ACCUMULATION 4
+#define DIFFERENCE   5
+#define TWOBYTE      10
+
+  timerange = header[SEC1+TIMERANGE];
+
+  switch( timerange ) {
+
+    case TWOBYTE :
+             timestep[index] = TWOBYTELONG(&header[SEC1+STEP1])*multiplier;
+             break;
+
+    default: timestep[index] = header[SEC1+STEP2]*multiplier*10000 +
+                               header[SEC1+STEP1]*multiplier;
+  }
+
+  type[index] = header[SEC1+TYPE];
+
+#define ANALYSIS    2
+
+  if( type[index] == ANALYSIS ) {
+    vdate[index] = date[index];
+    vtime[index] = time[index];
+  }
+  else {
+    long iverd  = (time[index] + timestep[index]*100) / 2400;
+#ifdef gribAPI
+    long ijvday = date_to_Julian(date[index]) + iverd;
+    vdate[index] = Julian_to_date(ijvday);
+#else
+    long ijvday = date_to_julian(date[index]) + iverd;
+    vdate[index] = julian_to_date(ijvday);
+#endif
+    vtime[index] = (time[index] + timestep[index]*100) - (iverd*2400);
+  }
+
+  localDefinitionNumber[index] = header[SEC1+LOCALDEF];
+  ECclass = header[SEC1+CLASS];
+  stream[index] = TWOBYTELONG(&header[SEC1+STREAM]);
+
+  twoByteNumber = ( (localDefinitionNumber[index] == 4) && (stream[index] == 1090) ) ||
+                  (localDefinitionNumber[index] == 9) ||
+                  (localDefinitionNumber[index] == 15) ||
+                  (localDefinitionNumber[index] == 16) ||
+                  (localDefinitionNumber[index] == 21) ||
+                  (localDefinitionNumber[index] == 23);
+
+  if( twoByteNumber )
+    ensembleNumber = TWOBYTELONG(&header[SEC1+NUMBER]);
+  else
+    ensembleNumber = header[SEC1+NUMBER];
+  number[index] = ensembleNumber;
+
+/*
+// Extra information for tubes
+*/
+  if( type[index] == TUBETYPE ) {
+    tcNumber[index]    = header[SEC1+TUBENUMBER];
+    tcTotal[index]     = header[SEC1+TUBETOTAL];
+    tcStep[index]      = TWOBYTELONG(&header[SEC1+TUBESTEP]);
+    tcNorth[index]     = THREEBYTELONG(&header[SEC1+TUBENORTH]);
+    dsgnbt_(&tcNorth[index],&tcNorth[index],&twentyFour,&status);
+    tcWest[index]      = THREEBYTELONG(&header[SEC1+TUBEWEST]);
+    dsgnbt_(&tcWest[index],&tcWest[index],&twentyFour,&status);
+    tcSouth[index]     = THREEBYTELONG(&header[SEC1+TUBESOUTH]);
+    dsgnbt_(&tcSouth[index],&tcSouth[index],&twentyFour,&status);
+    tcEast[index]      = THREEBYTELONG(&header[SEC1+TUBEEAST]);
+    dsgnbt_(&tcEast[index],&tcEast[index],&twentyFour,&status);
+    tcNumOfFcs[index] = header[SEC1+TUBEFORECASTS];
+  }
+
+/*
+// Extra information for clusters
+*/
+  if( (type[index] == CLUSTERMEAN) || (type[index] == CLUSTERSD) ) {
+    tcNumber[index]    = header[SEC1+CLUSTERNUMBER];
+    tcTotal[index]     = header[SEC1+CLUSTERTOTAL];
+    clusterMethod[index]     = header[SEC1+CLUSTERMETHOD];
+    tcStep[index]      = TWOBYTELONG(&header[SEC1+CLUSTERSTEP]);
+    clusterStepEnd[index]      = TWOBYTELONG(&header[SEC1+CLUSTERSTEPEND]);
+    tcNorth[index]     = THREEBYTELONG(&header[SEC1+CLUSTERNORTH]);
+    dsgnbt_(&tcNorth[index],&tcNorth[index],&twentyFour,&status);
+    tcWest[index]      = THREEBYTELONG(&header[SEC1+CLUSTERWEST]);
+    dsgnbt_(&tcWest[index],&tcWest[index],&twentyFour,&status);
+    tcSouth[index]     = THREEBYTELONG(&header[SEC1+CLUSTERSOUTH]);
+    dsgnbt_(&tcSouth[index],&tcSouth[index],&twentyFour,&status);
+    tcEast[index]      = THREEBYTELONG(&header[SEC1+CLUSTEREAST]);
+    dsgnbt_(&tcEast[index],&tcEast[index],&twentyFour,&status);
+    clusterOpFcNumber[index] = header[SEC1+CLUSTEROPFCNUM];
+    clusterControlFcNumber[index] = header[SEC1+CLUSTERCONTROLFCNUM];
+    tcNumOfFcs[index] = header[SEC1+CLUSTERFORECASTS];
+  }
+/*
+// Extra information for probabilities
+*/
+  if( type[index] == PROBABILITY ) {
+    probScale[index] = header[SEC1+PROBSCALE];
+    dsgnbt_(&probScale[index],&probScale[index],&eight,&status);
+    probIndicator[index] = header[SEC1+PROBINDIC];
+    probLower[index] = 65535;
+    if( probIndicator[index] != 2 ) {
+      probLower[index] = TWOBYTELONG(&header[SEC1+PROBLOWER]);
+      dsgnbt_(&probLower[index],&probLower[index],&sixteen,&status);
+    }
+    probUpper[index] = 65535;
+    if( probIndicator[index] != 1 ) {
+      probUpper[index] = TWOBYTELONG(&header[SEC1+PROBUPPER]);
+      dsgnbt_(&probUpper[index],&probUpper[index],&sixteen,&status);
+    }
+  }
+/*
+// Extra information for wave 2D spectra
+*/
+  if( localDefinitionNumber[index] == 13 ) {
+    directionNumber[index] = header[SEC1+DIRECTIONNUMBER];
+    frequencyNumber[index] = header[SEC1+FREQUENCYNUMBER];
+  }
+/*
+// Extra information for sensitive area forecasts
+*/
+  if( localDefinitionNumber[index] == 21 ) {
+    optimisationTime[index]    = header[SEC1+OPTIMISATIONTIME];
+    leadTime[index]            = header[SEC1+LEADTIME];
+    sensitiveAreaDomain[index] = header[SEC1+SENSITIVEAREADOMAIN];
+    sensitiveAreaMethod[index] =
+      TWOBYTELONG(&header[SEC1+SENSITIVEAREAMETHOD]);
+  }
+/*
+// Extra information for coupled atmospheric, wave and ocean models
+*/
+  if( localDefinitionNumber[index] == 23 ) {
+    unsigned char scale;
+
+    verifyingMonth[index]     = FOURBYTELONG(&header[SEC1+VERIFYINGMONTH]);
+    averagingPeriod[index]    = ONEBYTELONG(&header[SEC1+AVERAGINGPERIOD]);
+    forecastMonth[index]      = TWOBYTELONG(&header[SEC1+FORECASTMONTH]);
+    referenceDate[index]      = FOURBYTELONG(&header[SEC1+REFERENCEDATE]);
+    climateDateFrom[index]    = FOURBYTELONG(&header[SEC1+CLIMATEDATEFROM]);
+    climateDateTo[index]      = FOURBYTELONG(&header[SEC1+CLIMATEDATETO]);
+    scale = header[SEC1+THRESHOLDUNITSSCALE];
+    if( scale & 0x80 ) {
+      scale &= 0x7f;
+      thresholdUnitsScale[index] = - ONEBYTELONG(&scale);
+    }
+    else
+      thresholdUnitsScale[index] = ONEBYTELONG(&scale);
+    thresholdIndicator[index] = ONEBYTELONG(&header[SEC1+THRESHOLDINDICATOR]);
+    lowerThreshold[index]     = TWOBYTELONG(&header[SEC1+LOWERTHRESHOLD]);
+    upperThreshold[index]     = TWOBYTELONG(&header[SEC1+UPPERTHRESHOLD]);
+  }
+
+/*
+// Section 2
+*/
+  section2Offset = THREEBYTELONG(&header[LEN1]);
+  repres[index] = header[LEN1+section2Offset-1+REPRES];
+
+  ni[index] = TWOBYTELONG(&header[LEN1+section2Offset-1+NI]);
+  nj[index] = TWOBYTELONG(&header[LEN1+section2Offset-1+NJ]);
+
+  nlat[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+NLAT]);
+  dsgnbt_(&nlat[index],&nlat[index],&twentyFour,&status);
+
+  nlon[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+NLON]);
+  dsgnbt_(&nlon[index],&nlon[index],&twentyFour,&status);
+
+  slat[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+SLAT]);
+  dsgnbt_(&slat[index],&slat[index],&twentyFour,&status);
+
+/*
+// Section 2 is different for polar stereographic
+*/
+  if( repres[index] == POLAR_STEREO ) {
+    di[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+DI_PS]);
+    dj[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+DJ_PS]);
+  }
+  else {
+    slon[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+SLON]);
+    dsgnbt_(&slon[index],&slon[index],&twentyFour,&status);
+
+    di[index] = TWOBYTELONG(&header[LEN1+section2Offset-1+DI]);
+    dj[index] = TWOBYTELONG(&header[LEN1+section2Offset-1+DJ]);
+
+    splat[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+SPLAT]);
+    dsgnbt_(&splat[index],&splat[index],&twentyFour,&status);
+
+    splon[index] = THREEBYTELONG(&header[LEN1+section2Offset-1+SPLON]);
+    dsgnbt_(&splon[index],&splon[index],&twentyFour,&status);
+  }
+
+  quasi[index] = ( (ni[index] == 0xFFFF) || (nj[index] == 0xFFFF) );
+
+  return;
+
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgtotl_(_fcd filename, fortint filename_len) {
+/*
+// Returns number of GRIB products in the file.
+*/
+integer thisFile;
+gribfile * file;
+
+  thisFile = pbginitInput(filename,filename_len);
+  file = currentFile(openFiles, thisFile);
+
+  if( DEBUG1 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBGTOTL: Number of GRIBs in file %s = %d\n", pfile, file->count);
+    free(pfile);
+  }
+  return ( file->count );
+}
+
+fortint pbgtotl(_fcd filename, fortint filename_len) {
+  return pbgtotl_(filename,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgleng_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns length (in bytes) of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGLENG: length of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->length[index]);
+        free(pfile);
+      }
+      return ( file->length[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgleng(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgleng_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgoffs_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns offset (in bytes) of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGOFFS: offset of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->offset[index]);
+        free(pfile);
+      }
+      return ( file->offset[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgoffs(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgoffs_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgparm_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns parameter number of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGPARM: parameter number of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->parameter[index]);
+        free(pfile);
+      }
+      return ( file->parameter[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgparm(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgparm_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbglevl_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns level of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGLEVL: level of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->level[index]);
+        free(pfile);
+      }
+      return ( file->level[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbglevl(_fcd filename, fortint * n, fortint filename_len) {
+  return pbglevl_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgdate_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns date (as YYMMDD) of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGDATE: date of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->date[index]);
+        free(pfile);
+      }
+      return ( file->date[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgdate(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgdate_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgtime_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns time (as HHMM) of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGTIME: time of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->time[index]);
+        free(pfile);
+      }
+      return ( file->time[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgtime(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgtime_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgstep_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns timestep of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGSTEP: timestep of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->timestep[index]);
+        free(pfile);
+      }
+      return ( file->timestep[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgstep(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgstep_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgtype_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns field type of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGTYPE: type of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->type[index]);
+        free(pfile);
+      }
+      return ( file->type[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgtype(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgtype_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgstrm_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns stream of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGSTRM: stream of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->stream[index]);
+        free(pfile);
+      }
+      return ( file->stream[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgstrm(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgstrm_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgrepr_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns repres of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGREPR: repres of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->repres[index]);
+        free(pfile);
+      }
+      return ( file->repres[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgrepr(_fcd filename, fortint * n, fortint filename_len) {
+  return pbgrepr_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbglevt_(_fcd filename, fortint * n, fortint filename_len) {
+/*
+// Returns levtype of GRIB product n or -1 if n is greater
+// than the number of products in the file, or less than 1.
+*/
+integer index = (*n)-1;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+      if( DEBUG1 ) {
+        _fcd pfile;
+        copyName(&pfile, filename, filename_len);
+        printf("PBGLEVT: levtype of GRIB %d in file %s = %d\n",
+               (index+1), pfile, file->levtype[index]);
+        free(pfile);
+      }
+      return ( file->levtype[index] );
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbglevt(_fcd filename, fortint * n, fortint filename_len) {
+  return pbglevt_(filename,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgfind_(
+  _fcd filename,
+  fortint * param,
+  fortint * level,
+  fortint * date,
+  fortint * time,
+  fortint * step, 
+  fortint * n,
+  fortint filename_len) {
+/*
+// Returns the index of the GRIB product with the specified param, level, ..
+// Searching starts after GRIB product n.
+*/
+integer index = (*n);
+integer p = *param, l = *level, d = *date, t = *time, s = *step;
+integer loop;
+integer thisFile;
+gribfile * file;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+
+    for( loop = index; loop < file->count; loop++ ) {
+      if( p == file->parameter[loop] )
+        if( l == file->level[loop] )
+          if( d == file->date[loop] )
+            if( t == file->time[loop] )
+              if( s == file->timestep[loop] )
+                return (loop+1);
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgfind(
+  _fcd filename,
+  fortint * param,
+  fortint * level,
+  fortint * date,
+  fortint * time,
+  fortint * step, 
+  fortint * n,
+  fortint filename_len) {
+  return pbgfind_(filename,param,level,date,time,step,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgvfind_(
+  _fcd filename,
+  fortint * param,
+  fortint * level,
+  fortint * vdate,
+  fortint * vtime,
+  fortint * status,
+  fortint * n,
+  fortint filename_len) {
+/*
+// Returns the index of the GRIB product with the specified param, level,
+// verifying data and time (vdate & vtime).
+// Searching starts after GRIB product n.
+//
+// Returns the index of the first match found, or -1 if no match is found.
+// If more than one match is found (eg analysis and forecast fields),
+// status returns the index of the second match; otherwise status = 0.
+*/
+integer index = (*n);
+integer p = *param, l = *level, d = *vdate, t = *vtime;
+integer loop;
+integer thisFile;
+gribfile * file;
+
+  *status = 0;
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+
+    for( loop = index; loop < file->count; loop++ ) {
+      if( p == file->parameter[loop] )
+        if( l == file->level[loop] )
+          if( d == file->vdate[loop] )
+            if( t == file->vtime[loop] ) {
+              long innerloop;
+              for( innerloop = loop+1; innerloop < file->count; innerloop++ ) {
+                if( p == file->parameter[innerloop] )
+                  if( l == file->level[innerloop] )
+                    if( d == file->vdate[innerloop] )
+                      if( t == file->vtime[innerloop] )
+                        *status = innerloop+1 ;
+              }
+              return (loop+1);
+            }
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgvfind(
+  _fcd filename,
+  fortint * param,
+  fortint * level,
+  fortint * vdate,
+  fortint * vtime,
+  fortint * status,
+  fortint * n,
+  fortint filename_len) {
+  return pbgvfind_(filename,param,level,vdate,vtime,status,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+#define L_PARAM    0
+#define L_LEVEL    1
+#define L_DATE     2
+#define L_TIME     3
+#define L_STEP     4
+#define L_ENSEMBLE 5
+#define L_TYPE     6
+#define L_STREAM   7
+#define L_REPRES   8
+#define L_LEVTYPE  9
+#define L_VDATE    10
+#define L_VTIME    11
+#define L_NI       12
+#define L_NJ       13
+#define L_NLAT     14
+#define L_NLON     15
+#define L_SLAT     16
+#define L_SLON     17
+#define L_DI       18
+#define L_DJ       19
+#define L_SPLAT    20
+#define L_SPLON    21
+#define L_QUASI    22
+
+#define L_PROBSCALE 23
+#define L_PROBINDIC 24
+#define L_PROBLOWER 25
+#define L_PROBUPPER 26
+
+#define L_TUBENUM  23
+#define L_TUBETOT  24
+#define L_TUBEN    25
+#define L_TUBEW    26
+#define L_TUBES    27
+#define L_TUBEE    28
+#define L_TUBESTP  29
+#define L_TUBEFC   30
+
+#define L_CLUSNUM  23
+#define L_CLUSTOT  24
+#define L_CLUSMETH 25
+#define L_CLUSSTP  26
+#define L_CLUSSTPE 27
+#define L_CLUSN    28
+#define L_CLUSW    29
+#define L_CLUSS    30
+#define L_CLUSE    31
+#define L_CLUSOPFC 32
+#define L_CLUSCFFC 33
+#define L_CLUSFC   34
+
+#define L_DIRECTIONNUMBER 23
+#define L_FREQUENCYNUMBER 24
+
+#define L_OPTIMISATIONTIME    23
+#define L_LEADTIME            24
+#define L_SENSITIVEAREADOMAIN 25
+#define L_SENSITIVEAREAMETHOD 26
+
+#define L_VERIFYINGMONTH      23
+#define L_AVERAGINGPERIOD     24
+#define L_FORECASTMONTH       25
+#define L_REFERENCEDATE       26
+#define L_CLIMATEDATEFROM     27
+#define L_CLIMATEDATETO       28
+#define L_THRESHOLDUNITSSCALE 29
+#define L_THRESHOLDINDICATOR  30
+#define L_LOWERTHRESHOLD      31
+#define L_UPPERTHRESHOLD      32
+
+#define L_LOCALDEF 35
+
+#define L_ALIST_LENGTH 12
+#define L_BLIST_LENGTH 36
+
+fortint pbgafind_(
+  _fcd filename,
+  fortint * list,
+  fortint * n,
+  fortint filename_len) {
+/*
+// Returns the index of the GRIB product with the specified param, level, ..
+// Searching starts after GRIB product n.
+*/
+integer index = (*n);
+integer param    = list[L_PARAM],
+        level    = list[L_LEVEL],
+        date     = list[L_DATE],
+        time     = list[L_TIME],
+        step     = list[L_STEP],
+        ensemble = list[L_ENSEMBLE],
+        type     = list[L_TYPE],
+        stream   = list[L_STREAM],
+        repres   = list[L_REPRES],
+        levtype  = list[L_LEVTYPE],
+        vdate    = list[L_VDATE],
+        vtime    = list[L_VTIME];
+integer loop;
+integer thisFile;
+gribfile * file;
+
+  if( DEBUG1 ) {
+    _fcd pfile;
+    integer loop;
+
+    copyName(&pfile, filename, filename_len);
+    printf("PBGAFIND: searching file %s\n", pfile);
+    free(pfile);
+
+    for( loop = 0; loop < L_ALIST_LENGTH ; loop++ ) {
+      if( list[loop] != MISSING )
+        printf("PBGAFIND: ilist[%d] = %d\n", (loop+1), list[loop] );
+    }
+  }
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+
+    for( loop = index; loop < file->count; loop++ ) {
+      if( MATCH(param,file->parameter[loop]) )
+      if( MATCH(level,file->level[loop]) )
+      if( MATCH(date,file->date[loop]) )
+      if( MATCH(time,file->time[loop]) )
+      if( MATCH(step,file->timestep[loop]) )
+      if( MATCH(ensemble,file->number[loop]) )
+      if( MATCH(type,file->type[loop]) )
+      if( MATCH(stream,file->stream[loop]) )
+      if( MATCH(repres,file->repres[loop]) )
+      if( MATCH(levtype,file->levtype[loop]) )
+      if( MATCH(vdate,file->vdate[loop]) )
+      if( MATCH(vtime,file->vtime[loop]) ) {
+        if( DEBUG1 ) {
+          _fcd pfile;
+          copyName(&pfile, filename, filename_len);
+          printf("PBGAFIND: matching GRIB found at position %d in file %s\n",
+                 (loop+1), pfile);
+          free(pfile);
+        }
+        return (loop+1);
+      }
+    }
+  }
+
+  return (-1);
+}
+
+fortint pbgafind(_fcd filename,fortint* list,fortint* n,fortint filename_len) {
+  return pbgafind_(filename,list,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+fortint pbgbfind_(
+  _fcd filename,
+  fortint * list,
+  fortint * n,
+  fortint filename_len) {
+/*
+// Returns the index of the GRIB product with the specified param, level, ..
+// Searching starts after GRIB product n.
+*/
+integer index = (*n);
+integer param         =  list[L_PARAM],
+        level         =  list[L_LEVEL],
+        date          =  list[L_DATE],
+        time          =  list[L_TIME],
+        step          =  list[L_STEP],
+        localDef      =  list[L_LOCALDEF],
+        ensemble      =  list[L_ENSEMBLE],
+        type          =  list[L_TYPE],
+        stream        =  list[L_STREAM],
+        repres        =  list[L_REPRES],
+        levtype       =  list[L_LEVTYPE],
+        vdate         =  list[L_VDATE],
+        vtime         =  list[L_VTIME],
+        ni            =  list[L_NI],
+        nj            =  list[L_NJ],
+        nlat          =  list[L_NLAT],
+        nlon          =  list[L_NLON],
+        slat          =  list[L_SLAT],
+        slon          =  list[L_SLON],
+        di            =  list[L_DI],
+        dj            =  list[L_DJ],
+        splat         =  list[L_SPLAT],
+        splon         =  list[L_SPLON],
+        quasi         =  list[L_QUASI];
+integer tcNumber               = MISSING,
+        tcTotal                = MISSING,
+        clusterMethod          = MISSING,
+        tcStep                 = MISSING,
+        clusterStepEnd         = MISSING,
+        tcNorth                = MISSING,
+        tcWest                 = MISSING,
+        tcSouth                = MISSING,
+        tcEast                 = MISSING,
+        clusterOpFcNumber      = MISSING,
+        clusterControlFcNumber = MISSING,
+        tcNumOfFcs             = MISSING,
+        probScale              = MISSING,
+        probIndicator          = MISSING,
+        probLower              = MISSING,
+        probUpper              = MISSING,
+        directionNumber        = MISSING,
+        frequencyNumber        = MISSING,
+        optimisationTime       = MISSING,
+        leadTime               = MISSING,
+        sensitiveAreaDomain    = MISSING,
+        sensitiveAreaMethod    = MISSING,
+        verifyingMonth         = MISSING,
+        averagingPeriod        = MISSING,
+        forecastMonth          = MISSING,
+        referenceDate          = MISSING,
+        climateDateFrom        = MISSING,
+        climateDateTo          = MISSING,
+        thresholdUnitsScale    = MISSING,
+        thresholdIndicator     = MISSING,
+        lowerThreshold         = MISSING,
+        upperThreshold         = MISSING;
+integer loop;
+integer thisFile;
+gribfile * file;
+
+ if( DEBUG1 ) {
+   _fcd pfile;
+   integer loop;
+
+   copyName(&pfile, filename, filename_len);
+   printf("PBGBFIND: searching file %s\n", pfile);
+   free(pfile);
+
+   for( loop = 0; loop < L_BLIST_LENGTH ; loop++ ) {
+     if( list[loop] != MISSING )
+       printf("PBGBFIND: ilist[%d] = %d\n", (loop+1), list[loop] );
+   }
+ }
+
+ if( (type == CLUSTERMEAN) || (type == CLUSTERSD) ) {
+   tcNumber               =  list[L_CLUSNUM];
+   tcTotal                =  list[L_CLUSTOT];
+   clusterMethod          =  list[L_CLUSMETH];
+   tcStep                 =  list[L_CLUSSTP];
+   clusterStepEnd         =  list[L_CLUSSTPE];
+   tcNorth                =  list[L_CLUSN];
+   tcWest                 =  list[L_CLUSW];
+   tcSouth                =  list[L_CLUSS];
+   tcEast                 =  list[L_CLUSE];
+   clusterOpFcNumber      =  list[L_CLUSOPFC];
+   clusterControlFcNumber =  list[L_CLUSCFFC];
+   tcNumOfFcs             =  list[L_CLUSFC];
+ }
+
+ if( type == TUBETYPE) {
+   tcNumber    =  list[L_TUBENUM];
+   tcTotal     =  list[L_TUBETOT];
+   tcStep      =  list[L_TUBESTP];
+   tcNorth     =  list[L_TUBEN];
+   tcWest      =  list[L_TUBEW];
+   tcSouth     =  list[L_TUBES];
+   tcEast      =  list[L_TUBEE];
+   tcNumOfFcs  =  list[L_TUBEFC];
+ }
+
+ if( type == PROBABILITY) {
+   probScale     = list[L_PROBSCALE];
+   probIndicator = list[L_PROBINDIC];
+   probLower     = list[L_PROBLOWER];
+   probUpper     = list[L_PROBUPPER];
+ }
+
+ if( localDef == 13 ) {
+   directionNumber = list[L_DIRECTIONNUMBER];
+   frequencyNumber = list[L_FREQUENCYNUMBER];
+ }
+
+ if( localDef == 21 ) {
+   optimisationTime    = list[L_OPTIMISATIONTIME];
+   leadTime            = list[L_LEADTIME];
+   sensitiveAreaDomain = list[L_SENSITIVEAREADOMAIN];
+   sensitiveAreaMethod = list[L_SENSITIVEAREAMETHOD];
+ }
+
+ if( localDef == 23 ) {
+   verifyingMonth      = list[L_VERIFYINGMONTH];
+   averagingPeriod     = list[L_AVERAGINGPERIOD];
+   forecastMonth       = list[L_FORECASTMONTH];
+   referenceDate       = list[L_REFERENCEDATE];
+   climateDateFrom     = list[L_CLIMATEDATEFROM];
+   climateDateTo       = list[L_CLIMATEDATETO];
+   thresholdUnitsScale = list[L_THRESHOLDUNITSSCALE];
+   thresholdIndicator  = list[L_THRESHOLDINDICATOR];
+   lowerThreshold      = list[L_LOWERTHRESHOLD];
+   upperThreshold      = list[L_UPPERTHRESHOLD];
+ }
+
+ if( index >= 0 ) {
+  thisFile = pbginitInput(filename,filename_len);
+  file = currentFile(openFiles, thisFile);
+
+  for( loop = index; loop < file->count; loop++ ) {
+   if( MATCH(param,file->parameter[loop]) )
+   if( MATCH(level,file->level[loop]) )
+   if( MATCH(step,file->timestep[loop]) )
+   if( MATCH(time,file->time[loop]) )
+   if( MATCH(date,file->date[loop]) )
+   if( MATCH(ensemble,file->number[loop]) )
+   if( MATCH(type,file->type[loop]) )
+   if( MATCH(stream,file->stream[loop]) )
+   if( MATCH(repres,file->repres[loop]) )
+   if( MATCH(levtype,file->levtype[loop]) )
+   if( MATCH(vdate,file->vdate[loop]) )
+   if( MATCH(vtime,file->vtime[loop]) )
+   if( MATCH(ni,file->ni[loop]) )
+   if( MATCH(nj,file->nj[loop]) )
+   if( MATCH(nlat,file->nlat[loop]) )
+   if( MATCH(nlon,file->nlon[loop]) )
+   if( MATCH(slat,file->slat[loop]) )
+   if( MATCH(slon,file->slon[loop]) )
+   if( MATCH(di,file->di[loop]) )
+   if( MATCH(dj,file->dj[loop]) )
+   if( MATCH(splat,file->splat[loop]) )
+   if( MATCH(splon,file->splon[loop]) )
+   if( MATCH(quasi,file->quasi[loop]) )
+   if( MATCH(tcNumber,file->tcNumber[loop]) )
+   if( MATCH(tcTotal,file->tcTotal[loop]) )
+   if( MATCH(clusterMethod,file->clusterMethod[loop]) )
+   if( MATCH(tcStep,file->tcStep[loop]) )
+   if( MATCH(clusterStepEnd,file->clusterStepEnd[loop]) )
+   if( MATCH(tcNorth,file->tcNorth[loop]) )
+   if( MATCH(tcWest,file->tcWest[loop]) )
+   if( MATCH(tcSouth,file->tcSouth[loop]) )
+   if( MATCH(tcEast,file->tcEast[loop]) )
+   if( MATCH(clusterOpFcNumber,file->clusterOpFcNumber[loop]) )
+   if( MATCH(clusterControlFcNumber,file->clusterControlFcNumber[loop]) )
+   if( MATCH(tcNumOfFcs,file->tcNumOfFcs[loop]) )
+   if( MATCH(probScale,file->probScale[loop]) )
+   if( MATCH(probIndicator,file->probIndicator[loop]) )
+   if( MATCH(probLower,file->probLower[loop]) )
+   if( MATCH(probUpper,file->probUpper[loop]) )
+   if( MATCH(directionNumber,file->directionNumber[loop]) )
+   if( MATCH(frequencyNumber,file->frequencyNumber[loop]) )
+   if( MATCH(optimisationTime,file->optimisationTime[loop]) )
+   if( MATCH(leadTime,file->leadTime[loop]) )
+   if( MATCH(sensitiveAreaDomain,file->sensitiveAreaDomain[loop]) )
+   if( MATCH(sensitiveAreaMethod,file->sensitiveAreaMethod[loop]) )
+   if( MATCH(verifyingMonth,file->verifyingMonth[loop]) )
+   if( MATCH(averagingPeriod,file->averagingPeriod[loop]) )
+   if( MATCH(forecastMonth,file->forecastMonth[loop]) )
+   if( MATCH(referenceDate,file->referenceDate[loop]) )
+   if( MATCH(climateDateFrom,file->climateDateFrom[loop]) )
+   if( MATCH(climateDateTo,file->climateDateTo[loop]) )
+   if( MATCH(thresholdUnitsScale,file->thresholdUnitsScale[loop]) )
+   if( MATCH(thresholdIndicator,file->thresholdIndicator[loop]) )
+   if( MATCH(lowerThreshold,file->lowerThreshold[loop]) )
+   if( MATCH(upperThreshold,file->upperThreshold[loop]) ) {
+     if( DEBUG1 ) {
+       _fcd pfile;
+       copyName(&pfile, filename, filename_len);
+       printf("PBGBFIND: matching GRIB found at position %d in file %s\n",
+       (loop+1), pfile);
+       free(pfile);
+     }
+     return (loop+1);
+   }
+  }
+ }
+
+ return (-1);
+}
+
+fortint pbgbfind(_fcd filename,fortint* list,fortint* n,fortint filename_len) {
+  return pbgbfind_(filename,list,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+
+#define INDEX_TOO_BIG  -1
+#define FSEEK_ERROR    -2
+#define FREAD_ERROR    -2
+#define BUFF_TOO_SMALL -3
+
+fortint pbgget_(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint * n, fortint filename_len) {
+/*
+// Gets the nth GRIB product.
+*/
+integer index = (*n)-1;
+integer length, status;
+OFF_T offset;
+integer thisFile;
+FILE * fp;
+gribfile * file;
+
+  if( DEBUG1 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBGGET: getting GRIB number %d in file %s\n",
+    (index+1), pfile);
+    free(pfile);
+  }
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+
+      length = file->length[index];
+
+      if( DEBUG1 ) printf("PBGGET: length of GRIB number %d = %d\n",
+                          (index+1), length);
+
+      if( *bufflen < length ) {
+        fprintf(stderr,
+          "PBGGET: user buffer too small, %d bytes required\n", length);
+        return BUFF_TOO_SMALL;
+      }
+
+      offset = file->offset[index];
+
+      if( DEBUG1 ) printf("PBGGET: offset of GRIB number %d = %d\n",
+                          (index+1), offset);
+
+      fp = file->fp;
+#ifdef FOPEN64
+      if( fseeko64( fp, offset, 0) ) {
+#else
+      if( fseek( fp, offset, 0) ) {
+#endif
+        perror("PBGGET: error in fseek");
+        return FSEEK_ERROR;
+      }
+
+      status = fread(buffer, 1, length, fp);
+      if( status != length ) {
+        fprintf(stderr,"PBGGET: error in fread\n");
+        return FREAD_ERROR;
+      }
+      
+      return length;
+    }
+  }
+
+  return INDEX_TOO_BIG;
+
+}
+
+fortint pbgget(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint * n, fortint filename_len) {
+  return pbgget_(filename,buffer,bufflen,n,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+
+#define FWRITE_ERROR -1
+
+fortint pbgput_(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint filename_len) {
+/*
+// Write an array to a file.
+*/
+integer length;
+integer thisFile;
+FILE * fp;
+gribfile * file;
+
+  if( DEBUG1 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBGPUT: putting %d bytes to file %s\n", *bufflen, pfile);
+    free(pfile);
+  }
+
+  thisFile = pbginitOutput(filename,filename_len);
+  file = currentFile(openFiles, thisFile);
+
+  fp = file->fp;
+  length = fwrite(buffer, 1, *bufflen, fp);
+
+  if( DEBUG1 ) printf("PBGPUT: number of bytes written = %d\n", length);
+
+  if( length!=(*bufflen) )
+    return FWRITE_ERROR;
+  else
+    return (*bufflen);
+}
+
+fortint pbgput(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint filename_len) {
+  return pbgput_(filename,buffer,bufflen,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+void pbgclos_(_fcd filename, fortint filename_len) {
+
+  openFiles.removeFile(filename, filename_len);
+  return;
+
+}
+
+void pbgclos(_fcd filename, fortint filename_len) {
+  pbgclos_(filename,filename_len);
+}
+
+/*
+// ****************************************************************
+*/
+integer pbginitInput(_fcd filename, fortint filename_len) {
+/*
+// Initialise indices for current file if necessary.
+*/
+integer thisFile;
+
+  if( DEBUG2 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBG_pbginitInput: checking if file %s already open\n", pfile);
+    free(pfile);
+  }
+
+  thisFile = openFiles.exists(filename,filename_len);
+
+  if( thisFile == -1 ) {
+    if( DEBUG2 ) printf("PBG_pbginitInput: file not yet open\n");
+    return ( openFiles.addRead(filename, filename_len) );
+  }
+
+  if( DEBUG2 ) printf("PBG_pbginitInput: file has open slot %d\n", thisFile);
+  return thisFile;
+
+}
+
+integer pbginitOutput(_fcd filename, fortint filename_len) {
+/*
+// Initialise output file if necessary.
+*/
+integer thisFile;
+
+  if( DEBUG2 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBG_pbginitOutput: checking if file %s already open\n", pfile);
+    free(pfile);
+  }
+
+  thisFile = openFiles.exists(filename,filename_len);
+
+  if( thisFile == -1 ) {
+    if( DEBUG2 ) printf("PBG_pbginitOutput: file not yet open\n");
+    return ( openFiles.addWrite(filename, filename_len) );
+  }
+
+  if( DEBUG2 ) printf("PBG_pbginitOutput: file has open slot %d\n", thisFile);
+  return thisFile;
+
+}
+
+integer exists(_fcd filename , fortint filename_len) {
+integer n;
+_fcd pfile;
+gribfile * file;
+
+
+/*
+// See if DEBUG switched on.
+*/
+    if( ! debugSet ) {
+      debugLevel = getenv("PBG_DEBUG");
+      if( debugLevel == NULL )
+        debugSet = DEBUGOFF;              /* off */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(debugLevel) ; loop++ ) {
+          if( ! isdigit(debugLevel[loop]) ) {
+            printf("Invalid number string in PBG_DEBUG: %s\n", debugLevel);
+            printf("PBG_DEBUG must comprise only digits [0-9].\n");
+            debugSet = DEBUGOFF;
+          }
+        }
+        debugSet = DEBUGOFF + atol( debugLevel );
+      }
+      if( DEBUG2 ) printf("PBG_exists: PBG_DEBUG switched on\n");
+    }
+
+  if( openFiles.count > -1 ) {
+
+    copyName(&pfile, filename, filename_len);
+
+    if( DEBUG2 ) printf("PBG_exists: looking for filename = %s\n", pfile);
+
+    for( n = 0; n <= openFiles.count; n++ ) {
+      file = currentFile(openFiles, n);
+      if( file != 0 ) {
+        if( strcmp( file->fname, pfile ) == 0 ) {
+          free(pfile);
+          if( DEBUG2 ) printf("PBG_exists: file found in slot= %d\n", n);
+          return n;
+        }
+      }
+    }
+
+    free(pfile);
+  }
+  return -1;
+}
+
+integer addFile(_fcd filename , fortint filename_len, char readwriteflag) {
+_fcd pfile;
+char mode[2] = " ";
+FILE * in;
+gribfile * previousLatest, * latest;
+
+  openFiles.count++;
+
+  copyName(&pfile, filename, filename_len);
+
+  if( DEBUG2 ) printf("PBG_addFile: adding filename = %s\n", pfile);
+
+  mode[0] = readwriteflag;
+#ifdef FOPEN64
+  in = fopen64(pfile,mode);
+#else
+  in = fopen(pfile,mode);
+#endif
+  if( in == NULL ) {
+    perror("Error opening file");
+    exit(1);
+  }
+
+  if( openFiles.count == 0 ) {
+    openFiles.files = (gribfile *)malloc(sizeof(gribfile));
+    latest = openFiles.files;
+  }
+  else {
+    previousLatest = latestFile(openFiles);
+    previousLatest->next = (gribfile *)malloc(sizeof(gribfile));
+    latest = previousLatest->next;
+  }
+
+  latest->fp = in;
+  copyName(&(latest->fname),filename,filename_len);
+  latest->readwriteflag = readwriteflag;
+  latest->max = MAX_NUMBER_OF_GRIBS;
+  latest->count = 0;
+
+#define MALLOC(a) (a) = (void *) malloc(space)
+
+  if( readwriteflag == 'r' ) {
+    integer space;
+
+    space = sizeof(OFF_T)*MAX_NUMBER_OF_GRIBS;
+    MALLOC(latest->offset);
+
+    space = sizeof(integer)*MAX_NUMBER_OF_GRIBS;
+    MALLOC(latest->length);
+    MALLOC(latest->parameter);
+    MALLOC(latest->level);
+    MALLOC(latest->date);
+    MALLOC(latest->time);
+    MALLOC(latest->timestep);
+    MALLOC(latest->localDefinitionNumber);
+    MALLOC(latest->type);
+    MALLOC(latest->stream);
+    MALLOC(latest->repres);
+    MALLOC(latest->levtype);
+    MALLOC(latest->number);
+    MALLOC(latest->vdate);
+    MALLOC(latest->vtime);
+    MALLOC(latest->tcNumber);
+    MALLOC(latest->tcTotal);
+    MALLOC(latest->clusterMethod);
+    MALLOC(latest->tcStep);
+    MALLOC(latest->clusterStepEnd);
+    MALLOC(latest->tcNorth);
+    MALLOC(latest->tcWest);
+    MALLOC(latest->tcSouth);
+    MALLOC(latest->tcEast);
+    MALLOC(latest->clusterOpFcNumber);
+    MALLOC(latest->clusterControlFcNumber);
+    MALLOC(latest->tcNumOfFcs);
+    MALLOC(latest->probScale);
+    MALLOC(latest->probIndicator);
+    MALLOC(latest->probLower);
+    MALLOC(latest->probUpper);
+    MALLOC(latest->ni);
+    MALLOC(latest->nj);
+    MALLOC(latest->nlat);
+    MALLOC(latest->nlon);
+    MALLOC(latest->slat);
+    MALLOC(latest->slon);
+    MALLOC(latest->di);
+    MALLOC(latest->dj);
+    MALLOC(latest->splat);
+    MALLOC(latest->splon);
+    MALLOC(latest->quasi);
+    MALLOC(latest->directionNumber);
+    MALLOC(latest->frequencyNumber);
+    MALLOC(latest->optimisationTime);
+    MALLOC(latest->leadTime);
+    MALLOC(latest->sensitiveAreaDomain);
+    MALLOC(latest->sensitiveAreaMethod);
+    MALLOC(latest->verifyingMonth);
+    MALLOC(latest->averagingPeriod);
+    MALLOC(latest->forecastMonth);
+    MALLOC(latest->referenceDate);
+    MALLOC(latest->climateDateFrom);
+    MALLOC(latest->climateDateTo);
+    MALLOC(latest->thresholdUnitsScale);
+    MALLOC(latest->thresholdIndicator);
+    MALLOC(latest->lowerThreshold);
+    MALLOC(latest->upperThreshold);
+  }
+
+  latest->next = 0;
+
+  if( DEBUG2 ) printf("PBG_addFile: adding file %s in slot = %d\n",
+                       pfile, openFiles.count);
+
+  free(pfile);
+  return openFiles.count;
+
+}
+
+void removeFile(_fcd filename , fortint filename_len) {
+integer thisFile;
+int status;
+
+  if( DEBUG2 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBG_removeFile: trying to remove filename = %s\n", pfile);
+    free(pfile);
+  }
+ 
+  thisFile = openFiles.exists(filename,filename_len);
+
+  if( thisFile != -1 ) {
+    integer index;
+    gribfile * previous = openFiles.files;
+    gribfile * current;
+
+    current = previous;
+
+    for( index = 0; index < thisFile; index++ ) {
+      previous = current;
+      current = current->next;
+    }
+
+    status = fclose(current->fp);
+    if( status != 0 ) {
+      perror("Error closing file");
+      exit(1);
+    }
+    if( DEBUG2 ) printf("PBG_removeFile: removing file %s from slot %d\n",
+                         current->fname, thisFile);
+    free(current->fname);
+
+/*
+//  Input files have arrays of values
+*/
+    if( current->readwriteflag == 'r' ) {
+      free(current->offset);
+      free(current->length);
+      free(current->parameter);
+      free(current->level);
+      free(current->date);
+      free(current->time);
+      free(current->timestep);
+      free(current->localDefinitionNumber);
+      free(current->type);
+      free(current->stream);
+      free(current->repres);
+      free(current->levtype);
+      free(current->number);
+      free(current->vdate);
+      free(current->vtime);
+      free(current->tcNumber);
+      free(current->tcTotal);
+      free(current->clusterMethod);
+      free(current->tcStep);
+      free(current->clusterStepEnd);
+      free(current->tcNorth);
+      free(current->tcWest);
+      free(current->tcSouth);
+      free(current->tcEast);
+      free(current->clusterOpFcNumber);
+      free(current->clusterControlFcNumber);
+      free(current->tcNumOfFcs);
+      free(current->probScale);
+      free(current->probIndicator);
+      free(current->probLower);
+      free(current->probUpper);
+      free(current->ni);
+      free(current->nj);
+      free(current->nlat);
+      free(current->nlon);
+      free(current->slat);
+      free(current->slon);
+      free(current->di);
+      free(current->dj);
+      free(current->splat);
+      free(current->splon);
+      free(current->quasi);
+      free(current->directionNumber);
+      free(current->frequencyNumber);
+      free(current->optimisationTime);
+      free(current->leadTime);
+      free(current->sensitiveAreaDomain);
+      free(current->sensitiveAreaMethod);
+      free(current->verifyingMonth);
+      free(current->averagingPeriod);
+      free(current->forecastMonth);
+      free(current->referenceDate);
+      free(current->climateDateFrom);
+      free(current->climateDateTo);
+      free(current->thresholdUnitsScale);
+      free(current->thresholdIndicator);
+      free(current->lowerThreshold);
+      free(current->upperThreshold);
+    }
+
+    if( thisFile == 0 ) 
+      openFiles.files = (current->next);
+    else
+       previous->next = (current->next);
+    free(current);
+    
+    openFiles.count--;
+  }
+}
+
+integer addRead(_fcd filename , fortint filename_len) {
+integer thisFile;
+
+  if( DEBUG2 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBG_addRead: add for reading filename = %s\n", pfile);
+    free(pfile);
+  }
+
+  thisFile = addFile(filename,filename_len,'r');
+
+  pbgindx( thisFile);
+
+  return thisFile;
+}
+
+integer addWrite(_fcd filename , fortint filename_len) {
+integer thisFile;
+
+  if( DEBUG2 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("PBG_addWrite: add for writing filename = %s\n", pfile);
+    free(pfile);
+  }
+
+  thisFile = addFile(filename,filename_len,'w');
+
+  return thisFile;
+}
+
+void copyName(_fcd * pfile, _fcd filename, fortint filename_len) {
+/*
+// Copies FORTRAN filename to C string.
+*/
+char * blankCharacterPointer;
+integer space;
+
+  *pfile = (char *) malloc((size_t) (filename_len+1) );
+  memcpy(*pfile, filename, (size_t) filename_len);
+  space = (integer) filename_len;
+  (*pfile)[space] = '\0';
+
+  blankCharacterPointer = strchr(filename, ' ');
+  if( blankCharacterPointer != NULL ) {
+    space = (integer) (blankCharacterPointer - filename);
+    (*pfile)[space] = '\0';
+  }
+
+  return;
+}
+
+gribfile * latestFile(collection openFiles) {
+integer index;
+gribfile * last = openFiles.files;
+
+  for( index = 1; index < openFiles.count; index++ )
+    last =  last->next;
+
+  return last;
+
+}
+
+gribfile * currentFile(collection openFiles, integer thisFile) {
+integer index;
+gribfile * current = openFiles.files;
+
+  for( index = 0; index < thisFile; index++ )
+    current = current->next;
+
+  return current;
+}
+
+#ifdef gribAPI
+long Julian_to_date(long jdate) {
+#else
+long julian_to_date(long jdate) {
+#endif
+long x,y,d,m,e;
+long day,month,year;
+
+    x = 4 * jdate - 6884477;
+    y = (x / 146097) * 100;
+    e = x % 146097;
+    d = e / 4;
+
+    x = 4 * d + 3;
+    y = (x / 1461) + y;
+    e = x % 1461;
+    d = e / 4 + 1;
+
+    x = 5 * d - 3;
+    m = x / 153 + 1;
+    e = x % 153;
+    d = e / 5 + 1;
+
+    if( m < 11 )
+    	month = m + 2;
+    else
+    	month = m - 10;
+
+    day = d;
+    year = y + m / 11;
+
+    return year * 10000 + month * 100 + day;
+}
+
+#ifdef gribAPI
+long date_to_Julian(long ddate) {
+#else
+long date_to_julian(long ddate) {
+#endif
+long  m1,y1,a,b,c,d,j1;
+long month,day,year;
+
+    year = ddate / 10000;
+    ddate %= 10000;
+    month  = ddate / 100;
+    ddate %= 100;
+    day = ddate;
+
+
+    if (year < 100) year = year + 1900;
+
+    if (month > 2)
+    {
+    	m1 = month - 3;
+    	y1 = year;
+    }
+    else
+    {
+    	m1 = month + 9;
+    	y1 = year - 1;
+    }
+
+    a = 146097*(y1/100)/4;
+    d = y1 % 100;
+    b = 1461*d/4;
+    c = (153*m1+2)/5+day+1721119;
+    j1 = a+b+c;
+
+    return(j1);
+}
+
+fortint pbggeth012_(_fcd,fortint*,fortint,fortint,fortint);
+fortint soffset012_(unsigned char*,fortint*,fortint*,fortint*);
+
+#define XFIND_ERROR -1
+
+fortint pbgxfind_(fortint * grib1, _fcd filename, fortint filename_len)
+{
+unsigned char* buffer1 = (unsigned char*) grib1;
+static fortint* ibuffer2 = NULL;
+static fortint buffer2Length = 0;
+fortint status, totalLength, headerLength, numberOfGribs, loop;
+fortint is0, is1, is2;
+fortint js0, js1, js2;
+
+  numberOfGribs = pbgtotl_(filename,filename_len);
+  if( numberOfGribs < 1 ) {
+    if( DEBUG1 ) {
+      _fcd pfile;
+      copyName(&pfile, filename, filename_len);
+      printf("PBXFIND: No GRIBs in file %s\n", pfile);
+      free(pfile);
+    }
+    return XFIND_ERROR;
+  }
+
+  status = soffset012_(buffer1, &is0, &is1, &is2);
+  if( status ) return XFIND_ERROR;
+
+  totalLength = THREEBYTELONG(buffer1+is0+4);
+  headerLength = (is1 - is0);
+  headerLength += THREEBYTELONG(buffer1+is1);
+  if( is2 != 0 ) headerLength += THREEBYTELONG(buffer1+is2);
+
+  for( loop = 0; loop < numberOfGribs; loop++) {
+    fortint next, totalLength2, headerLength2;
+    unsigned char * buffer2;
+
+    next = loop + 1;
+
+    if( ibuffer2 != NULL ) {
+      if( buffer2Length < headerLength ) {
+        ibuffer2 = (fortint*) realloc(ibuffer2,headerLength);
+        if( ibuffer2 == NULL ) {
+          printf("pbgxfind_: realloc failed\n");
+          return XFIND_ERROR;
+        }
+        buffer2Length = headerLength;
+      }
+    }
+    else {
+      ibuffer2 = (fortint*) malloc(headerLength);
+      if( ibuffer2 == NULL ) {
+        printf("pbgxfind_: malloc failed\n");
+        return XFIND_ERROR;
+      }
+      buffer2Length = headerLength;
+    }
+
+    totalLength2 =
+      pbggeth012_(filename,ibuffer2,buffer2Length,next,filename_len);
+
+    if( totalLength2 > 1 ) {
+
+      buffer2 = (unsigned char*) ibuffer2;
+      status = soffset012_(buffer2, &js0, &js1, &js2);
+      if( status ) return XFIND_ERROR;
+
+      if( totalLength == totalLength2 ) {
+        headerLength2 = (js1 - js0);
+        headerLength2 += THREEBYTELONG(buffer2+js1);
+        if( js2 != 0 ) headerLength2 += THREEBYTELONG(buffer2+js2);
+
+        if( headerLength == headerLength2 ) {
+          if( (memcmp((buffer1+is0),(buffer2+js0),(size_t)headerLength) == 0) )
+            return next;
+        }
+      }
+    }
+
+  }
+
+  return XFIND_ERROR;
+}
+
+fortint pbgxfind(fortint * grib1, _fcd filename, fortint filename_len) {
+  return pbgxfind_(grib1,filename,filename_len);
+}
+
+#define GRIB_TOO_SMALL -4
+
+fortint pbggeth012_(_fcd filename, fortint* buffer, fortint bufflen,
+                    fortint n, fortint filename_len) {
+/*
+// Gets section 0,1 and 2 for the nth GRIB product.
+*/
+integer index = n - 1;
+integer length, status;
+OFF_T offset;
+integer thisFile;
+FILE * fp;
+gribfile * file;
+
+  if( DEBUG1 ) {
+    _fcd pfile;
+    copyName(&pfile, filename, filename_len);
+    printf("pbggeth012: getting GRIB number %d in file %s\n",
+    (index+1), pfile);
+    free(pfile);
+  }
+
+  if( index >= 0 ) {
+    thisFile = pbginitInput(filename,filename_len);
+    file = currentFile(openFiles, thisFile);
+    if( index < file->count ) {
+
+      length = file->length[index];
+
+      if( DEBUG1 ) printf("pbggeth012: length of GRIB number %d = %d\n",
+                          (index+1), length);
+
+      if( length < bufflen ) return GRIB_TOO_SMALL;
+
+      offset = file->offset[index];
+
+      if( DEBUG1 ) printf("pbggeth012: offset of GRIB number %d = %d\n",
+                          (index+1), offset);
+
+      fp = file->fp;
+#ifdef FOPEN64
+      if( fseeko64( fp, offset, 0) ) {
+#else
+      if( fseek( fp, offset, 0) ) {
+#endif
+        perror("pbggeth012: error in fseek");
+        return FSEEK_ERROR;
+      }
+
+      status = fread(buffer, 1, bufflen, fp);
+      if( status != bufflen ) {
+        fprintf(stderr,"pbggeth012: error in fread\n");
+        return FREAD_ERROR;
+      }
+      
+      return length;
+    }
+  }
+
+  return INDEX_TOO_BIG;
+
+}
+
+#define ERROR(a,b) {perror(a);return b;}
+#define GRIB 0x47524942
+#define len3oct(p) ((((long)*(p))<<16) + (((long)*(p+1))<<8) + (long)*(p+2))
+#define BIT1 0x80
+#define BIT2 0x40
+#define BIT3 0x20
+#define BIT4 0x10
+#define BIT5 0x08
+#define BIT6 0x04
+#define BIT7 0x02
+#define BIT8 0x01
+
+static int grab(unsigned char * , unsigned char * , long ,long ,long * );
+
+fortint soffset012_(
+  unsigned char * buffer,
+  fortint* is0,
+  fortint* is1,
+  fortint* is2 ) {
+long s0, s1, s2, edition;
+int large = 0;
+int found = 0;
+int code = 0;
+long bytes_read = 0, advance;
+unsigned char p, edit_num, flag23;
+unsigned char size[3];
+int section0 = 8, section1, section2;
+long total;
+
+/*
+// Read bytes until "GRIB" found
+*/
+    do {
+      if( grab(buffer, &p, 1, 1, &bytes_read) != 0) return 1;
+      code = ( (code << 8) + p ) & 0xFFFFFFFF;
+      if (code == GRIB ) found = 1;
+    } while ( ! found );
+    s0 = bytes_read - 4;
+    bytes_read = 4;
+/*
+// Now find out which edition of GRIB is present (default is 1)
+*/
+    edition = 1;
+    s1 = s0 + 8;
+    if( (*(buffer+21-s0) == '\0') && (*(buffer+22-s0) == '\0') ) {
+      edition = -1;                            /* GRIB edition -1 */
+      s1 = s0;
+      section1 = 20;
+      section0 = 4;
+    }
+    else {
+      if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+      total = len3oct(size);
+      if( total == 24 ) {
+/*
+// Move past the edition number
+*/
+        if( grab(buffer, &edit_num, 1, 1, &bytes_read) != 0) return 1;
+        edition = 0;                         /* GRIB edition 0 */
+        section1 = 24;
+        s1 = s0 + 4;
+        section0 = 4;
+      }
+    }
+
+    if( edition == 1 ) {
+/*
+// See if it is an extra large (wave) product
+*/
+      if( total > 0x800000 ) {
+        total = (total&0x7fffff) * 120;
+        large = 1;
+      }
+/*
+// Move past the edition number
+*/
+      if( grab(buffer, &edit_num, 1, 1, &bytes_read) != 0) return 1;
+/*
+// Read length of section 1
+*/
+      if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+      section1 = len3oct(size);
+    }
+/*
+// Now figure out if section 2 is present
+*/
+    advance = 4;
+    bytes_read += advance;
+    if( grab(buffer, &flag23, 1, 1, &bytes_read) != 0) return 1;
+    section2 = flag23 & BIT1;
+
+/*
+// Advance to end of section 1
+*/
+    advance = section1 - (bytes_read - section0);
+    bytes_read += advance;
+/*
+// Read section 2 length if it is given
+*/
+    if( section2 ) {
+      s2 = s0 + bytes_read;
+      if( grab(buffer, size, 3, 1, &bytes_read) != 0) return 1;
+      section2 = len3oct(size);
+      advance = section2 - (bytes_read - section0 - section1);
+      bytes_read += advance;
+    }
+    else {
+      section2 = 0;
+      s2 = 0;
+    }
+/*
+// Success!
+*/
+    *is0 = (fortint) s0;
+    *is1 = (fortint) s1;
+    *is2 = (fortint) s2;
+    return 0;
+}
+
+static int grab(unsigned char * buffer, unsigned char * where, long size,long cnt,long * num_bytes_read)
+{
+long number = size*cnt;
+
+    memcpy(where, (buffer+(*num_bytes_read)), number);
+    *num_bytes_read += number;
+
+    return 0;
+}
diff --git a/pbio/PBGroutines.h b/pbio/PBGroutines.h
new file mode 100755
index 0000000..9423c49
--- /dev/null
+++ b/pbio/PBGroutines.h
@@ -0,0 +1,192 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef PBG_ROUTINES_H
+#define PBG_ROUTINES_H
+
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef FOPEN64
+extern FILE *fopen64(const char *,const char *);
+#define OFF_T off64_t
+extern OFF_T ftello64(FILE *);
+#else
+#define OFF_T off_t
+#endif
+
+#define _fcd char *
+#define fortint int
+#define integer int
+#define bool int
+
+#define MAX_NUMBER_OF_GRIBS 100
+
+typedef struct gribfile {
+
+  FILE *  fp;
+  _fcd    fname;
+  char readwriteflag;
+  integer max;
+  integer count;
+  OFF_T * offset;
+  integer * length;
+  integer * parameter;
+  integer * level;
+  integer * date;
+  integer * time;
+  integer * timestep;
+  integer * localDefinitionNumber;
+  integer * type;
+  integer * stream;
+  integer * repres;
+  integer * levtype;
+  integer * number;
+  integer * vdate;
+  integer * vtime;
+  integer * tcNumber;
+  integer * tcTotal;
+  integer * clusterMethod;
+  integer * tcStep;
+  integer * clusterStepEnd;
+  integer * tcNorth;
+  integer * tcWest;
+  integer * tcSouth;
+  integer * tcEast;
+  integer * clusterOpFcNumber;
+  integer * clusterControlFcNumber;
+  integer * tcNumOfFcs;
+  integer * probScale;
+  integer * probIndicator;
+  integer * probLower;
+  integer * probUpper;
+  integer * ni;
+  integer * nj;
+  integer * nlat;
+  integer * nlon;
+  integer * slat;
+  integer * slon;
+  integer * di;
+  integer * dj;
+  integer * splat;
+  integer * splon;
+  integer * quasi;
+  integer * directionNumber;
+  integer * frequencyNumber;
+  integer * optimisationTime;
+  integer * leadTime;
+  integer * sensitiveAreaDomain;
+  integer * sensitiveAreaMethod;
+  integer * verifyingMonth;
+  integer * averagingPeriod;
+  integer * forecastMonth;
+  integer * referenceDate;
+  integer * climateDateFrom;
+  integer * climateDateTo;
+  integer * thresholdUnitsScale;
+  integer * thresholdIndicator;
+  integer * lowerThreshold;
+  integer * upperThreshold;
+
+  struct gribfile *next;
+
+}gribfile;
+
+typedef struct collection {
+
+  integer (* exists)(_fcd , fortint);
+  integer (* addRead)(_fcd , fortint);
+  integer (* addWrite)(_fcd , fortint);
+  void (* removeFile)(_fcd , fortint);
+
+  integer count;
+  integer max;
+  struct gribfile * files;
+
+}collection;
+
+
+/*
+// Prototypes
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+fortint pbgtotl(_fcd filename, fortint filename_len);
+fortint pbgtotl_(_fcd filename, fortint filename_len);
+fortint pbgleng(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgleng_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgoffs(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgoffs_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgparm(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgparm_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbglevl(_fcd filename, fortint * n, fortint filename_len);
+fortint pbglevl_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgdate(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgdate_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgtime(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgtime_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgstep(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgstep_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgtype(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgtype_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgstrm(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgstrm_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgrepr(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgrepr_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbglevt(_fcd filename, fortint * n, fortint filename_len);
+fortint pbglevt_(_fcd filename, fortint * n, fortint filename_len);
+fortint pbgfind(_fcd filename,
+                fortint * param, fortint * level, fortint * date,
+                fortint * time,  fortint * step,  fortint * n,
+                fortint filename_len);
+fortint pbgfind_(_fcd filename,
+                fortint * param, fortint * level, fortint * date,
+                fortint * time,  fortint * step,  fortint * n,
+                fortint filename_len);
+fortint pbgafind(_fcd filename, fortint * list, fortint * n,
+                fortint filename_len);
+fortint pbgafind_(_fcd filename, fortint * list, fortint * n,
+                fortint filename_len);
+fortint pbgbfind(_fcd filename, fortint * list, fortint * n,
+                fortint filename_len);
+fortint pbgbfind_(_fcd filename, fortint * list, fortint * n,
+                fortint filename_len);
+fortint pbgvfind(_fcd filename,
+                fortint * param, fortint * level, fortint * vdate,
+                fortint * vtime, fortint * status, fortint * n,
+                fortint filename_len);
+fortint pbgvfind_(_fcd filename,
+                fortint * param, fortint * level, fortint * vdate,
+                fortint * vtime, fortint * status, fortint * n,
+                fortint filename_len);
+fortint pbgxfind_(fortint * grib1, _fcd filename, fortint filename_len);
+fortint pbgxfind(fortint * grib1, _fcd filename, fortint filename_len);
+
+fortint pbgget(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint * n, fortint filename_len);
+fortint pbgget_(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint * n, fortint filename_len);
+
+fortint pbgput(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint filename_len);
+fortint pbgput_(_fcd filename, fortint * buffer, fortint * bufflen,
+               fortint filename_len);
+
+void pbgclos(_fcd filename, fortint filename_len);
+void pbgclos_(_fcd filename, fortint filename_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end of  PBG_ROUTINES_H */
diff --git a/pbio/README b/pbio/README
new file mode 100755
index 0000000..98d0488
--- /dev/null
+++ b/pbio/README
@@ -0,0 +1,657 @@
+
+        /cc/od/metapps/src/lib/emos/pbio/README
+
+
+   i)   FORTRAN
+        -------
+
+        This file describes a number of subroutines which can be called
+        from FORTRAN to handle an unblocked binary file:
+
+        PBGRIB          to read GRIB products
+        PBBUFR          to read BUFR products
+        PBOPEN          to open the file (must be used before the other
+                                          routines are called)
+        PBCLOSE         to close the file
+        PBSEEK          to position the file (optional)
+        PBREAD          to read from the file
+        PBREAD2         to read from the file (different behaviour on hitting
+                                               end-of-file)
+        PBWRITE         to write to the file
+
+        The subroutines are written in C and use standard library functions
+        for file handling (fopen, fclose, fseek, fread and fwrite).
+
+
+
+  ii)   C
+        _
+
+        There are three additional C functions to handle unblocked binary files:
+
+        readgrib        to read GRIB products
+        readbufr        to read BUFR products
+        readnext        to read any mixture of products
+
+        These functions  are written in C and use standard library functions
+        for file handling (fopen, fclose, fseek, fread and fwrite).
+
+

+
+
+
+ iii)   LIBRARIES
+        ---------
+
+        A library (libemos.a) has been made for the BUFR and GRIB binary
+	file reading and writing routines.  It is planned to put future 
+	software updates into libemos.a and make no changes to the original 
+	emoslib.a.
+
+        The original emoslib.a library ( /home/ecmwf/emos_sms/lib/emoslib.a )
+        still exists and still contains the original BUFR/GRIB handling 
+	routines.
+
+
+        One set of the binary read/write sources is maintained, hard-linked 
+	into the three directories:
+
+                /home/ecmwf/emos_sms/src/libemos/sun4
+
+                /home/ecmwf/emos_sms/src/libemos/sgimips
+
+                /home/ecmwf/emos_sms/src/libemos/unicos
+
+
+        An object library containing the routines has been made for CRAY, 
+	SGI and SUN:
+
+                /usr/local/lib/libemos.a 
+
+
+        The library names follow the normal UNIX convention and can be 
+        specified in the compile/link command using the standard ld 
+        convention, for example:
+
+        cc -o program program.c  -lemos
+
+

+
+
+
+        PBGRIB
+        ------
+
+        A subroutine which can be called from FORTRAN to retrieve GRIB 
+        products from an unblocked binary file.  The subroutine is an 
+        interface to a set of C routines which handle the binary file 
+        as a stream of bytes.
+
+        The GRIB products are delivered one per call to a user array.  The
+        format and arguments for the subroutine are as follows:
+
+        
+        SUBROUTINE PBGRIB(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+
+        where:
+
+
+        Input parameters are INTEGERs:
+        -----
+
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+        KARRAY =        FORTRAN array big enough to hold the GRIB product.
+
+        KINLEN =        size in BYTES of the FORTRAN array.
+
+
+        Output parameters are INTEGERs:
+        ------
+
+        KOUTLEN =       actual size in BYTES of the GRIB product read into
+                        KARRAY. 
+
+        KRET =           0  if a GRIB product has been successfully read.
+
+                        -1  if end-of-file is hit before a GRIB product is read.
+                            (Note that EOF does not cause a program fail, so
+                             this value must be explicitly caught by the caller
+                             to avoid looping at the EOF)
+
+                        -2  if there is an error in the file-handling (eg. if
+                            the file contains a truncated GRIB product).
+
+                        -3  if the size of KARRAY is not sufficient for the 
+                            GRIB product.
+
+
+
+

+
+
+
+        PBBUFR
+        ------
+
+        A subroutine which can be called from FORTRAN to retrieve BUFR 
+        products from an unblocked binary file.  The subroutine is an 
+        interface to a set of C routines which handle the binary file 
+        as a stream of bytes.
+
+        The BUFR products are delivered one per call to a user array.  The
+        format and arguments for the subroutine are as follows:
+
+        
+        SUBROUTINE PBBUFR(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+
+        where:
+
+
+        Input parameters are INTEGERs:
+        -----
+
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+        KARRAY =        FORTRAN array big enough to hold the BUFR product.
+
+        KINLEN =        size in BYTES of the FORTRAN array.
+
+
+        Output parameters are INTEGERs:
+        ------
+
+        KOUTLEN =       actual size in BYTES of the BUFR product read into
+                        KARRAY. 
+
+        KRET =           0  if a BUFR product has been successfully read.
+
+                        -1  if end-of-file is hit before a BUFR product is read.
+                            (Note that EOF does not cause a program fail, so
+                             this value must be explicitly caught by the caller
+                             to avoid looping at the EOF)
+
+                        -2  if there is an error in the file-handling (eg. if
+                            the file contains a truncated BUFR product).
+
+                        -3  if the size of KARRAY is not sufficient for the 
+                            BUFR product.
+
+
+
+
+

+
+
+
+        readgrib
+        --------
+
+        A C function which can be invoked to retrieve GRIB products from 
+        an unblocked binary file.  
+
+        The GRIB products are delivered one per call to a user array.  The
+        format and arguments for the function are as follows:
+
+
+        long readgrib(FILE * file, char * buffer, long * grib_prod_len)
+ 
+
+        file          =  file pointer returned from PBOPEN
+
+        buffer        = buffer big enough to hold the GRIB product
+
+        grib_prod_len = size of the buffer on input, becomes size in BYTES of 
+                        the GRIB product read.  If the end-of-file is hit, the
+                        value is returned unchanged (ie. when the function 
+                        return code is -1).
+
+
+        Function returns:
+
+        0  if a GRIB product has been successfully read
+
+       -1  if end-of-file is hit before a GRIB product is read
+           (Note that EOF does not cause a program fail, so
+           this value must be explicitly caught by the caller
+           to avoid looping at the EOF)
+
+       -2  if there is an error in the file-handling 
+           (eg. if the file contains a truncated GRIB product)
+
+       -3  if the size of buffer is not sufficient for the GRIB product.
+           In this case, the buffer is filled with bytes from the product
+           and the file is positioned at the beginning of the following
+           product, if any.
+
+       -4  if the user buffer is too small to allow any processing of the
+           product at all (eg. less than 8 bytes long)
+
+
+        If the second parameter is a NULL pointer, the function will pass
+        back the length of the next product and will position the file on
+        the byte following the end of the product.
+

+
+
+
+        readbufr
+        --------
+
+        A C function which can be invoked to retrieve BUFR products from 
+        an unblocked binary file.  
+
+        The BUFR products are delivered one per call to a user array.  The
+        format and arguments for the function are as follows:
+
+
+        long readbufr(FILE * file, char * buffer, long * bufr_prod_len)
+ 
+
+        file          =  file pointer returned from PBOPEN
+
+        buffer        = buffer big enough to hold the BUFR product
+
+        bufr_prod_len = size of the buffer on input, becomes size in BYTES of 
+                        the BUFR product read.  If the end-of-file is hit, the
+                        value is returned unchanged (ie. when the function 
+                        return code is -1).
+
+
+        Function returns:
+
+        0  if a BUFR product has been successfully read
+
+       -1  if end-of-file is hit before a BUFR product is read
+           (Note that EOF does not cause a program fail, so
+           this value must be explicitly caught by the caller
+           to avoid looping at the EOF)
+
+       -2  if there is an error in the file-handling 
+           (eg. if the file contains a truncated BUFR product)
+
+       -3  if the size of buffer is not sufficient for the BUFR product.
+           In this case, the buffer is filled with bytes from the product
+           and the file is positioned at the beginning of the following
+           product, if any.
+
+       -4  if the user buffer is too small to allow any processing of the
+           product at all (eg. less than 8 bytes long)
+
+
+        If the second parameter is a NULL pointer, the function will pass
+        back the length of the next product and will position the file on
+

+
+
+
+        readnext
+        --------
+
+        A C function which can be invoked to retrieve GRIB or BUFR products 
+        from an unblocked binary file.  
+
+        The products are delivered one per call to a user array.  The
+        format and arguments for the function are as follows:
+
+
+        long readnext(char * buffer, long * prod_len, 
+              long (*read_func)(char *, long , void *), void * stream)
+
+    Where:
+    ------
+
+    buffer        = buffer big enough to hold the GRIB product.
+                    If buffer = NULL, the function will create its own 
+                    internal buffer and will return the length of the
+                    product, but not the product itself.
+
+    prod_len =      size of the buffer on input, becomes size in BYTES of 
+                    the product read.  If the end-of-file is hit, this
+                    value is returned unchanged (ie. when the function 
+                    return code is -1).
+
+    read_func     = function to read input stream
+
+    stream        = data for read_function, eg. file pointer returned 
+                    from PBOPEN
+
+
+        If the second parameter is a NULL pointer, the function will pass
+        back the length of the next product and will position the file on
+        the byte following the end of the product.
+
+
+
+    Function returns:
+
+        0  if a product has been successfully read
+
+       -1  if end-of-file is hit before a product is read
+
+       -3  if the size of buffer is not sufficient for the product
+
+       -4  if the user buffer is too small to start processing product
+
+

+
+
+
+        PBOPEN
+        ------
+
+        A subroutine which can be called from FORTRAN to open an unblocked 
+        binary file and return a suitable unit number for use in calls to 
+        PBGRIB, PBBUFR, PBSEEK, PBREAD, PBREAD2 and PBWRITE.
+
+        The format and arguments for the subroutine are as follows:
+
+        SUBROUTINE PBOPEN(KUNIT,FILENAME,MODE,KRET)
+
+        where:
+
+
+        Input parameters are CHARACTERs:
+        -----
+ 
+        FILENAME =      a character string describing the file
+
+        MODE     =      a character string describing the mode of
+                        access to the file:
+                                r       for read
+                                w       for write
+                                a       for append
+
+
+
+        Output parameters are INTEGERs:
+        ------
+
+        KUNIT =         unit number for the file - it is a C FILE pointer
+                        and not a FORTRAN unit number.
+
+        KRET     =      -1 = Could not open file.
+                        -2 = Invalid file name.
+                        -3 = Invalid open mode specified
+                         0 = OK.
+
+
+
+
+

+
+
+
+        PBCLOSE
+        -------
+
+        A subroutine which can be called from FORTRAN to close an unblocked 
+        binary file previously opened with PBOPEN.
+
+        The format and arguments for the subroutine are as follows:
+
+        SUBROUTINE PBCLOSE(KUNIT,KRET)
+
+        where:
+
+
+        Input parameter is an INTEGER:
+        -----
+ 
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+
+
+        Output parameter is an INTEGER:
+        ------
+
+        KRET     =      -1 error in handling the file.
+                         0 = OK.
+
+
+

+
+
+
+        PBSEEK
+        ------
+
+        A subroutine which can be called from FORTRAN to position an 
+        unblocked binary file at any desired byte position.
+
+        The format and arguments for the subroutine are as follows:
+
+        SUBROUTINE PBSEEK(KUNIT,KOFFSET,KSTART,KRET)
+
+        where:
+
+
+        Input parameters are INTEGERs:
+        -----
+
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+        KOFFSET =       number of bytes to offset the file; this is used
+                        as either an absolute or relative offset depending
+                        on the value of KSTART.
+
+        KSTART  =       0       if KOFFSET is an absolute count from the
+                                beginning of the file,
+
+                        1       if KOFFSET is a relative offset from the
+                                current byte position in the file,
+
+                        2       if KOFFSET is an absolute offset from the
+                                end of file.
+
+
+        Output parameter is an INTEGER:
+        ------
+
+        KRET    =       -2      if there is an error in handling the file
+
+                        -1      if end-of-file is encountered
+                                (Note that EOF does not cause a program fail, 
+                                so this value must be explicitly caught by 
+                                the caller to avoid looping at the EOF)
+
+                        >= 0    byte offset from the start of file after
+                                positioning.
+
+
+
+

+
+
+
+        PBREAD
+        ------
+
+        A subroutine which can be called from FORTRAN to read a block of 
+        bytes from an unblocked binary file.  ( Note that this routine
+        behaves differently from PBREAD2 on hitting end-of-file. )
+
+        The format and arguments for the subroutine are as follows:
+
+        SUBROUTINE PBREAD(KUNIT,KARRAY,KOUNT,KRET)
+
+        where:
+
+
+        Input parameters are INTEGERs:
+        -----
+
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+        KOUNT   =       number of BYTES to read from the file.
+
+
+
+        Output parameters are INTEGERs:
+        ------
+
+        KARRAY =        an INTEGER array to accept the bytes from the read.
+
+        KRET    =       -2      if there is an error in handling the file
+
+                        -1      if end-of-file is encountered
+                                (Note that EOF does not cause a program fail, 
+                                so this value must be explicitly caught by 
+                                the caller to avoid looping at the EOF)
+
+                        >= 0    number of BYTES read from the file.
+
+
+
+

+
+
+
+        PBREAD2
+        -------
+
+        A subroutine which can be called from FORTRAN to read a block of 
+        bytes from an unblocked binary file.  ( Note that this routine
+        behaves differently from PBREAD on hitting end-of-file. )
+
+        The format and arguments for the subroutine are as follows:
+
+        SUBROUTINE PBREAD2(KUNIT,KARRAY,KOUNT,KRET)
+
+        where:
+
+
+        Input parameters are INTEGERs:
+        -----
+
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+        KOUNT   =       number of BYTES to read from the file.
+
+
+
+        Output parameters are INTEGERs:
+        ------
+
+        KARRAY =        an INTEGER array to accept the bytes from the read.
+
+        KRET    =       -2      if there is an error in handling the file
+
+                        >= 0    number of BYTES read from the file.
+                                If end-of-file is encountered, KRET returns
+                                the number of bytes actually read.  The
+                                caller must check this value against the
+                                number of bytes requested to detect EOF.
+

+
+
+
+        PBWRITE
+        -------
+
+        A subroutine which can be called from FORTRAN to write a block of 
+        bytes to an unblocked binary file.
+
+        The format and arguments for the subroutine are as follows:
+
+        SUBROUTINE PBWRITE(KUNIT,KARRAY,KOUNT,KRET)
+
+        where:
+
+
+        Input parameters are INTEGERs:
+        -----
+
+        KUNIT =         unit number for the file; this must have been
+                        obtained by calling PBOPEN (see below) - it is
+                        a C FILE pointer and not a FORTRAN unit number.
+
+        KARRAY =        an INTEGER array holding the bytes for the write.
+
+        KOUNT   =       number of BYTES to write to the file.
+
+
+
+        Output parameter is an INTEGER:
+        ------
+
+        KRET    =       -1      if there is an error in writing to the file
+
+                        >= 0    number of BYTES written to the file.
+
+
+
+

+
+
+
+C
+C       A sample FORTRAN program
+C
+
+        program test3 
+C
+        integer iret
+        integer length
+        integer buff(50000)
+        integer buflen
+        data buflen/200000/
+        character*1 moder,modew,modea
+        data moder/'r'/,modew/'w'/,modea/'a'/
+        character*24 filename
+        data filename/'bufr.u'/
+        character*24 newfilename
+        data newfilename/'bufr.ext'/
+
+C open - for read
+        call pbopen(iunit1,filename,moder,iret)
+        write(*,*) 'After PBOPEN, iret = ', iret
+        if ( iret .ne. 0 ) stop 'open failed'
+
+C open - for write
+        call pbopen(iunit2,newfilename,modew,iret)
+        write(*,*) 'After PBOPEN, iret = ', iret
+        if ( iret .ne. 0 ) stop 'open failed'
+
+        do loop =1,500
+C Get the next BUFR product
+                call pbbufr(iunit1, buff, buflen, length, iret)
+                write (*,*) 'BUFR product number= ', loop
+                write (*,*) 'Length of BUFR product = ', length
+                write (*,*) 'iret = ', iret
+
+                if (iret .eq. -1 ) stop 'EOF'
+                if (iret .eq. -2 ) stop 'file handling problem'
+                if (iret .eq. -3 ) stop 'array too small for product'
+
+C Write product to new file 
+C               buff(length/4) = o
+                call pbwrite(iunit2,buff,length,iret)
+                write(*,*) 'After PBWRITE, iret = ', iret
+                if ( iret .lt. 0 ) stop 'write failed'
+        enddo
+
+C Close files
+        call pbclose(iunit1,iret)
+        write(*,*) 'After PBCLOSE, iret = ', iret
+        if ( iret .ne. 0 ) stop 'close failed'
+
+        call pbclose(iunit2,iret)
+        write(*,*) 'After PBCLOSE, iret = ', iret
+        if ( iret .ne. 0 ) stop 'close failed'
+
+        stop
+
+        end
diff --git a/pbio/blokex.F b/pbio/blokex.F
new file mode 100755
index 0000000..6eee3e8
--- /dev/null
+++ b/pbio/blokex.F
@@ -0,0 +1,1951 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+
+      Subroutine BLOKEX (Ksec0,Ksec1,Ksec2,Klen2,
+     &                   Kblok,Kbdim,Kword,Kmaxw,Hoper,Hform,Kret)
+C---->
+c**
+c****  Name  *BLOKEX*
+c****  ----
+c**
+c**   Purpose
+c**   -------
+c**       1) Block data in BLOK code, Edition 0.
+c**       2) Unblock data from BLOK code.
+c**       3) Decode only identification section of BLOK
+c**          coded data ie Sections 0 and 1.
+c**
+c**          A number of options exist when coding or decoding data.
+c**          See values allowed for requested function, Hoper, Below.
+c**
+c**   Interface
+c**   ---------
+c**
+c**       Call BLOKEX (Ksec0,Ksec1,Ksec2,Klen2,
+c**  &                 Kblok,Kbdim,Kword,Kmaxw,Hoper,Hform,Kret)
+c**
+c**
+c**       Integer   K*
+c**       Character H*
+c**       
+c**       Input parameters for all functions:
+c**       -----------------------------------
+c**
+c**             Hoper - Requested function:
+c**
+c**                     'B' To code data in BLOK code. The input, 
+c**                         when using this function, is the full
+c**                         data array (original parent form) Ksec2.
+c**                         The output array, Kblok, in this case
+c**                         contains all related BLOK messages. The
+c**                         length of each BLOK message is Kmaxw,
+c**                         except the last one which length is 
+c**                         (Kword-(Ksec0(5)-1)*Kmaxw).
+c**
+c**                     'C' To code data in BLOK code. The input,
+c**                         when using this function, is the part of the
+c**                         data array (origianl parent form) Ksec2 
+c**                         which will be coded in BLOK code.
+c**
+c**                     'F' To unblock data from BLOK code. By 
+c**                         successive calling Blokex with this
+c**                         function, it will collect related BLOK
+c**                         messages until the original parent form is
+c**                         achieved (when the return code is 0).
+c**
+c**                     'I' To decode only identification
+c**                         sections 0 and 1 of BLOK code.
+c**
+c**                     'L' Return length of BLOK message, in
+c**                         bytes, and BLOK edition number only.
+c**
+c**                     'U' To unblock single BLOK message.
+c**
+c**             Kbdim - Dimension of array Kblok
+c**
+c**             Kret  - Response to error indicator
+c**
+c**                     0         , Abort if error encountered.
+c**                     Non-zero  , Return to calling routine
+c**                                 even if error encountered.
+c**
+c**       Input parameters for coding functions.
+c**       --------------------------------------
+c**             Section   Word   Contents:
+c**             -------   ----   ---------
+c**             Ksec0       4    Flag;
+c**
+c**                        decimal
+c**                        value     meaning
+c**                        -----     -------
+c**                           0      Section 1 to be omitted
+c**                         128      Section 1 to be present
+c**
+c**       Input parameters for coding functions.
+c**       Output parameters for decoding functions.
+c**       -----------------------------------------
+c**             Ksec2 - Integer parameters of section 2 (Data
+c**                     section) of BLOK code.
+c**
+c**             Klen2 - Length of array Ksec2
+c**
+c**             Kmaxw - Maximun length of single BLOK message
+c**
+c**       Output parameters for coding functions.
+c**       Input parameters for decoding functions.
+c**       ----------------------------------------
+c**             Kblok - Integer parameters of BLOK coded data array.
+c**
+c**       Output parameters for decoding functions.
+c**       -----------------------------------------
+c**             Ksec0      - Integer parameters of section 0 of 
+c**                          BLOK code.
+c**                          Integer array of 7 words.
+c**
+c**                 Word   Contents:
+c**                 ----   ---------
+c**                   1    Total length of this BLOK
+c**                   2    BLOK code edition number
+c**                        (currently edition 0)
+c**                   3    Total length of parent form
+c**                   4    Flag;
+c**
+c**                        decimal
+c**                        value     meaning
+c**                        -----     -------
+c**                           0      Section 1 omitted
+c**                         128      Section 1 present
+c**
+c**                   5    Total number of related BLOKs
+c**                   6    Sequence number of this BLOK
+c**                   7    Reserved
+c**
+c**
+c**             Ksec1      - Integer parameters of section 1 
+c**                          of BLOK code (contains integer parameters
+c**                          of section 0 and identification section
+c**                          of the parent form).
+c**                          When coding data, if Section 1 requested to be
+c**                          present (Ksec0(4)=128) then:
+c**                          Function 'B' requested - Ksec1 is extracted
+c**                          from the parent form and inserted in each related
+c**                          BLOK.
+c**                          Function 'C' requested - Ksec1 is extracted from
+c**                          the parent form when the Ksec0(6)=1 and saved to
+c**                          be inserted in each related BLOK (untill the
+c**                          Ksec0(6)=1 again).
+c**
+c**       Output parameters for all functions.
+c**       ------------------------------------
+c**             Kword      - Number of words of Kblok occupied by
+c**                          coded data. Output parameter for coding
+c**                          function only. Not required as input
+c**                          for decoding.
+c**
+c**             Hform      - Parent data format description ('GRIB',
+c**                          'BUFR','    ').
+c**
+c**             Kret       - return code.
+c**
+c**                           0  , no errors encountered (when 'F'
+c**                                function requested, also means
+c**                                that the all related blocks unblocked
+c**                                and original parent form achieved).
+c**
+c**                          Kret leter then 0 - Informative codes for
+c**                                              decoding functions.
+c**
+c**                          -1  , input array (Kblok) does not contain
+c**                                BLOK coded data.
+c**                          -2  , 'F' function requested, all 
+c**                                related blocks not yet unblocked and
+c**                                and the original parent form not yet
+c**                                achieved.
+c**                                
+c**                          Kret greater then 0 - Error codes.
+c**
+c**                               Error codes are described by the
+c**                               appropriate output error messages when
+c**                               encountered.
+c**
+c**    Method
+c**    ------
+c**       Input data packed in BLOK code in accordance with
+c**       parameters given or set by user or fully or partially
+c**       unpacked, depending on function used.
+c**
+c**    Externals
+c**    ---------
+c**       *Abortx* - Terminate execution of the job.
+c**       *Inxbit* - Contains calls to the routines gbyte(s)
+c**                  and sbyte(s) or their equivalents.
+c**       *Setpar* - Set number of bits in the computer word
+c**                  (and largest negative number).
+c**
+c**   Reference.
+c**   ----------
+c**       WMO manual on codes for BLOK definition.
+c**
+c**   Comments.
+c**   ---------
+c**       Versions of source code exist for the vax, cyber, ibm
+c**       and sun workstation, as well as the cray.
+c**
+c**             The following defaults are used. They have been selected
+c**             to facilitate the most frequent usage at ECMWF.
+c**
+c**             1) by default debug printout is switched off.
+c**                Call grsdbg (i) where
+c**                            i=non-zero, to switch on debug printout.
+c**                                     0, to switch off debug printout.
+c**
+c**             2) by default the rounding of 120 octets is switched on.
+c**                Call grsrnd (i) where
+c**                            i=non-zero, to switch on rounding
+c**                                     0, to switch off rounding
+c**
+c**    Author
+c**    ------
+c**       D.Jokic,  ECMWF,  Feb-1992. 
+c**
+C----<
+c*
+c*    Prefix conventions for variable names.
+c
+c     Character    H, dummy arguments,
+c                  Y, local variables.
+c     Integer      N, global.
+c                  K, dummy arguments.
+c                  I, local variables.
+c
+      Implicit none
+c
+      Character*1 Hoper
+      Character*4 Hform
+c
+      Character*1 Ycoper
+      Character*1 Ydoper
+      Character*1 Yoper
+c
+      Integer i
+      Integer Ibits
+      Integer Ibufr
+      Integer Icoun
+      Integer Idata
+      Integer Ie
+      Integer Ieblk
+      Integer Iedit
+      Integer Iendm
+      Integer Igrib
+      Integer Iilen
+      Integer Ilen1
+      Integer Ilen
+      Integer Iname
+      Integer Inblok
+      Integer Initial
+      Integer Inspt
+      Integer Insptl
+      Integer Imisng
+      Integer Ioff
+      Integer Iorder
+      Integer Iret
+      Integer Is
+      Integer Isec1
+      Integer Itblen
+      Integer Itplen
+      Integer Itemp
+      Integer Iword2
+      Integer Iword
+c
+      Integer Jbedno
+      Integer Jplen1
+c
+      Integer Kblok
+      Integer Kbdim
+      Integer Klen2
+      Integer Kret
+      Integer Ksec0
+      Integer Ksec1
+      Integer Ksec2
+      Integer Kword
+      Integer Kmaxw
+c
+      Integer Nblok
+      Integer Nbcoun
+      Integer Nbseqn
+      Integer Ndbg
+      Integer Nfcoun
+      Integer Nflag
+      Integer Nrnd
+      Integer N7777
+      Integer Nuser
+c
+c     Blok code version number used when coding data.
+c
+      Parameter (Jbedno=0)
+c
+c     Length (in octets) used for section 1, when coding data.
+c
+      Parameter (Jplen1=36)
+c
+      Dimension Kblok(*)
+      Dimension Ksec0(*)
+      Dimension Ksec1(*)
+      Dimension Ksec2(*)
+c
+      Dimension Nblok(4)
+      Dimension Ibufr(4)
+#ifdef CRAY
+      Dimension Idata(Kbdim)
+#else
+      Dimension Idata(34000)
+#endif
+      Dimension Ieblk(4)
+      Dimension Iendm(4)
+      Dimension Igrib(4)
+      Dimension Iname(4)
+      Dimension N7777(4)
+      Dimension Isec1(Jplen1)
+c
+c
+c     Characters BLOK and 7777 in ascii for use in sections 0 and 3
+c     of BLOK code.
+c
+      Data Nblok /66,76,79,75/
+      Data N7777 /55,55,55,55/
+c
+c     Characters GRIB and BUFR in ascii.
+c
+      Data Igrib /71,82,73,66/
+      Data Ibufr /66,85,70,82/
+c
+c     Ycoper - Default operator value for all coding functions	
+c     Ydoper - Default operator value for all decoding functions	
+c
+      Data Ycoper /'C'/
+      Data Ydoper /'D'/
+c
+c     First Call flag
+c
+      Data Initial /0/
+c
+      Real Fref
+      Integer Nfref,Nvck
+      Common /GRBCOM/ Fref,Nfref,Nrnd,Ndbg,Nvck,Nuser
+c
+      Save Nblok,N7777
+      Save Nbseqn,Nbcoun,Nfcoun
+      Save Nflag
+      Save Initial,Ibits,Itplen
+      Save Ilen1,Isec1
+c
+c     ------------------------------------------------------------------
+c
+c*        1.   Initialise
+c              ----------
+  100 Continue
+c
+c     Set number of bits per computer word and debug indicator,
+c     if first time through (Imisng is not using).
+c
+      If (Initial.eq.0) Then
+          Call Setpar (Ibits,Imisng,Ndbg)
+          Initial=1
+c
+c         Internal length of the parent form
+c
+          Itplen=0
+c
+c         Nflag - Flag ; 0 - 'F' function not requested
+c                        1 - 'F' function requested and full
+c                             parent form uncompleted
+c                        2 - 'F' function requested, full
+c                             parent form uncompleted and fields are
+c                             not in right order
+c                        3 - 'F' function requested, full
+c                             parent form completed and fields are
+c                             not in right order
+c
+          Nflag=0
+c
+c         Field counters
+c
+          Nbcoun=1
+          Nfcoun=0
+c
+c         Sequence number
+c
+          Nbseqn=0
+c
+      End if
+c
+c*        1.1  Initialise variables
+c
+  110 Continue
+c
+c     Internal return code
+c
+      Iret=0
+c
+c     Bit-pointer
+c
+      Inspt=0
+c
+c     Number of words in the single BLOK message
+c
+      Iword=0
+      Kword=0
+c
+c*        1.2  Set parameters
+c
+  120 Continue
+c
+c     Set default values for parameters, if values not already set,
+c     either on previous call or by user via calls to the grs--- 
+c     routines.
+c
+      If (Nuser.ne.11041967) Then
+c
+c         Set rounding to 120 bytes on
+c
+          Nrnd=1
+c
+c         Set debug print off
+c
+c         Ndbg=0
+c
+c         Mark common values set
+c
+          Nuser=11041967
+c
+      End if
+c
+c     When coding, print input parameters, if required.
+c
+      If (Ndbg.eq.1) Then
+          Write (*,*) '/Blokex/ Paragraph 1.'
+          If (Hoper.eq.'C') Then
+              Call Blprs0 (Ksec0)
+          End if
+      End if
+c
+c
+c     ------------------------------------------------------------------
+c
+c*        2.   Check input parameters and reset appropriate variables
+c              -----------------------------------------------------
+  200 Continue
+c
+      If (Ndbg.eq.1) Write (*,*) '/Blokex/ Paragraph 2.'
+c
+c*        2.1  Check that valid function has been requested
+c
+  210 Continue
+      If (Hoper.ne.'B'.and.Hoper.ne.'C'.and.
+     &    Hoper.ne.'I'.and.Hoper.ne.'L'.and.
+     &    Hoper.ne.'U'.and.Hoper.ne.'F'     ) Then
+          Iret=210
+          Write (*,9210) Hoper,Iret
+          Go to 910
+      End if
+c
+c     Set internal function parameter
+c
+      If (Hoper.eq.'B'.or.Hoper.eq.'C') Then
+          Yoper='B'
+      Else
+          Yoper='U'
+      End if
+c
+c*        2.2  Rounding of 120 bytes
+c
+  220 Continue
+      If (Yoper.eq.'B') Then
+c
+          If (Nrnd.eq.1) Then
+              If (Mod(Kmaxw*Ibits,120).ne.0) Then
+                  Iret=220
+                  Write(*,9220) Kmaxw,Nrnd,Iret
+                  Go to 910
+              End if
+          End if
+c
+c*        2.3  Check BLOK identification section flag - Ksec0(4)
+c
+  230 Continue
+          If (Ksec0(4).ne.0.and.Ksec0(4).ne.128) Then
+              Iret=230
+              Write(*,9230) Ksec0(4),Iret
+              Go to 900
+          End if
+c
+c         Reset length of BLOK identification section
+c
+          If (Ksec0(4).eq.0) Ilen1=0
+c
+c*        2.4  Check dimensions and preset output array to 0
+c
+  240 Continue
+c
+c         Check dimension Kbdim of the output array Kblok against the
+c         the length of the parent form Klen2
+c
+          If (Kbdim.le.Klen2) Then
+              Iret=240
+              Write(*,9240) Kbdim,Klen2,Iret
+              Go to 900
+          End if
+c
+c         Array to receive coded BLOK data
+c
+          Do 242 i=1,Kbdim
+          Idata(i)=0
+  242     Continue
+c
+c         First and last position for the extraction from the Ksec2
+c
+          Is=0
+          Ie=0
+c
+      End if
+c
+c*        2.5  Extract section 0 and section 1 of the parent code and
+c*             make identification section of BLOK code (if BLOK
+c*             identification section requested Ksec0(4)=128)
+c
+  250 Continue
+c
+c     Do the extraction if function 'B' requested or
+c     function 'C' requested and BLOK sequence number is 1
+c
+      If (Hoper.eq.'B'.or.(Hoper.eq.'C'.and.Ksec0(6).eq.1)) Then
+c
+          If (Ksec0(4).ne.0) Then
+c
+c             Parent code edition number; Extract field
+c
+              Itemp=56
+              Call Inxbit (Ksec2,Klen2,Itemp,Iedit,1,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=251
+                  Write (*,9101) 'parent code edition number.',Iret
+                  Go to 900
+              End if
+c
+              If (Iedit.eq.0) Itemp=32
+c
+c             Length of the parent identification section;
+c             Extract field
+c
+              Call Inxbit (Ksec2,Klen2,Itemp,Ilen1,1,Ibits,24,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=252
+                  Write (*,9101)
+     &            'length of the pareant identification section.',Iret
+                  Go to 900
+              End if
+              If (Ilen1.gt.Jplen1) Then
+                  Iret=2521
+                  Write (*,9251) Iret
+                  Go to 900
+              End if
+c
+c             Length of the BLOK identification section
+c
+              Itemp=Itemp-24
+              Ilen1=Ilen1+Itemp/8
+c
+c             Parent section 0 and section 1;
+c             Extract field
+c
+              Itemp=0
+              Call Inxbit (Ksec2,Klen2,Itemp,Isec1(1),Ilen1,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=253
+                  Write (*,9101) 'Parent section 0 and section 1.',Iret
+                  Go to 900
+              End if
+c
+          End if
+c
+      End if
+c
+c*        2.6  Reset internal parameters
+c
+  260 Continue
+      If (Hoper.eq.'B') Then
+c
+c         Total number of related bloks
+c
+          If (Kmaxw.le.0) Then
+              Iret=260
+              Write (*,9260) Kmaxw,Iret
+              Go to 900
+          End if
+          Inblok=Klen2/Kmaxw+1
+c
+c         Total length of all BLOK messages
+c
+          Itblen=Inblok*Kmaxw
+          Itemp=Klen2+(Inblok*(120*8/Ibits))
+          If (Itblen.lt.Itemp) Inblok=Inblok+1
+c
+          Ksec0(5)=Inblok
+c
+c         Total length of the parent form
+c
+          Ksec0(3)=Klen2*Ibits/8
+c
+c         Blok sequence number
+c
+          Nbseqn=0
+c
+      End if
+c
+c     Number of Ksec2 words which will be inserted 
+c     into one BLOK message
+c
+      If (Hoper.eq.'C') Then
+c
+          If (Kmaxw.le.Klen2) Then
+              Iret=263
+              Write (*,9263) Kmaxw,Klen2,Iret
+              Go to 900
+          End if
+c
+          Iword2=Klen2
+c
+      Else if (Hoper.eq.'B') Then
+c
+          Iword2=Kmaxw-(((16+4+Ilen1)*8/Ibits)+1)
+          Iret=Iword2*Ibits
+          If (Mod(Iret,960).ne.0) Then
+              Iret=Iret/960
+              Iret=Iret*960
+              Iword2=Iret/Ibits
+          End if
+c
+      End if
+c
+c     ------------------------------------------------------------------
+c
+c*        3.   BLOK Section 0
+c              --------------
+  300 Continue
+c
+c     Section 0 shall always be 16 octets long
+c
+      If (Ndbg.eq.1) Write(*,*) '/Blokex/ Paragraph 3.'
+c
+c*        3.1  Octets 1-4; The letters B L O K
+c
+  310 Continue
+c
+c     Four 8 bit fields
+c
+      If (Yoper.eq.'B') Then
+c
+c         Insert fields
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Nblok(1),4,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=310
+              Write (*,9100) 'Octets 1-4; The letters B L O K',Iret
+              Go to 900
+          End if
+c
+      Else
+c
+c         Extract fields
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ieblk(1),4,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=311
+              Write (*,9101) 'Octets 1-4; The letters B L O K',Iret
+              Go to 900
+          End if
+          Do 312 i=1,4
+          If (Ieblk(i).ne.Nblok(i)) Then
+              Iret=-1
+              Go to 910
+          End if
+  312     Continue
+c
+      End if
+c
+c*        3.2  Octets 5-7; Length of message
+c
+  320 Continue
+c
+c     One 24 bit field
+c
+      If (Yoper.eq.'B') Then
+c
+c         When coding data, skip field. Length is inserted
+c         later, when known.
+c
+          Insptl=Inspt
+c
+c         Update bit-pointer.
+c
+          Inspt=Inspt+24
+c
+       Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(1),1,Ibits,24,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=320
+              Write (*,9101) 'Octets 5-7; Length of message.',Iret
+              Go to 900
+          End if
+c
+c
+c         If only length is required, go to paragraph 9.
+c
+          If (Hoper.eq.'L') Then
+              Write(*,9321) Ksec0(1)
+              Go to 900
+          End if
+c
+          Kword=(Ksec0(1)+Ibits/8-1)*8/Ibits
+c
+      End if
+c
+c*        3.3  Octet 8; Blok edition number
+c
+  330 Continue
+c
+c     One 8 bit field
+c
+      If (Yoper.eq.'B') Then
+c
+c         Set value
+c
+          Ksec0(2)=Jbedno
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Ksec0(2),1,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=330
+              Write (*,9100) 'Octet 8; Blok edition number.',Iret
+              Go to 900
+          End if
+c
+      Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(2),1,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=330
+              Write (*,9101) 'Octet 8; Blok edition number.',Iret
+              Go to 900
+          End if
+c
+      End if
+c
+c*        3.4  Octets 9-11; Total length of parent form
+c
+  340 Continue
+c
+c     One 24 bit field
+c
+      If (Yoper.eq.'B') Then
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Ksec0(3),1,Ibits,24,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=340
+              Write (*,9100) 'Octets 9-11; Length of parent form.',Iret
+              Go to 900
+          End if
+c
+       Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(3),1,Ibits,24,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=341
+              Write (*,9101) 'Octets 9-11; Length of parent form.',Iret
+              Go to 900
+          End if
+      End if
+c
+c*        3.5  Octet 12; Flag (Code table 1)
+c
+  350 Continue
+c
+c     One 8 bit field
+c
+      If (Yoper.eq.'B') Then
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Ksec0(4),1,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=350
+              Write (*,9100) 'Octet 12; Flag.',Iret
+              Go to 900
+          End if
+c
+      Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(4),1,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=352
+              Write (*,9101) 'Octet 12; Flag.',Iret
+              Go to 900
+          End if
+c
+      End if
+c
+c
+c*        3.6  Octet 13; Total number of related BLOKS
+c
+  360 Continue
+c
+c     One 8 bit field
+c
+      If (Yoper.eq.'B') Then
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Ksec0(5),1,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=360
+              Write (*,9100) 'Octet 13; Total number of related bloks.',
+     &                        Iret
+              Go to 900
+          End if
+c
+      Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(5),1,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=361
+              Write (*,9101) 'Octet 13; Total number of related bloks.',
+     &                        Iret
+              Go to 900
+          End if
+c
+c         Check order of fields if function 'F' requested
+c
+          If (Nflag.ne.0) Then
+              If (Nbseqn/1000.ne.Ksec0(5)) Then
+                  Iret=-362
+                  Write (*,9425) Iret
+                  Call Blprs0 (Ksec0)
+                  Go to 739
+              End if
+          End if
+c
+      End if
+c
+c*        3.7  Octet 14; Sequence number of this BLOK
+c
+  370 Continue
+c
+c     One 8 bit field
+c
+      If (Hoper.eq.'B') Then
+c
+c         Reset value
+c
+          Nbseqn=Nbseqn+1
+          Ksec0(6)=Nbseqn
+c
+      End if
+c
+      If (Yoper.eq.'B') Then
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Ksec0(6),1,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=370
+              Write (*,9100) 'Octet 14; Sequence number of this BLOK.',
+     &                        Iret
+              Go to 900
+          End if
+c
+      Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(6),1,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=371
+              Write (*,9101) 'Octet 14; Sequence number of this BLOK.',
+     &                        Iret
+              Go to 900
+          End if
+c
+      End if
+c
+c*        3.8  Octets 15-16; Reserved
+c
+  380 Continue
+c
+c     One 16 bit field
+c
+      If (Yoper.eq.'B') Then
+c
+c         When coding data, skip field.
+c
+          Ksec0(7)=0
+c
+c         Update bit-pointer.
+c
+          Inspt=Inspt+16
+c
+      Else
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Ksec0(7),1,Ibits,16,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=381
+              Write (*,9101) 'Octets 15-16;',Iret
+              Go to 900
+          End if
+c
+      End if
+c
+c     ------------------------------------------------------------------
+c
+c*        4.   BLOK Section 1 - Identification section
+c              ---------------------------------------
+  400 Continue
+      If (Ndbg.eq.1) Write (*,*) '/Blokex/ Paragraph 4.'
+      If (Ksec0(4).ne.128) Go to 499
+c
+c*        4.1  Coding data
+c
+  410 Continue
+c
+c     Copy section 0 and identification section of the parent code
+c     into the section 1 of BLOK code
+c
+      If (Yoper.eq.'B') Then
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Isec1(1),Ilen1,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=415
+              Write (*,9100) 'bit fields into BLOK section 1.',Iret
+              Go to 900
+          End if
+c
+c*        4.2  Decoding data
+c
+  420 Continue
+      Else
+          Itemp=Inspt
+c
+c         Name of the parent form
+c
+          Call Inxbit (Kblok,Kbdim,Itemp,Iname(1),4,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=421
+              Write (*,9101) 'Name of the parent form.',Iret
+              Go to 900
+          End if
+          Icoun=0
+          Hform='GRIB'
+          Do 422 i=1,4
+          If (Iname(i).eq.Igrib(i)) Icoun=Icoun+1
+  422     Continue
+          If (Icoun.ne.4) Then
+              Icoun=0
+              Do 423 i=1,4
+              If (Iname(i).eq.Ibufr(i)) Icoun=Icoun+1
+  423         Continue
+              If (Icoun.eq.4) Then
+                  Hform='BUFR'
+              Else
+                  Iret=423
+                  Write (*,9423) Iret
+                  Go to 900
+              End if
+          End if
+c
+c         Parent code edition number; Extract field
+c
+          Itemp=Inspt+56
+          Call Inxbit (Kblok,Kbdim,Itemp,Iedit,1,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=424
+              Write (*,9101) 'Parent code edition number.',Iret
+              Go to 900
+          End if
+c
+c         Set first word in the output array Ksec1 and check order
+c         of fields if 'F' function requested
+c
+          If (Nflag.ne.0) Then
+              If (Iedit.ne.Ksec1(1)) Then
+                  Iret=-425
+                  Write (*,9425) Iret
+                  Call Blprs0 (Ksec0)
+                  Call Blprs1 (Ksec1,Hform)
+                  Go to 739
+              End if
+          End if
+          Ksec1(1)=Iedit
+c
+c         Reset position of the length of the parent section 1 for
+c         the different parent code versions
+c
+          If (Hform.eq.'GRIB'.and.Iedit.lt.1) Then
+              Itemp=Inspt+32
+          Else if (Hform.eq.'BUFR'.and.Iedit.lt.2) Then
+              Itemp=Inspt+32
+          End if
+c
+c         Length of the identification section; Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Itemp,Ilen1,1,Ibits,24,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=426
+              Write (*,9101) 'Length of the section 1.',Iret
+              Go to 900
+          End if
+          Inspt=Itemp
+c
+c*        4.2.1 GRIB code identification section
+c
+ 4210 Continue
+          If (Hform.eq.'GRIB') Then
+c
+c             Octet 4  : Version Number of Table 2.
+c             Octet 5  : Identification of centre.
+c             Octet 6  : Generating process identification.
+c             Octet 7  : Grid definition.
+c             Octet 8  : Flag.
+c             Octet 9  : Indicator of parameter.
+c             Octet 10 : Indicator of type of level.
+c
+c             Seven 8 bit fields.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(1),7,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4210
+                  Write (*,9101) 'Octets 4-10; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octets 11 - 12 : Height, pressure etc of levels
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(8),2,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4211
+                  Write (*,9101) 'Octets 11-12; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octet 13 : Year of century.
+c             Octet 14 : Month.
+c             Octet 15 : Day.
+c             Octet 16 : Hour.
+c             Octet 17 : Minute.
+c             Octet 18 : Indicator of unit of time range..
+c
+c             Six 8 bit fields.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(10),6,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4212
+                  Write (*,9101) 'Octets 13-18; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octets 19 - 20 : Period of time.
+c             One 16 bit field or two 8 bit fields.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(16),2,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4213
+                  Write (*,9101) 'Octets 19-20; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octet 21 : Time range indicator.
+c             One 8 bit field.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(18),1,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4214
+                  Write (*,9101) 'Octet 21; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octet 22 - 23 : Number averaged.
+c             One 16 bit field.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(19),1,Ibits,16,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4215
+                  Write (*,9101) 'Octets 22-23; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octet 24 : Number missing from averages etc.
+c             Octet 25 : Century of data.
+c             Octet 26 : Reserved field. (set to 0)
+c             Three 8 bit field.
+c
+              Itemp=3
+              Ilen=20
+              If (Iedit.le.0) Itemp=1
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(20),Itemp,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4216
+                  Write (*,9101) 'Octets 24-26; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octets 27 - 28 : Units decimal scale factor.
+c             One 16 bit field.
+c
+              If (Iedit.gt.0) Then
+c
+c                 Extract field
+c
+                  Call Inxbit (Kblok,Kbdim,Inspt,Isec1(23),1,Ibits,16,
+     &                     Ydoper,Iret)
+                  If (Iret.ne.0) Then
+                      Iret=4217
+                      Write (*,9101) 'Octets 27-28; Section 1.',Iret
+                      Go to 900
+                  End if
+                  Ilen=24
+c
+              End if
+c
+c             Set output array Ksec1 and check order of fields if
+c             'F' function requested
+c
+              Do 4218 i=1,Ilen
+              If (Nflag.ne.0) Then
+                  If (Ksec1(i+1).ne.Isec1(i)) Then
+                      Iret=-4218
+                      Write (*,9425) Iret
+                      Call Blprs0 (Ksec0)
+                      Call Blprs1 (Ksec1,Hform)
+                      Go to 739
+                  End if
+              Else
+                  Ksec1(i+1)=Isec1(i)
+              End if
+4218          Continue
+c
+c*        4.2.2 BUFR code identification section
+c
+ 4220 Continue
+          Else if (Hform.eq.'BUFR') Then
+c
+c             Octet 4  : BUFR master table
+c             One 8 bit field.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(1),1,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4220
+                  Write (*,9101) 'Octet 4; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octet 5-6  : Originating centre
+c             One 16 bit field.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(2),1,Ibits,16,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4221
+                  Write (*,9101) 'Octets 5-6; Section 1.',Iret
+                  Go to 900
+              End if
+c
+c             Octet 7  : Update sequence number
+c             Octet 8  : Flag.
+c             Octet 9  : BUFR message type
+c             Octet 10 : BUFR message sub-type
+c             Octet 11 : Version number of master table used
+c             Octet 12 : Version number of local tables used to augment
+c                        the master table in use
+c             Octet 13 : Year of century.
+c             Octet 14 : Month.
+c             Octet 15 : Day.
+c             Octet 16 : Hour.
+c             Octet 17 : Minute.
+c             Octet 18 : Indicator of unit of time range..
+c
+c             Twelve 8 bit fields.
+c
+              Call Inxbit (Kblok,Kbdim,Inspt,Isec1(3),12,Ibits,8,
+     &                     Ydoper,Iret)
+              If (Iret.ne.0) Then
+                  Iret=4212
+                  Write (*,9101) 'Octets 7-18; Section 1.',Iret
+                  Go to 900
+              End if
+c
+          End if
+c
+      End if
+  499 Continue
+c
+c     Print content of Section 0 and Section 1 if function 'I' requested
+c
+      If (Hoper.eq.'I') Go to 900
+c
+c     ------------------------------------------------------------------
+c
+c*        5.   BLOK Section 2 - Binary Data Section
+c              ------------------------------------
+  500 Continue
+      If (Ndbg.eq.1) Write(*,*) '/Blokex/ Paragraph 5.'
+c
+c*        5.1  Coding data
+c
+  510 Continue
+      If (Yoper.eq.'B') Then
+c
+c         First and last position of the Ksec2 array for the
+c         data which will be inserted in the current BLOK message
+c
+          Is=Ie+1
+          If (Ksec0(5).ne.Ksec0(6)) Then
+              Ie=Is+Iword2-1
+          Else
+              Ie=Klen2
+          End if
+c
+c         Data to be inserted in the current blok
+c
+          Iilen=0
+          Do 511 i=Is,Ie
+          Iilen=Iilen+1
+          Kblok(Iilen)=Ksec2(i)
+  511     Continue
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,Kblok,Iilen,Ibits,Ibits,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=512
+              Write (*,9100) 'binary data section (Section 2).',Iret
+              Go to 900
+          End if
+c
+c*        5.2  Decoding data
+c
+  520 Continue
+      Else
+c
+c         Length of the data section
+c
+          Iilen=(Ksec0(1)*8-Inspt)/Ibits
+c
+c         Data section; Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Idata,Iilen,Ibits,Ibits,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=522
+              Write (*,9101) 'binary data section (Section 2).',Iret
+              Go to 900
+          End if
+      End if          
+c
+c     ------------------------------------------------------------------
+c
+c*        6.   BLOK Section 3 - Ascii 7777
+c              ---------------------------
+  600 Continue
+      If (Ndbg.eq.1) Write (*,*) '/Blokex/ Paragraph 6.'
+c
+c     Four 8 bit fields
+c
+c*        6.1  Coding data
+c
+  610 Continue
+      If (Yoper.eq.'B') Then
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Inspt,N7777(1),4,Ibits,8,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=611
+              Write (*,9100) 'BLOK Section 3 (7777).',Iret
+              Go to 900
+          End if
+c
+c         Length of BLOK message
+c
+          Ksec0(1)=(Inspt-Iword*Ibits)/8
+c
+c         Insert field
+c
+          Call Inxbit (Idata,Kbdim,Insptl,Ksec0(1),1,Ibits,24,
+     &                 Ycoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=802
+              Write (*,9100) 'Total length of this message',Iret
+              Go to 900
+          End if
+c
+c*        6.2  Decoding data
+c
+  620 Continue
+      Else
+c
+c         Reset counter
+c
+          Itemp=0
+  621     Continue
+c
+c         Extract field
+c
+          Call Inxbit (Kblok,Kbdim,Inspt,Iendm(1),4,Ibits,8,
+     &                 Ydoper,Iret)
+          If (Iret.ne.0) Then
+              Iret=621
+              Write (*,9101) 'BLOK Section 3 (7777).',Iret
+              Go to 900
+          End if
+c
+c         Check that 7777 group is found where expected
+c
+          Icoun=0
+          Do 622 i=1,4
+          If (Iendm(i).ne.N7777(i)) Icoun=Icoun+1
+  622     Continue
+          If (Icoun.ne.0) Then
+c
+c             Search backward
+c
+              Inspt=Inspt-8-4*8
+              Itemp=Itemp+1
+              If (Itemp.gt.8) Then
+                  Iret=623
+                  Write (*,9623) Iret
+                  Go to 900
+              End if
+              Go to 621
+          Else
+c
+c             Update length of the data section
+c
+              If (Itemp.eq.0) Then
+                  Iword=Iilen
+              Else
+                  Iword=Iilen-(Itemp*8/Ibits)
+              End if
+          End if
+c
+      End if
+c
+c     ------------------------------------------------------------------
+c
+c*        7.   Complete single message
+c              -----------------------
+  700 Continue
+      If (Ndbg.eq.1) Write(*,*) '/Blokex/ Paragraph 7.'
+c
+c*        7.1  Coding data
+c
+  710 Continue
+      If (Yoper.eq.'B') Then
+c
+c         Any unused part of last word is already set to binary zeroes
+c         Increment pointers as necessary
+c
+          Iword=Inspt/Ibits
+          Itemp=Iword*Ibits
+          Ioff =Inspt-Itemp
+          If (Ioff.ne.0) Then
+              Inspt=Inspt+Ibits-Ioff
+              Iword=Iword+1
+          End if
+c
+c         Round length to a multiple of 120 octets, if required,
+c         any additional words are already set to 0.
+c
+          If (Nrnd.eq.1) Then
+              i=Inspt/960
+              i=i*960
+              i=Inspt-i
+              If (i.ne.0) i=(960-i)/Ibits
+              Iword=Iword+i
+              Inspt=Iword*Ibits
+          End if
+c
+c         Output BLOK coded data array
+c
+          If (Nbseqn.eq.Inblok.or.Hoper.eq.'C') Then
+              Do 711 i=1,Iword
+              Kblok(i)=Idata(i)
+  711         Continue
+          End if
+          Kword=Iword
+c
+c*        7.2  Decoding data; Function 'U'
+c
+  720 Continue
+      Else if (Hoper.eq.'U') Then
+c
+          Do 721 i=1,Iword
+          Ksec2(i)=Idata(i)
+  721     Continue
+          Klen2=Iword
+c
+c*        7.3  Decoding data; Function 'F'
+c
+  730 Continue
+      Else if (Hoper.eq.'F') Then
+c
+c         Collect fields
+c
+          If (Nflag.eq.0) Then
+c
+c         Nflag=0; Function 'F' requested, first time through
+c
+c             Check the order of the first field
+c
+              Nflag=1
+              If (Ksec0(6).ne.Nbcoun) Then
+c
+c                 Field is not in right order
+c
+                  Nflag=2
+c
+c                 Suppress current unblocking stage
+c
+                  Nfcoun=1
+                  Ksec2(Itplen+Iword+1)=Ksec0(6)*1000000+Iword
+c
+              End if
+c
+          Else if (Nflag.eq.1) Then
+c
+c         Nflag=1; Function 'F' requested, fields in order
+c
+c             Check the order of the current field
+c
+              If (Ksec0(6).ne.Nbcoun) Then
+c
+c                 Fields are not in right order
+c
+                  Nflag=2
+c
+c                 Suppress previous and current unblocking stage
+c
+                  If (Nfcoun.eq.0) Then
+                      Itemp=Nbseqn/1000
+                      Itemp=Nbseqn-Itemp*1000
+                      Ksec2(Itplen+Iword+1)=Itemp*1000000+Itplen
+                  End if
+                  Nfcoun=2
+                  Ksec2(Itplen+Iword+2)=Ksec0(6)*1000000+Iword
+c
+              End if
+c
+          Else if (Nflag.eq.2) Then
+c
+c         Nflag=2; Unblocked fields are not in right order
+c
+c             Increase counter of the fields which are not in order
+c
+              Nfcoun=Nfcoun+1
+c
+c             Suppress current unblocking stage
+c
+              Ksec2(Itplen+Nfcoun)=Ksec0(6)*1000000+Iword
+c
+c             Update internally used part of Ksec2
+c
+              Do 733 i=Nfcoun,1,-1
+              Ksec2(Itplen+Iword+i)=Ksec2(Itplen+i)
+  733         Continue
+c
+c             Reset flag if total number of related bloks achieved
+c
+              If (Nbcoun.eq.Ksec0(5)) Nflag=3
+c
+          End if
+c
+          Do 734 i=1,Iword
+          Itplen=Itplen+1
+          Ksec2(Itplen)=Idata(i)
+  734     Continue
+          Klen2=Itplen
+          Nbseqn=Ksec0(5)*1000+Ksec0(6)
+c
+c         Repack parent form if fields are not in right order
+c
+          If (Nflag.eq.3) Then
+c
+c             Find first field in right order, if any
+c
+              If (Nfcoun.eq.Nbcoun) Then
+c
+c                 No fields in order
+c
+                  Iilen=0
+                  Icoun=0
+                  Inblok=1
+                  Itblen=0
+c
+              Else
+c
+c                 Number of the fields in right order
+c
+                  Icoun=Ksec2(Itplen+1)/1000000
+                  Inblok=2
+                  Itblen=Icoun-1
+c
+c                 Length of the fields in right order
+c
+                  Iilen=Ksec2(Itplen+1)-Icoun*1000000
+c
+              End if
+c
+              Do 7350 Ie=Inblok,Nfcoun
+              Icoun=Icoun+1
+              Is=Iilen
+c
+              Do 7351 i=Ie,Nfcoun
+c
+c             Sequence number of the field
+c
+              Iorder=Ksec2(Itplen+i)/1000000
+c
+c             Length of the field
+c
+              Ilen=Ksec2(Itplen+i)-Iorder*1000000
+c
+c             Field starting index in the array Ksec2
+c
+              If (Iorder.eq.Icoun) Then
+                  Itemp=i
+                  Go to 7352
+              Else
+                  Is=Is+Ilen
+              End if
+c
+ 7351         Continue
+              Iret=-7351
+              Write(*,97351) Icoun,Iret
+              Call Blprs1(Ksec1,Hform)
+              Go to 739
+c
+c             Repack parent form so that 'Icoun' field is 
+c             in right order
+c
+ 7352         Continue
+c
+              Do 7353 i=1,Ilen
+              Idata(i)=Ksec2(Is+i)
+ 7353         Continue
+              Do 7354 i=Is+Ilen+1,Itplen
+              Ksec2(i-Ilen)=Ksec2(i)
+ 7354         Continue
+              Do 7355 i=Itplen-Ilen,Iilen+1,-1
+              Ksec2(i+Ilen)=Ksec2(i)
+ 7355         Continue
+              Do 7356 i=1,Ilen
+              Iilen=Iilen+1
+              Ksec2(Iilen)=Idata(i)
+ 7356         Continue
+c
+c             Repack internaly used part of Ksec2
+c
+              Idata(1)=Ksec2(Itplen+Itemp)
+              Do 7357 i=Itplen+Itemp+1,Itplen+Nfcoun
+              Ksec2(i-1)=Ksec2(i)
+ 7357         Continue
+              Do 7358 i=Itplen+Nfcoun,Itplen+Iorder-Itblen,-1
+              Ksec2(i)=Ksec2(i-1)
+ 7358         Continue
+              Ksec2(Itplen+Iorder-Itblen)=Idata(1)
+c
+ 7350         Continue
+c
+          End if
+c
+c         Reset internal total parent length if it is achieved
+c
+          Itemp=Ksec0(3)*8/Ibits
+          If (Nbcoun.eq.Ksec0(5)) Then
+              Iret=0
+              If (Itplen.ne.Itemp) Then
+                  Iret=-739
+                  Write(*,9739) Itemp,Itplen,Iret
+              End if
+          Else
+              Iret=-2
+              Nbcoun=Nbcoun+1
+              Go to 800
+          End if
+c
+      End if
+c
+c     Reset flags to default values
+c
+  739 Continue
+      If (Hoper.eq.'F') Then
+          Nflag=0
+          Itplen=0
+          Nbseqn=0
+          Nbcoun=1
+          Nfcoun=0
+      End if
+c
+c     ------------------------------------------------------------------
+c
+c*        8.   Continue loop over all single BLOK messages
+c              -------------------------------------------
+  800 Continue
+      If (Ndbg.eq.1) Write(*,*) '/Blokex/ Paragraph 8.'
+c
+      If (Nbseqn.ne.Inblok.and.Hoper.eq.'B') Then
+          Go to 300
+      End if
+c
+c     ------------------------------------------------------------------
+c
+c*        9.   Return code handling
+c              --------------------
+  900 Continue
+c
+      If (Ndbg.eq.1) Write(*,*) '/Blokex/ Paragraph 9.'
+      If (Ndbg.eq.1.or.Hoper.eq.'I') Then
+          Call Blprs0 (Ksec0)
+          If (Ksec0(4).eq.128.and.Yoper.ne.'B') Then
+              Call Blprs1 (Ksec1,Hform)
+          End if
+      End if
+c
+c     If no error has been encountered, set return code to informative
+c     value, if required.
+c
+c     Abort if any error has been encountered and user has requested
+c     an abort. Informative values are negative and do not cause an
+c     abort.
+c
+  910 Continue
+      If (Iret.gt.0.and.Kret.eq.0) Then
+          Call abortx ('BLOKEX')
+      Else
+          Kret=Iret
+          Return
+      End if
+c
+ 9100 Format (' Blokex: Error inserting ',a,' Return code=',i4)
+ 9101 Format (' Blokex: Error extracting ',a,' Return code=',i4)
+ 9210 Format (' Blokex: Error, Unrecognised function requested: ',a/
+     &        ' ','         Return code=',i3)
+ 9220 Format (' Blokex: Error, Requested length of single',
+     &        ' BLOK message ',i10,' words'/
+     &        '                 is not multiple of 120 bytes.'/
+     &        ' ','         Rounding of 120 bytes included; Nrnd=',i3/
+     &        ' ','         Return code=',i3) 
+ 9230 Format (' Blokex: Error, Unrecognised entry Ksec0(4)=',i6/
+     &        ' ','         Valid entry: 0 /or/ 128.'/
+     &        ' ','         Return code=',i3) 
+ 9240 Format (' Blokex: Error, Output array too small to receive',
+     &            ' BLOK coded field.'/
+     &        ' ','         Kbdim=',i9,' Klen2=',i9/
+     &        ' ','         Return code=',i3) 
+ 9251 Format (' Blokex: Error, Unrecognised parent data format.'/
+     &        ' ','         BLOK Section 1 requested to be',
+     &            ' included (Ksec0(4)=128) for the'/
+     &        ' ','         unrecognised parent data format.'/
+     &        ' ','         Return code=',i4) 
+ 9260 Format (' Blokex: Error, Maximum length of single BLOK ',
+     &            ' message Kmaxw=',i9/
+     &        ' ','                not valid.'/
+     &        ' ','         Return code=',i3)
+ 9263 Format (' Blokex: Error, Required single BLOK length Kmaxw=',
+     &            i9,' too small'/
+     &        ' ','         to receive input field Klen2=',i9,
+     &            '; Fuction C requested.'/
+     &        ' ','         Return code=',i3) 
+ 9321 Format (' Blokex: Total length of this BLOK is ',i8,
+     &            ' octets.')
+ 9423 Format (' Blokex: Error, Unrecognised parent code name.'/
+     &        ' ','         Return code=',i3) 
+ 9425 Format (' Blokex: Error, Input fields are not in right order.'
+     &       /' ','         Unblocking uncompleted.'/
+     &        ' ','         Function requested F.'/
+     &        ' ','         Return code=',i5) 
+ 9623 Format (' Blokex: Error, End of message 7777 group not',
+     &            ' found.'/
+     &        ' ','         Return code=',i3) 
+ 9739 Format (' Blokex: Error, Original parent length: ',i12,/
+     &        ' ','         differ from the length achieved after full',
+     &            ' decoding: ',i12/
+     &        ' ','         Return code=',i4) 
+97351 Format (' Blokex: Error, BLOK sequence ',i3,' missing.'/
+     &        ' ','         Unblocking uncompleted.'/
+     &        ' ','         Return code=',i5) 
+
+c
+      End
+      Subroutine Blprs0(Ksec0)
+c**
+c****  Name  *Blprs0*
+c****  ----
+c**
+c**   Purpose
+c**   -------
+c**         Print the information in the Indicator
+c**         Section (Section 0) of BLOK data.
+c**
+c**   Interface
+c**   ---------
+c**       Input: Ksec0 - Array of decoded parameters from Section 0.
+c**
+c**       Output: Printed data on the standard output.
+c**
+c**    Method
+c**    ------
+c**       Fields are printed as integers.
+c**
+c**    Externals
+c**    ---------
+c**       None.
+c**
+c**    Author
+c**    ------
+c**       D.Jokic,  ECMWF,  February-1992. 
+c**
+      Integer Ksec0(*)
+c
+c     ------------------------------------------------------------------
+c
+c*        1.   Write Ksec0
+c              -----------
+  100 Continue
+      Write (*,9000)
+      Write (*,9001)
+      Write (*,9002)
+      Write (*,9003) Ksec0(1)
+      Write (*,9004) Ksec0(2)
+      Write (*,9005) Ksec0(3)
+      Write (*,9006) Ksec0(4)
+      Write (*,9007) Ksec0(5)
+      Write (*,9008) Ksec0(6)
+c
+ 9000 Format (' ')
+ 9001 Format (' ','BLOK Section 0 - Indicator Section.     ')
+ 9002 Format (' ','----------------------------------------')
+ 9003 Format (' ','Total length of this BLOK.           ',I9)
+ 9004 Format (' ','BLOK Edition Number.                 ',I9)
+ 9005 Format (' ','Total length of parent form.         ',I9)
+ 9006 Format (' ','Flag (Code Table 1).                 ',I9)
+ 9007 Format (' ','Total number of related BLOKs.       ',I9)
+ 9008 Format (' ','Sequence number of this BLOK.        ',I9)
+c
+      Return
+      End
+      Subroutine Blprs1(Ksec1,Yform)
+c**
+c****  Name  *Blprs1*
+c****  ----
+c**
+c**   Purpose
+c**   -------
+c**         Print the information in the Identification
+c**         Section (Section 1) of BLOK data.
+c**
+c**   Interface
+c**   ---------
+c**       Input: Ksec1 - Array of decoded parameters from Section 1.
+c**              Yform - Format of data
+c**
+c**       Output: Printed data on the standard output.
+c**
+c**    Method
+c**    ------
+c**       Fields are printed as integers.
+c**
+c**    Externals
+c**    ---------
+c**       None.
+c**
+c**    Author
+c**    ------
+c**       D.Jokic,  ECMWF,  February-1992. 
+c**
+      Character*4 Yform
+c
+      Integer Ksec1(*)
+c
+c     ------------------------------------------------------------------
+c
+c*        1.   Initialise
+c              ----------
+  100 Continue
+      Write (*,9000)
+      Write (*,9001)
+      Write (*,9002)
+      Write (*,9003) Yform
+      Write (*,9004) Ksec1(1)
+c
+c     ------------------------------------------------------------------
+c
+c*        2.   GRIB data
+c              ---------
+  200 Continue
+      If (Yform.eq.'GRIB') Then
+c
+          Write (*,9202) Ksec1(2)
+          Write (*,9203) Ksec1(3)
+          Write (*,9204) Ksec1(4)
+          Write (*,9205) Ksec1(5)
+          Write (*,9206) Ksec1(6)
+          Write (*,9207) Ksec1(7)
+          Write (*,9208) Ksec1(8)
+          Write (*,9209) Ksec1(9)
+          Write (*,9210) Ksec1(10)
+          Write (*,9211) Ksec1(11)
+          Write (*,9212) Ksec1(12)
+          Write (*,9213) Ksec1(13)
+          Write (*,9214) Ksec1(14)
+          Write (*,9215) Ksec1(15)
+          Write (*,9216) Ksec1(16)
+          Write (*,9217) Ksec1(17)
+          Write (*,9218) Ksec1(18)
+          Write (*,9219) Ksec1(19)
+          Write (*,9220) Ksec1(20)
+          Write (*,9221) Ksec1(21)
+          Write (*,9222) Ksec1(22)
+          Write (*,9223) Ksec1(23)
+c
+c     ------------------------------------------------------------------
+c
+c*        3.   BUFR data
+c              ---------
+  300 Continue
+      Else if (Yform.eq.'BUFR') Then
+c
+          Write (*,9302) Ksec1(2)
+          Write (*,9303) Ksec1(3)
+          Write (*,9304) Ksec1(4)
+          Write (*,9305) Ksec1(5)
+          Write (*,9306) Ksec1(6)
+          Write (*,9307) Ksec1(7)
+          Write (*,9308) Ksec1(8)
+          Write (*,9309) Ksec1(9)
+          Write (*,9310) Ksec1(10)
+          Write (*,9311) Ksec1(11)
+          Write (*,9312) Ksec1(12)
+          Write (*,9313) Ksec1(13)
+          Write (*,9314) Ksec1(14)
+          Write (*,9315) Ksec1(15)
+c
+      Else
+c
+          Write (*,9400) Yform
+c
+      End if
+c
+ 9000 Format (' ')
+ 9001 Format (' ','BLOK Section 1 - Identification Section.')
+ 9002 Format (' ','----------------------------------------')
+ 9003 Format (' ','Binary data format.                       ',A4)
+ 9004 Format (' ','Parent edition number.               ',I9)
+c
+ 9202 Format (' ','Code Table 2 Version Number.         ',I9)
+ 9203 Format (' ','Originating centre identifier.       ',I9)
+ 9204 Format (' ','Model identification.                ',I9)
+ 9205 Format (' ','Grid definition.                     ',I9)
+ 9206 Format (' ','Flag (Code Table 1)                  ',I9)
+ 9207 Format (' ','Parameter identifier (Code Table 2). ',I9)
+ 9208 Format (' ','Type of level (Code Table 3).        ',I9)
+ 9209 Format (' ','Value 1 of level (Code Table 3).     ',I9)
+ 9210 Format (' ','Value 2 of level (Code Table 3).     ',I9)
+ 9211 Format (' ','Year of data.                        ',I9)
+ 9212 Format (' ','Month of data.                       ',I9)
+ 9213 Format (' ','Day of data.                         ',I9)
+ 9214 Format (' ','Hour of data.                        ',I9)
+ 9215 Format (' ','Minute of data.                      ',I9)
+ 9216 Format (' ','Time unit (Code Table 4).            ',I9)
+ 9217 Format (' ','Time range one.                      ',I9)
+ 9218 Format (' ','Time range two.                      ',I9)
+ 9219 Format (' ','Time range indicator (Code Table 5)  ',I9)
+ 9220 Format (' ','Number averaged.                     ',I9)
+ 9221 Format (' ','Number missing from average.         ',I9)
+ 9222 Format (' ','Century of data.                     ',I9)
+ 9223 Format (' ','Units decimal scaling factor.        ',I9)
+c
+ 9302 Format (' ','BUFR master table.                   ',I9)
+ 9303 Format (' ','Originating centre identifier.       ',I9)
+ 9304 Format (' ','Update sequence number.              ',I9)
+ 9305 Format (' ','Flag.                                ',I9)
+ 9306 Format (' ','BUFR message type.                   ',I9)
+ 9307 Format (' ','BUFR message subtype.                ',I9)
+ 9308 Format (' ','Version number of master table used. ',I9)
+ 9309 Format (' ','Version number of local table used.  ',I9)
+ 9310 Format (' ','Year of data.                        ',I9)
+ 9311 Format (' ','Month of data.                       ',I9)
+ 9312 Format (' ','Day of data.                         ',I9)
+ 9313 Format (' ','Hour of data.                        ',I9)
+ 9314 Format (' ','Minute of data.                      ',I9)
+ 9315 Format (' ','Indicator of unit of time range.     ',I9)
+c
+ 9400 Format (' Blprs1: Error, Unknown data format: ',a)
+c
+      Return
+      End
diff --git a/pbio/bufrgrib.h b/pbio/bufrgrib.h
new file mode 100755
index 0000000..c450120
--- /dev/null
+++ b/pbio/bufrgrib.h
@@ -0,0 +1,33 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef BUFRGRIB_H
+#define BUFRGRIB_H
+/*
+  bufrgrib.h
+*/
+#include <stdio.h>
+#include <string.h>
+
+/*	defines for BUFR functions */ 
+#define ARRSIZE 100
+#define TRUE 1
+#define FALSE 0
+#define BOOL int
+#define BOOLEAN int
+
+#ifdef VAX
+#define off_t char *
+#include <types.h>
+#include <file.h>
+#endif
+
+#define BUFSIZE 200
+#endif /* end of  BUFRGRIB_H */
diff --git a/pbio/crexrd.c b/pbio/crexrd.c
new file mode 100755
index 0000000..62691fd
--- /dev/null
+++ b/pbio/crexrd.c
@@ -0,0 +1,121 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define CREXRD crexrd
+#else
+#define CREXRD crexrd_
+#endif
+#endif
+
+#define END_OF_FILE -1
+#define FILE_READ_ERROR -2
+#define USER_BUFFER_TOO_SMALL -3
+#define FILE_TOO_SMALL -5
+#define MINIMUM_CREX_SIZE 13
+#define CREX 0x43524558
+
+typedef char * String;
+
+void CREXRD(String buffer, int* bufflen, int* size, int* status, FILE** in) {
+/*
+//  Called from FORTRAN:
+//    CALL CREXRD( KARRAY, KINLEN, NREAD, IRET, KUNIT )
+*/
+int loop, foundPosition;
+int number, crexFound = 0, endFound = 0;
+String endBuffer;
+String next;
+char plplcrcrlf7777[10] = {0,0,0,0,0,0,0,0,0,0};
+char PlPlCrCrLf7777[10] = {0x2b,0x2b,0x0d,0x0d,0x0a,0x37,0x37,0x37,0x37,0x00};
+
+/*
+// Check buffer big enough for CREX search
+*/
+  if( *bufflen < MINIMUM_CREX_SIZE ) {
+    *status = USER_BUFFER_TOO_SMALL;
+    return;
+  }
+
+/*
+// Look for CREX
+*/
+  for( loop = 0; loop <= 4; loop++) buffer[loop] = '\0';
+
+  while( !crexFound ) {
+    buffer[0] = buffer[1];
+    buffer[1] = buffer[2];
+    buffer[2] = buffer[3];
+    number = fread((buffer+3), 1, 1, *in);
+    if( feof(*in) ) {
+      *status = END_OF_FILE;
+      return;
+    }
+    if( (number != 1) || ferror(*in) ) {
+      perror("crexrd file read error");
+      *status = FILE_READ_ERROR;
+      return;
+    }
+    if( strcmp(buffer,"CREX") == 0 ) {
+      crexFound = 1;
+      foundPosition = ftell(*in) - 4;
+    }
+  }
+
+/*
+// Read some more characters into the buffer
+*/
+  number = fread((buffer+4), 1, ((*bufflen)-4), *in);
+  if( ferror(*in) ) {
+    perror("crexrd file read error");
+    *status = FILE_READ_ERROR;
+    return;
+  }
+  endBuffer = buffer + number + 3;
+    
+/*
+// Look for ++CrCrLf7777 at end of product
+*/
+  next = buffer+4;
+  endFound = 0;
+  for( loop = 0; loop < 8; loop++ )
+    plplcrcrlf7777[loop] = *(next++);
+  plplcrcrlf7777[9] = '\0';
+
+  while( (!endFound) && (next<=endBuffer) ) {
+    plplcrcrlf7777[8] = *(next++);
+    if( strcmp(plplcrcrlf7777,PlPlCrCrLf7777) == 0 ) {
+      endFound = 1;
+      *size = (int) (next - buffer);
+    }
+
+    for( loop = 0; loop < 8; loop++ )
+      plplcrcrlf7777[loop] = plplcrcrlf7777[loop+1];
+  }
+
+  if( !endFound ) {
+    if( feof(*in) ) 
+      *status = END_OF_FILE;
+    else
+      *status = USER_BUFFER_TOO_SMALL;
+    return;
+  }
+
+/*
+// Position file at end of CREX product
+*/
+  *status = fseek(*in, (foundPosition+(*size)), 0);
+
+}
diff --git a/pbio/emosnum.F b/pbio/emosnum.F
new file mode 100755
index 0000000..8bc4df9
--- /dev/null
+++ b/pbio/emosnum.F
@@ -0,0 +1,101 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION EMOSNUM(KONOFF)
+C
+C---->
+C**** EMOSNUM
+C
+C     Purpose
+C     -------
+C
+C     Returns current EMOSLIB version number.
+C
+C
+C     Interface
+C     ---------
+C
+C     INUM = EMOSNUM(KONOFF)
+C
+C     Input
+C     -----
+C
+C     KONOFF - switch for displayed message
+C              = 0 if display is required on the first call
+C              = non-zero if display is not required
+C
+C
+C     Output
+C     ------
+C
+C     Returns a 6-digit version number, aaabbc, where:
+C       aaa = 3-digit major number
+C       bb  = 2-digit minor number
+C       c   = 1-digit spare number (normally 0)
+C     
+C
+C     Method
+C     ------
+C
+C     Reads a 6-digit version number from the environment variable
+C     EMOS_CYCLE. If this does not give a 6-digit number, an internal
+C     hard-coded default value is used.
+C
+C     On the first call, the function (optionally) displays a message:
+C
+C       ***********************************
+C       * EMOSLIB version number = aaabbc *
+C       ***********************************
+C     
+C
+C     Externals
+C     ---------
+C
+C     None.
+C     
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1998
+C
+C
+C----<
+C ------------------------------------------------------------------
+C*    Section 0.   Variables.
+C ------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KONOFF
+C
+C     Local variables
+C
+      INTEGER INUMBER, ICOUNT, IOFFSET
+      SAVE INUMBER, ICOUNT
+      CHARACTER*35 CMESS
+      CHARACTER*20 YNUMBER
+C
+      DATA INUMBER/000392/, ICOUNT/0/
+      DATA CMESS/'* EMOSLIB version number = ****** *'/
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+      EMOSNUM = INUMBER
+C
+      RETURN
+      END
diff --git a/pbio/extras.c b/pbio/extras.c
new file mode 100755
index 0000000..109a53a
--- /dev/null
+++ b/pbio/extras.c
@@ -0,0 +1,66 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	extras.c
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+ 
+static char *putfstr(char *target, char *source, int length_target)
+{
+int i;
+ 
+/*  Move characters from C source to Fortran target */
+    strcpy(target,source);
+
+/*  Pad Fortran target to end with spaces */
+    for(i = strlen(source); i<length_target; i++)
+        target[i] = ' ';
+ 
+    return target;
+}
+
+long f_getenv_(char * env_string, char * env_info,
+              int len_env_string, int len_env_info)
+{
+char *e, *env_copy;
+
+/*  Copy Fortran string and remove trailing blanks */
+    env_copy = (char *) malloc(len_env_string+1);
+    if( env_copy == NULL )
+    {
+        perror("F_GETENV: malloc error");
+        exit(1);
+    }
+    strncpy(env_copy, env_string, len_env_string);
+    for( e = (env_copy+len_env_string-1); *e == ' '; e-- ) *e = '\0';
+    
+/*  Get the environment information and return it to the Fortran caller */
+    if(e = (char*)getenv(env_copy))
+    {
+        putfstr(env_info, e, len_env_info);
+        free( env_copy );
+        return 1;
+    }
+    else
+    {
+        free( env_copy );
+        return 0;
+    }
+}
+
+long f_getenv(char * env_string, char * env_info,
+              int len_env_string, int len_env_info) {
+
+  return f_getenv_(env_string,env_info,len_env_string,len_env_info);
+}
diff --git a/pbio/fileRead.h b/pbio/fileRead.h
new file mode 100755
index 0000000..3edd1af
--- /dev/null
+++ b/pbio/fileRead.h
@@ -0,0 +1,90 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FILE_READ_H
+#define FILE_READ_H
+/*
+	fileRead.h
+*/
+#include <stdio.h>
+
+#ifdef linux
+# if !defined __off64_t_defined
+typedef __off64_t off64_t;
+#define __off64_t_defined
+#endif
+#endif
+
+#ifdef FOPEN64
+#define OFF_T off64_t
+#else
+#define OFF_T off_t
+#endif
+
+static fortint fileRead(char * buffer, fortint length, void * file) {
+/*  
+//  buffer = buffer to fill,
+//  length = size of buffer in bytes,
+//  file   = file pointer from fopen().
+//
+//  Returns the number of bytes read.
+//  On END_OF_FILE, returns negative value for number of bytes read .
+*/
+ 
+fortint nbytes;
+
+  nbytes = (fortint) fread( buffer, 1, length, (FILE *) file);
+  if ( feof((FILE *) file ) ) {
+     clearerr( (FILE *) file );
+     return (-nbytes);
+  }
+  return nbytes;
+}
+
+#ifdef FOPEN64
+static OFF_T fileSeek(void * file, OFF_T offset, fortint from) {
+
+  return ( (OFF_T) fseeko64((FILE *) file, offset, from) );
+}
+#else
+static fortint fileSeek(void * file, fortint offset, fortint from) {
+
+  return ( (fortint) fseek((FILE *) file, offset, from) );
+}
+#endif
+
+
+#ifdef FOPEN64
+static OFF_T fileTell(void * file) {
+
+  return ( (OFF_T) ftello64((FILE *) file) );
+}
+#else
+static fortint fileTell(void * file) {
+
+  return ( (fortint) ftell((FILE *) file) );
+}
+#endif
+
+#ifdef FOPEN64
+fortint readprod( char *, char * , fortint * ,
+                  fortint (*fileRead)(char *, fortint, void *),
+                  OFF_T (*fileSeek)(void *, OFF_T, fortint),
+                  OFF_T (*fileTell)(void *),
+                  void * );
+#else
+fortint readprod( char *, char * , fortint * ,
+                  fortint (*fileRead)(char *, fortint, void *),
+                  fortint (*fileSeek)(void *, fortint, fortint),
+                  fortint (*fileTell)(void *),
+                  void * );
+#endif
+
+#endif /* end of FILE_READ_H */
diff --git a/pbio/fort2c.c b/pbio/fort2c.c
new file mode 100755
index 0000000..6dc30f7
--- /dev/null
+++ b/pbio/fort2c.c
@@ -0,0 +1,48 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+/*
+	fort2c.c
+*/
+#include "fort2c.h"
+
+char *fcd2char(fortchar)
+_fcd fortchar;
+{
+#ifndef VAX
+	char *name = _fcdtocp(fortchar);
+	int   len  = _fcdlen(fortchar);
+#else
+        char * name =  fortchar->address;
+        short len =  fortchar->length;
+#endif
+
+        char * newp = (char *) malloc(len+1);
+ 
+	if(!newp) 
+	{
+		perror("malloc");
+		return((char*)0);
+	}
+
+	strncpy(newp,name,len);
+
+	while( len && newp[--len] == ' ');
+
+	newp[++len]='\0';
+
+	return(newp);
+}
+
+
diff --git a/pbio/fort2c.h b/pbio/fort2c.h
new file mode 100755
index 0000000..faa4d28
--- /dev/null
+++ b/pbio/fort2c.h
@@ -0,0 +1,108 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FORT2C_H
+#define FORT2C_H
+/*
+	fort2c.h
+*/
+#ifdef CRAY
+/*  #include <fortran.h>  */
+typedef	int		_f_int6;	 
+typedef	long		_f_int8;	 
+typedef	_f_int6		_f_int;		 
+typedef	_f_int8		_f_int4;	 
+typedef	_f_int8		_f_int2;	 
+typedef	_f_int8		_f_int1;	 
+typedef	long		_f_log8;	 
+typedef	_f_log8		_f_log;		 
+typedef	_f_log8		_f_log4;	 
+typedef	_f_log8		_f_log2;	 
+typedef	_f_log8		_f_log1;	 
+typedef	double		_f_real8;	 
+typedef	long double	_f_real16;	 
+typedef	_f_real8	_f_real;	 
+typedef	_f_real16	_f_dble;	 
+typedef	_f_real8	_f_real4;	 
+typedef	_Complex double	_f_comp8;	 
+ 	 
+typedef	_f_comp8	_f_comp;	 
+ 
+                                                                                  
+ 
+typedef	union	_FCD	{
+	char	*c_pointer;		 
+	struct	{
+	unsigned bit_offset	:  6,	 
+		 fcd_len	: 26,	 
+		 word_addr	: 32;	 
+	} _F;
+} _dcf;		 
+typedef	void	*_fcd;	 
+ 
+ 
+    
+ 
+typedef void *_GPTR;
+typedef const void *_GPTR2CONST;
+    
+extern	_fcd		_cptofcd (char *_Ccp, unsigned _Len);
+extern	char *		_fcdtocp (_fcd _Fcd);
+extern	unsigned int	_fcdlen (_fcd _Fcd);
+extern	_f_log		_btol (long _BV);
+extern	long		_lvtob (_f_log _LV);
+extern	long		_ltob (_f_log *_LP);
+extern	char *		_f2ccpy (_fcd f, ...);
+extern	char *		_fc_copy (_fcd f, char *s, int slen);
+extern	char *		_fc_acopy (_fcd f);
+extern  int		_c2fcpy(char *c, _fcd f);
+extern	int		_isfcd (long _P);
+
+static	_fcd
+__cptofcd(char *c, unsigned int l);
+#pragma _CRI inline	__cptofcd
+static	_fcd
+__cptofcd(char *c, unsigned int l)
+{
+	_dcf	f;
+ 
+	f.c_pointer	= c;
+	f._F.fcd_len   	= l << 3;
+ 
+	return ((*(_fcd *) &f));
+}
+static	char *
+__fcdtocp(_fcd f);
+#pragma _CRI inline	__fcdtocp
+static	char *
+__fcdtocp(_fcd f)
+{
+	char	*c;
+	_dcf	d;
+	d		= (*(_dcf *) &f);
+	d._F.fcd_len	= 0;
+	c		= d.c_pointer;
+	return (c);
+}
+#else
+#define _fcd char *
+#define _fcdtocp(a) a
+#define _fcdlen(a) strlen(a)
+#endif
+ 
+#ifdef VAX
+typedef struct {short length; short magic; char * address;}DESC;
+#define _fcdtocp(a) fcdtocp(a)
+#define _fcd DESC *
+#endif
+
+char *fcd2char();	/* fortran to c string convertion (alloc memory) */
+
+#endif /* end of  FORT2C_H */
diff --git a/pbio/fort2c_hppa.c b/pbio/fort2c_hppa.c
new file mode 100755
index 0000000..6ba7831
--- /dev/null
+++ b/pbio/fort2c_hppa.c
@@ -0,0 +1,51 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <inttypes.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+/*
+	fort2c.c
+*/
+#include "fort2c.h"
+
+char *fcd2char(fortchar)
+_fcd fortchar;
+{
+#ifndef VAX
+	char *name = _fcdtocp(fortchar);
+	int   len  = _fcdlen(fortchar);
+#else
+        char * name =  fortchar->address;
+        short len =  fortchar->length;
+#endif
+
+        char * newp = (char *) malloc(len+1);
+ 
+	if(!newp) 
+	{
+		perror("malloc");
+		return((char*)0);
+	}
+
+	strncpy(newp,name,len);
+
+	while( len && newp[--len] == ' ');
+
+	newp[++len]='\0';
+
+	return(newp);
+}
+
+
+
+
diff --git a/pbio/fortint.h b/pbio/fortint.h
new file mode 100755
index 0000000..8c8f70e
--- /dev/null
+++ b/pbio/fortint.h
@@ -0,0 +1,24 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef FORTINT_H
+#define FORTINT_H
+
+#ifdef INTEGER_IS_INT
+#define fortint int
+#else
+#if defined hpR64 || defined hpiaR64
+#define fortint long long
+#else
+#define fortint long
+#endif
+#endif
+
+#endif /* end of  FORTINT_H */
diff --git a/pbio/gbyte.c b/pbio/gbyte.c
new file mode 100755
index 0000000..10f8103
--- /dev/null
+++ b/pbio/gbyte.c
@@ -0,0 +1,287 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+// gbyte.c
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "fortint.h"
+
+/* 
+//  Retrieve or store arbitrary bit-size values from or to SWORD-bit words
+//
+//  Rewritten April 2000, J.D.Chambers, ECMWF.
+//
+*/
+
+void gbytes_( void *, void *, fortint *, fortint *, fortint *, fortint *);
+void gbytes( void *, void *, fortint *, fortint *, fortint *, fortint *);
+void gbyte_( void* , void *, fortint *, fortint *);
+void gbyte( void* , void *, fortint *, fortint *);
+void sbytes_( void* , void *, fortint *, fortint *, fortint *, fortint *);
+void sbytes( void* , void *, fortint *, fortint *, fortint *, fortint *);
+void sbyte_( void* , void *, fortint *, fortint *);
+void sbyte( void* , void *, fortint *, fortint *);
+
+#ifdef INTEGER_8
+#define BITS_PER_WORD 64
+#else
+#define BITS_PER_WORD 32
+#endif
+# define SWORD BITS_PER_WORD                   /* Word size in bits */
+
+static fortint MASK = -1;                             /* Mask of sword bits */
+
+# define VALUE(p,q,b) \
+ (((b)==BITS_PER_WORD ? MASK : ~(MASK<<(b))) & ((p)>>(SWORD-((q)+(b)))))
+/*
+// Gets a b-bit value, with its leftmost bit at position q
+// (q = 0 for most significant bit)
+*/
+
+# define MASKVALUE(q,b) \
+ ((b)==BITS_PER_WORD ? MASK : (~(MASK<<(b))<<(SWORD-((q)+(b)))))
+/*
+// Creates a b-bit mask, with its leftmost bit at position q
+// (q = 0 for most significant bit)
+*/
+
+void gbytes_(
+  void *Source,
+  void *Destination,
+  fortint *startSkip,
+  fortint *bitsPerValue,
+  fortint *skipBetweenValues,
+  fortint *numberOfValues) {
+/*
+//  GBYTES: 
+//
+//   Unpacks values from source to destination.
+//
+//   Makes an initial skip over bits in source, then skips bits between values.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < 32     Size in bits of each value
+//
+//   skipBetweenValues >= 0    Number of bits to be skipped between values
+//
+//   numberOfValues >= 0       Number of values to be packed/unpacked
+//
+*/
+fortint * source = (fortint *) Source;
+fortint * destination = (fortint *) Destination;
+fortint nextWord,nextValueFirstBit,next;
+
+  nextWord = 0;
+  nextValueFirstBit = *startSkip;
+  for (next = 0; next < *numberOfValues; ++next) {
+    gbyte_(&source[nextWord],&destination[next],&nextValueFirstBit,bitsPerValue);
+    nextValueFirstBit += *bitsPerValue + *skipBetweenValues;
+    nextWord += nextValueFirstBit/SWORD;
+    nextValueFirstBit %= SWORD;
+  }
+}
+
+void gbytes(
+  void *Source,
+  void *Destination,
+  fortint *startSkip,
+  fortint *bitsPerValue,
+  fortint *skipBetweenValues,
+  fortint *numberOfValues) {
+
+  gbytes_(Source,Destination,startSkip,bitsPerValue,skipBetweenValues,
+          numberOfValues);
+}
+
+void gbyte_(
+  void* Source,
+  void *Destination,
+  fortint *nextValueFirstBit,
+  fortint *bitsPerValue) {
+/*
+//  GBYTE: 
+//
+//   Unpacks one value from source to destination.
+//
+//   nextValueFirstBit >= 0    Number in word of first bit to process
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+//   Value may overlap a word boundary
+*/
+fortint * source = (fortint *) Source;
+fortint * destination = (fortint *) Destination;
+fortint countOfLeftmostBits,nextWord,leftmostBits,startBit,remainingBits;
+
+/*
+//  Position at start word and bit
+*/
+  startBit      = *nextValueFirstBit;
+  remainingBits = *bitsPerValue;
+
+  if (startBit >= SWORD) {
+    nextWord = startBit/SWORD;
+    startBit %= SWORD;
+  } else
+    nextWord=0;
+
+/*
+//  If value spans a word boundary, pick up leftmost bits first
+*/
+  countOfLeftmostBits = startBit + remainingBits;
+  if (countOfLeftmostBits > SWORD) {
+    countOfLeftmostBits = SWORD - startBit;
+    remainingBits -= countOfLeftmostBits;
+    leftmostBits =
+      (VALUE(source[nextWord],startBit,countOfLeftmostBits)) << remainingBits;
+    startBit = 0;
+    nextWord++;
+  } else
+    leftmostBits = 0;
+
+/*
+//  Complete value by picking up the rightmost bits
+*/
+  *destination = leftmostBits +
+                 (VALUE(source[nextWord],startBit,remainingBits));
+
+}
+
+void gbyte(
+  void* Source,
+  void *Destination,
+  fortint *nextValueFirstBit,
+  fortint *bitsPerValue) {
+
+  gbyte_(Source,Destination,nextValueFirstBit,bitsPerValue);
+}
+
+void sbytes_(
+  void* Destination,
+  void *Source,
+  fortint *startSkip,
+  fortint *bitsPerValue,
+  fortint *skipBetweenValues,
+  fortint *numberOfValues) {
+/*
+//  SBYTES: 
+//
+//   Packs values from source to destination.
+//
+//   Makes an initial skip over bits in source, then skips bits between values.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in destination
+//
+//   0 < bitsPerValue < 32     Size in bits of each value
+//
+//   skipBetweenValues >= 0    Number of bits to be skipped between values
+//
+//   numberOfValues >= 0       Number of values to be packed/unpacked
+//
+*/
+fortint * source = (fortint *) Source;
+fortint * destination = (fortint *) Destination;
+fortint nextWord,nextValueFirstBit,next;
+
+  nextWord = 0;
+  nextValueFirstBit = *startSkip;
+  for (next = 0; next < *numberOfValues; ++next) {
+    sbyte_(&destination[nextWord],&source[next],&nextValueFirstBit,bitsPerValue);
+    nextValueFirstBit += *bitsPerValue + *skipBetweenValues;
+    nextWord += nextValueFirstBit/SWORD;
+    nextValueFirstBit %= SWORD;
+  }
+}
+
+void sbytes(
+  void* Destination,
+  void *Source,
+  fortint *startSkip,
+  fortint *bitsPerValue,
+  fortint *skipBetweenValues,
+  fortint *numberOfValues) {
+
+  sbytes_(Destination,Source,startSkip,bitsPerValue,skipBetweenValues,
+          numberOfValues);
+}
+
+void sbyte_(
+  void* Destination,
+  void *Source,
+  fortint *nextValueFirstBit,
+  fortint *bitsPerValue) {
+/*
+//  SBYTE: 
+//
+//   Packs one value from source to destination.
+//
+//   nextValueFirstBit >= 0    Number in word of first bit to store
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+//   Value may overlap a word boundary
+//
+*/
+fortint * source = (fortint *) Source;
+fortint * destination = (fortint *) Destination;
+fortint countOfLeftmostBits,nextWord,startBit,remainingBits,rightmostBits;
+
+/*
+//  Position at start word and bit
+*/
+  startBit = *nextValueFirstBit;
+  remainingBits = *bitsPerValue;
+
+  if (startBit >= SWORD) {
+    nextWord = startBit / SWORD;
+    startBit %= SWORD;
+  } else
+    nextWord = 0;
+
+/*
+//  If value spans a word boundary, store leftmost bits first
+*/
+  countOfLeftmostBits = startBit + remainingBits;
+  if (countOfLeftmostBits > SWORD) {
+    countOfLeftmostBits = SWORD - startBit;
+    startBit = SWORD - remainingBits;
+    remainingBits -= countOfLeftmostBits;
+    destination[nextWord] =
+      ((destination[nextWord] >> countOfLeftmostBits) << countOfLeftmostBits)
+      + (VALUE(*source,startBit,countOfLeftmostBits));
+    startBit = 0;
+    nextWord++;
+  }
+
+/*
+//  Complete value by storing the rightmost bits
+*/
+  rightmostBits = VALUE(*source,SWORD-remainingBits,remainingBits);
+  destination[nextWord] =
+    (destination[nextWord] & ~MASKVALUE(startBit,remainingBits))
+    + (rightmostBits << SWORD-(remainingBits+startBit));
+
+}
+
+void sbyte(
+  void* Destination,
+  void *Source,
+  fortint *nextValueFirstBit,
+  fortint *bitsPerValue) {
+
+  sbyte_(Destination,Source,nextValueFirstBit,bitsPerValue);
+}
diff --git a/pbio/gbyte_alpha.c b/pbio/gbyte_alpha.c
new file mode 100755
index 0000000..f4f6623
--- /dev/null
+++ b/pbio/gbyte_alpha.c
@@ -0,0 +1,215 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#define GBYTES gbytes_
+#define GBYTE  gbyte_
+#define SBYTES sbytes_
+#define SBYTE  sbyte_
+
+#define SWORD 32
+#define MASKSWORD 0x3f
+
+static int onbit[32] = {
+  0x00000001,0x00000002,0x00000004,0x00000008,
+  0x00000010,0x00000020,0x00000040,0x00000080,
+  0x00000100,0x00000200,0x00000400,0x00000800,
+  0x00001000,0x00002000,0x00004000,0x00008000,
+  0x00010000,0x00020000,0x00040000,0x00080000,
+  0x00100000,0x00200000,0x00400000,0x00800000,
+  0x01000000,0x02000000,0x04000000,0x08000000,
+  0x10000000,0x20000000,0x40000000,0x80000000};
+
+/* 
+//  Retrieve or store arbitrary bit-size values from or to SWORD-bit words
+//
+//  Rewritten April 2000, J.D.Chambers, ECMWF.
+//
+*/
+
+void GBYTES(
+  void* Source,
+  void* Destination,
+  int* startSkip,
+  int* bitsPerValue,
+  int* skipBetweenValues,
+  int* numberOfValues) {
+/*
+//  GBYTES: 
+//
+//   Unpacks values from source to destination.
+//
+//   Makes an initial skip over bits in source, then skips bits between values.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+//   skipBetweenValues >= 0    Number of bits to be skipped between values
+//
+//   numberOfValues >= 0       Number of values to be packed/unpacked
+//
+// Move one bit at a time (!!)
+// Uses shifts and masks instead of divides.
+// Sets destination bit to 0/1 as source bit is 0/1.
+*/
+unsigned char* source = (unsigned char*) Source;
+int* destination = (int*) Destination;
+int bpv, bit, byte, bitShift, nextBit, nextValueFirstBit, next, step;
+
+    bpv = *bitsPerValue;
+    step = bpv + *skipBetweenValues;
+    nextValueFirstBit = *startSkip;
+
+    for (next = 0; next < *numberOfValues; ++next) {
+      destination[next] = 0; 
+      nextBit = nextValueFirstBit;
+
+      for ( bit = 0; bit < bpv; bit++ ) {
+        byte        = ( nextBit ) >> 3;
+        bitShift    = 7 - ( nextBit++ ) & 0x7;
+
+        destination[next] <<= 1 ;
+        if( (source[byte] & onbit[bitShift]) ) destination[next] |= 1;
+      }
+
+      nextValueFirstBit += step;
+    }
+
+}
+
+void GBYTE(
+  void* Source,
+  void* Destination,
+  int* startSkip,
+  int* bitsPerValue) {
+/*
+//  GBYTE: 
+//
+//   Unpacks one value from source to destination.
+//
+//   Makes an initial skip over bits in source.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+// Move one bit at a time (!!)
+// Uses shifts and masks instead of divides.
+// Sets destination bit to 0/1 as source bit is 0/1.
+*/
+int bpv, temp, nextBit, byte, bitShift, bit;
+unsigned char* source = (unsigned char*) Source;
+int* destination = (int*) Destination;
+
+    temp = 0;
+    bpv = *bitsPerValue;
+    nextBit = *startSkip;
+
+    for ( bit = 0; bit < bpv; bit++ ) {
+      byte     = ( nextBit ) >> 3;
+      bitShift = 7 - ( nextBit++ ) & 0x7;
+
+      temp <<= 1 ;
+      if( (source[byte] & onbit[bitShift]) ) temp |= 1;
+    }
+
+    *destination = temp;
+}
+
+
+void SBYTES(
+  void* Destination,
+  void* Source,
+  int* startSkip,
+  int* bitsPerValue,
+  int* skipBetweenValues,
+  int* numberOfValues) {
+/*
+//  SBYTES: 
+//
+//   Packs values from source to destination.
+//
+//   Makes an initial skip over bits in source, then skips bits between values.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in destination
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+//   skipBetweenValues >= 0    Number of bits to be skipped between values
+//
+//   numberOfValues >= 0       Number of values to be packed/unpacked
+//
+// Move one bit at a time (!!)
+// Uses shifts and masks instead of divides.
+// Sets destination bit to 0/1 as source bit is 0/1.
+*/
+unsigned char* destination = (unsigned char*) Destination;
+int* source = (int*) Source;
+int bitShift, bitPosition;
+int nextValueFirstBit, bpvm1;
+int nextDestination, nextBit, bit;
+int step, nextValue;
+unsigned char setBit0[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
+unsigned char setBit1[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
+
+    step = *bitsPerValue + *skipBetweenValues;
+    nextValueFirstBit = *startSkip;
+    bpvm1 = (*bitsPerValue - 1);
+
+    for( nextValue = 0; nextValue < *numberOfValues; ++nextValue) {
+      nextBit = nextValueFirstBit;
+
+      for ( bit = 0; bit < *bitsPerValue; bit++ ) {
+        nextDestination = ( nextBit ) >> 3;
+        bitShift    = (bpvm1 - bit) & MASKSWORD;
+        bitPosition = 7 - (( nextBit++ ) & 0x7);
+
+        if( (source[nextValue] & onbit[bitShift]) )
+          destination[nextDestination] |= setBit1[bitPosition];
+        else
+          destination[nextDestination] &= setBit0[bitPosition];
+      }
+
+      nextValueFirstBit += step;
+    }
+}
+
+
+void SBYTE(
+  void* destination,
+  void* source,
+  int* startSkip,
+  int* bitsPerValue) {
+/*
+//  SBYTE: 
+//
+//   Packs one value from source to destination.
+//
+//   Makes an initial skip over bits in source.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+*/
+int skipBetweenValues=0, numberOfValues=1;
+
+    SBYTES(destination,
+           source,
+           startSkip,
+           bitsPerValue,
+           &skipBetweenValues,
+           &numberOfValues);
+}
diff --git a/pbio/gbyte_le.c b/pbio/gbyte_le.c
new file mode 100755
index 0000000..20af95a
--- /dev/null
+++ b/pbio/gbyte_le.c
@@ -0,0 +1,369 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <assert.h>
+#define EFDEBUG 0
+#define fortint int
+#define GBYTES gbytes_
+#define GBYTE  gbyte_
+#define SBYTES sbytes_
+#define SBYTE  sbyte_
+
+#define SWORD 32
+#define MASKSWORD 0x3f
+
+static int onbit[32] = {
+  0x00000001,0x00000002,0x00000004,0x00000008,
+  0x00000010,0x00000020,0x00000040,0x00000080,
+  0x00000100,0x00000200,0x00000400,0x00000800,
+  0x00001000,0x00002000,0x00004000,0x00008000,
+  0x00010000,0x00020000,0x00040000,0x00080000,
+  0x00100000,0x00200000,0x00400000,0x00800000,
+  0x01000000,0x02000000,0x04000000,0x08000000,
+  0x10000000,0x20000000,0x40000000,0x80000000};
+
+static unsigned long masks[] = {0,1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535,
+                       131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215, 33554431,
+                       67108863, 134217727, 268435455, 536870911, 1073741823, 2147483647, -1};
+
+/*
+//  GBYTE: 
+//
+//   Unpacks one value from source to destination.
+//
+//   Makes an initial skip over bits in source.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD <= 32  Size in bits of each value
+//
+//
+//  Rewritten to get better preformance on little endian machines.
+//  This code is portable to big endian machines.
+//                   November 2006  Enrico Fucile
+//
+*/
+void GBYTE( void* Source, void* Destination, int* bitToSkip, int* bitsPerValue) {
+  fortint mask,nextWord,nextValueFirstBit,moveBitsLeft,moveBitsRight,nextByte,nextBitOfByte;
+  int bytesPerValue,extraBitsPerValue;
+  unsigned long i0,i1,i2,i3,temp,temp1;
+  unsigned char* source = (unsigned char*) Source;
+  fortint* destination = (fortint*) Destination;
+  nextBitOfByte = *bitToSkip % 8;
+  extraBitsPerValue = *bitsPerValue % 8;
+  
+  #if EFDEBUG
+  printf("---- nextBitOfByte = %d\n",nextBitOfByte);
+  if (nextBitOfByte != 0) printf("---- (not zero) nextBitOfByte = %d\n",nextBitOfByte);
+  printf("---- bitsPerValue= %d ---\n",*bitsPerValue);
+  #endif
+
+  if (*bitsPerValue > 32) {
+     int byte, bitShift, bit;
+     fortint t = 0;
+     int bpv = *bitsPerValue;
+     int nextBit = *bitToSkip;
+
+     for ( bit = 0; bit < bpv; bit++ ) {
+       byte     = ( nextBit ) >> 3;
+       bitShift = 7 - ( nextBit++ ) & 0x7;
+
+       temp <<= 1 ;
+       if( (source[byte] & onbit[bitShift]) ) temp |= 1;
+     }
+
+     *destination = temp;
+     return;
+  }
+
+  if ( extraBitsPerValue==0 && nextBitOfByte == 0 ) {
+    nextByte = *bitToSkip / 8;
+    #if EFDEBUG
+    printf("---- nextByte = %d\n",nextByte);
+    printf("---- bytesPerValue = %d\n",bytesPerValue);
+	fflush(stdout);
+    #endif
+	switch (*bitsPerValue) {
+	  case 8:
+	    *destination=(fortint) source[nextByte];
+	    break;
+	  case 16:
+	    *destination=(fortint) ((source[nextByte]<<8) + source[nextByte+1]);
+		break;
+	  case 24:
+	    *destination=(fortint) ((source[nextByte]<<16) + (source[nextByte+1]<<8) +source[nextByte+2]);
+		break;
+	  case 32:
+	    *destination=(fortint) ((source[nextByte]<<24) + (source[nextByte+1]<<16) +(source[nextByte+2]<<8)+source[nextByte+3]);
+		break;
+	  default:
+		destination=0;
+	}
+    #if EFDEBUG
+	printf("-------------------- destination=%ld\n",(long)*destination); 
+    #endif
+  } else {
+    mask=masks[*bitsPerValue];
+    nextWord = *bitToSkip / SWORD;
+    nextByte = nextWord*4;
+    nextValueFirstBit = *bitToSkip % SWORD;
+    moveBitsLeft = 0;
+    moveBitsRight = SWORD - *bitsPerValue - nextValueFirstBit;
+    #if EFDEBUG
+    printf("---- nextWord = %d\n",nextWord); 
+    printf("---- nextValueFirstBit = %d\n",nextValueFirstBit);
+    printf("---- moveBitsRight= %d\n",moveBitsRight);
+    #endif
+    if (moveBitsRight > 0) {
+
+      i0=(unsigned long)(source[nextByte]) << 24; 
+      i1=(unsigned long)(source[nextByte+1]) << 16; 
+      i2=(unsigned long)(source[nextByte+2]) << 8; 
+      i3=(unsigned long)(source[nextByte+3]) ; 
+      *destination = (fortint)( ((i0 + i1 + i2 + i3) >> moveBitsRight) & mask );
+      #if EFDEBUG
+	  printf("-------------------- destination=%ld\n",(char)*destination,(long)*destination); 
+      #endif
+
+    } else if ( moveBitsRight < 0 ) {
+
+      moveBitsLeft=-moveBitsRight;
+      moveBitsRight=SWORD-moveBitsLeft;
+      i0=(unsigned long)(source[nextByte]) << 24; 
+      i1=(unsigned long)(source[nextByte+1]) << 16; 
+      i2=(unsigned long)(source[nextByte+2]) << 8; 
+      i3=(unsigned long)(source[nextByte+3]) ; 
+      temp1 = (unsigned long)(i0 + i1 + i2 + i3) << moveBitsLeft ;
+    
+      i0=(unsigned long)(source[nextByte+4]) << 24; 
+      i1=(unsigned long)(source[nextByte+5]) << 16; 
+      i2=(unsigned long)(source[nextByte+6]) << 8; 
+      i3=(unsigned long)(source[nextByte+7]) ; 
+      temp= (unsigned long)(i0 + i1 + i2 + i3) >> moveBitsRight;
+
+      *destination = (fortint) (temp1 | temp);
+	  *destination &= mask;
+      #if EFDEBUG
+  	  printf("+++++++++ destination=%ld temp1=%ld temp=%ld mask=%ld bitsPerValue=%d moveBitsRight=%d moveBitsLeft=%d\n",*destination,temp1,temp,mask,*bitsPerValue,moveBitsRight,moveBitsLeft); 
+      #endif
+    
+    } else {
+
+      i0=(fortint)(source[nextByte]) << 24; 
+      i1=(fortint)(source[nextByte+1]) << 16; 
+      i2=(fortint)(source[nextByte+2]) << 8; 
+      i3=(fortint)(source[nextByte+3]) ; 
+      *destination = ( i0 + i1 + i2 + i3 ) & mask ;
+      #if EFDEBUG
+	  printf("-------------------- destination=%ld\n",(char)*destination,(long)*destination); 
+      #endif
+    }
+  }
+}
+
+#if 0
+void GBYTE(
+  void* Source,
+  void* Destination,
+  int* startSkip,
+  int* bitsPerValue) {
+/*
+//  GBYTE: 
+//
+//   Unpacks one value from source to destination.
+//
+//   Makes an initial skip over bits in source.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+// Move one bit at a time (!!)
+// Uses shifts and masks instead of divides.
+// Sets destination bit to 0/1 as source bit is 0/1.
+*/
+int bpv, temp, nextBit, byte, bitShift, bit;
+unsigned char* source = (unsigned char*) Source;
+int* destination = (int*) Destination;
+
+    temp = 0;
+    bpv = *bitsPerValue;
+    nextBit = *startSkip;
+
+    for ( bit = 0; bit < bpv; bit++ ) {
+      byte     = ( nextBit ) >> 3;
+      bitShift = 7 - ( nextBit++ ) & 0x7;
+
+      temp <<= 1 ;
+      if( (source[byte] & onbit[bitShift]) ) temp |= 1;
+    }
+
+    *destination = temp;
+}
+
+#endif
+
+
+
+/* 
+//  Retrieve or store arbitrary bit-size values from or to SWORD-bit words
+//
+//  Rewritten April 2000, J.D.Chambers, ECMWF.
+//
+*/
+
+void GBYTES(
+  void* Source,
+  void* Destination,
+  int* startSkip,
+  int* bitsPerValue,
+  int* skipBetweenValues,
+  int* numberOfValues) {
+/*
+//  GBYTES: 
+//
+//   Unpacks values from source to destination.
+//
+//   Makes an initial skip over bits in source, then skips bits between values.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+//   skipBetweenValues >= 0    Number of bits to be skipped between values
+//
+//   numberOfValues >= 0       Number of values to be packed/unpacked
+//
+// Move one bit at a time (!!)
+// Uses shifts and masks instead of divides.
+// Sets destination bit to 0/1 as source bit is 0/1.
+*/
+unsigned char* source = (unsigned char*) Source;
+int* destination = (int*) Destination;
+int bpv, bit, byte, bitShift, nextBit, nextValueFirstBit, next, step;
+
+	bpv=*bitsPerValue;
+    step = *bitsPerValue + *skipBetweenValues;
+    nextValueFirstBit = *startSkip;
+
+    /* assert(*bitsPerValue <= 8*sizeof(*destination)); */
+    for (next = 0; next < *numberOfValues; ++next) {
+      destination[next] = 0; 
+      nextBit=nextValueFirstBit;
+
+      /* printf("--- nextValueFirstBit=%d\n",nextValueFirstBit); */
+	  GBYTE(source,&destination[next],&nextValueFirstBit,&bpv);
+
+	  /*
+      for ( bit = 0; bit < bpv; bit++ ) {
+        byte     = ( nextBit ) >> 3;
+        bitShift = 7 - ( nextBit++ ) & 0x7;
+
+        destination[next] <<= 1 ;
+        if( (source[byte] & onbit[bitShift]) ) destination[next] |= 1;
+      }
+	  */
+
+      nextValueFirstBit += step;
+    }
+
+}
+
+void SBYTES(
+  void* Destination,
+  void* Source,
+  int* startSkip,
+  int* bitsPerValue,
+  int* skipBetweenValues,
+  int* numberOfValues) {
+/*
+//  SBYTES: 
+//
+//   Packs values from source to destination.
+//
+//   Makes an initial skip over bits in source, then skips bits between values.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in destination
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+//   skipBetweenValues >= 0    Number of bits to be skipped between values
+//
+//   numberOfValues >= 0       Number of values to be packed/unpacked
+//
+// Move one bit at a time (!!)
+// Uses shifts and masks instead of divides.
+// Sets destination bit to 0/1 as source bit is 0/1.
+*/
+unsigned char* destination = (unsigned char*) Destination;
+int* source = (int*) Source;
+int bitShift, bitPosition;
+int nextValueFirstBit, bpvm1;
+int nextDestination, nextBit, bit;
+int step, nextValue;
+unsigned char setBit0[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
+unsigned char setBit1[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
+
+    step = *bitsPerValue + *skipBetweenValues;
+    nextValueFirstBit = *startSkip;
+    bpvm1 = (*bitsPerValue - 1);
+
+    for( nextValue = 0; nextValue < *numberOfValues; ++nextValue) {
+      nextBit = nextValueFirstBit;
+
+      for ( bit = 0; bit < *bitsPerValue; bit++ ) {
+        nextDestination = ( nextBit ) >> 3;
+        bitShift    = (bpvm1 - bit) & MASKSWORD;
+        bitPosition = 7 - (( nextBit++ ) & 0x7);
+
+        if( (source[nextValue] & onbit[bitShift]) )
+          destination[nextDestination] |= setBit1[bitPosition];
+        else
+          destination[nextDestination] &= setBit0[bitPosition];
+      }
+
+      nextValueFirstBit += step;
+    }
+}
+
+
+void SBYTE(
+  void* destination,
+  void* source,
+  int* startSkip,
+  int* bitsPerValue) {
+/*
+//  SBYTE: 
+//
+//   Packs one value from source to destination.
+//
+//   Makes an initial skip over bits in source.
+//
+//   startSkip >= 0            Number of bits to be skipped preceding first
+//                             value in source
+//
+//   0 < bitsPerValue < SWORD  Size in bits of each value
+//
+*/
+int skipBetweenValues=0, numberOfValues=1;
+
+    SBYTES(destination,
+           source,
+           startSkip,
+           bitsPerValue,
+           &skipBetweenValues,
+           &numberOfValues);
+}
diff --git a/pbio/grprs.h b/pbio/grprs.h
new file mode 100755
index 0000000..dc4e010
--- /dev/null
+++ b/pbio/grprs.h
@@ -0,0 +1,16 @@
+C
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+C     Common blocks holding default or user supplied values for printing.
+C
+      LOGICAL GRPRSET
+      INTEGER GRPRSM
+C
+      COMMON /GRPRSCM/ GRPRSM, GRPRSET
diff --git a/pbio/lwsize.c b/pbio/lwsize.c
new file mode 100755
index 0000000..89b1229
--- /dev/null
+++ b/pbio/lwsize.c
@@ -0,0 +1,69 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "fortint.h"
+#include "fileRead.h"
+
+#define BUFFLEN 4096
+
+void lwsize_(
+  fortint ** unit,
+  fortint * plen) {
+/*
+//  Returns the size in bytes of the next GRIB, BUFR, TIDE, BUDG, DIAG
+//  product.
+//
+//  Called from C:
+//      LWSIZE((fortint **) &unit, &plen);
+//
+//  unit  = file id returned from C fopen64.
+//  plen  = size in bytes of the next product.
+//        = 0 if no product found
+//
+//  The input file is left positioned where it started.
+*/
+fortint iret;
+char statbuff[BUFFLEN];
+long offset;
+
+/*
+//  Record the current position of the file
+*/
+    offset = (fortint) fileTell(*unit);
+    if( offset < 0 ) {
+      perror("LWSIZE: fileTell error");
+      exit(1);
+    }
+/*
+//  Use a smallish buffer for processing; this should suffice for all cases
+//  except versions -1 and 0 of GRIB and large BUFR products
+*/
+    *plen = BUFFLEN;
+
+    iret = readprod(NULL,statbuff,plen,fileRead,fileSeek,fileTell,*unit);
+    if( (iret < 0) && (iret != -3) && (iret != -1) ) {
+      *plen = 0;
+      return;
+    }
+/*
+//  Put the file pointer back where it started
+*/
+    offset = (fortint) fileSeek( *unit, offset, SEEK_SET);
+
+    return ;
+}
+
+void lwsize(fortint** unit,fortint* plen) {
+
+  lwsize_(unit,plen);
+}
diff --git a/pbio/make.dep b/pbio/make.dep
new file mode 100755
index 0000000..594adb7
--- /dev/null
+++ b/pbio/make.dep
@@ -0,0 +1,17 @@
+#
+# Header file dependencies
+#
+PBGroutines.o: PBGroutines.h
+crexrd.o: /usr/include/stdio.h
+extras.o: /usr/include/stdio.h
+fort2c.o: fort2c.h
+gbyte.o: /usr/include/stdio.h /usr/include/limits.h fortint.h
+newpbio.o: bufrgrib.h fort2c.h fortint.h /usr/include/sys/types.h /usr/include/sys/stat.h /usr/include/fcntl.h
+pbsize.o: /usr/include/stdio.h /usr/include/unistd.h bufrgrib.h fortint.h fileRead.h
+readany.o: bufrgrib.h fortint.h fileRead.h
+readbufr.o: bufrgrib.h fortint.h fileRead.h
+readgrib.o: bufrgrib.h fortint.h fileRead.h sizeRoutines.h
+readnext.o: bufrgrib.h fortint.h fileRead.h
+readprod.o: bufrgrib.h fortint.h /usr/include/stdio.h /usr/include/unistd.h /usr/include/string.h /usr/include/memory.h fileRead.h sizeRoutines.h
+recheckLength.o: /usr/include/stdio.h /usr/include/string.h 
+setpar.o: /usr/include/limits.h fortint.h
diff --git a/pbio/mvchars.c b/pbio/mvchars.c
new file mode 100755
index 0000000..d62b5ba
--- /dev/null
+++ b/pbio/mvchars.c
@@ -0,0 +1,55 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "fortint.h"
+
+fortint mvchars_(fortint * k, char * s, long ls) {
+/*
+// Callable from Fortran to move a string of characters from s to integer
+// array k:
+//
+//       INTEGER K(*)
+//       CHARACTER*(*) S
+//       INTEGER MVCHARS
+//       EXTERNAL MVCHARS
+//
+//       IRET = MVCHARS(K, S)
+//
+// Trailing blanks are ignored.
+// IRET is the count of the number of characters moved.
+*/
+int loop, last = -1;
+char * p = (char *) k;
+/*
+// Find the last non-blank character
+*/
+    for( loop = (ls - 1) ; loop >=0;  loop-- )
+      if( *(s+loop) != ' ' ) {
+        last = loop;
+        break;
+      }
+/*
+// Fill k from s
+*/
+    for( loop = 0; loop <= last ; loop++ )
+      *p++ = *(s+loop);
+  
+    return (fortint) (last+1);
+}
+
+fortint mvchars(fortint * k, char * s, long ls) {
+
+return  mvchars_(k,s,ls);
+}
diff --git a/pbio/newpbio.c b/pbio/newpbio.c
new file mode 100755
index 0000000..d20e3ab
--- /dev/null
+++ b/pbio/newpbio.c
@@ -0,0 +1,592 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	newpbio.c
+*/
+#include "bufrgrib.h"
+#include "fort2c.h"
+#include "fortint.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#ifndef CRAY
+#ifdef FORTRAN_NO_UNDERSCORE
+#define PBOPEN3  pbopen3
+#define PBREAD3  pbread3
+#define PBWRITE3 pbwrite3
+#define PBSEEK3  pbseek3
+#define PBCLOSE3 pbclose3
+#else
+#define PBOPEN3  pbopen3_
+#define PBREAD3  pbread3_
+#define PBWRITE3 pbwrite3_
+#define PBSEEK3  pbseek3_
+#define PBCLOSE3 pbclose3_
+#endif
+#endif
+
+#define NAMEBUFFLEN 256
+#define MODEBUFFLEN 10
+
+/*************************************************************************
+*  FUNCTION:  pbopen - Open file (from FORTRAN)
+**************************************************************************
+*/
+void PBOPEN(FILE ** unit, _fcd name, _fcd mode, fortint * iret,
+if defined hpR64 || defined hpiaR64
+            long l1, long l2)
+#else
+            fortint l1, fortint l2)
+#endif
+/*
+* Purpose:	Opens file, return UNIX FILE pointer.
+*
+* Function returns:      iret:  -1 = Could not open file.
+*                               -2 = Invalid file name.
+*                               -3 = Invalid open mode specified
+*                                0 = OK.
+*
+*    Note: l1 and l2 are the lengths of the character strings in 
+*          name and mode on SGI.
+*/
+{
+char *fname;
+char *modes;
+char *p;
+char  flags[4];
+
+#if (!defined CRAY) && (!defined VAX)
+char namebuff[NAMEBUFFLEN], modebuff[MODEBUFFLEN];
+
+/* Put the character strings into buffers and ensure that there is a
+   null terminator (for SGI case when FORTRAN CHARACTER variable is full
+   right to end with characters */
+    strncpy( namebuff, name, NAMEBUFFLEN - 1);
+    strncpy( modebuff, mode, MODEBUFFLEN - 1);
+    namebuff[l1] = '\0';
+    modebuff[l2] = '\0';
+#endif
+
+    strcpy(flags,"");
+
+    *unit = NULL;
+    *iret = 0;
+
+    /* convert fortran to c string : file name */
+
+#if (!defined CRAY) && (!defined VAX)
+    if(!(fname = fcd2char(namebuff)))
+#else
+    if(!(fname = fcd2char(name)))
+#endif
+    {
+        *iret = -2;
+        return;
+    }
+
+    /* strip trailing blanks */
+
+    p  = fname + strlen(fname) - 1 ;
+    while(*p == ' ')
+    {
+        *p = 0;
+	p--;
+    }
+		
+    /* convert fortran to c string : open modes  */
+	
+#if (!defined CRAY) && (!defined VAX)
+    if(!(modes = fcd2char(modebuff)))
+#else
+    if(!(modes = fcd2char(mode)))
+#endif
+    {
+        free(fname);
+        *iret = -2;
+        return;
+    }
+
+
+    /* build open flags from "modes" */
+
+    p = modes;
+    while(*p && ( strlen(flags) < 3 ) )
+    {
+        switch(*p)
+        {
+            case '+': strcat(flags, "+");
+                      break;
+
+            case 'a':
+            case 'A': strcat(flags, "a");
+                      break;
+
+            case 'c':
+            case 'C':
+            case 'w':
+            case 'W': strcat(flags, "w");
+                      break;
+
+            case 'r':
+            case 'R': strcat(flags, "r");
+                      break;
+
+            default:  *iret = -3;
+                      return;
+
+         }
+         p++;
+    }
+
+    /* if read/write change flags */
+
+    if ( !strcmp(flags,"wr") || !strcmp(flags, "rw") )
+        strcpy(flags, "r+w" );
+
+    *unit = fopen(fname, flags );
+
+    if(*unit == NULL)
+    {
+        perror(fname);
+        perror("pbopen");
+        *iret = -1;
+    }
+
+
+    free(fname);
+    free(modes);
+
+}
+
+/*************************************************************************
+*  FUNCTION:  pbseek - Seek (from FORTRAN)
+**************************************************************************
+*/
+void PBSEEK(FILE ** unit, fortint * offset, fortint * whence, fortint * iret)
+/*
+*
+* Purpose:	Seeks to specified location in file.
+*
+* Function returns:	status : 	-2 = error in handling file,
+*					-1 = end-of-file
+*                       otherwise,         = byte offset from start of file.
+*
+*	whence	= 0, from start of file
+*		= 1, from current position
+*		= 2, from end of file.	
+*/
+{
+int my_offset = (int) *offset;
+int my_whence = (int) *whence;
+int my_iret;
+
+    if ( my_whence == 2) my_offset = - abs(my_offset);
+				/* must use negative offset if working
+				   from end-of-file	*/
+
+    my_iret = fseek(*unit, my_offset, my_whence);
+
+    if(my_iret != 0)
+    {
+        if ( ! feof(*unit) )
+        {
+            my_iret = -2;		/* error in file-handling */
+            perror("pbseek");
+        }
+        else
+            my_iret = -1;		/* end-of-file	*/
+
+        clearerr(*unit);
+        *iret = (fortint) my_iret;
+        return;
+    }
+
+    my_iret = ftell(*unit);		/* byte offset from start of file */
+    *iret = (fortint) my_iret;
+    return;
+
+}
+		
+ 
+/*************************************************************************
+*  FUNCTION:  pbread - Read (from FORTRAN)
+**************************************************************************
+*/
+void PBREAD(FILE ** unit, char * buffer, fortint * nbytes, fortint * iret)
+/*
+*
+* Purpose:      Reads a block of bytes from a file.
+*
+* Function returns:          status :   -2 = error in reading file,
+*                                       -1 = end-of-file,
+*                               otherwise, = number of bytes read.
+*/
+{
+int my_nbytes = (int) *nbytes;
+int my_iret;
+ 
+    if ( (my_iret = fread(buffer, 1, my_nbytes, *unit) ) != my_nbytes)
+    {
+                                                /*      Read problem */
+        if ( ! feof(*unit) )
+        {
+            my_iret = -2;             /*  error in file-handling  */
+            perror("pbread");
+            clearerr(*unit);
+        }
+        else
+        {
+            my_iret = -1;             /*  end-of-file */
+            clearerr(*unit);
+        }
+    }
+    *iret = my_iret;
+    return;
+ 
+}
+ 
+
+/*************************************************************************
+*  FUNCTION:  pbread2 - Read (from FORTRAN)
+**************************************************************************
+*/
+void PBREAD2(FILE ** unit, char * buffer, fortint * nbytes, fortint * iret)
+/*
+*
+* Purpose:	Reads a block of bytes from a file.
+*
+* Function returns:	      status : 	-2 = error in reading file,
+*                               otherwise, = number of bytes read.
+*/
+{
+int my_nbytes = (int) *nbytes;
+int my_iret;
+
+    if ( (my_iret = fread(buffer, 1, my_nbytes, *unit) ) != my_nbytes)
+    {
+						/*	Read problem */
+        if ( ! feof(*unit) )
+        {
+            my_iret = -2;             /*  error in file-handling  */
+            perror("pbread");
+            clearerr(*unit);
+        }
+    }
+    *iret = my_iret;
+    return;
+ 
+}
+
+/*************************************************************************
+*  FUNCTION:  pbwrite - Write (from FORTRAN)
+**************************************************************************
+*/
+void PBWRITE( FILE ** unit, char * buffer, fortint * nbytes, fortint *iret)
+/*
+* Purpose:	Writes a block of bytes to a file.
+*
+* Function returns:	     status : -1 = Could not write to file.
+*                                    >=0 = Number of bytes written.
+*/
+{
+int my_nbytes = (int) *nbytes;
+int my_iret;
+
+    if ( (my_iret = fwrite(buffer, 1, my_nbytes, *unit) ) != my_nbytes)
+    {				/* Problem with write */   
+        perror("pbwrite");
+        my_iret = -1;
+    }
+    *iret = my_iret;
+    return;
+    
+}
+
+
+
+/*************************************************************************
+*  FUNCTION:  pbclose - close (from FORTRAN)
+**************************************************************************
+*/
+void PBCLOSE( FILE ** unit, fortint * iret)
+/*
+*
+* Purpose:	Closes file.
+*
+* Function returns:	     status : non-0 = error in handling file.
+*                                     	  0 = OK.
+*/
+{
+int my_iret;
+
+    my_iret = fclose(*unit);
+
+    if(my_iret != 0) perror("pbclose");
+    *iret = my_iret;
+    return;
+
+}
+
+
+/*************************************************************************
+*  FUNCTION:  pbflush - flush (from FORTRAN)
+**************************************************************************
+*/
+void PBFLUSH( FILE ** unit)
+/*
+*
+* Purpose:	Flushes file.
+*
+*/
+{
+
+    fflush(*unit);
+}
+
+
+void PBREAD3(fortint  *unit, char * buffer, fortint * nbytes, fortint * iret)
+/*
+*
+* Purpose:      Reads a block of bytes from a file.
+*
+* Function returns:          status :   -2 = error in reading file,
+*                                       -1 = end-of-file,
+*                               otherwise, = number of bytes read.
+*/
+{
+ 
+    *iret = read(*unit, buffer, *nbytes);
+
+                                                /*      Read problem */
+    if (*iret == -1)
+    {
+        *iret = -2;             /*  error in file-handling  */
+        perror("pbread3");
+        return;
+    }
+    else if (*iret != *nbytes)
+    {
+        *iret = -1;
+        printf("EOF; pbread3; bytes requested %d; read in: %d\n",
+        *nbytes,*iret);
+        return;
+    }
+ 
+}
+ 
+static oct_bin3(int onum)
+{
+   char tmp[20];
+   int  rc;
+
+   sprintf(tmp,"%d",onum);
+   sscanf(tmp,"%o",&rc);
+   return rc; 
+}
+void PBOPEN3(fortint *unit, _fcd name, _fcd mode, fortint * iret,
+            fortint l1, fortint l2)
+/*
+* Purpose:  Opens file, return UNIX FILE pointer.
+*
+* Function returns:      iret:  -1 = Could not open file.
+*                               -2 = Invalid file name.
+*                               -3 = Invalid open mode specified
+*                                0 = OK.
+*
+*    Note: l1 and l2 are the lengths of the character strings in 
+*          name and mode on SGI.
+*/
+{
+char *fname;
+char *modes;
+char *p;
+int oflag;
+int dmas;
+int filemode;
+
+#if (!defined CRAY) && (!defined VAX)
+char namebuff[NAMEBUFFLEN], modebuff[MODEBUFFLEN];
+
+/* Put the character strings into buffers and ensure that there is a
+   null terminator (for SGI case when FORTRAN CHARACTER variable is full
+   right to end with characters */
+    strncpy( namebuff, name, NAMEBUFFLEN - 1);
+    strncpy( modebuff, mode, MODEBUFFLEN - 1);
+    namebuff[l1] = '\0';
+    modebuff[l2] = '\0';
+#endif
+
+
+    *unit = 0;
+    *iret = 0;
+
+    /* convert fortran to c string : file name */
+
+#if (!defined CRAY) && (!defined VAX)
+    if(!(fname = fcd2char(namebuff)))
+#else
+    if(!(fname = fcd2char(name)))
+#endif
+    {
+        *iret = -2;
+        return;
+    }
+
+    /* strip trailing blanks */
+
+    p  = fname + strlen(fname) - 1 ;
+    while(*p == ' ')
+    {
+        *p = 0;
+    p--;
+    }
+            
+    /* convert fortran to c string : open modes  */
+    
+#if (!defined CRAY) && (!defined VAX)
+    if(!(modes = fcd2char(modebuff)))
+#else
+    if(!(modes = fcd2char(mode)))
+#endif
+    {
+        free(fname);
+        *iret = -3;
+        return;
+    }
+
+    /* build open flags from "modes" */
+
+    p = modes;
+    while(*p)
+    {
+        switch(*p)
+        {
+            case '+': break;
+
+            case 'a':
+            case 'A': oflag = 0x100 | 2 | 0x08;
+                      filemode = 766;
+                      break;
+
+            case 'c':
+            case 'C':
+            case 'w':
+            case 'W': oflag = 0x100 | 1;
+                      filemode = 766;
+                      break;
+
+            case 'r':
+            case 'R': oflag = 0;
+                      filemode = 444;
+                      break;
+
+            default:  *iret = -3;
+                      return;
+
+         }
+         p++;
+    }
+
+
+    dmas = umask(000);
+    *unit = open(fname, oflag, oct_bin3(filemode));
+    umask(dmas);
+
+    if(*unit == -1)
+    {
+        perror(fname);
+        perror("pbopen3");
+        *iret = -2;
+    }
+
+
+    free(fname);
+    free(modes);
+
+}
+
+
+void PBCLOSE3( fortint * unit, fortint * iret)
+/*
+*
+* Purpose:  Closes file.
+*
+* Function returns:      status : non-0 = error in handling file.
+*                                             0 = OK.
+*/
+{
+    *iret = close(*unit);
+
+    if(*iret != 0) perror("pbclose3");
+
+}
+
+void PBSEEK3(fortint * unit, fortint * offset, fortint * whence, fortint * iret)
+/*
+*
+* Purpose:  Seeks to specified location in file.
+*
+* Function returns: status :        -2 = error in handling file,
+*                                   -1 = end-of-file
+*                       otherwise,         = byte offset from start of file.
+*
+*   whence  = 0, from start of file
+*           = 1, from current position
+*           = 2, from end of file.  
+*/
+{
+fortint my_offset = *offset;
+int my_whence;
+
+    if ( *whence == 2)
+    {
+         my_offset = - abs(my_offset);
+         my_whence = 2;
+    }
+    else if (*whence == 0)
+    {
+         my_whence = 0;
+    }
+    else
+    {
+         my_whence = 1;
+    }
+     
+                            /* must use negative offset if working
+                               from end-of-file     */
+
+   if ((*iret=lseek(*unit, my_offset, my_whence)) < 0)
+   {
+      perror("pbseek3;");
+      *iret = -1;           /* end-of-file  */
+   }
+
+}
+            
+void PBWRITE3( fortint * unit, char * buffer, fortint * nbytes, fortint *iret)
+/*
+* Purpose:  Writes a block of bytes to a file.
+*
+* Function returns:      status : -1 = Could not write to file.
+*                                    >=0 = Number of bytes written.
+*/
+{
+   if ((*iret = write(*unit, buffer, *nbytes)) != *nbytes)
+   {
+       perror("pbwrite3: ");
+        *iret = -1;
+   }
+
+}
+
diff --git a/pbio/pbbufr.F b/pbio/pbbufr.F
new file mode 100755
index 0000000..b951eab
--- /dev/null
+++ b/pbio/pbbufr.F
@@ -0,0 +1,125 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+	SUBROUTINE PBBUFR(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C---->
+C**** PBBUFR
+C
+C     PURPOSE
+C     _______
+C
+C     Reads next BUFR product from a file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL PBBUFR(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT  - 	Unit number for the file returned from PBOPEN.
+C     KARRAY -	FORTRAN array big enough to hold the BUFR product.
+C     KINLEN -	Size in BYTES of the FORTRAN array.
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KOUTLEN -	size in BYTES of the BUFR product read	
+C     KRET    -	 0  if a BUFR product has been successfully read
+C
+C		-1  if end-of-file is hit before a BUFR product is read
+C
+C		-3  if the size of KARRAY is not sufficient for the 
+C		    BUFR product
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C
+C     Method
+C     ______
+C
+C     Calls BUFRREAD.
+C
+C
+C     Externals
+C     _________
+C
+C     BUFRREAD - Read next BUFR product.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C******************************************************************************
+C----<
+C
+C     Subroutine arguments
+C
+      INTEGER KARRAY(1)
+      INTEGER KUNIT,KINLEN,KOUTLEN,KRET
+C
+C     Local argument(s)
+C
+      INTEGER NREAD, IRET
+C
+C     Get the BUFR product
+C
+      CALL BUFRREAD( KARRAY, KINLEN, NREAD, IRET, KUNIT )
+C
+C     Escape if the user buffer is too small to hold even the early sections of
+C     the product or EOF encountered
+C
+      IF( IRET.EQ.-4 ) THEN
+        KOUTLEN = NREAD
+        KRET = -1
+        RETURN
+      ENDIF
+C
+C     Escape if no BUFR product is found in the file
+C
+      IF( IRET.EQ.-1 ) THEN
+        KOUTLEN = 0
+	    KRET = -1
+        RETURN
+      ENDIF
+C
+C     Check if the array is big enough for the BUFR product
+C
+      IF( IRET.EQ.-3 ) THEN
+        KOUTLEN = NREAD
+        KRET = -3
+        RETURN
+      ENDIF
+C
+C     Set success code if product retrieved
+C
+      IF( NREAD.GE.0 )  THEN
+        KOUTLEN = NREAD
+        KRET = 0
+      ENDIF
+C
+      RETURN 
+      END
diff --git a/pbio/pbcrex.F b/pbio/pbcrex.F
new file mode 100755
index 0000000..f1d2181
--- /dev/null
+++ b/pbio/pbcrex.F
@@ -0,0 +1,134 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      SUBROUTINE PBCREX(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C---->
+C**** PBCREX
+C
+C     PURPOSE
+C     _______
+C
+C     Reads next CREX product from a file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL PBCREX(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT   - unit number for the file returned from PBOPEN
+C     KARRAY  - FORTRAN array big enough to hold the CREX product
+C     KINLEN  - size in BYTES of the FORTRAN array
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KOUTLEN - size in BYTES of the CREX product read	
+C     KRET    - 0  if a CREX product has been successfully read
+C              -1  if end-of-file is hit before a CREX product is read
+C              -2  if file read error is generated
+C              -3  if the size of KARRAY is not sufficient for the
+C                  CREX product
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C
+C     Method
+C     ______
+C
+C     Calls CREXRD.
+C
+C
+C     Externals
+C     _________
+C
+C     CREXRD - Read next CREX product.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C******************************************************************************
+C----<
+C
+      IMPLICIT NONE
+C
+C     Subroutine arguments
+C
+      INTEGER KARRAY(1)
+      INTEGER KUNIT,KINLEN,KOUTLEN,KRET
+C
+C     Local arguments
+C
+      INTEGER NREAD, IRET
+C
+C Get the CREX product
+C
+      CALL CREXRD( KARRAY, KINLEN, NREAD, IRET, KUNIT )
+C
+C Escape if the user buffer is too small to hold even the early sections of
+C the product or EOF encountered
+C
+      IF( IRET.EQ.-4 ) THEN
+        KOUTLEN = NREAD
+        KRET    = -1
+        RETURN
+      ENDIF
+C
+C Escape if no CREX product is found in the file
+C
+      IF( IRET.EQ.-1 ) THEN
+        KOUTLEN = 0
+        KRET    = -1
+        RETURN
+      ENDIF
+C
+C Escape if file read error
+C
+      IF( (IRET.EQ.-2) .OR. (IRET.EQ.-5) ) THEN
+        KOUTLEN = 0
+        KRET    = -2
+        RETURN
+      ENDIF
+C
+C Check if the array is big enough for the CREX product
+C
+      IF( IRET.EQ.-3 ) THEN
+        KOUTLEN = NREAD
+        KRET    = -3
+        RETURN
+      ENDIF
+C
+C Set success code if product retrieved
+C
+      IF( NREAD.GE.0 )  THEN
+        KOUTLEN = NREAD
+        KRET    = 0
+      ENDIF
+C
+      RETURN 
+      END
diff --git a/pbio/pbfp.c b/pbio/pbfp.c
new file mode 100755
index 0000000..bdb8a9b
--- /dev/null
+++ b/pbio/pbfp.c
@@ -0,0 +1,23 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+
+extern FILE** fptable;
+extern int fptableSize;
+
+FILE * pbfp(long index) {
+  if( (fptable == NULL) || ((int)index < 0) || ((int)index >= fptableSize) )
+    return (FILE *) NULL;
+  else
+    return fptable[index];
+}
+
diff --git a/pbio/pbgrib.F b/pbio/pbgrib.F
new file mode 100755
index 0000000..9c07228
--- /dev/null
+++ b/pbio/pbgrib.F
@@ -0,0 +1,123 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+	SUBROUTINE PBGRIB(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C---->
+C**** PBGRIB
+C
+C     PURPOSE
+C     _______
+C
+C     Reads next GRIB product from a file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL PBGRIB(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT  - 	Unit number for the file returned from PBOPEN
+C     KARRAY -	FORTRAN array big enough to hold the GRIB product
+C     KINLEN -	Size in BYTES of the FORTRAN array
+C
+C
+C     Output parameters
+C     ________________
+C
+C     KOUTLEN -	Size in BYTES of the GRIB product read	
+C     KRET    -	 0  if a GRIB product has been successfully read
+C		-1  if end-of-file is hit before a GRIB product is read
+C		-3  if the size of KARRAY is not sufficient for the 
+C                   GRIB product
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C
+C     Method
+C     ______
+C
+C     Calls GRIBREAD.
+C
+C
+C     Externals
+C     _________
+C
+C     GRIBREAD - Read next GRIB product.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C******************************************************************************
+C----<
+C
+C     Subroutine arguments
+C
+      INTEGER KARRAY(1)
+      INTEGER KUNIT,KINLEN,KOUTLEN,KRET
+C
+C     Local argument(s)
+C
+      INTEGER NREAD, IRET
+C
+C     Get the GRIB product
+C
+      CALL GRIBREAD( KARRAY, KINLEN, NREAD, IRET, KUNIT )
+C
+C     Escape if the user buffer is too small to hold even the early sections of
+C     the product or EOF encountered
+C
+      IF( IRET.EQ.-4 ) THEN
+        KOUTLEN = NREAD
+        KRET = -1
+        RETURN
+      ENDIF
+C
+C     Escape if no GRIB product is found in the file
+C
+      IF( IRET.EQ.-1 ) THEN
+        KOUTLEN = 0
+    	KRET = -1
+    	RETURN
+      ENDIF
+C
+C     Check if the array is big enough for the GRIB product
+C
+      IF( IRET.EQ.-3 ) THEN
+        KOUTLEN = NREAD
+    	KRET = -3
+    	RETURN
+      ENDIF
+C
+C     Set success code if product retrieved
+C
+      IF( NREAD.GE.0 )  THEN
+    	KOUTLEN = NREAD
+    	KRET = 0
+      ENDIF
+C
+      RETURN 
+      END
diff --git a/pbio/pbio.c b/pbio/pbio.c
new file mode 100755
index 0000000..ad29eed
--- /dev/null
+++ b/pbio/pbio.c
@@ -0,0 +1,1559 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+// pbio.c
+*/
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ctype.h>
+
+#ifdef PTHREADS
+#include <pthread.h>
+#endif
+
+#ifdef FOPEN64
+#define OFF_T off64_t
+extern FILE *fopen64(const char *, const char *);
+#else
+#define OFF_T off_t
+#endif
+
+static FILE** fptable = NULL;
+static int fptableSize = 0;
+
+#ifdef PTHREADS
+static pthread_mutex_t fpTableBusy = PTHREAD_MUTEX_INITIALIZER;
+#endif
+#define BUFFLEN 4096
+
+/*
+// Default buffer size for I/O operations (set via setvbuf)
+*/
+#define SIZE BUFSIZ
+static long size = SIZE;
+static int sizeSet = 0;
+static char * envSize;
+static char** fileBuffer = NULL;
+
+/*
+// Debug flags.
+*/
+#define DEBUGOFF 1
+#define DEBUG (debugSet > DEBUGOFF )
+static char * debugLevel;
+static int debugSet = 0;
+
+#include "bufrgrib.h"
+#include "fort2c.h"
+#include "fortint.h"
+#include "fileRead.h"
+
+#define NAMEBUFFLEN 256
+#define MODEBUFFLEN 10
+
+#define CURRENT_FILE (fptable[*unit])
+
+FILE* pbfp(long index) {
+  if( (fptable == NULL) || ((int)index < 0) || ((int)index >= fptableSize) )
+    return (FILE *) NULL;
+  else
+    return fptable[index];
+}
+
+/*
+//------------------------------------------------------------------------
+// PBOPEN - Open file (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+#if defined hpR64 || defined hpiaR64
+void pbopen_(fortint* unit,_fcd name,_fcd mode,fortint* iret,long l1,long l2) {
+#else
+void pbopen_(fortint* unit,_fcd name,_fcd mode,fortint* iret,fortint l1,fortint l2) {
+#endif
+/*
+// Purpose:
+//  Opens file, returns the index of a UNIX FILE pointer held in 
+//  an internal table (fptable).
+//
+// First time through, reads value in environment variable PBIO_BUFSIZE
+// (if it is set) and uses it as the size to be used for internal file
+// buffers; the value is passed to setvbuf. If PBIO_BUFSIZE is not set,
+// a default value is used.
+//
+// Function  accepts:
+//    name = filename
+//    mode = r, r+, w
+//
+//    Note: l1 and l2 are the lengths of the FORTRAN character strings
+//          in name and mode.
+//
+// Function returns:
+//   INTEGER iret:
+//     -1 = Could not open file.
+//     -2 = Invalid file name.
+//     -3 = Invalid open mode specified
+//      0 = OK.
+*/
+int n;
+char *p;
+char  flags[4];
+
+#if (!defined CRAY) && (!defined VAX)
+char namebuff[NAMEBUFFLEN+1], modebuff[MODEBUFFLEN+1];
+#else
+char * namebuff, * modebuff;
+#endif
+
+/*
+// See if DEBUG switched on.
+*/
+    if( ! debugSet ) {
+      debugLevel = getenv("PBIO_DEBUG");
+      if( debugLevel == NULL )
+        debugSet = DEBUGOFF;              /* off */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(debugLevel) ; loop++ ) {
+          if( ! isdigit(debugLevel[loop]) ) {
+            printf("Invalid number string in PBIO_DEBUG: %s\n", debugLevel);
+            printf("PBIO_DEBUG must comprise only digits [0-9].\n");
+            debugSet = DEBUGOFF;
+          }
+        }
+        debugSet = DEBUGOFF + atol( debugLevel );
+      }
+      if( DEBUG ) printf("PBIO_PBOPEN: debug switched on\n");
+    }
+
+#if (!defined CRAY) && (!defined VAX)
+/*
+// Put the character strings into buffers and ensure that there is a
+// null terminator (for SGI case when FORTRAN CHARACTER variable is full
+// right to end with characters
+*/
+    {
+     int n1, n2;
+
+      n1 = (l1>NAMEBUFFLEN) ? NAMEBUFFLEN : l1;
+      n2 = (l2>MODEBUFFLEN) ? MODEBUFFLEN : l2;
+   
+      strncpy( namebuff, name, n1);
+      strncpy( modebuff, mode, n2);
+      namebuff[n1] = '\0';
+      modebuff[n2] = '\0';
+    }
+#else
+    if(!(namebuff = fcd2char(name))) {
+      *iret = -2;
+      return;
+    }
+    if(!(modebuff = fcd2char(mode))) {
+      free(namebuff);
+      *iret = -2;
+      return;
+    }
+#endif
+
+    strcpy(flags,"");
+
+    /* *unit = (fortint) NULL;  sami bug fix */
+    *unit = 0;
+    *iret = 0;
+
+/*
+// Strip trailing blanks
+*/
+    p  = namebuff + strlen(namebuff) - 1 ;
+    while(*p == ' ') {
+      *p = 0;
+      p--;
+    }
+    if( DEBUG ) printf("PBIO_PBOPEN: filename = %s\n", namebuff);
+/*
+// Build open flags from "modes"
+*/
+    p = modebuff;
+
+    switch(*p) {
+
+      case 'a':
+      case 'A': strcat(flags, "a");
+                      break;
+
+      case 'c':
+      case 'C':
+      case 'w':
+      case 'W': strcat(flags, "w");
+                break;
+
+      case 'r':
+      case 'R':
+                if( *(p+1) == '+' )
+                  strcat(flags, "r+");
+                else
+                  strcat(flags, "r");
+                break;
+
+      default:  *iret = -3;
+                return;
+
+    }
+    if( DEBUG ) printf("PBIO_PBOPEN: file open mode = %s\n", flags);
+
+/*
+// Look for a free slot in fptable.
+// (Create the table the first time through).
+*/
+#ifdef PTHREADS
+/*
+// Wait if another thread opening a file
+*/
+    pthread_mutex_lock(&fpTableBusy);
+#endif
+
+    n = 0;
+    if( fptableSize == 0 ) {
+      int i;
+      fptableSize = 2;
+      fptable = (FILE **) malloc(fptableSize*sizeof(FILE *));
+      if( fptable == NULL ) {
+        perror("Unable to allocate space for table of FILE pointers");
+        exit(1);
+      }
+
+      fileBuffer = (char **) malloc(fptableSize*sizeof(char *));
+      if( fileBuffer == NULL ) {
+        perror("Unable to allocate space for FILE buffers");
+        exit(1);
+      }
+
+      for( i = 0; i < fptableSize; i++ ) {
+        fptable[i] = 0;
+        fileBuffer[i] = NULL;
+      }
+    }
+    else {
+      while( n < fptableSize ) {
+        if(fptable[n]==0) {
+          *unit = n;
+          break;
+        }
+        n++;
+      }
+    }
+/*
+// If the table overflows, double its size.
+*/
+    if( n == fptableSize) {
+      int i;
+      fptableSize = 2*fptableSize;
+      fptable = (FILE **) realloc(fptable, fptableSize*sizeof(FILE *));
+      if( fptable == NULL ) {
+        perror("Unable to reallocate space for table of FILE pointers");
+        exit(1);
+      }
+      n = fptableSize/2;
+
+      fileBuffer = (char **) realloc(fileBuffer, fptableSize*sizeof(char *));
+      if( fileBuffer == NULL ) {
+        perror("Unable to allocate space for FILE buffers");
+        exit(1);
+      }
+
+      n = fptableSize/2;
+      for( i = n; i < fptableSize; i++ ) {
+        fptable[i] = 0;
+        fileBuffer[i] = NULL;
+      }
+
+      *unit = n;
+    }
+
+    if( DEBUG ) printf("PBIO_PBOPEN: fptable slot = %d\n", *unit);
+
+#ifdef FOPEN64
+    if( DEBUG ) printf("PBIO_PBOPEN: using fopen64\n");
+    fptable[n] = fopen64(namebuff, flags );
+#else
+    if( DEBUG ) printf("PBIO_PBOPEN: using fopen\n");
+    fptable[n] = fopen(namebuff, flags );
+#endif
+
+    if(fptable[n] == NULL) {
+      perror(namebuff);
+      *iret = -1;
+#if (defined CRAY) || (defined VAX)
+      free(namebuff);
+      free(modebuff);
+#endif
+#ifdef PTHREADS
+      pthread_mutex_unlock(&fpTableBusy);
+#endif
+      return;
+    }
+
+/*
+// Now allocate a buffer for the file, if necessary.
+*/
+    if( ! sizeSet ) {
+      envSize = getenv("PBIO_BUFSIZE");
+      if( envSize == NULL )
+        size = SIZE;             /* default */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(envSize) ; loop++ ) {
+          if( ! isdigit(envSize[loop]) ) {
+            printf("Invalid number string in PBIO_BUFSIZE: %s\n", envSize);
+            printf("PBIO_BUFSIZE must comprise only digits [0-9].\n");
+            exit(1);
+          }
+        }
+        size = atol( envSize );
+      }
+      if( size <= 0 ) {
+        printf("Invalid buffer size in PBIO_BUFSIZE: %s\n", envSize);
+        printf("Buffer size defined by PBIO_BUFSIZE must be positive.\n");
+        exit(1);
+      }
+      sizeSet = 1;
+    }
+
+    if( DEBUG ) printf("PBIO_PBOPEN: file buffer size = %d\n", size);
+
+    if( fileBuffer[n] == NULL ) {
+      fileBuffer[n] = (char *) malloc(size);
+    }
+
+    if( setvbuf(CURRENT_FILE, fileBuffer[*unit], _IOFBF, size) ) {
+        perror("setvbuf failed");
+        *iret = -1;
+    }
+
+#ifdef PTHREADS
+    pthread_mutex_unlock(&fpTableBusy);
+#endif
+
+#if (defined CRAY) || (defined VAX)
+    free(namebuff);
+    free(modebuff);
+#endif
+
+}
+
+#if (defined hpR64) || (defined hpiaR64)
+void pbopen(fortint* unit,_fcd name,_fcd mode,fortint* iret,long l1,long l2) {
+#else
+void pbopen(fortint* unit,_fcd name,_fcd mode,fortint* iret,fortint l1,fortint l2) {
+#endif
+
+  pbopen_(unit,name,mode,iret,l1,l2);
+}
+
+/*
+//------------------------------------------------------------------------
+// PBSEEK - Seek (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbseek_(fortint* unit,fortint* offset,fortint* whence,fortint* iret) {
+/*
+//
+// Purpose:
+//   Seeks to a specified location in file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    offset = byte count
+//
+//    whence  = 0, from start of file
+//            = 1, from current position
+//            = 2, from end of file.  
+//
+//  Returns:
+//    iret:
+//      -2 = error in handling file,
+//      -1 = end-of-file
+//      otherwise,  = byte offset from start of file.
+*/
+int my_offset = (int) *offset;
+int my_whence = (int) *whence;
+
+/*
+// Must use negative offset if working from end-of-file
+*/
+    if( DEBUG ) { 
+      printf("PBIO_PBSEEK: fptable slot = %d\n", *unit);
+      printf("PBIO_PBSEEK: Offset = %d\n", my_offset);
+      printf("PBIO_PBSEEK: Type of offset = %d\n", my_whence);
+    }
+
+    if( my_whence == 2) my_offset = - abs(my_offset);
+
+    *iret = fileTell(CURRENT_FILE);
+    if( DEBUG ) printf("PBIO_PBSEEK: current position = %d\n", *iret);
+    if( *iret == my_offset && my_whence == 0)
+      *iret = 0;
+    else
+      *iret = fileSeek(CURRENT_FILE, my_offset, my_whence);
+
+    if( DEBUG ) printf("PBIO_PBSEEK: fileSeek return code = %d\n",*iret);
+
+    if( *iret != 0 ) {
+      if( ! feof(CURRENT_FILE) ) {
+        *iret = -2;             /* error in file-handling */
+        perror("pbseek");
+      }
+      else
+        *iret = -1;             /* end-of-file  */
+
+      clearerr(CURRENT_FILE);
+      return;
+    }
+
+/*
+// Return the byte offset from start of file
+*/
+    *iret = fileTell(CURRENT_FILE);
+
+    if( DEBUG )
+      printf("PBIO_PBSEEK: byte offset from start of file = %d\n",*iret);
+
+    return;
+
+}
+
+void pbseek(fortint* unit,fortint* offset,fortint* whence,fortint* iret) {
+
+  pbseek_(unit,offset,whence,iret);
+}
+
+
+void pbseek64_(fortint* unit,long long* offset,fortint* whence,long long* iret) {
+/*
+//
+// Purpose:
+//   Seeks to a specified location in file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    offset = byte count
+//
+//    whence  = 0, from start of file
+//            = 1, from current position
+//            = 2, from end of file.
+//
+//  Returns:
+//    iret:
+//      -2 = error in handling file,
+//      -1 = end-of-file
+//      otherwise,  = byte offset from start of file.
+*/
+long long my_offset = (long long) *offset;
+int my_whence = (int) *whence;
+
+/*
+// Must use negative offset if working from end-of-file
+*/
+    if( DEBUG ) {
+      printf("PBIO_PBSEEK: fptable slot = %d\n", *unit);
+      printf("PBIO_PBSEEK: Offset = %d\n", my_offset);
+      printf("PBIO_PBSEEK: Type of offset = %d\n", my_whence);
+    }
+
+    if( my_whence == 2) my_offset = - abs(my_offset);
+
+    *iret = fileTell(CURRENT_FILE);
+    if( DEBUG ) printf("PBIO_PBSEEK: current position = %d\n", *iret);
+    if( *iret == my_offset && my_whence == 0)
+      *iret = 0;
+    else
+      *iret = fileSeek(CURRENT_FILE, my_offset, my_whence);
+
+    if( DEBUG ) printf("PBIO_PBSEEK: fileSeek return code = %d\n",*iret);
+
+    if( *iret != 0 ) {
+      if( ! feof(CURRENT_FILE) ) {
+        *iret = -2;             /* error in file-handling */
+        perror("pbseek");
+      }
+      else
+        *iret = -1;             /* end-of-file  */
+
+      clearerr(CURRENT_FILE);
+      return;
+    }
+
+/*
+// Return the byte offset from start of file
+*/
+    *iret = fileTell(CURRENT_FILE);
+
+    if( DEBUG )
+      printf("PBIO_PBSEEK: byte offset from start of file = %d\n",*iret);
+
+    return;
+
+}
+
+void pbseek64(fortint* unit,long long* offset,fortint* whence,long long* iret) {
+
+  pbseek64_(unit,offset,whence,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+// PBTELL - Tells current file position (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbtell_(fortint* unit,fortint* iret) {
+/*
+//
+// Purpose:
+//   Tells current byte offset in file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//  Returns:
+//    iret:
+//      -2 = error in handling file,
+//      otherwise,  = byte offset from start of file.
+*/
+
+
+/*
+// Return the byte offset from start of file
+*/
+    *iret = fileTell(CURRENT_FILE);
+
+    if( *iret < 0 ) {
+      if( DEBUG ) {           /* error in file-handling */
+        printf("PBIO_PBTELL: fptable slot = %d. ", *unit);
+        printf("Error status = %d\n", *iret);
+      }
+      perror("pbtell");
+      *iret = -2;
+    }
+
+    if( DEBUG ) {
+      printf("PBIO_PBTELL: fptable slot = %d. ", *unit);
+      printf("Byte offset from start of file = %d\n",*iret);
+    }
+
+    return;
+}
+
+void pbtell(fortint* unit,fortint* iret) {
+
+  pbtell_(unit,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+// PBTELL64 - Tells current file position (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbtell64_(fortint* unit,long long* iret) {
+/*
+//
+// Purpose:
+//   Tells current byte offset in file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//  Returns:
+//    iret:
+//      -2 = error in handling file,
+//      otherwise,  = byte offset from start of file.
+*/
+
+
+/*
+// Return the byte offset from start of file
+*/
+    *iret = fileTell(CURRENT_FILE);
+
+    if( *iret < 0 ) {
+      if( DEBUG ) {           /* error in file-handling */
+        printf("PBIO_PBTELL64: fptable slot = %d. ", *unit);
+        printf("Error status = %d\n", *iret);
+      }
+      perror("pbtell64");
+      *iret = -2;
+    }
+
+    if( DEBUG ) {
+      printf("PBIO_PBTELL: fptable slot = %d. ", *unit);
+      printf("Byte offset from start of file = %d\n",*iret);
+    }
+
+    return;
+}
+
+void pbtell64(fortint* unit,long long* iret) {
+
+  pbtell64_(unit,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBREAD - Read (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbread_(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    nbytes = number of bytes to read.
+//
+//  Returns:
+//    iret:
+//      -2 = error in reading file,
+//      -1 = end-of-file,
+//      otherwise, = number of bytes read.
+*/
+    if( DEBUG ) {
+      printf("PBIO_READ: fptable slot = %d. ", *unit);
+      printf("Number of bytes to read = %d\n", *nbytes);
+    }
+
+    if( (*iret = fread(buffer, 1, *nbytes, CURRENT_FILE) ) != *nbytes) {
+      if( ! feof(CURRENT_FILE) ) {
+        *iret = -2;             /*  error in file-handling  */
+        perror("pbread");
+        clearerr(CURRENT_FILE);
+        return;
+      }
+      else {
+        *iret = -1;             /*  end-of-file */
+        clearerr(CURRENT_FILE);
+      }
+    }
+
+    if( DEBUG ) {
+      printf("PBIO_READ: fptable slot = %d. ", *unit);
+      printf("Number of bytes read = %d\n", *nbytes);
+    }
+
+    return;
+}
+ 
+void pbread(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+
+  pbread_(unit,buffer,nbytes,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBREAD2 - Read (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbread2_(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    nbytes = number of bytes to read.
+//
+//  Returns:
+//    iret:
+//      -2 = error in reading file,
+//      -1 = end-of-file,
+//      otherwise, = number of bytes read.
+*/
+    if( DEBUG ) {
+      printf("PBIO_READ2: fptable slot = %d. ", *unit);
+      printf("Number of bytes to read = %d\n", *nbytes);
+    }
+
+   if( (*iret = fread(buffer, 1, *nbytes, CURRENT_FILE) ) != *nbytes) {
+     if( ! feof(CURRENT_FILE) ) {
+       *iret = -2;             /*  error in file-handling  */
+       perror("pbread2");
+       clearerr(CURRENT_FILE);
+     }
+   }
+
+  if( DEBUG )
+    printf("PBIO_READ2: Number of bytes read = %d\n", *iret);
+
+   return;
+}
+
+void pbread2(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+
+  pbread2_(unit,buffer,nbytes,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBWRITE - Write (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbwrite_(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+/*
+// Purpose:
+//  Writes a block of bytes to a file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    nbytes = number of bytes to write.
+//
+//  Returns:
+//    iret:
+//      -1 = Could not write to file.
+//     >=0 = Number of bytes written.
+*/
+    if( DEBUG ) {
+      printf("PBIO_WRITE: fptable slot = %d. ", *unit);
+      printf("Number of bytes to write = %d\n", *nbytes);
+    }
+
+    if( (*iret = fwrite(buffer, 1, *nbytes, CURRENT_FILE) ) != *nbytes) {
+      perror("pbwrite");
+      *iret = -1;
+    }
+
+    if( DEBUG ) {
+      printf("PBIO_WRITE: fptable slot = %d. ", *unit);
+      printf("PBIO_WRITE: number of bytes written = %d\n", *iret);
+    }
+
+    return;
+}
+
+void pbwrite(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+
+  pbwrite_(unit,buffer,nbytes,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//   PBCLOSE - close (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbclose_(fortint* unit,fortint* iret) {
+/*
+// Purpose:
+//  Closes file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+////  Returns:
+//    iret:
+//      0 = OK.
+//      otherwise = error in handling file.
+*/
+    if( DEBUG )
+      printf("PBIO_CLOSE: fptable slot = %d\n", *unit);
+
+    if( ( *iret = fclose(CURRENT_FILE) ) != 0 ) perror("pbclose");
+    CURRENT_FILE = 0;
+
+    return;
+}
+
+void pbclose(fortint* unit,fortint* iret) {
+
+  pbclose_(unit,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBFLUSH - flush (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbflush_(fortint * unit) {
+/*
+// Purpose:	Flushes file.
+*/
+    if( DEBUG )
+      printf("PBIO_FLUSH: fptable slot = %d\n", *unit);
+
+    fflush(CURRENT_FILE);
+}
+
+void pbflush(fortint * unit) {
+
+  pbflush_(unit);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBREAD3 - read (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbread3_(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function returns:
+//    status :   -2 = error in reading file,
+//               -1 = end-of-file,
+//               otherwise, = number of bytes read.
+*/
+    if( DEBUG )
+      printf("PBIO_READ3: number of bytes to read = %d\n", *nbytes);
+
+    *iret = read(*unit, buffer, *nbytes);
+
+    if( DEBUG )
+      printf("PBIO_READ3: number of bytes read = %d\n", *iret);
+/*
+// Error in file-handling
+*/
+    if(*iret == -1) {
+      *iret = -2;
+      perror("pbread3");
+      return;
+    }
+/*
+// Read problem
+*/
+    else if(*iret != *nbytes) {
+      printf("EOF; pbread3; bytes requested %d; read in: %d\n",
+             *nbytes,*iret);
+      *iret = -1;
+      return;
+    }
+ 
+}
+ 
+void pbread3(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+
+  pbread3_(unit,buffer,nbytes,iret);
+}
+
+void pbread4_(fortint* unit,char* buffer,size_t* nbytes,size_t* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function returns:
+//    status :   -2 = error in reading file,
+//               -1 = end-of-file,
+//               otherwise, = number of bytes read.
+      printf("PBIO_READ4: sizeof = %ld\n", sizeof(buffer));
+*/
+/*    if( DEBUG ) */
+     printf("PBIO_READ4: number of bytes to read = %ld\n", *nbytes);
+
+/* Is 4MB ok ? */
+size_t left   = *nbytes;
+size_t len    = 0;
+size_t chunk = 4*1024*1024; /* Is 4MB ok ? */
+size_t pos    = 0;
+
+   while((left > 0) && (len = read(*unit,(buffer+pos),chunk)) > 0)
+   {
+	left -= len;
+	pos += len;
+	if(left < chunk)
+		chunk = left;
+   }
+   if(len>0)
+	*iret = pos;
+   else
+	*iret = len;
+
+    if( DEBUG )
+         printf("PBIO_READ4: number of bytes READ = %ld\n", pos);
+
+    if(*iret == -1) {
+      *iret = -2;
+      perror("pbread4");
+      return;
+    }
+/*
+// Read problem
+*/
+    else if(pos != *nbytes) {
+      printf("EOF; pbread4; bytes requested %ld; read in: %ld\n",
+             *nbytes,pos);
+      *iret = -1;
+      return;
+    }
+      printf("PBIO_READ4: number of bytes read = %ld\n", pos);
+      printf("PBIO_READ4: return code *iret = %ld\n", *iret);
+ 
+}
+
+void pbread4(fortint* unit,char* buffer,size_t* nbytes,size_t* iret) {
+
+  pbread4_(unit,buffer,nbytes,iret);
+}
+void pbread5_(fortint* unit,char* buffer,size_t* nbytes,size_t* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function returns:
+//    status :   -2 = error in reading file,
+//               -1 = end-of-file,
+//               otherwise, = number of bytes read.
+*/
+    if( DEBUG )
+      printf("PBIO_READ5: number of bytes to read = %d\n", *nbytes);
+
+    *iret = read(*unit, buffer, *nbytes);
+
+    if( DEBUG )
+      printf("PBIO_READ5: number of bytes read = %d\n", *iret);
+/*
+// Error in file-handling
+*/
+    if(*iret == -1) {
+      *iret = -2;
+      perror("pbread5");
+      return;
+    }
+/*
+// Read problem
+*/
+    else if(*iret != *nbytes) {
+      printf("EOF; pbread5; bytes requested %d; read in: %d\n",
+             *nbytes,*iret);
+      *iret = -1;
+      return;
+    }
+ 
+}
+ 
+void pbread5(fortint* unit,char* buffer,size_t* nbytes,size_t* iret) {
+  pbread5_(unit,buffer,nbytes,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  oct_bin3
+//------------------------------------------------------------------------
+*/
+static int oct_bin3(int onum) {
+/*
+// Converts an integer to octal digits
+*/
+   char tmp[20];
+   int  rc;
+
+   sprintf(tmp,"%d",onum);
+   sscanf(tmp,"%o",&rc);
+   return rc; 
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBOPEN3 - Open file (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbopen3_(fortint* unit,_fcd name,_fcd mode,fortint* iret,fortint l1,fortint l2) {
+/*
+// Purpose:
+//   Opens file, return UNIX FILE pointer.
+//
+// Function returns:
+//   iret:  -1 = Could not open file.
+//          -2 = Invalid file name.
+//          -3 = Invalid open mode specified
+//           0 = OK.
+//
+// Note: l1 and l2 are the lengths of the character strings in 
+//       name and mode on SGI.
+*/
+char *p;
+int oflag;
+int dmas;
+int filemode;
+char  flags[4];
+
+#if (!defined CRAY) && (!defined VAX)
+char namebuff[NAMEBUFFLEN], modebuff[MODEBUFFLEN];
+#else
+char * namebuff, * modebuff;
+#endif
+
+/*
+// See if DEBUG switched on.
+*/
+    if( ! debugSet ) {
+      debugLevel = getenv("PBIO_DEBUG");
+      if( debugLevel == NULL )
+        debugSet = DEBUGOFF;              /* off */
+      else {
+        int loop;
+        for( loop = 0; loop < strlen(debugLevel) ; loop++ ) {
+          if( ! isdigit(debugLevel[loop]) ) {
+            printf("Invalid number string in PBIO_DEBUG: %s\n", debugLevel);
+            printf("PBIO_DEBUG must comprise only digits [0-9].\n");
+            debugSet = DEBUGOFF;
+          }
+        }
+        debugSet = DEBUGOFF + atol( debugLevel );
+      }
+      if( DEBUG ) printf("PBIO_PBOPEN3: debug switched on\n");
+    }
+
+#if (!defined CRAY) && (!defined VAX)
+/*
+// Put the character strings into buffers and ensure that there is a
+// null terminator (for SGI case when FORTRAN CHARACTER variable is full
+// right to end with characters
+*/
+    {
+     int n1, n2;
+
+      n1 = (l1>NAMEBUFFLEN) ? NAMEBUFFLEN : l1;
+      n2 = (l2>MODEBUFFLEN) ? MODEBUFFLEN : l2;
+   
+      strncpy( namebuff, name, n1);
+      strncpy( modebuff, mode, n2);
+      namebuff[n1] = '\0';
+      modebuff[n2] = '\0';
+    }
+#else
+    if(!(namebuff = fcd2char(name))) {
+      *iret = -2;
+      return;
+    }
+    if(!(modebuff = fcd2char(mode))) {
+      free(namebuff);
+      *iret = -2;
+      return;
+    }
+#endif
+
+    strcpy(flags,"");
+
+    *unit = 0;
+    *iret = 0;
+
+/*
+// Strip trailing blanks
+*/
+    p  = namebuff + strlen(namebuff) - 1 ;
+
+    while(*p == ' ') {
+      *p = 0;
+      p--;
+    }
+    if( DEBUG ) printf("PBIO_PBOPEN: filename = %s\n", namebuff);
+            
+/*
+// Build open flags from "modes"
+*/
+    p = modebuff;
+
+    switch(*p) {
+
+      case 'a':
+      case 'A': oflag = 0x100 | 2 | 0x08;
+                filemode = 766;
+                break;
+
+      case 'c':
+      case 'C':
+      case 'w':
+      case 'W': oflag = 0x100 | 1;
+                filemode = 766;
+                break;
+
+      case 'r':
+      case 'R': oflag = 0;
+                filemode = 444;
+                break;
+
+      default:  *iret = -3;
+                return;
+
+    }
+
+    if( DEBUG ) printf("PBIO_PBOPEN: file open mode = %s\n", modebuff);
+
+    dmas = umask(000);
+    *unit = open(namebuff, oflag, oct_bin3(filemode));
+    umask(dmas);
+
+    if(*unit == -1) {
+      perror(namebuff);
+      perror("pbopen3");
+      *iret = -2;
+    }
+
+    if( DEBUG ) printf("PBIO_PBOPEN3: file pointer = %0x\n", *unit);
+
+#if (defined CRAY) || (defined VAX)
+    free(namebuff);
+    free(modebuff);
+#endif
+
+}
+
+void pbopen3(fortint* unit,_fcd name,_fcd mode,fortint* iret,fortint l1,fortint l2) {
+
+  pbopen3_(unit,name,mode,iret,l1,l2);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBCLOSE3 - Close file (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbclose3_(fortint* unit,fortint* iret) {
+/*
+//
+// Purpose:  Closes file.
+//
+// Function returns:
+//   status : non-0 = error in handling file.
+//            0 = OK.
+*/
+    if( DEBUG ) printf("PBIO_PBCLOSE3: file pointer = %0x\n", *unit);
+
+    *iret = close(*unit);
+
+    if(*iret != 0) perror("pbclose3");
+}
+
+void pbclose3(fortint* unit,fortint* iret) {
+
+  pbclose3_(unit,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBSEEK3 - Seek (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbseek3_(fortint* unit,fortint* offset,fortint* whence,fortint* iret) {
+/*
+//
+// Purpose:  Seeks to specified location in file.
+//
+// Function returns:
+//   status: -2 = error in handling file,
+//           -1 = end-of-file
+//           otherwise,         = byte offset from start of file.
+//
+//   whence  = 0, from start of file
+//           = 1, from current position
+//           = 2, from end of file.  
+*/
+fortint my_offset = *offset;
+int my_whence;
+	
+    if( DEBUG ) {
+      printf("PBIO_PBSEEK3: file pointer = %0x\n", *unit);
+      printf("PBIO_PBSEEK3: offset = %d\n", my_offset);
+      printf("PBIO_PBSEEK3: type of offset = %d\n", *whence);
+    }
+
+/*
+// Must use negative offset if working from end-of-file
+*/
+    if( *whence == 2) {
+      my_offset = - abs(my_offset);
+      my_whence = 2;
+    }
+    else if(*whence == 0)
+    {
+      my_whence = 0;
+    }
+    else
+    {
+      my_whence = 1;
+    }
+
+    if((*iret=lseek(*unit, my_offset, my_whence)) < 0) {
+      perror("pbseek3;");
+      *iret = -1;           /* end-of-file  */
+    }
+
+    if( DEBUG )
+      printf("PBIO_PBSEEK3: byte offset from start of file = %d\n",*iret);
+
+}
+            
+void pbseek3(fortint* unit,fortint* offset,fortint* whence,fortint* iret) {
+
+  pbseek3_(unit,offset,whence,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBWRITE3 - Write (from FORTRAN)
+//------------------------------------------------------------------------
+*/
+void pbwrite3_(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+/*
+// Purpose:  Writes a block of bytes to a file.
+//
+// Function returns:
+//   status: -1 = Could not write to file.
+//           >=0 = Number of bytes written.
+*/
+    if( DEBUG ) {
+      printf("PBIO_PBWRITE3: file pointer = %0x\n", *unit);
+      printf("PBIO_WRITE#: number of bytes to write = %d\n", *nbytes);
+    }
+
+    *iret = write(*unit, buffer, *nbytes);
+    if( DEBUG )
+      printf("PBIO_WRITE3: number of bytes written = %d\n", *iret);
+
+    if( *iret != *nbytes ) {
+      perror("pbwrite3: ");
+      *iret = -1;
+    }
+
+}
+
+void pbwrite3(fortint* unit,char* buffer,fortint* nbytes,fortint* iret) {
+
+  pbwrite3_(unit,buffer,nbytes,iret);
+}
+
+/*
+//------------------------------------------------------------------------
+//  GRIBREAD
+//------------------------------------------------------------------------
+*/
+void gribread_(
+char* buffer,fortint* buffsize,fortint* readsize,fortint* status,fortint* unit){
+/*
+//  Called as a FORTRAN subroutine:
+//
+//    CALL GRIBREAD( KARRAY, KINLEN, KOUTLEN, IRET, KUNIT )
+//
+*/
+fortint holdsize = *buffsize;
+
+/*
+// Read GRIB product
+*/
+
+    *status = readprod("GRIB",buffer,&holdsize,fileRead,fileSeek,fileTell,
+                       CURRENT_FILE);
+    *readsize = abs(holdsize );
+
+    if( DEBUG ) {
+      printf("PBIO_GRIBREAD: fptable slot = %d. ", *unit);
+      printf("Number of bytes read = %d\n", *readsize);
+    }
+
+    return;
+}
+
+void gribread(
+char* buffer,fortint* buffsize,fortint* readsize,fortint* status,fortint* unit){
+
+  gribread_(buffer,buffsize,readsize,status,unit);
+}
+
+/*
+//------------------------------------------------------------------------
+//  BUFRREAD
+//------------------------------------------------------------------------
+*/
+void bufrread_(
+char* buffer,fortint* buffsize,fortint* readsize,fortint* status,fortint* unit){
+/*
+//  Called as a FORTRAN subroutine:
+//
+//    CALL BUFRREAD( KARRAY, KINLEN, KOUTLEN, IRET, KUNIT )
+//
+*/
+fortint holdsize = *buffsize;
+
+/*
+// Read BUFR product
+*/
+    *status = readprod("BUFR",buffer,&holdsize,fileRead,fileSeek,fileTell,
+                       CURRENT_FILE);
+    *readsize =  abs(holdsize );
+
+    if( DEBUG ) {
+      printf("PBIO_BUFRREAD: fptable slot = %d. ", *unit);
+      printf("Number of bytes read = %d\n", *readsize);
+    }
+
+    return;
+}
+
+void bufrread(
+char* buffer,fortint* buffsize,fortint* readsize,fortint* status,fortint* unit){
+
+  bufrread_(buffer,buffsize,readsize,status,unit);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PSEUREAD
+//------------------------------------------------------------------------
+*/
+void pseuread_(
+char* buffer,fortint* buffsize,fortint* readsize,fortint* status,fortint* unit){
+/*
+//  Called as a FORTRAN subroutine:
+//
+//    CALL PSEUREAD( KARRAY, KINLEN, KOUTLEN, IRET, KUNIT )
+//
+*/
+fortint holdsize = *buffsize;
+
+/*
+// Read GRIB product
+*/
+    *status = readprod(NULL,buffer,&holdsize,fileRead,fileSeek,fileTell,
+                       CURRENT_FILE);
+    *readsize = abs(holdsize );
+
+    if( DEBUG ) {
+      printf("PBIO_PSEUREAD: fptable slot = %d. ", *unit);
+      printf("Number of bytes read = %d\n", *readsize);
+    }
+
+    return;
+}
+
+void pseuread(
+char* buffer,fortint* buffsize,fortint* readsize,fortint* status,fortint* unit){
+
+  pseuread_(buffer,buffsize,readsize,status,unit);
+}
+
+/*
+//------------------------------------------------------------------------
+//  PBSIZE
+//------------------------------------------------------------------------
+*/
+void pbsize_(fortint* unit,fortint* plen) {
+/*
+//  Returns the size in bytes of the next GRIB, BUFR, TIDE, BUDG, DIAG
+//  product.
+//
+//  Called from FORTRAN:
+//      CALL PBSIZE( KUNIT, LENGTH)
+//
+//  unit  = file id returned from PBOPEN.
+//  plen  = size in bytes of the next product.
+//        = -2 if error allocating memory for internal buffer.
+//
+//  The input file is left positioned where it started.
+*/
+fortint iret;
+char statbuff[BUFFLEN];
+char * buff;
+long offset, loop = 1;
+
+/*
+//  Use a smallish buffer for processing; this should suffice for all cases
+//  except versions -1 and 0 of GRIB and large BUFR products
+*/
+    offset = (fortint) fileTell( CURRENT_FILE);
+    if( DEBUG ) {
+      printf("PBIO_SIZE: fptable slot = %d. ", *unit);
+      printf("Current file position = %d\n", offset);
+    }
+
+    *plen = BUFFLEN;
+    if( DEBUG )
+      printf("PBIO_SIZE: current buffer size = %d\n", *plen);
+
+    iret = readprod(NULL,statbuff,plen,fileRead,fileSeek,fileTell,CURRENT_FILE);
+    if( iret == -2 ) {
+      printf("readprod error %d\n", iret);
+      *plen = -2;
+      return;
+    }
+/*
+//  If the smallish buffer is too small, progressively increase it until 
+//  big enough
+*/
+    while ( iret == -4 ) {
+      loop++;
+      buff = (char *) malloc( BUFFLEN*loop);
+      if( buff == NULL) {
+        perror("malloc failed in PBSIZE");
+        *plen = -2;
+        return;
+      }
+      *plen = BUFFLEN*loop;
+      if( DEBUG )
+        printf("PBIO_SIZE: buffer size increased to: %d\n", *plen);
+
+      offset = (fortint) fileSeek( CURRENT_FILE, offset, SEEK_SET);
+      offset = (fortint) fileTell( CURRENT_FILE);
+      iret = readprod(NULL,buff,plen,fileRead,fileSeek,fileTell,CURRENT_FILE);
+      free(buff);
+    }
+
+    if( iret == -2 ) {
+      printf("readprod error %d\n", iret);
+      *plen = -2;
+    }
+/*
+//  Put the file pointer back where it started
+*/
+    if( DEBUG ) {
+      printf("PBIO_SIZE: file pointer set back to: %d\n", offset);
+      printf("PBIO_SIZE: Product size = %d\n", *plen);
+    }
+    offset = (fortint) fileSeek( CURRENT_FILE, offset, SEEK_SET);
+
+    return ;
+}
+
+void pbsize(fortint* unit,fortint* plen) {
+
+  pbsize_(unit,plen);
+}
+
+/*
+//------------------------------------------------------------------------
+//  CREXRD
+//------------------------------------------------------------------------
+*/
+#define END_OF_FILE -1
+#define FILE_READ_ERROR -2
+#define USER_BUFFER_TOO_SMALL -3
+#define FILE_TOO_SMALL -5
+#define MINIMUM_CREX_SIZE 13
+#define CREX 0x43524558
+
+typedef char * String;
+
+void crexrd_(String buffer,int* bufflen,int* size,int* status,fortint * unit) {
+/*
+//  Called from FORTRAN:
+//    CALL CREXRD( KARRAY, KINLEN, NREAD, IRET, KUNIT )
+*/
+int loop;
+OFF_T foundPosition;
+int number, crexFound = 0, endFound = 0;
+String endBuffer;
+String next;
+char plplcrcrlf7777[10] = {0,0,0,0,0,0,0,0,0,0};
+char PlPlCrCrLf7777[10] = {0x2b,0x2b,0x0d,0x0d,0x0a,0x37,0x37,0x37,0x37,0x00};
+
+/*
+// Check buffer big enough for CREX search
+*/
+  if( *bufflen < MINIMUM_CREX_SIZE ) {
+    *status = USER_BUFFER_TOO_SMALL;
+    return;
+  }
+
+/*
+// Look for CREX
+*/
+  for( loop = 0; loop <= 4; loop++) buffer[loop] = '\0';
+
+  while( !crexFound ) {
+    buffer[0] = buffer[1];
+    buffer[1] = buffer[2];
+    buffer[2] = buffer[3];
+    number = fread((buffer+3), 1, 1, CURRENT_FILE);
+    if( feof(CURRENT_FILE) ) {
+      *status = END_OF_FILE;
+      return;
+    }
+    if( (number != 1) || ferror(CURRENT_FILE) ) {
+      perror("crexrd file read error");
+      *status = FILE_READ_ERROR;
+      return;
+    }
+    if( strcmp(buffer,"CREX") == 0 ) {
+      crexFound = 1;
+#ifdef FOPEN64
+      foundPosition = ftello64(CURRENT_FILE) - 4;
+#else
+      foundPosition = ftell(CURRENT_FILE) - 4;
+#endif
+    }
+  }
+
+/*
+// Read some more characters into the buffer
+*/
+  number = fread((buffer+4), 1, ((*bufflen)-4), CURRENT_FILE);
+  if( ferror(CURRENT_FILE) ) {
+    perror("crexrd file read error");
+    *status = FILE_READ_ERROR;
+    return;
+  }
+  endBuffer = buffer + number + 3;
+    
+/*
+// Look for ++CrCrLf7777 at end of product
+*/
+  next = buffer+4;
+  endFound = 0;
+  for( loop = 0; loop < 8; loop++ )
+    plplcrcrlf7777[loop] = *(next++);
+  plplcrcrlf7777[9] = '\0';
+
+  while( (!endFound) && (next<=endBuffer) ) {
+    plplcrcrlf7777[8] = *(next++);
+    if( strcmp(plplcrcrlf7777,PlPlCrCrLf7777) == 0 ) {
+      endFound = 1;
+      *size = (int) (next - buffer);
+    }
+
+    for( loop = 0; loop < 8; loop++ )
+      plplcrcrlf7777[loop] = plplcrcrlf7777[loop+1];
+  }
+
+  if( !endFound ) {
+    if( feof(CURRENT_FILE) ) 
+      *status = END_OF_FILE;
+    else
+      *status = USER_BUFFER_TOO_SMALL;
+    return;
+  }
+
+/*
+// Position file at end of CREX product
+*/
+#ifdef FOPEN64
+  *status = fseeko64(CURRENT_FILE, (foundPosition+(*size)), 0);
+#else
+  *status = fseek(CURRENT_FILE, (foundPosition+(*size)), 0);
+#endif
+
+}
+
+void crexrd(String buffer,int* bufflen,int* size,int* status,fortint * unit) {
+
+  crexrd_(buffer,bufflen,size,status,unit);
+}
diff --git a/pbio/pbio_alpha.c b/pbio/pbio_alpha.c
new file mode 100755
index 0000000..52a98c4
--- /dev/null
+++ b/pbio/pbio_alpha.c
@@ -0,0 +1,754 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+static FILE** fptable = NULL;
+static int fptableSize = 0;
+#define BUFFLEN 4096
+
+#include "fortint.h"
+#include "fileRead.h"
+
+/*
+//      pbio_alpha.c
+*/
+#include "fort2c.h"
+#include "bufrgrib.h"
+ 
+#define NAMEBUFFLEN 256
+#define MODEBUFFLEN 10
+
+/*************************************************************************
+// FUNCTION:  pbopen - Open file (from FORTRAN)
+**************************************************************************
+*/
+void PBOPEN(fortint* unit, _fcd name, _fcd mode, fortint* iret, int l1, int l2){
+/*
+// Purpose:
+//  Opens file, returns the index of a UNIX FILE pointer held in 
+//  an internal table (fptable).
+//
+//  Function  accepts:
+//    name = filename
+//    mode = r, w
+//
+//    Note: l1 and l2 are the lengths of the FORTRAN character strings
+//          in name and mode.
+//
+//  Function returns:
+//   INTEGER iret:
+//     -1 = Could not open file.
+//     -2 = Invalid file name.
+//     -3 = Invalid open mode specified
+//      0 = OK.
+*/
+char *fname;
+char *modes;
+char *p;
+char flags[4];
+char namebuff[NAMEBUFFLEN], modebuff[MODEBUFFLEN];
+
+int n;
+
+/*
+// Put the character strings into buffers and ensure that there is a
+// null terminator (for case when FORTRAN CHARACTER variable is full
+// right to end with characters.
+*/
+    strncpy( namebuff, name, NAMEBUFFLEN - 1);
+    strncpy( modebuff, mode, MODEBUFFLEN - 1);
+    namebuff[l1] = '\0';
+    modebuff[l2] = '\0';
+
+    strcpy(flags,"");
+
+    *unit = NULL;
+    *iret = 0;
+
+/*
+// Convert Fortran to C string: file name.
+*/
+    if(!(fname = fcd2char(name))) {
+      *iret = -2;
+      return;
+    }
+
+/*
+// Strip trailing blanks.
+*/
+    p  = fname;
+    while(*p) {
+      if(*p == ' ') *p = 0;
+      p++;
+    }
+                
+/*
+// Convert Fortran to C string: open modes.
+*/
+    if(!(modes = fcd2char(mode))) {
+      free(fname);
+      *iret = -2;
+      return;
+    }
+
+/*
+// Build open flags from "modes".
+*/
+    p = modes;
+      switch(*p) {
+        case 'a':
+        case 'A': strcat(flags, "a");
+                  break;
+
+        case 'c':
+        case 'C':
+        case 'w':
+        case 'W': strcat(flags, "w");
+                  break;
+
+        case 'r':
+        case 'R': strcat(flags, "r");
+                  break;
+
+        default:  *iret = -3;
+                  return;
+
+      }
+
+/*
+// If read/write, change flags.
+*/
+    if( !strcmp(flags,"wr") || !strcmp(flags, "rw") ) strcpy(flags, "r+w" );
+
+/*
+// Look for a free slot in fptable.
+// (Create the table the first time through).
+*/
+    n = 0;
+    if( fptableSize == 0 ) {
+      int i;
+      fptableSize = 2;
+      fptable = (FILE **) malloc(fptableSize*sizeof(FILE *));
+      if( fptable == NULL ) {
+        perror("Unable to allocate space for table of FILE pointers");
+        exit(1);
+      }
+      for( i = 0; i < fptableSize; i++ )
+        fptable[i] = 0;
+    }
+    else {
+      while( n < fptableSize ) {
+        if (fptable[n]==0) {
+          *unit = n;
+          break;
+        }
+        n++;
+      }
+    }
+/*
+// If the table overflows, double its size.
+*/
+    if( n == fptableSize) {
+      int i;
+      fptableSize = 2*fptableSize;
+      fptable = (FILE **) realloc(fptable, fptableSize*sizeof(FILE *));
+      if( fptable == NULL ) {
+        perror("Unable to reallocate space for table of FILE pointers");
+        exit(1);
+      }
+      n = fptableSize/2;
+      for( i = n; i < fptableSize; i++ )
+        fptable[i] = 0;
+        *unit = n;
+    }
+
+    fptable[n] = fopen(fname, flags );
+
+    if(fptable[n] == NULL) {
+      perror(fname);
+      *iret = -1;
+    }
+
+    free(fname);
+    free(modes);
+
+    return;
+}
+
+/*************************************************************************
+//  FUNCTION:  pbseek_ - Seek (from FORTRAN)
+**************************************************************************
+*/
+void PBSEEK(fortint* unit, fortint* offset, fortint* whence, fortint* iret) {
+/*
+//
+// Purpose:
+//   Seeks to a specified location in file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    offset = byte count
+//
+//    whence  = 0, from start of file
+//            = 1, from current position
+//            = 2, from end of file.  
+//
+//  Returns:
+//    iret:
+//      -2 = error in handling file,
+//      -1 = end-of-file
+//      otherwise,  = byte offset from start of file.
+*/
+fortint my_offset;
+fortint my_whence;
+
+    my_offset = *offset;
+    my_whence = *whence;
+
+/*
+// Must use negative offset if working from end-of-file
+*/
+    if( my_whence == 2) my_offset = - abs(my_offset);
+
+    *iret = fileTell(fptable[*unit]);
+    if( *iret == my_offset && my_whence == 0)
+      *iret = 0;
+    else
+      *iret = fileSeek(fptable[*unit], my_offset, my_whence);
+
+    if( *iret != 0 ) {
+      if ( ! feof(fptable[*unit]) ) {
+        *iret = -2;             /* error in file-handling */
+        perror("pbseek");
+      }
+      else
+        *iret = -1;             /* end-of-file  */
+
+      clearerr(fptable[*unit]);
+      return;
+    }
+
+/*
+// Return the byte offset from start of file
+*/
+    *iret = fileTell(fptable[*unit]);
+
+    return;
+}
+ 
+/*************************************************************************
+*  FUNCTION:  pbread_ - Read (from FORTRAN)
+**************************************************************************
+*/
+void PBREAD(fortint* unit, char * buffer, fortint* nbytes, fortint* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    nbytes = number of bytes to read.
+//
+//  Returns:
+//    iret:
+//      -2 = error in reading file,
+//      -1 = end-of-file,
+//      otherwise, = number of bytes read.
+*/
+    if( (*iret = fread(buffer, 1, *nbytes, fptable[*unit]) ) != *nbytes) {
+      if( ! feof(fptable[*unit]) ) {
+        *iret = -2;             /*  error in file-handling  */
+        perror("pbread");
+        clearerr(fptable[*unit]);
+        return;
+      }
+      else {
+        *iret = -1;             /*  end-of-file */
+        clearerr(fptable[*unit]);
+      }
+    }
+
+    return;
+}
+ 
+/*************************************************************************
+*  FUNCTION:  pbread2_ - Read (from FORTRAN)
+**************************************************************************
+*/
+void PBREAD2(fortint* unit, char * buffer, fortint* nbytes, fortint* iret) {
+/*
+// Purpose:
+//  Reads a block of bytes from a file..
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    nbytes = number of bytes to read.
+//
+//  Returns:
+//    iret:
+//      -2 = error in reading file,
+//      -1 = end-of-file,
+//      otherwise, = number of bytes read.
+*/
+    if( (*iret = fread(buffer, 1, *nbytes, fptable[*unit]) ) != *nbytes) {
+      if( ! feof(fptable[*unit]) ) {
+        *iret = -2;             /*  error in file-handling  */
+        perror("pbread");
+        clearerr(fptable[*unit]);
+        return;
+      }
+      else {
+        *iret = -1;             /*  end-of-file */
+        clearerr(fptable[*unit]);
+      }
+    }
+
+    return;
+}
+
+/*************************************************************************
+*  FUNCTION:  pbwrite_ - Write (from FORTRAN)
+**************************************************************************
+*/
+void PBWRITE(fortint* unit, char * buffer, fortint* nbytes, fortint* iret) {
+/*
+// Purpose:
+//  Writes a block of bytes to a file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//    nbytes = number of bytes to write.
+//
+//  Returns:
+//    iret:
+//      -1 = Could not write to file.
+//     >=0 = Number of bytes written.
+*/
+    if ( (*iret = fwrite(buffer, 1, *nbytes, fptable[*unit]) ) != *nbytes) {
+      perror("pbwrite");
+      *iret = -1;
+    }
+
+    return;
+}
+
+/*************************************************************************
+*  FUNCTION:  pbclos_ - clos (from FORTRAN)
+**************************************************************************
+*/
+fortint PBCLOSE(fortint* unit, fortint* iret)
+/*
+// Purpose:
+//  Closes file.
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+////  Returns:
+//    iret:
+//      0 = OK.
+//      otherwise = error in handling file.
+*/
+{
+    *iret = fclose(fptable[*unit]);
+    fptable[*unit] = 0;
+
+    if(*iret != 0) {
+      perror("pbclose");
+      return (1);
+    }
+
+    return (0);
+
+}
+
+void GRIBREAD(char * buffer, fortint* buffsize, fortint* readsize,
+              fortint* status, fortint* stream) {
+/*
+//  Called as a FORTRAN subroutine:
+//
+//    CALL GRIBREAD( KARRAY, KINLEN, KOUTLEN, IRET, KUNIT )
+//
+*/
+fortint holdsize = *buffsize;
+
+/*
+// Read GRIB product
+*/
+    *status = readprod("GRIB",buffer,&holdsize,fileRead,fileSeek,fileTell,
+                       fptable[*stream]);
+    *readsize = abs(holdsize );
+    return;
+}
+
+void BUFRREAD(char * buffer, fortint* buffsize, fortint* readsize,
+              fortint* status, fortint* stream) {
+/*
+//  Called as a FORTRAN subroutine:
+//
+//    CALL BUFRREAD( KARRAY, KINLEN, KOUTLEN, IRET, KUNIT )
+//
+*/
+fortint holdsize = *buffsize;
+
+/*
+// Read BUFR product
+*/
+    *status = readprod("BUFR",buffer,&holdsize,fileRead,fileSeek,fileTell,
+                       fptable[*stream]);
+    *readsize =  abs(holdsize );
+    return;
+}
+
+void PSEUREAD(char * buffer, fortint* buffsize, fortint* readsize,
+              fortint* status, fortint* stream) {
+/*
+//  Called as a FORTRAN subroutine:
+
+//    CALL PSEUREAD( KARRAY, KINLEN, KOUTLEN, IRET, KUNIT )
+
+*/
+fortint holdsize = *buffsize;
+
+/*
+// Read GRIB product
+*/
+    *status = readprod(NULL,buffer,&holdsize,fileRead,fileSeek,fileTell,
+                       fptable[*stream]);
+    *readsize = abs(holdsize );
+    return;
+}
+
+/*************************************************************************
+// FUNCTION:  pbopen - Open file (from FORTRAN)
+**************************************************************************
+*/
+void PBSIZE(fortint* unit, fortint* plen) {
+/*
+// Purpose:
+//  Returns the size in bytes of the next GRIB, BUFR, TIDE, BUDG, DIAG
+//  product.
+//
+//  Called from FORTRAN:
+//      CALL PBSIZE( KUNIT, LENGTH)
+//
+//  Function  accepts:
+//    unit = the index of a UNIX FILE pointer held in
+//           an internal table (fptable).
+//
+//  Returns:
+//    plen  = size in bytes of the next product.
+//          = -2 if error allocating memory for internal buffer.
+//
+//  The input file is left positioned where it started.
+*/
+fortint iret;
+char statbuff[BUFFLEN];
+char * buff;
+fortint offset, loop = 1;
+FILE *in = fptable[*unit];
+
+/*
+// Use a smallish buffer for processing; this should suffice for all cases
+// except versions -1 and 0 of GRIB and large BUFR products
+*/
+    offset = (fortint) fileTell( in);
+    *plen = BUFFLEN;
+    iret = readprod(NULL,statbuff,plen,fileRead,fileSeek,fileTell,in);
+    if( iret == -2 ) {
+      printf("readprod error %d\n", iret);
+      *plen = -2;
+      return;
+    }
+/*
+// If the smallish buffer is too small, progressively increase it until 
+// big enough */
+
+  while ( iret == -4 ) {
+    loop++;
+    buff = (char *) malloc( BUFFLEN*loop);
+    if( buff == NULL) {
+      perror("malloc failed in PBSIZE");
+      *plen = -2;
+      return;
+    }
+    *plen = BUFFLEN*loop;
+    offset = (fortint) fileSeek( in, offset, SEEK_SET);
+    offset = (fortint) fileTell( in);
+    iret = readprod(NULL,buff,plen,fileRead,fileSeek,fileTell,in);
+    free(buff);
+  }
+
+  if( iret == -2 ) {
+    printf("readprod error %d\n", iret);
+    *plen = -2;
+  }
+/*
+// Put the file pointer back where it started
+*/
+    offset = (fortint) fileSeek( in, offset, SEEK_SET);
+
+    return;
+}
+
+#define PBOPEN3  pbopen3_
+#define PBREAD3  pbread3_
+#define PBWRITE3 pbwrite3_
+#define PBSEEK3  pbseek3_
+#define PBCLOSE3 pbclose3_
+
+
+void PBREAD3(fortint  *unit, char * buffer, fortint * nbytes, fortint * iret)
+/*
+*
+* Purpose:      Reads a block of bytes from a file.
+*
+* Function returns:          status :   -2 = error in reading file,
+*                                       -1 = end-of-file,
+*                               otherwise, = number of bytes read.
+*/
+{
+ 
+    *iret = read(*unit, buffer, *nbytes);
+
+                                                /*      Read problem */
+    if (*iret == -1)
+    {
+        *iret = -2;             /*  error in file-handling  */
+        perror("pbread3");
+        return;
+    }
+    else if (*iret != *nbytes)
+    {
+        *iret = -1;
+        printf("EOF; pbread3; bytes requested %d; read in: %d\n",
+        *nbytes,*iret);
+        return;
+    }
+ 
+}
+ 
+static oct_bin3(int onum)
+{
+   char tmp[20];
+   int  rc;
+
+   sprintf(tmp,"%d",onum);
+   sscanf(tmp,"%o",&rc);
+   return rc; 
+}
+void PBOPEN3(fortint *unit, _fcd name, _fcd mode, fortint * iret,
+            fortint l1, fortint l2)
+/*
+* Purpose:  Opens file, return UNIX FILE pointer.
+*
+* Function returns:      iret:  -1 = Could not open file.
+*                               -2 = Invalid file name.
+*                               -3 = Invalid open mode specified
+*                                0 = OK.
+*
+*    Note: l1 and l2 are the lengths of the character strings in 
+*          name and mode on SGI.
+*/
+{
+char *fname;
+char *modes;
+char *p;
+int oflag;
+int dmas;
+int filemode;
+
+#if (!defined CRAY) && (!defined VAX)
+char namebuff[NAMEBUFFLEN], modebuff[MODEBUFFLEN];
+
+/* Put the character strings into buffers and ensure that there is a
+   null terminator (for SGI case when FORTRAN CHARACTER variable is full
+   right to end with characters */
+    strncpy( namebuff, name, NAMEBUFFLEN - 1);
+    strncpy( modebuff, mode, MODEBUFFLEN - 1);
+    namebuff[l1] = '\0';
+    modebuff[l2] = '\0';
+#endif
+
+
+    *unit = 0;
+    *iret = 0;
+
+    /* convert fortran to c string : file name */
+
+#if (!defined CRAY) && (!defined VAX)
+    if(!(fname = fcd2char(namebuff)))
+#else
+    if(!(fname = fcd2char(name)))
+#endif
+    {
+        *iret = -2;
+        return;
+    }
+
+    /* strip trailing blanks */
+
+    p  = fname + strlen(fname) - 1 ;
+    while(*p == ' ')
+    {
+        *p = 0;
+    p--;
+    }
+            
+    /* convert fortran to c string : open modes  */
+    
+#if (!defined CRAY) && (!defined VAX)
+    if(!(modes = fcd2char(modebuff)))
+#else
+    if(!(modes = fcd2char(mode)))
+#endif
+    {
+        free(fname);
+        *iret = -3;
+        return;
+    }
+
+    /* build open flags from "modes" */
+
+    p = modes;
+    while(*p)
+    {
+        switch(*p)
+        {
+            case '+': break;
+
+            case 'a':
+            case 'A': oflag = 0x100 | 2 | 0x08;
+                      filemode = 766;
+                      break;
+
+            case 'c':
+            case 'C':
+            case 'w':
+            case 'W': oflag = 0x100 | 1;
+                      filemode = 766;
+                      break;
+
+            case 'r':
+            case 'R': oflag = 0;
+                      filemode = 444;
+                      break;
+
+            default:  *iret = -3;
+                      return;
+
+         }
+         p++;
+    }
+
+
+    dmas = umask(000);
+    *unit = open(fname, oflag, oct_bin3(filemode));
+    umask(dmas);
+
+    if(*unit == -1)
+    {
+        perror(fname);
+        perror("pbopen3");
+        *iret = -2;
+    }
+
+
+    free(fname);
+    free(modes);
+
+}
+
+
+void PBCLOSE3( fortint * unit, fortint * iret)
+/*
+*
+* Purpose:  Closes file.
+*
+* Function returns:      status : non-0 = error in handling file.
+*                                             0 = OK.
+*/
+{
+    *iret = close(*unit);
+
+    if(*iret != 0) perror("pbclose3");
+
+}
+
+void PBSEEK3(fortint * unit, fortint * offset, fortint * whence, fortint * iret)
+/*
+*
+* Purpose:  Seeks to specified location in file.
+*
+* Function returns: status :        -2 = error in handling file,
+*                                   -1 = end-of-file
+*                       otherwise,         = byte offset from start of file.
+*
+*   whence  = 0, from start of file
+*           = 1, from current position
+*           = 2, from end of file.  
+*/
+{
+fortint my_offset = *offset;
+int my_whence;
+
+    if ( *whence == 2)
+    {
+         my_offset = - abs(my_offset);
+         my_whence = 2;
+    }
+    else if (*whence == 0)
+    {
+         my_whence = 0;
+    }
+    else
+    {
+         my_whence = 1;
+    }
+     
+                            /* must use negative offset if working
+                               from end-of-file     */
+
+   if ((*iret=lseek(*unit, my_offset, my_whence)) < 0)
+   {
+      perror("pbseek3;");
+      *iret = -1;           /* end-of-file  */
+   }
+
+}
+            
+void PBWRITE3( fortint * unit, char * buffer, fortint * nbytes, fortint *iret)
+/*
+* Purpose:  Writes a block of bytes to a file.
+*
+* Function returns:      status : -1 = Could not write to file.
+*                                    >=0 = Number of bytes written.
+*/
+{
+   if ((*iret = write(*unit, buffer, *nbytes)) != *nbytes)
+   {
+       perror("pbwrite3: ");
+        *iret = -1;
+   }
+
+}
+
diff --git a/pbio/pbionum.F b/pbio/pbionum.F
new file mode 100755
index 0000000..388e094
--- /dev/null
+++ b/pbio/pbionum.F
@@ -0,0 +1,124 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+      INTEGER FUNCTION PBIONUM(KONOFF)
+C
+C---->
+C**** PBIONUM
+C
+C     Purpose
+C     -------
+C
+C     Returns current PBIO_CYCLE version number.
+C
+C
+C     Interface
+C     ---------
+C
+C     INUM = PBIONUM(KONOFF)
+C
+C     Input
+C     -----
+C
+C     KONOFF - switch for displayed message
+C              = 0 if display is required on the first call
+C              = non-zero if display is not required
+C
+C
+C     Output
+C     ------
+C
+C     Returns a 6-digit version number, aaabbc, where:
+C       aaa = 3-digit major number
+C       bb  = 2-digit minor number
+C       c   = 1-digit spare number (normally 0)
+C     
+C
+C     Method
+C     ------
+C
+C     Reads a 6-digit version number from the environment variable
+C     PBIO_CYCLE. If this does not give a 6-digit number, an internal
+C     hard-coded default value is used.
+C
+C     On the first call, the function (optionally) displays a message:
+C
+C       **************************************
+C       * PBIO_CYCLE version number = aaabbc *
+C       **************************************
+C     
+C
+C     Externals
+C     ---------
+C
+C     None.
+C     
+C
+C     Author
+C     ------
+C
+C     J.D.Chambers     ECMWF     May 1998
+C
+C
+C----<
+C ------------------------------------------------------------------
+C*    Section 0.   Variables.
+C ------------------------------------------------------------------
+C
+C
+      IMPLICIT NONE
+C
+#include "grprs.h"
+C
+C     Function arguments
+C
+      INTEGER KONOFF
+C
+C     Local variables
+C
+      INTEGER INUMBER, ICOUNT, IOFFSET
+      SAVE INUMBER, ICOUNT
+      CHARACTER*38 CMESS
+      CHARACTER*20 YNUMBER
+C
+      DATA INUMBER/000010/, ICOUNT/0/
+      DATA CMESS/'* PBIO_CYCLE version number = ****** *'/
+C
+C ------------------------------------------------------------------
+C*    Section 1.   Initialise
+C ------------------------------------------------------------------
+C
+  100 CONTINUE
+C
+      IF( ICOUNT.EQ.0 ) THEN
+C
+C       See if the environment variable has an override value
+C
+        CALL GETENV( 'PBIO_CYCLE', YNUMBER)
+        IOFFSET = INDEX( YNUMBER, ' ')
+        IF( IOFFSET.EQ.7 ) THEN
+          READ(YNUMBER,'(I6.6)') INUMBER
+        ENDIF
+C
+C       First time through, display the message if required
+C
+        IF( KONOFF.EQ.0 ) THEN
+          WRITE(CMESS(31:36),'(I6.6)') INUMBER
+          WRITE(GRPRSM,*) '**************************************'
+          WRITE(GRPRSM,*) CMESS
+          WRITE(GRPRSM,*) '**************************************'
+        ENDIF
+        ICOUNT = 1
+      ENDIF
+C
+      PBIONUM = INUMBER
+C
+      RETURN
+      END
diff --git a/pbio/pbpseu.F b/pbio/pbpseu.F
new file mode 100755
index 0000000..a366c40
--- /dev/null
+++ b/pbio/pbpseu.F
@@ -0,0 +1,123 @@
+C Copyright 1981-2012 ECMWF.
+C
+C This software is licensed under the terms of the Apache Licence 
+C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+C
+C In applying this licence, ECMWF does not waive the privileges and immunities 
+C granted to it by virtue of its status as an intergovernmental organisation 
+C nor does it submit to any jurisdiction.
+C
+
+	SUBROUTINE PBPSEU(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C---->
+C**** PBPSEU
+C
+C     PURPOSE
+C     _______
+C
+C     Reads next PSEUDO GRIB product from a file.
+C
+C     INTERFACE
+C     _________
+C
+C     CALL PBPSEU(KUNIT,KARRAY,KINLEN,KOUTLEN,KRET)
+C
+C
+C     Input parameters
+C     ________________
+C
+C     KUNIT  - 	Unit number for the file returned from PBOPEN
+C     KARRAY -	FORTRAN array big enough to hold the PSEU product
+C     KINLEN -	Size in BYTES of the FORTRAN array
+C
+C
+C     Output parameters
+C     ________________
+C     
+C     KOUTLEN -	Size in BYTES of the PSEU product read	
+C     KRET    -	 0  if a PSEU product has been successfully read
+C     		-1  if end-of-file is hit before a PSEU product is read
+C     		-3  if the size of KARRAY is not sufficient for the 
+C     		    PSEU product
+C
+C
+C     Common block usage
+C     __________________
+C
+C     None.
+C
+C
+C     Method
+C     ______
+C
+C     Calls PSEUREAD.
+C
+C
+C     Externals
+C     _________
+C
+C     PSEUREAD - Read next PSEUDO GRIB product.
+C
+C
+C     AUTHOR
+C     ______
+C
+C     J.D.Chambers       ECMWF
+C
+C
+C     MODIFICATIONS
+C     _____________
+C
+C     None.
+C
+C******************************************************************************
+C----<
+C
+C     Subroutine arguments
+C
+      INTEGER KARRAY(1)
+      INTEGER KUNIT,KINLEN,KOUTLEN,KRET
+C
+C     Local argument(s)
+C
+      INTEGER NREAD, IRET
+C
+C     Get the PSEU product
+C
+      CALL PSEUREAD( KARRAY, KINLEN, NREAD, IRET, KUNIT )
+C
+C     Escape if the user buffer is too small to hold even the early sections of
+C     the product or EOF encountered
+C
+      IF( IRET.EQ.-4 ) THEN
+        KOUTLEN = NREAD
+        KRET = -1
+        RETURN
+      ENDIF
+C
+C     Escape if no PSEU product is found in the file
+C
+      IF( IRET.EQ.-1 ) THEN
+        KOUTLEN = 0
+    	KRET = -1
+    	RETURN
+      ENDIF
+C
+C     Check if the array is big enough for the PSEU product
+C
+      IF( IRET.EQ.-3 ) THEN
+        KOUTLEN = NREAD
+    	KRET = -3
+    	RETURN
+      ENDIF
+C
+C     Set success code if product retrieved
+C
+      IF( NREAD.GE.0 )  THEN
+    	KOUTLEN = NREAD
+    	KRET = 0
+      ENDIF
+C
+      RETURN 
+      END
diff --git a/pbio/pbsize.c b/pbio/pbsize.c
new file mode 100755
index 0000000..57722c0
--- /dev/null
+++ b/pbio/pbsize.c
@@ -0,0 +1,88 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifndef VAX
+#include <unistd.h>
+#endif
+#include "bufrgrib.h"
+#include "fortint.h"
+
+#define BUFFLEN 4096
+
+#include "fileRead.h"
+
+void PBSIZE(FILE ** in, fortint * plen)
+/*
+    Returns the size in bytes of the next GRIB, BUFR, TIDE, BUDG, DIAG
+    product.
+
+    Called from FORTRAN:
+        CALL PBSIZE( KUNIT, LENGTH)
+
+    in    = file id returned from PBOPEN.
+    plen  = size in bytes of the next product.
+          = -2 if error allocating memory for internal buffer.
+
+    The input file is left positioned where it started.
+*/
+{
+fortint iret;
+char statbuff[BUFFLEN];
+char * buff;
+long offset, loop = 1;
+
+/*  Use a smallish buffer for processing; this should suffice for all cases
+    except versions -1 and 0 of GRIB and large BUFR products */
+
+    offset = (fortint) fileTell( *in);
+    *plen = BUFFLEN;
+    iret = readprod(NULL,statbuff,plen,fileRead,fileSeek,fileTell,*in);
+    if( iret == -2 )
+    {
+        printf("readprod error %d\n", iret);
+        *plen = -2;
+        return;
+    }
+
+/*  If the smallish buffer is too small, progressively increase it until 
+    big enough */
+
+    while ( iret == -4 )
+    {
+        loop++;
+        buff = (char *) malloc( BUFFLEN*loop);
+        if( buff == NULL) 
+        {
+            perror("malloc failed in PBSIZE");
+            *plen = -2;
+            return;
+        }
+        *plen = BUFFLEN*loop;
+        offset = (fortint) fileSeek( *in, offset, SEEK_SET);
+        offset = (fortint) fileTell( *in);
+        iret = readprod(NULL,buff,plen,fileRead,fileSeek,fileTell,*in);
+        free(buff);
+    }
+
+    if( iret == -2 )
+    {
+        printf("readprod error %d\n", iret);
+        *plen = -2;
+    }
+        
+/*  Put the file pointer back where it started */
+
+    offset = (fortint) fileSeek( *in, offset, SEEK_SET);
+
+    return ;
+}
diff --git a/pbio/readany.c b/pbio/readany.c
new file mode 100755
index 0000000..dcd2ba2
--- /dev/null
+++ b/pbio/readany.c
@@ -0,0 +1,65 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	readany.c
+*/
+#include "bufrgrib.h"
+#include "fortint.h"
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "fileRead.h"
+
+
+fortint readany(FILE * file, char * buffer, fortint * prod_len)
+/*
+
+    file          =  file pointer returned from PBOPEN
+
+    buffer        = buffer big enough to hold the product
+
+    prod_len      = size of the buffer on input, becomes size in BYTES of 
+                    the product read.  If the end-of-file is hit, the
+                    value is returned unchanged (ie. when the function return
+                    code is -1).
+
+    Function returns:
+
+        0  if a product has been successfully read
+
+       -1  if end-of-file is hit before a product is read
+
+       -2  if there is an error in the file-handling 
+	   (eg. if the file contains a truncated product)
+
+       -3  if the size of buffer is not sufficient for the product
+
+*/
+{
+
+/* Read the product */
+fortint length;
+fortint original_len;
+
+    original_len = *prod_len;
+    length =  readprod(NULL,buffer,&original_len,fileRead,fileSeek,fileTell,
+                       file);
+    *prod_len = original_len;
+
+    if ( buffer == NULL )
+        return ( length == -1 ? length : -3 );
+    else
+        return ( length > 0 ? 0 : length );
+
+}
diff --git a/pbio/readbufr.c b/pbio/readbufr.c
new file mode 100755
index 0000000..39bac41
--- /dev/null
+++ b/pbio/readbufr.c
@@ -0,0 +1,61 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	readbufr.c
+*/
+#include "bufrgrib.h"
+#include "fortint.h"
+
+#include "fileRead.h"
+
+
+fortint readbufr(FILE * file, char * buffer, fortint * bufr_prod_len)
+/*
+
+    file          =  file pointer returned from PBOPEN
+
+    buffer        = buffer big enough to hold the BUFR product
+
+    bufr_prod_len = size of the buffer on input, becomes size in BYTES of 
+                    the BUFR product read.  If the end-of-file is hit, the
+                    value is returned unchanged (ie. when the function return
+                    code is -1).
+
+    Function returns:
+
+        0  if a BUFR product has been successfully read
+
+       -1  if end-of-file is hit before a BUFR product is read
+
+       -2  if there is an error in the file-handling 
+	   (eg. if the file contains a truncated BUFR product)
+
+       -3  if the size of buffer is not sufficient for the BUFR product
+
+*/
+{
+
+/* Read the BUFR product */
+fortint length;
+fortint original_len;
+
+    original_len = *bufr_prod_len;
+    length =  readprod("BUFR",buffer,&original_len,fileRead,fileSeek,
+                       fileTell,file);
+    *bufr_prod_len = original_len;
+
+    if ( buffer == NULL )
+        return ( length == -1 ? length : -3 );
+    else
+        return ( length > 0 ? 0 : length );
+
+}
diff --git a/pbio/readcrex.c b/pbio/readcrex.c
new file mode 100755
index 0000000..a3f4431
--- /dev/null
+++ b/pbio/readcrex.c
@@ -0,0 +1,60 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	readcrex.c
+*/
+#include "bufrgrib.h"
+#include "fortint.h"
+#include "fileRead.h"
+#include "sizeRoutines.h"
+
+fortint readcrex(FILE * file, char * buffer, fortint * crex_prod_len)
+/*
+
+    file          =  file pointer returned from PBOPEN
+
+    buffer        = buffer big enough to hold the CREX product
+
+    crex_prod_len = size of the buffer on input, becomes size in BYTES of 
+                    the CREX product read.  If the end-of-file is hit, the
+                    value is returned unchanged (ie. when the function return
+                    code is -1).
+
+    Function returns:
+
+        0  if a CREX product has been successfully read
+
+       -1  if end-of-file is hit before a CREX product is read
+
+       -2  if there is an error in the file-handling 
+	   (eg. if the file contains a truncated CREX product)
+
+       -3  if the size of buffer is not sufficient for the CREX product
+
+*/
+{
+
+/* Read the CREX product */
+fortint length;
+fortint original_len;
+
+    original_len = *crex_prod_len;
+    length =  readprod("CREX",buffer,&original_len,fileRead,fileSeek,
+                        fileTell,file);
+    *crex_prod_len = original_len;
+
+    if ( buffer == NULL )
+        return ( length == -1 ? length : -3 );
+    else
+        return ( length > 0 ? 0 : length );
+
+}
diff --git a/pbio/readgrib.c b/pbio/readgrib.c
new file mode 100755
index 0000000..91ad249
--- /dev/null
+++ b/pbio/readgrib.c
@@ -0,0 +1,63 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	readgrib.c
+*/
+#include "bufrgrib.h"
+#include "fortint.h"
+
+#include "fileRead.h"
+
+#include "sizeRoutines.h"
+
+
+fortint readgrib(FILE * file, char * buffer, fortint * grib_prod_len)
+/*
+
+    file          =  file pointer returned from PBOPEN
+
+    buffer        = buffer big enough to hold the GRIB product
+
+    grib_prod_len = size of the buffer on input, becomes size in BYTES of 
+                    the GRIB product read.  If the end-of-file is hit, the
+                    value is returned unchanged (ie. when the function return
+                    code is -1).
+
+    Function returns:
+
+        0  if a GRIB product has been successfully read
+
+       -1  if end-of-file is hit before a GRIB product is read
+
+       -2  if there is an error in the file-handling 
+	   (eg. if the file contains a truncated GRIB product)
+
+       -3  if the size of buffer is not sufficient for the GRIB product
+
+*/
+{
+
+/* Read the GRIB product */
+fortint length;
+fortint original_len;
+
+    original_len = *grib_prod_len;
+    length =  readprod("GRIB",buffer,&original_len,fileRead,fileSeek,
+                        fileTell,file);
+    *grib_prod_len = original_len;
+
+    if ( buffer == NULL )
+        return ( length == -1 ? length : -3 );
+    else
+        return ( length > 0 ? 0 : length );
+
+}
diff --git a/pbio/readnext.c b/pbio/readnext.c
new file mode 100755
index 0000000..761dea0
--- /dev/null
+++ b/pbio/readnext.c
@@ -0,0 +1,73 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+	readnext.c
+*/
+#include "bufrgrib.h"
+#include "fortint.h"
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "fileRead.h"
+
+
+fortint readnext(char * buffer, fortint * grib_prod_len, 
+              fortint (*read_func)(char *, fortint , void *), void * stream)
+/*
+
+    buffer        = buffer big enough to hold the next product.
+                    If buffer = NULL, the function will return the 
+                    length of the product, but not the product itself.
+
+    grib_prod_len = size of the buffer on input, becomes size in BYTES of 
+                    the next product read.  If the end-of-file is hit, the
+                    value is returned unchanged (ie. when the function return
+                    code is -1).
+
+    read_func     = function to read input stream
+
+    stream        = data for read_function, eg. file pointer returned 
+                    from PBOPEN
+
+    Function returns:
+
+        0  if a product has been successfully read
+
+       -1  if end-of-file is hit before a product is read
+
+       -2  if there is an error in the file-handling 
+	   (eg. if the file contains a truncated product)
+
+       -3  if the size of buffer is not sufficient for the product
+
+       -4  if buffer too small to start in on product
+
+*/
+{
+
+/* Read the product */
+fortint length;
+fortint original_len;
+
+    original_len = *grib_prod_len;
+    length =  readprod(NULL,buffer,&original_len,fileRead,fileSeek,fileTell,
+                       stream);
+    *grib_prod_len = original_len;
+
+    if ( buffer == NULL )
+        return ( length == -1 ? length : -3 );
+    else
+        return ( length > 0 ? 0 : length );
+
+}
diff --git a/pbio/readprod.c b/pbio/readprod.c
new file mode 100755
index 0000000..bc2fcab
--- /dev/null
+++ b/pbio/readprod.c
@@ -0,0 +1,891 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+//    readprod.c
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#ifdef FOPEN64
+#define OFF_T off64_t
+#else
+#define OFF_T off_t
+#endif
+
+#ifdef sun4
+#include <memory.h>
+#endif
+
+#include "bufrgrib.h"
+#include "fortint.h"
+#include "fileRead.h"
+#include "sizeRoutines.h"
+
+#define THREE_BYTE_LONG(p) ((((*(p))<<16) & 0xff0000) | (((*(p+1))<<8) & 0xff00) | (*(p+2)) & 0xff)
+#define CHECK(stat,message,code) if((stat)) {perror(message);return(code);}
+
+#define WMOBIT1 0x80
+#define WMOBIT2 0x40
+#define WMOBIT7 0x02
+#define WMOBIT8 0x01
+
+#define END_OF_FILE      -1
+#define INTERNAL_ERROR   -2
+#define BUFFER_TOO_SMALL -3
+#define USER_BUFFER_TINY -4
+#define MISPLACED_7777   -5
+
+#define SECT_0_LEN 4
+#define LEN_7777 4
+#define SMALL 40
+#define LARGEBUF 200000
+
+#define GRIB 0x47524942
+#define BUFR 0x42554652
+#define BUDG 0x42554447
+#define TIDE 0x54494445
+#define DIAG 0x44494147
+#define CREX 0x43524558
+#define CODE_7777 0x37373737
+
+static int grab(char * , char * , long ,long ,long * );
+static fortint waveLength(char * );
+
+#ifdef FOPEN64
+fortint readprod( char * prod_id, char * buffer, fortint * size, 
+              fortint (*fileRead)(char *, fortint , void *),
+              OFF_T (*fileSeek)(void *, OFF_T, fortint),
+              OFF_T (*fileTell)(void *),
+              void * stream)
+#else
+fortint readprod( char * prod_id, char * buffer, fortint * size, 
+              fortint (*fileRead)(char *, fortint , void *),
+              fortint (*fileSeek)(void *, fortint, fortint),
+              fortint (*fileTell)(void *),
+              void * stream)
+#endif
+/*
+//  Reads a BUFR, GRIB, BUDG, TIDE, DIAG product.
+//
+//  prod_id = "BUFR", "GRIB", "BUDG", "TIDE", "DIAG" ...
+//  buffer = buffer to hold product,
+//  size = on input, size of buffer in bytes,
+//         on output, number of bytes read.
+//  fileRead = function used to read the product,
+//  fileSeek = function used to reposition within the product byte stream,
+//  fileTell = function used to report the current byte position within
+//             the product byte stream,
+//  stream = data describing the input stream (eg. FILE *).
+//
+//  Returns 
+//    -1 if can't find product  (eg. end-of-file)
+//    -2 if internal processing error (malloc fail, file seek error)
+//    -3 if buffer too small for whole product.
+//    -4 if user buffer too small to even start product processing.
+//    -5 if the 7777 group is in the wrong place
+//
+*/
+{
+static char * shold = NULL;           /* buffer used to read product */
+char * hold = NULL;
+fortint holdsize = SMALL, numread;
+fortint found = 0, length, prodlen;
+fortint given_buflen = *size;
+char p;
+unsigned long code=0, wanted = 0;
+OFF_T status = 0, i, present_position = 0;
+fortint one = 1;
+
+/* See if user gave a buffer for holding the product
+*/
+  if ( buffer == NULL ) {         /* No buffer given, get some */
+    if ( shold == NULL ) {        /* but only first time round */
+      shold = (char *) malloc( LARGEBUF);
+      CHECK((shold == NULL),"malloc failed in readnext",INTERNAL_ERROR);
+    }
+    given_buflen = LARGEBUF;
+    hold = shold;
+  }
+  else                             /* User buffer given */
+    hold = buffer;
+
+/* Make sure the user gave some buffer
+*/
+  if ( given_buflen < holdsize ) return USER_BUFFER_TINY;
+
+/* Look for product identifier
+*/
+  if ( prod_id != NULL )
+    for ( i = 0; i < 4; i++ )
+      wanted = ( (wanted << 8) + *(prod_id+i) ) & 0xFFFFFFFF;
+
+/* Read some bytes from the product
+*/
+  do {
+    numread = fileRead( &p, one, stream );
+    if ( numread <= 0 ) {
+      *size = 0;
+      return END_OF_FILE;
+    }
+
+    code = ( (code << 8) + p ) & 0xFFFFFFFF;
+
+    if ( prod_id == NULL ) {
+      switch(code) {
+        case BUDG:
+        case BUFR:
+        case GRIB:
+        case TIDE:
+        case DIAG:
+        case CREX: found = 1;
+      }
+    }
+    else
+      if ( code == wanted ) found = 1;
+
+  } while ( ! found );
+
+/* Find the product length
+*/
+  prodlen = prodsize( code, hold, given_buflen, &holdsize, fileRead, stream);
+
+  if( prodlen == -4 ) return USER_BUFFER_TINY;
+
+  if( prodlen < -4 ) {           /* special case for very large wave products */
+    fortint estimate; 
+
+    estimate = -prodlen;
+    prodlen = estimate - 128;
+    *size = prodlen;
+
+    present_position = fileTell((FILE *)stream);
+    status = fileSeek( (FILE *)stream, prodlen - holdsize , SEEK_CUR);
+    CHECK(status,"fileSeek error in readprod",INTERNAL_ERROR);
+
+/*  Read bytes from the product upto and including 7777
+*/
+    code = 0;
+    do {
+      numread = fileRead( &p, one, stream );
+      if ( numread <= 0 ) return MISPLACED_7777;
+
+      *size = *size + 1;
+      if( *size > estimate ) return MISPLACED_7777;
+
+      code = ( (code << 8) + p ) & 0xFFFFFFFF;
+
+    } while ( code != CODE_7777 );
+
+    if( given_buflen < *size )
+      return BUFFER_TOO_SMALL;
+    else {
+      status = fileSeek( (FILE *)stream, present_position, SEEK_SET);
+      CHECK(status,"fileSeek error in readprod",INTERNAL_ERROR);
+
+      numread = fileRead(hold+present_position,(*size-present_position),stream);
+      if ( numread <= 0 ) return INTERNAL_ERROR;
+      return 0;
+    }
+  }
+
+/* Move to end of product and check position of 7777 group
+   in the case that the user gave a NULL buffer and zero length
+*/
+  if ( *size == 0 ) {
+    char grp_7777[5];
+
+    *size = prodlen;             /* report the actual product length */
+
+    status = fileSeek( (FILE *)stream, prodlen - holdsize - LEN_7777, SEEK_CUR);
+    CHECK(status,"fileSeek error in readprod",INTERNAL_ERROR);
+
+    numread = fileRead( grp_7777, LEN_7777 ,stream );
+    grp_7777[4] = '\0';
+    if( strcmp(grp_7777,"7777") != 0 ) return MISPLACED_7777;
+
+    return BUFFER_TOO_SMALL;
+  }
+
+/* Otherwise read as much of the product as possible into the buffer, then
+   move to end of product and check position of 7777 group
+*/
+  *size = prodlen;                /* report the actual product length */
+
+  length = (given_buflen > prodlen) ? prodlen : given_buflen ;
+
+  if ( length > holdsize ) {
+
+/*
+//  Before reading rest of product, put zero at end of expected 7777
+//  group to ensure that it is not left over from an earlier product
+//  of the same length
+*/
+    *(hold+length-1) = '\0';
+    numread = fileRead( hold+holdsize, length-holdsize ,stream );
+    if( numread <= 0 ) {
+      *size = holdsize-numread;
+      return END_OF_FILE;
+    }
+
+    if ( given_buflen < prodlen ) {
+      char grp_7777[5];
+
+      status = fileSeek((FILE*)stream,prodlen-given_buflen - LEN_7777,SEEK_CUR);
+      CHECK(status,"fileSeek error in readprod",INTERNAL_ERROR);
+
+      numread = fileRead( grp_7777, LEN_7777 ,stream );
+      if( numread <= 0 ) return END_OF_FILE;
+
+      grp_7777[4] = '\0';
+      if( strcmp(grp_7777,"7777") != 0 ) return MISPLACED_7777;
+
+      return BUFFER_TOO_SMALL;
+    }
+  }
+
+  if(strncmp(hold+prodlen-LEN_7777,"7777",(size_t)4)!=0) return MISPLACED_7777;
+
+  return *size;
+
+}
+
+fortint readprod_decode_unsigned_byte_long(const unsigned char* p, long o, int l)
+{
+    fortint accum = 0;
+    int i = 0;
+    unsigned char b = p[o++];
+    accum  <<= 8;
+    accum |= b ;
+
+    for ( i=1; i<l; i++ )
+    {
+        b = p[o++];
+        accum <<= 8;
+        accum |= b ;
+    }
+    return accum;
+}
+
+static fortint gribsize(char * hold, fortint leng, fortint * holdsize,
+                     fortint (*fileRead)(), void * stream)
+/*
+//  Calculates the size in bytes of a GRIB product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//             Note that this increases if necessary as more bytes are read.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+fortint length, numread, num, hsize = *holdsize;
+fortint section2, section3 ;
+unsigned char * phold = (unsigned char *) hold;
+const char* big_prod_flag = NULL;
+
+/* Need more bytes to decide on which version of GRIB
+*/
+  if ( leng < 24 ) return USER_BUFFER_TINY;
+
+/* Put first 24 bytes in buffer
+*/
+  num = 24;
+  if ( hsize < num) {
+    numread = fileRead( hold + hsize, num - hsize, stream);
+    if ( numread <= 0 ) {          /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = num;
+  }
+  *holdsize = hsize;
+
+/* See if the GRIB version is 0 ...
+*/
+  if ( THREE_BYTE_LONG(phold+4) == 24 ) {
+    length = 28;		     /* GRIB + section 1 */
+
+/* Check for presence of sections 2 and 3
+*/
+    section2 = ( hold[11] & WMOBIT1 ) ;
+    section3 = ( hold[11] & WMOBIT2 ) ;
+
+/* Add up all lengths of sections
+*/
+    return lentotal(hold, holdsize, leng, length, section2, section3, 
+                    fileRead, stream);
+  }
+
+  
+/* ... or version 2 ...
+*/
+if ( hold[7] == 2 ){
+     return readprod_decode_unsigned_byte_long((const unsigned char*)hold,8,8);
+    }
+/* ... or version 1 ...
+*/
+
+  if ( ( hold[21] != 0 ) || ( hold[22] != 0 ) ) {
+
+/* Nightmare fixup for very large GRIB products (eg 2D wave spectra).
+  
+   If the most-significant of the 24 bits is set, this indicates a
+   very large product; the size has to be rescaled by a factor of 120.
+   This is a fixup to get round the GRIB code practice of representing
+   a product length by 24 bits. It is only possible because the
+   (default) rounding for GRIB products is 120 bytes.
+  
+*/
+    fortint fixlen;
+
+    fixlen = THREE_BYTE_LONG(phold+4);
+    if( fixlen <= 0x7fffff )
+      return fixlen;
+    else
+    {
+      fortint largeLen;
+      unsigned long code = 0;
+      
+	  big_prod_flag = getenv("ECMWF_CODED_BIG_PRODUCT");  
+      if(big_prod_flag)
+         if(strcmp(big_prod_flag,"OFF") == 0) return fixlen;
+      
+      fixlen = (fixlen & 0x7fffff)*120;  /* first guess at length */
+     
+      num = fixlen;
+    
+      if( leng < num ) { /* -unsure - apparently test is given buffer is too small */
+        num = fixlen - 128;
+        numread = fileRead( hold + hsize, leng - hsize, stream);
+        if ( numread <= 0 ) {          /* eg. on END_OF_FILE */
+          *holdsize -= numread;
+          return *holdsize;
+        }
+        *holdsize = leng;
+        return (-fixlen);
+      }
+      else {
+		  fortint fileReadResult =0;
+        if ( hsize < num) { /* buffer is big enough */
+	  /* go to the estimate minus 128 bytes to look after the 7777*/
+          numread = fileRead( hold + hsize, num - hsize - 128, stream);
+
+          if ( numread <= 0 ) {          /* eg. on END_OF_FILE */
+            *holdsize -= numread;
+            return *holdsize;
+          }
+        	  /* search byte after byte for the 7777 in the stream and stop when found*/
+  		  do {
+		     if (num<numread) return MISPLACED_7777;
+		     fileReadResult = fileRead( hold + numread + hsize, 1, stream);
+		      
+		      if ( fileReadResult <= 0 ) {          /* eg. on END_OF_FILE ---should not happen*/
+ 		           *holdsize += numread;
+			   *holdsize -= fileReadResult;
+ 		           return *holdsize; /*returns the number of bytes actually read */
+ 		      }     
+ 		     numread += fileReadResult;
+ 		     code = ( (code << 8) + hold[hsize + numread-1] ) & 0xFFFFFFFF;
+		    } while ( code != CODE_7777 );
+          hsize = numread;
+        }
+        *holdsize = hsize;
+        largeLen = waveLength(hold);
+      }
+
+      num = largeLen;
+      *holdsize = num;
+      return num;
+    }
+
+  }
+
+  length = 24;		     /* GRIB + section 1 */
+
+/* Check for presence of sections 2 and 3
+*/
+  section2 = ( hold[7] & WMOBIT8 ) ;
+  section3 = ( hold[7] & WMOBIT7 ) ;
+
+/* Add up all lengths of sections
+*/
+  return lentotal(hold, holdsize, leng, length, section2, section3, 
+                    fileRead, stream);
+
+}
+
+
+static fortint lentotal(char *hold, fortint *holdsize, fortint leng, fortint length,
+                     fortint section2, fortint section3,
+                     fortint (*fileRead)(), void *stream)
+/*
+//  Returns the total length in bytes of all sections of the GRIB product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//             Note that this increases if necessary as more bytes
+//             are read.
+//  length = length of (section 0 + section 1).
+//  section2 is TRUE if section 2 is present in the product.
+//  section3 is TRUE if section 3 is present in the product.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+fortint numread, hsize = *holdsize;
+unsigned char * phold = (unsigned char *) hold;
+fortint next, next_sec = 4;
+
+/* Adjust count of sections to check
+*/
+  if ( section2 ) next_sec--;
+  if ( section3 ) next_sec--;
+
+/* Get the size of the next section
+*/
+  if ( leng < length ) return USER_BUFFER_TINY;
+  if ( hsize < length) {
+    numread = fileRead( hold + hsize, length - hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = length;
+  } 
+  *holdsize = hsize;
+
+/* Get the size of remaining sections
+*/
+  for ( next = next_sec; next < 5 ; next++ ) {
+    if ( leng < (length+4) ) return USER_BUFFER_TINY;
+    if ( hsize < (length+4)) {
+      numread = fileRead( hold+hsize, (length+4)-hsize, stream);
+      if ( numread <= 0 ) {    /* eg. on END_OF_FILE */
+        *holdsize -= numread;
+        return *holdsize;
+      }
+      hsize = length + 4;
+    } 
+    *holdsize = hsize;
+    length += THREE_BYTE_LONG(phold+length);
+  }
+
+/* Add on the size of section 5
+*/
+  length += LEN_7777;
+
+  return length;
+}
+
+
+static fortint bufrsize(char * hold, fortint leng, fortint * holdsize,
+                     fortint (*fileRead)(), void * stream)
+/*
+//  Returns the size in bytes of the BUFR code product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//         Note that this increases if necessary as more bytes are read.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+unsigned char * phold = (unsigned char *) hold;
+fortint numread, hsize = *holdsize;
+fortint num, length;
+fortint next, next_sec = 3;
+
+
+/* Need more bytes to decide on which version of BUFR
+*/
+  if ( leng < 24 ) return USER_BUFFER_TINY;
+  num = 24;                        /* put first 24 bytes in buffer*/
+  if ( hsize < num) {
+    numread = fileRead( hold + hsize, num - hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = num;
+  }
+  *holdsize = hsize;
+
+/* If it's Edition 2, or later, octets 5-7 give full product size
+*/
+  if ( hold[7] > 1 ) return THREE_BYTE_LONG(phold+4);
+
+/* Otherwise, we have to step through the individual sections
+   adding up the lengths
+*/
+
+/* Add on the length of section 1 and ensure enough of product is in 
+   memory to continue
+*/
+  length = SECT_0_LEN + THREE_BYTE_LONG(phold+4);
+  if ( leng < (length+4) ) return USER_BUFFER_TINY;
+  if ( hsize < (length+4)) {
+    numread = fileRead( hold+hsize, (length+4)-hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = length + 4;
+    *holdsize = hsize;
+  } 
+
+/* Check for presence of section 2
+*/
+  if ( hold[11] & WMOBIT1 ) next_sec = 2;
+
+/* Get the size of remaining sections
+*/
+  for ( next = next_sec; next < 5 ; next++ ) {
+    length += THREE_BYTE_LONG(phold+length);
+    if ( leng < (length+4) ) return USER_BUFFER_TINY;
+    if ( hsize < (length+4)) {
+      numread = fileRead( hold+hsize,(length+4)-hsize, stream);
+      if ( numread <= 0 ) {    /* eg. on END_OF_FILE */
+        *holdsize -= numread;
+        return *holdsize;
+      }
+      hsize = length + 4;
+      *holdsize = hsize;
+    } 
+  }
+
+/* Add on the size of section 5
+*/
+  length += LEN_7777;
+  if ( leng < length ) return USER_BUFFER_TINY;
+
+  return length;
+
+}
+
+static fortint tide_budg_size(char * hold, fortint leng, fortint * holdsize,
+                           fortint (*fileRead)(), void * stream)
+/*
+//  Returns the size in bytes of the TIDE/BUDG/DIAG code product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//             Note that this increases if necessary as more bytes are read.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+unsigned char * phold = (unsigned char *) hold;
+fortint numread, hsize = *holdsize;
+fortint num, length;
+
+/* Need more bytes to get length of section 1
+*/
+  num = 8;                        /* put first 8 bytes in buffer */
+  if ( leng < num ) return USER_BUFFER_TINY;
+  if ( hsize < num) {
+    numread = fileRead( hold + hsize, num - hsize, stream);
+    if ( numread <= 0 ) {       /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = num;
+  }
+  *holdsize = hsize;
+
+/* Have to step through individual sections adding up the lengths
+*/
+
+/* Add on the length of section 1 and ensure enough of product is in 
+   memory to continue
+*/
+  length = SECT_0_LEN + THREE_BYTE_LONG(phold+4);
+  if ( leng < (length+4) ) return USER_BUFFER_TINY;
+  if ( hsize < (length+4)) {
+    numread = fileRead( hold+hsize, (length+4)-hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = length + 4;
+    *holdsize = hsize;
+  } 
+
+/* Get the size of remaining section
+*/
+  length += THREE_BYTE_LONG(phold+length);
+
+/* Add on the size of section 5
+*/
+  length += LEN_7777;
+
+  if ( leng < length ) return USER_BUFFER_TINY;
+  return length;
+}
+
+static fortint prodsize(fortint code, char * hold, fortint leng, fortint * holdsize, 
+                     fortint (*fileRead)(), void * stream)
+/*
+//  Returns size of BUFR, GRIB, BUDG, TIDE, DIAG product in bytes.
+//
+//  hold = buffer holding product,
+//  leng = size of buffer in bytes,
+//  holdsize = number of bytes of product already read into hold.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+long lcode = code;
+
+  *holdsize = 4;
+  switch( lcode ) 
+  {
+     case BUFR: memcpy(hold,"BUFR",4);
+                return bufrsize( hold, leng, holdsize, fileRead, stream);
+
+     case BUDG: memcpy(hold,"BUDG",4);
+                return tide_budg_size( hold, leng, holdsize, fileRead, stream);
+
+     case GRIB: memcpy(hold,"GRIB",4);
+                return gribsize( hold, leng, holdsize, fileRead, stream);
+
+     case TIDE: memcpy(hold,"TIDE",4);
+                return tide_budg_size( hold, leng, holdsize, fileRead, stream);
+
+     case DIAG: memcpy(hold,"DIAG",4);
+                return tide_budg_size( hold, leng, holdsize, fileRead, stream);
+
+     case CREX: memcpy(hold,"CREX",4);
+                return crex_size( stream);
+
+     default: return 0;
+    }
+}
+
+
+#define BIT1 0x80
+#define BIT2 0x40
+
+static fortint waveLength(char * buffer)
+{
+/*
+//  On entry, buffer contains a GRIB edition 1 product (somewhere).
+//
+//  The value returned is the length of the GRIB product calculated
+//  from the individual lengths of sections 0, 1, 2, 3, 4 and 5;
+//  sections 2 and 3 are optional and may or may not be present.
+//
+//  If there is a problem processing the product, or if GRIB edition
+//  -1 or 0 is encountered, the return value is -1.
+*/
+int found = 0;
+int code = 0;
+long bytes_read = 0, advance;
+char p, edit_num, flag23;
+char size[3];
+int section0 = 8, section1, section2, section3, section4, section5 = 4;
+long total;
+size_t rtotal;
+long s0;
+
+/*  Read bytes until "GRIB" found */
+
+    do
+    {
+        if( grab(buffer, &p, 1, 1, &bytes_read) != 0) return (-1);
+        code = ( (code << 8) + p ) & 0xFFFFFFFF;
+        if (code == GRIB ) found = 1;
+    } while ( ! found );
+    s0 = bytes_read - 4;
+    bytes_read = 4;
+
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+    rtotal = THREE_BYTE_LONG(size);
+
+    if( rtotal > 0x800000 ) {
+        total = (rtotal&0x7fffff) * 120;
+    }
+
+/*  Check the edition number */
+
+    if( grab(buffer, &edit_num, 1, 1, &bytes_read) != 0) return (-1);
+    if( edit_num != 1 ) {
+      printf("Cannot handle GRIB edition 0\n");
+      return (-1);
+    }                             /* reject edition 0 */
+
+    if( (*(buffer+21-s0) == '\0') && (*(buffer+22-s0) == '\0') ) {
+      printf("Cannot handle GRIB edition -1\n");
+      return (-1);
+    }                             /* reject edition -1 */
+
+/*  Read length of section 1 */
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+    section1 = THREE_BYTE_LONG(size);
+
+/*  Now figure out if sections 2/3 are present */
+
+    advance = 4;
+    bytes_read += advance;
+    if( grab(buffer, &flag23, 1, 1, &bytes_read) != 0) return (-1);
+    section2 = flag23 & BIT1;
+    section3 = flag23 & BIT2;
+
+/*  Advance to end of section 1 */
+
+    advance = section1 - (bytes_read - section0);
+    bytes_read += advance;
+
+/*  Read section 2 length if it is given*/
+
+    if( section2 )
+    {
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+        section2 = THREE_BYTE_LONG(size);
+        advance = section2 - (bytes_read - section0 - section1);
+        bytes_read += advance;
+    }
+
+/*  Read section 3 length if it is given*/
+
+    if( section3 )
+    {
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+        section3 = THREE_BYTE_LONG(size);
+        advance = section3 - (bytes_read - section0 - section1 - section2);
+        bytes_read += advance;
+    }
+
+/*  Read section 4 length */
+
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+    section4 = THREE_BYTE_LONG(size);
+    /*  If it happens that the section 2 is not the difference of bytes
+        between the real message length and the coded message length, that mean that 
+        the 120 trick is not used, if so return the real length   */ 
+     if(section4 > 120 ) 
+       return rtotal;
+    section4 = total + 3 - bytes_read - section4;
+
+    return (section0+section1+section2+section3+section4+section5);
+}
+
+static int grab(char * buffer, char * where, long size,long cnt,long * num_bytes_read)
+{
+long number = size*cnt;
+
+    memcpy(where, (buffer+(*num_bytes_read)), number);
+    *num_bytes_read += number;
+
+    return 0;
+}
+
+
+#define BUFFLEN 1000
+
+static fortint crex_size( void * stream) {
+/*
+//  Returns the size in bytes of the TIDE/BUDG/DIAG code product.
+//
+//  stream = data describing the input stream (eg. FILE *).
+*/
+char buffer[BUFFLEN];
+int startPosition, inBuffer;
+char * next, * endBuffer;
+char plplcrcrlf7777[10] = {0,0,0,0,0,0,0,0,0,0};
+char PlPlCrCrLf7777[10] = {0x2b,0x2b,0x0d,0x0d,0x0a,0x37,0x37,0x37,0x37,0x00};
+int endFound, loop, status, size = 0;
+int size7777 = sizeof(PlPlCrCrLf7777) - 1;
+
+/*
+// Record current file position
+*/
+  startPosition = fileTell((FILE *) stream);
+  if( startPosition < 0 ) {
+    perror("crex_size: error recording current file position.");
+    exit(1);
+  }
+/*
+// Read some bytes to start with
+*/
+  inBuffer = fileRead(buffer, BUFFLEN, (FILE *) stream);
+  if( ferror((FILE *) stream) ) {
+    perror("crex_size: file read error");
+    exit(1);
+  }
+  next = buffer;
+  endBuffer = next + abs(inBuffer);
+/*
+// Look for ++CrCrLf7777 at end of product
+*/
+  endFound = 0;
+  while( !endFound ) {
+    for( loop = 0; loop < 8; loop++ )
+      plplcrcrlf7777[loop] = *(next++);
+      plplcrcrlf7777[9] = '\0';
+
+    while( next<=endBuffer ) {
+      plplcrcrlf7777[8] = *(next++);
+      if( strcmp(plplcrcrlf7777,PlPlCrCrLf7777) == 0 ) {
+        endFound = 1;
+/*
+//      Position file where it started
+*/
+        status = fileSeek(stream, startPosition, SEEK_SET);
+        if( status != 0 ) {
+          perror("crex_size: file repositioning error");
+          exit(1);
+        }
+        return ( (int) (next - buffer + size + 4) );
+      }
+
+      for( loop = 0; loop < 8; loop++ )
+        plplcrcrlf7777[loop] = plplcrcrlf7777[loop+1];
+    }
+
+    if( !endFound ) {
+      if( feof((FILE *) stream) ) {
+        printf("crex_size: end-of-file hit before end of CREX found\n");
+        exit(1);
+      }
+      else {
+        size += (BUFFLEN - size7777);
+        memmove(buffer, (buffer+(BUFFLEN-size7777)), size7777);
+        inBuffer = fileRead((buffer+size7777),
+                            (BUFFLEN-size7777),
+                            (FILE *) stream);
+        if( ferror((FILE *) stream) ) {
+          perror("crex_size: file read error");
+          exit(1);
+        }
+        if( inBuffer == 0 ) return 0;
+        next = buffer;
+        endBuffer = next + abs(inBuffer);
+      }
+    }
+  }
+
+/*
+// Position file where it started
+*/
+  status = fileSeek(stream, startPosition, SEEK_SET);
+  if( status != 0 ) {
+    perror("crex_size: file repositioning error");
+    exit(1);
+  }
+  return 0;
+}
diff --git a/pbio/readprod_alpha.c b/pbio/readprod_alpha.c
new file mode 100755
index 0000000..0a92c2b
--- /dev/null
+++ b/pbio/readprod_alpha.c
@@ -0,0 +1,524 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+//      readprod_alpha.c
+*/
+#include "bufrgrib.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <memory.h>
+
+#define THREE_BYTE_LONG(p) ((((long)*(p))<<16) + (((long)*(p+1))<<8) + (long)*(p+2))
+#define CHECK(stat,message,code) if((stat)) {perror(message);return(code);}
+
+#define WMOBIT1 0x80
+#define WMOBIT2 0x40
+#define WMOBIT7 0x02
+#define WMOBIT8 0x01
+
+#define END_OF_FILE      -1
+#define INTERNAL_ERROR   -2
+#define BUFFER_TOO_SMALL -3
+#define USER_BUFFER_TINY -4
+#define MISPLACED_7777   -5
+
+#define SECT_0_LEN 4
+#define LEN_7777 4
+#define SMALL 40
+#define LARGEBUF 200000
+
+#define GRIB 0x47524942
+#define BUFR 0x42554652
+#define BUDG 0x42554447
+#define TIDE 0x54494445
+#define DIAG 0x44494147
+
+#include "fortint.h"
+#include "fileRead.h"
+
+#include "sizeRoutines.h"
+
+
+fortint readprod( char * prod_id, char * buffer, fortint * size, 
+              fortint (*fileRead)(char *, fortint , void *),
+              fortint (*fileSeek)(void *, fortint, fortint),
+              fortint (*fileTell)(void *),
+               void * stream)
+/*
+//  Reads a BUFR, GRIB, BUDG, TIDE, DIAG product.
+//
+//  prod_id = "BUFR", "GRIB", "BUDG", "TIDE", "DIAG" ...
+//  buffer = buffer to hold product,
+//  size = on input, size of buffer in bytes,
+//         on output, number of bytes read.
+//  fileRead = function used to read the product,
+//  fileSeek = function used to reposition within the product byte stream,
+//  fileTell = function used to report the current byte position within
+//             the product byte stream,
+//  stream = data describing the input stream (eg. FILE *).
+//
+//  Returns 
+//    -1 if can't find product  (eg. end-of-file)
+//    -2 if internal processing error (malloc fail, file seek error)
+//    -3 if buffer too small for whole product.
+//    -4 if user buffer too small to even start product processing.
+//    -5 if the 7777 group is in the wrong place
+//
+*/
+{
+static char * shold = NULL;           /* buffer used to read product */
+char * hold = NULL;
+fortint holdsize = SMALL, numread;
+fortint found = 0, num = 0, length, prodlen;
+fortint given_buflen = *size;
+char p;
+unsigned fortint code=0, wanted = 0;
+int status = 0, i;
+
+/* See if user gave a buffer for holding the product
+*/
+  if ( buffer == NULL ) {         /* No buffer given, get some */
+    if ( shold == NULL ) {        /* but only first time round */
+      shold = (char *) malloc( LARGEBUF);
+      CHECK((shold == NULL),"malloc failed in readnext",INTERNAL_ERROR);
+    }
+    given_buflen = LARGEBUF;
+    hold = shold;
+  }
+  else                             /* User buffer given */
+    hold = buffer;
+
+/* Make sure the user gave some buffer
+*/
+  if ( given_buflen < holdsize ) return USER_BUFFER_TINY;
+
+/* Look for product identifier
+*/
+  if ( prod_id != NULL )
+    for ( i = 0; i < 4; i++ )
+      wanted = ( (wanted << 8) + *(prod_id+i) ) & 0xFFFFFFFF;
+
+/* Read some bytes from the product
+*/
+  do {
+    numread = fileRead( &p, 1, stream );
+    if ( numread <= 0 ) {
+      *size = 0;
+      return END_OF_FILE;
+    }
+
+    code = ( (code << 8) + p ) & 0xFFFFFFFF;
+
+    if ( prod_id == NULL ) {
+      switch(code) {
+        case BUDG:
+        case BUFR:
+        case GRIB:
+        case TIDE:
+        case DIAG: found = 1;
+      }
+    }
+    else
+      if ( code == wanted ) found = 1;
+
+  } while ( ! found );
+
+/* Find the product length
+*/
+  prodlen = prodsize( code, hold, given_buflen, &holdsize, fileRead, stream);
+
+  if( prodlen == -4 ) return USER_BUFFER_TINY;
+
+/* Move to end of product and check position of 7777 group
+   in the case that the user gave a NULL buffer and zero length
+*/
+  if ( *size == 0 ) {
+    char grp_7777[5];
+
+    *size = prodlen;             /* report the actual product length */
+
+    status = fileSeek( (FILE *)stream, prodlen - holdsize - LEN_7777, SEEK_CUR);
+    CHECK(status,"fileSeek error in readprod",INTERNAL_ERROR);
+
+    numread = fileRead( grp_7777, LEN_7777 ,stream );
+    grp_7777[4] = '\0';
+    if( strcmp(grp_7777,"7777") != 0 ) return MISPLACED_7777;
+
+    return BUFFER_TOO_SMALL;
+  }
+
+/* Otherwise read as much of the product as possible into the buffer, then
+   move to end of product and check position of 7777 group
+*/
+  *size = prodlen;                /* report the actual product length */
+
+  length = (given_buflen > prodlen) ? prodlen : given_buflen ;
+
+  if ( length > holdsize ) {
+    numread = fileRead( hold+holdsize, length-holdsize ,stream );
+    if ( given_buflen < prodlen ) {
+      char grp_7777[5];
+
+      status = fileSeek((FILE*)stream,prodlen-given_buflen - LEN_7777,SEEK_CUR);
+      CHECK(status,"fileSeek error in readprod",INTERNAL_ERROR);
+
+      numread = fileRead( grp_7777, LEN_7777 ,stream );
+      grp_7777[4] = '\0';
+      if( strcmp(grp_7777,"7777") != 0 ) return MISPLACED_7777;
+
+      return BUFFER_TOO_SMALL;
+    }
+  }
+
+  if(strncmp(hold+prodlen-LEN_7777,"7777",(size_t)4)!=0) return MISPLACED_7777;
+
+  return *size;
+
+}
+
+
+static fortint gribsize(char * hold, fortint leng, fortint * holdsize,
+                     fortint (*fileRead)(), void * stream)
+/*
+//  Calculates the size in bytes of a GRIB product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//             Note that this increases if necessary as more bytes are read.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+fortint length, numread, num, hsize = *holdsize;
+fortint section2, section3 ;
+unsigned char * phold = (unsigned char *) hold;
+
+/* Need more bytes to decide on which version of GRIB
+*/
+  if ( leng < 24 ) return USER_BUFFER_TINY;
+
+/* Put first 24 bytes in buffer
+*/
+  num = 24;
+  if ( hsize < num) {
+    numread = fileRead( hold + hsize, num - hsize, stream);
+    if ( numread <= 0 ) {          /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = num;
+  }
+  *holdsize = hsize;
+
+/* See if the GRIB version is 0 ...
+*/
+  if ( THREE_BYTE_LONG(phold+4) == 24 ) {
+    length = 28;		     /* GRIB + section 1 */
+
+/* Check for presence of sections 2 and 3
+*/
+    section2 = ( hold[11] & WMOBIT1 ) ;
+    section3 = ( hold[11] & WMOBIT2 ) ;
+
+/* Add up all lengths of sections
+*/
+    return lentotal(hold, holdsize, leng, length, section2, section3, 
+                    fileRead, stream);
+  }
+
+/* ... or version 1 ...
+*/
+
+  if ( ( hold[21] != 0 ) || ( hold[22] != 0 ) ) {
+
+/* Nightmare fixup for very large GRIB products (eg 2D wave spectra).
+  
+   If the most-significant of the 24 bits is set, this indicates a
+   very large product; the size has to be rescaled by a factor of 120.
+   This is a fixup to get round the GRIB code practice of representing
+   a product length by 24 bits. It is only possible because the
+   (default) rounding for GRIB products is 120 bytes.
+  
+*/
+    fortint fixlen;
+
+    fixlen = THREE_BYTE_LONG(phold+4);
+    if( fixlen > 0x7fffff )
+      return ((fixlen & 0x7fffff) * 120);
+    else
+      return fixlen;
+  }
+
+  length = 24;		     /* GRIB + section 1 */
+
+/* Check for presence of sections 2 and 3
+*/
+  section2 = ( hold[7] & WMOBIT8 ) ;
+  section3 = ( hold[7] & WMOBIT7 ) ;
+
+/* Add up all lengths of sections
+*/
+  return lentotal(hold, holdsize, leng, length, section2, section3, 
+                    fileRead, stream);
+
+}
+
+
+static fortint lentotal(char *hold, fortint *holdsize, fortint leng, fortint length,
+                     fortint section2, fortint section3,
+                     fortint (*fileRead)(), void *stream)
+/*
+//  Returns the total length in bytes of all sections of the GRIB product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//             Note that this increases if necessary as more bytes
+//             are read.
+//  length = length of (section 0 + section 1).
+//  section2 is TRUE if section 2 is present in the product.
+//  section3 is TRUE if section 3 is present in the product.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+fortint numread, hsize = *holdsize;
+unsigned char * phold = (unsigned char *) hold;
+fortint next, next_sec = 4;
+
+/* Adjust count of sections to check
+*/
+  if ( section2 ) next_sec--;
+  if ( section3 ) next_sec--;
+
+/* Get the size of the next section
+*/
+  if ( leng < length ) return USER_BUFFER_TINY;
+  if ( hsize < length) {
+    numread = fileRead( hold + hsize, length - hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = length;
+  } 
+  *holdsize = hsize;
+
+/* Get the size of remaining sections
+*/
+  for ( next = next_sec; next < 5 ; next++ ) {
+    if ( leng < (length+4) ) return USER_BUFFER_TINY;
+    if ( hsize < (length+4)) {
+      numread = fileRead( hold+hsize, (length+4)-hsize, stream);
+      if ( numread <= 0 ) {    /* eg. on END_OF_FILE */
+        *holdsize -= numread;
+        return *holdsize;
+      }
+      hsize = length + 4;
+    } 
+    *holdsize = hsize;
+    length += THREE_BYTE_LONG(phold+length);
+  }
+
+/* Add on the size of section 5
+*/
+  length += LEN_7777;
+
+  return length;
+}
+
+
+static fortint bufrsize(char * hold, fortint leng, fortint * holdsize,
+                     fortint (*fileRead)(), void * stream)
+/*
+//  Returns the size in bytes of the BUFR code product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//         Note that this increases if necessary as more bytes are read.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+unsigned char * phold = (unsigned char *) hold;
+fortint numread, hsize = *holdsize;
+fortint num, length;
+fortint next, next_len, next_sec = 3;
+
+
+/* Need more bytes to decide on which version of BUFR
+*/
+  if ( leng < 24 ) return USER_BUFFER_TINY;
+  num = 24;                        /* put first 24 bytes in buffer*/
+  if ( hsize < num) {
+    numread = fileRead( hold + hsize, num - hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = num;
+  }
+  *holdsize = hsize;
+
+/* If it's Edition 2, or later, octets 5-7 give full product size
+*/
+  if ( hold[7] > 1 ) return THREE_BYTE_LONG(phold+4);
+
+/* Otherwise, we have to step through the individual sections
+   adding up the lengths
+*/
+
+/* Add on the length of section 1 and ensure enough of product is in 
+   memory to continue
+*/
+  length = SECT_0_LEN + THREE_BYTE_LONG(phold+4);
+  if ( leng < (length+4) ) return USER_BUFFER_TINY;
+  if ( hsize < (length+4)) {
+    numread = fileRead( hold+hsize, (length+4)-hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = length + 4;
+    *holdsize = hsize;
+  } 
+
+/* Check for presence of section 2
+*/
+  if ( hold[11] & WMOBIT1 ) next_sec = 2;
+
+/* Get the size of remaining sections
+*/
+  for ( next = next_sec; next < 5 ; next++ ) {
+    length += THREE_BYTE_LONG(phold+length);
+    if ( leng < (length+4) ) return USER_BUFFER_TINY;
+    if ( hsize < (length+4)) {
+      numread = fileRead( hold+hsize,(length+4)-hsize, stream);
+      if ( numread <= 0 ) {    /* eg. on END_OF_FILE */
+        *holdsize -= numread;
+        return *holdsize;
+      }
+      hsize = length + 4;
+      *holdsize = hsize;
+    } 
+  }
+
+/* Add on the size of section 5
+*/
+  length += LEN_7777;
+  if ( leng < length ) return USER_BUFFER_TINY;
+
+  return length;
+
+}
+
+
+static fortint tide_budg_size(char * hold, fortint leng, fortint * holdsize,
+                           fortint (*fileRead)(), void * stream)
+/*
+//  Returns the size in bytes of the TIDE/BUDG/DIAG code product.
+//
+//  hold = buffer to hold product,
+//  leng = length of buffer,
+//  holdsize = number of bytes of the product in the hold buffer.
+//             Note that this increases if necessary as more bytes are read.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+unsigned char * phold = (unsigned char *) hold;
+fortint numread, hsize = *holdsize;
+fortint num, length;
+fortint next, next_len, next_sec = 3;
+
+/* Need more bytes to get length of section 1
+*/
+  num = 8;                        /* put first 8 bytes in buffer */
+  if ( leng < num ) return USER_BUFFER_TINY;
+  if ( hsize < num) {
+    numread = fileRead( hold + hsize, num - hsize, stream);
+    if ( numread <= 0 ) {       /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = num;
+  }
+  *holdsize = hsize;
+
+/* Have to step through individual sections adding up the lengths
+*/
+
+/* Add on the length of section 1 and ensure enough of product is in 
+   memory to continue
+*/
+  length = SECT_0_LEN + THREE_BYTE_LONG(phold+4);
+  if ( leng < (length+4) ) return USER_BUFFER_TINY;
+  if ( hsize < (length+4)) {
+    numread = fileRead( hold+hsize, (length+4)-hsize, stream);
+    if ( numread <= 0 ) {        /* eg. on END_OF_FILE */
+      *holdsize -= numread;
+      return *holdsize;
+    }
+    hsize = length + 4;
+    *holdsize = hsize;
+  } 
+
+/* Get the size of remaining section
+*/
+  length += THREE_BYTE_LONG(phold+length);
+
+/* Add on the size of section 5
+*/
+  length += LEN_7777;
+
+  if ( leng < length ) return USER_BUFFER_TINY;
+  return length;
+}
+
+static fortint prodsize(fortint code, char * hold, fortint leng, fortint * holdsize, 
+                     fortint (*fileRead)(), void * stream)
+/*
+//  Returns size of BUFR, GRIB, BUDG, TIDE, DIAG product in bytes.
+//
+//  hold = buffer holding product,
+//  leng = size of buffer in bytes,
+//  holdsize = number of bytes of product already read into hold.
+//  fileRead = function used to read the product,
+//  stream = data describing the input stream (eg. FILE *).
+*/
+{
+  *holdsize = 4;
+  switch( code ) 
+  {
+     case BUFR: memcpy(hold,"BUFR",4);
+                return bufrsize( hold, leng, holdsize, fileRead, stream);
+
+     case BUDG: memcpy(hold,"BUDG",4);
+                return tide_budg_size( hold, leng, holdsize, fileRead, stream);
+
+     case GRIB: memcpy(hold,"GRIB",4);
+                return gribsize( hold, leng, holdsize, fileRead, stream);
+
+     case TIDE: memcpy(hold,"TIDE",4);
+                return tide_budg_size( hold, leng, holdsize, fileRead, stream);
+
+     case DIAG: memcpy(hold,"DIAG",4);
+                return tide_budg_size( hold, leng, holdsize, fileRead, stream);
+
+     default: return 0;
+    }
+}
+
diff --git a/pbio/recheckLength.c b/pbio/recheckLength.c
new file mode 100755
index 0000000..80a75da
--- /dev/null
+++ b/pbio/recheckLength.c
@@ -0,0 +1,150 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+long len3oct(char *p) {
+unsigned char A, B, C;
+
+  A = *p;
+  B = *(p+1);
+  C = *(p+2);
+
+  return( ((long)(A)*65536) + ((long)(B)*256) + (long)(C) );
+}
+
+#define GRIB 0x47524942
+#define BIT1 0x80
+#define BIT2 0x40
+
+static int grab(char * , char * , long ,long ,long * );
+
+long recheckLength(char * buffer)
+{
+/*
+//  On entry, buffer contains a GRIB edition 1 product (somewhere).
+//
+//  The value returned is the length of the GRIB product calculated
+//  from the individual lengths of sections 0, 1, 2, 3, 4 and 5;
+//  sections 2 and 3 are optional and may or may not be present.
+//
+//  If there is a problem processing the product, or if GRIB edition
+//  -1 or 0 is encountered, the return value is -1.
+*/
+int large = 0;
+int found = 0;
+int code = 0;
+long bytes_read = 0, advance;
+char p, edit_num, flag23;
+char size[3];
+int section0 = 8, section1, section2, section3, section4, section5 = 4;
+long total;
+char grp_7777[5];
+long s0;
+
+/*  Read bytes until "GRIB" found */
+
+    do
+    {
+        if( grab(buffer, &p, 1, 1, &bytes_read) != 0) return (-1);
+        code = ( (code << 8) + p ) & 0xFFFFFFFF;
+        if (code == GRIB ) found = 1;
+    } while ( ! found );
+    s0 = bytes_read - 4;
+    bytes_read = 4;
+
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+    total = len3oct(size);
+
+    if( total > 0x800000 ) {
+        total = (total&0x7fffff) * 120;
+        large = 1;
+    }
+
+/*  Check the edition number */
+
+    if( grab(buffer, &edit_num, 1, 1, &bytes_read) != 0) return (-1);
+    if( edit_num != 1 ) {
+      printf("Cannot handle GRIB edition 0\n");
+      return (-1);
+    }                             /* reject edition 0 */
+
+    if( (*(buffer+21-s0) == '\0') && (*(buffer+22-s0) == '\0') ) {
+      printf("Cannot handle GRIB edition -1\n");
+      return (-1);
+    }                             /* reject edition -1 */
+
+/*  Read length of section 1 */
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+    section1 = len3oct(size);
+
+/*  Now figure out if sections 2/3 are present */
+
+    advance = 4;
+    bytes_read += advance;
+    if( grab(buffer, &flag23, 1, 1, &bytes_read) != 0) return (-1);
+    section2 = flag23 & BIT1;
+    section3 = flag23 & BIT2;
+
+/*  Advance to end of section 1 */
+
+    advance = section1 - (bytes_read - section0);
+    bytes_read += advance;
+
+/*  Read section 2 length if it is given*/
+
+    if( section2 )
+    {
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+        section2 = len3oct(size);
+        advance = section2 - (bytes_read - section0 - section1);
+        bytes_read += advance;
+    }
+
+/*  Read section 3 length if it is given*/
+
+    if( section3 )
+    {
+        if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+        section3 = len3oct(size);
+        advance = section3 - (bytes_read - section0 - section1 - section2);
+        bytes_read += advance;
+    }
+
+/*  Read section 4 length */
+
+    if( grab(buffer, size, 3, 1, &bytes_read) != 0) return (-1);
+    section4 = len3oct(size);
+    if( large ) section4 = total + 3 - bytes_read - section4; 
+    advance = section4 - (bytes_read - section0 - section1 - section2 - section3);
+    bytes_read += advance;
+
+/*  Check 7777 group is in the expected place */
+
+    if( grab(buffer, grp_7777, 4, 1, &bytes_read) != 0) return (-1);
+    bytes_read += 4;
+  
+
+/*  Success! */
+    return (section0+section1+section2+section3+section4+section5);
+}
+
+static int grab(char * buffer, char * where, long size,long cnt,long * num_bytes_read)
+{
+long number = size*cnt;
+
+    memcpy(where, (buffer+(*num_bytes_read)), number);
+    *num_bytes_read += number;
+
+    return 0;
+}
diff --git a/pbio/setpar.c b/pbio/setpar.c
new file mode 100755
index 0000000..0abedab
--- /dev/null
+++ b/pbio/setpar.c
@@ -0,0 +1,38 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+
+/*
+//  setpar.c
+//
+//  This is a replacement for the SETPAR.f FORTRAN-callable subroutine.
+//  It sets the number of bits per word (kbit), 
+//  and the largest negative number (kneg).
+//  The diagnostic print option is no longer supported (kpar).
+//
+*/
+#include <limits.h>
+#include "fortint.h"
+
+void setpar_(fortint * kbit, fortint * kneg, fortint * kpar)
+{
+    *kbit = sizeof(fortint)*8 ;
+#ifdef INTEGER_IS_INT
+    *kneg = INT_MIN ;
+#else
+    *kneg = LONG_MIN ;
+#endif
+    return;
+}
+
+void setpar(fortint * kbit, fortint * kneg, fortint * kpar) {
+
+  setpar_(kbit,kneg,kpar);
+}
diff --git a/pbio/sizeRoutines.h b/pbio/sizeRoutines.h
new file mode 100755
index 0000000..6470e13
--- /dev/null
+++ b/pbio/sizeRoutines.h
@@ -0,0 +1,28 @@
+/**
+* Copyright 1981-2012 ECMWF.
+*
+* This software is licensed under the terms of the Apache Licence 
+* Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+*
+* In applying this licence, ECMWF does not waive the privileges and immunities 
+* granted to it by virtue of its status as an intergovernmental organisation 
+* nor does it submit to any jurisdiction.
+*/
+#ifndef SIZE_ROUTINES_H
+#define SIZE_ROUTINES_H
+
+static fortint prodsize(fortint, char *, fortint, fortint *,
+                        fortint (*fileRead)(), void *);
+static fortint gribsize(char * , fortint, fortint * , 
+                        fortint (*fileRead)(), void * );
+static fortint bufrsize(char * , fortint, fortint * , 
+                        fortint (*fileRead)(), void * );
+static fortint tide_budg_size(char *, fortint, fortint *,
+                        fortint (*fileRead)(), void *);
+static fortint lentotal(char *, fortint *, fortint, fortint , fortint ,
+                        fortint , fortint (*fileRead)(), void *);
+static fortint waveLength(char *);
+
+static fortint crex_size( void * );
+
+#endif /* end of  SIZE_ROUTINES_H */
diff --git a/pbio/sources.CRAY b/pbio/sources.CRAY
new file mode 100755
index 0000000..4a9ce1a
--- /dev/null
+++ b/pbio/sources.CRAY
@@ -0,0 +1,34 @@
+#
+#   Sources for libemos/pbio for CRAY.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = 
diff --git a/pbio/sources.FUJITSU b/pbio/sources.FUJITSU
new file mode 100755
index 0000000..0296591
--- /dev/null
+++ b/pbio/sources.FUJITSU
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for FUJITSU.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c      \
+   fort2c.c      \
+   lwsize.c   \
+   mvchars.c     \
+   pbio.c        \
+   readany.c     \
+   readbufr.c    \
+   readcrex.c \
+   readgrib.c    \
+   readnext.c    \
+   readprod.c    \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.VPP5000 b/pbio/sources.VPP5000
new file mode 100755
index 0000000..0296591
--- /dev/null
+++ b/pbio/sources.VPP5000
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for FUJITSU.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c      \
+   fort2c.c      \
+   lwsize.c   \
+   mvchars.c     \
+   pbio.c        \
+   readany.c     \
+   readbufr.c    \
+   readcrex.c \
+   readgrib.c    \
+   readnext.c    \
+   readprod.c    \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.decalpha b/pbio/sources.decalpha
new file mode 100755
index 0000000..0ff0334
--- /dev/null
+++ b/pbio/sources.decalpha
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for decalpha.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte_alpha.c
diff --git a/pbio/sources.decmips b/pbio/sources.decmips
new file mode 100755
index 0000000..b3199df
--- /dev/null
+++ b/pbio/sources.decmips
@@ -0,0 +1,35 @@
+#
+#   Sources for libemos/pbio for decmips
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte_alpha.c
diff --git a/pbio/sources.hpia64 b/pbio/sources.hpia64
new file mode 100755
index 0000000..2a52f13
--- /dev/null
+++ b/pbio/sources.hpia64
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for hppa.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c      \
+   fort2c.c      \
+   lwsize.c   \
+   mvchars.c     \
+   pbio.c        \
+   readany.c     \
+   readbufr.c    \
+   readcrex.c \
+   readgrib.c    \
+   readnext.c    \
+   readprod.c    \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.hppa b/pbio/sources.hppa
new file mode 100755
index 0000000..535ad7e
--- /dev/null
+++ b/pbio/sources.hppa
@@ -0,0 +1,38 @@
+#
+#   Sources for libemos/pbio for hppa.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c      \
+   fort2c_hppa.c      \
+   lwsize.c   \
+   mvchars.c     \
+   pbio.c        \
+   readany.c     \
+   readbufr.c    \
+   readcrex.c \
+   readgrib.c    \
+   readnext.c    \
+   readprod.c    \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
+
+
diff --git a/pbio/sources.i86pc b/pbio/sources.i86pc
new file mode 100755
index 0000000..98c9054
--- /dev/null
+++ b/pbio/sources.i86pc
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for linux
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte_alpha.c
diff --git a/pbio/sources.ibm_power4 b/pbio/sources.ibm_power4
new file mode 100755
index 0000000..6d694c7
--- /dev/null
+++ b/pbio/sources.ibm_power4
@@ -0,0 +1,35 @@
+#
+#   Sources for libemos/pbio for rs6000.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.ibm_power6 b/pbio/sources.ibm_power6
new file mode 100755
index 0000000..6d694c7
--- /dev/null
+++ b/pbio/sources.ibm_power6
@@ -0,0 +1,35 @@
+#
+#   Sources for libemos/pbio for rs6000.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.ibm_power7 b/pbio/sources.ibm_power7
new file mode 100755
index 0000000..6d694c7
--- /dev/null
+++ b/pbio/sources.ibm_power7
@@ -0,0 +1,35 @@
+#
+#   Sources for libemos/pbio for rs6000.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.itanium b/pbio/sources.itanium
new file mode 100755
index 0000000..98c9054
--- /dev/null
+++ b/pbio/sources.itanium
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for linux
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte_alpha.c
diff --git a/pbio/sources.linux b/pbio/sources.linux
new file mode 100755
index 0000000..6748fe1
--- /dev/null
+++ b/pbio/sources.linux
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for linux
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte_le.c
diff --git a/pbio/sources.linux_g77 b/pbio/sources.linux_g77
new file mode 100755
index 0000000..98c9054
--- /dev/null
+++ b/pbio/sources.linux_g77
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for linux
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte_alpha.c
diff --git a/pbio/sources.rs6000 b/pbio/sources.rs6000
new file mode 100755
index 0000000..6d694c7
--- /dev/null
+++ b/pbio/sources.rs6000
@@ -0,0 +1,35 @@
+#
+#   Sources for libemos/pbio for rs6000.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.sgimips b/pbio/sources.sgimips
new file mode 100755
index 0000000..5dcabd0
--- /dev/null
+++ b/pbio/sources.sgimips
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for sgimips.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c      \
+   fort2c.c      \
+   lwsize.c   \
+   mvchars.c     \
+   pbio.c        \
+   readany.c     \
+   readbufr.c    \
+   readcrex.c \
+   readgrib.c    \
+   readnext.c    \
+   readprod.c    \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c
diff --git a/pbio/sources.sun4 b/pbio/sources.sun4
new file mode 100755
index 0000000..7a91277
--- /dev/null
+++ b/pbio/sources.sun4
@@ -0,0 +1,36 @@
+#
+#   Sources for libemos/pbio for sun4.
+#
+
+HEADERS      = \
+   bufrgrib.h \
+   fort2c.h
+
+SOURCES.F    = \
+   blokex.F \
+   pbbufr.F \
+   pbcrex.F \
+   pbgrib.F \
+   pbionum.F \
+   emosnum.F \
+   pbpseu.F
+
+SOURCES.f    = 
+
+SOURCES.c    = \
+   PBGroutines.c \
+   extras.c   \
+   fort2c.c   \
+   lwsize.c   \
+   mvchars.c  \
+   pbio.c     \
+   readany.c  \
+   readbufr.c \
+   readcrex.c \
+   readgrib.c \
+   readnext.c \
+   readprod.c \
+   recheckLength.c
+
+FASTSRC.c    = \
+   gbyte.c

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/emos.git



More information about the debian-science-commits mailing list